diff --git a/TIAS_DataExtractor.sln b/TIAS_DataExtractor.sln
new file mode 100644
index 0000000..432f6d5
--- /dev/null
+++ b/TIAS_DataExtractor.sln
@@ -0,0 +1,31 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 17
+VisualStudioVersion = 17.4.33122.133
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TIAS_DataExtractor", "TIAS_DataExtractor\TIAS_DataExtractor.csproj", "{248574A3-0A4B-4750-B6E3-2D591AD75016}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Debug|x64 = Debug|x64
+ Release|Any CPU = Release|Any CPU
+ Release|x64 = Release|x64
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {248574A3-0A4B-4750-B6E3-2D591AD75016}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {248574A3-0A4B-4750-B6E3-2D591AD75016}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {248574A3-0A4B-4750-B6E3-2D591AD75016}.Debug|x64.ActiveCfg = Debug|x64
+ {248574A3-0A4B-4750-B6E3-2D591AD75016}.Debug|x64.Build.0 = Debug|x64
+ {248574A3-0A4B-4750-B6E3-2D591AD75016}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {248574A3-0A4B-4750-B6E3-2D591AD75016}.Release|Any CPU.Build.0 = Release|Any CPU
+ {248574A3-0A4B-4750-B6E3-2D591AD75016}.Release|x64.ActiveCfg = Release|x64
+ {248574A3-0A4B-4750-B6E3-2D591AD75016}.Release|x64.Build.0 = Release|x64
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {8F539FE5-5C8B-4F4B-A9D8-14795B541C8E}
+ EndGlobalSection
+EndGlobal
diff --git a/TIAS_DataExtractor/App.config b/TIAS_DataExtractor/App.config
new file mode 100644
index 0000000..7d84477
--- /dev/null
+++ b/TIAS_DataExtractor/App.config
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/TIAS_DataExtractor/MainForm.Designer.cs b/TIAS_DataExtractor/MainForm.Designer.cs
new file mode 100644
index 0000000..09a8f61
--- /dev/null
+++ b/TIAS_DataExtractor/MainForm.Designer.cs
@@ -0,0 +1,277 @@
+namespace TIAS_DataExtractor {
+ partial class MainForm {
+ ///
+ /// 必要なデザイナー変数です。
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// 使用中のリソースをすべてクリーンアップします。
+ ///
+ /// マネージド リソースを破棄する場合は true を指定し、その他の場合は false を指定します。
+ protected override void Dispose(bool disposing) {
+ if (disposing && (components != null)) {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows フォーム デザイナーで生成されたコード
+
+ ///
+ /// デザイナー サポートに必要なメソッドです。このメソッドの内容を
+ /// コード エディターで変更しないでください。
+ ///
+ private void InitializeComponent() {
+ System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MainForm));
+ this.txtTiasDataDir = new System.Windows.Forms.TextBox();
+ this.label1 = new System.Windows.Forms.Label();
+ this.txtQuery = new System.Windows.Forms.TextBox();
+ this.label2 = new System.Windows.Forms.Label();
+ this.btnStart = new System.Windows.Forms.Button();
+ this.txtLog = new System.Windows.Forms.TextBox();
+ this.label3 = new System.Windows.Forms.Label();
+ this.label4 = new System.Windows.Forms.Label();
+ this.txtOutputDir = new System.Windows.Forms.TextBox();
+ this.cboFileType = new System.Windows.Forms.ComboBox();
+ this.label5 = new System.Windows.Forms.Label();
+ this.label6 = new System.Windows.Forms.Label();
+ this.cboBright = new System.Windows.Forms.ComboBox();
+ this.barTotal = new System.Windows.Forms.ProgressBar();
+ this.barPart = new System.Windows.Forms.ProgressBar();
+ this.label7 = new System.Windows.Forms.Label();
+ this.label8 = new System.Windows.Forms.Label();
+ this.SuspendLayout();
+ //
+ // txtTiasDataDir
+ //
+ this.txtTiasDataDir.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ this.txtTiasDataDir.Location = new System.Drawing.Point(123, 20);
+ this.txtTiasDataDir.Name = "txtTiasDataDir";
+ this.txtTiasDataDir.Size = new System.Drawing.Size(419, 19);
+ this.txtTiasDataDir.TabIndex = 0;
+ //
+ // label1
+ //
+ this.label1.AutoSize = true;
+ this.label1.Location = new System.Drawing.Point(12, 23);
+ this.label1.Name = "label1";
+ this.label1.Size = new System.Drawing.Size(106, 12);
+ this.label1.TabIndex = 1;
+ this.label1.Text = "TIASデータ保管場所";
+ //
+ // txtQuery
+ //
+ this.txtQuery.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+ | System.Windows.Forms.AnchorStyles.Left)));
+ this.txtQuery.Location = new System.Drawing.Point(12, 101);
+ this.txtQuery.Multiline = true;
+ this.txtQuery.Name = "txtQuery";
+ this.txtQuery.ScrollBars = System.Windows.Forms.ScrollBars.Vertical;
+ this.txtQuery.Size = new System.Drawing.Size(152, 230);
+ this.txtQuery.TabIndex = 2;
+ //
+ // label2
+ //
+ this.label2.AutoSize = true;
+ this.label2.Location = new System.Drawing.Point(12, 86);
+ this.label2.Name = "label2";
+ this.label2.Size = new System.Drawing.Size(65, 12);
+ this.label2.TabIndex = 3;
+ this.label2.Text = "検索文字列";
+ //
+ // btnStart
+ //
+ this.btnStart.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+ this.btnStart.Location = new System.Drawing.Point(428, 337);
+ this.btnStart.Name = "btnStart";
+ this.btnStart.Size = new System.Drawing.Size(114, 43);
+ this.btnStart.TabIndex = 4;
+ this.btnStart.Text = "データコピー開始";
+ this.btnStart.UseVisualStyleBackColor = true;
+ this.btnStart.Click += new System.EventHandler(this.btnStart_Click);
+ //
+ // txtLog
+ //
+ this.txtLog.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.txtLog.BackColor = System.Drawing.Color.Beige;
+ this.txtLog.Location = new System.Drawing.Point(170, 101);
+ this.txtLog.Multiline = true;
+ this.txtLog.Name = "txtLog";
+ this.txtLog.ReadOnly = true;
+ this.txtLog.ScrollBars = System.Windows.Forms.ScrollBars.Vertical;
+ this.txtLog.Size = new System.Drawing.Size(372, 230);
+ this.txtLog.TabIndex = 5;
+ //
+ // label3
+ //
+ this.label3.AutoSize = true;
+ this.label3.Location = new System.Drawing.Point(168, 86);
+ this.label3.Name = "label3";
+ this.label3.Size = new System.Drawing.Size(57, 12);
+ this.label3.TabIndex = 3;
+ this.label3.Text = "処理のログ";
+ //
+ // label4
+ //
+ this.label4.AutoSize = true;
+ this.label4.Location = new System.Drawing.Point(12, 51);
+ this.label4.Name = "label4";
+ this.label4.Size = new System.Drawing.Size(64, 12);
+ this.label4.TabIndex = 6;
+ this.label4.Text = "出力フォルダ";
+ //
+ // txtOutputDir
+ //
+ this.txtOutputDir.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ this.txtOutputDir.Location = new System.Drawing.Point(123, 48);
+ this.txtOutputDir.Name = "txtOutputDir";
+ this.txtOutputDir.Size = new System.Drawing.Size(419, 19);
+ this.txtOutputDir.TabIndex = 7;
+ //
+ // cboFileType
+ //
+ this.cboFileType.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+ this.cboFileType.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
+ this.cboFileType.FormattingEnabled = true;
+ this.cboFileType.Items.AddRange(new object[] {
+ ".bmp",
+ ".jpg"});
+ this.cboFileType.Location = new System.Drawing.Point(19, 360);
+ this.cboFileType.Name = "cboFileType";
+ this.cboFileType.Size = new System.Drawing.Size(46, 20);
+ this.cboFileType.TabIndex = 8;
+ //
+ // label5
+ //
+ this.label5.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+ this.label5.AutoSize = true;
+ this.label5.Location = new System.Drawing.Point(12, 345);
+ this.label5.Name = "label5";
+ this.label5.Size = new System.Drawing.Size(53, 12);
+ this.label5.TabIndex = 9;
+ this.label5.Text = "保存形式";
+ //
+ // label6
+ //
+ this.label6.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+ this.label6.AutoSize = true;
+ this.label6.Location = new System.Drawing.Point(86, 345);
+ this.label6.Name = "label6";
+ this.label6.Size = new System.Drawing.Size(53, 12);
+ this.label6.TabIndex = 10;
+ this.label6.Text = "明度補正";
+ //
+ // cboBright
+ //
+ this.cboBright.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+ this.cboBright.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
+ this.cboBright.FormattingEnabled = true;
+ this.cboBright.Items.AddRange(new object[] {
+ "1.0",
+ "1.25",
+ "1.5",
+ "1.75",
+ "2.0"});
+ this.cboBright.Location = new System.Drawing.Point(93, 360);
+ this.cboBright.Name = "cboBright";
+ this.cboBright.Size = new System.Drawing.Size(46, 20);
+ this.cboBright.TabIndex = 11;
+ //
+ // barTotal
+ //
+ this.barTotal.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ this.barTotal.Location = new System.Drawing.Point(203, 345);
+ this.barTotal.Name = "barTotal";
+ this.barTotal.Size = new System.Drawing.Size(201, 13);
+ this.barTotal.Style = System.Windows.Forms.ProgressBarStyle.Continuous;
+ this.barTotal.TabIndex = 12;
+ //
+ // barPart
+ //
+ this.barPart.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ this.barPart.Location = new System.Drawing.Point(203, 367);
+ this.barPart.Name = "barPart";
+ this.barPart.Size = new System.Drawing.Size(201, 13);
+ this.barPart.Style = System.Windows.Forms.ProgressBarStyle.Continuous;
+ this.barPart.TabIndex = 13;
+ //
+ // label7
+ //
+ this.label7.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+ this.label7.AutoSize = true;
+ this.label7.Location = new System.Drawing.Point(168, 345);
+ this.label7.Name = "label7";
+ this.label7.Size = new System.Drawing.Size(29, 12);
+ this.label7.TabIndex = 14;
+ this.label7.Text = "全体";
+ //
+ // label8
+ //
+ this.label8.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+ this.label8.AutoSize = true;
+ this.label8.Location = new System.Drawing.Point(168, 368);
+ this.label8.Name = "label8";
+ this.label8.Size = new System.Drawing.Size(29, 12);
+ this.label8.TabIndex = 15;
+ this.label8.Text = "個別";
+ //
+ // MainForm
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.ClientSize = new System.Drawing.Size(554, 392);
+ this.Controls.Add(this.label8);
+ this.Controls.Add(this.label7);
+ this.Controls.Add(this.barPart);
+ this.Controls.Add(this.barTotal);
+ this.Controls.Add(this.cboBright);
+ this.Controls.Add(this.label6);
+ this.Controls.Add(this.label5);
+ this.Controls.Add(this.cboFileType);
+ this.Controls.Add(this.txtOutputDir);
+ this.Controls.Add(this.label4);
+ this.Controls.Add(this.txtLog);
+ this.Controls.Add(this.btnStart);
+ this.Controls.Add(this.label3);
+ this.Controls.Add(this.label2);
+ this.Controls.Add(this.txtQuery);
+ this.Controls.Add(this.label1);
+ this.Controls.Add(this.txtTiasDataDir);
+ this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
+ this.MaximizeBox = false;
+ this.Name = "MainForm";
+ this.Text = "TIAS Data Extractor";
+ this.ResumeLayout(false);
+ this.PerformLayout();
+
+ }
+
+ #endregion
+
+ private System.Windows.Forms.TextBox txtTiasDataDir;
+ private System.Windows.Forms.Label label1;
+ private System.Windows.Forms.TextBox txtQuery;
+ private System.Windows.Forms.Label label2;
+ private System.Windows.Forms.Button btnStart;
+ private System.Windows.Forms.TextBox txtLog;
+ private System.Windows.Forms.Label label3;
+ private System.Windows.Forms.Label label4;
+ private System.Windows.Forms.TextBox txtOutputDir;
+ private System.Windows.Forms.ComboBox cboFileType;
+ private System.Windows.Forms.Label label5;
+ private System.Windows.Forms.Label label6;
+ private System.Windows.Forms.ComboBox cboBright;
+ private System.Windows.Forms.ProgressBar barTotal;
+ private System.Windows.Forms.ProgressBar barPart;
+ private System.Windows.Forms.Label label7;
+ private System.Windows.Forms.Label label8;
+ }
+}
+
diff --git a/TIAS_DataExtractor/MainForm.cs b/TIAS_DataExtractor/MainForm.cs
new file mode 100644
index 0000000..b53862b
--- /dev/null
+++ b/TIAS_DataExtractor/MainForm.cs
@@ -0,0 +1,185 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Drawing.Imaging;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+using System.IO;
+using System.Diagnostics;
+using System.Threading;
+using OpenCvSharp;
+
+namespace TIAS_DataExtractor {
+ public partial class MainForm : Form {
+
+ private readonly string INFO_FILE = "Info.txt";
+ private Task _Process;
+ private double _BrightnessCorrection;
+ private string _OutputFileType;
+ private bool _Abort = false;
+
+ ///
+ /// コンストラクタ
+ ///
+ public MainForm() {
+ InitializeComponent();
+
+ txtTiasDataDir.Text = @"\\gabor\Data\TongueImaging\臨床データ\2013-2015 千葉大外来\";
+ txtQuery.Text = "6716396-1";
+ txtOutputDir.Text = @"D:\usr\DL\舌画像データ\";
+ cboFileType.SelectedIndex = 0;
+ cboBright.SelectedIndex = 0;
+#if DEBUG
+ txtTiasDataDir.Text = @"\\gabor\Data\TongueImaging\臨床データ\2013-2015 千葉大外来\2013-07-23\";
+ cboFileType.SelectedIndex = 1;
+ cboBright.SelectedIndex = 1;
+#endif
+ }
+
+ ///
+ /// 開始/中断ボタン
+ ///
+ ///
+ ///
+ private void btnStart_Click(object sender, EventArgs e) {
+ if (btnStart.Text == "中断") {
+ _Abort = true;
+ this.EnableControls(true);
+ return;
+ }
+ this.EnableControls(false);
+ _BrightnessCorrection = double.Parse(cboBright.Text);
+ _OutputFileType=cboFileType.Text;
+ _Abort = false;
+ _Process = Task.Run(() => this.Process());
+ }
+
+ ///
+ /// 処理スレッド
+ ///
+ private void Process() {
+ this.LogClear();
+ this.Log("ディレクトリ一覧取得");
+ var dataDirs = Directory.EnumerateFiles(txtTiasDataDir.Text, INFO_FILE
+ , SearchOption.AllDirectories).ToList();
+ string[] del = { "\r\n" };
+ var queries = txtQuery.Text.Split(del, StringSplitOptions.RemoveEmptyEntries);
+ this.Log("コピー開始");
+ this.SetBar(true, 0, 0, queries.Count());
+ foreach (var query in queries) {
+ this.CountBar(true);
+ var dataPath = dataDirs.Where(p => p.Contains(query)).OrderBy(p => p).FirstOrDefault();
+ if (dataPath != default) {
+ this.Log($"フォルダ {dataPath} からコピー");
+ var dataDir = Path.GetDirectoryName(dataPath);
+ var files = Directory.EnumerateFiles(dataDir, "*.*");
+ var outputDir = Path.Combine(txtOutputDir.Text, query);
+ Directory.CreateDirectory(outputDir);
+ this.SetBar(false, 0, 0, files.Count());
+ foreach (var file in files) {
+ this.CountBar(false);
+ var outputFile = Path.Combine(outputDir, Path.GetFileName(file)).ToLower();
+ this.Log($"> {outputFile}");
+ if (Path.GetExtension(file).ToLower().Equals(".bmp")) {
+ using (var img = new Mat(file))
+ using (var outImg = new Mat()) {
+ img.ConvertTo(outImg, -1, _BrightnessCorrection);
+ outImg.ImWrite(outputFile.Replace(".bmp", _OutputFileType));
+ }
+ } else {
+ File.Copy(file, outputFile, true);
+ }
+ if (_Abort) {
+ this.Log("中断しました");
+ return;
+ }
+ }
+
+ } else {
+ this.Log($"{query} は見つかりませんでした");
+ }
+ if (_Abort) {
+ this.Log("中断しました");
+ return;
+ }
+ }
+ this.Log("コピー終了");
+ this.EnableControls(true);
+ }
+
+ ///
+ /// プログレスバーを設定(スレッドセーフ)
+ ///
+ ///
+ ///
+ ///
+ ///
+ private void SetBar(bool isTotal, int val = 0, int minVal = -1, int maxVal = -1) {
+ if (this.InvokeRequired) {
+ this.Invoke((MethodInvoker)delegate { SetBar(isTotal, val, minVal, maxVal); });
+ return;
+ }
+ var bar = isTotal ? barTotal : barPart;
+ if (minVal >= 0) bar.Minimum = minVal;
+ if (maxVal >= 0) bar.Maximum = maxVal;
+ bar.Value = val;
+ }
+
+ ///
+ /// プログレスバーを1増加(スレッドセーフ)
+ ///
+ ///
+ private void CountBar(bool isTotal) {
+ if (this.InvokeRequired) {
+ this.Invoke((MethodInvoker)delegate { CountBar(isTotal); });
+ return;
+ }
+ var bar = isTotal ? barTotal : barPart;
+ bar.Value++;
+ }
+
+ ///
+ /// ログに追記(スレッドセーフ)
+ ///
+ ///
+ private void Log(string msg) {
+ if (this.InvokeRequired) {
+ this.Invoke((MethodInvoker)delegate { Log(msg); });
+ return;
+ }
+ txtLog.AppendText(msg + "\r\n");
+ }
+
+ ///
+ /// ログ消去(スレッドセーフ)
+ ///
+ private void LogClear() {
+ if (this.InvokeRequired) {
+ this.Invoke((MethodInvoker)delegate { LogClear(); });
+ return;
+ }
+ txtLog.Text = string.Empty;
+ }
+
+ ///
+ /// コントロールの一括有効/無効(スレッドセーフ)
+ ///
+ ///
+ private void EnableControls(bool flag) {
+ if (this.InvokeRequired) {
+ this.Invoke((MethodInvoker)delegate { EnableControls(flag); });
+ return;
+ }
+ foreach(Control ctr in this.Controls) {
+ if (!ctr.GetType().Equals(typeof(Label)) && !ctr.Name.Equals("btnStart")) {
+ ctr.Enabled = flag;
+ }
+ }
+ btnStart.Text = flag ? "データコピー開始" : "中断";
+ }
+ }
+}
diff --git a/TIAS_DataExtractor/MainForm.resx b/TIAS_DataExtractor/MainForm.resx
new file mode 100644
index 0000000..d888ed9
--- /dev/null
+++ b/TIAS_DataExtractor/MainForm.resx
@@ -0,0 +1,980 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 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
+
+
+
+
+ AAABAAEAgIAAAAEAGAAoyAAAFgAAACgAAACAAAAAAAEAAAEAGAAAAAAAAAAAAEgAAABIAAAAAAAAAAAA
+ AAD+/v7+/v7+/v7+/v7+/v7+/v7+///+///+///+///+///+///+///+///////+////////////////
+ ///////////////////////+///+///+///+///+///////////+///////////+///+///////+///+
+ ///////////+///////////////////////////////////////+///////////+///+///////+///+
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////////////+///+///+////////////////////////////////////////////
+ ///////////+///+///+///+///+///+///////////////////+///+///+////////////////////
+ ///////+///////////////////////////+/fz///z///z///z///z+//36/v/6/v/6/v/6///7/v/8
+ ///8///8///9///9//////////7///7///7///7///7///3+/vz9//z7//z7//v6//v7//38///9///9
+ ///9///9///9///9///9///9///9///9///8/v78/v78//78/v78/v79/v7+///+///+///+///+///+
+ ///9///9///9///9///9///9///9///9///9///9///+////////////////////////////////////
+ ///////////////////////////////////////////////////////+///7//77//78//79//79//79
+ //7+//7///7///7///7///7//v3//v3//v7//v79/v/7///7///6//76//77//z7//v+//r///v///v+
+ //v8//z7//z7//39/v7//////f///P//+//+/f77/v78/v79/v7+///+///////+///+/v38/fv8/fr+
+ /vv+/fr8/vz6/v76/v76/v76//77/v78//79//79//79//79//7+//7+//7+//7+//7+///+//79//z7
+ //v6//v6//v5//r5//r6//z9///9///9///9///9///9///9///9///9///9///9///8/v77/v77//78
+ /v78/v78/v79///+///+///+///+///9///8///8///8///8///8///8///8///8///8///8///9////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////9///6//36//38//38//38//39//3///7///7///7///7///7+/vv+/vr9//z8/v76/v/5///4
+ ///4//75//37//v7//r+//n///r///r+//r7//v5//v6//36///8///+/f/+/P/+/P/7/f75/v36//78
+ /v79///9///////+///9/v/7/f75+/37/f78/v/9/f3///v///v///r///r///v///v///v///v///v/
+ //r///r7//74///5///5///6///6//76//77//78//79//79//7+//7/////////////////////////
+ ///////////////////+/v7+/v79/v7+/v7+/v7+/v7////////////////////+/v79/v7+/v7+/v79
+ /v79/v7+/v79/v79/v7+/v7+/v7+/v7/////////////////////////////////////////////////
+ ///////////////////////////////////////////9//39//3+//3+//3+//3+//3///7///7///7/
+ //7///36//n2//j2//n2//v2//34///5///8/v/+/v7//f7//P3//P3//P7//P7//P79/f75/v72///0
+ //7z//3z/v30/v32//35/v36/v37//78/v79///9///9///9///5+v77/P/8/P/4+v/3+f/8/P7///r/
+ /vr///r///r//vv///v///v///v///v///v+//v6///4///6///7///9/v/+/v/+/P/+/P/++///+///
+ +////P///v///v///v///v///v///v///v///v///v///v///v///f7//f7//v7//f7//f7//f7//v//
+ /v///v///v///////v7//v7//f7//f7//v7//v7//f7//v7//v7//f7//f7//v7////+///+///+///+
+ ///+///+///+///+///+///+/////////////////////////////////////////////////////v7/
+ /f///f7//f7//f///f7//////v///v///////v76//j1//b1//j2//r2//z4///6///9/v///P///P//
+ +///+v/++f/++f/9+v/7+//6+//3/f71/v3z//zx//vw//nv/vj4/vz7/f38/v78/v79///9///9///9
+ ///+/f/+/P3++/39+f/6+P/9+v///f7//f7//f7//f7//f7+/f79/f78/P/7/f/6/f/5/f/7///6///7
+ ///9/////v///v///P//+///+///+///+v///P///v7//f7//f7//v7//f7//f7//v7//v7//f7//v7/
+ /v7//f7//f7//v7//f7//f7//v7//////////////////////v7//v7//v7//v7//v7//v7//v7//v7/
+ /v7//v7//v7//v79///8///8///8///8///8///8///8///8///8///8///+////////////////////
+ /////////////////////////////f///f///f///f///f///f/+/v/+/v/+/v/+/v/+/v/9//n7/vj7
+ //n7//r6//37///7///7/v/7/v/9/v/8/f76/f72+//4+//6+//9+v/++//+/P78/P39/vv7/vn4/vb5
+ //f8/vv+/f3+/v7+/v79///9///8///9///99/j27vD47u/++Pr/+v3/+Pz//P///P///P//+////P/8
+ +//5/P/5+//4+//3+//2/P/6///7//37//38//39//79//79/v79/v/+/v/+/v/+/v/+/v79//3+//3+
+ //39//3+//3+//39//39//3+//39//3+//3+//3+//3+//3+//3+//39//39//79//79//79//79//7+
+ ///+///+///+///+///+///+///+///+///+///+///+///8///7///7///7///7///7///7///7///7
+ ///7///8///+///////////////////////////////////////////////9/v/9/v/9/v/9/v/9/v/8
+ /v/8///8///8///7///9/////f3//Pz//v3//v3//v7+///8//77//35//z5//z3//v1//v0/v32/v37
+ /f3++/3/+v3/+/7/+fr/9fX/9fH/+fL//Pb//Pv//P3//v7+/v79///9///7///8///TycaKfXqVhoGo
+ lpLBranNvbvVycng1Nbq3+Hv5uj17u/38fL48/T79/n9+/z9/P37/P38/fr7/vr5//n4//n3//n2//r2
+ //zz//rz//rz//vy//v2//v7//78//38//77//77/vz7/vz8//38/v38/v37/vz8/v38/vz8/vz8//38
+ //38//36//36//34//z4//z5//35//36//76//74/fz6/v37///6//76//76//76//76/v36/v76/v78
+ /v78/v79///9///9///8///7/v77/v77/v77/v77/f39/v7+/v7+/v7/////////////////////////
+ ///+/v78/v75/f77///7///5/f74/f75/v/5///5///4/f73/f36/v/7+v/++//9+v78+fz+/f7+/v3+
+ /vr+/vj9//j9//f6/vT6+/D49uz07+fx6OPl19bTwcHIs7W5pKaumZmvm5u6qKXXycb48/P8+vv9+/v9
+ /f36+/v6/v77///7///JwL1ZTUlSRD5WRD9XQj5XRD5gUEttXVh+bmmOf3mfkYusnpi8r6nPwrzcz8jl
+ 2tTp4tzt5eD17un79fD9+PP7+/X6/ff8/Pf4/vj0/vb0/vb2/vj5/vn7/vv7/vv7/fv7/fv8/fv6/Pn6
+ /Pr6/Pr5+/n5+/j5+/n9//39/vv7/fv6/vv6/vv6/vv6//35//z3//v3/vz3/vz4//34/v33/fz5/v75
+ //75/v74/v35/v75//75//76///7///8/v78/v78/v77/f38/f39/v79/v79/v79/v79/v79/v7+/v7+
+ /v7+/v7+/v7+/v7+/v78/Pz9/f3+/v7+/v7+/v79///6///5///5///4/v32/v72/v32/v36/v/6/v/5
+ /v34/f71+v/2+//3/P/6/P/+/f79+fn//vr/+vT+9+/38enq4tndzsLItamlkoeKdW53X11kS0xcQkVZ
+ QkVWQkRWREVUQ0FlV1W/tbX8+Pn++vv8+/v8/f37///7///7///NyMhlXl5YT09USUtQRUdTRkRSRT1S
+ QjpQQDhQQDlVRTtaST9iUEVqWEtuXE91Y1Z/a2GSeXehhYetk5S6o6PHs7HTwcDi0c3r3tr36+f88uz/
+ 9u/8+PL7+fT//vv+/vv8/Pn8/Pn9/fn+/vv//vr++/j8+fb6+PX//vv//vv///v//vr//fr+/fr7/fn7
+ /vr6//v5/vr5/fn5/vz5/v35/v36//75/v33/Pv4/f34/f34/f35/v34/v36/f39/v79/f38/Pz9/Pz+
+ /v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v79/f39/f3+/v7+/v7+/v78//73/fv2
+ /fv3/fr4/vv5/vz7/vz8/vz7/fv7/fv9/vz8//7z/f/u+//w+v72/P78/Pv89vTv5uPXyMW6paCfiIWH
+ bGl0VlJsTEZeQDxbPz1aQEFSPEFSP0VURUlQREdUSUpORUJKQj2EeXjs4+X/+vv//v/7/Pz6/v76///7
+ ///X3OSYnqqOlKOEipx5f5Jyd4Rwcnhra29jYWVcWFtWUFJXT09WS0lSRUJTRUFYSUNbSUZgRUtiQk1e
+ P0ldPUZkRUtuTlRyU1d3WVt/YGCKamqae3uijYunnJm1q6m/tbPKwL3Vy8jg1dPn3tvt4+Hy6ef07+32
+ 8vD57+389PL9+Pb++ff/+vf/+/j++/j//fr//vr9/Pj9+/f7+/n7/Pz9/v7+///+/v7+/v79/v79/v7+
+ /v7+/v7+/v7+/f3+/Pz++vv9+vr++vr++/z+/Pz+/Pz//P3+/P3//f3//f7+/f39/f39/f3/////////
+ ///8/Pz8/Pz8/Pz8/Pz9/f39/vz8/vv6/vn7/vn+//v+/vr+/fn//fr+/fn//Pn/+/f99/Xv7+3l6Obd
+ 39zKxsKpoJ2OgX9uXlxmU1NdR0lZQ0dZQUhZQkpZQkpZRk9cTllkW2Zwand1cXyCfoaMh4uNhoZvZWFU
+ R0JzZWXl2dv+9vf+/f35+vr6/v76///7///Q3u+YqcKKnr2Lo8aJoseHn8ONo8GLobyLnriLmrOHlKqD
+ jKB9g5V5e4x3doVua3pkYG9dWGhaVGNXT15SR1ZPQ1BQQUxUQ0pWQUdVPUJUPD5XPkBWQD9QPDtQOztT
+ Pj5aRUVkT09sWFdyXl16ZmWEcG+QfHuZhIOtl5a3oaDBrKvJtbTOvbzUxcTczMvj1tTp39zt5OHy6+j3
+ 8PD69Pb89vj99vj+9/j/+fv//P3/+/3/+/z++fv9+fr9+fr//P3//f7//f7//P3/+vv/+vv/+/z//P3/
+ /P3//f7//v/+/f79/f39/f3+/v79/f3+/v7+/v7+/v7+/v7+/v7+/v7//v3+/vn9/Pb+/Pb++/X79vH6
+ 8ez57ejw4t7l1tLVw8DEsKuql4+MeG5xXVNbRz5TPzdTQDxSQUFTRUlTSFJXT11iXW9sbYF1e5KFj6aM
+ mrGQoLeUpLmXo7SepLCdmJ+Mfn9pUExfQj18aWno3+H++vv9+vv8/f33/Pv6///7///I3PKUrsyIps1/
+ os90msl9otJ7oM96n8t9oMqCosuEn8eIoMaKocONnsGOnL6NmbuKmbeEmbJ8lal5kKN3i510hZZxfYxq
+ cYBna3hgYGtbWGJUUVlXTFNdS1FbR0xYRUpWQ0hVP0VVP0VVP0VUPEFSOz9VPkJZQkZbRUdfSEpfSUtg
+ SktlT1FsV1hzXl17aGeBb22CcW+HeHWLfXyPgoOajI6klZewoaO6rK3DtrfKvLzQwsLay8vh09Pj2Nfn
+ 3dvp4N/t5OPv5uTv5uXw5uXy6Ofy6Ofy6ejz6unz6+ry7e3x7u3x7Ozu6+rt6uns6Ofv6+nv6ujs5+Xn
+ 4+Dl4d3k3dra0s3RyMTHvLe8r6usnZmejImQfXqFbmt9ZGJyV1VpTElmRz5jQjVgQjdfRDxeSENhUVFr
+ Ymh1dH+BhpiFkaeGl7CDm7mAn76Fo8OEob+Iob2MoLiKlql5eYVkV1xjS0pkQDpzTkjCraz48fL//v/9
+ +/z7/Pz6/v77///7///Q4/OcttKQsdWLsNmIr9qHrtiFqtWEqdSDqNODptGDpdCDpM+DpM2EpM2DosuD
+ osqCosl+osV9osR+osSAosSBosODosOFo8SGosOHocKHoMCHn8CKmreKkayEi6R/hJx4e5R1do1xcYdv
+ bIJrZ3tmYHNfV2taVGVUUl1RT1dTTVVVS1JWSU9XRkpWQ0VVQkNVREJVRkFSRUBTQ0BUQ0FWRENXREJY
+ REFZQkBZQT9bQT1dQT1eQT1eQj1dQjxZRjxbST9eTEJiUEZmU0tpVU5tWFFxWlR0XVZ4YFp5Ylx3ZGF0
+ ZWR1ZGVzY2FwXlxvXFdwXFZuWlJpVUxkTkReSD5aQz1WQEBXQUNWQENUP0JXQENXQENXP0RaQEZcQUdg
+ RUtlS1BiUVRoX2FxbXF7fIWHjpyQnbCPo7mPpsGGocCDoMGFo8WHpMePqMqQosSOlbKIhptzZHJhSVJd
+ QUJmR0RtTEeTc2vVvLX89/X+/f3//v7//v7////+///+///+///R4/Oct9GQstSLsdiKsdiLsdmPst2O
+ sdyOsdyNsNuMr9qKrdiJrNeJrNeIq9aHqtWGqdSDqdGCqdCBqM6Bps2ApMt/o8t9och+oMh/oMh/n8eA
+ n8eBn8SCnsCFoMGJosKLo8SPpcOPor+OoLuNnbeLmbOIla+Fk62AjqR8ip96hJl6f5R4eo13dYZ0cIBx
+ bHtraHNlZG1fXmdcWWNcVmFZUl9WTllRSFNPRE9RRE5SRU1URExVRE1WREtVREpVRUlWREhVQ0hUQkdT
+ QEZTQEZVQUZVQEdVQEZVQEZVP0dUP0VUP0VVQEdWQUVVQERUPkJWQERXQURZQ0VbREZcREZZREVSQEJV
+ Q0ZWR0tXSU9YTFZeU2BkWmpoYHNvZ3x8dIuEgZiBiaKDlbCKnrqMob+LocGLosOLocKQpcWVqMaarMea
+ q8OTnriHiqZxb4dfVmlYSFNVPUJaQD9oTkmGb2m2pZ3s4dn69vH9/fv9/f3+/v7+/v7/////////////
+ ///R4/Oct9GQstSLsdiKsdiKsNiMr9qMr9qMr9qMr9qMr9qNsNuNsNuNsNuMr9qMr9qLrtmNs9uNtNuM
+ s9qMsNiKrtaKrtaLrtaLrNSKqtOHqNGHp9CCp89+qM59p818pct7pMd9pMZ9osR+o8KAo8KBpMKDpMGE
+ pMKGosOGoMOHocKLocONocKNocGPosGOn76MnbqLnLiJmbWIlrSKlrWIk7KGka+DjauAiad+h6N8hKB6
+ gpx3fph0e5VzeJFxcIlwb4dubIRraoJpZ4BnZX5kYntjYXpiX3lgXnZfXXViXm9nYG1oYW9pY3JoY3Jn
+ YnRpZnlqZ3xtan9wbINwboZ0c4WCgouGh4+JjJeKj56Mk6aLla2IlrGImbmJm76InMGGnMV+nMp7nc59
+ ns2Bn8yIosyRpcuZpsWbor2cnLCRi5l4bnlgUVtYRVFWQ0tZRUpeSkp0YVyWhn7Fu7Pq5t3y9+/2/vvy
+ /fr5/fz9/f3+/v7+/v7////////////////R4/Oct9GQstSLsdiKsdiKsNiMr9qMr9qMr9qNsNuNsNuN
+ sNuNsNuMr9qMr9qMr9qMr9qLstmLstmLstmNsdmMsNiMsNiQs9uPstqOsdmNsNiNsNiHsdqDstyCsduC
+ sNqCsNiDsNeDsNaDsdSCr9J/rM9/q81/qsyDp82DpMyDpMyDpcyCpMuAo8p/oMeAn8eCoMmEocuFocqD
+ nseDnseFnceFnciFnceEncWGn8eGn8aFoMWGn8SGn8SGn8OLo8aMo8WLo8WLpMWKo8SLpcaMpcaLpcaM
+ psaLpcaLpcWLpb+OpbqOpbuNpr6Lpr+LpsKHo8OHosSHo8eHo8qFosqHo8SJormMpLmJoruHoLuIoL6H
+ ocGEoMOCoMaBociAost+oMuCo9SGptiMqdiQqNOOocaNmLiCgppxaXlgUFhcRkdeQ0NiRUJiSURvV1GJ
+ dm2snZHg1cf59Of8/vT5/vfw/Pjs/Pvu/P34/v39/f3+/v7+/v7////////////////R4/Oct9GQstSL
+ sdiKsdiKr9iMr9qMr9qMr9qMr9qLrtmMr9qMr9qMr9qNsNuNsNuNsNuKsdiKsdiMsdmNsdmOstqOstqK
+ rtaLr9eMr9eNsNiNsdmLsduHr92Ir92Jsd6Jsd2Kst2IsdqHsNmIsdiHsdeHsdeIsdaOsdaNr9SMr9SK
+ sNSIsNOFrtKFrdKFq9KGqtKHqdSHp9OHpdGIpdCHptKIp9KHptCFps+CpM2BpMuBpMuAo8qAo8qAo8p8
+ osV9osZ8o8Z9pMZ9pcd8pMZ6o8V5o8V6pMV6pcV5pMV8o8N/osF/osF+osR+osV+ocd9oMh9n8t9oM19
+ oM58ns97oM59pc2Aps2BpsyCpcqHp8mOq82Src2RrMmTrcqVrsqUrMedrMiTnbeBh6Fuc4hgYnRZVWNS
+ R1FRQkZVQEBhRkNyVlCIcGeklIjLwLLo4dP38+P8++z8/vH3/fP3/vj4//73/f/0+v36/P79/f3+/v7+
+ /v7////////////////R4/Oct9GQstSLsdiKsdiKr9iLrtmLrtmLrtmKrdiKrdiLrtmLrtmLrtmMr9qM
+ r9qMr9qKsNiKsNiLr9iLr9iMsNiMsNiLsNiLsNiMsNiMsNiMsNiMr9qOrtuOrtuPrtuOrtuOrtuNr9qM
+ sNmMsNmMsNiMsNiNsdeSs9aSs9SPstOPtdWMtNOKs9OLtNWKstWMsdaNsNiMrtmOrteOrteOr9iNrteM
+ rteKrdWKrtaIr9WIr9WIr9aFrtWHrtSKsNWKsNSIr9KGrtCGrc+Ers+HsdKHsdGFsdGDsM+Crs6CrNGF
+ q9WHrNWHq9WJq9WLrNeOrdiQrdmRrtmSrNmTq9qNq9mHrNyIr92MrtmRr9aYrtCdrsqfq8KdpbaWnKmC
+ h5Fzc3tnXWBiUE5cSklcSUhaSUdXR0RgUEtxYVyPgHqzop3cy8Tw7eX49uv9/fD4/O/4/vL3/vL4/vX7
+ //n9/vv9/Pz//P/++f3+/P79/f3+/v7+/v7////////////////S4/OeudORs9WLsdeKsdiLsdmMr9qM
+ r9qMr9qMr9qMr9qMr9qMr9qMr9qMr9qMr9qMr9qNsNuNsNuMr9qMr9qKr9mJr9mKsNqKsNqKsNqKsNqK
+ sNqNr9qPr9mQrtmPr9mOsNmPr9mOsNiNsdeNsdeMsdeMsdeMsdeLr9SNstaKsdOMtNWLstGOtdONs9WM
+ stWLsNaLr9iLr9qNsNmNsNmNsNmMr9iKr9iJsNiIr9iGsNmHsNmHsNqFsNqJsNmSr9iTrteTr9eTr9eU
+ sdeUsteTsdWTsdWTstSSs9WQsdSKr9eJstyMs92MsdqNrtWRr9SXsNSYsNGcsdGis9OistGer86csdOX
+ qcyPnLuRmbWKiaF/eot1a3hmWV9hUlVVRkVWRUFfRDtnRjttTkN6XlSQeG+plo7Kvrbf2NHy8Or5+/f6
+ /fr4+/n6//36/vz4//v3//v2//r4//v6//z+//z//f7//P///P///v//////////////////////////
+ ///S4/OeudORs9WLsdeKsdiLsdmMr9qMr9qMr9qMr9qMr9qMr9qMr9qMr9qMr9qMr9qMr9qNsNuNsNuM
+ r9qMr9qLsNqKsNqKsNqJsNqJsNqJsNqJsNqJsNiKsdaKsdeJsdeIstaIsdeIstaIstaHstaGstaGstaF
+ steJtN+Hsd2Js92KstmKr9SRs9iOsdaOsNaMr9eKrtmHrdqKrtuNsNuNsNyMsdyMst2Lsd2Ksd6Isd6H
+ sd6Hsd+Hsd+Isd2QsN2Sr9uRrtqQrtiOrNaRrteVstqRr9aRr9WSsdWSsdWLsNSHsNSJsdOOs9OTtNKX
+ tM+gudCes8aarL2YprWRnKqJj5x6doNvZ3NmWWVgT1heSVJgSE9cQkdaQEJdQ0ViTEtpVFGEa2qskpLI
+ srDgzcvx49/47Oj89/L8/Pj3/fry/Pnx/vv1+/z9+v/9+v/8/P75/f74/v34//75//76//78/v39/v3+
+ /v7////////////////////////////////S4/OeudORs9WLsdeKsdiLsdmMr9qMr9qMr9qMr9qMr9qM
+ r9qMr9qMr9qMr9qMr9qMr9qNsNuMr9qMr9qMr9qLsNqKsNuJsNqIsNqIsNqHsNqHsNqFsdmDs9aEsteD
+ s9eDs9eDs9eDs9eDs9eCs9eCs9eCs9eBstmCsuF9qdmKsd6RsNqVrtWZrtGcsNKbsdOastaWs9iSs9qS
+ sNiTrtWSr9WRr9WRrtWPrdaPrdaNrtaOrtiOrtiOrtmOr9mLrNWNrteQsteTs9mWtdmWtNaUsNKWstSZ
+ tdWXstKRq8qUrMaVqL+QobWJmauAjJt3gY5tcnxlaG5eXWFVU1ROSEpNQj9aRT1dQzliQz1kQz1kQDxr
+ RkSIZWOtjY25oaHWwsP25uj+8vj/+P//+v7/9/z++vz//v7+/fz7/fz4/fv0/Pzz/f31+fz/+f//+v//
+ +v/++//9/f/8/v/6/v/4//72//32//33//38///////////////////////////////S4/OeudORs9WL
+ sdeKsdiLsdmLrtmLrtmLrtmLrtmLrtmMr9qMr9qMr9qMr9qMr9qMr9qMr9uMr9uMr9uMr9uMsNyLsNyI
+ r9uIr9uHr9uGsNuGsNuFsNqDstmEsdmFsdmFsdmFsdqFsdqFsdqFsdqGsNqFsdqFsduDrtmLsduNq9J2
+ h6p8g6KJiaSTkaqWl6+YoLeXp76Xq8KbrcWfrsefrceerseersidrcmgr8ygsM2ersuaq8qYqciWqMaU
+ qsaTqsSPpb6Ln7iGmrGBlKl8jaF5iJt2hJZvfI9qdYZtbHlsYWtjVl9dT1ZZSlBXR0xWRUdXQ0RYQ0Jb
+ RUJgSUZkTkhwWk6AaFxyVUtjQzloRDx+WlSif3q4m5e2oZ23pKG0pKGvpaWro6Wxqam6sbHEubjTy8js
+ 5eD48+78/Pn4+Pj4+Pn6+vz9/P3+/P3//P7//f7//f7//f7+/v76/v74//70//31//78////////////
+ ///////////////////S4/OeudORs9WLsdeKsdiLsdmLrtmLrtmLrtmLrtmLrtmMr9qMr9qMr9qMr9qM
+ r9qMr9qLrtqLrtqMr9uLr9uLsNyLsNyIr9uHsNuGsNuGsNuFsNuIsNuLr9uLr9uMrtuMrtuMrtyNrdyO
+ rdyOrdyPrdyPrdyQrtuSstSct9SCk6xGR1xKP09XQk5hSVJhTlReUlZYVFhQVFdWV1xdWmFgXWNkYGZn
+ ZGtqZ25pZW5nY2xlYWpiXWlfWmZeWWVaU19bVV9bVF1bUlpaT1VaTVJaS1BYR0pWREdXQ0RVQUJWQkBW
+ Qz1XQj1ZRkBiT0pqV1N2Y1+DcW2Ug36qmpXDs6/Yy8jo4t/u6ufRwb6Qe3dkSkRhRD1lRj9jRjtmSz1n
+ Tj9iSjteSjldTTpgTjtiTz1mUUBrWEdxYFOJeG6zo5/Wysnx5uj7/Pr2//f2//f6//r+//z///3//v3/
+ /f7//f7+/v77/v76//7+///////////////////////////////S4/OeuNORs9WLsNmKsNuLsNuMr9qM
+ rtuMr9qLr9qLrtuLr9uJsNqJr9uJr9uJsNqJr9uMr9uNr9yNr9yNr9yMsN2Msd2Kr9uJr9uHsNuGr9uG
+ r9uJrtyMrN6Mrd6Nrd2OrdyOrdyPrtyQrtuRrtmRrtmRrtmRsNeWtNKZs85/kKhOU2dPSllSQ05SP0dV
+ QEVTQUZRQ0VMQkROQENTQURVQ0RXRUJYREBaRkFYRUBYRkFVREJWREVRQERUQUVXPz9ZQkFYRUFYRkBW
+ QzxdRz9jSUNrT0pwVFFzWlh2YF55aWWGeHGZi4WsnpjBtK7Nwr3e1dHw5+P99vP/+vf/+/j//f369/r4
+ 9fj++vvj2tiTgnxeSD9fRTpjRDdkRTVhQzJlSzZfUC5gWC1hVyxfUytgUy1gUC5eTDBdSTRkTEJ7Y12u
+ lpXh19Lx9uv3/vb4/Pn8/v38/P7+/v3//fz//vv//vz//f/9+/7//v//////////////////////////
+ ///S4/Odt9OQsdWKr9qIr9uKsNyMr9uNr9uNsNuNsdyNsNyLr9uIrtmIrtqGrtqFr9mHrtqMr9yNr9yM
+ rtuMrtqMr9yMsNyLr9uKsNqJsNmIsNmIr9qIrtyJrN6Krd6Lrt6Lr9yMrtuMr9mMsNeMstWMstSNs9SO
+ tNSMr9GTtNSPq8qAlbN3hqB5gJd1d4tzbn9wZ3dwZHFrXWptW2hoUV5cQ0pYPz5dQTpjRTtnSz6AZVl/
+ Z2B/amaCbnCJc3aSd3STfHaWiX6gmIqmnY62qJzBraTMubPRwL/Vy8zd3d/l5eXq6Ofv7ez18/L8+fj/
+ /fz+/v3+/v3+/v3+/v3+/v3//f79+f3+/P7//v79+vbGvLRhUEZaQTVlRDdkQzRlRTV1W0Z9dkyAhUt+
+ hEl7gEV5fURzdT9rZjphVTFfSzJgRTVpSkCAaWCxp5vn4d369fj9+//3+P35+fv9/fj9/fT+/ff//v79
+ +v3//f/////////////////////////////S4/ScttOPsNWLr9qLsd2QtN2UtdqVttqWt9uYuN2Xud6Y
+ ut+Yu9+Xu9+Wu9+Vu9+Vu9+Rud2Out2Out2OudyMuNqMt9qLtdiLtNiKtNaKtNaLstaLsNaLrtiMr9qN
+ sdqNsdmOsdmNsNeMsNaNsdaOstaOstaQs9eQsNeQrtaSr9SXsNSZsNGdr8+jsc6irMaiqMGkqL+jp7yh
+ pryZnbJ9eIlfU1xZQkZgQD9tSkSujYXi0Mfv49zx5t/z6+f07O317O328O339u/7+vP9+PD/+vX/+vf/
+ +Pf89/j5+vv8/f3+/v7+/v78/Pz8/Pz7+/v//////////////////////////P39+vz////+/frc08xo
+ Vk5bQjdmSTlmSjZdRS1mUjZ3aUSUjl+ZmWSPl1qPnlyJm1eGl1WEj1V2eEhlXDhcTDBYRjFeTzuQgHbe
+ z9D98ff89Pr+/P7+/vv9//j9/vj7/Pz9/P7//v/////////////////////////////R4fSdttKSstaQ
+ tN6UueSbv+afwuSgwuOgwuSgwuSgwuSfweOfweKgwOKfwOKfwOKeweKawuKYxOKaxeScxeWbw+ScwuOb
+ v+CbveCZu96YudyXt9qTttiNtNWOtdWOtNaOs9aOstWNsdeNsdeNsNmNsNmNr9iPr9mTr9yRrNmRrNeU
+ rtiWsNmWsNeXsNSVrtGVr9CXsdCWsc+TstCYttSSp8OAiKBuZXdYQ09dQ0hhREOTenTaycD79+z++e/+
+ 9vn++Pz7/P7z9/n2+/37/fz//vz//fz//fz///3///z9/fz9/f3+/v7+/v7+/v7/////////////////
+ ///////////+///5+fr//v79+Pjo3NpwXFdeRTp4Xkt+ak5jVzNTSyRiTi94YkOLgViTmWGKoVqBpFOC
+ p1SAo1R/mVWEk1p4fk5fWzNbUS5jTjiFZ2DUt7n/8ff/9/r8+vn4/fj5//v4/f34/Pz9////////////
+ ///////////////////Q4POettOWtNeYuOCbveagw+qfxOeewuaeweWdwOOdwOOewOOeweSgwOSgwOSg
+ wOSgweSevuGev+CgweKiwuWlwuamwuapw+qowumpwOmnvuimveihwOSbwuCYwN2VvNuSt9mOs9aLr9SK
+ rdWLrdiLrtqLrtqNrtySrdyVr96Trt2Pq9mNq9iMrNiKrdeKrteJsdiKs9mMtNqJs9mIstmLrdKPp8mO
+ mbd6e5NYUWBPQEdYR0Z9amLCsqX47+L++v349fz3+v/x+f3y/P73/f79/f7//P7//fz//vr+/fb+/fv+
+ /v79/f38/Pz7+/v7+/v////////////////////+//77//z4+/r+///9+Prw5uaMdnNeRDp0XUeZjGmJ
+ iFhjZjRgTS5iRi9mWDV/g0+PpmCHrFuEr1iItF2Dq1mDo1qFnlyBjVRqaThaSiZqSDaFXFXfw8X/+Pn9
+ /Pvz/fny/vr3//75//79///////////////////////////////U4vOjuNKas9SZtNmatdyZuN+Ttt+T
+ tN+TtN+TtN6Ts92SsduSsNqSsNqTr9qUr9qVsNmcs9uetNqetNmftNygtt6ftuKftuOguOWhueiju+yk
+ vO6hwOqew+aew+acwuWZv+OXveGUueCRt9+PtN6Nst6KsNyKr9qNrdmQr9uPr9uOsNyOsd6Msd6Isd2H
+ st2FsNuArtmArtiGrdmMrtuNr9uJrNeCpMyCoMJ8kq1faXtLSVNRP0BtUUyojIbm2tj8+fn6+/z4/P32
+ /f/0+//5/f/8/f/+/f7+/vv///v//vz+/v7+/v7////+/v7+/v7////////////////////9//75//v5
+ //z5/Pz/+/778/a6o6RkS0NeTTOQi2KcpmyImFl5c0llUzVVSydWVyhndDqAl1SRsGWJrF6GrVuHrl2C
+ qFeAoFSLn1x2dUBoTyxpQy+LZ1/Ywb769/X3//3v/fn2//35/v39////////////////////////////
+ ///U4fGmt8+bsM6cs9Oes9Kds9Scs9iastaYsNSZrtObrtOcrdOarNGZqc6YqM2bqtCerdGerc6drc2d
+ rs6esdKes9actNiWstaUstiTs9qTtd2WueGXueKYueOcveecvuebv+ecwemcw+qYwOeTvOSRu+OLt96H
+ stmLstqLsNiMsdmMstqMstyLsNuGr9mHsNqHsNuHsNyIsNyPsNuTrdiQrtmMsd2ErtmAqNCFp8uClrNw
+ doxcT11VO0RlSkyOgHfVzsT79/L79/b8/v76/P73/P72+fz5+/38/v3+/vz+/v3////////////+/v7+
+ /v7////////////////////9//35//r5//v5/Pz++///9/3Yx8pwWlNbTDN3dUqYpmmTqmSYpmx6fU5h
+ YTRSUSVRUSRjZDWDilWWpmqVrWqKrGCIsF6Erl2CpluGlFR9dEVoTi5jRjWNeXHk3tz6//7y/Pr3/fz5
+ +/r+/v7+/v7////////////////////////Y4e+tus+ks8yfrsadqsKWoLWOlKmGiZ5+gZZ6fJF1dYpx
+ cIZubIJsaX9saX9wbIJ0cIV2dYZ6fIt/g5ODi5yIlKaOnbCUqryWrsKVssiVtcuWt82YtNWYsNuZsd+a
+ tOCat+Kau+OZveOYwOWYwuWVweSTweOTwuONudqMttmJs9eJstaJsdaKsdeMsNiMsNiMsNmNr9qOr9qU
+ sNiVsNaTr9eOrtmLrtqLrdqJqdOLosiPm76Dg6BjWnFLPUldUUV3alvKwLT69vD69PD8/Pr6/Pv6/f73
+ /P34+/z5+/z8/f7////////////////////////////////////////9//77//r6//v7/v7+/P//+P/0
+ 6OyRgHpVSTFcWzKKmF6Wr2qQrGaSq2mHl15paj9WTCtXSCpkVjZ6c0yVm2iWqmqOrGOJs2R+q1+Jp2KO
+ mF1zbUBaTTBcUD6nn5j18/L7/Pz5+/n8/Pr+/v7+/v7////////////////////////Y3uaNlaV3gJBh
+ aHldYnFaVl5aTVFWRklVREdWRUhTQURSQERUQkZVQUVWQkZYREhaRkhYQ0NbR0ZbSEhXSEdaTU5eVldg
+ Xl9naGt1e3yCjI+TnaKcp7qcqMycqdGfr9adstactNebt9qbvd6cwuKaxOOWw+GUwd+UwuGRv96NudqK
+ tNWIsdOKsNOPsdePsNeQr9aSrteTrteRsdaQsdWQsdaSrtiTrdmWrNqZrNuWp9OUpM2TosZ5iKhZYnZM
+ Rz9URzt3ZlvKtq357ub++/X8+fb6/Pv5/v72+/36/P/+/v//////////////////////////////////
+ //////////79//v6//35/v/7/P/++v//9/rHurRVSjVQTSpveEWTpmiOsmeLsWWQqmiQl2d7clBiTzVg
+ SjNbSy5uaEKOlGGYqGyLq2aErWaIrWaPqGaCj1ZeYDdORyxuYlba0c/++Pf//fz///3+/v7+/v7/////
+ ///////////////////DxMxRVV9ER1JBQUtGQklLPz9UPjpdRT9lTEZoUUpsU01uVVBwWFJwWFJwWFJw
+ WFJwV1FxU01xUElsS0VkRT9dQDpXPTdWQDlYQz1aR0JeTUdkU09jWmJnZnt+gZmTmbGcpb6hsMmgtc6Z
+ ss2Vs8+Xudadwt+exuOZxOOXw+OYwuKUvd2RuNqNs9aOsNSOrtWPrdSSrtWTsNeOsNeLsNaOr9eSrtiW
+ rdqYrdmZq9iartmTqdOLp86Eo8Z7la9nb3NQTElSREFuWFO/qqT37ub9/PT4+PL5/Pv7/f/7/P/+/f//
+ //////////////////////////////////////////////38///6/v/4/f/7/P/++vzy7eh+dWRRSjBa
+ WTOCi1mRr2mHrWCKp2OZqXGZnHGGgl1kXDtXTixaUy5kYjh9f0+Ypm+SrW+NrGmHp2GMpmRue0dVUS5f
+ TTyrlpL56+v//f77/fz9/v7+/v7///////////////////////++vcJQUFZPTVNmYGN6cG+UhYKtmZTA
+ q6bOurXVw73gzsjm1M/n19Ho2NLn19Hk1M7k0szdyMPTvbjIsq2+pqKxl5Oih4ONcW16XlpmSkVfQz9f
+ Qz9cRURUR0lRSUxZU1lkZGx5fYmNlqecq8GkuNGfttKXstCVs9OUut2Xv+KawuWbw+aZwOSWu+CQtNqO
+ stiMsNaMsNaPsNeLr9qJrtqLrtqMr9qPr9qQsNiQr9eRsdiPsdeOsteJrtOFp8iFmq5ocH5SS1RPPD5m
+ UEy2o5vv593+/PX7+/f9/P39+/79+/7//////////////////////////////////////////////v/+
+ /f/5/f/3/v/4/f/9/Pz+/PjIv7JmW0hTSS5pZkKEk1qUrWqVsG2QqWmQqGuQpmyFlGBkbDxSUylUTShh
+ VjV6ckuRlGSdrnKNrGiNrmeEmFtpaDxfSDJ8XVfl09T++Pn5/fz7/v3+/v7/////////////////////
+ ///f3d+7t7vKxsjh2tj16eT++vf89PX/+Pr/+/z/+vz/+/3+/P7+/P3//f7+/f7+/P39+vz6/f74/f73
+ +/z5+vz69/j58/Xz6uzs3+Pf0NPLuryolZeNenV4ZlpeT0NUSD9LQz5IREVNTFVaXm1xeo6MmLGerMmf
+ sdGUsdaStdqVuuCZvuWcweidwumZveWTueCNtNuIsdiHstiKrtuMq92LrNyJrtuGsNqEs9iEtdiCsdOI
+ stWMstWMrtKOrtKIp8iNob56fZJeU15VQUNoU06djYTn39b/+/b8+/n9+/3//f//////////////////
+ ///////////////+///9///+/v///P/+/f/5/f/2/v/2/v/7/v///Pn37ua4qp9gUD9WSTJpZj6LlV+Y
+ rG+OrmmHsGWEsmOErWOIp2V1gU1dWTJdSy9oUTRxYjqEiVKNqGSJrmSPp2OAgVBnTzVqRz7Bo6P89Pb4
+ /Pz8/v7+/v7////////////////////////9/P37+vv//v7//v3//Pr//v3//////v///////v///f/+
+ /f/+/v///v/+/v/+///9/v/5/v/4///5/v/7/v/9/v///////v/+/P3//P3/+/379vfz7uvj2tO9squW
+ jIVyaWJSSUZGPj1DPD9MREtfVmF9dISalqmfrsuZs9aPs9eMt92VvuafwOykv+yfu+SYu9+GtdZ6tdGF
+ s9WPrtiQsNuMrtiJr9iLstqIsdiIsNaLsteMsteMsNSNsdaHrdWJqM6On71/gJZmV2ZVO0BkRkekjInw
+ 5uH3+vPu+fP6/P3//P/+/P/+/f/8/f7+/v7//v7//v7+//76//73///4/v/+/P/+/f/7/v/5/v/4/v/6
+ /fz+/fz++fX16uaSf3lVQTdfTTdwaUWOlmeSrXCEr2SEuGV7r1yJsmaSqWqIi1pwZD9dSiZaTSFobzWK
+ p1+Ls2SPrGWPmGJpWDhlRTmSdHD+9fX9+/r+////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////9+/v9+fr//vz8+fXp49/Lw7ylmpR3aGNdTElUQEFUPkFhTVR4boKQla2XrMiN
+ sdCLtNaNtNubveWlxOyewOWWwOKJvNmGstKNsdSQsdeQsNmPsNmPrtqOr9qOr9qNsNmMsNiMsdeLsdiK
+ sNyJr9mMrM6SpMKHiKBvXW1fQ01gQ0aTgH3d2dD0/fP7/fr99/38+f719fn8/v74+Pn+/f3//v3+/v76
+ /v72///3/v/9/P/+/f/9/v/7/v/6//77/v7+/v7//f3++vno2tqXgX9mSUJbQzFnWz59g1WMpGeKrWaJ
+ s2SHrGGOqmabq3GWnWx/fU9mZjVrfD6CpVuDr16JrWOUpmxzbkleSjhyXFPw4tz++fX///7/////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////////////////////f7//Pr/+/j//fj/+/T58erf
+ 1tG9r6yMe3tfTE5TPkNZPUtkTV55dIeRo7iUtcyHs8+HttaNu96aweahweqgu+WYtt2Qs9iNsdeOsdiO
+ sduNrtqNrtuNrtuNr9qMr9mMsNiMsNiNsNuJrteIrdKPsdCPpb6Ei55mXmxUQUpXQUWFdXHo3db9+PX8
+ 9/j+/fz7/fz3+vv4+fr+/f///f///f///f/9/v79/v7+/P7+/f/9///7/v/5//75/v35+/v//v769PT9
+ +Pns3t2niohoSUFcRDNkVjdyb0OKkluTpGaYrm2VrW6Pp2uPpm6To3CRmWiLo2aKsGiEsWOJrmaVqW98
+ fVZUSjRZT0HRzsP6/PX+//7/////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////f3/+vv//fz//vv//vr/+/b/+/X//fj89fLv5uXDubmHdnlsSU1lQEZbQklkXWZ/ipeTs8SLuM6G
+ tdGPuN2fuueruu2kvOiVut6NstiLsNeMsduNsNyMrtyMrtyMr9uNrtuNr9qNsNmRsNuMsdmFsteDtNaC
+ sM6Fpr+ClKlgXm1VRE5WPECdgX/p29X8+/X19vH6/Pr5/Pz5+/z8/f/+/f///P///P///f7//f7//P7+
+ /f/9///7/v/5//74/v33+/v7/Pr9/fz/+fn++Pj26+2rk5VzWlVfRThjSjNrVzZ+cUeEf1GPlmOSpW+N
+ p3CQo3GZonWXqXOPq22MrGmTq2udqHOKhmFcUTlUSzq6va73/vL9//z/////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////P3++/r++/n+/Pj+/fn//vn+/vr6+PX8+Pb8+vrv
+ 5ubDqqmHZmVnSEhZQkNZTVF2fYSQpbSZt86QsdOateGlu+2gveqbwOSQt92LstuJsNuLsd2Lr92Lrt2M
+ rtyNrtuOrtuQr9qSr9eOsdmEtNp+tdt5s9d+sNCNrsmDj6RnYG9WP0dkREeRfnjk39T9+/P9/Pf8+/v4
+ +/z7/P/8/P/+/P///P///P7//P7//P7+/f/9///7/v/5//71+/r4/f34+/n7+/v9+/r7+fn8/P318/TS
+ xcWNd3NyVUtkQzVhQy1kTjFrYTxsbUJqdUd0elB9eld8f1d7g1N6hVGAglGHgFZ7aEphTDZWRzeyrqH6
+ /fL+//z/////////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////////////////////////////////////v3//v3/
+ /v39/Pr+/Pr//vz+/fv7+vn+/fz6/Pr8+vn79vPk1tKjjYhsUExgQ0FdRkh1aHCdnrCgss2QrtGPt9+Y
+ weicxOeXvuSPt96IsNqIr9uKrt6Lrt2MrtyNrtyOrtuRrtqSsNePsdmGstt7sdx4sdx/tNyCq86Op8KK
+ kKNoXmtXQkhWRkGXjYHu5t3++PP9+fn6+f35/f/4/f/6/v/+/v///f7//f3//f3+/v79///7//75//72
+ /fz3/f32/Pv3+/v9/v75/Pvy+/vu+fn3+vrp4ODCrK2VdnVyUEtkRTlcQy9aRy5XSy1dUDNeSzVbTDJb
+ UDJcUC9gTS5pTjNnRjFoRzlcQjixopv/+vX///7/////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////7///7////+/f3+/v3+/v78/v79///9//77/v37//74/Pz3+fjz8OvF
+ ta+IbGdpQkBrQkZ4XGaWlaaXscd+ssuLu9qZwOKaweWVvOKOtN6HrtqIr9yJr9yMr92NrtyOrtuQr9uP
+ sNeNsNiIsNqDr92Ar9+Csd6Er9iLrc2RqMCHlKVcXmlOR0ZfTkeejIfs3dv/+Pr++vz6/f/z/f70///3
+ /v78/v/9/Pz////////9///8///6///6///5//75//75//76//75/v30/vvy//r2/vz7/f789fjz5erT
+ vsK0nZ6VfHiEaWFzW05mT0NlUEVlUERmUEVpUERtUEJxUEVxUEVrTUVsUk/NvLz/+Pn//v//////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////7///7////9/v79/v78/v78
+ /v79///7//77//76///0+v70/f7z+/r3+PLe0suigX12SUhmPUFlU1yBjpmVvsyJs8qXudqcv+Gfw+eV
+ vOOMs96Ir9uJr9uLr9yNrtyPrtuPrtqMsNmMsNmNr9uOrt2Mrd+Krt6Jr9yNtNiMsc+LrMN2jqFcYGlS
+ Q0VWQkSchYjy5+r++Pr7/f7z/v3x///y/v73/v/9///////////9///8///7///6///5//75//75//75
+ //76//76//f5//X7//j7//76/f/4+f36+f768/n16u3s3uDg0tLXycjTysXUycjUycjWyMjXyMfcycbZ
+ xsLbzMnbzs727/H8+P3+/f7/////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////7///7+///8/v78/v/8/v/8/v/9///8//77//78///7+/74/v/s+fjs+/b3+/Xr4Nmri4do
+ RkdcREhaVluJnqWeucuZttOauNmiw+WdweeTuOKKsNuIrtqKr9uOr9yQrtuOrtqJr9uMrtuRrdyUrNyU
+ rN2PrNyIrdmHstmDsNGFsc6FqcKDkqReV2NUQ05dREywmp717Oz+/vr1//vx//3y///0/P36/f/+///+
+ //79//78//78///7///6//77/v/7/v/6/v/8/v///ff//fT//ff+/v36///2/f/y+//0+//0+P719vz8
+ +v79/f35/fn6+/z6+v77+f/7+f79/Pz6+fb9/vr7/vz5+/719fz8/f7/////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////////////////////+///9//39//79///8/v/8/f/8/f/8/v///v////7+//3/
+ //3//P77+v73/f71///1/fr49/T67+23o6NmUFNUQUZeVFuQl6adss2ZsdCeutuixOecweiRt96LsdqJ
+ rtmNr9qQr9qNrtmGsNuKrtySrdyWrNyVrduQsNqJstqFtNqDsteJtdiNstWNqMaDjqZaVmpXRFFfR0ql
+ k4/w6+L5/vXx/Pb4//76+//+/f/+//79//79//79//7+///+///9/v7+/f/+/f/9/v/+/f///v7//Pv/
+ /Pv//f39/v75/v7z+/z1/f32/v73///1/P71/Pr4//r5/v75/f/5+//3/f/z/fzz//rz//fx+vb5/f79
+ /P///v//////////////////////////////////////////////////////////////////////////
+ ///////////////////////////////////////////////////////////////////+//78//38//79
+ ///8/v/8/f/9/P/9/f///v////////3///38+vj///78/Pv6+vv8/f76+vr8+frx6uynlZpbQ0pdQUxr
+ ZHWLm7Wcs8+ctdWhweKfxOiXveOPtdyLr9iNr9iRsdqPsNuHr9yKrtyRrdyUrduTr9iMsdiFsteCstiE
+ sdiMsduUsNyMq9KOp8iCiaNhVWVSO0BhTUi8s6fy8+f4/fX9//7/+v//+//+//79//39//3+//7/////
+ /////v7//f///P///P/+/P/7/f/4/v/5/f78///+///9/fz4+/n6+/j7/Pn6/fr5/vv5/vj7//X7/vn7
+ +/76+f/2+//x+vn0/vj2//b5/vj+/P3/9/3//f//////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////+///8//79//79///8/v/8/f/9/f/+/f///v////////7///39/fn+/Pn//vz+
+ /f3//P3//v/+/P3++fzs3+SiipJePklRQU9xd4qgsMibss+XutmaweOdwOWatt6VrdeSr9iMsdyHst2J
+ r9yLrd2Nrt2NrtyMrtmMsdiJsdWLtNiJsNeLrdmQrt6MsNyFqM6TpcWGh59bUFtSQkNjVEzDu67z8OT/
+ /fr/+v3+/P7+//39//z9//z+//3+//7+/v3+//3+/v7//f7//f79/f71/f/x/P/1/P/7/v/+/v///v3/
+ +/j//fr//fv+/vz+/v3+/vr///f+/fr//P3/+//7/P34/vn4/vX4/PL+//n//P//+f7//f//////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////////////9///8///7///7/v78/f3//v//+vz+8vW4oqZhS05TQkdvbXqessWL
+ tM+IudiWudykr9Wqps6RmL+LrdGAsdONs9aMr9iIq9yLruWOruSOq9qUr9aVr9KRsdSLsdmDrNuFrdeM
+ sdaMrdWPqdGGk7VqaX9WSE1VQjyYh3vw6d75+vT6/vz8/Pj9/vr4/fj4/vr5//z4//z4//v6//z6//38
+ //z7//z5/f75/v77//77//77//76/vv3+vj8/fz9/fz+/f38+/35+Pr6+f3//v////39/vn9/vj9//j+
+ //n+//3+/v/+/P/++////v//////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////////////////////////////////////////////9///8///6///6///4+vr9
+ /f39+Pn9+fvr3eCNeHpYQkdbUl6IlKaOtc2Et9OGss+ZrcxubYtbWHJxepGSrMGJscuMstWUsuCSq+CQ
+ qd+RseCOtN2KtNaMstWRsNiUrdyPrNaPsteOsNeSr9eXrM6Jk6xjX2pPQ0NYSkKuo5r28Or+/Pn+/v39
+ /vz9//37//74/vz3/v33//74///3/f72+/z4/f7y/fru/vjw/vjz/vf0//f2/vX3/fX7//b8/fb9/fj/
+ /fn8+vj6+fn8+/r9/vz9/fr7/vr6/vr6/vv7//77///7/v/7/f/+////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////9///8///6///6///3/Pz9/f3+/Pz99/j99PXPvr5qUVNWQk1nZXaUr8aHt9CCtM6Kq8NS
+ WG1JPUxZSlN0dHqQrr6Ss82TrdKVqtqYs+WXu+qSvueLud2LsteUrdefrtubsdiQsNSOsNeRs92RrdWT
+ qMiEjaBeXGNORENjVU+2p6L69PH9+/r5+Pf7+/v7/v/5/f74/v76///3/P/2+f73+v75/f/1/v30/fr0
+ //n3//f3/PP2+e/z8uby7OPy6OH16+X48u36+PL8+/f9/Pj5+PX7+/n+///8/f75/f76/v/5///3///3
+ ///8////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////////////////////////////9///8///6///4/v72/fz6/v37/v3//v7++vr3
+ 7euYgX9ZPkVcTFqLlq2Ptc+Dtc+LscuHlqpfU19aQkVZR0hqcnyVprmdsc+TrdOXt+KWvemWwOqUvOOS
+ tdyWr9earteZsNWSr9KPstmNst2IrdeSsteUq8V9hpdUUllQQkFsV1LQvbn79PP//f3//Pz//f3+///9
+ ///8/f/6+/78+//+/P/9+f349vn38/Px6une1tLAtrCpnJWXhn+PfHSKcmySeXOkiYSvnZbEvLDj39X1
+ 8ev++fj//P3++/79/P/8/v/6///2//72//z8////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////////////////////////////////////////////////////////////9///8
+ ///6///5///1/fz5//74/Pz4+vn9/f3/+vXNvbdqS05YPEd7doqXr8uGstGJs9KZssyPjp9rW2JUQENT
+ RlBnZnWToLeYss+OsNOUuuKbv+qfwOmcvOSWtd2SstaRrtGWs9WRtNqGrtiFr9uIsduOr9GWqcN7gJBY
+ S1FaREOCaWbTwb/36+n/9/X/+vj///z//vz//P3++/z//f7++Pr36u7cy826o6OSeXhwWVRjS0RgRz1f
+ RjtfRTlfRDhgRDpiRDxeSTtfVUByaVeckobTycT78fP/+f3/+////f/9//75//z4//v9//7/////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////////////9///8///6///6///6///6///6///6//76//37//fu6t2Lb2lhO0Bv
+ V2mgpcKTsdiKst6QsdqdsM6TnK9jYGxXQExUQU5jXW2aobaescuXtNWau+CavuWYv+WYwOWOt9mQstST
+ sdOMsNSFrteBr9qBsNyJsduMqc2ap8J2cYBXRkxbQ0JoUk17ZmGijonDsavezsjz5uD58erq4drXxcCy
+ nZmAamVtUkhjRjZdRDBiSjRnUjhmVDdqXDxrYT5qYT9oYT5jXTtdVjNXTyxUSixXSTNgT0KjkIrd0dD9
+ 8PL/+vv++/r9/fr5+/b+/v3/////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////////////////////////////////////////////9///8///7///7///7///7
+ ///7///6//76//32//f3+O2qk4ptRUdnSFeXk7CYr9mHrd+Gq96PrtiVs9GLnbFtYG5XQU1bRFJ1ZHOb
+ lqmmtc6SstCNuduUw+aYxeeZwOKWuNuRstaMsNSIsdeFsdyCsNyHsd+Lrdeds9WUmLB0a3pVQUZYQDxd
+ RT9fSUJkT0dzX1aMd22diH6JcmhsU0ljSD5fQzZiSjFmVDBsXTZ3bUGCfUyIiFSLklmKlluFllmDlVh+
+ k1V+iVJ9ektpYjhfVDNXRy9dSzt+a2HOvLj57+v//Pn++vf9+/f///7/////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////+///9///9///9///8///8///8///8///7//77/v70/vr4/PXRvLVyTk1hQ02JhJ2ZrtaHqt+G
+ rOWEqtyHsNaQss2SlqVfTVllQ01iOUN0VmKfm62ds8uKtdSIuNmWweOjxOefwOSUuNyNstWMstWLs9qH
+ sd2HsOGHrN2QrNmcq8yQk6tkWmZaRUVYQT1WQDxlT0pZRDxfST5fRzxkSj5nSTxlRTdnSDVmUzF4cT+M
+ iVSTl1yTm1yQn1uHnVWGoVV+oFF8oVJ9pFSDnlaMllqQkluCgE9vZz9dUDJYSDFuXk66q6H27+n/+fb/
+ +vn/////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////////////////////9///9///9///9///+///+///+///////+///+/v79/v74
+ //7z9/Tm1tF0VlJaR0t1eImUrc+EqduKr+eKsOKIs9qOtdKaqLtgWGRbO0FtQENnPUJ1Y22QlamXtdKP
+ ttaTuNuiv+Wgw+qXvuSRt9mQstSPsdWNsNqIsOGIr+OJqt2UrdabrM2DhJhjUllYRUZkUVGKdnWWg3+A
+ amNsVEtXPDBlRzliQTNrSzllUjFnXzNuazp2dkGBh0yLlleOn1qSqF+Pql+MqV6JqF6JpFqNoVyOn1yS
+ m16OkltxbT9aUS1YTDNuYVHHurH99/b/+fr/////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////////////////////////////////////////////////////9///9///9///+
+ /////////////////////////v7//v78/f/38/jv4uOAaWVPRkZbanWPr8uIrNmMrOGMrdyNstiQs9CV
+ pbtcWmhXQURqRkNpQj9iREppW2uPlrKbr9GVsdaZt96YvueWwOiZv+GauNiVstOQr9eIrd2FrOKIreOM
+ rNuWsNiYoryAdYBZSU9YSU2AcHLg0tHp3trBrKZiRz5iRDlnRjlsTDxgSDJaSC1aSixeUS1jWjFnYzRx
+ cT2AgUuMkFiWnGOfpmyarGuSrmOQqmCRpl6UoV+Ok1t3dkhbVTNUTDdvZFrc09L9+Pv//f7/////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////////////////////v////////7///7///3///3/
+ //3///3//v7//v/////9/v79//79//7///7+/////////////v///v///f7//f7++f789Pzx5+qQf3xJ
+ Q0BUYWeOq8OMr9mOrd2SrdiUsteVstKZpL9cWGhWRUWIb2Wfg3pfQkBZP0lqXHGPk66cr82UsNWPt9+V
+ v+ejxOmlvuCbtdaRr9WNs9+ErN6Kr+KMrt6OsduXsNGdobVyanhMPUVWRUaml5X47urx496Gb2hhRjxn
+ SzuMc12Fclp0ZEtnWDxgVDRcUC1ZTShaTyhfUy1kVTFuXj1/bk6Fg1WGl1eSpWGXrWWTqF+Pn12QnF9u
+ dERTUjJORjaUhoXp3+P//f/////////+/v7+/v7+/v7/////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////v/9/v/8/v78//z8//r9//f8/vX///j//fr/+/z/+f3/+/38/Pr+/vv+//z8//37/v38/v39/f3+
+ /P3//P7//f//+/z/+/v+9vX38fOdj4xURT9gWl2PnbiSrtyNqtmZsdeWsNaYsNebocRkVGhkSUikjn/o
+ 3s+VhoFhTExTQUReWmKIkaCcq8qTsteUueKjvOWqv+WmweWTuNqKtNeMsdiRsNuSst2IsduEr9WSrs6T
+ ma9oWWJXQT9pWFC/s6z48OzArKhrU0pgSzV5bkuVl2qapXGNl2KFj1lyfEZscz9gYTRbVzBbUDJaSTJb
+ RTNgSzRiUzBybj+Rml6armiQrWCMqWB+lVVncEJUTTNlTknCqKv9+Pn///7///75+vj7+/v9/f3////+
+ /v//////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////v/+/v/9/f/9//39//v8//j7/vj7/fj4+vj7/Pv+/f7+
+ +/3//v/9/v35/f33/Pz1+/v1/Pv4/v74/v36/v78//79/v3++vX/+vfz6+2cjYlYRT5fUlSNmLKTrtqO
+ q9iZsdWVsdWVsNeYosVjV2lgSESXiHjz8eXp4t2eiopbR0ZNRUVZWWOSk66erM+Xsdacud6fwOOdxOea
+ wuSTt9uUstmUrteQsNmKsduJsdqRsNWersmGgpJkVltTQUF3ZWTg0NDt4+CVhHpeTjtZTjB6ek+cqHGe
+ qnGXpWqTpGaPn2KLmF+AiFV0d0ppZ0BeWTZdVTJTTCVTVCSCj1KXr2iOrF+PrmGNpWGDjFpjWzxbQDSP
+ cXDt5OL8/fv+/v35+vj7+/r+/v7////+/v//////////////////////////////////////////////
+ /////////////////////////////////////////////////////////////////////////v///v7+
+ /v7+/v79/f37/fz8//75/v34/Pz4/v35/v3++v7/+f7/+/79/P77/f74/f34/v32/vr3//n3//n4/ff5
+ 9u/p3NacjY5jT0taQzleUFCIkKmUrtiQrtiWstSRstOQsNWPosBcWGVcTEeckYPs7uT7/Pv36+2nkpBd
+ TkxLQUVeUGOVi6eiqsiUttGHutaPxOOaw+aivOSgtd+Xr9qOrdaNr9iRsdmUrtWWrtCWqMR0doxZR1hd
+ QUyWeX/25ePl29N6bWBcSztbUjN7fFCXm2uapGyXpmicrGybrmqYrGeXq2iSpmSJnFp8jVJwgEl2iE2N
+ o2KTr2iTr2aVrWeUomaam2yAclJlSjhhRTzEu7f6+/n+/v37+/r+/v76+vr////+/v//////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////7//v3//f///P/++//8+/38/f73/Pv2+/j2/fj0+PT67/P05Orp2t/j
+ 19vh2Nnf2Nfc2NXb19Pb2NHa19DZ1c3Etq+PeXRVQUJcQz5aQDZWRUSBiZ+VrteRsNmUstKOstKLsdOP
+ pr9cXGZSRj+XkYTu8+36/v//+fvw5OKnl5FhU1FWP0pqT2KSi5+at8qGvNGIv9uWvuCqv+iou+ectuCR
+ sNmQr9aUr9WZtNqOsNeOr9aImr5mXHpbPFBnRU3DsKz58uvIvbZwXldZSjdaUTB4c06SlWeYo2uZqmmW
+ rGWUr2KSr2CSsWCSsV6Oq2KOqmqOqWuNqGiRq2iWqmqZp2yZnWmXkWd+bk5nTTlgRjmRiYTx8fD+/v33
+ +Pb+//7+/v7////+/v//////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////3///z//v3//f///P//+v//+v/+
+ /P749fTr6eHKzMCop5mbiH+SeHCBaGF6Ylt4YFl2Xlh0XFVzW1V2XFZ3XFd2WlVsT0pgREBiSkx1WFJi
+ QzdfTEiBhpuVr9WRs9qQs9GKstKIsNGPpLtgXGZaSUWTjILp8O30/P/59vr+/Pjt596nmpJlS01cOkJs
+ VmOEjpqOsMGPuNGWuNmkvualv+mfvueUuN+SsteTsNKRstSIsNiGsN2PrNqIiK9gSmRiREx7ZWDWx7/3
+ 8ezIurl6aV9XSTRaTzRoZEGFiFuQmmSUpWaYrWeUrWKSrF6Vr2GTrmaQq22PqGyQpGyPnGeMkWCCgVZy
+ akVkVjhfTjVaRTFYRTaBe3Xq6+n+/v39/fz+/v3+/v7////+/v//////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///+//38/fn+//v9+/v++fz/+f7+9Pnl29q4q6WCeGlgWERZUDdeTzJeSy1eSS5jSjNoSzhoRzhmQjZo
+ QDlrPzttPzxtPz1oQT5qTEmmj4/IrKR5WUtYQz58gZSXsNWQstiRs9GJstGJsdKUprxfVV9gSUeajYXt
+ 8vDy/P/4+v7+/vr9/PD17+OkjopsTU9cQEVlWGGOkqGfssiYs9CavN6bweadxOmavuOVt9uRtNWNtdOG
+ sdaGsd6Fp9iXps54dI1ZR05iSEKSfnTx5+L89/fXy8d8a2FaTDxSSzNSUDFjZT16gVGHkFuPmmGSnmKW
+ oWOSnmSKmGOFkWCAhlpsa0VdVTRbTjNcSzVaSTdhUD9tXk+IfG/Gwrz6+/n9/fz+//3+/v3+/v7////+
+ /v//////////////////////////////////////////////////////////////////////////////
+ ///////////////////////////////+/v79/vz5/Pb8/fj49PL89/fz5+e8qqeCb2ZjUEFZSTJWSCpc
+ Ui1eXCpnZTBwajp0aD14ZUF/ZEd9XEZzSTtuPjZzPztxPDtsQ0CTdXPy4OHmz8d2WElZRj95fpCXsNWP
+ sNWTtNKJsdGMstSZpb1oVWJmRkafioXy8vD0/f/x+Pv7/vr1++76/PDq39qkj4tkSEhePENzVmWgma2h
+ ssqNtdGOvNuXw+WexOeZvuGQuNeKutSHs9WKr9yNr96PrNONnbRoZW1ZQT1oTkfEtK/9+vn++fjc0Myh
+ k41lWk5QSDdNRzJRTTNcVzpnYEFrY0JvZUJtZkFjYTldWTVcUTVZSjNbRjdeRzxvWVGRf3ewoprTysHt
+ 6OD7+vb7/Pr8/fv9/vz///7////////+/v//////////////////////////////////////////////
+ ///////////////////////////////////////////////////////////////+/v77/Pn8/ff9/vb6
+ +PLVzMSOfnNtWkpbSDFcSy1pWjV2aj6Efkt9kEt9lk+HmVaNlluPj1yMgll8aUlqTzdoRTVtRTtoPzll
+ RUCmjY3+8vTp1dB1WUpaRz91eIuWrtOPr9aTs9WLstaOs9iapL5qVWJsRUemiYX28fD1/f/x+/31//rz
+ //P1//L9+/jx6eWdh4VzR0xrOUR4WmqQkqOSsseNudKRu9mcweOfxOeUwd+JutWLtNSQsdmQs9uLs9aQ
+ sciHlqFaTVBXQD9+bGjf2tX89vL++Pj47evUysWdkotwZF5hVExbSkJZRT1eRz9gRj5aRTdZSTRgTjti
+ Tj9vWU+cg4DFra3j0NH15+f58PD9/Pr8/fn9/vv9/vz+//3+//3///7////////+/v//////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////+/v7+/vz//ff38+q+t6pxZ1NVSjBYTSxjWTF5c0OPjVeUl1yRm1qDoVd+oFaEoFuI
+ mlx6hU5oaTpbVC1TRiZpVj1zXEliSjpfSUGyoaL+9fjx39p9Y1ZVQj1ucYWXrdSTr9iWstWNsNeNsdmX
+ pMFnVGRtRUeqiYX38PD4/f/2/f/w/vfw/fX1/vj89vn++/ru5OGtiox6S1NjPkhiVV+Jl6SZtceVtM6V
+ tdagxOeawuaWweCVudqTstWQs9WJtdSLtc+VssZyc4NURk9bSEmbjIby6eX//fv++fj++vj48O7p4uLE
+ ubq0o6afi4+Wf4OVfICYgH+di4OunZTMvrnr3dv+8PH/9fj/+v3/+/37+vv2+vv2+/r8/v3///7///7/
+ //7////////////+/v//////////////////////////////////////////////////////////////
+ ///////////////////////////////////////////////+/v7//fv/9/LDua5wZlRVSzBbUy1uazyG
+ iVCQmlmKm1WHnlWMplyHo12OqGWNomJ2g0lbYi1OTh9XUyplXTiJf16FeVxdUDhcUEPDubj/+v3z5N97
+ Y1dUQz5qboKXrNWWsNyWsdaPr9eMr9qQpMRgVWdoRUiqiYT38e76/P34/P70/fnu/PT2/vz/+f/8+vz6
+ +vfr3tyihYZkQ0ZaP0VmW2WXnaylt86Zs9ObuuCevualxOufveKVttiPs9KJs9KLtNWStNSElbBgYXJR
+ PkRxVVLNu7b++vb++vf//Pv9+/vz7/D++Pn+9/n47fDy4+jy5Oj17O748O778O399fT//Pv8+Pf7+fn4
+ 9/j4+vv7/v/2+/z2/Pz8//7///7///7///7////+/v7////+/v//////////////////////////////
+ ///////////////////////////////////////////////////////+///+///+///////////////+
+ /v779fPJt7RkU0hURy9cVDB3d0SKklSLnVaKpVeJrVuItF+ErV6ZpmyNj1xucD1YVSNWUCBfWit6c0ec
+ lG2mnnl3bkxSSipza1re2tr79/v26eV9amBVRkJlaHyXq9KWsdyXsNiQr9qNsNyIpMVZVWhkRkioiYT3
+ 8e78/P34+/35/vv4//r4/Pz/8///9//3+/n2+/by7OieiYZ0T09kP0ZrV2WKjKGestKYs9mbtOGnuuuk
+ v+mbwOCUu9ePs9OMsNeJr9qLrNGAjqheTVdnPz6Ea2Xq4tz+/Pf9+/b9/fr9/vz+/v35+vj7/Pr9/v39
+ /vz59/X8+fn9/v37/Pv4/Pr4/fv3/fv4//z1/vv2/fz1+/rz+Pf7/vz+//3+//3+//3+/v7+/v7////+
+ /v///////////////////////////////////////////////////////////////////v///f///f/+
+ /v78//77//77//78/f/8/P7+/f7+/Pv+/PrYx8aAY2FaRTViWDd5e0ePmliNnlWXrWCTrF+Nq2CQs2mI
+ pWSAgVtsYkBcUipXThxmYSqChEmbomigpnGTkGVoWzpeRy+Zh3rx6+n7+Pv26+yAb2pTQkFmYXCcq8uU
+ r9qRsd2Lr9eQs9iMpMNcVmdjR0mhioP18e/8///7/f36/fj6//j8//r/+v//+P78/P7y+fb5/Pfo3tmt
+ jYt1SExhOUVnUmWTm7aUsM+NstuVteegv+ykweOjv92duNmNrNOLr9qPsNmYqMZ5bXxjP0JoQEO7pab3
+ 8vD0/fjz/fb8/fr//f7+/f78/f34/v33//z7//z+/v77/Pz6/Pv6/v34/Pr3/fr6//75/v35/f38///7
+ /v79//7+//7///7///7//////////////v//////////////////////////////////////////////
+ /////////////////////v///P///P/+/v78//z5//z5/v74+/36+Pz//f/89/bu496Te3VjRDpfUDVu
+ ckGInVmMrFyStWGRrmCVq2SbrW2Jml5teEVaUzpSRi5aUCx1cj2UmVmcq2SXqmSZqGx7e1BcTC90VEbH
+ sKb89/P++/337/OFdXZWQ0NnXGWiq8aSrNiKsOCGrtWQstKTpMBfV2ZiSEedioPz8u/5///8/v79//n7
+ //X8//f//v7/+//++/73/Prz+vX9/Pb15N+shYdvP0poRFVjW3GJnLSLsdOGr92XuOSsxOmsv+KettqP
+ rtaNsNyPr9idr9CUkqZtV2BoP0iAX2XSzs3n+PDx/vf6+vb//P7//P/9/f/4/v/3//36//z9/v7+/v7+
+ /v7+/v7+/v7/////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////////////////v///P///P/+/v78//z6//z6/v34
+ +vv7+Pz//f779PK3q6NdTDtZRyttb0F+llaCrl9+tF2BtV+Hr2KOqWeEk1hmazdYVilYUTBYVTN3fE+O
+ m2GVqGWYq2abqWiWnGZnYTtWSTCDbmPr39f++/f//P748PSLfH1WREJiV1+jrMWSrNaHr96IsNeQsdCU
+ pMBhVmZiSEedioPz8u/5///8/v/8//n5//X4//j+/v7//f/8+vr4/v30/vr1/vf8/fft2tqdfoRjR1JI
+ OkldXm6NobiRs9eQr9WivOGkveOTsdqNst2Hr9uMsdmXstOmsMaEfItlR1NcPkWVjYvn7uX3/vX6+/b/
+ /f7//P/9/f/5/v/5//37//39/v7+/v7+/v7+/v7+/v7/////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////f///f/+/v78//z6//z6//77/P7++/7/+vvr4t55bmJVTTFgXzF8jVGEp2B7q1t5r16CsWeG
+ p2h6jFZiZjhVTyZWTiVhYjV5hVOQpm6OrG2RrmyVqGmfpW6AfE9WTC1cUT2ln5T9+vL9+fT/+/348vWS
+ g4RYRENfUlqkq8WSrdaHr96KstqSsdGUpL9iV2VjR0edioPz8vD5///7/f/6//r2//f1//n7/v/////6
+ +vj2/Pny/vny/vnz/Pb5+/ni19mId3xSPkZVQUpwbHqVqb+Zsc+Sr9OWteCLsN+GsN+CrtmKtNqQsdOf
+ tNGUnrRoXmxXQ0plVVXVzsb8+vD+/vj+//39/f/9/f/7/v/6//37//7+////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////f///f/+//38//v7//z7/f36+fv/+v399vW4rqdZ
+ TT5UUi9reUOFnl6NrmiLr2iNrWuInGRsc0daVzNXTS5dUjRwakaOml+QqWeLrWuFqmeRrnCVpG+Ih1xi
+ VjVZSTR8dGXi49n9//f+/Pf//v789ficjY1WQj9dUFWiqMGVrtiKseCKsdmUtNSUpL5iV2RkSEafioP0
+ 8fD5/v/6/f/6//z1//jy//r6/v/6/f35/vr6/vzy+/jy/v3y/v7x/vzz+ffc19aIdHNhQEFcREhucHmY
+ prmZsdOOr9yFreB/rN6Cr9qKtdmKsdOOrtGUrs9/iZ1SSU9VQEKcg3/57eb9/PT5//z5/v78/v/+/f/9
+ /v79//7/////////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////////////////////////////////////f///f/+
+ //38//v8//z9/v79+/3++Pru5uOKfHJYSTdaXDeAlV6NpGiXqm2apmuJhlRtXzlhSi5cRS1lVj2AeV6T
+ mXGTrGiLrWCLrWSMqmmUqHGJjmNhWjtXSTRxY1bHwbn9/Pj+/vj///r8+vz89/mmmJZWQj1cT1Kdo7mV
+ rtaLseCGrdWVtdSWpL5jV2RlSEagioP18fD8/v/9/f/8//z2//jz//r6/f/4/f31/Pn8/f38/P35+/31
+ +/7x/f7w/fz2+/ff0s6Qcm5jRUBVSERvbniZp8aSrduIrOGErd6KtN2Ls9aLstWMstuLsNqSrcZhZG1Y
+ QUZ0T07QuLH79+72//r1//37/v///f/+/v79/v7/////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////f///v/+//38//v7/vz9/f3++/z9+PrTyMNyY1dYSDJvcUmLomiSqGua
+ qWyLjldrYTFhTSZjTCtzYUCIg1+TnnOQqHGOsmaOsGKUrGabp2yNkGFqZEJSSDFXTD2qoJj18e7+9vX/
+ /Pn///r7+/39+fq0paNYQz1eUFKZnrSXr9eJr96IsNiRsdGXpr9kV2RhQ0GMdG3d1tT6+fz//f/8+vb4
+ /PP4//n7/f75///0+/n7+Pn/+P7/9/7++//5/f/z/f3y/Pn7+fTg0cqCaF5YQzdOQkZ+gJuYp9KXseKO
+ rtuRs9mMrtGLr9SJsNyHr+CQtdR+i5ldSFRuSEuVd3Pt5Nz1/vb0/frz+Pb//v/7+vr+////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////////////////////v/+/v/9//38//z8/v39/f3/
+ /f7/+/uwoZpdTDtiUDaKiVyZrW2UrGeUrGZ6jUpRXR5ZXyV7fkiWnmaXqWyLqmWKsWeIrWOVrWmZomeH
+ fVBsWzlZSTJbUUOempLx7er/9/j/+/7//fz7/fr6+/z/+/zBs65aRT5bTE2Tl6yYr9SJrtuKsdqSsdGR
+ orpgVWFoR0ddQTprXluvp6rp3eH28uz18ejz8ur17e3v8O7u8u728fH67fH+6PD/7fT++Pv2+Pj4/vv5
+ /fj9+/XczMKFa15bRUNTSVlxcI+ao8mertScs9WZttiPsdeJr9yFrd+GsNWUq8N+dYVcPkRnS0i1qKH5
+ /PX2/ff3+/n8+vr+/Pz+/v7/////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////v/+///8//38//39/v3+/f3//f/89POVhHtZRjRwXD6Yk2OfrGuSq2GPsWSCqlprk0VylkyH
+ pl+PrGWMq2COsV+QtWOQqmuJlGB6dElpVTRfRzBjUEKelo3m5uH6+fn++vz/+fz//Pv6/fn5/P3+/PzK
+ vbZeST5ZSUiMkKKYr9SKr9yKsdqSstOSo7tiVmJjQT9lRT1RPzxiU1WMd3mmk4ufkoOdk4ajko6blI6W
+ k4ugkIqsj4u8mZfGqqjTxsLh29Tx8ev4+vP9/fn68urUwrl4X1tTP0ZSRFSLhZ+utNChss+Vr8+UstiM
+ rtqJr92Gr9iXs9KUmK5gTlpVPj5+bmjs6eP7/vn6/fz3+Pj+/v7+/f3/////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////v/+///8//38//39/v3//f3/+v336+mCcGZdSDN7
+ ZUWnnG+iqG+XqWiPrmaLsmaIsWaLr2iQrWuTqWqWqmiSp2GDlVN0dU1kXD5fUTdVQy9vXlC4rqTv6uT8
+ +/b6+/r8+/z59fn9/fv5/vr7///8+vjRxLtjTUFXR0SFh5mYr9SLr92Ir9iPsdKUpr9hVmJlQj93VU11
+ XlpZQ0VgQkNlSD1iSzleSjlhRT1cST5TSjhYSDdgSTdnTTtpUDxqV0V4a1uWjoG/uK/n39v79/P98+7R
+ vbhuVlNaQkRiUVqNi5qgrMOZs9KQsNaNr9eQsduJr9uNrteXqcd3doZRQkddSkbCtLD9+vb6/fn5/fz9
+ /v3///7/////////////////////////////////////////////////////////////////////////
+ ///////////////////////////////////////////////////////////////////////+/v/9///8
+ //38//39/v3//P3+9/rz5+ZyX1RcRS97Y0KfkGqTkWmRmmiJmmKHnF+HmV+KlWCPkWOMiF6BfFJtaz9f
+ XDNYRC5ZQzVYSDqBd2vIwbf8+vH7+fT+/fv7+/v1+fr1/P3z+fj5//r7///8+vjbzcRqVEhVRUJ8f5CZ
+ sNSLsN2HrtiPsNKTpb9jWGVpRkOjf3fPt7JqTk9lQD9jPzJoSTRmSTRoQzhqTj1kVDtgUzVgUjJiVDJe
+ Ty1fUDFQQSdSQi5mVEmOenXPwb/38/L88u67ophwUkZcRj9fWV6FkqKeutmMsNSOstaQr9aKq9yKrd2U
+ sdSFk6VYUVdWPz+SeXfp3dr3+vb5//75+/n///7/////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////////+/v/9///8//38//39/v3//f3//P3v5ONkUUdiTDdrUzVuXUBjW0NiX0Jg
+ XjxnYzxsXzxwWj1xVD9xUkFpTT5bRTVaRTZnSER/ZGGpm5Xd2tP2+PH7/Pb+/Pj//fv7+vr2/Pzs+fjz
+ /Pv4/vr6/v/8+/rl2dJzXFJVQj94eYiYsNCKstyJr9mSsdWRpL5eVGFpR0Oph33w5N1uUVBqQkBtQzZn
+ Qy1oSDFxSTqAX0uJdlmJgFyBglZ8gU54fUhxcD5tYzljUTFeRjRgRTx1Yl+tqKjs49726Ny2nIxiTD9M
+ Q0FcYm6LobuXtdWQstSOr9SLrN6Gq96NsteRp71ycnxYQ0ZqUU7DtrH5+vT2/fr5/Pv+/f3/////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////////////////////////////////////////+/f/+/f/+///8///8//78//3+
+ /vrx7edsX1dUQzdeSjpZRjhWRjlVRjlVRjdXRzdZRjddRjlfRjtlS0NqU0t4Y1uTgHnCtLPk2tr59vX8
+ /Pr7/Pr9/vz///7///7//v79///5/v75/fz8/vz5/v76/Pzq396CZGNgQEJ2cXuNrcCBt9SIr9ebrtiU
+ o79eV2FhSD+hjXvt6N57Y2BrQ0N0ST95VkNhRi9kRzVmSjpzYEqDhV+Em2F3nVJ9plCFoU+KmE6Ihkx4
+ akNlUTdbRzZdTEGOgXjs49727eibjopVRUFWRER2a3OlqbyYsdCHsNmCrNqJr9+QsN2br9SOlKxYUlpR
+ Rz6DfWzx8OH5+fX7+Pv8+P7/////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////f///f/+///8///6//76//z4+vb29e+4saqmmZKkkoulk42llY+llY+llY+llY+llY+llY+m
+ l5C3qKHQwLro2dL78Ov7+fj+/v78/Pz5+fn9/f3////////////////////////+/f39/v35/v74/fzw
+ 6OmNbXFlPUNyaXCMr7l9uM6JsdidqtmZosJjWWZeRz+fjX7w7OKTgoBkQ0R0UESZgGiCdVVnWz1aRS9f
+ SzRhXDdxfkaHoluIqFeHp1KMpVWPn1qJk1p3fU5iYDpYSzBURDSYiofh2dri3d2JfHdhSUNfREJ8bXmd
+ qcWHrtaKtd+Mst6NrNqXrdmfq8tscH9HRDtdWEXMx7X//vr99/3//P//////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////f///f/+///8///6//75//z0+PP6+/X59e758+z4
+ 8Oj69e748+z48+348+348+348+379/H69e/79/H++vX++/b//fj7+vn8/Pz+/v7+/v79/f37+/v/////
+ ///////////////+//76/fv7///2+/r17/CYeXxlPURrXmeOrbh9tsyMs9qcqdicocVmV2tgREShjIL1
+ 7Oa2qalfR0ZiSjmTiWifo3eFiV5vZkJgTi1bSCRmVS19cUKTkFyYo2iSp2eFoF6CoF6An150ilBcYDZY
+ TDJfST+ciojw7OnZ1c6BdGtdPzxgR1F/f5aXtNWKr9OKr9iOsN2Nqtags9aJkqdMSEhUSj+aj4L89O/7
+ 9vn//f//////////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////////////////////////////////////f///v/+
+ ///8///6//75//34/vr7/vn+/vj//vj/+/T//fj+//v+//z+//z+//v+//z+//z+//r+//r9/fn5+vX6
+ +vf///7+/v7+/v78/Pz9/f3///////////////////////////78/fv9///2+vn59PWojI9nQEZkVFyO
+ prGDts2OtNqcq9qbn8VnU2tkQUehiIX16urVzNBsXF1aUTxpcEaOo2qUqG2WpGx/gE1uXTRpSChuQyp3
+ UzuKfFyTm2+OqW+Fq2KCrFh8olJ+lFdlYDZjRzFjSD6yq6T0+O7T0cZ6YVtdP0JbTFmEkKSctM6Pr9KM
+ sdiHrdiUs9qbqshnYm5URUVvW1fazsn//vv5+vn/////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////v7//v7+///8///6//74//z2/fn2/Pj7/vn8/fj+/vj8/fn6//z6/v36
+ /v36//z6/v36/vz6//z6/vz5/fv4/fr6/v36/Pz9/f3////+/v78/Pz+/v7////////////////////9
+ /v39/vz+/v75+/v89ve8oqVqRElhTlaJm6aJtsyNsdacrtmaoMRpVmxjQUaYfnzy6evr4+uQg4dPSTZV
+ YDWAllySqWqNqmeRqmiNj1x9aERyTjVqRjNiTTRyb0yGlF+SrGWTsV6LrFaFpFmFiVFtVTRlSjdxZVrg
+ 4df08+jAr6ZyWFZWP0JgWWOQmayYstCJrtGFsNqOs92ar9OHg5lXRE9gSEmunpr59e/7/Pf/////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////////////////////v7//v7+///8///6//75//33
+ /vz0+/f4/vr4/Pj7/vn8//37///7///7///7///7///7///7///6//76/v76/v76/v38/v78/Pz+/v7/
+ ///+/v7////////////////////////8/fz8/v39/f38/f38+PjLtrhrSExgSVCGkJmOtcqMr9GZr9eX
+ pcJrYG5hQkOMc2/u5+j88/3IusFhWEtLTyxdaTeWoWuPrWiDrGGRq2uao3CBfFVnWzpbTy5VTSZhXy5/
+ hkaYoliesWGOrVuXpWJ/dUdlUDRgTT6knJD08uf07+azo51nTUlbQENnYW6arMOStNKDr9WErtiVr9ef
+ n75sW25YQUl9a2jg2tD///j///7////+/v7////+/v7/////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////+///8///7///6///6//76//76//76//77//7+/////v///v///v///v///v///f/+
+ /f/+/f///f/+/f/+/f/////////////////////////////////////////////8//77/v37+vr9/f3/
+ +/vh0tF8XF5eQ0h3cnyYs8iTs9WTsNSTsMNydXhXQjh7Z1no3tv/9/7/8PzGtbRnWkpWSTFzXUKZlWST
+ qGSQsGmFrmaBq2OQsW2HmlpscTZcWSNRThxjYzKRnF+WsF+PrmGLnmJ1c0piSDNxU0nPv7j3/fTz+O7I
+ tq55UExeRUlbXWqQoLWNrsuRttqPrdOfrdGQj6xRRVRYSUudkIn//Pb7+/n8/Pz+/v7+/v79/f3/////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////////////////////////////////9///9///8///7///8///8///7///7///8
+ ///+/////v///v///v///v///v///f///f///f///f///f///f//////////////////////////////
+ ///////////////7///7///++/38+/z+/fzt4+KRcnNgQEZpX2mZrsKQsNCOsNKRs8d6goVYRjtwXU3U
+ zMb9+Pz/9f705eafkIVgTD1tTD94Xz+almGXp2mMrGeJtGmFrWGQrGSSomF+iE1faTdqd0qPo2uTr2CN
+ sWONqmuHj2FoUDdlQjiqk4/4/Pf0/Pb17Oe2kI1fQ0VPR090eIeZrMWUsM+Rr9KYr9Ggq8dZWWpNREdx
+ Ylz27Ob7+/r7+/v+/v77+/v+/v7+/v7/////////////////////////////////////////////////
+ ///////////////////////////////////////////////////////////////////////9///9///9
+ ///9///9///9///+///+///+///+/////v///v///v///v///v///v///v///f///f///f///f///f//
+ /f/////////////////////////////////////////////6///6//7//P7+/Pz9/vz58vGniolhP0Nj
+ UFyUpLiRsM+NsdSOsc2Hj5pbSENjUEO1sKr4+Pv7+P379fTp4dmVhnxmRUBhQzF1Y0GKh1uZpG2Pp2aP
+ rGaQrGaTrGiOpWaLoWmLonCLo2qOq2KIrmKJqmuRn29vXUFjQTaNcnD38vL1+fn9+vnr2diKcnJPP0JX
+ T1iSl6mesMmYtNKRsdGWsc1yf5JGQUhfSUnQwLz9+/v7+/v////8/Pz9/f39/f3/////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////////9///8///9///+/////////////////////////v///v///v/+/v///v//
+ /v/+/v///v///f/+/f/+/f/+/f/+/f/+/f/////////////////////////////////////////////6
+ ///4/fz//P/+/f7+/v3/+ffIrKxlQENcRVCGkaWVs9GPstiOr9SVmbFiTU9aRj6TkYr2/Pz1+fz7/vn4
+ +/Do5NqWfXtmUEdXSDVdTzZ4bEqSjmCYnWaYqm2SqmqUr2+TrW+Qp2yTq22NrWeLsWmMqmyYp3Z6b1Fb
+ QTR8YF7t4OT+/P/7+vz79fbXxsRfRkdWQUdwaHSkrcKas82OtdOMtM2HoLNSUVtbQkWfh4fw7Oz7+/v9
+ /f38/Pz9/f39/f3/////////////////////////////////////////////////////////////////
+ ///////////////////////////////////////////////////////9///8///9////////////////
+ /////v///v///v///v///v/+///+///+///9///+///9/v78/v78/v79/v78/v79/v7/////////////
+ //////////////7///////7///7///77//33+/n//P7//v/8/fz8+vfoz8xqSElWP0d4f5KVsc6KrdSQ
+ r9ikp8VuWmNYREF3cm7n7ezy+fny/PX1/vP4+/Hn2tail5NeVk1SQzZdRzRrVzt4bEiDhliNmmWPnmiU
+ oWmaomuSnWWLo2aPqG2PoWuZn3R9c1ZdRThvVFHk09b48vf5+/31+/v49PGVf31fR0ldS1SLjZycs8qJ
+ s9CMt9SOqL9pZ3ZXPUWAaGre2Nf9/Pv6/Pv4+/v7//79//7////////////////+////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////9///9///9//////////7///7///3///3///z///z///z///n8/fT6/fr2/f74
+ /f7//fn26t+AbGFTRUFhY3CYqceTsNaStdWfsst5coNWQ0tbSEzi2Nr8+vr7/Pz4/Pn9/vr++/f79fTP
+ xMOQgH5oVlBbRz1ZQzddSDhgSjZmTjdtUzxyVT1sVTxiWDtkWT5qWUFqUz5oSjtlRj5mTEbYy8b8/Pj3
+ //zy//r1/fvZ0M17ZGFiSUlfWWGPorSOstKTsdejrtOJgZlaSFRaSEi1qaX39fD0+/fv+/nz/v73/v79
+ /////v/////+//77//39////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////////////////////////////////////9///9///9//////////////7///3/
+ //3///3+//z+//z+/vf+//j3/fvy+vz5/v///vr79+yfjn9SQzxVUl6UnbqdtNmSs9OYsMuIi59QQk5c
+ Rky+qq7/+Pn7/Pv6/v73+/n+/Pr++fj++fnu5+fJvbyThIF4ZmBhS0RhST9kSTxoSTxnSDphRjdYRTRY
+ RTVdRTdhRDliQztdQTpqVE7a0Mv8+/b3/vnw/fny+/n38vCznpphR0NTSUt6hZOWsdKUrNSjrNKdmbRe
+ UWBWRkiQgX318+73/fnz//3y/f31/Pz+/v///v/////9//36//z9////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///9///9///9///////////////+//7+///9//79//79///7/Pj+/vr5/v/3/f/6+/3+/Pn38eWZhHZZ
+ RT5RSFCCg5ygr9KTsNOUsM+WpLlXU2BbRU2Ven7z6ur5+/nz/fvy+fj+/P3++vn8+/r9/Pv8+vjx6ube
+ 1dDIvba3qaGjkomXhHiUgHWVgneVhnuUhHiVgniXgXqYgn2XhICxoZ727uz9/fv2+/n0+/r7/f779fXZ
+ ycVqUUxPQD5XVl+aq8SdstScrtGlq8drZXhQQEZsW1jq4d35+/j2/fv2/v75/v7+/v///v/////8//76
+ //79////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////////////////////////////////9///9///8///7///8///7///7///7///+
+ /v79/f38/v/6+//59vn99/Tcyb9rUURcQzxUREpxan6jqcmYr9WSstSSq8Rka3tUQEl/XmLh0dD6/Pnt
+ +vbx/Pv++/7//v/8//37/fv4+vb7+/f8+/f+/Pj++vT+9/H/9/D/9/D/9/D/9vH/9vH/9fH/8/H+8vH8
+ 8vH89PX++vr8+vr9///7/f7+9/r67/C3paBmUEdUPzlUR0uGjJ6dsMuWr82gsMyCg5tOQExcSEnKvrz9
+ /fv5/Pr4/Pz9/////v/////////8//77//79////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////////////////////////////////////////////////////////////////9
+ ///8///7///6/v/6/v/7/v/8/v/8/v/+/v/59/r8+//9+f7/+/706OaljINYOy5iRDxYQUVkVWOdmrae
+ rdeSs9mMrsp0hZlUQ1BvS1DDpqX4+fPt/Pfz//7++f79/P36//36/v35/Pr6/Pr6+vj+/fv+/vv8/fr9
+ /fr+/Pn/+/n/+/v//Pz//fz//Pz/+/z59/n5+Pn+/P79+vz++v3/+v3/8/ri09R5aWNZQzdcQjdeRUNz
+ bHeYp7mWs8yWsMqRmLRSRVZXQ0ShkpD9+Pf+/Pv8+vr+/v7////////////8///7///9////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////////////////8///7///7///4/f75/P/7/P/8/P/9/P/+/P779vr//P/68vbz
+ 6uq9qaRtUkhsSz96WVJiRUdbRk+Je5Kkq9KUstmOt9WFnrRiV2ZjP0aTc3Hr6uHv/vfy/v3++v7+/P79
+ //79//78/v35/Pr3+vj8/f38/f39/v79/v7+/v7//v7+/f///P/7/P/5+//6/f/7/P77+v3++v789/r+
+ 9/r98/fy5OmYgYFiUEhjTT9/YFNpRkFfT1OIkZ6VtMiWtc6bqcdfVmpYRUd8aWjv5OL/+vn//v3///7/
+ ///////+///9///9////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////////////////////////////////////////////+///8///7///5/v74/Pv7
+ /f79/P7/+/3/+/z/+vz/+Pv27u/Qw8KahoJqUElhQjh3U0nQrqeAYGBeQ0hsWGehn8Kas9eMt9WQsMp8
+ eIxePkpmR0fFwbfw/PLy/Pr++P3/+/7+//3///7////////+/v7//v///v///v///v/+/v/+/f/8+/76
+ +v76/f74/P76/v/6/P79/Pz++/v/+vrw5eXHs7SUentcQ0BbST2AaVnWtKaGYVhZRERrb3eRrLyXtc+f
+ r9F1cIhVREdjUlDSxcP/+Pb//vv//Pr//v39/v79///8/v79/f7/////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////9///8///7//77/v35/Pr8/Pv//f3+9/f/+fj/+fjc0tCll5JwXldfSD5hRjllRjl2VErU
+ s6y3mJdgQ0VaQ02MhqGgs9CMs9CRtM+VmrNbRFNaP0OSiYHv9enw+PH//f///f7//v3//v///v//////
+ /v7//////////v///v///v/+/v/7+/75+v78/v/9/v78/f38/Pv++/n37erWycSVgn5qVE9aQTpdRTpe
+ STl8YlLpzb+piX9ZREBTUlaPobCdts6bq82NjqVYTFFWRke1pKT79PL//Pn//vv+//z7//79///+/f/+
+ /P7/////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////////////////////////////9///7///8//77/fv5+vf+/fn89/H58+7ayMSb
+ jIRnWE1cSjtbRDNlSzhmSDZnSDlgQjeVeHLkx8SBZmVeRkptYG6YobWTssyRs9Khsc1yan1XREpkVk/R
+ zMH6+fH//fz//fz//v3//////////////v7//v7//v7//v7//f/+/f/9/P74+vv8/f38+vv9+vj++/fw
+ 6OLUxb2Qf3RiTkJeSDpeRjdhSzpfSTZjSTdkRTS6mo3fw7laSENPSEtzeIWmssqgrs+aoLdkXmNOQkKN
+ fX3x6+n/9vP//vr7//v4//36///+/f///P7//v//////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////////////////////////////////f/9/v/8/v/6
+ //77//39/vr7+/X++/Lt5Nu2pZt3YFdjTkFYRjRgSTRjSDBnSi9nSTFsTjtjRzx2XFbq0M2oj41dRkVZ
+ SEuCg4+cssqXttaXrs+IjKJZTlZXQ0Cikoj28Ob+/vj9/vv8//79///9///9///9/v79/v79//39//39
+ //3+//39//37/f39/fz+/Pr++vXbzsehkIV2YFRZQDFgRzViSTVeRzFdTDNaRy5sTzptSzuWeGzo08p1
+ aGRRR0tgWmeipLyjrcyhq8BtbXFNRkVyZWTm29n/+PT///n6//r3//36///+/f//+////v//////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////+/f/9/v/7/v/5//77//z9/vj49e3TysCFdWphSz9iSTxeSDZtWkJ6Y0ZtUTNp
+ Si14Wj+Ga1VeRjlgSULTvrzh0M5/amZUQj1fWV+GlKqVsdKTsdOYp79xa3hZQ0J1XlTMv7P9/vX5//r5
+ /v/6///6///6//76//35/vz5/vz5//r5//r6//r7//r9//v+/vns5N6+samAbGBgSTpiSTZrUDt8YUl2
+ XUNjTTBcTy99bE1+YEluSzx5XlXbzcWtpaJaTlFZSVaOhpymrMumssd+goZRTExbTk3PwL3//Pj+//r6
+ //r3//36///+/f//+////v//////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////////+///+///+///9///9///9///////+/f75/f3x//vy//v6/fr89/bMuLdz
+ XFdbSjxaTTZgVTZ6c0+SimV+Z0llSC1rUDOPfVubkG5gUztdST+xnJv98vK7sKtcS0ROQEBtbXuQpLyW
+ udSXs8yFip5hRVJjQEOZgnzv9Of0/ff2/vz4/v76///6/f36/f35/f33/Pr5//v3/vr3/vr5//n9/vX2
+ 7OmvmZdpUklURi1cVDBqYTmMe1iXgWRzXUBdSythVTCZj2iOfl1jSzhiTUPPwr7Z0sxxY1tcR0Z7bXmi
+ q8iZsMuHlZ9ZUFFYQz26p6D/+/f+/fv9/vv7//r6//v9/f7/+f///f//////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////////////////////////////////////////9///9///9///7///8///7///+
+ ///+/fzy/Pfl//jm//b2+PTOt7uJXmRfPztaSzdqbEV/iVKNmmCCh1ZpVTphRTJxX0SVmGuYoW9aWTVb
+ Sj2eiYv+9fbo6eF+dmxbSEJeS1CAg4+Pr8CQt8+XqMV1WndkOktqTE/O1Mfz/PX0+/j6/vz7/Pz7/Pz6
+ +vv7/P319/j5/f33/fzz/Pr3/vfx8ea/qKlwSk5hQjdaVytneDeBk0+Uk2GCc1FfTDBZTix4bkafnm+K
+ j2RSTDNdTUbBsLLw6uCZiXRkSjZtWlqMmbWNr9SOprxgUVVgQTmeiHr9+vb+/P3//Pv///X6//X6/fv/
+ +P///f//////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////9///9///9///7///7///7///+////+/z4/fvt/frp+vLTz8p6X1lhQTViUThwc0qBkluKnVuK
+ mVtqbD1dTTBgTjSKhWCYpnCUo2tiYDxcSDyTe3/78/P2/PTHysB1ZF9hQEJnTlh9gZGatsubts6Hhp5f
+ TFxVP0KUjILs6OH7/Pn9/fz7+/v9/f34+vv5+/z5/Pz6/Pz4/Pv0+vb09u23rqJuU1BnRkBnUDt7gUyG
+ m1SPol2Qi11rWzpYSiteXDOTlGOgpnKLlmdUUDVbSkS1pKb9+/LJvaZjTDZeSkh9hJuTsdObs8xuYWdi
+ RTx7ZVjz8e39+/z//Pz///b7//b7/vv/+f///f//////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////////////////////////9///9///9///7///7///7///+////+v3/+/719ffi
+ 3t2LfXZeSTVeUS5vdkKCmlqIpl+QpmCDi1NdVy9YTipraECWomyTqmqSoWhnXz9gRD2WfIH78vL3//fw
+ 9u/FtbJ6UlVpP0dkT1uJkqCbtMSWqrhlaXNUSElnUUvDsq78+fb79fX+/f35+vr5/f34/P36/v79/v73
+ 9vT8/PnQysFwY1ZZQzduW0V/eVKPnl+RpF+XoWR+cUpgTi5bUy90fkyXqW2WpmuMlWVbTzZeR0S1oqb+
+ +/Xs5tR0Y1BYQ0FnZHebrsydssx9dYBeR0NnVUzg3Nr+/P7//Pz///f7//b7/vv/+v///f//////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////////////////////////////////////////////////////////9///9///9
+ ///7///7///7///+///++vz+8vf78/m0n6NlTkVYSilqbzeDnlOBqFaKrWCQomBtajxbSipfWjF+ilKR
+ r2iNrWWUomtmVzxfPjujhoz78/H3//X2+/f78/K4mJhzSk1XOD5jXWV+i5SetLyJlptXUlJbQD2Hbmrv
+ 4+D/+ff/+vn5+vv3/f33/f7z+fn9/v3++/j27+yUhX1XRjZaSzR2cEqRmmONo12drWmamWVsVzdcSCpj
+ YjiFm1+OrWiPp2WKj19eSzVhRkS8qrD9/fr6+OuUiHhXQT9XS1mbo72iss2Mh5VVREZdTkrEwL///f//
+ /f7///r8//n8/vz//P///v//////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////////9///9///9///7///7///7///8///9/Pr/9vnn0Nh9XmJdQzZmYDR+k0uD
+ rFOLtl+LqWF+g1FiUTJfSi90d0eOq2WGs1+Ns2aNmWNgTThmQkK6n6P89fL6/vb/+vv89fX18u2vo51u
+ WldVQEFXSEx7eX2io6WHgIBcREFeQDyzmZb88vD9+ff9///1/f30/f32/Pv7+fj99/TGs65pUkhdSTVu
+ aESOnGGPq2KUr2SZpGV8ckdgSCxgUDCAh1eOr2qEsGGOrGeBglNiRzVoTEvMu8H6/f36/fbHv7ViTUpa
+ QkqGgJWlscqVladYTlZRRUennp769ff//f///f7+//z+//z//v3/////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////////////////////////////////////////9///9///9///7///7///7///6
+ //74/fn++viznKBpSEpcRTN6fUyKqFqJtFqMsF+RoWZsX0BkSDVpVDmHkluHrV6Ft1+Kr2KFillfRTRr
+ SUfNtbf7+PT6/Pb/+Pz8+/3x/ffn8OezqqFxVlJfPkBYREh6bXCShYZuVVRgQDuCY17i0Mv+9vP9/v70
+ /Pz0/v75/v38+vbw496chH5gRDdmUzmHiFmQqmSNsWCQq2GJj1ZlVzBiTC9wZkGQn2iIr2V/r1+Oqmd5
+ cklmRzh6XF3Xy8/4/f34/fjh29Z3Y2FeQUV0ZnOjqL+doLJhXmhORUmUiIjz7Oz/+/3+/P7+/f78/fr9
+ /vn///3/////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////9///9///9///7///7///7///6//7z//fs6+SMeHVfQTtnVj2KlF+NrmOPtGORp2SBf1RkTDlm
+ SDeBclKVqWqGsl+HtmCMp2N0cEhgRjZ2WVTl1dH+/vj9/fr++v72/Pzn/vbq/fL29OvLsKyQa21gRUhY
+ RUhlUlNuUE1mRD5oSD+ljYjy5+L6+/r2/v74//75/fv+/PjZx8B7YFhdQzF2aUeUn2eMrmCOtWKMo15w
+ cD1YSSZlVzSBglSUrG2HrmSBr2KInWNzYkNmQjqQdnfp4+T3/fz7//707u+ci4tlSUhpU1ubmKuip7pm
+ Z3RKQkl/bm/p393/+vz9+v79/P/5+vj6/vb+//3/////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////////////////////////9///9///9///7///7///7///6//7z//XU0spsW1Jd
+ RjV3cU+RpGqLrWWTsGmOmGBmWjhgRTVrVECXlWuSr2qItmOHrWGLmGJlWDpjSjqQfHH16+P+/Pf9/f35
+ +f3v+/zs//rv/vP9/vb/8/Dky8uLenxTRkdUQD9oQ0BqRD1kRTpuV1DSxsH39fT3/f34/f36+/r9+ve5
+ p59iST5iTTaDgVWXq2qJrV6PsmR+ik9bVStXSyZzcUOOnWORrmuJq2WIq2d8hldtUz5oREGumpvz9PH2
+ /Pj9/v/99vvBsrVrUU5fRkmLgI+orr5ydoNLREt0X1zh087//Pz++v/++//5+vj5//b9//z/////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////////////////////////////////////////////////////////9///9///9
+ ///7///7///7///7///2+vbCurNgSz1hUDWEh1uPqWuKq2eUqml8f0tfUy1bSC+CeliZp2+Gq2GGsGKP
+ qGl9elRjTDdnUEC8sZ/7+er9/Pf+/P/3/f7x/v3y/vn4/fb+/ff/9vX99PXi4eGkoZ9oWFRkQjxoRDpg
+ RDdZQzqWioT28vD4+fn5+vv9/fz79vGejYRdRjhrWj+PlmKWsGqKrmCKpF5ucT9USiZfWDOEklmUsGuL
+ rGOSrWqQp21vakdnRDl+Wlzay8z1/PP6/vn9/P3/9/3f0td2YV1bQUB3Zm+qr75+hI9NQ0pwVVDaxL3/
+ /Pr++v/++f/6+/n5//X9//v/////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////////9///9///9///7///7///7///8///69Pa0oZ1jSzhoWzWMl2GKqmmMrmyL
+ nmBeXilZUSNhXTOSnWiNqmeGsWOLsGmNmGdrWEFfQDSDb13j4Mr6/+z/+/r++P71+fv5///6/fr9+/j+
+ /fv++/z19/rt9vjw9fPUzMaReW9xVEdfRjhYRDpxZV7y7ev9/fz9/f3+/vz38euEdWpYRTdsYkOSomeP
+ rmWKrGJ9kFNeVjFYSCpxb0WLqGSMtmWKr2OYq2+Bi1teSzRpPDynhIv28O3z//T6/fT99/r/+P/26/OV
+ hoBYPzlpU1iiprCJkJtTSU5sTEXKsab++vf8+P/9+P/6+/r4//P9//r/////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////////////////////////////////////////9///9///9///7///8///7///+
+ /v/37fKojYtmSzdnXjKPn2OKr2eLrmmJnV1gZSpbWyN+iU6TqmiJrGKJs2aFomJsbEZkRjluSkTGtaX4
+ +OL2/+z9+/r+9/77+fv9/fz//fz///38+fr5+vz1/f/z/f71/Pv8/ffp4dXAr6CGcWR2ZVylmZPz7e38
+ +/v9/f37+vj48et1Z1xUQzNzbEuRpmiNrmWKqmN/jlZcVDFnWzqMkWKMsGaDsF2Mr2SFkFtgXjleQjWJ
+ WF/ixc75+vfx//L7/fT/9vj/9/7+9/zCuLNZQjteQ0WRkZmSl6BeVFdoRz+3npP8+PX79//8+f/6/Pv1
+ //H8//r/////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////+///+///+///9///9///9/////v/z6u2eh4JYSTJhYzaJoWKErmGDsWGLsmR+mFB+jkyWo2Sb
+ qmqXqWeVpGhvdkVcUTNiSDqXfXbx5Nz9/PD6/vP7/fv9/f7////+/f3//v3////+/v79/v/5/v/6///8
+ //79/vv///n++vLt5Nzk2tX07On//P39/v/9/v79/fr18Oh0ZlpYQzR3bU6VqHCNrGmOr2mNqGV/klSD
+ lFiRqGiNq2aSr2yJmmJmZj9VSTRmTUq6mp777vT7+vn4/vn7/fn8+fr++/7/+/3e19ZhUE1bQkR+cneh
+ m59mWlxZQ0Chjon69vP+9/z++/76/Pn3//b8//z/////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////////////////////////////v/17O6djIZQSTNZ
+ YjaKoWWMs2WFtWGArluKrWGXrWqcp22doWuenWtwaj9gVjNURS2Le2zm2NH//Pr++fj+//73+/r3/fv+
+ ///////////////////////////////////+/v7+/v7///z//fn++/r//f3//v/+///4+/z6+/j08Oh1
+ Z1pZQjJ1aEqSpm+Nq2uLrGeKrmSNsWSNrmORrWiWp26Jj2JkYD9RRzFYSEGkkZTs3+L//P3//f39///5
+ /v33+vr8/v7////x7e6EdXdXP0FwXFykk5RvYGBOQUKMfn728PD/+fn///z5/Pj4/vn8//3/////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////v/57/Cmlo9WTTdbXjaNnGSQq2aPsWaMrmSRrWeWpmuWm2iLiV1mYTlUTCpTSS6B
+ dWPZzcP99vL/+vn++fj+/v32+ff6/fz+///////////////////////////////////+/v7+/v79/vv9
+ /fn+/Pv//f7//f/8/f75/Pz4+vf38+t8bmFaQjRvZkaNpGiMrGiMrGePrWeUr2uVqmySoGp4fFJiXj9T
+ RzJdTECVhIHp3N7++fv9+vv+/v77/v37///4+/v8/v7+/f38+Pmxo6NgSUhkTkyXg4F3ZmNQQD+CdHLz
+ 6uj/+/n///z5/fj5/vr9//7/////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////////////v/79fSzpp9WTTpbVjSPkWKZo2mWqGmZ
+ rG+UpGuJkmFwcEdbVTRYTzRZTzqEe2rY0cX79/H9+fj//f3+/v79/vz6+vj8/fr/////////////////
+ ///////////////////+/v7+/v76/Pr6/fn+/vz//P79+/36+/z5/f35+/j48+2OgHVaQzZqYUGNpWaP
+ rGeRqmmYq26UoGuBhlhraERYTjVYSTlgTkafjovo3Nz+/P38+vr7+/v4+vr5/f35/v76/f39/v7+/Pz+
+ /P3Yysp3X1teRUGIcWx/aWRTPzt7aWbx6eX//fr//vz5/fv7//79////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///9+vnIvrdeUkJZTDCJf1ukoXOgo3KSl2d1eU9bWzdQSixTSDNkVkiUin/l3db8+/X4+Pb8///6/f34
+ +/v8/fz///37+/j////////////////////////////////////+/v79/v75/fz6//z9//7//v78/P78
+ /v75/v35+vf69e+qnJJeRzxiVzqGl1yZrG6YpG2MkmNxbkhXTjFXSjRWRTpxXlm2pqPw5+f+/P38+vr9
+ /f37/v72/Pv4/v73/fz6/v39/////v7//v/u5uSSenNgRkB6X1h+ZV5WPzpzYVvw5+P//fn//vz8/v37
+ //7+////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////7+/Pnj3NV1Z1pcSTV6Z0uajGqCeVVgWzlZVDZPRy9bUD2F
+ d23Bs7Dw6Of89vb9/v75/v73/f71+vz5/f37/v3+/vv//vv/////////////////////////////////
+ ///+/v79/v75//36//78///9/f38/P38/v/5/fz7/fr9/PfJu7RmUEdeUDh3e02LkGBzcElfVTZZSTRW
+ QjRpVUyZh4LQxML58e/9+vj9/Pz4+/v6//73/fz5//70+/v4/v37/v78/f3+/Pz++/z8+PS0o5pmTURn
+ SUB1Vk5dQzxvW1Tu49z++/b+/fz///79/f3/////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////7+/vrw7eaXi4Fc
+ RzllTTtnUT1bSzNWSTVYTTxxZ1i5rqLs4d378vb/+P39+v75/P/2/v/2///2/v/6///9//////z///z/
+ ///////////////////////////////////////+///7//76//78///////+///9///5/f33+vb+/vrk
+ 29V9bGVbSTtfUjhnWD5eSzdWPzFtUkyWfXrItbP26+j9+vb9/vj2/fb4/vz6///5///3/v74///3/v75
+ //77///9/v7+/v7//Pz//Pje0chtU0xhQjtpSUFhRjxoVEvr4dn//vj8/fr6+vr9/P3+/v7/////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////77/vn9/PbPw7xoU0xfRj1ZQzdfTEB1aV6xpp3l3tb99/L+9/j/+P3++f/7+v/4
+ /P/2/v/3///5///7///9//////7///7////////////////////////////////////////+///7//77
+ //79///////////+///3/Pr4/fr5+vb28u2xo55bR0BbQzpdRDxvVE+SdnTUu7z66Or/9vb8+/f3+/T1
+ //X0//j3//z6///5///5///5///6///6//78/////////////f3//Pn67+mQenRiRD1bOTJkRj1nU0rm
+ 3tX8/Pb9//36+fr+/P3//v//////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////////////////////////////////+//78/vv9/fjy7uqLeXVjTkpyX1uilI/d
+ 1tH38u789vL++fb++vv++//8+//7/P/5/f74/f76/v/7///8///+////////////////////////////
+ ///////////////////////+///8///8///+///////////+///3/Pv3/fr09/P+/fnf1tR2ZGJjSUuG
+ bG7Ms7bx4uX+9vj/+fn++ff7+vb5/vf0//fv/fT3/vz6///6///7///7///8///7/v79////////////
+ /f3//fz99/TArqpmSENkQTthQzttWlDq49r7/fb8/vz7+vv/+/7//v//////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////////////////////////////////////////////////////////////////+
+ //76/fv8/Pj++vjq397Sw8Tn3d779vb9/fz5+fj9+/v+/fz8/Pz6/v/6/v78/v7+/f3+/f3//v//////
+ /////v/8///8///+///////////////////////////////////////////+///+/////////v///v/+
+ //73/vvz/Pn3/vz8/v3+/fzb0NHRwsbu3+P/+fr/+/z+/fv8/vr7/fn6/vr8/vz7/vz7//z8///8///8
+ ///9///+///////+/v7////////////9/f37/f35+vru4OGQdXRnQ0BgQTtyXlfp49v7/vn7/vz+/f7/
+ +v3//v//////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////////////////+//75/Pr+/fr79vX/+/z+9vn++/76+vz5/f35/f35+/v9+/r5
+ /Pr4//36//z+//z///z//v3//v7//v7//v/+/v/7///6///+////////////////////////////////
+ ///////////+/v///v///////v///v/+//75/v3z/Pn2/vz0+ff7/Pr+/Pz++vz++vz7/fr5/vj2//j1
+ /vf1/Pf6/fv+/f7++///+P7//P7+///+///+/////////////v7////////////8/f33+/z4+/368PPJ
+ r7F0UlFgQTyGc2zt6eD8//v6/vv//v//+Pz//f7/////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////////////////////////////////////////////////////6/Pv4+fj+/P3+
+ +vv8+Pr+/f/5+/31+fr5/f37/v7+//37//z4//z6//z+//z///z///3//v7///7//////v/8///7///+
+ /////////////////////////////////////////////v///v///////v///v////75/vv2/fv0/Pr1
+ +/n7/Pz//v/+/v/5/Pz2/fr1//n1//j0//j5//v6/Pv7+Pv/+v//+f///f//////////////////////
+ /v7////////////8/f35/f71+fv++fz57O7Grq6SfHnEt7H6+fT6/vr6/Pr+/P3//f7/////////////
+ //////////////////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==
+
+
+
\ No newline at end of file
diff --git a/TIAS_DataExtractor/Program.cs b/TIAS_DataExtractor/Program.cs
new file mode 100644
index 0000000..5a5d001
--- /dev/null
+++ b/TIAS_DataExtractor/Program.cs
@@ -0,0 +1,19 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+
+namespace TIAS_DataExtractor {
+ internal static class Program {
+ ///
+ /// アプリケーションのメイン エントリ ポイントです。
+ ///
+ [STAThread]
+ static void Main() {
+ Application.EnableVisualStyles();
+ Application.SetCompatibleTextRenderingDefault(false);
+ Application.Run(new MainForm());
+ }
+ }
+}
diff --git a/TIAS_DataExtractor/Properties/AssemblyInfo.cs b/TIAS_DataExtractor/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000..e1e03b5
--- /dev/null
+++ b/TIAS_DataExtractor/Properties/AssemblyInfo.cs
@@ -0,0 +1,36 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// アセンブリに関する一般情報は以下の属性セットをとおして制御されます。
+// 制御されます。アセンブリに関連付けられている情報を変更するには、
+// これらの属性値を変更します。
+[assembly: AssemblyTitle("TIAS_DataExtractor")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("TIAS_DataExtractor")]
+[assembly: AssemblyCopyright("Copyright © 2023")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// ComVisible を false に設定すると、このアセンブリ内の型は COM コンポーネントから
+// 参照できなくなります。COM からこのアセンブリ内の型にアクセスする必要がある場合は、
+// その型の ComVisible 属性を true に設定してください。
+[assembly: ComVisible(false)]
+
+// このプロジェクトが COM に公開される場合、次の GUID が typelib の ID になります
+[assembly: Guid("248574a3-0a4b-4750-b6e3-2d591ad75016")]
+
+// アセンブリのバージョン情報は、以下の 4 つの値で構成されています:
+//
+// メジャー バージョン
+// マイナー バージョン
+// ビルド番号
+// リビジョン
+//
+// すべての値を指定するか、次を使用してビルド番号とリビジョン番号を既定に設定できます
+// 既定値にすることができます:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/TIAS_DataExtractor/Properties/Resources.Designer.cs b/TIAS_DataExtractor/Properties/Resources.Designer.cs
new file mode 100644
index 0000000..938f3c1
--- /dev/null
+++ b/TIAS_DataExtractor/Properties/Resources.Designer.cs
@@ -0,0 +1,62 @@
+//------------------------------------------------------------------------------
+//
+// このコードはツールによって生成されました。
+// ランタイム バージョン:4.0.30319.42000
+//
+// このファイルへの変更は、以下の状況下で不正な動作の原因になったり、
+// コードが再生成されるときに損失したりします
+//
+//------------------------------------------------------------------------------
+
+namespace TIAS_DataExtractor.Properties {
+
+
+ ///
+ /// ローカライズされた文字列などを検索するための、厳密に型指定されたリソース クラスです。
+ ///
+ // このクラスは StronglyTypedResourceBuilder クラスが ResGen
+ // または Visual Studio のようなツールを使用して自動生成されました。
+ // メンバーを追加または削除するには、.ResX ファイルを編集して、/str オプションと共に
+ // ResGen を実行し直すか、または VS プロジェクトをリビルドします。
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.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 ((resourceMan == null)) {
+ global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("TIAS_DataExtractor.Properties.Resources", typeof(Resources).Assembly);
+ resourceMan = temp;
+ }
+ return resourceMan;
+ }
+ }
+
+ ///
+ /// すべてについて、現在のスレッドの CurrentUICulture プロパティをオーバーライドします
+ /// 現在のスレッドの 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/TIAS_DataExtractor/Properties/Resources.resx b/TIAS_DataExtractor/Properties/Resources.resx
new file mode 100644
index 0000000..af7dbeb
--- /dev/null
+++ b/TIAS_DataExtractor/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/TIAS_DataExtractor/Properties/Settings.Designer.cs b/TIAS_DataExtractor/Properties/Settings.Designer.cs
new file mode 100644
index 0000000..61d9625
--- /dev/null
+++ b/TIAS_DataExtractor/Properties/Settings.Designer.cs
@@ -0,0 +1,26 @@
+//------------------------------------------------------------------------------
+//
+// 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.
+//
+//------------------------------------------------------------------------------
+
+namespace TIAS_DataExtractor.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;
+ }
+ }
+ }
+}
diff --git a/TIAS_DataExtractor/Properties/Settings.settings b/TIAS_DataExtractor/Properties/Settings.settings
new file mode 100644
index 0000000..3964565
--- /dev/null
+++ b/TIAS_DataExtractor/Properties/Settings.settings
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/TIAS_DataExtractor/TIAS_DataExtractor.csproj b/TIAS_DataExtractor/TIAS_DataExtractor.csproj
new file mode 100644
index 0000000..49a2118
--- /dev/null
+++ b/TIAS_DataExtractor/TIAS_DataExtractor.csproj
@@ -0,0 +1,135 @@
+
+
+
+
+
+ Debug
+ AnyCPU
+ {248574A3-0A4B-4750-B6E3-2D591AD75016}
+ WinExe
+ TIAS_DataExtractor
+ TIAS_DataExtractor
+ v4.7.2
+ 512
+ true
+ true
+
+
+
+
+ AnyCPU
+ true
+ full
+ false
+ bin\Debug\
+ DEBUG;TRACE
+ prompt
+ 4
+
+
+ AnyCPU
+ pdbonly
+ true
+ bin\Release\
+ TRACE
+ prompt
+ 4
+
+
+ true
+ bin\x64\Debug\
+ DEBUG;TRACE
+ full
+ x64
+ 7.3
+ prompt
+ true
+
+
+ bin\x64\Release\
+ TRACE
+ true
+ pdbonly
+ x64
+ 7.3
+ prompt
+ true
+
+
+ tree.ico
+
+
+
+ ..\packages\OpenCvSharp4.4.7.0.20230115\lib\netstandard2.0\OpenCvSharp.dll
+
+
+
+ ..\packages\System.Buffers.4.5.1\lib\net461\System.Buffers.dll
+
+
+
+ ..\packages\System.Memory.4.5.4\lib\net461\System.Memory.dll
+
+
+
+ ..\packages\System.Numerics.Vectors.4.5.0\lib\net46\System.Numerics.Vectors.dll
+
+
+ ..\packages\System.Runtime.CompilerServices.Unsafe.6.0.0\lib\net461\System.Runtime.CompilerServices.Unsafe.dll
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Form
+
+
+ MainForm.cs
+
+
+
+
+ MainForm.cs
+
+
+ ResXFileCodeGenerator
+ Resources.Designer.cs
+ Designer
+
+
+ True
+ Resources.resx
+
+
+
+ SettingsSingleFileGenerator
+ Settings.Designer.cs
+
+
+ True
+ Settings.settings
+ True
+
+
+
+
+
+
+
+
+
+
+
+ このプロジェクトは、このコンピューター上にない NuGet パッケージを参照しています。それらのパッケージをダウンロードするには、[NuGet パッケージの復元] を使用します。詳細については、http://go.microsoft.com/fwlink/?LinkID=322105 を参照してください。見つからないファイルは {0} です。
+
+
+
+
\ No newline at end of file
diff --git a/TIAS_DataExtractor/packages.config b/TIAS_DataExtractor/packages.config
new file mode 100644
index 0000000..839d916
--- /dev/null
+++ b/TIAS_DataExtractor/packages.config
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/TIAS_DataExtractor/tree.ico b/TIAS_DataExtractor/tree.ico
new file mode 100644
index 0000000..1c5bb53
--- /dev/null
+++ b/TIAS_DataExtractor/tree.ico
Binary files differ