From 95ea6e590596e9cc17226873fd0d152d519a4943 Mon Sep 17 00:00:00 2001 From: Stupar Date: Mon, 7 Feb 2022 19:10:29 +0100 Subject: [PATCH] ver 1.6 --- source/2019/source.extension.vsixmanifest | 2 +- source/2022/2022.csproj | 5 +- source/2022/source.extension.vsixmanifest | 2 +- source/shared/packageXml.vsct | 66 +- .../project/cppFiltersAutoShared.projitems | 39 +- source/shared/project/source/gui/advanced.cs | 6 +- .../project/source/gui/error.Designer.cs | 69 ++ source/shared/project/source/gui/error.cs | 29 + source/shared/project/source/gui/error.resx | 861 ++++++++++++++++++ .../project/source/gui/question.Designer.cs | 112 +-- .../source/gui/questionFtd.Designer.cs | 319 +++++++ .../shared/project/source/gui/questionFtd.cs | 65 ++ .../project/source/gui/questionFtd.resx | 861 ++++++++++++++++++ .../source/extension/dirToFilter/file.cs | 39 + .../source/extension/dirToFilter/filters.cs | 246 +++++ .../extension/dirToFilter/projectData.cs | 271 ++++++ .../source/extension/dirToFilter/work.cs | 257 ++++++ .../source/source/extension/extension.cs | 63 +- .../project/source/source/extension/file.cs | 97 -- .../source/extension/filterToDir/error.cs | 92 ++ .../source/extension/filterToDir/file.cs | 34 + .../source/extension/filterToDir/filters.cs | 208 +++++ .../extension/filterToDir/projectData.cs | 620 +++++++++++++ .../source/extension/filterToDir/work.cs | 100 ++ .../source/source/extension/filters.cs | 259 ------ .../project/source/source/extension/work.cs | 346 ------- .../source/source/other/test/dte/project.cs | 73 ++ .../source/other/test/dte/projectItem.cs | 42 + .../project/source/source/other/test/other.cs | 272 ++++++ .../project/source/source/other/test/test.cs | 122 --- .../source/source/other/test/vc/file.cs | 196 ++++ .../source/source/other/test/vc/filter.cs | 112 +++ .../source/source/other/test/vc/project.cs | 248 +++++ .../source/other/test/vc/projectReference.cs | 59 ++ .../source/source/other/unused/project.cs | 102 +++ .../project/source/source/other/unused/xml.cs | 60 ++ .../shared/project/source/source/package.cs | 35 +- .../project/source/source/project/project.cs | 140 --- .../source/source/project/projectData.cs | 268 ------ .../source/source/utility/extension.cs | 46 + .../project/source/source/utility/path.cs | 257 ++++-- .../project/source/source/utility/project.cs | 51 ++ 42 files changed, 5742 insertions(+), 1409 deletions(-) create mode 100644 source/shared/project/source/gui/error.Designer.cs create mode 100644 source/shared/project/source/gui/error.cs create mode 100644 source/shared/project/source/gui/error.resx create mode 100644 source/shared/project/source/gui/questionFtd.Designer.cs create mode 100644 source/shared/project/source/gui/questionFtd.cs create mode 100644 source/shared/project/source/gui/questionFtd.resx create mode 100644 source/shared/project/source/source/extension/dirToFilter/file.cs create mode 100644 source/shared/project/source/source/extension/dirToFilter/filters.cs create mode 100644 source/shared/project/source/source/extension/dirToFilter/projectData.cs create mode 100644 source/shared/project/source/source/extension/dirToFilter/work.cs delete mode 100644 source/shared/project/source/source/extension/file.cs create mode 100644 source/shared/project/source/source/extension/filterToDir/error.cs create mode 100644 source/shared/project/source/source/extension/filterToDir/file.cs create mode 100644 source/shared/project/source/source/extension/filterToDir/filters.cs create mode 100644 source/shared/project/source/source/extension/filterToDir/projectData.cs create mode 100644 source/shared/project/source/source/extension/filterToDir/work.cs delete mode 100644 source/shared/project/source/source/extension/filters.cs delete mode 100644 source/shared/project/source/source/extension/work.cs create mode 100644 source/shared/project/source/source/other/test/dte/project.cs create mode 100644 source/shared/project/source/source/other/test/dte/projectItem.cs create mode 100644 source/shared/project/source/source/other/test/other.cs delete mode 100644 source/shared/project/source/source/other/test/test.cs create mode 100644 source/shared/project/source/source/other/test/vc/file.cs create mode 100644 source/shared/project/source/source/other/test/vc/filter.cs create mode 100644 source/shared/project/source/source/other/test/vc/project.cs create mode 100644 source/shared/project/source/source/other/test/vc/projectReference.cs create mode 100644 source/shared/project/source/source/other/unused/project.cs delete mode 100644 source/shared/project/source/source/project/project.cs delete mode 100644 source/shared/project/source/source/project/projectData.cs create mode 100644 source/shared/project/source/source/utility/extension.cs create mode 100644 source/shared/project/source/source/utility/project.cs diff --git a/source/2019/source.extension.vsixmanifest b/source/2019/source.extension.vsixmanifest index 0d60304..d6f64c0 100644 --- a/source/2019/source.extension.vsixmanifest +++ b/source/2019/source.extension.vsixmanifest @@ -1,7 +1,7 @@  - + Generate C++ Filters Simple Extension which provide the ability to generate C++ project filters to replicate the folder hierarchy of underlying sources resources\license diff --git a/source/2022/2022.csproj b/source/2022/2022.csproj index 4ef890b..9baf3cc 100644 --- a/source/2022/2022.csproj +++ b/source/2022/2022.csproj @@ -12,6 +12,7 @@ 15.0 + 8.0 true @@ -82,10 +83,10 @@ - 17.0.31902.203 + 17.0.32112.339 - 17.0.31902.203 + 17.0.32112.339 17.1.1029-preview2 diff --git a/source/2022/source.extension.vsixmanifest b/source/2022/source.extension.vsixmanifest index 5227297..49fc7ca 100644 --- a/source/2022/source.extension.vsixmanifest +++ b/source/2022/source.extension.vsixmanifest @@ -1,7 +1,7 @@  - + Generate C++ Filters Simple Extension which provide the ability to generate C++ project filters to replicate the folder hierarchy of underlying sources resources\license diff --git a/source/shared/packageXml.vsct b/source/shared/packageXml.vsct index e9dc23d..0a735c6 100644 --- a/source/shared/packageXml.vsct +++ b/source/shared/packageXml.vsct @@ -1,11 +1,15 @@  + + - + + + - + @@ -14,36 +18,70 @@ + + - + + + + + + + + - + + + + + + + + + + - + + - - - - + + + + + - - + + + + + diff --git a/source/shared/project/cppFiltersAutoShared.projitems b/source/shared/project/cppFiltersAutoShared.projitems index 9b5f5ac..8894e50 100644 --- a/source/shared/project/cppFiltersAutoShared.projitems +++ b/source/shared/project/cppFiltersAutoShared.projitems @@ -13,9 +13,15 @@ advanced.cs + + error.cs + question.cs + + questionFtd.cs + @@ -25,19 +31,40 @@ advanced.cs + + + error.cs + question.cs + + + questionFtd.cs + + + + + - - - - + + + + + + + + + + + + + - - + + \ No newline at end of file diff --git a/source/shared/project/source/gui/advanced.cs b/source/shared/project/source/gui/advanced.cs index e881e09..2ee97e4 100644 --- a/source/shared/project/source/gui/advanced.cs +++ b/source/shared/project/source/gui/advanced.cs @@ -60,7 +60,7 @@ private void formAdvancedFormClosing(object sender, FormClosingEventArgs e) if (!Directory.Exists(textBoxIn.Text)) throw new Exception("in dir is not valid"); if (!Directory.Exists(textBoxRootDir.Text)) throw new Exception("root dir is not valid"); if (checkBoxRootFilter.Checked) - if (!ProjectData.Root.filterCheck(textBoxRootFilter.Text)) throw new Exception("root filter is not valid"); + if (!dirToFilter.ProjectData.Root.filterCheck(textBoxRootFilter.Text)) throw new Exception("root filter is not valid"); } catch(Exception e2) { @@ -115,10 +115,10 @@ private void buttonOkClick(object sender, EventArgs e) } - public ProjectData p; + public dirToFilter.ProjectData p; private void buttonCalculateFiltersDeleteAllClick(object sender, EventArgs e) { - filters.filtersDeleteAll(p.p2); + dirToFilter.filters.filtersDeleteAll(p.p2); } diff --git a/source/shared/project/source/gui/error.Designer.cs b/source/shared/project/source/gui/error.Designer.cs new file mode 100644 index 0000000..ece8b8e --- /dev/null +++ b/source/shared/project/source/gui/error.Designer.cs @@ -0,0 +1,69 @@ +namespace VisualStudioCppExtensions +{ + partial class formError + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(formError)); + this.textBox = new System.Windows.Forms.TextBox(); + this.SuspendLayout(); + // + // textBox + // + this.textBox.BackColor = System.Drawing.SystemColors.Window; + this.textBox.Dock = System.Windows.Forms.DockStyle.Fill; + this.textBox.Location = new System.Drawing.Point(0, 0); + this.textBox.Multiline = true; + this.textBox.Name = "textBox"; + this.textBox.ReadOnly = true; + this.textBox.ScrollBars = System.Windows.Forms.ScrollBars.Both; + this.textBox.Size = new System.Drawing.Size(800, 450); + this.textBox.TabIndex = 0; + this.textBox.TabStop = false; + this.textBox.WordWrap = false; + // + // formError + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(800, 450); + this.Controls.Add(this.textBox); + this.DoubleBuffered = true; + this.Font = new System.Drawing.Font("Consolas", 8.25F); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Name = "formError"; + this.Text = "error"; + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + public System.Windows.Forms.TextBox textBox; + } +} \ No newline at end of file diff --git a/source/shared/project/source/gui/error.cs b/source/shared/project/source/gui/error.cs new file mode 100644 index 0000000..4cf55de --- /dev/null +++ b/source/shared/project/source/gui/error.cs @@ -0,0 +1,29 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace VisualStudioCppExtensions +{ + public partial class formError : Form + { + public formError() + { + InitializeComponent(); + } + + + + protected override bool ProcessDialogKey(Keys keyData) + { + if (Form.ModifierKeys != Keys.None || keyData != Keys.Escape) return base.ProcessDialogKey(keyData); + this.Close(); + return true; + } + } +} diff --git a/source/shared/project/source/gui/error.resx b/source/shared/project/source/gui/error.resx new file mode 100644 index 0000000..0fb6fcd --- /dev/null +++ b/source/shared/project/source/gui/error.resx @@ -0,0 +1,861 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + + + + 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 + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8AAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADg4ODg4ODg4ODg4ODg4ODg4ODg4OAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADg4ODg4ODg4ODg4ODg4ODg4ODg4OAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAADg4ODg4ODg4ODg4ODg4ODg4ODg4OAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + Dg4OAQEBAQEBAQEBAQEBAQEBDg4OAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADg4OAQEBAQEBAQEB + AQEBAQEBDg4OAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADg4OAQEBAQEBAQEBAQEBAQEBDg4OAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADg4ODg4ODg4ODg4ODg4ODg4ODg4OAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAADg4ODg4ODg4ODg4ODg4ODg4ODg4OAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + Dg4ODg4ODg4ODg4ODg4ODg4ODg4OAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADg4OAQEBAQEBAQEB + AQEBDg4ODg4OAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADg4OAQEBAQEBAQEBAQEBDg4OAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADg4OAQEBAQEBAQEBAQEBDg4OAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAADg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4OAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + Dg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4OAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADg4ODg4ODg4ODg4O + Dg4ODg4ODg4ODg4OAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADg4OAQEBAQEBAQEBAQEBAQEBAQEBDg4O + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADg4OAQEBAQEBAQEBAQEBAQEBAQEBDg4OAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAADg4OAQEBAQEBAQEBAQEBAQEBAQEBDg4OAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + Dg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4OAAAADg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4O + Dg4ODg4ODg4ODg4ODg4ODg4ODg4OAAAADg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4O + Dg4ODg4ODg4OAAAADg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4AAAAADg4ODg4PDg4OAQEBAQEBDg4OAAAA + Dg4OAQEBAQEBDg4ODg4ODg4ODg4ODg4OAAAADg4ODg4ADg4OAQEBAQEBDg4OAAAADg4OAQEBAQEBDg4O + Dg4ODg4ODg4ODg4ODwAADg4ODg4ODg4OAQEBAQEBDg4OAAAADg4OAQEBAQEBDg4ODg4ODg4ODg4ODg4O + DgAADg4OCw4ODg4OAQEBAQEBDg4OAAAADg4OAQEBAQEBDg4ODg4OCQICAgICAwsODg4ADg4OAwwODg4O + AQEBAQEBDg4OAAAADg4OAQEBAQEBDg4OAA4ODgkCAgICAgQNDg4ODg4OAgUNDg4OAQEBAQEBDg4ODg4O + Dg4OAQEBAQEBDg4OAA8ODg4GAgICAgIFDQ4ODg4OAgIGDg4ODg4OAQEBDg4ODg4ODg4OAQEBDg4ODg4O + AAAPDg4OBgICAgICBg4ODg4OAgICCA4ODg4OAQEBDg4ODg4ODg4OAQEBDg4ODg4OAAAADg4ODgUCAgIC + AgcODg4OAgICAgoODg4OAQEBAQEBAQEBAQEBAQEBDg4ODg4OAAAAAA4ODg0FAgICAgIJDg4OAgICAgMM + Dg4OAQEBAQEBAQEBAQEBAQEBDg4OAAAAAAAAAAAODg4NAwICAgICCg4OAgICAgIFDg4OAQEBAQEBAQEB + AQEBAQEBDg4OAAAAAAAAAAAADg4OCwMCAgICAwsOAgICAgICDg4ODg4ODg4OAQEBDg4ODg4ODg4OAAAA + AAAAAAAAAA4ODgsCAgICAgQNAgICAgICDg4ODg4ODg4OAQEBDg4ODg4ODg4OAAAAAAAAAAAAAAAODg4J + AgICAgIFAgICAgICDg4ODg4ODg4OAQEBDg4ODg4ODg4OAAAADg4ODg4ODg4ODg4OCQICAgICAgICAgIC + Dg4ODg4OAQEBAQEBAQEBDg4OAAAAAAAADg4ODg4ODg4ODg4ODgYCAgICAgICAgICDg4ODg4OAQEBAQEB + AQEBDg4OAAAAAAAAAA4ODg4ODg4ODg4ODg4GAgICAgICAgICDg4ODg4OAQEBAQEBAQEBDg4OAAAAAAAA + AAAODg4OBgICAgICAgICAgICAgICAgICDg4ODg4OAQEBAQEBAQEBDg4OAAAAAAAAAAAADg4ODgYCAgIC + AgICAgICAgICAgICDg4ODg4OAQEBAQEBAQEBDg4OAAAAAAAAAAAAAA4ODg4GAgICAgICAgICAgICAgIC + Dg4ODg4OAQEBAQEBAQEBDg4OAAAAAAAAAAAAAAAODg4OBgICAgICAgICAgICAgICDg4ODg4OAQEBAQEB + AQEBDg4OAAAAAAAAAAAAAAAADg4ODgYCAgICAgICAgICAgICDg4ODg4OAQEBAQEBAQEBDg4OAAAAAAAA + AAAAAAAAAA4ODg4GAgICAgICAgICAgICDg4ODg4OAQEBAQEBAQEBDg4OAAAAAAAAAAAAAAAAAAAODg4O + Dg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4OAAAAAAAAAAAAAAAAAAAADg4ODg4ODg4ODg4ODg4O + Dg4ODg4ODg4ODg4ODg4ODg4OAAAAAAAAAAAAAAAAAAAAAA4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4O + Dg4ODg4OAAAAAAAA////////AAAAAAf///8AAAAAB////wAAAAAH////AAAAAAf///8AAAAAB////wAA + AAAH////AAAAAAf///8AAAAAB////wAAAAAH////AAAAAAf///8AAAAAP////wAAAAA/////AAAAAAD/ + //8AAAAAAP///wAAAAAA////AAAAAAD///8AAAAAAP///wAAAAAA////AAAAAAAAcAAAAAAAAABwAAAA + AAAAAHAAAAAAHgAAcAAAAAAOCABwAAAAAAYAAHAAAAAABgAAcAAAAAACAABwAAAAgAAAAAAAAACAAAAA + AAAAAMAAAAAAAAAA4AAAAAAAAADwAAAAAAcAAPgAAAAABwAA/AAAAAAHAAD+AAAAAAcAAP8AAAAABwAA + AAAAAAA/AAAAAAAAAD8AAIAAAAAAPwAAwAAAAAA/AADgAAAAAD8AAPAAAAAAPwAA+AAAAAA/AAD8AAAA + AD8AAP4AAAAAPwAA/wAAAAA/AAD/gAAAAD8AAP/AAAAAPwAAKAAAACAAAABAAAAAAQAIAAAAAAAABAAA + AAAAAAAAAAAAAQAAAAEAAAAAAABCQkIAnFMAAKJdDwCnZx8ArXIuAL6QXADDmmwAz6+KANS5mgDgzbkA + 5dfIAOvi1wDw7OcA9vb2APj4+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4ODg4ODg4O + Dg4ODg4OAAAAAAAAAAAAAAAAAAAAAAAADg4ODg4ODg4ODg4ODg4AAAAAAAAAAAAAAAAAAAAAAAAODgEB + AQEBAQEBAQEODgAAAAAAAAAAAAAAAAAAAAAAAA4OAQEBAQEBAQEBAQ4OAAAAAAAAAAAAAAAAAAAAAAAA + Dg4ODg4ODg4ODg4ODg4AAAAAAAAAAAAAAAAAAAAAAAAODg4ODg4ODg4ODg4ODgAAAAAAAAAAAAAAAAAA + AAAAAA4OAQEBAQEBAQEODgAAAAAAAAAAAAAAAAAAAAAAAAAADg4BAQEBAQEBAQ4OAAAAAAAAAAAAAAAA + AAAAAAAAAAAODg4ODg4ODg4ODg4ODg4OAAAAAAAAAAAAAAAAAAAAAA4ODg4ODg4ODg4ODg4ODg4AAAAA + AAAAAAAAAAAAAAAADg4BAQEBAQEBAQEBAQEODgAAAAAAAAAAAAAAAAAAAAAODgEBAQEBAQEBAQEBAQ4O + AAAAAAAAAAAAAAAAAAAAAA4ODg4ODg4ODg4ODg4ODg4ODg4ODg4AAA4ODg4ODg4ODg4ODg4ODg4ODg4O + Dg4ODg4ODg4ODgAADg4ODg4ODg4ODg4ODg4ODwAADg4ODw4OAQEBAQ4OAAAODgEBAQEODg4ODg4ODg4O + AAAODg4ODg4BAQEBDg4AAA4OAQEBAQ4ODg4FAgICBg4OAA4OBg4ODgEBAQEODgAADg4BAQEBDg4PDg0F + AgICBw4ODg4CCA4OAQEBAQ4ODg4ODgEBAQEODgAPDg0DAgICCQ4ODgICCg4ODgEBDg4ODg4OAQEODg4O + AAAODgsDAgICCg4OAgIDDA4OAQEBAQEBAQEBAQ4ODg4AAAAODgsCAgIDCw4CAgIFDg4BAQEBAQEBAQEB + Dg4AAAAAAAAODgkCAgIEDQICAgIODg4ODg4BAQ4ODg4ODgAAAAAAAAAODgkCAgIFAgICAg4ODg4ODgEB + Dg4ODg4OAAAODg4ODg4ODgYCAgICAgICDg4ODgEBAQEBAQ4OAAAAAA8ODg4ODg4ODgYCAgICAgIODg4O + AQEBAQEBDg4AAAAAAA8ODgYCAgICAgICAgICAg4ODg4BAQEBAQEODgAAAAAAAA8ODgYCAgICAgICAgIC + Dg4ODgEBAQEBAQ4OAAAAAAAAAA8ODgYCAgICAgICAgIODg4OAQEBAQEBDg4AAAAAAAAAAA8ODgYCAgIC + AgICAg4ODg4BAQEBAQEODgAAAAAAAAAAAA8ODg4ODg4ODg4ODg4ODg4ODg4ODg4OAAAAAAAAAAAAAA8O + Dg4ODg4ODg4ODg4ODg4ODg4ODg4AAAAA/////wAD//8AA///AAP//wAD//8AA///AAP//wAP//8AD/// + AAD//wAA//8AAP//AAD//wAAAwAAAAMAAMADAADAAwAAQAMAAAAAAIAAAADAAAAA4AAAA/AAAAP4AAAD + AAAADwAAAA+AAAAPwAAAD+AAAA/wAAAP+AAAD/wAAA8oAAAAEAAAACAAAAABAAgAAAAAAAABAAAAAAAA + AAAAAAABAAAAAQAAAAAAAEJCQgCcUwAAvpBcAPb29gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAA////AAAAAAAAAAAAAAAAAAAAAAAEBAQEBAQEAAAAAAAAAAAABAEBAQEBBAAAAAAA + AAAAAAQEBAQEBAQAAAAAAAAAAAAEAQEBAQQAAAAAAAAAAAAABAQEBAQEBAQAAAAAAAAAAAQBAQEBAQEE + AAAAAAAAAAAEBAQEBAQEBAQEBAAEBAQEBAQEBAAEBAQBAQQABAEBBAQDAgMEBAMEAQEEBAQBAQQABAMC + AwQCAwQBAQEBAQQEAAAEAwIDAgIEBAQBBAQEAAQEBAQDAgICBAQBAQEEAAAABAMCAgICAgQEAQEBBAAA + AAAEAwICAgIEBAEBAQQAAAAAAAQEBAQEBAQEBAQEAAD//wAAAf8AAAH/AAAB/wAAA/8AAAD/AAAA/wAA + ABAAAAgQAAAAAAAAgAAAAMABAAAAAwAAgAMAAMADAADgAwAAiVBORw0KGgoAAAANSUhEUgAAAQAAAAEA + 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 + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAA9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPb29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/AAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAA9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPb29v/29vb/9vb2//b29v9CQkL/QkJC/0JCQv9CQkL/QkJC + /0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC + //b29v/29vb/9vb2//b29v8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD29vb/9vb2//b29v/29vb/QkJC + /0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC + /0JCQv9CQkL/QkJC/0JCQv/29vb/9vb2//b29v/29vb/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9vb2 + //b29v/29vb/9vb2/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC + /0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/9vb2//b29v/29vb/9vb2/wAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAPb29v/29vb/9vb2//b29v9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC + /0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC//b29v/29vb/9vb2 + //b29v8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + APb29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v8AAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAD29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9vb2//b29v/29vb/9vb2/0JCQv9CQkL/QkJC + /0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv/29vb/9vb2 + //b29v/29vb/9vb2QPb29kD29vZA9vb2QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPb29v/29vb/9vb2 + //b29v9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC + /0JCQv9CQkL/9vb2//b29v/29vb/9vb2/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAD29vb/9vb2//b29v/29vb/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC + /0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC//b29v/29vb/9vb2//b29v8AAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAA9vb2//b29v/29vb/9vb2/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC + /0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv/29vb/9vb2//b29v/29vb/AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPb29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/AAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAA9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPb29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD29vb/9vb2//b29v/29vb/QkJC + /0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC + /0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/9vb2//b29v/29vb/9vb2/wAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9vb2 + //b29v/29vb/9vb2/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC + /0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC//b29v/29vb/9vb2 + //b29v8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAPb29v/29vb/9vb2//b29v9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC + /0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC + /0JCQv/29vb/9vb2//b29v/29vb/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD29vb/9vb2//b29v/29vb/QkJC/0JCQv9CQkL/QkJC + /0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC + /0JCQv9CQkL/QkJC/0JCQv9CQkL/9vb2//b29v/29vb/9vb2/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v8AAAAAAAAAAAAAAAAAAAAA9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/AAAA + AAAAAAAAAAAAAAAAAPb29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2/wAAAAAAAAAAAAAAAAAAAAD29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v8AAAAAAAAAAAAAAAAAAAAA9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2gAAAAAAAAAAAAAAA + AAAAAAAAAAAA9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2jwAAAAD29vb/9vb2//b29v/29vb/QkJC + /0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv/29vb/9vb2//b29v/29vb/AAAAAAAAAAAAAAAAAAAA + APb29v/29vb/9vb2//b29v9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vZgAAAAAAAAAAAAAAAAAAAAAPb29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vZg9vb2 + //b29v/29vb/9vb2/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/9vb2//b29v/29vb/9vb2 + /wAAAAAAAAAAAAAAAAAAAAD29vb/9vb2//b29v/29vb/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC + /0JCQv/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29jAAAAAAAAAAAAAAAAD29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb27/b29v/29vb/9vb2//b29v9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC + //b29v/29vb/9vb2//b29v8AAAAAAAAAAAAAAAAAAAAA9vb2//b29v/29vb/9vb2/0JCQv9CQkL/QkJC + /0JCQv9CQkL/QkJC/0JCQv9CQkL/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vbv9vb2MAAAAAAAAAAA9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/QkJC/0JCQv9CQkL/QkJC + /0JCQv9CQkL/QkJC/0JCQv/29vb/9vb2//b29v/29vb/AAAAAAAAAAAAAAAAAAAAAPb29v/29vb/9vb2 + //b29v9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/rXIu/5xTAP+cUwD/nFMA/5xTAP+cUwD/nFMA/5xTAP++kFz/9vb2//b29v/29vb/9vb2 + //b29s/29vYQAAAAAPb29v/29vb/9vb2//b29v++kFz/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + /0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/9vb2//b29v/29vb/9vb2/wAAAAAAAAAAAAAA + AAAAAAD29vb/9vb2//b29v/29vb/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//Ds5/+tci7/nFMA/5xTAP+cUwD/nFMA/5xTAP+cUwD/nFMA + /8OabP/29vb/9vb2//b29v/29vb/9vb2zwAAAAD29vb/9vb2//b29v/29vb/nFMA/8+viv/29vb/9vb2 + //b29v/29vb/9vb2//b29v9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC//b29v/29vb/9vb2 + //b29v8AAAAAAAAAAAAAAAAAAAAA9vb2//b29v/29vb/9vb2/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC + /0JCQv9CQkL/9vb2//b29v/29vb/9vb2//b29mD29vb/9vb2//b29v/29vb/8Ozn/6JdD/+cUwD/nFMA + /5xTAP+cUwD/nFMA/5xTAP+cUwD/1Lma//b29v/29vb/9vb2//b29v/29vaf9vb2//b29v/29vb/9vb2 + /5xTAP+cUwD/4M25//b29v/29vb/9vb2//b29v/29vb/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC + /0JCQv/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v9CQkL/QkJC + /0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC//b29v/29vb/9vb2//b29v8AAAAA9vb2cPb29v/29vb/9vb2 + //b29v/l18j/ol0P/5xTAP+cUwD/nFMA/5xTAP+cUwD/nFMA/5xTAP/gzbn/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v+cUwD/nFMA/6JdD//r4tf/9vb2//b29v/29vb/9vb2/0JCQv9CQkL/QkJC + /0JCQv9CQkL/QkJC/0JCQv9CQkL/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv/29vb/9vb2//b29v/29vb/AAAA + AAAAAAD29vaf9vb2//b29v/29vb/9vb2/+XXyP+cUwD/nFMA/5xTAP+cUwD/nFMA/5xTAP+cUwD/ol0P + /+XXyP/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/nFMA/5xTAP+cUwD/rXIu//Ds5//29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/QkJC/0JCQv9CQkL/QkJC//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2/0JCQv9CQkL/QkJC/0JCQv/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2/wAAAAAAAAAAAAAAAPb29p/29vb/9vb2//b29v/29vb/1Lma/5xTAP+cUwD/nFMA + /5xTAP+cUwD/nFMA/5xTAP+nZx//8Ozn//b29v/29vb/9vb2//b29v/29vb/9vb2/5xTAP+cUwD/nFMA + /5xTAP++kFz/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2/0JCQv9CQkL/QkJC/0JCQv/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v9CQkL/QkJC/0JCQv9CQkL/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v8AAAAAAAAAAAAAAAD29vYQ9vb2z/b29v/29vb/9vb2 + //b29v/UuZr/nFMA/5xTAP+cUwD/nFMA/5xTAP+cUwD/nFMA/61yLv/w7Of/9vb2//b29v/29vb/9vb2 + //b29v+cUwD/nFMA/5xTAP+cUwD/nFMA/8+viv/29vb/9vb2//b29v/29vb/9vb2//b29v9CQkL/QkJC + /0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC + /0JCQv9CQkL/QkJC//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/AAAAAAAAAAAAAAAAAAAA + APb29hD29vbP9vb2//b29v/29vb/9vb2/76QXP+cUwD/nFMA/5xTAP+cUwD/nFMA/5xTAP+cUwD/vpBc + //b29v/29vb/9vb2//b29v/29vb/nFMA/5xTAP+cUwD/nFMA/5xTAP+cUwD/4M25//b29v/29vb/9vb2 + //b29v/29vb/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC + /0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + /wAAAAAAAAAAAAAAAAAAAAAAAAAA9vb2IPb29u/29vb/9vb2//b29v/29vb/vpBc/5xTAP+cUwD/nFMA + /5xTAP+cUwD/nFMA/5xTAP/Dmmz/9vb2//b29v/29vb/9vb2/5xTAP+cUwD/nFMA/5xTAP+cUwD/nFMA + /6JdD//r4tf/9vb2//b29v/29vb/9vb2/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC + /0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/9vb2//b29v/29vb/9vb2 + /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD29vYw9vb27/b29v/29vb/9vb2 + //b29v+tci7/nFMA/5xTAP+cUwD/nFMA/5xTAP+cUwD/nFMA/9S5mv/29vb/9vb2//b29v+cUwD/nFMA + /5xTAP+cUwD/nFMA/5xTAP+cUwD/rXIu//b29v/29vb/9vb2//b29v9CQkL/QkJC/0JCQv9CQkL/QkJC + /0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC + //b29v/29vb/9vb2//b29v8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + APb29kD29vb/9vb2//b29v/29vb/8Ozn/61yLv+cUwD/nFMA/5xTAP+cUwD/nFMA/5xTAP+cUwD/4M25 + //b29v/29vb/nFMA/5xTAP+cUwD/nFMA/5xTAP+cUwD/nFMA/5xTAP/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v9CQkL/QkJC/0JCQv9CQkL/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAA9vb2YPb29v/29vb/9vb2//b29v/w7Of/ol0P/5xTAP+cUwD/nFMA + /5xTAP+cUwD/nFMA/6JdD//l18j/9vb2/5xTAP+cUwD/nFMA/5xTAP+cUwD/nFMA/5xTAP+cUwD/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/QkJC/0JCQv9CQkL/QkJC + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2/wAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD29vZw9vb2//b29v/29vb/9vb2 + /+XXyP+iXQ//nFMA/5xTAP+cUwD/nFMA/5xTAP+cUwD/p2cf//Ds5/+cUwD/nFMA/5xTAP+cUwD/nFMA + /5xTAP+cUwD/nFMA//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + /0JCQv9CQkL/QkJC/0JCQv/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + APb29p/29vb/9vb2//b29v/29vb/5dfI/5xTAP+cUwD/nFMA/5xTAP+cUwD/nFMA/5xTAP+tci7/nFMA + /5xTAP+cUwD/nFMA/5xTAP+cUwD/nFMA/5xTAP/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v9CQkL/QkJC/0JCQv9CQkL/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/AAAAAAAAAAAAAAAAAAAAAPb29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/UuZr/nFMA/5xTAP+cUwD/nFMA + /5xTAP+cUwD/nFMA/5xTAP+cUwD/nFMA/5xTAP+cUwD/nFMA/5xTAP+cUwD/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC + /0JCQv/29vb/9vb2//b29v/29vb/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + /9S5mv+cUwD/nFMA/5xTAP+cUwD/nFMA/5xTAP+cUwD/nFMA/5xTAP+cUwD/nFMA/5xTAP+cUwD/nFMA + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC + /0JCQv9CQkL/QkJC/0JCQv9CQkL/9vb2//b29v/29vb/9vb2/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAA9vb2YPb29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/vpBc/5xTAP+cUwD/nFMA/5xTAP+cUwD/nFMA/5xTAP+cUwD/nFMA + /5xTAP+cUwD/nFMA/5xTAP/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2/0JCQv9CQkL/QkJC + /0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC//b29v/29vb/9vb2//b29v8AAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD29vZg9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v++kFz/nFMA/5xTAP+cUwD/nFMA + /5xTAP+cUwD/nFMA/5xTAP+cUwD/nFMA/5xTAP+cUwD/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv/29vb/9vb2 + //b29v/29vb/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPb29mD29vb/9vb2 + //b29v/29vb/9vb2/76QXP+cUwD/nFMA/5xTAP+cUwD/nFMA/5xTAP+cUwD/nFMA/5xTAP+cUwD/nFMA + /5xTAP+cUwD/nFMA/5xTAP+cUwD/nFMA/5xTAP+cUwD/nFMA/5xTAP+cUwD/nFMA//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC + /0JCQv9CQkL/9vb2//b29v/29vb/9vb2/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAA9vb2YPb29v/29vb/9vb2//b29v/29vb/vpBc/5xTAP+cUwD/nFMA/5xTAP+cUwD/nFMA + /5xTAP+cUwD/nFMA/5xTAP+cUwD/nFMA/5xTAP+cUwD/nFMA/5xTAP+cUwD/nFMA/5xTAP+cUwD/nFMA + /5xTAP/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC + /0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC//b29v/29vb/9vb2//b29v8AAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD29vZg9vb2//b29v/29vb/9vb2//b29v++kFz/nFMA + /5xTAP+cUwD/nFMA/5xTAP+cUwD/nFMA/5xTAP+cUwD/nFMA/5xTAP+cUwD/nFMA/5xTAP+cUwD/nFMA + /5xTAP+cUwD/nFMA/5xTAP+cUwD/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v9CQkL/QkJC + /0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv/29vb/9vb2//b29v/29vb/AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPb29mD29vb/9vb2 + //b29v/29vb/9vb2/76QXP+cUwD/nFMA/5xTAP+cUwD/nFMA/5xTAP+cUwD/nFMA/5xTAP+cUwD/nFMA + /5xTAP+cUwD/nFMA/5xTAP+cUwD/nFMA/5xTAP+cUwD/nFMA//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/9vb2 + //b29v/29vb/9vb2/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAA9vb2YPb29v/29vb/9vb2//b29v/29vb/vpBc/5xTAP+cUwD/nFMA/5xTAP+cUwD/nFMA + /5xTAP+cUwD/nFMA/5xTAP+cUwD/nFMA/5xTAP+cUwD/nFMA/5xTAP+cUwD/nFMA/5xTAP/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC + /0JCQv9CQkL/QkJC//b29v/29vb/9vb2//b29v8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD29vZg9vb2//b29v/29vb/9vb2//b29v++kFz/nFMA + /5xTAP+cUwD/nFMA/5xTAP+cUwD/nFMA/5xTAP+cUwD/nFMA/5xTAP+cUwD/nFMA/5xTAP+cUwD/nFMA + /5xTAP+cUwD/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v9CQkL/QkJC/0JCQv9CQkL/QkJC + /0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv/29vb/9vb2//b29v/29vb/AAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPb29mD29vb/9vb2 + //b29v/29vb/9vb2/76QXP+cUwD/nFMA/5xTAP+cUwD/nFMA/5xTAP+cUwD/nFMA/5xTAP+cUwD/nFMA + /5xTAP+cUwD/nFMA/5xTAP+cUwD/nFMA//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/QkJC + /0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/9vb2//b29v/29vb/9vb2 + /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAA9vb2YPb29v/29vb/9vb2//b29v/29vb/vpBc/5xTAP+cUwD/nFMA/5xTAP+cUwD/nFMA + /5xTAP+cUwD/nFMA/5xTAP+cUwD/nFMA/5xTAP+cUwD/nFMA/5xTAP/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC + //b29v/29vb/9vb2//b29v8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD29vZg9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPb29mD29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2/wAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAA9vb2YPb29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD29vZg9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////// + ////////////AAAAD/////8AAAAP/////wAAAA//////AAAAD/////8AAAAP/////wAAAA//////AAAA + D/////8AAAAP/////wAAAA//////AAAAD/////8AAAAP/////wAAAA//////AAAAD/////8AAAD///// + /wAAAP//////AAAA//////8AAAAA/////wAAAAD/////AAAAAP////8AAAAA/////wAAAAD/////AAAA + AP////8AAAAA/////wAAAAD/////AAAAAAAPAAAAAAAAAA8AAAAAAAAADwAAAAAAAAAPAAAAAfAQAA8A + AAAA8AAADwAAAABwAAAPAAAAADAAAA8AAAAAEAAADwAAAAAQAAAPAAAAAAAAAAAAAIAAAAAAAAAAwAAA + AAAAAADgAAAAAAAAAOAAAAAAAAAA8AAAAAAAAAD4AAAAAAAAD/wAAAAAAAAP/gAAAAAAAA//AAAAAAAA + D/+AAAAAAAAP/8AAAAAAAA8AAAAAAAAA/wAAAAAAAAD/AAAAAAAAAP+AAAAAAAAA/8AAAAAAAAD/4AAA + AAAAAP/wAAAAAAAA//gAAAAAAAD//AAAAAAAAP/+AAAAAAAA//8AAAAAAAD//4AAAAAAAP//wAAAAAAA + ///gAAAAAAD///AAAAAAAP//+AAAAAAA/ygAAAAwAAAAYAAAAAEAIAAAAAAAgCUAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAD29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v8AAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v8AAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD29vb/9vb2 + //b29v9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC + /0JCQv/29vb/9vb2//b29v8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAD29vb/9vb2//b29v9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC + /0JCQv9CQkL/QkJC/0JCQv/29vb/9vb2//b29v8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAD29vb/9vb2//b29v9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC + /0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv/29vb/9vb2//b29v8AAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v8AAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAD29vb/9vb2//b29v9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC + /0JCQv/29vb/9vb2//b29v/29vb/9vb2//b29v8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAD29vb/9vb2//b29v9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC + /0JCQv9CQkL/QkJC/0JCQv/29vb/9vb2//b29v8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD29vb/9vb2//b29v9CQkL/QkJC/0JCQv9CQkL/QkJC + /0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv/29vb/9vb2//b29v8AAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAD29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v8AAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAD29vb/9vb2//b29v9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC + /0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv/29vb/9vb2//b29v8AAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD29vb/9vb2//b29v9CQkL/QkJC/0JCQv9CQkL/QkJC + /0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv/29vb/9vb2 + //b29v8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD29vb/9vb2//b29v9CQkL/QkJC + /0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC + /0JCQv/29vb/9vb2//b29v8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v8AAAAAAAAAAAAAAAD29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v8AAAAAAAAAAAAAAAD29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v8AAAAAAAAAAAAAAAD29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb27/b29hAAAAAAAAAAAAAAAAD29vb/9vb2//b29v/29vb/9vb27/b29oD29vb/9vb2 + //b29v9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv/29vb/9vb2//b29v8AAAAAAAAAAAAAAAD29vb/9vb2 + //b29v9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29s8AAAAAAAAAAAAAAAD29vb/9vb2//b29v/29vb/9vb2 + //b29nD29vb/9vb2//b29v9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv/29vb/9vb2//b29v8AAAAAAAAA + AAAAAAD29vb/9vb2//b29v9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vaPAAAAAAAAAAD29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv/29vb/9vb2 + //b29v8AAAAAAAAAAAAAAAD29vb/9vb2//b29v9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + YAAAAAD29vb/9vb2//b29v/l18j/9vb2//b29v/29vb/9vb2//b29v9CQkL/QkJC/0JCQv9CQkL/QkJC + /0JCQv/29vb/9vb2//b29v8AAAAAAAAAAAAAAAD29vb/9vb2//b29v9CQkL/QkJC/0JCQv9CQkL/QkJC + /0JCQv/29vb/9vb2//b29v/29vb/9vb2//b29v/UuZr/nFMA/5xTAP+cUwD/nFMA/5xTAP+iXQ//5dfI + //b29v/29vb/9vb27/b29jD29vb/9vb2//b29v+iXQ//6+LX//b29v/29vb/9vb2//b29v9CQkL/QkJC + /0JCQv9CQkL/QkJC/0JCQv/29vb/9vb2//b29v8AAAAAAAAAAAAAAAD29vb/9vb2//b29v9CQkL/QkJC + /0JCQv9CQkL/QkJC/0JCQv/29vb/9vb2//b29v/29vZw9vb2//b29v/29vb/1Lma/5xTAP+cUwD/nFMA + /5xTAP+cUwD/p2cf//Ds5//29vb/9vb2//b29s/29vb/9vb2//b29v+cUwD/rXIu//Ds5//29vb/9vb2 + //b29v9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv/29vb/9vb2//b29v8AAAAA9vb2n/b29v/29vb/9vb2 + /76QXP+cUwD/nFMA/5xTAP+cUwD/nFMA/61yLv/w7Of/9vb2//b29v/29vb/9vb2//b29v+cUwD/nFMA + /76QXP/29vb/9vb2//b29v/29vb/9vb2//b29v9CQkL/QkJC/0JCQv/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v9CQkL/QkJC/0JCQv/29vb/9vb2//b29v/29vb/9vb2//b29v8AAAAAAAAA + APb29p/29vb/9vb2//b29v++kFz/nFMA/5xTAP+cUwD/nFMA/5xTAP++kFz/9vb2//b29v/29vb/9vb2 + //b29v+cUwD/nFMA/5xTAP/Pr4r/9vb2//b29v/29vb/9vb2//b29v9CQkL/QkJC/0JCQv/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v9CQkL/QkJC/0JCQv/29vb/9vb2//b29v/29vb/9vb2 + //b29v8AAAAAAAAAAPb29hD29vbP9vb2//b29v/29vb/rXIu/5xTAP+cUwD/nFMA/5xTAP+cUwD/w5ps + //b29v/29vb/9vb2//b29v+cUwD/nFMA/5xTAP+cUwD/4M25//b29v/29vb/9vb2//b29v9CQkL/QkJC + /0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv/29vb/9vb2 + //b29v/29vb/9vb2//b29v8AAAAAAAAAAAAAAAD29vYQ9vb2z/b29v/29vb/8Ozn/61yLv+cUwD/nFMA + /5xTAP+cUwD/nFMA/9S5mv/29vb/9vb2//b29v+cUwD/nFMA/5xTAP+cUwD/ol0P/+vi1//29vb/9vb2 + //b29v9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC + /0JCQv/29vb/9vb2//b29v8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9vb2IPb29u/29vb/9vb2 + //Ds5/+iXQ//nFMA/5xTAP+cUwD/nFMA/5xTAP/gzbn/9vb2//b29v+cUwD/nFMA/5xTAP+cUwD/nFMA + /61yLv/29vb/9vb2//b29v9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC + /0JCQv9CQkL/QkJC/0JCQv/29vb/9vb2//b29v8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + APb29jD29vbv9vb2//b29v/l18j/ol0P/5xTAP+cUwD/nFMA/5xTAP+iXQ//5dfI//b29v+cUwD/nFMA + /5xTAP+cUwD/nFMA/5xTAP/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v9CQkL/QkJC + /0JCQv/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v8AAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAD29vZA9vb2//b29v/29vb/5dfI/5xTAP+cUwD/nFMA/5xTAP+cUwD/p2cf + //Ds5/+cUwD/nFMA/5xTAP+cUwD/nFMA/5xTAP/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v9CQkL/QkJC/0JCQv/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v8AAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9vb2YPb29v/29vb/9vb2/9S5mv+cUwD/nFMA + /5xTAP+cUwD/nFMA/61yLv+cUwD/nFMA/5xTAP+cUwD/nFMA/5xTAP/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v9CQkL/QkJC/0JCQv/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v8AAAAAAAAAAAAAAAD29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v/UuZr/nFMA/5xTAP+cUwD/nFMA/5xTAP+cUwD/nFMA/5xTAP+cUwD/nFMA/5xTAP/29vb/9vb2 + //b29v/29vb/9vb2//b29v9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv/29vb/9vb2 + //b29v8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD29vbP9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/vpBc/5xTAP+cUwD/nFMA/5xTAP+cUwD/nFMA/5xTAP+cUwD/nFMA + /5xTAP/29vb/9vb2//b29v/29vb/9vb2//b29v9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC + /0JCQv/29vb/9vb2//b29v8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD29vYQ9vb2z/b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2/76QXP+cUwD/nFMA/5xTAP+cUwD/nFMA + /5xTAP+cUwD/nFMA/5xTAP/29vb/9vb2//b29v/29vb/9vb2//b29v9CQkL/QkJC/0JCQv9CQkL/QkJC + /0JCQv9CQkL/QkJC/0JCQv/29vb/9vb2//b29v8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9vb2 + EPb29s/29vb/9vb2//b29v++kFz/nFMA/5xTAP+cUwD/nFMA/5xTAP+cUwD/nFMA/5xTAP+cUwD/nFMA + /5xTAP+cUwD/nFMA/5xTAP+cUwD/nFMA/5xTAP/29vb/9vb2//b29v/29vb/9vb2//b29v9CQkL/QkJC + /0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv/29vb/9vb2//b29v8AAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAPb29hD29vbP9vb2//b29v/29vb/vpBc/5xTAP+cUwD/nFMA/5xTAP+cUwD/nFMA + /5xTAP+cUwD/nFMA/5xTAP+cUwD/nFMA/5xTAP+cUwD/nFMA/5xTAP/29vb/9vb2//b29v/29vb/9vb2 + //b29v9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv/29vb/9vb2//b29v8AAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD29vYQ9vb2z/b29v/29vb/9vb2/76QXP+cUwD/nFMA + /5xTAP+cUwD/nFMA/5xTAP+cUwD/nFMA/5xTAP+cUwD/nFMA/5xTAP+cUwD/nFMA/5xTAP/29vb/9vb2 + //b29v/29vb/9vb2//b29v9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv/29vb/9vb2 + //b29v8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9vb2EPb29s/29vb/9vb2 + //b29v++kFz/nFMA/5xTAP+cUwD/nFMA/5xTAP+cUwD/nFMA/5xTAP+cUwD/nFMA/5xTAP+cUwD/nFMA + /5xTAP/29vb/9vb2//b29v/29vb/9vb2//b29v9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC + /0JCQv/29vb/9vb2//b29v8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + APb29hD29vbP9vb2//b29v/29vb/vpBc/5xTAP+cUwD/nFMA/5xTAP+cUwD/nFMA/5xTAP+cUwD/nFMA + /5xTAP+cUwD/nFMA/5xTAP/29vb/9vb2//b29v/29vb/9vb2//b29v9CQkL/QkJC/0JCQv9CQkL/QkJC + /0JCQv9CQkL/QkJC/0JCQv/29vb/9vb2//b29v8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAD29vYQ9vb2z/b29v/29vb/9vb2/76QXP+cUwD/nFMA/5xTAP+cUwD/nFMA + /5xTAP+cUwD/nFMA/5xTAP+cUwD/nFMA/5xTAP/29vb/9vb2//b29v/29vb/9vb2//b29v9CQkL/QkJC + /0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv/29vb/9vb2//b29v8AAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9vb2EPb29s/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v8AAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPb29hD29vbP9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAD29vYQ9vb2z/b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////8AAAAAB////wAAAAAH + ////AAAAAAf///8AAAAAB////wAAAAAH////AAAAAAf///8AAAAAB////wAAAAAH////AAAAAAf///8A + AAAAB////wAAAAA/////AAAAAD////8AAAAAAP///wAAAAAA////AAAAAAD///8AAAAAAP///wAAAAAA + ////AAAAAAD///8AAAAAAABwAAAAAAAAAHAAAAAAAAAAcAAAAAAOAABwAAAAAA4AAHAAAAAABgAAcAAA + AAACAABwAAAAAAAAAHAAAAAAAAAAAAAAAIAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAOAAAAAABwAA8AAA + AAAHAAD4AAAAAAcAAPwAAAAABwAA/gAAAAAHAAAAAAAAAD8AAAAAAAAAPwAAAAAAAAA/AACAAAAAAD8A + AMAAAAAAPwAA4AAAAAA/AADwAAAAAD8AAPgAAAAAPwAA/AAAAAA/AAD+AAAAAD8AAP8AAAAAPwAA/4AA + AAA/AAAoAAAAIAAAAEAAAAABACAAAAAAAIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2/wAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + APb29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAA9vb2//b29v9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/9vb2 + //b29v8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAD29vb/9vb2/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC + /0JCQv/29vb/9vb2/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPb29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD29vb/9vb2/0JCQv9CQkL/QkJC + /0JCQv9CQkL/QkJC/0JCQv9CQkL/9vb2//b29v/39/dA9/f3QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPb29v/29vb/QkJC + /0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv/29vb/9vb2/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAD29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAPb29v/29vb/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC + /0JCQv9CQkL/9vb2//b29v8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAA9vb2//b29v9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC + /0JCQv9CQkL/QkJC/0JCQv/29vb/9vb2/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/AAAA + AAAAAAD29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v8AAAAAAAAAAPb29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//X19Z8AAAAAAAAAAPb29v/29vb/9vb2//X19Z/29vb/9vb2/0JCQv9CQkL/QkJC + /0JCQv/29vb/9vb2/wAAAAAAAAAA9vb2//b29v9CQkL/QkJC/0JCQv9CQkL/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//f392AAAAAA9vb2//b29v/29vb/9vb2//b29v/29vb/QkJC + /0JCQv9CQkL/QkJC//b29v/29vb/AAAAAAAAAAD29vb/9vb2/0JCQv9CQkL/QkJC/0JCQv/29vb/9vb2 + //b29v/29vb/rXIu/5xTAP+cUwD/nFMA/76QXP/29vb/9vb2//X19VD29vb/9vb2/76QXP/29vb/9vb2 + //b29v9CQkL/QkJC/0JCQv9CQkL/9vb2//b29v8AAAAAAAAAAPb29v/29vb/QkJC/0JCQv9CQkL/QkJC + //b29v/29vb/9fX1n/b29v/w7Of/rXIu/5xTAP+cUwD/nFMA/8OabP/29vb/9vb27/b29v/29vb/nFMA + /8+viv/29vb/9vb2/0JCQv9CQkL/QkJC/0JCQv/29vb/9vb2//b29v/29vb/9vb2//b29v9CQkL/QkJC + /0JCQv9CQkL/9vb2//b29v8AAAAA9fX1n/b29v/w7Of/ol0P/5xTAP+cUwD/nFMA/9S5mv/29vb/9vb2 + //b29v+cUwD/nFMA/+DNuf/29vb/9vb2//b29v9CQkL/QkJC//b29v/29vb/9vb2//b29v/29vb/9vb2 + /0JCQv9CQkL/9vb2//b29v/29vb/9vb2/wAAAADv7+8Q9vb2z/b29v/l18j/ol0P/5xTAP+cUwD/nFMA + /+DNuf/29vb/9vb2/5xTAP+cUwD/ol0P/+vi1//29vb/9vb2/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC + /0JCQv9CQkL/QkJC/0JCQv/29vb/9vb2//b29v/29vb/AAAAAAAAAADv7+8Q9vb2z/b29v/l18j/nFMA + /5xTAP+cUwD/ol0P/+XXyP/29vb/nFMA/5xTAP+cUwD/rXIu//b29v/29vb/QkJC/0JCQv9CQkL/QkJC + /0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC//b29v/29vb/AAAAAAAAAAAAAAAAAAAAAAAAAAD39/cg9vb2 + 7/b29v/UuZr/nFMA/5xTAP+cUwD/p2cf//Ds5/+cUwD/nFMA/5xTAP+cUwD/9vb2//b29v/29vb/9vb2 + //b29v/29vb/QkJC/0JCQv/29vb/9vb2//b29v/29vb/9vb2//b29v8AAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAD09PQw9vb27/b29v/UuZr/nFMA/5xTAP+cUwD/rXIu/5xTAP+cUwD/nFMA/5xTAP/29vb/9vb2 + //b29v/29vb/9vb2//b29v9CQkL/QkJC//b29v/29vb/9vb2//b29v/29vb/9vb2/wAAAAAAAAAA9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v++kFz/nFMA/5xTAP+cUwD/nFMA/5xTAP+cUwD/nFMA + //b29v/29vb/9vb2//b29v9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv/29vb/9vb2/wAAAAAAAAAAAAAA + AAAAAAD19fWf9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v++kFz/nFMA/5xTAP+cUwD/nFMA + /5xTAP+cUwD/9vb2//b29v/29vb/9vb2/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC//b29v/29vb/AAAA + AAAAAAAAAAAAAAAAAAAAAAD19fWf9vb2//b29v++kFz/nFMA/5xTAP+cUwD/nFMA/5xTAP+cUwD/nFMA + /5xTAP+cUwD/nFMA/5xTAP/29vb/9vb2//b29v/29vb/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/9vb2 + //b29v8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD19fWf9vb2//b29v++kFz/nFMA/5xTAP+cUwD/nFMA + /5xTAP+cUwD/nFMA/5xTAP+cUwD/nFMA//b29v/29vb/9vb2//b29v9CQkL/QkJC/0JCQv9CQkL/QkJC + /0JCQv/29vb/9vb2/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD19fWf9vb2//b29v++kFz/nFMA + /5xTAP+cUwD/nFMA/5xTAP+cUwD/nFMA/5xTAP+cUwD/9vb2//b29v/29vb/9vb2/0JCQv9CQkL/QkJC + /0JCQv9CQkL/QkJC//b29v/29vb/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD19fWf9vb2 + //b29v++kFz/nFMA/5xTAP+cUwD/nFMA/5xTAP+cUwD/nFMA/5xTAP/29vb/9vb2//b29v/29vb/QkJC + /0JCQv9CQkL/QkJC/0JCQv9CQkL/9vb2//b29v8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAD19fWf9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAD19fWf9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/AAAAAAAAAAAAAAAAAAAA + AP////8AA///AAP//wAD//8AA///AAP//wAD//8AA///AA///wAA//8AAP//AAD//wAA//8AAAMAAAAD + AADAAwAAQAMAAAADAAAAAACAAAAAgAAAAMAAAAPgAAAD8AAAAwAAAA8AAAAPgAAAD8AAAA/gAAAP8AAA + D/gAAA/8AAAPKAAAABAAAAAgAAAAAQAgAAAAAABABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9vb2 + /0JCQv9CQkL/QkJC/0JCQv9CQkL/9vb2/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + APb29v/29vb/9vb2//b29v/29vb/9vb2//b29v8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAD29vb/QkJC/0JCQv9CQkL/QkJC//b29v8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAA9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v8AAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAPb29v9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv/29vb/AAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAD29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + /wAAAAD29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb27/T09DD29vb/9vb27/b29v9CQkL/QkJC + //b29v8AAAAA9vb2/0JCQv9CQkL/9vb2//b29u++kFz/nFMA/76QXP/29vbv9vb2/76QXP/29vb/QkJC + /0JCQv/29vb/9vb2//b29v9CQkL/QkJC//b29v/09PQw9vb2776QXP+cUwD/vpBc//b29v+cUwD/vpBc + //b29v9CQkL/QkJC/0JCQv9CQkL/QkJC//b29v/29vb/AAAAAPT09DD29vbvvpBc/5xTAP++kFz/nFMA + /5xTAP/29vb/9vb2//b29v9CQkL/9vb2//b29v/29vb/AAAAAPb29u/29vb/9vb2//b29v++kFz/nFMA + /5xTAP+cUwD/9vb2//b29v9CQkL/QkJC/0JCQv/29vb/AAAAAAAAAAD09PQw9vb2776QXP+cUwD/nFMA + /5xTAP+cUwD/nFMA//b29v/29vb/QkJC/0JCQv9CQkL/9vb2/wAAAAAAAAAAAAAAAPT09DD29vbvvpBc + /5xTAP+cUwD/nFMA/5xTAP/29vb/9vb2/0JCQv9CQkL/QkJC//b29v8AAAAAAAAAAAAAAAAAAAAA9PT0 + MPb29u/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/AAAAAAAAAAD//wAAAf8A + AAH/AAAB/wAAA/8AAAD/AAAA/wAAABAAAAAQAAAAAAAAAAAAAIABAAAAAwAAAAMAAIADAADAAwAA + + + \ No newline at end of file diff --git a/source/shared/project/source/gui/question.Designer.cs b/source/shared/project/source/gui/question.Designer.cs index d530e70..d83f694 100644 --- a/source/shared/project/source/gui/question.Designer.cs +++ b/source/shared/project/source/gui/question.Designer.cs @@ -33,12 +33,12 @@ private void InitializeComponent() this.buttonAdvanced = new System.Windows.Forms.Button(); this.labelQuestion = new System.Windows.Forms.Label(); this.labelInfoProject2 = new System.Windows.Forms.Label(); - this.label2 = new System.Windows.Forms.Label(); + this.labelQuestionMark = new System.Windows.Forms.Label(); this.labelInfoFroject = new System.Windows.Forms.Label(); - this.labelInfoRootDir = new System.Windows.Forms.Label(); - this.labelInfoRootFilter = new System.Windows.Forms.Label(); - this.labelInfoRootFilter2 = new System.Windows.Forms.Label(); - this.labelInfoRootDir2 = new System.Windows.Forms.Label(); + this.labelInfoCalculate2 = new System.Windows.Forms.Label(); + this.labelInfoOut2 = new System.Windows.Forms.Label(); + this.labelInfoOut3 = new System.Windows.Forms.Label(); + this.labelInfoCalculate3 = new System.Windows.Forms.Label(); this.labelWarning = new System.Windows.Forms.Label(); this.groupBoxQuestion = new System.Windows.Forms.GroupBox(); this.labelWarning2 = new System.Windows.Forms.Label(); @@ -53,6 +53,7 @@ private void InitializeComponent() // // buttonYes // + this.buttonYes.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); this.buttonYes.Location = new System.Drawing.Point(51, 57); this.buttonYes.Name = "buttonYes"; this.buttonYes.Size = new System.Drawing.Size(88, 35); @@ -63,6 +64,7 @@ private void InitializeComponent() // // buttonAdvanced // + this.buttonAdvanced.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); this.buttonAdvanced.Location = new System.Drawing.Point(51, 16); this.buttonAdvanced.Name = "buttonAdvanced"; this.buttonAdvanced.Size = new System.Drawing.Size(88, 35); @@ -89,15 +91,15 @@ private void InitializeComponent() this.labelInfoProject2.TabIndex = 2; this.labelInfoProject2.Text = "name"; // - // label2 + // labelQuestionMark // - this.label2.AutoSize = true; - this.label2.Font = new System.Drawing.Font("Consolas", 27.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.label2.Location = new System.Drawing.Point(6, 16); - this.label2.Name = "label2"; - this.label2.Size = new System.Drawing.Size(39, 43); - this.label2.TabIndex = 2; - this.label2.Text = "?"; + this.labelQuestionMark.AutoSize = true; + this.labelQuestionMark.Font = new System.Drawing.Font("Consolas", 27.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.labelQuestionMark.Location = new System.Drawing.Point(6, 16); + this.labelQuestionMark.Name = "labelQuestionMark"; + this.labelQuestionMark.Size = new System.Drawing.Size(39, 43); + this.labelQuestionMark.TabIndex = 2; + this.labelQuestionMark.Text = "?"; // // labelInfoFroject // @@ -109,43 +111,43 @@ private void InitializeComponent() this.labelInfoFroject.TabIndex = 2; this.labelInfoFroject.Text = "project:"; // - // labelInfoRootDir + // labelInfoCalculate2 // - this.labelInfoRootDir.AutoSize = true; - this.labelInfoRootDir.Font = new System.Drawing.Font("Consolas", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.labelInfoRootDir.Location = new System.Drawing.Point(121, 86); - this.labelInfoRootDir.Name = "labelInfoRootDir"; - this.labelInfoRootDir.Size = new System.Drawing.Size(55, 13); - this.labelInfoRootDir.TabIndex = 2; - this.labelInfoRootDir.Text = "rootDir:"; + this.labelInfoCalculate2.AutoSize = true; + this.labelInfoCalculate2.Font = new System.Drawing.Font("Consolas", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.labelInfoCalculate2.Location = new System.Drawing.Point(121, 86); + this.labelInfoCalculate2.Name = "labelInfoCalculate2"; + this.labelInfoCalculate2.Size = new System.Drawing.Size(55, 13); + this.labelInfoCalculate2.TabIndex = 2; + this.labelInfoCalculate2.Text = "rootDir:"; // - // labelInfoRootFilter + // labelInfoOut2 // - this.labelInfoRootFilter.AutoSize = true; - this.labelInfoRootFilter.Font = new System.Drawing.Font("Consolas", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.labelInfoRootFilter.Location = new System.Drawing.Point(103, 108); - this.labelInfoRootFilter.Name = "labelInfoRootFilter"; - this.labelInfoRootFilter.Size = new System.Drawing.Size(73, 13); - this.labelInfoRootFilter.TabIndex = 2; - this.labelInfoRootFilter.Text = "rootFilter:"; + this.labelInfoOut2.AutoSize = true; + this.labelInfoOut2.Font = new System.Drawing.Font("Consolas", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.labelInfoOut2.Location = new System.Drawing.Point(103, 108); + this.labelInfoOut2.Name = "labelInfoOut2"; + this.labelInfoOut2.Size = new System.Drawing.Size(73, 13); + this.labelInfoOut2.TabIndex = 2; + this.labelInfoOut2.Text = "rootFilter:"; // - // labelInfoRootFilter2 + // labelInfoOut3 // - this.labelInfoRootFilter2.AutoSize = true; - this.labelInfoRootFilter2.Location = new System.Drawing.Point(200, 108); - this.labelInfoRootFilter2.Name = "labelInfoRootFilter2"; - this.labelInfoRootFilter2.Size = new System.Drawing.Size(31, 13); - this.labelInfoRootFilter2.TabIndex = 2; - this.labelInfoRootFilter2.Text = "name"; + this.labelInfoOut3.AutoSize = true; + this.labelInfoOut3.Location = new System.Drawing.Point(200, 108); + this.labelInfoOut3.Name = "labelInfoOut3"; + this.labelInfoOut3.Size = new System.Drawing.Size(31, 13); + this.labelInfoOut3.TabIndex = 2; + this.labelInfoOut3.Text = "name"; // - // labelInfoRootDir2 + // labelInfoCalculate3 // - this.labelInfoRootDir2.AutoSize = true; - this.labelInfoRootDir2.Location = new System.Drawing.Point(200, 86); - this.labelInfoRootDir2.Name = "labelInfoRootDir2"; - this.labelInfoRootDir2.Size = new System.Drawing.Size(31, 13); - this.labelInfoRootDir2.TabIndex = 2; - this.labelInfoRootDir2.Text = "name"; + this.labelInfoCalculate3.AutoSize = true; + this.labelInfoCalculate3.Location = new System.Drawing.Point(200, 86); + this.labelInfoCalculate3.Name = "labelInfoCalculate3"; + this.labelInfoCalculate3.Size = new System.Drawing.Size(31, 13); + this.labelInfoCalculate3.TabIndex = 2; + this.labelInfoCalculate3.Text = "name"; // // labelWarning // @@ -161,7 +163,7 @@ private void InitializeComponent() this.groupBoxQuestion.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); this.groupBoxQuestion.Controls.Add(this.buttonAdvanced); this.groupBoxQuestion.Controls.Add(this.buttonYes); - this.groupBoxQuestion.Controls.Add(this.label2); + this.groupBoxQuestion.Controls.Add(this.labelQuestionMark); this.groupBoxQuestion.Location = new System.Drawing.Point(437, 114); this.groupBoxQuestion.Name = "groupBoxQuestion"; this.groupBoxQuestion.Size = new System.Drawing.Size(154, 100); @@ -250,10 +252,10 @@ private void InitializeComponent() this.Controls.Add(this.labelWarning2); this.Controls.Add(this.groupBoxQuestion); this.Controls.Add(this.labelWarning); - this.Controls.Add(this.labelInfoRootDir2); - this.Controls.Add(this.labelInfoRootFilter2); - this.Controls.Add(this.labelInfoRootFilter); - this.Controls.Add(this.labelInfoRootDir); + this.Controls.Add(this.labelInfoCalculate3); + this.Controls.Add(this.labelInfoOut3); + this.Controls.Add(this.labelInfoOut2); + this.Controls.Add(this.labelInfoCalculate2); this.Controls.Add(this.labelInfoFroject); this.Controls.Add(this.labelInfoProject2); this.Controls.Add(this.labelQuestion); @@ -272,17 +274,15 @@ private void InitializeComponent() #endregion private System.Windows.Forms.Button buttonYes; - private System.Windows.Forms.Button buttonAdvanced; - private System.Windows.Forms.Label label2; + private System.Windows.Forms.Label labelQuestionMark; public System.Windows.Forms.Label labelQuestion; public System.Windows.Forms.Label labelInfoProject2; public System.Windows.Forms.Label labelInfoFroject; - public System.Windows.Forms.Label labelInfoRootDir; - public System.Windows.Forms.Label labelInfoRootFilter; - public System.Windows.Forms.Label labelInfoRootFilter2; - public System.Windows.Forms.Label labelInfoRootDir2; + public System.Windows.Forms.Label labelInfoCalculate2; + public System.Windows.Forms.Label labelInfoOut2; + public System.Windows.Forms.Label labelInfoOut3; + public System.Windows.Forms.Label labelInfoCalculate3; public System.Windows.Forms.Label labelWarning; - private System.Windows.Forms.GroupBox groupBoxQuestion; public System.Windows.Forms.Label labelWarning2; public System.Windows.Forms.Label labelWarning3; public System.Windows.Forms.Label labelInfoIn; @@ -290,5 +290,7 @@ private void InitializeComponent() public System.Windows.Forms.Label labelInfoOut; public System.Windows.Forms.Label labelInfoIn2; public System.Windows.Forms.Label labelWarning4; + public System.Windows.Forms.Button buttonAdvanced; + public System.Windows.Forms.GroupBox groupBoxQuestion; } } \ No newline at end of file diff --git a/source/shared/project/source/gui/questionFtd.Designer.cs b/source/shared/project/source/gui/questionFtd.Designer.cs new file mode 100644 index 0000000..3c2f1da --- /dev/null +++ b/source/shared/project/source/gui/questionFtd.Designer.cs @@ -0,0 +1,319 @@ +namespace VisualStudioCppExtensions +{ + partial class formQuestionFtd + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(formQuestionFtd)); + this.buttonYes = new System.Windows.Forms.Button(); + this.labelQuestion = new System.Windows.Forms.Label(); + this.labelInfoProject2 = new System.Windows.Forms.Label(); + this.labelQuestionMark = new System.Windows.Forms.Label(); + this.labelInfoFroject = new System.Windows.Forms.Label(); + this.labelInfoCalculate2 = new System.Windows.Forms.Label(); + this.labelInfoOut2 = new System.Windows.Forms.Label(); + this.labelInfoOut3 = new System.Windows.Forms.Label(); + this.labelInfoCalculate3 = new System.Windows.Forms.Label(); + this.labelWarning = new System.Windows.Forms.Label(); + this.groupBoxQuestion = new System.Windows.Forms.GroupBox(); + this.labelWarning2 = new System.Windows.Forms.Label(); + this.labelWarning3 = new System.Windows.Forms.Label(); + this.labelInfoIn = new System.Windows.Forms.Label(); + this.labelInfoCalculate = new System.Windows.Forms.Label(); + this.labelInfoOut = new System.Windows.Forms.Label(); + this.labelInfoIn2 = new System.Windows.Forms.Label(); + this.labelWarning4 = new System.Windows.Forms.Label(); + this.labelWarning5 = new System.Windows.Forms.Label(); + this.labelWarning6 = new System.Windows.Forms.Label(); + this.label1 = new System.Windows.Forms.Label(); + this.groupBoxQuestion.SuspendLayout(); + this.SuspendLayout(); + // + // buttonYes + // + this.buttonYes.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.buttonYes.Location = new System.Drawing.Point(51, 13); + this.buttonYes.Name = "buttonYes"; + this.buttonYes.Size = new System.Drawing.Size(88, 35); + this.buttonYes.TabIndex = 0; + this.buttonYes.Text = "yes"; + this.buttonYes.UseVisualStyleBackColor = true; + this.buttonYes.Click += new System.EventHandler(this.buttonYesClick); + // + // labelQuestion + // + this.labelQuestion.AutoSize = true; + this.labelQuestion.Location = new System.Drawing.Point(12, 9); + this.labelQuestion.Name = "labelQuestion"; + this.labelQuestion.Size = new System.Drawing.Size(511, 13); + this.labelQuestion.TabIndex = 2; + this.labelQuestion.Text = "Do you want to automatically generate (filterTree => directoryTree) directories f" + + "or:"; + // + // labelInfoProject2 + // + this.labelInfoProject2.AutoSize = true; + this.labelInfoProject2.Location = new System.Drawing.Point(103, 31); + this.labelInfoProject2.Name = "labelInfoProject2"; + this.labelInfoProject2.Size = new System.Drawing.Size(31, 13); + this.labelInfoProject2.TabIndex = 2; + this.labelInfoProject2.Text = "name"; + // + // labelQuestionMark + // + this.labelQuestionMark.AutoSize = true; + this.labelQuestionMark.Font = new System.Drawing.Font("Consolas", 27.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.labelQuestionMark.Location = new System.Drawing.Point(6, 8); + this.labelQuestionMark.Name = "labelQuestionMark"; + this.labelQuestionMark.Size = new System.Drawing.Size(39, 43); + this.labelQuestionMark.TabIndex = 2; + this.labelQuestionMark.Text = "?"; + // + // labelInfoFroject + // + this.labelInfoFroject.AutoSize = true; + this.labelInfoFroject.Font = new System.Drawing.Font("Consolas", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.labelInfoFroject.Location = new System.Drawing.Point(24, 31); + this.labelInfoFroject.Name = "labelInfoFroject"; + this.labelInfoFroject.Size = new System.Drawing.Size(55, 13); + this.labelInfoFroject.TabIndex = 2; + this.labelInfoFroject.Text = "project:"; + // + // labelInfoCalculate2 + // + this.labelInfoCalculate2.AutoSize = true; + this.labelInfoCalculate2.Font = new System.Drawing.Font("Consolas", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.labelInfoCalculate2.Location = new System.Drawing.Point(103, 86); + this.labelInfoCalculate2.Name = "labelInfoCalculate2"; + this.labelInfoCalculate2.Size = new System.Drawing.Size(73, 13); + this.labelInfoCalculate2.TabIndex = 2; + this.labelInfoCalculate2.Text = "rootFilter:"; + // + // labelInfoOut2 + // + this.labelInfoOut2.AutoSize = true; + this.labelInfoOut2.Font = new System.Drawing.Font("Consolas", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.labelInfoOut2.Location = new System.Drawing.Point(121, 108); + this.labelInfoOut2.Name = "labelInfoOut2"; + this.labelInfoOut2.Size = new System.Drawing.Size(55, 13); + this.labelInfoOut2.TabIndex = 2; + this.labelInfoOut2.Text = "rootDir:"; + // + // labelInfoOut3 + // + this.labelInfoOut3.AutoSize = true; + this.labelInfoOut3.Location = new System.Drawing.Point(200, 108); + this.labelInfoOut3.Name = "labelInfoOut3"; + this.labelInfoOut3.Size = new System.Drawing.Size(31, 13); + this.labelInfoOut3.TabIndex = 2; + this.labelInfoOut3.Text = "name"; + // + // labelInfoCalculate3 + // + this.labelInfoCalculate3.AutoSize = true; + this.labelInfoCalculate3.Location = new System.Drawing.Point(200, 86); + this.labelInfoCalculate3.Name = "labelInfoCalculate3"; + this.labelInfoCalculate3.Size = new System.Drawing.Size(31, 13); + this.labelInfoCalculate3.TabIndex = 2; + this.labelInfoCalculate3.Text = "name"; + // + // labelWarning + // + this.labelWarning.AutoSize = true; + this.labelWarning.Location = new System.Drawing.Point(12, 165); + this.labelWarning.Name = "labelWarning"; + this.labelWarning.Size = new System.Drawing.Size(73, 13); + this.labelWarning.TabIndex = 2; + this.labelWarning.Text = "Warning: "; + // + // groupBoxQuestion + // + this.groupBoxQuestion.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.groupBoxQuestion.Controls.Add(this.buttonYes); + this.groupBoxQuestion.Controls.Add(this.labelQuestionMark); + this.groupBoxQuestion.Location = new System.Drawing.Point(437, 230); + this.groupBoxQuestion.Name = "groupBoxQuestion"; + this.groupBoxQuestion.Size = new System.Drawing.Size(154, 56); + this.groupBoxQuestion.TabIndex = 30; + this.groupBoxQuestion.TabStop = false; + // + // labelWarning2 + // + this.labelWarning2.AutoSize = true; + this.labelWarning2.Location = new System.Drawing.Point(82, 165); + this.labelWarning2.Name = "labelWarning2"; + this.labelWarning2.Size = new System.Drawing.Size(349, 13); + this.labelWarning2.TabIndex = 4; + this.labelWarning2.Text = "1. Please save the project before using this extension."; + // + // labelWarning3 + // + this.labelWarning3.AutoSize = true; + this.labelWarning3.Location = new System.Drawing.Point(82, 182); + this.labelWarning3.Name = "labelWarning3"; + this.labelWarning3.Size = new System.Drawing.Size(349, 13); + this.labelWarning3.TabIndex = 5; + this.labelWarning3.Text = "If results are not adequate, close project without saving"; + // + // labelInfoIn + // + this.labelInfoIn.AutoSize = true; + this.labelInfoIn.Font = new System.Drawing.Font("Consolas", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.labelInfoIn.Location = new System.Drawing.Point(54, 64); + this.labelInfoIn.Name = "labelInfoIn"; + this.labelInfoIn.Size = new System.Drawing.Size(25, 13); + this.labelInfoIn.TabIndex = 6; + this.labelInfoIn.Text = "in:"; + // + // labelInfoCalculate + // + this.labelInfoCalculate.AutoSize = true; + this.labelInfoCalculate.Font = new System.Drawing.Font("Consolas", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.labelInfoCalculate.Location = new System.Drawing.Point(12, 86); + this.labelInfoCalculate.Name = "labelInfoCalculate"; + this.labelInfoCalculate.Size = new System.Drawing.Size(67, 13); + this.labelInfoCalculate.TabIndex = 7; + this.labelInfoCalculate.Text = "calculate:"; + // + // labelInfoOut + // + this.labelInfoOut.AutoSize = true; + this.labelInfoOut.Font = new System.Drawing.Font("Consolas", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.labelInfoOut.Location = new System.Drawing.Point(48, 108); + this.labelInfoOut.Name = "labelInfoOut"; + this.labelInfoOut.Size = new System.Drawing.Size(31, 13); + this.labelInfoOut.TabIndex = 8; + this.labelInfoOut.Text = "out:"; + // + // labelInfoIn2 + // + this.labelInfoIn2.AutoSize = true; + this.labelInfoIn2.Font = new System.Drawing.Font("Consolas", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.labelInfoIn2.Location = new System.Drawing.Point(200, 64); + this.labelInfoIn2.Name = "labelInfoIn2"; + this.labelInfoIn2.Size = new System.Drawing.Size(97, 13); + this.labelInfoIn2.TabIndex = 9; + this.labelInfoIn2.Text = "project whole"; + // + // labelWarning4 + // + this.labelWarning4.AutoSize = true; + this.labelWarning4.Location = new System.Drawing.Point(82, 199); + this.labelWarning4.Name = "labelWarning4"; + this.labelWarning4.Size = new System.Drawing.Size(151, 13); + this.labelWarning4.TabIndex = 10; + this.labelWarning4.Text = "and open last save point"; + // + // labelWarning5 + // + this.labelWarning5.AutoSize = true; + this.labelWarning5.Location = new System.Drawing.Point(82, 224); + this.labelWarning5.Name = "labelWarning5"; + this.labelWarning5.Size = new System.Drawing.Size(295, 13); + this.labelWarning5.TabIndex = 11; + this.labelWarning5.Text = "2. #include directives may need to be changed"; + // + // labelWarning6 + // + this.labelWarning6.AutoSize = true; + this.labelWarning6.Location = new System.Drawing.Point(82, 249); + this.labelWarning6.Name = "labelWarning6"; + this.labelWarning6.Size = new System.Drawing.Size(295, 13); + this.labelWarning6.TabIndex = 12; + this.labelWarning6.Text = "3. this extension will access your fileSystem:"; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(82, 266); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(271, 13); + this.label1.TabIndex = 13; + this.label1.Text = "move project files, delete empty directories"; + // + // formQuestionFtd + // + this.AcceptButton = this.buttonYes; + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(599, 293); + this.Controls.Add(this.label1); + this.Controls.Add(this.labelWarning6); + this.Controls.Add(this.labelWarning5); + this.Controls.Add(this.labelWarning4); + this.Controls.Add(this.labelInfoIn2); + this.Controls.Add(this.labelInfoOut); + this.Controls.Add(this.labelInfoCalculate); + this.Controls.Add(this.labelInfoIn); + this.Controls.Add(this.labelWarning3); + this.Controls.Add(this.labelWarning2); + this.Controls.Add(this.groupBoxQuestion); + this.Controls.Add(this.labelWarning); + this.Controls.Add(this.labelInfoCalculate3); + this.Controls.Add(this.labelInfoOut3); + this.Controls.Add(this.labelInfoOut2); + this.Controls.Add(this.labelInfoCalculate2); + this.Controls.Add(this.labelInfoFroject); + this.Controls.Add(this.labelInfoProject2); + this.Controls.Add(this.labelQuestion); + this.DoubleBuffered = true; + this.Font = new System.Drawing.Font("Consolas", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.MaximizeBox = false; + this.Name = "formQuestionFtd"; + this.groupBoxQuestion.ResumeLayout(false); + this.groupBoxQuestion.PerformLayout(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.Button buttonYes; + private System.Windows.Forms.Label labelQuestionMark; + public System.Windows.Forms.Label labelQuestion; + public System.Windows.Forms.Label labelInfoProject2; + public System.Windows.Forms.Label labelInfoFroject; + public System.Windows.Forms.Label labelInfoCalculate2; + public System.Windows.Forms.Label labelInfoOut2; + public System.Windows.Forms.Label labelInfoOut3; + public System.Windows.Forms.Label labelInfoCalculate3; + public System.Windows.Forms.Label labelWarning; + public System.Windows.Forms.Label labelWarning2; + public System.Windows.Forms.Label labelWarning3; + public System.Windows.Forms.Label labelInfoIn; + public System.Windows.Forms.Label labelInfoCalculate; + public System.Windows.Forms.Label labelInfoOut; + public System.Windows.Forms.Label labelInfoIn2; + public System.Windows.Forms.Label labelWarning4; + public System.Windows.Forms.GroupBox groupBoxQuestion; + public System.Windows.Forms.Label labelWarning5; + public System.Windows.Forms.Label labelWarning6; + public System.Windows.Forms.Label label1; + } +} \ No newline at end of file diff --git a/source/shared/project/source/gui/questionFtd.cs b/source/shared/project/source/gui/questionFtd.cs new file mode 100644 index 0000000..0b107b1 --- /dev/null +++ b/source/shared/project/source/gui/questionFtd.cs @@ -0,0 +1,65 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace VisualStudioCppExtensions +{ + public partial class formQuestionFtd : Form + { + public enum Result + { + none = 0, + yes = 1, + advanced = 2 + } + public Result r = Result.none; + + + + public formQuestionFtd() + { + InitializeComponent(); + int x = this.Height; + MinimumSize = new Size(Width, Height); + MaximumSize = new Size(Width * 10, Height); + } + + + + + + + + + + + private void buttonYesClick(object sender, EventArgs e) + { + r = Result.yes; + this.Close(); + } + + private void buttonAdvancedClick(object sender, EventArgs e) + { + r = Result.advanced; + this.Close(); + } + + + + protected override bool ProcessDialogKey(Keys keyData) + { + if (Form.ModifierKeys != Keys.None || keyData != Keys.Escape) return base.ProcessDialogKey(keyData); + r = Result.none; + this.Close(); + return true; + } + + } +} diff --git a/source/shared/project/source/gui/questionFtd.resx b/source/shared/project/source/gui/questionFtd.resx new file mode 100644 index 0000000..0fb6fcd --- /dev/null +++ b/source/shared/project/source/gui/questionFtd.resx @@ -0,0 +1,861 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + + + + 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 + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8AAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADg4ODg4ODg4ODg4ODg4ODg4ODg4OAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADg4ODg4ODg4ODg4ODg4ODg4ODg4OAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAADg4ODg4ODg4ODg4ODg4ODg4ODg4OAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + Dg4OAQEBAQEBAQEBAQEBAQEBDg4OAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADg4OAQEBAQEBAQEB + AQEBAQEBDg4OAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADg4OAQEBAQEBAQEBAQEBAQEBDg4OAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADg4ODg4ODg4ODg4ODg4ODg4ODg4OAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAADg4ODg4ODg4ODg4ODg4ODg4ODg4OAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + Dg4ODg4ODg4ODg4ODg4ODg4ODg4OAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADg4OAQEBAQEBAQEB + AQEBDg4ODg4OAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADg4OAQEBAQEBAQEBAQEBDg4OAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADg4OAQEBAQEBAQEBAQEBDg4OAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAADg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4OAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + Dg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4OAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADg4ODg4ODg4ODg4O + Dg4ODg4ODg4ODg4OAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADg4OAQEBAQEBAQEBAQEBAQEBAQEBDg4O + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADg4OAQEBAQEBAQEBAQEBAQEBAQEBDg4OAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAADg4OAQEBAQEBAQEBAQEBAQEBAQEBDg4OAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + Dg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4OAAAADg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4O + Dg4ODg4ODg4ODg4ODg4ODg4ODg4OAAAADg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4O + Dg4ODg4ODg4OAAAADg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4AAAAADg4ODg4PDg4OAQEBAQEBDg4OAAAA + Dg4OAQEBAQEBDg4ODg4ODg4ODg4ODg4OAAAADg4ODg4ADg4OAQEBAQEBDg4OAAAADg4OAQEBAQEBDg4O + Dg4ODg4ODg4ODg4ODwAADg4ODg4ODg4OAQEBAQEBDg4OAAAADg4OAQEBAQEBDg4ODg4ODg4ODg4ODg4O + DgAADg4OCw4ODg4OAQEBAQEBDg4OAAAADg4OAQEBAQEBDg4ODg4OCQICAgICAwsODg4ADg4OAwwODg4O + AQEBAQEBDg4OAAAADg4OAQEBAQEBDg4OAA4ODgkCAgICAgQNDg4ODg4OAgUNDg4OAQEBAQEBDg4ODg4O + Dg4OAQEBAQEBDg4OAA8ODg4GAgICAgIFDQ4ODg4OAgIGDg4ODg4OAQEBDg4ODg4ODg4OAQEBDg4ODg4O + AAAPDg4OBgICAgICBg4ODg4OAgICCA4ODg4OAQEBDg4ODg4ODg4OAQEBDg4ODg4OAAAADg4ODgUCAgIC + AgcODg4OAgICAgoODg4OAQEBAQEBAQEBAQEBAQEBDg4ODg4OAAAAAA4ODg0FAgICAgIJDg4OAgICAgMM + Dg4OAQEBAQEBAQEBAQEBAQEBDg4OAAAAAAAAAAAODg4NAwICAgICCg4OAgICAgIFDg4OAQEBAQEBAQEB + AQEBAQEBDg4OAAAAAAAAAAAADg4OCwMCAgICAwsOAgICAgICDg4ODg4ODg4OAQEBDg4ODg4ODg4OAAAA + AAAAAAAAAA4ODgsCAgICAgQNAgICAgICDg4ODg4ODg4OAQEBDg4ODg4ODg4OAAAAAAAAAAAAAAAODg4J + AgICAgIFAgICAgICDg4ODg4ODg4OAQEBDg4ODg4ODg4OAAAADg4ODg4ODg4ODg4OCQICAgICAgICAgIC + Dg4ODg4OAQEBAQEBAQEBDg4OAAAAAAAADg4ODg4ODg4ODg4ODgYCAgICAgICAgICDg4ODg4OAQEBAQEB + AQEBDg4OAAAAAAAAAA4ODg4ODg4ODg4ODg4GAgICAgICAgICDg4ODg4OAQEBAQEBAQEBDg4OAAAAAAAA + AAAODg4OBgICAgICAgICAgICAgICAgICDg4ODg4OAQEBAQEBAQEBDg4OAAAAAAAAAAAADg4ODgYCAgIC + AgICAgICAgICAgICDg4ODg4OAQEBAQEBAQEBDg4OAAAAAAAAAAAAAA4ODg4GAgICAgICAgICAgICAgIC + Dg4ODg4OAQEBAQEBAQEBDg4OAAAAAAAAAAAAAAAODg4OBgICAgICAgICAgICAgICDg4ODg4OAQEBAQEB + AQEBDg4OAAAAAAAAAAAAAAAADg4ODgYCAgICAgICAgICAgICDg4ODg4OAQEBAQEBAQEBDg4OAAAAAAAA + AAAAAAAAAA4ODg4GAgICAgICAgICAgICDg4ODg4OAQEBAQEBAQEBDg4OAAAAAAAAAAAAAAAAAAAODg4O + Dg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4OAAAAAAAAAAAAAAAAAAAADg4ODg4ODg4ODg4ODg4O + Dg4ODg4ODg4ODg4ODg4ODg4OAAAAAAAAAAAAAAAAAAAAAA4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4O + Dg4ODg4OAAAAAAAA////////AAAAAAf///8AAAAAB////wAAAAAH////AAAAAAf///8AAAAAB////wAA + AAAH////AAAAAAf///8AAAAAB////wAAAAAH////AAAAAAf///8AAAAAP////wAAAAA/////AAAAAAD/ + //8AAAAAAP///wAAAAAA////AAAAAAD///8AAAAAAP///wAAAAAA////AAAAAAAAcAAAAAAAAABwAAAA + AAAAAHAAAAAAHgAAcAAAAAAOCABwAAAAAAYAAHAAAAAABgAAcAAAAAACAABwAAAAgAAAAAAAAACAAAAA + AAAAAMAAAAAAAAAA4AAAAAAAAADwAAAAAAcAAPgAAAAABwAA/AAAAAAHAAD+AAAAAAcAAP8AAAAABwAA + AAAAAAA/AAAAAAAAAD8AAIAAAAAAPwAAwAAAAAA/AADgAAAAAD8AAPAAAAAAPwAA+AAAAAA/AAD8AAAA + AD8AAP4AAAAAPwAA/wAAAAA/AAD/gAAAAD8AAP/AAAAAPwAAKAAAACAAAABAAAAAAQAIAAAAAAAABAAA + AAAAAAAAAAAAAQAAAAEAAAAAAABCQkIAnFMAAKJdDwCnZx8ArXIuAL6QXADDmmwAz6+KANS5mgDgzbkA + 5dfIAOvi1wDw7OcA9vb2APj4+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4ODg4ODg4O + Dg4ODg4OAAAAAAAAAAAAAAAAAAAAAAAADg4ODg4ODg4ODg4ODg4AAAAAAAAAAAAAAAAAAAAAAAAODgEB + AQEBAQEBAQEODgAAAAAAAAAAAAAAAAAAAAAAAA4OAQEBAQEBAQEBAQ4OAAAAAAAAAAAAAAAAAAAAAAAA + Dg4ODg4ODg4ODg4ODg4AAAAAAAAAAAAAAAAAAAAAAAAODg4ODg4ODg4ODg4ODgAAAAAAAAAAAAAAAAAA + AAAAAA4OAQEBAQEBAQEODgAAAAAAAAAAAAAAAAAAAAAAAAAADg4BAQEBAQEBAQ4OAAAAAAAAAAAAAAAA + AAAAAAAAAAAODg4ODg4ODg4ODg4ODg4OAAAAAAAAAAAAAAAAAAAAAA4ODg4ODg4ODg4ODg4ODg4AAAAA + AAAAAAAAAAAAAAAADg4BAQEBAQEBAQEBAQEODgAAAAAAAAAAAAAAAAAAAAAODgEBAQEBAQEBAQEBAQ4O + AAAAAAAAAAAAAAAAAAAAAA4ODg4ODg4ODg4ODg4ODg4ODg4ODg4AAA4ODg4ODg4ODg4ODg4ODg4ODg4O + Dg4ODg4ODg4ODgAADg4ODg4ODg4ODg4ODg4ODwAADg4ODw4OAQEBAQ4OAAAODgEBAQEODg4ODg4ODg4O + AAAODg4ODg4BAQEBDg4AAA4OAQEBAQ4ODg4FAgICBg4OAA4OBg4ODgEBAQEODgAADg4BAQEBDg4PDg0F + AgICBw4ODg4CCA4OAQEBAQ4ODg4ODgEBAQEODgAPDg0DAgICCQ4ODgICCg4ODgEBDg4ODg4OAQEODg4O + AAAODgsDAgICCg4OAgIDDA4OAQEBAQEBAQEBAQ4ODg4AAAAODgsCAgIDCw4CAgIFDg4BAQEBAQEBAQEB + Dg4AAAAAAAAODgkCAgIEDQICAgIODg4ODg4BAQ4ODg4ODgAAAAAAAAAODgkCAgIFAgICAg4ODg4ODgEB + Dg4ODg4OAAAODg4ODg4ODgYCAgICAgICDg4ODgEBAQEBAQ4OAAAAAA8ODg4ODg4ODgYCAgICAgIODg4O + AQEBAQEBDg4AAAAAAA8ODgYCAgICAgICAgICAg4ODg4BAQEBAQEODgAAAAAAAA8ODgYCAgICAgICAgIC + Dg4ODgEBAQEBAQ4OAAAAAAAAAA8ODgYCAgICAgICAgIODg4OAQEBAQEBDg4AAAAAAAAAAA8ODgYCAgIC + AgICAg4ODg4BAQEBAQEODgAAAAAAAAAAAA8ODg4ODg4ODg4ODg4ODg4ODg4ODg4OAAAAAAAAAAAAAA8O + Dg4ODg4ODg4ODg4ODg4ODg4ODg4AAAAA/////wAD//8AA///AAP//wAD//8AA///AAP//wAP//8AD/// + AAD//wAA//8AAP//AAD//wAAAwAAAAMAAMADAADAAwAAQAMAAAAAAIAAAADAAAAA4AAAA/AAAAP4AAAD + AAAADwAAAA+AAAAPwAAAD+AAAA/wAAAP+AAAD/wAAA8oAAAAEAAAACAAAAABAAgAAAAAAAABAAAAAAAA + AAAAAAABAAAAAQAAAAAAAEJCQgCcUwAAvpBcAPb29gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAA////AAAAAAAAAAAAAAAAAAAAAAAEBAQEBAQEAAAAAAAAAAAABAEBAQEBBAAAAAAA + AAAAAAQEBAQEBAQAAAAAAAAAAAAEAQEBAQQAAAAAAAAAAAAABAQEBAQEBAQAAAAAAAAAAAQBAQEBAQEE + AAAAAAAAAAAEBAQEBAQEBAQEBAAEBAQEBAQEBAAEBAQBAQQABAEBBAQDAgMEBAMEAQEEBAQBAQQABAMC + AwQCAwQBAQEBAQQEAAAEAwIDAgIEBAQBBAQEAAQEBAQDAgICBAQBAQEEAAAABAMCAgICAgQEAQEBBAAA + AAAEAwICAgIEBAEBAQQAAAAAAAQEBAQEBAQEBAQEAAD//wAAAf8AAAH/AAAB/wAAA/8AAAD/AAAA/wAA + ABAAAAgQAAAAAAAAgAAAAMABAAAAAwAAgAMAAMADAADgAwAAiVBORw0KGgoAAAANSUhEUgAAAQAAAAEA + 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 + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAA9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPb29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/AAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAA9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPb29v/29vb/9vb2//b29v9CQkL/QkJC/0JCQv9CQkL/QkJC + /0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC + //b29v/29vb/9vb2//b29v8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD29vb/9vb2//b29v/29vb/QkJC + /0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC + /0JCQv9CQkL/QkJC/0JCQv/29vb/9vb2//b29v/29vb/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9vb2 + //b29v/29vb/9vb2/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC + /0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/9vb2//b29v/29vb/9vb2/wAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAPb29v/29vb/9vb2//b29v9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC + /0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC//b29v/29vb/9vb2 + //b29v8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + APb29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v8AAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAD29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9vb2//b29v/29vb/9vb2/0JCQv9CQkL/QkJC + /0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv/29vb/9vb2 + //b29v/29vb/9vb2QPb29kD29vZA9vb2QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPb29v/29vb/9vb2 + //b29v9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC + /0JCQv9CQkL/9vb2//b29v/29vb/9vb2/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAD29vb/9vb2//b29v/29vb/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC + /0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC//b29v/29vb/9vb2//b29v8AAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAA9vb2//b29v/29vb/9vb2/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC + /0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv/29vb/9vb2//b29v/29vb/AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPb29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/AAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAA9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPb29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD29vb/9vb2//b29v/29vb/QkJC + /0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC + /0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/9vb2//b29v/29vb/9vb2/wAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9vb2 + //b29v/29vb/9vb2/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC + /0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC//b29v/29vb/9vb2 + //b29v8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAPb29v/29vb/9vb2//b29v9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC + /0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC + /0JCQv/29vb/9vb2//b29v/29vb/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD29vb/9vb2//b29v/29vb/QkJC/0JCQv9CQkL/QkJC + /0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC + /0JCQv9CQkL/QkJC/0JCQv9CQkL/9vb2//b29v/29vb/9vb2/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v8AAAAAAAAAAAAAAAAAAAAA9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/AAAA + AAAAAAAAAAAAAAAAAPb29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2/wAAAAAAAAAAAAAAAAAAAAD29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v8AAAAAAAAAAAAAAAAAAAAA9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2gAAAAAAAAAAAAAAA + AAAAAAAAAAAA9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2jwAAAAD29vb/9vb2//b29v/29vb/QkJC + /0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv/29vb/9vb2//b29v/29vb/AAAAAAAAAAAAAAAAAAAA + APb29v/29vb/9vb2//b29v9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vZgAAAAAAAAAAAAAAAAAAAAAPb29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vZg9vb2 + //b29v/29vb/9vb2/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/9vb2//b29v/29vb/9vb2 + /wAAAAAAAAAAAAAAAAAAAAD29vb/9vb2//b29v/29vb/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC + /0JCQv/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29jAAAAAAAAAAAAAAAAD29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb27/b29v/29vb/9vb2//b29v9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC + //b29v/29vb/9vb2//b29v8AAAAAAAAAAAAAAAAAAAAA9vb2//b29v/29vb/9vb2/0JCQv9CQkL/QkJC + /0JCQv9CQkL/QkJC/0JCQv9CQkL/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vbv9vb2MAAAAAAAAAAA9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/QkJC/0JCQv9CQkL/QkJC + /0JCQv9CQkL/QkJC/0JCQv/29vb/9vb2//b29v/29vb/AAAAAAAAAAAAAAAAAAAAAPb29v/29vb/9vb2 + //b29v9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/rXIu/5xTAP+cUwD/nFMA/5xTAP+cUwD/nFMA/5xTAP++kFz/9vb2//b29v/29vb/9vb2 + //b29s/29vYQAAAAAPb29v/29vb/9vb2//b29v++kFz/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + /0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/9vb2//b29v/29vb/9vb2/wAAAAAAAAAAAAAA + AAAAAAD29vb/9vb2//b29v/29vb/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//Ds5/+tci7/nFMA/5xTAP+cUwD/nFMA/5xTAP+cUwD/nFMA + /8OabP/29vb/9vb2//b29v/29vb/9vb2zwAAAAD29vb/9vb2//b29v/29vb/nFMA/8+viv/29vb/9vb2 + //b29v/29vb/9vb2//b29v9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC//b29v/29vb/9vb2 + //b29v8AAAAAAAAAAAAAAAAAAAAA9vb2//b29v/29vb/9vb2/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC + /0JCQv9CQkL/9vb2//b29v/29vb/9vb2//b29mD29vb/9vb2//b29v/29vb/8Ozn/6JdD/+cUwD/nFMA + /5xTAP+cUwD/nFMA/5xTAP+cUwD/1Lma//b29v/29vb/9vb2//b29v/29vaf9vb2//b29v/29vb/9vb2 + /5xTAP+cUwD/4M25//b29v/29vb/9vb2//b29v/29vb/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC + /0JCQv/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v9CQkL/QkJC + /0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC//b29v/29vb/9vb2//b29v8AAAAA9vb2cPb29v/29vb/9vb2 + //b29v/l18j/ol0P/5xTAP+cUwD/nFMA/5xTAP+cUwD/nFMA/5xTAP/gzbn/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v+cUwD/nFMA/6JdD//r4tf/9vb2//b29v/29vb/9vb2/0JCQv9CQkL/QkJC + /0JCQv9CQkL/QkJC/0JCQv9CQkL/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv/29vb/9vb2//b29v/29vb/AAAA + AAAAAAD29vaf9vb2//b29v/29vb/9vb2/+XXyP+cUwD/nFMA/5xTAP+cUwD/nFMA/5xTAP+cUwD/ol0P + /+XXyP/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/nFMA/5xTAP+cUwD/rXIu//Ds5//29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/QkJC/0JCQv9CQkL/QkJC//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2/0JCQv9CQkL/QkJC/0JCQv/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2/wAAAAAAAAAAAAAAAPb29p/29vb/9vb2//b29v/29vb/1Lma/5xTAP+cUwD/nFMA + /5xTAP+cUwD/nFMA/5xTAP+nZx//8Ozn//b29v/29vb/9vb2//b29v/29vb/9vb2/5xTAP+cUwD/nFMA + /5xTAP++kFz/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2/0JCQv9CQkL/QkJC/0JCQv/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v9CQkL/QkJC/0JCQv9CQkL/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v8AAAAAAAAAAAAAAAD29vYQ9vb2z/b29v/29vb/9vb2 + //b29v/UuZr/nFMA/5xTAP+cUwD/nFMA/5xTAP+cUwD/nFMA/61yLv/w7Of/9vb2//b29v/29vb/9vb2 + //b29v+cUwD/nFMA/5xTAP+cUwD/nFMA/8+viv/29vb/9vb2//b29v/29vb/9vb2//b29v9CQkL/QkJC + /0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC + /0JCQv9CQkL/QkJC//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/AAAAAAAAAAAAAAAAAAAA + APb29hD29vbP9vb2//b29v/29vb/9vb2/76QXP+cUwD/nFMA/5xTAP+cUwD/nFMA/5xTAP+cUwD/vpBc + //b29v/29vb/9vb2//b29v/29vb/nFMA/5xTAP+cUwD/nFMA/5xTAP+cUwD/4M25//b29v/29vb/9vb2 + //b29v/29vb/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC + /0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + /wAAAAAAAAAAAAAAAAAAAAAAAAAA9vb2IPb29u/29vb/9vb2//b29v/29vb/vpBc/5xTAP+cUwD/nFMA + /5xTAP+cUwD/nFMA/5xTAP/Dmmz/9vb2//b29v/29vb/9vb2/5xTAP+cUwD/nFMA/5xTAP+cUwD/nFMA + /6JdD//r4tf/9vb2//b29v/29vb/9vb2/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC + /0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/9vb2//b29v/29vb/9vb2 + /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD29vYw9vb27/b29v/29vb/9vb2 + //b29v+tci7/nFMA/5xTAP+cUwD/nFMA/5xTAP+cUwD/nFMA/9S5mv/29vb/9vb2//b29v+cUwD/nFMA + /5xTAP+cUwD/nFMA/5xTAP+cUwD/rXIu//b29v/29vb/9vb2//b29v9CQkL/QkJC/0JCQv9CQkL/QkJC + /0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC + //b29v/29vb/9vb2//b29v8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + APb29kD29vb/9vb2//b29v/29vb/8Ozn/61yLv+cUwD/nFMA/5xTAP+cUwD/nFMA/5xTAP+cUwD/4M25 + //b29v/29vb/nFMA/5xTAP+cUwD/nFMA/5xTAP+cUwD/nFMA/5xTAP/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v9CQkL/QkJC/0JCQv9CQkL/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAA9vb2YPb29v/29vb/9vb2//b29v/w7Of/ol0P/5xTAP+cUwD/nFMA + /5xTAP+cUwD/nFMA/6JdD//l18j/9vb2/5xTAP+cUwD/nFMA/5xTAP+cUwD/nFMA/5xTAP+cUwD/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/QkJC/0JCQv9CQkL/QkJC + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2/wAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD29vZw9vb2//b29v/29vb/9vb2 + /+XXyP+iXQ//nFMA/5xTAP+cUwD/nFMA/5xTAP+cUwD/p2cf//Ds5/+cUwD/nFMA/5xTAP+cUwD/nFMA + /5xTAP+cUwD/nFMA//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + /0JCQv9CQkL/QkJC/0JCQv/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + APb29p/29vb/9vb2//b29v/29vb/5dfI/5xTAP+cUwD/nFMA/5xTAP+cUwD/nFMA/5xTAP+tci7/nFMA + /5xTAP+cUwD/nFMA/5xTAP+cUwD/nFMA/5xTAP/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v9CQkL/QkJC/0JCQv9CQkL/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/AAAAAAAAAAAAAAAAAAAAAPb29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/UuZr/nFMA/5xTAP+cUwD/nFMA + /5xTAP+cUwD/nFMA/5xTAP+cUwD/nFMA/5xTAP+cUwD/nFMA/5xTAP+cUwD/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC + /0JCQv/29vb/9vb2//b29v/29vb/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + /9S5mv+cUwD/nFMA/5xTAP+cUwD/nFMA/5xTAP+cUwD/nFMA/5xTAP+cUwD/nFMA/5xTAP+cUwD/nFMA + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC + /0JCQv9CQkL/QkJC/0JCQv9CQkL/9vb2//b29v/29vb/9vb2/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAA9vb2YPb29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/vpBc/5xTAP+cUwD/nFMA/5xTAP+cUwD/nFMA/5xTAP+cUwD/nFMA + /5xTAP+cUwD/nFMA/5xTAP/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2/0JCQv9CQkL/QkJC + /0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC//b29v/29vb/9vb2//b29v8AAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD29vZg9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v++kFz/nFMA/5xTAP+cUwD/nFMA + /5xTAP+cUwD/nFMA/5xTAP+cUwD/nFMA/5xTAP+cUwD/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv/29vb/9vb2 + //b29v/29vb/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPb29mD29vb/9vb2 + //b29v/29vb/9vb2/76QXP+cUwD/nFMA/5xTAP+cUwD/nFMA/5xTAP+cUwD/nFMA/5xTAP+cUwD/nFMA + /5xTAP+cUwD/nFMA/5xTAP+cUwD/nFMA/5xTAP+cUwD/nFMA/5xTAP+cUwD/nFMA//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC + /0JCQv9CQkL/9vb2//b29v/29vb/9vb2/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAA9vb2YPb29v/29vb/9vb2//b29v/29vb/vpBc/5xTAP+cUwD/nFMA/5xTAP+cUwD/nFMA + /5xTAP+cUwD/nFMA/5xTAP+cUwD/nFMA/5xTAP+cUwD/nFMA/5xTAP+cUwD/nFMA/5xTAP+cUwD/nFMA + /5xTAP/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC + /0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC//b29v/29vb/9vb2//b29v8AAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD29vZg9vb2//b29v/29vb/9vb2//b29v++kFz/nFMA + /5xTAP+cUwD/nFMA/5xTAP+cUwD/nFMA/5xTAP+cUwD/nFMA/5xTAP+cUwD/nFMA/5xTAP+cUwD/nFMA + /5xTAP+cUwD/nFMA/5xTAP+cUwD/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v9CQkL/QkJC + /0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv/29vb/9vb2//b29v/29vb/AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPb29mD29vb/9vb2 + //b29v/29vb/9vb2/76QXP+cUwD/nFMA/5xTAP+cUwD/nFMA/5xTAP+cUwD/nFMA/5xTAP+cUwD/nFMA + /5xTAP+cUwD/nFMA/5xTAP+cUwD/nFMA/5xTAP+cUwD/nFMA//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/9vb2 + //b29v/29vb/9vb2/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAA9vb2YPb29v/29vb/9vb2//b29v/29vb/vpBc/5xTAP+cUwD/nFMA/5xTAP+cUwD/nFMA + /5xTAP+cUwD/nFMA/5xTAP+cUwD/nFMA/5xTAP+cUwD/nFMA/5xTAP+cUwD/nFMA/5xTAP/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC + /0JCQv9CQkL/QkJC//b29v/29vb/9vb2//b29v8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD29vZg9vb2//b29v/29vb/9vb2//b29v++kFz/nFMA + /5xTAP+cUwD/nFMA/5xTAP+cUwD/nFMA/5xTAP+cUwD/nFMA/5xTAP+cUwD/nFMA/5xTAP+cUwD/nFMA + /5xTAP+cUwD/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v9CQkL/QkJC/0JCQv9CQkL/QkJC + /0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv/29vb/9vb2//b29v/29vb/AAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPb29mD29vb/9vb2 + //b29v/29vb/9vb2/76QXP+cUwD/nFMA/5xTAP+cUwD/nFMA/5xTAP+cUwD/nFMA/5xTAP+cUwD/nFMA + /5xTAP+cUwD/nFMA/5xTAP+cUwD/nFMA//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/QkJC + /0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/9vb2//b29v/29vb/9vb2 + /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAA9vb2YPb29v/29vb/9vb2//b29v/29vb/vpBc/5xTAP+cUwD/nFMA/5xTAP+cUwD/nFMA + /5xTAP+cUwD/nFMA/5xTAP+cUwD/nFMA/5xTAP+cUwD/nFMA/5xTAP/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC + //b29v/29vb/9vb2//b29v8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD29vZg9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPb29mD29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2/wAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAA9vb2YPb29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD29vZg9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////// + ////////////AAAAD/////8AAAAP/////wAAAA//////AAAAD/////8AAAAP/////wAAAA//////AAAA + D/////8AAAAP/////wAAAA//////AAAAD/////8AAAAP/////wAAAA//////AAAAD/////8AAAD///// + /wAAAP//////AAAA//////8AAAAA/////wAAAAD/////AAAAAP////8AAAAA/////wAAAAD/////AAAA + AP////8AAAAA/////wAAAAD/////AAAAAAAPAAAAAAAAAA8AAAAAAAAADwAAAAAAAAAPAAAAAfAQAA8A + AAAA8AAADwAAAABwAAAPAAAAADAAAA8AAAAAEAAADwAAAAAQAAAPAAAAAAAAAAAAAIAAAAAAAAAAwAAA + AAAAAADgAAAAAAAAAOAAAAAAAAAA8AAAAAAAAAD4AAAAAAAAD/wAAAAAAAAP/gAAAAAAAA//AAAAAAAA + D/+AAAAAAAAP/8AAAAAAAA8AAAAAAAAA/wAAAAAAAAD/AAAAAAAAAP+AAAAAAAAA/8AAAAAAAAD/4AAA + AAAAAP/wAAAAAAAA//gAAAAAAAD//AAAAAAAAP/+AAAAAAAA//8AAAAAAAD//4AAAAAAAP//wAAAAAAA + ///gAAAAAAD///AAAAAAAP//+AAAAAAA/ygAAAAwAAAAYAAAAAEAIAAAAAAAgCUAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAD29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v8AAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v8AAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD29vb/9vb2 + //b29v9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC + /0JCQv/29vb/9vb2//b29v8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAD29vb/9vb2//b29v9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC + /0JCQv9CQkL/QkJC/0JCQv/29vb/9vb2//b29v8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAD29vb/9vb2//b29v9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC + /0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv/29vb/9vb2//b29v8AAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v8AAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAD29vb/9vb2//b29v9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC + /0JCQv/29vb/9vb2//b29v/29vb/9vb2//b29v8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAD29vb/9vb2//b29v9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC + /0JCQv9CQkL/QkJC/0JCQv/29vb/9vb2//b29v8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD29vb/9vb2//b29v9CQkL/QkJC/0JCQv9CQkL/QkJC + /0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv/29vb/9vb2//b29v8AAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAD29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v8AAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAD29vb/9vb2//b29v9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC + /0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv/29vb/9vb2//b29v8AAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD29vb/9vb2//b29v9CQkL/QkJC/0JCQv9CQkL/QkJC + /0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv/29vb/9vb2 + //b29v8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD29vb/9vb2//b29v9CQkL/QkJC + /0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC + /0JCQv/29vb/9vb2//b29v8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v8AAAAAAAAAAAAAAAD29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v8AAAAAAAAAAAAAAAD29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v8AAAAAAAAAAAAAAAD29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb27/b29hAAAAAAAAAAAAAAAAD29vb/9vb2//b29v/29vb/9vb27/b29oD29vb/9vb2 + //b29v9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv/29vb/9vb2//b29v8AAAAAAAAAAAAAAAD29vb/9vb2 + //b29v9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29s8AAAAAAAAAAAAAAAD29vb/9vb2//b29v/29vb/9vb2 + //b29nD29vb/9vb2//b29v9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv/29vb/9vb2//b29v8AAAAAAAAA + AAAAAAD29vb/9vb2//b29v9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vaPAAAAAAAAAAD29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv/29vb/9vb2 + //b29v8AAAAAAAAAAAAAAAD29vb/9vb2//b29v9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + YAAAAAD29vb/9vb2//b29v/l18j/9vb2//b29v/29vb/9vb2//b29v9CQkL/QkJC/0JCQv9CQkL/QkJC + /0JCQv/29vb/9vb2//b29v8AAAAAAAAAAAAAAAD29vb/9vb2//b29v9CQkL/QkJC/0JCQv9CQkL/QkJC + /0JCQv/29vb/9vb2//b29v/29vb/9vb2//b29v/UuZr/nFMA/5xTAP+cUwD/nFMA/5xTAP+iXQ//5dfI + //b29v/29vb/9vb27/b29jD29vb/9vb2//b29v+iXQ//6+LX//b29v/29vb/9vb2//b29v9CQkL/QkJC + /0JCQv9CQkL/QkJC/0JCQv/29vb/9vb2//b29v8AAAAAAAAAAAAAAAD29vb/9vb2//b29v9CQkL/QkJC + /0JCQv9CQkL/QkJC/0JCQv/29vb/9vb2//b29v/29vZw9vb2//b29v/29vb/1Lma/5xTAP+cUwD/nFMA + /5xTAP+cUwD/p2cf//Ds5//29vb/9vb2//b29s/29vb/9vb2//b29v+cUwD/rXIu//Ds5//29vb/9vb2 + //b29v9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv/29vb/9vb2//b29v8AAAAA9vb2n/b29v/29vb/9vb2 + /76QXP+cUwD/nFMA/5xTAP+cUwD/nFMA/61yLv/w7Of/9vb2//b29v/29vb/9vb2//b29v+cUwD/nFMA + /76QXP/29vb/9vb2//b29v/29vb/9vb2//b29v9CQkL/QkJC/0JCQv/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v9CQkL/QkJC/0JCQv/29vb/9vb2//b29v/29vb/9vb2//b29v8AAAAAAAAA + APb29p/29vb/9vb2//b29v++kFz/nFMA/5xTAP+cUwD/nFMA/5xTAP++kFz/9vb2//b29v/29vb/9vb2 + //b29v+cUwD/nFMA/5xTAP/Pr4r/9vb2//b29v/29vb/9vb2//b29v9CQkL/QkJC/0JCQv/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v9CQkL/QkJC/0JCQv/29vb/9vb2//b29v/29vb/9vb2 + //b29v8AAAAAAAAAAPb29hD29vbP9vb2//b29v/29vb/rXIu/5xTAP+cUwD/nFMA/5xTAP+cUwD/w5ps + //b29v/29vb/9vb2//b29v+cUwD/nFMA/5xTAP+cUwD/4M25//b29v/29vb/9vb2//b29v9CQkL/QkJC + /0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv/29vb/9vb2 + //b29v/29vb/9vb2//b29v8AAAAAAAAAAAAAAAD29vYQ9vb2z/b29v/29vb/8Ozn/61yLv+cUwD/nFMA + /5xTAP+cUwD/nFMA/9S5mv/29vb/9vb2//b29v+cUwD/nFMA/5xTAP+cUwD/ol0P/+vi1//29vb/9vb2 + //b29v9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC + /0JCQv/29vb/9vb2//b29v8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9vb2IPb29u/29vb/9vb2 + //Ds5/+iXQ//nFMA/5xTAP+cUwD/nFMA/5xTAP/gzbn/9vb2//b29v+cUwD/nFMA/5xTAP+cUwD/nFMA + /61yLv/29vb/9vb2//b29v9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC + /0JCQv9CQkL/QkJC/0JCQv/29vb/9vb2//b29v8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + APb29jD29vbv9vb2//b29v/l18j/ol0P/5xTAP+cUwD/nFMA/5xTAP+iXQ//5dfI//b29v+cUwD/nFMA + /5xTAP+cUwD/nFMA/5xTAP/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v9CQkL/QkJC + /0JCQv/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v8AAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAD29vZA9vb2//b29v/29vb/5dfI/5xTAP+cUwD/nFMA/5xTAP+cUwD/p2cf + //Ds5/+cUwD/nFMA/5xTAP+cUwD/nFMA/5xTAP/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v9CQkL/QkJC/0JCQv/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v8AAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9vb2YPb29v/29vb/9vb2/9S5mv+cUwD/nFMA + /5xTAP+cUwD/nFMA/61yLv+cUwD/nFMA/5xTAP+cUwD/nFMA/5xTAP/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v9CQkL/QkJC/0JCQv/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v8AAAAAAAAAAAAAAAD29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v/UuZr/nFMA/5xTAP+cUwD/nFMA/5xTAP+cUwD/nFMA/5xTAP+cUwD/nFMA/5xTAP/29vb/9vb2 + //b29v/29vb/9vb2//b29v9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv/29vb/9vb2 + //b29v8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD29vbP9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/vpBc/5xTAP+cUwD/nFMA/5xTAP+cUwD/nFMA/5xTAP+cUwD/nFMA + /5xTAP/29vb/9vb2//b29v/29vb/9vb2//b29v9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC + /0JCQv/29vb/9vb2//b29v8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD29vYQ9vb2z/b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2/76QXP+cUwD/nFMA/5xTAP+cUwD/nFMA + /5xTAP+cUwD/nFMA/5xTAP/29vb/9vb2//b29v/29vb/9vb2//b29v9CQkL/QkJC/0JCQv9CQkL/QkJC + /0JCQv9CQkL/QkJC/0JCQv/29vb/9vb2//b29v8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9vb2 + EPb29s/29vb/9vb2//b29v++kFz/nFMA/5xTAP+cUwD/nFMA/5xTAP+cUwD/nFMA/5xTAP+cUwD/nFMA + /5xTAP+cUwD/nFMA/5xTAP+cUwD/nFMA/5xTAP/29vb/9vb2//b29v/29vb/9vb2//b29v9CQkL/QkJC + /0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv/29vb/9vb2//b29v8AAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAPb29hD29vbP9vb2//b29v/29vb/vpBc/5xTAP+cUwD/nFMA/5xTAP+cUwD/nFMA + /5xTAP+cUwD/nFMA/5xTAP+cUwD/nFMA/5xTAP+cUwD/nFMA/5xTAP/29vb/9vb2//b29v/29vb/9vb2 + //b29v9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv/29vb/9vb2//b29v8AAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD29vYQ9vb2z/b29v/29vb/9vb2/76QXP+cUwD/nFMA + /5xTAP+cUwD/nFMA/5xTAP+cUwD/nFMA/5xTAP+cUwD/nFMA/5xTAP+cUwD/nFMA/5xTAP/29vb/9vb2 + //b29v/29vb/9vb2//b29v9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv/29vb/9vb2 + //b29v8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9vb2EPb29s/29vb/9vb2 + //b29v++kFz/nFMA/5xTAP+cUwD/nFMA/5xTAP+cUwD/nFMA/5xTAP+cUwD/nFMA/5xTAP+cUwD/nFMA + /5xTAP/29vb/9vb2//b29v/29vb/9vb2//b29v9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC + /0JCQv/29vb/9vb2//b29v8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + APb29hD29vbP9vb2//b29v/29vb/vpBc/5xTAP+cUwD/nFMA/5xTAP+cUwD/nFMA/5xTAP+cUwD/nFMA + /5xTAP+cUwD/nFMA/5xTAP/29vb/9vb2//b29v/29vb/9vb2//b29v9CQkL/QkJC/0JCQv9CQkL/QkJC + /0JCQv9CQkL/QkJC/0JCQv/29vb/9vb2//b29v8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAD29vYQ9vb2z/b29v/29vb/9vb2/76QXP+cUwD/nFMA/5xTAP+cUwD/nFMA + /5xTAP+cUwD/nFMA/5xTAP+cUwD/nFMA/5xTAP/29vb/9vb2//b29v/29vb/9vb2//b29v9CQkL/QkJC + /0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv/29vb/9vb2//b29v8AAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9vb2EPb29s/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v8AAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPb29hD29vbP9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAD29vYQ9vb2z/b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////8AAAAAB////wAAAAAH + ////AAAAAAf///8AAAAAB////wAAAAAH////AAAAAAf///8AAAAAB////wAAAAAH////AAAAAAf///8A + AAAAB////wAAAAA/////AAAAAD////8AAAAAAP///wAAAAAA////AAAAAAD///8AAAAAAP///wAAAAAA + ////AAAAAAD///8AAAAAAABwAAAAAAAAAHAAAAAAAAAAcAAAAAAOAABwAAAAAA4AAHAAAAAABgAAcAAA + AAACAABwAAAAAAAAAHAAAAAAAAAAAAAAAIAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAOAAAAAABwAA8AAA + AAAHAAD4AAAAAAcAAPwAAAAABwAA/gAAAAAHAAAAAAAAAD8AAAAAAAAAPwAAAAAAAAA/AACAAAAAAD8A + AMAAAAAAPwAA4AAAAAA/AADwAAAAAD8AAPgAAAAAPwAA/AAAAAA/AAD+AAAAAD8AAP8AAAAAPwAA/4AA + AAA/AAAoAAAAIAAAAEAAAAABACAAAAAAAIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2/wAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + APb29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAA9vb2//b29v9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/9vb2 + //b29v8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAD29vb/9vb2/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC + /0JCQv/29vb/9vb2/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPb29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD29vb/9vb2/0JCQv9CQkL/QkJC + /0JCQv9CQkL/QkJC/0JCQv9CQkL/9vb2//b29v/39/dA9/f3QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPb29v/29vb/QkJC + /0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv/29vb/9vb2/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAD29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAPb29v/29vb/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC + /0JCQv9CQkL/9vb2//b29v8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAA9vb2//b29v9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC + /0JCQv9CQkL/QkJC/0JCQv/29vb/9vb2/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/AAAA + AAAAAAD29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v8AAAAAAAAAAPb29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//X19Z8AAAAAAAAAAPb29v/29vb/9vb2//X19Z/29vb/9vb2/0JCQv9CQkL/QkJC + /0JCQv/29vb/9vb2/wAAAAAAAAAA9vb2//b29v9CQkL/QkJC/0JCQv9CQkL/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//f392AAAAAA9vb2//b29v/29vb/9vb2//b29v/29vb/QkJC + /0JCQv9CQkL/QkJC//b29v/29vb/AAAAAAAAAAD29vb/9vb2/0JCQv9CQkL/QkJC/0JCQv/29vb/9vb2 + //b29v/29vb/rXIu/5xTAP+cUwD/nFMA/76QXP/29vb/9vb2//X19VD29vb/9vb2/76QXP/29vb/9vb2 + //b29v9CQkL/QkJC/0JCQv9CQkL/9vb2//b29v8AAAAAAAAAAPb29v/29vb/QkJC/0JCQv9CQkL/QkJC + //b29v/29vb/9fX1n/b29v/w7Of/rXIu/5xTAP+cUwD/nFMA/8OabP/29vb/9vb27/b29v/29vb/nFMA + /8+viv/29vb/9vb2/0JCQv9CQkL/QkJC/0JCQv/29vb/9vb2//b29v/29vb/9vb2//b29v9CQkL/QkJC + /0JCQv9CQkL/9vb2//b29v8AAAAA9fX1n/b29v/w7Of/ol0P/5xTAP+cUwD/nFMA/9S5mv/29vb/9vb2 + //b29v+cUwD/nFMA/+DNuf/29vb/9vb2//b29v9CQkL/QkJC//b29v/29vb/9vb2//b29v/29vb/9vb2 + /0JCQv9CQkL/9vb2//b29v/29vb/9vb2/wAAAADv7+8Q9vb2z/b29v/l18j/ol0P/5xTAP+cUwD/nFMA + /+DNuf/29vb/9vb2/5xTAP+cUwD/ol0P/+vi1//29vb/9vb2/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC + /0JCQv9CQkL/QkJC/0JCQv/29vb/9vb2//b29v/29vb/AAAAAAAAAADv7+8Q9vb2z/b29v/l18j/nFMA + /5xTAP+cUwD/ol0P/+XXyP/29vb/nFMA/5xTAP+cUwD/rXIu//b29v/29vb/QkJC/0JCQv9CQkL/QkJC + /0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC//b29v/29vb/AAAAAAAAAAAAAAAAAAAAAAAAAAD39/cg9vb2 + 7/b29v/UuZr/nFMA/5xTAP+cUwD/p2cf//Ds5/+cUwD/nFMA/5xTAP+cUwD/9vb2//b29v/29vb/9vb2 + //b29v/29vb/QkJC/0JCQv/29vb/9vb2//b29v/29vb/9vb2//b29v8AAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAD09PQw9vb27/b29v/UuZr/nFMA/5xTAP+cUwD/rXIu/5xTAP+cUwD/nFMA/5xTAP/29vb/9vb2 + //b29v/29vb/9vb2//b29v9CQkL/QkJC//b29v/29vb/9vb2//b29v/29vb/9vb2/wAAAAAAAAAA9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v++kFz/nFMA/5xTAP+cUwD/nFMA/5xTAP+cUwD/nFMA + //b29v/29vb/9vb2//b29v9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv/29vb/9vb2/wAAAAAAAAAAAAAA + AAAAAAD19fWf9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v++kFz/nFMA/5xTAP+cUwD/nFMA + /5xTAP+cUwD/9vb2//b29v/29vb/9vb2/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC//b29v/29vb/AAAA + AAAAAAAAAAAAAAAAAAAAAAD19fWf9vb2//b29v++kFz/nFMA/5xTAP+cUwD/nFMA/5xTAP+cUwD/nFMA + /5xTAP+cUwD/nFMA/5xTAP/29vb/9vb2//b29v/29vb/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/9vb2 + //b29v8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD19fWf9vb2//b29v++kFz/nFMA/5xTAP+cUwD/nFMA + /5xTAP+cUwD/nFMA/5xTAP+cUwD/nFMA//b29v/29vb/9vb2//b29v9CQkL/QkJC/0JCQv9CQkL/QkJC + /0JCQv/29vb/9vb2/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD19fWf9vb2//b29v++kFz/nFMA + /5xTAP+cUwD/nFMA/5xTAP+cUwD/nFMA/5xTAP+cUwD/9vb2//b29v/29vb/9vb2/0JCQv9CQkL/QkJC + /0JCQv9CQkL/QkJC//b29v/29vb/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD19fWf9vb2 + //b29v++kFz/nFMA/5xTAP+cUwD/nFMA/5xTAP+cUwD/nFMA/5xTAP/29vb/9vb2//b29v/29vb/QkJC + /0JCQv9CQkL/QkJC/0JCQv9CQkL/9vb2//b29v8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAD19fWf9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAD19fWf9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/AAAAAAAAAAAAAAAAAAAA + AP////8AA///AAP//wAD//8AA///AAP//wAD//8AA///AA///wAA//8AAP//AAD//wAA//8AAAMAAAAD + AADAAwAAQAMAAAADAAAAAACAAAAAgAAAAMAAAAPgAAAD8AAAAwAAAA8AAAAPgAAAD8AAAA/gAAAP8AAA + D/gAAA/8AAAPKAAAABAAAAAgAAAAAQAgAAAAAABABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9vb2 + /0JCQv9CQkL/QkJC/0JCQv9CQkL/9vb2/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + APb29v/29vb/9vb2//b29v/29vb/9vb2//b29v8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAD29vb/QkJC/0JCQv9CQkL/QkJC//b29v8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAA9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v8AAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAPb29v9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv/29vb/AAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAD29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + /wAAAAD29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb27/T09DD29vb/9vb27/b29v9CQkL/QkJC + //b29v8AAAAA9vb2/0JCQv9CQkL/9vb2//b29u++kFz/nFMA/76QXP/29vbv9vb2/76QXP/29vb/QkJC + /0JCQv/29vb/9vb2//b29v9CQkL/QkJC//b29v/09PQw9vb2776QXP+cUwD/vpBc//b29v+cUwD/vpBc + //b29v9CQkL/QkJC/0JCQv9CQkL/QkJC//b29v/29vb/AAAAAPT09DD29vbvvpBc/5xTAP++kFz/nFMA + /5xTAP/29vb/9vb2//b29v9CQkL/9vb2//b29v/29vb/AAAAAPb29u/29vb/9vb2//b29v++kFz/nFMA + /5xTAP+cUwD/9vb2//b29v9CQkL/QkJC/0JCQv/29vb/AAAAAAAAAAD09PQw9vb2776QXP+cUwD/nFMA + /5xTAP+cUwD/nFMA//b29v/29vb/QkJC/0JCQv9CQkL/9vb2/wAAAAAAAAAAAAAAAPT09DD29vbvvpBc + /5xTAP+cUwD/nFMA/5xTAP/29vb/9vb2/0JCQv9CQkL/QkJC//b29v8AAAAAAAAAAAAAAAAAAAAA9PT0 + MPb29u/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/AAAAAAAAAAD//wAAAf8A + AAH/AAAB/wAAA/8AAAD/AAAA/wAAABAAAAAQAAAAAAAAAAAAAIABAAAAAwAAAAMAAIADAADAAwAA + + + \ No newline at end of file diff --git a/source/shared/project/source/source/extension/dirToFilter/file.cs b/source/shared/project/source/source/extension/dirToFilter/file.cs new file mode 100644 index 0000000..04f31d3 --- /dev/null +++ b/source/shared/project/source/source/extension/dirToFilter/file.cs @@ -0,0 +1,39 @@ +using EnvDTE; +using Microsoft.VisualStudio.VCProjectEngine; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace VisualStudioCppExtensions +{ + namespace dirToFilter + { + + public class file + { + public VCFile x; + public path xn; + public path fn; + + public void init(VCFile x) + { + this.x = x; + xn = new path(x.FullPath); + } + + public void init(string p) => fn = (xn - new path(p))?.mUp(); + + + } + + + + + + + + + + } +} \ No newline at end of file diff --git a/source/shared/project/source/source/extension/dirToFilter/filters.cs b/source/shared/project/source/source/extension/dirToFilter/filters.cs new file mode 100644 index 0000000..432c865 --- /dev/null +++ b/source/shared/project/source/source/extension/dirToFilter/filters.cs @@ -0,0 +1,246 @@ +using EnvDTE; +using Microsoft.VisualStudio.VCProjectEngine; +using System; +using System.Collections.Generic; +using System.Linq; + + + + + + + + +namespace VisualStudioCppExtensions +{ + namespace dirToFilter + { + + + + + + public class filter + { + public filter xp; + public VCFilter x; + public string xn; + public string xn2; + public Dictionary files = new Dictionary(StringComparer.OrdinalIgnoreCase); + public Dictionary filters = new Dictionary(StringComparer.OrdinalIgnoreCase); + public bool fEmpty = false; + + public void init(Dictionary fAll) + { + + + + xn = x.CanonicalName; + xn2 = x.Name; + + + foreach (VCFile x2 in (IVCCollection)x.Files) + files.Add(x2.FullPath, x2); + + + foreach (VCFilter x2 in (IVCCollection)x.Filters) + { + filter x3 = fAll[x2.CanonicalName]; + x3.xp = this; + filters.Add(x2.Name, x3); + } + + if (files.Count == 0 && filters.Count == 0) + fEmpty = true; + } + } + + + + + + + + + + + + + + + + + + + + + + + + public class filters + { + public VCProject p2; + public Dictionary fAll; + public filter f; + public filter fRoot; + + + + public void init(VCProject p2) + { + this.p2 = p2; + fAll = new Dictionary(); + f = new filter(); + + foreach (VCFilter x2 in (IVCCollection)p2.Filters) + { + filter x3 = new filter() { x = x2 }; + if (x2.Parent is VCProject) + { + x3.xp = f; + f.filters.Add(x2.Name, x3); + } + fAll.Add(x2.CanonicalName, x3); + } + + foreach (var x2 in fAll) + x2.Value.init(fAll); + } + + + + + + + + public void fCleanEmpty(Dictionary filesIn, bool fEmptyDelete) + { + //remove from filters + foreach (var v in filesIn) + { + object o = v.Value.Parent; + if (!(o is VCFilter)) continue; + VCFilter f = (VCFilter)o; + fAll[f.CanonicalName].files.Remove(v.Value.FullPath); + v.Value.Move(p2); + } + + //filters clean + bool b; + do + { + b = false; + fAll = fAll.Where(x => + { + filter x2 = x.Value; + if (x2.files.Count != 0) return true; + if (x2.filters.Count != 0) return true; + if (!fEmptyDelete) if (x2.fEmpty) return true; + filter xp = x2.xp; + xp.filters.Remove(x2.xn2); + x2.x.Remove(); + b = true; + return false; + } + ).ToDictionary(x => x.Key, x => x.Value); + } while (b); + + } + + + + + + + + public filter fAdd(filter f, string x) + { + if (x == null) return f; + path x2 = new path(x, path.Separator.sDefault); + + + filter x3 = f; + for (int i = 0; i < x2.x2.Length; i++) + { + if (!x3.filters.TryGetValue(x2.x2[i], out filter x4)) + { + VCFilter x5 = null; + if (x3.x == null) + x5 = (VCFilter)p2.AddFilter(x2.x2[i]); + else + x5 = (VCFilter)x3.x.AddFilter(x2.x2[i]); + + x4 = new filter() { x = x5 }; + x4.xp = x3; + x3.filters.Add(x5.Name, x4); + fAll.Add(x5.CanonicalName, x4); + + x4.xn = x5.CanonicalName; + x4.xn2 = x5.Name; + } + x3 = x4; + } + return x3; + } + + + + + + + public void filtersSet(Dictionary x) + { + foreach (var v in x) + { + file x2 = v.Value; + if (x2.fn == null) continue; + + filter x3 = fRoot; + foreach (string x4 in x2.fn.x2) + x3 = fAdd(x3, x4); + + x2.x.Move(x3.x ?? (object)p2); + x3.files.Add(x2.xn.x, x2.x); + } + } + + + + + + + public static void filtersDeleteAll(VCProject p2) + { + { + LinkedList x = new LinkedList(); + foreach (VCFile x2 in (IVCCollection)p2.Files) + x.AddLast(x2); + + foreach (VCFile x2 in x) + x2.Move(p2); + } + + { + LinkedList x = new LinkedList(); + foreach (VCFilter x2 in (IVCCollection)p2.Filters) + x.AddLast(x2); + + foreach (VCFilter x2 in x) + if (x2.Parent is VCProject) + p2.RemoveFilter(x2); + } + } + + + + + + + } + + + + + + } +} \ No newline at end of file diff --git a/source/shared/project/source/source/extension/dirToFilter/projectData.cs b/source/shared/project/source/source/extension/dirToFilter/projectData.cs new file mode 100644 index 0000000..d9e0272 --- /dev/null +++ b/source/shared/project/source/source/extension/dirToFilter/projectData.cs @@ -0,0 +1,271 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using EnvDTE; +using Microsoft.VisualStudio.Shell; +using Microsoft.VisualStudio.VCProjectEngine; + +namespace VisualStudioCppExtensions +{ + namespace dirToFilter + { + public class ProjectData + { + public Project p; + public VCProject p2; + public string fileName; + public string path; + public bool isVcxitems; + + + + public struct Files + { + public Dictionary file; + public Dictionary fileIn; + //public Dictionary> group; + public Dictionary fileIn2; + } + public Files f; + + + + public filters f2; + + + + + + + + + + + + + + + + + + + + + public class Root + { + public class In + { + public enum inMode + { + project, + dir, + dirSubDir + } + public inMode mode; + public string dir; + } + public In i = new In(); + + public class Calculate + { + public string dir; + public bool fEmptyDelete = true; + } + public Calculate c = new Calculate(); + + public class Out + { + public string filter; + } + public Out o = new Out(); + + + + public string oFilterAdd(string s) + { + bool sFull = !string.IsNullOrWhiteSpace(s); + bool rFull = filterFull; + return (rFull ? o.filter : "") + + ((rFull && sFull) ? "\\" : "") + + (sFull ? s : ""); + } + + public bool filterFull { get => !string.IsNullOrWhiteSpace(o.filter); } + + + public static bool filterCheck(string s) + { + if (string.IsNullOrWhiteSpace(s)) return true; + return !s.Any(x => !(char.IsLetterOrDigit(x) || x == ' ' || x == '\\' || x == '/')); + } + + + public void filterSet(string s) + { + o.filter = ""; + if (string.IsNullOrWhiteSpace(s)) { o.filter = ""; return; } + + //check + if (!filterCheck(s)) throw new Exception(); + + string[] s2 = s.Split(new char[] { '\\', '/' }, StringSplitOptions.RemoveEmptyEntries).Where(x => !string.IsNullOrWhiteSpace(x)).ToArray(); + StringBuilder s3 = new StringBuilder(); + for (int i = 0; i < s2.Length; i++) + { + s3.Append(s2[i]); + if (i < s2.Length - 1) s3.Append('\\'); + } + o.filter = s3.ToString(); + } + } + public Root r = new Root(); + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + public void filesGet() + { + ThreadHelper.ThrowIfNotOnUIThread(); + HashSet xp = new HashSet(); + VCReferences xr = (VCReferences)p2.VCReferences; + + + if (!isVcxitems) + { + //reference search + foreach (VCSharedProjectReference x in xr.GetReferencesOfType(32)) + xp.Add(((Project)x.ReferencedProject).FullName); + + + //reference remove + foreach (VCSharedProjectReference x in xr.GetReferencesOfType(32)) + xr.RemoveReference(x); + } + + + //projecctItems + f.file = ((IVCCollection)p2.Files).Cast().Where(x => x.ItemType != null).ToDictionary(x => x.FullPath); + + + if (!isVcxitems) + { + //reference add + bool x3; + foreach (string x in xp) + xr.AddSharedProjectReference(x, out x3); + } + } + + + public void filesIn() + { + f.fileIn = (r.i.mode == Root.In.inMode.project) ? f.file : + r.i.mode == Root.In.inMode.dirSubDir ? + f.file.Where(x => x.Key.StartsWith(r.i.dir)).ToDictionary(x => x.Key, x => x.Value) : + f.file.Where(x => File.Exists(r.i.dir + '\\' + x.Value.Name)).ToDictionary(x => x.Key, x => x.Value); + + f.fileIn2 = f.fileIn.Select(x => + { + file x2 = new file(); + x2.init(x.Value); + x2.init(r.c.dir); + return x2; + } + ).ToDictionary(x => x.xn.x, x => x); + + //filesGroup(); + } + + + + + + /*public void filesGroup() + { + // ClCompile -> .cpp, .cc, .c, ... + // ClInclude -> .h, .hxx, .hpp, ... + // None -> Makefile, .gitignore, ... + f.group = new Dictionary>(); + foreach (ProjectItem projectItem in f.file) + try + { + string itemType = (string)projectItem.Properties.Item("ItemType").Value; + if (string.IsNullOrEmpty(itemType)) continue; + + if (!f.group.ContainsKey(itemType)) + f.group.Add(itemType, new List()); + + f.group[itemType].Add((string)projectItem.Properties.Item("FullPath").Value); + } + catch (Exception) + { + } + }*/ + + + + + + + + + + + + + + + + + + + + + + + + + public void filtersGet() + { + f2 = new filters(); + f2.init(p2); + f2.fCleanEmpty(f.fileIn, r.c.fEmptyDelete); + f2.fRoot = f2.fAdd(f2.f, r.o.filter); + f2.filtersSet(f.fileIn2); + } + } + + + } +} diff --git a/source/shared/project/source/source/extension/dirToFilter/work.cs b/source/shared/project/source/source/extension/dirToFilter/work.cs new file mode 100644 index 0000000..5ce509e --- /dev/null +++ b/source/shared/project/source/source/extension/dirToFilter/work.cs @@ -0,0 +1,257 @@ +using System; +using System.ComponentModel.Design; +using Microsoft.VisualStudio.Shell; +using Microsoft.VisualStudio.Shell.Interop; +using Microsoft.VisualStudio.VCProjectEngine; +using Microsoft.Internal.VisualStudio.PlatformUI; +using EnvDTE; +using System.Collections.Generic; +using System.IO; +using System.Xml; +using System.Reflection; +using System.Text; +using System.Linq; +using System.Windows.Forms; + +namespace VisualStudioCppExtensions +{ + internal sealed partial class extension + { + + + + //callback + void buttonBeforeQueryStatus(object sender, EventArgs e) + { + OleMenuCommand x = (OleMenuCommand)sender; + if (x == null) return; + + bool b; + try + { + b = projectUtility.IsCpp(projectUtility.GetActive()); + } + catch(Exception) + { + b = false; + } + x.Visible = b; + x.Enabled = b; + } + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + //callback + private void buttonClick(object sender, EventArgs e) + { + //projectData + dirToFilter.ProjectData p = new dirToFilter.ProjectData(); + ThreadHelper.ThrowIfNotOnUIThread(); + p.p = projectUtility.GetActive(); + + + + + + + + + + + + //check 1 project + if (!projectUtility.IsCpp(p.p)) + { + ErrorMessageBox("A C++ project must be selected to generate filter!"); + return; + } + + + + + + + + + + + + + //projectData + p.p2 = (VCProject)p.p.Properties.Item("project").Object; + p.fileName = p.p.FileName; + p.path = Path.GetDirectoryName(p.fileName); + p.isVcxitems = p.fileName.EndsWith(".vcxitems", StringComparison.OrdinalIgnoreCase); + p.filesGet(); + //p.filesGroup(); + p.r.i.dir = p.path; + { + path x2 = path.oCommon(p.f.file.Select(x => x.Key).ToArray()); + p.r.c.dir = x2 == null ? null : x2.x; + } + if (string.IsNullOrEmpty(p.r.c.dir)) + { + ErrorMessageBox("No common sub-path between files, cannot generate filter!"); + return; + } + + + + + + + + + + + + + + //check 2 confirm + /*if (VsShellUtilities.ShowMessageBox(this.packageIServiceProvider, + string.Format("Generate filter per folder for '{0}'?\nExisting filters will be erased", project.UniqueName), + string.Empty, + OLEMSGICON.OLEMSGICON_WARNING, + OLEMSGBUTTON.OLEMSGBUTTON_OKCANCEL, + OLEMSGDEFBUTTON.OLEMSGDEFBUTTON_FIRST) == Microsoft.Internal.VisualStudio.PlatformUI.DialogResult.Cancel) + return;*/ + + + + + //check 2 + formQuestion fq = new formQuestion(); + fq.labelInfoProject2.Text = p.p.Name; + fq.labelInfoCalculate3.Text = p.r.c.dir; + fq.labelInfoOut3.Text = p.r.o.filter; + fq.StartPosition = FormStartPosition.CenterScreen; + fq.ShowDialog((IWin32Window)p.p.DTE.MainWindow.LinkedWindowFrame); + if (fq.r == formQuestion.Result.none) return; + + + + + //check 2 advanced + if (fq.r == formQuestion.Result.advanced) + { + formAdvanced fa = new formAdvanced(); + fa.textBoxIn.Text = p.r.i.dir; + fa.textBoxRootDir.Text = p.r.c.dir; + fa.checkBoxCalculateDeleteFilters.Checked = p.r.c.fEmptyDelete; + fa.StartPosition = FormStartPosition.CenterScreen; + fa.p = p; + fa.ShowDialog((IWin32Window)p.p.DTE.MainWindow.LinkedWindowFrame); + + if (fa.r != formAdvanced.Result.ok) return; + + if (fa.radioButtonInProject.Checked) p.r.i.mode = dirToFilter.ProjectData.Root.In.inMode.project; + if (fa.radioButtonInDir.Checked) p.r.i.mode = dirToFilter.ProjectData.Root.In.inMode.dir; + if (fa.radioButtonInDirSubDir.Checked) p.r.i.mode = dirToFilter.ProjectData.Root.In.inMode.dirSubDir; + p.r.i.dir = fa.textBoxIn.Text; + p.r.c.dir = fa.textBoxRootDir.Text; + p.r.c.fEmptyDelete = fa.checkBoxCalculateDeleteFilters.Checked; + if (fa.checkBoxRootFilter.Checked) + try { p.r.filterSet(fa.textBoxRootFilter.Text); } catch (Exception) { return; } + } + + + + + + + + + + + + + + + + + //projectData 2 + p.filesIn(); + p.filtersGet(); + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + } + } +} diff --git a/source/shared/project/source/source/extension/extension.cs b/source/shared/project/source/source/extension/extension.cs index c4b4144..9ea114e 100644 --- a/source/shared/project/source/source/extension/extension.cs +++ b/source/shared/project/source/source/extension/extension.cs @@ -14,11 +14,7 @@ namespace VisualStudioCppExtensions { internal sealed partial class extension { - //attributes - public const int CommandId = 0x0100; - public static readonly Guid menuGroup = new Guid("acd8036f-19ae-43b2-a2d6-11788cb282fe"); - private readonly Package package; - + @@ -27,10 +23,10 @@ internal sealed partial class extension //error box - private void ErrorMessageBox(string errorMessage) + private void ErrorMessageBox(string m) { - VsShellUtilities.ShowMessageBox(this.packageIServiceProvider, - errorMessage, + VsShellUtilities.ShowMessageBox(package, + m, string.Empty, OLEMSGICON.OLEMSGICON_CRITICAL, OLEMSGBUTTON.OLEMSGBUTTON_OK, @@ -53,40 +49,49 @@ private void ErrorMessageBox(string errorMessage) - //init - public static extension Instance - { - get; - private set; - } + //init package + private readonly Package package; + //private IServiceProvider packageIServiceProvider { get => this.package; } - // Gets the service provider from the owner package. - private IServiceProvider packageIServiceProvider { get => this.package; } - // Initializes the singleton instance of the command. - /// Owner package, not null. + //init extension + public static extension Instance { get; private set; } public static void Initialize(Package package) => Instance = new extension(package); - - /// - /// Initializes a new instance of the class. - /// Adds our command handlers for menu (commands must exist in the command table file) - /// - /// Owner package, not null. + + + + + + + + + + + + + + + + + + + //adds command handlers for menu.button, commands must exist in the command table file private extension(Package package) { if (package == null) throw new ArgumentNullException("package"); this.package = package; - OleMenuCommandService commandService = (OleMenuCommandService)this.packageIServiceProvider.GetService(typeof(IMenuCommandService)); - if (commandService == null) return; - var menuItem = new OleMenuCommand(this.MenuItemCallback, new CommandID(menuGroup, CommandId)); - menuItem.BeforeQueryStatus += OnBeforeQueryStatusCallBack; - commandService.AddCommand(menuItem); + OleMenuCommandService x = (OleMenuCommandService)((IServiceProvider)package).GetService(typeof(IMenuCommandService)); + if (x == null) return; + + + x.AddCommand(new OleMenuCommand(this.buttonClick, null, this.buttonBeforeQueryStatus, new CommandID(package2.gui.groupGuid, package2.gui.buttonId))); + x.AddCommand(new OleMenuCommand(this.button2Click, null, this.buttonBeforeQueryStatus, new CommandID(package2.gui.groupGuid, package2.gui.button2Id))); } diff --git a/source/shared/project/source/source/extension/file.cs b/source/shared/project/source/source/extension/file.cs deleted file mode 100644 index 9ba1e7c..0000000 --- a/source/shared/project/source/source/extension/file.cs +++ /dev/null @@ -1,97 +0,0 @@ -using EnvDTE; -using Microsoft.VisualStudio.VCProjectEngine; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace VisualStudioCppExtensions -{ - - public class file - { - public VCFile x; - public path xn; - public path fn; - - public void init(VCFile x) - { - this.x = x; - xn = new path(); - xn.init(x.FullPath, path.seperatorDir); - } - - public void init(string p) - { - path pn = new path(); - { - pn.init(p, path.seperatorDir); - if (pn.x2.Length > xn.x2.Length) return; - } - - int i = 0; - { - int i2 = pn.x2.Length; - for (; i < i2; i++) - if (string.Compare(pn.x2[i], xn.x2[i], StringComparison.OrdinalIgnoreCase) != 0) break; - - if (i != pn.x2.Length) return; - } - - { - string s = ""; - if (i < xn.x2.Length - 1) - s = string.Join("\\", xn.x2, i, xn.x2.Length - 1 - i); - - fn = new path(); - fn.init(s, new char[] { '\\' }); - } - - - } - - - - - - - - } - - - - - - public class path - { - public string x; - public string[] x2; - - public static char[] seperatorDir = new char[] { System.IO.Path.DirectorySeparatorChar }; - - - public void init(string x, char[] separator) - { - this.x = x; - x2 = new string[0]; - if (x != null) - x2 = x.Split(separator, StringSplitOptions.RemoveEmptyEntries); - - - /* - new char[] { System.IO.Path.DirectorySeparatorChar } - DirectorySeparatorChar - AltDirectorySeparatorChar - PathSeparator - VolumeSeparatorChar - */ - - - } - - } - - - - -} \ No newline at end of file diff --git a/source/shared/project/source/source/extension/filterToDir/error.cs b/source/shared/project/source/source/extension/filterToDir/error.cs new file mode 100644 index 0000000..20a2c5f --- /dev/null +++ b/source/shared/project/source/source/extension/filterToDir/error.cs @@ -0,0 +1,92 @@ +using EnvDTE; +using Microsoft.VisualStudio.VCProjectEngine; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace VisualStudioCppExtensions +{ + namespace filterToDir + { + + + + public class error + { + public enum Type { move, delete, dirName, sameFile, sameFilter }; + + + + public class data + { + public Type t; + public string[] s; + public Exception e; + } + public List x = new List(); + public void add(data d) => this.x.Add(d); + public bool full => x.Count > 0; + + + + + public override string ToString() + { + StringBuilder s = new StringBuilder(); + + for (int i = 0; i < x.Count; i++) + { + data x2 = x[i]; + string s2 = "[" + (i + 1) + ".]\r\n"; + switch (x2.t) + { + case Type.move: + s2 += "\r\ncan not move file:"; + s2 += "\r\n" + x2.s[0]; + s2 += "\r\n" + x2.s[1]; + break; + + case Type.delete: + s2 += "\r\ncan not delete directory:"; + s2 += "\r\n" + x2.s[0]; + break; + + case Type.dirName: + s2 += "\r\nfilter contains an invalid character for dirName, please rename the filter:"; + s2 += "\r\n" + x2.s[0]; + break; + + case Type.sameFile: + s2 += "\r\nfilter contains multiple files with the same name, please rename or move them:"; + s2 += "\r\n" + x2.s[0]; + break; + + case Type.sameFilter: + s2 += "\r\nfilter contains multiple filters with the same name, please rename or move them:"; + s2 += "\r\n" + x2.s[0]; + break; + } + + if (x2.e != null) s.Append("\r\n\r\nexception: [" + x2.e.Message + "]"); + + s.Append(s2); + if (i < x.Count - 1) s.Append("\r\n\r\n\r\n\r\n"); + } + + return s.ToString(); + } + + + + + + + + } + + + + + } +} \ No newline at end of file diff --git a/source/shared/project/source/source/extension/filterToDir/file.cs b/source/shared/project/source/source/extension/filterToDir/file.cs new file mode 100644 index 0000000..9170b4a --- /dev/null +++ b/source/shared/project/source/source/extension/filterToDir/file.cs @@ -0,0 +1,34 @@ +using EnvDTE; +using Microsoft.VisualStudio.VCProjectEngine; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace VisualStudioCppExtensions +{ + namespace filterToDir + { + public class file + { + public VCFile x; + + public path x2; + + public filter xp; + + + + + + public file(VCFile x, filter xp) => init(x, xp); + + public void init(VCFile x, filter xp) + { + this.x = x; + x2 = new path(x.FullPath); + this.xp = xp; + } + } + } +} \ No newline at end of file diff --git a/source/shared/project/source/source/extension/filterToDir/filters.cs b/source/shared/project/source/source/extension/filterToDir/filters.cs new file mode 100644 index 0000000..3347601 --- /dev/null +++ b/source/shared/project/source/source/extension/filterToDir/filters.cs @@ -0,0 +1,208 @@ +using EnvDTE; +using Microsoft.VisualStudio.VCProjectEngine; +using System; +using System.Collections.Generic; +using System.Linq; + + + + + + + + +namespace VisualStudioCppExtensions +{ + namespace filterToDir + { + + + + + + public class filter + { + public VCFilter x; + + public path xn; + public string xn2; + public string guid; + + + + public class other + { + public filter xp; + public Dictionary files = new Dictionary(StringComparer.OrdinalIgnoreCase); + public HashSet filters2 = new HashSet(); + } + public other o = new other(); + + + public filter() { } + public filter(VCFilter x, filter xp) => init(x, xp); + + + + public void init(VCFilter x, filter xp) + { + this.x = x; + o.xp = xp; + xn = new path(x.CanonicalName); + xn2 = x.Name; + guid = x.UniqueIdentifier; + + + + + foreach (VCFile x2 in (IVCCollection)x.Files) + { + if (x2.ItemType == null) continue; + file x3 = new file(x2, this); + o.files.Add(x3.x2.x, x3); + } + + + foreach (VCFilter x2 in (IVCCollection)x.Filters) + { + filter x3 = new filter(x2, this); + o.filters2.Add(x3); + } + } + } + + + + + + + + + + + + + + + + + + + + + + + + public class filters2 + { + public VCProject p; + public filter f; + + + + + public void init(VCProject p) + { + this.p = p; + f = new filter(); + + + foreach (VCFile x2 in (IVCCollection)p.Files) + { + if (!(x2.Parent is VCProject)) continue; + if (x2.ItemType == null) continue; + + file x3 = new file(x2, f); + f.o.files.Add(x3.x2.x, x3); + } + + + foreach (VCFilter x2 in (IVCCollection)p.Filters) + { + if (!(x2.Parent is VCProject)) continue; + + filter x3 = new filter(x2, f); + f.o.filters2.Add(x3); + } + } + + + + + + + + /*public void fCleanEmpty(Dictionary filesIn, bool fEmptyDelete) + { + //remove from filters2 + foreach (var v in filesIn) + { + object o = v.Value.Parent; + if (!(o is VCFilter)) continue; + VCFilter f = (VCFilter)o; + fAll[f.CanonicalName].files.Remove(v.Value.FullPath); + v.Value.Move(p); + } + + //filters2 clean + bool b; + do + { + b = false; + fAll = fAll.Where(x => + { + filter2 x2 = x.Value; + if (x2.files.Count != 0) return true; + if (x2.filters2.Count != 0) return true; + if (!fEmptyDelete) if (x2.fEmpty) return true; + filter2 xp = x2.xp; + xp.filters2.Remove(x2.xn2); + x2.x.Remove(); + b = true; + return false; + } + ).ToDictionary(x => x.Key, x => x.Value); + } while (b); + + }*/ + + + + + + + + /*public filter2 fAdd(filter2 f, string x) + { + path x2 = new path(x, path.Separator.sDefault); + + + filter2 x3 = f; + for (int i = 0; i < x2.x2.Length; i++) + { + if (!x3.filters2.TryGetValue(x2.x2[i], out filter2 x4)) + { + VCFilter x5 = null; + if (x3.x == null) + x5 = (VCFilter)p.AddFilter(x2.x2[i]); + else + x5 = (VCFilter)x3.x.AddFilter(x2.x2[i]); + + x4 = new filter2() { x = x5 }; + x4.xp = x3; + x3.filters2.Add(x5.Name, x4); + fAll.Add(x5.CanonicalName, x4); + + x4.xn = x5.CanonicalName; + x4.xn2 = x5.Name; + } + x3 = x4; + } + return x3; + }*/ + + + + } + } +} \ No newline at end of file diff --git a/source/shared/project/source/source/extension/filterToDir/projectData.cs b/source/shared/project/source/source/extension/filterToDir/projectData.cs new file mode 100644 index 0000000..69485b2 --- /dev/null +++ b/source/shared/project/source/source/extension/filterToDir/projectData.cs @@ -0,0 +1,620 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using EnvDTE; +using Microsoft.VisualStudio.Shell; +using Microsoft.VisualStudio.VCProjectEngine; + +namespace VisualStudioCppExtensions +{ + namespace filterToDir + { + public class ProjectData + { + //project + public class Project + { + public VCProject p; + + //id + public string name; + public string dir; + public string dirFile; + public string guid; + + public Project(VCProject x) + { + p = x; + + name = p.Name; + dir = p.ProjectDirectory; + dirFile = p.ProjectFile; + guid = p.ProjectGUID; + } + + public bool flagDirty { get => p.IsDirty; } + public bool flagVcxItems { get => dirFile.EndsWith(".vcxitems", StringComparison.OrdinalIgnoreCase); } + } + public Project p; + + + + + + + + + + + + + + + + public class Files + { + public filters2 f2; + + public void filesGet(Project p) + { + ThreadHelper.ThrowIfNotOnUIThread(); + VCReferences xr = (VCReferences)p.p.VCReferences; + HashSet xp = new HashSet(); + + + if (!p.flagVcxItems) + { + //reference search + foreach (VCSharedProjectReference x in xr.GetReferencesOfType(32)) + xp.Add(((EnvDTE.Project)x.ReferencedProject).FullName); + + //reference remove + foreach (VCSharedProjectReference x in xr.GetReferencesOfType(32)) + xr.RemoveReference(x); + } + + + + //projecctItems + f2 = new filters2(); + f2.init(p.p); + + + + if (!p.flagVcxItems) + { + //reference add + bool x3; + foreach (string x in xp) + xr.AddSharedProjectReference(x, out x3); + } + } + + + + + //check + private char[] checkC = Path.GetInvalidPathChars().Union(Path.GetInvalidFileNameChars()).ToArray(); + private void check2(filter x, error e) + { + //chars + bool b = true; + foreach (char c in checkC) + if (x.xn2.Contains(c)) { b = false; break; } + if (!b) e.add(new error.data() { t = error.Type.dirName, s = new string[] { x.xn.x } }); + + //same file + foreach (var x3 in x.o.files.GroupBy(x2 => dir.file2.fileRelative(x2.Value).x.ToLower()).Where(x2 => x2.Count() > 1)) + e.add(new error.data() { t = error.Type.sameFile, s = new string[] { x3.Key } }); + + //same filter + foreach (var x3 in x.o.filters2.GroupBy(x2 => x2.xn.x.ToLower()).Where(x2 => x2.Count() > 1)) + e.add(new error.data() { t = error.Type.sameFilter, s = new string[] { x3.Key } }); + + + foreach (filter x2 in x.o.filters2) + check2(x2, e); + } + + public void check(error e) + { + foreach (filter x in f2.f.o.filters2) + check2(x, e); + } + } + public Files f = new Files(); + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + public class Data + { + public class Calculate + { + public path filter = new path(""); + + static bool filterCheck(string s) + { + if (!s.xFull()) return true; + return !s.Any(x => !(char.IsLetterOrDigit(x) || x == ' ' || x == '\\' || x == '/')); + } + + public void filterSet(string s) + { + filter = null; + if (!s.xFull()) return; + + //check + if (!filterCheck(s)) throw new Exception(); + + filter = new path(s); + } + } + public Calculate c = new Calculate(); + + + + public class Out + { + public path dir; + } + public Out o = new Out(); + + } + public Data d = new Data(); + + + + public error e = new error(); + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + public class dir + { + public ProjectData p; + public path root; + + + public dir(ProjectData p) => this.p = p; + + + + + + + + public class file2 + { + //info + public path p1; + public path p2; + public path d1; + public path d2; + public file f; + + public class Configuration + { + public eFileType fileType; + public bool deploymentContent; + //public string customTool; + //public bool includedInProject; + + public bool document = false; + public string dGuid; + public Configuration(VCFile x) + { + fileType = x.FileType; + deploymentContent = x.DeploymentContent; + //customTool = x.CustomTool; + + ProjectItem x2 = (ProjectItem)x.Object; + //if (!x2.Saved) x2.Save(); notImplemented + Document x3 = x2.Document; + if (x3 != null) + { + document = true; + dGuid = x3.Kind; + } + } + public void set(VCFile x) + { + if (x == null) return; + x.FileType = fileType; + x.DeploymentContent = deploymentContent; + //x.CustomTool = customTool; notImplemented + + ProjectItem x2 = (ProjectItem)x.Object; + if (document) x2.Open(); + } + } + + + + //static + public static bool move(path p1, path p2, error e) + { + try + { + File.Move(p1.x, p2.x); + } + catch (Exception ex) + { + e.add(new error.data() { t = error.Type.move, s = new string[] { p1.x, p2.x }, e = ex }); + return false; + } + return true; + } + + + + //move + public void createMoveD() + { + d1 = p1.mUp(); + d2 = p2.mUp(); + if (!Directory.Exists(d1.x)) throw new Exception(); + if (Directory.Exists(d2.x)) return; + + Directory.CreateDirectory(d2.x); + } + + + public bool move(ProjectData p, error e) + { + if (File.Exists(p2.x)) return false; + + object o = f.xp.x; + bool b = o != null; + + Configuration c = new Configuration(f.x); + { + if (b) ((VCFilter)o).RemoveFile(f.x); else p.p.p.RemoveFile(f.x); + { + if (!file2.move(p1, p2, e)) p2 = p1; + } + f.x = (VCFile)(b ? ((VCFilter)o).AddFile(p2.x) : p.p.p.AddFile(p2.x)); + } + c.set(f.x); + return true; + } + + + + + //scan + public static path fileRelative(file x) => (x.xp.xn ?? new path("")) + x.x2.sLast; + + public static LinkedList filesGet(path r, filter x, ref LinkedList x2) + { + foreach (var x3 in x.o.files) + { + path p1 = x3.Value.x2; + path p2 = r + fileRelative(x3.Value); + if (!path.oEqual(p1, p2)) x2.AddLast(new file2() { f = x3.Value, p1 = p1, p2 = p2 }); + } + + foreach (filter x3 in x.o.filters2) + filesGet(r, x3, ref x2); + + return x2; + } + + } + + + + + + + + + + + + + + + + + + public class dir2 + { + public path d; + + public class result + { + public int dirs; + public int files; + public int entries; + } + public result r; + + public bool info() + { + if (!Directory.Exists(d.x)) return false; + + r = new result(); + r.dirs = Directory.GetDirectories(d.x).Length; + r.files = Directory.GetFiles(d.x).Length; + r.entries = Directory.GetFileSystemEntries(d.x).Length; + return true; + } + + + + + //flags + public static bool reparse(path x) => File.GetAttributes(x.x).HasFlag(FileAttributes.ReparsePoint); + public static bool empty(path x) => Directory.GetFileSystemEntries(x.x).Length == 0; + public static bool emptyFiles(path x) => Directory.GetFiles(x.x).Length == 0; + public static bool exist(path x) => Directory.Exists(x.x); + + public static void delete(path x, error e) + { + try + { + Directory.Delete(x.x); + } + catch (Exception e2) + { + e.add(new error.data() { t = error.Type.delete, s = new string[] { x.x }, e = e2 }); + } + } + + + + + + + //static + public static bool checkUpReparse(path r, path d) + { + if (d == null) return true; + + path d2 = d - r; + if (d2 == null) return false; + if (d2.count == 0) return true; + + if (dir2.exist(d)) if (dir2.reparse(d)) return false; + + return checkUpReparse(r, d.mUp()); + } + + private static void deleteUp2(path r, path d, error e) + { + if (d == null) return; + if (dir2.exist(d)) + { + if (!dir2.empty(d)) return; + + path d2 = d - r; + if (d2 == null) return; + if (d2.count == 0) return; + + dir2.delete(d, e); + } + deleteUp2(r, d.mUp(), e); + } + + public static void deleteUp(path r, path d, error e) { if (checkUpReparse(r, d)) deleteUp2(r, d, e); } + + + + private static void deleteDown2(path r, path d, error e) + { + if (!dir2.exist(d)) return; + if (dir2.reparse(d)) return; + if (d - r == null) return; + if (dir2.empty(d)) { dir2.delete(d, e); return; } + if (!dir2.emptyFiles(d)) return; + + + string[] x = Directory.GetDirectories(d.x); + foreach (string x2 in x) + deleteDown2(r, new path(x2), e); + + if (dir2.empty(d)) dir2.delete(d, e); + } + + public static void deleteDown(path r, path d, error e) { if (dir2.checkUpReparse(r, d)) deleteDown2(r, d, e); } + + + + + + + + + //interface + public override int GetHashCode() => d?.GetHashCode() ?? 0; + public override bool Equals(object x) + { + if (x == null) return false; + if (!(x is dir2)) return false; + return d?.Equals(((dir2)x).d) ?? false; + } + + public override string ToString() => d?.ToString(); + } + + + + + + + + + + + + + + + + + + + + + public void init(error e) + { + root = p.d.o.dir; + if (!Directory.Exists(root.x)) throw new Exception(); + + + //file, dir get + file2[] x = null; + { + LinkedList x1 = new LinkedList(); + file2.filesGet(root, p.f.f2.f, ref x1); + x = x1.ToArray(); + } + + HashSet x2 = new HashSet(); + foreach (file2 x3 in x) + { + x2.Add(new dir2() { d = x3.f.x2.mUp() }); + x3.createMoveD(); + } + + + + //file move + do + { + int x3 = x.Length; + x = x.Where(x4 => !x4.move(p, e)).ToArray(); + if (x3 == x.Length) break; + } while (true); + //error + foreach (file2 x3 in x) + e.add(new error.data() { t = error.Type.move, s = new string[] { x3.p1.x, x3.p2.x } }); + + + + //dir delete + foreach (dir2 x3 in x2) + x3.info(); + x2 = x2.Where(x3 => x3.r.files == 0).ToHashSet(); + + do + { + int x3 = x2.Count; + foreach (dir2 x4 in x2.Where(x4 => x4.r.dirs == 0)) + { + dir2.delete(x4.d, e); + dir2.deleteUp(root, x4.d.mUp(), e); + } + + x2 = x2.Where(x4 => x4.r.dirs != 0).ToHashSet(); + + x2 = x2.Where(x4 => x4.info()).ToHashSet(); + + if (x3 == x2.Count) break; + } while (true); + + + + //dir deleteDown + foreach (dir2 x3 in x2) { dir2.deleteDown(root, x3.d, e); dir2.deleteUp(root, x3.d.mUp(), e); } + } + + + + } + public dir di; + + + + + + + + + + + + + + + public void dirSet() + { + di = new dir(this); + di.init(e); + } + + + } + + } +} diff --git a/source/shared/project/source/source/extension/filterToDir/work.cs b/source/shared/project/source/source/extension/filterToDir/work.cs new file mode 100644 index 0000000..0c08fb0 --- /dev/null +++ b/source/shared/project/source/source/extension/filterToDir/work.cs @@ -0,0 +1,100 @@ +using System; +using System.ComponentModel.Design; +using Microsoft.VisualStudio.Shell; +using Microsoft.VisualStudio.Shell.Interop; +using Microsoft.VisualStudio.VCProjectEngine; +using Microsoft.Internal.VisualStudio.PlatformUI; +using EnvDTE; +using System.Collections.Generic; +using System.IO; +using System.Xml; +using System.Reflection; +using System.Text; +using System.Linq; +using System.Windows.Forms; + +namespace VisualStudioCppExtensions +{ + internal sealed partial class extension + { + + //callback + private void button2Click(object sender, EventArgs e) + { + //project + filterToDir.ProjectData p = new filterToDir.ProjectData(); + { + ThreadHelper.ThrowIfNotOnUIThread(); + Project x = projectUtility.GetActive(); + + //check 1 project + if (!projectUtility.IsCpp(x)) + { + ErrorMessageBox("A C++ project must be selected to generate filter!"); + return; + } + + p.p = new filterToDir.ProjectData.Project((VCProject)x.Properties.Item("project").Object); + } + + + + + + //files, filters + p.f.filesGet(p.p); + + //data + { + p.d.o.dir = new path(p.p.dir); + if (!p.d.o.dir.xFull()) + { + ErrorMessageBox("project root dir is not valid"); + return; + } + } + + + + + //check 2 + formQuestionFtd fq = new formQuestionFtd(); + + fq.labelInfoProject2.Text = p.p.p.Name; + fq.labelInfoCalculate3.Text = p.d.c.filter.x; + fq.labelInfoOut3.Text = p.d.o.dir.x; + + fq.StartPosition = FormStartPosition.CenterScreen; + fq.ShowDialog((IWin32Window)((Project)(p.p.p.Object)).DTE.MainWindow.LinkedWindowFrame); + if (fq.r == formQuestionFtd.Result.none) return; + + + + + + //check 3 + p.f.check(p.e); + + + + + //dir + if (!p.e.full) p.dirSet(); + + + + + + //error + if (p.e.full) + { + formError fe = new formError(); + fe.textBox.Text = p.e.ToString(); + fe.StartPosition = FormStartPosition.CenterScreen; + fe.ShowDialog((IWin32Window)((Project)(p.p.p.Object)).DTE.MainWindow.LinkedWindowFrame); + } + + + } + } +} diff --git a/source/shared/project/source/source/extension/filters.cs b/source/shared/project/source/source/extension/filters.cs deleted file mode 100644 index e35e0d7..0000000 --- a/source/shared/project/source/source/extension/filters.cs +++ /dev/null @@ -1,259 +0,0 @@ -using EnvDTE; -using Microsoft.VisualStudio.VCProjectEngine; -using System; -using System.Collections.Generic; -using System.Linq; - - - - - - - - -namespace VisualStudioCppExtensions -{ - - - - - - - public class filter - { - public filter xp; - public VCFilter x; - public string xn; - public string xn2; - public Dictionary files = new Dictionary(StringComparer.OrdinalIgnoreCase); - public Dictionary filters = new Dictionary(StringComparer.OrdinalIgnoreCase); - public bool fEmpty = false; - - public void init(Dictionary fAll) - { - //info - /*{ - string kind = x.Kind; - - string filter = x.Filter; - string canonicalName = x.CanonicalName; - string itemName = x.ItemName; - string name = x.Name; - string uniqueIdentifier = x.UniqueIdentifier; - - ProjectItem projectItem = (ProjectItem)x.Object; - - bool parseFiles = x.ParseFiles; - bool sourceControlFiles = x.SourceControlFiles; - eWebRefUrlBehavior urlBehavior = x.UrlBehavior; - string webReference = x.WebReference; - - - //files - //filters - //items - - - object parent = x.Parent; - VCProject project = (VCProject)x.project; - VCProjectEngine vcProjectEngine = (VCProjectEngine)x.VCProjectEngine; - }*/ - - - xn = x.CanonicalName; - xn2 = x.Name; - - - foreach (VCFile x2 in (IVCCollection)x.Files) - files.Add(x2.FullPath, x2); - - - foreach(VCFilter x2 in (IVCCollection)x.Filters) - { - filter x3 = fAll[x2.CanonicalName]; - x3.xp = this; - filters.Add(x2.Name, x3); - } - - if (files.Count == 0 && filters.Count == 0) - fEmpty = true; - } - } - - - - - - - - - - - - public class filters - { - public VCProject p2; - public Dictionary fAll; - public filter f; - public filter fRoot; - - - - public void init(VCProject p2) - { - this.p2 = p2; - fAll = new Dictionary(); - f = new filter(); - - foreach (VCFilter x2 in (IVCCollection)p2.Filters) - { - filter x3 = new filter() { x = x2 }; - if (x2.Parent is VCProject) - { - x3.xp = f; - f.filters.Add(x2.Name, x3); - } - fAll.Add(x2.CanonicalName, x3); - } - - foreach (var x2 in fAll) - x2.Value.init(fAll); - } - - - - - - - - public void fCleanEmpty(Dictionary filesIn, bool fEmptyDelete) - { - //remove from filters - foreach(var v in filesIn) - { - object o = v.Value.Parent; - if (!(o is VCFilter)) continue; - VCFilter f = (VCFilter)o; - fAll[f.CanonicalName].files.Remove(v.Value.FullPath); - v.Value.Move(p2); - } - - //filters clean - bool b; - do - { - b = false; - fAll = fAll.Where(x => - { - filter x2 = x.Value; - if (x2.files.Count != 0) return true; - if (x2.filters.Count != 0) return true; - if (!fEmptyDelete) if (x2.fEmpty) return true; - filter xp = x2.xp; - xp.filters.Remove(x2.xn2); - x2.x.Remove(); - b = true; - return false; - } - ).ToDictionary(x => x.Key, x => x.Value); - } while (b); - - } - - - - - - - - public filter fAdd(filter f, string x) - { - path x2 = new path(); - x2.init(x, new char[] { '\\', '/' }); - - - filter x3 = f; - for (int i = 0; i < x2.x2.Length; i++) - { - if (!x3.filters.TryGetValue(x2.x2[i], out filter x4)) - { - VCFilter x5 = null; - if (x3.x == null) - x5 = (VCFilter)p2.AddFilter(x2.x2[i]); - else - x5 = (VCFilter)x3.x.AddFilter(x2.x2[i]); - - x4 = new filter() { x = x5 }; - x4.xp = x3; - x3.filters.Add(x5.Name, x4); - fAll.Add(x5.CanonicalName, x4); - - x4.xn = x5.CanonicalName; - x4.xn2 = x5.Name; - } - x3 = x4; - } - return x3; - } - - - - - - - public void filtersSet(Dictionary x) - { - foreach(var v in x) - { - file x2 = v.Value; - if (x2.fn == null) continue; - - filter x3 = fRoot; - foreach (string x4 in x2.fn.x2) - x3 = fAdd(x3, x4); - - x2.x.Move(x3.x ?? (object)p2); - x3.files.Add(x2.xn.x, x2.x); - } - } - - - - - - - public static void filtersDeleteAll(VCProject p2) - { - { - LinkedList x = new LinkedList(); - foreach (VCFile x2 in (IVCCollection)p2.Files) - x.AddLast(x2); - - foreach (VCFile x2 in x) - x2.Move(p2); - } - - { - LinkedList x = new LinkedList(); - foreach (VCFilter x2 in (IVCCollection)p2.Filters) - x.AddLast(x2); - - foreach (VCFilter x2 in x) - if (x2.Parent is VCProject) - p2.RemoveFilter(x2); - } - } - - - - - - - } - - - - - - -} \ No newline at end of file diff --git a/source/shared/project/source/source/extension/work.cs b/source/shared/project/source/source/extension/work.cs deleted file mode 100644 index 35abbd9..0000000 --- a/source/shared/project/source/source/extension/work.cs +++ /dev/null @@ -1,346 +0,0 @@ -using System; -using System.ComponentModel.Design; -using Microsoft.VisualStudio.Shell; -using Microsoft.VisualStudio.Shell.Interop; -using Microsoft.VisualStudio.VCProjectEngine; -using Microsoft.Internal.VisualStudio.PlatformUI; -using EnvDTE; -using System.Collections.Generic; -using System.IO; -using System.Xml; -using System.Reflection; -using System.Text; -using System.Linq; -using System.Windows.Forms; - -namespace VisualStudioCppExtensions -{ - internal sealed partial class extension - { - - - - //callbacks - /// - /// Only Display Generate Filter Button if we right click on a C++ Project - /// - void OnBeforeQueryStatusCallBack(object sender, EventArgs e) - { - OleMenuCommand menuCommand = (OleMenuCommand)sender; - if (menuCommand == null) return; - - bool b; - try - { - b = projectUtility.IsCpp(projectUtility.GetActive()); - } - catch(Exception) - { - b = false; - } - menuCommand.Visible = b; - menuCommand.Enabled = b; - } - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - /// - /// This function is the callback used to execute the command when the menu item is clicked. - /// See the constructor to see how the menu item is associated with this function using - /// OleMenuCommandService service and MenuCommand class. - /// - private void MenuItemCallback(object sender, EventArgs e) - { - //input - ProjectData p = new ProjectData(); - - - - - - - - - - - - //check 1 project - ThreadHelper.ThrowIfNotOnUIThread(); - p.p = projectUtility.GetActive(); - if (!projectUtility.IsCpp(p.p)) - { - ErrorMessageBox("A C++ project must be selected to generate filter!"); - return; - } - - - - - - - - - - - - - //projectData - p.p2 = (VCProject)p.p.Properties.Item("project").Object; - p.fileName = p.p.FileName; - p.path = Path.GetDirectoryName(p.fileName); - p.isVcxitems = p.fileName.EndsWith(".vcxitems", StringComparison.OrdinalIgnoreCase); - p.filesGet(); - //p.filesGroup(); - p.r.i.dir = p.path; - p.r.c.dir = pathUtility.pathCommon(p.f.file); - if (string.IsNullOrEmpty(p.r.c.dir)) - { - ErrorMessageBox("No common sub-path between files, cannot generate filter!"); - return; - } - - - - - - - - - - - - - - //check 2 confirm - /*if (VsShellUtilities.ShowMessageBox(this.packageIServiceProvider, - string.Format("Generate filter per folder for '{0}'?\nExisting filters will be erased", project.UniqueName), - string.Empty, - OLEMSGICON.OLEMSGICON_WARNING, - OLEMSGBUTTON.OLEMSGBUTTON_OKCANCEL, - OLEMSGDEFBUTTON.OLEMSGDEFBUTTON_FIRST) == Microsoft.Internal.VisualStudio.PlatformUI.DialogResult.Cancel) - return;*/ - - - - - //check 2 - formQuestion fq = new formQuestion(); - fq.labelInfoProject2.Text = p.p.Name; - fq.labelInfoRootDir2.Text = p.r.c.dir; - fq.labelInfoRootFilter2.Text = p.r.o.filter; - fq.StartPosition = FormStartPosition.CenterScreen; - fq.ShowDialog((IWin32Window)p.p.DTE.MainWindow.LinkedWindowFrame); - if (fq.r == formQuestion.Result.none) return; - - - - - //check 2 advanced - if (fq.r == formQuestion.Result.advanced) - { - formAdvanced fa = new formAdvanced(); - fa.textBoxIn.Text = p.r.i.dir; - fa.textBoxRootDir.Text = p.r.c.dir; - fa.checkBoxCalculateDeleteFilters.Checked = p.r.c.fEmptyDelete; - fa.StartPosition = FormStartPosition.CenterScreen; - fa.p = p; - fa.ShowDialog((IWin32Window)p.p.DTE.MainWindow.LinkedWindowFrame); - - if (fa.r != formAdvanced.Result.ok) return; - - if (fa.radioButtonInProject.Checked) p.r.i.mode = ProjectData.Root.In.inMode.project; - if (fa.radioButtonInDir.Checked) p.r.i.mode = ProjectData.Root.In.inMode.dir; - if (fa.radioButtonInDirSubDir.Checked) p.r.i.mode = ProjectData.Root.In.inMode.dirSubDir; - p.r.i.dir = fa.textBoxIn.Text; - p.r.c.dir = fa.textBoxRootDir.Text; - p.r.c.fEmptyDelete = fa.checkBoxCalculateDeleteFilters.Checked; - if (fa.checkBoxRootFilter.Checked) - try { p.r.filterSet(fa.textBoxRootFilter.Text); } catch (Exception) { return; } - } - - - - - - - - - - - - - - - - - //projectData 2 - p.filesIn(); - p.filtersGet(); - - - - - - - - - - - - - - - - - - - - - //test - /*{ - foreach (VCFile x in (IVCCollection)p.p2.Files) - { - string kind = x.Kind; - - - string fullPath = x.FullPath; - string relativePath = x.RelativePath; - string unexpandedRelativePath = x.UnexpandedRelativePath; - //string itemFileName = x; - //string itemFullPath = x; - //string persistPath = x; - - - string itemName = x.ItemName; - string name = x.Name; - - - string extension = x.Extension; - string itemType = x.ItemType; - string contentType = x.ContentType; - string fileType = x.FileType.ToString(); - string subType = x.SubType; - - - - //bool isBuildable = x; - //bool isGenerator = x; - //bool isSharedItem = x; - bool deploymentContent = x.DeploymentContent; - - - - //externalCookie = x; - //externalCookieId = x; - - - //object projectItem = x; - //object vsObject = x; - object object2 = x.Object; - - object parent = x.Parent; - //object parentName = x; - - object items = x.Items; - - object project = x.project; - //object projectInternal = x; - //object containingSharedProject = x; - string customTool = x.CustomTool; - //object toolInternal = x; - object vcProjectEngine = x.VCProjectEngine; - - object fileConfigurations = x.FileConfigurations; - //object projectConfiguration = x; - - - } - } - */ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - /* - //calculate - //project unload - p.p.DTE.ExecuteCommand("Project.UnloadProject"); - - - - //write - { - XmlWriter xmlWriter = XmlWriter.Create(p.fileName + ".filters", new XmlWriterSettings() { Indent = true }); - xmlWriter.WriteStartElement("Project"); - xmlWriter.WriteAttributeString("ToolsVersion", "4.0"); - xmlWriter.WriteAttributeString("Project", "xmlns", null, @"http://schemas.microsoft.com/developer/msbuild/2003"); - - WriteFilter(xmlWriter, pathUtility.getFilterList(p)); - foreach (var x in p.f.group) - WriteSources(xmlWriter, x.Key, x.Value, p); - - xmlWriter.WriteEndElement(); - xmlWriter.Close(); - } - - - - //project reload - p.p.DTE.ExecuteCommand("Project.ReloadProject"); - */ - } - } -} diff --git a/source/shared/project/source/source/other/test/dte/project.cs b/source/shared/project/source/source/other/test/dte/project.cs new file mode 100644 index 0000000..0b3b8fe --- /dev/null +++ b/source/shared/project/source/source/other/test/dte/project.cs @@ -0,0 +1,73 @@ +using System; +using System.ComponentModel.Design; +using Microsoft.VisualStudio.Shell; +using Microsoft.VisualStudio.Shell.Interop; +using Microsoft.VisualStudio.VCProjectEngine; +using Microsoft.Internal.VisualStudio.PlatformUI; +using EnvDTE; +using System.Collections.Generic; +using System.IO; +using System.Xml; +using System.Reflection; +using System.Text; +using System.Linq; + + + + +namespace VisualStudioCppExtensions +{ + public partial class test + { + //properties + public static void dPropertyList(Properties p, HashSet x) + { + ThreadHelper.ThrowIfNotOnUIThread(); + foreach (Property x2 in p) + x.Add(x2.Name); + } + + + + + public static void dProject(Project p) + { + + //properties project + { + HashSet s = new HashSet(); + foreach (Project x in p.DTE.Solution.Projects) + dPropertyList(p.Properties, s); + string s2 = ""; + foreach (string s3 in s.ToList().OrderBy(x => x)) s2 += s3 + "\r\n"; + } + + + + //properties projectItems + { + HashSet s = new HashSet(); + foreach (Project p1 in p.DTE.Solution.Projects) + foreach (ProjectItem p2 in p1.ProjectItems) + { + if (p2.Kind != EnvDTE.Constants.vsProjectItemKindPhysicalFile) continue; + dPropertyList(p2.Properties, s); + } + string s2 = ""; + foreach (string s3 in s.ToList().OrderBy(x => x)) s2 += s3 + "\r\n"; + } + + ProjectItem[] o0 = p.ProjectItems.OfType().ToArray(); + + + + } + + + + + + + + } +} \ No newline at end of file diff --git a/source/shared/project/source/source/other/test/dte/projectItem.cs b/source/shared/project/source/source/other/test/dte/projectItem.cs new file mode 100644 index 0000000..2307d07 --- /dev/null +++ b/source/shared/project/source/source/other/test/dte/projectItem.cs @@ -0,0 +1,42 @@ +using System; +using System.ComponentModel.Design; +using Microsoft.VisualStudio.Shell; +using Microsoft.VisualStudio.Shell.Interop; +using Microsoft.VisualStudio.VCProjectEngine; +using Microsoft.Internal.VisualStudio.PlatformUI; +using EnvDTE; +using System.Collections.Generic; +using System.IO; +using System.Xml; +using System.Reflection; +using System.Text; +using System.Linq; + + + + +namespace VisualStudioCppExtensions +{ + public partial class test + { + + + public static void dProjectItem(ProjectItem projectItem) + { + //projectItem + { + string o = (string)projectItem.Name; + string p = ((VCProject)projectItem.Properties.Item("project").Object).Name; + } + } + + + + + + + + + + } +} \ No newline at end of file diff --git a/source/shared/project/source/source/other/test/other.cs b/source/shared/project/source/source/other/test/other.cs new file mode 100644 index 0000000..5e940b6 --- /dev/null +++ b/source/shared/project/source/source/other/test/other.cs @@ -0,0 +1,272 @@ +using System; +using System.ComponentModel.Design; +using Microsoft.VisualStudio.Shell; +using Microsoft.VisualStudio.Shell.Interop; +using Microsoft.VisualStudio.VCProjectEngine; +using Microsoft.Internal.VisualStudio.PlatformUI; +using EnvDTE; +using System.Collections.Generic; +using System.IO; +using System.Xml; +using System.Reflection; +using System.Text; +using System.Linq; + + + + +namespace VisualStudioCppExtensions +{ + public partial class test + { + + + //data collecting + public static HashSet[] strings; + public static void stringsInit(int i) + { + strings = new HashSet[i]; + for (int i0 = 0; i0 < i; i0++) + strings[i0] = new HashSet(); + } + + + + + + + + + + public static void pathSeparator() + { + //DirectorySeparatorChar \ + //AltDirectorySeparatorChar / + //PathSeparator ; + //VolumeSeparatorChar : + } + + + public static void pathChars() + { + char[] x = Path.GetInvalidPathChars(); + char[] x2 = Path.GetInvalidFileNameChars(); + char[] x3 = Path.GetInvalidPathChars().Union(Path.GetInvalidFileNameChars()).ToArray(); + char[] x4 = Path.GetInvalidPathChars().Intersect(Path.GetInvalidFileNameChars()).ToArray(); + } + + + + + public static void hashSetPath() + { + HashSet x = new HashSet(); + x.Add(new path("a/b/c")); + x.Add(new path("a/b/c2")); + x.Add(new path("a/b/c3")); + x.Add(new path("a/b/c4")); + x.Add(new path("a/b/c5")); + x.Add(new path("a/b/c6")); + + x.Add(new path("A/b/c5")); + x.Add(new path("a/B/c5")); + x.Add(new path("a/b/C5")); + x.Add(new path("A/B/C5")); + } + + + + + public static void dirs() + { + path x = new path(""); + + string[] s = Directory.GetFiles(x.x); + string[] s2 = Directory.GetDirectories(x.x); + string[] s3 = Directory.GetFileSystemEntries(x.x); + + + FileAttributes[] a = s.Select(x2 => File.GetAttributes(x2)).ToArray(); + FileAttributes[] a2 = s2.Select(x2 => File.GetAttributes(x2)).ToArray(); + FileAttributes[] a3 = s3.Select(x2 => File.GetAttributes(x2)).ToArray(); + + //[reparsePoint] [dir[H|S] | file[S]], [!indexedContext] shortcut + } + + + + + + + + + + + + public static void path() + { + path x1 = new path("a/b/c/d/e"); + path x2 = new path("a/b/c/d"); + path x3 = new path("a/b/c"); + path x4 = new path("a/b"); + path x5 = new path("a"); + path x6 = new path(""); + + path x11 = x1 - x1; + path x12 = x1 - x2; + path x13 = x1 - x3; + path x14 = x1 - x4; + path x15 = x1 - x5; + path x16 = x1 - x6; + + path x23 = x2 - x3; + path x24 = x2 - x4; + path x25 = x2 - x5; + path x26 = x2 - x6; + + path x34 = x3 - x4; + path x35 = x3 - x5; + path x36 = x3 - x6; + + path x44 = x4 - x4; + path x45 = x4 - x5; + path x46 = x4 - x6; + + path x55 = x5 - x5; + path x56 = x5 - x6; + + path x66 = x6 - x6; + + + path x21 = x2 - x1; + path x31 = x3 - x1; + path x61 = x6 - x1; + + + + + path x7 = new path("b"); + path x17 = x1 - x7; + } + + + + + + + + + public static void classes() + { + //IVCBuildCompleteCallback; + //IVCBuildPropertyStorage; + //IVCBuildRequest; + //IVCBuildRequest2; + //IVCCollection; + //IVCIdentity; + //IVCProjectBuildService; + //IVCProjectEngineEvents; + //IVCProjectEngineEvents2; + //IVCProjectTargetChange; + //IVCProjectTargetDescription; + //IVCPropertyStorage; + //IVCRulePropertyStorage; + //IVCRulePropertyStorage2; + //IVCTask; + + + + + + + + + + //VCProjectEngine; + //VCProjectEngine2; + + //VCProjectEngineObject; + //VCProjectEngineObjectClass; + + //VCProjectEngineEvents; + //VCProjectEngineEventsClass; + + + + + //VCProject; + + + //VCFile; + //VCFilter; + //VCProjectItem; + + //VCPropertySheet; + + + //VCProjectReference; + //VCSharedProjectReference; + //VCReference; + //VCReferences; + + + + + + + + + //VCActiveXReference; + //VCALinkTool; + //VCAssemblyReference; + //VCBscMakeTool; + //VCCLCompilerTool; + //VCConfiguration; + //VCConfiguration2; + //VCConfiguration3; + //VCCustomBuildTool; + //VCDebugSettings; + //VCFileConfiguration; + //VCForeignReference; + //VCFxCopTool; + //VCFxCopTool2; + //VCLibrarianTool; + //VCLinkerTool; + //VCManagedResourceCompilerTool; + //VCManifestTool; + //VCMidlTool; + //VCNMakeTool; + //VCPlatform; + //VCPostBuildEventTool; + //VCPreBuildEventTool; + //VCPreLinkEventTool; + //VCResourceCompilerTool; + //VCSdkReference; + //VCToolFile; + //VCUserMacro; + //VCWinRTReference; + //VCXDCMakeTool; + //VCXMLDataGeneratorTool; + + + + + + + + + + + + + + //SVCProjectEngine; + + } + + + + + + } +} \ No newline at end of file diff --git a/source/shared/project/source/source/other/test/test.cs b/source/shared/project/source/source/other/test/test.cs deleted file mode 100644 index 112015c..0000000 --- a/source/shared/project/source/source/other/test/test.cs +++ /dev/null @@ -1,122 +0,0 @@ -using System; -using System.ComponentModel.Design; -using Microsoft.VisualStudio.Shell; -using Microsoft.VisualStudio.Shell.Interop; -using Microsoft.VisualStudio.VCProjectEngine; -using Microsoft.Internal.VisualStudio.PlatformUI; -using EnvDTE; -using System.Collections.Generic; -using System.IO; -using System.Xml; -using System.Reflection; -using System.Text; -using System.Linq; - - - - -namespace VisualStudioCppExtensions -{ - internal sealed partial class extension - { - - public class test - { - //references - //project2.ReferencesConsumableByDesigners - //Kind =? ActiveX, Assembly, Project, Sdk, Web, WinRT, File - //ReferencedProject - //FullPath - //identity [shared - fullPath, project - guid] - - - //KInd VCSharedProjectReference - //VCReferenceType 32, VCSharedProjectReference - - //KInd VCProjectReference - //VCReferenceType 4, VCProjectReference - - - //IVCCollection c = (IVCCollection) p.p2.Filters; //Microsoft.VisualStudio.Project.VisualC.VCProjectEngine.VCCollectionShim - //VCFilter c2 in c //Microsoft.VisualStudio.Project.VisualC.VCProjectEngine.VCFilterShim - //VCFile:ProjectItem c3 in (IVCCollection) c2.Files //Microsoft.VisualStudio.Project.VisualC.VCProjectEngine.VCCollectionShim - - - - - - - - public void propertyList(Properties p, HashSet x) - { - ThreadHelper.ThrowIfNotOnUIThread(); - foreach (Property x2 in p) - x.Add(x2.Name); - } - - - - - public static void calculate() - { - //properties project - /*{ - HashSet s = new HashSet(); - foreach (Project x in project.DTE.Solution.Projects) - propertyList(project.Properties, s); - string s2 = ""; - foreach (string s3 in s.ToList().OrderBy(x => x)) s2 += s3 + "\r\n"; - }*/ - - - - //properties projectItems - /*{ - HashSet s = new HashSet(); - foreach (Project p in project.DTE.Solution.Projects) - foreach (ProjectItem p2 in p.ProjectItems) - { - if (p2.Kind != EnvDTE.Constants.vsProjectItemKindPhysicalFile) continue; - propertyList(p2.Properties, s); - } - string s2 = ""; - foreach (string s3 in s.ToList().OrderBy(x => x)) s2 += s3 + "\r\n"; - }*/ - - - - /*{ - ProjectItem[] o0 = p.p.ProjectItems.OfType().ToArray(); - IVCCollection[] o = ((IVCCollection)p.p2.Items).OfType().ToArray(); - object f = p.p2.Files; - - VCFilter[] o2 = ((IVCCollection)p.p2.Filters).OfType().ToArray(); - foreach (VCFilter o3 in o2) - { - string s1 = o3.Filter; - string s2 = o3.Name; - string s3 = o3.ItemName; - } - }*/ - - - - - //projectItem - /*{ - string o = (string)projectItem.Name; - string p = ((VCProject)projectItem.Properties.Item("project").Object).Name; - }*/ - } - - - - - } - - - - - - } -} \ No newline at end of file diff --git a/source/shared/project/source/source/other/test/vc/file.cs b/source/shared/project/source/source/other/test/vc/file.cs new file mode 100644 index 0000000..8757e5c --- /dev/null +++ b/source/shared/project/source/source/other/test/vc/file.cs @@ -0,0 +1,196 @@ +using System; +using System.ComponentModel.Design; +using Microsoft.VisualStudio.Shell; +using Microsoft.VisualStudio.Shell.Interop; +using Microsoft.VisualStudio.VCProjectEngine; +using Microsoft.Internal.VisualStudio.PlatformUI; +using EnvDTE; +using System.Collections.Generic; +using System.IO; +using System.Xml; +using System.Reflection; +using System.Text; +using System.Linq; + + + + +namespace VisualStudioCppExtensions +{ + public partial class test + { + + + + + + public static void vcFile(VCFile x) + { + + //id + string name = x.Name; //file.cpp + string itemName = x.ItemName; //file.cpp + string extension = x.Extension; //.filters, .h, .cpp + + string fullPath = x.FullPath; //\\file.cpp + string relativePath = x.RelativePath; //\\file.cpp + string unexpandedRelativePath = x.UnexpandedRelativePath; //\\file.cpp + + + + string kind = x.Kind; //[VCFile] + //strings[0].Add(kind); + + string itemType = x.ItemType; //[null, clInclude, none, clCompile] + //strings[1].Add(itemType); + + string contentType = x.ContentType; //[Filters, cppHeader, "", cppCode] + //strings[2].Add(contentType); + + string fileType = x.FileType.ToString(); //enum eFileType[Filters, CppHeader, Document, CppCode] + //strings[3].Add(fileType); + + string subType = x.SubType; //[""] + //strings[4].Add(subType); + + bool deploymentContent = x.DeploymentContent; //false + + + + + + //children + object items = x.Items; //iVcCollection + object fileConfigurations = x.FileConfigurations; //iVcCollection + + string customTool = x.CustomTool; //[""] + //strings[5].Add(customTool); + + + + + + + + //parent, sibling + ProjectItem object2 = (ProjectItem)x.Object; //projectItem + object parent = x.Parent; //vcProject, vcFilter + VCProject project = (VCProject)x.project; //vcProject + VCProjectEngine vcProjectEngine = (VCProjectEngine)x.VCProjectEngine; //vcProjectEngine + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + //x.MatchName; + + + + //x.Move; + //x.CanMove; + //x.Remove; + + //x.GetFileConfigurationForProjectConfiguration; + + + + //x.AddFile; da li je moguce dodati pod fajl + //x.CanAddFile; + //x.RemoveFile; + + + + + + + + + + + + + + + + + + + + + + + + + + + //internal vcFileShim + //id + //string itemFileName = x; + //string itemFullPath = x; + //string persistPath = x; + + + + //bool isBuildable = x; + //bool isGenerator = x; + //bool isSharedItem = x; + + + + + + //parent, sibling + //externalCookie = x; + //externalCookieId = x; + + + //object projectItem = x; + //object vsObject = x; + + + //object parentName = x; + //object projectInternal = x; + //object containingSharedProject = x; + //object toolInternal = x; + //object projectConfiguration = x; + + + + } + } +} \ No newline at end of file diff --git a/source/shared/project/source/source/other/test/vc/filter.cs b/source/shared/project/source/source/other/test/vc/filter.cs new file mode 100644 index 0000000..85ad8ea --- /dev/null +++ b/source/shared/project/source/source/other/test/vc/filter.cs @@ -0,0 +1,112 @@ +using System; +using System.ComponentModel.Design; +using Microsoft.VisualStudio.Shell; +using Microsoft.VisualStudio.Shell.Interop; +using Microsoft.VisualStudio.VCProjectEngine; +using Microsoft.Internal.VisualStudio.PlatformUI; +using EnvDTE; +using System.Collections.Generic; +using System.IO; +using System.Xml; +using System.Reflection; +using System.Text; +using System.Linq; + + + + +namespace VisualStudioCppExtensions +{ + public partial class test + { + public static void vcFilter(VCFilter x) + { + + + + //id + string name = x.Name; //string source [change] + string itemName = x.ItemName; //string source [change] + string canonicalName = x.CanonicalName; //string source\path [change] + string uniqueIdentifier = x.UniqueIdentifier; //string {44320350-60d6-4c45-b982-939b9678d4b7} [change] + + + + //id notImportant + string kind = x.Kind; //string VCFilter + + string webReference = x.WebReference; //string "" (url for webReference) + eWebRefUrlBehavior urlBehavior = x.UrlBehavior; //enum eWebRefUrlBehavior eSaticUrl (for webReference filters, is it hard coded in generated cs proxy code) + + string filter = x.Filter; //string "" (file extension filter, use?) + bool parseFiles = x.ParseFiles; //bool true (intellisense allow) + bool sourceControlFiles = x.SourceControlFiles; //bool true (sourceControl allow) + + + + + + + //children + //x.Files //iVcCollection + //x.Filters //iVcCollection + //x.Items //iVcCollection + + + + + + //parent, sibling + ProjectItem projectItem = (ProjectItem)x.Object; //projectItem? + object parent = x.Parent; //vcProject, vcFilter? + VCProject project = (VCProject)x.project; //vcProject + VCProjectEngine vcProjectEngine = (VCProjectEngine)x.VCProjectEngine; //vcProjectEngine + + + + + + + + + + + + + + + + + + + + + + + + + + //id + //x.MatchName; + + //x.Move; + //x.CanMove; + //x.Remove; + + + //children + //x.AddFile; + //x.AddFilter; + //x.AddWebReference; + + //x.CanAddFile; + //x.CanAddFilter; + + //x.RemoveFile; + //x.RemoveFilter; + + + + } + } +} \ No newline at end of file diff --git a/source/shared/project/source/source/other/test/vc/project.cs b/source/shared/project/source/source/other/test/vc/project.cs new file mode 100644 index 0000000..0c3967c --- /dev/null +++ b/source/shared/project/source/source/other/test/vc/project.cs @@ -0,0 +1,248 @@ +using System; +using System.ComponentModel.Design; +using Microsoft.VisualStudio.Shell; +using Microsoft.VisualStudio.Shell.Interop; +using Microsoft.VisualStudio.VCProjectEngine; +using Microsoft.Internal.VisualStudio.PlatformUI; +using EnvDTE; +using System.Collections.Generic; +using System.IO; +using System.Xml; +using System.Reflection; +using System.Text; +using System.Linq; + + + + +namespace VisualStudioCppExtensions +{ + public partial class test + { + + public delegate void vcx(T x); + public static void vcCollection(IVCCollection x, vcx v) { foreach (T x2 in x) v(x2); } + + + + public static void vcProject(VCProject p) + { + + + + //children + object o7 = p.Files; //iVcCollection + object o8 = p.Filters; //iVcCollection + object o12 = p.Items; //iVcCollection, files and top level filters + + object o27 = p.References; //iVcCollection, references? + object o28 = p.ReferencesConsumableByDesigners; //vcReferences, references? + object o40 = p.VCReferences; //vcReferences + + + //children notImportant + object o4 = p.Configurations; //iVcCollection + object o1 = p.ActiveConfiguration; //vcConfiguration [Debug|Win32] + object o22 = p.Platforms; //iVcCollection, vcPlatform + object o38 = p.ToolFiles; //iVcCollection, customBuild rule files + + + //vcCollection((IVCCollection)p.Files, vcFile); + //vcCollection((IVCCollection)p.Filters, vcFilter); + + + + + + + + + + + + + + + + + //id + object o18 = p.Name; //string, get,set [projectName] + object o11 = p.ItemName; //string [projectName] + object o24 = p.ProjectDirectory; //string [] + object o25 = p.ProjectFile; //string [\projectName.vcxproj] + object o26 = p.ProjectGUID; //string, internal [{68E94CA8-81F4-4C52-9BE3-8C34F323FCF7}] + + object o10 = p.IsDirty; //bool, internal [false] + + + + //id notImportant + object o14 = p.Kind; //string, enum vsCmElement [VCProject] + object o13 = p.keyword; //string, help keyword dynamic [Win32Proj] + + object o5 = p.FileEncoding; //string [utf-8] + object o6 = p.FileFormat; //enum fileFormat (ansi, unicode, utf8) [eUTF8] + + object o34 = p.ShowAllFiles; //bool, solutionExplorer show all disk files [false] + object o3 = p.Capabilities; //string [AllTargetOutputGroups IntegratedConsoleDebugging VisualStudioWellKnownOutputGroups VCProject SDKReferences native desktop ProjectReferences SupportsOnlineEnvironments SourceItemsFromImports ProjectConfigurationsDeclaredAsItems SharedProjectReferences VisualC WinRTReferences VCProjectEngineFactory OutputGroups RunningInVisualStudio Microsoft.VisualStudio.ProjectSystem.RetailRuntime AssemblyReferences PropertyManager COMReferences HostSetActiveProjectConfiguration] + object o9 = p.GetAllowedReferencesTypes; //uint, enum? [36 32-shared 4-cpp] + + object o29 = p.RootNamespace; //string, rootNamespace for project to be used for managed resource dll naming [projectName] + + + + + //platform notImportant + object o15 = p.LatestTargetPlatformVersion; //string [10.0.22000.0] + object o35 = p.SupportedPlatformNames; //string [ARM;Win32;x64] + object o36 = p.TargetFrameworkMoniker; //string [null] + object o37 = p.TargetFrameworkVersion; //enumFrameworkVersion [eFrameworkVersionUnknown] + + + + + + + + //parent, sibling + Project o19 = (Project)p.Object; //dte project + VCProject o23 = (VCProject)p.project; //vcProject [] + object o21 = p.Parent; //object, parent immediate [null] + VCProjectEngine o39 = (VCProjectEngine)p.VCProjectEngine; //vcProjectEngine [] + + + + + + + + + //deprecated + //object o2 = p.AssemblyReferenceSearchPaths; deprecated + //object o16 = p.ManagedDBConnection; deprecated internal + //object o17 = p.ManagedDBProvider; deprecated internal + + //internal + object o20 = p.OwnerKey; //string, internal [] + object o30 = p.SccAuxPath; //string, internal [] + object o31 = p.SccLocalPath; //string, internal [] + object o32 = p.SccProjectName; //string, internal [] + object o33 = p.SccProvider; //string, internal [] + + + + + + + + + + + + + + + + + + + + + + + + + + + + //p.AddFile; + //p.AddFilter; + //p.AddToolFile; + //p.IncludeHeaderFile; + + //p.AddConfiguration; + //p.AddRuleDefinition; + //p.AddPlatform; + + //p.AddActiveXReference; + //p.AddAssemblyReference; + //p.AddProjectReference; + //p.AddSdkReference; + //p.AddWebReference; + //p.AddWinRTReference; + + + + + //p.CanAddFile; + //p.CanAddFilter; + + //p.CanAddActiveXReference; + //p.CanAddAssemblyReference; + //p.CanAddProjectReference; + //p.CanAddSdkReference; + //p.CanAddWinRTReference; + + + + + //p.RemoveFile; + //p.RemoveFilter; + //p.RemoveToolFile; + + //p.RemoveReference; + + //p.RemoveConfiguration; + //p.RemoveRuleDefinition; + //p.RemovePlatform; + + + + + + + + //p.ContainsFileEndingWith; + //p.ContainsFileWithItemType; + //p.GetFilesEndingWith; + //p.GetFilesWithItemType; + //p.FindFile; + + + //p.Save; + //p.LoadUserFile; + //p.SaveUserFile; + + //p.GetVCService; + //p.MakeManagedDBConnection; + + + + + //p.IsCapabilityPresent; + //p.MatchName; //- checked collection item + //p.Version; + + + + + + + + + + + + + + + + + + + + + + } + } +} \ No newline at end of file diff --git a/source/shared/project/source/source/other/test/vc/projectReference.cs b/source/shared/project/source/source/other/test/vc/projectReference.cs new file mode 100644 index 0000000..d35b61a --- /dev/null +++ b/source/shared/project/source/source/other/test/vc/projectReference.cs @@ -0,0 +1,59 @@ +using System; +using System.ComponentModel.Design; +using Microsoft.VisualStudio.Shell; +using Microsoft.VisualStudio.Shell.Interop; +using Microsoft.VisualStudio.VCProjectEngine; +using Microsoft.Internal.VisualStudio.PlatformUI; +using EnvDTE; +using System.Collections.Generic; +using System.IO; +using System.Xml; +using System.Reflection; +using System.Text; +using System.Linq; + + + + +namespace VisualStudioCppExtensions +{ + public partial class test + { + + + + + + + + public static void vcProjectReference() + { + + //references + //VCProject.ReferencesConsumableByDesigners + + //Kind =? ActiveX, Assembly, Project, Sdk, Web, WinRT, File + //ReferencedProject + //FullPath + //identity [shared - fullPath, project - guid] + + //enum VCReferenceType KInd + //VCSharedProjectReference 32 + //VCProjectReference 4 + + + } + + + + + + + + } + + + + + +} diff --git a/source/shared/project/source/source/other/unused/project.cs b/source/shared/project/source/source/other/unused/project.cs new file mode 100644 index 0000000..759dc63 --- /dev/null +++ b/source/shared/project/source/source/other/unused/project.cs @@ -0,0 +1,102 @@ + + + + + +//items +/*private static IEnumerable items(ProjectItem i) +{ + ThreadHelper.ThrowIfNotOnUIThread(); + yield return i; + foreach (var i2 in items(i.ProjectItems)) + yield return i2; +} + +public static IEnumerable items(ProjectItems i) +{ + if (i != null) + foreach (ProjectItem i2 in i) + if (i2 != null) + foreach (ProjectItem i3 in items(i2)) + yield return i3; +}*/ + + + + + + + + + + + + + + + + + +//public static string GetAssemblyLocalPathFrom(Type type) => new Uri(type.Assembly.CodeBase, UriKind.Absolute).LocalPath; + + + + + + + + + + + + + + + + + + +/*public static void SetAdditionalIncludeDirectories(Project project, Dictionary> filesPerItemType, string projectPath) +{ + ThreadHelper.ThrowIfNotOnUIThread(); + if (!filesPerItemType.ContainsKey("ClInclude")) + return; + + var includePaths = new HashSet { @"$(StlIncludeDirectories)" }; + foreach (var file in filesPerItemType["ClInclude"]) + { + includePaths.Add(pathUtility.GetRelativeIfNeeded(projectPath, Path.GetDirectoryName(file))); + } + + string filterAssemblyInstallionPath = Path.GetDirectoryName(GetAssemblyLocalPathFrom(typeof(package2))); + + DTE dte = (DTE)Package.GetGlobalService(typeof(DTE)); + if (dte.Version.StartsWith("17")) Assembly.LoadFrom(Path.Combine(filterAssemblyInstallionPath, @"Resources\\VCProjectEngine_17.0.dll")); + else + throw new Exception(); + + dynamic vcProject = project.Object; + foreach (dynamic vcConfiguration in vcProject.Configurations) + { + foreach (dynamic genericTool in vcConfiguration.Tools) + { + dynamic compilerTool = genericTool; + if (compilerTool != null && compilerTool.GetType().FullName == "Microsoft.VisualStudio.Project.VisualC.VCProjectEngine.VCCLCompilerToolShim") + { + // runtime + if (compilerTool.AdditionalIncludeDirectories == null) + compilerTool.AdditionalIncludeDirectories = string.Empty; + + var currentAdditionalIncludeDirectories = new HashSet(compilerTool.AdditionalIncludeDirectories.Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries)); + var pathsToAdd = new StringBuilder(); + foreach (var includePath in includePaths) + // Avoid updating AdditionalIncludeDirectories when applicable to avoid reloading the project + if (!currentAdditionalIncludeDirectories.Contains(includePath)) + pathsToAdd.Append(includePath + ';'); + + if (pathsToAdd.Length > 0) + compilerTool.AdditionalIncludeDirectories = pathsToAdd.ToString() + compilerTool.AdditionalIncludeDirectories; + } + } + } +}*/ \ No newline at end of file diff --git a/source/shared/project/source/source/other/unused/xml.cs b/source/shared/project/source/source/other/unused/xml.cs index 7ddb50d..1b833fb 100644 --- a/source/shared/project/source/source/other/unused/xml.cs +++ b/source/shared/project/source/source/other/unused/xml.cs @@ -71,5 +71,65 @@ private static void WriteSources(XmlWriter xmlWriter, string filesKey, List progress) { @@ -39,4 +53,9 @@ protected override async System.Threading.Tasks.Task InitializeAsync(Cancellatio + + + + + } diff --git a/source/shared/project/source/source/project/project.cs b/source/shared/project/source/source/project/project.cs deleted file mode 100644 index 6689dc0..0000000 --- a/source/shared/project/source/source/project/project.cs +++ /dev/null @@ -1,140 +0,0 @@ -using System; -using Microsoft.VisualStudio.Shell; -using Microsoft.VisualStudio.Shell.Interop; -using EnvDTE; -using System.Collections.Generic; -using System.IO; -using System.Reflection; -using System.Text; - -namespace VisualStudioCppExtensions -{ - public class projectUtility - { - //active - public static Project GetActive() - { - ThreadHelper.ThrowIfNotOnUIThread(); - DTE dte = (DTE)Package.GetGlobalService(typeof(SDTE)); - return GetActive(dte); - } - - public static Project GetActive(DTE dte) - { - ThreadHelper.ThrowIfNotOnUIThread(); - object[] x = (object[])dte.ActiveSolutionProjects; - if (x == null || x.Length == 0) return null; - return (Project)x[0]; - } - - - - - - //cpp - public static bool IsCpp(Project project) - { - ThreadHelper.ThrowIfNotOnUIThread(); - return project != null - && (project.CodeModel.Language == CodeModelLanguageConstants.vsCMLanguageMC - || project.CodeModel.Language == CodeModelLanguageConstants.vsCMLanguageVC); - } - - - - - - - //items - private static IEnumerable items(ProjectItem i) - { - ThreadHelper.ThrowIfNotOnUIThread(); - yield return i; - foreach (var i2 in items(i.ProjectItems)) - yield return i2; - } - - public static IEnumerable items(ProjectItems i) - { - if (i != null) - foreach (ProjectItem i2 in i) - if (i2 != null) - foreach (ProjectItem i3 in items(i2)) - yield return i3; - } - - - - - - - - - - - - - - - - - - //public static string GetAssemblyLocalPathFrom(Type type) => new Uri(type.Assembly.CodeBase, UriKind.Absolute).LocalPath; - - - - - - /*public static void SetAdditionalIncludeDirectories(Project project, Dictionary> filesPerItemType, string projectPath) - { - ThreadHelper.ThrowIfNotOnUIThread(); - if (!filesPerItemType.ContainsKey("ClInclude")) - return; - - var includePaths = new HashSet { @"$(StlIncludeDirectories)" }; - foreach (var file in filesPerItemType["ClInclude"]) - { - includePaths.Add(pathUtility.GetRelativeIfNeeded(projectPath, Path.GetDirectoryName(file))); - } - - string filterAssemblyInstallionPath = Path.GetDirectoryName(GetAssemblyLocalPathFrom(typeof(package2))); - - DTE dte = (DTE)Package.GetGlobalService(typeof(DTE)); - if (dte.Version.StartsWith("17")) Assembly.LoadFrom(Path.Combine(filterAssemblyInstallionPath, @"Resources\\VCProjectEngine_17.0.dll")); - else - throw new Exception(); - - dynamic vcProject = project.Object; - foreach (dynamic vcConfiguration in vcProject.Configurations) - { - foreach (dynamic genericTool in vcConfiguration.Tools) - { - dynamic compilerTool = genericTool; - if (compilerTool != null && compilerTool.GetType().FullName == "Microsoft.VisualStudio.Project.VisualC.VCProjectEngine.VCCLCompilerToolShim") - { - // runtime - if (compilerTool.AdditionalIncludeDirectories == null) - compilerTool.AdditionalIncludeDirectories = string.Empty; - - var currentAdditionalIncludeDirectories = new HashSet(compilerTool.AdditionalIncludeDirectories.Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries)); - var pathsToAdd = new StringBuilder(); - foreach (var includePath in includePaths) - // Avoid updating AdditionalIncludeDirectories when applicable to avoid reloading the project - if (!currentAdditionalIncludeDirectories.Contains(includePath)) - pathsToAdd.Append(includePath + ';'); - - if (pathsToAdd.Length > 0) - compilerTool.AdditionalIncludeDirectories = pathsToAdd.ToString() + compilerTool.AdditionalIncludeDirectories; - } - } - } - }*/ - - - - - - - - } -} diff --git a/source/shared/project/source/source/project/projectData.cs b/source/shared/project/source/source/project/projectData.cs deleted file mode 100644 index c5ce167..0000000 --- a/source/shared/project/source/source/project/projectData.cs +++ /dev/null @@ -1,268 +0,0 @@ -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Text; -using EnvDTE; -using Microsoft.VisualStudio.Shell; -using Microsoft.VisualStudio.VCProjectEngine; - -namespace VisualStudioCppExtensions -{ - public class ProjectData - { - public Project p; - public VCProject p2; - public string fileName; - public string path; - public bool isVcxitems; - - - - public struct Files - { - public Dictionary file; - public Dictionary fileIn; - //public Dictionary> group; - public Dictionary fileIn2; - } - public Files f; - - - - public filters f2; - - - - - - - - - - - - - - - - - - - - - public class Root - { - public class In - { - public enum inMode - { - project, - dir, - dirSubDir - } - public inMode mode; - public string dir; - } - public In i = new In(); - - public class Calculate - { - public string dir; - public bool fEmptyDelete = true; - } - public Calculate c = new Calculate(); - - public class Out - { - public string filter; - } - public Out o = new Out(); - - - - public string oFilterAdd(string s) - { - bool sFull = !string.IsNullOrWhiteSpace(s); - bool rFull = filterFull; - return (rFull ? o.filter : "") + - ((rFull && sFull) ? "\\" : "") + - (sFull ? s : ""); - } - - public bool filterFull { get => !string.IsNullOrWhiteSpace(o.filter); } - - - public static bool filterCheck(string s) - { - if (string.IsNullOrWhiteSpace(s)) return true; - return !s.Any(x => !(char.IsLetterOrDigit(x) || x == ' ' || x == '\\' || x == '/')); - } - - - public void filterSet(string s) - { - o.filter = ""; - if (string.IsNullOrWhiteSpace(s)) { o.filter = ""; return; } - - //check - if (!filterCheck(s)) throw new Exception(); - - string[] s2 = s.Split(new char[] { '\\', '/' }, StringSplitOptions.RemoveEmptyEntries).Where(x => !string.IsNullOrWhiteSpace(x)).ToArray(); - StringBuilder s3 = new StringBuilder(); - for (int i = 0; i < s2.Length; i++) - { - s3.Append(s2[i]); - if (i < s2.Length - 1) s3.Append('\\'); - } - o.filter = s3.ToString(); - } - } - public Root r = new Root(); - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - public void filesGet() - { - ThreadHelper.ThrowIfNotOnUIThread(); - HashSet xp = new HashSet(); - VCReferences xr = (VCReferences)p2.VCReferences; - - - if (!isVcxitems) - { - //reference search - foreach (VCSharedProjectReference x in xr.GetReferencesOfType(32)) - xp.Add(((Project)x.ReferencedProject).FullName); - - - //reference remove - foreach (VCSharedProjectReference x in xr.GetReferencesOfType(32)) - xr.RemoveReference(x); - } - - - //projecctItems - f.file = ((IVCCollection)p2.Files).Cast().Where(x => x.ItemType != null).ToDictionary(x => x.FullPath); - - - if (!isVcxitems) - { - //reference add - bool x3; - foreach (string x in xp) - xr.AddSharedProjectReference(x, out x3); - } - } - - - public void filesIn() - { - f.fileIn = (r.i.mode == Root.In.inMode.project) ? f.file : - r.i.mode == Root.In.inMode.dirSubDir ? - f.file.Where(x => x.Key.StartsWith(r.i.dir)).ToDictionary(x => x.Key, x => x.Value) : - f.file.Where(x => File.Exists(r.i.dir + '\\' + x.Value.Name)).ToDictionary(x => x.Key, x => x.Value); - - f.fileIn2 = f.fileIn.Select(x => - { - file x2 = new file(); - x2.init(x.Value); - x2.init(r.c.dir); - return x2; - } - ).ToDictionary(x => x.xn.x, x => x); - - //filesGroup(); - } - - - - - - /*public void filesGroup() - { - // ClCompile -> .cpp, .cc, .c, ... - // ClInclude -> .h, .hxx, .hpp, ... - // None -> Makefile, .gitignore, ... - f.group = new Dictionary>(); - foreach (ProjectItem projectItem in f.file) - try - { - string itemType = (string)projectItem.Properties.Item("ItemType").Value; - if (string.IsNullOrEmpty(itemType)) continue; - - if (!f.group.ContainsKey(itemType)) - f.group.Add(itemType, new List()); - - f.group[itemType].Add((string)projectItem.Properties.Item("FullPath").Value); - } - catch (Exception) - { - } - }*/ - - - - - - - - - - - - - - - - - - - - - - - - - public void filtersGet() - { - f2 = new filters(); - f2.init(p2); - f2.fCleanEmpty(f.fileIn, r.c.fEmptyDelete); - f2.fRoot = f2.fAdd(f2.f, r.o.filter); - f2.filtersSet(f.fileIn2); - } - } - - -} diff --git a/source/shared/project/source/source/utility/extension.cs b/source/shared/project/source/source/utility/extension.cs new file mode 100644 index 0000000..e3106a9 --- /dev/null +++ b/source/shared/project/source/source/utility/extension.cs @@ -0,0 +1,46 @@ +using Microsoft.VisualStudio.VCProjectEngine; +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; + +namespace VisualStudioCppExtensions +{ + public static class a + { + //array + public static bool xEmpty(this Array x) + { + if (x == null) return true; + if (x.Length == 0) return true; + return false; + } + + + + + //string + public static bool xC(this string x, string x2) => string.Equals(x, x2, StringComparison.Ordinal); + public static bool xC2(this string x, string x2) => string.Equals(x, x2, StringComparison.OrdinalIgnoreCase); + + public static bool xFull(this string x) => !string.IsNullOrWhiteSpace(x); + + + + + + //other + public static bool xNull(this path x) + { + if (x == null) return true; + if (x.x2 == null) return true; + if (x.x == null) return true; + return false; + } + + public static bool xFull(this path x) => !x.x2.xEmpty(); + + + + } +} \ No newline at end of file diff --git a/source/shared/project/source/source/utility/path.cs b/source/shared/project/source/source/utility/path.cs index 701544d..274c2b1 100644 --- a/source/shared/project/source/source/utility/path.cs +++ b/source/shared/project/source/source/utility/path.cs @@ -6,93 +6,217 @@ namespace VisualStudioCppExtensions { - public class pathUtility + + + public class path { + public string x; + public string[] x2; + - public static string pathCommon(Dictionary files) + + public class Separator { - if (files == null || files.Count == 0) return string.Empty; + public char[] s = ss; + public char s2 = ss2; - var s = string.Empty; - foreach (var f in files.Keys) - { - if (f == null) return string.Empty; + public static char[] ss = new char[] { System.IO.Path.DirectorySeparatorChar, System.IO.Path.AltDirectorySeparatorChar }; + public static char ss2 = System.IO.Path.DirectorySeparatorChar; + public static Separator sDefault = new path.Separator() { s = new char[] { '\\', '/' }, s2 = '\\' }; + } + public Separator s = new Separator(); - if (s == string.Empty) - { - s = Path.GetDirectoryName(f); - continue; - } - var fd = Path.GetDirectoryName(f); - var i = 0; - while (i < s.Length - && i < fd.Length - && s[i] == fd[i]) i++; - if (i == 0) return string.Empty; - if (i == s.Length) continue; - if (i < s.Length) s = s.Substring(0, i); - } - return s; + + + + + + + + public path(string x = null, Separator s = null) + { + this.s = s ?? new Separator(); + if (x != null) init(x); + } + + public path(string[] x2, Separator s = null) + { + this.s = s ?? new Separator(); + this.x2 = x2; + if (x2 != null) xJoin(); + } + + + public path init(string x) + { + x2 = new string[0]; + if (x != null) + x2 = x.Split(s.s, StringSplitOptions.RemoveEmptyEntries).Select(x3 => x3.Trim()).Where(x3 => x3.xFull()).ToArray(); + xJoin(); + + return this; + } + + + + + + + + + + + + + + + + + public string xJoin() => x = string.Join(s.s2.ToString(), x2); + + + + + + + + + + + + + + + + public string sLast { get => x2.xEmpty() ? null : x2[x2.Length - 1]; } + public int count { get => x2.xEmpty() ? 0 : x2.Length; } + + + + + + + + + + + + + + + public static path operator +(path x1, path x2) => path.oPlus(x1, x2); + public static path operator +(path x1, string x2) => path.oPlus(x1, x2); + public static path operator -(path x1, path x2) => path.oMinus(x1, x2); + public static path operator *(path x1, path x2) => path.oCommon(x1, x2); + /*public static bool operator ==(path x1, path x2) => path.oEqual(x1, x2); + public static bool operator !=(path x1, path x2) => !path.oEqual(x1, x2);*/ + + + public static path oPlus(path x1, path x2, Separator s = null) + { + if (x1.xNull()) return null; + if (x2.xNull()) return null; + if (s == null) s = new Separator(); + + return new path(x1.x2.Concat(x2.x2).ToArray(), s); + } + + public static path oPlus(path x1, string x2, Separator s = null) + { + if (x1.xNull()) return null; + if (!x2.xFull()) return new path(x1.x2, x1.s); //clone + if (s == null) s = new Separator(); + + return new path(x1.x2.Append(x2).ToArray(), s); } + public static path oMinus(path x1, path x2, Separator s = null) + { + if (x1.xNull()) return null; + if (x2.xNull()) return null; + if (s == null) s = new Separator(); + + if (!(x1.x2.Length >= x2.x2.Length)) return null; + for (int i = 0; i < x2.x2.Length; i++) + if (string.Compare(x1.x2[i], x2.x2[i], StringComparison.OrdinalIgnoreCase) != 0) return null; + + return new path(x1.x2.Skip(x2.x2.Length).ToArray(), s); + } + + + - /*public static HashSet getFilterList(ProjectData p) + + public static path oCommon(path x1, path x2, Separator s = null) { - var result = new HashSet(); + //check + if (x1.xNull()) return null; + if (x2.xNull()) return null; + //s ??= new Separator(); + if (s == null) s = new Separator(); + - //filter root - if (p.r.filterFull) + int i = 0; { - result.Add(p.r.o.filter); - for (var i = p.r.o.filter.LastIndexOf(Path.DirectorySeparatorChar); i != -1; i = p.r.o.filter.LastIndexOf(Path.DirectorySeparatorChar, i - 1)) - result.Add(p.r.o.filter.Substring(0, i)); + int i1 = Math.Min(x1.x2.Length, x2.x2.Length); + for (; i < i1; i++) + if (String.Compare(x1.x2[i], x2.x2[i], StringComparison.OrdinalIgnoreCase) != 0) break; } + return new path(x1.x2.Take(i).ToArray(), s); + } + - //filter others - foreach (var f in p.f.fileIn.Keys) - { - var d = Path.GetDirectoryName(f); - if (p.r.c.dir.Length >= d.Length) continue; - d = relativeDir(p.r.c.dir, d); - result.Add(p.r.oFilterAdd(d)); - for (var i = d.LastIndexOf(Path.DirectorySeparatorChar); i != -1; i = d.LastIndexOf(Path.DirectorySeparatorChar, i - 1)) - result.Add(p.r.oFilterAdd(d.Substring(0, i))); - } - return result; - }*/ + //common + public static path oCommon(string[] p, Separator s = null) + { + //check + if (p.xEmpty()) return null; + if (s == null) s = new Separator(); + + path x = null; + foreach (string p2 in p) + { + if (x == null) + { + x = new path(p2, s); + continue; + } + x = oCommon(x, new path(p2, s), s); + if (x == null) break; + if (x.x2.Length == 0) break; + } + return x; + } - /*public static string relativeFile(string path, string file) + public static bool oEqual(path x1, path x2) { - if (Path.GetPathRoot(path) != Path.GetPathRoot(file)) return file; - - var fileUri = new Uri(file); + bool b1 = !x1.xNull(); + bool b2 = !x2.xNull(); + if (!(b1 || b2)) return true; + if (b1 ^ b2) return false; + return x1.x.xC2(x2.x); + } - // Folders must end in a slash - if (!path.EndsWith(Path.DirectorySeparatorChar.ToString())) - path += Path.DirectorySeparatorChar; - var pathUri = new Uri(path); - return Uri.UnescapeDataString(pathUri.MakeRelativeUri(fileUri).ToString().Replace('/', Path.DirectorySeparatorChar)); - }*/ @@ -101,20 +225,37 @@ public static string pathCommon(Dictionary files) - - /*public static string relativeDir(string path, string path2) + public path mUp() { - if (path.Length >= path2.Length) return ""; + if (x2.xEmpty()) return null; + int i = x2.Length - 1; + if (i < 0) return null; + return new path(x2.Take(i).ToArray(), s); + } + + + + - int i = path.Length; - if (path2[path.Length] == Path.DirectorySeparatorChar) i++; - return path2.Substring(i); - }*/ + + //interface + public override int GetHashCode() => x?.ToLower().GetHashCode() ?? 0; + + public override bool Equals(object x) + { + if (x == null) return false; + if (!(x is path)) return false; + return path.oEqual(this, (path)x); + } + + public override string ToString() => x; } } + + diff --git a/source/shared/project/source/source/utility/project.cs b/source/shared/project/source/source/utility/project.cs new file mode 100644 index 0000000..e88d4d4 --- /dev/null +++ b/source/shared/project/source/source/utility/project.cs @@ -0,0 +1,51 @@ +using System; +using Microsoft.VisualStudio.Shell; +using Microsoft.VisualStudio.Shell.Interop; +using EnvDTE; +using System.Collections.Generic; +using System.IO; +using System.Reflection; +using System.Text; + +namespace VisualStudioCppExtensions +{ + public class projectUtility + { + //active + public static Project GetActive() + { + ThreadHelper.ThrowIfNotOnUIThread(); + return GetActive((DTE)Package.GetGlobalService(typeof(SDTE))); + } + + public static Project GetActive(DTE dte) + { + ThreadHelper.ThrowIfNotOnUIThread(); + object[] x = (object[])dte.ActiveSolutionProjects; + if (x.xEmpty()) return null; + return (Project)x[0]; + } + + + + + + + + + + + + + + //cpp + public static bool IsCpp(Project project) + { + ThreadHelper.ThrowIfNotOnUIThread(); + return project != null + && (project.CodeModel.Language == CodeModelLanguageConstants.vsCMLanguageMC + || project.CodeModel.Language == CodeModelLanguageConstants.vsCMLanguageVC); + } + + } +}