Projektdateien hinzufügen.

This commit is contained in:
Manuel Kamper 2019-12-27 23:04:14 +01:00
parent 087714fe7f
commit 27d1508ce6
27 changed files with 4713 additions and 0 deletions

View File

@ -0,0 +1,25 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 16
VisualStudioVersion = 16.0.29613.14
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Mk0.Software.OnlineUpdater", "Mk0.Software.OnlineUpdater\Mk0.Software.OnlineUpdater.csproj", "{F59DCD1B-931C-4A49-9D55-DEAA229218F6}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{F59DCD1B-931C-4A49-9D55-DEAA229218F6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{F59DCD1B-931C-4A49-9D55-DEAA229218F6}.Debug|Any CPU.Build.0 = Debug|Any CPU
{F59DCD1B-931C-4A49-9D55-DEAA229218F6}.Release|Any CPU.ActiveCfg = Release|Any CPU
{F59DCD1B-931C-4A49-9D55-DEAA229218F6}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {46EFBFE7-956E-4236-AEB1-200F0C7AE661}
EndGlobalSection
EndGlobal

View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" />
</startup>
</configuration>

View File

@ -0,0 +1,88 @@
namespace Mk0.Software.OnlineUpdater
{
partial class DownloadUpdateDialog
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(DownloadUpdateDialog));
this.pictureBoxIcon = new System.Windows.Forms.PictureBox();
this.progressBar = new System.Windows.Forms.ProgressBar();
this.labelInformation = new System.Windows.Forms.Label();
this.labelSize = new System.Windows.Forms.Label();
((System.ComponentModel.ISupportInitialize)(this.pictureBoxIcon)).BeginInit();
this.SuspendLayout();
//
// pictureBoxIcon
//
this.pictureBoxIcon.Image = Properties.Resources.download_32;
resources.ApplyResources(this.pictureBoxIcon, "pictureBoxIcon");
this.pictureBoxIcon.Name = "pictureBoxIcon";
this.pictureBoxIcon.TabStop = false;
//
// progressBar
//
resources.ApplyResources(this.progressBar, "progressBar");
this.progressBar.Name = "progressBar";
//
// labelInformation
//
resources.ApplyResources(this.labelInformation, "labelInformation");
this.labelInformation.Name = "labelInformation";
//
// labelSize
//
resources.ApplyResources(this.labelSize, "labelSize");
this.labelSize.Name = "labelSize";
//
// DownloadUpdateDialog
//
resources.ApplyResources(this, "$this");
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.Controls.Add(this.labelSize);
this.Controls.Add(this.labelInformation);
this.Controls.Add(this.progressBar);
this.Controls.Add(this.pictureBoxIcon);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
this.MaximizeBox = false;
this.MinimizeBox = false;
this.Name = "DownloadUpdateDialog";
this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.DownloadUpdateDialog_FormClosing);
this.Load += new System.EventHandler(this.DownloadUpdateDialogLoad);
((System.ComponentModel.ISupportInitialize)(this.pictureBoxIcon)).EndInit();
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.PictureBox pictureBoxIcon;
private System.Windows.Forms.ProgressBar progressBar;
private System.Windows.Forms.Label labelInformation;
private System.Windows.Forms.Label labelSize;
}
}

View File

@ -0,0 +1,324 @@
using System;
using System.ComponentModel;
using System.Diagnostics;
using System.Globalization;
using System.IO;
using System.Net;
using System.Net.Cache;
using System.Net.Mime;
using System.Security.Cryptography;
using System.Text;
using System.Windows.Forms;
using Mk0.Software.OnlineUpdater.Properties;
namespace Mk0.Software.OnlineUpdater
{
internal partial class DownloadUpdateDialog : Form
{
private readonly string _downloadURL;
private string _tempFile;
private MyWebClient _webClient;
private DateTime _startedAt;
public DownloadUpdateDialog(string downloadURL)
{
InitializeComponent();
_downloadURL = downloadURL;
if (AutoUpdater.Mandatory && AutoUpdater.UpdateMode == Mode.ForcedDownload)
{
ControlBox = false;
}
}
private void DownloadUpdateDialogLoad(object sender, EventArgs e)
{
var uri = new Uri(_downloadURL);
if (uri.Scheme.Equals(Uri.UriSchemeFtp))
{
_webClient = new MyWebClient { Credentials = AutoUpdater.FtpCredentials };
}
else
{
_webClient = new MyWebClient();
if (uri.Scheme.Equals(Uri.UriSchemeHttp) || uri.Scheme.Equals(Uri.UriSchemeHttps))
{
if (AutoUpdater.BasicAuthDownload != null)
{
_webClient.Headers[HttpRequestHeader.Authorization] = AutoUpdater.BasicAuthDownload.ToString();
}
_webClient.Headers[HttpRequestHeader.UserAgent] = AutoUpdater.GetUserAgent();
}
}
_webClient.CachePolicy = new RequestCachePolicy(RequestCacheLevel.NoCacheNoStore);
if (AutoUpdater.Proxy != null)
{
_webClient.Proxy = AutoUpdater.Proxy;
}
if (string.IsNullOrEmpty(AutoUpdater.DownloadPath))
{
_tempFile = Path.GetTempFileName();
}
else
{
_tempFile = Path.Combine(AutoUpdater.DownloadPath, $"{Guid.NewGuid().ToString()}.tmp");
if (!Directory.Exists(AutoUpdater.DownloadPath))
{
Directory.CreateDirectory(AutoUpdater.DownloadPath);
}
}
_webClient.DownloadProgressChanged += OnDownloadProgressChanged;
_webClient.DownloadFileCompleted += WebClientOnDownloadFileCompleted;
_webClient.DownloadFileAsync(uri, _tempFile);
}
private void OnDownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e)
{
if (_startedAt == default(DateTime))
{
_startedAt = DateTime.Now;
}
else
{
var timeSpan = DateTime.Now - _startedAt;
long totalSeconds = (long)timeSpan.TotalSeconds;
if (totalSeconds > 0)
{
var bytesPerSecond = e.BytesReceived / totalSeconds;
labelInformation.Text =
string.Format(Resources.DownloadSpeedMessage, BytesToString(bytesPerSecond));
}
}
labelSize.Text = $@"{BytesToString(e.BytesReceived)} / {BytesToString(e.TotalBytesToReceive)}";
progressBar.Value = e.ProgressPercentage;
}
private void WebClientOnDownloadFileCompleted(object sender, AsyncCompletedEventArgs asyncCompletedEventArgs)
{
if (asyncCompletedEventArgs.Cancelled)
{
return;
}
if (asyncCompletedEventArgs.Error != null)
{
MessageBox.Show(asyncCompletedEventArgs.Error.Message,
asyncCompletedEventArgs.Error.GetType().ToString(), MessageBoxButtons.OK,
MessageBoxIcon.Error);
_webClient = null;
Close();
return;
}
if (!string.IsNullOrEmpty(AutoUpdater.Checksum))
{
if (!CompareChecksum(_tempFile, AutoUpdater.Checksum))
{
_webClient = null;
Close();
return;
}
}
ContentDisposition contentDisposition = null;
if (_webClient.ResponseHeaders["Content-Disposition"] != null)
{
contentDisposition = new ContentDisposition(_webClient.ResponseHeaders["Content-Disposition"]);
}
var fileName = string.IsNullOrEmpty(contentDisposition?.FileName)
? Path.GetFileName(_webClient.ResponseUri.LocalPath)
: contentDisposition.FileName;
var tempPath =
Path.Combine(
string.IsNullOrEmpty(AutoUpdater.DownloadPath) ? Path.GetTempPath() : AutoUpdater.DownloadPath,
fileName);
try
{
if (File.Exists(tempPath))
{
File.Delete(tempPath);
}
File.Move(_tempFile, tempPath);
}
catch (Exception e)
{
MessageBox.Show(e.Message, e.GetType().ToString(), MessageBoxButtons.OK, MessageBoxIcon.Error);
_webClient = null;
Close();
return;
}
AutoUpdater.InstallerArgs = AutoUpdater.InstallerArgs.Replace("%path%",
Path.GetDirectoryName(Process.GetCurrentProcess().MainModule.FileName));
var processStartInfo = new ProcessStartInfo
{
FileName = tempPath,
UseShellExecute = true,
Arguments = AutoUpdater.InstallerArgs
};
var extension = Path.GetExtension(tempPath);
if (extension.Equals(".zip", StringComparison.OrdinalIgnoreCase))
{
string installerPath = Path.Combine(Path.GetDirectoryName(tempPath), "ZipExtractor.exe");
try
{
File.WriteAllBytes(installerPath, Resources.Unzipper);
}
catch (Exception e)
{
MessageBox.Show(e.Message, e.GetType().ToString(), MessageBoxButtons.OK, MessageBoxIcon.Error);
_webClient = null;
Close();
return;
}
StringBuilder arguments =
new StringBuilder($"\"{tempPath}\" \"{Process.GetCurrentProcess().MainModule.FileName}\"");
string[] args = Environment.GetCommandLineArgs();
for (int i = 1; i < args.Length; i++)
{
if (i.Equals(1))
{
arguments.Append(" \"");
}
arguments.Append(args[i]);
arguments.Append(i.Equals(args.Length - 1) ? "\"" : " ");
}
processStartInfo = new ProcessStartInfo
{
FileName = installerPath,
UseShellExecute = true,
Arguments = arguments.ToString()
};
}
else if (extension.Equals(".msi", StringComparison.OrdinalIgnoreCase))
{
processStartInfo = new ProcessStartInfo
{
FileName = "msiexec",
Arguments = $"/i \"{tempPath}\""
};
if (!string.IsNullOrEmpty(AutoUpdater.InstallerArgs))
{
processStartInfo.Arguments += " " + AutoUpdater.InstallerArgs;
}
}
if (AutoUpdater.RunUpdateAsAdmin)
{
processStartInfo.Verb = "runas";
}
try
{
Process.Start(processStartInfo);
}
catch (Win32Exception exception)
{
_webClient = null;
if (exception.NativeErrorCode != 1223)
throw;
}
Close();
}
private static String BytesToString(long byteCount)
{
string[] suf = { "B", "KB", "MB", "GB", "TB", "PB", "EB" };
if (byteCount == 0)
return "0" + suf[0];
long bytes = Math.Abs(byteCount);
int place = Convert.ToInt32(Math.Floor(Math.Log(bytes, 1024)));
double num = Math.Round(bytes / Math.Pow(1024, place), 1);
return $"{(Math.Sign(byteCount) * num).ToString(CultureInfo.InvariantCulture)} {suf[place]}";
}
private static bool CompareChecksum(string fileName, string checksum)
{
using (var hashAlgorithm = HashAlgorithm.Create(AutoUpdater.HashingAlgorithm))
{
using (var stream = File.OpenRead(fileName))
{
if (hashAlgorithm != null)
{
var hash = hashAlgorithm.ComputeHash(stream);
var fileChecksum = BitConverter.ToString(hash).Replace("-", String.Empty).ToLowerInvariant();
if (fileChecksum == checksum.ToLower()) return true;
MessageBox.Show(Resources.FileIntegrityCheckFailedMessage,
Resources.FileIntegrityCheckFailedCaption, MessageBoxButtons.OK, MessageBoxIcon.Error);
}
else
{
if (AutoUpdater.ReportErrors)
{
MessageBox.Show(Resources.HashAlgorithmNotSupportedMessage,
Resources.HashAlgorithmNotSupportedCaption, MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
return false;
}
}
}
private void DownloadUpdateDialog_FormClosing(object sender, FormClosingEventArgs e)
{
if (_webClient == null)
{
DialogResult = DialogResult.Cancel;
}
else if (_webClient.IsBusy)
{
_webClient.CancelAsync();
DialogResult = DialogResult.Cancel;
}
else
{
DialogResult = DialogResult.OK;
}
}
}
/// <inheritdoc />
public class MyWebClient : WebClient
{
/// <summary>
/// Response Uri after any redirects.
/// </summary>
public Uri ResponseUri;
/// <inheritdoc />
protected override WebResponse GetWebResponse(WebRequest request, IAsyncResult result)
{
WebResponse webResponse = base.GetWebResponse(request, result);
ResponseUri = webResponse.ResponseUri;
return webResponse;
}
}
}

View File

@ -0,0 +1,799 @@
<?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>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="pictureBoxIcon.Location" type="System.Drawing.Point, System.Drawing">
<value>14, 14</value>
</data>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="pictureBoxIcon.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>4, 4, 4, 4</value>
</data>
<data name="pictureBoxIcon.Size" type="System.Drawing.Size, System.Drawing">
<value>59, 62</value>
</data>
<data name="pictureBoxIcon.SizeMode" type="System.Windows.Forms.PictureBoxSizeMode, System.Windows.Forms">
<value>CenterImage</value>
</data>
<assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="pictureBoxIcon.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
</data>
<data name="&gt;&gt;pictureBoxIcon.Name" xml:space="preserve">
<value>pictureBoxIcon</value>
</data>
<data name="&gt;&gt;pictureBoxIcon.Type" xml:space="preserve">
<value>System.Windows.Forms.PictureBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;pictureBoxIcon.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;pictureBoxIcon.ZOrder" xml:space="preserve">
<value>3</value>
</data>
<data name="progressBar.Location" type="System.Drawing.Point, System.Drawing">
<value>81, 45</value>
</data>
<data name="progressBar.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>4, 4, 4, 4</value>
</data>
<data name="progressBar.Size" type="System.Drawing.Size, System.Drawing">
<value>319, 26</value>
</data>
<data name="progressBar.TabIndex" type="System.Int32, mscorlib">
<value>1</value>
</data>
<data name="&gt;&gt;progressBar.Name" xml:space="preserve">
<value>progressBar</value>
</data>
<data name="&gt;&gt;progressBar.Type" xml:space="preserve">
<value>System.Windows.Forms.ProgressBar, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;progressBar.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;progressBar.ZOrder" xml:space="preserve">
<value>2</value>
</data>
<data name="labelInformation.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="labelInformation.Font" type="System.Drawing.Font, System.Drawing">
<value>Segoe UI, 9pt</value>
</data>
<data name="labelInformation.Location" type="System.Drawing.Point, System.Drawing">
<value>78, 14</value>
</data>
<data name="labelInformation.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>4, 0, 4, 0</value>
</data>
<data name="labelInformation.Size" type="System.Drawing.Size, System.Drawing">
<value>128, 15</value>
</data>
<data name="labelInformation.TabIndex" type="System.Int32, mscorlib">
<value>2</value>
</data>
<data name="labelInformation.Text" xml:space="preserve">
<value>Update wird heruntergeladen...</value>
</data>
<data name="&gt;&gt;labelInformation.Name" xml:space="preserve">
<value>labelInformation</value>
</data>
<data name="&gt;&gt;labelInformation.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;labelInformation.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;labelInformation.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="labelSize.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Right</value>
</data>
<data name="labelSize.Location" type="System.Drawing.Point, System.Drawing">
<value>265, 14</value>
</data>
<data name="labelSize.Size" type="System.Drawing.Size, System.Drawing">
<value>135, 15</value>
</data>
<data name="labelSize.TabIndex" type="System.Int32, mscorlib">
<value>3</value>
</data>
<data name="labelSize.TextAlign" type="System.Drawing.ContentAlignment, System.Drawing">
<value>MiddleRight</value>
</data>
<data name="&gt;&gt;labelSize.Name" xml:space="preserve">
<value>labelSize</value>
</data>
<data name="&gt;&gt;labelSize.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;labelSize.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;labelSize.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="$this.Localizable" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
<value>7, 15</value>
</data>
<data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing">
<value>413, 90</value>
</data>
<data name="$this.Font" type="System.Drawing.Font, System.Drawing">
<value>Segoe UI, 9pt</value>
</data>
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
AAABAAQAEBAAAAAAIABoBAAARgAAACAgAAAAACAAqBAAAK4EAAAwMAAAAAAgAKglAABWFQAAQEAAAAAA
IAAoQgAA/joAACgAAAAQAAAAIAAAAAEAIAAAAAAAQAQAAAAAAAAAAAAAAAAAAAAAAAD///8B////Af//
/wH///8B////Af///wEAAAADAAAAAwAAAAMAAAADAAAAA////wH///8B////Af///wH///8B////Af//
/wH///8BAAAAAwAAAAkAAAANAAAADwAAABEABQ0TAEqmPQAAAA0AAAAJAAAABf///wH///8B////Af//
/wH///8BAAAABwAAAA0ASKJBBVGsWwAAAB0AAAAhCV2/hxBv2MUAAAAZAAAAFQAAAA8AAAAHAAAAA///
/wH///8BAAAAAwAAAAkAAAARAEqnVyuO7/8Xbc2vA0ibbxuF7vsVfur7ACBILwAAABkAFzQZADR2GQAA
AAX///8B////Af///wEAAAAJAAAADwBKo0sokvT/IJH3/yeO8P8Wi/f/HYz1/xRs0LkWdt7LFHbj9wBT
u0cAAAAD////Af///wEAXM4RAFrITxJpzW8eddWlMpn0/x+U+P8ilvj/UrH6/xeN9/8Xi/b/DIP1/xh5
480AAAUF////Af///wH///8BAFzPDS+F4sU/ovj/LJz4/yea+P8nmvn/f8f8//H5/v8/pvr/Foz3/x+N
9f8KZtNt////Af///wH///8B////Af///wEAXM4TM4vm0zOh+f8toPn/Qab5//P5/v//////yef9/x2R
9/8YjPb/IYbt+Rp13ZUAXM4b////Af///wH///8B////ASB32otEqfj/M6X6/0Ok+f+Uyfv//////2Wz
+v8olff/FIv3/xeJ9v8nh+z5D2nVj////wH///8B////ASB32nNGpPX/L6L6/zao+v86q/v/aLb6////
//8nm/j/HZL4/yuV9v8ged2pAFvOH////wH///8B////AQBbzR8yhN+3QJXp10Ga7fdGrfr/Naf6/0un
+f+q0vv/IJX4/xyR9/8ikff/KH3ei////wH///8B////Af///wH///8B////Af///wEAXM5DS6v4/y6h
+f84pPn/Jpr4/zCd+P81k+3/M5f1/zuQ6usAW84J////Af///wH///8B////Af///wH///8BAFzOU1Wv
+f9Gne7vOovjxTWf+P88mfH/AFvNMQJfz0kieNuFAFzOM////wH///8B////Af///wH///8B////AQNf
z2M/jeKtAFzOGwBbzg87kOjbP5Loz////wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wEAW8wH////Af///wH///8BBWHQMxhu1nf///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAD//wAA
//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//ygA
AAAgAAAAQAAAAAEAIAAAAAAAgBAAAAAAAAAAAAAAAAAAAAAAAAD///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wEAAAADAAAAAwAAAAUAAAAFAAAABwAAAAcAAAAHAAAABwAA
AAcAAAAFAAAAAwAAAAP///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////AQAAAAMAAAAFAAAABwAAAAkAAAALAAAACwAAAA0AAAANAAAADwAA
AA8AAAANAAAADQAAAA0AAAALAAAACQAAAAcAAAAFAAAAA////wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wEAAAAFAAAABwAAAAsAAAANAAAADwAAABEAAAATAAAAEwAA
ABUAAAAVAAAAFQAPJhkAWci7ACxgIQAAABEAAAARAAAADwAAAAsAAAAJAAAABwAAAAP///8B////Af//
/wH///8B////Af///wH///8B////Af///wEAAAADAAAABwAAAAkAAAANAAAADwBHnj0AH0YdAAAAFwAA
ABkAAAAbAAAAHQAAAB0AAAAdAFW+mQ5v3P0ATq5rAAAAGQAAABcAAAATAAAAEQAAAA0AAAALAAAABwAA
AAX///8B////Af///wH///8B////Af///wH///8BAAAAAwAAAAUAAAAJAAAADQAAAA8AAAATAFfEpQhj
0N8ARpxVAAAAHwAAACEAAAAjAAAAJQBIoGsTduL9JIz0/wJYwa8AAAAdAAAAGwAAABcAAAAVAAAAEQAA
AA8AAAALAAAABwAAAAX///8B////Af///wH///8B////Af///wEAAAADAAAABwAAAAsAAAAPAAAAEQAA
ABUAVsCbOpfz/x984f0BVr2lABg4MwAAACkALmhJDWvX8SKO9v8XiPb/DmvY8QAIFSUAAAAfAAAAGwAA
ABcAAAATAAAAEQAAAA0AAAAJAAAABf///wH///8B////Af///wH///8B////AQAAAAMAAAAHAAAACwAA
AA8AAAATAAAAFQBUvZEylPL/IZD3/zKR8P8PadLlAESYcQZgy9ktk/T/EIb2/xCF9v8efuX9AEGPWQAA
AB8AAAAbAAAAFwAAABUAOH4pAE2tQQAAAAkAAAAFAAAAA////wH///8B////Af///wH///8BAAAAAwAA
AAcAAAALAAAADwAAABEAAAAVAFW8iTeW8f8WjPf/GY33/zOa9/8ng+X/MZDv/xqN9/8RiPb/EIf2/yqO
8f8AVLufAD6JSwBRtX0AWMStCGbU4RBu3P8AWsvBAAAACQAAAAX///8B////Af///wH///8B////Af//
/wH///8BAAAABQAAAAkAAAANAAAADwAAABMAVbx9O5fw/xqP9/8aj/f/Go/3/ySU9/8hkvf/Foz3/xWL
9/8Tivf/J5P3/xt43/8efOP9JYjt/yKL9f8difb/GXnk/QBTuUkAAAAHAAAAA////wH///8B////Af//
/wH///8B////Af///wEAAAADAAAABQAAAAkAAAALABUtEwBXwYk/mO7/HZL4/x6T+P8dkvj/HZL4/xyR
+P8tofn/HpP3/xaM9/8Vi/f/IZD3/xaJ9v8Mg/b/CYH1/x+L9f8JZdLRAAAKBwAAAAX///8B////Af//
/wH///8B////Af///wH///8BAFzOQQBczokAXMynDWfTwxlz2eUie979LYTi/02l9P8hlvj/IZb4/yGW
+P8glfj/L6H6/7Pf/f9Ksfv/GpD3/xeN9/8Uivf/EYj2/w6F9v8NhPb/J4Xq/QBYyGUAAAAD////Af//
/wH///8B////Af///wH///8B////Af///wEAXM81EGvW62ez+P9Jp/n/P6P5/zig+P8xnvj/J5r4/yWZ
+f8lmfn/JZn5/yqd+f+Jzv3//////8jo/v8vofr/GY/3/xaM9/8Tivf/EIf2/yWQ9v8Tb9npAFi/Cf//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAXM45Hnfb81Gr+f8ilvj/I5j4/yWZ
+f8nm/n/KJz5/ymc+f8pnPn/VLX7//b7/v///////////5DR/f8kmPn/GI73/xWL9/8SiPb/NpTx/wBc
zrcAWs8J////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAXM5HJn7e91Su
+v8mmvn/KZz5/yqe+f8sn/n/LaD5/yuc+P/S6v3/////////////////+Pz+/1a1+/8ckfj/F433/xOK
9/8ok/f/NI7s/RJu2OUAW85tAF7QB////wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wEAXM5VL4bi/VSw+v8rn/n/LqH6/y+i+v8kmPn/i8X6////////////////////////////1+z+/yiZ
+P8Yjvf/FYv3/xGI9v8Sh/b/K5L3/zCL6/0Qa9fhAFzOZQBZzAX///8B////Af///wH///8B////Af//
/wH///8B////Af///wEAXM6xYrD0/zCh+v8xpPr/M6X6/xmI9v+m0Pv/qtL7/+Pw/v///////////6zU
+/+t1fz/Vqv5/xiO9/8WjPf/Eon3/w+F9v8Lgvb/EIT1/0Cb9/8jet/9AFzNvf///wH///8B////Af//
/wH///8B////Af///wH///8BAFvNeUeX6P9Pr/r/MKP6/zOm+v82qPv/K575/ySZ+f8Xjvf/rNP8////
////////I5f5/xiN9/8WjPf/Go/3/xeN9/8Tiff/FIj2/zGV9/83j+z9FG3Y5wBbzXMAWcwL////Af//
/wH///8B////Af///wH///8B////AQBczm1Bk+f/VLD6/y2g+v8xpPr/Naf6/ziq+/87rPv/Oav7/yWY
+f+s0/z///////////8vofr/I5f4/x+U+P8bkPj/F433/zSa+P9Alu39F3HZ5wBbznMAXNEL////Af//
/wH///8B////Af///wH///8B////Af///wEAXM5jO43k/Vix+v8qnfn/LqD6/zGk+v81p/r/OKr7/zus
+/85q/v/JZj5/6zT/P///////////yqd+P8jl/j/H5T4/xuQ+P8Xjff/S6Dy/wBczbEAXNEL////Af//
/wH///8B////Af///wH///8B////Af///wH///8BAFvNUxlz2P13uvb/aLj5/2O3+v9atPv/ULH6/z6q
+v82qPv/OKn7/zeo+/8jmPj/rNP8////////////JJj4/yKX+P8ek/j/G5D3/xeN9/8/n/j/GXHY2wBt
2wP///8B////Af///wH///8B////Af///wH///8B////Af///wEAW84nAFzOYwBczYEAXM6fEGrTvSR7
3OMyhd/9cr34/zOl+v80pvr/M6X6/yWa+f86l/f/VaX4/1Wl+P8Zj/f/IZb4/x2S+P8aj/f/Foz3/xuN
9/9Ckuj/AFzOS////wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////AQBczn9ptfX/L6L6/zCj+v8wovr/LqH6/yyf+f8pnfn/Jpr5/yOX+P8ml/j/PKH5/yeW
9/8Vi/f/EYj2/0qi9v8NZdGz////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8BAFvOjWm39/8sn/n/LaD5/y2g+f9Nrfr/OqX5/yeb+f8kmPj/IZb4/1iu
+f8wg+D/QpHm/VSk8v9Sp/j/Uaf4/zSG4v0AW84j////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wEAXM6babj5/yic+f85pPn/bLj4/ziJ4f1osfT/Lpz5/yGW
+P8flPj/X6nw/wBczXEAW845AF3OdQVg0K8dddvtLX/e/wBczov///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////AQBczqtqufr/V7H6/1ii7P8QadTBAFzPORZv
199ntvn/IJT4/zSd+P8+jOL9AFvNG////wH///8B////Af///wEAW84pAFzOP////wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BBWLRt3y89v8rfdzvAFzPZf//
/wH///8BAFvOOS6D4PlRq/n/U6v5/xlw1sf///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wECXc7RCmTSqwBb
zhn///8B////Af///wH///8BAFvNc02b6v9orvP/AFzOef///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQBb
zBv///8B////Af///wH///8B////Af///wH///8BBWHRsy5+3f0AXM4n////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAW84TAFzOs////wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAoAAAAMAAAAGAAAAABACAAAAAAAIAlAAAAAAAAAAAAAAAAAAAAAAAA////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wEAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADAAAAAwAAAAP///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wEAAAADAAAAAwAAAAMAAAADAAAABQAAAAUAAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAA
AAcAAAAFAAAABQAAAAUAAAADAAAAA////wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8BAAAAAwAAAAUAAAAFAAAABwAAAAkAAAAJAAAACwAAAAsAAAANAAAADQAAAA0AAAANAAAADQAA
AA0AAAANAAAADQAAAAsAAAALAAAACwAAAAkAAAAJAAAABwAAAAUAAAAFAAAAA////wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8BAAAAAwAAAAMAAAAFAAAABwAAAAkAAAAJAAAACwAAAA0AAAANAAAADwAAAA8AAAARAAAAEQAA
ABEAAAARAAAAEQAAABEAAAARAEWaNQBGnjcAAgQPAAAADwAAAA0AAAANAAAACwAAAAkAAAAJAAAABwAA
AAUAAAAD////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wEAAAADAAAABQAAAAcAAAAJAAAACwAAAA0AAAANAAAADwAAABEAAAARAAAAEwAA
ABMAAAAVAAAAFwAAABUAAAAVAAAAFQAAABUAG0UfAFrL1wBWwZUAI04fAAAAEwAAABEAAAARAAAADwAA
AA0AAAANAAAACwAAAAkAAAAHAAAABQAAAAP///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8BAAAAAwAAAAUAAAAHAAAABwAAAAsAAAALAAAADQAPIRMAP40vABo7GwAA
ABUAAAAXAAAAGQAAABkAAAAZAAAAGwAAABsAAAAdAAAAGwAiTykAV8KpCWnX/QVgzdMAPYc9AAAAFwAA
ABcAAAAVAAAAEwAAABEAAAAPAAAADQAAAA0AAAALAAAABwAAAAcAAAAD////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8BAAAABQAAAAcAAAAHAAAACwAAAA0AAAAPAAAAEQA1
dScAWMavAFS8iQA2ejUAAQMbAAAAHQAAAB0AAAAfAAAAHwAAACEAAAAhABQsKQBQsoEHZ9bvIIbv/w5t
2vcASKFdAAAAGwAAABkAAAAZAAAAFwAAABUAAAATAAAADwAAAA8AAAANAAAACQAAAAkAAAAHAAAAA///
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAAAADAAAABQAAAAcAAAAJAAAADQAA
AA8AAAARAAAAEwA3fS8AWsrRD2zY9wFax8MARppXAAAAHwAAACEAAAAjAAAAJQAAACUAAAAlAEGQWwVi
0OUeg+v/IYz1/xZ34f8BVLmTAAAAHwAAAB0AAAAbAAAAGQAAABcAAAAVAAAAEwAAABEAAAAPAAAACwAA
AAkAAAAHAAAABQAAAAP///8B////Af///wH///8B////Af///wH///8B////AQAAAAMAAAAFAAAABwAA
AAsAAAALAAAADQAAABEAAAATAAAAFQAsYykAWcnNN5Xy/y2K6v0Pa9f9AVS4lwAxb0MABxEpAAAAJwAA
ACkAKF1DBGDN5R+B6P0hjfb/EIX2/x+D6/8GYc/hAAYPJQAAACEAAAAdAAAAGwAAABkAAAAXAAAAFQAA
ABMAAAAPAAAADQAAAAsAAAAJAAAABwAAAAX///8B////Af///wH///8B////Af///wH///8B////Af//
/wEAAAAFAAAABwAAAAkAAAANAAAADwAAABEAAAATAAAAFQAfRyMAWcjLM5Px/zWZ9/8yk/H/HHfe+wdf
ycsAR6B1AAYPLQAfRj8AUrmxGXri/ymR9f8Sh/b/D4X2/yOL8/8LaNf/ADNyQwAAACEAAAAfAAAAHQAA
ABkAAAAXAAAAFQAAABMAAAARAAAADwAAAAsAAAAJAAAABwAAAAMAAAAD////Af///wH///8B////Af//
/wH///8B////AQAAAAMAAAAFAAAABwAAAAkAAAANAAAADwAAABEAAAATAAAAFQANIh0AWcfHMJHv/yeT
9/8djvf/NZf1/y6L6v8NaNLrAFO3pQBQtKENa9b1Mpb1/xuM9v8Phvb/DoX2/yKO9v8Xdd/9AE6rfwAA
ACEAAAAfAAAAHQAAABkAAAAXAAAAFwAdPRsAR6A9AFS+bQBAkSMAAAAJAAAABwAAAAMAAAAD////Af//
/wH///8B////Af///wH///8B////AQAAAAMAAAAFAAAABwAAAAkAAAALAAAADwAAABEAAAATAAAAFQAA
ABcAWsfDMZDu/yuW9/8Vi/b/F4z3/yqV9/88nfb/IHzg/RJv2v80lPH/I5H3/xKI9/8Rh/b/EIf2/xyM
9v8piez/AFjFxQAkUTMAL2k5AECRSwBMqmMAVb6PBF/NyQdk1PUHZdX/AFvN6wBUvl0AAAAJAAAABwAA
AAX///8B////Af///wH///8B////Af///wH///8B////Af///wEAAAADAAAABwAAAAkAAAALAAAADQAA
AA8AAAARAAAAFQAAABcAWse5MZDs/zCZ+P8Yjff/GI73/xiO9/8ikvf/Npz3/zmb9f8vmPf/FYv3/xSK
9/8Tiff/EYj2/xaK9v8ylvX/BV7M6wBWwbEDXMe/DGnW6RFw3f0XduH/HH/p/SKG7/8be+b9AFrKrwAw
bBUAAAAJAAAABQAAAAP///8B////Af///wH///8B////Af///wH///8B////Af///wEAAAADAAAABQAA
AAcAAAAJAAAACwAAAA8AAAAPAAAAEQAAABUAWsexMo7r/zSc+P8aj/f/Go/3/xqP9/8aj/f/HZH3/yGT
9/8bj/f/F433/xaM9/8Vi/f/FIr3/xOJ9v8vl/f/KIXo/yWE6P8sjO39LI/y/yWN9P8cifX/FIT1/yKK
9P8Oa9n/AFS7UwAAAAkAAAAHAAAABQAAAAP///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8BAAAAAwAAAAUAAAAHAAAACQAAAAsAAAANAAYNDwAdQRkAWsevMY3p/zug+f8dkvj/HZL3/x2S
+P8ckvj/HJH3/xyR+P8bkfj/JZn4/ySY+P8Zjvf/Foz3/xSL9/8Wi/f/KZT3/yOQ9v8Xivb/DIP2/wqB
9v8IgPX/E4X1/yGB6f8GYtDPAAARCQAAAAcAAAAFAAAAA////wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8BAF3FBwBVvBkAVr8tAFbBRwBWwVsAWMRvAFjFhQBYxZUAW8znM47p/z+j
+f8flPf/H5T3/x+U+P8flPf/HpP3/x6T+P8lmvn/Ubf7/1e4+/8lmvj/GI73/xaM9/8Vi/f/E4n3/xGI
9v8Phvb/DYT2/wuD9v8Jgfb/JYz0/xd03vsBWcZtAAAABQAAAAMAAAAD////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wEAXM6PAFzOwwBbzcsBXc7TDmnU3Rt02uklf+D1MYnl/TuS
6f9Fmu3/U6n1/zig+P8hlvf/IZb4/yGW9/8hlvf/IZX4/ySY+P83qPv/u+P9/7He/f9Gr/v/HJH4/xiO
9/8Xjff/FIv3/xOJ9/8RiPb/D4X2/wyE9v8Rhfb/L43v/wtm09EAU74xAAAAA////wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAXM9zC2bT8Uia7f9ntPn/WK75/1Ss
+f9Oqvn/Rab5/z6j+P83oPj/LJv4/ySY+f8kmPj/JJj4/ySY+f8kmPj/JZn5/zin+/+S0f3///////v9
/v+Y1P3/MaP6/xyR9/8Yjvf/Foz3/xSK9/8Siff/EIf2/w+G9v8qk/b/IHvh+QBczIEAV78H////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAVdUDAV3PgR92
2u9Yp/L/QKP5/yGU+P8glPj/IZb4/yOX+P8kmPj/JZn5/yaa+f8mmvn/J5v5/yeb+f8nmvn/MKL6/23C
/P/k8/7////////////v+P7/Ybz8/ymd+f8bkPf/F433/xaM9/8Uivf/EYj2/xiL9v85mPX/CmXT2wBb
zjn///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8BAFzOEwJf0I8adNr1XbD4/zmh+P8ilvj/I5j4/ySZ+P8mmvj/J5v4/yic+P8pnPj/KZz4/ymc
+P8qnfj/SrD7/8Hl/f/8/v7/////////////////w+b+/0iw+/8ilfj/GY/3/xeN9/8Vi/f/E4n2/ySR
9/81j+3/AFzO4QBbzlMAWs8H////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////AQBd0QkAXM6JIHnb+Vut9f8/pPn/JZn4/yeb+f8pnPj/Kp35/yue
+f8rn/n/LJ/5/yue+f8rnfj/otX8//7///////////////7+/v//////+vz+/6XZ/P88qfr/HJH4/xiO
9/8WjPf/E4r3/xmM9/84m/f/Mo3q/xZx2v0HY9LHAFzOSwBbzhcAXs8D////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAWssNBWHQpSqC4PlgsPf/OqT5/ymd
+f8qnvn/LJ/5/y2g+v8toPn/LaD5/yOX+f9csPn/9vr+///////+/v7////////////+/v7//////+v2
/v9ywPv/I5f4/xqP9/8Xjff/FIv3/xKJ9/8Vifb/KZL3/zaV9P8vien9FXDZ7wRf0KkAXM1ZAFnSCf//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAFzNIwVi
0a8uheL9Z7n6/zql+f8sn/n/LaH6/y+i+v8wo/r/J5v4/zKZ+P/F4vz///////7+/v//////////////
///////////////////a7v7/L534/xyS+P8Yjvf/FYz3/xOJ9/8RiPb/D4b2/xSH9v8jjvf/OZXy/y6H
6P0Qa9bnAFzOqQBbzTsAWcsF////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////AQBbzisAW87VUKPv/1ay+v8vofr/MKP6/zGk+v8zpfr/E4b2/3i4+f/S5/3/1Oj9/9zs
/f/4+/7/////////////////1en9/9bq/f/W6v3/hcL6/xqP9/8Zj/f/Foz3/xSK9/8RiPf/D4X2/w2E
9v8Kgvb/DIL1/yqQ9v9CnPb/LILk/QVg0P0AW82X////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8BAFzPEQBczn8fd9rvaLb3/0es+v8wovr/MaT6/zOl+v80p/r/GIz3/yqS
9/8zl/f/MZb2/1Gk+P/c7P3//v7+////////////PJ74/zWY9/80mPf/LZX3/xeM9/8Zjvf/F433/xWL
9/8SiPf/D4b1/w2E9v8Rhfb/J5D2/zaV9P8wiOn9GnLb8wVg0LMAW81b////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8BAFvNdR112e9msPL/Tq76/zGj+v8xo/r/M6b6/zWn
+v83qfv/M6X6/y+h+v8tofr/JZn4/zSX9//V6f3///////7+/v/+/v7/LKD6/x6T+P8dkff/G5D3/xqQ
9/8aj/f/F433/xWL9/8Siff/E4j2/ymS9/9Dnvj/No7r/xhx2v0IY9LNAFrNUQBbzRsAWcwD////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////AQBczQsAXM1rIHfb/2ay9f9Sr/r/LaD6/y+i
+v8xpPr/NKb6/zeo+/84qvv/Oqz7/zqr+/84qvv/LqD6/zaY+P/V6f3/////////////////M6b6/ySY
+f8ilvj/H5T4/x2S+P8akPf/F433/xmN9/8ul/j/SaD0/z6S6/8ZctntAFvOtwBczk0AXNEJ////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAFrNCwBbzWcWcNjpZbD0/1ax
+v8voPn/LaD6/y+i+f8ypPr/NKf6/zeo+/85q/v/PK36/zus+/85q/v/LqH6/zaY+P/V6f3//v7+////
////////MaP5/ySY+P8il/j/H5T3/x2S+P8akPj/F433/y6Y9/9MoPP/Hnbb8wdi0bEAXM5jAFvRD///
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAFzOWRNu
1+deqPD/WrL6/y2e+f8qnfn/LaD6/y+i+v8xpPr/NKb6/zeo+/84qvv/Oqz6/zqr+/84qvv/LqD6/zaY
+P/V6f3///////7+/v/+/v7/LKD5/yOY+P8ilvj/H5T4/xyS9/8akPj/F433/zGZ+P9MnvD/AFzNzwBc
zSUAXNED////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQBY
ywMAW81RC2fT+1ai7P+Bwfj/XbP5/1ax+v9Mrfn/RKr6/0Kq+v9Aqvr/O6n6/zWn+v83qfv/OKn7/zip
+/83qPv/LKD5/zaY+P/V6f3/////////////////Jpr4/yKX+P8ilvj/H5T4/x2S+P8akPf/F433/xyP
9/9Tqfj/GnLY5QBdzlH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////AQBdzwcAW86bCWPR3yt/3fEzheD9Po3j/0mV5v1WoOr9Yqvw/2ey9P9ruPf/ar37/0Ks
+v81p/r/Nqj6/zan+/81p/r/K575/y6U9/+y1vz/1Oj9/9To/f/U6P3/IZb4/yGV+P8hlvj/HpP3/xyR
+P8aj/f/F433/xWL9/85nPj/QZHo/QNfz5UAXc4N////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wEAW84dAFzOMQFdzjkAW81HAFzOawNfzocLZdKlEmzVzxZv
1u0acdf9ZbP0/1e1+v8zpfr/M6X6/zOl+v8ypfr/LJ/5/xaK9v8ji/b/Ko/2/yqP9v8qj/b/Eor3/yGV
9/8glfj/HZL4/xyR9/8Zj/f/Foz3/xSK9/8ZjPf/VqTx/xdv19cAXM4t////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wEAXM6/X63y/1Wz+/8wo/r/MKP6/zCj+v8wovr/L6L6/y6h+v8sn/n/Kp35/yic
+f8mmvj/JJj4/yGW+P8klvj/LZr4/yeW+P8ekff/FYz3/xOJ9/8RiPb/Q5/2/zeH4v8FYM97////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////AQBZ2QUAW87DZLH0/1Cw+v8uofr/LqH6/y6h+f8uofr/LKD5/yyf
+f8qnfn/KJz4/yeb+f8lmfn/Ipf4/yGW+P9Lqfn/Xa31/1ut9/9Uq/j/QaD4/zCY+P8fj/b/KJL2/02c
7v0RadTZAFnMCf///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////AQBb0Q8AW87HabX2/0ut+v8rn/n/LJ/5/yyf
+f8toPn/V7L6/2G2+v83o/n/J5v5/yWZ+f8jl/j/IZb4/y2b+P9tuPn/G3LX/xpx2P8sf9/7SJns/1mo
9P9hr/j/Xa35/2iw9/8keNv7AFvORf///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQBdzxsAXM7Nbrn4/0Oo
+f8pnPn/Lp/5/0aq+v9uuvj/XKXs/1Kf6/9vufn/LJz5/yOX+P8hlvj/H5T4/0Sl+f9bpe7/AFzNsQBa
zCkAW85fAF3OpQBczckJY9LXJn3f80SS6P06iuP/AFzOtQBf0gv///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQBd
zyUAXM7Rcrz6/z6l+f8yoPn/XbT6/2ix8/89jOL9B2LQvQ1o1NNWou3/WbH6/yaY+P8flPj/IpX4/1iu
+f87ieH9AFzOY////wH///8BAF3QAwBdzRMAW805AFzOZwBbzYsCXc6vAFzOuwBczh////8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////AQBbzy8AXM7Vd7/6/1aw+v9wvPr/Up7r/xtx1+8GYdGFAFzPIQBbzlsRatXnb7j3/0Sm
+f8elPj/Kpj4/2Gu9v8ec9f9AFnNGf///wH///8B////Af///wH///8B////AQBZywcAW84ZAFzNKQBc
zQf///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////AQBczjkFYtLXhcT5/2uv8f8uf9zxAFzPqQBczi////8B////Af//
/wEAW851I3nb+Wmz9/83nvj/OJ74/1ih7P0RatS7////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////AQBbzkMIY9HfSJTl/Rtx1tUBXc51AFrOD///
/wH///8B////Af///wEAV84LB2PRsz6P5f9ksvj/WKz4/0GN4/8FYM5v////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQBbzVcBXM7rCGLRowBb
zzMAWs4H////Af///wH///8B////Af///wH///8BAFvNNwxm0tFXo+7/cbX2/yt+3esAXM47////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQBZ
zA8AXMwt////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQBczk8KZdLhU5vp/w1l
0a8AW84Z////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQBd
zwcAXM55CmPR/wBczYkAXM0F////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wEAW84PAFzOmwBbzTf///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8BAAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAA
AAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA
//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAA
AAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA
//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAA
AAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA
//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//KAAAAEAAAACAAAAAAQAgAAAA
AAAAQgAAAAAAAAAAAAAAAAAAAAAAAP///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8BAAAAAwAAAAMAAAADAAAABQAAAAUAAAAFAAAABQAA
AAUAAAAFAAAABQAAAAUAAAAFAAAABQAAAAUAAAADAAAAA////wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wEAAAADAAAAAwAAAAUAAAAFAAAABQAAAAcAAAAHAAAABwAA
AAcAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAHAAAABwAAAAcAAAAHAAAABQAA
AAUAAAAFAAAAA////wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8BAAAAAwAAAAMAAAAFAAAABQAAAAcAAAAHAAAACQAA
AAkAAAAJAAAACwAAAAsAAAALAAAACwAAAA0AAAANAAAADQAAAA0AAAANAAAADQAAAA0AAAALAAAACwAA
AAsAAAALAAAACQAAAAkAAAAJAAAABwAAAAcAAAAFAAAABQAAAAMAAAAD////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAAAADAAAABQAAAAUAAAAHAAAABwAA
AAkAAAAJAAAACwAAAAsAAAANAAAADQAAAA0AAAAPAAAADwAAAA8AAAAPAAAADwAAABEAAAARAAAAEQAA
AA8AAAAPAAAADwAAAA8AAAAPAAAADQAAAA0AAAANAAAACwAAAAsAAAAJAAAACQAAAAcAAAAHAAAABQAA
AAUAAAAD////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAAAAMAAAAFAAAABQAA
AAcAAAAJAAAACQAAAAsAAAALAAAADQAAAA0AAAAPAAAADwAAABEAAAARAAAAEQAAABMAAAATAAAAEwAA
ABMAAAATAAAAEwAAABMAAAATAAAAEwBIn0EAWcirAAwYFQAAABEAAAARAAAADwAAAA8AAAAPAAAADQAA
AA0AAAALAAAACQAAAAkAAAAHAAAABQAAAAUAAAAD////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAAAwAA
AAMAAAAFAAAABwAAAAkAAAAJAAAACwAAAA0AAAANAAAADwAAAA8AAAARAAAAEwAAABMAAAATAAAAFQAA
ABUAAAAXAAAAFwAAABcAAAAXAAAAFwAAABcAAAAXAAAAFwAnYicAXM7/AFzO/wBKoU0AAAAVAAAAFQAA
ABMAAAATAAAAEQAAABEAAAAPAAAADQAAAA0AAAALAAAACQAAAAkAAAAHAAAABQAAAAUAAAAD////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8BAAAAAwAAAAUAAAAHAAAABwAAAAkAAAALAAAACwAAAA0AAAAPAAAAEQAAABEAAAATAAAAEwAA
ABUAAAAXAAAAFwAAABkAAAAZAAAAGQAAABsAAAAbAAAAGwAAABsAAAAbAAAAGwAACRsAWcfBAmHR+wZi
0f0AVr6VAAAAGQAAABcAAAAXAAAAFQAAABUAAAATAAAAEQAAABEAAAAPAAAADQAAAA0AAAALAAAACQAA
AAcAAAAHAAAABQAAAAP///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8BAAAAAwAAAAUAAAAHAAAABwAAAAkAAAALAAAADQAAAA8AAAAPAAAAEQA5
eSkAWMWrAD6NOwAAABcAAAAXAAAAGQAAABsAAAAbAAAAHQAAAB0AAAAdAAAAHwAAAB8AAAAfAAAAHwAA
AB8AUbaLAF3P/R6E7v8UdeL/AFzM4QAAABsAAAAbAAAAGQAAABkAAAAXAAAAFQAAABUAAAATAAAAEQAA
AA8AAAAPAAAADQAAAAsAAAAJAAAACQAAAAcAAAAFAAAAA////wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8BAAAAAwAAAAUAAAAHAAAABwAAAAkAAAALAAAADQAA
AA8AAAARAAAAEQAAABMAS6dPAFzO/wBczv8AU7mFAAkaHwAAABsAAAAdAAAAHwAAAB8AAAAhAAAAIQAA
ACEAAAAjAAAAIwAAACMARZddAF3P/RR65v8nj/b/JIbu/wBczv8ANnU9AAAAHQAAABsAAAAbAAAAGQAA
ABcAAAAXAAAAFQAAABMAAAARAAAAEQAAAA8AAAANAAAACwAAAAkAAAAJAAAABwAAAAUAAAAD////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAAAwAAAAMAAAAFAAAABwAA
AAkAAAALAAAADQAAAA8AAAAPAAAAEQAAABMAAAAVAEWdRwBczv8aeOH/A1/Q/QBbydcAPYVHAAAAHwAA
ACEAAAAjAAAAIwAAACUAAAAlAAAAJQAAACcAKlw9AFvM8Q1v3f0skvb/HYv2/ymR9v8GYtD9AE+wgQAA
AB8AAAAfAAAAHQAAABsAAAAZAAAAGQAAABcAAAAVAAAAEwAAABEAAAARAAAADwAAAA0AAAALAAAACQAA
AAcAAAAFAAAABQAAAAP///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAA
AAMAAAAFAAAABwAAAAkAAAALAAAACwAAAA0AAAAPAAAAEQAAABMAAAAVAAAAFwA/jj0AXM7/N5Ty/zyZ
8/8Tb9n7AFzO/QBTt5EADSApAAAAJQAAACcAAAAnAAAAKQAAACkACxwvAFnG0Qdl1Psukvb/Io73/wmB
9v8pkfb/E3Hd/wBZx8kAAAAjAAAAIQAAAB8AAAAdAAAAGwAAABkAAAAZAAAAFwAAABUAAAATAAAAEQAA
AA8AAAANAAAADQAAAAsAAAAJAAAABwAAAAUAAAAD////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wEAAAADAAAABQAAAAcAAAAJAAAACwAAAA0AAAAPAAAAEQAAABEAAAATAAAAFQAA
ABcAN3gzAFzO/zSS8P9Bn/j/QJ/4/yqH6P8FYND9AFvJ3wA6hlUAAAApAAAAKQAAACsAAAAtAFC1owFe
z/0rjvH/LZX3/w6E9v8Lgvb/Io73/yOE6/8AXM79ABtAMQAAACEAAAAhAAAAHwAAAB0AAAAbAAAAGQAA
ABcAAAAVAAAAEwAAABMAAAARAAAADwAAAA0AAAALAAAACQAAAAcAAAAFAAAAA////wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8BAAAAAwAAAAUAAAAHAAAACQAAAAsAAAANAAAADwAA
ABEAAAATAAAAFQAAABUAAAAXACZZKQBczv8uju7/NJr3/x+P9/88nfj/Ppr0/xdy2/0AXc/9AFG1nwAP
JDMAAAAtAEOXcwBczf8jher/N5r4/xWI9v8Nhfb/DIT2/xiJ9v8xlPb/A17Q/wBJoW0AAAAjAAAAIQAA
AB8AAAAdAAAAGwAAABkAAAAXAAAAFwAAABUAAAATAAAAEQAAAA8AAAANAAAACwAAAAkAAAAHAAAABQAA
AAMAAAAD////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAAAAMAAAAFAAAABwAA
AAkAAAALAAAADQAAAA8AAAARAAAAEwAAABMAAAAVAAAAFwARKx8AXM7/LY7t/zqc+P8Tivf/Fov3/zCY
+P9Fovn/MIzr/wdi0P0AXMrlAEijfwBczfcXd+D/Pp74/x+P9/8Qh/b/D4b2/w6F9v8Phfb/NJj3/xJv
2vsAVr2vAAAAIwAAACEAAAAfAAAAHQAAABsAAAAZAAAAFwAAABcAAAAVADZyJwBQtVkAWcehAE+zSwAA
AAsAAAAJAAAABwAAAAUAAAADAAAAA////wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wEAAAADAAAABQAAAAcAAAAJAAAACwAAAA0AAAAPAAAADwAAABEAAAATAAAAFQAAABcAAAAZAF3O/S2M
7P9AoPj/FYv3/xWL9/8Vi/f/IZH3/0Cg+P9Dn/X/G3fd/QBczv8LaNb9P5/4/y+X+P8Siff/EYj3/xGH
9v8Qh/b/D4b2/y2V9/8kgub/AFzN8wAHDiUAAAAhAAAAHwAAAB0ACRIdAEGRQwBRuHcAWMSpAFvM4wBc
zv8AXM7/AFzO/wBbzNcAAAALAAAACQAAAAcAAAAFAAAAA////wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8BAAAAAwAAAAUAAAAHAAAACQAAAAkAAAALAAAADQAAAA8AAAARAAAAEwAA
ABUAAAAXAAAAFwBdzvUriun/RaT5/xeN9/8Xjff/F433/xeN9/8Zjvf/M5v4/0mm+f84lvH/Pp32/zyf
+P8Wi/f/FIr3/xOK9/8Siff/EYj3/xCH9v8ij/f/N5Xy/wFdzv8AR6FlAEedXwBUuY8AWcjHAFzN9wBc
zv8CXs79DGva+xN24/8jhO3/Hn/q/wBczv8AS6ozAAAACwAAAAkAAAAHAAAABQAAAAP///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAAAADAAAABQAAAAcAAAAJAAAACwAA
AA0AAAAPAAAADwAAABEAAAATAAAAFQAAABcBXc7rKojo/0un+f8Zjvf/GY/3/xmP9/8Zj/f/GY/3/xmO
9/8jk/f/O5/4/zad+P8cj/f/Foz3/xaM9/8Vi/f/FIr3/xOK9/8Siff/F4v2/z6e+P8NZNH/AFzO/wBc
zv8IZNP5FHTf/x6A6P8oi/H/LpL3/y2S9/8pj/f/KY/3/xJu2vsAW8y/AAAACwAAAAkAAAAHAAAABQAA
AAMAAAAD////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAAAwAA
AAUAAAAFAAAABwAAAAkAAAALAAAADQAAAA8AAAAPAAAAEQAAABMAAAAVAV3N4SiF5v9Rq/r/G5D4/xuQ
+P8bkPj/G5D4/xuQ+P8bkPj/GpD4/xqQ9/8Zj/f/GY/3/xiO9/8Xjff/F433/xaM9/8Vi/f/FIr3/xKJ
9/83m/j/NZTy/yyM7f84mPX/Opv4/zeZ+P8sk/f/IIz2/xSG9v8Jf/X/F4b2/ymL8f8CXc7/AFS4TwAA
AAkAAAAHAAAABwAAAAUAAAAD////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wEAAAADAAAABQAAAAcAAAAHAAAACQAAAAsAAAANAAAADQAAAA8AAAARAAAAEwFd
zNclg+X/WK76/xyS+P8dkvj/HZL4/x2S+P8dkvj/HJL4/xyR+P8ckfj/G5H4/xuQ+P8dkvj/I5j4/xmO
9/8Xjff/Foz3/xWL9/8Uivf/GYz3/zKY+P8wl/f/JJD3/xeK9v8Ng/b/C4L2/wmB9v8IgPX/B3/1/yyS
9/8ad+D/AFzN3QAAGgsAAAAHAAAABwAAAAUAAAAD////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////AQAAAAMAAAAFAAAABQAAAAcAAAAJAAAACwAA
AAsAAAANADVyHQBIoTkAXM7/IoDi/12x+v8fk/j/HpP4/x+U+P8flPj/H5T4/x6T+P8ek/j/HpP4/x2S
+P8elPj/Oaz7/z6v/P8wo/r/GY/3/xiO9/8Xjff/FYz3/xSK9/8Tiff/Eoj3/xCH9v8Phvb/DYT2/wyD
9v8Kgvb/CYH2/xiI9v80k/T/BmHQ/QBYw2sAAAAHAAAABQAAAAUAAAAD////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQBmzAUAYM8hAFnGPwBb
yV8AWsp9AFvMmwBczLkBXc7dAF3P9QBczv8AXM7/AFzO/ymG5f9fs/r/Ipb4/yCV+P8glfj/IJX4/yCV
+P8glfj/IJX4/x+U+P8flPj/M6X7/1G3/P+z4P7/Pq/8/yWb+f8Zj/f/GI73/xeN9/8WjPf/FIv3/xOJ
9/8RiPf/EIf2/w6F9v8NhPb/C4P2/wqB9v8vlPf/JIHm/wBcz/MAOY4TAAAABQAAAAMAAAAD////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQBc
zv8AXM7/AFzO/wBczv8CXs/9DmnV+Rt12/sngOH/M4zn/z+V7P9KoPD/VKn1/2Cy+f9jtfr/Sqn5/yKW
+P8il/j/Ipf4/yKX+P8il/j/Ipf4/yKW+P8hlvj/LJ/6/z+v/P/K6f7//////4nO/f88rfz/H5T5/xqP
9/8Yjvf/F433/xWM9/8Uivf/E4n3/xGI9v8Qhvb/DoX2/wyE9v8WiPb/PJr3/w5n1PsAWsuNAAAABQAA
AAP///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wEAXc/JAFzO/ziP6v9lsff/Z7X6/2a1+v9ntfr/ZLT6/12x+v9Urfr/TKr5/0Sm
+f88o/n/M574/yOY+f8kmPn/JJj5/ySY+f8kmPn/JJj5/ySY+f8jmPn/J5r5/z2t/P+S0v3/////////
///2+///Wbr8/zWn+/8bkPj/Go/3/xiO9/8Xjff/FYv3/xSK9/8Siff/EYf2/w+G9v8Nhfb/L5X3/zGM
6/8AXc79AFi/If///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8BAFXVBwBczrcFYtL7Z7D1/2m2+v80nfn/JJX4/x6T
+P8glPj/IZX4/yKW+P8jl/j/JJj5/ySZ+f8lmfn/Jpr5/yaa+f8mmvn/Jpr5/yaa+f8mmvn/Jpn5/ziq
/P9fvf3/+fz//////////////////9Xu/v9BsPz/K5/6/xuQ+P8Zj/f/GI73/xaM9/8Vi/f/E4r3/xKI
9/8Qh/b/FYj2/0Of+P8Xcdr7AFzPq////wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAZswLAF3PyQll
0vtcrPb/YLL6/ySW+P8glfj/IZb4/yKX+P8jmPn/JJn5/yWZ+f8mmvn/J5v5/yeb+f8onPn/KJz5/yic
+f8onPn/KJv5/zKk+/9Dsfz/3PH+////////////////////////////oNf+/z2u/P8il/j/G5D4/xmP
9/8Xjff/Foz3/xSL9/8Tiff/EYj2/y2V9/9AmPH/AV3O/wBbzTn///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////AQBVzA8BXtDXDmnV+2Oy+P9es/r/JZj4/yKX+P8kmPn/JZn5/yaa+f8nm/n/KJz5/ymc
+f8pnfn/Kp35/yqd+f8qnfn/Kp35/yuf+f81p/v/ptn9//////////////////////////////////3+
//9pwf3/OKr8/x2R+P8akPj/GY73/xeN9/8Vi/f/FIr3/xKI9/88nfj/MIjn/wBczv8AXM+lAFrPJf//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8BAF3RFwFdz+ESbtb7arb4/12z+v8nmfn/JZn5/yaa
+f8om/n/KZz5/yqd+f8qnvn/K575/yuf+f8sn/n/LJ/5/yyf+f8qnvn/Y7j7//7/////////////////
////////////////////////5fT+/0Wx+/8vovr/G5H4/xmP9/8Yjvf/Foz3/xSL9/8Tiff/JpP3/0yl
+P84kez/EmvW+wBdzv0AXM+fAGDPIf///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAWssjAV3P6Rh1
2/twu/r/XbP7/yea+f8onPn/KZ35/yqe+f8rn/n/LJ/6/y2g+v8toPr/LqH6/y6h+v8lmfn/MZz4/+j0
/v////////////////////////////////////////////////+y3f3/M6X6/yOX+f8akPj/GY73/xeN
9/8Vi/f/E4r3/xKI9/8ejvf/PJz4/0uj+P81juz/D2rW+wBczvsAW86XAF7QG////wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////AQBbzC0BXM/xIHve/XS9+/9bs/r/KZ35/yqe+f8sn/n/LaD6/y6h+v8vofr/L6L6/y+i
+v8nmvr/FYv3/7PZ/P///////////////////////////////////////////////////////////2+9
+/8qnfn/HJL5/xmP9/8Yjvf/Foz3/xSK9/8Siff/EIf2/w+G9v8djPf/PJv4/0mh+P8xi+r/DWfU+wBc
z/kAXM2RAFnTF////wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8BAF3MNwBdz/koguH9ecH7/1Wx+v8sn/r/LaD6/y6h
+v8vovr/MKP6/zGk+v8tofn/DYX3/2ey+f//////////////////////////////////////////////
///////////////////v+P//OaH5/yGV+P8akPj/GI73/xaN9/8Vi/f/E4n3/xGI9v8Phvb/DYT2/wuD
9v8civf/PJv3/0ef9/8viOn/C2bT+wBdzvcAXM6JAFnMFf///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAW85DAFzO/zuT
6f99xPv/MqL6/y+h+v8wo/r/MaT6/zKk+v8zpfr/EIf2/yKL9v/y+P7/////////////////////////
/////////////////////////////////////////////8Lh/f8aj/f/G5D4/xmP9/8Xjff/FYv3/xOK
9/8RiPf/EIb2/w6F9v8Mg/b/CoL2/wiA9f8bifb/Opn3/0Wd9v82i+n/CmTS+wBczv8AXM1t////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8BAF3PhQBczv9XqPL/esP8/y+h+v8wovr/MaT6/zKl+v80pvr/NKf6/wR89v8vkvf/Vab4/1Wm
+P9Vpvj/Vab4/5HF+////////////////////////////1qq+P9bq/n/XKz5/12t+f9ervn/II/3/xWM
9/8Zj/f/F433/xaM9/8Uivf/Eoj3/xCH9v8Ohfb/DIT2/wqC9v8IgPb/GIj2/zqZ9/9In/j/PpHt/w9p
1fsAXM7/AFzOjf///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8BAFzPewBczv9Qoe7/gMX7/0ar+/8vovr/MaP6/zKl+v80pvr/Naf7/zao
+/8nm/n/E4r3/xKJ9/8Siff/EYn2/wZ+9f9aqPn///////////////////////////8jl/n/EIb3/w2E
9v8NhPb/DYT2/w+H9v8aj/j/Go/3/xiO9/8WjPf/FIr3/xKJ9/8Qh/b/DoX2/wyE9v8di/f/QJz4/0+k
+P84j+z/EmvW+wBbzv8AXM6nAFnMKf///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8BAFvObQBczf9JnOz/g8b7/0ms+/8uofr/MKP6/zKk
+v8zpvr/Naf7/zeo+/84qvv/Oar7/zmq+/84qvv/N6n7/zao+/8Siff/Wqj5////////////////////
////////Nqn7/yOY+f8kmPn/Ipb4/yCV+P8ek/j/HJH4/xqQ9/8Yjvf/Foz3/xSL9/8Siff/EIf2/yKP
9/9FoPj/Vqj5/z2T7f8TbNb7AFvO/wBczqcAWcwp////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAFzNYQBczv9Dl+v/hcf8/06u
+v8toPr/LqH6/zCj+v8ypfr/NKb6/zao+/84qfv/Oav7/zqs+/87rPv/Oqv7/ziq+/83qPv/E4n4/1qo
+f///////////////////////////zmr+/8mmvn/JJj5/yKW+P8glfj/HpP4/xyR+P8akPj/GI73/xaM
9/8Ui/f/JpP4/0uk+P9crfn/Qpbt/xVu1/sAW87/AFzOpwBc0Sf///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAFzNVwBd
z/09kuj/h8f8/1Kw+v8rnvn/LaD6/y+i+v8xo/r/M6X6/zSn+v82qPv/OKr7/zqs+/88rfv/PK77/zus
+/85q/v/N6n7/xOJ+P9aqPn///////////////////////////84qfv/JZn5/ySY+f8il/j/IJX4/x6T
+P8ckvj/GpD4/xiO9/8Wjff/N5z4/2Kw+v9Gmu7/Fm7X+wBdz/0AXM6nAFzRJ////wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8BAFvNTQBczvs2jOb/iMf8/1ex+v8pnfn/K575/y2g+v8vovr/MaP6/zOl+v80p/r/Nqj7/ziq
+/86rPv/PK37/zyu+/87rPv/Oav7/zep+/8Tifj/Wqj5////////////////////////////NKX6/yOY
+P8kmPn/Ipf4/yCV+P8ek/j/HJL4/xqQ+P8Yjvf/Fo33/1ar+f86j+n/AFzO/wBczqcAXNEn////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8BAF3NQwBdz/kvh+P/h8b8/12z+/8nm/n/KZz5/yue+f8toPr/L6H6/zCj
+v8ypfr/NKb6/zao+/84qfv/Oav7/zqs+/87rPv/Oqv7/ziq+/83qPv/E4n4/1qo+f//////////////
/////////////y+i+v8jmPf/JJj5/yKW+P8glfj/HpP4/xyR+P8akPj/GI73/xaM9/9Kpvn/UqDv/wBc
zv8AXswf////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8BAFvNOQBdzvcoguD9icb7/4rI+/9Xsfr/S6z6/0Cn
+v81o/n/LZ/6/y6h+v8wo/r/MqT6/zOm+v81p/v/N6j7/ziq+/85qvv/Oar7/ziq+/83qfv/Nqj7/xKJ
9/9aqPn///////////////////////////8qnfn/IZf4/ySY+f8ilvj/IJX4/x6T+P8ckfj/GpD3/xiO
9/8WjPf/J5X4/2iz+f8Vbdb7AF3Oh////wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAFnMFQBczv8AXM7/P5Hn/2Sq
7/9osPP/eLz4/4jH+/+Myvz/jcv8/43L/P+Cxvz/dsL8/2u9+/9bt/v/Nqf6/zWn+/82qPv/N6n7/zep
+/83qPv/Nqj7/zSn+v8SiPf/Wqj5////////////////////////////Jpr5/yCV+P8jmPn/IZb4/x+U
+P8ek/j/HJH4/xqP9/8Yjvf/Foz3/xSK9/9ZrPn/Q5Pp/wBdz+8AbdsH////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQBt
2wcAW86XAFzOtwFdz9UBXc7zAFzO/wBczv8AXM7/D2nT+SR62/s3iuP/SZrq/1uo7/9ttvT/i8v8/2u+
+/80pvr/Naf6/zWn+/81p/v/Naf7/zSm+v8zpfr/Eon3/zyZ9/+q0vz/qtL8/6rS/P+q0vz/qtL8/x+V
+f8ek/j/I5f4/yGV+P8flPj/HZL4/xuR+P8Zj/f/F433/xaM9/8Uivf/NJn4/2ex9/8JYtD/AFzOX///
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////AQBVzA8AXtAxAFvNUQBdzXEAW86RAF7PtQFe
0NkBXM73AFzO/0+k7/+DyPz/MqX6/zOl+v8zpfr/M6b6/zOl+v8ypfr/MaT6/yGW+f8CevX/AHn1/wB5
9f8AefX/AHn1/wB59f8Jgvb/IZX4/yKX+P8glfj/HpP4/x2S+P8bkPj/GY/3/xeN9/8Vi/f/E4r3/xSJ
9/9lsvn/M4bj/QBdzs3///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////AQBdzv1UpO7/fcX8/zCj+v8xpPr/MaT6/zGk+v8xpPr/MaP6/zCj
+v8vovr/LqH6/yyg+v8rnvn/KZ35/yic+f8mmvn/JZn5/yOX+P8hlvj/H5T4/x6T+P8ckfj/GpD4/xiO
9/8Wjff/FYv3/xOJ9/8RiPb/Q6D4/2Co8/8CXc7/AF3ONf///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////AQCA/wMAXM7/XKrx/3fC/P8vovr/L6L6/y+i
+v8vovr/L6L6/y+i+v8uofr/LaD6/yyf+v8rnvn/Kp35/yic+f8nm/n/JZn5/ySY+f8il/j/IJX4/zig
+f9fsvr/Wq/6/0Kj+P8ql/j/F4z3/xSK9/8Siff/EIf2/xuM9v9ttfr/JXfY+wBczqH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAVdUTAFzO/2Ov
8/9wvvz/LaD6/y2g+v8uofr/LqH6/y2h+v8toPr/LKD6/yyf+f8rnvn/Kp35/yic+f8nm/n/Jpr5/ySY
+f8jl/j/IZb4/ySX+P98wPv/Xqnx/12p8v92uvj/er76/3O5+v9arfn/QaD5/ymU9/8Sh/b/Uqf5/1Gd
7v8AXM/5AFnMFf///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8BAF3RIQBczv9rtPX/abv7/yue+f8rn/n/LJ/5/yyf+f8sn/n/LqH5/161+v9+w/v/arv7/yye
+f8nm/n/Jpr5/ySZ+f8jl/j/IZb4/yCV+P9BpPn/f8D5/whh0P8AXM7/AV3P/xlw2fk1iub/UaDv/2my
9/91ufr/cbf6/3G3+v9vtPn/EmrU+wBcz3X///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////AQBe0DEAXM7/crr3/2G2+/8pnfn/Kp35/yqd+f8qnfn/Qqj6/37E
+/+Fxfr/TJvq/4LD+v9ouPv/JZn5/ySY+f8jl/n/Ipb4/yCV+P8flPj/YrP6/2Go7v8AXc73AFjKHQBb
zVEAXM+PAF7PzwBdzv0AXM7/DmjV+SqB4v9Fluz/cLP2/0GQ5v8AXc/jAID/A////wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAXM9BAFzO/3i++f9as/r/J5v5/yic
+f8un/n/ZLj7/4zK/P9kq+//D2jS+wBczv8shOL9isj8/02r+v8jl/j/Ipb4/yCV+P8flPj/IZT4/4HC
+/85h+D9AFzOrf///wH///8B////Af///wEAXdELAF3NQwBbzn8AXc+/AFzO9wBczv8EX8//AFzO/wBd
z0v///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAF7PTwBc
zv9/w/v/Uq76/yaa+f9Fqfr/gcT8/3/A+P8yhOD9AF3P/QBdz48AXM9RAF3P/U6e7f+Gxvv/NJ/5/yCV
+P8flPj/HpP4/zuh+f+Ewvr/DWXS/QBczln///8B////Af///wH///8B////Af///wH///8B////AQBV
qgMAWs0zAFzPbwBczssAXM4v////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////AQBbz18BXc/9hcX7/1Sv+v9qufv/isj7/1ei7f8JY9H9AV3P1wBbzzX///8B////AQBb
zoMCXs/9bLT1/3i/+/8kl/j/HZP4/xyS+P9csPr/aKzw/wBczvsAVcwP////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wEAXc5vBGHS+YnH+/+Jx/v/d7n1/yZ52vsAXc/5AF3PeQBA
vwX///8B////Af///wEAVaoDAFzPxRBq1ft9wPr/YbP6/xyR+P8ckPj/fL/6/z2N4/0AXc+7////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAFvOfw1q1fmHxfr/V5/p/wVf
0P8BXc7DAFrPJf///wH///8B////Af///wH///8B////AQBYzhsBXs/tKYLh/YXE+/9Fpfn/M5z4/4PC
+v8TadP9AF3NZ////wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQBc
zo0HYM//HHHX+wBdz/MAW85j////Af///wH///8B////Af///wH///8B////Af///wH///8BAF3NRwBb
zv9Km+z/gcL7/2m1+v9usfP/AFvO/wBgyhn///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wEAXM25AFzO/wBdz6sAWdMX////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wEAXM2FAl7P/Wex9f+Dwvv/RpPm/wBdz8v///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8BAFnMKQBdzUP///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8BAFWqAwBdz8cQa9X7gsD6/xlu1PsAXM91////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAXtAbAF3P7x1x
2P8AXM7/AFzNJf///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////AQBbzkkAXM7/AFzO/////wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8BAF3PjwBczT3///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==
</value>
</data>
<data name="$this.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>4, 2, 4, 2</value>
</data>
<data name="$this.StartPosition" type="System.Windows.Forms.FormStartPosition, System.Windows.Forms">
<value>CenterParent</value>
</data>
<data name="$this.Text" xml:space="preserve">
<value>Software Update</value>
</data>
<data name="&gt;&gt;$this.Name" xml:space="preserve">
<value>DownloadUpdateDialog</value>
</data>
<data name="&gt;&gt;$this.Type" xml:space="preserve">
<value>System.Windows.Forms.Form, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
</root>

View File

@ -0,0 +1,130 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{F59DCD1B-931C-4A49-9D55-DEAA229218F6}</ProjectGuid>
<OutputType>Library</OutputType>
<RootNamespace>Mk0.Software.OnlineUpdater</RootNamespace>
<AssemblyName>OnlineUpdater</AssemblyName>
<TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
<Deterministic>true</Deterministic>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup>
<StartupObject />
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.Data" />
<Reference Include="System.Deployment" />
<Reference Include="System.Drawing" />
<Reference Include="System.Net.Http" />
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="DownloadUpdateDialog.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="DownloadUpdateDialog.Designer.cs">
<DependentUpon>DownloadUpdateDialog.cs</DependentUpon>
</Compile>
<Compile Include="RemindLaterForm.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="RemindLaterForm.Designer.cs">
<DependentUpon>RemindLaterForm.cs</DependentUpon>
</Compile>
<Compile Include="UpdateForm.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="UpdateForm.Designer.cs">
<DependentUpon>UpdateForm.cs</DependentUpon>
</Compile>
<Compile Include="OnlineUpdater.cs" />
<Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<EmbeddedResource Include="DownloadUpdateDialog.resx">
<DependentUpon>DownloadUpdateDialog.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Properties\Resources.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
<SubType>Designer</SubType>
</EmbeddedResource>
<Compile Include="Properties\Resources.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>Resources.resx</DependentUpon>
<DesignTime>True</DesignTime>
</Compile>
<EmbeddedResource Include="RemindLaterForm.resx">
<DependentUpon>RemindLaterForm.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="UpdateForm.resx">
<DependentUpon>UpdateForm.cs</DependentUpon>
</EmbeddedResource>
<None Include="Properties\Settings.settings">
<Generator>SettingsSingleFileGenerator</Generator>
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
</None>
<Compile Include="Properties\Settings.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>Settings.settings</DependentUpon>
<DesignTimeSharedInput>True</DesignTimeSharedInput>
</Compile>
</ItemGroup>
<ItemGroup>
<None Include="App.config" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\update.png" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\clock_go.png" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\clock_go_32.png" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\clock_play.png" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\download.png" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\download_32.png" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\hand_point.png" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\Unzipper.exe" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project>

View File

@ -0,0 +1,914 @@
using System;
using System.ComponentModel;
using System.Diagnostics;
using System.Drawing;
using System.Globalization;
using System.IO;
using System.Net;
using System.Net.Cache;
using System.Reflection;
using System.Text;
using System.Threading;
using System.Windows.Forms;
using System.Xml;
using Mk0.Software.OnlineUpdater.Properties;
using Microsoft.Win32;
namespace Mk0.Software.OnlineUpdater
{
/// <summary>
/// Enum representing the remind later time span.
/// </summary>
public enum RemindLaterFormat
{
/// <summary>
/// Represents the time span in minutes.
/// </summary>
Minutes,
/// <summary>
/// Represents the time span in hours.
/// </summary>
Hours,
/// <summary>
/// Represents the time span in days.
/// </summary>
Days
}
/// <summary>
/// Enum representing the effect of Mandatory flag.
/// </summary>
public enum Mode
{
/// <summary>
/// In this mode, it ignores Remind Later and Skip values set previously and hide both buttons.
/// </summary>
Normal,
/// <summary>
/// In this mode, it won't show close button in addition to Normal mode behaviour.
/// </summary>
Forced,
/// <summary>
/// In this mode, it will start downloading and applying update without showing standarad update dialog in addition to Forced mode behaviour.
/// </summary>
ForcedDownload
}
/// <summary>
/// Main class that lets you auto update applications by setting some static fields and executing its Start method.
/// </summary>
public static class AutoUpdater
{
private static System.Timers.Timer _remindLaterTimer;
internal static String ChangelogURL;
internal static String DownloadURL;
internal static String InstallerArgs;
internal static String RegistryLocation;
internal static String Checksum;
internal static String HashingAlgorithm;
internal static Version CurrentVersion;
internal static Version InstalledVersion;
internal static bool IsWinFormsApplication;
internal static bool Running;
/// <summary>
/// Set it to folder path where you want to download the update file. If not provided then it defaults to Temp folder.
/// </summary>
public static String DownloadPath;
/// <summary>
/// Set the Application Title shown in Update dialog. Although AutoUpdater.NET will get it automatically, you can set this property if you like to give custom Title.
/// </summary>
public static String AppTitle;
/// <summary>
/// URL of the xml file that contains information about latest version of the application.
/// </summary>
public static String AppCastURL;
/// <summary>
/// Login/password/domain for FTP-request
/// </summary>
public static NetworkCredential FtpCredentials;
/// <summary>
/// Opens the download URL in default browser if true. Very usefull if you have portable application.
/// </summary>
public static bool OpenDownloadPage;
/// <summary>
/// Set Basic Authentication credentials required to download the file.
/// </summary>
public static IAuthentication BasicAuthDownload;
/// <summary>
/// Set Basic Authentication credentials required to download the XML file.
/// </summary>
public static IAuthentication BasicAuthXML;
/// <summary>
/// Set Basic Authentication credentials to navigate to the change log URL.
/// </summary>
public static IAuthentication BasicAuthChangeLog;
/// <summary>
/// Set the User-Agent string to be used for HTTP web requests.
/// </summary>
public static string HttpUserAgent;
/// <summary>
/// If this is true users can see the skip button.
/// </summary>
public static Boolean ShowSkipButton = true;
/// <summary>
/// If this is true users can see the Remind Later button.
/// </summary>
public static Boolean ShowRemindLaterButton = true;
/// <summary>
/// If this is true users see dialog where they can set remind later interval otherwise it will take the interval from
/// RemindLaterAt and RemindLaterTimeSpan fields.
/// </summary>
public static Boolean LetUserSelectRemindLater = true;
/// <summary>
/// Remind Later interval after user should be reminded of update.
/// </summary>
public static int RemindLaterAt = 2;
///<summary>
/// AutoUpdater.NET will report errors if this is true.
/// </summary>
public static bool ReportErrors = false;
/// <summary>
/// Set this to false if your application doesn't need administrator privileges to replace the old version.
/// </summary>
public static bool RunUpdateAsAdmin = true;
///<summary>
/// Set this to true if you want to ignore previously assigned Remind Later and Skip settings. It will also hide Remind Later and Skip buttons.
/// </summary>
public static bool Mandatory;
/// <summary>
/// Set this to any of the available modes to change behaviour of the Mandatory flag.
/// </summary>
public static Mode UpdateMode;
/// <summary>
/// Set Proxy server to use for all the web requests in AutoUpdater.NET.
/// </summary>
public static IWebProxy Proxy;
/// <summary>
/// Set if RemindLaterAt interval should be in Minutes, Hours or Days.
/// </summary>
public static RemindLaterFormat RemindLaterTimeSpan = RemindLaterFormat.Days;
/// <summary>
/// A delegate type to handle how to exit the application after update is downloaded.
/// </summary>
public delegate void ApplicationExitEventHandler();
/// <summary>
/// An event that developers can use to exit the application gracefully.
/// </summary>
public static event ApplicationExitEventHandler ApplicationExitEvent;
/// <summary>
/// A delegate type for hooking up update notifications.
/// </summary>
/// <param name="args">An object containing all the parameters recieved from AppCast XML file. If there will be an error while looking for the XML file then this object will be null.</param>
public delegate void CheckForUpdateEventHandler(UpdateInfoEventArgs args);
/// <summary>
/// An event that clients can use to be notified whenever the update is checked.
/// </summary>
public static event CheckForUpdateEventHandler CheckForUpdateEvent;
/// <summary>
/// A delegate type for hooking up parsing logic.
/// </summary>
/// <param name="args">An object containing the AppCast file received from server.</param>
public delegate void ParseUpdateInfoHandler(ParseUpdateInfoEventArgs args);
/// <summary>
/// An event that clients can use to be notified whenever the AppCast file needs parsing.
/// </summary>
public static event ParseUpdateInfoHandler ParseUpdateInfoEvent;
/// <summary>
/// Set if you want the default update form to have a different size.
/// </summary>
public static Size? UpdateFormSize = null;
/// <summary>
/// Start checking for new version of application and display dialog to the user if update is available.
/// </summary>
/// <param name="myAssembly">Assembly to use for version checking.</param>
public static void Start(Assembly myAssembly = null)
{
Start(AppCastURL, myAssembly);
}
/// <summary>
/// Start checking for new version of application via FTP and display dialog to the user if update is available.
/// </summary>
/// <param name="appCast">FTP URL of the xml file that contains information about latest version of the application.</param>
/// <param name="ftpCredentials">Credentials required to connect to FTP server.</param>
/// <param name="myAssembly">Assembly to use for version checking.</param>
public static void Start(String appCast, NetworkCredential ftpCredentials, Assembly myAssembly = null)
{
FtpCredentials = ftpCredentials;
Start(appCast, myAssembly);
}
/// <summary>
/// Start checking for new version of application and display dialog to the user if update is available.
/// </summary>
/// <param name="appCast">URL of the xml file that contains information about latest version of the application.</param>
/// <param name="myAssembly">Assembly to use for version checking.</param>
public static void Start(String appCast, Assembly myAssembly = null)
{
try
{
ServicePointManager.SecurityProtocol |= (SecurityProtocolType)192 |
(SecurityProtocolType)768 | (SecurityProtocolType)3072;
}
catch (NotSupportedException) { }
if (Mandatory && _remindLaterTimer != null)
{
_remindLaterTimer.Stop();
_remindLaterTimer.Close();
_remindLaterTimer = null;
}
if (!Running && _remindLaterTimer == null)
{
Running = true;
AppCastURL = appCast;
IsWinFormsApplication = Application.MessageLoop;
var backgroundWorker = new BackgroundWorker();
backgroundWorker.DoWork += BackgroundWorkerDoWork;
backgroundWorker.RunWorkerCompleted += BackgroundWorkerOnRunWorkerCompleted;
backgroundWorker.RunWorkerAsync(myAssembly ?? Assembly.GetEntryAssembly());
}
}
private static void BackgroundWorkerOnRunWorkerCompleted(object sender,
RunWorkerCompletedEventArgs runWorkerCompletedEventArgs)
{
if (!runWorkerCompletedEventArgs.Cancelled)
{
if (runWorkerCompletedEventArgs.Result is DateTime)
{
SetTimer((DateTime)runWorkerCompletedEventArgs.Result);
}
else
{
var args = runWorkerCompletedEventArgs.Result as UpdateInfoEventArgs;
if (CheckForUpdateEvent != null)
{
CheckForUpdateEvent(args);
}
else
{
if (args != null)
{
if (args.IsUpdateAvailable)
{
if (!IsWinFormsApplication)
{
Application.EnableVisualStyles();
}
if (Mandatory && UpdateMode == Mode.ForcedDownload)
{
DownloadUpdate();
Exit();
}
else
{
if (Thread.CurrentThread.GetApartmentState().Equals(ApartmentState.STA))
{
ShowUpdateForm();
}
else
{
Thread thread = new Thread(ShowUpdateForm);
thread.CurrentCulture = thread.CurrentUICulture = CultureInfo.CurrentCulture;
thread.SetApartmentState(ApartmentState.STA);
thread.Start();
thread.Join();
}
}
return;
}
else
{
if (ReportErrors)
{
MessageBox.Show(Resources.UpdateUnavailableMessage,
Resources.UpdateUnavailableCaption,
MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
}
else
{
if (ReportErrors)
{
MessageBox.Show(
Resources.UpdateCheckFailedMessage,
Resources.UpdateCheckFailedCaption, MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
}
}
Running = false;
}
/// <summary>
/// Shows standard update dialog.
/// </summary>
public static void ShowUpdateForm()
{
var updateForm = new UpdateForm();
if (UpdateFormSize.HasValue)
{
updateForm.Size = UpdateFormSize.Value;
}
if (updateForm.ShowDialog().Equals(DialogResult.OK))
{
Exit();
}
}
private static void BackgroundWorkerDoWork(object sender, DoWorkEventArgs e)
{
e.Cancel = true;
Assembly mainAssembly = e.Argument as Assembly;
var companyAttribute =
(AssemblyCompanyAttribute)GetAttribute(mainAssembly, typeof(AssemblyCompanyAttribute));
if (string.IsNullOrEmpty(AppTitle))
{
var titleAttribute =
(AssemblyTitleAttribute)GetAttribute(mainAssembly, typeof(AssemblyTitleAttribute));
AppTitle = titleAttribute != null ? titleAttribute.Title : mainAssembly.GetName().Name;
}
string appCompany = companyAttribute != null ? companyAttribute.Company : "";
RegistryLocation = !string.IsNullOrEmpty(appCompany)
? $@"Software\{appCompany}\{AppTitle}\AutoUpdater"
: $@"Software\{AppTitle}\AutoUpdater";
InstalledVersion = mainAssembly.GetName().Version;
WebRequest webRequest = WebRequest.Create(AppCastURL);
webRequest.CachePolicy = new RequestCachePolicy(RequestCacheLevel.NoCacheNoStore);
if (Proxy != null)
{
webRequest.Proxy = Proxy;
}
var uri = new Uri(AppCastURL);
WebResponse webResponse;
try
{
if (uri.Scheme.Equals(Uri.UriSchemeFtp))
{
var ftpWebRequest = (FtpWebRequest)webRequest;
ftpWebRequest.Credentials = FtpCredentials;
ftpWebRequest.UseBinary = true;
ftpWebRequest.UsePassive = true;
ftpWebRequest.KeepAlive = true;
ftpWebRequest.Method = WebRequestMethods.Ftp.DownloadFile;
webResponse = ftpWebRequest.GetResponse();
}
else if (uri.Scheme.Equals(Uri.UriSchemeHttp) || uri.Scheme.Equals(Uri.UriSchemeHttps))
{
HttpWebRequest httpWebRequest = (HttpWebRequest)webRequest;
httpWebRequest.UserAgent = GetUserAgent();
if (BasicAuthXML != null)
{
httpWebRequest.Headers[HttpRequestHeader.Authorization] = BasicAuthXML.ToString();
}
webResponse = httpWebRequest.GetResponse();
}
else
{
webResponse = webRequest.GetResponse();
}
}
catch (Exception exception)
{
Debug.WriteLine(exception);
e.Cancel = false;
return;
}
UpdateInfoEventArgs args;
using (Stream appCastStream = webResponse.GetResponseStream())
{
if (appCastStream != null)
{
if (ParseUpdateInfoEvent != null)
{
using (StreamReader streamReader = new StreamReader(appCastStream))
{
string data = streamReader.ReadToEnd();
ParseUpdateInfoEventArgs parseArgs = new ParseUpdateInfoEventArgs(data);
ParseUpdateInfoEvent(parseArgs);
args = parseArgs.UpdateInfo;
}
}
else
{
XmlDocument receivedAppCastDocument = new XmlDocument { XmlResolver = null };
try
{
receivedAppCastDocument.Load(appCastStream);
XmlNodeList appCastItems = receivedAppCastDocument.SelectNodes("item");
args = new UpdateInfoEventArgs();
if (appCastItems != null)
{
foreach (XmlNode item in appCastItems)
{
XmlNode appCastVersion = item.SelectSingleNode("version");
try
{
CurrentVersion = new Version(appCastVersion?.InnerText);
}
catch (Exception)
{
CurrentVersion = null;
}
args.CurrentVersion = CurrentVersion;
XmlNode appCastChangeLog = item.SelectSingleNode("changelog");
args.ChangelogURL = appCastChangeLog?.InnerText;
XmlNode appCastUrl = item.SelectSingleNode("url");
args.DownloadURL = appCastUrl?.InnerText;
if (Mandatory.Equals(false))
{
XmlNode mandatory = item.SelectSingleNode("mandatory");
Boolean.TryParse(mandatory?.InnerText, out Mandatory);
string mode = mandatory?.Attributes["mode"]?.InnerText;
if (!string.IsNullOrEmpty(mode))
{
UpdateMode = (Mode)Enum.Parse(typeof(Mode), mode);
if (ReportErrors && !Enum.IsDefined(typeof(Mode), UpdateMode))
{
throw new InvalidDataException(
$"{UpdateMode} is not an underlying value of the Mode enumeration.");
}
}
}
args.Mandatory = Mandatory;
args.UpdateMode = UpdateMode;
XmlNode appArgs = item.SelectSingleNode("args");
args.InstallerArgs = appArgs?.InnerText;
XmlNode checksum = item.SelectSingleNode("checksum");
args.HashingAlgorithm = checksum?.Attributes["algorithm"]?.InnerText;
args.Checksum = checksum?.InnerText;
}
}
}
catch (Exception)
{
e.Cancel = false;
webResponse.Close();
return;
}
}
}
else
{
e.Cancel = false;
webResponse.Close();
return;
}
}
if (args.CurrentVersion == null || string.IsNullOrEmpty(args.DownloadURL))
{
webResponse.Close();
if (ReportErrors)
{
throw new InvalidDataException();
}
return;
}
CurrentVersion = args.CurrentVersion;
ChangelogURL = args.ChangelogURL = GetURL(webResponse.ResponseUri, args.ChangelogURL);
DownloadURL = args.DownloadURL = GetURL(webResponse.ResponseUri, args.DownloadURL);
InstallerArgs = args.InstallerArgs ?? String.Empty;
HashingAlgorithm = args.HashingAlgorithm ?? "MD5";
Checksum = args.Checksum ?? String.Empty;
webResponse.Close();
if (Mandatory)
{
ShowRemindLaterButton = false;
ShowSkipButton = false;
}
else
{
using (RegistryKey updateKey = Registry.CurrentUser.OpenSubKey(RegistryLocation))
{
if (updateKey != null)
{
object skip = updateKey.GetValue("skip");
object applicationVersion = updateKey.GetValue("version");
if (skip != null && applicationVersion != null)
{
string skipValue = skip.ToString();
var skipVersion = new Version(applicationVersion.ToString());
if (skipValue.Equals("1") && CurrentVersion <= skipVersion)
return;
if (CurrentVersion > skipVersion)
{
using (RegistryKey updateKeyWrite = Registry.CurrentUser.CreateSubKey(RegistryLocation))
{
if (updateKeyWrite != null)
{
updateKeyWrite.SetValue("version", CurrentVersion.ToString());
updateKeyWrite.SetValue("skip", 0);
}
}
}
}
object remindLaterTime = updateKey.GetValue("remindlater");
if (remindLaterTime != null)
{
DateTime remindLater = Convert.ToDateTime(remindLaterTime.ToString(),
CultureInfo.CreateSpecificCulture("en-US").DateTimeFormat);
int compareResult = DateTime.Compare(DateTime.Now, remindLater);
if (compareResult < 0)
{
e.Cancel = false;
e.Result = remindLater;
return;
}
}
}
}
}
args.IsUpdateAvailable = CurrentVersion > InstalledVersion;
args.InstalledVersion = InstalledVersion;
e.Cancel = false;
e.Result = args;
}
private static string GetURL(Uri baseUri, String url)
{
if (!string.IsNullOrEmpty(url) && Uri.IsWellFormedUriString(url, UriKind.Relative))
{
Uri uri = new Uri(baseUri, url);
if (uri.IsAbsoluteUri)
{
url = uri.AbsoluteUri;
}
}
return url;
}
/// <summary>
/// Detects and exits all instances of running assembly, including current.
/// </summary>
private static void Exit()
{
if (ApplicationExitEvent != null)
{
ApplicationExitEvent();
}
else
{
var currentProcess = Process.GetCurrentProcess();
foreach (var process in Process.GetProcessesByName(currentProcess.ProcessName))
{
string processPath;
try
{
processPath = process.MainModule.FileName;
}
catch (Win32Exception)
{
// Current process should be same as processes created by other instances of the application so it should be able to access modules of other instances.
// This means this is not the process we are looking for so we can safely skip this.
continue;
}
if (process.Id != currentProcess.Id &&
currentProcess.MainModule.FileName == processPath
) //get all instances of assembly except current
{
if (process.CloseMainWindow())
{
process.WaitForExit((int)TimeSpan.FromSeconds(10)
.TotalMilliseconds); //give some time to process message
}
if (!process.HasExited)
{
process.Kill(); //TODO show UI message asking user to close program himself instead of silently killing it
}
}
}
if (IsWinFormsApplication)
{
MethodInvoker methodInvoker = Application.Exit;
methodInvoker.Invoke();
}
#if NETWPF
else if (System.Windows.Application.Current != null)
{
System.Windows.Application.Current.Dispatcher.BeginInvoke(new Action(() =>
System.Windows.Application.Current.Shutdown()));
}
#endif
else
{
Environment.Exit(0);
}
}
}
private static Attribute GetAttribute(Assembly assembly, Type attributeType)
{
object[] attributes = assembly.GetCustomAttributes(attributeType, false);
if (attributes.Length == 0)
{
return null;
}
return (Attribute)attributes[0];
}
internal static string GetUserAgent()
{
return string.IsNullOrEmpty(HttpUserAgent) ? $"AutoUpdater.NET" : HttpUserAgent;
}
internal static void SetTimer(DateTime remindLater)
{
TimeSpan timeSpan = remindLater - DateTime.Now;
var context = SynchronizationContext.Current;
_remindLaterTimer = new System.Timers.Timer
{
Interval = (int)timeSpan.TotalMilliseconds,
AutoReset = false
};
_remindLaterTimer.Elapsed += delegate
{
_remindLaterTimer = null;
if (context != null)
{
try
{
context.Send(state => Start(), null);
}
catch (InvalidAsynchronousStateException)
{
Start();
}
}
else
{
Start();
}
};
_remindLaterTimer.Start();
}
/// <summary>
/// Opens the Download window that download the update and execute the installer when download completes.
/// </summary>
public static bool DownloadUpdate()
{
var downloadDialog = new DownloadUpdateDialog(DownloadURL);
try
{
return downloadDialog.ShowDialog().Equals(DialogResult.OK);
}
catch (TargetInvocationException)
{
}
return false;
}
}
/// <summary>
/// Object of this class gives you all the details about the update useful in handling the update logic yourself.
/// </summary>
public class UpdateInfoEventArgs : EventArgs
{
/// <summary>
/// If new update is available then returns true otherwise false.
/// </summary>
public bool IsUpdateAvailable { get; set; }
/// <summary>
/// Download URL of the update file.
/// </summary>
public string DownloadURL { get; set; }
/// <summary>
/// URL of the webpage specifying changes in the new update.
/// </summary>
public string ChangelogURL { get; set; }
/// <summary>
/// Returns newest version of the application available to download.
/// </summary>
public Version CurrentVersion { get; set; }
/// <summary>
/// Returns version of the application currently installed on the user's PC.
/// </summary>
public Version InstalledVersion { get; set; }
/// <summary>
/// Shows if the update is required or optional.
/// </summary>
public bool Mandatory { get; set; }
/// <summary>
/// Defines how the Mandatory flag should work.
/// </summary>
public Mode UpdateMode { get; set; }
/// <summary>
/// Command line arguments used by Installer.
/// </summary>
public string InstallerArgs { get; set; }
/// <summary>
/// Checksum of the update file.
/// </summary>
public string Checksum { get; set; }
/// <summary>
/// Hash algorithm that generated the checksum provided in the XML file.
/// </summary>
public string HashingAlgorithm { get; set; }
}
/// <summary>
/// An object of this class contains the AppCast file received from server.
/// </summary>
public class ParseUpdateInfoEventArgs : EventArgs
{
/// <summary>
/// Remote data received from the AppCast file.
/// </summary>
public string RemoteData { get; }
/// <summary>
/// Set this object with values received from the AppCast file.
/// </summary>
public UpdateInfoEventArgs UpdateInfo { get; set; }
/// <summary>
/// An object containing the AppCast file received from server.
/// </summary>
/// <param name="remoteData">A string containing remote data received from the AppCast file.</param>
public ParseUpdateInfoEventArgs(string remoteData)
{
RemoteData = remoteData;
}
}
/// <summary>
/// Interface for authentication
/// </summary>
public interface IAuthentication
{
}
/// <summary>
/// Provides Basic Authentication header for web request.
/// </summary>
public class BasicAuthentication : IAuthentication
{
private string Username { get; }
private string Password { get; }
/// <summary>
/// Initializes credentials for Basic Authentication.
/// </summary>
/// <param name="username">Username to use for Basic Authentication</param>
/// <param name="password">Password to use for Basic Authentication</param>
public BasicAuthentication(string username, string password)
{
Username = username;
Password = password;
}
/// <inheritdoc />
public override string ToString()
{
var token = Convert.ToBase64String(Encoding.ASCII.GetBytes($"{Username}:{Password}"));
return $"Basic {token}";
}
}
/// <summary>
/// Provides Custom Authentication header for web request.
/// </summary>
public class CustomAuthentication : IAuthentication
{
private string HttpRequestHeaderAuthorizationValue { get; }
/// <summary>
/// Initializes authorization header value for Custom Authentication
/// </summary>
/// <param name="httpRequestHeaderAuthorizationValue">Value to use as http request header authorization value</param>
public CustomAuthentication(string httpRequestHeaderAuthorizationValue)
{
HttpRequestHeaderAuthorizationValue = httpRequestHeaderAuthorizationValue;
}
/// <inheritdoc />
public override string ToString()
{
return HttpRequestHeaderAuthorizationValue;
}
}
}

View File

@ -0,0 +1,22 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Mk0.Software.OnlineUpdater
{
static class Program
{
/// <summary>
/// Der Haupteinstiegspunkt für die Anwendung.
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new UpdateForm());
}
}
}

View File

@ -0,0 +1,36 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// Allgemeine Informationen über eine Assembly werden über die folgenden
// Attribute gesteuert. Ändern Sie diese Attributwerte, um die Informationen zu ändern,
// die einer Assembly zugeordnet sind.
[assembly: AssemblyTitle("OnlineUpdater")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("mk0.at")]
[assembly: AssemblyProduct("OnlineUpdater")]
[assembly: AssemblyCopyright("Copyright © 2019-2020 by mk0.at")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// Durch Festlegen von ComVisible auf FALSE werden die Typen in dieser Assembly
// für COM-Komponenten unsichtbar. Wenn Sie auf einen Typ in dieser Assembly von
// COM aus zugreifen müssen, sollten Sie das ComVisible-Attribut für diesen Typ auf "True" festlegen.
[assembly: ComVisible(false)]
// Die folgende GUID bestimmt die ID der Typbibliothek, wenn dieses Projekt für COM verfügbar gemacht wird
[assembly: Guid("f59dcd1b-931c-4a49-9d55-deaa229218f6")]
// Versionsinformationen für eine Assembly bestehen aus den folgenden vier Werten:
//
// Hauptversion
// Nebenversion
// Buildnummer
// Revision
//
// Sie können alle Werte angeben oder Standardwerte für die Build- und Revisionsnummern verwenden,
// indem Sie "*" wie unten gezeigt eingeben:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]

View File

@ -0,0 +1,224 @@
//------------------------------------------------------------------------------
// <auto-generated>
// Dieser Code wurde von einem Tool generiert.
// Laufzeitversion:4.0.30319.42000
//
// Änderungen an dieser Datei können falsches Verhalten verursachen und gehen verloren, wenn
// der Code erneut generiert wird.
// </auto-generated>
//------------------------------------------------------------------------------
namespace Mk0.Software.OnlineUpdater.Properties {
using System;
/// <summary>
/// Eine stark typisierte Ressourcenklasse zum Suchen von lokalisierten Zeichenfolgen usw.
/// </summary>
// Diese Klasse wurde von der StronglyTypedResourceBuilder automatisch generiert
// -Klasse über ein Tool wie ResGen oder Visual Studio automatisch generiert.
// Um einen Member hinzuzufügen oder zu entfernen, bearbeiten Sie die .ResX-Datei und führen dann ResGen
// mit der /str-Option erneut aus, oder Sie erstellen Ihr VS-Projekt neu.
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class Resources {
private static global::System.Resources.ResourceManager resourceMan;
private static global::System.Globalization.CultureInfo resourceCulture;
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
internal Resources() {
}
/// <summary>
/// Gibt die zwischengespeicherte ResourceManager-Instanz zurück, die von dieser Klasse verwendet wird.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Resources.ResourceManager ResourceManager {
get {
if (object.ReferenceEquals(resourceMan, null)) {
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Mk0.Software.OnlineUpdater.Properties.Resources", typeof(Resources).Assembly);
resourceMan = temp;
}
return resourceMan;
}
}
/// <summary>
/// Überschreibt die CurrentUICulture-Eigenschaft des aktuellen Threads für alle
/// Ressourcenzuordnungen, die diese stark typisierte Ressourcenklasse verwenden.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Globalization.CultureInfo Culture {
get {
return resourceCulture;
}
set {
resourceCulture = value;
}
}
/// <summary>
/// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap clock_go {
get {
object obj = ResourceManager.GetObject("clock_go", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap clock_go_32 {
get {
object obj = ResourceManager.GetObject("clock_go_32", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap clock_play {
get {
object obj = ResourceManager.GetObject("clock_play", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap download {
get {
object obj = ResourceManager.GetObject("download", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap download_32 {
get {
object obj = ResourceManager.GetObject("download_32", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Sucht eine lokalisierte Zeichenfolge, die Herunterladen bei {0}/s ähnelt.
/// </summary>
internal static string DownloadSpeedMessage {
get {
return ResourceManager.GetString("DownloadSpeedMessage", resourceCulture);
}
}
/// <summary>
/// Sucht eine lokalisierte Zeichenfolge, die Checksumme ist unterschiedlich ähnelt.
/// </summary>
internal static string FileIntegrityCheckFailedCaption {
get {
return ResourceManager.GetString("FileIntegrityCheckFailedCaption", resourceCulture);
}
}
/// <summary>
/// Sucht eine lokalisierte Zeichenfolge, die Die Dateiintegritätsprüfung ist fehlgeschlagen und hat einige Fehler gemeldet. ähnelt.
/// </summary>
internal static string FileIntegrityCheckFailedMessage {
get {
return ResourceManager.GetString("FileIntegrityCheckFailedMessage", resourceCulture);
}
}
/// <summary>
/// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap hand_point {
get {
object obj = ResourceManager.GetObject("hand_point", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Sucht eine lokalisierte Zeichenfolge, die Nicht unterstützter Hash-Algorithmus ähnelt.
/// </summary>
internal static string HashAlgorithmNotSupportedCaption {
get {
return ResourceManager.GetString("HashAlgorithmNotSupportedCaption", resourceCulture);
}
}
/// <summary>
/// Sucht eine lokalisierte Zeichenfolge, die Der in der XML-Datei enthaltene Hash-Algorithmus wird nicht unterstützt. ähnelt.
/// </summary>
internal static string HashAlgorithmNotSupportedMessage {
get {
return ResourceManager.GetString("HashAlgorithmNotSupportedMessage", resourceCulture);
}
}
/// <summary>
/// Sucht eine lokalisierte Ressource vom Typ System.Byte[].
/// </summary>
internal static byte[] Unzipper {
get {
object obj = ResourceManager.GetObject("Unzipper", resourceCulture);
return ((byte[])(obj));
}
}
/// <summary>
/// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap update {
get {
object obj = ResourceManager.GetObject("update", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Sucht eine lokalisierte Zeichenfolge, die Update Check fehlgeschlagen ähnelt.
/// </summary>
internal static string UpdateCheckFailedCaption {
get {
return ResourceManager.GetString("UpdateCheckFailedCaption", resourceCulture);
}
}
/// <summary>
/// Sucht eine lokalisierte Zeichenfolge, die Es gibt ein Problem beim Erreichen des Aktualisierungsservers. Bitte überprüfen Sie Ihre Internetverbindung und versuchen Sie es später noch einmal. ähnelt.
/// </summary>
internal static string UpdateCheckFailedMessage {
get {
return ResourceManager.GetString("UpdateCheckFailedMessage", resourceCulture);
}
}
/// <summary>
/// Sucht eine lokalisierte Zeichenfolge, die Update nicht verfügbar ähnelt.
/// </summary>
internal static string UpdateUnavailableCaption {
get {
return ResourceManager.GetString("UpdateUnavailableCaption", resourceCulture);
}
}
/// <summary>
/// Sucht eine lokalisierte Zeichenfolge, die Es ist kein Update vorhanden. Bitte versuchen Sie es später noch einmal. ähnelt.
/// </summary>
internal static string UpdateUnavailableMessage {
get {
return ResourceManager.GetString("UpdateUnavailableMessage", resourceCulture);
}
}
}
}

View File

@ -0,0 +1,172 @@
<?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>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="clock_go" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\clock_go.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="clock_go_32" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\clock_go_32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="clock_play" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\clock_play.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="download" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\download.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="DownloadSpeedMessage" xml:space="preserve">
<value>Herunterladen bei {0}/s</value>
</data>
<data name="download_32" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\download_32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="FileIntegrityCheckFailedCaption" xml:space="preserve">
<value>Checksumme ist unterschiedlich</value>
</data>
<data name="FileIntegrityCheckFailedMessage" xml:space="preserve">
<value>Die Dateiintegritätsprüfung ist fehlgeschlagen und hat einige Fehler gemeldet.</value>
</data>
<data name="hand_point" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\hand_point.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="HashAlgorithmNotSupportedCaption" xml:space="preserve">
<value>Nicht unterstützter Hash-Algorithmus</value>
</data>
<data name="HashAlgorithmNotSupportedMessage" xml:space="preserve">
<value>Der in der XML-Datei enthaltene Hash-Algorithmus wird nicht unterstützt.</value>
</data>
<data name="Unzipper" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\Unzipper.exe;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="update" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\update.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="UpdateCheckFailedCaption" xml:space="preserve">
<value>Update Check fehlgeschlagen</value>
</data>
<data name="UpdateCheckFailedMessage" xml:space="preserve">
<value>Es gibt ein Problem beim Erreichen des Aktualisierungsservers. Bitte überprüfen Sie Ihre Internetverbindung und versuchen Sie es später noch einmal.</value>
</data>
<data name="UpdateUnavailableCaption" xml:space="preserve">
<value>Update nicht verfügbar</value>
</data>
<data name="UpdateUnavailableMessage" xml:space="preserve">
<value>Es ist kein Update vorhanden. Bitte versuchen Sie es später noch einmal.</value>
</data>
</root>

View File

@ -0,0 +1,30 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.42000
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace Mk0.Software.OnlineUpdater.Properties
{
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")]
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase
{
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
public static Settings Default
{
get
{
return defaultInstance;
}
}
}
}

View File

@ -0,0 +1,7 @@
<?xml version='1.0' encoding='utf-8'?>
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)">
<Profiles>
<Profile Name="(Default)" />
</Profiles>
<Settings />
</SettingsFile>

View File

@ -0,0 +1,146 @@
namespace Mk0.Software.OnlineUpdater
{
partial class RemindLaterForm
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(RemindLaterForm));
this.labelTitle = new System.Windows.Forms.Label();
this.pictureBoxIcon = new System.Windows.Forms.PictureBox();
this.labelDescription = new System.Windows.Forms.Label();
this.radioButtonYes = new System.Windows.Forms.RadioButton();
this.radioButtonNo = new System.Windows.Forms.RadioButton();
this.comboBoxRemindLater = new System.Windows.Forms.ComboBox();
this.buttonOK = new System.Windows.Forms.Button();
this.tableLayoutPanel = new System.Windows.Forms.TableLayoutPanel();
((System.ComponentModel.ISupportInitialize)(this.pictureBoxIcon)).BeginInit();
this.tableLayoutPanel.SuspendLayout();
this.SuspendLayout();
//
// labelTitle
//
resources.ApplyResources(this.labelTitle, "labelTitle");
this.tableLayoutPanel.SetColumnSpan(this.labelTitle, 2);
this.labelTitle.Name = "labelTitle";
//
// pictureBoxIcon
//
resources.ApplyResources(this.pictureBoxIcon, "pictureBoxIcon");
this.pictureBoxIcon.Image = Properties.Resources.clock_go_32;
this.pictureBoxIcon.Name = "pictureBoxIcon";
this.tableLayoutPanel.SetRowSpan(this.pictureBoxIcon, 2);
this.pictureBoxIcon.TabStop = false;
//
// labelDescription
//
resources.ApplyResources(this.labelDescription, "labelDescription");
this.tableLayoutPanel.SetColumnSpan(this.labelDescription, 2);
this.labelDescription.Name = "labelDescription";
//
// radioButtonYes
//
resources.ApplyResources(this.radioButtonYes, "radioButtonYes");
this.radioButtonYes.Checked = true;
this.radioButtonYes.Name = "radioButtonYes";
this.radioButtonYes.TabStop = true;
this.radioButtonYes.UseVisualStyleBackColor = true;
this.radioButtonYes.CheckedChanged += new System.EventHandler(this.RadioButtonYesCheckedChanged);
//
// radioButtonNo
//
resources.ApplyResources(this.radioButtonNo, "radioButtonNo");
this.tableLayoutPanel.SetColumnSpan(this.radioButtonNo, 2);
this.radioButtonNo.Name = "radioButtonNo";
this.radioButtonNo.UseVisualStyleBackColor = true;
//
// comboBoxRemindLater
//
resources.ApplyResources(this.comboBoxRemindLater, "comboBoxRemindLater");
this.comboBoxRemindLater.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.comboBoxRemindLater.FormattingEnabled = true;
this.comboBoxRemindLater.Items.AddRange(new object[] {
resources.GetString("comboBoxRemindLater.Items"),
resources.GetString("comboBoxRemindLater.Items1"),
resources.GetString("comboBoxRemindLater.Items2"),
resources.GetString("comboBoxRemindLater.Items3"),
resources.GetString("comboBoxRemindLater.Items4"),
resources.GetString("comboBoxRemindLater.Items5"),
resources.GetString("comboBoxRemindLater.Items6")});
this.comboBoxRemindLater.Name = "comboBoxRemindLater";
//
// buttonOK
//
this.buttonOK.DialogResult = System.Windows.Forms.DialogResult.OK;
resources.ApplyResources(this.buttonOK, "buttonOK");
this.buttonOK.Image = Properties.Resources.clock_play;
this.buttonOK.Name = "buttonOK";
this.buttonOK.UseVisualStyleBackColor = true;
this.buttonOK.Click += new System.EventHandler(this.ButtonOkClick);
//
// tableLayoutPanel
//
resources.ApplyResources(this.tableLayoutPanel, "tableLayoutPanel");
this.tableLayoutPanel.Controls.Add(this.pictureBoxIcon, 0, 0);
this.tableLayoutPanel.Controls.Add(this.labelTitle, 1, 0);
this.tableLayoutPanel.Controls.Add(this.radioButtonNo, 1, 3);
this.tableLayoutPanel.Controls.Add(this.comboBoxRemindLater, 2, 2);
this.tableLayoutPanel.Controls.Add(this.radioButtonYes, 1, 2);
this.tableLayoutPanel.Controls.Add(this.labelDescription, 1, 1);
this.tableLayoutPanel.Controls.Add(this.buttonOK, 2, 4);
this.tableLayoutPanel.Name = "tableLayoutPanel";
//
// RemindLaterForm
//
resources.ApplyResources(this, "$this");
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.Controls.Add(this.tableLayoutPanel);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
this.MaximizeBox = false;
this.MinimizeBox = false;
this.Name = "RemindLaterForm";
this.ShowIcon = false;
this.ShowInTaskbar = false;
this.Load += new System.EventHandler(this.RemindLaterFormLoad);
((System.ComponentModel.ISupportInitialize)(this.pictureBoxIcon)).EndInit();
this.tableLayoutPanel.ResumeLayout(false);
this.tableLayoutPanel.PerformLayout();
this.ResumeLayout(false);
}
#endregion
private System.Windows.Forms.Label labelTitle;
private System.Windows.Forms.PictureBox pictureBoxIcon;
private System.Windows.Forms.Label labelDescription;
private System.Windows.Forms.RadioButton radioButtonYes;
private System.Windows.Forms.RadioButton radioButtonNo;
private System.Windows.Forms.ComboBox comboBoxRemindLater;
private System.Windows.Forms.Button buttonOK;
private System.Windows.Forms.TableLayoutPanel tableLayoutPanel;
}
}

View File

@ -0,0 +1,72 @@
using System;
using System.Windows.Forms;
namespace Mk0.Software.OnlineUpdater
{
internal partial class RemindLaterForm : Form
{
public RemindLaterFormat RemindLaterFormat { get; private set; }
public int RemindLaterAt { get; private set; }
public RemindLaterForm()
{
InitializeComponent();
}
private void RemindLaterFormLoad(object sender, EventArgs e)
{
comboBoxRemindLater.SelectedIndex = 0;
radioButtonYes.Checked = true;
}
private void ButtonOkClick(object sender, EventArgs e)
{
if (radioButtonYes.Checked)
{
switch (comboBoxRemindLater.SelectedIndex)
{
case 0:
RemindLaterFormat = RemindLaterFormat.Minutes;
RemindLaterAt = 30;
break;
case 1:
RemindLaterFormat = RemindLaterFormat.Hours;
RemindLaterAt = 12;
break;
case 2:
RemindLaterFormat = RemindLaterFormat.Days;
RemindLaterAt = 1;
break;
case 3:
RemindLaterFormat = RemindLaterFormat.Days;
RemindLaterAt = 2;
break;
case 4:
RemindLaterFormat = RemindLaterFormat.Days;
RemindLaterAt = 4;
break;
case 5:
RemindLaterFormat = RemindLaterFormat.Days;
RemindLaterAt = 8;
break;
case 6:
RemindLaterFormat = RemindLaterFormat.Days;
RemindLaterAt = 10;
break;
}
DialogResult = DialogResult.OK;
}
else
{
DialogResult = DialogResult.Abort;
}
}
private void RadioButtonYesCheckedChanged(object sender, EventArgs e)
{
comboBoxRemindLater.Enabled = radioButtonYes.Checked;
}
}
}

View File

@ -0,0 +1,433 @@
<?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>
<assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="labelTitle.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="tableLayoutPanel.ColumnCount" type="System.Int32, mscorlib">
<value>3</value>
</data>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="pictureBoxIcon.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Fill</value>
</data>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="pictureBoxIcon.Location" type="System.Drawing.Point, System.Drawing">
<value>3, 3</value>
</data>
<data name="pictureBoxIcon.Size" type="System.Drawing.Size, System.Drawing">
<value>79, 90</value>
</data>
<data name="pictureBoxIcon.SizeMode" type="System.Windows.Forms.PictureBoxSizeMode, System.Windows.Forms">
<value>CenterImage</value>
</data>
<data name="pictureBoxIcon.TabIndex" type="System.Int32, mscorlib">
<value>1</value>
</data>
<data name="&gt;&gt;pictureBoxIcon.Name" xml:space="preserve">
<value>pictureBoxIcon</value>
</data>
<data name="&gt;&gt;pictureBoxIcon.Type" xml:space="preserve">
<value>System.Windows.Forms.PictureBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;pictureBoxIcon.Parent" xml:space="preserve">
<value>tableLayoutPanel</value>
</data>
<data name="&gt;&gt;pictureBoxIcon.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="radioButtonNo.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="radioButtonNo.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Bottom</value>
</data>
<data name="radioButtonNo.Font" type="System.Drawing.Font, System.Drawing">
<value>Segoe UI, 9pt, style=Bold</value>
</data>
<data name="radioButtonNo.Location" type="System.Drawing.Point, System.Drawing">
<value>91, 138</value>
</data>
<data name="radioButtonNo.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>6, 3, 3, 3</value>
</data>
<data name="radioButtonNo.Size" type="System.Drawing.Size, System.Drawing">
<value>406, 19</value>
</data>
<data name="radioButtonNo.TabIndex" type="System.Int32, mscorlib">
<value>4</value>
</data>
<data name="radioButtonNo.Text" xml:space="preserve">
<value>Nein, Update jetzt herunterlanden (empfohlen)</value>
</data>
<data name="&gt;&gt;radioButtonNo.Name" xml:space="preserve">
<value>radioButtonNo</value>
</data>
<data name="&gt;&gt;radioButtonNo.Type" xml:space="preserve">
<value>System.Windows.Forms.RadioButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;radioButtonNo.Parent" xml:space="preserve">
<value>tableLayoutPanel</value>
</data>
<data name="&gt;&gt;radioButtonNo.ZOrder" xml:space="preserve">
<value>2</value>
</data>
<data name="comboBoxRemindLater.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Bottom</value>
</data>
<data name="comboBoxRemindLater.Items" xml:space="preserve">
<value>nach 30 Minuten</value>
</data>
<data name="comboBoxRemindLater.Items1" xml:space="preserve">
<value>nach 12 Stunden</value>
</data>
<data name="comboBoxRemindLater.Items2" xml:space="preserve">
<value>nach 1 Tag</value>
</data>
<data name="comboBoxRemindLater.Items3" xml:space="preserve">
<value>nach 2 Tagen</value>
</data>
<data name="comboBoxRemindLater.Items4" xml:space="preserve">
<value>nach 4 Tagen</value>
</data>
<data name="comboBoxRemindLater.Items5" xml:space="preserve">
<value>nach 8 Tagen</value>
</data>
<data name="comboBoxRemindLater.Items6" xml:space="preserve">
<value>nach 10 Tagen</value>
</data>
<data name="comboBoxRemindLater.Location" type="System.Drawing.Point, System.Drawing">
<value>375, 102</value>
</data>
<data name="comboBoxRemindLater.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>10, 3, 10, 3</value>
</data>
<data name="comboBoxRemindLater.Size" type="System.Drawing.Size, System.Drawing">
<value>115, 23</value>
</data>
<data name="comboBoxRemindLater.TabIndex" type="System.Int32, mscorlib">
<value>5</value>
</data>
<data name="&gt;&gt;comboBoxRemindLater.Name" xml:space="preserve">
<value>comboBoxRemindLater</value>
</data>
<data name="&gt;&gt;comboBoxRemindLater.Type" xml:space="preserve">
<value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;comboBoxRemindLater.Parent" xml:space="preserve">
<value>tableLayoutPanel</value>
</data>
<data name="&gt;&gt;comboBoxRemindLater.ZOrder" xml:space="preserve">
<value>3</value>
</data>
<data name="radioButtonYes.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="radioButtonYes.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Bottom</value>
</data>
<data name="radioButtonYes.Font" type="System.Drawing.Font, System.Drawing">
<value>Segoe UI, 9pt</value>
</data>
<data name="radioButtonYes.Location" type="System.Drawing.Point, System.Drawing">
<value>91, 106</value>
</data>
<data name="radioButtonYes.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>6, 3, 3, 3</value>
</data>
<data name="radioButtonYes.Size" type="System.Drawing.Size, System.Drawing">
<value>271, 19</value>
</data>
<data name="radioButtonYes.TabIndex" type="System.Int32, mscorlib">
<value>3</value>
</data>
<data name="radioButtonYes.Text" xml:space="preserve">
<value>Ja, erinnere mich bitte wieder: </value>
</data>
<data name="&gt;&gt;radioButtonYes.Name" xml:space="preserve">
<value>radioButtonYes</value>
</data>
<data name="&gt;&gt;radioButtonYes.Type" xml:space="preserve">
<value>System.Windows.Forms.RadioButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;radioButtonYes.Parent" xml:space="preserve">
<value>tableLayoutPanel</value>
</data>
<data name="&gt;&gt;radioButtonYes.ZOrder" xml:space="preserve">
<value>4</value>
</data>
<data name="labelDescription.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="labelDescription.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Bottom</value>
</data>
<data name="labelDescription.Font" type="System.Drawing.Font, System.Drawing">
<value>Segoe UI, 9pt</value>
</data>
<data name="labelDescription.Location" type="System.Drawing.Point, System.Drawing">
<value>88, 51</value>
</data>
<data name="labelDescription.Size" type="System.Drawing.Size, System.Drawing">
<value>409, 45</value>
</data>
<data name="labelDescription.TabIndex" type="System.Int32, mscorlib">
<value>2</value>
</data>
<data name="labelDescription.Text" xml:space="preserve">
<value>Du solltest das Update jetzt ausführen. Dies dauert nur sehr kurze Zeit (abhängig von deiner Internetgeschwindigkeit) und stellt neue Funktionen zur Verfügung, schließt mögliche Sicherheitslücken.
</value>
</data>
<data name="&gt;&gt;labelDescription.Name" xml:space="preserve">
<value>labelDescription</value>
</data>
<data name="&gt;&gt;labelDescription.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;labelDescription.Parent" xml:space="preserve">
<value>tableLayoutPanel</value>
</data>
<data name="&gt;&gt;labelDescription.ZOrder" xml:space="preserve">
<value>5</value>
</data>
<data name="buttonOK.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Fill</value>
</data>
<data name="buttonOK.Location" type="System.Drawing.Point, System.Drawing">
<value>375, 163</value>
</data>
<data name="buttonOK.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>10, 3, 10, 3</value>
</data>
<data name="buttonOK.Size" type="System.Drawing.Size, System.Drawing">
<value>115, 32</value>
</data>
<data name="buttonOK.TabIndex" type="System.Int32, mscorlib">
<value>6</value>
</data>
<data name="buttonOK.Text" xml:space="preserve">
<value>OK</value>
</data>
<data name="buttonOK.TextAlign" type="System.Drawing.ContentAlignment, System.Drawing">
<value>MiddleRight</value>
</data>
<data name="buttonOK.TextImageRelation" type="System.Windows.Forms.TextImageRelation, System.Windows.Forms">
<value>ImageBeforeText</value>
</data>
<data name="&gt;&gt;buttonOK.Name" xml:space="preserve">
<value>buttonOK</value>
</data>
<data name="&gt;&gt;buttonOK.Type" xml:space="preserve">
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;buttonOK.Parent" xml:space="preserve">
<value>tableLayoutPanel</value>
</data>
<data name="&gt;&gt;buttonOK.ZOrder" xml:space="preserve">
<value>6</value>
</data>
<data name="tableLayoutPanel.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Fill</value>
</data>
<data name="tableLayoutPanel.Location" type="System.Drawing.Point, System.Drawing">
<value>0, 0</value>
</data>
<data name="tableLayoutPanel.RowCount" type="System.Int32, mscorlib">
<value>5</value>
</data>
<data name="tableLayoutPanel.Size" type="System.Drawing.Size, System.Drawing">
<value>499, 198</value>
</data>
<data name="tableLayoutPanel.TabIndex" type="System.Int32, mscorlib">
<value>7</value>
</data>
<data name="&gt;&gt;tableLayoutPanel.Name" xml:space="preserve">
<value>tableLayoutPanel</value>
</data>
<data name="&gt;&gt;tableLayoutPanel.Type" xml:space="preserve">
<value>System.Windows.Forms.TableLayoutPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;tableLayoutPanel.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;tableLayoutPanel.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="tableLayoutPanel.LayoutSettings" type="System.Windows.Forms.TableLayoutSettings, System.Windows.Forms">
<value>&lt;?xml version="1.0" encoding="utf-16"?&gt;&lt;TableLayoutSettings&gt;&lt;Controls&gt;&lt;Control Name="pictureBoxIcon" Row="0" RowSpan="2" Column="0" ColumnSpan="1" /&gt;&lt;Control Name="labelTitle" Row="0" RowSpan="1" Column="1" ColumnSpan="2" /&gt;&lt;Control Name="radioButtonNo" Row="3" RowSpan="1" Column="1" ColumnSpan="2" /&gt;&lt;Control Name="comboBoxRemindLater" Row="2" RowSpan="1" Column="2" ColumnSpan="1" /&gt;&lt;Control Name="radioButtonYes" Row="2" RowSpan="1" Column="1" ColumnSpan="1" /&gt;&lt;Control Name="labelDescription" Row="1" RowSpan="1" Column="1" ColumnSpan="2" /&gt;&lt;Control Name="buttonOK" Row="4" RowSpan="1" Column="2" ColumnSpan="1" /&gt;&lt;/Controls&gt;&lt;Columns Styles="Absolute,85,Absolute,280,Absolute,135" /&gt;&lt;Rows Styles="Absolute,32,Absolute,64,Absolute,32,Absolute,32,Absolute,16" /&gt;&lt;/TableLayoutSettings&gt;</value>
</data>
<data name="labelTitle.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Bottom</value>
</data>
<data name="labelTitle.Font" type="System.Drawing.Font, System.Drawing">
<value>Segoe UI, 10.5pt, style=Bold</value>
</data>
<data name="labelTitle.Location" type="System.Drawing.Point, System.Drawing">
<value>88, 13</value>
</data>
<data name="labelTitle.Size" type="System.Drawing.Size, System.Drawing">
<value>409, 19</value>
</data>
<data name="labelTitle.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
</data>
<data name="labelTitle.Text" xml:space="preserve">
<value>Willst du das Update später herunterladen?</value>
</data>
<data name="&gt;&gt;labelTitle.Name" xml:space="preserve">
<value>labelTitle</value>
</data>
<data name="&gt;&gt;labelTitle.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;labelTitle.Parent" xml:space="preserve">
<value>tableLayoutPanel</value>
</data>
<data name="&gt;&gt;labelTitle.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="$this.Localizable" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
<value>7, 15</value>
</data>
<data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing">
<value>499, 198</value>
</data>
<data name="$this.Font" type="System.Drawing.Font, System.Drawing">
<value>Segoe UI, 9pt</value>
</data>
<data name="$this.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>3, 4, 3, 4</value>
</data>
<data name="$this.StartPosition" type="System.Windows.Forms.FormStartPosition, System.Windows.Forms">
<value>CenterParent</value>
</data>
<data name="$this.Text" xml:space="preserve">
<value>Später an Update erinnern</value>
</data>
<data name="&gt;&gt;$this.Name" xml:space="preserve">
<value>RemindLaterForm</value>
</data>
<data name="&gt;&gt;$this.Type" xml:space="preserve">
<value>System.Windows.Forms.Form, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
</root>

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 965 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 959 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 574 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 620 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 KiB

View File

@ -0,0 +1,133 @@
namespace Mk0.Software.OnlineUpdater
{
partial class UpdateForm
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(UpdateForm));
this.webBrowser = new System.Windows.Forms.WebBrowser();
this.labelUpdate = new System.Windows.Forms.Label();
this.labelDescription = new System.Windows.Forms.Label();
this.labelReleaseNotes = new System.Windows.Forms.Label();
this.buttonUpdate = new System.Windows.Forms.Button();
this.buttonRemindLater = new System.Windows.Forms.Button();
this.pictureBoxIcon = new System.Windows.Forms.PictureBox();
this.buttonSkip = new System.Windows.Forms.Button();
((System.ComponentModel.ISupportInitialize)(this.pictureBoxIcon)).BeginInit();
this.SuspendLayout();
//
// webBrowser
//
resources.ApplyResources(this.webBrowser, "webBrowser");
this.webBrowser.Name = "webBrowser";
this.webBrowser.ScriptErrorsSuppressed = true;
//
// labelUpdate
//
resources.ApplyResources(this.labelUpdate, "labelUpdate");
this.labelUpdate.Name = "labelUpdate";
//
// labelDescription
//
resources.ApplyResources(this.labelDescription, "labelDescription");
this.labelDescription.Name = "labelDescription";
//
// labelReleaseNotes
//
resources.ApplyResources(this.labelReleaseNotes, "labelReleaseNotes");
this.labelReleaseNotes.Name = "labelReleaseNotes";
//
// buttonUpdate
//
resources.ApplyResources(this.buttonUpdate, "buttonUpdate");
this.buttonUpdate.Image = Properties.Resources.download;
this.buttonUpdate.Name = "buttonUpdate";
this.buttonUpdate.UseVisualStyleBackColor = true;
this.buttonUpdate.Click += new System.EventHandler(this.ButtonUpdateClick);
//
// buttonRemindLater
//
resources.ApplyResources(this.buttonRemindLater, "buttonRemindLater");
this.buttonRemindLater.Image = Properties.Resources.clock_go;
this.buttonRemindLater.Name = "buttonRemindLater";
this.buttonRemindLater.UseVisualStyleBackColor = true;
this.buttonRemindLater.Click += new System.EventHandler(this.ButtonRemindLaterClick);
//
// pictureBoxIcon
//
this.pictureBoxIcon.Image = Properties.Resources.update;
resources.ApplyResources(this.pictureBoxIcon, "pictureBoxIcon");
this.pictureBoxIcon.Name = "pictureBoxIcon";
this.pictureBoxIcon.TabStop = false;
//
// buttonSkip
//
resources.ApplyResources(this.buttonSkip, "buttonSkip");
this.buttonSkip.DialogResult = System.Windows.Forms.DialogResult.Abort;
this.buttonSkip.Image = Properties.Resources.hand_point;
this.buttonSkip.Name = "buttonSkip";
this.buttonSkip.UseVisualStyleBackColor = true;
this.buttonSkip.Click += new System.EventHandler(this.ButtonSkipClick);
//
// UpdateForm
//
this.AcceptButton = this.buttonUpdate;
resources.ApplyResources(this, "$this");
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.Controls.Add(this.pictureBoxIcon);
this.Controls.Add(this.labelReleaseNotes);
this.Controls.Add(this.labelDescription);
this.Controls.Add(this.labelUpdate);
this.Controls.Add(this.webBrowser);
this.Controls.Add(this.buttonUpdate);
this.Controls.Add(this.buttonSkip);
this.Controls.Add(this.buttonRemindLater);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
this.MaximizeBox = false;
this.MinimizeBox = false;
this.Name = "UpdateForm";
this.FormClosed += new System.Windows.Forms.FormClosedEventHandler(this.UpdateForm_FormClosed);
this.Load += new System.EventHandler(this.UpdateFormLoad);
((System.ComponentModel.ISupportInitialize)(this.pictureBoxIcon)).EndInit();
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.Button buttonRemindLater;
private System.Windows.Forms.Button buttonUpdate;
private System.Windows.Forms.Button buttonSkip;
private System.Windows.Forms.WebBrowser webBrowser;
private System.Windows.Forms.Label labelUpdate;
private System.Windows.Forms.Label labelDescription;
private System.Windows.Forms.Label labelReleaseNotes;
private System.Windows.Forms.PictureBox pictureBoxIcon;
}
}

View File

@ -0,0 +1,197 @@
using System;
using System.Diagnostics;
using System.Drawing;
using System.Globalization;
using System.IO;
using System.Windows.Forms;
using Microsoft.Win32;
namespace Mk0.Software.OnlineUpdater
{
internal partial class UpdateForm : Form
{
public UpdateForm()
{
InitializeComponent();
UseLatestIE();
buttonSkip.Visible = AutoUpdater.ShowSkipButton;
buttonRemindLater.Visible = AutoUpdater.ShowRemindLaterButton;
var resources = new System.ComponentModel.ComponentResourceManager(typeof(UpdateForm));
Text = string.Format(resources.GetString("$this.Text", CultureInfo.CurrentCulture),
AutoUpdater.AppTitle, AutoUpdater.CurrentVersion);
labelUpdate.Text = string.Format(resources.GetString("labelUpdate.Text", CultureInfo.CurrentCulture),
AutoUpdater.AppTitle);
labelDescription.Text =
string.Format(resources.GetString("labelDescription.Text", CultureInfo.CurrentCulture),
AutoUpdater.AppTitle, AutoUpdater.CurrentVersion, AutoUpdater.InstalledVersion);
if (AutoUpdater.Mandatory && AutoUpdater.UpdateMode == Mode.Forced)
{
ControlBox = false;
}
}
public sealed override string Text
{
get { return base.Text; }
set { base.Text = value; }
}
private void UseLatestIE()
{
int ieValue = 0;
switch (webBrowser.Version.Major)
{
case 11:
ieValue = 11001;
break;
case 10:
ieValue = 10001;
break;
case 9:
ieValue = 9999;
break;
case 8:
ieValue = 8888;
break;
case 7:
ieValue = 7000;
break;
}
if (ieValue != 0)
{
try
{
using (RegistryKey registryKey =
Registry.CurrentUser.OpenSubKey(
@"SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION",
true))
{
registryKey?.SetValue(Path.GetFileName(Process.GetCurrentProcess().MainModule.FileName),
ieValue,
RegistryValueKind.DWord);
}
}
catch (Exception)
{
// ignored
}
}
}
private void UpdateFormLoad(object sender, EventArgs e)
{
if (string.IsNullOrEmpty(AutoUpdater.ChangelogURL))
{
var reduceHeight = labelReleaseNotes.Height + webBrowser.Height;
labelReleaseNotes.Hide();
webBrowser.Hide();
Height -= reduceHeight;
}
else
{
if (null != AutoUpdater.BasicAuthChangeLog)
{
webBrowser.Navigate(AutoUpdater.ChangelogURL, "", null, $"Authorization: {AutoUpdater.BasicAuthChangeLog}");
}
else
{
webBrowser.Navigate(AutoUpdater.ChangelogURL);
}
}
var labelSize = new Size(Width - 110, 0);
labelDescription.MaximumSize = labelUpdate.MaximumSize = labelSize;
}
private void ButtonUpdateClick(object sender, EventArgs e)
{
if (AutoUpdater.OpenDownloadPage)
{
var processStartInfo = new ProcessStartInfo(AutoUpdater.DownloadURL);
Process.Start(processStartInfo);
DialogResult = DialogResult.OK;
}
else
{
if (AutoUpdater.DownloadUpdate())
{
DialogResult = DialogResult.OK;
}
}
}
private void ButtonSkipClick(object sender, EventArgs e)
{
using (RegistryKey updateKey = Registry.CurrentUser.CreateSubKey(AutoUpdater.RegistryLocation))
{
if (updateKey != null)
{
updateKey.SetValue("version", AutoUpdater.CurrentVersion.ToString());
updateKey.SetValue("skip", 1);
}
}
}
private void ButtonRemindLaterClick(object sender, EventArgs e)
{
if (AutoUpdater.LetUserSelectRemindLater)
{
var remindLaterForm = new RemindLaterForm();
var dialogResult = remindLaterForm.ShowDialog();
if (dialogResult.Equals(DialogResult.OK))
{
AutoUpdater.RemindLaterTimeSpan = remindLaterForm.RemindLaterFormat;
AutoUpdater.RemindLaterAt = remindLaterForm.RemindLaterAt;
}
else if (dialogResult.Equals(DialogResult.Abort))
{
ButtonUpdateClick(sender, e);
return;
}
else
{
return;
}
}
using (RegistryKey updateKey = Registry.CurrentUser.CreateSubKey(AutoUpdater.RegistryLocation))
{
if (updateKey != null)
{
updateKey.SetValue("version", AutoUpdater.CurrentVersion);
updateKey.SetValue("skip", 0);
DateTime remindLaterDateTime = DateTime.Now;
switch (AutoUpdater.RemindLaterTimeSpan)
{
case RemindLaterFormat.Days:
remindLaterDateTime = DateTime.Now + TimeSpan.FromDays(AutoUpdater.RemindLaterAt);
break;
case RemindLaterFormat.Hours:
remindLaterDateTime = DateTime.Now + TimeSpan.FromHours(AutoUpdater.RemindLaterAt);
break;
case RemindLaterFormat.Minutes:
remindLaterDateTime = DateTime.Now + TimeSpan.FromMinutes(AutoUpdater.RemindLaterAt);
break;
}
updateKey.SetValue("remindlater",
remindLaterDateTime.ToString(CultureInfo.CreateSpecificCulture("en-US").DateTimeFormat));
AutoUpdater.SetTimer(remindLaterDateTime);
}
}
DialogResult = DialogResult.Cancel;
}
private void UpdateForm_FormClosed(object sender, FormClosedEventArgs e)
{
AutoUpdater.Running = false;
}
}
}

View File

@ -0,0 +1,955 @@
<?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>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="webBrowser.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Bottom, Left, Right</value>
</data>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="webBrowser.Location" type="System.Drawing.Point, System.Drawing">
<value>94, 120</value>
</data>
<data name="webBrowser.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>2, 2, 2, 2</value>
</data>
<data name="webBrowser.MinimumSize" type="System.Drawing.Size, System.Drawing">
<value>23, 23</value>
</data>
<data name="webBrowser.Size" type="System.Drawing.Size, System.Drawing">
<value>538, 432</value>
</data>
<assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="webBrowser.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
</data>
<data name="&gt;&gt;webBrowser.Name" xml:space="preserve">
<value>webBrowser</value>
</data>
<data name="&gt;&gt;webBrowser.Type" xml:space="preserve">
<value>System.Windows.Forms.WebBrowser, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;webBrowser.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;webBrowser.ZOrder" xml:space="preserve">
<value>4</value>
</data>
<data name="labelUpdate.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="labelUpdate.Font" type="System.Drawing.Font, System.Drawing">
<value>Segoe UI, 10.5pt, style=Bold</value>
</data>
<data name="labelUpdate.Location" type="System.Drawing.Point, System.Drawing">
<value>91, 14</value>
</data>
<data name="labelUpdate.MaximumSize" type="System.Drawing.Size, System.Drawing">
<value>550, 0</value>
</data>
<data name="labelUpdate.Size" type="System.Drawing.Size, System.Drawing">
<value>227, 19</value>
</data>
<data name="labelUpdate.TabIndex" type="System.Int32, mscorlib">
<value>5</value>
</data>
<data name="labelUpdate.Text" xml:space="preserve">
<value>Eine neue Version von {0} ist verfügbar!</value>
</data>
<data name="&gt;&gt;labelUpdate.Name" xml:space="preserve">
<value>labelUpdate</value>
</data>
<data name="&gt;&gt;labelUpdate.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;labelUpdate.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;labelUpdate.ZOrder" xml:space="preserve">
<value>3</value>
</data>
<data name="labelDescription.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="labelDescription.Font" type="System.Drawing.Font, System.Drawing">
<value>Segoe UI, 9pt</value>
</data>
<data name="labelDescription.Location" type="System.Drawing.Point, System.Drawing">
<value>91, 50</value>
</data>
<data name="labelDescription.MaximumSize" type="System.Drawing.Size, System.Drawing">
<value>550, 0</value>
</data>
<data name="labelDescription.Size" type="System.Drawing.Size, System.Drawing">
<value>479, 15</value>
</data>
<data name="labelDescription.TabIndex" type="System.Int32, mscorlib">
<value>6</value>
</data>
<data name="labelDescription.Text" xml:space="preserve">
<value>{0} {1} ist jetzt verfügbar. Es ist die veraltete Version {2} installiert. Soll die neue Version jetzt heruntergeladen werden?</value>
</data>
<data name="&gt;&gt;labelDescription.Name" xml:space="preserve">
<value>labelDescription</value>
</data>
<data name="&gt;&gt;labelDescription.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;labelDescription.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;labelDescription.ZOrder" xml:space="preserve">
<value>2</value>
</data>
<data name="labelReleaseNotes.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="labelReleaseNotes.Font" type="System.Drawing.Font, System.Drawing">
<value>Segoe UI, 9.75pt, style=Bold</value>
</data>
<data name="labelReleaseNotes.Location" type="System.Drawing.Point, System.Drawing">
<value>91, 90</value>
</data>
<data name="labelReleaseNotes.Size" type="System.Drawing.Size, System.Drawing">
<value>98, 17</value>
</data>
<data name="labelReleaseNotes.TabIndex" type="System.Int32, mscorlib">
<value>7</value>
</data>
<data name="labelReleaseNotes.Text" xml:space="preserve">
<value>Versionshinweise:</value>
</data>
<data name="&gt;&gt;labelReleaseNotes.Name" xml:space="preserve">
<value>labelReleaseNotes</value>
</data>
<data name="&gt;&gt;labelReleaseNotes.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;labelReleaseNotes.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;labelReleaseNotes.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="buttonUpdate.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Bottom, Right</value>
</data>
<data name="buttonUpdate.Font" type="System.Drawing.Font, System.Drawing">
<value>Segoe UI, 9pt</value>
</data>
<data name="buttonUpdate.Location" type="System.Drawing.Point, System.Drawing">
<value>479, 573</value>
</data>
<data name="buttonUpdate.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>2, 2, 2, 2</value>
</data>
<data name="buttonUpdate.Size" type="System.Drawing.Size, System.Drawing">
<value>153, 28</value>
</data>
<data name="buttonUpdate.TabIndex" type="System.Int32, mscorlib">
<value>2</value>
</data>
<data name="buttonUpdate.Text" xml:space="preserve">
<value>Update</value>
</data>
<data name="buttonUpdate.TextAlign" type="System.Drawing.ContentAlignment, System.Drawing">
<value>MiddleRight</value>
</data>
<data name="buttonUpdate.TextImageRelation" type="System.Windows.Forms.TextImageRelation, System.Windows.Forms">
<value>ImageBeforeText</value>
</data>
<data name="&gt;&gt;buttonUpdate.Name" xml:space="preserve">
<value>buttonUpdate</value>
</data>
<data name="&gt;&gt;buttonUpdate.Type" xml:space="preserve">
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;buttonUpdate.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;buttonUpdate.ZOrder" xml:space="preserve">
<value>5</value>
</data>
<data name="buttonRemindLater.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Bottom, Right</value>
</data>
<data name="buttonRemindLater.Font" type="System.Drawing.Font, System.Drawing">
<value>Segoe UI, 9pt</value>
</data>
<data name="buttonRemindLater.Location" type="System.Drawing.Point, System.Drawing">
<value>322, 573</value>
</data>
<data name="buttonRemindLater.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>2, 2, 2, 2</value>
</data>
<data name="buttonRemindLater.Size" type="System.Drawing.Size, System.Drawing">
<value>153, 28</value>
</data>
<data name="buttonRemindLater.TabIndex" type="System.Int32, mscorlib">
<value>3</value>
</data>
<data name="buttonRemindLater.Text" xml:space="preserve">
<value>Später erinnern</value>
</data>
<data name="buttonRemindLater.TextAlign" type="System.Drawing.ContentAlignment, System.Drawing">
<value>MiddleRight</value>
</data>
<data name="buttonRemindLater.TextImageRelation" type="System.Windows.Forms.TextImageRelation, System.Windows.Forms">
<value>ImageBeforeText</value>
</data>
<data name="&gt;&gt;buttonRemindLater.Name" xml:space="preserve">
<value>buttonRemindLater</value>
</data>
<data name="&gt;&gt;buttonRemindLater.Type" xml:space="preserve">
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;buttonRemindLater.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;buttonRemindLater.ZOrder" xml:space="preserve">
<value>7</value>
</data>
<data name="pictureBoxIcon.Location" type="System.Drawing.Point, System.Drawing">
<value>12, 14</value>
</data>
<data name="pictureBoxIcon.Size" type="System.Drawing.Size, System.Drawing">
<value>70, 66</value>
</data>
<data name="pictureBoxIcon.SizeMode" type="System.Windows.Forms.PictureBoxSizeMode, System.Windows.Forms">
<value>CenterImage</value>
</data>
<data name="pictureBoxIcon.TabIndex" type="System.Int32, mscorlib">
<value>8</value>
</data>
<data name="&gt;&gt;pictureBoxIcon.Name" xml:space="preserve">
<value>pictureBoxIcon</value>
</data>
<data name="&gt;&gt;pictureBoxIcon.Type" xml:space="preserve">
<value>System.Windows.Forms.PictureBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;pictureBoxIcon.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;pictureBoxIcon.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="buttonSkip.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Bottom, Left</value>
</data>
<data name="buttonSkip.Font" type="System.Drawing.Font, System.Drawing">
<value>Segoe UI, 9pt</value>
</data>
<data name="buttonSkip.Location" type="System.Drawing.Point, System.Drawing">
<value>95, 573</value>
</data>
<data name="buttonSkip.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>2, 2, 2, 2</value>
</data>
<data name="buttonSkip.Size" type="System.Drawing.Size, System.Drawing">
<value>153, 28</value>
</data>
<data name="buttonSkip.TabIndex" type="System.Int32, mscorlib">
<value>1</value>
</data>
<data name="buttonSkip.Text" xml:space="preserve">
<value>Version überspringen</value>
</data>
<data name="buttonSkip.TextAlign" type="System.Drawing.ContentAlignment, System.Drawing">
<value>MiddleRight</value>
</data>
<data name="buttonSkip.TextImageRelation" type="System.Windows.Forms.TextImageRelation, System.Windows.Forms">
<value>ImageBeforeText</value>
</data>
<data name="&gt;&gt;buttonSkip.Name" xml:space="preserve">
<value>buttonSkip</value>
</data>
<data name="&gt;&gt;buttonSkip.Type" xml:space="preserve">
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;buttonSkip.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;buttonSkip.ZOrder" xml:space="preserve">
<value>6</value>
</data>
<data name="$this.Localizable" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
<value>7, 15</value>
</data>
<data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing">
<value>643, 612</value>
</data>
<data name="$this.Font" type="System.Drawing.Font, System.Drawing">
<value>Segoe UI, 9pt</value>
</data>
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
AAABAAQAEBAAAAAAIABoBAAARgAAACAgAAAAACAAqBAAAK4EAAAwMAAAAAAgAKglAABWFQAAQEAAAAAA
IAAoQgAA/joAACgAAAAQAAAAIAAAAAEAIAAAAAAAQAQAAAAAAAAAAAAAAAAAAAAAAAD///8B////Af//
/wH///8B////Af///wEAAAADAAAAAwAAAAMAAAADAAAAA////wH///8B////Af///wH///8B////Af//
/wH///8BAAAAAwAAAAkAAAANAAAADwAAABEABQ0TAEqmPQAAAA0AAAAJAAAABf///wH///8B////Af//
/wH///8BAAAABwAAAA0ASKJBBVGsWwAAAB0AAAAhCV2/hxBv2MUAAAAZAAAAFQAAAA8AAAAHAAAAA///
/wH///8BAAAAAwAAAAkAAAARAEqnVyuO7/8Xbc2vA0ibbxuF7vsVfur7ACBILwAAABkAFzQZADR2GQAA
AAX///8B////Af///wEAAAAJAAAADwBKo0sokvT/IJH3/yeO8P8Wi/f/HYz1/xRs0LkWdt7LFHbj9wBT
u0cAAAAD////Af///wEAXM4RAFrITxJpzW8eddWlMpn0/x+U+P8ilvj/UrH6/xeN9/8Xi/b/DIP1/xh5
480AAAUF////Af///wH///8BAFzPDS+F4sU/ovj/LJz4/yea+P8nmvn/f8f8//H5/v8/pvr/Foz3/x+N
9f8KZtNt////Af///wH///8B////Af///wEAXM4TM4vm0zOh+f8toPn/Qab5//P5/v//////yef9/x2R
9/8YjPb/IYbt+Rp13ZUAXM4b////Af///wH///8B////ASB32otEqfj/M6X6/0Ok+f+Uyfv//////2Wz
+v8olff/FIv3/xeJ9v8nh+z5D2nVj////wH///8B////ASB32nNGpPX/L6L6/zao+v86q/v/aLb6////
//8nm/j/HZL4/yuV9v8ged2pAFvOH////wH///8B////AQBbzR8yhN+3QJXp10Ga7fdGrfr/Naf6/0un
+f+q0vv/IJX4/xyR9/8ikff/KH3ei////wH///8B////Af///wH///8B////Af///wEAXM5DS6v4/y6h
+f84pPn/Jpr4/zCd+P81k+3/M5f1/zuQ6usAW84J////Af///wH///8B////Af///wH///8BAFzOU1Wv
+f9Gne7vOovjxTWf+P88mfH/AFvNMQJfz0kieNuFAFzOM////wH///8B////Af///wH///8B////AQNf
z2M/jeKtAFzOGwBbzg87kOjbP5Loz////wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wEAW8wH////Af///wH///8BBWHQMxhu1nf///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAD//wAA
//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//ygA
AAAgAAAAQAAAAAEAIAAAAAAAgBAAAAAAAAAAAAAAAAAAAAAAAAD///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wEAAAADAAAAAwAAAAUAAAAFAAAABwAAAAcAAAAHAAAABwAA
AAcAAAAFAAAAAwAAAAP///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////AQAAAAMAAAAFAAAABwAAAAkAAAALAAAACwAAAA0AAAANAAAADwAA
AA8AAAANAAAADQAAAA0AAAALAAAACQAAAAcAAAAFAAAAA////wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wEAAAAFAAAABwAAAAsAAAANAAAADwAAABEAAAATAAAAEwAA
ABUAAAAVAAAAFQAPJhkAWci7ACxgIQAAABEAAAARAAAADwAAAAsAAAAJAAAABwAAAAP///8B////Af//
/wH///8B////Af///wH///8B////Af///wEAAAADAAAABwAAAAkAAAANAAAADwBHnj0AH0YdAAAAFwAA
ABkAAAAbAAAAHQAAAB0AAAAdAFW+mQ5v3P0ATq5rAAAAGQAAABcAAAATAAAAEQAAAA0AAAALAAAABwAA
AAX///8B////Af///wH///8B////Af///wH///8BAAAAAwAAAAUAAAAJAAAADQAAAA8AAAATAFfEpQhj
0N8ARpxVAAAAHwAAACEAAAAjAAAAJQBIoGsTduL9JIz0/wJYwa8AAAAdAAAAGwAAABcAAAAVAAAAEQAA
AA8AAAALAAAABwAAAAX///8B////Af///wH///8B////Af///wEAAAADAAAABwAAAAsAAAAPAAAAEQAA
ABUAVsCbOpfz/x984f0BVr2lABg4MwAAACkALmhJDWvX8SKO9v8XiPb/DmvY8QAIFSUAAAAfAAAAGwAA
ABcAAAATAAAAEQAAAA0AAAAJAAAABf///wH///8B////Af///wH///8B////AQAAAAMAAAAHAAAACwAA
AA8AAAATAAAAFQBUvZEylPL/IZD3/zKR8P8PadLlAESYcQZgy9ktk/T/EIb2/xCF9v8efuX9AEGPWQAA
AB8AAAAbAAAAFwAAABUAOH4pAE2tQQAAAAkAAAAFAAAAA////wH///8B////Af///wH///8BAAAAAwAA
AAcAAAALAAAADwAAABEAAAAVAFW8iTeW8f8WjPf/GY33/zOa9/8ng+X/MZDv/xqN9/8RiPb/EIf2/yqO
8f8AVLufAD6JSwBRtX0AWMStCGbU4RBu3P8AWsvBAAAACQAAAAX///8B////Af///wH///8B////Af//
/wH///8BAAAABQAAAAkAAAANAAAADwAAABMAVbx9O5fw/xqP9/8aj/f/Go/3/ySU9/8hkvf/Foz3/xWL
9/8Tivf/J5P3/xt43/8efOP9JYjt/yKL9f8difb/GXnk/QBTuUkAAAAHAAAAA////wH///8B////Af//
/wH///8B////Af///wEAAAADAAAABQAAAAkAAAALABUtEwBXwYk/mO7/HZL4/x6T+P8dkvj/HZL4/xyR
+P8tofn/HpP3/xaM9/8Vi/f/IZD3/xaJ9v8Mg/b/CYH1/x+L9f8JZdLRAAAKBwAAAAX///8B////Af//
/wH///8B////Af///wH///8BAFzOQQBczokAXMynDWfTwxlz2eUie979LYTi/02l9P8hlvj/IZb4/yGW
+P8glfj/L6H6/7Pf/f9Ksfv/GpD3/xeN9/8Uivf/EYj2/w6F9v8NhPb/J4Xq/QBYyGUAAAAD////Af//
/wH///8B////Af///wH///8B////Af///wEAXM81EGvW62ez+P9Jp/n/P6P5/zig+P8xnvj/J5r4/yWZ
+f8lmfn/JZn5/yqd+f+Jzv3//////8jo/v8vofr/GY/3/xaM9/8Tivf/EIf2/yWQ9v8Tb9npAFi/Cf//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAXM45Hnfb81Gr+f8ilvj/I5j4/yWZ
+f8nm/n/KJz5/ymc+f8pnPn/VLX7//b7/v///////////5DR/f8kmPn/GI73/xWL9/8SiPb/NpTx/wBc
zrcAWs8J////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAXM5HJn7e91Su
+v8mmvn/KZz5/yqe+f8sn/n/LaD5/yuc+P/S6v3/////////////////+Pz+/1a1+/8ckfj/F433/xOK
9/8ok/f/NI7s/RJu2OUAW85tAF7QB////wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wEAXM5VL4bi/VSw+v8rn/n/LqH6/y+i+v8kmPn/i8X6////////////////////////////1+z+/yiZ
+P8Yjvf/FYv3/xGI9v8Sh/b/K5L3/zCL6/0Qa9fhAFzOZQBZzAX///8B////Af///wH///8B////Af//
/wH///8B////Af///wEAXM6xYrD0/zCh+v8xpPr/M6X6/xmI9v+m0Pv/qtL7/+Pw/v///////////6zU
+/+t1fz/Vqv5/xiO9/8WjPf/Eon3/w+F9v8Lgvb/EIT1/0Cb9/8jet/9AFzNvf///wH///8B////Af//
/wH///8B////Af///wH///8BAFvNeUeX6P9Pr/r/MKP6/zOm+v82qPv/K575/ySZ+f8Xjvf/rNP8////
////////I5f5/xiN9/8WjPf/Go/3/xeN9/8Tiff/FIj2/zGV9/83j+z9FG3Y5wBbzXMAWcwL////Af//
/wH///8B////Af///wH///8B////AQBczm1Bk+f/VLD6/y2g+v8xpPr/Naf6/ziq+/87rPv/Oav7/yWY
+f+s0/z///////////8vofr/I5f4/x+U+P8bkPj/F433/zSa+P9Alu39F3HZ5wBbznMAXNEL////Af//
/wH///8B////Af///wH///8B////Af///wEAXM5jO43k/Vix+v8qnfn/LqD6/zGk+v81p/r/OKr7/zus
+/85q/v/JZj5/6zT/P///////////yqd+P8jl/j/H5T4/xuQ+P8Xjff/S6Dy/wBczbEAXNEL////Af//
/wH///8B////Af///wH///8B////Af///wH///8BAFvNUxlz2P13uvb/aLj5/2O3+v9atPv/ULH6/z6q
+v82qPv/OKn7/zeo+/8jmPj/rNP8////////////JJj4/yKX+P8ek/j/G5D3/xeN9/8/n/j/GXHY2wBt
2wP///8B////Af///wH///8B////Af///wH///8B////Af///wEAW84nAFzOYwBczYEAXM6fEGrTvSR7
3OMyhd/9cr34/zOl+v80pvr/M6X6/yWa+f86l/f/VaX4/1Wl+P8Zj/f/IZb4/x2S+P8aj/f/Foz3/xuN
9/9Ckuj/AFzOS////wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////AQBczn9ptfX/L6L6/zCj+v8wovr/LqH6/yyf+f8pnfn/Jpr5/yOX+P8ml/j/PKH5/yeW
9/8Vi/f/EYj2/0qi9v8NZdGz////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8BAFvOjWm39/8sn/n/LaD5/y2g+f9Nrfr/OqX5/yeb+f8kmPj/IZb4/1iu
+f8wg+D/QpHm/VSk8v9Sp/j/Uaf4/zSG4v0AW84j////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wEAXM6babj5/yic+f85pPn/bLj4/ziJ4f1osfT/Lpz5/yGW
+P8flPj/X6nw/wBczXEAW845AF3OdQVg0K8dddvtLX/e/wBczov///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////AQBczqtqufr/V7H6/1ii7P8QadTBAFzPORZv
199ntvn/IJT4/zSd+P8+jOL9AFvNG////wH///8B////Af///wEAW84pAFzOP////wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BBWLRt3y89v8rfdzvAFzPZf//
/wH///8BAFvOOS6D4PlRq/n/U6v5/xlw1sf///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wECXc7RCmTSqwBb
zhn///8B////Af///wH///8BAFvNc02b6v9orvP/AFzOef///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQBb
zBv///8B////Af///wH///8B////Af///wH///8BBWHRsy5+3f0AXM4n////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAW84TAFzOs////wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAoAAAAMAAAAGAAAAABACAAAAAAAIAlAAAAAAAAAAAAAAAAAAAAAAAA////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wEAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADAAAAAwAAAAP///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wEAAAADAAAAAwAAAAMAAAADAAAABQAAAAUAAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAA
AAcAAAAFAAAABQAAAAUAAAADAAAAA////wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8BAAAAAwAAAAUAAAAFAAAABwAAAAkAAAAJAAAACwAAAAsAAAANAAAADQAAAA0AAAANAAAADQAA
AA0AAAANAAAADQAAAAsAAAALAAAACwAAAAkAAAAJAAAABwAAAAUAAAAFAAAAA////wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8BAAAAAwAAAAMAAAAFAAAABwAAAAkAAAAJAAAACwAAAA0AAAANAAAADwAAAA8AAAARAAAAEQAA
ABEAAAARAAAAEQAAABEAAAARAEWaNQBGnjcAAgQPAAAADwAAAA0AAAANAAAACwAAAAkAAAAJAAAABwAA
AAUAAAAD////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wEAAAADAAAABQAAAAcAAAAJAAAACwAAAA0AAAANAAAADwAAABEAAAARAAAAEwAA
ABMAAAAVAAAAFwAAABUAAAAVAAAAFQAAABUAG0UfAFrL1wBWwZUAI04fAAAAEwAAABEAAAARAAAADwAA
AA0AAAANAAAACwAAAAkAAAAHAAAABQAAAAP///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8BAAAAAwAAAAUAAAAHAAAABwAAAAsAAAALAAAADQAPIRMAP40vABo7GwAA
ABUAAAAXAAAAGQAAABkAAAAZAAAAGwAAABsAAAAdAAAAGwAiTykAV8KpCWnX/QVgzdMAPYc9AAAAFwAA
ABcAAAAVAAAAEwAAABEAAAAPAAAADQAAAA0AAAALAAAABwAAAAcAAAAD////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8BAAAABQAAAAcAAAAHAAAACwAAAA0AAAAPAAAAEQA1
dScAWMavAFS8iQA2ejUAAQMbAAAAHQAAAB0AAAAfAAAAHwAAACEAAAAhABQsKQBQsoEHZ9bvIIbv/w5t
2vcASKFdAAAAGwAAABkAAAAZAAAAFwAAABUAAAATAAAADwAAAA8AAAANAAAACQAAAAkAAAAHAAAAA///
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAAAADAAAABQAAAAcAAAAJAAAADQAA
AA8AAAARAAAAEwA3fS8AWsrRD2zY9wFax8MARppXAAAAHwAAACEAAAAjAAAAJQAAACUAAAAlAEGQWwVi
0OUeg+v/IYz1/xZ34f8BVLmTAAAAHwAAAB0AAAAbAAAAGQAAABcAAAAVAAAAEwAAABEAAAAPAAAACwAA
AAkAAAAHAAAABQAAAAP///8B////Af///wH///8B////Af///wH///8B////AQAAAAMAAAAFAAAABwAA
AAsAAAALAAAADQAAABEAAAATAAAAFQAsYykAWcnNN5Xy/y2K6v0Pa9f9AVS4lwAxb0MABxEpAAAAJwAA
ACkAKF1DBGDN5R+B6P0hjfb/EIX2/x+D6/8GYc/hAAYPJQAAACEAAAAdAAAAGwAAABkAAAAXAAAAFQAA
ABMAAAAPAAAADQAAAAsAAAAJAAAABwAAAAX///8B////Af///wH///8B////Af///wH///8B////Af//
/wEAAAAFAAAABwAAAAkAAAANAAAADwAAABEAAAATAAAAFQAfRyMAWcjLM5Px/zWZ9/8yk/H/HHfe+wdf
ycsAR6B1AAYPLQAfRj8AUrmxGXri/ymR9f8Sh/b/D4X2/yOL8/8LaNf/ADNyQwAAACEAAAAfAAAAHQAA
ABkAAAAXAAAAFQAAABMAAAARAAAADwAAAAsAAAAJAAAABwAAAAMAAAAD////Af///wH///8B////Af//
/wH///8B////AQAAAAMAAAAFAAAABwAAAAkAAAANAAAADwAAABEAAAATAAAAFQANIh0AWcfHMJHv/yeT
9/8djvf/NZf1/y6L6v8NaNLrAFO3pQBQtKENa9b1Mpb1/xuM9v8Phvb/DoX2/yKO9v8Xdd/9AE6rfwAA
ACEAAAAfAAAAHQAAABkAAAAXAAAAFwAdPRsAR6A9AFS+bQBAkSMAAAAJAAAABwAAAAMAAAAD////Af//
/wH///8B////Af///wH///8B////AQAAAAMAAAAFAAAABwAAAAkAAAALAAAADwAAABEAAAATAAAAFQAA
ABcAWsfDMZDu/yuW9/8Vi/b/F4z3/yqV9/88nfb/IHzg/RJv2v80lPH/I5H3/xKI9/8Rh/b/EIf2/xyM
9v8piez/AFjFxQAkUTMAL2k5AECRSwBMqmMAVb6PBF/NyQdk1PUHZdX/AFvN6wBUvl0AAAAJAAAABwAA
AAX///8B////Af///wH///8B////Af///wH///8B////Af///wEAAAADAAAABwAAAAkAAAALAAAADQAA
AA8AAAARAAAAFQAAABcAWse5MZDs/zCZ+P8Yjff/GI73/xiO9/8ikvf/Npz3/zmb9f8vmPf/FYv3/xSK
9/8Tiff/EYj2/xaK9v8ylvX/BV7M6wBWwbEDXMe/DGnW6RFw3f0XduH/HH/p/SKG7/8be+b9AFrKrwAw
bBUAAAAJAAAABQAAAAP///8B////Af///wH///8B////Af///wH///8B////Af///wEAAAADAAAABQAA
AAcAAAAJAAAACwAAAA8AAAAPAAAAEQAAABUAWsexMo7r/zSc+P8aj/f/Go/3/xqP9/8aj/f/HZH3/yGT
9/8bj/f/F433/xaM9/8Vi/f/FIr3/xOJ9v8vl/f/KIXo/yWE6P8sjO39LI/y/yWN9P8cifX/FIT1/yKK
9P8Oa9n/AFS7UwAAAAkAAAAHAAAABQAAAAP///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8BAAAAAwAAAAUAAAAHAAAACQAAAAsAAAANAAYNDwAdQRkAWsevMY3p/zug+f8dkvj/HZL3/x2S
+P8ckvj/HJH3/xyR+P8bkfj/JZn4/ySY+P8Zjvf/Foz3/xSL9/8Wi/f/KZT3/yOQ9v8Xivb/DIP2/wqB
9v8IgPX/E4X1/yGB6f8GYtDPAAARCQAAAAcAAAAFAAAAA////wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8BAF3FBwBVvBkAVr8tAFbBRwBWwVsAWMRvAFjFhQBYxZUAW8znM47p/z+j
+f8flPf/H5T3/x+U+P8flPf/HpP3/x6T+P8lmvn/Ubf7/1e4+/8lmvj/GI73/xaM9/8Vi/f/E4n3/xGI
9v8Phvb/DYT2/wuD9v8Jgfb/JYz0/xd03vsBWcZtAAAABQAAAAMAAAAD////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wEAXM6PAFzOwwBbzcsBXc7TDmnU3Rt02uklf+D1MYnl/TuS
6f9Fmu3/U6n1/zig+P8hlvf/IZb4/yGW9/8hlvf/IZX4/ySY+P83qPv/u+P9/7He/f9Gr/v/HJH4/xiO
9/8Xjff/FIv3/xOJ9/8RiPb/D4X2/wyE9v8Rhfb/L43v/wtm09EAU74xAAAAA////wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAXM9zC2bT8Uia7f9ntPn/WK75/1Ss
+f9Oqvn/Rab5/z6j+P83oPj/LJv4/ySY+f8kmPj/JJj4/ySY+f8kmPj/JZn5/zin+/+S0f3///////v9
/v+Y1P3/MaP6/xyR9/8Yjvf/Foz3/xSK9/8Siff/EIf2/w+G9v8qk/b/IHvh+QBczIEAV78H////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAVdUDAV3PgR92
2u9Yp/L/QKP5/yGU+P8glPj/IZb4/yOX+P8kmPj/JZn5/yaa+f8mmvn/J5v5/yeb+f8nmvn/MKL6/23C
/P/k8/7////////////v+P7/Ybz8/ymd+f8bkPf/F433/xaM9/8Uivf/EYj2/xiL9v85mPX/CmXT2wBb
zjn///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8BAFzOEwJf0I8adNr1XbD4/zmh+P8ilvj/I5j4/ySZ+P8mmvj/J5v4/yic+P8pnPj/KZz4/ymc
+P8qnfj/SrD7/8Hl/f/8/v7/////////////////w+b+/0iw+/8ilfj/GY/3/xeN9/8Vi/f/E4n2/ySR
9/81j+3/AFzO4QBbzlMAWs8H////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////AQBd0QkAXM6JIHnb+Vut9f8/pPn/JZn4/yeb+f8pnPj/Kp35/yue
+f8rn/n/LJ/5/yue+f8rnfj/otX8//7///////////////7+/v//////+vz+/6XZ/P88qfr/HJH4/xiO
9/8WjPf/E4r3/xmM9/84m/f/Mo3q/xZx2v0HY9LHAFzOSwBbzhcAXs8D////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAWssNBWHQpSqC4PlgsPf/OqT5/ymd
+f8qnvn/LJ/5/y2g+v8toPn/LaD5/yOX+f9csPn/9vr+///////+/v7////////////+/v7//////+v2
/v9ywPv/I5f4/xqP9/8Xjff/FIv3/xKJ9/8Vifb/KZL3/zaV9P8vien9FXDZ7wRf0KkAXM1ZAFnSCf//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAFzNIwVi
0a8uheL9Z7n6/zql+f8sn/n/LaH6/y+i+v8wo/r/J5v4/zKZ+P/F4vz///////7+/v//////////////
///////////////////a7v7/L534/xyS+P8Yjvf/FYz3/xOJ9/8RiPb/D4b2/xSH9v8jjvf/OZXy/y6H
6P0Qa9bnAFzOqQBbzTsAWcsF////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////AQBbzisAW87VUKPv/1ay+v8vofr/MKP6/zGk+v8zpfr/E4b2/3i4+f/S5/3/1Oj9/9zs
/f/4+/7/////////////////1en9/9bq/f/W6v3/hcL6/xqP9/8Zj/f/Foz3/xSK9/8RiPf/D4X2/w2E
9v8Kgvb/DIL1/yqQ9v9CnPb/LILk/QVg0P0AW82X////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8BAFzPEQBczn8fd9rvaLb3/0es+v8wovr/MaT6/zOl+v80p/r/GIz3/yqS
9/8zl/f/MZb2/1Gk+P/c7P3//v7+////////////PJ74/zWY9/80mPf/LZX3/xeM9/8Zjvf/F433/xWL
9/8SiPf/D4b1/w2E9v8Rhfb/J5D2/zaV9P8wiOn9GnLb8wVg0LMAW81b////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8BAFvNdR112e9msPL/Tq76/zGj+v8xo/r/M6b6/zWn
+v83qfv/M6X6/y+h+v8tofr/JZn4/zSX9//V6f3///////7+/v/+/v7/LKD6/x6T+P8dkff/G5D3/xqQ
9/8aj/f/F433/xWL9/8Siff/E4j2/ymS9/9Dnvj/No7r/xhx2v0IY9LNAFrNUQBbzRsAWcwD////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////AQBczQsAXM1rIHfb/2ay9f9Sr/r/LaD6/y+i
+v8xpPr/NKb6/zeo+/84qvv/Oqz7/zqr+/84qvv/LqD6/zaY+P/V6f3/////////////////M6b6/ySY
+f8ilvj/H5T4/x2S+P8akPf/F433/xmN9/8ul/j/SaD0/z6S6/8ZctntAFvOtwBczk0AXNEJ////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAFrNCwBbzWcWcNjpZbD0/1ax
+v8voPn/LaD6/y+i+f8ypPr/NKf6/zeo+/85q/v/PK36/zus+/85q/v/LqH6/zaY+P/V6f3//v7+////
////////MaP5/ySY+P8il/j/H5T3/x2S+P8akPj/F433/y6Y9/9MoPP/Hnbb8wdi0bEAXM5jAFvRD///
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAFzOWRNu
1+deqPD/WrL6/y2e+f8qnfn/LaD6/y+i+v8xpPr/NKb6/zeo+/84qvv/Oqz6/zqr+/84qvv/LqD6/zaY
+P/V6f3///////7+/v/+/v7/LKD5/yOY+P8ilvj/H5T4/xyS9/8akPj/F433/zGZ+P9MnvD/AFzNzwBc
zSUAXNED////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQBY
ywMAW81RC2fT+1ai7P+Bwfj/XbP5/1ax+v9Mrfn/RKr6/0Kq+v9Aqvr/O6n6/zWn+v83qfv/OKn7/zip
+/83qPv/LKD5/zaY+P/V6f3/////////////////Jpr4/yKX+P8ilvj/H5T4/x2S+P8akPf/F433/xyP
9/9Tqfj/GnLY5QBdzlH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////AQBdzwcAW86bCWPR3yt/3fEzheD9Po3j/0mV5v1WoOr9Yqvw/2ey9P9ruPf/ar37/0Ks
+v81p/r/Nqj6/zan+/81p/r/K575/y6U9/+y1vz/1Oj9/9To/f/U6P3/IZb4/yGV+P8hlvj/HpP3/xyR
+P8aj/f/F433/xWL9/85nPj/QZHo/QNfz5UAXc4N////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wEAW84dAFzOMQFdzjkAW81HAFzOawNfzocLZdKlEmzVzxZv
1u0acdf9ZbP0/1e1+v8zpfr/M6X6/zOl+v8ypfr/LJ/5/xaK9v8ji/b/Ko/2/yqP9v8qj/b/Eor3/yGV
9/8glfj/HZL4/xyR9/8Zj/f/Foz3/xSK9/8ZjPf/VqTx/xdv19cAXM4t////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wEAXM6/X63y/1Wz+/8wo/r/MKP6/zCj+v8wovr/L6L6/y6h+v8sn/n/Kp35/yic
+f8mmvj/JJj4/yGW+P8klvj/LZr4/yeW+P8ekff/FYz3/xOJ9/8RiPb/Q5/2/zeH4v8FYM97////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////AQBZ2QUAW87DZLH0/1Cw+v8uofr/LqH6/y6h+f8uofr/LKD5/yyf
+f8qnfn/KJz4/yeb+f8lmfn/Ipf4/yGW+P9Lqfn/Xa31/1ut9/9Uq/j/QaD4/zCY+P8fj/b/KJL2/02c
7v0RadTZAFnMCf///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////AQBb0Q8AW87HabX2/0ut+v8rn/n/LJ/5/yyf
+f8toPn/V7L6/2G2+v83o/n/J5v5/yWZ+f8jl/j/IZb4/y2b+P9tuPn/G3LX/xpx2P8sf9/7SJns/1mo
9P9hr/j/Xa35/2iw9/8keNv7AFvORf///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQBdzxsAXM7Nbrn4/0Oo
+f8pnPn/Lp/5/0aq+v9uuvj/XKXs/1Kf6/9vufn/LJz5/yOX+P8hlvj/H5T4/0Sl+f9bpe7/AFzNsQBa
zCkAW85fAF3OpQBczckJY9LXJn3f80SS6P06iuP/AFzOtQBf0gv///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQBd
zyUAXM7Rcrz6/z6l+f8yoPn/XbT6/2ix8/89jOL9B2LQvQ1o1NNWou3/WbH6/yaY+P8flPj/IpX4/1iu
+f87ieH9AFzOY////wH///8BAF3QAwBdzRMAW805AFzOZwBbzYsCXc6vAFzOuwBczh////8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////AQBbzy8AXM7Vd7/6/1aw+v9wvPr/Up7r/xtx1+8GYdGFAFzPIQBbzlsRatXnb7j3/0Sm
+f8elPj/Kpj4/2Gu9v8ec9f9AFnNGf///wH///8B////Af///wH///8B////AQBZywcAW84ZAFzNKQBc
zQf///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////AQBczjkFYtLXhcT5/2uv8f8uf9zxAFzPqQBczi////8B////Af//
/wEAW851I3nb+Wmz9/83nvj/OJ74/1ih7P0RatS7////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////AQBbzkMIY9HfSJTl/Rtx1tUBXc51AFrOD///
/wH///8B////Af///wEAV84LB2PRsz6P5f9ksvj/WKz4/0GN4/8FYM5v////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQBbzVcBXM7rCGLRowBb
zzMAWs4H////Af///wH///8B////Af///wH///8BAFvNNwxm0tFXo+7/cbX2/yt+3esAXM47////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQBZ
zA8AXMwt////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQBczk8KZdLhU5vp/w1l
0a8AW84Z////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQBd
zwcAXM55CmPR/wBczYkAXM0F////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wEAW84PAFzOmwBbzTf///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8BAAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAA
AAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA
//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAA
AAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA
//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAA
AAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA
//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//KAAAAEAAAACAAAAAAQAgAAAA
AAAAQgAAAAAAAAAAAAAAAAAAAAAAAP///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8BAAAAAwAAAAMAAAADAAAABQAAAAUAAAAFAAAABQAA
AAUAAAAFAAAABQAAAAUAAAAFAAAABQAAAAUAAAADAAAAA////wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wEAAAADAAAAAwAAAAUAAAAFAAAABQAAAAcAAAAHAAAABwAA
AAcAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAHAAAABwAAAAcAAAAHAAAABQAA
AAUAAAAFAAAAA////wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8BAAAAAwAAAAMAAAAFAAAABQAAAAcAAAAHAAAACQAA
AAkAAAAJAAAACwAAAAsAAAALAAAACwAAAA0AAAANAAAADQAAAA0AAAANAAAADQAAAA0AAAALAAAACwAA
AAsAAAALAAAACQAAAAkAAAAJAAAABwAAAAcAAAAFAAAABQAAAAMAAAAD////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAAAADAAAABQAAAAUAAAAHAAAABwAA
AAkAAAAJAAAACwAAAAsAAAANAAAADQAAAA0AAAAPAAAADwAAAA8AAAAPAAAADwAAABEAAAARAAAAEQAA
AA8AAAAPAAAADwAAAA8AAAAPAAAADQAAAA0AAAANAAAACwAAAAsAAAAJAAAACQAAAAcAAAAHAAAABQAA
AAUAAAAD////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAAAAMAAAAFAAAABQAA
AAcAAAAJAAAACQAAAAsAAAALAAAADQAAAA0AAAAPAAAADwAAABEAAAARAAAAEQAAABMAAAATAAAAEwAA
ABMAAAATAAAAEwAAABMAAAATAAAAEwBIn0EAWcirAAwYFQAAABEAAAARAAAADwAAAA8AAAAPAAAADQAA
AA0AAAALAAAACQAAAAkAAAAHAAAABQAAAAUAAAAD////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAAAwAA
AAMAAAAFAAAABwAAAAkAAAAJAAAACwAAAA0AAAANAAAADwAAAA8AAAARAAAAEwAAABMAAAATAAAAFQAA
ABUAAAAXAAAAFwAAABcAAAAXAAAAFwAAABcAAAAXAAAAFwAnYicAXM7/AFzO/wBKoU0AAAAVAAAAFQAA
ABMAAAATAAAAEQAAABEAAAAPAAAADQAAAA0AAAALAAAACQAAAAkAAAAHAAAABQAAAAUAAAAD////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8BAAAAAwAAAAUAAAAHAAAABwAAAAkAAAALAAAACwAAAA0AAAAPAAAAEQAAABEAAAATAAAAEwAA
ABUAAAAXAAAAFwAAABkAAAAZAAAAGQAAABsAAAAbAAAAGwAAABsAAAAbAAAAGwAACRsAWcfBAmHR+wZi
0f0AVr6VAAAAGQAAABcAAAAXAAAAFQAAABUAAAATAAAAEQAAABEAAAAPAAAADQAAAA0AAAALAAAACQAA
AAcAAAAHAAAABQAAAAP///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8BAAAAAwAAAAUAAAAHAAAABwAAAAkAAAALAAAADQAAAA8AAAAPAAAAEQA5
eSkAWMWrAD6NOwAAABcAAAAXAAAAGQAAABsAAAAbAAAAHQAAAB0AAAAdAAAAHwAAAB8AAAAfAAAAHwAA
AB8AUbaLAF3P/R6E7v8UdeL/AFzM4QAAABsAAAAbAAAAGQAAABkAAAAXAAAAFQAAABUAAAATAAAAEQAA
AA8AAAAPAAAADQAAAAsAAAAJAAAACQAAAAcAAAAFAAAAA////wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8BAAAAAwAAAAUAAAAHAAAABwAAAAkAAAALAAAADQAA
AA8AAAARAAAAEQAAABMAS6dPAFzO/wBczv8AU7mFAAkaHwAAABsAAAAdAAAAHwAAAB8AAAAhAAAAIQAA
ACEAAAAjAAAAIwAAACMARZddAF3P/RR65v8nj/b/JIbu/wBczv8ANnU9AAAAHQAAABsAAAAbAAAAGQAA
ABcAAAAXAAAAFQAAABMAAAARAAAAEQAAAA8AAAANAAAACwAAAAkAAAAJAAAABwAAAAUAAAAD////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAAAwAAAAMAAAAFAAAABwAA
AAkAAAALAAAADQAAAA8AAAAPAAAAEQAAABMAAAAVAEWdRwBczv8aeOH/A1/Q/QBbydcAPYVHAAAAHwAA
ACEAAAAjAAAAIwAAACUAAAAlAAAAJQAAACcAKlw9AFvM8Q1v3f0skvb/HYv2/ymR9v8GYtD9AE+wgQAA
AB8AAAAfAAAAHQAAABsAAAAZAAAAGQAAABcAAAAVAAAAEwAAABEAAAARAAAADwAAAA0AAAALAAAACQAA
AAcAAAAFAAAABQAAAAP///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAA
AAMAAAAFAAAABwAAAAkAAAALAAAACwAAAA0AAAAPAAAAEQAAABMAAAAVAAAAFwA/jj0AXM7/N5Ty/zyZ
8/8Tb9n7AFzO/QBTt5EADSApAAAAJQAAACcAAAAnAAAAKQAAACkACxwvAFnG0Qdl1Psukvb/Io73/wmB
9v8pkfb/E3Hd/wBZx8kAAAAjAAAAIQAAAB8AAAAdAAAAGwAAABkAAAAZAAAAFwAAABUAAAATAAAAEQAA
AA8AAAANAAAADQAAAAsAAAAJAAAABwAAAAUAAAAD////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wEAAAADAAAABQAAAAcAAAAJAAAACwAAAA0AAAAPAAAAEQAAABEAAAATAAAAFQAA
ABcAN3gzAFzO/zSS8P9Bn/j/QJ/4/yqH6P8FYND9AFvJ3wA6hlUAAAApAAAAKQAAACsAAAAtAFC1owFe
z/0rjvH/LZX3/w6E9v8Lgvb/Io73/yOE6/8AXM79ABtAMQAAACEAAAAhAAAAHwAAAB0AAAAbAAAAGQAA
ABcAAAAVAAAAEwAAABMAAAARAAAADwAAAA0AAAALAAAACQAAAAcAAAAFAAAAA////wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8BAAAAAwAAAAUAAAAHAAAACQAAAAsAAAANAAAADwAA
ABEAAAATAAAAFQAAABUAAAAXACZZKQBczv8uju7/NJr3/x+P9/88nfj/Ppr0/xdy2/0AXc/9AFG1nwAP
JDMAAAAtAEOXcwBczf8jher/N5r4/xWI9v8Nhfb/DIT2/xiJ9v8xlPb/A17Q/wBJoW0AAAAjAAAAIQAA
AB8AAAAdAAAAGwAAABkAAAAXAAAAFwAAABUAAAATAAAAEQAAAA8AAAANAAAACwAAAAkAAAAHAAAABQAA
AAMAAAAD////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAAAAMAAAAFAAAABwAA
AAkAAAALAAAADQAAAA8AAAARAAAAEwAAABMAAAAVAAAAFwARKx8AXM7/LY7t/zqc+P8Tivf/Fov3/zCY
+P9Fovn/MIzr/wdi0P0AXMrlAEijfwBczfcXd+D/Pp74/x+P9/8Qh/b/D4b2/w6F9v8Phfb/NJj3/xJv
2vsAVr2vAAAAIwAAACEAAAAfAAAAHQAAABsAAAAZAAAAFwAAABcAAAAVADZyJwBQtVkAWcehAE+zSwAA
AAsAAAAJAAAABwAAAAUAAAADAAAAA////wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wEAAAADAAAABQAAAAcAAAAJAAAACwAAAA0AAAAPAAAADwAAABEAAAATAAAAFQAAABcAAAAZAF3O/S2M
7P9AoPj/FYv3/xWL9/8Vi/f/IZH3/0Cg+P9Dn/X/G3fd/QBczv8LaNb9P5/4/y+X+P8Siff/EYj3/xGH
9v8Qh/b/D4b2/y2V9/8kgub/AFzN8wAHDiUAAAAhAAAAHwAAAB0ACRIdAEGRQwBRuHcAWMSpAFvM4wBc
zv8AXM7/AFzO/wBbzNcAAAALAAAACQAAAAcAAAAFAAAAA////wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8BAAAAAwAAAAUAAAAHAAAACQAAAAkAAAALAAAADQAAAA8AAAARAAAAEwAA
ABUAAAAXAAAAFwBdzvUriun/RaT5/xeN9/8Xjff/F433/xeN9/8Zjvf/M5v4/0mm+f84lvH/Pp32/zyf
+P8Wi/f/FIr3/xOK9/8Siff/EYj3/xCH9v8ij/f/N5Xy/wFdzv8AR6FlAEedXwBUuY8AWcjHAFzN9wBc
zv8CXs79DGva+xN24/8jhO3/Hn/q/wBczv8AS6ozAAAACwAAAAkAAAAHAAAABQAAAAP///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAAAADAAAABQAAAAcAAAAJAAAACwAA
AA0AAAAPAAAADwAAABEAAAATAAAAFQAAABcBXc7rKojo/0un+f8Zjvf/GY/3/xmP9/8Zj/f/GY/3/xmO
9/8jk/f/O5/4/zad+P8cj/f/Foz3/xaM9/8Vi/f/FIr3/xOK9/8Siff/F4v2/z6e+P8NZNH/AFzO/wBc
zv8IZNP5FHTf/x6A6P8oi/H/LpL3/y2S9/8pj/f/KY/3/xJu2vsAW8y/AAAACwAAAAkAAAAHAAAABQAA
AAMAAAAD////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAAAwAA
AAUAAAAFAAAABwAAAAkAAAALAAAADQAAAA8AAAAPAAAAEQAAABMAAAAVAV3N4SiF5v9Rq/r/G5D4/xuQ
+P8bkPj/G5D4/xuQ+P8bkPj/GpD4/xqQ9/8Zj/f/GY/3/xiO9/8Xjff/F433/xaM9/8Vi/f/FIr3/xKJ
9/83m/j/NZTy/yyM7f84mPX/Opv4/zeZ+P8sk/f/IIz2/xSG9v8Jf/X/F4b2/ymL8f8CXc7/AFS4TwAA
AAkAAAAHAAAABwAAAAUAAAAD////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wEAAAADAAAABQAAAAcAAAAHAAAACQAAAAsAAAANAAAADQAAAA8AAAARAAAAEwFd
zNclg+X/WK76/xyS+P8dkvj/HZL4/x2S+P8dkvj/HJL4/xyR+P8ckfj/G5H4/xuQ+P8dkvj/I5j4/xmO
9/8Xjff/Foz3/xWL9/8Uivf/GYz3/zKY+P8wl/f/JJD3/xeK9v8Ng/b/C4L2/wmB9v8IgPX/B3/1/yyS
9/8ad+D/AFzN3QAAGgsAAAAHAAAABwAAAAUAAAAD////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////AQAAAAMAAAAFAAAABQAAAAcAAAAJAAAACwAA
AAsAAAANADVyHQBIoTkAXM7/IoDi/12x+v8fk/j/HpP4/x+U+P8flPj/H5T4/x6T+P8ek/j/HpP4/x2S
+P8elPj/Oaz7/z6v/P8wo/r/GY/3/xiO9/8Xjff/FYz3/xSK9/8Tiff/Eoj3/xCH9v8Phvb/DYT2/wyD
9v8Kgvb/CYH2/xiI9v80k/T/BmHQ/QBYw2sAAAAHAAAABQAAAAUAAAAD////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQBmzAUAYM8hAFnGPwBb
yV8AWsp9AFvMmwBczLkBXc7dAF3P9QBczv8AXM7/AFzO/ymG5f9fs/r/Ipb4/yCV+P8glfj/IJX4/yCV
+P8glfj/IJX4/x+U+P8flPj/M6X7/1G3/P+z4P7/Pq/8/yWb+f8Zj/f/GI73/xeN9/8WjPf/FIv3/xOJ
9/8RiPf/EIf2/w6F9v8NhPb/C4P2/wqB9v8vlPf/JIHm/wBcz/MAOY4TAAAABQAAAAMAAAAD////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQBc
zv8AXM7/AFzO/wBczv8CXs/9DmnV+Rt12/sngOH/M4zn/z+V7P9KoPD/VKn1/2Cy+f9jtfr/Sqn5/yKW
+P8il/j/Ipf4/yKX+P8il/j/Ipf4/yKW+P8hlvj/LJ/6/z+v/P/K6f7//////4nO/f88rfz/H5T5/xqP
9/8Yjvf/F433/xWM9/8Uivf/E4n3/xGI9v8Qhvb/DoX2/wyE9v8WiPb/PJr3/w5n1PsAWsuNAAAABQAA
AAP///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wEAXc/JAFzO/ziP6v9lsff/Z7X6/2a1+v9ntfr/ZLT6/12x+v9Urfr/TKr5/0Sm
+f88o/n/M574/yOY+f8kmPn/JJj5/ySY+f8kmPn/JJj5/ySY+f8jmPn/J5r5/z2t/P+S0v3/////////
///2+///Wbr8/zWn+/8bkPj/Go/3/xiO9/8Xjff/FYv3/xSK9/8Siff/EYf2/w+G9v8Nhfb/L5X3/zGM
6/8AXc79AFi/If///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8BAFXVBwBczrcFYtL7Z7D1/2m2+v80nfn/JJX4/x6T
+P8glPj/IZX4/yKW+P8jl/j/JJj5/ySZ+f8lmfn/Jpr5/yaa+f8mmvn/Jpr5/yaa+f8mmvn/Jpn5/ziq
/P9fvf3/+fz//////////////////9Xu/v9BsPz/K5/6/xuQ+P8Zj/f/GI73/xaM9/8Vi/f/E4r3/xKI
9/8Qh/b/FYj2/0Of+P8Xcdr7AFzPq////wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAZswLAF3PyQll
0vtcrPb/YLL6/ySW+P8glfj/IZb4/yKX+P8jmPn/JJn5/yWZ+f8mmvn/J5v5/yeb+f8onPn/KJz5/yic
+f8onPn/KJv5/zKk+/9Dsfz/3PH+////////////////////////////oNf+/z2u/P8il/j/G5D4/xmP
9/8Xjff/Foz3/xSL9/8Tiff/EYj2/y2V9/9AmPH/AV3O/wBbzTn///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////AQBVzA8BXtDXDmnV+2Oy+P9es/r/JZj4/yKX+P8kmPn/JZn5/yaa+f8nm/n/KJz5/ymc
+f8pnfn/Kp35/yqd+f8qnfn/Kp35/yuf+f81p/v/ptn9//////////////////////////////////3+
//9pwf3/OKr8/x2R+P8akPj/GY73/xeN9/8Vi/f/FIr3/xKI9/88nfj/MIjn/wBczv8AXM+lAFrPJf//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8BAF3RFwFdz+ESbtb7arb4/12z+v8nmfn/JZn5/yaa
+f8om/n/KZz5/yqd+f8qnvn/K575/yuf+f8sn/n/LJ/5/yyf+f8qnvn/Y7j7//7/////////////////
////////////////////////5fT+/0Wx+/8vovr/G5H4/xmP9/8Yjvf/Foz3/xSL9/8Tiff/JpP3/0yl
+P84kez/EmvW+wBdzv0AXM+fAGDPIf///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAWssjAV3P6Rh1
2/twu/r/XbP7/yea+f8onPn/KZ35/yqe+f8rn/n/LJ/6/y2g+v8toPr/LqH6/y6h+v8lmfn/MZz4/+j0
/v////////////////////////////////////////////////+y3f3/M6X6/yOX+f8akPj/GY73/xeN
9/8Vi/f/E4r3/xKI9/8ejvf/PJz4/0uj+P81juz/D2rW+wBczvsAW86XAF7QG////wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////AQBbzC0BXM/xIHve/XS9+/9bs/r/KZ35/yqe+f8sn/n/LaD6/y6h+v8vofr/L6L6/y+i
+v8nmvr/FYv3/7PZ/P///////////////////////////////////////////////////////////2+9
+/8qnfn/HJL5/xmP9/8Yjvf/Foz3/xSK9/8Siff/EIf2/w+G9v8djPf/PJv4/0mh+P8xi+r/DWfU+wBc
z/kAXM2RAFnTF////wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8BAF3MNwBdz/koguH9ecH7/1Wx+v8sn/r/LaD6/y6h
+v8vovr/MKP6/zGk+v8tofn/DYX3/2ey+f//////////////////////////////////////////////
///////////////////v+P//OaH5/yGV+P8akPj/GI73/xaN9/8Vi/f/E4n3/xGI9v8Phvb/DYT2/wuD
9v8civf/PJv3/0ef9/8viOn/C2bT+wBdzvcAXM6JAFnMFf///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAW85DAFzO/zuT
6f99xPv/MqL6/y+h+v8wo/r/MaT6/zKk+v8zpfr/EIf2/yKL9v/y+P7/////////////////////////
/////////////////////////////////////////////8Lh/f8aj/f/G5D4/xmP9/8Xjff/FYv3/xOK
9/8RiPf/EIb2/w6F9v8Mg/b/CoL2/wiA9f8bifb/Opn3/0Wd9v82i+n/CmTS+wBczv8AXM1t////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8BAF3PhQBczv9XqPL/esP8/y+h+v8wovr/MaT6/zKl+v80pvr/NKf6/wR89v8vkvf/Vab4/1Wm
+P9Vpvj/Vab4/5HF+////////////////////////////1qq+P9bq/n/XKz5/12t+f9ervn/II/3/xWM
9/8Zj/f/F433/xaM9/8Uivf/Eoj3/xCH9v8Ohfb/DIT2/wqC9v8IgPb/GIj2/zqZ9/9In/j/PpHt/w9p
1fsAXM7/AFzOjf///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8BAFzPewBczv9Qoe7/gMX7/0ar+/8vovr/MaP6/zKl+v80pvr/Naf7/zao
+/8nm/n/E4r3/xKJ9/8Siff/EYn2/wZ+9f9aqPn///////////////////////////8jl/n/EIb3/w2E
9v8NhPb/DYT2/w+H9v8aj/j/Go/3/xiO9/8WjPf/FIr3/xKJ9/8Qh/b/DoX2/wyE9v8di/f/QJz4/0+k
+P84j+z/EmvW+wBbzv8AXM6nAFnMKf///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8BAFvObQBczf9JnOz/g8b7/0ms+/8uofr/MKP6/zKk
+v8zpvr/Naf7/zeo+/84qvv/Oar7/zmq+/84qvv/N6n7/zao+/8Siff/Wqj5////////////////////
////////Nqn7/yOY+f8kmPn/Ipb4/yCV+P8ek/j/HJH4/xqQ9/8Yjvf/Foz3/xSL9/8Siff/EIf2/yKP
9/9FoPj/Vqj5/z2T7f8TbNb7AFvO/wBczqcAWcwp////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAFzNYQBczv9Dl+v/hcf8/06u
+v8toPr/LqH6/zCj+v8ypfr/NKb6/zao+/84qfv/Oav7/zqs+/87rPv/Oqv7/ziq+/83qPv/E4n4/1qo
+f///////////////////////////zmr+/8mmvn/JJj5/yKW+P8glfj/HpP4/xyR+P8akPj/GI73/xaM
9/8Ui/f/JpP4/0uk+P9crfn/Qpbt/xVu1/sAW87/AFzOpwBc0Sf///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAFzNVwBd
z/09kuj/h8f8/1Kw+v8rnvn/LaD6/y+i+v8xo/r/M6X6/zSn+v82qPv/OKr7/zqs+/88rfv/PK77/zus
+/85q/v/N6n7/xOJ+P9aqPn///////////////////////////84qfv/JZn5/ySY+f8il/j/IJX4/x6T
+P8ckvj/GpD4/xiO9/8Wjff/N5z4/2Kw+v9Gmu7/Fm7X+wBdz/0AXM6nAFzRJ////wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8BAFvNTQBczvs2jOb/iMf8/1ex+v8pnfn/K575/y2g+v8vovr/MaP6/zOl+v80p/r/Nqj7/ziq
+/86rPv/PK37/zyu+/87rPv/Oav7/zep+/8Tifj/Wqj5////////////////////////////NKX6/yOY
+P8kmPn/Ipf4/yCV+P8ek/j/HJL4/xqQ+P8Yjvf/Fo33/1ar+f86j+n/AFzO/wBczqcAXNEn////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8BAF3NQwBdz/kvh+P/h8b8/12z+/8nm/n/KZz5/yue+f8toPr/L6H6/zCj
+v8ypfr/NKb6/zao+/84qfv/Oav7/zqs+/87rPv/Oqv7/ziq+/83qPv/E4n4/1qo+f//////////////
/////////////y+i+v8jmPf/JJj5/yKW+P8glfj/HpP4/xyR+P8akPj/GI73/xaM9/9Kpvn/UqDv/wBc
zv8AXswf////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8BAFvNOQBdzvcoguD9icb7/4rI+/9Xsfr/S6z6/0Cn
+v81o/n/LZ/6/y6h+v8wo/r/MqT6/zOm+v81p/v/N6j7/ziq+/85qvv/Oar7/ziq+/83qfv/Nqj7/xKJ
9/9aqPn///////////////////////////8qnfn/IZf4/ySY+f8ilvj/IJX4/x6T+P8ckfj/GpD3/xiO
9/8WjPf/J5X4/2iz+f8Vbdb7AF3Oh////wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAFnMFQBczv8AXM7/P5Hn/2Sq
7/9osPP/eLz4/4jH+/+Myvz/jcv8/43L/P+Cxvz/dsL8/2u9+/9bt/v/Nqf6/zWn+/82qPv/N6n7/zep
+/83qPv/Nqj7/zSn+v8SiPf/Wqj5////////////////////////////Jpr5/yCV+P8jmPn/IZb4/x+U
+P8ek/j/HJH4/xqP9/8Yjvf/Foz3/xSK9/9ZrPn/Q5Pp/wBdz+8AbdsH////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQBt
2wcAW86XAFzOtwFdz9UBXc7zAFzO/wBczv8AXM7/D2nT+SR62/s3iuP/SZrq/1uo7/9ttvT/i8v8/2u+
+/80pvr/Naf6/zWn+/81p/v/Naf7/zSm+v8zpfr/Eon3/zyZ9/+q0vz/qtL8/6rS/P+q0vz/qtL8/x+V
+f8ek/j/I5f4/yGV+P8flPj/HZL4/xuR+P8Zj/f/F433/xaM9/8Uivf/NJn4/2ex9/8JYtD/AFzOX///
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////AQBVzA8AXtAxAFvNUQBdzXEAW86RAF7PtQFe
0NkBXM73AFzO/0+k7/+DyPz/MqX6/zOl+v8zpfr/M6b6/zOl+v8ypfr/MaT6/yGW+f8CevX/AHn1/wB5
9f8AefX/AHn1/wB59f8Jgvb/IZX4/yKX+P8glfj/HpP4/x2S+P8bkPj/GY/3/xeN9/8Vi/f/E4r3/xSJ
9/9lsvn/M4bj/QBdzs3///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////AQBdzv1UpO7/fcX8/zCj+v8xpPr/MaT6/zGk+v8xpPr/MaP6/zCj
+v8vovr/LqH6/yyg+v8rnvn/KZ35/yic+f8mmvn/JZn5/yOX+P8hlvj/H5T4/x6T+P8ckfj/GpD4/xiO
9/8Wjff/FYv3/xOJ9/8RiPb/Q6D4/2Co8/8CXc7/AF3ONf///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////AQCA/wMAXM7/XKrx/3fC/P8vovr/L6L6/y+i
+v8vovr/L6L6/y+i+v8uofr/LaD6/yyf+v8rnvn/Kp35/yic+f8nm/n/JZn5/ySY+f8il/j/IJX4/zig
+f9fsvr/Wq/6/0Kj+P8ql/j/F4z3/xSK9/8Siff/EIf2/xuM9v9ttfr/JXfY+wBczqH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAVdUTAFzO/2Ov
8/9wvvz/LaD6/y2g+v8uofr/LqH6/y2h+v8toPr/LKD6/yyf+f8rnvn/Kp35/yic+f8nm/n/Jpr5/ySY
+f8jl/j/IZb4/ySX+P98wPv/Xqnx/12p8v92uvj/er76/3O5+v9arfn/QaD5/ymU9/8Sh/b/Uqf5/1Gd
7v8AXM/5AFnMFf///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8BAF3RIQBczv9rtPX/abv7/yue+f8rn/n/LJ/5/yyf+f8sn/n/LqH5/161+v9+w/v/arv7/yye
+f8nm/n/Jpr5/ySZ+f8jl/j/IZb4/yCV+P9BpPn/f8D5/whh0P8AXM7/AV3P/xlw2fk1iub/UaDv/2my
9/91ufr/cbf6/3G3+v9vtPn/EmrU+wBcz3X///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////AQBe0DEAXM7/crr3/2G2+/8pnfn/Kp35/yqd+f8qnfn/Qqj6/37E
+/+Fxfr/TJvq/4LD+v9ouPv/JZn5/ySY+f8jl/n/Ipb4/yCV+P8flPj/YrP6/2Go7v8AXc73AFjKHQBb
zVEAXM+PAF7PzwBdzv0AXM7/DmjV+SqB4v9Fluz/cLP2/0GQ5v8AXc/jAID/A////wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAXM9BAFzO/3i++f9as/r/J5v5/yic
+f8un/n/ZLj7/4zK/P9kq+//D2jS+wBczv8shOL9isj8/02r+v8jl/j/Ipb4/yCV+P8flPj/IZT4/4HC
+/85h+D9AFzOrf///wH///8B////Af///wEAXdELAF3NQwBbzn8AXc+/AFzO9wBczv8EX8//AFzO/wBd
z0v///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAF7PTwBc
zv9/w/v/Uq76/yaa+f9Fqfr/gcT8/3/A+P8yhOD9AF3P/QBdz48AXM9RAF3P/U6e7f+Gxvv/NJ/5/yCV
+P8flPj/HpP4/zuh+f+Ewvr/DWXS/QBczln///8B////Af///wH///8B////Af///wH///8B////AQBV
qgMAWs0zAFzPbwBczssAXM4v////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////AQBbz18BXc/9hcX7/1Sv+v9qufv/isj7/1ei7f8JY9H9AV3P1wBbzzX///8B////AQBb
zoMCXs/9bLT1/3i/+/8kl/j/HZP4/xyS+P9csPr/aKzw/wBczvsAVcwP////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wEAXc5vBGHS+YnH+/+Jx/v/d7n1/yZ52vsAXc/5AF3PeQBA
vwX///8B////Af///wEAVaoDAFzPxRBq1ft9wPr/YbP6/xyR+P8ckPj/fL/6/z2N4/0AXc+7////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAFvOfw1q1fmHxfr/V5/p/wVf
0P8BXc7DAFrPJf///wH///8B////Af///wH///8B////AQBYzhsBXs/tKYLh/YXE+/9Fpfn/M5z4/4PC
+v8TadP9AF3NZ////wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQBc
zo0HYM//HHHX+wBdz/MAW85j////Af///wH///8B////Af///wH///8B////Af///wH///8BAF3NRwBb
zv9Km+z/gcL7/2m1+v9usfP/AFvO/wBgyhn///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wEAXM25AFzO/wBdz6sAWdMX////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wEAXM2FAl7P/Wex9f+Dwvv/RpPm/wBdz8v///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8BAFnMKQBdzUP///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8BAFWqAwBdz8cQa9X7gsD6/xlu1PsAXM91////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAXtAbAF3P7x1x
2P8AXM7/AFzNJf///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////AQBbzkkAXM7/AFzO/////wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8BAF3PjwBczT3///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==
</value>
</data>
<data name="$this.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>2, 2, 2, 2</value>
</data>
<data name="$this.StartPosition" type="System.Windows.Forms.FormStartPosition, System.Windows.Forms">
<value>CenterParent</value>
</data>
<data name="$this.Text" xml:space="preserve">
<value>{0} {1} ist verfügbar!</value>
</data>
<data name="&gt;&gt;$this.Name" xml:space="preserve">
<value>UpdateForm</value>
</data>
<data name="&gt;&gt;$this.Type" xml:space="preserve">
<value>System.Windows.Forms.Form, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
</root>