diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..d95c904
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,7 @@
+################################################################################
+# 此 .gitignore 文件已由 Microsoft(R) Visual Studio 自动创建。
+################################################################################
+
+/PrimeNumber/bin/Debug
+/PrimeNumber/obj/Debug
+/.vs/PrimeNumber
diff --git a/PrimeNumber.sln b/PrimeNumber.sln
new file mode 100644
index 0000000..9f42929
--- /dev/null
+++ b/PrimeNumber.sln
@@ -0,0 +1,25 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 17
+VisualStudioVersion = 17.5.33502.453
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PrimeNumber", "PrimeNumber\PrimeNumber.csproj", "{4DE1916E-3164-4A40-8935-3FD3CAB9216D}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Release|Any CPU = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {4DE1916E-3164-4A40-8935-3FD3CAB9216D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {4DE1916E-3164-4A40-8935-3FD3CAB9216D}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {4DE1916E-3164-4A40-8935-3FD3CAB9216D}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {4DE1916E-3164-4A40-8935-3FD3CAB9216D}.Release|Any CPU.Build.0 = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {FEA967DF-C1FE-4D62-8F8F-CA44F04C6502}
+ EndGlobalSection
+EndGlobal
diff --git a/PrimeNumber/App.config b/PrimeNumber/App.config
new file mode 100644
index 0000000..8e15646
--- /dev/null
+++ b/PrimeNumber/App.config
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/PrimeNumber/Form1.resx b/PrimeNumber/Form1.resx
new file mode 100644
index 0000000..1af7de1
--- /dev/null
+++ b/PrimeNumber/Form1.resx
@@ -0,0 +1,120 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git a/PrimeNumber/Helper/LogHelper.cs b/PrimeNumber/Helper/LogHelper.cs
new file mode 100644
index 0000000..9670f2f
--- /dev/null
+++ b/PrimeNumber/Helper/LogHelper.cs
@@ -0,0 +1,228 @@
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using System.Reflection;
+using System.Web;
+
+namespace PrimeNumber.Helper
+{
+ public class LogHelper
+ {
+ static string assemblyDirPath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
+
+ ///
+ /// 创建文件夹
+ ///
+ /// 文件夹路径
+ ///
+ public static bool CreateFolder(string path)
+ {
+ //try
+ //{
+
+ //目录已存在等同于创建成功处理
+ if (Directory.Exists(path.Trim('\\')))
+ {
+ return true;
+ }
+ else
+ {
+ //创建文件夹
+ DirectoryInfo dirInfo = Directory.CreateDirectory(path);
+ return true;
+ }
+ //}
+ //catch (Exception ex)
+ //{
+ // Console.WriteLine(ex.Message);
+ // return false;
+ //}
+ }
+
+ ///
+ /// //创建文件
+ ///
+ /// path 文件路径
+ public static void CreateFile(string path)
+ {
+ //try
+ //{
+ if (CreateFolder(path.Substring(0, path.LastIndexOf("\\"))))
+ {
+ if (!File.Exists(path))
+ {
+ FileStream fs = File.Create(path);
+ fs.Close();
+ }
+ }
+ //}
+ //catch (Exception ex)
+ //{
+ // Console.WriteLine(ex.Message);
+ // return;
+ //}
+ }
+
+ ///
+ /// 删除文件
+ ///
+ ///
+ public void DeleteFile(string path)
+ {
+ if (File.Exists(path))
+ {
+ File.Delete(path);
+ }
+ }
+
+ ///
+ /// 写文件
+ ///
+ /// 文件路径
+ /// 文本内容
+ public static void WriteFile(string path, string content)
+ {
+ try
+ {
+ if (!File.Exists(path))
+ CreateFile(path);
+
+ using (FileStream fs = new FileStream(path, FileMode.Append, FileAccess.Write))
+ using (StreamWriter sw = new StreamWriter(fs))
+ {
+ sw.WriteLine(content);
+ sw.Close();
+ fs.Close();
+ }
+ }
+ catch (Exception ex)
+ {
+ Console.WriteLine(ex.Message);
+ return;
+ }
+ }
+
+ ///
+ /// 将即时日志保存入日志文件(asp.net WebForm)
+ ///
+ //public static void WriteAppDataLog(string content)
+ //{
+ // //string assemblyDirPath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
+ // string assemblyDirPath = HttpRuntime.AppDomainAppPath.ToString();
+
+ // string logPath = assemblyDirPath + "\\App_Data\\Log";
+ // string logName = string.Format("Log_{0}.txt", DateTime.Now.ToString("yyyyMMdd"));
+ // content = DateTime.Now.ToString("HH:mm:ss.ffffff") + " , " + content;
+ // WriteLogFile(logPath, content, logName);
+ //}
+
+ ///
+ /// 将即时日志保存入日志文件(bin目录下创建Log文件夹,按天生成日志文件)
+ ///
+ public static void WriteBinLog(string content, string forder = "Log", string fileName = "", bool autoTime = true, bool autoTimeFileName = true)
+ {
+ try
+ {
+ //string assemblyDirPath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
+ //string assemblyDirPath = HttpRuntime.AppDomainAppPath.ToString();
+ string logPath = assemblyDirPath;
+ string logName = string.Format("{0}.txt", fileName);
+
+ if (!string.IsNullOrEmpty(forder))
+ logPath = Path.Combine(assemblyDirPath, forder);
+
+ if (string.IsNullOrEmpty(fileName))
+ fileName = forder;
+ if (string.IsNullOrEmpty(fileName))
+ autoTimeFileName = true;
+ if (autoTimeFileName)
+ logName = string.Format("{0}_{1}.txt", fileName, DateTime.Now.ToString("yyyyMMdd"));
+
+ if (autoTime)
+ content = string.Format("{0},{1}", DateTime.Now.ToString("HH:mm:ss.ffffff"), content);
+
+ WriteLogFile(logPath, content, logName);
+ }
+ catch (Exception ex)
+ {
+ Console.WriteLine(ex.Message);
+ //故意吞噬异常
+ }
+ }
+
+ private static object objLock = "";
+ ///
+ /// 将即时日志保存入日志文件
+ ///
+ public static void WriteLogFile(string directoryPath, string content, string fileName)
+ {
+ //写入新的文件
+ string filePath = "";
+ if (directoryPath.Trim().Trim('/').Trim('\\') == "")
+ {
+ filePath = fileName;
+ }
+ else
+ {
+ if (!Directory.Exists(directoryPath))
+ CreateFolder(directoryPath);
+ filePath = directoryPath + "\\" + fileName;
+ }
+ lock (objLock)
+ {
+ using (FileStream fs = new FileStream(filePath, FileMode.Append, FileAccess.Write))
+ using (StreamWriter sw = new StreamWriter(fs))
+ {
+ sw.WriteLine(content);
+ //sw.Flush();
+ sw.Close();
+ fs.Close();
+ }
+ }
+ }
+
+ #region 控制台输出日志
+ static object cwLock = new object();
+ public static void WriteLine(string msg, object arg0, object arg1, object arg2)
+ {
+ string tips = string.Format(msg, arg0, arg1, arg2);
+ WriteLine(tips);
+ }
+ public static void WriteLine(string msg, object arg0, object arg1)
+ {
+ string tips = string.Format(msg, arg0, arg1);
+ WriteLine(tips);
+ }
+ public static void WriteLine(string msg, object arg0)
+ {
+ string tips = string.Format(msg, arg0);
+ WriteLine(tips);
+ }
+ public static void WriteLine(string msg, ConsoleColor color = ConsoleColor.Gray, bool prefixTime = true)
+ {
+ try
+ {
+ //关闭控制台显示时候,Console已释放,可能会调用到 Console.WriteLine,所以要吞噬异常
+ //if (color != ConsoleColor.Gray)
+ //{
+ lock (cwLock)
+ {
+ Console.ForegroundColor = color;
+ Console.WriteLine("{0}, {1}", DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss.fffffff"), msg);
+ Console.ResetColor();
+ }
+ //}
+ //else
+ //{
+ // Console.WriteLine("{0}, {1}", DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss.fffffff"), msg);
+ //}
+ }
+ catch (Exception)
+ {
+ }
+ }
+ #endregion
+
+ }
+}
diff --git a/PrimeNumber/Helper/PrimeNumberHelper.cs b/PrimeNumber/Helper/PrimeNumberHelper.cs
new file mode 100644
index 0000000..f045d8b
--- /dev/null
+++ b/PrimeNumber/Helper/PrimeNumberHelper.cs
@@ -0,0 +1,38 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace PrimeNumber.Helper
+{
+ public class PrimeNumberHelper
+ {
+ ///
+ /// 判断某个数字是否为质数
+ ///
+ ///
+ ///
+ public static bool IsPrimeNumber(UInt64 number)
+ {
+ //0,1单独处理(类型UInt64最小0)
+ if (number < 2)
+ return false;
+
+ //2单独处理
+ if (number == 2)
+ return true;
+
+ //遍历检查
+ for (UInt64 i = 2; i < number; i++)
+ {
+ if (number % i == 0)
+ {
+ return false;
+ }
+ }
+
+ return true;
+ }
+ }
+}
diff --git a/PrimeNumber/MainForm.Designer.cs b/PrimeNumber/MainForm.Designer.cs
new file mode 100644
index 0000000..695e6bd
--- /dev/null
+++ b/PrimeNumber/MainForm.Designer.cs
@@ -0,0 +1,209 @@
+
+namespace PrimeNumber
+{
+ partial class MainForm
+ {
+ ///
+ /// Required designer variable.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ /// true if managed resources should be disposed; otherwise, false.
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows Form Designer generated code
+
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent()
+ {
+ System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MainForm));
+ this.txtMax = new System.Windows.Forms.TextBox();
+ this.label1 = new System.Windows.Forms.Label();
+ this.txtMsg = new System.Windows.Forms.TextBox();
+ this.label2 = new System.Windows.Forms.Label();
+ this.txtStartValue = new System.Windows.Forms.TextBox();
+ this.btnStartParallel = new System.Windows.Forms.Button();
+ this.btnFillMax = new System.Windows.Forms.Button();
+ this.btnStop = new System.Windows.Forms.Button();
+ this.txtSetCores = new System.Windows.Forms.TextBox();
+ this.btnSetCores = new System.Windows.Forms.Button();
+ this.lbMsg = new System.Windows.Forms.ListBox();
+ this.label3 = new System.Windows.Forms.Label();
+ this.SuspendLayout();
+ //
+ // txtMax
+ //
+ this.txtMax.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ this.txtMax.Location = new System.Drawing.Point(72, 31);
+ this.txtMax.Name = "txtMax";
+ this.txtMax.Size = new System.Drawing.Size(125, 21);
+ this.txtMax.TabIndex = 1;
+ this.txtMax.Text = "10000";
+ //
+ // label1
+ //
+ this.label1.AutoSize = true;
+ this.label1.Location = new System.Drawing.Point(1, 34);
+ this.label1.Name = "label1";
+ this.label1.Size = new System.Drawing.Size(65, 12);
+ this.label1.TabIndex = 2;
+ this.label1.Text = "限制最大值";
+ //
+ // txtMsg
+ //
+ this.txtMsg.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ this.txtMsg.Location = new System.Drawing.Point(3, 110);
+ this.txtMsg.Name = "txtMsg";
+ this.txtMsg.ReadOnly = true;
+ this.txtMsg.Size = new System.Drawing.Size(309, 21);
+ this.txtMsg.TabIndex = 6;
+ //
+ // label2
+ //
+ this.label2.AutoSize = true;
+ this.label2.Location = new System.Drawing.Point(1, 9);
+ this.label2.Name = "label2";
+ this.label2.Size = new System.Drawing.Size(65, 12);
+ this.label2.TabIndex = 7;
+ this.label2.Text = "穷举起始值";
+ //
+ // txtStartValue
+ //
+ this.txtStartValue.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ this.txtStartValue.Location = new System.Drawing.Point(72, 6);
+ this.txtStartValue.Name = "txtStartValue";
+ this.txtStartValue.Size = new System.Drawing.Size(125, 21);
+ this.txtStartValue.TabIndex = 1;
+ this.txtStartValue.Text = "0";
+ //
+ // btnStartParallel
+ //
+ this.btnStartParallel.Location = new System.Drawing.Point(3, 86);
+ this.btnStartParallel.Name = "btnStartParallel";
+ this.btnStartParallel.Size = new System.Drawing.Size(63, 23);
+ this.btnStartParallel.TabIndex = 0;
+ this.btnStartParallel.Text = "开始Parallel";
+ this.btnStartParallel.UseVisualStyleBackColor = true;
+ this.btnStartParallel.Click += new System.EventHandler(this.btnStartParallel_Click);
+ //
+ // btnFillMax
+ //
+ this.btnFillMax.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+ this.btnFillMax.Location = new System.Drawing.Point(203, 30);
+ this.btnFillMax.Name = "btnFillMax";
+ this.btnFillMax.Size = new System.Drawing.Size(109, 23);
+ this.btnFillMax.TabIndex = 0;
+ this.btnFillMax.Text = "填充long最大值";
+ this.btnFillMax.UseVisualStyleBackColor = true;
+ this.btnFillMax.Click += new System.EventHandler(this.btnFillMax_Click);
+ //
+ // btnStop
+ //
+ this.btnStop.Location = new System.Drawing.Point(72, 86);
+ this.btnStop.Name = "btnStop";
+ this.btnStop.Size = new System.Drawing.Size(63, 23);
+ this.btnStop.TabIndex = 8;
+ this.btnStop.Text = "终止";
+ this.btnStop.UseVisualStyleBackColor = true;
+ this.btnStop.Click += new System.EventHandler(this.btnStop_Click);
+ //
+ // txtSetCores
+ //
+ this.txtSetCores.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ this.txtSetCores.Location = new System.Drawing.Point(72, 57);
+ this.txtSetCores.Name = "txtSetCores";
+ this.txtSetCores.Size = new System.Drawing.Size(125, 21);
+ this.txtSetCores.TabIndex = 9;
+ this.txtSetCores.Text = "4";
+ //
+ // btnSetCores
+ //
+ this.btnSetCores.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+ this.btnSetCores.Location = new System.Drawing.Point(203, 56);
+ this.btnSetCores.Name = "btnSetCores";
+ this.btnSetCores.Size = new System.Drawing.Size(109, 23);
+ this.btnSetCores.TabIndex = 10;
+ this.btnSetCores.Text = "工作内核数设置";
+ this.btnSetCores.UseVisualStyleBackColor = true;
+ this.btnSetCores.Click += new System.EventHandler(this.btnSetCores_Click);
+ //
+ // lbMsg
+ //
+ this.lbMsg.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+ | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ this.lbMsg.FormattingEnabled = true;
+ this.lbMsg.ItemHeight = 12;
+ this.lbMsg.Location = new System.Drawing.Point(3, 130);
+ this.lbMsg.Name = "lbMsg";
+ this.lbMsg.Size = new System.Drawing.Size(309, 64);
+ this.lbMsg.TabIndex = 11;
+ //
+ // label3
+ //
+ this.label3.AutoSize = true;
+ this.label3.Location = new System.Drawing.Point(1, 59);
+ this.label3.Name = "label3";
+ this.label3.Size = new System.Drawing.Size(65, 12);
+ this.label3.TabIndex = 12;
+ this.label3.Text = "启用内核数";
+ //
+ // MainForm
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.ClientSize = new System.Drawing.Size(314, 202);
+ this.Controls.Add(this.label3);
+ this.Controls.Add(this.lbMsg);
+ this.Controls.Add(this.btnSetCores);
+ this.Controls.Add(this.txtSetCores);
+ this.Controls.Add(this.btnStop);
+ this.Controls.Add(this.label2);
+ this.Controls.Add(this.txtMsg);
+ this.Controls.Add(this.label1);
+ this.Controls.Add(this.txtStartValue);
+ this.Controls.Add(this.txtMax);
+ this.Controls.Add(this.btnFillMax);
+ this.Controls.Add(this.btnStartParallel);
+ this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
+ this.MinimumSize = new System.Drawing.Size(330, 175);
+ this.Name = "MainForm";
+ this.Text = "穷举质数";
+ this.Load += new System.EventHandler(this.PrimeNumberForm_Load);
+ this.ResumeLayout(false);
+ this.PerformLayout();
+
+ }
+
+ #endregion
+ private System.Windows.Forms.TextBox txtMax;
+ private System.Windows.Forms.Label label1;
+ private System.Windows.Forms.TextBox txtMsg;
+ private System.Windows.Forms.Label label2;
+ private System.Windows.Forms.TextBox txtStartValue;
+ private System.Windows.Forms.Button btnStartParallel;
+ private System.Windows.Forms.Button btnFillMax;
+ private System.Windows.Forms.Button btnStop;
+ private System.Windows.Forms.TextBox txtSetCores;
+ private System.Windows.Forms.Button btnSetCores;
+ private System.Windows.Forms.ListBox lbMsg;
+ private System.Windows.Forms.Label label3;
+ }
+}
\ No newline at end of file
diff --git a/PrimeNumber/MainForm.cs b/PrimeNumber/MainForm.cs
new file mode 100644
index 0000000..4e40030
--- /dev/null
+++ b/PrimeNumber/MainForm.cs
@@ -0,0 +1,198 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Drawing.Drawing2D;
+using System.Linq;
+using System.Text;
+using System.Threading;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+using static System.Windows.Forms.VisualStyles.VisualStyleElement;
+
+namespace PrimeNumber
+{
+ public partial class MainForm : Form
+ {
+ /*
+ * //Parallel 不支持UInt64,所以使用Int64
+ *
+ * 2023/03/27 15:22:38.9969871,Parallel起始值:2,终止值1000000,结果数量:78498,耗时:00:00:21.8807827
+ * 2023/03/27 15:28:46.9166055,Task起始值:2,终止值1000000,结果数量:78498,耗时:00:06:00.3271774
+ *
+ */
+
+
+ public MainForm()
+ {
+ InitializeComponent();
+ }
+
+ //Parallel并行计算
+ ParallelOptions parallelOptions;
+ CancellationTokenSource cts;
+
+ //进度监控线程
+ Task tMoniter = null;
+ CancellationTokenSource tMoniter_cts = null;
+
+ //结果
+ static object PrimeNumberListLock = new object();
+ static List PrimeNumberList = new List();
+
+ private void PrimeNumberForm_Load(object sender, EventArgs e)
+ {
+ this.txtMax.Text = "100000";//Int64.MaxValue.ToString();
+ this.txtSetCores.Text = Environment.ProcessorCount.ToString();
+ RuningStatus(false);
+ }
+
+ #region log
+ private delegate void ShowInLogCallback(string msg, bool autoTime = true);
+ private ShowInLogCallback showInlogMethodCallback;
+ private void ShowLog(string msg, bool autoTime = true)
+ {
+ if (this.lbMsg.InvokeRequired)
+ {
+ showInlogMethodCallback = new ShowInLogCallback(ShowLog);
+ lbMsg.Invoke(showInlogMethodCallback, new object[] { msg, autoTime });
+ }
+ else
+ {
+ if (autoTime)
+ {
+ msg = string.Format("{0},{1}", DateTime.Now.ToString("HH:mm:ss.fffffff"), msg);
+ }
+ Helper.LogHelper.WriteBinLog(msg, "Log");
+ this.lbMsg.Items.Insert(0, msg);
+ }
+ }
+ #endregion
+
+ private void btnFillMax_Click(object sender, EventArgs e)
+ {
+ this.txtMax.Text = Int64.MaxValue.ToString();
+ }
+
+ private void btnStartParallel_Click(object sender, EventArgs e)
+ {
+ DateTime dtStart = DateTime.Now;
+ Int64 startValue = Convert.ToInt64(this.txtStartValue.Text.Trim());
+ Int64 endValue = Convert.ToInt64(this.txtMax.Text.Trim());
+
+ ParallelLoopResult result = new ParallelLoopResult();
+ PrimeNumberList.Clear();
+
+ RuningStatus(true);
+
+ Task.Run(() =>
+ {
+ try
+ {
+ ShowLog("启动计算");
+ string fileName = string.Format("{0}-{1}", startValue, endValue);
+ //计算核心
+ cts = new CancellationTokenSource();
+ parallelOptions = new ParallelOptions() { MaxDegreeOfParallelism = Convert.ToInt32(this.txtSetCores.Text.Trim()), CancellationToken = cts.Token, };
+ result = Parallel.For(startValue, endValue, parallelOptions, (x, pls) =>
+ {
+ bool IsPrimeNumber = Helper.PrimeNumberHelper.IsPrimeNumber(Convert.ToUInt64(x.ToString()));
+ //Console.WriteLine($"{x}:{b}");
+
+ if (IsPrimeNumber)
+ {
+ lock (PrimeNumberListLock)
+ {
+ PrimeNumberList.Add(x);
+ }
+ Helper.LogHelper.WriteBinLog(x.ToString(), "PrimeNumber_Parallel", fileName, false, false);
+ }
+ });
+ }
+ catch (Exception ex)
+ {
+ ShowLog(ex.Message);
+ }
+ finally
+ {
+ TimeSpan ts = DateTime.Now - dtStart;
+ string tips = string.Format("Parallel,起始值:{0},终止值{1},结果数量:{2},耗时:{3}", startValue, endValue, PrimeNumberList.Count(), ts.ToString());
+ ShowLog(tips);
+ RuningStatus(false);
+ }
+ });
+
+ //进度监控
+ tMoniter_cts = new CancellationTokenSource();
+ tMoniter = new Task(() =>
+ {
+ DateTime dtEnd = DateTime.Now;
+ TimeSpan ts = dtEnd - dtStart;
+ try
+ {
+ //Thread.Sleep(1 * 1000);//给result启动预留时间
+ while (!result.IsCompleted)
+ {
+ if (tMoniter_cts.Token.IsCancellationRequested)
+ {
+ ShowMoniter(string.Format("得到质数总数:{0},后台运行状态:{1},耗时:{2}", PrimeNumberList.Count(), "取消", ts.ToString()));
+ return;
+ }
+
+ dtEnd = DateTime.Now;
+ ts = dtEnd - dtStart;
+ ShowMoniter(string.Format("得到质数总数:{0},后台运行状态:{1},耗时:{2}", PrimeNumberList.Count(), "运行中", ts.ToString()));
+ Thread.Sleep(1 * 1000);
+ }
+ //完成
+ ShowMoniter(string.Format("得到质数总数:{0},后台运行状态:{1},耗时:{2}", PrimeNumberList.Count(), "完成", ts.ToString()));
+ }
+ catch (Exception ex)
+ {
+ ShowLog(ex.Message);
+ }
+ }, tMoniter_cts.Token);
+ tMoniter.Start();
+
+ }
+
+ private void btnStop_Click(object sender, EventArgs e)
+ {
+ ShowLog("终止计算");
+ if (cts != null)
+ {
+ cts.Cancel();
+ }
+ if (tMoniter_cts != null)
+ {
+ tMoniter_cts.Cancel();
+ }
+ RuningStatus(false);
+ }
+
+ private void btnSetCores_Click(object sender, EventArgs e)
+ {
+ parallelOptions.MaxDegreeOfParallelism = Convert.ToInt32(this.txtSetCores.Text.Trim());
+ ShowLog("工作内核数设置为" + parallelOptions.MaxDegreeOfParallelism);
+ }
+
+ private void RuningStatus(bool isRuning)
+ {
+ this.btnStartParallel.Invoke(new Action(() =>
+ {
+ this.btnStartParallel.Enabled = !isRuning;
+ this.btnFillMax.Enabled = !isRuning;
+ this.btnSetCores.Enabled = !isRuning;
+ this.btnStop.Enabled = isRuning;
+ }));
+ }
+ private void ShowMoniter(string msg)
+ {
+ this.txtMsg.Invoke(new Action(() =>
+ {
+ this.txtMsg.Text = DateTime.Now.ToString("HH:mm:ss.fffffff") + "," + msg + Environment.NewLine;
+ }));
+ }
+ }
+}
diff --git a/PrimeNumber/MainForm.resx b/PrimeNumber/MainForm.resx
new file mode 100644
index 0000000..f52f01a
--- /dev/null
+++ b/PrimeNumber/MainForm.resx
@@ -0,0 +1,760 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+
+
+ AAABAAEAYGAAAAEAIAColAAAFgAAACgAAABgAAAAwAAAAAEAIAAAAAAAAJAAAAAAAAAAAAAAAAAAAAAA
+ AAD////////////////////////////////////////////////////////////////9/f3//f39//39
+ /f/9/f3/4eHh/0BAQP8HBwf/AgIC/xsbG/85OTn/NDQ0/zQ0NP8yMjL/Ly8v/xYWFv8EBAT/BAQE/wkJ
+ Cf9VVVX/n5+f/5ubm/+BgYH/bm5u/2tra/9qamr/bm5u/3Jycv92dnb/d3d3/3R0dP9zc3P/d3d3/3t7
+ e/97e3v/enp6/3h4eP94eHj/jo6O/4ODg/8XFxf/AgIC/wEBAf8QEBD/IyMj/yAgIP8hISH/Hx8f/xwc
+ HP8aGhr/GBgY/xkZGf8bGxv/HR0d/yAgIP8kJCT/ExMT/wcHB/8BAQH/BwcH/xkZGf8pKSn/LS0t/y8v
+ L/8zMzP/IyMj/w4ODv8FBQX/CwsL/1tbW//r6+v/+/v7///////+/v7//v7+////////////////////
+ ///////////////////+/v7//f39//39/f//////////////////////////////////////////////
+ ///////////////////9/f3//f39//39/f/9/f3/0dHR/ywsLP8GBgb/BQUF/yEhIf8zMzP/KCgo/zAw
+ MP8vLy//LS0t/xkZGf8GBgb/BgYG/wgICP9OTk7/nZ2d/56env9/f3//ZmZm/2RkZP9lZWX/aWlp/21t
+ bf9xcXH/dHR0/3Fxcf9wcHD/dHR0/3l5ef97e3v/enp6/3h4eP95eXn/kZGR/4SEhP8WFhb/AgIC/wEB
+ Af8QEBD/IyMj/yAgIP8hISH/Hx8f/xwcHP8aGhr/FRUV/xcXF/8ZGRn/Gxsb/x0dHf8mJib/FRUV/wUF
+ Bf8EBAT/BwcH/wwMDP8mJib/LS0t/zExMf80NDT/Hh4e/wgICP8HBwf/DAwM/2dnZ//z8/P//f39////
+ ///8/Pz//f39///////////////////////////////////////+/v7//f39//39/f//////////////
+ ///////////////////////////////////////////////////9/f3//f39//39/f/9/f3/xsbG/x0d
+ Hf8GBgb/CgoK/ygoKP8zMzP/IiIi/ygoKP8oKCj/LCws/xkZGf8FBQX/BAQE/wQEBP9HR0f/lJSU/5eX
+ l/97e3v/YWFh/15eXv9dXV3/YGBg/2dnZ/9ra2v/bGxs/2tra/9tbW3/cnJy/3Z2dv94eHj/d3d3/3d3
+ d/96enr/kpKS/4ODg/8XFxf/AQEB/wMDA/8RERH/IiIi/yIiIv8hISH/Hx8f/xwcHP8ZGRn/FRUV/xYW
+ Fv8YGBj/GBgY/yAgIP8pKSn/ICAg/w0NDf8HBwf/BwcH/wgICP8lJSX/LS0t/zExMf8zMzP/Gxsb/wYG
+ Bv8NDQ3/CwsL/2pqav/09PT//v7+//39/f/5+fn/+Pj4//v7+//7+/v//v7+////////////////////
+ ///+/v7//f39//39/f//////////////////////////////////////////////////////////////
+ ///9/f3//f39//39/f/9/f3/zMzM/yEhIf8GBgb/CgoK/yMjI/8xMTH/IiIi/yUlJf8jIyP/LCws/xgY
+ GP8DAwP/BwcH/wYGBv9DQ0P/hoaG/4aGhv9tbW3/VVVV/09PT/9HR0f/SUlJ/1hYWP9hYWH/YWFh/19f
+ X/9lZWX/a2tr/29vb/9vb2//cXFx/3Nzc/94eHj/jY2N/4GBgf8jIyP/BQUF/wYGBv8SEhL/Hx8f/yYm
+ Jv8jIyP/ICAg/xsbG/8YGBj/FxcX/xcXF/8XFxf/FxcX/xwcHP8lJSX/JiYm/xISEv8EBAT/AwMD/wcH
+ B/8hISH/MDAw/zQ0NP81NTX/Hh4e/wgICP8HBwf/CgoK/2xsbP/j4+P/6urq/+/v7//5+fn/+vr6//v7
+ +//9/f3//Pz8//z8/P/////////////////+/v7//f39//39/f//////////////////////////////
+ ///////////////////////////////////9/f3//f39//39/f/9/f3/zMzM/yYmJv8DAwP/CQkJ/yEh
+ If80NDT/JCQk/yMjI/8jIyP/Li4u/xoaGv8GBgb/CgoK/wgICP9DQ0P/f39//3h4eP9gYGD/SUlJ/z8/
+ P/8uLi7/Kysr/z09Pf9RUVH/WFhY/1hYWP9gYGD/aWlp/25ubv9vb2//cXFx/3R0dP95eXn/ioqK/4KC
+ gv8yMjL/BgYG/wUFBf8NDQ3/Gxsb/ycnJ/8jIyP/ICAg/xsbG/8YGBj/FxcX/xcXF/8XFxf/FxcX/xwc
+ HP8lJSX/JiYm/xISEv8FBQX/AwMD/wICAv8YGBj/MzMz/zg4OP82Njb/HR0d/xMTE/8ICAj/CwsL/y8v
+ L/9TU1P/XV1d/2lpaf+tra3/7e3t//n5+f/9/f3//Pz8//39/f/////////////////+/v7//f39//39
+ /f/////////////////////////////////////////////////////////////////9/f3//f39//39
+ /f/9/f3/1NTU/zExMf8DAwP/CgoK/xcXF/8wMDD/KSkp/ygoKP8lJSX/MTEx/x0dHf8ICAj/CwsL/wkJ
+ Cf9ERET/eXl5/2xsbP9UVFT/Pz8//y8vL/8cHBz/GBgY/yIiIv8zMzP/QUFB/0xMTP9WVlb/YmJi/2ho
+ aP9ra2v/bW1t/29vb/90dHT/fHx8/3l5ef8/Pz//CAgI/wQEBP8ICAj/FxcX/ycnJ/8jIyP/ICAg/xsb
+ G/8YGBj/FxcX/xcXF/8XFxf/FxcX/xwcHP8lJSX/JiYm/xISEv8FBQX/AwMD/wUFBf8eHh7/OTk5/zw8
+ PP84ODj/HR0d/wYGBv8GBgb/DQ0N/wkJCf8GBgb/ERER/wgICP83Nzf/np6e/+rq6v/7+/v/9vb2////
+ ///////////////////+/v7//f39//39/f//////////////////////////////////////////////
+ ///////////////////+/v7//v7+//7+/v/+/v7/6Ojo/1JSUv8ICAj/BgYG/wwMDP8pKSn/LCws/yws
+ LP8qKir/MTEx/xwcHP8HBwf/DAwM/xMTE/9HR0f/aGho/1RUVP8/Pz//Kysr/x0dHf8VFRX/FhYW/xcX
+ F/8eHh7/KCgo/zQ0NP9BQUH/T09P/1dXV/9ZWVn/W1tb/11dXf9eXl7/X19f/2ZmZv9GRkb/ERER/wQE
+ BP8GBgb/EBAQ/yUlJf8lJSX/Hx8f/xoaGv8YGBj/FxcX/xcXF/8XFxf/FxcX/xwcHP8iIiL/JCQk/xMT
+ E/8FBQX/BAQE/woKCv8rKyv/Pj4+/z8/P/80NDT/Ghoa/wsLC/8HBwf/CAgI/w4ODv8NDQ3/DAwM/wkJ
+ Cf8JCQn/HR0d/4qKiv/t7e3/9/f3//39/f/+/v7//v7+//7+/v/9/f3//f39//39/f//////////////
+ ////////////////////////////////////////////////////////////////////////9PT0/4GB
+ gf8NDQ3/AgIC/wYGBv8hISH/MDAw/y4uLv8wMDD/MjIy/xgYGP8DAwP/BgYG/x8fH/9QUFD/VlZW/zs7
+ O/8pKSn/Ghoa/xkZGf8cHBz/Gxsb/xsbG/8bGxv/HBwc/yMjI/8uLi7/Ozs7/0JCQv9DQ0P/RERE/0RE
+ RP9FRUX/RkZG/0ZGRv84ODj/FhYW/wQEBP8GBgb/BgYG/yAgIP8tLS3/ISEh/xgYGP8XFxf/FxcX/xcX
+ F/8XFxf/FxcX/xoaGv8cHBz/ICAg/xQUFP8GBgb/BQUF/wwMDP82Njb/RERE/0hISP8tLS3/EBAQ/woK
+ Cv8JCQn/Q0ND/3Fxcf+CgoL/a2tr/yAgIP8EBAT/BwcH/zk5Of/Q0ND/+Pj4//v7+//9/f3//f39//39
+ /f/9/f3//f39//39/f//////////////////////////////////////////////////////////////
+ ////////////////////////+/v7/8LCwv8sLCz/BAQE/wUFBf8cHBz/MzMz/zc3N/81NTX/NjY2/xsb
+ G/8DAwP/DAwM/zAwMP9WVlb/RUVF/ygoKP8gICD/Gxsb/xwcHP8dHR3/Gxsb/xsbG/8bGxv/HR0d/yEh
+ If8lJSX/KSkp/ywsLP8rKyv/Kysr/ysrK/8sLCz/Ly8v/yoqKv8pKSn/IyMj/wgICP8DAwP/BAQE/xcX
+ F/8sLCz/JSUl/xwcHP8XFxf/FxcX/xcXF/8XFxf/FxcX/xoaGv8cHBz/ICAg/xMTE/8FBQX/BQUF/w4O
+ Dv86Ojr/TExM/0xMTP8rKyv/CQkJ/wkJCf8TExP/mJiY/+zs7P/29vb/5eXl/4ODg/8eHh7/CAgI/ygo
+ KP/AwMD/+vr6//39/f/9/f3//f39//39/f/9/f3//f39//39/f//////////////////////////////
+ /////////////////////////////////////////////////////////Pz8/+3t7f9vb2//CgoK/wcH
+ B/8XFxf/ODg4/0BAQP86Ojr/Ozs7/x0dHf8DAwP/CQkJ/y4uLv9LS0v/Nzc3/yIiIv8dHR3/HBwc/xoa
+ Gv8aGhr/Gxsb/xsbG/8bGxv/HBwc/x8fH/8gICD/IiIi/yIiIv8fHx//Hx8f/x8fH/8eHh7/HR0d/x0d
+ Hf8eHh7/LCws/xwcHP8KCgr/BQUF/wkJCf8cHBz/Hx8f/x0dHf8ZGRn/FxcX/xcXF/8XFxf/FxcX/xoa
+ Gv8cHBz/ICAg/xMTE/8FBQX/BQUF/xISEv9AQED/Tk5O/z8/P/8aGhr/BgYG/wYGBv8mJib/wcHB//n5
+ +f/8/Pz/+/v7/9TU1P87Ozv/BQUF/yUlJf/CwsL//Pz8//z8/P/9/f3//f39//39/f/9/f3//f39//39
+ /f//////////////////////////////////////////////////////////////////////////////
+ ////////+/v7//j4+P+oqKj/FBQU/woKCv8TExP/Ozs7/0dHR/8+Pj7/QEBA/yAgIP8EBAT/BQUF/yIi
+ Iv8+Pj7/NjY2/ygoKP8hISH/Hh4e/xkZGf8ZGRn/HR0d/x0dHf8dHR3/Hh4e/yAgIP8jIyP/JSUl/yUl
+ Jf8hISH/ICAg/x4eHv8cHBz/HBwc/x8fH/8fHx//Li4u/y0tLf8VFRX/CgoK/wMDA/8NDQ3/GBgY/xwc
+ HP8YGBj/GBgY/xcXF/8XFxf/GRkZ/xoaGv8dHR3/IiIi/xUVFf8FBQX/CAgI/xYWFv9CQkL/TExM/y4u
+ Lv8LCwv/CAgI/wQEBP9HR0f/4uLi//r6+v/6+vr/9fX1/9PT0/89PT3/CgoK/yQkJP/CwsL/+fn5//f3
+ 9//9/f3/+fn5//z8/P/8/Pz//f39//39/f//////////////////////////////////////////////
+ ////////////////////////////////////////+/v7//b29v/Ozs7/MjIy/wQEBP8NDQ3/MTEx/0RE
+ RP9CQkL/R0dH/yYmJv8EBAT/AwMD/xUVFf84ODj/PT09/zIyMv8xMTH/LCws/ywsLP8uLi7/MDAw/zAw
+ MP8wMDD/Ly8v/y0tLf8tLS3/LS0t/y4uLv8wMDD/Kysr/yYmJv8kJCT/JSUl/yYmJv8rKyv/MzMz/zs7
+ O/8sLCz/GBgY/woKCv8LCwv/ExMT/xkZGf8cHBz/HBwc/xkZGf8ZGRn/HR0d/xsbG/8fHx//JSUl/xUV
+ Ff8FBQX/CwsL/x8fH/9DQ0P/SUlJ/yEhIf8ICAj/CQkJ/wwMDP95eXn/9PT0//f39//5+fn/9vb2/8jI
+ yP8xMTH/BwcH/xQUFP+Ojo7/1tbW/93d3f/19fX/8vLy//r6+v/6+vr/+/v7//v7+///////////////
+ /////////////////////////////////////////////////////////////////////////f39//n5
+ +f/s7Oz/b29v/wMDA/8CAgL/FBQU/zY2Nv9JSUn/TExM/zAwMP8KCgr/AQEB/w4ODv8wMDD/Pz8//zw8
+ PP88PDz/NDQ0/zExMf8xMTH/MTEx/zExMf8xMTH/MTEx/zExMf8xMTH/MTEx/zExMf8xMTH/Li4u/yws
+ LP8qKir/Kysr/ysrK/8wMDD/OTk5/0dHR/9JSUn/Pj4+/ywsLP8bGxv/FhYW/xsbG/8jIyP/IiIi/x0d
+ Hf8cHBz/Hx8f/x0dHf8gICD/JCQk/xISEv8DAwP/CQkJ/ycnJ/9JSUn/QEBA/xoaGv8FBQX/BAQE/xgY
+ GP+rq6v/+/v7//n5+f/5+fn/9fX1/46Ojv8YGBj/CAgI/wQEBP8XFxf/Kioq/0dHR/+Ojo7/1NTU//T0
+ 9P/5+fn/+fn5//r6+v//////////////////////////////////////////////////////////////
+ /////////////////////////f39//r6+v/6+vr/rKys/x4eHv8DAwP/AwMD/yQkJP9FRUX/S0tL/zo6
+ Ov8VFRX/BQUF/wkJCf8cHBz/Kioq/yoqKv8nJyf/Gxsb/xUVFf8UFBT/FBQU/xQUFP8UFBT/EhIS/w0N
+ Df8NDQ3/DQ0N/w0NDf8LCwv/CwsL/woKCv8LCwv/Dg4O/w4ODv8UFBT/HBwc/ywsLP85OTn/QEBA/z8/
+ P/85OTn/NjY2/zY2Nv84ODj/MjIy/ysrK/8nJyf/Jycn/ycnJ/8pKSn/Kioq/xYWFv8FBQX/CgoK/zAw
+ MP9HR0f/Kysr/w4ODv8EBAT/BgYG/0ZGRv/Y2Nj/+/v7//39/f/8/Pz/29vb/0BAQP8EBAT/BAQE/wsL
+ C/8FBQX/BQUF/wUFBf8ODg7/QUFB/6enp//y8vL/9/f3//j4+P//////////////////////////////
+ ///////////////////////////////////////////////////+/v7//f39//z8/P/8/Pz/09PT/0xM
+ TP8LCwv/AwMD/xUVFf8wMDD/NDQ0/y0tLf8TExP/AwMD/wEBAf8EBAT/CgoK/wkJCf8ICAj/BgYG/wgI
+ CP8KCgr/CAgI/wgICP8HBwf/BQUF/wMDA/8DAwP/AwMD/wICAv8AAAD/AQEB/wICAv8CAgL/AQEB/wIC
+ Av8GBgb/CgoK/wYGBv8JCQn/ERER/xgYGP8fHx//Kysr/zMzM/81NTX/OTk5/zQ0NP8wMDD/MDAw/zEx
+ Mf8yMjL/MDAw/xwcHP8KCgr/Dw8P/zU1Nf8/Pz//GBgY/wUFBf8DAwP/Dg4O/42Njf/29vb/+vr6//z8
+ /P/5+fn/09PT/zQ0NP8CAgL/AgIC/wcHB/8KCgr/Dw8P/wMDA/8LCwv/CQkJ/yoqKv+wsLD/9PT0//T0
+ 9P/////////////////////////////////////////////////////////////////5+fn//Pz8////
+ ///9/f3//Pz8//r6+v/4+Pj/8vLy/4+Pj/8YGBj/CgoK/wYGBv8ODg7/Dw8P/wwMDP8FBQX/BAQE/wUF
+ Bf8FBQX/BgYG/wQEBP8CAgL/AQEB/wEBAf8EBAT/CAgI/wcHB/8FBQX/BQUF/wYGBv8GBgb/BgYG/wYG
+ Bv8EBAT/BQUF/wYGBv8HBwf/BQUF/wQEBP8DAwP/AwMD/wUFBf8FBQX/BQUF/wUFBf8FBQX/CAgI/w4O
+ Dv8TExP/GRkZ/x8fH/8nJyf/LS0t/zU1Nf88PDz/NTU1/yMjI/8UFBT/Hx8f/z4+Pv8yMjL/CwsL/wUF
+ Bf8BAQH/JiYm/8LCwv/6+vr/+fn5//n5+f/+/v7/6Ojo/4iIiP9TU1P/XFxc/2NjY/9/f3//eHh4/0hI
+ SP8XFxf/BwcH/wUFBf9UVFT/5+fn//Ly8v//////////////////////////////////////////////
+ ///////////////////9/f3//Pz8//v7+//7+/v/+vr6//j4+P/p6en/ra2t/1NTU/8NDQ3/BgYG/wUF
+ Bf8JCQn/CQkJ/wkJCf8EBAT/AgIC/wMDA/8FBQX/BwcH/wkJCf8KCgr/DAwM/w0NDf8PDw//ERER/xQU
+ FP8XFxf/Gxsb/yEhIf8hISH/ISEh/yAgIP8bGxv/GBgY/xUVFf8TExP/EBAQ/wsLC/8GBgb/BAQE/wYG
+ Bv8GBgb/BgYG/wYGBv8FBQX/BgYG/wgICP8JCQn/AgIC/wUFBf8NDQ3/ExMT/yQkJP83Nzf/QEBA/zg4
+ OP8vLy//NTU1/zk5Of8bGxv/BwcH/wQEBP8HBwf/VFRU/+Dg4P/9/f3/+fn5//b29v/9/f3//Pz8//Hx
+ 8f/o6Oj/7Ozs/+zs7P/19fX/9fX1/9/f3/9iYmL/DQ0N/wsLC/8uLi7/0NDQ//n5+f//////////////
+ ///////////////////////////////////////////////////+/v7//Pz8//j4+P/w8PD/1NTU/5SU
+ lP9dXV3/IyMj/wgICP8GBgb/DAwM/wgICP8HBwf/DAwM/xQUFP8XFxf/Ghoa/yAgIP8nJyf/LS0t/y0t
+ Lf8pKSn/JiYm/yQkJP8iIiL/IyMj/yQkJP8mJib/Jycn/ycnJ/8nJyf/Jycn/ycnJ/8oKCj/JiYm/yUl
+ Jf8kJCT/JCQk/yAgIP8cHBz/GRkZ/xYWFv8WFhb/FhYW/xUVFf8ODg7/CwsL/wgICP8GBgb/BgYG/wYG
+ Bv8EBAT/BAQE/woKCv8YGBj/LS0t/z09Pf9ERET/T09P/0BAQP8XFxf/BQUF/wQEBP8dHR3/mZmZ//f3
+ 9//8/Pz/+vr6//n5+f/8/Pz/+Pj4//39/f/9/f3//Pz8//39/f/7+/v//f39//r6+v+Xl5f/Dg4O/wIC
+ Av8cHBz/vb29//f39/////////////////////////////////////////////39/f/+/v7//v7+//7+
+ /v/29vb/8vLy/8LCwv92dnb/OTk5/xMTE/8ODg7/AwMD/wUFBf8LCwv/CgoK/xcXF/8hISH/KSkp/zc3
+ N/9BQUH/R0dH/0hISP9FRUX/QkJC/0BAQP86Ojr/MjIy/yoqKv8mJib/JSUl/yQkJP8iIiL/ISEh/yMj
+ I/8iIiL/IiIi/yAgIP8cHBz/Hh4e/yEhIf8jIyP/JiYm/yYmJv8nJyf/JiYm/yQkJP8kJCT/JCQk/yMj
+ I/8fHx//Gxsb/xYWFv8RERH/BgYG/wcHB/8JCQn/CgoK/wYGBv8CAgL/CgoK/x8fH/8xMTH/QUFB/zIy
+ Mv8NDQ3/BgYG/wgICP87Ozv/zc3N//z8/P/6+vr//Pz8//7+/v/9/f3/+/v7//7+/v/+/v7//v7+////
+ ///7+/v/9/f3//j4+P+np6f/GRkZ/wICAv8WFhb/urq6//Ly8v//////////////////////////////
+ //////////////v7+//9/f3//f39//X19f/U1NT/i4uL/y8vL/8JCQn/CgoK/woKCv8KCgr/CwsL/xAQ
+ EP8cHBz/Kioq/zIyMv8yMjL/NTU1/z4+Pv9GRkb/S0tL/0VFRf88PDz/Ozs7/zo6Ov82Njb/MDAw/ykp
+ Kf8nJyf/JSUl/yAgIP8fHx//ICAg/x4eHv8dHR3/HBwc/xsbG/8bGxv/Gxsb/xsbG/8cHBz/Hh4e/x0d
+ Hf8eHh7/Hh4e/x0dHf8dHR3/HR0d/x4eHv8hISH/ISEh/yEhIf8gICD/Ghoa/xYWFv8RERH/DQ0N/wYG
+ Bv8EBAT/AgIC/wEBAf8GBgb/Dw8P/xAQEP8GBgb/AwMD/xAQEP+Dg4P/8PDw//7+/v//////////////
+ ///8/Pz/+/v7//r6+v/6+vr/+/v7//z8/P/9/f3/+/v7/+np6f91dXX/DAwM/wQEBP81NTX/zMzM//T0
+ 9P////////////////////////////////////////////z8/P/5+fn/9vb2/6enp/9ISEj/EBAQ/wgI
+ CP8KCgr/CAgI/wwMDP8SEhL/FhYW/yAgIP8oKCj/LS0t/y0tLf8jIyP/KCgo/zg4OP87Ozv/MDAw/x0d
+ Hf8ODg7/Dg4O/xYWFv8aGhr/Hh4e/yMjI/8lJSX/JCQk/yEhIf8dHR3/Gxsb/xsbG/8cHBz/HR0d/x0d
+ Hf8bGxv/Gxsb/xsbG/8bGxv/Gxsb/xsbG/8bGxv/Gxsb/xsbG/8bGxv/Gxsb/xsbG/8cHBz/HBwc/xwc
+ HP8dHR3/JSUl/yMjI/8gICD/Hh4e/xwcHP8VFRX/CgoK/wMDA/8DAwP/CQkJ/wsLC/8HBwf/BQUF/zAw
+ MP/FxcX/9/f3//z8/P/9/f3//f39//39/f/7+/v/+Pj4//Pz8//t7e3/6+vr/+7u7v/4+Pj/3Nzc/4mJ
+ if8hISH/CAgI/w4ODv99fX3/6urq//j4+P////////////////////////////////////////////n5
+ +f/39/f/wcHB/zo6Ov8GBgb/BwcH/wUFBf8LCwv/EhIS/xUVFf8ZGRn/HR0d/x8fH/8jIyP/JCQk/yEh
+ If8gICD/JiYm/ycnJ/8dHR3/ExMT/woKCv8DAwP/AQEB/wICAv8CAgL/BwcH/wwMDP8LCwv/ExMT/yYm
+ Jv8rKyv/JSUl/yUlJf8jIyP/ISEh/x8fH/8bGxv/Gxsb/xsbG/8aGhr/GRkZ/xkZGf8ZGRn/GRkZ/xkZ
+ Gf8ZGRn/GRkZ/xkZGf8XFxf/FxcX/xcXF/8XFxf/HR0d/x0dHf8dHR3/HR0d/yMjI/8dHR3/FRUV/w4O
+ Dv8JCQn/CAgI/wYGBv8EBAT/BgYG/yIiIv+ioqL/8fHx//v7+//7+/v/+/v7//v7+//8/Pz/+fn5/9LS
+ 0v+JiYn/YWFh/29vb/+Ghob/YGBg/x4eHv8CAgL/CgoK/z8/P//Kysr//Pz8//n5+f//////////////
+ ///////////////////+/v7//f39//n5+f/Dw8P/T09P/w0NDf8EBAT/CAgI/w4ODv8YGBj/HR0d/x0d
+ Hf8dHR3/HR0d/x0dHf8fHx//IyMj/yEhIf8hISH/Hx8f/xUVFf8RERH/ERER/yIiIv8wMDD/LCws/ygo
+ KP8pKSn/JCQk/yEhIf8SEhL/BgYG/woKCv8bGxv/Li4u/zExMf8rKyv/JiYm/x8fH/8cHBz/Gxsb/xsb
+ G/8aGhr/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8UFBT/FBQU/xQUFP8VFRX/GBgY/xkZ
+ Gf8aGhr/Gxsb/xkZGf8ZGRn/Ghoa/xsbG/8aGhr/EhIS/wgICP8EBAT/AwMD/wUFBf89PT3/pqam/+Xl
+ 5f/39/f/+fn5//n5+f/29vb/+/v7/8rKyv9KSkr/CQkJ/wsLC/8NDQ3/CAgI/wYGBv8BAQH/ICAg/6Gh
+ of/19fX//v7+//n5+f//////////////////////+/v7//z8/P/4+Pj/+fn5/9XV1f9WVlb/EBAQ/wcH
+ B/8JCQn/FhYW/yEhIf8fHx//HBwc/xsbG/8aGhr/Ghoa/xkZGf8dHR3/JSUl/yQkJP8bGxv/FBQU/ycn
+ J/9bW1v/UlJS/5WVlf/m5ub/5+fn/+bm5v/Z2dn/tra2/8vLy/+UlJT/VlZW/yoqKv8JCQn/FxcX/xoa
+ Gv8kJCT/Li4u/yUlJf8gICD/Hh4e/xwcHP8aGhr/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcX
+ F/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8hISH/Hx8f/xMT
+ E/8FBQX/AgIC/wEBAf8DAwP/JCQk/2dnZ//Q0ND/8/Pz//n5+f/5+fn/+vr6//Ly8v+urq7/SUlJ/xYW
+ Fv8LCwv/AgIC/wcHB/8FBQX/IyMj/6CgoP/19fX//Pz8//n5+f/////////////////+/v7/+Pj4//X1
+ 9f/09PT/5eXl/2tra/8PDw//AgIC/woKCv8aGhr/ISEh/yMjI/8dHR3/GRkZ/xoaGv8bGxv/HBwc/xsb
+ G/8kJCT/IyMj/xUVFf8NDQ3/Pz8//6Kiov/a2tr/YmJi/21tbf/s7Oz//f39//39/f/Y2Nj/hoaG/97e
+ 3v/5+fn/5eXl/6Ojo/84ODj/DAwM/wsLC/8eHh7/JSUl/yYmJv8hISH/Hx8f/xwcHP8aGhr/FxcX/xcX
+ F/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcX
+ F/8XFxf/FxcX/xcXF/8dHR3/JiYm/yMjI/8VFRX/BQUF/wEBAf8EBAT/AwMD/wwMDP9TU1P/x8fH//r6
+ +v/6+vr//Pz8//b29v/6+vr/0dHR/4KCgv85OTn/EBAQ/wUFBf8ODg7/CAgI/zw8PP+1tbX/8/Pz/+zs
+ 7P///////////////////////Pz8//f39//29vb/iIiI/w8PD/8CAgL/BgYG/w8PD/8lJSX/JSUl/yEh
+ If8bGxv/FxcX/xcXF/8bGxv/Hh4e/x0dHf8mJib/GBgY/woKCv80NDT/t7e3//Ly8v/p6en/Xl5e/0xM
+ TP/i4uL/+/v7//T09P+srKz/gYGB/97e3v/7+/v/+vr6/8bGxv9ubm7/aWlp/zAwMP8HBwf/GBgY/yIi
+ Iv8gICD/Hx8f/xwcHP8aGhr/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcX
+ F/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8YGBj/HR0d/x4eHv8ZGRn/ExMT/woK
+ Cv8FBQX/BQUF/woKCv8GBgb/RUVF/7Gxsf/v7+//+fn5//r6+v/5+fn/8fHx/+/v7//Jycn/gYGB/zAw
+ MP8EBAT/DQ0N/wsLC/82Njb/mZmZ/9/f3///////////////////////+Pj4//v7+//S0tL/PDw8/woK
+ Cv8CAgL/CwsL/xQUFP8iIiL/ICAg/xwcHP8bGxv/FhYW/xYWFv8bGxv/ICAg/x8fH/8gICD/CgoK/woK
+ Cv9gYGD/6enp//X19f/w8PD/a2tr/0JCQv/b29v/+vr6/+np6f+Li4v/x8fH//b29v/4+Pj/9PT0/5qa
+ mv9ra2v/09PT/6qqqv85OTn/DQ0N/x8fH/8gICD/Hh4e/xwcHP8aGhr/FxcX/xcXF/8XFxf/FxcX/xcX
+ F/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcX
+ F/8gICD/Ghoa/xgYGP8eHh7/Gxsb/yEhIf8MDAz/AwMD/wQEBP8DAwP/BwcH/zY2Nv+rq6v/9vb2//n5
+ +f/8/Pz/9vb2//n5+f/09PT/8vLy/7y8vP86Ojr/Dw8P/wkJCf8NDQ3/KSkp/7W1tf//////////////
+ ////////+vr6/+vr6/+AgID/ExMT/wICAv8HBwf/FBQU/yAgIP8fHx//Hh4e/x4eHv8eHh7/GRkZ/xYW
+ Fv8ZGRn/ICAg/yIiIv8UFBT/BQUF/ykpKf9OTk7/3t7e//n5+f/v7+//X19f/1dXV//e3t7/+fn5//Dw
+ 8P+Wlpb/4+Pj//X19f/5+fn/9PT0/4yMjP93d3f/6+vr//Ly8v+qqqr/JSUl/w4ODv8cHBz/FxcX/xwc
+ HP8aGhr/Gxsb/xsbG/8bGxv/Ghoa/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcX
+ F/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8aGhr/Ghoa/xoaGv8aGhr/HBwc/yIiIv8bGxv/CwsL/wcH
+ B/8DAwP/AgIC/woKCv9GRkb/ysrK//Ly8v/6+vr/9/f3//f39//5+fn/+/v7//Ly8v+8vLz/WFhY/xwc
+ HP8HBwf/CgoK/zo6Ov/////////////////+/v7/+Pj4/729vf8mJib/AwMD/wQEBP8RERH/HR0d/xwc
+ HP8bGxv/HBwc/xwcHP8cHBz/GBgY/xYWFv8ZGRn/ICAg/x8fH/8MDAz/Gxsb/2pqav9QUFD/z8/P//f3
+ 9//o6Oj/WVlZ/29vb//x8fH/+Pj4//Pz8/+Xl5f/5eXl//j4+P/7+/v/4eHh/2FhYf96enr/7Ozs//T0
+ 9P/t7e3/goKC/xUVFf8LCwv/EhIS/x4eHv8cHBz/Gxsb/xsbG/8bGxv/Ghoa/xcXF/8XFxf/FxcX/xcX
+ F/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8YGBj/GBgY/xgY
+ GP8YGBj/GRkZ/x8fH/8hISH/Gxsb/xMTE/8LCwv/AwMD/wEBAf8ODg7/VlZW/9fX1//19fX/9vb2//f3
+ 9//5+fn/+/v7//T09P/5+fn/2tra/3Fxcf8QEBD/BAQE/wsLC///////////////////////5eXl/2Bg
+ YP8HBwf/BAQE/w0NDf8aGhr/ICAg/xwcHP8ZGRn/GRkZ/xkZGf8ZGRn/FxcX/xYWFv8ZGRn/ICAg/x0d
+ Hf8GBgb/Ojo6/56env9OTk7/zMzM//z8/P/i4uL/S0tL/2hoaP/y8vL/+Pj4/93d3f9wcHD/1tbW//r6
+ +v/6+vr/1NTU/0tLS/+IiIj/8vLy//f39//w8PD/pKSk/0dHR/8NDQ3/DQ0N/xoaGv8dHR3/Gxsb/xsb
+ G/8bGxv/Ghoa/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcX
+ F/8XFxf/FxcX/xcXF/8WFhb/FhYW/xYWFv8WFhb/FhYW/xoaGv8fHx//IiIi/x4eHv8YGBj/DQ0N/wIC
+ Av8BAQH/EhIS/2RkZP/g4OD/+Pj4//f39//5+fn/+/v7//j4+P/x8fH/+fn5/9fX1/9YWFj/CwsL/xAQ
+ EP/+/v7////////////9/f3/sbGx/xkZGf8HBwf/CQkJ/xoaGv8cHBz/HR0d/x4eHv8ZGRn/GBgY/xgY
+ GP8YGBj/FxcX/xYWFv8ZGRn/ICAg/x0dHf8GBgb/TExM/6mpqf8/Pz//xcXF//f39//Nzc3/Ojo6/0lJ
+ Sf/Ly8v/19fX/6SkpP82Njb/uLi4//j4+P/5+fn/ra2t/0lJSf/Dw8P/8PDw//b29v/U1NT/hISE/3t7
+ e/8hISH/CQkJ/xMTE/8cHBz/Gxsb/xsbG/8bGxv/Ghoa/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcX
+ F/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8UFBT/FBQU/xQUFP8UFBT/FBQU/xQU
+ FP8YGBj/HR0d/yIiIv8iIiL/Ghoa/wwMDP8FBQX/BQUF/xISEv9kZGT/4eHh//f39//5+fn/+/v7//v7
+ +//7+/v/+vr6//r6+v/FxcX/MzMz/woKCv/29vb/+fn5//v7+//z8/P/enp6/wgICP8FBQX/EhIS/yQk
+ JP8cHBz/HBwc/xoaGv8XFxf/FxcX/xcXF/8XFxf/GBgY/xQUFP8WFhb/IyMj/yMjI/8KCgr/UFBQ/5GR
+ kf9FRUX/m5ub/6qqqv9kZGT/Dg4O/xQUFP88PDz/QEBA/ykpKf8UFBT/WVlZ/5+fn/+mpqb/UFBQ/1FR
+ Uf/b29v/7e3t//X19f+ysrL/ra2t/8vLy/8/Pz//AwMD/wwMDP8TExP/Gxsb/xsbG/8bGxv/Ghoa/xcX
+ F/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcX
+ F/8XFxf/FxcX/xcXF/8XFxf/Ghoa/xoaGv8bGxv/Gxsb/x8fH/8kJCT/ISEh/xcXF/8KCgr/BwcH/wQE
+ BP8bGxv/iIiI/+/v7//4+Pj/+fn5//v7+//9/f3//f39//39/f/v7+//eXl5/xISEv/39/f/+vr6//v7
+ +//k5OT/TExM/wkJCf8DAwP/GBgY/ycnJ/8cHBz/HBwc/xoaGv8XFxf/FxcX/xcXF/8XFxf/GBgY/xcX
+ F/8bGxv/Jycn/yIiIv8HBwf/Kioq/1dXV/8iIiL/NjY2/yUlJf8WFhb/CQkJ/wwMDP8LCwv/DQ0N/woK
+ Cv8GBgb/Dg4O/xcXF/8ZGRn/Dw8P/zw8PP+hoaH/1tbW/8jIyP+Dg4P/w8PD/8zMzP9FRUX/BAQE/wsL
+ C/8YGBj/Gxsb/xsbG/8bGxv/Ghoa/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcX
+ F/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/Ghoa/xsbG/8bGxv/Gxsb/xwc
+ HP8hISH/JiYm/ycnJ/8aGhr/BwcH/wQEBP8DAwP/MDAw/7e3t//39/f/+fn5//39/f/9/f3//f39//39
+ /f/6+vr/wMDA/ycnJ//5+fn//Pz8//r6+v/Q0ND/JiYm/woKCv8EBAT/ISEh/ygoKP8cHBz/HBwc/xoa
+ Gv8XFxf/FxcX/xcXF/8XFxf/GBgY/xoaGv8cHBz/Hx8f/yIiIv8SEhL/DAwM/xMTE/8GBgb/DAwM/w0N
+ Df8VFRX/FxcX/x4eHv8iIiL/HR0d/xYWFv8YGBj/ExMT/w0NDf8PDw//Dw8P/w0NDf8hISH/UlJS/0hI
+ SP9MTEz/xsbG/7CwsP85OTn/CQkJ/w4ODv8cHBz/Gxsb/xsbG/8bGxv/Ghoa/xcXF/8XFxf/FxcX/xcX
+ F/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcX
+ F/8XFxf/Ghoa/xsbG/8bGxv/Gxsb/xkZGf8cHBz/JCQk/y8vL/8tLS3/Dw8P/wICAv8HBwf/CQkJ/1BQ
+ UP/W1tb//f39//n5+f/9/f3//f39//39/f/39/f/7+/v/3Z2dv/7+/v//Pz8//n5+f/BwcH/HR0d/wYG
+ Bv8KCgr/Kioq/ykpKf8cHBz/HBwc/xoaGv8XFxf/FxcX/xcXF/8XFxf/Ghoa/xsbG/8VFRX/Dg4O/xsb
+ G/8oKCj/Gxsb/w8PD/8VFRX/GBgY/yUlJf8hISH/HR0d/x8fH/8fHx//Ghoa/xoaGv8aGhr/GRkZ/xoa
+ Gv8XFxf/Gxsb/xQUFP8LCwv/CgoK/wUFBf8yMjL/ra2t/5KSkv8kJCT/DQ0N/xEREf8bGxv/Gxsb/xsb
+ G/8bGxv/Ghoa/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcX
+ F/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/Ghoa/xsbG/8bGxv/Gxsb/xgYGP8WFhb/HR0d/yoq
+ Kv8tLS3/IiIi/wcHB/8CAgL/BwcH/xISEv+bm5v/9fX1//v7+//9/f3//f39//39/f/6+vr/8fHx/6am
+ pv/4+Pj//f39//n5+f+urq7/Ghoa/wEBAf8NDQ3/JiYm/ygoKP8cHBz/HBwc/xoaGv8XFxf/FxcX/xcX
+ F/8XFxf/GBgY/xcXF/8TExP/EBAQ/wsLC/8bGxv/Li4u/zAwMP8wMDD/Kioq/ykpKf8kJCT/Hh4e/x0d
+ Hf8YGBj/FxcX/xoaGv8aGhr/Ghoa/x8fH/8iIiL/JCQk/yIiIv8eHh7/GRkZ/wcHB/8dHR3/VlZW/0ZG
+ Rv8ZGRn/FRUV/xYWFv8aGhr/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcX
+ F/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcX
+ F/8XFxf/FxcX/xUVFf8WFhb/Gxsb/yEhIf8qKir/KSkp/w4ODv8DAwP/BAQE/wUFBf9LS0v/4ODg//j4
+ +P/8/Pz//v7+//39/f/5+fn/7e3t/3l5ef/5+fn//Pz8//r6+v+xsbH/Ghoa/wEBAf8NDQ3/JCQk/ygo
+ KP8cHBz/HBwc/xoaGv8XFxf/FxcX/xcXF/8XFxf/GBgY/xgYGP8XFxf/FhYW/wsLC/8SEhL/IyMj/ysr
+ K/8uLi7/KCgo/ygoKP8mJib/Hh4e/x0dHf8cHBz/Gxsb/xwcHP8eHh7/ISEh/yoqKv8tLS3/Jycn/yQk
+ JP8mJib/JSUl/xQUFP8LCwv/DQ0N/xAQEP8VFRX/EhIS/xMTE/8WFhb/FxcX/xcXF/8XFxf/FxcX/xcX
+ F/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcX
+ F/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xYWFv8XFxf/HBwc/x8fH/8jIyP/KCgo/xsb
+ G/8HBwf/BAQE/wUFBf8WFhb/hISE/+vr6//19fX/+Pj4//f39//29vb/vb29/y4uLv/6+vr/+/v7//r6
+ +v+5ubn/Gxsb/wEBAf8NDQ3/JCQk/ygoKP8cHBz/HBwc/xoaGv8XFxf/FxcX/xcXF/8XFxf/Ghoa/xwc
+ HP8cHBz/Hh4e/xoaGv8UFBT/EBAQ/xEREf8YGBj/GRkZ/yIiIv8pKSn/IiIi/yEhIf8iIiL/HBwc/xMT
+ E/8PDw//ExMT/x0dHf8nJyf/LCws/ygoKP8jIyP/IiIi/yEhIf8YGBj/EhIS/xsbG/8aGhr/FxcX/xgY
+ GP8aGhr/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcX
+ F/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xgY
+ GP8aGhr/Gxsb/xwcHP8fHx//JSUl/yQkJP8PDw//AQEB/wMDA/8NDQ3/Gxsb/2NjY/97e3v/h4eH/4+P
+ j/+Li4v/VVVV/w0NDf/6+vr/+vr6//n5+f+/v7//HBwc/wEBAf8NDQ3/JCQk/ygoKP8cHBz/HBwc/xoa
+ Gv8XFxf/FxcX/xcXF/8XFxf/Gxsb/x4eHv8hISH/IyMj/x4eHv8ODg7/AgIC/wUFBf8GBgb/BAQE/xgY
+ GP8qKir/KSkp/yoqKv8nJyf/GBgY/woKCv8EBAT/BQUF/wkJCf8PDw//Gxsb/ysrK/8pKSn/JCQk/yEh
+ If8SEhL/Dw8P/xEREf8XFxf/FBQU/xYWFv8YGBj/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcX
+ F/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcX
+ F/8XFxf/FxcX/xcXF/8XFxf/FxcX/xoaGv8bGxv/Ghoa/xkZGf8fHx//Hx8f/yUlJf8YGBj/BQUF/wUF
+ Bf8FBQX/BAQE/wYGBv8ICAj/Dw8P/xEREf8UFBT/DAwM/woKCv/8/Pz//f39//r6+v/FxcX/Hx8f/wEB
+ Af8HBwf/Hh4e/yQkJP8dHR3/GRkZ/xUVFf8WFhb/FxcX/xcXF/8XFxf/Ghoa/x4eHv8hISH/Hh4e/w8P
+ D/8GBgb/AgIC/wEBAf8BAQH/AgIC/xMTE/8uLi7/Ojo6/zQ0NP8yMjL/FBQU/wcHB/8BAQH/AAAA/wEB
+ Af8BAQH/CAgI/yAgIP8sLCz/JSUl/x0dHf8ODg7/CwsL/xEREf8aGhr/Ghoa/xoaGv8aGhr/Ghoa/xoa
+ Gv8aGhr/GRkZ/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcX
+ F/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcX
+ F/8ZGRn/Gxsb/x8fH/8hISH/ERER/wQEBP8FBQX/CAgI/wICAv8HBwf/BgYG/wwMDP8ICAj/CQkJ/wUF
+ Bf/8/Pz//f39//r6+v/Nzc3/Jycn/wEBAf8GBgb/FxcX/x4eHv8bGxv/FxcX/xQUFP8WFhb/FxcX/xcX
+ F/8XFxf/Ghoa/x4eHv8hISH/HR0d/w0NDf8FBQX/AwMD/wAAAP8CAgL/AQEB/woKCv8tLS3/QkJC/zs7
+ O/81NTX/ERER/wQEBP8AAAD/AAAA/wAAAP8AAAD/AwMD/xcXF/8mJib/JiYm/yUlJf8aGhr/FxcX/xoa
+ Gv8bGxv/Gxsb/xsbG/8bGxv/Gxsb/xsbG/8bGxv/Ghoa/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcX
+ F/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcX
+ F/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8YGBj/Ghoa/x8fH/8jIyP/GBgY/wcHB/8FBQX/BgYG/wMD
+ A/8SEhL/CAgI/wsLC/8JCQn/ERER/zc3N//5+fn//v7+//n5+f/Z2dn/NDQ0/wICAv8GBgb/DQ0N/xcX
+ F/8XFxf/FRUV/xUVFf8XFxf/FxcX/xcXF/8XFxf/Ghoa/x4eHv8hISH/HR0d/w0NDf8FBQX/AwMD/wAA
+ AP8EBAT/AQEB/wcHB/8nJyf/Pj4+/zg4OP8xMTH/DAwM/wEBAf8AAAD/AAAA/wAAAP8AAAD/AgIC/xIS
+ Ev8kJCT/JCQk/yAgIP8bGxv/GRkZ/xkZGf8bGxv/Gxsb/xsbG/8bGxv/Gxsb/xsbG/8bGxv/Ghoa/xcX
+ F/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcX
+ F/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8YGBj/Ghoa/x8f
+ H/8iIiL/ICAg/w4ODv8EBAT/BQUF/w0NDf9cXFz/fX19/3Z2dv91dXX/h4eH/76+vv/39/f//v7+//j4
+ +P/i4uL/Pj4+/wMDA/8HBwf/BgYG/xEREf8UFBT/FBQU/xUVFf8WFhb/FxcX/xcXF/8XFxf/Ghoa/x4e
+ Hv8gICD/HR0d/w0NDf8FBQX/AwMD/wAAAP8BAQH/AAAA/woKCv8jIyP/MTEx/ysrK/8pKSn/CAgI/wAA
+ AP8AAAD/AAAA/wAAAP8DAwP/BwcH/xQUFP8pKSn/JiYm/x0dHf8dHR3/Gxsb/xkZGf8bGxv/Gxsb/xsb
+ G/8bGxv/Gxsb/xsbG/8bGxv/Ghoa/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcX
+ F/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcX
+ F/8XFxf/FxcX/xcXF/8XFxf/Ghoa/x8fH/8iIiL/Jycn/xISEv8DAwP/AwMD/xISEv+ZmZn/7e3t//Ly
+ 8v/x8fH/8PDw//Pz8//8/Pz//v7+//z8/P/x8fH/XV1d/wsLC/8GBgb/EBAQ/wwMDP8PDw//ERER/xMT
+ E/8YGBj/Gxsb/xsbG/8YGBj/Ghoa/xwcHP8cHBz/Gxsb/xAQEP8JCQn/BgYG/wMDA/8BAQH/AgIC/w4O
+ Dv8fHx//JCQk/yIiIv8fHx//DAwM/wAAAP8AAAD/AAAA/wAAAP8BAQH/BAQE/xMTE/8mJib/KCgo/x0d
+ Hf8cHBz/Ghoa/xkZGf8cHBz/Ghoa/xoaGv8ZGRn/GBgY/xgYGP8YGBj/GBgY/xYWFv8XFxf/FxcX/xgY
+ GP8UFBT/FBQU/xQUFP8VFRX/GRkZ/xoaGv8aGhr/GRkZ/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcX
+ F/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/GRkZ/xsbG/8eHh7/IyMj/xwc
+ HP8ICAj/AgIC/wgICP9iYmL/5+fn//f39//7+/v//Pz8//r6+v/9/f3///////39/f/29vb/gYGB/wsL
+ C/8EBAT/DAwM/woKCv8NDQ3/EBAQ/xEREf8XFxf/HR0d/x8fH/8bGxv/Gxsb/xsbG/8bGxv/Gxsb/xYW
+ Fv8TExP/ERER/w8PD/8MDAz/DQ0N/xUVFf8dHR3/Hx8f/yAgIP8dHR3/ERER/wUFBf8BAQH/AQEB/wEB
+ Af8CAgL/DQ0N/yIiIv8rKyv/JiYm/x4eHv8cHBz/Ghoa/xkZGf8cHBz/HBwc/xwcHP8cHBz/HBwc/xwc
+ HP8cHBz/Gxsb/xkZGf8ZGRn/GBgY/xcXF/8UFBT/FBQU/xQUFP8UFBT/GBgY/xkZGf8ZGRn/GBgY/xcX
+ F/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcX
+ F/8YGBj/GBgY/xoaGv8dHR3/ISEh/yAgIP8NDQ3/AgIC/wQEBP9AQED/2NjY//j4+P/8/Pz//f39//39
+ /f/9/f3///////39/f/39/f/r6+v/xcXF/8DAwP/BAQE/wkJCf8LCwv/DQ0N/w8PD/8WFhb/HR0d/yEh
+ If8hISH/HBwc/xsbG/8bGxv/Gxsb/xsbG/8cHBz/HR0d/x4eHv8dHR3/HBwc/xsbG/8bGxv/HBwc/x4e
+ Hv8cHBz/GBgY/xISEv8PDw//Dw8P/w8PD/8QEBD/Hh4e/y8vL/8uLi7/JSUl/yEhIf8fHx//HBwc/xsb
+ G/8bGxv/Hh4e/yAgIP8jIyP/IyMj/yMjI/8jIyP/IiIi/x4eHv8cHBz/GRkZ/xcXF/8UFBT/FBQU/xQU
+ FP8UFBT/FhYW/xYWFv8WFhb/FhYW/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcX
+ F/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8YGBj/GBgY/xoaGv8dHR3/ISEh/yMjI/8TExP/BAQE/wMD
+ A/8tLS3/ycnJ//39/f/+/v7//f39//39/f/9/f3///////39/f/4+Pj/39/f/0lJSf8JCQn/BQUF/wcH
+ B/8JCQn/CwsL/wwMDP8VFRX/Hh4e/yQkJP8lJSX/HR0d/xsbG/8bGxv/Gxsb/xwcHP8eHh7/ISEh/yQk
+ JP8iIiL/HR0d/xsbG/8YGBj/Ghoa/xwcHP8cHBz/Hh4e/yMjI/8mJib/JiYm/yYmJv8mJib/Jycn/yws
+ LP8pKSn/JSUl/yMjI/8hISH/Hh4e/xwcHP8bGxv/Hx8f/yQkJP8oKCj/KSkp/yoqKv8qKir/KCgo/yMj
+ I/8fHx//Ghoa/xYWFv8UFBT/FBQU/xQUFP8UFBT/FBQU/xQUFP8UFBT/FBQU/xcXF/8XFxf/FxcX/xcX
+ F/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8YGBj/GBgY/xoa
+ Gv8dHR3/ICAg/yYmJv8YGBj/BgYG/wUFBf8fHx//t7e3//n5+f/7+/v//f39//39/f/+/v7///////7+
+ /v/9/f3/9fX1/6+vr/86Ojr/DAwM/wgICP8FBQX/BQUF/woKCv8RERH/ISEh/ykpKf8lJSX/IiIi/yIi
+ Iv8hISH/HR0d/x8fH/8eHh7/JCQk/yYmJv8kJCT/HR0d/xsbG/8bGxv/GRkZ/xoaGv8aGhr/Gxsb/yQk
+ JP8sLCz/Kysr/ycnJ/8jIyP/HBwc/x8fH/8uLi7/MzMz/zIyMv8xMTH/MDAw/zExMf8yMjL/MzMz/y8v
+ L/8dHR3/FxcX/xcXF/8XFxf/FxcX/xwcHP8hISH/Hx8f/xkZGf8WFhb/FRUV/xISEv8SEhL/FBQU/xQU
+ FP8UFBT/FBQU/xQUFP8UFBT/FBQU/xQUFP8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcX
+ F/8XFxf/FxcX/xcXF/8YGBj/GBgY/xoaGv8dHR3/HR0d/yYmJv8WFhb/AgIC/wQEBP8UFBT/p6en//b2
+ 9v/4+Pj//f39//39/f/////////////////+/v7/+vr6//X19f+wsLD/Li4u/wUFBf8GBgb/BAQE/wgI
+ CP8ICAj/IiIi/zExMf8zMzP/MjIy/y8vL/8vLy//MjIy/zk5Of8qKir/IyMj/yUlJf8kJCT/HBwc/xsb
+ G/8YGBj/Dw8P/w4ODv8ODg7/Dg4O/xUVFf8fHx//IyMj/yIiIv8eHh7/ExMT/xgYGP86Ojr/Tk5O/1VV
+ Vf9YWFj/W1tb/1xcXP9bW1v/UFBQ/yQkJP8FBQX/AgIC/wICAv8CAgL/BQUF/xcXF/8gICD/ISEh/xsb
+ G/8YGBj/FhYW/xQUFP8SEhL/FBQU/xQUFP8UFBT/FBQU/xQUFP8UFBT/FBQU/xQUFP8XFxf/FxcX/xcX
+ F/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8YGBj/GBgY/xoaGv8dHR3/HBwc/yYm
+ Jv8WFhb/AQEB/wUFBf8MDAz/j4+P//Pz8//6+vr//f39//39/f///////////////////////Pz8//j4
+ +P/y8vL/h4eH/xcXF/8HBwf/DQ0N/wQEBP8NDQ3/Ly8v/zIyMv8pKSn/Pz8//0dHR/9JSUn/Tk5O/0RE
+ RP8iIiL/Dw8P/xMTE/8WFhb/FRUV/xkZGf8VFRX/CAgI/wUFBf8FBQX/BQUF/wkJCf8TExP/HBwc/x8f
+ H/8dHR3/Dw8P/xAQEP8yMjL/T09P/2FhYf9lZWX/a2tr/2xsbP9jY2P/Pj4+/wsLC/8BAQH/AgIC/wIC
+ Av8CAgL/BAQE/xEREf8cHBz/ICAg/xwcHP8aGhr/GRkZ/xYWFv8UFBT/FBQU/xQUFP8UFBT/FBQU/xQU
+ FP8UFBT/FBQU/xQUFP8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcX
+ F/8YGBj/GBgY/xoaGv8dHR3/HBwc/yYmJv8WFhb/AQEB/wYGBv8GBgb/dnZ2//Dw8P/7+/v//f39//39
+ /f///////////////////////v7+//f39//9/f3/4+Pj/3R0dP8NDQ3/CQkJ/wkJCf8VFRX/Ojo6/ysr
+ K/8TExP/Ojo6/1FRUf9VVVX/SkpK/ywsLP8LCwv/AQEB/wUFBf8GBgb/CgoK/xgYGP8aGhr/DAwM/wkJ
+ Cf8JCQn/CQkJ/w0NDf8VFRX/HBwc/x0dHf8cHBz/EBAQ/wcHB/8SEhL/Gxsb/yQkJP8lJSX/JiYm/ykp
+ Kf8lJSX/Dg4O/wMDA/8AAAD/AAAA/wAAAP8AAAD/AQEB/wwMDP8ZGRn/Hx8f/x0dHf8cHBz/Gxsb/xkZ
+ Gf8XFxf/FBQU/xQUFP8UFBT/FBQU/xQUFP8UFBT/FBQU/xQUFP8XFxf/FxcX/xcXF/8XFxf/FxcX/xcX
+ F/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8YGBj/GBgY/xoaGv8dHR3/HBwc/yYmJv8WFhb/AQEB/wUF
+ Bf8ICAj/b29v//Ly8v/6+vr//f39//39/f///////////////////////v7+//39/f/+/v7/+/v7/+Pj
+ 4/9eXl7/DAwM/wgICP8JCQn/ISEh/xcXF/8GBgb/GBgY/yUlJf8kJCT/GBgY/woKCv8BAQH/AAAA/wIC
+ Av8DAwP/CQkJ/xUVFf8cHBz/GRkZ/xcXF/8XFxf/FxcX/xkZGf8cHBz/Hh4e/x0dHf8bGxv/EBAQ/wcH
+ B/8EBAT/BAQE/wMDA/8CAgL/AgIC/wMDA/8FBQX/BQUF/wgICP8FBQX/AQEB/wEBAf8BAQH/AgIC/w4O
+ Dv8WFhb/HBwc/x4eHv8bGxv/Gxsb/xoaGv8ZGRn/FhYW/xYWFv8WFhb/FhYW/xYWFv8WFhb/FhYW/xYW
+ Fv8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8YGBj/GBgY/xoa
+ Gv8dHR3/Hh4e/yQkJP8UFBT/AgIC/wQEBP8PDw//bW1t//Ly8v/5+fn//f39//39/f//////////////
+ //////////////////////////////b29v/ExMT/Ojo6/wQEBP8FBQX/DAwM/wUFBf8BAQH/BAQE/wcH
+ B/8HBwf/AwMD/wEBAf8BAQH/AgIC/wYGBv8EBAT/BwcH/xISEv8dHR3/Hh4e/xsbG/8bGxv/Gxsb/xwc
+ HP8cHBz/HBwc/xwcHP8YGBj/Dg4O/wkJCf8JCQn/CwsL/woKCv8KCgr/CgoK/wsLC/8NDQ3/DQ0N/wwM
+ DP8MDAz/DQ0N/w0NDf8NDQ3/Dg4O/xMTE/8WFhb/Gxsb/x0dHf8bGxv/Gxsb/xsbG/8aGhr/FxcX/xcX
+ F/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcX
+ F/8XFxf/FxcX/xcXF/8YGBj/GBgY/xoaGv8dHR3/Hx8f/yMjI/8TExP/BAQE/wUFBf8KCgr/Y2Nj/+3t
+ 7f/6+vr//f39//39/f////////////////////////////////////////////r6+v/r6+v/ZmZm/wsL
+ C/8CAgL/Dw8P/xsbG/8QEBD/CQkJ/wkJCf8KCgr/CwsL/wwMDP8ODg7/ExMT/xgYGP8cHBz/HBwc/xwc
+ HP8cHBz/Gxsb/xsbG/8bGxv/Gxsb/xoaGv8aGhr/Ghoa/xoaGv8dHR3/ICAg/yAgIP8lJSX/Kysr/ysr
+ K/8rKyv/Kysr/ysrK/8qKir/Jycn/yQkJP8hISH/HBwc/xwcHP8cHBz/Gxsb/xkZGf8aGhr/HBwc/x0d
+ Hf8bGxv/Gxsb/xsbG/8aGhr/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcX
+ F/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8YGBj/GBgY/xoaGv8dHR3/Hx8f/yMj
+ I/8TExP/AwMD/wYGBv8JCQn/bGxs/+3t7f/8/Pz//f39//39/f//////////////////////////////
+ //////////////z8/P/r6+v/Z2dn/wkJCf8GBgb/ISEh/0dHR/9FRUX/Pj4+/zo6Ov81NTX/Nzc3/zU1
+ Nf8zMzP/NDQ0/zU1Nf8xMTH/Kioq/yMjI/8cHBz/Ghoa/xsbG/8bGxv/Gxsb/xkZGf8YGBj/GBgY/xgY
+ GP8aGhr/Hh4e/yIiIv8sLCz/MTEx/zExMf8xMTH/MDAw/y8vL/8qKir/JiYm/yEhIf8eHh7/HR0d/x0d
+ Hf8dHR3/HR0d/x0dHf8dHR3/HR0d/x0dHf8bGxv/Gxsb/xsbG/8aGhr/FxcX/xcXF/8XFxf/FxcX/xcX
+ F/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcX
+ F/8YGBj/GBgY/xoaGv8dHR3/Hx8f/yMjI/8TExP/BAQE/wUFBf8XFxf/lJSU//f39//7+/v//f39//39
+ /f////////////////////////////////////////////f39//w8PD/Y2Nj/wgICP8EBAT/ERER/0pK
+ Sv9QUFD/Q0ND/z8/P/87Ozv/Nzc3/zk5Of86Ojr/Nzc3/zU1Nf8rKyv/IiIi/x4eHv8bGxv/Ghoa/xgY
+ GP8YGBj/GBgY/xgYGP8XFxf/FxcX/xcXF/8ZGRn/Hh4e/yYmJv8zMzP/OTk5/zU1Nf81NTX/MDAw/yoq
+ Kv8lJSX/Hx8f/xwcHP8cHBz/GRkZ/xoaGv8aGhr/Gxsb/x0dHf8dHR3/Hh4e/x4eHv8bGxv/Gxsb/xsb
+ G/8aGhr/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcX
+ F/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8YGBj/GBgY/xkZGf8dHR3/IyMj/yAgIP8RERH/CgoK/wsL
+ C/8sLCz/vLy8//r6+v/5+fn//f39//39/f////////////////////////////////////////////f3
+ 9//19fX/bW1t/wcHB/8FBQX/DAwM/0VFRf9DQ0P/PT09/zc3N/8yMjL/NjY2/zk5Of83Nzf/MzMz/y4u
+ Lv8lJSX/Hh4e/xwcHP8aGhr/GBgY/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8ZGRn/Hh4e/yMj
+ I/8pKSn/LS0t/zAwMP8yMjL/Li4u/ykpKf8mJib/Hh4e/xsbG/8bGxv/GBgY/xgYGP8ZGRn/GRkZ/xsb
+ G/8bGxv/Gxsb/xsbG/8bGxv/Gxsb/xsbG/8aGhr/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcX
+ F/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8YGBj/GBgY/xkZ
+ Gf8eHh7/JCQk/xwcHP8QEBD/DQ0N/xAQEP8wMDD/ycnJ//z8/P/4+Pj//f39//39/f//////////////
+ //////////////////////////////j4+P/5+fn/kZGR/wwMDP8EBAT/DQ0N/01NTf9PT0//RERE/0ND
+ Q/9DQ0P/QEBA/z09Pf8zMzP/IiIi/xMTE/8TExP/Ghoa/x0dHf8aGhr/FxcX/xcXF/8XFxf/FxcX/xcX
+ F/8XFxf/FxcX/xcXF/8ZGRn/HR0d/x0dHf8XFxf/EhIS/xYWFv8gICD/LS0t/zQ0NP8xMTH/KSkp/yUl
+ Jf8lJSX/IiIi/x8fH/8dHR3/HBwc/x4eHv8bGxv/GRkZ/xgYGP8bGxv/Gxsb/xsbG/8aGhr/FxcX/xcX
+ F/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcX
+ F/8XFxf/FxcX/xcXF/8YGBj/GBgY/xkZGf8eHh7/IyMj/xoaGv8NDQ3/CwsL/xAQEP88PDz/1dXV//39
+ /f/5+fn//f39//39/f////////////////////////////////////////////r6+v/39/f/wsLC/x8f
+ H/8FBQX/Dg4O/1FRUf9WVlb/TExM/0RERP81NTX/ISEh/xAQEP8KCgr/CAgI/wUFBf8LCwv/FhYW/x4e
+ Hv8aGhr/FhYW/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8YGBj/HR0d/x0dHf8RERH/BwcH/wcH
+ B/8MDAz/GRkZ/ykpKf81NTX/MjIy/zU1Nf84ODj/ODg4/zQ0NP8vLy//Kysr/yYmJv8iIiL/Hh4e/xsb
+ G/8bGxv/Gxsb/xsbG/8aGhr/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcX
+ F/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8YGBj/GBgY/xkZGf8eHh7/ISEh/xgY
+ GP8LCwv/CQkJ/w0NDf9dXV3/7u7u//z8/P/5+fn//f39//39/f//////////////////////////////
+ //////////////z8/P/q6ur/pKSk/x0dHf8HBwf/Dg4O/0JCQv83Nzf/FBQU/w0NDf8ICAj/BAQE/wUF
+ Bf8HBwf/CAgI/wgICP8WFhb/IiIi/yEhIf8bGxv/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcX
+ F/8YGBj/GRkZ/x4eHv8aGhr/Dg4O/wsLC/8DAwP/BQUF/wsLC/8PDw//EhIS/xYWFv8gICD/ODg4/zg4
+ OP81NTX/MTEx/ykpKf8kJCT/JiYm/yIiIv8cHBz/Gxsb/xkZGf8ZGRn/FxcX/xcXF/8XFxf/FxcX/xcX
+ F/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcX
+ F/8YGBj/GRkZ/xwcHP8gICD/ISEh/xYWFv8KCgr/CAgI/w8PD/+NjY3/9/f3//j4+P/6+vr//f39//39
+ /f////////////////////////////////////////////r6+v+7u7v/MjIy/wUFBf8CAgL/BwcH/x0d
+ Hf8SEhL/AQEB/wUFBf8HBwf/AgIC/wcHB/8GBgb/BwcH/xYWFv8nJyf/Kioq/yMjI/8dHR3/GBgY/xcX
+ F/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8YGBj/GBgY/yEhIf8nJyf/Gxsb/w4ODv8HBwf/BQUF/wUF
+ Bf8EBAT/BgYG/wgICP8LCwv/FhYW/xkZGf8YGBj/FRUV/xMTE/8UFBT/JCQk/ycnJ/8dHR3/Gxsb/xkZ
+ Gf8YGBj/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcX
+ F/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8YGBj/Ghoa/x8fH/8iIiL/Hx8f/xMTE/8ICAj/CAgI/yAg
+ IP+8vLz/+fn5//j4+P/8/Pz//f39//39/f////////////////////////////////////////////j4
+ +P+tra3/EBAQ/wcHB/8DAwP/BgYG/wICAv8BAQH/AQEB/wEBAf8DAwP/BQUF/wMDA/8GBgb/FhYW/yUl
+ Jf8oKCj/JSUl/yEhIf8dHR3/GRkZ/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/Ghoa/yMj
+ I/8uLi7/MzMz/yUlJf8KCgr/AQEB/wQEBP8GBgb/BgYG/wYGBv8FBQX/BQUF/wgICP8HBwf/AwMD/wEB
+ Af8KCgr/JiYm/y8vL/8dHR3/Gxsb/xkZGf8YGBj/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcX
+ F/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8YGBj/Ghoa/x8f
+ H/8iIiL/GRkZ/wwMDP8DAwP/BQUF/zY2Nv/R0dH/+/v7//f39//9/f3//f39//39/f//////////////
+ //////////////////////////////j4+P+fn5//HBwc/wwMDP8HBwf/BgYG/wMDA/8CAgL/BQUF/wQE
+ BP8GBgb/Dw8P/xMTE/8eHh7/KSkp/ycnJ/8iIiL/ISEh/x4eHv8dHR3/GRkZ/xcXF/8XFxf/FxcX/xcX
+ F/8XFxf/FxcX/xcXF/8WFhb/HR0d/yAgIP8nJyf/PDw8/0RERP80NDT/Gxsb/woKCv8JCQn/BwcH/wQE
+ BP8DAwP/BwcH/woKCv8JCQn/BgYG/wMDA/8LCwv/JSUl/y0tLf8eHh7/Gxsb/xkZGf8YGBj/FxcX/xcX
+ F/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcX
+ F/8XFxf/FxcX/xcXF/8YGBj/Ghoa/x8fH/8jIyP/FBQU/wUFBf8AAAD/AwMD/zs7O//X19f/+fn5//Pz
+ 8//8/Pz//f39//39/f///////////////////////////////////////////+jo6P9hYWH/CAgI/wQE
+ BP8EBAT/BAQE/wQEBP8HBwf/CgoK/wkJCf8VFRX/LS0t/0NDQ/82Njb/KCgo/yMjI/8eHh7/HR0d/xwc
+ HP8cHBz/Ghoa/xgYGP8ZGRn/GRkZ/xkZGf8XFxf/FRUV/xYWFv8XFxf/GRkZ/xoaGv8mJib/Ojo6/1NT
+ U/9tbW3/XV1d/zY2Nv8TExP/CAgI/wQEBP8BAQH/BQUF/wcHB/8EBAT/BgYG/wYGBv8JCQn/Ghoa/yQk
+ JP8dHR3/Gxsb/xkZGf8YGBj/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcX
+ F/8XFxf/FxcX/xcXF/8XFxf/FxcX/xUVFf8WFhb/FxcX/xgYGP8ZGRn/Hx8f/yIiIv8hISH/Dw8P/wMD
+ A/8BAQH/AgIC/xMTE/+BgYH/ysrK//T09P/4+Pj/+vr6//n5+f//////////////////////////////
+ /////////////9DQ0P8mJib/CQkJ/wgICP8DAwP/AgIC/wICAv8jIyP/PDw8/0RERP9RUVH/Wlpa/05O
+ Tv8xMTH/IyMj/yIiIv8cHBz/Gxsb/xsbG/8bGxv/Gxsb/xwcHP8cHBz/HBwc/xsbG/8WFhb/ExMT/xUV
+ Ff8ZGRn/GBgY/xgYGP8pKSn/QEBA/2dnZ/+UlJT/qqqq/6SkpP91dXX/NDQ0/yAgIP8dHR3/Dw8P/wcH
+ B/8LCwv/BwcH/wMDA/8EBAT/ERER/x8fH/8dHR3/Gxsb/xkZGf8YGBj/FxcX/xcXF/8XFxf/FxcX/xcX
+ F/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xUVFf8WFhb/GBgY/xoa
+ Gv8dHR3/IyMj/yUlJf8dHR3/CQkJ/wEBAf8BAQH/AwMD/wUFBf8WFhb/PT09/6mpqf/5+fn/+Pj4//f3
+ 9////////////////////////////////////////////+Li4v9TU1P/BQUF/wkJCf8DAwP/AgIC/wcH
+ B/8zMzP/ampq/319ff98fHz/eXl5/1lZWf8/Pz//JiYm/xgYGP8YGBj/Gxsb/xsbG/8bGxv/HBwc/x0d
+ Hf8bGxv/GRkZ/xYWFv8RERH/ERER/xUVFf8aGhr/HBwc/ycnJ/9CQkL/YmJi/4qKiv+2trb/3Nzc/+zs
+ 7P/k5OT/zs7O/62trf+CgoL/PDw8/wgICP8EBAT/AQEB/wAAAP8BAQH/DQ0N/xwcHP8dHR3/Gxsb/xkZ
+ Gf8YGBj/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcX
+ F/8XFxf/FxcX/xcXF/8YGBj/Gxsb/x0dHf8hISH/JSUl/yEhIf8WFhb/CgoK/wcHB/8GBgb/BQUF/wcH
+ B/8EBAT/DAwM/zw8PP/R0dH/+/v7//X19f////////////////////////////////////////////j4
+ +P+2trb/Jycn/yMjI/8iIiL/AwMD/wICAv8UFBT/aGho/5eXl/+VlZX/k5OT/25ubv9cXFz/Nzc3/xsb
+ G/8aGhr/Gxsb/xsbG/8bGxv/Ghoa/xcXF/8SEhL/Dg4O/w0NDf8NDQ3/Dw8P/xUVFf8aGhr/Hx8f/zY2
+ Nv9eXl7/gICA/5+fn//Dw8P/39/f/+vr6//z8/P/7e3t/9fX1/+xsbH/eHh4/zMzM/8NDQ3/AgIC/wIC
+ Av8EBAT/ERER/x8fH/8dHR3/Gxsb/xkZGf8YGBj/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcX
+ F/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xkZGf8bGxv/HR0d/x8fH/8kJCT/JiYm/x4e
+ Hv8ODg7/BAQE/wQEBP8GBgb/CAgI/wsLC/8DAwP/BQUF/xUVFf+FhYX/7u7u/+/v7///////////////
+ //////////////////////////////v7+//t7e3/tra2/7e3t/+MjIz/Ghoa/wkJCf8TExP/iIiI/9zc
+ 3P/f39//w8PD/4aGhv9paWn/SkpK/yoqKv8fHx//Gxsb/xsbG/8bGxv/GRkZ/xEREf8JCQn/BQUF/wcH
+ B/8ICAj/DAwM/xcXF/8hISH/JCQk/zY2Nv9fX1//goKC/6Ghof/FxcX/3Nzc/+Xl5f/u7u7/9PT0/9vb
+ 2/+vr6//iIiI/19fX/8zMzP/EhIS/w0NDf8ODg7/FhYW/x0dHf8aGhr/GRkZ/xgYGP8XFxf/FxcX/xcX
+ F/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FhYW/xYWFv8WFhb/FRUV/xgY
+ GP8bGxv/ICAg/yUlJf8oKCj/JSUl/xkZGf8JCQn/BgYG/wkJCf8fHx//NTU1/yoqKv8QEBD/CAgI/wYG
+ Bv86Ojr/z8/P/+/v7//////////////////////////////////////////////////9/f3/+fn5//X1
+ 9f/Z2dn/R0dH/w0NDf8QEBD/h4eH//Pz8//4+Pj/2NjY/6ampv90dHT/V1dX/y4uLv8fHx//Gxsb/xsb
+ G/8bGxv/Ghoa/xEREf8GBgb/BAQE/wcHB/8GBgb/CQkJ/xcXF/8kJCT/Jycn/zMzM/9bW1v/f39//52d
+ nf++vr7/1tbW/+vr6//39/f/8PDw/8nJyf+dnZ3/cnJy/1JSUv9AQED/IiIi/xoaGv8aGhr/Ghoa/xkZ
+ Gf8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcX
+ F/8XFxf/FBQU/xQUFP8UFBT/FBQU/xcXF/8cHBz/IyMj/ykpKf8qKir/Hh4e/w4ODv8JCQn/CgoK/w4O
+ Dv80NDT/UVFR/0RERP8hISH/BQUF/wMDA/8cHBz/sbGx//T09P//////////////////////////////
+ //////////////7+/v/+/v7////////////5+fn/lpaW/xMTE/8NDQ3/V1dX/9fX1//5+fn/2tra/7a2
+ tv+BgYH/W1tb/zAwMP8gICD/Gxsb/xsbG/8bGxv/Gxsb/xQUFP8KCgr/CwsL/w0NDf8ICAj/CAgI/xER
+ Ef8eHh7/JCQk/y0tLf9MTEz/bW1t/5GRkf+zs7P/y8vL/9/f3//s7Oz/3t7e/7CwsP+BgYH/X19f/0JC
+ Qv8xMTH/ISEh/x4eHv8fHx//Hx8f/x0dHf8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcX
+ F/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xoaGv8dHR3/IiIi/ycn
+ J/8kJCT/FBQU/wUFBf8LCwv/DAwM/xkZGf89PT3/SUlJ/0NDQ/8nJyf/CQkJ/wQEBP8LCwv/nZ2d//b2
+ 9v////////////////////////////////////////////39/f/8/Pz//f39//39/f/6+vr/29vb/zk5
+ Of8QEBD/IiIi/4+Pj//l5eX/0tLS/7Gxsf96enr/UlJS/ywsLP8fHx//Gxsb/xsbG/8bGxv/HBwc/xcX
+ F/8QEBD/EhIS/xMTE/8LCwv/BgYG/woKCv8UFBT/GRkZ/yAgIP81NTX/SUlJ/2ZmZv+IiIj/oKCg/7S0
+ tP/CwsL/urq6/5GRkf9nZ2f/Tk5O/zIyMv8fHx//HR0d/xsbG/8bGxv/Gxsb/xoaGv8XFxf/FxcX/xcX
+ F/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/GRkZ/xkZ
+ Gf8ZGRn/GRkZ/x0dHf8gICD/IiIi/yQkJP8ZGRn/DAwM/wYGBv8LCwv/ExMT/yYmJv85OTn/OTk5/zc3
+ N/8eHh7/BgYG/wgICP8NDQ3/nJyc//b29v//////////////////////////////////////////////
+ /////////v7+//39/f/7+/v/9PT0/35+fv8TExP/CAgI/zQ0NP+ZmZn/t7e3/5ycnP9qamr/RERE/yUl
+ Jf8bGxv/Gxsb/xsbG/8bGxv/Gxsb/xcXF/8TExP/FhYW/xYWFv8QEBD/CwsL/w0NDf8RERH/FBQU/xcX
+ F/8hISH/Kysr/zo6Ov9UVFT/bm5u/4SEhP+Tk5P/k5OT/3Z2dv9SUlL/Nzc3/yYmJv8cHBz/Hh4e/xcX
+ F/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcX
+ F/8XFxf/FxcX/xcXF/8XFxf/GRkZ/xkZGf8aGhr/Gxsb/x0dHf8gICD/ICAg/x0dHf8ODg7/CgoK/wwM
+ DP8PDw//ISEh/zIyMv83Nzf/NjY2/zc3N/8eHh7/BgYG/wUFBf8PDw//paWl//f39///////////////
+ ///////////////////////////////////////////////////7+/v/+fn5/8LCwv8tLS3/CQkJ/wcH
+ B/85OTn/hISE/3p6ev9SUlL/MzMz/yMjI/8aGhr/Gxsb/xsbG/8bGxv/GRkZ/xcXF/8XFxf/FxcX/xcX
+ F/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/Ghoa/x8fH/8mJib/Ojo6/0pKSv9NTU3/TU1N/z8/
+ P/8uLi7/JSUl/x0dHf8ZGRn/GBgY/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcX
+ F/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/GBgY/xkZGf8cHBz/Hh4e/x4e
+ Hv8fHx//Gxsb/xEREf8KCgr/CwsL/xQUFP8gICD/Kysr/zAwMP8yMjL/NTU1/zc3N/8hISH/CwsL/wkJ
+ Cf8SEhL/ra2t//39/f//////////////////////////////////////////////////////////////
+ ///6+vr//f39/+vr6/92dnb/DAwM/wgICP8SEhL/RERE/1tbW/9DQ0P/Kysr/yQkJP8fHx//Gxsb/xsb
+ G/8bGxv/GBgY/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/GBgY/xcX
+ F/8VFRX/GBgY/x8fH/8iIiL/Hh4e/xwcHP8dHR3/GBgY/xUVFf8XFxf/Ghoa/xcXF/8XFxf/FxcX/xcX
+ F/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcX
+ F/8XFxf/Ghoa/xwcHP8eHh7/ICAg/yEhIf8cHBz/ExMT/wkJCf8GBgb/CAgI/xUVFf8qKir/MjIy/zIy
+ Mv8yMjL/MjIy/zQ0NP8eHh7/CQkJ/wcHB/8XFxf/rq6u//v7+///////////////////////////////
+ ///////////////////////////////////5+fn//Pz8//r6+v/Kysr/PDw8/wkJCf8ODg7/EhIS/y8v
+ L/88PDz/Ly8v/yIiIv8eHh7/Gxsb/xsbG/8bGxv/GBgY/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcX
+ F/8XFxf/FxcX/xcXF/8XFxf/FxcX/xgYGP8XFxf/FhYW/xUVFf8VFRX/ExMT/xQUFP8XFxf/FxcX/xUV
+ Ff8XFxf/Ghoa/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcX
+ F/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/HBwc/x4eHv8hISH/IiIi/x0dHf8UFBT/CwsL/wgI
+ CP8GBgb/EBAQ/yIiIv8uLi7/NDQ0/zQ0NP8yMjL/MDAw/ysrK/8VFRX/BwcH/wwMDP8zMzP/w8PD//n5
+ +f/////////////////////////////////////////////////////////////////9/f3//f39//n5
+ +f/4+Pj/pqam/x8fH/8JCQn/DAwM/xAQEP8nJyf/Li4u/yMjI/8eHh7/HR0d/xsbG/8bGxv/GRkZ/xgY
+ GP8YGBj/GBgY/xgYGP8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FhYW/xUVFf8ZGRn/GRkZ/xgY
+ GP8XFxf/GBgY/xcXF/8WFhb/Gxsb/xgYGP8XFxf/GBgY/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcX
+ F/8XFxf/FhYW/xYWFv8XFxf/GBgY/xYWFv8WFhb/FxcX/xgYGP8ZGRn/GBgY/xcXF/8XFxf/HR0d/yEh
+ If8kJCT/Hh4e/xQUFP8KCgr/BQUF/wkJCf8WFhb/LCws/z09Pf84ODj/NTU1/zc3N/8zMzP/Kioq/x4e
+ Hv8MDAz/CAgI/xQUFP9sbGz/5+fn//39/f//////////////////////////////////////////////
+ ////////////////////////////////////////8PDw/4mJif8yMjL/DQ0N/woKCv8RERH/GRkZ/yEh
+ If8oKCj/JCQk/x8fH/8cHBz/GRkZ/xgYGP8ZGRn/GRkZ/xgYGP8XFxf/FxcX/xcXF/8XFxf/FxcX/xcX
+ F/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcX
+ F/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FRUV/xYWFv8YGBj/GRkZ/xYWFv8XFxf/GRkZ/xsb
+ G/8fHx//HR0d/xwcHP8eHh7/IyMj/yAgIP8gICD/Dw8P/wcHB/8EBAT/DQ0N/yEhIf89PT3/UVFR/1dX
+ V/9JSUn/Ojo6/zU1Nf8pKSn/FRUV/wcHB/8GBgb/BwcH/zo6Ov+/v7//9fX1////////////////////
+ ////////////////////////////////////////////////////////////////////////+/v7//Dw
+ 8P+jo6P/MDAw/wsLC/8SEhL/CgoK/xMTE/8nJyf/KCgo/yYmJv8gICD/Gxsb/xgYGP8WFhb/FRUV/xUV
+ Ff8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcX
+ F/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FRUV/xYW
+ Fv8YGBj/GRkZ/xoaGv8bGxv/Hh4e/x8fH/8gICD/JCQk/yYmJv8lJSX/JSUl/xQUFP8ODg7/CAgI/wYG
+ Bv8HBwf/GBgY/zk5Of9ISEj/R0dH/0JCQv88PDz/Kioq/xgYGP8LCwv/BgYG/woKCv8LCwv/GBgY/4eH
+ h//w8PD/+fn5////////////////////////////////////////////////////////////////////
+ /////////////////////////f39//7+/v/y8vL/i4uL/x0dHf8ICAj/BgYG/wwMDP8VFRX/ICAg/ycn
+ J/8lJSX/ISEh/x8fH/8bGxv/FxcX/xYWFv8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcX
+ F/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcX
+ F/8XFxf/FxcX/xcXF/8XFxf/FRUV/xYWFv8YGBj/Ghoa/x4eHv8gICD/IyMj/yQkJP8kJCT/KSkp/ycn
+ J/8eHh7/FhYW/wcHB/8FBQX/BAQE/wUFBf8GBgb/Dg4O/xsbG/8bGxv/FxcX/xQUFP8RERH/CQkJ/wMD
+ A/8CAgL/CQkJ/wgICP8jIyP/bW1t/9bW1v/9/f3//v7+//7+/v//////////////////////////////
+ ////////////////////////////////////////////////////////+Pj4//39/f/6+vr/7Ozs/46O
+ jv8sLCz/CAgI/wkJCf8GBgb/FhYW/yUlJf8nJyf/Jycn/ycnJ/8hISH/HBwc/xoaGv8ZGRn/FhYW/xYW
+ Fv8XFxf/FxcX/xcXF/8XFxf/FxcX/xgYGP8YGBj/GBgY/xgYGP8YGBj/FxcX/xcXF/8WFhb/FxcX/xcX
+ F/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FRUV/xcXF/8ZGRn/Ghoa/yAg
+ IP8iIiL/JSUl/yYmJv8mJib/Kioq/yIiIv8PDw//BgYG/wICAv8FBQX/AwMD/wICAv8FBQX/CgoK/wcH
+ B/8EBAT/CQkJ/woKCv8GBgb/BQUF/wkJCf8HBwf/DQ0N/y8vL/+Xl5f/4uLi//r6+v/9/f3//v7+//7+
+ /v//////////////////////////////////////////////////////////////////////////////
+ /////////v7+//39/f/9/f3//f39/+rq6v+Kior/HBwc/wQEBP8FBQX/CQkJ/xUVFf8kJCT/LS0t/yws
+ LP8oKCj/ISEh/x4eHv8cHBz/FRUV/xYWFv8YGBj/FxcX/xcXF/8XFxf/GBgY/xkZGf8ZGRn/GRkZ/xoa
+ Gv8aGhr/GBgY/xYWFv8VFRX/GBgY/xgYGP8YGBj/GBgY/xcXF/8XFxf/FhYW/xYWFv8ZGRn/GRkZ/xkZ
+ Gf8ZGRn/Gxsb/x0dHf8fHx//ISEh/yUlJf8lJSX/JCQk/yMjI/8dHR3/FxcX/xAQEP8JCQn/BgYG/wcH
+ B/8GBgb/BgYG/wUFBf8FBQX/CgoK/wcHB/8FBQX/BgYG/wcHB/8HBwf/CQkJ/yIiIv9BQUH/fHx8/76+
+ vv/u7u7//Pz8//X19f/7+/v//f39//39/f//////////////////////////////////////////////
+ /////////////////////////////////////////v7+//39/f/9/f3//f39//f39//p6en/jY2N/yQk
+ JP8MDAz/BAQE/wUFBf8QEBD/GBgY/yQkJP8sLCz/Kioq/ycnJ/8mJib/Hx8f/xsbG/8ZGRn/GBgY/xgY
+ GP8YGBj/GRkZ/xkZGf8ZGRn/GRkZ/xoaGv8cHBz/Ghoa/xgYGP8XFxf/Ghoa/xoaGv8aGhr/GRkZ/xYW
+ Fv8YGBj/Ghoa/xsbG/8hISH/IiIi/yIiIv8hISH/Hh4e/x8fH/8hISH/IyMj/yYmJv8iIiL/HR0d/xkZ
+ Gf8NDQ3/BAQE/wMDA/8JCQn/CgoK/xcXF/8qKir/ISEh/wUFBf8JCQn/BQUF/w0NDf8QEBD/GBgY/y8v
+ L/9CQkL/Z2dn/6ioqP/c3Nz/8fHx//X19f/6+vr/9vb2//T09P/8/Pz//f39//39/f//////////////
+ /////////////////////////////////////////////////////////////////////////v7+//39
+ /f/9/f3//f39//f39//5+fn/7e3t/7Gxsf9cXFz/Hx8f/woKCv8GBgb/AwMD/wsLC/8ZGRn/Jycn/zMz
+ M/83Nzf/MjIy/yYmJv8gICD/ISEh/yEhIf8hISH/ISEh/yEhIf8hISH/ISEh/yAgIP8eHh7/HR0d/xoa
+ Gv8aGhr/HBwc/xwcHP8cHBz/HBwc/x0dHf8gICD/JCQk/ycnJ/8sLCz/LCws/ywsLP8sLCz/Li4u/ysr
+ K/8mJib/IiIi/xMTE/8PDw//CwsL/wgICP8FBQX/BwcH/wkJCf8KCgr/GBgY/zc3N/9aWlr/QUFB/wsL
+ C/8JCQn/CQkJ/09PT/+Wlpb/rq6u/83Nzf/n5+f/8fHx//T09P/y8vL/9vb2//b29v/7+/v//Pz8//j4
+ +P/6+vr//f39//39/f//////////////////////////////////////////////////////////////
+ /////////////////////////v7+//39/f/9/f3//f39//z8/P/9/f3//f39//v7+//k5OT/l5eX/z09
+ Pf8ODg7/BQUF/wUFBf8DAwP/ERER/yEhIf8sLCz/MjIy/y4uLv8qKir/KSkp/yoqKv8rKyv/Kioq/ygo
+ KP8oKCj/KCgo/ycnJ/8iIiL/ISEh/x8fH/8eHh7/ISEh/yEhIf8hISH/ISEh/yUlJf8pKSn/Li4u/zEx
+ Mf8yMjL/MjIy/zExMf8wMDD/LCws/yAgIP8UFBT/Dw8P/wUFBf8FBQX/BgYG/wcHB/8HBwf/BgYG/xMT
+ E/8qKir/QEBA/0VFRf9aWlr/Pj4+/wkJCf8ICAj/IiIi/66urv/39/f/+fn5//v7+//8/Pz/+fn5//j4
+ +P/4+Pj/+vr6//n5+f/39/f/+fn5//39/f/9/f3//f39//39/f//////////////////////////////
+ //////////////////////////////////////////////////////////////////////////////7+
+ /v/9/f3//f39//39/f/39/f/9/f3/7+/v/9JSUn/Dw8P/wsLC/8FBQX/BgYG/wcHB/8KCgr/EBAQ/xcX
+ F/8aGhr/GBgY/xoaGv8hISH/Jycn/ygoKP8qKir/LCws/y0tLf8uLi7/Li4u/y4uLv8uLi7/LS0t/y0t
+ Lf8tLS3/LCws/yoqKv8qKir/KSkp/ygoKP8kJCT/IiIi/x8fH/8cHBz/Dg4O/wQEBP8BAQH/BgYG/wQE
+ BP8EBAT/BQUF/wkJCf8XFxf/KCgo/zs7O/9GRkb/TU1N/1BQUP9RUVH/IyMj/wUFBf8ICAj/SkpK/97e
+ 3v/9/f3//f39//39/f/9/f3//v7+////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////7+/v/9/f3//f39//39/f/8/Pz/+Pj4//n5+f/R0dH/jY2N/05O
+ Tv8kJCT/FRUV/wYGBv8HBwf/BgYG/wEBAf8CAgL/AwMD/wMDA/8HBwf/DQ0N/xEREf8TExP/FRUV/xgY
+ GP8bGxv/Gxsb/xsbG/8ZGRn/FBQU/xUVFf8VFRX/FBQU/xUVFf8RERH/DAwM/wkJCf8FBQX/BAQE/wMD
+ A/8DAwP/BQUF/wUFBf8GBgb/CAgI/w4ODv8bGxv/KSkp/zMzM/9ISEj/UFBQ/1JSUv9QUFD/UVFR/01N
+ Tf8rKyv/EBAQ/wkJCf8ODg7/i4uL//T09P/5+fn//f39//39/f/9/f3//v7+////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////7+/v/9/f3//f39//39
+ /f/29vb/+fn5//z8/P/6+vr/+vr6/+Pj4//BwcH/jo6O/1NTU/8sLCz/Dw8P/wUFBf8FBQX/AwMD/wEB
+ Af8DAwP/BQUF/wICAv8EBAT/BgYG/wcHB/8ICAj/CAgI/wgICP8HBwf/AwMD/wMDA/8DAwP/AwMD/wcH
+ B/8DAwP/AQEB/wAAAP8DAwP/BAQE/wYGBv8HBwf/BAQE/wsLC/8gICD/ODg4/0tLS/9ZWVn/YmJi/2Ji
+ Yv9dXV3/WVlZ/09PT/9DQ0P/NjY2/ywsLP8MDAz/BQUF/wkJCf9CQkL/xMTE//v7+//6+vr//f39//39
+ /f/9/f3//v7+////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////7+/v/9/f3//f39//39/f/6+vr/+vr6//n5+f/7+/v/+fn5//z8/P/9/f3/+Pj4/+zs
+ 7P/T09P/n5+f/1ZWVv8nJyf/GRkZ/xISEv8PDw//DAwM/wgICP8ICAj/CAgI/wcHB/8FBQX/BQUF/wQE
+ BP8EBAT/AwMD/wMDA/8DAwP/AwMD/wMDA/8CAgL/AwMD/wMDA/8DAwP/AQEB/wQEBP8FBQX/BAQE/x8f
+ H/88PDz/TExM/2NjY/9xcXH/dHR0/2xsbP9cXFz/SUlJ/y8vL/8ZGRn/Dw8P/wgICP8DAwP/BgYG/zIy
+ Mv+qqqr/7+/v//T09P/9/f3//f39//39/f/9/f3//v7+////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////v7+//8/Pz/+fn5/+Pj4//Pz8//w8PD/7Ozs/+ioqL/jo6O/3Jy
+ cv9mZmb/WVlZ/1BQUP9KSkr/SUlJ/0ZGRv9DQ0P/PDw8/z09Pf9AQED/QUFB/0ZGRv9UVFT/Z2dn/3Jy
+ cv9dXV3/LS0t/wkJCf8CAgL/AgIC/wYGBv8LCwv/FxcX/yEhIf8pKSn/LS0t/yoqKv8lJSX/FRUV/wkJ
+ Cf8EBAT/BwcH/wICAv8GBgb/Kysr/5ubm//p6en/+/v7//n5+f//////////////////////////////
+ ///////////////////////////////////+/v7//f39//39/f//////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////39/f/9/f3//Pz8//39
+ /f/9/f3//Pz8//z8/P/7+/v/+vr6//b29v/z8/P/7+/v/+zs7P/o6Oj/5+fn/+Xl5f/k5OT/4eHh/+Li
+ 4v/j4+P/5OTk/+bm5v/s7Oz/8vLy//X19f/t7e3/uLi4/1hYWP8aGhr/BAQE/wUFBf8HBwf/AgIC/wQE
+ BP8FBQX/BgYG/wYGBv8HBwf/DAwM/wUFBf8BAQH/BgYG/wkJCf80NDT/q6ur//Pz8//5+fn/+/v7//r6
+ +v/9/f3////////////////////////////////////////////////////////////+/v7//f39//39
+ /f//////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////+/v7/+/v7//z8/P/8/Pz/+fn5//n5+f/5+fn/+fn5//v7+//9/f3//f39//39
+ /f///////v7+//z8/P/7+/v/+vr6//z8/P/9/f3//Pz8//j4+P/6+vr//Pz8//39/f/+/v7/9PT0/9bW
+ 1v+Xl5f/RUVF/xgYGP8LCwv/CAgI/wkJCf8LCwv/CgoK/wYGBv8ICAj/CgoK/woKCv8kJCT/V1dX/3Nz
+ c/+zs7P/7e3t//r6+v/7+/v//v7+//f39//6+vr/////////////////////////////////////////
+ ///////////////////+/v7//f39//39/f//////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////7+/v/9/f3//f39//n5+f/4+Pj/+/v7//z8
+ /P/9/f3//f39//v7+//8/Pz//v7+//39/f/9/f3//Pz8//r6+v/6+vr//f39//7+/v///////f39//r6
+ +v/9/f3//f39//z8/P/8/Pz//Pz8//n5+f/39/f/5OTk/7u7u/+pqan/j4+P/2BgYP9FRUX/QEBA/1NT
+ U/9mZmb/fHx8/4+Pj/++vr7/5eXl//T09P/19fX/+Pj4//f39//7+/v/+fn5//r6+v/+/v7/////////
+ ///////////////////////////////////////////////////+/v7//f39//39/f//////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////7+/v/+/v7///////////////////////////////////////////////////////7+
+ /v/+/v7//////////////////////////////////////////////////////////////////f39//z8
+ /P/8/Pz/+vr6//Dw8P/u7u7/7u7u/+/v7//z8/P/9PT0//X19f/39/f//Pz8//39/f/9/f3//Pz8//7+
+ /v///////v7+////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////f39//39/f/9/f3//f39//r6+v/6+vr/+vr6//r6+v/9/f3//f39//39
+ /f/9/f3//f39//39/f/9/f3//f39//7+/v//////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////////////////////f39//39/f/9/f3//f39//7+
+ /v/+/v7//v7+//7+/v///////////////////////f39//39/f/9/f3//f39//7+/v//////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////f39//39/f/9/f3//f39//39/f/8/Pz//Pz8//z8/P/9/f3//f39//39/f/9/f3//f39//39
+ /f/9/f3//f39//7+/v//////////////////////////////////////////////////////////////
+ //////////////////////////////////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=
+
+
+
\ No newline at end of file
diff --git a/PrimeNumber/PrimeNumber.csproj b/PrimeNumber/PrimeNumber.csproj
new file mode 100644
index 0000000..8b395e7
--- /dev/null
+++ b/PrimeNumber/PrimeNumber.csproj
@@ -0,0 +1,98 @@
+
+
+
+
+ Debug
+ AnyCPU
+ {4DE1916E-3164-4A40-8935-3FD3CAB9216D}
+ WinExe
+ PrimeNumber
+ 质数穷举
+ v4.5
+ 512
+ true
+
+
+ AnyCPU
+ true
+ full
+ false
+ bin\Debug\
+ DEBUG;TRACE
+ prompt
+ 4
+ false
+
+
+ AnyCPU
+ pdbonly
+ true
+ bin\Release\
+ TRACE
+ prompt
+ 4
+
+
+ opengps.ico
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Form
+
+
+ MainForm.cs
+
+
+
+
+ MainForm.cs
+
+
+ ResXFileCodeGenerator
+ Resources.Designer.cs
+ Designer
+
+
+ True
+ Resources.resx
+ True
+
+
+ SettingsSingleFileGenerator
+ Settings.Designer.cs
+
+
+ True
+ Settings.settings
+ True
+
+
+
+
+
+
+
+ {f4d21539-f371-4d7b-a507-6211cb17c1d5}
+ PrimeNumber.FrameWorkCore
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/PrimeNumber/Program.cs b/PrimeNumber/Program.cs
new file mode 100644
index 0000000..9a3785e
--- /dev/null
+++ b/PrimeNumber/Program.cs
@@ -0,0 +1,55 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+
+namespace PrimeNumber.WinForm.OneThread
+{
+ internal static class Program
+ {
+ ///
+ /// 应用程序的主入口点。
+ ///
+ [STAThread]
+ static void Main()
+ {
+ #region MyRegion
+
+ //32767
+ Console.WriteLine(Int16.MaxValue);
+ Console.WriteLine(UInt16.MaxValue);
+
+ //2147483647
+ Console.WriteLine(Int32.MaxValue);
+ Console.WriteLine(int.MaxValue);
+ //4294967295
+ Console.WriteLine(UInt32.MaxValue);
+ Console.WriteLine(uint.MaxValue);
+
+ //9223372036854775807
+ Console.WriteLine(Int64.MaxValue);
+ Console.WriteLine(long.MaxValue);
+ //18446744073709551615
+ Console.WriteLine(UInt64.MaxValue);
+ Console.WriteLine(ulong.MaxValue);
+
+ //79228162514264337593543950335
+ Console.WriteLine(decimal.MaxValue);
+
+ //3.40282347E+38F
+ Console.WriteLine(Single.MaxValue);
+ Console.WriteLine(float.MaxValue);
+
+ //1.7976931348623157E+308
+ Console.WriteLine(double.MaxValue);
+ #endregion
+
+
+ Application.EnableVisualStyles();
+ Application.SetCompatibleTextRenderingDefault(false);
+
+ Application.Run(new MainForm());
+ }
+ }
+}
diff --git a/PrimeNumber/Properties/AssemblyInfo.cs b/PrimeNumber/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000..28b4201
--- /dev/null
+++ b/PrimeNumber/Properties/AssemblyInfo.cs
@@ -0,0 +1,36 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// 有关程序集的一般信息由以下
+// 控制。更改这些特性值可修改
+// 与程序集关联的信息。
+[assembly: AssemblyTitle("PrimeNumber.WinForm.OneThread")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("PrimeNumber.WinForm.OneThread")]
+[assembly: AssemblyCopyright("Copyright © 2023")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// 将 ComVisible 设置为 false 会使此程序集中的类型
+//对 COM 组件不可见。如果需要从 COM 访问此程序集中的类型
+//请将此类型的 ComVisible 特性设置为 true。
+[assembly: ComVisible(false)]
+
+// 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID
+[assembly: Guid("4de1916e-3164-4a40-8935-3fd3cab9216d")]
+
+// 程序集的版本信息由下列四个值组成:
+//
+// 主版本
+// 次版本
+// 生成号
+// 修订号
+//
+//可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值
+//通过使用 "*",如下所示:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/PrimeNumber/Properties/Resources.Designer.cs b/PrimeNumber/Properties/Resources.Designer.cs
new file mode 100644
index 0000000..2626c4f
--- /dev/null
+++ b/PrimeNumber/Properties/Resources.Designer.cs
@@ -0,0 +1,63 @@
+//------------------------------------------------------------------------------
+//
+// 此代码由工具生成。
+// 运行时版本:4.0.30319.42000
+//
+// 对此文件的更改可能会导致不正确的行为,并且如果
+// 重新生成代码,这些更改将会丢失。
+//
+//------------------------------------------------------------------------------
+
+namespace PrimeNumber.Properties {
+ using System;
+
+
+ ///
+ /// 一个强类型的资源类,用于查找本地化的字符串等。
+ ///
+ // 此类是由 StronglyTypedResourceBuilder
+ // 类通过类似于 ResGen 或 Visual Studio 的工具自动生成的。
+ // 若要添加或移除成员,请编辑 .ResX 文件,然后重新运行 ResGen
+ // (以 /str 作为命令选项),或重新生成 VS 项目。
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.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() {
+ }
+
+ ///
+ /// 返回此类使用的缓存的 ResourceManager 实例。
+ ///
+ [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("PrimeNumber.Properties.Resources", typeof(Resources).Assembly);
+ resourceMan = temp;
+ }
+ return resourceMan;
+ }
+ }
+
+ ///
+ /// 重写当前线程的 CurrentUICulture 属性,对
+ /// 使用此强类型资源类的所有资源查找执行重写。
+ ///
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ internal static global::System.Globalization.CultureInfo Culture {
+ get {
+ return resourceCulture;
+ }
+ set {
+ resourceCulture = value;
+ }
+ }
+ }
+}
diff --git a/PrimeNumber/Properties/Resources.resx b/PrimeNumber/Properties/Resources.resx
new file mode 100644
index 0000000..af7dbeb
--- /dev/null
+++ b/PrimeNumber/Properties/Resources.resx
@@ -0,0 +1,117 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git a/PrimeNumber/Properties/Settings.Designer.cs b/PrimeNumber/Properties/Settings.Designer.cs
new file mode 100644
index 0000000..52c1732
--- /dev/null
+++ b/PrimeNumber/Properties/Settings.Designer.cs
@@ -0,0 +1,26 @@
+//------------------------------------------------------------------------------
+//
+// 此代码由工具生成。
+// 运行时版本:4.0.30319.42000
+//
+// 对此文件的更改可能会导致不正确的行为,并且如果
+// 重新生成代码,这些更改将会丢失。
+//
+//------------------------------------------------------------------------------
+
+namespace PrimeNumber.Properties {
+
+
+ [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.5.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;
+ }
+ }
+ }
+}
diff --git a/PrimeNumber/Properties/Settings.settings b/PrimeNumber/Properties/Settings.settings
new file mode 100644
index 0000000..3964565
--- /dev/null
+++ b/PrimeNumber/Properties/Settings.settings
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/PrimeNumber/opengps.ico b/PrimeNumber/opengps.ico
new file mode 100644
index 0000000..2ddb89b
Binary files /dev/null and b/PrimeNumber/opengps.ico differ