diff --git a/FamilyBudget/FamilyBudget/Entities/Enums/ExpenseCategoryType.cs b/FamilyBudget/FamilyBudget/Entities/Enums/ExpenseCategoryType.cs new file mode 100644 index 0000000..0f09360 --- /dev/null +++ b/FamilyBudget/FamilyBudget/Entities/Enums/ExpenseCategoryType.cs @@ -0,0 +1,18 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace FamilyBudget.Entities.Enums +{ + [Flags] + public enum ExpenseCategoryType + { + None = 0, + Food = 1, + Utilities = 2, + Entertainment = 4, + Health = 8 + } +} diff --git a/FamilyBudget/FamilyBudget/Entities/Enums/FamilyMemberType.cs b/FamilyBudget/FamilyBudget/Entities/Enums/FamilyMemberType.cs new file mode 100644 index 0000000..2f8f71d --- /dev/null +++ b/FamilyBudget/FamilyBudget/Entities/Enums/FamilyMemberType.cs @@ -0,0 +1,17 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace FamilyBudget.Entities.Enums +{ + public enum FamilyMemberType + { + None = 0, + Father = 1, + Mother = 2, + Son = 3, + Daughter = 4 + } +} diff --git a/FamilyBudget/FamilyBudget/Entities/Enums/IncomeCategoryType.cs b/FamilyBudget/FamilyBudget/Entities/Enums/IncomeCategoryType.cs new file mode 100644 index 0000000..93d4557 --- /dev/null +++ b/FamilyBudget/FamilyBudget/Entities/Enums/IncomeCategoryType.cs @@ -0,0 +1,17 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace FamilyBudget.Entities.Enums +{ + [Flags] + public enum IncomeCategoryType + { + None = 0, + Salary = 1, + Bonus = 2, + Investment = 4 + } +} diff --git a/FamilyBudget/FamilyBudget/Entities/ExpenseBudget.cs b/FamilyBudget/FamilyBudget/Entities/ExpenseBudget.cs new file mode 100644 index 0000000..ada6eee --- /dev/null +++ b/FamilyBudget/FamilyBudget/Entities/ExpenseBudget.cs @@ -0,0 +1,28 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace FamilyBudget.Entities +{ + public class ExpenseBudget + { + public int Id { get; private set; } + public int FamilyMemberId { get; private set; } + public DateTime Date { get; private set; } + public IEnumerable FamilyMember_Expenses { get; private set; } = []; + + public static ExpenseBudget СreateOperation(int id, int familyMemberId, IEnumerable familyMember_Expenses) + { + return new ExpenseBudget + { + Id = id, + FamilyMemberId = familyMemberId, + FamilyMember_Expenses = familyMember_Expenses, + Date = DateTime.Now + }; + } + + } +} diff --git a/FamilyBudget/FamilyBudget/Entities/ExpenseBudgetCategory.cs b/FamilyBudget/FamilyBudget/Entities/ExpenseBudgetCategory.cs new file mode 100644 index 0000000..d31bfac --- /dev/null +++ b/FamilyBudget/FamilyBudget/Entities/ExpenseBudgetCategory.cs @@ -0,0 +1,25 @@ +using FamilyBudget.Entities.Enums; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace FamilyBudget.Entities +{ + public class ExpenseBudgetCategory + { + public int Id { get; private set; } + public string Name { get; private set; } = string.Empty; + public ExpenseCategoryType ExpenseCategoryType { get; private set; } + public static ExpenseBudgetCategory CreateEntity(int id, string name, ExpenseCategoryType expenseCategoryType) + { + return new ExpenseBudgetCategory + { + Id = id, + Name = name, + ExpenseCategoryType = expenseCategoryType + }; + } + } +} diff --git a/FamilyBudget/FamilyBudget/Entities/Family.cs b/FamilyBudget/FamilyBudget/Entities/Family.cs new file mode 100644 index 0000000..0a47778 --- /dev/null +++ b/FamilyBudget/FamilyBudget/Entities/Family.cs @@ -0,0 +1,22 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace FamilyBudget.Entities +{ + public class Family + { + public int Id { get; private set; } + public string Name { get; private set; } = string.Empty; + public static Family CreateEntity(int id, string name) + { + return new Family + { + Id = id, + Name = name ?? string.Empty, + }; + } + } +} diff --git a/FamilyBudget/FamilyBudget/Entities/FamilyMember.cs b/FamilyBudget/FamilyBudget/Entities/FamilyMember.cs new file mode 100644 index 0000000..c50db86 --- /dev/null +++ b/FamilyBudget/FamilyBudget/Entities/FamilyMember.cs @@ -0,0 +1,28 @@ +using FamilyBudget.Entities.Enums; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace FamilyBudget.Entities +{ + public class FamilyMember + { + public int Id { get; set; } + public string Name { get; private set; } = string.Empty; + public int FamilyId { get; private set; } + public FamilyMemberType MemberType { get; private set; } + + public static FamilyMember CreateEntity(int id, string name, int familyId, FamilyMemberType memberType) + { + return new FamilyMember + { + Id = id, + Name = name ?? string.Empty, + FamilyId = familyId, + MemberType = memberType + }; + } + }; +} diff --git a/FamilyBudget/FamilyBudget/Entities/FamilyMember_ExpenseBudget.cs b/FamilyBudget/FamilyBudget/Entities/FamilyMember_ExpenseBudget.cs new file mode 100644 index 0000000..3c368f1 --- /dev/null +++ b/FamilyBudget/FamilyBudget/Entities/FamilyMember_ExpenseBudget.cs @@ -0,0 +1,24 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace FamilyBudget.Entities +{ + public class FamilyMember_ExpenseBudget + { + public int Id { get; private set; } + public int ExpenseBudgetId { get; private set; } + public int Sum { get; private set; } + public static FamilyMember_ExpenseBudget CreateElement(int id, int expenseBudgetId, int sum) + { + return new FamilyMember_ExpenseBudget() + { + Id = id, + ExpenseBudgetId = expenseBudgetId, + Sum = sum + }; + } + } +} diff --git a/FamilyBudget/FamilyBudget/Entities/FamilyMember_IncomeBudget.cs b/FamilyBudget/FamilyBudget/Entities/FamilyMember_IncomeBudget.cs new file mode 100644 index 0000000..f7e7413 --- /dev/null +++ b/FamilyBudget/FamilyBudget/Entities/FamilyMember_IncomeBudget.cs @@ -0,0 +1,24 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace FamilyBudget.Entities +{ + public class FamilyMember_IncomeBudget + { + public int Id { get; private set; } + public int IncomeBudgetId { get; private set;} + public int Sum { get; private set; } + public static FamilyMember_IncomeBudget CreateElement(int id, int incomeBudgetId, int sum) + { + return new FamilyMember_IncomeBudget() + { + Id = id, + IncomeBudgetId = incomeBudgetId, + Sum = sum + }; + } + } +} diff --git a/FamilyBudget/FamilyBudget/Entities/IncomeBudget.cs b/FamilyBudget/FamilyBudget/Entities/IncomeBudget.cs new file mode 100644 index 0000000..f2d4b82 --- /dev/null +++ b/FamilyBudget/FamilyBudget/Entities/IncomeBudget.cs @@ -0,0 +1,28 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace FamilyBudget.Entities +{ + public class IncomeBudget + { + public int Id { get; private set; } + public int FamilyMemberId { get; private set; } + public int IncomeBudgetCategoryId { get; private set; } + public DateTime Date { get; private set; } + public IEnumerable FamilyMember_Incomes { get; private set; } = []; + + public static IncomeBudget CreateOperation(int id, int familyMemberId, IEnumerable FamilyMember_Incomes) + { + return new IncomeBudget + { + Id = id, + FamilyMemberId = familyMemberId, + FamilyMember_Incomes = FamilyMember_Incomes, + Date = DateTime.Now + }; + } + } +} diff --git a/FamilyBudget/FamilyBudget/Entities/IncomeBudgetCategory.cs b/FamilyBudget/FamilyBudget/Entities/IncomeBudgetCategory.cs new file mode 100644 index 0000000..0ab44a1 --- /dev/null +++ b/FamilyBudget/FamilyBudget/Entities/IncomeBudgetCategory.cs @@ -0,0 +1,25 @@ +using FamilyBudget.Entities.Enums; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace FamilyBudget.Entities +{ + public class IncomeBudgetCategory + { + public int Id { get; private set; } + public string Name { get; private set; } = string.Empty; + public IncomeCategoryType IncomeCategoryType { get; private set; } + public static IncomeBudgetCategory CreateEntity(int id, string name, IncomeCategoryType incomeCategoryType) + { + return new IncomeBudgetCategory + { + Id = id, + Name = name ?? string.Empty, + IncomeCategoryType = incomeCategoryType + }; + } + } +} diff --git a/FamilyBudget/FamilyBudget/FamilyBudget.csproj b/FamilyBudget/FamilyBudget/FamilyBudget.csproj index 663fdb8..f567c90 100644 --- a/FamilyBudget/FamilyBudget/FamilyBudget.csproj +++ b/FamilyBudget/FamilyBudget/FamilyBudget.csproj @@ -8,4 +8,42 @@ enable + + + + + + + + + + + + + + + + + + + + True + True + Resources.resx + + + + + + ResXFileCodeGenerator + Resources.Designer.cs + + + + + + PreserveNewest + + + \ No newline at end of file diff --git a/FamilyBudget/FamilyBudget/Form1.Designer.cs b/FamilyBudget/FamilyBudget/Form1.Designer.cs deleted file mode 100644 index 1fe6bd4..0000000 --- a/FamilyBudget/FamilyBudget/Form1.Designer.cs +++ /dev/null @@ -1,39 +0,0 @@ -namespace FamilyBudget -{ - partial class Form1 - { - /// - /// 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() - { - this.components = new System.ComponentModel.Container(); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(800, 450); - this.Text = "Form1"; - } - - #endregion - } -} diff --git a/FamilyBudget/FamilyBudget/Form1.cs b/FamilyBudget/FamilyBudget/Form1.cs deleted file mode 100644 index 44bbba5..0000000 --- a/FamilyBudget/FamilyBudget/Form1.cs +++ /dev/null @@ -1,10 +0,0 @@ -namespace FamilyBudget -{ - public partial class Form1 : Form - { - public Form1() - { - InitializeComponent(); - } - } -} diff --git a/FamilyBudget/FamilyBudget/FormFamilyBudget.Designer.cs b/FamilyBudget/FamilyBudget/FormFamilyBudget.Designer.cs new file mode 100644 index 0000000..0f40569 --- /dev/null +++ b/FamilyBudget/FamilyBudget/FormFamilyBudget.Designer.cs @@ -0,0 +1,148 @@ +namespace FamilyBudget +{ + partial class FormFamilyBudget + { + /// + /// 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(FormFamilyBudget)); + menuStrip1 = new MenuStrip(); + справочникиToolStripMenuItem = new ToolStripMenuItem(); + FamiliesToolStripMenuItem = new ToolStripMenuItem(); + участникиСемьиToolStripMenuItem = new ToolStripMenuItem(); + категорияДоходовToolStripMenuItem = new ToolStripMenuItem(); + категорияРасходовToolStripMenuItem = new ToolStripMenuItem(); + операцииToolStripMenuItem = new ToolStripMenuItem(); + расходToolStripMenuItem = new ToolStripMenuItem(); + IncomeToolStripMenuItem = new ToolStripMenuItem(); + отчетыToolStripMenuItem = new ToolStripMenuItem(); + menuStrip1.SuspendLayout(); + SuspendLayout(); + // + // menuStrip1 + // + menuStrip1.Items.AddRange(new ToolStripItem[] { справочникиToolStripMenuItem, операцииToolStripMenuItem, отчетыToolStripMenuItem }); + menuStrip1.Location = new Point(0, 0); + menuStrip1.Name = "menuStrip1"; + menuStrip1.Size = new Size(799, 24); + menuStrip1.TabIndex = 0; + menuStrip1.Text = "menuStrip1"; + // + // справочникиToolStripMenuItem + // + справочникиToolStripMenuItem.DropDownItems.AddRange(new ToolStripItem[] { FamiliesToolStripMenuItem, участникиСемьиToolStripMenuItem, категорияДоходовToolStripMenuItem, категорияРасходовToolStripMenuItem }); + справочникиToolStripMenuItem.Name = "справочникиToolStripMenuItem"; + справочникиToolStripMenuItem.Size = new Size(94, 20); + справочникиToolStripMenuItem.Text = "Справочники"; + // + // FamiliesToolStripMenuItem + // + FamiliesToolStripMenuItem.Name = "FamiliesToolStripMenuItem"; + FamiliesToolStripMenuItem.Size = new Size(184, 22); + FamiliesToolStripMenuItem.Text = "Семьи"; + FamiliesToolStripMenuItem.Click += FamiliesToolStripMenuItem_Click; + // + // участникиСемьиToolStripMenuItem + // + участникиСемьиToolStripMenuItem.Name = "участникиСемьиToolStripMenuItem"; + участникиСемьиToolStripMenuItem.Size = new Size(184, 22); + участникиСемьиToolStripMenuItem.Text = "Участники семьи"; + участникиСемьиToolStripMenuItem.Click += FamilyMembers; + // + // категорияДоходовToolStripMenuItem + // + категорияДоходовToolStripMenuItem.Name = "категорияДоходовToolStripMenuItem"; + категорияДоходовToolStripMenuItem.Size = new Size(184, 22); + категорияДоходовToolStripMenuItem.Text = "Категория доходов"; + категорияДоходовToolStripMenuItem.Click += CategoryIncomesToolStripMenuItem_Click; + // + // категорияРасходовToolStripMenuItem + // + категорияРасходовToolStripMenuItem.Name = "категорияРасходовToolStripMenuItem"; + категорияРасходовToolStripMenuItem.Size = new Size(184, 22); + категорияРасходовToolStripMenuItem.Text = "Категория расходов"; + категорияРасходовToolStripMenuItem.Click += CategoryExpensesToolStripMenuItem_Click; + // + // операцииToolStripMenuItem + // + операцииToolStripMenuItem.DropDownItems.AddRange(new ToolStripItem[] { расходToolStripMenuItem, IncomeToolStripMenuItem }); + операцииToolStripMenuItem.Name = "операцииToolStripMenuItem"; + операцииToolStripMenuItem.Size = new Size(75, 20); + операцииToolStripMenuItem.Text = "Операции"; + // + // расходToolStripMenuItem + // + расходToolStripMenuItem.Name = "расходToolStripMenuItem"; + расходToolStripMenuItem.Size = new Size(180, 22); + расходToolStripMenuItem.Text = "Расход"; + расходToolStripMenuItem.Click += ExpenseToolStripMenuItem_Click; + // + // IncomeToolStripMenuItem + // + IncomeToolStripMenuItem.Name = "IncomeToolStripMenuItem"; + IncomeToolStripMenuItem.Size = new Size(180, 22); + IncomeToolStripMenuItem.Text = "Доход"; + IncomeToolStripMenuItem.Click += IncomeToolStripMenuItem_Click; + // + // отчетыToolStripMenuItem + // + отчетыToolStripMenuItem.Name = "отчетыToolStripMenuItem"; + отчетыToolStripMenuItem.Size = new Size(60, 20); + отчетыToolStripMenuItem.Text = "Отчеты"; + // + // FormFamilyBudget + // + AutoScaleDimensions = new SizeF(7F, 15F); + AutoScaleMode = AutoScaleMode.Font; + BackgroundImage = (Image)resources.GetObject("$this.BackgroundImage"); + BackgroundImageLayout = ImageLayout.Stretch; + ClientSize = new Size(799, 512); + Controls.Add(menuStrip1); + MainMenuStrip = menuStrip1; + Name = "FormFamilyBudget"; + StartPosition = FormStartPosition.CenterScreen; + Text = "FormFamilyBudget"; + Load += FormFamilyBudget_Load; + menuStrip1.ResumeLayout(false); + menuStrip1.PerformLayout(); + ResumeLayout(false); + PerformLayout(); + } + + #endregion + + private MenuStrip menuStrip1; + private ToolStripMenuItem справочникиToolStripMenuItem; + private ToolStripMenuItem операцииToolStripMenuItem; + private ToolStripMenuItem отчетыToolStripMenuItem; + private ToolStripMenuItem FamiliesToolStripMenuItem; + private ToolStripMenuItem участникиСемьиToolStripMenuItem; + private ToolStripMenuItem расходToolStripMenuItem; + private ToolStripMenuItem IncomeToolStripMenuItem; + private ToolStripMenuItem категорияДоходовToolStripMenuItem; + private ToolStripMenuItem категорияРасходовToolStripMenuItem; + } +} diff --git a/FamilyBudget/FamilyBudget/FormFamilyBudget.cs b/FamilyBudget/FamilyBudget/FormFamilyBudget.cs new file mode 100644 index 0000000..155a5fa --- /dev/null +++ b/FamilyBudget/FamilyBudget/FormFamilyBudget.cs @@ -0,0 +1,94 @@ +using FamilyBudget.Forms; +using System.ComponentModel; +using Unity; + +namespace FamilyBudget +{ + public partial class FormFamilyBudget : Form + { + private readonly IUnityContainer _container; + public FormFamilyBudget(IUnityContainer container) + { + InitializeComponent(); + _container = container ?? throw new ArgumentNullException(nameof(container)); + } + + private void FormFamilyBudget_Load(object sender, EventArgs e) + { + + } + + private void FamiliesToolStripMenuItem_Click(object sender, EventArgs e) + { + try + { + _container.Resolve().ShowDialog(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, " ", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void FamilyMembers(object sender, EventArgs e) + { + try + { + _container.Resolve().ShowDialog(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, " ", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + + } + + private void IncomeToolStripMenuItem_Click(object sender, EventArgs e) + { + try + { + _container.Resolve().ShowDialog(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, " ", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void ExpenseToolStripMenuItem_Click(object sender, EventArgs e) + { + try + { + _container.Resolve().ShowDialog(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, " ", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void CategoryIncomesToolStripMenuItem_Click(object sender, EventArgs e) + { + try + { + _container.Resolve().ShowDialog(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, " ", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void CategoryExpensesToolStripMenuItem_Click(object sender, EventArgs e) + { + try + { + _container.Resolve().ShowDialog(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, " ", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + } +} diff --git a/FamilyBudget/FamilyBudget/FormFamilyBudget.resx b/FamilyBudget/FamilyBudget/FormFamilyBudget.resx new file mode 100644 index 0000000..e73a235 --- /dev/null +++ b/FamilyBudget/FamilyBudget/FormFamilyBudget.resx @@ -0,0 +1,2268 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + + 17, 17 + + + + + /9j/4AAQSkZJRgABAQEAAAAAAAD/2wBDAAYEBQYFBAYGBQYHBwYIChAKCgkJChQODwwQFxQYGBcUFhYa + HSUfGhsjHBYWICwgIyYnKSopGR8tMC0oMCUoKSj/2wBDAQcHBwoIChMKChMoGhYaKCgoKCgoKCgoKCgo + KCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCj/wAARCAN0BLADASIAAhEBAxEB/8QA + HQAAAQUBAQEBAAAAAAAAAAAAAAECAwQFBgcICf/EAEwQAAIBAwIDBgMGAwUGBAYABwECAAMEERIhBSIx + BhMyQVFhQnGBBxRSYpGhFXKxI4KSwdEIFiQzU+FDssLxJTREotLwc4Mmk1Sz4v/EABsBAAMBAQEBAQAA + AAAAAAAAAAABAgMEBQYH/8QAKREBAQACAQQDAQEAAwEBAQEBAQACEQMEEiExBRNBURQVImEyIzNDgf/a + AAwDAQACEQMRAD8A+V8kRNzNiw4Je3ocpSCKOpblj+JcJqWdnSrEOS2VqjG1M52GZ0/Ty63p1LZYkIQn + NOIQhCIhCEIiWbes9GorUzhgQwPuJKLKu1amgpVO8ZdQBGMjGdvpKowrDUDsdxNQywdxdjb9qjWZE+5t + UcjcK/U+y4m7wniL3yvrsqtEL1LDl+XrOQt+HvXppdcOqYdebuyTlSOu/pIrfj9/Su0rNWNUgFdNTwkf + IT1en63Lj05Lpsu0b0L8R+GCMM521Tm+D9pBc1hRvEFMs2FqL0GegP8ArN/OGXaezw8+PKbGSdlMM9FA + kiMFMroxXf4o9WLLOkorIqhQwjHrH+7ITkjaGk9GzDbFK9QsOY8sZ3g+KN/EP84wx7jVOjA6thDbLdJC + hOGOY5Dq1eUnZPU5mHlELaf5YxmMccYYsQFHViYLXqA2r+WD1Upq5qOiKOYsx0gTHuu0Fhb1npMXfSN2 + UZGc9Jh9peM2/ELCnStS4ZXBORpBGDOHm63j4xR2kGO7tEYMqlWDo3RqZ1CC+Fp5nwvjV5w4EW7A0ycl + SMibdHtdWVSKlujt6q5X9pz8XyeOZ58M+27FSceUPhYscKJz9PtPavRQurmoRuqjJB9PlKHGO0/e2yJZ + BqZYczMBkew/1l8nXYBsZhq6ylVR1U0yHpt0ZTqityrnE8qFeqnhcjfOxI39ZetuN39sFAuHKA5w3NOQ + +TP0qAvRBhlyDlfaCLnbB1fKeZPe13dz3xGoliFJAyYPxG7dVD3FUqBjBcyX5Iah1ektdUGV3dkSip0l + mOlcjrhvONsrg3FDvlXQrMdO25HkfrOB4fTuOKXNvb5c01AB9FXO5ndJXVFW3tENV6YC4U4Vf5j0+k6e + n6l5tutBWK1qq4pU2eoQEUamZjsJWp8TsXZgt3SJA1Hm0yhx+n3fDGe7quVLBStHlx+vWcJWYd6/d6wu + ds9cTPqOteN7QhyS708dtV4hUt6wKKpCirnIbI8/SaneIugsaXMeXmHN8p5bWZ3bNQknA3PXEVKzoUIY + 5U5G/SYcXyLgomyyTd6n9Jgcb4/VsL/uaKU3phQxznOT7yTh3G3uaFOkLd2u2UYCkBT5ZY+QnL8Yqvd8 + Rr1NyBsSBsMbfpN+fqv+plxs7ok7V24oAmjUNY51KrdPr6Qtu1NqzKK9J0ZjuRhgJwpjh1nAdby7i9Vt + LqhdU9du6OnsenzkwO7aTzTnOzHGKdVUtrnArjCowHiX0PvOk0gbdZ7nT8pyYiMTk84BsbQQfhhpPwid + C2uE7V54ERW/DBlIGfiiIpbdpk+bSXr4ox85jjy7SJzJ1PxO6bL5xvm2reGo+mYe8NS3DKGbYQUDmgM9 + VMF6ZbziCBgAc20NLR6qOYfDDosepzNO3WKemGjlyfKGiD4juYReXmg6tnCmPRSoiY3zvkRarDxCr6iS + Ul2aNRTqlikoVstM8m14xZqL7RygHbEfjO0FpnMzXV04ceoRRqjtI09I7TGuRp/NMlVtQ0R0keEPoZJt + pYtIwwxyzQPFmw48oMQNODGNUA2UyF2y2MyqXPVZdhhpEPnGhtoah6Sd0737h6fLlcRqLq3xH6idI9ZI + kJHGLuYVkT4BbaTvs2F8MhfADavEZoMswJrSJlDHmkuBpzG9dmlbsdTMfhg3pHb+Ub/NDctEaYeTBRFU + Z84bw3LUiiOC7QGkLzAxf5YbjsJhyGgI7BPoIKvvCNTdOem0d4f5oRRvCWpsTTvHafrF2+Ewr1M0mOUb + x6+FobaYRNYR2DjMbHJ+X+sUamjlMculS3vDG+fhhjxQjUY8RgijOGEEBiwjUigZ6mOwFiKPOKJoQxpx + v8UQRTHKN4UahR/iij5csIqnZYzzSzlA+ICPKgDljBDVtLXRT2TTsGiZwOb9oO3WIfzSNzMJRjETVGnw + xBDdZhPz7RVYY6RmdI+cBn4REswnesXVtlYi8yxVHlsYbq1IrDpFVfFD9ouDFukIx+I8sT+URVBWAHi1 + Q3UGoAhiO0xQv5JC1BuYBpLR0XEco0r0iW01MVebMXTnnxHY25YunSOsjcAzNPtDSRqMcByw058sx1BC + AekcAPQQQeLVHaVk7qBmaViqvngRwEFENx2TdPrDBkiiAzjmhuDCjC5jsGO0r6Qx7wWepuPWGmLpP4oM + MRbnqTAXeHK0WJphuNSRMHPnHaffMbvIkE7pAbRu+mPhMlDDDSQESv5yTP4hIbQaTIh/LgyHVvHqfpFq + oznp6x6mRq34YavWLVQ2Dq1fyyK7dFt6hrJ3qAeFV1Fj5CSJnmGeVYBsK34p6+WHdil8sF51xK2rWVfR + VQU2YagoOcA+UofDO37SWNL7rc3tTL1sU1G+AB0nDz5jqeJ4s0tCIQhOScRydY2EZ4Yuvuu0g0W9KyoA + vTCkNVXoQPICc7eXTXVy9VgiMzZIQYGfWUobzR5XL3IAt3gHGf4YaoqJ3tGqOZc43mfXalVq1Cg0ZYso + HTHkJSjlEbyuQD6I0HmkQlWyp3HQzuuAcfpXVKnQu27u4UYDMdIqY9/Izz+OBxmbcPVZcTshB93pycYt + HvDbpWDdFVl6EnyB9ZoBSPWeRqzIwIOGG4Im7wvtDd2dbNR2rUzgMrH+h8p6nD8oKmRZvH/L0EAr9Ij/ + AJZzFHthSZnFag6J5MpyfrNrh/FLW9bFvVBbGdJGCPnPS4utw5HQkuxK4o35jK15eW9pRqPWqoiqNWnI + 1N8lkyMD5zA7R8Fa+rLXt2RHVcEMSM4889BDqeZ48FDbMxn1e0litsxVnNQjlXG4PvMThvaS8pFUqola + nnbVswyfIzBuENKs1IlXIOCVOQflIVbE+ez6/lzyFajEvWUJZVKr4gGj3UMrBxlSOZWHUTzelV4j3TVK + VW4NJd9SlsDHvFHG+ICuKpuahYbDPT9J3HyOsTYzCTtCi0uLXK06QpKHwqgYAEzD4ZLdV6t1XetWfNRj + uYW1rWutfcIz6BqbHkJ5HLn3ZKHuo8Vrg9ol7eU6FZnRXyNQGcHG0fUthY8R7i7Ummp0sV819R/WZ6O9 + JgUJVwdmBwREqO9VyahLMepJzJMgNRabolhd06tGslVVIqKyncjPQjyMgvLlKl+1xbUu5BOoKN8HzlD4 + YklzXwRWK9Y1qmWIJxjIGMyvCEh2xEIR4QnJAzjrERWrW7r24cU3KhwAceYE6Gz4xxFrDXb2tIqp0kqp + zn5CclN3gHFjw650sC1BjzKDjfpmdXDy5DreiZXOIdpfvdq1CpZ08EY3Y7H1xOXzzGdVx+4slZbewt6L + NUGpqoAYnPkPec9WtqtKlTq1EYIxIXIxnHWHLkr5dw3VdmrBLqwd70LVDcqeZVeh38pzvELJrG6YEgpq + bSQQwIBmrwfiNjbWVSlWV+8ILFgOjdANvKc7WqGoxLEnJzucx554uIB5jxq0uH8Uehf0q9Q5UDSQABy5 + nYXVKhU4LdrRCFTSZiFwxz1/rPN5u9nLp6F6QopFaisrCq2Aw9AY+Dl1vFlYjKRJ7ai1WslNc5YhRgZ6 + zo+1VhSthRuLcItMjuyqjYHcgic5Z3D2tylamcOpyMyMse3PTFqUbK44Ze07irS/sqVUamU5HXpPQKdR + KtNTTIKNzBlOqYF5VFzwqvVpgsl1R70LjOKi4DfXH9JzPCuL3FhWV6ZL0wTmkScHM9Hi5Tp0DyMXpHRo + 4MV99pS4TeC/s1rKNGpiCuQcEesuMJ7GHIcoJMdS6snEFx0zEEUYloFZmzXEbpOJNgFoYGOkzSY0GnHn + DSQJKq7RFXUYtloC0aAt5R6qV8QkiqFEUKPeQtXZRY5oafUSXTtBV9oOeqjjolHn7xdPM28kNPl9YLTP + kId4z+tmJgx4Xmj0XxR6jSJLmWmHG/sqLjeKE8+kaN4c+PBMV3dGBqkzgesFbbrI1WBYBcMYkmZznquo + xGLU3bUJGTmDbbbwAk5rSashpHqz4THBgBhRGKuTnGJUb3Ky7ZWQnxySoTpwoke0RYZSo3tFxGowC9JI + jHGcwtB8SowXaIzkHEjLb5gd4Q5/ykV8+cjYlhmGRFOGDAQLNV9zPhxE0x6DflhiaUaZrCAA5o4KPigy + /hi2RqbjblgBt1EcFK6oKNobqCawhpjoAZhuNTVwNXWCCP0xNOfOPZCeIAguRDTtF0n5xGe6e3cmPwwC + /ihj8MXTDcakACw0jEdjbHxQUZhuNTQuzRdOY/TjZRmNwPSG6tSaPeEeo8hDTAdxqYBFjtscsbp9pRTq + B6R0aB7R2mG41EBBRvHbSxjUgEBj4Yu8N/WA0pGebRHRqwzDcdsHB9ZGw5uWPgM820W6jCZj3gAMx+DA + Ly51TNzgNTCMxyDyihTmKoPNtDdWpqjeOCwxywWTuZjJp5esXEdpj9MW6jCYIuI5Vgq51Q3V2MwAR4gB + HLTGIbmYTdP5lgAY5V1eEx2nwxOVRhR4PxQ0+0k0w0w3Mx1Nx+WOxp8MFGY7Tp9YbgJqrsw9YKNWdUdp + igaQwi3UEafLMTTHgQxzQ3PWpmnaPXpiNwc9Y6LfiWoxDAip/wDbDTiRusJNOkRrKcNH45OsSSMOEzTt + EC6fFJIEZjlqjMIvwxMSqdaiEDy+EwhEQjYuqCQMkVc80bvHeEZzETgQPjjWYYgBy+cUt2MMxdO8YGPx + ZiKwXVPY1fO7ouKMTaMlOgK1RhpVSBgH1OZx1twW7r1mHdlGADHVygg+k7YsfhMA34pw83RHKisxS4vi + HAK9jZNcVnplVIBCnOMzExvO+4/a1r+hSoUCAC2osTgAY/eR8K7P29qahuAlwxOBqGwHy9Z53L0S5aDR + Mbg4CdTx7gYoo1ayyaY3K9SPl7TnEXLKGOFJAJ9Jw59O8bpKh3QwmzxiwFtdURbMalOqgKsN8noY+8ta + VjwzRcIBd1m1DVuaaj/WR9Sb3G7Dkjq4I1AjPTIxmRiaN7fVbynTDYC01ChVHoOsgCdnQhCREQhCERNb + ht8/DrhKtu4clcMrAgb+X/eZMso4WnUUorlgACeq/KaYZOLsdMWu/aG9+9NVUoqkBRTIyAPaUr/iVxe1 + WNRiitjKqSE+eJmZhNXqeRNKstE7VEPtEmhwy0a7u6VIKCWO+TjYbn9pngOTo9s7peBW6fcgtR6txSqL + lqIDYpnPtscytxThFtVqVDYJVSpTxqUocD6+s6RdFlaYooAqjSFUZ5j0H6yS2ptSpKGJLeJj6sepns4d + Pi4hlPVyicMtAtJ7is6agCwZxy7lT098GMqdm6iWZuEuENPQahDZG3lOm4hY0bm3rinRRazDIZRzgjcQ + oNb3ltb98ELsvhqHow2OV9jMnp8d6YC4JaVWvVpJSpM9QgAaRgkf/vnLvCODVr6owUKERgCWOPPcD1nc + V8W61K1vbh6oA2UBSQPzTiuIcZrMUpUKP3TuixApEqcmYcvTnFrJZoHu1rnsvQVapS4CPq5BUwoA9GnL + 3tubWu1Go9MsvnTYMD9RIq1xVqsz1HYsxyxJ6mQTlzzxfRqTp9W32ds7S8umF66Cmo1aS2kt9ZBxOtRq + 1f7CkiU1GgBfMAncnzJmVCZ93jQRvxAnacHsqNvwzvawpXFO6Xox04I8ifIe84uXaN1VoghHJVgVIJyC + D7SuLMwVSB1Xai2rXPd9zWQ50lVIbB9BmZLqAx050g4GY9KrrVDAksDkE+siYsxJPnJct+YXdIlRqVRX + pkhgcgjqDHXN1Wuqpe5qvUqerGV4DziMmUGE3afBnqWdS7tz31BBucacbZbGeuJmNTqUShamQCNS6hsR + 6x5YppSemqwHWSIhY4UEn0AzI8RaTzK3bziJuOB29F6malNyCp6kY2MrcMt7WvTufvdcUGVNSknqc9MS + tQtqlXSelIsFLHoCZ1NPszS++tSqVqppGkGFQDzzuD/Wb4YZ5u0gFsTh/FDZ0qlI95oySqqcYypU/sZj + S3d0xSuKiIWNNSVUsMEgGVJnnmvhi0+EcUr8NrA0nOkkalPQid1Z8csbsgUq4DEqArDBJ9p5kZZt61Wh + XSrSOHQhgfQidHTdXnxePZF6yjDU41jUvVcwyDqLHE4y7r397a07unbutXAVq1vV6g9QyjfMpWd/xXhg + YuKppH4aykjP1nqf7f6Oq8W79WQswU83mskVc+GeaPxq8N/9673TVwFwowCPTE7DgHHBxFadJgfvJBJC + jCADzl8XW45qVGl0W4qnEExltJBx1XPSFRkoUXaoQFUFiScdPnOT7TcStLi1W4srwpcb02prlSR7iHL1 + GPGLaL2F1m2F3HN0947SdPWeUrxS9RVH3mrpBDBdR2I6Toz2nNfhwoOrCsxCtUTYFc7n5mcuHXDVx8o+ + G7ZF25jBF39ItCtSr1Kgpuj1KZAZV6jI2llEztibvMZF38fH3+qr3Yz0jkULLGjbEYVxJM92zxameWI1 + hvHFdLRj5xt4poNCeJFOk8sCTAKcc28coGeYfBHso00ZY45TE8sNvHlSdWnpItJUc28BGNM5VCjpGuwG + rbmgxPN5LGlTn1hSx4jywLENv4Yo/wCXBcefSEA0bLu2w0xCB6SQqNMY6ke8dCMh6flh9YYgQcRU+ZsA + Y5VOM+kUwjUieJjDMVF84BfwxEagCGmLjG0Mfij3HZJp3xBRt1kgB09YmmG4CZp1QAwJIq/h2gyw3VqZ + iGPxR5U4xE0j4RFuNM1RtBV8Ueo8X4YafwiPcaZmPeO07c0WKBkRzCbgYzBVJaOCgRAMDEnc9RpxDSF+ + sVRs28OoYLDcdkmBmCrvzRdI6N4Y7HLrhuWpoGIhJi4/FDHLHuWmQDww6RQvlArDbPskwIoEQY+GKvia + G2OyMQQeKGPxRyrgNDbHZNXMFU45vFHBcxdHvDuj65mk5hjMdpiquByw2x9cwD8OYaSY9RFFP8UO5n2U + YGI4L5x6jeGk5hsn2TMekXB5tXwxwXMFXxCLcdk0LqMVFw3lHhYBfxQ7oMJoXMcqmPRfFJEWJa8MKDTq + jlUjaTIsEU+kjvtTCjC4ihdsybTDT+ESDOv6qPT7YgFC7RzL5RFXAaPvk4SaS3hgFxF0xYbp7JFXdoAR + cQxGMdkgAhgR6jeAhuNamaYaY/TG4+qyd16kwIYGIuB5JiOENxqYi/DFVfFH/QRBCYTMBli6R8OY6M+C + EahvFEilsRMtAs1IZRp5oz+WJmEsoYMZ5R2r8RiRyZOkFjVXxRygrHrxKWIN4YMNx4ZNU7HnEiLiGfCJ + G4sQ7xdIziNRsSRWGJ7C6vn9UZxzQf8A+0Rdl1BSYjg4aRUFHcVRRpM75KqNRVRvH58O/wCbEr8SKiyr + modu6b9cQsKBVRVqFzWZRlm8vygeQmRmjqntrIPN6rOf41wNXRq1p/zOppqNj8veb64VephnZj+jSeXi + OURKjDVw/CLwW9/RN2penTJAB3wT5xvGLxr69eqgJQbLgHYes3uPcF+85uLTaoTkqNgff5zmBcV7VatB + SQtQaXUjrPC5sM+MRnUoQhOGIhCEIiEIQiJdtrSrdBjSXlUFmY7BR7mOo2NWrRWsMGnrCsQclSfUTY4i + x4Xw42jJSqaiyqwPl6kes2xw2KxcxCEJmxE3eB8St+HLVapSZ65I04xgTChKwzcHZFr1+L3deuaorumG + 1KqtsPksStxi+qUu6qV2Izq22J+omTDM0ebJVVjdbS8uEXCV3AzqwCesdQvKtC6S4pue+U6gTvkylCSc + uX9jd6B2d4jcX/e1a7oKdLChaa41E+pMz+0tsbo1btqttTWkNKqramY+59ZTT7unZcv3uiu1UkKr7nyw + R6YnO6jvN8+beIM9+NM2EITkla9Lgl/Vt6denR7xGGRpIY4+UivuG3FmAaqKqk+HIJX546TfsuMCnYUK + DF1IGSaXjIycBT/UyhxfjFO8tRQtqBpU86myck46ZM63jwMdj5noudhCE45RCEIoiAhCEXR8F40lnbV6 + FenrpFSVX1J8ifSZvE79764NWoAmwVVXoqjoBM6E1y5MswF8E9+NXZ9hkpMt2z0hqXA7w+QPl+0weMUk + pcTrrQINHWdBXcEH0lejXqorIjsKbEZVScGdnQ4ceJWlibi3Sl3RUhVO7L5/LynThh9oAeSvHDuNFj8A + IWpStb1dGaoYLUXqCpHn5dJ3FCiKNJaSEui8qqTuB5CU+JcOFw1pVYIHo1VYsR1X0/pLteilWhUDFwpG + 2lsMD6g+s7eIeMS2ww7R3eccZtq9OtUuKwRe+ZuXIyN87jymLLt9UL3VQsWc6jux3O/nKU8nlRyUuZ9x + LNHDOoqMQpIBI8hK0F6yMXTIvTOzdm/DripaMBVpVQKq1lXrtup9JvFAy4fBX0Yapw3Z3tFSsKFRbsVa + jMVwwOcKBjG8Kfa65S5Z2CVKWcd3jBx5HPrPT4+oxxAbqwzxDzdXc8E4fc7VLRDvnUo0n9RIqHZuxtn1 + 22tGBypyWHyPqJj2vbAanFxRIRmGGXfC+h9509O+pVKSPkpTYBgzDY/UTbDPjzdlvh9WXk92Tx/g54o1 + MVK5o1x6sWRh7DyMwK3Yy9RXK1bckdAWIyPqJ2d1fW1OkRUOtSMtpI2HrnoJw/afjVWu/cW1zUekBpKj + CgnPt1nP1HabXy0cuGIK+7m69M0qr0mIypKnByMiOswGr00JABYDJOw3lbqY7odxPO/dlx4vnd6/cilb + 17G7pGmVDCialPDBgwwCzD0YD9Ztoo6zxBLuutNqSVXFNiCygnBx02noXY/tI14q2nEXAqYC0qp5dWPI + n1nXxc343q9L1Qum6915W0yB10zA7Q9p6/C6yoLNtQcHUTqDD2YecyuE9rO84rUS4QUqFZxgBs92fn6G + anUA6unPquIdLdgy75h3Y5ukp1uM8PpVzQqXVIVB1Vj0+Zl2nVWrTV6ZD02GQynIInRhy93png45+mRE + KwceQA0xzsdLafOQVq9Kiuaz06SNyhmYKM/WWZ/rU9uJLjEiwW8olC8trh2FC4pVaijUQpDESUkA4JGp + uUb9YzkPY2f/AFTY0ek+soUGrLxK5pVTmkwFSkuMY8iP6TI7W0eJWdape2dxUNBsZVT0x0+Y95zH8e4i + t61z32Kh5cY2A+Uwy6oxdI3FnymDpL0giGJytTtkooUu6oA1ThqoY4A+U6jh9wL6zFwgKJUGVBIY/tNM + Oc5HQ18fKZqDK/SJpk2naM0mdG7VwmYaNC7yfTtE0Rj4jsoyB0jcZkjDm5YYhvU+yj0nTADHi8Mk0/h8 + MNIAXzxDcuybpigZ2ihTqziOC4/9oDTqaKf4omNXvJMYiBeZtMNxqaFzqgF9RHgeIw07w3XqQDmjcLHq + uNUCv5ICS7Zij2jgI9RDH1huYTV69BpgV9BHKsMbcsW5BNxDEcFHxQ0yHOYTcQ06Y4Ls2qAGRDvnqaoE + UKNMXAgFxL3LU3AxFwGEeq6vSGnTIMoMJulYafxYjlHnADIl7js3NVYaRpjtO0NG3WLujtm6YAe0do26 + wx7xbYCaAeaGmOxDHvK3GpqrDB+KOC+8OsojTNC41RYuIafyxMahFzBQY4DAgAcSICAuYKpj1UR6L7Qq + CjCEyRULbsOWPRdUkVfwxb01mFAifhkqr9ZKi+LeCiZZ5trhgTFX2i6fZpJiNwZiKtt2E3AiMp6x7KNM + NMvcBROu/lG6ZPpz5RrLF36km6JhBhJFUQamekO/Uvro4RxUiN0+0sz3Jw1L0iaoee0N492eo1Q1QKn4 + TDBw0e5zcwVuXrDTpESOILYhqiNF1QDct6gkQZohMYxgFm5y58X4ox4sQywoXc1iYZMG31GCywpWPh3g + ufWGnZo4CN1qU3Edv6Q0wCldUzZ6kir+aGnaNaEQ2I3p4YfFFiat3J8BvTc2qpUBFSlsWOd8ec0QdW8z + rPidtcGoLcojA5OoBc58xC64olIijbjvrluUKDkD3JnTw8poV3eB6tEHbPWCsNLFj5ync3gt7cPXyamM + 6VGon1x7D1lSjxBb7WKlxSpUiN6QbBb5t/pLz58cfC1U1eo/EWpi3QG2ptqZmbT3hB6L7ZmiGLBi+A3m + vixILWrRqDFBkenTAUhTkD0EnJDSuMP/AK3vcwkgF/FAbxWUy11V2yb4YZ+U5Pjlvd3nEimmmXVNQ7vy + HufWdbjlbVsolOtRqlrju3CNWCqGxqIAGJydTxfYapcNXnrKVJB6iMm7xyypULilRoBnqEZZm3LEn0lO + 84dWs6FCrXwGqZwvmMTws+FxUlZ0IQE54iKJvWvBWuLCnXpVQSwOUI8wemZkVaTUajJUBDKcFSN5s8Ti + GSeGIoXNagSaLsjHrg9Y2rVetUY1CSx6ljIYSNutREIQkRHWEcOk1OCcO+/3Do7tTpqupmAz8pqYKgRZ + USbfGOD1bFFcsHpE6QwGDn3mLDkxcHST1JCEJlKMnGIQXrLFSg9NUZwQrDIPqJelNxV4CEs2gpNcUxXJ + FEkBiOoEMTbqLsbKraWfCuHV61akaisxKnmIVsg7ddpm8SrWNzTNtw23erVJLBgmN/P3l1+D8PqcOuTa + urgL3isGyQQN1mXdUzwS6o1rKujtUpawCMlQR5+U7MlMAQ1NHVjVqT0KrJWUpUBwykYIleWby6q3Vw1a + uddRupxiVpxutupRCEJERCEIREIS3ZVRb3VOsyK6owYqwyDGG3UWp2XVm4qqJSSrUIOlmGoU/wA2POeh + UlZV5z3jqPF4czzvhHFP4bd16qKCKgYY81O+J2/B+K295bUy9ZErkYIYhWyOs9PpM8cBLo4delsntFx2 + rQ720NqUZkwGY+vmMeXpMmh2nvEtu6Lh2UcrsMn5H1+c6zjNrwq8Vqt7VpBkGnIqgEeg2nnHEKNKjdtS + tqorUwcBwMZmPPyZjvfiOVR3urVWNRmZjlmJJMjhCcNzxCLg/SAXMInortkKCcb7CDgrUIIww2M0OIWL + 2ApBnBarSDjSdwD5ETLlJrwzR9MufebXCOM1+GM5o9HBUq/hz5HHtMSEeK4OyBT1Xbm6rXBc1XYliWIz + tmWOD21pcVmS8rvRUjC1AMgH39pmNiX0tH+5NdjBphtJ09VONsj0MZkrtqMvO27TgPZSgVN3fnXTUkqq + kYZR5n2PWcnx+4W64tc1bdQlItyhRjYbTq+EcR4VS4HQt3fuqlbFKrhsEHzJbyH+s4+/tqtO+r0qaOwV + jgDfA8jt7S+UANWuaaDGoCmWXIBwOpnSdmMVba5tK4xbVMYqkbUquOU58s9JT4BcikLi0eklRLpRTyxC + 4Odjk9J0fZrhl393q0makLfvT5hskbeHz+sfFh3pqOLHyJYvaCvxClTp2N1cLVo4FQHqR7ZO5xOd3HTY + z0W87NG6rrWu7h30jSKajThQdgrbzm+0vDrfhzUBaFwWB1Kx3BB2jz4XDaxycWRvJsBqhZtRJLE7knrP + Qux/HaNWhSsKwZaq8qnyIH9DOACEqxUEgYywGwjaVR6TKabEODkEHBBmeGbxuyji5cuN2XsN/wARt7Gi + atdwFD6djkk+gHnOS7W8UteJ2CUrS4Q92dXdMhBJ6bH/ACnLVburVtVoVOcKSaRJ3GTv88yiZrl1DmIW + ufVZOyntrqta1lq0HNOopyGU4Iluvxe7rVletcu5XODkjGeuJmfISagUFRTWB0ZGsA4JGd5iZp43Ymae + m9Q7Mj/4JSq1yTqySzbjST7+UxO0fZujUSpd8PABHM1JSMY9R/pI7jtJSo8MShYWh7rSKatV3A9RjznL + Wd/c2tUvbVWRiCpGcgj0xNs+U0DdHJyiAk/hHDK/ErrurcbjmLN0UepnoHZ3g54WhzcO7HbSpKgD5Hzn + B8G4nV4Ze9/TQFiCpDbAgzv7Tjdnc2TXHeoiqupl6kH0x5zTpuw8tXT9h5bUENs+CMtay3FtTrUzlagD + Ax/Ms9Edmy79ibIC+bYgYnwQyYQsnww2h8Mdv5xzjSPhjSv5I7VvAbwGWpoX8kcoGObMFXxQ0y9xqCAx + 89MFA+GAx89o6G41N0xcCK3RdusSZ7jURBnS2qLDAkjUERF/LKt3xC1smP3gsrAAk6WYY+eMTMrdrOF0 + zhTVfP4V/wBZOfKY+2zyzD26t/HK3WA5l6GY9hx+wvGwtYoxOAtQYyAOuZrUnSqqvTKPTPRlbIhjyGXp + qwRPDudpPwwxzR2mAHNHuvsjTGqv5I+IPEY91ajT7Q0jHSCjMMcnWLc9Rpgo+sfo94mkiG59k3TAflj9 + O0cijMNsdlFphp1CP0/ihpj7pdk3TBVkmIe0Bl2UarBFOOhkoXeGkxjHZRKpi6ZIixcR/ZScdEqnMeF3 + 5o7T5xyrDv3V2UZWKi83Tlj9Eci5jWOyjRZIqj5R6U/KLpXHXmkOW6zDxIg3jkUMYIuNJkidOkncBGkK + rZhpDekOq4gFPSQ5jaYCQvKYMp1RyD1h1mQ+bT1R4gRiPxD4Wl71Gt0UWPZcSNhABaPJCjENMWIVKynA + SXewRtGMI8w0yQZjui0jMMbcxj8RGEeklRnMN44iJgSxkkw+GJJGQYkenZjKKIOIj+GDQjHVk+JnwRuq + PI8UYucc0s80M3yjusWNMsQkxEG8VOkXBj3TN/eOUecNMWTMiJ0ixmf5Y2NziRGt84DmGY3VtIYj6xN4 + rZVY3J6yNxeMjpOttLpbaiQtutquBmo1JmJ+g/zMwqXDqr8P++LugbSygbj3naPQ760RKj1AtRVU6SFz + tMekwXbeHYtTiNvbLUHe/eKrJg1lO+D8+nyEwX0Vrpvu6MlLIGM5IHuZ01fg9qabUKIHfnmDMdRC53OJ + PbcHpWq1O7qulRhgsCF/bpNHh5c036Ip+FUKNna1EV3CKdR7wjIPrLVJw6sVBCZ2ZvMeszKNCjXoJXqB + jVB01dRJyQd/P13mvkKGLbIo3ZuUCdvEoa9BVhCcwgeXzzIku6BbFMl2HUqCw/WO75GbGcN+GoCs17j+ + 2hPfGrrzHpIkrI1Nyr0yikqzZ3XHrM/j9Z7agtxQOGVtJB6FSMYM42vXq1q1RycFiWYA7Ti5ur+t1Qvm + 7DhSrdXVzeOAVLd3SJHhA8xJOKcNTiAppUJTSeq820rcH4lZUOFUEqVkR1B1LvnOZsUai1kV1IKkZVh5 + iPi7OQ0x7uR43wVbJadWi5NNjpII3Bjn7P1xbaw6mpjUaeN/1nU16QrqgYZVWDAe4MkddW8X+LBXxGrh + aFze8M2UFFbfSy7GaNxe0OKWy0qlFEufCrEhQPr/AJTo69utemwqoGBHmNU5/iHASpL2Ryv4Sdx8jOfl + 6fLAQdktNiXVtVt6xp1RggauuxHtIntay0ErshFJjgNJnZ6dZRdioQpwVYkHHpOnt7iz4jZNa0yKbsul + abeRHQj1nBjxCoumLjkQu6hQST0A6mbdtwU3VklalUxkHKsN8j09pXp2Va34rSokKaqkMMHYjrnM7NFC + rhVCL5Ko6Tq6XpTkXuIDdzfDOBP95BvRimFDBQfF7ToqFKjSGKdJEwMFlGNpJupxjE5/iV7Wv7j7pw4k + 0/iYbZ+vpO368eE8G2DxJx++FzotLYFyGy+kZBI8hOculZazCpS7tuunGMTt+G8OpWSYUA1CN2I3M53t + LTccVqOQeYBgfp/2nD1XE6+xfLCNhQhNzgtgLqzvHqYBK6UZjgK3WcGOKuiViruZ3lLh1pU4JaC9HLSp + as6sYzuZxZUUK2Gw6g76TkH5Gat1f3/EwqU6TpQbChUBwcdMnznVxawHZtZiFRrXCGgaK01C6y+cbn0G + fTEzpYuaFW3rNSqjDL1GekrzmyXfmVMlUoToYjIwcHEa7lzkklum8jhF3utREIQkRPWdTc2nB1t7SsHK + Z8VMEknA3HsczlI7M0wzARJjqWtg1CVBC52B64kcISPcohCEUR5y9YVko3SNVQtTB3VTpJHpmUZZo1Db + 1KdVNmUhx8wZeLpmOndJcVNVWoUBSmSSq5zgZ6Sa14Xe3IU0KFV1Y6QwQ4M7PhV7w3jFSnSurOkLtRkh + kGGI64I/pOlLpRpa3KpTUfFyqonXxcRyG12XThxGflbzB+zvFEpu72dQIoySSJMOzHFDQaq1EDADBc85 + HsJ2vHOLUrbh7VbS7ohqZBVSQwqY6ricxbdtbta6m4Sk9LzVRpP6yMsOLF0tLhiOlrnZezNfh1/b3FM6 + lXkFRBgEg9MjOYW3Y8i6pNUZ3tu67wjADavw/rL3BO0ScR44tFKTItVMDUd8jJz+k6ipWWlsoL1Magqj + J/7TbDDDINXbxcPFyBcJxc29hxAvxHh1SpUcEgtVChsbDlGwAxKd9fcHveGVESyS1uxgoV3B9sze7X8H + vuJ1KdWmRhcKtPzGepYzha1nVpVKqVMU6lLOQxx08hMOXFwXx4bj5hxUCoRVJk9qKTV0FZylEnBYDJAm + ueEpcajw2sLpVwxGkhwPkev0mGGC3OC2BgywUqrRywZabdNjhsToeIPw2nwxbYb3NL4lXAY53BM581na + mqM7lQcgE7AysztdQmqtL9g1ZawS3qlKlXkzqwDnyMoQEzGKxWpPQrMjkZU4ODneejdnWoXvCaZ0aKlP + lLKdJyPPaeZg77zt+w91jv6DB9TANkDI223M6ulzDPTb9O6bp9VahqLuatLzbTzL/rMftXY/xO3t6lsN + dYvpDL5DBJm94R05pWcC1q96hIpsdNVfJSejf6z1M+MyEbtzNmn1Y9rwsW3Ze7DqlWrUUsSvNnHTHynG + 21hc3VKu9tTLpRUPV09QP856bYlwtSk2CtNmXHqM5/8AVKN5TXhPBrx6QAyrNyjzY7fpOTl6U0PoCw5e + IQfQXnt9aG1ZQaiVWKh2KHUBnyPvKHWOdsmN6TzXW7idU3dvgnBwDpJxtLPDeH1+I1+5twDUwW3OBgSA + V6q06iKxCVMagOhx0ljhV4bG9pXCkjSdRx5+0eAb8xhrfm6Cy4NxWva1+Hugo4YVdNQHc9NiNvpI7zsw + aRSlb1xWuNy4AwtNcdSZFxntNXvTTFoXt6YGkqG6n1kHDuJhFNK41pTfAZqL4Y+7Z2M13j6t9471X+H2 + tDhN27XK6zSpBnVgMHUcbA+xnPcQQUr6uKIZKes6VbYgZ2mxxytb3N2EW7dzSolu9Y57w9QB6TOuLoV/ + 7a7He1Gpd2qjlIIACk+u0nLXoozT0Wp2R4w1repb1GJoVToweisTsRPQTkNiebXXDqVO24fdWRqHvjob + V8NQHpmejW6utCmKhzUCrqb3xvOzpc3SN3dJvMRpMe8MfKET6zq23b2SQT80X2gBkR71ARp3aLFUbQAL + Q7q+ybjzgI5QY5V/EId8amrDEdp0++Y3YbtJ+yj/AKkKN4Y5pFa3FO7o97TOaeSFOjzBwZL7yhE3B5Nk + 7TGgQ8ou3SA7r1U+IcOt75cVxVI/KSoPzHSUKPZbhaMS1F2+bHE2xHAbc0yy4zJ2lDxYvlLGpcC4ct3W + RrRNLKGC77bkbTRqaLHh9R6dHFOkNWkDTsJTF73vGalvbn+1WkFLMMgb5J/cS991pMrLWzVZhuzEtmLA + NPaU4YhvRV7XiljdMqUblCxGQCcH5YMujwTleM9lBVZqvDKvdHr3TdM+x8pb7OXr0UXh3EQ1O5Twk+Y+ + frM8c8h0lGHIj2pb7eHMcnL4ooXyXEco9pvdWpvUYjgMQ2EXzzD3XqQY5jF0wxtiAEneo0RjbpAflERY + umXuNEYMFXbmijOMrDfzkbY1GnaCiOhDbVqAMxQo+KJFBld8AQF2yvhjwurrG5/wx2r3kLARD6Q1RoZc + 80YtKFKBtBF9hGo3lFVh0h3MaJQN49VHlGBsRwMlW1AnKunxR4EjDD4pIrfiMW2AJ2IYiahGq0iDUrdD + G5iMwxDUse6/EuBEVvFBjDOG0RUEM22IEb8vhiwmmFUzzjc+UkOI1gIzzZJqSNPh6x2PlCaCeqUm6Ykd + 6xsKPMj+kasDzat44D80NEu+YYw+Ex5xzRjemJQajcmknwxIsBjH5pdmu5D4IzbmEcfBDSsnepTMRNPn + jmjlxqiMIt06iEIS9xqNoQjc+0NxqUxvmxit4IkNxqb8UG+cWIZMtRp1K0aq7Zjh0/LG6ffpCNXjwrVV + UqjsKeclQTialHtBe06C0iVcjozDcCZVd2q1WeocsxydsSAHE8jHlywfCl4WrXPF7lr5bxiocDTgDAI9 + J11C4F9bUzSPLUXUfZR1H6zzwyejdVqJAp1XUDyViJ1cPV5YL3OxmeLtOJAW9NqtMCkrDSWxtn83zmG/ + F7hHOQTkLoDEsux6gHrmN4XcXd/XW3rVldQQxWrvnHlNbtJw5rizWvT60l3VRtjzIm2Wbyjlixuxzxu7 + qXy1Q5pKNtK7gDz2850fDb+lepUTWlVhuQV0lh6qJzD8Hrjh33vB65K+eD0Ml7PWqVr1qFYOjkEhlJBU + iZ8OfLigkxbW49cW9G1qW6OXYj/ltzY98+U4w9Z0HaLh9OyWg9NqhZy2dRyTjzmB5THqs3PJEh9zZ03Z + S4rG77nLmhpJ0sdh6Tmx1nadmqtkaTLRUUrhiMhtyfl7R9IbzHcHu2z4dtojCKN15fDBsYnv+rTUaeVf + eI2ObbmztgxW/LEbbzH6yfEJU72xoXinvwC3kw2I+s5zinBa1krtRzVpDmDDqPmP851o9c7x2k4zOTl4 + cM/Ppo1u4y04tVpVqBuB3q0gVBPUA+WfOdVZ3VK8p6reqHHmDsR9JgcftbDUXSutOud9KjIY/IdJhULm + vatroOyN0JBnJhzZcCnskOrquK3j16wsbLeux0sV8h85f4Vw5LKjhTrqNhi3r/2nK8Huq5u6gS4Sk1Tr + Uq7k+2Z0H8JuKyZub6q/sowJtw8zyK6g8124uqFsua1ZEX0J3/wznuM3FK/vaDWqNWRRuACM79JspwWz + Vsuju3qWJl2nRSiuKYRFx4VAWdGXFlymnQV6W5ejwCvcEuwS2pk5CkkkTRt+z9CngVqtWqg+HOkTbA8W + qKBviLDpMePzrbMwKjV4Xa1KBpLQpimxDHSN/wDFLdGmKNJQpPdqP2kmIjqGVg3hYYPyjy4sTyHmDC89 + 4nX+88Qr1lGFY7fLpKE6XtILKlXp0LelipS5SwGMjyHz95zU8PlxTJFs00xCEJhKIQhCIhCEInYyMwXJ + IA89pfp3KrYVbepTDFjqDjqD7zOloEaug4q1uvDqFvQNM1UOp2UHOcb5M5+EJK7ZrukZGABIOk9DjrGT + peDihfWX3O5OGolqlKoDvvtj9d5kXdlWt2U1FIViQpO2cHE1cEBPIxrRujs7mra3K16DFKinUCJ1tzxS + 941YVqdpoRQAKqFuZifMe049lNNiCpDbcpE6nh/A69KhSvLC6Q1SuoKwx1G4l8Pc7A8V4ZukLnb6za3C + saqOW1cqtkrj1lCXb0BahV9XeAlXzjGc74xKUyy8KUPuuWNzVs7qncWx0VaZ1Kes6Cy7UcQt2U1yHpu4 + ZmKjWVzuAZl8Ev6NhXqVa1uldimlA3QHPUzYv+P2PEbZKN3aMGAJDU38Lew/1mnHoN702mGbibG6mlxm + 3vqjUrFw9QczNUGwHr7zL45QtLmyrrVroK6HVmowU6gM4x7icNbXVW1rd7buyONgVO8ZXuatxWerWcvU + JyWPUzbLqBx0m2efM5HmrnrNqxetwutbXQqoQ+5VTk4zuCJiQnJjlp2WQ6d2rxu+S9vGq06IpK3kDn6n + 3mXEhBVVYXbuIQm2lnRo8Np3FxqL1tSKoONJGME+0kFgN2J0l2zu61tWD0HanUGwZTiUsQHWVio7Jil6 + zw2+pVeHW1evVTNRRljsCfMe0nFWhXV0WrSdWBUqpDbTmezF9b1OHVrW/akKWScE4wD1/wC2Jy3EGSlf + VhZ1XNJTgMTgkT0P9XZiN1vLoG9CtrlLGyvK10xC0arKcnx4Axj58s5fivGG4hweqHIytcMozvpIOB74 + ImPdcTr3FoLaoxNMP3mSdycYmdv0nPy9S5miy5OZyNE2EJesrOtd11o0F1u2cDOM4nKG7AN1UdI8AkAN + kKem3WbnBuDd9XqU781bdwjGkWAUFh1Bz7S52kvLCpYW1tad3mmgOwyenTM0xwdKtRg6VbkGjges3OAc + HfijM5fu7ekM1Xx+w98TJrgU6rBTlFJAPqMydIbp0hur6oaoQ0yJV1LiqqrSFVhTVtQXJwD649Z6V2d4 + pQvrCinfJ94VApVjvkefvPLApHqJqcDvv4df06+gVFGcqfQ7be86OHleN83T0/K8b59N6npgfSMtay3F + CnWokmnUAIPtJ1Xbmnpj3Gy9rDWeOyj0yQDAi4iafaEwjTtK17e0rIKai1TTJALBcquT1LeUtopxKVRb + +rWfS9GlSU7ZBJI/NuAIst68RnsPFT4t2isrFlGe+YndaZzgepP+UybvtpSNKoLag2sghWJC4PrgSxxL + sqLvvaz1/wDiCCwVaIUE/KcTT4ZdNW0Ck5JJQYB3I8pxZvKOrzuXPlxda8NInG7+nSWklxVWmG1AavON + /i98tWpV7+rrqAqx1dQZ1/D+x9B7L/i9dK5JLcpDAegx5zH7R9njw4U6luKtSlp5mI8J+nQTJx5Q22GW + HKG26Dg3FrOx4NaU7moEONRUBmO5O5x6zXsuI297gW7u74ycgqB9SJx/Zfs/cV8X1SqaKA8o05JHrv5T + sXa5tgpZfvNMddICsB646H6Tq4XNPJdnTuaGzRWlU45YaYy2r0rinrokOgOD8JB9GHkY8r+GdJdg79QB + tILyuLO2atUGcDYeZJ6AfMyyomVvfcVLsA9pbHAz0NX/ADwP3hls8Fnnlo0e6xwexNstSvXUPd1j3lVs + eZ+EewmgMYbVCLgQxANEYAEgGZBcWNCvVV6lJHqDwsRuJPGIyNVZFOWpgMfQe0E3aeHw0gHhAHKOWGPF + BB4oAeLVDVZGmAEVV0nmhgZi1qJNO8AuIpgIJue4gogojk6ydRuF5VhCA/NL1G5fhjN9UdGw1G4zAMIj + GLF2kb1Oz4oKc9IzVq+KG69Idsd8/VHA5kWefpF2gEd8/VtmKjbZkYx5R2WjTcb1SK3qYqv5LItUM+8R + hHfThj6wWoPImQqx84ao+waO9ptW8NUi1Ryt7w+uO+ezZVoKYzX7wLY84vrK/sZ7Nv1hrkROIKxh9ZT9 + lLrjg3LnEiy0NX4oGEfZP1eKGrxbyLV4oK2zaozCO+l1aYKwEiDQziPs1Lc/UOaJqjFaDE+sNR3zyd2j + NW8TLRpP5ZYaslnE/ljBurHEX9YgwY5bljWi9NWow/Qx6jckMR20bF2ymaYrfOHXVE9ZCaib/NDIisDG + r645ovVUpbENUCx+GG+PHHuWpv8ANEhq8/OENxqTVAsMNqhvlo0xbp1IDGu2D1joxgIhjVyb8CsNJbQw + yOoY7e85O9pUqVwyUS5pg7Mw0k/SegI2A2x6TD4xwmtfXSVaBQDGkszYAx0xK6zpBN8ZfPjcdF852nBu + Ciz7x7gI9XUVHmoHrMXjPDK9C9aqtIClVY6Au4+U4Muj5MAUq3ZSOabAoSCOjA4MvUOLX1HIWuzI2xDc + wP6y7S7PXTpTZDSDMMsrEgqfQytW4BxCln+x1qPNSDJOLlPIM7Us+03RLujt60/9DNmzvbW4us0GR2Ya + l+Eg+Yx+k4erZ3FInXQqDHqpkCO9NwUJUg7HoRNDny407iY6uo7VUDVuqQDlqhBAQDYL6ylxjg4seH0X + BL1WbDkdBtKllxWvbXRruBWqFdGahJIEnfjT1hVS7pCsrkEKDpAA8tvKTnnjyKvhYUaPs6tvU4pTp3Ch + 0YFQrdMzobzgaJWp1+HEJUUhipJx9GnJJXK3grUkCgHIUZIHtNd+0F8RoQUg3qqnMrhyARKsE15uuTLK + rsAGI3x6xHYKGNQhFHxMdM48cS4xdPopmrqI6KMR78F4lWp1Kty+FVS2liSTj2nX/odeBau/+FuXXGrG + hnNcOw8qYzKY7S2jbaKo+glLs9we3vrZnrmoSH0kA4AmwnZ+wBytFzjyLGGOfLn5NAyBfNmV+0hLEWlA + lm6Goc/sJU7ji3FDmoXFM/iOlR9J1dtaUKA/saFJPzKN/wBZLpz4pf05Zec2r6l9tgWXZyku9y5d/QbD + 9es1/uVv3BotRTuyOmJZAHKMmO0jxftNTixDWqjiC5bifZs0y1WxOtevdnr9DKPDuM3XDmalVBdRylW6 + r8j5Tugp5tUzON8LS+oMERBXXGGPL9DMMuncd5cbpoeJPJR8P4xRvq9OjRpOGIySzBcfL1mjjIwZxtzw + C8tUFWniqoGommdxHWnHLm15a470DlK1Mgj6xYdU4+OQ0wOvDdfFVfPGGmZw3jNtenGRSqHqrHGfkZra + gRlRy+TLOzDqMcjY1gPqYOseFJ1Y/wDaCLvnMXyYR7qMUsDiXADcV2rU65GVLFWyxJx6+8w7i3Xhwdax + p1blgV0jcU8+ZPrO4qU9asCXRSNOpTgj5Gef8YoG24jWoks+lurdT855XV8Zj5Dy2WYHmzYTS4VYVb64 + CURkDBZvQZ6y32ks6VhXoUqAI/sgSSepyd5xHEotnp1uwoQhMZRLtjSFa6pIRyF1U/ImUhLNCq9CvTqU + /EpDD5iXigm4Lo7/AILSocRU0xotFAJJJ3OTsD67TnLkh69RkXFMsSo9BmTXd7WuatQuSiu2o0wTpB+U + oSs0XwaJsQhCZSuo7HW5a6auHRFUFSpO5yJ0vEuHUr5qRqEBabasY6jzE4Hh19VsK/fUApOMEMMjE7jg + N+eI2rNU0CopwQP2M9Xosscse1tuNE1ZPaTg1e4u61zQANMKCV88jbAE1Oy71W4TTFQjuwxUaeuPPM1k + 9f6iZN5xS24Vq0LrWoxKrTYYDeeVztNnix4slXQ1OJg7uf7V8M+63Iq0wBQq9API+Y/zmSKCNaPV7wLU + UgFGGMg+Yl3i3G6/EaC0iq0lU6jp8zKFzc1boqamksoxqACk/P1nlcqOalkorqpQhCY0RCEIREBCAgQV + u4tatCjSqMAFqglSD1EqS7Stqta2qVgM0qWAxJ6ZMc967WC2ummKatqyE5ifcy9frOoSQ1XZAhZigOQu + dhI4SJTppcBoJdcVt6NUE06jhSoOMzNlu2qva10qgkMrBhg46GVigi1CbN292u4XVs7oVaVIi0wqqw6A + +hnMMs6Tj3aQ8RsKVuKZToapY5yR0x7TL4RUsadWp/EaT1KboQunqD6y89L4Z5gvhsuEe+MsFOVztGTJ + oiWKVV6Th6ZKsOhU4IleTLTLZKgkAZOB0Eomf+TnrO5Yuxdickkk5kJYmGCWmlwzhtfiFfurcZfBYgnA + AEYL4qBXRQWt7XtO87h2TvFKMAdiDKjb7zd4zwNuF0aTVqqFmOCuMFff3EwdMETwyyE8MvWaXB7OreXi + UqKK7E6sHpgdc+0z9Ms2N1VsrqnXotiop1AwxQTc8NCLej8Q7O2VxaVSqClXKjDKdhgen0nJ9l+G077i + FVSEeioKkNsSCcAj3ne8Gvl4jw6nXUgsy4ZVHQ+YnOdiqtKlxS+tnC96SSr+ZAJyP851OAonpu/LDFRP + TdFwezex4fTt2IdaZKhl9M5GfeXR0x1ijfVsI4eCd2ABovQwDDECaq58o5Yv8ogOXaGrSP5Yb+ohjfMM + ecJxpztGIoXwoBjw4EHqorqHZA56KzBSY4kKy5xvEOLQ9rAHN1jHpiorhgDTYYIYZBHpHw84wjVGAFCh + EAUDSFXoohpyOsd9IKMBjDUVO5tytf71ajFWmN18qi+h9/QyejVFalTemc02GoSRQZg8Tv6/B7uqlvSS + tScGtpBwaZ6Ngemd4skw8thnmYebT4ncGlSp0rfBu6x00l9PUn2A3k1lbpbW4o08lVG7HqT5k/MzmOFd + oab3zV79WpMygUiqkhV67ee56mbdtxijdajaUjVUHGrUqn9CcycMjJ3unDIzd7tT2hKq3RUL31CrSz8W + NQ/UTku0vaS5t+JVKFhVQKqBcgA4bqSD6+UOTlMCOXlOM3N7S9ormlf1LW2xT7mr/wA1TknbpN3glROH + cNV+IXNJalY96dRCnffmbqZ5hXqtVqNUYksTkk9SY1qhZsuWPuTmcB1CKt5+HVOKt7FZ8St7xVNKuj5J + VdJ3bHU464l1cdJ5h2LYLxikWrrSQA9fiztp+s9PU7Tu4cnkNt6PT8zyG0njeJAbxu/wma6ukZyiDDxQ + 6+cXG3LDUbkEFGPOC/OGeXDRBLcQjc/hiapU9wxh8EInSLUtywYw1eWIat8rFCyRennDzY5iR6jcufOC + cwiLBYgjcoj8/KMBGnENUrTG4O8VRtE28iIuRpxDUbgbR0bvAfD5ysPdmrPRfWENWoxU21S/EbgfmiHf + xQ8+sQyfGo2x59YZPrGqY5dtUNEbYyfWNxvrhsInwx+I3Pz/AIo3MRzzQLZ84tQO41bRVMasXVDUbYZj + DVt0MCdokAIVl1GGqIsUZgFG9xqhEgsvUblyMRIQzJjcLD+aN1QErc4b1WJqHxRYjGQ+YkPgjPKP3iGR + qojB0t06RvVWGuOMb4m5ZMam45eYwyI7O2I08xhEEmGlY34YH+kNSggekYsdGvvqhqNWKy6R0ginB1eE + xxORHIvLnM9b1fPajG3WMemGVSwzpOoavI+sk5AYA5XOYn/2oJAThh0jdgOWOZh0jEBbygYTJ+7qwydJ + HwzlOPcLo2lLv0quSzYCtg59d51OCBhvDK3ErNby1qK6oamCqFuob5zk6rhHFA8xedQli5oPQqMlQEVF + OCplefPZ4OOWmVbs7qtaP3tFyjfLIM6Hh/aNMKL2ggb8dNR+4mbZXtqwWhf0EZOgqKNJHzx1l677Pioo + q2VbKsNQDf6zq4cUNjuYp6uks72hdrm3qoV8wDpI+kldQ1NwRyEFTPPbi3ubGthw1Jh0IP8AQiXbXtBf + UE0O4qp6VBmdWPUB4yNVGb6bo+FcMfh92xpvqoMpz65zt0mso5cTnrDtNRcBbsGkfxKMibNvfW90uaFd + H/Lq0n9J0cXLxa0Ntx5mtVhgFify5i6SRjr+aOTGr8013v1awg36RyYjdO+Y7o0qAj6xrL7RFIi8zR7q + hOVvzSpecMtrwH7xRV6h+IDB/US6oEAfac+eJn4SnsE83JXvZhqYZ7KrqA8n2P0My6dxf8MqaM1KTA+F + un7z0F21cole5taNwrCuiOuOjDp8pjl0v7g6bN4v3GxeGdpKFdgl2q0nPxeR/wBJvIwampVwVPRlOoGc + 3xLs0GybF8N+Fun0Mx0q8Q4PVwTUpAHwncH/ACk483JxeMjZT3uPhu+VdPimQeBWtWs9a4d6tRmLNqOA + f0lThvaVWwL1dDfiUah9R5ToKFejXUGg9MqfNTmbfbx8oQJnVeH8Lo2FSqaKlu8IwG5sAeU57tjSK3S1 + WLcyhQMbYHv6zr9Od5Bf29C4tmW5QGl4izHGn3z5RcvFi4aIyw8avLYS1f06NO5qLb1DVpA7MRjMqzxc + zTq54hCEiIhCEIiEIQiUTr+yV5aI/c1FFKv8NRTjI9D7zj4qkibcXI8aJPF07vRuLcZpWdnUNCqHqAmm + NJ1AH3nn9VzUqMXJLEkk+pjNR6EnB6xqy+bmeV21ObmzYQhOaiIQhCIhCEIiEIQi6jh9/aUuzVzQqMTc + VS2FUb+WCTOZ9Yp2MZLclAmuwiEISJRCEIRAOIZMIaYRPhjT1EntSi3FN6i66auCVzjIz0nY9prGjX4V + bXdrbmktPCsCMEKemfr5+81wwcxbXDByFLj69vVoMgqIQWUOPkek6TsXcol3WtrhEZLlNIZh574H1mre + 8GpcasuH3FsVpgUhTJ9ABt9c7SHsrwVre+uVv6ALKB3RYagd9yJrhwomvTa4cLs16atwPg1SlxOpRvbF + 3o10KggdBnIOfLp852NO3tOHUHq06SUqaruyqFOB6y14dvhX8MY9NKtKolQB0ZSpUjORO04DjHXlu44D + A8e7zDtNxE8U4jUrqSaS8tIYxhZX4JYHil7StkOjO5b8KjqZs8S7KXtJybYCrSJwMHBA8s5lOtYXnZu/ + tq5KGp4hhttuoM4MsMh2lwZ4u1SzuL2otOI3FCm5dKblQT1IEdwnh54g1wqnD0qRqBcZzjynW3nALfjV + qt9w091Vqkse8YkE+Y9jmc3xa2fgt61CjXfvO6HelTjJPUfKQji7Tw2eWKO9S8DvlpJUt7mtcUqFQjJp + NjB9SvnIb0LY8R/4S7FXGGWquVIP+syc+KAi71NS+x0F3HAe2JphaHFAWXoKw3I+Y8529Cqlamr0yDTY + ZVgdQInlfG6NtRtrI2ocVKtEVKoJyMn/ANjHcM7QX1harb2zJpBLDUMkEmdPF1Dg6fJdXF1bg6b1bb1l + XiVybSjrp0Ktw+cYpgMf/aebjtRxKnf/AHguhbTp0leUj5Q4j2lvr0HvSBTK6e7XIUe/XrNc+qO10W71 + uGnVs3XHeONeC3o00psTqFMKCQPcx/GanaJbOkld0C1iKeKWMsT5HH+Uxuzt7fWVepXoWz3KqGU5BwM9 + TkfKbHD+2Gqqn8VoB9LahUp9R5dDMMcxPK2WPJs8qbqFp2b4zXqKatM0sndqh3H+c6uz4HUoigzX1Vqi + EkhiHBJGDgH/ADlqw47w6+C9zd09XoTpb95ooQ41qQ6/iU6hOjAxxNjdXFjiGx3YvFru+4TbNcAUrmgD + urIVYD122IkHCe1djeUm+9OltVB6MdiPYznO0/HKovKtOyqulPBpuhYFSdwSB5TkVJHSY58yPhuPk6rL + HJMW9fsON2N7Wr0qFXdRqLEYBUdSPWWUuhUrrRak6VGGpQ2Fyo6kTyGzuHta9Osp3pkMPfBnSXPaYVUW + qlEpfrV1d6SCAuCNA9sGPHqtnm0w6rZ5u1q1w5b+17q3U6WqdNR8wreXzmPxmmbm6trfhug1CrGqQdu7 + OBueu+PnL78U4dZcKty9VCtSkGC4yW29Pn6znqFEoy31ncClfktUNADbBPTb2xNcs+4Atc8zIAuvtLel + QoqMA1MBWbHX2+XtIqllYNVXXRt+8bocBT9POR8Mvn4mrlSlGoDpakOZgfr5e8dd8Ho3Ok1yS9Mg6uhO + PLI3mnjXgtNGthR/catG51Wt46Bhg06vMPmMtkTgO1tI0uNXJON2B5BgHI8p2ycF4ZWrVKNNHLU8KwDn + AzuB1kF/2PtLnBo1qtFlGG1HIx9Zhy4uePgufmwc8fBeY9Ze4VZi+vaVBqqUgx3qN0EZf0Ut7qrTpvrR + WIDYxmbnY3ilKwu6lK7IFCoOpQEK3kZx4BsG4MMTuBus7PcL4VZkm1q07msvWp1I+XkJ0MrWrW9Ud7bm + kwI2KkHP6SwJ63GAaL2+DExNEsN4QVhiaWpO+sMtCEU4jcmDeHMTpERGTEaHnFjCW4Bh/NAbRGhqW520 + SH80SGtTGIQhDVMLFXxRIqcolBPcdBAdIMR7xFmmqZYsQRYaq3CmGPww/mgkgLPc4ZgYvwRBtAIiEI3M + HxJhW8Wwhq94gYNBuvLHONUXJiavxGH1hKB1baBz6csAeaJ4feES7fEYkb4vaOXwtJ8xA8EVfnEWHrGF + O4ir4oaok0lLy80ZAblonwxMS9POJ5sYHeNEmJ2qGqJCLU9y/BEjPOOG0JkZGYHMbnmg0mCCS0aIL84Z + 9Yqo3OryiRfrAty9DvJYJuraMaDYxEY8sCcuo/pEYjPWJqjdoKkrJAPtBW0jrHBc/BhojrpDap6XfeK4 + SMcnlhqPxRoXdtMcw2j3TqAYqHmjBHAgM0oY1SnGMRCurZvDGK0Cwz1x9JC7ICpccthccOrgga6a6gcb + 5H/acIhC1ASAcHoehnorqGWoH8LAqfrOHvrGpb16gKv3YbAcjY+m88nreJEQpSnuaAFa2ubenmnUAbQo + JAYHcTtEZmpoWADMAxVfIzM7OIo4bTqoCGLNlj6+00hsDOnpenMTdWBqV1DKyMA6N8LDUJnXnBbK5GVX + unPnT2z9JoLFHqw6Toz4ccjSV6LmK3ZmtTyaFdH9AwKmUK3BuI0WJ7hyB5qczuvhgc6dpx5dHi//ADT2 + F5/Tu721bC1q1Mj4SxEv0O0V2mkVBTqqPVcE/UTratFK4YVFR1PVWWU6nArBgR93Ab1DETJ4eXjfDMwf + xqNt2spMVFzQce6tn+s1rbjNjcbLcIhPkdj+8yK/ZaiQxo3DA+QYZH7THveCX1tqLUdaD4qe4/1kufLx + +U3PuzPd3qHK8pzn3jlGzbTz6w4pd2O1Ny1NfhYZH/abln2rpMuLqi4f8SHUP0M1w6sfD4bQ5R8N0oQK + PzRyjzlW1vre6Cm2rU3cjVpJwR9JdRcap0YcmOfktsPMzT5xuB7yfTtGlRnErdeii9pBd0kq0GFRUdQC + xVuktsPFGlRjpmRn5x1Z54buDvE4XW1GiatvUzjTjUuY17W/sdNegSaR3FWkcqfn/wB5Nx7hF3Tu6tan + Q/s2OR3QyB/pMhLi5oBkWrVRehUEiePmuK3Ina21Q7U3VOmUqolVsbMRg59/WZ1zxW8uValVrMabHUV6 + D/2mZ9IZEl5s00su5ZsIQmFEQhCERCEIREIQhEEEdYY3mrxfuXehVo40NSUtgY3GxlS2UNVRSRTUkAsR + kD3l686nqa9N1ALghSMgkdYr0KqU1qlSKTEhWI2OJscYvqXEa1pQQoFpDuzWYaQ3vjyEocTSlRrd1QrG + tTUAA5yCfPHpKcA9MIHqzYQhMpRCEIREIQhEQhCERDTCWaTimlRWpo+saQWG49xHFWhF+Ka/ALOlecRp + 0rpwlLcsWOM48oBt1MFdFkR4plidIJwMnAnU8E4Ra1+NXtjcFyFB7pqZ9+v6GX7/AIRS4dwX73TP9rSZ + qXtUDEgE/ITQwdLaGDrdxdJNdQJkDUQMnyzPSn7PcPrWVCg1LnVQBVp8pJ8znznn3DbU31z3IqojkcoY + 4BPpmd72WpX1stWjfrV0gA0skEDqCAZ0dLiKibG16fEVEub492aq8NK1aLmrQLAZIwQT0zO0eyNfg33a + uxeoaQUsx1HOPX5y7VVKqsKwR6fiKsNQ/eMr3NC3pKbmrTRfCGZtOZ0HEca69N1YcRxr/G5zs1fGzvq3 + CbgnlY91lth6j69Z1QIVenN5TkLvua/a2yuLK7pFm5jg5AKjp9ROqeuirUqoQ/d9QpDEf/oi4stCLHFy + AIy3FalQCms4pqTp1MdIzDvKSsgZgGbmG/WZF1xbg95R7m4uEdSRsQVIP6bTP4/wqv8Aw1zw2ua1oCKg + psdRAC9Q3p7TR5tClbze0urDcu2+ZyvbuxNehSr0wXqKe7IB8j02+co9lu0CWwa1vXKU85So2TpPmDO2 + DLVWmQUdWwysNwfMESO85cUsu85MUuQ7BvVS4urapyADOluoIODt/WclxYOOJXIqEmoKrAlvPczU4hXu + eD8bu2pgJWZmwxGdidiJg1aj1KrOxLMTkk9SZwcr4C4+TLwY0EBCWq1tVpJTetSdVqDUpYYDD2mZYlrP + To8RbhtvanRUFLQzNnGrJ6TTs+BJa0L2temk9FR3YqAnKt5ED57bzlEqOjoaZIcHII6gyy3EbupWNWpX + d3IwSx1ZErFPaWuKfpa/B7z+HV1p8Ut1e0YayGpAtg9CCd8TUrWvB+NGktg62pzg5G5YjlAX6bmc/ecR + F7bk3dFGu8hhWGckDbBHTEylcqcrkEdCJRmEzML0SpxpOC2P8O4jZFKhpaB3TDFRcYznqDKfEBwOvwFQ + jfd6ytsCMlSfI+ZHvOOo3VUXFOqxao1MggMSc4OcSzxbi1bidXXXpUkfzNNdJPz9YfbsRKnmERLo+CcP + 4N/Cqhvbu3NYnUGVipA9N/8ASVk45Y2lG5o0LVlZsqriqwDjyLDP9JylTz0jaRRfah4KTmQANT3bUSdh + k5wJHCEzXdjEBCEUWzY8Sa0ommwDpkVEzvhh0z7eeJ1acf4UvCqdZkP3xuoUYfV5nV6TzuOzNcORw9Wu + HM4er0Kjx204hdU+7DUrtT/ZVceIfhIHr0/eafGON/duC1a1MCldrhRSfZqZzgnHp6TzChVqUKoq0XKV + FOQQcESe+va97V725dqtTAXUeuBNDme1tjqkxS6zslx+3t1uf4jWcVKpDZILZwJ2C1ze8MNWzw7VQe6L + HSBnbJx6TxbVNPhlzd0bhFtrhqLMwGrVgDPrK4uoQ01cXVIayLo7/se1twyvcPX111GoKowMeZJM4xBq + eesPQvavZ+tQrVkua9VSqsuwwdskzzji/DLnhV21C4UZO4Ybgj1EnlxDSFPLh6yxLc7D8St7a9NC4ADV + CNNUnGk+k9DB5p5lecBe14NaX4B1Eaqo9M+EzuOznE04nw5SBirTApsuc7gdfrOnp808N19LyJ4ytaOj + NUJ16u7c8QjRtHL8oajcQjPii/pphqmRQOaHtmHww07Sq5d42DQk7p1EIRfrK3GtSQhBevyk7lA/NBYR + QZQykaEUtmCr7zTdWo/liLFhJoY+hixEb4ofWOmX8XntBTtCJn0j9RKfCY3yimLvBSQTVi6j6RIfF0hu + qNOzQ8oQkyl8sxkc3TEZ8UIljlgPBCIKFiEM8sE8U01G4HghCDQ1EzaEWAETEz6RYsTEme4ifSLE1bRM + 5IQiMeXliiTIhEyYsU5MZh7RG+kT6yFqIjMx2qN/mhuMY9YjGB6tvEwPlF3QkdI2J8UUw7os1FLeQgQF + WAOBzZMVVB3nobvKDxIvyjcZ8Phj2UNDTjVDvl2FEfHBcBmkjrq3kZB/vSx2UOEDlWG3xQGV1DbeI3hh + unTK2IypTFWmwqIHU4ypGY9TqzqgvtvIcR9wYTKdIUqS0qYxTXovpJNO8E9Ie0ZoNE9Qu22I9RGhT8Mc + It1BKF1bZgQYLs3L/igFzHuYQgPpHiGnT/8AjFUfWQ1BOCju5JSwuoneR5MMmQm/FY0V/wALsr0EVaCd + 4fiXY/rOV4p2aq261Kts+umo1FTsQP8AOdijHmj0w2+05eXpxHx5lngN5ilKutPvVSppB8Sqcbe8uWvH + L+1worsQPJub+s6bhlMWPGLu1Ynu6g71VPTruJcuOF2NfV3lumT1IGD+05cOJ1sdJZGGQbG5+n2wuVBF + ShSc/iBKyZO14w3eWi6vLS20hq8Gtry9ZeGkrbpytVbmGr0HrHVezVKkmupehOuf7LbPp1i//X8dkbyr + tv2ot2pL36OGzuq7iS/7yWBDbuGxsSOky07MUKujueJ0n7zwYXc/vJH7G1cZp3lM+uoFZX28uoM8vyrj + tXdhidNE+QyuPrMfiXEKt/dNXqBUZgAQowNo7iVn9xrtQ72nVIAJZTkfKUOnUTizyXwtlnkvhmQhCZUR + CEIREIQhEQhCERCEIRSBi2AxOB0E7DhvZ4UkpV6lWm+VDGmw2wVz1nI0iEqKagyoIJHqJ0XDOPCkrW90 + GezbIAzk01z09xN+Jx35rwQfNj8QqoOI1KtkDTpg5UDylH3m3x42f3gfw4J3ZXUWQnbywQen/eYnwyMv + aS/WbCEJnTEIQhESRVJOBI5KjlGBU4IOQZRMtXifC/uNtbN3yvUqoS6rvpP/ALTFnb9pOJaOFU7SoVqX + NVVdmpjACnm/Uzifil5geCEB0SQhCZalL8U0+G3i2dWqalBHFRGp4boCfP6TLhvGOnZMUdlbtrqtbVA9 + FzTceanBj699cV9SVK9VlJyVLHBPylPaG0rb6q261ucjFXUg4YHOR5Tu+H9raItKSXtJzVHKzLjGB5/O + cCIkeHK4OyMM3jdl6FeXdrxutTtLO7rI7AknGKeAM4x1zKV/wC+euKFCrUuBTGCznQoPkFyd5l8GvrOy + p1Hqi5FyQwVqRAHsPUTqLe9uG4Ct0eIFFKspY0gxpnOMe+Z1HIZ4q3VjyHJir7uK4nw654dWVbpVVmGQ + VYMD+kis7+4tCxt670yeuk9ZDcMWqOSS+SeY+fvK85HLT4uVy0+Kaq7vUZ3YlicknzM6Dh/FuJcGpUwy + a7epzKrDKkH0PlOY6GdDwXiot6SWl3RFe01agrdFJ2zHhlPBo72k3ETc31vRSkoIZ6SnJGfMD0lSz4jc + WlamadVwaZyFJOJu9m+4qcaY26PTp1MotMlSCp8t+vyjuNdlrulTqXdJKXdrzGnSYkqvrv5TQH2VBkm8 + a1ck9qrPNBCl7QxlcjFQE+vticbXovQrPSqDDU2KnHqJb4dxW74cKi29V6S1MagvniUqlR6jM7Eksckn + zMjN3plmiD+0Mu3F5Wr0aVKo7tTpDTSB8h6SjAdZA0btBeGXj0GrrbVDSA1agpxiU8FTOz4N2jpW3C6l + stB+/wBIRAG1Ak7ZwenymZx1jRSnZtady1LDEt1YkZyfn6S3EDY19hrZX+A0+DVeH1KVwD99ak3NUOwO + D4fKctToValdKNNCajMFC9CSekhOQNhiaXBq1CnxGi93VqUqSkMWUajkHIk7HRLY6J1vwq4r9/gKDQBL + qxwRj26zNIG+3SeinjHA6nFRftVc1QAuO6IBztkjz2lLib9nmtLlaJp1K4D1QVyOYnYZ8x7S3ADwlpnx + AbG4PeNmxdcJrULZbioaSpUAK84JbPoBMc+KZIj5sET3EBAxyAkgDzMRItews7S54dcua5S7ojvArEBK + i+YHnmZTIVbcY2zLwtKqXqULjWjFgKu2dIO+ffbeHFXH3xko12rUKYCUqhGnKjptK1N1ZwUzpuzvZ08Y + tqtZawpqp0DIzlsZ39BOc5lfpLNK6rUFZKdWpTSpgOqsVDY9Y8UHabIxQdsl5bPa3LUKmgVFODgqw/US + mJbo1KSGp3oL5UhSDuG8jI0pmo6hQSxIAg/+Rr+USR3haT3lvVtbhqNwhSoOqnym72Z7P0uMUarm57qp + TOCunOx6GBiroqBXQeZeyV7cU+Irb07sUabnmDbhvbB8zO94nwylxC2FGuAWBBDY3GDvj5icjZ9j76hf + qQaQSkQ4qHJDYPpO9pa+6QVMd5jfT0z54nfw8bpMi9LpcHSZEx6SPRqUmAamy6Sp6EdMTA7NcHfhXEbs + M+Vq0gyrj3P9Nv1nRb6YmkMylhzKNIadH1CjdDxCjKBD9oaYo/NNtVrOSKFKjMQbRwIaVqBm/SEUxhz5 + SWDzGY1ophn2k1Qwi7xC2YD4o/ESRRsuIkJKVwM5aEIv1iIkxzQhvAeCWUS76sqYyOgseE9xDyijaGnb + MvVlI0X6wb6wX80NS1A9Yq83i/8AtiDr+WPENTm4iN84/PLhpG0jXieHuIRcf94HGIbnqQ+kXHyi7RsN + 7jU05EcPBG7t4o5ZRQx5wgsIyWoPgirhV5YkIxlKxiQhDcQ2DG+0diDxLMmY5OsG9IaowyGepf5YkInl + IfUBNciLEhqk7a9SdWhvqi/tAEwWJOkG2pxWMa2dPNBgkjTozHCNaG6w1GY34mi/HDAkbjUxhHQ0w0w3 + GrLDArFVgIgGBFQfLTPRvGNxqzp/eKOYdImkesVGAZRuYrTH1IywKeayT4Im3d9OaG4QZgUfFGFfERJC + sQLysIDLsogvuYuB8Mk0+KJplbp7WYFC+cXHnDTpEN+vwydxODDTDy2+sBgwX4hCrUoXHnmA2gFLecB0 + b8UFiNRJ3kinEj+H+9HxRL1jgMxohAmE5dtUcjHDRkB+WNd1jZvHGFG74fddGFXu2/lMl4pVuKlcWVIC + l3wJNQnoo6gD1k/ELcXllUokc5XIPoR0Mo0eJ0qfC6Fxdj+0TNPYamyNj8szhyO3JF0Ni+F3XDUtuFWS + oXRKdMcq53J89vMzM4lx2wq06dEIK1JzzKQQQPIj3mPxXjg4hSNKpbUwBzKwO4b1/wC057JWcnL1COiy + yz/C37y1elfd7w5Kxoo47qooJBPsfSdQeKWj2RocTRrep3WpgwI7w4+EicdY8bvLK1e3oPimxyCRkj5S + LifEa9/VV7hgWA0jAwMTM5gFIxzAdVe9ek9cm3DJTzsCcmVfiiGE5cnbuyXbuIQhFKIQhCIzJFUtI5sc + K4mbLkehRq0yckMgJ+hl4gvlqxBbIaAnoHE+AWd5w43dovdValIVBg4B26YnBOhRiCMEHBhlgjNwR80c + IQkURAQhDcRCEIREIQhEQhCEWrYcPr1qtu9Sk/3epVCd5jAOWx1nV8S7L0GtWNuSK6jYDoceX/ectZca + u7SkKSOppgqwVhkDE0a3ay/am6r3SFviVdx8szq4s8QRLXBARqfE7HubQ1q12jXIOk0QcsoG25jODcKf + ijVBRKA011c2cHfpM5qjuzFiSxOSWPUye1vbi17wW9RqWrGSDgnEy2OW0oE3tLpOE9nqL0q5v3dGUnON + gAD11dDOZuxTSvUFAk0wxCsepXOxlm54reXFAUq1Uld8heXUT5n1mbDPPFACeSOgKOEITKiIQhCIhCEI + iaZvnPC1tRr0rVNQ77HI9PpMyEYp6mKeoaEIRSgToXrWtxwizsLK3LXmvLVCN2J8gZz0kRyjAqSGByCP + IxjMdV9/vduy0GFVDRJIpnOx8zO74Fx/+IUGFSvSpV0XUVqjCEDqQ2Z5/Xvbi4fXXrPUYDQC5JOPSVWy + s0w5XFdWnHyuK69XovdcBr3terXNE1O6LMqnkJHVlPr7Tz6uUNVzS2Qk4HoM7RrEeki+cnPPupzz75IQ + hIorFJzTIdCQykEEeRnqFrbW/aDglsb0qWOGLUyoJYbYP08p5WG3l/ht/c2NzTq2zFHU5x1B+Y85txZm + CibLbh5DBRNl1nb/AIdbW1G0elbU0QEqWUY8tgf9ZwZl/iPEbi+rNVu6ju5OcE7D5DylHTFnkKoUZ5Ga + oaKOGYQmVF23Zu3suKcLrWt5yVKHOtVdiFPUe+/lMvjXBTwpaVUu2KjEqhG4UdCT0z7TLtLuraV1q0jh + lIYem3qJf45xmtxVqTXFKmtSkCpZcjVn28pt3iaS2cxx0+7Cig+0SExsax3tXUKpZtZGzEnOOnWVwd5I + 9R3ChySFGAPQSMStxdRwfgj8Q4ZUZLRzUBISsCSMjywP6zKtLJqt+trXf7uxbSxqKeU+4nZ9g+I0bLg1 + f77Xp06a1SQGO55cnA85o8e4GnFadC/sjougAwyMah1APo06zhMsRHzdmHDi4jj5bhLng17YVEatQYU8 + jD+JW9Nx5GdTw3sylqba9uDkA6qqL0AO4I9gcTS4ZXFWgtnf0y1Or/ZFWG9Op+E+gPUGdGlILRWljWoX + TpbzHSa8fTg7tuLpze7g/tCsqP3mncU8CuUHernqM4Df5TD7I3N1Q41Te0VnBH9qq4JZfPrLnbizuaHE + qZrO70jSC0iVxgD4D7iN7Jq1txig7FRV0BkVulRW2Iz5H095z/8A+tzu/tvTfFv8PlEI/NHKxqDOCM82 + k9REYc09Td62ExRHQ0+0cE1fyyic1RDTHYWOC7eQgMkm4iDaPUfWBHtBYCYWzE+LENMVhI3WEwgNEx4o + /TAjaG56maYnVorCAXzjgI07ZgN4BT8UADiKCRoRcfkhpgM5FihSdX5YY5OsAuJQ7pSNMNMUDbmjlAjK + KNY6C45toCG5ak0wG8VV8UBDc5NMVdukDtAYhuNbhjE1R8bDvgNSRFi6Yad8ReICNMNMAv4oQEK9SY5o + R20TTHso1JCKBEgNGogsXbTDTq+GVuAkaEISd6jUpOBGao5o3byh31BMbm8MDtAw6n1kLPUZAGiNZh5Q + 20xDJ3XqT1iRzeOM+KLzATsba4Z8UNtMNUI1NZvaJFXdWiYaPdAR6xhXzaOTqYukY6SK9TABHwHL4oQ8 + T1NAg0dGhebMNkasbURFUjPWRjJxqjp6WrwxSlBEFUDwxgX8Uenykp5qFZRzNH4wu28jGOY7SQQS0xYE + MfWOHNq/DBs6cLmRurUyNxzSTSfigFGmLcao8RuhOsm1AeUMZhuNFE68vLAL85JpHrHIo6MYbmYbogMR + ACq9OaWMDTywVRjlgNX1bq4UtqzHgSXQPeHd+aw75fUlGgLR2PeSYMay/PVDvjsSaFzBeU9I4DMNPtyw + GO1jdd5y9/cfcOK1kqhHtqpFXS3mfMjyzkec6gDExuIUKS8btq3cCq1RW5dslh06zk6gXESz5cfFx3Eq + 4ub2pVVEpKx2VRjAlLymjxm6N1xCrVZNG+kL+EDymd5CeVl7bimwhCZyiEIQikAklSm9JsVldG9GXTCk + QtVXIBVSDg+c9GPC7a+4ZSFQOGYBgWbUQSM7ZmuGDnvTa4cbmOm80AJ5JtPwC/U0gKBcVFDApuMe58pJ + xLgdexGp6qPTB3CnJUZ6kTo617X+5WlvZCqarIrCq2FDKo3O/Qe8vHiPO54YHpuGurerbV3o1hiop0ke + k1uzVhR4jeGlVqhMDUFOd/USe+taPEVotYLqvFytakDktj4wx6y9w9DbcOpp3ANZQWpVRyspyQcgbnHm + N4YAPkjA/wC1l8edaN390tmIp0xoOC2CfTBMwJ6FY9k7e5pLXr1zcaxkGmcKSfPM4a7pdxcVaSnKq5UH + 1wZPKJ5/GrlwcdL6anCEJjc8QhLVqoatTDnCFgCfQZjDcw3VhBc6p0vEuC0LCvV+83YFMYakqjLMD7eU + jo8KpXVvTrWdzqrGrpak4AIUnAOPP3hpHVXY70XOwmhxawPDr6rbMwdqZxkeczxBE8NKI6YhCEUomra3 + rULdqIp02QutTmUNuPL5GZUIxR2THVbvK4ubl6qUkpKTtTXoJNZcOuL1qgt0J0qXY9AAJHaVlt69OqaV + OoqnOlhkH2M9E4PVoVODd9aUkpVKxIKjyPQ/QLN+LA5F3aYYGb5bzArhmEbOk49wOvZVnenRc2xOQw5s + fPE50+czywcVGnPBxdM2EITOiIQhCIhCEIiEIQiIQhCIhCEIgdY7fM7bsr2bt+IWi3d7c0u5YMDSzpIY + bAk+nnMG4trOlblvvh+8gNle7yuQ2AAfcb5jRDdbggLYsIQioiEIQis2+O+p68aNQzn0zPQOJDhnFLKm + OD1LWlc0TqVWpBTUwPCM9Z5uBJg/TB3HQzTHPQlrhn2CJvdpcVs/uYoVBWSqKyFttireakeRBmMZJUYs + csSWPUmRyF3ZqLsiEIRSiEIQiIQhCIgIQhE4MRO67NdrKtJqVDipzQChFqAbr6E+onBxysVOVmmGTi7G + 04uV43Ze33NrQvrdqqj+0alsy8p9V/fcSxYXAurKlX6NUA1Kvk3Qj9Z5v2d7WXdjVRLwtWtGbm1bsPkf + 8p2PZq9o1EvCrg24qmrSYnSNLHfr0wZ38fON6PFzGbut8e4WvFOH1KBwKo5qTN5GeYUre4sr1qD0gLin + VUjJwQQeg9jmd0nailccft7O3ZGpZKmqfjODgD2z5xnbayt2ord03pffKRyaesZKgjYr7TLl7c/I+Snl + Mc95DdDasa1BDUR0qY0mmw3DeckIyesrcGvl4jw+lcUxoBGCuckEbES8q75nZhkIN28WO8RJmAqxRHMM + wVRH3WvZMRU5torKMR2nVAShl2TVX0gevXMcQcQwZOyXazNJz0jcSXSc9IbekNkwaLH4omnaPAhEs9TG + WJpkhjcQ769TdMNMdgwC/ih30am4aGmOAjtMO+vVGFxvG4kmIQ7vEdk0jaEcuTDSPigZ0OEmkYzE07xS + v4RmABj3LskUavDFwI/TDTtmG4cJmlVDRijMkx4oBD1hsgKPyxDEkAKtHMB6R7I7KPTCOYZWIV5uUw3L + tkMYRtHwGG8UW56madUTzjhCG41JCI0UZlDqWhjfpmJDo0XxBod+6u0kg0VVHwmJJ3GibD8REdjHnG6t + objRJ+IRIsafC23LDctTT8QxEMe2OqyMkNDcalifWLGfDDcaneI+cNMFEMH5yI1H8sD0i4+UTTBjU0dY + fSO+kSTOQgtDEXTDHihGpMRm5kggFK6pG5BYKg6ekVOvNFVcDliBfwz2jTeFrUq/FmPRfpGYHT0jtRx1 + i1MZ2kDzkowB6yHPKN+aKrfhkJWNLnZoKw0xmo828VCeaJKxWkHMsO720r4YJsMx2rVtM20x1RssFU5Z + PhkmmAUDVHMKPT780cNjzRyqG+kCuTCvyeoLbNuYA7eQho5YKuzSUg3CmTBhjDYMhYbRVX8QzM7QX9pG + xmCqCOaABVooXMZ4nqTTpHSAXlziOxmGnaIjU0qjDoJy/auvXS9oC2195RQ1CwGcA7ZnVads5mL3YueK + 8SVhlVpCkQ3qcmc/UZ7NFz8541ee1XLMWYkknJPqZDJHXDEHyOJHPKbzX3EIQkyiEIQid4TNtOK1rqpQ + pXNwyW9MadSjBA+nUzMoN3Vam7DlUhjj0zJ+JXCXV9UqJTRVY7BRjb5esvHJPTWOjw3X2fHeGWSrb0zV + amBhqrLnPr7zHp3qX17Uo01KCowWkwJJUeQHpk7kznRjG86jhHZq8urSnehqdLPNSDZycH9hNTNzQtcF + 5HQSXnB6vC1ep35LKusFeUjJwfn5SNXtW4JTWreAVmdmGAc0ydjnHkZc7W310qUqNRESpUUoyqc53HT2 + OJzlrb29S3q1bi5FMqOWmBksf8oZoKFOaYqBaPBO0Nxwqk9KmVq0iclWH7g+UxKzFyzt8RLSFo5WmTkp + paMs3MBfBRwhCRREeDiMhCY6tXjN4LupRceIUURz6kLgzoPs9C/xCuTT1YpYFTyXfz+c4zym92X4q/Dr + 0BqgS3qkLVJGdhNeJO4W14stZi1rtVZ1jxq5q0KL1KeAxKgsBkecwhb1WVjoPKuo5GNs9Z6xQq0rka6D + I6t8SkMD85Wv+HUrijVp4RHqUjSDAYOOoH6zpz4DPeQ2/Jw7XIbyUmNlmtSKOyHIIJUj5StONPOri1qI + QgesmIzNjh/G7uwDC3cAHOxGcZ6zI84S8FHYzFPJdOO13EMMCKLIwwQy4yP1nPVX7x3IAAJJ0jykePaT + UEFSsqMRTUkAk9BGrlUrn7oSuIydT2n4IvDKdCtb1c0aq6ck5OcdfkROdpKXZQu5JAHzkOKOmlxR00EJ + q8W4Xc8Lqol0ADUUMCpyCJl/FBEdMIjpkHWB3M0+EWFXid7TtqH/ADKhxk9APMmR8StfuV3VoZz3bFc4 + xnHnDTrdXa63UIQjkUswCgljsBFRO8oz4Z1j9k7s8Ne7WqpNNdTUWBVl9Rgzn69OnTZQtQOCoOwxgkbj + 6RuCe7TPBNbNVKC9d5at7erXZu5pNUYDUQoJwJXYYaKnTrdrFeHCxBp17oXhXmphBoz889Jlaj6xkI9w + 5biEIRUxCEIREIQhEQhCERCEBtCJcZgAZ1PCU4Vd0KhqWj95RpBjprgd5vvscftK3HK9pTqVbSwpFLZm + WsFqrzI2N1z6R68VuGje7noQhFRT0qZqMFUEuTgAec67sp2YpcVFyL161GpRKqAFwcHOc5nJ0arUaiPT + JDghgR1BE7rsl2srVL1KHFayd2w0iqQAc+Wo+kvDW/N0cBjkhlY3H+yl3wxqr0UetbKNQqr5D3E5YZDb + T368txdWVWix/s6yspI9CMZWeM9ouFnhXFalqXFTSA2QMZyuZWeAeS36vpTj1lj6bGHWaAva4s+5DuKW + SSobGc+vr0mfDeZjcQp6pEcqwYEhhuCJKLiqKofW+sHIJO4MrQi3Hcl6d2DvatzVrD7uiqAGq1lOkE+W + V6ZPtO1ZfFPLeyPak8DV6FWj3tB21bbEHGP0no/C7+34nbCtaOCDylT1U+hHlO7i5DQbvc6LMzwDfkre + kQ0x2nT4YadpqZ3f2UenfljkX8UXEcqyjkn9czHi2jSvvJWEYwg5x9c3BjWEkC+cCvnJ74+ujYQI9pIy + +0biBnH10eIKJJiOVYd8fXQ4gvTpJMR2nyh3x9dDiGJIF8Qhp2hsl2UenaJpkuIBSfSHfHZR6fQQxJAu + Y/SIbhwoFXlbeLp2j9IEFUStsdkwr8oado/SmYadPhjM4cJijED0i4PxRYxo7JmIgEX4YR7kkhjcRxjV + G0Ny1uRhEwVjomNSwGNSRqCOjVMvdGpMb9IuB6RwhEMds3eJFYjGImqSuo1Gy+GGqAbBaDN7Q2RqQ+CM + +CP3+KRZMJx1jTvH7xPCOsNymtGiOO8NOzQ3E1ejaoaY4eCHibrDbE0RYp3jdMNxqWGPeJpjsbZkb3Gq + P4Y7TFgISCTHvDTDTHAe8nvrmiLFC+UMe8NkwsM0yobr1hpOeUcssKOXmhhB5YnpDq8d4yr40lomnaTh + dWowRc+cf2U/VQ6SrbiLv6ydqZbwmNK6dX/5Rd8fW0IXSeYx6tpMfpjCN8KssdxrU9G5mjkaQadIgp2h + VvVZ1BhBCJACVHURdZmepma1hGB1HMQkjw7yJG2bVHBtoeqhnphvF6yRcSIbrmAYRNoOqXY+LxRUA+cj + DAtHo28zTVpi7pMDDQ0xpYZ+cejY2i81bNwin0hpLfyx+Tpwsq3l7Rt7apVrVQir1ZeY5+Uhz0eac88c + TdU7TXAs+FVGWsUqnHdaTuTn+k85qXdapUqFq1QtU8R1nm+frNDtFeULy710K1WqpG7VNt/QDyExGM8z + l5XJvM5uXvfE0whCc9zxCEIREIQhEQhCETlm5wnjtzw800WvV7gEZp6v1x6TCaJGZI7K8MnF2N2nEm4f + xa4p1qdweUMpFY4UKBke/UzkXGluuceYke4MNw0py35Yzz7naTYQhIoiL8UJ1HZfg9txinXoVKr0rlcO + pG4I88j2/wA48cVdFeGDm6LlyIk9G4n2UtU4bUqLWdKtFWOoDZsZO49flPPHXScSssHD3PPieN0zICEJ + Fndr9n1wi8Qe3qEjvk29Mjf+kO0vEuI2HHKzIWpUyQKQ6hgPOcra3FW2rrVokrUU6gV8p6FRalxHhbPx + UU3qVqQVFXm2xsQBuDnrOvBc8O0fJdWC546HSWPwY8N4xXua1+FS5qDal5dN2X326TPv+z9410xtrN1p + VSe6UkZUfm32+syaT1LG7D0yRUpNkexBnpvZ7iZ4tYKx0CqCVZVPQ+v1lYY48hp8McWJyeH3cZwjsxdX + ZzcYpUFJDaupx1wP85n9ovu54nW+5U1WiMKNI2yBvOv7cXleztaVCg2inW1asHBIHl8p52cs28x5Qw8F + PLgYOijBjupli0tal1XSjRRnqMcBR1JljifD6/DLg0LgAVAA2xyMGY6fdmYOt2ewMv1+G3tpSp1q1vUS + nUAZGI2MqKCCxnpFj2psqfBqTXxBrrlTSUZLY6HHQTTjB9tXFgZrt1qyOOccsbzgC2tFGSsNOlSmAuOu + DORtwKlVAzqoJwSeglvjXEX4peNXZUQdAqjAAmcBiRlnt3LPLbu7Xj/GbRuDUrGnovKqqF70jYbYyPeQ + 8H7I1762o16lYUqLZOMHXjy295yAYmeu9krite8EptcYyp0q2nqBtmbYazfN0dNgc2aZUHZvgQ4PWuS9 + XWxIVW6bdTmcF2ot6tHjFw9RHRKlVmUkYyM9RPXkX25Zi9o+BDjLWxyRUVgrHPwnrt6zXk4jWi7Obpd4 + BjeZcMtzWuELZNAMvekDIAJ852d/2Sanxinc2xAtqlUMcLum+dh5idFwbglvwu0r24bvaVQ6izAZIxjQ + ZqqBTXGQEUbaj5TLHADzHD0uAf8AeVFyOY62xpLMOs8v7Y8Fbh3Eyaf/AMtWYsj+Qz1U/L+k7riHaGw4 + cypcO4Y4YYGoMD8QI2InHdte0FtxenTtrIOadMlizDGo9BgQzRNS6p4ssU35LFpcUr8OWpQ4dcAUid6q + oFdttxnriYz1C7knck5JktVu8bOANgMKMCVpz7byHJTUQhLAouaTVcPgHBbG2fTMI1RYxEA/WdnwLs3Q + 4p2dr3aVjSuadVlJqECmQBnr5QsOx9/dGo9KlS+7MMJUrZUHPmB1+WYabox6XNBDe7jfrDcmb3aPg1Xg + l2tCvUpVSyBuXOBv03mDBNWOWLiomkmQhCFETdtuFpV4Hc31ZsPTqrTpoMbnzyOsxPpHaiFwCcemdoam + IPma2xMAOuqaHCrM319QoDbWeZsZwBuTOn7Q9nreyt7a+ouiWdZgvds/OBnGfmRuR5Zha48TmKei5e9o + UresooXFOsrIGLKpABI3H0mezE9ZtdozafxKolg4qWlMBUdVxkAefqfeY6JqMdCedEyE0a9nUtqFCrUG + Er0i6lTnIyRv6biZ0VKI6aWmpLKF8RIA+c7ng3YC9rinVvK1KjSYaiEPeHH02/ecKnUZ6ZnsHB+IcG7P + cGtne+er95UMDknTtvyjoM7Rmv27uhxwct8not3hPCxwu1FCnVq1aYG3enVp+XpOb7d8Lt7m0vLuqirX + oLTZahOMgk5HvOj4HxijxejXr2gIpUzpDHYnAyTjyE5T7R+KUfulWyt6yGozKKqrucAE7+m+Jq5GtXs9 + X9ZxbNJZ9TsStTgNOtb1nrX7KtTulwAQ3Qb9MbzhHpPSqNScYdSQV9CJ1HZHjXE04zbUqVZ6z1WWmadV + iQVHTf2k1/2Vvn7Q3NK0ou9EVdXeFcAA7nfocZmTp9F4v1HLp4y5apZ16dJalSk6Kw1KSDgj1BlVVyRv + PoNLGkeHLZ10Qr3QplQNK9MHC+U8h7YcAPBOI92jO9BhqpMRvjzB9xBwQ3ac/QvEGR5KZext83C1v7Z6 + Nekyd5ppk59xgjqJvfZlWpIt3b1KLCuCGNTHw9NJ9N5c+zWvdrw+tQrqwoZ1UKhO25wRjrjM6qjZW9Cv + UrUaFJKrcrMq4J+eOs0wx9Jd3SdKOuTGl05iaeu8cejbQx7cs6C9fsJuIulzCCKMRjLUmCFhpz5COxDG + Ix3GpuiDiL1EGUesa6jto9MVVjsQTzi3GoCwC6vKKFxFUCLcGE0KFMNKxyiOEBY1MCjeJpA9Y4+GIAZX + dPRMVdStDSfijyuNRgwhvVOphXaNxJYmJIw4DRkFYYkhEYwl7oQJuNPWDKCIPDyxHSk0iJH+0ZH306kz + 7RrCO0xpgMkgRIrLp8MRjL8UamtGn4o7MRiMsMx+Ikh13hG5GOUxRqMJ13gxhmNaPcaliNDyhFunUQaG + faJqWGyNSfyxhgcadoYMrcajdfDDVFhj8MncamFRpz8UB0YR2nxecAD6Q7yNSRN/SO058oY1dJHfGpu0 + Mag20cq+KGPKCpATcGGI7SYBfxAw7wq1NVTDGekk0piAXEjcGFGo3jtMeqx2k4huvtKILmCrJQIY/DFv + bLtsZVGI1wIJU9TAnOymeqXk7EgEjzgj/vHIuF5o3TtDxI3SowzHFQZEi4aSop5vxTNbXB34ZrUx5ecY + aZz1kpbTt8UaM46wFKMgWj7o/iiPSPVSJPg6esaBpPKYd7HYUGkhfyxuk80tsAVYNIlXKtiHfHYflDpx + p1R2fKSMuRhgI16ekwMxhwSaDvyxwI3jdMdpT8SS9lOknatPhPNBGhpQsobdoKo9MSN7qJ2oAx6N7yEL + 4usZea1tKhokq2DpZRk5x6RZujcd2izO1F/c2NFTQuE01TpCkbj3U+k4N6lWozayTnmOTNWnYXnE74oQ + /eauZmBwPnM+6pPQuatIHVpYrkeeDPI5c8lvP5XJdtSjvrNS84Pd2tlTuK9Mim5wMncfMeUy+kwRPdki + eybCEIqYhCEIiEIQiIQhCJzRI9Bk46e86227H16tq1cXVuV0a005YMPn5S8cV9FeGDyOguP8oT0TiPZu + 0s+zdVqdE1bkqp73cnPsPSefOpUkMCCPWGfG4e6uTjcEGjhCEiynCdX2It7l+JJcUAe6pHSxzjYg7Sv2 + b4NS4xVdKlZ6dRSCQF1ZXz+uZ3fZzhacHtqtLve9ZiW1AYwOgnRw4KjdvS8S5DXbxBc2VxRVEdmVlCt0 + JxtPHLyi9tc1KVYYdSQR6Gew3lcU1ZKZ/t2U4Veo/M3oJ5Je4qXD6S9Rm6s3XPn85XUaterCz4fWaL8P + uaSd9Ut6qU9sMVIG/TeUpy6vORPZNXYz0Ls3x20q00oVKVK1cAKGB0hvr5Gee/DO+7DWlvccMrmvQpVW + FXA1KGIGJtw5I2vDtdFgdq6SUeMVTRqI61OblOcE9RKXDOI1+G1BUtarU6g9DsfYiWe09nRsuKNSt3BU + jVpXfST5TFVpOWTtSSuGSlq8Y4tdcXrCreOCQMKoGAB7CZaJqYKvUnEQyWhWehWWrTOGU6geuDJ3t20q + rtbvex/BatnxCpWu05hSDIRzA56/WHb2xL0be4pgllLKfM46/tNLgfH7TiFvTBrqlzpAKnYlvb1m8F1h + gQHXHh6zqxwxzx0N6/Dw458ehvMexdsLztBQFYZorl2UjIOBJu3FS2/jjULGlSWlRQIxpLjUepz9Z6Ja + 2Nvb0TSpUVCkktpGDud+brLdHgXCabLW/h9HvANiVz9Zhng4Gqj497NF4O6MjYYEH3GJH851HbXiA4jx + 6u9EIKdM92uAF2E5o+RmV5HJgYqDJjnnqXYfidvccLp2gISvSQgg+YznInluCpmlwjiNfhlyte3fFQcu + 4yCD1BlYZ9ru06Xl+vPd6dxrtHbcIrLRqK71cAlVxjHlkmYl526BpMLS2cVSNmqEYHvgdZpJwBeO0qd9 + xCs5aqoZVpKFUA74zjeX7DspwqyL1XoI6+tVsqBNssl8jovVTl5PIgN55Vr8c4xshua9MtkBQdIP02lf + idHiFmadK/d1LJqClssB7rnadv2l7WJa02tODqlVdO9VTyjO3KBPM6zO7F3LknqTvMG8/qEwdCrK9VmA + BLEAaQCc4+UrQhFce9xCEIUwJcFV+67os/d6tZXO2emfnKcITG7rs7x3h1rxFaFSjVWwdlYUmYFEbGCz + eo88T1dAjKpUh6ZGoMp1A++qfOJyW956b9n3H7elbNZ8QvkSmx0pTqqcKSfI9MexjM9Xr/H9Xjg9vJYH + 2jrp7S3A1u2AviPTboPacj8J+c6HtnXoV+0N41pVNWgCNLE6s4HkfSc8Yvd5/VZmeakyEIQuekWIwmzw + OhYXXEEpcTuHtrZgc1FGSp8s+06Dttwng3B+H2VCwfvrtiajVdecqenTYQtziUXdxdKoabg0yQwOQQcG + WrriN3d01W4qvVVSXAds4J6n9pU0nGrB05xnG0i2EKBQ0PilVCzKqglidIE3OyduKvH7SlcW5eizd3VV + gdgdifpnMyKNQ0mVkyrKQwI8iPOeh9n+0vCafE04ne6qV7UomlWCrkFtubA9R+8LbpccXIcnVmdveF3d + JaVVgpoWubZRSU8qjdSx9w04bO09R7ZdpOE3theUrS7qVTc0qY0qpGGUnxZ8sY6Ty34jD9q6sxM1wdjN + zH6j0MZCFyi3ovYXtZacG4ZXt7uk5Os1EamAc5HQ/pOb7UcTtuK8VqXdpbtRpsAXUnOpvM+2ZgDOYdI9 + +NW+fPlngYPordncPaV6dakSlSmwYEeRBnu3Z64q3vBra7r4FSqoZsDAz8p4fwzh11fCobWg9UUhrfSM + 4HrPdeAoV4HYCoCKgoU1YMMEHEeDet8Rg9zv1WtMocX4Xa8TtjRvFDqd1b4wfUGaBxG4zq2mt7uXFiji + mxsvg3CKfDLZKCVXqKuSjHquev0J3xNHSMx+IYMY/hTjxmIGJ4KNliaZJp2hgSzPRNKFhgsIAYkhUGCr + jyi3LU1RGsBJPWNMNxqbjETTFPhiadox8RqPPEVRDeCnylSnQjdo6B5iIQGIQ/Im6do6NMGO0CeoP5YR + NX+KBgUQeYRIeUIyJpiRYnrL34pSbjENMGziC5xzRb3RqGEbBvijPLrAkk6IYmqIxjo1BjGJWO+GNO8c + 5M53iGBhAVp1Eb1jo2PvjURrRWMXeAxqRvnExt1htqh0gtE3VE/eLphpxDcamfSCiShdmggh3wFFgH1g + qmS4go9olq7ZoXaCqfWPVYqrtJ3MJqr4oKBFYBYo6yVjtZNMN9PNFZQVgo8lHSUsakQbQ0/hj9MNMWyO + yZpgUI8o/TpMcFyYt7rMdUQG0ADJAu7RRT/FFufbRBfxQ0yfAhphsmYXKBisfq1dQnWMHLUx8Mei6nbT + 4Z7Gi+dw3vVOi5bJkpUacYkSMijl8XnBagYTJLowQNM/QdUmCldWqRo2ThiJKxGnMjSteOvdE+FbOeaR + 6jnlMR23YtHUmzkt4ZrrRZLt8T0UtGsxU/mk2oY8pAW/rJ92mgI3beNGdOIupxsph7r/AEkTwJNwPOSo + M7NGqpYc0eqkSWo8Mxl36RAmkaZIAF9dUVKerfEDPXip49+aLDe0aBp1GTvT0xCuIzIbN49UYw2owUR4 + XzgiHDR78SMIdQ1NkOysCp08uZicK7L0bepTr3JL1AdQprzD2B/adDSXT1EbeXCW1CpWra+7XxMqk4nN + mYrtq+rF8pYnaTiditKrbXet3I8IG4PlzTzpzqY6fDnbM3+0nFqXE2HdUNJBwKh6kek571nBy59z4vL6 + jLeU2EITK54hCEIiEIQiIQhCJy+KdJ2X42eH3YS5LfdagKuucgZ8wJzM27XiFqtktvcWiVArFhVVsOM+ + UvFR2NrxZODsb1Th7CtZUHpkFSBhh5icD284SLO7p3VFStOtlmHkD/3kSdpq9pZJaWdVtA6VKgGpR6Dy + +swLm7r3VQtcVXdj5s5M15eQzxC6Obnx5DWvNShCE57iLo+xdZ6fHKQDlVYFSM+LbpO449xmlwm2Jch6 + zA91T9fc+08ut69W2rpVonDoQwPoRLV9Xur8vd1w74OGbGw9vadGHK44oXRhyuGKE6txS6rXb3D1XFV+ + rAkbenynacB4Hwq64fbXChnqAhmLHcsOqlfSeb+09D7G8PvbJKd3Upa7auoYFX3X3K+cOJ7nyV9OueWs + qD7ROLiu9Dh9Fx3dL+0bHk3QD6CcRoLNhdyegE9D7bcIFW3o3FtTHfhgrBRuwPTbzOZV4HwK24LxG3uu + 0lejb09JqUqLHUSR01AdJnyjitXLwrm79XB4wxHpPSOxlpp4IaquwqVycMBkqF2E4zj727cZvKlk5qWz + VS1JmTTkE56Tc4B2k+7Pw60qUUFKizBmBOSG9R7HeHFkDtp6fRki2J2htjZ8VuKGsuQ2Sx6nO+8rXVnW + t6VJ6wwlVda58xnGZ6G/ZRbniNS5vrg1snVpVcA+gJ9Jh/aHRK17QouKYUgYGw36RuPha+XgQcm4lJsX + XCq1DhltfKQ9Ctkco8J9DKVnQe5uqVFMlqjhAB13M9P4XwxK/Cbzh6ZFKnVZaVQnO4wc/QyMDdn0/C57 + Liux1gl1xqmtckBAWA6FiPKeq0qZxnGJn8LsaFyKF3WpU0u6JZWKjTzDZs+uev1mwik+XSb4Jgave6Lp + XA0zadPfmEvm176m6OCFZSpwdJwdoW6FQpYZmhR5hmZcue718enOztb5/wC1XB63BuK1bav4c6kPUFST + gzPsrGteutOiAamC3McAADJJM9w7X9m7TjjUq1wTSq08LqByCM5Ix/nModmOH29GqLQOtSrSNLvMkkA9 + Tg+czxFvnOo+MyOR1eLsMMRnOJo8KsKt7cUaFNXAq1BTBAyMzom7D338V+7rrNtkE1tOBg/5+07jh/Z8 + cMoJR4agqsW7wVqxDCm2MZXG5PtKD+3LxdDybe40FBXvOH9leHUrerVd8KdK+It7+wzON432zuuJ0K1v + RpJRoPy8uS5HoT7zF7TUa1vxq7o17jvnpOVNQHOZjN4uSJyWjm6rJXHHwFoWlw33erQVSTW0psM7A5wP + cnEqVVdXKOCHBwQeoM6HsdXq0Lm7NK0etUaiaYqqme6LbAlvIe8OAcONXtPSo1KNS6CVeenSXVqAO59x + mKxx4s+QNXNMpVsMCD+YRi9Z1vb+3q2vaO416x0UEgYIx5Y2x7TmUpvVqKlNS1RjgAdSYWefG4ZI0LRw + 3jnQ0yVcEMDgg+UvFrD+FkOLj+IatiNPd49/PMKQ3ssuEIQogeKAbEIQiNUIQhEQhJKSamAyBk4yYQG5 + ufeSM7NgEnbpk9JpcY4Re8IrU0vaXdmoA6sCGBU+YImTCvSbK2l1VFq9ujlaLEMafkSPOUoR2DjONoU+ + ZsJd4VSt6t/SW8qvSty2HqKMlR6w4hQS1u6tJKqVlVyoqIcqw8iIRrxupQhCEogNzCAhF3fYzsavHrOr + ctepSWm2lqarqIPkT5Ymn2v7JWHB+zy1bc1WuQ6oapbY5znI8hML7POMnhPHaS1HxaXBC1QensfoZ632 + h4YnGOGVLRqpRKhDEqATgHPLGGy9vpenw5uJ0ebzj7LOIChxW4tajoqV0BAbzK9AD8sz1L8W3N5zzGn2 + Jr2XaWggJNk1YaaucHSBk5x0Pl856fgKvLKx2F6XxvDljimRqYw3hiPx+KGBKNt6yURXaAkhxIyfeP8A + KYPN9I04gzafDDMdLJDpGrn1g3TlliapkPrEiw+KHinUgjSMx0FG8BjUc2nOI3fVHgGABgLLUkBvHKvt + HaRjGiC69RqZp3iMI7AWIw5YDGtSRuI7TCMjU3EQxcRDAjUmIQhKGNTfLmETrHtr5ueMj3Z6mt6Q1Ru8 + D+WG9S1GvxcsaYh2g3zlD5oSSIOjQhkQjUGR6/aOLbcxiNjyhuz1Jqjcx0aBv1gMajO2IQ07wxBY1Iw5 + omPwxdMXTs0Ny0yaYBSzRVAgq+kneoMWTTBljwMxQoUfmld8dtGq/kiqJIq+u8EWG6zCjVUMeF0+KSad + MTSTDdRhR6YumPVY5VkbgwolWLpkgp/ii6RJGDGiFP8AFHLTx4RHqm3mYKsHOOxm6doaRjzky0z8MAmn + xRCV9lD3YxHKu8kK7NBFGG1Q3Mwowu0MCTBfKAXdsRbY7aFVjlX/APcSTTjeKF/FFu0C44qQemIBtKsF + l16Q9JC9EafSexhmJfOPCj4qjsctBWKrJXo6feRsrqvMJYlm4JPRjnOSJIaxYcxkCg45R0iYMrZIUPFM + zaj8oBiq8pkSr4usOvmYbI00veEjJjgyFekgwYDI85LqYv7Tq2k9I9KmqRJmA5fFM0tcMmsox5jHI34p + EjDEUETPVqOqckNHoJAn5ZKjfiMzRt+NH3Smn4i2JEy75kveHT+WRZDNhohTzWgyKuIDHnJmQYz6QRRH + 30nHpkRTiUuOUbq4snoWmhGqcrMTpwPOaiUxpxiNdS3QTLPIy8NeXF3CXm9t2aujWqi4IShSJ1N6gdcT + CuEHf1EoklAxCE9SM7T1PjdlXuLCpRt2CahuSCSR6e2Z55ZcFvr2rooUGJOW1EYGB13M4+XENAXidR07 + igFkYMZ0M9P4B2YtH4NXe7CVbllZTg57sjoB6GebVUK1CPQkTJNWXLwuALPFF+5auFOgHBONgfSRfBO0 + 4DYXlbsjxaklA6WArAsDggZzj32nN2nDbm8WuaKHTRU1KrEbKB6mTGfC4A6suEIR3PW7Og1xWWlTIDMd + Iz0lm84ZdWVGnVuVZFq50K2xYDzx6Ttfs9srSpw6pcPSQ1+9IViNxy9BMvthWr8Z4zosqT1KdEd2pVSQ + Tncj6y3DQN2/5tcZku1uKhLt7ZV7GsaVyjUqgAJVhg4MpSLjRHTEITR4dw+vxG47q1GupgsF6bCMN+IB + XRUJNSBdgEGWJAA9TH3drWtar0q6OlReqsMGdF2K4P8AxPiK1dSrSosGYasMfMYHpkQ071aYYOSYlgX1 + rXs7qpQugUqr4lPlkZktLiNWnwytYqqmnVYVCzDcEek0O2Tip2lviAQuvTuMZwMTKs6Jr3NKivVmVR9T + DXnRDgmSFWQEsAvU7T13stb3NlYLRutDouGpMp1AgjOPpMbtT2ZRKa3nDqShlUd7SC41YHiUf1E6Tg9U + VeH2hAHNSB/adXBgi7u7peFwXc+9W4akz2hSnVXmDMM4PrPOeL8E41Vuqj3NGtWqEktUHNmenldLdY8M + KSu7nCquozXm4hN3ZycBlj5bwurTNKoUIOV2IPkZJb1DSuKdUAHSQ2D0OD5zraXY7ivF61W57pKQrE1B + 3raTgknpOdv+HPZcUqWiuKr0zpJUbE+YHrOBEvKz4c8NKaFrz9qOLNULtdMgJ2VQML7AeU3E47Y8X4cn + D70OK1RNIrPggVPI7dBmUrzsfd2PA6t/eulJlwwolhq0nqT7+05JFZnbQD9BAzQ1W58mDptKpTu+BcUU + 1AorUiHXO6n0PuJZodpuKUWc0rpgGYsy4GCScmZl4csgFZqygAAkEY9hnylYHT0gNz/aj4dXsXYa5r8T + tKt1c3CtqIVlUBSGHm3uROro0QzeU8U7FYftHZ27NUFKrVCuqsVz6Zx7z32zsUoKwpoEXOrSo8/WZ5ci + eL7D4jkebDzV0olV5RAE09mBmuKOR0kFeiF1DEkz37vZeLXksmqpraTjlEEtSesupT07Lt6+8UjTttL7 + 9erP6x91MUAN2nB9vu1Nbhd09hYEIzJl6vVhnyHocec9DqryvpOG+HM8k+07hNvZNbXCu5ua5LVTUfLV + PRseQ8pW1N3j/Lrx4P13AVahqOxckknJJ6mQwlmlTNZgFBLkgADzJhfIecm7r7MrytYNxKoiUyvc6i1R + iuMZwFHxEkjad72J4ILCya9ron327PePy4wDvpHpPP8AhV9e9mhTt+MWne2IZigGkkMQCcN5/KS3nbCj + Vt7s2t9xSlUrA6aTaWRfYN1UfKTex0nUcfAC+UrP2uX1Krf21nQUFrcF3YdVJ8v0GZy/Yg0H7UWAuiBT + FUNzHA1AHH74lOtxCrcUKiXIFaszd4tV/GD0OT5jA85laitTIOCNwRHcPNz458v2au3+0jhKUO0N3Wt9 + C02UVnXIGkscHA8999vWcMW2E0rnil9d0VpXNw9RFbUO8OSDjHXrMvzjsOXMzyUNEkIQhYxCEIREIQhE + RR4uWJFTZoQXRcWocTuaiXd6DVqVKC1QV5gtPGAdumMTc7K8Asrvg95xG+dKppKy0bcvpJYDqfP5CSVO + 2FFOB21K0oaL2nQNq2Ry4I67dT6A9N5wtKvUpkGmSjAhgwPQjzhda4YI+6S5CLc1RRDpTBOkN1A9DO84 + Pwa3412Ps6VM0qdyK9VmqkAcwXIDN6YnA1XarUZ6hcux1EnqT5mPF1VWm1FKtRaZ5iqkgE9OnyhRhmYK + psafiNrRseJvbtXS4p03CmpSOQR54nUcdt+y1pwVnsma9v6hwB3pXRnfOnHl0wZxAwVJxGiEu8Nge5Ap + bJEXScjJ6zufs3tLW+uLuzuwpapSJVSgJ6EEg9QRmUe13ZS64GytrFW0Y4SqBjB9GHkY9Ot1f58nEzxu + RMcnUTsuw3Zilx2vVa7OKFIDKg4JJ6fITE4pwqtw2/qW9dHV1JAGOozsR6iGnW5fRmAp4ZafCr5aFK4W + 3qmk41BgpIxnHUT320Ura0AxBYUlVj74nN/Zxk9lKCVAdiVx/fnTZAGNgs048deb6X43pjiO/fuGwz5/ + SI3Ksbq3bSYZ2bUZer1tkE7wZpG7YEbmTqFlZoh3jcn1jtXvCzWMjEj94rsMRo5d8iOlZ0MxNR+cSIiU + bwTlLecQRyLmVGpNO8VRjaGI6A6gI0+2IaYfDDSesdWoMXaA84Z3beLbGpPhjG8Mf/NG7w3TqSJpjtua + N1R7jUY8ozTpj9W0Zp3xGUajTmIfBDED4IPuEmsYz4WkjHl5YzEYxqTVGnwR2NTQcbShGnWqMxpjvpBe + USh3SkzVB4piRb1Z6msNo3TJI3EF3HZN0wEkC/igAMeWqG41MxnziaZIBk+cAunaG4DcxV8UULtHhfwx + 2mLcaosQxJQDBV+sncBMwIqiPUcvNHoo5ot1mG6MLtFRVHSPVfSCr7ROdRhM0xcflkqrALv5w72swosR + yr+GSheaKFxF3wYUKrBV9pLoihT6iT37jto1VvWKF9xJMQ0e8RnPRN06fWGIoX8UFQ5lbI7ZFX2gFkmk + +saVPzk7kE0DEAMSTSekCNoOSRqjxFAjwu0NMW2NXI9/9dohqgiVwxbxRyr7nppntdgerwDNaRm25YLh + l5o0EDaODBoRr+wUDBgsO5OnH96AXfrJVfSWHwxbSDAfdBoIXEaVOnp/hllGBDBkkiqGXKESXNKjiH1U + tJ84zSfh3lp6RU9Iw0yPKBybpeJKJdmx8UeuOkAvNHaTmV3SMEmpyjrHCLpGJIiydkwgbDljgR1aJn2i + MSRgRXQOiV2JGFMVFdRn4oiLgy0lMFV2meeequLFXzCKScsZMijl1RUphR0k6KWGMTnc268OPzM0hR4I + mD03k+nSuGIjNycKIhtXCq1lC0qjMyU2UFgzdB/NOMqdtK9FRSo29uGU4LDJBA9B5TX7V8G4txHSLc0q + lIZbCnBz756zzeshoVWpuMMpKkZzggzn5M1dXiddy5YIBatTtBd/xSre27mi9R9RUNkH5jzlmjc8Jvq9 + Fr2kbPSMVWorkVN+uPIzmGhzTK805ne8r1du3vCrWitC2tK1WmqqqlsKMAYmXT43wy54dfUaNA8Ptq3N + WZaupqh/Co9/0nnrAiCn5mK0y6vLPwyvjJ0k6c7ZkcGhHcjd19nV8Vu6li4d1rDUMDOCPM+2J39wy8P4 + dXu3ASnRUtgLpzjoJ5BwHiNThvFKV1TzynBUHGQeonr1/Zp2g4PTRKzpQrYqEqNyvUDfpvNcc3t1e10X + /wCnGh5S8Y4jdVb27q16zkvUJJJOZUVCzgDzOmb3a3gj8D4ktAOalN11KSMHGcYP6S/2N4A/EeIU69wr + fdKZyxIwCR0AmYK6uD/PnnyOKXP8S4fX4dW7m6ADFA2Ac4BGRJuzN19z4zaVs4VWAb5HY/1noH2g8JFf + hqXdNP7SgdLY6lT/AKGed8PtHuL6lRIYFqgQ4G4yZekfE8+nePML0/j3BbTjFFhUASuo5Ko6j2PqJxNp + wjiPC+K0EJaiGqrTFdd0OT69PoZ6Ra0Bb0KdJS7rSUKGJySBtvHPTFRWSoA6N1VhO76jPT6bu/yjpPDc + 5xXgH8Y49Ur1qrJQRAjsF3qEA5x6bSyvZmxoXFs9opR6LamLHVrHv7zdVdlC/wDvDSY/qB3a4dObVJPF + gKMyKjQFCmtKmMJTJwPISzRp6j5bRt/c0LK1Na6YJTHUkaoOZg+bo7DHHbQ1mFCg1Wq4RQNRZjpAlGvx + uwpWr3DN/ZbgMVx3h9ADufnOO432s++XQQUS9irhjSY4NTHTUfT2nN8S4hX4jXapXOkAaUVdgq+QAnPy + 9RvwXncnWmChdWnbu5a47qoNFuTg9ydLEZ9Tnyl3s9a8P4n2uuLu0rUjQVRUVa2WOojc4PXBzPN5KjvT + bKEgkYODicrkvu5cery2ORsL2fj/AAbh99wi4q03S4qU1OGNUsA3oFB6meV2tW8oXdSzov3LViKTAgLj + fG/pILPit7ZBktLirTUkMdJxkjoZVr3NWvc1K9VzUq1G1Fm6k+smrqOqw5UyDTdPxnhXD+G8OqW5qipx + WnVGTTOabKRtj6fXM4/qY9mLeI5MTwmO5c8jN2Gi7X7OKFGt2jt6NRA1Rzmk4JBpMvMHHkemCDPfQytu + x+c8D+zj+37Q2yLlLkAslUeQAJOR5kjb5T3JWcWymoAlTA1KG1AGZZG2+t+DQ4mtGtpbGeWV7i5HMWxK + FxWLK2okSlUuS22TpErDi3e3nzh4tB64VWOQJA9cnVvlm6Si7lmzkxq1SHy03OILneavVKxAbbmx5meU + dquAXj3j3N7dW9NKjHTVq1TjHUADGdhPSXqltT56zgftQvgyW9nTIJUlmVT0OMDPv1iyw0Xj/J5GeCt5 + 5VULUYBgwBK6h0PvCjWei6OjEMpDAjyI6GQHzjZBfJ787LRveI3V6qi6qvUVc6ATkDJyZQWAEdjSObMK + lfbRwhCFEQhCERCEIREIQhEQhCERCEIRGTCEIREIQhEQlmjRq1WwqM74zgDO0icFTzZhV2ut3b/ZdZPW + 44twtZEFv4gx3bIIwJ6te21ve2z292gq0mxlSPQ5nh/AuKcU4XRrVrKqyUgw1HAIz5ZzO47IdsrjiPEU + tuIdyiVAQhpjSdXkDv5zXDMDTe30HPxY4nHke7rOFcEtOD17l7QNTWtjIJyBj09ocX4RQ4pUtKtQIKlC + qKgON9IOSPrNJWKwz6zTsNeL2/q49aDxFNQqsKYCJlmwqY5jBiYBgB1kZbyaLTb/APXE0TveNZtusaxg + xzHG4zEYwPjjevlF5jcmfxbwzz9IMOWJDVMaozVmLiCiGokGYo6c0dFC/ileIgRVxiIF26x4XEkaiMHr + 8MVRmIIdJO5S/wAsT4YuIDaOeo1bQLfhiGHwwIjfxZjY74YaYS1uZ6xPJo7HLEYRb1PUg6Rreq4jtMCv + ksN+I1Mx6RG+UdEcRCsakZRiMUR+IEHE0HxSlEwgRleWDLtmO+CMSho9OnUI3+aSMNS9JGwjGhJMfihp + HxRW9IIJW5akYCGnaKq/ixFwJO41MVPxbxwUyRVhpi7tTMKPTDT55jsR2mStZhRgbttHYjlU9YAEeUO6 + DCEG0FXduaPC+bLHKvtIc4MJigRQPzR6JkwC6dod26w1AHNAL4toqrv0jlG8W6gmqur2hpaSARyqIb3G + qNRF0yTAiaQIo1R6faKqmSY8UMYhGqNVi4j9PoImj2gEamKsULp8UeFxE6Sgp3Nx+GAEfp3iY9Ia1Tsm + wwsfiJo9oe2NzcRun2WS4iaYajuuKWjy5TdYMpXbBkaORup5ZOtYFW1CesmRfP4I0RU4Yt4YICPD4Y53 + BWCKamyiHn9no3NTOebePDDPNvArpHNBVwv5olrBlRQeuYurTq0kiA6tDRtnMlRnpnd4erGODBhjEh0+ + WYo5RjaCAVC04p58ovdHOMCIjN8W00LdAy7nmmLmlthxmdRWicc0Hpkek0xR1Bt5E9HVtiSctq9Pr1Zr + KY5Vl00TnpGigc9DL+0s/wDO7qyL+ISzSBXbqsmFEr5csVKTr5TLPkG6cOJJEJHlJFY9BJNJxjEclEs2 + Jj3G9t0Y8aUSKzNJadE4yRLtGhy80mWgArdJk8vnxbY8Pjbee9uuL8SsVNvSovQtqvL3wOS3sD5TzMhs + 5PnPV/tPtLl7S2ZHQ2ytjSAc5IO5Ppiec2fD7m8uaVGmDqqOFBwcZJkb35vluv4uR5Us4h8Rqz07tXwC + y4H2PWiuKlx3oPekbk75HsMTzfu85ELh5eny40H2zIw9d51HGOzFbh3A7TiL1g/fAMaenBXIyN/Ocyoy + cQs8uNHSaaOSTVvuEXVitD7xSKd8odfl7+hmn2o4AOD21m6FqmU/tWboG9BLMFFg4stLqw7GnquaILDm + YLv06+c91tqop0kRAAiqqhV6AD0nglqCbmnjrkYnuVmxVKYYYYKM/PEviBG9b4vLTJxvg9DjLW33kAik + 2ojG5GPDn0zvNKhRpUqa0qaBKajSqqNIH0iI4wskDoq6mMXa78Xu4cWAuX6zK6hlyw+k5+94PRfiVtfU + wgr0qp1FRjIIPX3Bm69bUG0jlkDKCzDGWPrNsD+2fPw4Z0KLzbyZFDbfFH0qBY5U4xJqagM2/wDim/eF + gcK1YIVbpzR4TPUSylPdjG1VHTMDk34K3j7DdHSp4OV2UTzTt92iF61SxsyDQU4dh8RHkPYTqftB4o/D + uCU6NJgKly2kkNuABvj59J445JJJnLz57dF5HXdUh9eNHAQgs57xro+ynBhx3irW1SsaS90XBC56eUb2 + q4OOB8Ue1p1u9AUHOMEZ8iJ2X2VVrQULrAA4hnOWG5p+3tnrOP7WWlehx65S4cVahOo1BnBzuOvtK7HW + 7tcA4hDa3PeUVfadzwHskLlVfjFx90oOjOusgFQMYYg+W/Scpxi0Sx4hVt6NzSuUQ7VqXRok1YZ8Tgbb + OhCEVjafCeIVeGcToXlAjvKLhwG6HHlPVuE/aTS4je21pVsu5FQhTU73IBPn09Z46PVhJ7YlqyhSEJIA + YnAG/UmJN3d0nW8nTusXw30LcVUYNpP92VGbV4Zm8EoXdtw6ml7di4qAK2oDbGNhnz+cv/DOvjwA231O + HM8gKT9oLmNYx2Y0/lYyjPp4ZznaG14fwzh95xBbSka4BYNUGrmJwOv6zolJ09ZzP2gU69fgLrRK92GV + mznJ3wAPrIyPC3N1WuxdbbymsHfXWYEqx3bG2TvG0qbVagRASScAAbkzvLvs9WtuwiiogWuK4rMoGSQe + UDbz3lbsJwJLytVuLg1Ue2emyAdCcnOc/KYYYq6vnDpM3MEn9luxlW4dbviqGlSU5Wi3Kanz9BKn2k07 + ejxWhRtaNKklOiMimMDckz1Pzz/WecdpuBX3E+JcQv7elmirADyZgBglR5iaZ4AeLs5+kOPi0G1uA6Qx + Og4LwC5v/wC3WlroLVFNt8HJlXj3CK3B70W9d0LlA57vJAz5SNOt3mPFlibSoVabrjUpGRkZGMj1laaN + 7xCtc0balVCYoJ3akDcjOeY+czlk2Lr8nQ1SyLaqKArmnUFInAbScE+mYWNu1zcJSpAs7kKAPMmFRirq + qnJlgW1Y0u9FJ+6/HoOn9Z2PFOw9zb0qZt7mnXqMcd2RoLHGTgnrKvB+I1eF8M4rb3dUjCdyLWo2Dk5B + IHtHpHzW8Li6bj4QPigIrGIo+c16fBb2rZpd06Wbao2kVCQADnHN6TPqqabEHBIJBwciE017KExJq8H4 + Td8VuDRskV20lgpYDIHXGZpcT7MX/C7ancXop06dRgvK2SvvgfKPTaHFkmw8XMRyrO54Z2MpcSQVLLi1 + o64BIVWyPmOohe9g72hfW9GhVp1hVUsWxpC46gw7G2w6XPLyGyZ9l2le0BDAEtRYDI+Rnccb7L8OvaN3 + Wp2lP75UUqpUlQG8jgbZkvCezNhwxraraqUr0shmycnIwc+02x4Jvhx6PN7nS9EGGuQudsOy1C04Be8P + Sq7rcqCSwGzY6j2zPJWoVrO+dCClSm2D5YIM9+EqDh1p31es1BHesAGNQBs46dYZ8Y+p8vQDrs8apOG6 + /uVAVXFWoKS6qgGAxx1k+fKIFCjCjCjoqwlb0avSwO3EJTnHLA4jdWkQ+OLerSN/SIYpOInrEMTWbLYi + MI8esNOY9z1Mi4jmA9I0CLZGpPriGkeseFxAL5ydyCZj0jz05TFVeXpAKNOcRzkEIq/FtDOfIxDMJIL+ + aAiqBFuAkhF0iCqMQ3XqFEN4v0hpGmCwE3DRcR2mGlYtx2TcQUQYQAxHvcdkkYdxyx8Cu2Y5ao/qT84w + x+k+kMY2aI806mY9YjRWETTu0CWpp3iEbR+IY+svZT2UWP8ADAL+ESX2gF8X4Yd0dlFp1CGmShcwCyO+ + OyiVdukcq+0k07wFM4zBzjsmaQvSOCx2IadoLVqbpHxQx/LJFWKq+KTuNUWmLp0+Uk07xdMNsBRIPaKq + /KPVfFFxiLc9TRFAMk0+0Avk0S16mKoj0UZgEAigDosDcSAYjlA9IaYBfwytUTceccogo1ZzHKNow/Ym + qB6QZd5Jp3jcflgG/EtzFWCr5SXAhgLLMPFmtEwiYkm3xRyqOolBuTnqjC6t4YxJcRHjcNFPfQ7QEWJj + EkPG474K+LeG8O7J8MDtHhhulyuCRfaPwZJpC79GxG9Wbcz1DPd4nYE1eXzzHIxjtII9YaNPh2hsZmKe + pyuWHSPQamy0jpKebVJqVIt4xMM8gt+LBfcgUZhpk+nSI1hlebxTMztXChRcyVKI65zHoviktJciNzjD + i3RJTxq2llAVVT0ktKjndvDJqmjChRlhMXMXV1YcTiboAxVWyTFSoMcxiPTdm6GCIWOMGSpX5PRWqWGX + rJhRDHlIMrUFK6hgy5QQ/DmY5+PV08fk8k5LYMuMRBanMs0lPQycIDOZ5EuvDjE9VDuSNsSelQC9RzS2 + lLbmEcqgDrmLvUrOIGaiBV5fFGHOrmzJWYKrbzPr3GSwQ4hx4KxmmJT1AjLpYB/mJHTpUlCBUpBV6YCr + p+XpKQqk+LOnMs0GLNuROhwQuM7c3yScZ4Lb8ZoLRvg5pqSRpOMEjGffE8o4f2S4hf8AEbuhZhVp2zlX + aocBmBOAPfE9kSpgRFYJ3hQBNRLHSNOSfOYg71YdV0PHypk+NWD2i4C992f+6UwO9pqulScAMAB1/Wef + DsTxajxFaTIDSZhmtSOpFH9dp6wLgu2NfLJNtLFvOadie7Dl6Di5EbGo24SlTFYCo6gKGYDJ9T7Spxnh + dHiltTt6pIpZBOnYnGdpsuobpssqOumo2nM7OPWWOqM+nxDWtlzPZ7sknDuIVa13pqqjFaQYBgQRsT7z + qiAunTg/DywZiesjyctKOMx9WfHxY8RoJxcrspxDU+OYxobzaCLqGFi0FuZr6pKTZ1BjJUXSzF5ErBdl + GWg7OvWLTu0w9eadGC+XLDvRzafFmQCoc9IJzNzGVjgG9w5/hXUqiouPikFVnVm0gnHNp9YU2C8iiPdQ + Wyw5YgRp5HuxvG+2t7c3vFagu1NI0uVaR+Ef6nrMKpQqrRSo1JhRYkBiNmI6gGel9rezFxxbiVS6tSiq + FClTsWIz0+kq9uOFi07L2FK3QijbHcdcFhuf1nPlg7Vvmeo4Mlcm8zhCExuG3+zfGanBbzv6aK6MNLBv + Mex8jPTOzr2PE1q8SVUNzWfBVgGNMDYBf65E8W88y3b3VW3qrVtnenUB1BlOMGXhmni6uHqHjQTZehdv + r+07q5t8A3qhVXAywGdRyfKeaOXY5mmnEhVvalxxGiLuoz6mLOVJ/SaHFeLWFzw5bbh3DxaOSGqtnUSB + 0AJ36wUVY5uU5dtzGYRZbo21WsSKIZ2UE4UZOB1Mi5gWp5nR8E7O3XF7Krd2rIe6fT3ZbBJxnaYGnxAz + t/s24nRs724o3NQIlVVADHAJBjwBdNvwYDmDa3ZLtOv9jw7iad0wApJUzsSNgGHlO5KhVypztOX4t2Wo + 3V6bu2qm3rqQ2NIK6gepE6Gg1VqCmqAlUqMhTkZ88e06OMfTfS9KZYji+Qnv8onSN1HVmHMs1Qurvpcy + C6tqN7bPQuAxptjIXzwc/wCUcN4fyxa34jezyU2oDbqudlMipolNcUwEXJOFG2SckyRF84Mud8Q7Ap9z + U9I/AXwxMLFRduWGhnqoWtlQ4ct3VXC061U1j5Bcjf6TyrtPxt+KXFQd3SFMVcioF5yBkDJnpHa+xuL3 + glWlaeJSGNMDJIHkJ5zxjs1X4Xw6ncXtamleowVKIySfXJ6DEw5d+i8T5Jf/AJxNBcxLVvp1r3gJp5Gc + dcZ3xKsJjeKOr1Ovf8G4t2ZNlb1qVpUAApUqxwVI6b+/r7zM+zbh1pcX9WpXek9WljukJ5gQeonBgyzZ + 13tKyVaDulZSCrKcEGPfkW6+PmO4yS9l7QpaOrLeuRQpUalQsDuvkCPfPSeL3L6qzlS5BJwSckj3mzxb + tBfcVpU1rvjSgVsbaiCTkzn8y80Z9XznKiGiZAQhM7irr3ld7VaDVX7pSSq+WT1lP44kITVfdr8J4nU4 + bd0bm3Ga9I55jsRjGMTau+2N/ehqV6ttWXUGCsmykdMYM5EfKKMZIxGLa48uQaG7zhNneDilPi9m63FP + ArVVt+X+anjyIHl5z0qzuKN5Qp16BBp1BqUr/RvfynkXCeGces+4vuHW1bSwFRSvMCvuPT5z03s3XWpa + sj2NW0uMlqtJgyqSepVvQ+kvB1e58bv0lrjeGI4eON2mo3t9ssTaAz8QjtMe6gkENMdCHikJsI6N0yVr + CTED4IunaJ9Myd6jUadPwxI/G35oaR8UN7q0zVGdoadMdpgwjgJuIYhp9o7Tt05pO56m4xCO06oaYbjs + gLy5hgw0xwA3lbIMKNRHdJJp26QC4krUYUaiAEk0/hi4k7qCi0x2k+sfp+sMQ3GpmkxpXykuIhXDZhGp + kYwyskxmGIU0bCJF82gV/JAZJuRhGkR7L7wxDctTNIjQMyXEMQ3qOyi0n0ihciSYgqx7Y7KPTDTJNJ/D + BVi3BhRqsULtJVXyjguR0iPEBR6UxALtmSKudUcFOG2j3HZQ4hp2kmg/ggqlmi9zMdUar6JAKPXMnVfS + GIjRGqDENP8ANJsGLiEkoMRdAUSbSYadpQDFDjB1w07yXThvywwMRmFC0ZG0FEcqn4o4LyxmDLvowI5F + McqxyKMR6pHc1VOIKseWwOWNyWjCahJ9IBtWryixN8y9Fm5xtjmjSebpHaYeWJfatms1W8UcG/DGqpjl + G0rDDTuzWNRb10xuI7b4jDYS9QPiaq7dI5VCiGV9I1m26yewjbBOFkZ5tUDGOxEDR6hW4wg6unLHUlC5 + 1R6NgfmillK9Bqm6peeBIuF1aRFKg+HTEGG1aQYqLuu0nevNRS0lGOYiSocMvSNRUPQSZE89v0mWbt3d + OBo8TgoZebxRrKGLHbTBlyv5oCm8gdV+4Sn5LJ0plTkxEUjoZIgJ88xOfirjxN0yLy4kgUDykaZ07yyi + kmYLq7cDZMpru2r+klRUXdsfpALjVtEZCf5Zk57tTDUuzZKgSdGCnqJWCkdDiORTnLQd6jB816kw8xJU + qIuo5lVMasR22WJOFEy15ugy1T1a4VeWRPdBVzM65rMrMF2WQLXJU6jN+Pp1Lm5Oq7HVdq3QbUMyrp1t + qYxlNlznPNJHqIvux95scfb4LF5e/wAtLoGV0RyB1O4xGU6moYMtaSw8pDs8NeAJskerpXCgn80qu5Zc + Zk7qWVl+KUXQq2MGVgG6OXJ1opEqBfFJhV1LjJlVEJDH4YaiuzGbuA3OcjhWWY48Q0yJ2C+kaQdOc8sa + qk/FKwNQ5rId4R4XZo5ACuMR71Z63RhUbVqkgXFPLEQdSN41lJ2zy/OJN1YgTsaVyPFAtq3gzYGM5jWI + XZZII1L/ACGYcwgnUxuPFBB+GWao1utI+KeMjVDUe75pCM5xHaj09YxCEdUjNnVqnMfaC1ccBcUSopFg + KqkbkE7YPznRrkzjftCoXl6KFvaJVq00y1VaakgHyzMuV8JcXVYJg6N3l9QFTESdNwDsxecXrsGHdUEO + HqMOh8wB5mdRxLsfwu14VXrF6+ulSZtTOOYgbbTlMFN3iHS5o5a0F5fiEewwSI2Tq59SQhCKmkUE7T1D + sNwA2iG/uRirVGkKw3VD5n3M4rsnw7+J8ZoUqgc0AQ1XH4RPZEACqE2UcomvFhvy3rfH9Mcm3K8b7U8P + q8P4xcUmGAzFlK9CpORiN7L24ueN2dB11I7YKnz6z1PifB7fiNzbVbkB0oA8pGxY+vttMyjwC34bxu2v + bJGFIsUK9dJIOGHt5RvE7q/xOPLs9XSUVCU1pJnu1Gkajk7fmjukB6wTmLTpwNXtY+DxLmIBzR4AYThe + 3naCta3H3G2JTCjvWXrv5A+W0WaYG7n5uoOLFW0e1PaijwzVb2Td7d9GbVkD5+p9pj8G7eFUalxOi9Ug + 7VKWAcehHT6zgGYl8nJz6xrZzOV5Xey8XPr+Vdjerjt7wojLJdhvTCyfh/bbhdzX7qpqoKdg1TGD8yOk + 8h0jzguVh9rus+S5RFvoVGDhXUh6bAMrKdQI/LJFXSJ5F2V7W1+DMKFfNazY7qTuvupnqHBuMWvF6DVL + SsKijlIIww+Ym2GY3r9L1uPOa3pou0XEK3D+F1bqhQ71wN1JwAPU+onjXF+K3XE67Vrt2dz09APQDyE9 + r49Y1+J8Lq2lsyI1UaWLAkAe3uZ57xjsyeBcJq3F8Bc16q92oUEikSdyx8/b3My5VXxcfyXFyLs9XC9f + UxoG83OCcBv+LajaUXNIMFLHouZqcP7C8bva9SlTtCioxVqj8oyPQnr9JleVh0vJmCC3H9fOGDmdX2x7 + KV+zdO2qXFelVauWHdqDy49z16zlDuF9YFnyYPGuORpJkIYMMQstMQhCESzT4Rw+pxC/o29PZnIXUwyB + nzPtMybvCeMtwm3c2JKXNQFarsAQB5afQ+8dpjrZu7H/AHP4Qt3bcMa4drnBa4qrtgYyA2dh06dZwPFK + VO1v7ijRJejTdlVj5gEgGdLwDila5tTw+h3h4pc1WJrM2wUoQST1yBmctd02p16lJzllYqceZBxB0+rb + mcEHEuk7Odsb3hFAW7Ba9AEYVmOQPQET1fhV4OI8OoXaDQtYBguc4z5T59XKz1P7N+MhrGlw+58YLChj + q3xEH065B+ceD503o/G9U9/15N3On2zAbeUfpPrG4KzRb6bAlgI8Lj0jcflgLVqbjzhpkoGRALiG41RB + fJo4CPA9omn8MW6ggCGhvRYKNo5QY9kGE3SIBRiPC+8FXfmi3qrsmgD0MAo6SQUyfON0nDRd5Mwm4gF3 + jlWOxI3uowo1WHdn4pKi7dImn5w3qOyjCjzHNDSsl06oBeWHcQFGF/JFC526R+k46RAuRmIWrU3R7wx7 + x+j3hpgRqYq7csRh4pIy8sMZ2gL+xqixDEcVxDTp8pW6dbm4hiO06oadOqJdS1MwfQaYaY8U/NfrDTFv + xIJmmCrH9375jlXbpEM+yiC7xVWSKogFl7jso9EFWSintFC83LJ7mNaoVWLp3k6oM80cFxFPVDp1GCrp + 9ZMF5vyxyLnZto9sGFAFHxCGn8Phlhl2gFxGO4cKuKcAuJYxDT54EoN7ofFX7s5gq5k+j2i4h2Sq6rDu + 5Pohp/EJWPHujPPVBpjNMsFcxGpgM2ZtjwurmeUoCu3SJpkpxIzzeGWcWrN5ZuC2qGk6pJpI3gKf4pqc + XizeXVGFPNFAwJLp2iaDjyi+rXuMeXdHCPKkRmmBxR37kgY5F9o4LEYEK0aiAX2MmRR0O0elPP8ALK8S + NvigChusaQQ2JcFEY9YzufFySR1PsWraOVjmCocZYy4lHT4xiNdNuUY+kzeX8tDiUqjYVfzSPOVz0k70 + vNo11IXpGPiTxpQbdMwVU8ykHplTGMph3lGk8XHpTJjxT0nmkiU9syRl0jLTV5LiOPRRKoXy6yRMBeUZ + ihdQ6RyKVbmgea8MNSDI3zyxUdxqDa45uYY/rBFB22kJanjwQjFjJ0U6crusKShQxaSo3LhZktrgKbaN + CQW1Ayellm5YImd2gilZC2uBp81pVCrzHMclUZULKZYs/nH0tl89UyT+3QP8r6OFONfWPaoCOUSmFLMp + 31S5b09Q1zNNWuCviEUM3MJNpChukR8IJE7DHXEk22imMIRlolRhhh8MKKnmK+Exz0gytrIlBpltSzrt + TjlBlMqcdJsrTTQwbOqRPSGMLv6Tpw5UNXHy8Tm7symrs2FllKfNlj0lqja6W6YzHvRCD8zQeUWWPCh5 + o6S82cf4ZaQFvP6StSBU83ilhXCrlvFMs3d0YBhDMELDGYxssW1AasR4YavIwuGCrgbs0Qs0E3VHU9Bk + qYzQWaS1G0qq4Grz0xEYrnBwxnRgurmywFlajy8xkBXDYzLD1tKYXxebSrqNTfMvBXY2WaHgpEbOpMSN + SVbz6wDDPMeb8UAwz6y6JwYlW1Rocs3N4ZIill6wK6d1xDdYTu7GnOeaNK5OFhqKjEMnT0Eny1aJqrjV + HDPnDZusCuIblqWAigHTiNYY6wGWpwbC74hq2bTG6toBc6tR5RD37iEVFXFNAi51aVGNz1M4X7R+M4pj + h9FvRqpB/Qf5zuumqcL2/wCGIfubWlBc1Syk0xlqh2O46n5yMx14vO60exMbzz4Zrjgl6/CX4joxbqQN + +pHqB6TU4d2PvmvLdLqkUpVTlmyDpA6g+hnoPGqCLwC8pKAKa0GUKo2AC7f0mOPEoreXxdLlmLl41eIl + dpp8DsP4jxW2s2OharYLDyGMzOOdRBm32Wqmhxm2uFGVRhrbBIAOxz+snEFLk4uPeRi3cdmuzV3wXizO + tVKtsyFSRsR5jInVYMROnL9Gjp244gaL6bp+I4zRIBD2ijeEG28yb+UBD6QUf4YDMLI492gs+DBkqZq3 + JGoUh+2T5CeR8TunvruvdVTmpUcsfrN77R6T0u0dZ2DaKqKyZ9MY/qDOWQbzj5M1dN831vNlnk4vgKKE + ITO4YhCEInjrO/8AsoVzxW8cEhFoYIz1JYYnAr5Ts/s04mLPj/cVMCjdJ3XybOV/fb6yh0jdnRIcot64 + mvykPErFL6yqW9cnuqrjUF81Bzj9pY7vzUx6dOabKX2OPGZiPkoLC1t7GkKFpRRKYJYBRtky6Lgrt6SE + HBysG1k5aQ6a8OLHA1jeWfajc3t7xJHejVSzpA00qFSEqHzcfOcC6p9Z712m4dU4nwS4tqAHeVXCgnoN + xk/pOb4Z9nluq1BxG4cvqwvdbADHXfzmaeb5/qvj88+VSj7AcAsrjgDVr6hSrG5YgZXJAG2M+RzvOT7W + 9ma/BKz1jh7NqpWkwIz6gMPlPVOHpa8A4HSo3NeklOkChZjgEkk5+c4H7Qe0lLiaLa2rI9ANrBCsCpGR + jeCGqOq6fi4+MxfCF55CEIrwohCEIrFtXq0KqVaFR0qDoynSRI96jcx3J3JkYhCY2rxSxewuVpNWSqrI + GSpSOQwI8podjuKDhfFaVzUAennS4x8J6ke4nPaiQAclR0nU9mOHDiqi1R6NOvTOoKchqoOMqPIkYyB5 + wunpdvIOPu9qoulajTq0XD02CsGHQg9I7TqjaNMU6VNExoVQoVRp6CS6Zpu+44MFwHKYojtIi6fSO08v + NDbdBjRqsNMkVfSAGIh3GpuIumSIvnBVMNlRhM07RFUyXENMnephR4hp8W0kVfnHBQD5/SLf9jVDiOC7 + STTFVYl8QFGqfhzArt1kirDElZ6maYmnzkir6Q0/WUOzVWijVfFE0r6ScUzj8sZgRRom6doaY9l2hiId + NOqNVENLmSYhiMY1R6fxRNMlxDTt0iXctUGk/FAKPSTqsMQ3GqDSObaORZKq7RwTm3gu41Qqu3LE0yfT + DQPSONUOgRQsnxDEe41QaY9VX1kgWOVceUBjVDpHzgi+0m0RcR/ktUWiCrJVU+sVRAJ7KFRHKojwp1RQ + v4o9alubpgy8slC5jSviENbjdBgxwEk0xMTTjwd6sORNSaR5w7uO0kx6L7zrw6ffm5Xm14oiuBDTJWwI + x2RW8uks4tWWXLvxQMPFI3wurePeppHXllepV8Wma+AsXyyOwxGowkTMfWNVjmT3FPms6gT1jlZV9DIE + Opc7iOUb+vyh9oFX1OVYRgeoitU2wsjRXYbDHzEkFLm5pm9QNeHTtE5LnbMUKcdJOiCWEUdJk8rb4dPu + popA6csevTpLL0+XPRcSuyhZOHLuHhSjOObeKjadWjfEcqhQxc80Y7CmeSamZqzeNKRahXdhHCsG+sq1 + XL+0RAV3XxesHISQI1svvyyJqxVsLvGhc6jkxQvN0y0wU34ujAUg1cjDCROurVvLGnOzCDqCG2ic9Vdi + +6k6hm6QVduWTmiDvqju5GnxyHPUfVcZSpgjpGnGWGJZRAqxnd6mnTsG81wQ8TUplhzCPZBqk6Ui24Em + WkBuwieTVrhxbKg9LA5YqLy9JcNNmPosdSQMucQ+zxGHF5oUXUOWSClg/mjtOk4QYjkUhstMnNunDAnJ + T8mMmRAR5GFFdWrUPpLCUQow20wc/N0YcWyrLQDHKyZKAxzSVFCjaOVwuzTNzW2x4gPNH3WN8dIhYjVp + PLJXqBxgSMLzflgO/LJA9UT1iq4YZWM6rlRJKi0viIj6QRVUMMzYQLHMVi3qeTjHtH1W5lC7xrFActti + R98FbVjl8UE35KhcTW5ldipYdI2hktzHLSK7rd82UB0iNpVCGwuRLMfFg8vmv1augYkYrBm5vTTKVatk + 4UkxiViByxnFspebzaDaDqOYyqwC8udMpGq5bmJh3xK43lfVqTzFMtQ6mO4ivWLNzZMgWoQeWGotvNOw + szldU6Mx1GBbUfLV6yNM4wu8cjaRzCTrUjJYdSx5jlozThWziS4J6mBU4OqWNDh+0OMx2mLy6dMegEqA + hGIHpDrBRFxCsGIDeKEJgoEhZ6nooxGnEZv4cxyDmhqBnpT1b+kkagWGcSWgNKtnBkz1VZWGwUTJzR8W + +GAm2od0eYyJ106gxl12paWC7t5yu7azsPDKwzV80Z4B6ol/LIyoLI7Ad4oKhvNcyRkI1DEGU+s32XO4 + f2NSyOrTWtSqUagBpspUj1BgBvJAPaNfGqHj34uA7R9ki3E6H3CkKVtWIpnBLYPmT7TreBcLo8LsFt1C + O4HMwXGTnzmoigDmETSPhmBgDuyw6THBcg8yDOMQX5xcQmnddeGEm3lFCnVFURcGJzqMJwHtmAEEXEco + EhzrMLjvtOsUq8GpXWAKtJgufUHO36ieWfCvrPau3Fib7s3din4qOKwHqBnP7ZniY5TObP23zXyeHZy7 + CjhCEm8qIQhCKb4Zb4YKzXtIUAxq5Hd6euc7Y+sor4hO/wDsjskr8Yuq9VQTQpA0iR0JOM/pmF09Lg58 + gF6rTUtTpmoAKhUZVfxY3/eCDPnHsp+LeOVduk034vu+LjcMQm6IBQ3tHKDFZYt2nZM2xjMXSsdp2mZ2 + i4ieE8IuLtBmqoC0l9STgfP1hss+VOPFyblftWvbQcKp2jkNea9SgHdR5k/OeSBtsS3xG4rXF3Vq3Ls9 + Z2LMx65lHTM13fE9b1LzcizYQHihHcNIAWWIMzZ7N2FTinFreypjJqEZ9gNyf0zOq7f9kf4alTiHD6af + cywVlA3Q+vyMW7qw6XPPB5A8F55qm3xDha2/B+H3yO7/AHrUCCPCynGAfqJi4nc8BsLjivZ6vZXVKugO + bizrMhwagB1Jn8w/cQlw8X2KBtuK0YXODPWvsytrS44X3tegjXFNmVXdRsowRpb1BmHwbs/cXvZK4Vbb + LtcU2Wow3A3DEeZHrPROyNk/DuB0rJ0RKtIsrYGATnr75GIDe38Z0OWHKZZFrac7w0GSAD0gwmm/F9R2 + TAD6QA26R+mGmRufbNXEdFAHwwxFvVQSaYL+aP0QReWLe40zAIuk/DHIud5LpOI96qCiVfaGmTBfrFC/ + hEjcGFEF0+UNPnJdENEPVepjLyw07STSsXRBY1RKu3SOVYumO0RbjUzT7RNI/DJAu0NI+EQ3TqjNP8MF + X5STEVV/DD3GqPT+ERMSXAi4jDxGihC4hoku3pDb0hqNFEFEXTs0eOVoYgFMzTAL+KPWKglQeZirBV35 + pMQFjGbHlFpjxN0iJp9o7P4ooXVusoHXmhSYqwVY/S+Id2es0w490OepNPpGhQ3hjtJxJUUaWj+tpOQa + BlQL0iad2kh3ZoxlHNNMOJaMuUJskTdcfEIzTBDpbPWafTQcvmsKvK0YwxAMdMQuGVsHLSDiRqeU1N0j + 8cdt6yN2kJqfhM6sOMLly5d7KfUiKwjHrAekhdtsyJ2mu0Ln0NI9YsG8pXeoebVmDNqHWN0hh1kPJBhv + 1NeoWWROxbeSPRKjOMyN1wvL4vnMnOOxJv8ANBGCnmEDn5NIyxzJ34jemto5bTgYUekmp4XdQZSpOVOJ + foN3lNQwGrwzPPZdHGj4pO83UQ1ANzGMK/ijGpkvzPMgt/JPd9O4IMEuioztIxSHVjDTSUMGl+E1RtKw + LrKc2PksBVDMujAaVuTTyiCMFaT2aPEzN/axWXVq0mQohU9Yi1h5Qa526iLyFPhdylTnmj0ULtIlr5Pr + DvNUW2o1WD+XfMh1EN0Ih3nLhdlkbtvnOcw3X3a9U7N+KRvV5uWRq31iMpz1lU97SFiwjGYt1OFgoGMO + YhZOmcyCXd/W59FLL1i06BJYSamSThRiSaiPCRqm62Rge2iFM6uRjpktNTpYPk/zSWjUHQnMmRtXiExz + zS1wwH1VND4bUIUlOWCjCyavV0jCjmldKpBbbMZtPEnWDTomo9I7QFOcSJKwTxP1j3uABsczNMt2mGWN + YoKdWVEmfHLqIlFrwLt0jEui2rfEX1K1HKHivOwUNuNUqG4DVGC+KUKtYszAnP1iUnKtynE1w4dHmyy6 + jbotKm2qpynmklVyqtmVKVwEXmwWkdWstbSGJVYHGrH2gUiDvW5STmaGgLSVF8SyrZsAcJNBF1LuwCyc + nTq04jvN1J0LMwwC0grMWOhQdXh6bSxcKaZY5+WmVVrlmwCCyy8MFPFnyZmLpm1k7oLp8XnIi5ReUR1x + WOWLeKVnqFmy06MON15uLPMHxLqLb/FEz+eAqcmDEb0zL1qy75RhhjMApbUGiDxxVbO0S6rEaRFAGGEe + q6mwhkIyZPTYLviFQbnIpH06wDBhhRB6hYMG84wdPSMD3XvU9W5l1GSOxZsfDI0Y46wQ8sUz1SKuFzDH + nAsT8cEO0ncahejRymNYwYwDcbClBA84wtvsY3V+KCHVtE4QM6C8u8EUnwx+NJYNJ3MJUckYbwx6VBza + pHpPwxUXJ5tpKDaCz6S6zhfMy33CLSYtuxG0hp1BTUBRzescazNswme3dua15qtRclpGylpO66mYw0ia + jc7htoFX0jwskRYoAh369wcdHoh3fK20nVfFvBVzE5681mG6v3Zx7RcGWAuIBR6RfbUcVXVfaKlMiWVX + 1ENMnvazioVX8Meix4QGSKo5ot/tX1WXx9T/AALiRXxdw3/lM8Aqbvn3n0feWv3q0uKBOFrUjTz6ZBH/ + AKp8+cStXtLuvQqjFSmSrD0IOJku2+b+Z4nFGz4QhC+fiEIQieBzCevfZFYvSsb+6ZStOqUVCw2bGc4n + kiifQnYykE7LcLVAAvcA4x5nJJi3e38NwmfLttYLmLpPTVJNBhgxrfZYlGylVgqyQJ5tDAHmIbqCi0n0 + le6sRdXtB6wBp0gWVW6BjsGx5kDp85dxAL+KR3fjRycRmab5343aV7fid0Kgd3p1WDuwO5ydz85laHY8 + 4xmfTL2lvWWolahSdKvUMA2fn6zJ4n2U4ZdcKq2lva0aLsDpqgBiDnOc9YDfN9R8Hkq4t472H4PS4xx6 + lbXauaBDMdJwdhnrLfbLsnW4NxIi2D1bWrlqRGSQB1De4nrXZzs3Y8Go0+5oqbsLpetjc56/ITZ7lGOW + ALY06mHlGJacPwZnxay8N499l1oaHadDdoaTNRbugwIydun0zPV+J2KX/Drm0qDlrUipb0yNj9Jaq21K + voFSkj6TqVmXJU+qt5SYKPhi3ep0vxxw4PGuxvLb/wCzJw3e2N0jOoGVYYy3ngjYD0novDbVLKwt7emC + KdFVVVY77CXtMO7Hww2WnT/H8XEqFWpUEpKopoiIOiqNIHnF06ZPpOW/DDTv1i3d3YYlAy+0TEsaYaDK + 7vEtUGB0jtMkVY5V9ou6ZhMVY4L+KPRfNZIqyVrMKBaf+GCqdMsquVjlWCz1qrins2mKqkSxp5srBVPp + DcaolXeGiThdoKu8Nz1QBT6Rcfkk2kYhgQ3LVCq/hhpkjARD6QHcnxR6YaYsIBHcRjSsSLnxRFBjCSzW + 0ZgpjnGnxSN2AXljwKF1OOI3MYzajDVjaUFG5WaCsIwnENW0sw8S75+dsQ1RgJxDVGYS754PvJEYaZAG + TDRwqbMIHHunvldgzcsR28oU8Nq1CBYKMYlGGqXk3A5jJ0puW6SBOY9Jbo5+Gb4cW9Fk8uikp0Syx/cc + 3ST0M6ZIwz1E78OmAuHk6rTqqGiB1OJC6hdQWWaqjDDRIHAy0f1BZfa+90BUc20j0jMmdRiRFguosYvr + CDlWQ4XVqjGbSeWR1Ko5tJkDVRpMTqrHN3W3qjGOkgaoB5yu1YdP6xr1RINEOa1l25fWRs/ilU1dUC22 + VMTmfkaaU1Do6xjtpWNzt1kbkzN5I00urV4oI4AwJAx2hnEzXdZ4rPeFth4Y1VGeYyFCxXGYYMhSodz3 + w3lI9I5vKK66fURsDcvcowGzFSofhJjVz6RVHNzSUmeKZKh9SfrAVD8RkK9OUxw6RarM0pGc+sR22yrx + mAWgV8lh4IVYZvcxrsfhhpGrmhp1Q747VhNZPKDFWnnxER+9M7RysG+ESN7jEmjC+cHqBhyZjnYYbTtI + HYL7w1C6l1E+ccpPvKr1yh5BIizkMCSFlmGyzeXVdLhdRJAxI3uhpbB/eU1Uvq05OY5KJPJ8XnK1iHmX + 2r6J73R+CRtWcnrJhbDTlzGFAvQiM1+UIvtq9JjpbaI6llypkFLOnmJ0yWo4CsF8URhptTPZ5kt3K1OY + krLgrEDEpUiBuxg9Y6tCkERZYC+a8eXRqc9RyzHOJF3x+HeFQalyxkaYU46yzDRc+Waut0iq7BipPNJE + UinzeKTIwVekiqVRpy30kirqsDE3uiqVdLYbEYLgYwBIqvMzHPLIgOabYgnm53kRdUr1CzNp6wRj8W7Q + SmF1ajiKjoCxY5goepefe5zMdO4MYhborGTh0xFWsi+AYaAutBP353WrNnXxElpaqXellGrHzmQ90+nC + n9JA9Qtq1HMj6du21OpcDRXbi6Ls2+ZW73myplfOr/OJkhpthxmJYZcrm7ayamrqcxFYfDIVaKjeUvWq + O5pg2d2gu++ZHq5cZjlkbqJy/wA+JKnzkcUZifNeJqejbyUNiRJkHrFBMmsdUmo9Y9WPpIQdLSYHIhUG + 5R6x2pYzVphqk1jqereKGRGaoqnaVqe5w5t4atoKTDVCiAZIgLboJGMYz1kiMVHLJWCAxU/mj9WTlzGH + HX4o0ZziLRUL+UoYe8dmRjaC8zQQ1VgtKG22iofFpMahipMnRbFIAcQ07QBwI8GQtYQNlxARV8XNAD/F + DfivEnII4DIjUUyVFi341aGEirBV5ukcinT+aKFOekhawmad44LtneSovpHhR8pLlUY0SJ5xyJ5yZV8U + VFxqh32hhMVQq9OaePfazwz7rx9blBindUgxx01DY/5H6z2VVyJwH2yKF4RZPt3nesB8iN5O7x/mOEy4 + lbxiEIS74eIQhCLqOxnBavGuMUramGCf8xmX4VHU/PyHuZ77bWy29CnQpACnSAUKPJQMCcj9kfCxbdmj + duAtW6ZmzjfSuwH65M7fTIU3fb/D9IYcZk+2ixAKc83hkun8UO7Hwyd6b3eyZpgF8X4Y/TDTtGO47Jmk + 4jgv4ooU4jlU4i3PUxVENP4ZOq+0NO/T/FDcGO6FVxHovnJAvziqvtDc9USr7RdIbyO0m0wVDmAxqjVY + 3Emw0NMNk9UOnaJpk+iCUyYb8RooNMVKeqWUpfiEBTGcxLGihFMfFHinJ1UYjlWJZ0PdwRZNpPWCrJGW + 5qrFC6V6xVENMfuNyYhiLgRpIWGo3GPaGqGqRsw8jLCNw7CBORGsxz6xIB+NO4Yxm34ou/RYBdusoAkr + IvyiY26yRF3xFKgDLjeA0JRAY3aBYDVp3jKrBiyr4cSMYMsw2UOeodyW6xGz6wbxcsQ5z1zGYa9Ud7Jk + wihcwCkywo3AGraO06lj0VBs0a7c2FjBk5BMPKMbyH4pI7YjdQ1f/jNMMLN5JY3JWLytAaPilGCNm8km + 8kSMkisFXqJrjh/bJ5NU1L6CT0qgVsMOaUu+C6tJkJrnLafpOjBCyyzU1b61xTXof1jKl8Bq0CYffuV8 + WJGauNWTzTf7tGi5/q27bVfiAbxAaZDVuh1WZrVj0WRu5bw5mT1DWcRXXun5sYlZ65ctIGYxpYmZPLv2 + 1HHqlZzzbyI1PxGNYFo3Ey+ysx1OLZg2dUEXfmkmnU2AJDmkzDfqi384mraW0oFhzCOW2CjpiR9oFocK + 1TJjcFvDNFLUNux5o9LUY5ZH2lZ062aFPoZIlLV5c00FoBNRUCDKMtqKCQ8ra48OjzUko6Vi9zthjLRU + KG3G0jfHNudUDNY+sKqyDoxgiBR5GOcjLbyNxtyiMaECdpEGwPQyLS5GVBiaSpXaG/NLTJhgxwIaUJ5o + 5FLbYA+sfpQeYP1ictNQb90QQDygwHNp2j3wurQZA4OeaG9w6IdkBwBn+aNaoR5ARr7Z2OmInP4gTAs1 + fyR3ILHMZ3+k5Yx7p+GRvSQBixAjNWbsgsX3U9YFTnPwwCj4c/zQRRjLE7Sx1T5fciMFPOMxe8DeUVVD + IxwPqZGagRmCb7xLt8QaPdIcBWKiORS3TEj7wY5wQsUVgg5cxIzEnvTKrnJKmQrkdRHPWJGFTp+IxhZi + dgBiBshT8snUeggG5st5QWoOsAwZuUTpPHmw3ueCWOVOI5wFGVJLR1JRpy45YMyLq1btIXzWHjy0FNHr + K56KvqYICGw2+8e7llYU+RTH29EsMscZ9RHtDzSY7fEpxTXOctKz5O7fzcsbdKUq4RuWRPWfpnpHhgps + ozzN6aVWDeLMdb0yxzjMrrUxp1AaZY+9aF5RzSnF14oE3tpHR8McHpIGXAYYJaPS6ep8OVlunQDLl3Az + J2niswM/JZukg9OsCjL5Gaj0RUq6VGFA64g9NF2ZOUeKBy+dBH0IWUx+ckSkam/w/mkz0Qxwo6yarTNG + 3Ut6dJbn/IOJ9tXK6V6gtIPPDCOaoSW5+WMz4tMoXXmh16J8BGr4mjob3SBPQ53zHBt2kQ8ceIlqCkVh + FBHwxiecePRdpKtYTx4I5F0rEU8vNFBkrusJ6kRcmRgxclYt1G54JiaoCG0c52/rE1GJ5dYCG4nBtQ6x + 4jApz6R6Kcx7Jgs4RYigjV+KORTmS5lRgzBk+UlQad4Bd49VxIcrQwmqPOSBYADeKi+bTPuWs44C4iov + nEC/hkgEW9tZhAXMXBCxwXMVFMmsIQGSKufKNA5ZKg5cdYt/y0wwlC6RFVfwxyrt0jkXl3EndqGoRdo9 + V9RBBHqufCZC1hCr7RUHijHqJRpu9Z6aU15mZmCqPqZz3Ee2/AbDI+9mtUHlRXV++w/eG7Dk6vj4zeSF + 0yL+KShRnG/6TzDiH2pIuRw6xB9GrN/kJy/F+3vHeIh0NyaNI8pFEaf36xabzOb5ri4z/q7b17j3abhX + Akb73cp3q9KNNtTn6eX1njXbXtTW7Q3qVQvdUKQK0lzkgHqSfUzmqlV6rk1CxY7ksckyIkeQjDXu8Drf + k+Tqdnoo4QhLvJiA8UIQi+kPs8enV7GcNKFX0UtLqDuCGOQfSdJp858zcH45xDgtbvOHXL0W81Rtm+Y6 + Gei8C+1QjCcatEfy7225T9VOxmTil9f8d8vxY4nHyeEvVGWAXymRwftNwbi2kWN/SNQ9KVQ6T/hP+U3B + T1N6Zi8l9BxdTjyekSi7uKFPXGJMq+0cial/LEt0eCgVf/3EcKfrJ0WOCxd06DTqgF5eWTqoi6fKJZb1 + RafywxJVWOC7Se5lugC5jlWShYunaPcbosRFp5WThBjpH6faLcu+rogxAKOmJY06YIse476JViqokgBE + DFIy3M0iGFjsxhO/WMiDgesSNLDPWIW/DDW/USnGreMLYis0ZjPiM0DxVDMfhjNRMV+XUFgPiHxRhqW5 + NXkTGt15Y9FLeumSaCByjMeyN0Az8Maqn4pOqFvFJEoFdXpF3lFXC7Z6RmoA8x5pJWyirq8Mq1GHwg6p + WB3Uueqw2MZUyF6o0sGMheofWRM2TzTY47N5KXVnyhGIwjXz1+GUH5ZLTM2nbaGnO+ZXBPWSI2BzSjCj + upUXBg7afDiVnrE6gsR6h6qY8MdNLnqe9Uxpqhj1ld6h5towtmagWDn/AGsMwzzGRlwZBqJi6j+KWaJL + WFb8J5Y16umQ6jjrGljiC+KKZ6x9ZE1Y+ZMjyYZA8sye7ckpFcwDH4ZGu/iHLJQo08sHPXqZgsmonzhk + lupMeigr1AkiUfOS8vis4loEV21R2k6ekssq55cQTB3Yj+7M3k3anEVRUPpHLTPxCXFZfixqkiVKXRgf + 7shzaziP1qQoHTygxyWxbpiW3akqto8MqG6fVy7qIGazcMSkS2C6tbiPTSpxkCV6lYsvLIDVIbDQ0sbD + 0V96yKG0mRtdDm0jOJVLBhlm5m+GPSkKnmBDtKXPfgn/AH7SW2jPv3oMNEeiAGyRG6aS+Yho/ku5P2f9 + 7JDbYid+7as4jWZF8RzHIisOTZovEGazdRYbmAqjm1Exz0Aq5YyuzBTucxaJOemmRgzMW2j0qDmCjK/m + lbUMYUAfmYxj1Dg4KafwiHYtP2BXHYsOXAkVSrpVtRAlJnOptzIi2o8xMrHj17sc+bx4rT1Uz1Or5yRK + iMuVPN56jM8KFOMn6RyBMYUmW4GpY8z+ledhzFSNPzld66IcIxOJC6jSwH+GNRdQ6QwwIeVacXXr4Y17 + oll0CM0LBVGeYyzAs+9YauzDGZFqJOW3k60M7qeWPFECTsGO1aIVqqjCoP0kep2VtzLQQdMc0kSjtjGG + g54lZgpU0Q5y2TJEpsdkAH0lxKI+KTIoXy5pm5/yrDhf2oLRJbcRyWxPlLunT5RwUn/2mbytscRVltyf + KKLffmEuouB05oaST6fSZ/Zlus4i4wY5Rgn0aSLUHw41Sr3wYdcYio+o+U9PsW8kzD1WXcsuF2UCV2Yh + mGMyQu40lYIxLKXH7QPFa7nU6jcoYS29UrR5wRIEYZXQBqjbyqGTDnOB4RITuaxMRaB3DMxUF3MrvlWb + k6yRKoyw04WLUUN4AZth48XJnvPzQBj8KxyMW6jMdp7sc8aVBDS/D6jSU1KsVHKJKbguyhiRKoz8siAH + +KZuBXhmngtSneBWwp8usirVgdO+cyiimPTOrmMnsN7tftdar9GoF0lzjEZeV9ekKeQSsDqGI/UAMNvA + w07g5FEolURwXlzHoARzRzMFXCAbwWkDW6I+L5RRHYJaAX5Q3UBC+JoLvvBF5uuIIufODGpwyp5Y5Imk + DTHhebrJYJ4AWGnl6CCLv1ihfxRWmoGMR42jQMDEeFPXMLUJPaGmOCkyRE84t6gFoguY9F26RyrJQu8N + lRxtGq+kcFyJIi6Y9V25Znuowo0XbMcixwGRFVTJ3amOpAsAuY4LmPRfOLczCjVfKPVeXmMkVYqLqiWs + wZgEeq+kci7eslSnvFurHBoUWSpTyslC4jkWLdqYao0XDcwjkXfpJFWORfORusNTUXTHaT8Udp3iopz1 + hPUiKJldpeP2/ALHva3PXbPdUQ+9Q+p9APMzRv7yjw6wr3V1/wAqimon19APcnYT5/7S8br8b4rWua5w + CcKq9FA6ASdbvI+T6/6Me3F80vH+0l9xqual1W5QeWkNlQew/wA+swHY7xpG/LEDSg1fIcnNlyK5O2ZC + EI7niEIQiIQhCIhCEIiEIQisLUdGUoxDDzE6ngvbvjfB0CW961Sl/wBKvzD99x9DOT1FYhbPiMSDdHH1 + GfH5xUvd+zX2pWF8RR4tQ+5Mdu9BLJn38xPRaFRK9Fa1s9OrSYag1NgykeqsJ8iFsMMTuvs/7b3fZu6S + jWd63DWPNRJzjPUr6GZZYfpe70PzWYnHy30GKf4Y9U8US1r0bq0pXFs4elVUMrDoQRkGShdpm31PHymZ + vF8QF9oacGPjSMjpItNyadoIud4BceceAPeLctzFUGKFkqL5tJMBYbpcvyhRPxERwURCwER2GPKPTPzO + 0jMiYhRzHER6wXwyu9UmaGCkwf2lLgBt42pWCByxCJTGosTgASB6h+I/v0ni/wBpHbZ75qvC+E1SLMHF + WquxqkeQP4RKMLg67rcelx2+7sO0P2ncL4eXo2Km+rKcFg2lAfZuv6Cck/2u8UNRu7sbNEzsDqJx88zy + r+aKp9JZgF8py/L8+eWx0XrtD7Ya2FFzwqk7eZp1mH7EGdt2U7a8O7QlqFMNRugM9yxByPMqR1+XWfNh + ODvLdneVrS4p1rZnp1FIZWBwQR5iPX8tOn+Y5cMxydl9WZ8WPOAyRymcx2D7UUu03DsVNKX9JB3tMdCP + xD2Pn6GdcKTny/aJQvr+n6o5cTIdjQaZNTpgjLCWEpBVy/6tInuKS7IRJcu7wXRvdIFCjrgQ26jwyo9w + jFtgW+cY9d3GFzgD1gYMbrD1ApIUZaMq1iqsejSj3x1MBnUZKlIsuXOJXYHuXduR2Z9Ic9fhlequk9ek + sFgq4bGqROwZeXOqa4mvVln5o0pljybxTQK6tXpJ6ClVbeSPhj0P1l7p14s4KdW0mAOndZPpRdWo5aOS + mH3+GPfijsqmkZbIMjdRq5d5f0IobURtK1ww8K7QM6csPFWfSNWJCeYSbSFHWQv6A5mgli4s3HL6yF5N + 6xhXzld5S4UIUkwZdXhk608+ERAML0Mnvp+uhRWx7R2nVtg7SVWDbaDHA+gxD7KvrKILvhvDJUtizZxG + HOrrJEYrupkOb+VYYB7nig3piHc6m5RDvSvRo5K+BhjmIW0AnJRC7uCflJwDjHgkSVkDHeSi4THUTNW0 + AKF6XmsgdCNXXT+KXVrhgwXGmNqVqXRsBYC0uI1OmoUtqBMl0htRQwerSKtpcafSRCsihtJG0flo0Hth + 2dmYZOnzkT8hbVgL+YyKpeadkI3kC1i5zjMsFKMuU3orupDT2I1yGqpVcswCfl6ytVrEIwUAN6yu7M64 + zn8svDBbLLmDxW3rIVcrktT6fDI6dck5yQvpK4puzZYCWEpaUY7FpaAWRmrsh6zlmKk6RI2rZ9ZPSUMM + YkdZQuorzfyyRN6m71vcxW1DriSIzq2VY6ZU3z1xJQxVVGZTgWZyNMXc+In6xAwZmy0iLk7ZzDSGVd8N + JMStz3DsoXCnLSMEyZKI08p/eBo4PU/yx9xj6o0s3ScMWjF8cf3Z5tzp9I5KJbyh3ntgwXxNOIID0WTp + QJPKJOlsV8pLmWmPEtR0lvWO7t285eFEBeYSXuFxlR8pH2haHC2cKJPnmOSj+IS+lqfiBktO1OeUEfmx + Jea0OCppQJXDSZbXS2GyZdS2IXmf9YqJ4QpPLMvsW1w4QqS0DnkTmktKiWO4l5FOObeOClekhyW0MCqJ + anOW2ki2oxlj0k+lxDSSMMSIbawCgSkg1BRmIVC9FEmSiihjmR1KYVuY4+cAofEJhtWogRwUNvjOI1Go + L1IMcbylTXCAaoaYE/W88NqQvTEEpaW9ZOlfUvMcx6c22eWep3v7eKYD6qrqdWVxAMdXNnrLjKgbGIx6 + YEXf41DxUaLjfMhqqW1EGXUoFtl8Me1sFHSIyBq+pSy1U5xsFkqMFbLeH5Sy9DBbAkZphZfeJT9SMyoQ + 26gjEhC7tmWWUsMKMt6wSiSMsMQMwNQ8a0Bp83LkxRTOqXUogbmD6AMYxJ+x3BxaNrUtJEUbSV9DNyiN + 0iUO6NamJ8o7rHaYKJW4CRRHZMSLpk1agRYgHtJAufKSswmov4hHIIKJMi6vKG1qMKNRiSIpiovtJlTb + pE5BaYcdAinGcSRFPxbSYUyv6x2Jm525x0YpxyriSKpjgurykfZWYTUXC9MwA9pKi+WIoXzi76jCYtMd + MGPVDmLpK+GPC/ih31mFGFPNFVTJFX0jwu8nczCjC/ij1WKqx2n8UN1GE1VjkGrV+WORY9AF1RbqMGRF + 5YadPlBVOJKFJkd+6zCEG0cB4vwwRdPijwOWJawlRRiO08vKIqLjziqvlFusJAvnALiOVZIq48ot1GNE + q/LTJVURyLq8ooX8IzFunM7cbyH7WONtX4h/CqR0ULchn36uR/QCeZtuMzqftGrpX7YcRNE5QVdP1AAP + 7icr7y8S/Pev5XPldsyEISrhiEIQiIQhCIhCEIiEIQiIQhCIhCEIiCnEIQgvePsM44biwueD13Jeh/bU + s+Sk4YD5HB+pnqW/NPmz7Jr/APh3brh+psJXJt3+TDA/fE+ldWlOac2ZpvtPh+Z5OHT7I0xVUxUk2Aqc + omN7a6okTzgeX+WDuV6GQNUJ1RhALTGp+GRs2VjSxjNW0YVmEr1N412zA+ExpmoVhMdjImPijzvGsDL3 + K4n7VeOnhPZ/7vbnRc3pK5B3CjxEfPYfrPn533nov21Xhrdp1tw+e4oquPQnLH+onnTCVieL4H5fqHk5 + 0o4QhLvJiAhCEW72f4zc8C4pSvrN8VVOd+jDzBHmDPpXs72jtOOcJpXtoUDkYq0y+o0z5hv8j5ifJ+d5 + 1PZLtJW7P8RFanlqRwtVM7Ff9R5GRlgN6/xvXvA9uXq+i7m7djyvhfaVgxY828o8OvqHErKld2jh6NUa + gwPT1B9CPMR7uU1afOXhgB4vsePlMsTLF2Nc2pq2+GkT1wurfMjSkWbNQ4Tz1GR1WGptB5fKWAs8uR1S + 27lqmSML/WXql0WVQg5vOY6V+bOcSyl3SGznmicGMMtnlrAp1ajZYESf7s66XIOn0zKS32ndSNSyzbcS + LMwYa2MhUrEWtpRJXCnEDRPVRmX7d6VVVDEA/hzLHdL0UgrMnlR8z8HiyDRPxCROpXVNt6IK4EqVLctq + xA5dzAbGfUGbzzK7qTNZ7XxbZkFW1OrCianKUuC2fpGOYxq4XUNGZee3C6i45vwytVphiwUSjkGzeLVA + qhm5dougDVvJUoOTyAycWpbwgmDmSOJfNTTC/wA0kGGDBhLaWJPiEk+5Hpgk/KS8oVHFZugL0z+kciKP + InM0k4eVGW2X80elCirc5Gr5weTfqZxn7ZYtdW6we12msFpZ5aqafSRV1pMraDk/hWBmtTxGrOS2y2Fe + WEtqK71jrb0UytUUqzFiQnzjHuEVWGSWlbX1ZGsPctd6CswWlj0bMrs6hcr19JWuK2pm0mRaj6zQwbnz + 5TfgrZrBR0zIHrYZioMgeofhMarN8Usw0WTyrOqVdR5RiRaiWbeOyGEKqgLyyjRZZim90bMNLbxUqOFw + hkeAu/WFNdTTQ1rzYm90jM9TxGN0kHrJ0oF1yhOqAtyNWo8wkfYHiv6l80TkqPONR9OoHOmOdCu0Eouw + 5hDYm2O19E5K4VWCqdMY9dmXlGFk6UCdiAIj25Vv+0kTdbg6q2C2S0EQt4sycUXWThTp5V/WNz14KMMP + 7QIg0sWMH0DZdpOiuuoMBv5yVKNJt3A1TJzS6DjE0VamHJ6SylIsM5AWT/dkVQcgN848USV5SD9ZDnuv + DDXhqoQK3OR+klRlVeUEt8pZS1Gctj6mW6dGkrZZxIc7bDCzk71jyIBLCWtZt28/aX0ajT1aSDj4lESr + fUguFA2kKvotDDHHytBSsT8Z5feWUtFVcuRplGrxYK2Ni3ykD8WLHAxDsyfVP244+213Wkoyu7SB7hVD + BRMl781NQYnV5YlWpdFtWnMvHiX3Tn1WIeLYe6pLq1nEge+pDwkmYz1DULbmQtUPqZtjwn7cz1Tbpvxq + 5EAWDcS0jmmMiltJZ8SWkiqcsSY3iCR1GT6tF+KeIKJXfiFWo2FBGYxDSAbRSz8+aBJzyoJIBNzyfbS9 + 9XZeaqR9Y3Ucsajk/WROh+UjxvhzGYWbyZU/ehfCSYneFjy5iBUaW6Vthc5GmSoe6sN53DpnHKZKjPjr + iRI3h0yVGHrzTuQvPwUpFqnoxzJEbUeaQIo1SemBmZujxbYZrWEYovKekQ1S2oZ6Q7xAuGkDtqLadpAb + bfvSsMpbzgtIdTIUYjzMmV9Qgj+QZj7pEULttI6qhjnOIgwfOKFDMu8Ub/KN1GeZz/djWUdM5X80mdEx + lSNUjZAdpR5oyGj2HhhsYYgF2lHuiAiMIYjgBAR7jU0LtHACOC58MVF2huDCYg9pKi5ioskSnzSFa8eL + bRopPlJ0p+UVAIqLiJz14ujHilRdMkUf4YL+aCrt+WZLa4YBKijpJFXK5+GCLmOVTp6zNbTHCRFGI9Kf + i0xwWPCb4WLep9tGq+oj0XbmigFfEI7TEtoYTVXaCrHINo5ZO7Tsm6dJgBvnHLJFEFXaG2DCXH4oKMxw + UY5o4LDc+yYlPaPVRBVEUCLdYSIurUdpIiwUY2jlG0Qz1IgHmI8QA2ioITxhBvJFG8YiltXWSqCvnDcw + 3OA/wxUU55hBBJAPaJawkVfPTErOlGhUqtgJTUs3yUZ/9MlRfeYX2gXgsexvEnzhmpdyvzY6f6ZiHbYd + ZmcfErfPXFrk31/VrP4qjMx+ZJMz89Ir8xjDNi/NeXJc1khCEdlEIQhEQhCERCEIREIQhEQhCERCEIRE + IQhFpcIuXs7+hd0yQ9GqtQH3Bz/lPrezqJdWtK4pn+zrKtQfJgD/AOqfH2NvrPpj7LeJniHYPhpJzUoB + qLZ9VO37ETHkNm76L4Tl1m8d19UBV5SJEXOMZEGbO0QLqmAX12B48yNk75jMGSKu3XMUUyfSVsr2FGF/ + FDT7STAGzbtEYwGQ7om6YjTJGXzWRldpQ1kzHPBhjaP0+ca4GOvNGNHL/wDN83/aZV+9dteKuD0q6foA + BOS6Tq/tItnte2fFVfI1VmqD3B3E5TrNcfV+cdZv7ncyEIS7kiEIQiIoODmJCEXa9he078CvO5rM7WFY + gVV/Cfxj3E9np1RWp06lJw6sgYMpyCD0InzRgqxnpv2adpCjLwm6bKu2aDE9D5j5Hy95WCHhvd+M61wf + ryb0p3J2YyN8/D4ZLpDefNB1GJpovpfKVd1BEaFzu0l05LRwpnDahE+ICg0gSRGZThCf1j2p6dOQI8aV + GVBLD3h7mCT1rFSpckMv4TL1HizKuG8OPFM0sahzgCN0nOXEzcB9loZpdHQ4zSwusg+stpxClVOAQMzk + UUM2FzpXyj7c6WYNkKsyeI8pVjnt8l1odGBCEH6yQUxg7TlkvDSZcHWq+81LbidJ15iQ58mMxy40NlqZ + D6a+9CkxY4kL21JVYk/4pVq8Sxq041CV63ESysM9Y8MMmHIPba1FaOnlxHM9BNnKCcw906lu7JEZUumq + BSxOpfimhxK0vIXTm8or0K4+chr8RRFbu8apzPev+I/rGuxY8xMo4g90PL/LSuOItU1bnT6Sm9wWbJbE + qatodfOaY4gWLyrTtV5s5JiPcPpwhIWQaTnGjaDr8MsChzWHqFupJ/mMidiwjmGdo1tusYhZZ9zMYGIy + nmlhFDatQg9E4YqIfZqXYpVNBiBS20mekQM45YgU82qMz3DxpMddusY6grj0kyKfTP8ANEZSuraVjkft + HYtEqiCbbrJRSB/mjmolVzD7CDjZEYr4RmK1aq3kIgQ/EDJUQ40YMhyKzB9UWo5ywBgGfyEsaD6CCUM+ + 8HMmcS1fU53zFwfiMvUrUsOmPpJRw98ZxJ+wLQ4ls9FOY5EfGMzTSxypLHElpWI+IiQ8pWcLZIUttkxy + UXZfEQs2DZ0qYJLgYkT3NuqMFw/5hIc+7wT7DH21VLMsM5JkhtXpjrzSQX4ReRRKV1fO+oNkLjyjwF8R + lniHiHYp4j+8iS5CeLdpTdjUbrGKpOy75mxga83M8uX5X3vBjCkj5SnVrFi2Cf1j6do7NzYC/mMsCxB2 + yPoY8dFD3ZVHJJ5jzQKnVnrNalw2kysXIEkFrZ0lyx148ljcw9SOJfdiqrNq0g/4Y+lbO3kZr99QUMFA + 1SNrqkF5zI719EziD21RLN21FiYlWzIUlSD+WWHvUVeQHTKT3RY4TaMclhMQpUtio5jj5xHZV1bg/mkb + 1HZcsTpkSKNXPvmPT+tPeegpfvCL0GYPfadlAEYFVW8voJIq2+nmDn6Q2FG1qr3Dvq6wWtq8R/eT1FAD + d2nLjbVKb0SwywIx7TTDMfdKJW6D69RyNK+8sC8RdlOcdVWZaKyqwQCCUXOSu0WWOK+Z4cuWPgLHRRpy + JIqn1kY6fHHqTOhf5c2E5AA3QapKrbcxkQUHwyVV8sfWS2oQMnVAKSY5B/hjguItlQLNUbRwXMEHtHqp + 6pJ3XqEX3x+aWkp0mXmfLSAL5tBTjwmS+bTBD2U+hPhJ1e8Y60ubBkbMfUmJnmiBm5jDgY5YwbAyTVq1 + ahAAy/yy15owuTmP0/hxFVCYJT3WJazDcJT8ooTT55jgvqTJAuncSe+owmov4vFHovpHIMyRFMhztsOO + jReXpJFWPRTjmj0WS56tsMJiLqkiLv4JMiiORdIaZue7U4pqrp8QzHqMRFWOkbtACYqx2mLEz6RniNQI + q+OIN48KPijmSjaCDPnAYgMc0iCFUNHrgQGMNvEVvFvAdVTw3nFiIu3nHIoz1gtQQo2jgpx6xVUHfMei + 6fKEwmhY4L84qgY6RwAk1BNRfJpIBiORcR2naMZhCgAdYBRpioskRT0huoIRZIiwRT8UlC+gkLMhV26T + zj7cL0UOBWdmp5q9U1CM+SjH9TPSlpnHpPCvto4gt12r+6Icpa0RSPz6mPA23ifNcxhwoe282bqYQhOi + +CiEIQiIQhCIhCEIiEIQiIQhCIhCEIiEIQiIQhCKTVPbPsCvtVDiXDyehWsgz68rf+meJjo09B+xe/8A + uXba0QnkuQ1E+mSMj9wJnmbG9H43l+vmG+iAp8xHU6RYybQFXcRFYLnE5dt93jnvHxM0hTt6RvrtJGUs + ekbp0+LeImNG45swVY4gLAYbUMx7nuidQJGVHrLZpao16G3XmjEqMyqPsOUyN8tq85ZeiRI3pHEsSrYl + 4v8Abjw4JeWF/TGO8pGk59SDkfsZ5Mx3n0B9stj3vZDv/ioVg30bIP8AVZ8/TbB2Xwny/CcfO6mQhCaX + kRCEIREIQhES5Z1ntqi1KbMjKwYEdQRuDKZgOsK8MnF2X0n2VvU45wC2vgwFRl01QPIjY/6/WaTUkA5d + 955l9i3E/wD4nX4TUc6ay98g/MOoHzE9gNkR4RIeRHV9v8bzHPxDZK09TNpwI8oBsx5vOaaWJbxgiPFi + ctkRfaft6RgFkMgz0J/NiNIGnCINX4pqPYEtjH+GRmxf0MDkIcLNdTjK4Ejdj8Qmi9jVBxgmP/h5IziM + 5CnsbICkqxU/3Y05+InTNR7MqzDBkX3UkYx+0DkKXiagnKMQGdTES8tmS2FGIGxPyl95L6sqjuytucwV + dvzS8LYKzIxwwg9EKrFjGZlHY/tRC+4hpI26yU8rcvhjkXVtgajK2e5h+UD59JHj6y69s58I/wAUhekV + 1DHT2iMyTg1Z916mDL7yelRJbDY1NLH3IleUZYeUPsJHEtQAOI5CVGMS191fpog1sc9JPeT7EqrHbpzR + qLqO+0t/dW5tjA2x9NoCS7V9lEiIzKFIg6kKvdudJ67SdKJHpJEtXZcZzJ3aA61V1UsuHJK/KMNsFbry + /OXhYVVGVyVg9imOdgPWSJuHFfZZjoOYqekTAmiLMM2EOfzKvSSrw1fMj+WUZhR9S+iy0UMG0iS0lK+I + jT+YS+nD0XVvB7MAtJ+wrOJKsjKuzEH8uJMndN4iAsVqKKGGsD82JHoAVtAyueuZXeJ4js1SM1uqtpU6 + fJsdZAbmkrcqH6yQk6cKU0/mEiS2BbnILeemI0+Wb/5K/ECFXQAMRr8SqsuMY+UlNqqjJqj9ZEVRSxIz + 85RqhU8UT31UqwckKYJULqx1vp+cSpURvAg1A9cyIs+OmFjApXIpDUCFskv9ZE1QZbQBp/MY0IWGcSVK + FVtlBP0jO0s3bRKzsvKQi/lEAgbVrJLfmllLGqxwwxn1l+hwkkZfaNzD1BwrZIVCOUZx7RVyByjH0m4t + jRpjnKD6yO4p0VVtBpu35ZH21vDosNtfVzhZGXI8DmWaqlmbWQEzEpUqS7sSZQ6NtzuDvRVxVqlWOp4j + sfMnVFu646UyNpXRWqthQTv4sS8TZts1R1Pdj1yYwsemTNBLEMMM+WjjwosuVyW+cTmFX05ZGyzwNS4z + BKaZ6y8OFOpwrx1HhLsefIh9oemDhy9aqTqB5+errI1YLqweb8M3BwUHxnlj6XCaVPUesn7gq/y5WCne + ueWkT9JLStqzb6MD83LNqrpo6hTAHyErklQx2Cxfbv0TOnMfbU1o1lVjsF/K0EyVwxHvJalYkNqPKJQe + 5XLb5aXgLLPtK6KKHfALecTuTzaRyyml1p0vn8smS+K+Ij5Q7WkyxblxjTmPC5iqPaAbmxOvdyB4nII9 + APeNA3jg22MxLBSAbRwkaEr1McDmLVqJSjwRfrGKfKOAka1WO5fLESKF5cwVYtk9LJF0mAGOkeRkRjad + sxV8UUKOkdpiqo0yNwBCLv6x6oCdKiCjzj1GIt7rCEUR2n0jU6mSoDJXVqYSJT3kqLBAJJ/LM13XgTkT + bLR6qPhEYpx0j9QkO7UNSgBYupY3UIZEVW52rAgrY1RhYfDBW/EY9RuUescI3MFbxRkbJyNiSapGjCOB + DR1RmOVo0KD4Y9Vi8SNyczRyL4tUEAOqSIgb2kqVgyoOWSJ1keodJIo9pO91BPTHpHCCAyVKZ6xLWEwD + MkRd+aSJR5M4kopfhETlUFCtOOCZ9pYSkB7yVFGeknca1QIntHhc7rJkTdto8U/aS5xso0QxQvlLCqYK + mPOJaXOo39xSsbC5uapApUaRqEn0UZnytxe9q33Ebu5rEmpXc1G+ZOZ7l9tfFvuHZulwxCBXvWy2D0Vd + z+pxPn9h1nTxHjd8V831P2cnYeijhCE1vn4hCEIiEIQiIQhCIhCEIiEIQiIQhCIhCCdYREUfObfEeCXd + lwew4nWX/hr0N3TL6qcEH3mNEO5onsgNsZpcDu24dxS0u1JBo1VqDBwdiDMwRynScwTZXx5uOQl9o0qy + 3VOlWUg06tIVEYdCGGR/WRAAF98Tlvsz4qnEew/CnLZqUqX3ds9cqcD9sToy4w2840Rb9A6R+zASleoB + 5mQvVH/6Yx2yTkGQOwzyiAbu4wKV6v4WkT3JXUQcSIKWDFQZC4ddWoGaAT8FbS+KjmORJ6N8GIBGV9Zi + VGIVvKVnrFd1JDS/qE8WSn6XWfeV1YYdYpKVBykTkk4jVUqNev6SlxDtXa8O1G7u6VJsZxqyT8gNzI+l + LDk6ji4za6tD7Q7U3XY/jNNgCBQNT6qQ0+YW6T0ntt9pD8VsKnD+Fo9KhVGmtV6F19APITzPcviacYhp + vkPleqw5+XeLsKOEITW8eIQhCIhCEIn/ABiOC5O5jACZ0PBez17xa0u69mmv7oFarTG7MCSMgeeIlA22 + 3FhlyOg23ZdlOyXEuG2/B+1fDq1O4pqwq1aShtaqCQRgdQQCNp70K9JqfkNQyBOV7KcHuOH9n+GWlSqy + VKVELVX0J3I+mcTZe2Ot81Tr9cznyTJvt+g6I4cTT7tMVgd1wR84CrSJ59Ib5zJNq6hgznTCnakK2k5y + Osn6y9LsG2sJlSDgRjMincjTMj7rcKuFrOFHo0gqUqzMwdyfmZHZuZx28+hxkFTI3YICXIC+sxUt6unC + vj6xtS1uGVgzl/rGYEGCWu9W308zKZA72+lijp9JkPa1ebYyNLWq3lyzQwJClo1bqjTZhgH8ymVal0lT + ZQdUKVhVZfP2llOGkqdb80oQmK2a7hl5c6pHuy4OdM1Rwwk4zywfhpA23jMwocVsoJ4tIzHqr9VWaKWo + VlDv1jxRTmCg/ODyE8OL+2WwqjzMMPnO/wBZrpQpY5jzRi0kVs1MBPwtJ+wY7LM0lTnHN+LEVGYHKZ1T + TItyjGmQW/NIHZFVSuH/AC4jM5dmqANWPkSrRyO6thU5vxYh95ctlRhdXTEeKr5Z9B1D0h5rNTGatzHA + T82IItVjlgNH4pC9Z6hYKAP5jqgjVU8RBz8LdIwY8UzKVbAwGkLvcKq6MFfyiSUlr1W5U1sPQS6i1u7U + KlNG8OrTvDv17o1v1UUW7uGUNV0J89MkeyNMZeqmrHrLlKyLag9UjH4Y0WiCrjJLL+KS5fyoNe6vSXSf + M/ymS6EZl1AhpoU6FJVxkdJItJCpII/SQ5kzRZxtVYakcn8sb931dQ+qaC4GwIPyid4VbTjKyBWrVmPY + keBCWjRalRuPpNV2PQZPyEhPekMFIC/m6yhZdh7s17fUvMBj26xptAQ2ANXzmh3J0sWdB+bMNNFdWpx+ + soWXaNkvanOGIC+0T7qM82Xmk/3fTrZxpkL17dVbcnHtKM2zQqyW6IPCNMe6JjAGcfhEV7qgq8oLt6Sl + VvqobFAEJ5Sza0rjiVllIHKgRfzCNe6FHVrq5YfCszaz1qm9RtGfeFC2D7qS6+bRmGvbYue3QV5uJpqY + oCPzY3iPxJ6gwoqFvxMdpA9LSuFGj5xEonS2sHUYeI3kUTtVqtmo+Me8kR0Qc1Uv/dj6drzZc5WT21Gk + pbbXj1h3gakYq2ef7Q5UE5jhT0rlgNvJjN1LdGHKgEX7pbKrGoRp9IvtLT6XVy9VkqNyqC35ZZt1fGhE + P90TfFTh1FtkBx7SN+L0abMKdFB74j+1TQWRwg7WqULO9bSaadfUS+ljesuGKIvylV+OnTyuf5c6ZUq8 + cdjyZ1fOZ6yyr78cLaThxVtVS4T6SdKNBF5q5OPScy11cVtRz/hMiS6rUy2o5b5w+pg5gbqHqWwRsEgf + imVd1qAV0V6pY/hMx6t1cM2fU+ciuLp1XAANT8WIYcSMnqjTX3rBtQpghvzHVIamXVg5x+aZorV288L8 + o17l12yZ04cdy58w+6SouksGIP1lfIUtq3aRvU1HmJPziIR8504YaLiz5NvisJk6hjlMeifi3aVkbHtH + Bj1zBIxSy0yZIIwNiLq25R0muqB1OBj0bLSJW81kqtzdYkrGcOY4gmcdMRBHpM7Q8zwDHp8UYkcsS2mF + KmPi8o8EaW1ASFTHDOcqZOt2o6nZHwiJt1iaoq4EIHcCKo5sRF69MR+396KZKnz6RwYkRgwvnF1aYkW0 + EJyfFJFb3kKt+EmGZLgzOQrAbGqKtQL4pAHPrDV7xdlRy1kMR6QWpKy1MjG8cjZj7BJnKtPq9YqsOsh1 + LBTiRqrvaYMeWLr9pFq2j1bLRa1UZ0ikRykyIAx6mKY7pUPK0ASW6RiA80kpUyTnEnutA3KgMeklSly8 + zx6KF/mkraAzUU+kkVCvrt7SRM6c6QIoY1Ns8vykbtAmIpLNpBktND8O7SRFPxeGWaSAnGJO6zGZSpH0 + k6UgoziPRfwiTpT8pDnUoTEpj0j0p7yQKA3NiP1KOm8ly3Q50SU9XtHCl6x+vHhEA5Ik7adsKgEcFx5x + qaj4j0kgIhto8xpyTF29IU8YlLj3E6XBeB3vE7lwKdCkWCn4m+FfqcCB5dXLz8px4uS3gf2y8UHEe2lx + RpnNGyQW6+mRu3/3EiefOeaWr+6e8va9euS9Sq5qMfUk5MrEcuZ6OBo1fAdTyvJyOTJ8UQ/OOTwtOw+z + 3sjddreLJQUPSskYG4r42A9B5Fj0AgoG2zxwcnWJtbio7edD2z4MeAdp+IcMBLLQqlUY9WHVSffBEwPQ + wHZsllg4qPso4QhHREIQhEQhCERCEIREIQhER6DeMlm3XUwHqQIV8Zt1e39tuFBPsR4SipmraClWJ9NQ + Or/zCeHVGAUYn17ecGpX3Z9+GVyO6r260T7coAP0IzPlTjthV4VxS5sbgEVqDGmw9wSP0My4st7L0uv4 + ewMg8JY0BCCzW8ovcfsL4j/8K4jY9SrCsBn1GD/RZ6c1cGeC/YzdCl2wSgThLqi1L5tjUP3We8NYjHKS + Jz5APm+3+I6ju4gpBXTGHwYgZKjZUgLjwtFpcKqu2FfMu0uBafGHPyMhQvWeXE9tW0ELlCP0lSrr1MHA + K/Kbw4OF3TIb01GVbuzFCnUq1nCU1BZmZgFVR5sT0EkTdP8Aox/tz1zSLFtAwv4ZwvabtjacHr1LejT+ + 93KHBVThQfQn19hJe3v2h2Fta1LHgFb7xdODTauowiDzI9T6HoJ4dVqO7l2JLE5JJzkzpw3fPfJfL9j9 + fE3UcY7acW4iHRKv3amfhojTt7nqZzL1KrsWckknJJOSZCDjzjs565M0vneTqMuR3krRQhCFzxCEIREI + QhEQhCEXqX2Q9nOF9pP4rT4rTLvSWmaWkkEZJyRien9juzFp2US7FOq9arXIzVZFXCjOF69d9z5z5w4b + xG6sLkV7G5q21cdHpMVPy2noXAvtZ4zZ92OKClxGiMA94AtXHsw/zBmXJgrsvb+O6rh49d55L2S4qVmb + C+HyYSqatwjNqLlfnL3CeK2PF+G0L6wDmlVXUMjcHzU+4O0tIwanhFP1ExMuy+v4uXHkBx9NjJXdWYs+ + FbqGlhK1bUxVgV8pLcWZZmKJhfeNSydW5QRiV3iWpL94uVY66RKnyx1ld2eo26lGmzRp1WXFQZx0KxHs + XYsVAHzkmZBkHtspFqhsLvvJgrg84fVL6WVXVtjSPUSX7rVByoA+YkuRP7A/bHxXbUFBhpqgZc4b802P + utZiSCB8ofcDqyxDfOBmUmZ+tjM1fTsxktNrgNjJ0npq85spbBdQISAohepAi79R3lku1yuoMCPSN72u + ysFPh/DNt6aMdyDK4pUd/AcnoIGZI5CzKdN2bW2C3zg1N22x+gmt/Yrn+yJ+QkT3SKOWk5+kDNazk/hZ + 3cP+AmNNHlbIJ/LNMXifGETbzMQ3lLJC4GfUR98d7ZqUS2nQhXeSVbcsq4QBvzS+l6mWDFD6aRGPcIcn + KAfqYtqyF/SoJbuF6D9I/wC51W1ZAKn6SRrkKuFJ/ur/AKyA3tVqjIoq/MYmh3QtInC/NtAxFeiFVxoD + ehblkSXNVBjUS/nqMirV6r69VUBfJVh5g8UqMGWocHPh5RgRdLsuEZwy9JUQVcc1VwnlhYw1K2rFF3dv + xeketz3T3LV1XDVSG/LKFxcVlZglWp76pYdKvef2lUBj77we2DKx3LesoA92bt9VI3NVdXMdXzktO+rK + OsctAsGCg6vlJks9IzUA1QXGAWh/iVVchQDtGrxGuuov4W9o56IJYYxGNalVyoPN+KB2w7nfxWtp5Tyy + OrxB23c1PpEFqfESBDugviOflDRTvKge6ZtgXOfeMaq6jO/6yzpBblD/AFMlpKrMxZAG9WGqVsDwUgv7 + Zb13ZdgY6lTuGGpwdPnvNGrVIOKYTSPNVkL1qrjGwX8o0w7/AB4KO3T5ZrKqr0Jf3MrVqpzhRhvyyTui + zMWyY4Wp6sI8EPLGYvoqZJYtnz9ZJRqvRXCHxeS+cuJaFvLrLCWDlehhnyFOPFlvdRWu5PMOX5SZKwPi + B0rLQsT1wBJEsUXUG3b8ombmWhxo+aoawOyg/Qxq1HU/2PI35vOaH3MKuVBMcbWkqsXIRvSS5FqYP7UU + rOysXOGHUSGpVdtXUy+yW6jNRhp+cbVrWihu7BK+WoRiUp/7Y9ZiQ2o4lPLszaQdI+KXq9UK7FEAzKVx + XcrzEdPKdPGbPBcHLlpfNA9UqWG8araj1MjGWLZzAAgZ3m3aBcnetY71lXCHEalY9GMrNrzEBMDAp72v + PVXRyEhvnKz1SxznLfmkeSTzCPRCzcozGYBU5rHfkKwUGROxbxSyls7NyDCyenw528ZAiczGkwyzs/H8 + 0VFJbE2E4aE3cgt6GTC1pKM4Bb5RfcWmHSv7YyUQR0JaAon4AZr90i+FIhVEXcASft21/Tq5BCB+kepH + rGY5+sOuqdv7ef5pA34d49D7yFW948MebeCWg6pgR0zHI2JX1R6VJKWhnWFYYkinVnVKwb2gtTTM9ebU + zKzq0w1avDKysPMwFQHzj7I79VoN5QDDpnErswgG/FJ01nJWNXnF1CQao3U+Ikj7Gss3N1iapXyY8Nq8 + 49T72mRsjrDMiVio6wVt4ajvpVaPRpErHVywTmPWLWpi1gN+GPRjj80hRsCTJlvCJCltx+ZwwRHKIIpl + mnTBC/imTmFvhgtWRT8O0lCuPSTaB1WORSozjMycy0OKgUH3lhKRbeSJTGOaPRMLnHSDyePFrhxakprv + 0MmQhTzbL+FYiLnxry+Rkqqh3UGZLbhomBsnkkyUyfFEpUh0O0sIoRdsFYbqCKdPUPWPSkMZaODDHQCO + Rn9eWZ7/ACoCmp007vy2kyEKOkrLUGmPRhFVqsq407CDVNQ6iQI2Y9FPNqk0oUgbPiMfqA85EiknpH6d + 8Yg06JwOY5RBKfpmWEpYi3Q5BRJTJkyJ7SVE65kqKPWLdjlnRogniH25dp+/vU4DYtmhakPXZfiq42H0 + E9d7XcXpdn+zfEOIsVNSjSPdA9DUOyj9Tn6T5Ju7qrcXNavWYvUqsWdj1JJyTOjhwF23zPzHVIHHjUoQ + gonXfMXVdhuz9XtL2htbAZCVGzVf8Kjdj+n7kT6ld+Fdm+B1DilY2FquohQFVVG3QdWP6kmebfYnwSlw + rgp4tXGLm85UyN1UH/M7/ICH2516tTspblGIpm5AYA9djjM58xyQvpOl6V4eB5UvKvtF49b9oe1V3xO0 + omlTfSqjO5Crp1H0JxnE5KNbrDfM3DRq+fzzc8lZsIQjs4hCEIiEIQiIQhCIhCEIiXuGY+9Us9NY/qJS + j6JKvkeRifVrxPbkN9oI47tSxAXA5VnjH28cAPfUOP29LFKoBRrkJ8QB0k/MbZ9hPYuzYoX3BeG3bEOt + e3p1Nj5lRn98yDthwajxzs3xLhxBPfUmWkxHRxup/UCcZnrIC+o5+M5un1fG58UUiWrig1vVelVBD0yV + dT1BBwRKk7b5RNeG3eyd8OF9oOG3rHC0a6VG+QIz+2Z9lCnbhVNMOUYakbHUHcT4dU4cT6x7DdpDxHsj + wqqwc1BQWmzerKNJ/wDLObqBdJe78Pkq4DdtRuaNN8BcH+WOqVww5chZgXHGDSZdKIWxtq2MgHHSykP9 + 3RvJWB2nN2r5vof8+W93SdwaqsUcaj7TxL7e+0VWz7rs9b1t3QVrrDeWeVT/AFInp9HjtG1tKte6rIKV + JWqMV25VBJ/pPlTtbxmv2g7Q3/FLnJqXNUvj0XoB8gABNeHjd7bxvk+V4jtG5wsSdzCEJ23zEQhCERCE + IREIQhEQhCERCEIREcrERsBAgvavsF7S0ba4ueD3/wDyqw72gfRhPY34rYKzaZ8icMvH4ff0LmiSKlJg + 4OfMGfSHBlHFOGW19a70q1IMNPlnqPmDkTDPAXbfV/D8/fg4L5LrG4tYsvn/AIZXqcZoKTopO8y04a/X + Bky8NLL0O0gMb3g17rX8dTHLQOqLS46SjaqLD0xK9KxNPVqB9tpMLVmXCpFrErDHXmnpcWNRuhHsZMeI + kthmRB+aUFsaw3xzfmjTw5ycsufbMNDHZjXTfoo/5qD+WR1L4IMuSV8tUgNvgrqpIMfDqgKJxlVpYH1h + 2BUYlMnEKTnq+/oI83FFVzl3+hzIO5CtlQhaPC1T5Jj1zgQQ/J9hSpe25GGzq9wYyrchd6NJCv5jpjqd + IorFtBb5wChuoQ4+UjwUmBQC+O+tU+kYt7Vbw0QF+stcqgvhNXqY0XAULqA9sdIzMqD+UBulYsCMN7CR + 0iG3fw/ik1WsCzBKQOfiWOQBlwyBM9NpQlZV30LqL1U29JE9ZWOKZDvn0ls2tDTzkfSCW9KmWKoOnVji + BkEqu6vjKGl/eMkSm5VddVP5ZOlJWVQzZx084aQp6nbptD7JBMFsG1ainzUYlOpRLVGFNE0fiY9ZfR0V + eUZkqEKOUAbyO5nqqpauKShsN+XwgR1KxKsXZwPRR0k71tK8zonzMgF1SzhnJ/Mw2/SArS+KdLWlnLnW + /wCLrJVtU6Y5ZTfiVIHCZP8AMMCSJe0n0jvQHPlvBMqdtZ+6oitpAErVqA5ioLN+aXKDq2nTv6yR6Ybe + ZijBkj5sc0D8YGn5RrWx08oJ9JrNSC+Y+sY7UqY/tHQY95XcpPZZS2NWofISZeHaQxxn5yWrxW0pBgr9 + 66joolROO6mx3Jx85YqbCnuKVOHAtlkEKtj+Ecst219SqLliitnw53lrvaJGTVQfWS5JPu1+WIbEr0G0 + BYlmw4Gn5TVetSywUh/kZHXuEpJlsn+WMzavGVVSxRV64aQVrUIyjI0/mO8hueLAatAIxM5+LHUxUYb8 + XimmIpulyMfduU1pLpDaCPnJ/vFBcjWv08pytxfGquFL6j4mbzkCLVqN1O3RVh2bNrQ8x6C6p7mjlyuS + o81lB7qirMVJ1eizOSlWVeXWdvIyrUV6hZGQhh1gYEZcqFs1+LItPCEDb01GYtfiNVm5Hwv5ZCaDtvoJ + WNW1djzDHzM2xwxPLcufLln49Tatct4yS0heq7bKTp9pfSxB3d1EuUbGgqsfG2PiMreJQYZP7YJZ2OWJ + OqCW7sMtsv5psVqaKzaUGofhlFwzs2AZeHLujPi17d1UKlM4fJYenSDsWblGFMsi1LM2oSzSs9vBKeUP + dmcK+rNSgWblEkWxYKzvgTVS3ZfCMSRLYts2TM3lfy0x6fx5sylaoA2sEvJUtxpXSCMS/wDdQrc+0Y6u + oYKJLyrWcQFXSiF9ZKqld94+kHPjkzqFGWHLIc/Pm1x4zXiqHKnLZjhluhMGbmYYMclYKvMDAdU7/JoQ + nbMHtXbdpNSr0lZQwMmRwxyuYlajEbzott1gG2jMmNzyz3NXg7pVaO1bSJCOaGrzWT2S7ml1fhzANvzS + LUdMFzjmiTczKm1/hiqxkCll6Q1FfxxGBXuso2TzRVbHhkCtHZh2MzOlRtv/AMoqt7yvk/OODYkOEd+q + wGC+eYaiTtIQ34Y5DBNFZnun1aVgG/CZEpPWPQGQhUK0gOR1jkEailm2lhUOckSe8LXDDJmJnDSRBywS + kfSWadItq2P6TN5C6MOJaFB7SamCrZxJhQP4P3kqUwo5gR9ZllmXThxpRoxbaTU86esciJ5kiSooxykn + 6TJd2+GCQhOOUyRHOlgwglMZymNP5oKpzgCZ/wDlvgapqTfiGVk6kNsoAX+XrKqq/XB0/lj6SMfI/pJ/ + KxrGoKMYx/LAKcdMxFUq+GBLSdGOnCgmTusCjRT1xHZOrlElSmPiEsJTDLgCCxqpZMkTJGN5bSgB1AEl + SiGyVGJCk/VSQH4ZYpIcZMnSigMlSmOggsnMokXKydKWRsY9KZ9ZKlM+RkKUZZ0aUgvWP7tZIinMkFI/ + FIc7BzmooUZ2jlwPSK1PK4jhTAHOcLJ3Q5SD0Bj1pF86SY5NA8ODA1yxwoAX8TRi2Weaerx7/aD4o1Cx + sOEq5y5NaqM+Q2UH6ljPCG9J3P2u8UHFO3HESja6VEi3T0wgwf3zOEPlPS4jQF8R1/K58qzhN/sbwV+O + 9oLaypqdNQ5dvRRuT+kwPKfQv2K9lvufATxVwRXvhhMjBFIHr9Tv8gI88u0q6Dp/t5QfRdfQs+4oU6NM + BKdNQoUDooGAJyv2mWordjOJCoOZAtQE+RDD/UieiU+HHvMMeb5zhvtxqpw7sW1Fz/a3VVaagDqFOon9 + AJjhmZIX1fW544cDjfMzeKED1hOq+Ey9xCEIREIQhEQhCERCEIREIQhERydY2EIvp77IOMm97BWaqT31 + ozWzN12ByP2adga9xqbQQV/lnlv+zVfop43wuumsMi3KD0wSrf1We5J90NPL0f2nFnrBb63oOoHgNm75 + R+1zgx4X2vuaunFK8H3lcDzbOR+oM4SfTP8AtBcFocQ7KUuIWtICvYVckgbmk2x/Q4M+ZSZ0cT3G7wuv + 4+zldGhmrPoP7B2pcR7LXdCrVAqWlfZSfJhkfuGnz7PVvsD4j3HaG8sWOBdUMgepU5/oTHymx1V8ZyuH + Madbvc34XQZcOQW/FI34LQHOzgjEtd4EOd+b0EY9ZlOQrlfPcLOMzb7XeWvdwH2tNQ4X2MuzTLirXZbZ + cjyJJb9lnzsG5APeeyf7QPGO+fhfDaYdNAavVUnzbZf2Bni7Tr4t623x/wArzOfMkyEITW8iIQhCIhCE + IiEIQiIQhCIhCEIiEIQimGx9p7x9gXG1uLO74LdMveUf7ajv1UnDAfI4M8HC7Z+GbfZPjFXgXH7XiFMt + ik41BT4gdmH1GZnmbEu7oud4uUd316EoquMoflANRXHT9JgWnE0ubanWpkGkwDBvCCp3BH0k4uARlaqB + T5YnJ2N9vxHfjvdr97RU4UZz7SKpVweUDHuZlvdUlVS1UHP4YqXFJxhXEOxtTiC0nq6l6D5SJyR08MpP + XKnqmkfhMYbpCOUk/l9I+2sx1TVCfUA58xIHZmC6jhT+Uxr10YtuCfTMi+/Gnq1FNI6ARg2vqKjhiwUD + T+JjgSq7OzKjOSqn/wAPpCvWNQvq3B8sSsjVVqN3ZIX8KjTNQ8WTlTtcihs5IX5w+9BtQoI7sTq6ZErF + SxYsELfEWGqWKTVguFJRW8lAWHYQL+VhGq1FbUKg6ZCiWadUKGBDkL+IygjOeowx6tmTIzhcLgL+WJw8 + VjW3Zm1Gmpx8ow1Wp6jUKJ/9xlapVdV5n68vUysblQ2FJP8AdkmCycwtAXQByqEt+JuWSPcj4tA/LrBm + M769RUEt+Y7RtOkdWWA1flGqUYGqe/z4LbS4LZ1EIPORNdUVZu8rF28lEpJQepp1oSv4ZYpWJKeE6pOg + 9s+9Zat4j/8ALBG3ikTVnbVrJl6lYhdjgewj1sxpbSCW/NtDYRp/Wz0Pidkd46kpdsMpC+SgS6lmWbCk + J8hLNKzKHLEGHeB4h0VCnw0tgudKyQ2vdblwMfE0t1aqUwwLqAvXHWVmurdckgu3kWkCsjRQrWKhkpuX + +QiC6rq2XFSD8UUKwpqmo/Nv6SrV4k7bLSDqfpKMF9kKftbS6rVmw2dB+LEY9qG1jLnT8TSgt9WVuWjT + H6tJF4jd5UEAfyiHYnqXfjT1bGktNizkflwZQqtRXVp1lvlJql5WZWDED6yq1yFOGGW9czTDZ7ss8jfi + kSnXqKug6F/F5ycUWpqxZnP1lRr8KuKYw3rIKl47ahkCV9ax3gV2kyKzFyS35j0ll69JVYscbb76piGs + xXGqR6XqMxzE8dP+jXgrN5XDLhMH82JSprqbmOFkisVHMAfpF1jKlUAb1l4eDVlm9ztaag1FGbvA7r+W + WX4hSWmot6IRfDqbrChd0FpnWiPUHRcdZBXrCqMqMN+URa2+SvF0eI+/VjpdgNLHxeUu2tak9Rg+hFb8 + ImWKZduXWfyrJ04fVZctlE/ExghMzd2vcUaSoxpkFsdJgV65DFGB/SaFKzFMZqXB1eiqZLTNlTK6xVqN + 5sw0yDWLNwcyyqAqs3ImfpLiWtxUXkDj+UTYpXlFV/s7QD8zCD3rsrBEwv5Rpic3dWHEB5bOo8HrMyli + B8zLtLhdFVyzDV+WFIO4y+R+uYd2+cID/NmSq1mAfm6QWdujYUgtJUtqXNoCCVGta7FtbhEPvGCxKsxa + sXb8OZCVevRWHoopxjP8sRqYVeQGR91VUq6MSv4ZL3VdtRUH6xnifigq0QwxjDRgtHbVviSmm6+M8slK + 5pYB54Of8l2DU1tQNW/NB6Q0sDsxHnLK5VWLAGQVqjd2xCAqPNobaXQVZ6IXVpGWkLqG1DEc9Z9WdBPy + MRLkK+GBG++eaam7F00a0Qd1OGj0V1OWTl/FJGZGGc4/KokiMGXDZKr4WgrI0XmgENPnHKP8MFTPlPbX + V8/2sCn6xQDzSQKfQxwQ4xiJzCo41ocRdO2PSThGx0ipSPXEzeQKziWgRT6dIaDky2lEny5ZIlqW3UZ0 + wOUPdocS1DQ3oYKunfJmh9zZl6ERj2pUZaH+jGbwJVFG7bRcfKSvSC6tJ5o3SPYw+zdn9ae5iL7SQL+K + INooziJZ4mqZAPiEemDykcshQ780lXrnaZu7bBrCAKuNpOjBR5FpXpAZ5jLFPQrZY5mWW7rwfE9KxDcg + k6O7NlhiMRk95KLgKeQA/OYovot8E/WkRSwxgyRKDMOQfWQJdEdMD5SRLor4nkdmVthmelpUs36t/WSp + a48ZH6yNbxvhJgtcsvWJG1MyspRVdsiTJkM2gjT7ykjEnlPL+WORjnmJEhKzMtA1mpnDnl/KsmS6AXLD + X88TOQhjlRn+YyWkE1coElCvFbTpVQ7ZKgSUFPiAlNDkcplimpbYAzJtj1usqyk8ogq+hOn0i0qRXrLV + KgWkOeqHMKulInzzJUonTgSzTohVy0gvb6x4XbNccRuKVtRzgtVYAZ9B6mQLm+Lm5OoMBVnJbllzJUoH + 0kHD+K2XEaHf8MuKVzRzjVSOQD6H0Pzk4qnoxAj8nuxw5ftN4vimSgB4jJUpjG+JUWuCcLktIkvg6uaZ + R+7OltLBsH82OkOxYyz863aRYJsATB9Z8I5Zli9LlsED6S3Suigw2/yETxpNxQ3ToaunmG8jfB1ayRJk + uqTnBOM+sebbvQShBX2kjTvXupBkWodR6ekq8Z4pQsOFXt5ULhaFFqh264UkfviatLhZqNltpwn241F4 + N2DuEBAq3tZaIA648R/YCa8QKFy9ZzYY8a7vmu9uDdValaoxNRmLOT5kkkyl5xTu28VVnpl8RkueW26X + sPwSr2h7RWXDl1hajguwHhpjcmfWFGjRtralQtzopUgKdKmBjCgYAH6TzP7BeC8O4XwWvxfijn77enua + AweWkDuf7xnpdXjPC6G9NXep6YxOLmVdF9H8X07x49yO2mQeZJx855V/tHtT/wB3+EgnFXv20DzK43M9 + EvO21pY2ta4qWh7qkCxbI6CfMPbvtXedruOVL+9fCjlo0V6U19APXzJ8zDh4kdsvleoccfrTS3IwhCdt + 8xEIQhEQhCERCEIREIQhEQhCERCEIReofYJxBLDt0gqeGtb1UP6Bh/5Z9HLxOlUTCAH8uNM+Vfsqr/du + 3PDqrDIJZSPXKmfQS8VOVRURPzMZy8uCuy+r+E4zk4nd0HE1o8W4Vd2VamDTuaTUjk+RBGf3zPjzi1jV + 4fxS5s6wxVoVWpuPcHE+raF1cMeQoFniP23cINl2iTiKhNF8uolemobH9Rgx8XhSXzHShiZl5h0czr/s + t4h/De3nBq7MUptXWkx9m5TOTPmZZsKpt7ulWXx02DD5g5m6bEvneF1yCX2m33dWYFsssHq2FOm1Wo6J + TpgszMcBVAyS0x0v7Z6FNkKHUit09RmeT/bN2xVbZ+A8KYZcA3VRfIeSTiw41b6zn6g4uHuW86+0Pjv+ + 8Xa6/wCIUcigzYoj0Rdl/YZnLRhzF3JncGjV8hycjyZOT7ZsIQjsohCEIiEIQiIQhCIhCEIiEIQiIQhC + IhCEIvdfsq4t9/7Pm0dia9mwAOdyp8P6HInYCoVVlxlfRp4X9nvGP4P2jtmqHFCqe5q+gB2z9Dgz6IXh + 1XVnNM/KYZIPm+0+I6nv4gXyWW7EKvdphoxFrMrFi83Us6qs2w+celsVC+fxRd5ez2b9tiU1racb6flJ + u4qkMGL6puLRGQVHTykgoO3hIEzc4APbYVKxbq2R9ZZSx36f3mmp3IB535YEUAzB25pLysbCzfuwUdUH + zMidUHicFvyzYNOiwyu/0kT2qNk4zA5WoRsh9Cq2kufpImYg8gea5tctnuhuZKlmScqiBfWX9hDosNVq + kcoMO4uGXl29Z0AtQoYucfWMK0VByQZP2/lPhsJbGq27E6pYp8NRVBqEal9TL9WrSCsEyPzKJRrmquor + VOk/l0yjNfE+0DdZS0t165OfaTpRoqutRlRMcmtV0ha/N6M2Mx6i4pL3VQgJ4usHFpG1RdBdQp0HJHyk + D3FdlY4RF/M3WVaK1aisEq6F6kZ05iLyN/aIHx76syTEHzMSn+9FVxrBbz0jVB+JBVxocv6rKte+TSyq + CFxuqjcmUHulK4AIXyzLOPfuM0CfcX1VmYZcL5YOmQffq+MCqR+ZiZC7A+EyLUMcpy00x4wLlcla+lct + s7k/lAMezHHOCUHVmMqWlJ61RRnQnm2JfNKkqsAah364idFobTdXesqjkQaozv2K4zj8q8skqUqKhsmr + /LgYlm2+7sMPSQKo1FmOnA9WaVsCjL/11UWrNjCnC+iyEO4ZtRf9ZgcZ7ccDsq7JTd7kg6SaC5H6k4P0 + lOh9onATVxWpXaL6kK39DAuJ67iFFuuZiR0z+aROCThQT/LJeA8Y4VxtWHDayVWUZIKkFfcg74950NO0 + pKOekC34VHSJzD2XVxOPKbxRLlnpnotIj5xBQPVtlnSva1WZitABPLljn4ZXrLjQEX5aZP26reE/tzK0 + gG6GS00GG1Ejf0nSUuz7/EQGklPgOk9dcTyjBxYlzqW5csAeWPHD3bwgn6TrKPCkprhqSBY77uiDcgYm + bzfhXhhi+7lk4TVZeRAB6tJE4aqn+0Otvwr0nQlqOcKw1RrorDkxD7XVrhgFiIhVcUwEX8ohpxqL1Sc/ + iM0nQKrDIPylSoEbUFPN6KJRnuaaKFVpE8x5pIir8I/bTIsDUwAfV8oJTK6tiWHwx0b1WUYA+AyVUIXk + CBfzGUaDPUqYRKp/NtiXhQqhl0AaSN8NIfFY7JyKX2U6N9tusbUtqqrlHOr8IMHoFWYpkMo06jzYlGu9 + xRyUJKjqyxBthdFepazqFR8N4ZI9uV06iSpPlMJLm7qVV0khubxGWf8AjlGcgL4uvWNwaDlG2ktdlCk6 + f0kj0mUZXLrMOlxK4pspqAsqiSpxpGqMGD089d9UXYx3WstIsqhwAvv1imgFVgXz7dJQHFrcMu5PuskS + +ta7YLJ82OJPblUZDK9sWPIPlkxBYnwsAE+cfqt1ZtFwNJ8tUhF9RVu6aq5/MwxAUnsitY6fABq/FKj8 + NLHDFP0lupc0sZauOnlmQ0q2tmCkacbMTKxWWsWjfhYVeYgN7GCcKTozEL85I61eY98mr8K80rutwzME + fWv5RiXQgei84WgGLbpp+clSnSGzETNQnCjMkpqfh/xZnt54P63z+PIWkncKvrHNWpBcIMfmaVKSF/Ee + X5yylNFHMeaYIHu6cXZ4nJWHNtn6SRGJXCjH0iI1Jdt/0ju9VfCmf5pkv8LXApKalvECfpLiKFXOAPXV + KIunHhGPpFSu7Dm3+syyF93RghX3qA6huV/CBIqqhhhRhfeQJVPTGI/U7+ImSGmvYlVq0fFsJVemF1Fv + 2miVT0Jkb0hnpNjk14ufPi3ZuIS49HxbSI0TnpNTMbly4kok6x4J05i90V8QiKuIzzIwScpPNvHoxXYG + MUGORPPrElZmlMjFfPmkiMQOuZGi56eUlTGMY5pBaYu4RvwkyVHZW6ZglMHwiWkoBvKS5AebfjxWiFQt + 4hJUOfCDLCWo9pZo2yKuXIE53MurDBasmeigyelRJ33lpEor7tH98OlMYmbmvounDiD20AoN6Yk9GiSy + jBjqblmw0u0QceWqZrbYYS0LbSvN4Zco0wumQBiIPVK+GQm6kUryMFG+MyT7yF6GZDVjnrEFQ1PPCyTC + j6x92t98HTInzl9pXaWtx/tBcHvT9zouaduinYKDjPzOMz3V1Tm7w8rDHWfN3ajh1ThHG7q0qHPducN+ + IHcH6jE24cAW+c+cMuLAMfTN7PdoL/s9ei64bcPSqeEjOQw9CPMT01ftjo/dV1cKc1wMYFbCZni+qA3n + S8Y+75vi63l4hMW7ftJ9oXG+M5pLW+6Wjf8AhUSRkfmPUzC4Rx/iXCrnvbC8ehUOxKnZh+YHY/WYY29R + FBzAwA0Fm9ZyrtW7ij9pPaSlU1m9D75Ksi4npXYP7QqfGKy2HGu4t7t/+VVXwMfwkHofTyM8Bqt+HOn3 + iUqhVgUJDA5BETxmRdfD8ny8eQrsvsYUqTK39rn+USUVmthmmWKj0854/wDZT2vq31dODcUrOa+C1Csx + yWwMlW9duhnqr1dsBiGP4ek4csHF031fS9QdViZFdTjVwtJ9dEjA8hqzPEP9oHjj31/wyzOsLRpNWKny + LHA/ZZ63UYsEIJLDOWB0z5y+0++PEO2XEKm5RH7pT7KNP9QZrw4G93nfNa4+LQaW5HXt0m52X4TV47xy + 2sKfWoRlvJVG5J+QzMOe6fYfwBrbh1XjdQIKlxmlS1fhB5j9TgTp5Mu0W8DoOneflC77h9gLOjSo0woo + 0lCqvooGAJf+5JVVdO38suI1ucBkUNncrtH0gtQ5Rim/zE4e9b7fD/pj2hoLzL7Zk/hnZBAmsNdVVpk9 + NgCxH7LPnthtmfQv+0PScdlOHHXrUXhH1KmfPo8Kzt4XZtvkPls3Pnd0MIQmt48QhCERCEIREIQhEQhC + ERCAhphEQixNMIux+ytA3brhKP0NUg7exn0qtkFRQmj5tS3nzd9kWR9oHB8Yz3x/8pn09pJG/hx8InLy + qN9X8G6wqLVPu4659OWcN9rVmeLdlKpVHNSyIrKQPLoR+hzPQXA1kYP6SC5taFejUo1wTSqI1N1PmpBB + meGenze11WBy8Til8enxySkdNRfnNPtPw1uEcavLItlqNQpn1AOx+owZlUt6onbvZfBODhyafY30Te31 + Xg/Y/wDiDOneU7WmwHiySoCj9TPn+9umuq9WtUJapUJLsTuSTkmetfao5texfDaCEgVSmRnqAmf6sJ41 + jbrIw/t3fIdQ564/wKMwxHYhiaXkzYRYmmERCGmEIiEIQiIQhCIhCEIiEIQiIQhCIhCEIplOkz6d+yvj + tLjvZG3LEvd2v9jX33OPCfqMfUGfMSjCk+U7/wCxvj38J7TraVn02l7ikxJwAc7GZcuHcXp/G9T9XKC+ + G+kAuV2AHzMYUxnYE+8X7sU1Bq6J9RGm1JBK3DD5NmcXr3fbYZGvcx2rBeRE/rGr97bxFAvpjePWhj/6 + uqcegj0pBRhq9R/mRDZG5htSy4c/PaPpWVFWySNXviSMo9HPzaCBF2VB+sIVSk0oF5SCsj7wLs5QfWOI + Q+g+ZjNKZIcoPaQeWRR1a4CtpNMt+Uys9zWI5QP0zLwW0p7syiTJW4evV0zLPBPYfi2Kz1mOXGV9lg7E + LkJn6TaepbaW7tk+kgevS6AMR+UQ3Wcq+ixHuKq7KgDfymVnW4uhjRVH5mE3TdUlZgxI9yRI6t3bo2HO + W9AdUszT0TclsNeH118VIFvxMdMc9jcNpANKmuNI31TSe9tx4cD5gwS8pVDingt/Kx/yj72Nf2yW4fcB + f7StrX0AirYXBXCpVP5m5Zvox5Tg6fZTFdlVeckfzGHey0fljJwolVNQ6G+eoxz8HosuFJLH4mE0GqjT + y4DeTKuqItNmfL1a2B5ABRD7Gej9LLbs9SC5atj6QThNuh61arflGBNUd1sMFvXU3X9JZSu52UIMexaD + yOrPsDyFkU7Fl1CnRdE/CvMZKOGVmXPdED1JA/rNRBcMcd8Qp/CAJHWsdTZrM1T8rHVD7N+47n1UfuNK + gua1xbpp5jqYNieJ/ad2zPEb2rw/hVYnhynDNTGO+Yefrpno32ss/C+wt01qAjVqoou2rcKc5H1xifNo + 8U24sN+W+b+W6txfrxaIsTE1RITovnNttcF4tc8Ivad1YVDTqoQQQf2PqD5ie+9iPtY4TxburTjVJeG3 + hwDW60mPz6rmfNY6xwfm2meeBkauvpurz4nw+L7eqqqr41CsNXLK/wB4t6e1R8Y9Z5X9lvaStxXs7To1 + 69V69qRRO+SR8J/Tb6TsqqvXbOs7dCzCcn1o6W+y6XI5+MyG334haamCVqer0gl8rDasgMxKdqi1FdmG + rz9DNGlSVgAhwQeoEzcAuv6gPNoJV1bakP5syOrTLDqpXpsJHSt9O+ct6x1VCo8WFmZrdBgD4apVsdfQ + aW9QJWPDGVWKBz+0muKzBVFOu9Jgd8KGz+srNXuwvLe1fpRWaC1inqhezZd3JRfzGCLQo89R9bD4QuZM + DXqjfiDEnqrUVkNS2Kq2u9z/APyVl71V3NIt7QDNooEgHqoxHNfIBllTp4fEZS+65DFb4hvy0Fjv4bVZ + c/fC6t0PcrK8NKtO/EAFylLf56ZA90XDjZPXUdMaeGXGlmW7CD81JVkNSxcLhb+nr89NJWzGBDm6n0hW + bdauE+fWPe1uELBAH1eeespJa3oZRTvQVPX+yXaTJYX2FL3pCnlyaSrKQ/KDN1SHhNwxywRFx5tH/wAM + uEXHeokhHCaw1d5xYo3oFWR3FA0l34mX9B3Qki07mVLJlbFSsCfyxn8NDLlSXb8Tcsa9Ssq/2dxlviLU + ViGvcnxXhDAf9FZZspcz9KxR4I7qrsQF88tJH4bRpaQ7oH+czO+uMsWuyVz4VpBZFVNaoGIuTq9O6WMF + l9oFspSsaZxUcBvPzj3awAypJz6Tn0pXBZj97B+dJY7TcEYatnf/AKKx/XScrbTvRXV3KofmZXquae64 + 0mVBQuGVf+IRP/5S5kBt7hqmFuyWzsvdLAwIeV14LUtqxZX1EJ+WOSqmpj3oH6zNFreLt3509D/ZLD7p + W/8A8h9X/wDCWIAWDky1cCinTJUU4jAduWSo2nZhzT13beJhonIT0k6Lq6yJG8RMnQ7Tny3dfHppKajS + x0SULmRhuXGZKjAGQ7urAJUpkjEmSiTFRgfFiW6LBm6TJU922GJRJRMelA+0tJjV06yeko9Ji5pdWPEN + RS1PmZYS1Q+IoWlhGCjmGZKlRE+Aj5iS5tZxB5qy2IK5IEjq2K6c4l83aKGwM/WQvchtQxo/liM8t7m4 + YJrVkVLbBbSDplZ6BGroJr1CGXlzKlSn4tROqb8fK+m48+E86s409J6Zgq/STuull3JgV/FOgz1c/wBV + Cq6RJkEVBHKsO+ePHSJU09BJUrlfCTIgvLHIszzS3wErCVqp3YmTIxbfJ0yFFK6dpYRT7zFQLo4+5pUX + Pilqmv4pHRU5l2jSOMbzJzuvDCWigHlLCL7R9Oj7SwlMATJbQQoAh9oj0z8Usin+GOKbcwkd9PfZtQaR + 0kFSqwVgs1Ho5VtpBVtcrtLMyF36st2qtsSZ5T9sdDTxSwq453pMCfXDnE9npWRJycBZ5Z9utAUqnCHT + 4qVUH6ETbDM2BeF80b4G8dMIQnVfCxCEIREIQhF0fYeu9t2t4VUVmTFxTXI9CQD+xn1hcWKKzb61zttP + lPsDZm87U8PTB0rVWox9FU5P9J9KJxr+1YMQEbrkmcfUCpq+q+DMuxSs8TSlZWFxcOD3dGk1UtnGdKk/ + +mfJPEKz3VxUrsd2Yk/MkmfRn2mcaS17B8TFFsVKqrRUZ9Tvj6ZnzfjVR95fT4ulbD5vNyzMFtPszwuv + xzjFtw62DF6zgZA8I82PsBkz6c4fb1eH2VCztgoo0KSqB7ATy7/Z/taH3vit5VdBVREorqHQMSSfbwie + 1LUoHzQt5HMnmzfQXX8JwmGDyVKlQrsWLmmx9xJktqxbaoR8htJK9dqasaaB19mzKn3y5qbJpR/RlM5z + Fb3VW8/+3oGj2RsFJJ1XWQD7K0+fZ679vXE7irecO4fWYHulasQPIscD9lnkZG5ndwiAN8P8nn3c7MhC + E1vMiEIQiIQhCIhCAhEQA9YsAIREIARcQiQQAjwv4ouIRdT9mTNS7acMemcMHJB+hnv/APFLs+Osx+Zn + hP2T2wuu3XDaTkBS7E/RDPogcJt1GWOZhmg+b634M/6Nmi+rsMa3H1MjFZyzEu5/vGbKWNBRysP0jhZU + icHHzxM9he/23gX2wWHd8coXqDluaW7erLsf2xPPlBD5E92+3Th1Gl2bsring1Kdx3Zb2ZT/APjPCtP4 + p0caJfEfJ8Zxc7q6ztf2l/jfDeFUsVBVt6RSqp8OrYAj2IE5DAkmImmUAerz883Lyu2ZphpissMR2Uxg + IYj8RNMImQj9MYYRJphHYjdMIiENMIREIQhEQhCERCEIREIQhESdGKMCuzA5BEggIVY5avozsB2nXjfA + aRquHv6ACVlL4Jx0b6j98zqqF86tzhx6rmfM3ZzjVxwHitO7tTzIcFT0ceYPsZ9F9m+O8J41w5L2zIVt + IFWiWyabeh9vQ+c5uTEG+u+K63HkPrybXfiVKmvV9foymVH4mWPKf1l0XVBlx90J/ujEbTuKDbC3phvl + MgC93f8AKi/Ergj+z5IxLq8ZsM+f72JqPXt0bnpAJ8pJTrWNQYwhb0IxH3B+Sd2PUqXDeJyfkYiUbhmy + hfUJvBqCDlRAvsNUmQ0W3TQB7ECLYein17sinYO3/Obmx6ljJU4ainPenUPbM1NSZAXBaGoKuQBq+Uhz + au7+VSnS0Fgocj1xtBrfUTqB+p2llrgKMsI5KwZcqv7Rd6xtqL2aZYsANvWQVaFBPFSd29FE1VYt1BEF + tzUONJRYGbHeHuxXYKvLQQN+Y5/pIxWu3bCOUX0UaZ0KcOGcsRB7KkviwceglHKHul5BbIoo7Bu8eqfy + tVKy1RtaRblQHHxNzGTVnpUtlBLeHSwlG4arV092KqL4Ww2kSTPbMy2eLUFmTpIIVfSK9Cgn/PrKM/iI + WZVCyqsc1Krv+ViWxLKcLRjlgdvKDopy3+tfSnZDem6Mw98yCuyLtTC4+URLShRIK5DYxtzZkqLaUy3e + F9J6dZnukQoEZ/8AxCfkowJFWWqzLpOPRcFpce0tq1NipcHHUmOpWtBaajJP5l6mMSnvDzq8Y+3XjBW2 + tOD062st/bVQMYUDIUf1M8SboJ7B9ufZu6tOMji6K1WxrBaer/osBjB9AeoM8fnocWu0vi/ks15lSjhC + E1vOiEIDxQi7T7OOOvwTj9Id0K9G4K0npk46kYI9wZ9JFaFBcMBgnAKgtmfMXZ7gXGbmrb3tlw64rIrh + kqLSOgkH16eU+pKa0lVaroRU0BjTz0J6j06zk5vZq+t+FczHWXqjpU0ZlFMEN/8AwsCSd1WVWWmD/Mwx + IxxZFbDUnB9choyrxlgG7ulgfmE5wW9zeVZC3ZC5uKY/uxw79VbVWR/YL/pM3+MOy5RU1/WRrxO7qA/2 + SBfyiBgsv21xVdlGukD9NP8AWJoVtQIIX9BMz+KVyzBqSafDzGMqX1wVbJpU1/KIzBnvVpi1xupf5gyJ + 0pU2YuQPh1Md5hiuzMxYuM/hJUSeigVcsdanqudRlfWntgz3arVbdWXXV5j7DaRVa9iy4Z3dc+W8zazo + ysFpZYyNFIXKgj2YyjA/WNtbrGwXwoTj8RMZTuaCtlbcH4RiNTdcCkXYdWWLSUBXDpURvLaNAltqF5dC + lrYkUaa9SzBQPm0CjsqmpVPspzPO/tnq1KJsLalVfuyhYocAMQcDzzIvs47ZU6RfhvHL3FI47irUycEn + cEn4ces1DxsvJfkDHmeJvR0oHU2o6fRovdDThiHXVLhWkoTclCNt4qUQDl9l/DkRe70scu6rPR5eUH+b + Ej7kYbpq/NyzRdgoUKSV1esifQpywLt6tFutxKktvpGXxpMhrURqUrj6TUeupVdKDVIHVGOVADfOMVs3 + EqqIRpLgI34sSwKJypZi649IU1LMupaQVfy6syUNqVg7gL8tMFascDVA4THLSpBh+IyHUiNlQh33VY+r + UC1M90HUebGRsoZmKgJ8jqgNGbr1S/ej1Tb8qyOtcpUGKhqcvXeKhqrTZnQafEILipSbvKoGfhxpMrxR + t1ecINpKm0jTON5KF8O89dfF5AeZUPLzY1SZGK7LIwpHhkiL78051823GapUPNzGTqfeQIuoycJ55kLd + GBSJ/wDbJ6THO3hkKDUcS1SXbpMV/t1cQ06MfQbSZHOZBTXSslRS0wdN2YbpUY45sSQsW2UgLIQhEVVP + lmR+1m5/dmp5gyWnQOOc5jUU+eZapMeXaSqeqsMTfmjNmGXlBkdaxdQx6zRRz00EyOsxCtpGF+cgzd+K + 8uISwK1uUZtR5ZEKXil+4YseYSILq1HE6sOR15uPPiN+KqlPSrQVTLekfEAI04GymM5GXYFCE9N49FMe + rDTj4oqLneSqzwxpqC5aaNGgCMtmV7RD6TSoqeUYmGefnV28WBqdSoAS/RpALiRUV1b4lpFAWZq1LqVF + wMtH4BgFzvnEFTHmJG7PcoULDp5bRcekQgxO4jIWD7g7bwG0QDOdhExQlS2pc8s88+23hdS57OWt2gLr + a1SDgdFIAz8sqJ6SinvPL6Rl5a0by3q29wEehVBVlYbFT1mmDpG4et4jl43G+P8ATjzjd1adp2/7I1+z + N+RgvZ1SWo1sdR+E+hE4tvD7z0sMhNl8FzcTxZuKTIQhHc8QhCEXs32D8Lt7u44jdpVU3aKFWl5gHcnH + pkAT2mnwosuGpIU+U8J+xfhd0l83Greq6dxqpAL1Ysm+fbBnrg4zxOozAVnH0Czh5RV032XxZmcBo0XE + /wC0IU4fwfhlkoAqVmNUgfhUaR+7NPBZ6F9svFqvEO0yUa9V3+60VpgMc4JyxnnbCdPEJiDfP/JcrnzK + t2H2fdof93uNK9YM9hWwtwo66c7Ee46z6RTgBr06dWhVD06oWoGDbEEZBH0M+Qm1Ce8/Z1xm9ueytoiX + FX+xzRwCdgOn7GTy4r5L0Ph+oz28Q3pdHglakc97hfc7S2nD7gNyNScgeFiN5xrVr5hjvnKt7mMZb3Gv + vaurw9TMA/rfR5Ycqa3eA9sb+74nx68ueI5Wu1UgqRjABICgeQGMTnzs09L+1nhSWlzbX6IUa5LCrtsx + GOf5nO882JyGnXgmvF8N1uDx8qZO3dFCEJdxxCEIREIRwGIRNiwi4hEgigRwEVRCJNMVRBF82jgPaETQ + v4o4Ly8scFjwPaEXWfZRSap20s1RgCEqHJ2xyGe+JbVeYLVz/KZ4t9iFuLnt5bo2AqUarEn+XE+hm4dR + B8jOblyB1fX/AAiHE7sZLeuFbVVIUfmj1Wqq4Ul/yklprJbUqYwqCUONXtvwngt5xGuAadtSNQ089cdB + 9TgTMTLxexydRjiOT6LgPth1v2OqawAFr0mHr5ieE4nW9re2XFu0gFG8dEtEbUKFJdKg74yepO/nOW0z + q4zRfFfJdVjz8rljRYiaZNpMRlOOku80oCsaq+KTsmB0kttb1K9dadCkXckAKASSfYdYeq8MHJ0W72E7 + NV+1HGBaqe6oqGq16uPCo/zPQe85q6AFQhN1XIU+2TPduwvA37Mdi+McR4jS7i5rUGqIjEKVVUOnPoST + nE8HdSd/XmMjDLa3VzdP9WJv20WGhpjyDqaBXaXcVFiIwkmImmETIkdiJCJIQhCIhCEIiEIQiIQhCIhC + EIngZ1Tf7M8eu+AcSW7tD+V6bdGXzUj0nPg4aKcHyiTZq14+R40yxdJfWHZS8te03B6V9w1yFbarS3c0 + j5q3+R8xOjt+DtT8IJP4p88fYl2sHZftdRp3bH+HXhFGuPIE+Fp9StxyzWr3RdFycDIwJxcuCOi+p6L5 + DPlw8eyxf4Iaow4H7yenwBFTkQAzTfidLWwUoceriQDjiNX7oA58mA2mW27Pt5X0VccAY+wk1LgSKObG + POT0uJNUaoFOsqOgGCJWfiNwdYTQWU+vWTtoOTlz8bricMoqOXGr5SJ+GJlsvlvSVBxGurYYY95BW4q/ + eaFXm9VEWlrxx5d+Gs1uHBCuBr+kiFmVX4AsqvxGscB3RG8vWTNcGpRzTJ1dAcQ8lqd57azQpW67M9PV + 85PWpYpqKGC2PECJzbpdsW1d6W8tI95ZtrKtUOutScOevNGninPF3ta3VpXARtTIPn/2kCMU1ZrLq/Fj + MtPYVGY6Q426ltpAeFNuCQPkYgH3aYZGtLOLUCFLFSfI4kZp0X3yCfTGI5eGFVxjPzgvDiN2IGPInpH2 + lZkf2bSWjSbJXP5hJ0uaAU6QT7GMSzA1aSC3oYytQCbMdGfQwdQ6Wsivb1BgjDfhBiP3Cg7aCemRKfcq + BlSM+rGMfpy1SGH4R1kobgwD00xrIpY09Dv6ZAlStXvmYiiKdJfzc2Ir1FzlqqD82JHq7xcq6FfJlM0w + C1OMvL/tzp3zcD4c9SuXt+/am1MbAsRkEgfI4nhjgYBB5p9U9pOE2/G+FXFhXd9LYIqKuSCOhHyngHbT + snd9lrmmly9KrSrE91VUEZx1yCMg7idnFmer5X5bpc8M3kDY3HQhCb3gTwTmOAyesb+KdR2U7MXXaS7a + hw80wlMamqVTgAZwPmT6RKBtteLjeTIxC9l+yxatp2FsFqISzFqq+wZtv6ZnS99VYaFXW2ejdJX4BRHC + eD2diXz3NJaepaR3IG5H1mgl0jlggdG/FpnKvlb73pOJ4uMGa1K46dxTK58SjJh3NVtWpA/5W6x1W6pL + rWo7j55kH3q0UqAaoYeYGN5O38Lp8HtnvQKrzDSx+Ec0YzFWYKjhvNsnH6R7cUpLj+yL4GnOckyB+Mvq + bu6QRfzDViALS5hOdnqBu7TPuFMjS1dlbvAEXPxCL/FqoGFqkZ8sCM/i1wWxqJTzyJQP4UuYz0tUVsVK + wK/iUbRjqEZNBLqOXaJWvqo1d2C7EeLBXEr5uKqs7EnffAlGC+2nvDwFs2q1VBKopX0YiLdXIprUq1DS + RQCzMwC6QOpzMFGrqeYn9Zhdu+JtZdlr3vgXSsO5AU4wWzg59NofXtseo6k48VrHZTtinHq93Q0LReiS + ypqzlcnmUHfI2zOiW6LtlnB+c+fuwXERZdqLNmDd3VbunA9G2H74nrXay/vuH8FuLiydBVp4BbGcAnBO + PblOY3AvO6fr3PBXylxv2sW19ddqLR0o1atCpSppSCAshbJyox5+3WYHa3hacMrJUtLO4tlO7hz4WwDj + 1ABzgknP0m92Z7ePTIo8d/t2NwKi3DID3W2CcD08sepnYccuLWyqffOIVaZtLi1NMgDUCC6nAA65DH6S + hTxedlxY8o5D5bjOxPbPiVfjXDuH31datoc0SGXJbOSGJ6kg+c9WqVtTYp6HUcxZgZ4pW4SbnjjXfZa4 + StSVi9FFOKqhQDkq24GWwOuek9dtqlVqFM1EIqFVznlw2N/3zGh7uv4/ly045O9WpSNJqdQLXCVB+EaZ + G4dVy1wSp9tUoGu1BsVKBen5sBkD543H6R73NKtSU0wChOzKdUXb/L2Dl2T3XUzFqpC/ixGoo1Yary+u + I2mwz1x/MJIGOVd8FV8gI/AakO6RGSnTYZLsvniQismpjUeqWb8MnFwFGGpAoempZBWYN/y6QHrtICa+ + PFI9UMuERnXyLRKVMsq6CEYnfPlI0Z1GGR9JkgGp1Dl0X2hrRI8+4K1aeyEFfy80Ua2XFRA/5lEa+AzJ + TLlveOVaqKpxUH10iEHu89Rdt44AZjkp+Ucoxviei5t5phCLvvJEWCISeYSZF1TNf21wwkRfPEmSn7wR + dOrzkqZ9Jnlnu6+PClpoF95apKAJDTGBJ0zMM87q4wpkUeknRB8pDTUy3SXV1Ew7tXXx4bmqpPpJKa+L + aPSnp8syamuynGMxOf8ALUw3Np0vwiWEpnlC4EcMAc2dXtHGoFHQmZ7WrsCj0urYyNvOVrhS2rccstFU + bVlDInpll5Bj+YRjpkniyainU2k55pEcqGHSX3tiWY4kL0XDNyYmwlz5YJUTlfOMycyd1OfzSNKRZubM + 0EsXB3Ccoli3p5MjKGn5S1bcrRZvivjx8163XSFlykSPDI7ddYXTLlOjhtyJzr5uwNE6mx9ZIGPwn9I+ + lSAPXMkFEM0hSlyKEVCRhTvF1VcNsTiXEo01HQGSAEHKAH5mZuVk8geioIz6eYER6hzq2MugNp6IP5oL + nPRB8hH3+KPtqelyMaSI8K58ifpLjM4XqNXyiEsw64/lk7p+1oKVKr8QxJQgVedgPmZFWSqVYqSZyXbP + tJadmqGbt+9u2GaVuG3Pu3oPeVhi5uix5eXHjFzQLpOM8LsOMcOq2N+ENCqOqjdW8mB8iJ8r9pOGVeDc + avLB92oVTT1Y05A6H6jBnZXH2r8W71zSo2YQnZShOPrmcVxrid1xnide9uyhq1SC3djA2GNh8hO7hwcf + DfJfJ8/Fy6eN22NCEJ0Xiz8RyjLT0z7Nux3B+1PDLw3txVo3lvVGRTdRyEbHBHrmN4h2Q7K2l61Fe1dB + GDYKml3mPqpxJ7y68OmXTs03oP2P8Mo2fZCjXpq9WpdsajltgCpK4E7J6tJWUNRpBfPU4mZwOwtrbg9p + R4dXFazRQKVWmwYEDq2Rtucyl2wv6HBezl7d1CEqCiadIZ3JYEAD+vyE5H/tn4vsuLt4OmNt8/8AbS+H + Eu0vELlcaKlUlQPJQcD9gJgN1Jj6raqpJjT/AMudZ4NXxHUZ92ay+RE9x+xO60dnbxHpKyrXzqxuMgTw + 5emZ779gy6ey147jrd4BxnoqyOV0XpfEb+8u9R6TFiaWG8sCTphl2Rj+0nCl+gA+kVaGrqce2ZwOer7f + uO28k+31AOGcJ5SCatX+izw2e3/7QSihbcHTOS7VT+gQTxCd/C7xL4P5VHndSQhCa3mRCEBCIEWII4CE + Qo2jguICKq6vFCIUZjkGNoBfwyRF84RNAj1X0ihdXlHovtCJqL4o9F/CJIq/hkiLkMPigRe5/YnwLh6c + CTjFHJv2JouxOQAG6KPLIwZ6Vyr4y7/IYnmX+zqta7seMWSElKNVaw/vAqf/ACz2QcErsoGJw8v/ANX1 + /wAfy8ePEWJ31JFc/d3dQC2nO5+QnhP2idva3Hrapwu0szY2AbFUMc1XIOwbyUZ3wJ9JU+AGojasTxf7 + f7Hh3Da/D6C21IcWqg1atVRg90MgA+uTHxa3ZfJco8b9beJBMao7u5b7o/3o5aW+OrfhWdt8qY1DEs2P + Dry/uadvYW9W4rsdqdIFmPvt0HvO37EfZvxbtLcq9RKtjw4EarmsMHH5VO5M+jOzPZngvZnh623CLPQp + AWrVYAvUPqx6n5dJlnymPgvQ4ekyz8povBuzP2PX1zoq8crfd0O5o0uaqR6FugnpvBexXD+Fqo4bZJRq + Y3qlNTn5sd56A6BTkUX0/MSE06uD3NJv7xnM8qt7fT8XHxngN3lX2wUP4T2CvHclalyy0VBPXLZP7Az5 + vddp7d/tE8Y76/4dwSnjVQQ1q4B6MwwoPuBkzxg0x0xOniHW28b5Dmc82rMu0iZZZKxjL4prebQ6Y3QZ + MyiRsIRMYRuI9hiJphFHphHRIRJCBEIREIQhFJp36y5c29a20CvSan3iBlVlIyp3BHsZX+Ame99p+xY7 + R/ZrwfivD6TPxGhYI2F3NVAoynzG5EnPIxTd0cXC8gp7L58hBgR1EJVzxCEIRSUm01AcnafUnYW4pcc7 + JWV6z1e/NLu6pJBBqKdJP1wD9Z8tBd57x/s7cWLWPFuEvk4K1qQxnY8rf+mY829bL1/ieZ4+XX43o9Sz + IZe7PMT8RzLFrbXHfq7EaV6Y3EsiiiszOCUJ8LeUt0moquAjnHwmcSur65z8eCvW113aqNKBsactGu7v + UYBQreZAzKyX9GictRc58yYr8VCnIAAJ2keblMHahWNOrIqEufyiMez0+AIVPtJLfiPeK2pBq+YOYyrW + LNhAQn4gQAIbYO8dNDVphW5wmoeozH0apQZzhfJQAMSK6V9LPkH370frMt7y5zgXFIY9Dv8AuY8MMmZm + PtLWerXZmKkaB026xKVxdFiNGV9c4mQ99c01/wCahVR8IzmV/wCI1dTd5Wc5HQHTLMFtsce4ugqVypzU + NQN+U6hENcFcKSWPnqwZzb3SYwt3V0nyyeWQd85OKddyzeHU0PqWo4QPN0j1DrwprBT0IqggfSR5pZbN + d0bzDN1nO1ataiyvUI3HVX3hTqCqyhQhY/ExCyvqg4w8DdFSq0V2aprY9OYf6wauEDDJOT5DTic+x7ti + i0aVRjndebEiNZgul0wo8l5pP17q7AboDd0csA7ll9AWx+0je+pLtrX6nSZiJWLKwYDX5fDDubhgpRE0 + 5lfUHusxLW++UWRioG/l6yB3zqKBEb1wMyhmsukt3QYegkiVbgKwQ0zg+LG/9JRgFQ1h69chdVU4/Lyz + jftB4AnHOz9zd1Gf7zZUWrUW3YEDcqfmBOt03dWnhi+gjbSBOd7YcQo8C4LXrcRrEM9JlpUtWWdiCMAe + nqZWB58XnfIaeJG+aj1jY4+Ixs7C+Ia7bW1a6rpSoKz1XIAUDJYmfQXYzgp7P8Gp27FDc1SKlVhzZbGy + /IDb9Z5L9nPGLPg/aKjWvxTFtVDUncjPd56N69Rv7Ge+2C0L4LXsq9GpbtzKynUMfMTLN14b3fiOLif+ + y+aL71VxoYDSRpyqyvUJP/Leofy6ZtPaoiqz16WvyVubEqKpSoxQ5XzYLtMhG+lPP7UKFGtUOFL6vEcj + MW4taupcAnb4aWmaiMOYK9V2PKeVl/eIiio2GLonh3bVEZ1uAmt2XQtqrFRzj5iTvblRnnLt7aZeq2JV + mCgnA1ZGWlY0azthqToxI5VysZybo7ANNUSgKgw1I6/DzESUL3LMGTLfiz0/SaFOz002FSjV1ebbKP3h + St6y1GC1Qi+LDLqKxd8jjsmrWHMMOcfmMdQe3YYqJVC/lM2EsRqYuUbV5hTGvw4uzBA6LjxEaY/tE0R2 + pY70cs3dkohPKrDM8z+2S4qItlaYzTANQsB59AD9N/rPWb2gOH2tS4vbgUaC4zUqHSq5OBlvnPBftCvT + xHtNeG3qpWtxjQ6vkMqjGQc4Pn0l4I3kfKchji478tm9kOFvxfjVvbU3wxOoMKoVhjfIz1PsN57fQ4nZ + 3HGf4M5pvd6TleVQ2Oqk9Mkb49Jw/wBnXZ0s7cWsmare06Ra1osophiwddRJyBpIJ29vWan2YdjeIU+P + 3HEeLA0K1DUqq453ZgQXB6EDffPUxqXB0eGeOABvbTdq+CdnbF6D8RBs6bMVWipKqT5nAGxHr0mnd8Ot + KdlaOlIVbJAtNqTPqQ0WAU7eoBVsjHSc79vNBKF5wkUx1pNqI6E5E7Hh3EKPFPs9WrTopSU2jU1pKwYq + yp1291Bx19ZPe+EuzHEeVx1q4zs32Iv6XaWreW5a3sadVjSamdRNMMRgjrjbGT6T0gWxVWClDn8S7w4R + xA0uE2YdQVFCmzMucMSuSf1JlThHa2145Tqfw16YqKeZSMEb9cHy95DmrdvDxcXEGI+Wm/h1VjynWp5j + jyk78FpVgCqVEq+VRWCn9RuZboXVzzDGv5rpgrFamazumD8PNiS5p4usxP0s8cEvqZZxVSqo8qmFb/EN + v1EO6NIoLmqKDN8NRBg/IjlP6zWejbMrlbhzUI31ErEHC3reKqXp/iU6g0Rmp5jQerMeiFZTqRkHxeRl + ukgKsVKBPNlxmL/B6VJsUQ9Jz8VPCgn3U8v7QqcO4gAcUaVZfNqR0t89J2P0Me9nhqHtPJCUXqboNdMf + FgMZG9Cqyt0C+HmwsipWQeqqVLjuqh+GplT+h6y0ODUmRhUuxq9C0B/rHduoPQKnKjLN1kFdnVWDrnHv + N1OC0aeyXCaR5Z3lbuLBWYVDlfNgOksSlNnh1eZJT2jkTlbUJYVNIi91Ot5N2Bw0SKPikiLjVJUonElS + kMtM3kC1w4mhRd+mZMlPmkiUyWwgEmSiccwzIyzPdvhxMlJPwgyylMiOSkdPSWUpHVzTncy6uPioqdMy + elsJNToao9bbVqCkSe8bfHDU1ObaWE9NjBaOk9QJKlPSvUGTVNZfLA+kVFCtzJmSIwUcxER6g+E/oIts + ThVRRzjH0iGtSYN5fORlSy9SYjK+G1ED6QijcpltB6yrUYNqCy2FDatRSDWw05zGNDjuy3QFuUDVEWn7 + TRNqNTFd4fdxqbTK75HHZwpam6GTUqOnfEvpb4+CTpR09VzBzUmYBR2zOirpkwdwcgA/SOFI6eUcsVVK + joT8hI3X4lFSufCMfIQ1V2XDFgfymRvVrdFQj82JE1S55jjC/MRmG6NFdSo6rzO+fnH/AHmqKeQXH8wE + zhXuArFjp+eJFUr3DbNVGn6RHGMkP5X6t7WU8rZ/uiIL6q3nzfKZYWu++tPqQss0be4KqMj33Ef1hIMb + RS8cjxftJkui3lmVEsiuzED6yX7uVXGoD5mLsJaxsPt52obs5wOtdW9NPvbv3NLvNwCQcnHngT5t4jxC + 44hdVa97WetXqHU9Rjksfcz0r7cb3/4hYWKkFUpGqcepOBn6LPKHHWdnDgBsvhfl+oc+VxHwUcIQm94s + QhCEVqlXelnQ5XIwcEjI9JCXy0jhCvvdavUPsk7YW3Ar57TjVy6cNqoW6MwpsNwQB67gzM+0btk3abir + dwHTh1HKUE829Wb3P7DacNmNkGAO7oer5XiONfEpLloYz5xU6Gdb2O7KXHH7kVWDUrBGHe1gP2XPUylA + 20cXDly5AG1tH7Keza8f7T0Be2/e8NogtcFiQMYIAz+InGBPozhdhwvhNklrw6gltbqSQq5YZPUkncmc + 1wmpb8K4ctpwzh6JSXyJySfxMfMn1l0cTuKib26/vicXLm5N9b0HQnAf9vd0DVLQLk7/ACMabmyVtkct + +UFpmUbi4Jz3KJnowUmXaTM687oM+WA059XpZgG93jf+0NcJXueBpTUgJSrMcjGcsJ4wZ61/tDV1PaPh + tFPgtMnbHV2nk09HhNYl8N16PK6o4QhNbhgRYgigQiF8MeBACKi6jCIUeccgzADaSIuBCIUR6LBF85Mi + wialPeTIsVKcsJThFGi/iEnSlnyklKnJ6VLlhF6v/s5XJs+K8bKVUpK1Bcl1yDhjPdUv6jFSLmmVPkFO + P1JniP8As+Wa1uK8Y7xwFFBOoznmntD2NurLqqoW8gAWnDynm+g6Ix+s37rv8RFNssST+FRqP7T5i+1q + 4uOI/aFxarUDlFdadJSpyqBRpGP1M+maXDqDBTk/MArKw7FcDbjS8aaj3l6KXdgs2V9Nek7asbZ9IcSD + uOr4zMAvkS3tTWqqlMc7MFH1OJ9Udl+x/A+BcOoULezpVai0gKtapSDVS2OZs4z18p5n2t+zy4sO3lpS + 4Tb1avDrustakygkJhgWVjjAC7kZ8jPd6FBAzf2rhQfMaZpycihq4+n4gVSrJbWiNinQKN5ZJxHVVZSe + 7Gc+o6TUejQVQXyfkJCbq2TcUj1xuMTnf/bvxz/huxXS9zjvUG/mgjL+qbHhlzeXrBKFvSatVZSFwqgk + /wBJtniFu2pcZbHhxPOvtq4otH7Pr2jTQh7qqlHrnlLam/ZZWAKEcnKmK61fM3aHiFfjXGrziNyS9W5q + modTdAeg+gwJkPT0zUelp1Ss9Od+Jo1fP55uarZ7L7SFl8Uv1V5ZXddMdFUdY1xyyw6yF1hFARtGuN2k + zrpkTjmhE0xuI8rjyiMIRMiaYpiGERCEIRPXpPrr7Lro3X2c8AILoy0O7BXccrsN58iL1n1N9j9Z2+zf + hSKcaTVHXy1tOfqPRev8Vh35peYfbV2NPBOKnitih/h94SSAu1Kqckj2B6ieWFQFG/NPsbi1nbcU4dXs + b+kKttWXSy5wR6EHyIO4M8F7TfZXxDhlG5ubS7tri1pK1TxFXwBnoRgnHoYcXKJpr6347PjXkxNl5bCK + 0SdF4s8N1nrn+z9Sq0u0l1eBGNFLc03I6ZZ1wP2M8lpLqfBzifTP2Y2vDz2aprwy0ubannmqXSlXqtjd + gRsw8vaZczoS9b4rh7+UX0XdPd0apypKv+EtiQVbx6QOjutPTmY5lSpa6ThqyBfJcSa3pqpbUC7dAQOs + 4dX2RjiE5uIv3eG+7lffJ3leu+MO7poO4VTmWEpAhj3QDeRUhZC9rWdsrSQr8wTGJM0eqBamoMUXLH8N + Lb+shq1bjGHBRfxYKiaVCkbdsqhDeows4L7Z+1A4bwpOFWmRfXaFnbIylLptjzY5ErE7nVydZ1BxYq3k + 3bztFX4zx+5da5e2pOVoqhITSu2QB69czljeVdIAqsPqZVZtRyY2duGAGr4zl6nLLJd3VcA7XcT4LXU2 + 13UNPzpMSVYehGdvpPc+yPaG34/w1q1GinfrgVaTPkqf81PkZ8yE4M3ey3aC97PcVp31gcVFOllbo6nq + hHoZOfHs8XX0XyOXFkGTsvph7F2ZStIIp5uYxV4ZVVteaWj0Y6v6S52d4xR4/wAEt+IWhGKi7qwyUI6g + +4M0qa1RTbmQ+qhCs5lcPDfWcfUHJiJ6bBq8MZjlQFX0AMfQ4dVVmJoo4bzqDpNWo1JWXvGdM+jf5SSi + lCrSIU1Rg6uYSfsdWqhZLWZZkDikn5Vysc9BaSt3bnVjyYf6S69SztqmHeqWJ2GDLDvTUKUCFduoOTJ7 + 1n3/APlzr29aq2QCfzMJaoUbg0xSbAX1OZtvX7xM0QmPQjV/QyM1aunnogqR1Xy+kO9fEu9/liPa1aK1 + HqOBTUZLMdKqPVmPQTmb37Q+zfDqvcm9FzUDYJoUjUA/vZAP0zMn7ee0VahYWPCKDhVr6q1cIcEgbKD7 + ZycTwZgcAg9Z08eCm28Hrvls+PJ4+MvcuPfahwmlas3CxWrXBGApXulHudz+gnkHHuN3vG71rjiDl6h6 + DoFHoB5CZIO8RptjgF4fP13Lz+F8TYQhLuKJrcL4pe8OqK9lcVaLg51U3KzM+OGRDR+2mGeWDvF03pHC + ftR4pahUv6FteqOUsV0v/iE9O7Gdt+D8cZaIuPuF3VIUUa3Qn2qdCfY4nzU3WPo1HUjSdx0mWXEJ4vR6 + b5Pl43/s7L7I+6BmYV6pqY6YJX/OOS2SiW0DC/P/AFnnn2Vdqf43wNrC9uz9+tUUE1CMMnkc9cjoZ1rh + MsHwdPKCrLhv1M5HFFG+p6fnOfEyG03UIdYd+b4YItCorkkFh4sdRKSKFVTTovpbHWqu8grNSapUVPvI + ZhzCmAw/UQxxuvfivvcUkOEGtV33PSFO+ocxwA3kuZVRitRRRovVUYyrLzD5tIrypRVXK2ndN+bpn5Su + 0GW64/E0YMCAMDGxwc/SQJV8xWCMDtqY/vKiB+7Z0r26beFfF/hglasabFB3q50nUu36xmBqgdTe09Oj + xTgl3w64roVuqWnUpLAHqpwPQgGeH0uxPF04ibEoRaEio1VTqRsZwdt/bHUZntNZg7MKaFPVWkFI4LBj + lRN8QDxef1fS486LQ9hbKxt7QLQLUFFAAKSpOBVq8urG/wA50Ki0UqCX1sdXWcj2eqpS4nd2lEkpSFRc + MRkZqlhn6MJT7c8YurOyrJwe5pPxC2xVrIulitM5GRnzBwcAHA3OJDgrvcseXDgw3dV2h4BwPjtChT4n + RqmpRJYMrlSM9R8jIEWw4Vc0rGytKQsroNSCrlRTqBT/AOYD9V95j/ZseI0uzifxTXqaqzIGpHvcE5JY + 9TkkkZm9xK3F1aVFoI4qjFSizE7VFOpT09VX9TJ7deFrDHkx+wNLU7PiYXsE1anaObihYshqBhksqsud + /dZ4Z2M46eC9obS8aqyUi4FbSAc0yeYYntXAGrca7KcStLBEt6latWpAspPdljqKkddtRE8Q47wW44LX + Wx4jaGldAk51gll6DbPTIyDtkS8AvK63kywzHG+jqHEEanTq0c6WCsG3XIIyOXyjrniRcKGDip5jUFmV + 9nvDL5eytmeJ29WhcgYU16oYlcDS35RjG06duHE1FZmt9QO+mRkg3tdNyvJxDl4Ww3a4rsrohTHLqVY6 + jc31A6FLjHwrOqpUwysMqG6coOItOxRW17liPwyHI9Vuj23JV769OSxOT54lRLq9XUUq1PoTPQPuqZ3U + H8rLqiixRjvbhPkAIGQeNUZZ7vPbhru6pqKimqo5grDUB+sqGje09Qo1atNTzaW5lP67j6GeoNYUm8IA + X/DGvY0MqKmgORsuRk4ljv0WTmfreYab1WY1qTlfxU8sP06j95JQtKt1qenVD466TqI+fmJ6SOH2ityg + /TMZX4bYvvUoaqg6MuzD+8N5YrHj+rePCljykqUc+UnRBJkpzJ5P5ewcY1VKG/SWEtQ2+JZpqPSWEQL4 + RIeS3x4iqpQC+WZIiBdIxLKKF6iSaQPKT37rOMKJKY9JPTUekbqCj80a1Ue8UzxWUQL5CKGTrgSFGJ8I + McHCjnTP1hqe6wjI3kJICunJA0/OUTWC6tsQS5BPMP70lluvaqAXmwBGFaLdCQPlI6bo27YC/LMsd9QW + lnI+sCjdWdVGoqXP0kJIXxZ0/KPe61MoVsL+US0gR1UthvWV6gd+qkjIVwv9I9WGM5xLDU6Q1aUH6R4p + 0vME+0N6qqgqJzDI/STI1L4nP+GTpRpMfDiTJQpegkuZStXSrS83G3tJUq0fhrIPkJIKFIK2AB9IjUBn + YkfSGxpc9zNVJtjXP0h3VBlx3zD5kxTQGCNbn5CPpUgvQvp/CRDZSv8AGjNnaOMtcA/UtBLGyJ5a2foc + Swi0lbmDlfTGJIi0FZiQdR6Kpk7fxslaD7nYrUw7jPpiTJY2jboSc+0DdWyBi1Bxj2jP4xbqcCk4X19I + Cye59Uw4XQYcqk58thHHhK4OkMP78j/iYbamHcn0kgrlhlgQfcw7n9p1ySHg9Uq2Sfq8ifghY8xB+Zlp + VdtyQPrIjbBi2qunNy81WVgtGWWZ7b5t+1lsduOI0lOVolaQOfRRmcOfKdL9oDd5204xuHxcuuoHOcHE + 5cz0sDQXwPV5OXKrEIQl3LEIQhEQhCERHACNl7h9qbi6o0l8VVgo+pxDfbXhg5ui7X7OOxVTj12tzf0K + q8LpHnKjBqEdUB8vc+U+geG21vb0BQtuE91boAFVRgAR3A75OD8ItOG2NuFt7akKaKq9cdSfcnJJ95ef + jd47MBb4G3Qbzz+XlVvruh6N4cDQbZKFMDdbFx6Ay2lNwOXh41Y1cx0yt/GL85K0SVPkw6SCtxm9qthK + Tg53yTtMfLei8fLlbFJLsbPaUaVP1ZtUir3lxQSo1T7jSpKCzM4yFUDJJmIeI3dTUG1nfbc4mP2rs73j + PZu94dbE0q9dQoZgQOoJBI8iBiXh5dNjycORgvtLwX7Te0T9pu1VzxBihpKBRpFVwGUZAP13M5Aj8U7W + ++zftNalscMasg86TqwP6GclXovQqNSrApUUlSp2IIOCDPQ401ob47qcMsc1zNbqUBCKJdyRFWII8QiI + qL5yxRo1az6KdJnfrhVJOPXAmjxjg13wtbI3VJqYvKC3FElSuVJK+foVIh+6qMFN2Yi5EeixEWSosKZy + LJUWCLLCU4RLSX2lqnS9oU6cuUqQhEynS1adpbo0RldQ5cyehR9pao0cnGIRetf7ONqjcR46ahAUUaWC + cfiae2vw+ixbL4bPoJ4l9hi6OK8RpZYaqCspVc+Fp7I9O4AJDufyhRnE5OT23r9MOhHU7+GOMlKrhfSN + SwrMND1yVG4C4UxrU7ghgoc/QySja3DL/aFx8hIC6lf1J9Kzq0ip+81ceanmEKinmDFHT8ywFs9NuWqf + rmABZmDEFfzZWCNJ73D0yV6gKPTllY0EbIZ/mrNL4akvIQQ3sIlVKDjDEjHtFqZmln91bAsGYFh0UETy + 77e1X/d/hopg4a6YnJ9FOJ67Uo2g06gdXhyu2Z5h9udrRbgHDXoghkrkHfOxUx8Z5LHqORcHV881aPi2 + lSrR06tpu1aGNW0pVKPindeLY1WltKrr4tprVKXilSqvihFluumROsu1F8W0rvT3hFUdfaMcSd1kLiEU + TiN9Y516xrCETCvlEj4wwiPiiRYkIpF6T6f+yRCnYHhQbG4qN5ebtPmL4p9WdhuGm07IcHpMFB+602O/ + 4hq/znP1D4L3fhTfKtvsCwbpk+85/t6a9PsXxj7sNdU27KAAScHZj+hM6inbsaWeXR88CPeypMjDvafe + EeEN/wCnM5MUHd9Fz6zxcd63fG1vZV7msKNtQq1arHAWmhZz9BL3GOzvFeCpb1eJ2b2tOupNI1Ns46j2 + PsZ9ZcP4Tw2waobJaVtUY83cqFJJ6nacz9rPA7fjXZZ6VnXL31sy1qVM9XwCCB6Eg7e4nVjzihfO8/xh + hi5F869k+LUuC8dtrytbUbqnRbUyVQGBBGMjPmOon0zwfilHjFhTvbK4BoVF5dJ3B81I8iPSfKF1bVbd + ylZDTcbFGBBH0M6jsN2yvOyfEhVtz3ttUIFeg3hdf8iPIiacmPcbLDoOqelzTIvpdGJVjUdzjozSQNVN + NtIDr7kn+gk3DOMcK4twm24hYVFNtWVXGthkHzUj1B2M1Fe1qoTRKZ8goxOFU8JfUYdSZgh4bGfXpXFF + sebAHl/WAovpYrVIYDoRpmt3tFmwyOhHm2VBEirXtBNQcDrthTkiTus5V8BZdFapLFsHHUbt/SfNP2s1 + 6tft9xbvMjuqvcqp8lUAAT6vpX1s1uxUFGX8QCifLv232yUe3t7VQqVulSuNPTdcH9xN+ndreN8vm58V + 51CEJ3Xy8QhCEXqf2O9qP4NxhrC4bNneELucBW8j7Z6H5ie92xFZqgUZYHcKSxE+OqGtX1rnl5sj+s+l + fs37TW3aTs/QW4708UtAKdZR8Q6K318/cTl5sf0vpPiur/6vHldhVSsEYLQqhfXAP9ZQKhqjAI/eDzY6 + f2BmkBSVW0HQB1VWDZ+hlatirirT7xHO2orkfsN5zHu+iwf7KlCui5ppblRzf2Y6n9YitXqUhgKKnmrU + Sf6mTIxpKA70XXyCrpP9ZFVwzKHoVC2fEzYH9YbWo9TDSrZXK6MD/wAMFf2jby6q2tlXuKtwgo0Q1Sqz + HOFUZP8ASLc1VBUVAUcnZlq6lA9eonk/20dq2FsOAWVd3VsVLk6Avuq7TXjwVC4et6k4OJX3ea9ruNvx + 3jlzfVNg7YRfIKNgP0mB6Ruc9YHpO0NGr4nPkeTJyfbNhCEdnEIQhEQhCERCEIRb/ZXjFbgvGKF7T1EA + 4qr+JT4l+on0fZtQv7Sld2xqvSqqGpEUtIIPvPlRZ7h9hnaSjUzwHiLOOtW0ZcZ9WXf9RMeXF9l7fxfV + /U9r6vRXsa1csFR/ZWPSQtwu7o7olWko8TKdjOuppSwpRLh2X8RCiXaNtQYc9uNR5jklpzil9C9Qflw9 + Hh1XLOtd0bPkdzLScKrtVy5d/wAzKzTuEoALinQVF/LiWKVAsMCkf8UflaXqgLz4cCvGqNpfCHr5Ay5Q + 4LcUmxrAQ+JVYrO8SyJOagQL6ZlhLGgoyUAlHGp5bJ60PV52/Ag1VixfV+Fc5klDhNBGYdy7sOnLkGd9 + Vo0FXoCsh1UFzhAce0eGDvS0/wCrfkLyuz4Oafbm9FC0Jq3NALSUrpGQKZ1H2HNn9JFxD7Hmve1Ftxmh + d90wqrUr0au+vHXBE87/ANoHj9wv2kj+HvVsqllbUqepWIJbdsgj2YCezfY527q9ruy4rXyB+IWz9zXI + AAbbKtibmAG1vJ/0/bm4t0lDswE2BRPVVG0tp2apL0cj1IEttxGsC2NbfJRKlXiFy3hpN+umLsx97usz + 5XxvVwd92DTia9s+E2DtRvTWp3tozZGKroDqyNwCUYE+5nmfZ3hh7S8E43b9sLC4PEeDFUTiT0m/ssFc + o+CC2ynBIOAdyMiezJfXlHt3X2Ia74ZTbc9TSqsP6VZJxq+vOH8Hv7m2sfvb4NRramoDVSRgjpuSPmSB + L7APFyZ8OWW81si27Zdla/bCr2dS+p/eVdaVGsAGpVWIOVUjIBGAN+pOBO1fh1Gnvv8ALE+W/s0ocB4l + 284T3dG+tbvvtSUCi1qRKoT4iQRzD0M+nQ9UFi9V3b8wCzJxD0W/S8uWR5fBTi3ohTgMfyxpAXwJ8tUY + KpCtkn5dZ559rvb3/dThq2loaVXil0h5aoOFpEEFyB6nYAyPrXzbcvKcZtaep9olm/bhOzVtQevnlNzT + YMFqgElcDqBjBI6Gdb94rg4ekPnmfK32OW4uvtK4ItQ4UVS/zIQkCfVnEr6w4TQWvxO7o2lJjpFSuQql + sZxk+eFMtwRNFh0vUd4uTUON8ZHCODXl/cFBQo0mqczaQxAJC59Sdtp8uUO3PF6PbFePGu73AqlirYIZ + TsU6YwRtnE9a+3ZLjj/Z7gzdmyl9ZNdFGFodZLkco5cgjZp5R2q7O0uBcB4XVuKNzbcSZCtxQq0iAGyx + Byeh06Tjzz7GWY3N1XUZL48BfVlteCvbUq6AotVVYK3MRqAOD7jMf3pbUi9fWeWfYx214bdcDsuD394V + 4p33cUab9WBGVwQNgOmScmeqGidSlQRKAu3p+V5ARvI6aghektIoHpKiMFXOZIKu3XE4OxvrscyuIwHh + kiMBKS1QBljHCt4t5Dg1GZXQwx1j9a467yklbI6CSK2peaTrVQ7rGzeYkiKGPkPrKYYLviIKtVg2kALD + 3LvtFKKdAR+sV6QZW3G34TMly6nLEnPwqZGWPwlx9ZRiy+y3BSB2yPrI3ojzrAr+FRMhKhYbFz9THinV + bOEOknxbw1T379FdpKFZizhF/NI7pqD0/wCzcFvyiV/ur5yxH/mktKyLbrVG589jKAJCprUlugbyMv02 + Crjp8oW9iV8VUFvaWUtUHjf9xEpXh/1PMxHXO4J+sk75F8K/vD7tQC4aqfo0VadoARlifbMhRk5SJWGe + h/WSrWCliwIjQtooyKTlvrHI1AbJbv8AUGRuhzkevSzgkj6RiMrHKs8vItJv/px8iJZSgCNkCD5CHeFL + yB7LLRiu3esfoJMuuoV0ZK49ZpJRpjqBj1wJIFTGCx39NpLlZvL/AAs1aFZmbUSEi9yaerB/xGX1oUm2 + y7L7sYgs6OPAo+eWh30fbY1W3pO2qpcKjHyY/wDeILeiuf7fXnyUA5/edClrbk85U+2JIlrZhfAp+gld + 5J59erBFJadPChz8WWIWKtLfpRC/mqlp0BS0+GiD9IwrbDdaA1Se6z/0LYopIqtrFufbDNFR7enu9Ck7 + KfJTNkdwF5bcFvTMRO6Xf7unXwtKwzsc+XY7L487YsG7WcWZQApuqpAH8xmH5Cb3bcae2HGRjH/GVtv7 + 5mCZ62HoviOo/wD6M2EISrniEIQiIQhCKSavZVgvaThZYZAuqWR/eEyvJZq9nq1C243Y17vX93p11arp + OG0ggnB9YsvTacTrIb7FegXXnoPsTnYbb+8a61lp4ShU1D5TZ+81qo1igrhgGVg2AyncH94v34jZ7J0X + 1BE8lfN9fxc72lzzm4ByaVQ/l6SM0KtRlyjhvmZ1NK4Uhg1vce2FDS0zUhTz3NYt6aRmIbX/AGuLrVyt + JQoAWkXPnqk70SwXTSAm8tVFGRb3IPoKQlqjoq4LJWRc6eYBY9Nk9ajvVyb29WkVdAOXm8p8nfaVZHh3 + bni9uwwO/aoPk3MP6z7jPDqTLrWjTO3iJ3ny5/tRcHHDu3VndpTRKd7ZqeXoWUlSf00zp6XYot5PyXMc + 2F4mICKBCd14UoXxR4G+IiRRCL2P/ZtsXr9puJXdEgVKFpgE+WpgJ6r9pHYg9sOFU+8uqScRtye5duYE + Hqp88HqPQzjv9lrhL3Ftx+8H4qNH9nYz34cJNMAKCW89QH+k4+XJMtl7fT9jxA3ydxX7G+0nDeGXF6Ws + K9KgpqFaNYszKBklQQM4E8+pqSOoPpPvr+Fo1OpSq0srUUqVwNwRifCV/a/deI3dDGO6rMuPTSSP/TN+ + LNR3cHVcRinbQ0xLdFI2lTlygm/Sa3HSUUl+hR9pHQpTUt6OR0hF0PYHsjX7U8RqUKLilSogVKtRhnAz + gAD1M9QpfY7aKvPe3T7b6Qs0vsC4OKfZq8vWyrV6+lSNshR/qTPTjRCowD1PbfTOd5Hbq7eLEA2bbh+x + nY6y7MG4rURWq16oClqoClVHkAPUzrqVWqzN/ZYX1JlhKLastVIX0bBk5pnPM+Vx0AkeXy3UZga1VlcA + ZYAnzwTHAjB3AU9DnMGt1I5SQ3yKiSJQRRh8H5wjZV8amIWuSvmMwFLHgBP96WhRQ52+ojDSQ6tPiEIM + ihNBSp7xVGYd3QUbjGPbMCudmP6CNemMNqGTnqTiGpitGy0G6HOPJRicV9rdql12NrlUBqUaqVs43ABw + f2M7IkL0BH1zM7itClf8Ou7SovLWpNT1Y1dRsYHhGrLFcUvly4oEatuaUK1HxbTqL6zNKrURgRUUlWX3 + G0y69DGradd4+WCPm5utR06tpQrU+Zpv16OzbTNuKfi2hTYlWnu0rVV8U1K1PTq2lKqmnVCLPdZA4lqq + vikDjZoRV3XrIio5pM4PNIXEImRseRvEMImRDF+KBhFesKBuLyhQXx1XCj5k4n2XRpVaVtSooKSJSpKq + sRtygD/0z5T+zaye+7acHpKj1CLgVMKMnCcxn1DVbiBp+Fxk+Qz+05Oo8oX0nw+G8XKtilcK2WrAKOq6 + SwI+kHDsWx3Jzy5U6T+8zv8A4iF5O+D+unEGXibIwqB31ebL0nJpvd7Hfsroo/dw5yApG+kg/tClVsdS + l69PflIIH9ZVTh1dlU1ChVtgM6STFHDqyM2i3yOnMS2P8peBLLSaW5b7WOydhxrsxc17RKX8StVNalVG + AWUAllPmcjp7ifMLcoM+ivthvuJcA4ZQNoKFBbpGps1RgareR0j0wdzPnV85z5Tt4R15b5X5Ix7/APpe + 7fYJxu2HCL3hVwR3qVe+QNlsKQA2B7EZnqNzVJZKtvhFY+EjSP1nhn2C8FuOK9p69xRDGlY0SzgZ3Lco + Bx5dZ7y/AK7KMUk7vPwnf95z8oGV6/xnMPEboXvawpgXAAcEKCpyf1kRuga4IasjsBnI2l6n2er+YceQ + U8o/bMH4Bdl2JpEY6MpGf3xJNXq/bx2fWvKtPeojd35nugT82yJ4J9uNylx2uU0yGVbVVyBjzJn0ZT4P + dpScLXo+mCQMfOcr2w+yqn2op1Lo3tKlxTuu7pMrjSxGcBhj3xkS+LQ7vK+T7eTiTFvlKE0eK2Fxw3iF + xZXqPSubeqadWm3UMDgzOnbfJpp0yiKBzYjRPXvsh+yu77YH+KcQzR4OjYDHrWYHdViXRXx4OaBJR+zS + +qdmLDjHA66PXq261atpWAVjkbhT0YH0Mi7G2N2OJniXZt0pcSseW84VWbQWXoxX8S7br1U4xnafSdLs + egUIrvoVQoUPgADbHSY1D7N7QdqE4xR00SVNOsAzEt13xjBJ2zn8IxMvKIl7X04caZYthcB4xR4tUeiK + 6UbtAWq29ZCpxnBKk4yM7Z/UTcFkfvK1VICL/wBNgBmdIOy1ozo74ZgNIOc7fpJv92rBUISkob1ILTB4 + 38L1sOsA0u7irxaVStitXQflXmx+ks2dvaMWNA5Y8pZssDOsq8CosFFM0gw68mrP6mJS4CEDBbgon4VU + KIHFlqv/AG4pcbx+8t+F8HveI3tOk9G0pGodioLDwr16k4E+RuKXtW+v7i5rnNWsxdj7k5n0V/tJ3FPg + /AeHcMpV6zV72qajqx20p7D1JE+afExxOjiwcTzfP/J9UcroZkIQmt5EQhCERCEIREIQhEQhCERNfgnE + 6/C+IW19aHRcW9QVUPuDmZJiQrxycHZfevYftJwrtJ2WsuK22hO/Ud7S6lXGxU/I/sRNnvbFG6rPlT/Z + /wC2CcE4/wDwbiJH8P4iQqM52pVein5HoZ9PirR6LRUH5SdXs9NyGeO9u6411YqcM4+gire2IGVYnH5T + KD3AOwAC/lEgZs+IsfnAEukwH2trffrfogc/QyJ70MMBT9QJna/Zoah6Suwfdf1hWXrg6n0/uI1a2egA + z0XIlZnHtI3bKsNejI06l6rKMMSM1DwXzz9rdKt2k+0Kjd8DvLG+UDuaS0WUvSNIFmDBuuNznoQMeRjO + yVwOxf2trwvgdxdcQtq7C1r8gBZvMgY6K2+fQGKnYzj3Zn7RbDi9yddnW4mEF1lWLB3I5lB21AsMT2Hg + fZ3hqmx4vQoInEdKtVudIZqq4OVOc9RgZGDsN4zAbysONcnINO7r3rb4zn+XzjVrTN4ze1bHhV3d0bc3 + FSjSNRaYqhSQoyRqOw2nlXZv7bLK/vGocZsHsVZgKT0WNUAk4IboQIdmI+bvz5zjQyb0rjFUUe1fAK2w + Wot1bH31KrD/AP1mbRqZ1Tj+KcUteJ2XAuKcPqq1JeI0n1Kdwr6qTAjqCC2CDOoGcc0oMTxMXPenxc3w + bs7wuh2v43xJbZBfGsjLUU4Cq1JMEKNg2dWT55M6rvCNtv0mHSYr2ruUXIWtZ06gHqVZlP7MJo3LvTta + rUxrqKrMq4zkgHA/WPeIRiPGOipdq+0Vt2a4HccRvSGWkAFVWAeoSdgM9T1M+Ru1PFrjjfG7y8vblrhq + 1UsHOdOMnAUHcAA7Ca3abtZxntNZULbjd5rSyLMuUAYknBBA6kDpnGwM0OwnYxO0jUHrPXt7fU6iouHd + 1UAjC9RgkDO4JONsTJzG8zlzy5kC6v7CuyPEU41Zdoq6PStkRgodfEGRlBUzuftv4DxHj/ZikeGg1atl + WaqaIPjBBBIHmRPMO0XE+0DcRodjOzdvd2NnZIKH3Vch6pzlndgehJzscYM9oqXy9jewdOvxis9b7hbJ + Tqsq7s+AoUfM7Z+ph3mtW/Fgdqa0F5n9iPaW74RxxOy94lA0K7tWVqLK7BioJBKnGMKdhuDO87Z9n7Ht + YnG7e7rolcUlp2fePjRVRcs+M5bxAHqAJW+z+67P9ruHPxahwSjZXVEm3ZkABUtuSrADJOc5xkGef/av + w97FLHjlG7YcWN5cW71Bylgrkq22wODg+RzAzPUZ8T2b3suP+ySzo3P2j8GpXDhKa19QI3DFQSAPmRPr + HUMcpM8q+zPs3w3idOw7VVKLUOKq1UVU0CnSNXGkFVAwANyMdSTmenGp6SDlB1dPRcLhjtvHVqlV2xGr + VPzaRhT1YGT0l5uYTnU1fVY7aSkxYZZjLFPw/mkacowseHKjlmL5bY8UyHHlJUqkLnAlLvCp6xwd2iTV + Rnqt9+SzFQD9JE9468jIgx+WQpnPKf2kyKW6gFvzCT4janiEuqunOKen8okyVy2ktkfyqJJSq1VGEKBf + yqJMl6VbNQh/pBf5WYP6zUqlh/4wU/hWAUN4jXdvw50ywOKUhtoJ/TEUcUGOVMtj0k7YmpagjJo1H/ma + T07UZz3Krj5/6yI8TbJGNH0EYb6s2rSSPrDzMbTSiVHMAF94KqLndPoomY1dqi5cn6tANv0k6WN792vr + QDlKfUxFrDorp9Jl6i4wyg6em0lpoWbpHqNWiHP4gPkY8Oc4ydPzlRFAHMP2jkUE4x+0z1HYV5bgeZ/e + PNwCuATKWnm5YwAK25MWqOwa2K5+E/vHC4IXmI+srJscx5GRnf8ASDLsKwl0TuuIprFhliP1lMKVB3IX + 5SZFBGFB/SGiThjW0Yt0OJMrPzaKqH5zPTlzpD/MRRUq5JBcfMiLVjlx7tLvCoyxp6vrI+/OdyhUemZV + Su4OGyR7YMeKuXwxCfMCGqPr1XaVU8xwJL3pzghPqJSSqGYgjK+ukyN69bUSr4RfhVYYjZ54bvmT7WbM + 2fb7i6EYV63fD0IYBhOPqcukA7T6G+1nsee0CLxCwcNxWgmk0iMGsBk4H5hPAq9FrepUpV0KVFOkqwwQ + QdwR6z1uHMcS+O6/pcuLldnhs+EITa8yIQhCIhCEIiOTqsbBTCC+t/sd7QPxrsPZF7givZf8My6QTt0P + TzBE7Opf1S2A5dQPFpE+ef8AZ74sLftNX4VVdBSv6WV15wHTJGMeZGqfRVtY5o5XuSrHGaZIz+08vnwc + MnV9P0PLjnxC+yhW/uaZZirnbZQMSZOJ3mB/YVPmRmSvZFVwoYseXIOrH6yW2sq4UhqznV5gDAExBbty + yx1tCrpxO+U57nK53HSDcUvnwAoReuo4I/eaCW1ekAKb5VdipA3+pklSuiaQxohydw2DKLBT8BqqcRu6 + a5ZkLHooA3niX+04ta84VwW+uE0PRqtRHlsyBp7yl1SbUCLUgeQYAmebfb/R+/fZjdjuUX7tXp1lw4Jw + DpP7NNeF1kXF1WssEDTfIcANoRVnp3z84RUXy9Ygj0Ixv0HWEX1f/szF+G/Z69YKNd1eM4JHUKFUT1ur + xO473+zpK5PuVM4f7HFSx+zTs9blBqNDvirAggsxYmdi9VF1O9AlD4ip1Y/WcHI7ydN7XBgdpspP4nfB + lDrSDZHq2N58Tdo009puLjz++VtS46HU0+2bepSRlNvb631DY9QM+s+Lu1XN2u4ycaM3lU49OZpp06q3 + P1YAaKjRSXqFOV6CzStlHSdd5tatlmra0d125ZVs6ftNmzolmUKOp0iFWF759nVGrZ9juHUkfKspqaQc + HLMTOoRbhixYNp/MYvC7e4teGWdBRR/sqNOmOXB2UCaCPd6eakmw9Os5dCt6WGegAqiUyw5WI+slSk69 + AC34paSpWIy1JP13k6VCM6qSbekYEnlq6KcdM49odw7DIJJ9MS7SrEjakNPtJu8J1aFOV6yzCxeVKgKJ + C84I+sb93Lb4H6y+GJ6oTB/yof0h2Efa1F7csMNgfWQvZkjqMfKaDq7bFE26aox1J2cU/brJSZytRexD + Lg7N+JZA9iQcKwK/SXnpuq8pQL+GR92SMZAb8SkRJambeGfaXwY2HaKq6oFp1wKykDbJ8Q/WcHd0fFtP + ePtR4S1zweneAh3tm3AG+ltj++J41d0eZtptg7Li5TTcrc0fEJlXFLTqnSXlLxbTHu6e7bS7GwLin4pn + 1lxqmzXp41TLrrjVCLNqr4pWqCaFVNOqUatOEVVxIyPaTVBIXEIoDEjyMRhhEyEX1iCEXrH+z5wp+I9r + 69emWQWtqzah5FiFE+iXsq6ogqXZyu+cqpM8u/2ZuDUH4BxXiFyGBrV1oqfVVGT+7Ce2CxsQ+fu6k+rY + 3nNy4OTsvo+hy+rjCxHpDSv/ABBDfzDIhTWkdQ+8tU2xgnVOgFtY6cJbIF9jiNS1tlbKWyA+pBaZnTrd + /wDpNeRsVuVV01iij1CmMeu/WnVRyOXUoOf9J0IpUsYW3pf4RHKmkcqAfIASjpWn/Ru5i84W/FaC0ruh + Su6Qywp1qC1FB9sg4nlX22dihZ9kqN/YcPtbRbOr/aijSWmSrbZIUb4IE+gENVV5DM7tJwo8d4DxDhdw + 47u7omiWbyJGx+hwZtjxODcXUByCavmP/Z64y3DO2v3Fq4o0+J0jQ1t01A6l/UgifUicLLeK7JXH4MZ/ + efDF7TueD8Zq0SWpXNnVKkrsVZT1H1GZ9P8AYX7XeA8W4LQ/jnEaNhxJVC1RVJVWIHiBg8Rm7bh6Xm+s + cV1q9Qp8FoZ5iT8iV/zln+C2hVdSAsPNjv8AvPKuP/bh2W4UjLYXFXitcDYUFKrn3Yzxbtn9sfaftEat + GjX/AIfZtt3VqSCR6FjuYzixKuXq9end9WcVvuyvASf4nxPhlpUHlVrKG/TOZftuI2j2iXFl3NW2qLqW + tTKtTK+uobYn59XFV6rl6jl3Y5LEkk/Uy8OM8TFh/Dkv7tLDUT93WqRSyevLnEswD0XL/rX3ehf7Q/Ee + EcV7dtc8EdHYUFS6eljQ1UE+Y6kLpBM8l8o5jmB6R3Lk7Vuu+zfgVLtL224Rwq41C3r1f7XScEqAWIHp + kDE+27CjQsbGlaWVFKNtRUU6VJRgUwOgAnwj2Y43c9nOPWnF7AqLm2bUgYZB2wQR6EEifS3Cft27K1bO + k/ERdWt2QO9pJSLqD54IMZr9uzpc8MR34b1tnJHNmI1QqOUD9ZyvZjtzwHtNTqngt8tapSALKymmwHqQ + 2+PcTffiNIHxIPrE5nq9bj1yGyssap2BAgBVxzOB/KJUfiKAZNWmF/KZA/FqC6tVdBj3i7i1OJ/lpIr4 + 5n/aO0uAxLmYj8at1VsVg/yBlZ+0Vupwrk7+kf2EZcTfOX+0rxQ3v2kVLUO5p2NBKIB8iRqP/mnk86X7 + RuIHinbnjd6TnvLp8H2BwP2E5qA7vm+d3k0cIQhYxCEIREIQhEQhCERCEIREIQhFZpVDTYFCQ4IIYHBB + n1b9kXbVO03Z9KV24/ilkq062Tu69A8+TWTedD2U43d8B41SvrJzrXlIBwGU9QfnE71dnScvZmb9N9lm + sObcRrXFL4nA+s5Lh9w97Z29xT70U6qioBUypAYZwR6y4ijTzkhfzGZubu+mwwE2F0Hfo22sfrENQFeU + g/3phMKQVixOry5pk8b43w/gtstfiVwKNNjpBIZsn0CgGG1jPWBtLsHeljJf941qg9f3nAdne2HC+PvV + SwuKxqUgKhDKQQCcf1x+s2hdBT4nP1EPJ7acHHM2GysdsHRuF0HIDrQvbWsVboQKqg/szS32eZLawqWa + klLWtUtxqOo6QxK5P8rCc32mu1/3d4kVPMtEsMnO6kN/lCx4g9a94lSpsUpNXWo1TVuQ1NThfQ+p8vKA + 0OGsvVkfaz2wqrXXs1wlEurm/U0blASCuoAKufLIyTOC4N9nfGrns2K1C0oW3Eba7ZtFxy1TjAABIwFB + ydyQZ6pecJ4HfXNK4ueHUnr0mDLVXKupHTmBz6fWbC34znCavlmHfc2fQPLkuTeOcJuL3g1LiPD+09pU + o3LNTrWdy2rarSKMwVs45gpOQeo8uk9y7+7ou5ouLulnVpqkLUx7N0b+8B85xn2i2I4/2Uu7RaS/eKP9 + tQ9Qy5OB8xkfUTR7MdoG4t2fsrumOapSRWHoyjSw/UGV3EcXE8a8a2nW4kjdpeElMpUqUq1u1KoulhlV + YbeY5DuMj3m932fPE4zj9ar3nCblgNdC9p6G2yqsGU/Q6lmsla5Oygf4ofYW2GCbLle1/wBnnZ17u/4/ + WDBVQs9uuFpMxGCcAZBJOfTM6TslY0rOnVdVRKlNVollAUGp4qrgDpktj+7MzthfPa8G/wCJAenVrUqZ + XPUagzfspmjZ1P4bwlHvrilRCjvK1SoQqBmOpiSfzEw2NgcWOK5a1bfdUFuVuFpJ94C933ugatOc6dXX + T7dJ5V/tDX9yODcLsqZb7vVqtUq4BwSBygnp5k4lm9+1CztuPNwulaVXqC4FHvWYClgkAvsCT1zjE9Cq + olYKKgR1U6lWoobBHQrnzgoSdcuLjjcr9kD/AHH7OrR660qVKk9WoWXOSA5JY5AwdiPkJo9mrNLzgdvc + cVtKVWpXHfClWQN3YZyw2PRiWLH5geUpcXrPUsOMWFMaHq3VO2Vl+LvwpY/4WaS9ve0KdmezVxdawldg + aVupGxYg429Bj9hEJPHE4zWT4Lq1fSuEARRyhVGkD6Q745nB/ZH2kuO0fZ6qb59d3a1RSeptlwRlSR69 + RO12C9YthdHE94OL4vLFbPhEs01J1RtJQrSfUFXlM5M13fS4Ya8sIg+L0h8LRmpyzQDfiEKp+n2WSAZk + YbMcKgAkIwarCKF3aLrC+8rlizcvhiHJzpgB+tW/5TO5bwYjVUndyJGimSorscKcQ0FPlkRSpYqBt8TS + UajtufpBFIbHpLFJiuygwWswoQhZuYDVJqVHT4ziT0mYDQoMnRS3jLiQtZjrzQBRhRn+7HaQAxzLlOiG + 6kxxt0qeJyV9zDvCPFVosObTgr8pdRRpBXAz7xUs6a+ZkyWqY2OZm5lLkTEphlwpGr3McaQTxOgaSJag + 75A/eOe0q4ylX9FEQ2TkboypIwCD75jkpHrgGCUjneq/X0xLtJRsMk/SSsnk0UCW5J5gokotSDkAfpmT + h0p5LNoHuJHVuAFytYk+WAIttg8iuiR7d/QD6R9O2IXmwFPrtKpuaueW4c7dFo9IPfCmilmcsPxDT/WP + zL/u+K1WstIyXKe+OsgSxNQZ1u4OwUbSN71CFJuECqOjMAB9BA3bKAKZSqp6aXAP9ZRuR3hS/wAOKAg1 + sexaL92BVh3o2Hkf6wS6IbChEY9S3Mf6wL1WOXFE5AwMGHmN5/s9KRphia6A+QxmLo25ay5/KBvIalua + nWgAuMZpkf54kf8AB9RYJ3qb7acbfvAKdntaQ06rq/PUK/iUDM8o+2/s3YLwX+M01q0rwVVpMSmBVBz1 + /MMT1ijw56GpFeqc9D3TMc+08F+2ztUnFeIrwiyqu9pZMdZY+Kr0M6emFfDeP8rngcaN5PCEJ6V8lEIQ + hEQhCERCEIRb3Y3iB4X2m4bfqdqFdGPyzuP0zPsJ65VmdQh7w8qqq7D6T4jpcrz7e7I1LW+7McIvDRQt + VtaTZAPUqM9T6zh6s9N7fxfKGxN1fdqilWQOfJjpJPyjlpVVpsalWrRZugFVjn9DNpKCOxNRaIXOylMH + +seF7yuwwqUgMHCj+s4i9l5T8LDPegoGrO+ObLFlMeiuzMWNMjOnG6mbgdFY4FI0wNmJAMctVBTYlDjy + UAZP6x6p7/HgsNaQeqxYIWXGCpOJk/aJZC67Ccft0CFjaPUwDkgqNX/pnXLf0Vq4FvW09SCoAlfiFzSu + LS7t3twi1qNSmCQGI1KR0HzmvHoRufqFyxTV8H+cB45YuKJpValJ/GhKke4OJAvUz1C+XyNOpyfFH0gT + kAZLDAkadZf4XSFxe29LGdVUDHzIEH1HGby1fdfZi3Fn2a4ZbvSKNStaVPZTthRLr24ZlCghMeI1dJz/ + AFlZLhlpIFCKyqFOCWGAMdMyajcXCsxLIaeOhBzPN2K3vYcaYGqZqRoimGdQoIyxbGd/3nxf2iGe0/Fj + kH/i63MvnzNPsy3vS9QBjSO/Qg4G8+OO0a57UcYOAM3lbp08TTp6bW24uuEDdDQWadqvh2lCgvhmtaLO + q8yv2tPwzp+ztqbjitlRUE1GrU1VV8yWEwbNdlnefZzamv2t4alM4qLV7wH0wCf8pOfq0w9l7nSqXq7P + Qz9NOJYp/e8MRTUeq9ZJSp1SOetU1eecDEkpUrhTk3BJPqJiBu7e6anfMy6gAfXEspUqgcwwo9oqUyTh + qvz8pappj/xgfZpYWefITUYnqJOmcdJIh5eqH5CPDBvKUFzue6Du/XOn5w7sL0Bx85OAPSLtDVPc1QoP + Q/rGuoHr+stFQNgP8UjcEjLAfpDVRnUHUHUF1H2kD0gW8LFh7TSfPw4EqVFJyWz9Gkp5ujDKzbzhlG7t + KtvUBCVFKnPvPn/jVg9pdV7esMVKTNTPzBn0Q1KkSdQH1nlH2ncOFDiNO7poO7rjfA2DLsf1GDDDw6o5 + sVN3ll5T8W0wrymNTzp7xd2mFeL4tprctz9yu7TLrr4pt3Y6zJrr4oRZVZdOqUqqmaFcbtKNVd2hFTcb + tIHXrLDjeV3XrCKA/FGGSv5yIwiIimK02eznC34xxa2sUDE1WAJX4Rncn5DMS6LXiwc8jE9t9S/Y5bUu + E/Zzweg+gVKqtcsCd8scjP00zuRdBhticVRvjRoU6FC3pJTpKqhcdFUYH7LH/wASucctKl8t5l9t9bwd + ImIXYre013YgfMw/idJfE6frONfiN2w6D6CM+83FQMcY29IvtS1On37u1bi1JfExPyBiDjCEMEy+PacP + 96uKdTYvF724qDqT+ZhF9rM6U/btG4wV6Uj/AHuWV6nHyuzAD5mckGrhcscQavWYYcg/zASftajpcf28 + b+37ha0u0/8AFrZMUL8am09BVGzfUjBnlBJ2IO5n1Zxfhlvxrh9Szv1R6Tc2GOCD5Op8jPNuKfY+CxPC + +IY8xTrrn6almmHIa83hdZ8byGa8ZsbxljGZnW8e7Dcb4Hmpd2rGgv8A41PmT9R0+uJyjKVJzNTIfV4+ + fFnxusjU2EIR2UQhCERDUYQhFu9mON3fZ7i9DiFk7LVpnceTKeqn2In0hwftAOM8No3loR3dUaseYbzU + +4nyr06z0n7KO0p4dxVOHXNULZXbhQzHARugPsD0MjMHzer8b1HZn2r4b2hrq4b/AMUj6Rj1a58RaaB4 + dX1YeqiN6M0E4U3WpXpafnmY9wX1GJZeo4bUT/eMbVYqr1WbCqCx39N5s/wylpb+3T9DMntPQSx7O8Su + O+H9jb1GGF8wpx+8WOYurLmNYrfMHEqpubmrWPVnLfqSZQ8pJV6mN8p0nq+Lz85NYoUateslGijNUchV + VRuSeglzi3Crrhd01C+pmlVADYbzB8wfMTv/ALFOzJ4nxWrxS4H/AA9pyoxGxqkbfoN5p/b1YUranwuu + v/NYvTc+ZAwRJ7zerpOlfqeRvF4QMJdxRCEIREIQhEQhBRmET9vIwXrOq7Wdma/ALbhdwX763v7Vay1F + GAGIBKfTInKKN+aIRr0jpNN1HZLsxxLtNedzw63101I72q2yIPUn/Ibz3bsf9mvCeABK90n3y/Az3tVB + oU+ymXfs0bhy9iOFtwoIKbKGq4HMao2Yt6nP7YnUlgwbSH3nPny+dX0fQdAGJk6Vmug64J9MkLIXUc2y + fU5kr0Q2oshPzMjNCl8SZ+syMy9k46J1Lqw1gL8xMnj/AAKhxqwqW16AabcytnmptjAZfcTbRKS6tKD6 + yUMF2UAR456suXAyHF8l4jwLgdz2R7ScUNcpbWFCgbg3NQlmelnSEGMZLMwBGNiB9e97GcUtO1Nm1W3c + 0a9MlXoMcn1BB6HI8vLedLxixocU4Zd2N2AaVakaZXod/Me4IB+kodnOz1jwDhjWVlrdWYVGaoRqZgMA + 5GCMY232zNXPZcHFw5cWWj1Tca4B3vBb9FLlmoVVG3npaZPYnh4vLSpXBP8Aa0bWsxH5qC5/cGdI9xVp + K6XVU1KDKVFVjzrkEYb2/MPqPOcl9l10Rw9qLVTrp2tJTg9dLVV/ookbUbXPJ7y69OC0s8z1f0kjcJt1 + XcOW/NHNV1fGT/eMb3oz1J+snzdWyUcPollChwu2ek86+zS1fh11d8MusmncmrWtGzjem5Vx81IVvkcz + 0RqwVek4asvcWt7d0x/a8H4vUrLjqaTaWdfkVqMfmommK61cnNruMi6HtTZaOz966g66KrWGT5qyt/6Z + t0qOoa0CaKnMGz5GUeIoLrh93brh1rUaij31KQP6ytwa+R+A2FzUICNQos7VDgA6RnJ+eYeWM8zHbYvb + O6sv4/wbhd7WpBqpWqKbVQqsdQIyx2Ge7I/vQ+0nsrxPjXBV+4XaPXpVdTUA3do22yDyyDuMzwbtfxa5 + 412ivbytVNVkcqjLnAQHAx6D/Mz6K7I31a+7M8LuLks9WpQU1SRjJx6RuCaRuDi5TnXFKt2e7EWdtWtu + LcVoJW44yq1asWyoq4AJA8OduvrmdWVx1xKZqHHQxuo+Yx9YkW9DiwxwNBYD1zW7dfcMjTRqrfMFx0Wl + pXP1b9p5b9uXFX4n2lo2NCi//AUmDZXBLHckeqgAYM9A4w9a1u+1PGbLa5trWjRVlUHmVSzDHmN1BnnP + bOt/vTwa34/Z2mi6Vlo3zKTkOBsQM4KkMAD18o8DTtvL6tXFxPbb/wDs+MtP+LhqSbrSJr6hkdcLieum + sincZnmv2Xdj7jgNOrd8QW3Nesg0qEOtM9VJ6bjGwzvPQMCPJ83T0Y44Alw4Pko5YKurqRINZC8ogGJO + 85kb6vdY0jMcigmV9WPOKrhfEYaZ7K0ijPWS06YKyqlYDbJMelYkcoIWQjusStpTGZIlINKyVD8Rkoq4 + MlGs1WUpJ8QzLCIFGQJQSt55kiViR+WLUxK4lMcwwDHouPIfrKCM7bMY9GcadJk6q3aKsQORQMSRAWK6 + 8dfISgjOdWmShSdWk/PBkpTX+5GMq4Dfmh3RU8jIfrKiUi22QVkoob9f2iSnTSqpAyw2/mirVCjl2b5x + BRPTeKLUdSCfpDx+x4/YSvqOxfV6ZEearAA56+42kb0D8IIipaBm5hn5xoUpjH3ggc7kN5dCIJekE86n + 0yD/AKwFqhLBUQennImtaQDaqQLD2O8QDLQ0p4s6rzgFfXBkL8dLqcUiGPKMHEalCjzakCr7krHubdVU + CkhwNsrn949BLsP5I/FKShS5q5HllcRRfpX2V3pqBupCkH9ZVNuHbmoAKeYaQG/aMpWZGdIAwdXMuP1l + AS7LRW8pMwB7osBghlAz+kHq0mO1GkWzsPDM97N8qFNIam6g/wDaSNZBfjQsOuDvDRPsCtvVA5UoJpHk + tUQRqTFiwdH9QwUym1Dud9aFm+TCPRDzDAc+I8u39YwJmAlcR01uFu6obwkM0HuSFYJducYY4Gf3mf3Y + Wo2jIfw8vNHJbFtWirobzGNxI0U/UV5L64ZlC16oXPxEc3+c+UOLEniFwSckuSf1M+padErTfRVDsoLY + ZfY+s+Vb85uXJ3ySf3M7ekC+V+eA0FThCE7b5iIQhCIhCEIiEIQikWfVP2Y8War2B4NyZC0dOSceFys+ + VRsJ9W/YNbniX2aWQ0l+5r1aOFIBHNq8/wCac3VG8S9X4rkMeV7ro0vqqrhKVR1zuFYMDES+rAMFFZAT + kgYYfpOjHCURtCULghupUqoEnp8JxozZ6gowGaqAf2E4DAb6B6riPy5hLiq2dKgsvxVKQXHyEXv65K6z + TdF/KF/wzqaXC3Jd6lrRpqo2zVGWPzHST0qNKmrCvStQo5gDXz/lGYf2h63jPRculernkoF0x1UnJMs0 + K1Wkqg2mtidwzHPXyzmdHRuLQDDfcqa4wFWsGP8ASWO/GVCvaqpI5hWAI39xNMMC5OXqxPV8Edqk7rtD + xJNJTTdVV0+nMdpkCbPbCsLntTxiurZWreVnDeoNQ7zGWeger5zld5KT06zQ4EM8YshkjNdenzEzh1lm + 0qGhXWqudSkN19Dn/KUmyXG6RvvFODVSzd8KpXxHSCufqDJ04Az8wFUKBp05wT9SZqcJqJU4dbXNCspp + VKS1OeqzYDKGHUgecsNUt6rEGva6hsApP+TTk+vG9XHqM08WdR4FboyBu+fcMQQP0befH3bu1Nn274/Q + ZSmm8rAAjoCxI/Yz7VVaIOfvFrt0Ogk/rqnyt9vfCxY/aLc3dEhqHEFWsrBSADjSw/VczXAxHxcvUOXI + bdurhbZdprWg6TLtfh0zXs/hm9w2zZr4Z6b9jduava6m4QaqVJ2y3QbYnmtn8M9Q+yBno8erNTKFhQYY + YfmWJ1rzaYDkgXu1Kkc8xQN6g5j0o6erqPkBMancXLnLFPbaTJWuActV5fRQJkZlu8WVrmmhUhip/QQS + 2A8xKFKq58Tkywjll3Jmg7oeNK4lPB2MeE+kgpsdPWTpGFk7n4hgR0acARlO5j4x5yB8YywP6yUyOp4Y + qgqtRhpYKD+sp1mC77n5mWaq+KUqlMcxYzNLr4gqlZgy82Nuk5jthajiHBa9JQDUp/2lL1yOo/SdJWU4 + bTv9Jn3CllddGc8uMdYvTdZgIjeB3yjmC+GYN4o552Xa2xbh3F7ig4Ip6tQ91O4nI3ijU01HZu8nPDWS + Ng3Q6zHuB4ptXajmmTcjxR0WXXXGqZ1T4po1vOUKnnCKm69ZXfzlmp5ys/nCKE9DGx7zQ4Lwu54vf0rK + yQtWdgAo6D3PoB5mJdV4YObor/ZHszxLtNf/AHexoawMGrVOyUx6sf8ALqZ772M7B2fZq3zTfvb1lxVr + sNyPRR5CafY3gVv2Z4DQsLeqgZearUAwahPVz/Qe06AXdFdkql29jOPPlV0X0/Q9CcYZZG2jo8PRVbUS + fmNMR7JQeUj+XeWHrhlzTJLfmjKdWrq5yEX+WZCt7G2gSxTVlgSo9o96FBRhkcN6qJcDEr4vook6DOwO + Tj2ht3S52YlqGPVwvo0kFrRVWyGP1l11LahkDb4hKwpEsS1XYeghuDNalVSgpIW3c/mzFo2qVPFbv/Nk + TYoqq08Lg/OSEHB0hI1NaJd7Z9KwtyucEN+YxH4cP/DIDeWRmWHpvjKkBfQLI0pvnxn+6AsQxuj+41SM + OQVPXlG84/tT9mPCeP0Lh6FpTsuIFSVrUV0gt5alGxBnahKn4mJ9QYPSchsGpt6sBKxzR8XL1HTnIaQb + 4sv7WtY3lW0uFK1qbmmyHyIJBH6iVvhWd19tXDhw/t/xHRslbTWX+8N/3BnBN1Infi7BvkObDszSZCEI + 7GIQhCIMkQ6TkZBEjjlz5QqxdN9XfZhcV+Ndi+HX1Xnq4aizMdyykjPzIxOtW1OcOB+s8q+xnj9E9kEs + DXenVtqrM1NTvhjkGegpxmgo2Nw7HrqInFmO3V9j0efdxDvdqm1OOUD9Zx32us9h9nvFnzTHeqlJfU6n + AOPpmbh4zSZW/snC/maeXfblx+3fgtpwum4Nd6orVV1ZIUA4z6ZJi48HZZ9dymHEu/d4SDL3DrSpfXlC + 3ojXVqutNF9WJwBKQ3noHYHsxxSrxHhXFqdBBZ0rhampnUEqH3IB3InYui+Z4cHkzAN30L2P4Badmuz9 + nw+m6l6Q1VWUeKod2b9dh7ATxn/aI4itftBZWNEkpbUNR+bGeyHidsNWkBV/oJ8vdueK/wAa7U8Tvhul + SsQn8o2X9hM8Dyrep1r9XEYFzUIQm14UQhCERCEIREE6wgIQXv15Zf7y/ZPw63RA1zRtEqUGxvqUEEfU + KRPCailSQQQw2II6T6Q+ydqNXsFwsuMsoqKfoxnnH2z9mqPCuJ0r+ywKF6WY0/wsNzj2OczHDIFL1+o6 + deM5S6z7Ebh/90666yFW6bAHuqz0QXRXZS5/mnm32EVS3AeIUVQMy11br0BE9QQHPNgflUTDNBb2/j9v + GTPvTnzcLGaix6udXlJxkfAIHJ2ziZmrtR1RIDjlBH8xkiKeYsx/WAYBW1ExgYDzliWTi0gUD1/vGHPj + lAjNQw2qJq1bZj3GmlTJZdwN99vKcD9nSfd+PcYt9bd2qqy+gBds49MnM7YuVVnyTp5v0nBdkboVO3HF + kTHdm31KR5qKpI/qJeD4bi5RMhvRVYY5SYmodZXFTyYw1hfPrDYXVprOUIxjr7zBpIKnFe01o3/LrUqN + QD+akyk/qs1VcesyQwXtfUCn/n2A+pWqR/SpAbn5jxWex10L7svwm5Y6ma3p6mY+agKf3E847RdsBwXh + 1twT7otaiBWtrpGBVmpCoVXS3kcA+RnYfZvVH+5lkn/RNWl+lVsf1nL9ruAWfEP4nmnUXiT8RSjRdc7q + 4WoQR0wAWPzErBBd3LzDliI3H3fBLHg/Zg3vETcVru/SnUtKNLCLSJXJ7zOcgAjG3kek9V+ye4q1OxFi + tcEd0TTXI05AbII/EN+sks+DcPv+B0xUtKT06gVqDMA3dhU00yM+iqDg9cmbqMKFvTRQiU6ahVVQFAA9 + F6AQyy34o6bp3jy7t+K+pHqYjsPiIC+rSilYVFU02DqejKQwP6TN7R3JteB39dXIdaLKu/xNyqP1ZZOr + 0PsEUo+zyC84LcV6wyvEK1as2+MqzFV/YLOdvOA2PY3sz3jd7e2TV1e6pMoPeYJI0+QwVXPqOvQTrrKj + SsbKhbqeWlSWmOb8IA/9M86+1Jruzv7W7trt6tC4Q0GtGZipIBB5fMEHr1BlHu4uo1271tup7A9s17TV + rui9Duq9Emoq9QaWQBk53OW3nXtjHNmcT2Es7ew4Klzb2SWle8/tWpKxOAegDHcDG+Peb/3q4LNpI0+S + mTm+bo6ffYLcuFOOaSIoAjEz0YR6qdMzW+iCNI0sGxESmDtiKilm9JIMKvUTPdWiVKYXUMCP0/hHN8ox + XHSORwvvF31gE9FJ84Kpz1MO/A6AfrGmtVOrSg/WALGysouBjMemAOXwzPWtW1coA+sXvq5bHIGh2Qcg + WknxbxyMF6mZfe1y2No41a3Tbl95PZP7S1RWCjrmOS4RRjJmMtSr6fvBqtXTjB1fOHZH2W8t0EGpSdMT + +IhdgT+swg1Yj4wv5lgabs3jP+GV2EvsX0W6/EdK5D834cxp4qQrBiQ3zmOKD45WGr+UwFqWPPVT9DAw + KXJfRai8VIbKnLfmlhOMEtzkBfYTJSxHd5aqn8qqWktKzoKq66tTVn4RtBwKdrX6vFDzd22fy6cSFeIu + W5y5X8pMiSzok5U1dP5qRkhtbOmrF2I36Mp/zaRoPVXmVOJoocdSeY5H/eN/ihC5QJqPlgRU+4KuWR6v + w+S/5xTXsF0j7pjH5gv+cNEeaP8AjFUnwD5ACL/FKoLaUB+Y1SRLq00qVtAPzag0nF1bqFH3cDPqRFAN + XHEazKw7lHz+If5Q+/V2GUoUh/dls31pRxrFMMy6upJ/pGnilkoYUwAx6nui0fiFT3VqVW8ZsrboFHXb + /wBUsI1wWUCnSG/ln/WA4wgGFuNC+1If6xj8XpdPvNV8/hpAf5w0wOq4qVwi6aOG8wFJ/rJgKpOe5O/K + SAczP/itA7sbkt4sldP+cVeK0cYUXJ+WP9YaY7rSrUqwtqpRHGKTeJvyn3nyRcc1U/Mz6eub6k9vV/sr + kMaTc2F9DPmO6XnPsTOvpTQ3yXz21KrCEJ13zUQhCERCEIREIQhFIJ9I/wCzVepV7McSsUtaVavQuO9c + s2CFZQB+6mfNyqWM9N+wyvWpdsxQVKr21xRZa4VioAA1Ak+xEy5jY3f0X/2Gvd9QhyuS1hRTPrUGf6yR + M9fuQ1Dz70Ef1mGEtFPNboWUfFVLRwuKCjCWqnHTJOZ5m930f+R/C2mpVWbLcPolceZA/wA5JTtcNn+H + WpY+lWc2b2rlitG3Cfy5/rGNdVWDBTST3UCAs/8ACt2CVOfDWNJGxp2qg/viUO1F4nC+zPGL9bBEa2ta + tUFmU7hTg9fXE5xwX3atUPyBnOfaAobsLx8JrLfd2O6YHUEzXj8oNzdR0Thiu75VqMWcsxJY7kwEafOO + HRp6ZfL5yiSoNWoN5yFOsnT4oU3112D4yeKfZ5wSrT73vFoLSZhVZgzLlSMdB0miLq8pnk70fy5nIf7M + V8OIdkeIcLrMDUsLjUFJxhWE9fqcLtB/zHCenNPPz8KN9L0XLx48QJu5mhxS/ptjIP5Wz/rOU+13hlfj + XZepeVER7jhx75SqnJU7MJ6db23C6FfL1kc/mGoSe/fg1zZXFuz5SpSamyqvUFSI+NBEn1WeKJiXx1aG + a1mczJQBatQKc6XKj6HE1LNp3ju+bzNOrds28M9L+yo6uPVEyQzUT088EGeZWbeGd79mV4tr2rsi4yj6 + qZHrqU/5iRkeGvie3Ib25KW3Kx295YRSB4yR841KwDc1IBvlJ0rAjCgD+6Zhhek5PvU6kpHUmXqI9JEl + QEcow3yk6VSOgmo3NyK1lFI8pIkhSoTJQ5lDcyNNnEM5kQYw1+0qjU595A6nmEldiekrPUPNuP1krPAZ + rru2RmVqqg+LAj6jHm1MJWepp8RElurDFlq0FYHcmU61mS2V2HrmSPVKhhnCyCrcFVYK5MjO6MTIvOPt + e4X3VraX6nLBu5b5HJX98zxu8O7z1n7XeLuxt+GI57tR3zD1bcD9BmeR3jeOacfrzefzf/TY12w5pkVz + 4pqXh1Fpk128W80srPrnxShWbxS7WPi3mfVPihFWdusrv5yw7dZXfzhE/h1sby9pWy9azhR8yQJ9O9m+ + ydlwC1VbC0RKmAtWsxzUqeuT/kJ899gLepd9teC0aa66hulIX1wcz6dex4ixbStRPkJzc2aIXv8AxWGC + OWRBtyq5qUqf5ct/3iI70+dPu9NfxbZkL8H4m27pVf5mMPAr/wA6D/Uzm3e/3Y/2tvxFFXqHb8Kxr8Ww + uVQFvwkysvZ2+qfAB82jk7N3vRtA+Zhs/Wszxg8Wq6uQUh65MX+M1xuGpiPHZm6bxvTH0MVOzLnVrqgD + 8oMXcU7Pxojxqs2nVWQfJNUBxk/HWf8ADlVEsjsr+Kty/KSJ2aRRl3c/ykCHdjPeNVXiyZyzVT66jpky + cZpKMKXx+YywnZu3A5i5+ZjzwC2C46fWHdjHiqHjSFWLE/rK1TjRZWFMAehYzSHBLRfF/WI/BrAZLYHz + aBkEAWC/Fbljlarj5GQm+rsuGr1Tv01GdJ/DuGLsxTV848W3ClX4PmBGZn4R2Y3zf9sSu3aWlVckl7cc + xPXBInnzdJ7B/tE0relxbhJtAAGt2D4HmGnj3lid2DsG+M681yoTIQhNLiiEIQiIQhCLY4JxW64Pei4s + XZKg5T5gr5gjzE9k7J9rrPj+m3q1adpeHC9074Wofysf6Hf5zwVY5Dg+cjPAS7el6zPgfHkvoHt9x/8A + 3bsAiOH4hUT+yp6g2B+M+3p6meD3dxWu69StcOz1HOWLHJJi3NV67a6zs7YAySScD3Mp7Zhhjojqury5 + 3aaLpOxnAK3aTj1tY084YamYdFUdT/l8zPo624ELejToLhKSgKFXoANgJ5n9hZt6FrxKuv8A84StM+oT + Gf0J/oJ6k98xXlDmYc2bvRe38Vw4GHdrbYvbenS4N2Q4jehxqFI013xu3KP65nzG51NPe/tkvz/ugtFS + 472uqn5AEzwTqJrxDrbef8tnvlMSjhCE1vHiEIQiIQhCIgnWEBCL6G+xi6LdiaaBA/dV3X5ZwZz/ANvd + 53jcKtFQBkFSs/1IAmh9iju3Ze7RSdrg9PdRM37cbItS4df5OrLUW/8AMJygGe76LlzXpQLG+xbjf8M7 + Sm0qECjer3e/kw3Uz3nvid8gT5N4PVahxS0rLsUqqRj2In0fXNVXfSTphy4bd2vxHLvFG6B65XVkj9ZG + bgL4nE5vvK1PVzH9YhrOdQYzEwvbeUui+9If/FEHcYyHB+U5g1C27HLfzSSndOjdY/raHMbfNbT5n9I1 + 7k/AZkC8JXDCJ3+Q3lGGrNyLRe6KncgzguzFY2PbGvSYDOm5txvuQpVh+xnU96W8R/WcHe3D2/2m2gXw + MMsfXVTCn+gl4G9lxdRlpG9KfiRXZwR9Y0X4YbEhpml8hhGMw/vQC3Xxcb2h7b8c4P2irW5FJ7bVlBp3 + YEbDI8516XletxXgFxUQJUuKNamyhsgFlVgM/T9pzXa3hIva1tePWqUlttRZqZ3CgFsgeuRj6ylwjtQl + 9fWFGnSNKna3dMUdR1MysGXB8tsia6NbLzMss+NTJ2N1P2e16q8Aqom+m8rL++Yl5c1qXam5rOP7KlaC + 6+dTS1Jf2Jmb2GunXh16EPKt5UP6kQ7+7vu1DGmUNOs7W5NQZAp0WVjt55JIkabbj0gXY2d0bayoUsAd + 3SVSvyG85Dtp23tDw7iPDrYJVrMBROclCD4iMdcToLjh4vreol071UqAqRnSMH0UTAsuwFpSo3NKsRVS + rVDUmxhkAPTPmJOKDtteo4uVDHAuN7HcavuzXE8KgqUa9HVVpOw6AFg49CJ6fecUo8WtuErRINO6r06z + LncKq94QR8wv6zl+0/YUXBW94VSVLmnj+xVABUA8xnYED6HEg7HpVuqdsbcIlWytzTq+hYsRg+h0jr5Z + l5Imy5enw5OPJx5C9DeqKjMcAt4usyjSS64zULhCtGgFDNhgGZi364VY2gr11YqHFRW0lWHMrejSHhNN + 6v3yuAStavUUN+VeUf8AlP6yB0bvR7BQ1agtyNWhwAPwmROtVd9f7x6UnUsFP+KPe2dvEQJkZ+fLaHG2 + KKp/A/6Ry1dRxipqldLykdz4v5TJVu0PkfoDKS9XBEplct8B+sVG1L0x9JCLrZsISp9o43DsOWkPqJmj + UZ0u/RTj5iSJTracIc/3ZElS7YYXA+gkgpXbhtVVwv4c4i1qZ5o2a86BM/QRHa8UMWAC/ISQ2r55qp3/ + ABNHLag7u+frHgy7Vqa3dwu2w+aiSUqt226kavfEtraUiclxtHpbUF3ZwW/LK7iDB/WqF7vqwT6YiJWr + 6ucIW/MJfWnbr4jn5QZrNd9y0jvn2JUhXr4/5VL6iTJWrDTy0h81/wC8nW6tF1DQ+oQN1bqzBKRP80O/ + cBqhS6uPhSkPkscleu3wUv8ADJRf0FXoNXyg3EEA5QNum0FfwmJIjXCtlgB8lEmSrcY5MBvXC/8A4yuO + JYbCqNPyj04mWVguB9JPmZkE56l22kOXK+3L/wCmOpUqx06lJ38TEyMcSfHUavlJEvrjGVOFMrTMzFrA + t6p066Tlc74ZsfvFFgS2UpAZHmQ3+UpLdXDaSapjkr1mZiHfl95mjUJaKWJ0YyQxPlp/0j0sivQA/wA2 + lv8A0zPWtWJy1UgiIlZ1bL1XLfMxIzEtH7lWBGk01+SjP9JJ9xGrNZ1f+ZV/0mc95tryS3TljP4gqqxy + S3ygCxstKpZoysNdILjyAkCcNpM3/Nz8hKR4lVGy6/0kbX1w26h9j6xgyU/bW+40lXGMt+bzk1Oyo6lL + UkHrMNb24bzfV8443VwTzlzDTLY+i6NKNv07lMeuIoe1VsFE1fKc8LqvpxzlfPeCXFfVlQS2NoaWm6in + VtGGhwmluXGPKfKHaC2ax4xd2zDelVZD9CRPogV7nUxww+U8m+1Xhb0eLLf6ClO68R9GGx/UYM6el/6K + LfO/OcLlxGQXnUIQndfHxCEIREIQhFN8MACdJXxGMXG06r7OxYP2rshxMqlLVsW8Or4c+2cRLo3a8PH9 + mQbvSfs7+z20p2VLinGtBuKoDUreoAQo8iwPUnrieh0baytVYU6qUUPlRVVB/QSVeHOV/wCa+fdBJDwd + 6ijLsfqBPNy5FXbfc9J0XHxYlVevb09Wh3dvLrIDfBfJzj1M1E4NR+Jn+WqPHBbcHO5+syELvUsxOKBV + 5aQ0j8RMsJxoDfuUMvDg1BhspwfaO/gFBjtqh3jZrjVE7QBRlqA+WYzivGaV9wW9snt103NGpR1N5alI + zNKl2ftxnIJjP936Gdg5lYZg3LymPJijfH1xRahXdH2dSQR6EHEg+Cdp9rHAjwHtpf0QCKNYivS+Tbn9 + DkTi8ZzPUxRBL4bqMOzNGRPikiGRCPHglWN6T9iPGTwztU1uDhL2i1Mj1Ycyz6BTiJY5ZqpafJfZ+9HD + eMWV6NWbestQ6fMAgkfpmfalDg9nVpU6tEuFZQyliOhGR0nF1ACN7/xnNj26SxqV4GZQwfT847it+LPh + F/dtslKhUqFmOOin/ObycFtxW53x7sROJ+3Kpb8G7C16VJwat5VWiFDZOMlmP6LMuM2hd3VdRiYur57o + PqZi3ibrNS1aY1u2f7007Z9xPSL5TN7st2/Z1MaZ03Abo2vEba4QkPTqhgy+xE5C0qeHebFnVIHKeokv + qeDpG+n6IrMqkZ0kBhj3lqnrxhtf6yr2e41aXPBbAlv7Q0Ker56RmadLiVuckNmY+C9LuyT1CM+rAz+s + mQ1fPOmMTiFDVt16dJYS+oN6yhLHPf8AJ6M/mTJ0Z/Uyut9RzhcmKt6nkH+kY2SL+VoMfUw1E+cqtdKR + srxDdD0P6x7l2P8AKy6lvPEa9I+srPdj0P6yB70L5f8A3RLPHjaw9sG1aiR9ZVe3B1b/ALyF74BW0oP8 + Uq1b4YI0j9ZCt0YcWVbe0X4iD/MZC9qObdD/ADEzNqXwOo4H+JZTq32M6hj+8P8ASSrdOPFk3Efa3wC4 + arT4paoj0FpBayqcldJOGI9N545eMVLhp6X9q/Eq71bOlTd0oMrEqpOGOfPHWeV3bcz7zXi3rzeZ1B2Z + JUbpvFMi4bxS/dt4t5mXDeKa3PVK7DmlKq2zSxVbxSjUaEUT/EZWfzk7t1ldzvCLu/sP0D7UeDPUzppM + 7EgdMI2J9b/xWiUYB/bcgT5H+xupUTtnSqKMtSpVW6Z6gLPfE4nXfUFALeuncTh6ra30vxPTnJxq3cNx + QKMKA492EhfiXXAp/wCP/tORS8qttUcBfzL1iPVLDLFD7aT/AKzjcX+3tHRBdNV4oRqICDH4mlV+KOdR + zR0j805isw1NqpUnb8wP+srPUXTz0aWr5lYGC2p04XU1eMOFPPRDeheVzxiqQ2mvbD6mc2rBtWoUgv5S + VhqT4EpfqZRgWhwGvVvHi1fSf+It9XyaQtxSu+33ml/dDbTK0uw/8IL/ADQDAKwY0tXzjMCZxBaZvnw2 + q7c/ygyCrfVW1BWqn9ZWTDLhnpJ8sSRFo5wa9LTjyaVoK8eLGhq167Bjl9PzMqPWqr4jNJxS5g1wgXPr + K70qOrJuKek+rShCHi36qX3l11GMe6cjDky46WyhtdxSPw8rQRbIbNXG49S0eyyy4rxz7YqrPxKwRjkr + SY/qZ5w3Sdz9rlxSrdr6lOic06NJaY+eMn9zOGM7uP0XwvXu+VmQhCaXFEIQhE5fSbdLhbXPBKt/QGe4 + q93WX8IYcrfLOR+kxANjPSvsealXuuI2NfBp1aIYoy6lOGwcj5NFm6N3R0/EcmZi3OdnuyfE+MPrpUUp + W461quQp+XmfpOlT7MK5Vj9+TWo6d0cZ+eZ6slEUqapRGKagKqqAoUeixUNVdlx+k5XmX1fScXw3EY+b + wq+7G8Zs0p1TZ1KmrOFpDWVwcb46eonM1bd6LEMhBU4II6H0M+ne9rAMcAfSYnG+BWnE+G3NpUo0qK1j + 3pqU0AYVB8R9fP6EysOZ/S5uo+H7RS8S7OcWueC8Uo3FoxFRWAIB2Zc7qfUGfR1K5t2VSwIyAwXHTM8S + teFXXaTjdClSpUTQtVWia9KkKYKJsC2NixAG/U7T2lKb45AHx8pPLmKW/wAVxcuA93q4H7aayvwWzSmC + FNcn9AZ4sfOezfbShXg1hqA/5x5h8p4yZtxeryPkzXKk2EITW8yIQhCIhCEIiAhBOsIL2z7F3FHgF4zn + Aav/AEAh9tFwlbs9ZBDlhcf+ky52C4elp2VsBUytSqDWO3qcj9sS92h4Jb8YtFt7h6qJqDZp4zkAjz9j + ORyDLd9Rh0+WfTgHlLyXsHwo8U7RWiOMUFYVKzMMhQDn98Y+s+gS9o689blPtOY4Rwez4Xa9zaIRlssz + bkn1Jl8eigmTnl3O7q+P6V6fF2bW0HpWLai1c/yhTE+62R6Vz+kppSNQcu0XuDqxlpmXoeX8p3trQeGv + GrbWh8NcfpBLMkZJI+cb91C6t8w2x2rSC1t8/wDPP+HVJEsbdt+/P0WQinpGFyf5RHIr5YID8zErBxn8 + pfuNu3P3z/4Z5x2xpUbPt5ZVdbaPu9OoCR5hycfoJ6Mi1QvXH5Z5V9rmU7QWDgnV3HX5VHmnEr4vP68M + AdXqhsLfLYrkr+VYn8Ot2b/nNn5TOo8RLWvDTTJdrpFYbeWksf6S21arqyoP6Q//AO3RxJnjsJ1bhNrX + SpTqVWNNlKsCvUEYImDxbs3w/hPA6j8PAV6VWlWJxk7VFGcnfAGqbmusRzAzN7RLUrcB4ioD5NCowPoQ + pI/pDFRCjqOLFxck8ljdkUo23AOMXlasMULqqxHrp35fnE4HZ91X4PWqVnDK33dh71abVWz8iVH0nN8O + uKtPsUr1Gwl7eN32ehUEEn/L6zsHWtbcDsKzjRUW6pXDZ+Es2/6BsfSXcHFvINHq3ODVjc8MoXHe5aoh + Y/4mH/plzmUcrnTMTszTdeAcPHw90P6maekr4jiYvu9fiVCl75w+GfmzOR7CYp2vFdBIqG8dS3rjp/Vp + 0V+wtrK4rs400lNQ/wB0EznOwlrVt7DiFK6I+8LdEtt5lAcy8G5eX/8AqFucSqm3o1LumR3lKkWIY6RU + VQTpb/I+R+cfwmmaHCrSi5AqLSVm/mPM37kyvxumGsFt9fNXq06PL6Mw1fsGl9lRS2g9Tqg+SrAdzt+u + oCDMdPNVGr5xq1EzjMXUg6yOwt93Nh0x5aZIlZQvQflmIlQsuUfKHlDSTS4GWPL850vFM5v4W0LpVXlA + /WIL8jVpxMamrtTypz8zJO7J8RH6xdhWcza38QOOUiMN856mZgpnpkfrDBUMWcKo88w+sn9zajXbv8eY + n3qr0zzTPRSRlXHSORi2rTVHL8UX1nog6hr6XT4bz+scl0+ljjH1mcjcrFX/ACwTw/8AN/xGL6wg51tH + v205x+8ctYjy/eZwYKviJhqDdCYfWT+5tHvzp6ARUrat9h9Znqww2/7wQr1/zgYEfc2qtdRu5B+scK1v + nmImQcEYhj/9zD6iX+i2nuLdfMRBc267qeXzVZkoupsKMx6UiwXbp15pPaTOVfRbC3VoFz/lFS9oZwpI + X1x0mUKWkeX6wCgatv8A7ou0tTlS2Ev6K6tBJb5QF/Sz1eZQZVGcDSfeCMvoNXzj7CDlW1Uu6RLbVD9Y + hurfVzAn8zMZnCog0hUH6w1IzZZB+sn6yDlW0fvVDO1LP1MVK9Jg2qiPoZQDIPEo/WPRwwyoAX5yewrM + 2uGuBq0UA/5slY4Vy3hoDf3lI7N0B+sehOcL/WLTBm1pKzrv3IDSZLokctIeGZ6qWbmydvWK2dWvWQvh + 6w7KzPVpJXOMOgkiVzq6IPTMyWAC8zn9Y0qDvqOqH1jM5NW93w5TmkP5pkdreHJx3gle0JoCow7ykemm + oOnyz0PzkC0xjlc83wxRTT4nP6QwwMXY3P1OufFxS8Du7erbV3o1UZKiMVYHqpHWUzPRvtO4VRpVLfiF + u3jzTq+5AyD9Rt9J52RtO/B2bvgeq4Xi5XFmQhCXcsQhCEUmnfE1OEWV3xC4WhaU3eoTsFH7n0+cywu8 + 9L+ym+tFp3NjUpE3NRxURl2LADcfTrM+RQUu3ouI5OUFvS+CXt3ZcHtLe9uKlerRohSwYncD188bD6S+ + nGGXfLlfzEzHZkbZaVQL8zBe6AbWKuqcGh2t97xYduAFtDjbKfX+YtHfx+qvh0avkZiBrf0qavnBK1ul + TLB4dpae7eTtHcYwpQL7iO/j963RkHpgTGW+t1GFB0x6cSt1H/JJ/vSdH8g4j9tkcbv2XlqoF+UE43fb + la6TKTiVDOVtyce//eSrfI2nRZA/3otBH043BfbRb1+IW9pxSo4dqGaLeoUnKn9czxsMcYn0px2xHGOD + Xlp90RO+pFVYnwt1U/rifO13bPbXFSlUBDqSpB8iDgzu6fLxq+O+a6U4+XuDw1SPQmM+GPQ7TovCprck + nHqMT6s4bW4stjbUu+qjTRVdmG2FAny9wSgbri1lQ/6tZV/UgT6ep0KVPZ61UY5QFqr/AKzk6gG+l+Gw + xyFSv97xDHNWrHPXm1TyX7Yb6u/F7KwrO57qkazKzZALHA/YT1SnTpVG0LcP+HBIb/OfPvbe8+9dr+KM + jl6a1jTVj+FeUf0Mjhw87t/lnDj4tY1WhU35dpfoNpmTRbm6y7bvv1ndfJ29aPNa1rYnOUKmnzmpbVtI + zmFeF9AdmKv/APT/AA86H1GivMGxmbdOuV8IP1MyOzC93wDhozUGKC5UUg3VQes3KbZf/mkH+ULOXZu+ + i4jeJPpXD6vOWqNZ6nhyZCin/q1fqJYRfcn6RiSy4xrNOo/qB9ZYSofUfrK9NDjoh+knRCPJP0ljc+fG + UneH4jGmqfWINvJf0iOwx0z/AHTH3U9hI9Y80gq1jzajJXZfQGV3YY5kTV85HdPHj/lVqVjzSnVqlg28 + vuqN1RNP80hdaGeZKeP5od5dOGDZVVjzbmUqzHm3m0/c/AifrKlZqShsin/ikd904cd5J9pdzjiNtSzz + LSLdfUn/AEnn9zUzqnXfafchu1FULjRTpU1GDkDbP+c4S4qczbzow9F831bvNoLhvFvM+4bxbyau55t5 + QrN4pdzUVVvFKdQyeo3i3lR28UIo3PvInOI5z12kRMIL0b7IEdL+9u1OHWkKYb+Y5M9UTil2vR+UfDie + a/YlXo0rzigrhCppL4mCgHJnp1Ti3ClDO5skx+Kuv+s4+X2+L7D4nLE4h3qkTjVyFbSKRb3WOTjl4Rht + HyCzPftNwOlu1xYj/wDnK39JXftr2epai13b7eShm/oJj2bPV63+jjPaWx/Fbhhlu7PzpQTiNw2oYQ/O + kJz1z9pXAbamTRFW5YdFWlgfqZm1Ptbswp7vhLlh01VgM/PAgcS+iyet4zwt2wvXYc1Kl+mmNe6P/RpF + v5ZwL/a2WU44TTDY2zWOJnXP2p39VcUrCzT8zZb/ADAmhxZUvyXEHu9OW6dtQS3Qt6KDDUSuXtwn5sGe + FcU7XcZ4i2at66KvQUT3YH6TMXjXEQjKL257tuq962G+e8vHpV9tyZ/L4joNl9ENWAGGSmM/Eyj/ADgL + oLtminzCr/WfNhuqpGHLH5kxhqvncn9ZR0r+ti/MB6L6Kr8btKR01OIWKMTpwxVTn9Yx+JW7Llr+00no + 3eqv+c+d+9PpDvW8iD9IzpZf8xfQn8Ss/ivrV/lWX/WOS+tnbH3micn/AK1Mf5z5570/m/SOLkKxbAwM + 9JX+Wzz+XrPa24Nz2k4jVJyr12wQc5AJA/pMWo2Q0Yx1MTIzNQ0avm+Xk78liEIR2UQhCEUmfOd59jVc + Uu2FMVPBUo1F/bM4T/wyZpcDv7jhfEEubSoaVcZCkAHGQQdjIyFELo6Xl+vlMn0X069aiobCfuJCatHP + RwvrkTw5O3fGlKh7lH/moqZOO33FlO9Sg/zoj/Izl/z5X1uPy/Hexu9HmGHP1jVqUebVSL/WeQp9ofFQ + +WS2ZemNLAf1l2l9pNcYFSwouPUOyyvqyPRH/JcWftvUKDW9rT0ULSlTpg6tKjSM+u0X70i6gtJB9Z5s + n2k5qYfh6lSN9NXfP1EtW32g2NTavb1qTZ6rhgBIeLL9KjreL0NtfaFw5uNdnHpWyoa9Fu+UL1OAQV/S + eDuChKEYYHcGe2W3bbhLuweu9HHRqlIgH5YzPN+3hsanGmuOHOr0a6CowXlAfJDbeWcZ+s6OLZ4S8L5P + s5H7MXbcnCEJteLEIQhEQhCESySjjvBnpneMPSdF2V4ZZX1w78Ru1trekB54NQnyET4LXjN5AXunDbm2 + bh1obZAaBpDSc+WkYkzOrf8AhJOVsON8Gs7alb219SFNQFVSSdvcmXv4tZAKWu7fSen9qv8ArON41W+x + 6fqDtBTwW5qXOcU4CsF8kH0nPPx3hi9b621f/wAUSJ+0XC1Vi3EaH0Jb/KI41tv9eJ+3UC5C75T9ILdh + ehH+Gcn/AL0cJ1Y+/Ui3sG/0kTdquE0//qwfkG/0h9S0/wC0P0uvF8V8s/SH38N7fScce1vCV1ZuCcel + Jv8ASQV+2vDKVPNNqtVycaVUrt65MDifwpeuxPbdwvEAmrz+kavEidW04k9suE4zrq/LujGntrwweE3B + +VL/ALwOJl/vx/t3DX5KtsZ519qAe8vrEIMMaDKPoQZafttw5VbTSuj/AHQv+cwuPdprS94hw6utvVC0 + GLEMAuQWB5f0P6zTDiR3q4et6rHkx1u6zslxVLnh/ADnmpUa1P6gKv8ASdObx+rTxns/x0cMuKa90zU6 + VWqwXIBwygY/YToD24/DYP8A3qo/0jeJV0UdJ1phj5b0Z74kYUALK11Wara10znVSZf1UiefP26fOEsk + H5mq/wDaRVe3NwFcpaUUYDqxLRYcSWvL1+OWKbmcHZeIWnBrLK41srj21Fm/YKPrO54/ULcFvCp8KlgP + 5SGH9J5V2f41V4dXeuFSoQDTXvM4Go5J2+U2K/bG6r0KqNb0dNRGU7t0IIlvEvkuHi6oxxRbt+yd4avZ + uxOv4SvX8zTVauV2yf1nlHBu1V3w/htG2o0qJpqSoLZzuc+vvJn7W8UZsoaKD0C5/rEcKu7o4+vMQ23o + HHK/e2S2+c/eqq0T/Lq1H9laM4bWxxPjBBwpqq317tczgD2n4i1ai9TuXenllyNOCRpzsfSS2vay7R67 + rQouazGockjoAPXptK+pLP8A3GTtbvbqr3vFrJNeUpCpWPzwFX92b9JdNb3zPNaXa64W9q3DW9E1GVaY + XJUKAST+5lkdtq/naI3yY/6RfU2uHW4+Xd6D320Q1tp5+O21XGTYhvlV/wC0d/vq7KwFjjI2/tf+0X0v + 4Vf7sf7QUOP260UpMtQY69JO/aC3YMGWpq0+g/1nHBiGgrFS289B4RuHH5LlPF2Kces0VQVqFvPSP+8R + u0VourStU+mwnHljp5oai3nmL/OTPkuUuwHaS3x4HH0ER+0Vuysqo5U9ek5DVqEEbxR/SR/yGbdinaK3 + 6aKowOu0cnaCzVcMauc53WcYlTaBYjwjEPpIPkMi7enx6wAw71EbPoZKnGuHsx01tGNuZSJwqseu8bqP + r+sh6cqPksi7w8a4crY+8DfzClhJE4xw8lgtwv7zgFbbqYKSOhMX+YqPkm9BTi1hkj7wnXHWTDiFio3u + KQ+s84DN1yYhqDzwfpD/ACn4zPkm9HPE7EDJuKQH8wipxawJ5bmn/innGqCsemwaI6Yj/kW9LTi9l1W7 + pf4hFbidnpy15S3/ADCeZ6znO0XJWL/KVnybenJxG0x/85SH94Rj8XsVOGu6X6zzTWdPl+kA45gSP0gd + KFX/ACbelHiloBzXdIL8xEPGLAdbul+s82DafMRwbm8Uf+Yj/k29JTi1gdvvtH/FJE4nw8jDX9IZ955o + zBepjdXuNMX+Ug+TS9SF9ZHwXlF/qI5b+0CsVu6WkDJ5hsJ5WH07jH6R/efhMT0pWfKt6qlzSqadNZDq + GoYOrIjzXpU2XVVCauUZbTmeTpUKtlSQ3qrRXqll5iTjpqJiOl1WfL+L1RL2k2dNam/yI/1kguQx8Y0+ + W88mDhlOnZoq1CrAo7Bh0wekP8lR8reuLWPv+kctbHiI/vCeUpf3a6tN3VGevMZInFb6k7FLyr/ebV/W + T/lg+VL1ZLrSvKU/SAvCQ2yH02nlQ41f8x+91f1k9Hj/ABGnut259mAYSf8AK1nyeN1v2gMbjs1V1Af2 + TBl298H+s8f8p2fE+0N5d8Mr29YUnSoN2C6Tsc/+mccJeODgabwvkeU5eQyKOEIR3mRCEIROadL2Dqtb + 9qrCoPx6f1BE50dGmrwC9Wx45ZXFRDUSlVVyo6kDyiyNiXT02XZyDe+07+qq4CJ+gaSpe3B3QIf7o/0m + BbdsuAvRplq9Wkx6q1Ikj6jaT0O2XBWrNRStVG4AqsuFOf3E4nDL8L77h6vjcfZbH3q7XdUQ/wB0f6Rj + 3lznDUqX1pD/AEkVDtLwhmVFv1NRm0qo8znG00Rf2h1lnyy8pCr0Mzdl0Yc2GfpKoL64X4aX/wDaEcL6 + 5bfRS38tKyx99s2OGLp9BGvfWeernHoFWG6u7H+0YuLllytKlq9cCTUbm81cppJ9BFTiVpTGdDn6jmiv + xqlpIW3wPnv/AEh5Z/YHtrlCtcMcNeUabL+JV/0niX2u8FHCu0rXNOtSq07xe+zS6Bs4InsI44inKWia + h8Rbf+k4b7UqY4twF7gIiVbVgw0/hOxH9DNOBRvE+X4seXiU9l4sIqnEYscJ3l8Rdb9myip224RqQuiV + 1qFQOukFp9I/xWiBn7gNROxNKfPP2R1mt+11vXCBzSpVGwfdcT289oHqHnoppB1AYnHzbW+r+ED6lbbT + jNamw08Po6jhgainefL3FGLcUvC4wzVWZh6HJn0Q/HKzMpUhFA2Vcf5zwLtrQNr2ovl6KzGqN/JuYfuT + HweFGz+axDESp0mlui8zabaZZpVN+s6r5i16D+81LRyzIinLMdI+swadSbXZxTdcZsqK/FWX9Acn9lif + Ta9Od2QX0pbXt9bWVCloQJTpKoNNdXQY/wApIOJXZ8TsP7s5xL6qwYM76WOrTmWEvquFDOdum849X1eG + IYhq6RL68VVLv+0evEa/TWR8pzqXTt4nc/MydLpydzGH9py4y30vq561X/xSROIVcY719PzmElcn44qV + x6ywLFwxt5L6qviqv/ik6cTwvMSffM51bgMdjlvyxlS+pUnRalVEds6VZgpaPto1iXRvxIN5Z/mMrVOI + j4UA+swBxCi6sVqo6qdJZSNjFeuG6HOYdkz/AMtWpfA6tVIfrKj3yc3KD/MTMuvdIgzUqoi+rMFlGvxq + yppUL3dLSvUK2T+gi7LQyxx9tsvxABWHcpv85WfiBUNhKf6f95xl52voIzCjbu/ozEKDM5+2hXw2g/xn + /SM4lj/VieN3P/aFWLdprt2ARm0tgfyichWfxbzZ7X8SHEeI/eEpFGakqlSc5IzvOcq1PFvN8DRq+d6l + HJSiqVMhpUqt4t5JUaVKrbtHc9HUMgduse7apA5hE126yE7yVzzSNzCK7ZrppksDuRj5SwaglWzfVTKn + y6R5bl2mhgau7j5csMQxaQudWAcLELBfnI9ZjSfeLs1V9ubSGqenVfzSPX7ARM6mhvjMuj7Mp+pY3U3r + EiZiI72X8W8IgIzDMNS75YRAcQ1Y3UQ1TuUCHrDUTEzHG5T0iVdqbH2g0ZWz3TAeoiWnN8VKEITK54hC + EIiEIQiX4ZNbf8xfnIB0k9sOYH0jPdWHutatXTxRcmNDbtDM2tu6dmGrbrG5+kMxan3Tlb3hmNBhn2hV + 30mo+sp3TamA8gJY1D4ZUr/80yc7PPPxRQhCZ2EQhCERCEIRKJoWoxRUfETqmcOs0NWkD0A0iXjacXh3 + WVqepiFtsDwyBWi5ldl0fa0wqeUNWPWQ6hEZ/cw7SPtf7ThhhtWf1jSwy2nb6yHVDLRmFH2ZUuolevLF + DafOQqx9IZaVH2U+o4wpEVaj4xmQKpqHlgqnDajFHe0+oqepkFzUJxqJ2MXSB1JjLnwL/NFJzdSu3/GK + QSNtUmVgpbUSfrKw3u19hJSy565iwpwznlh6fWRO47lvwnaKzDDaZDclNKBSdTdYPghdFLZsGWoW8zLG + 2JXpkU2cew/pFasF1aQP0geCR6ktSO7YehkwOdsHTKltUKhhjqY9qxIYjwiAmpj4pGYqKr4x8Ij0BCKG + 8h6ymWJADHqcmSGs+GyYDIaWmvJlgeY6o4g5ypxK7VWAVAegiiq/wmPZqoazuF6mGt18J6Sqax8/2gKo + Pw5i3G64IfWWDYkDlMBZn1nRu1+tq5OOsareKWvuLnzgtiR0P7w3HY1cfrDVLH3F23zD7nV08pENk/ry + /lX/AMUOb5ydrNsLpI1fOAtKqsw2PzMncziaHGkZzE1Sd7Wt6D9YfdKvoP1j2R9b/KDVAZ5jmT/dK3pm + NFrV9P3i3L68v5RAu3xxqtvj4pZa1rL4R+8j+61s7oRHsj68v5My0apMl+61ehB/WDWtfGcGGyPry/kz + VBWOesXuKv4Xju5rf9Nv0hsjsyJisc9YRRRZfEh/SHdVfwn/AAxbn2ZyaoaorUnGzA/pE7t+mCW+Ue47 + M4gDF7t/iB/QxDTIONLfpDZPszj6xcmGk/ED+kBTOG1A/pDZBjl/JAYoJHmY3SfQx2kjyMNkduX8k1aR + DVDBxjeLpMNk+zKTV7xcmMVT6QAIG8ncGOU/VtDUcdYzOdmh12huP+892LK4znImQfFNRzpDHyA85lrM + uS5eXewZsIQEyLGkdXVVLAhT0kcu3RAo0wfFgY9pSMaammnUSxaf/MU/mP6yAy3YqGZi3QbwDbXxm8gr + 5Y5Y5MUOcb7xm/w5grMB0zN/F6I5hSJUKsChIYeYMt0OJ3lBago3FRBU6hSd5Q3PlAZiePF9lphy8p6b + cte0fEaAYC4d1xgCpzY/WWR2s4jhtToc9DpE5zf3MAdI3En6cLc6rlDw3Tf718RKrz0gfxaREo9p79UJ + NwC2cjIG05onaHeYHTEDixj/AG8rdQnaniOlv7UavZVkVx2iv7mjUo17h+7qAqy4Cgg7ek55W5upkjKd + LFgT+bEDixPRRn1HJmaWxai6WI+LOJEstX6Yrn33lSZppvGzNKW92Zvq9jeVK1pUNOpoK6h6EidIO03E + /ivHP1x/lOP4YP7Q4ONuv1mmtQr4iJpjgJtL0uk5suPHQ3RJ2j4nzabyp9SP9JjdpLqtfNSubg66iju2 + bAUkdR/nIVYnw+cjuwWtKg9Bq/SDgBsKuo5cuTFMndQRvDzSylTllBKmyywje8yvHryVJ1fYa4oUONLc + XB0U6QZg2M8xGB/6pxqNpmzwhitNj+JozDu8XR0zrIb2Snx6yqHC1wG/MCst0+L2zeGvSOnrvPJKV0VX + GSF+csJdHlKk/rD6C9v/AGN67T4pbsF0V6R/lYR9zxi3tVzWrAN5KvMx+k8kS6OrOX/WSJdFjkklpP0F + GfWutBeh3Ha0ZYWlIFAdmqHr9BKDdor6pq/4gop+FQFE5BLn3kiXPvLOILiy58m6JL6qrMy1XDE6iysV + LRj3xqHLsXbGnLEtMNbg+sO/9T+8swKPsy/W2DdHSwzynrLD9obzuFoivimBp2AUgfOc49eRG68W8TgM + zlyPTale8Zipdy7D8TapSqXL9Myk9f3kFWvAwCTlk+2svXPNvKdWtnVvIHrFtUrvW2bml0bouKVNQR89 + MrMqq3ilq9bVSY+hmY9TxbyH3cvJ7h2LSs7Rzt7yB2mdEhaRuYO2qROfeEQx3jWO7Qc+8Ou3xNCKe0XC + uW8+WTMREQaVUL4R1ifyzXE0XTiaIJ8UI3Vv1jsrHVuFhkacQhCncRoPLtHAZEbDUtzoLG9ICGo2xnm0 + RPgjtKxG+X96Go3AJhqxE3hDVO5dWowJwMxB5xKh5Wi1LdTPiMIQmVlEIQhEQhAQIrApBqYKk6sR9FdO + dR3MVPCo9oYOo+c1AtcQPM7V4hCIphkywnuUGGrMRebZdovTZfDJSW4iat4RB1hqNztUrVhioflLGRIr + kZ0mLM8Sy8lXhCEys4hCEIiEIQiUeIS7KQlxG1BSJpx14Oo3ixNUTeXqe2cIE/ljM7dYD80Kp+qGTG5g + vM0ct0iPzYaAKDzjFMFJx1hqN0qvlmCx31kIV+uImrbrJY3SlgvvI7hh3fL6xNW25javgeJPEL4mu39v + n2A/aSyHoSfTEkzDCWM7UOjSB2LVWKkmOqHAaR0hzEnG3rFmw/ycGwzddxJA34ZGudS6vOO2GoyPMFGm + NbBpI5wDjxGNRcs2mNc4OIfkiehyxP0gTjT84gyoxBeZpRG5U5mJaL6xoz5QDfiiq3GMQCloatRh7Rhu + N3Rox6Q7x1MaFUDxv+g/0iIobVis+3sJvu9EGdrI9I9Kpx5GR6APDXc/QRwRB/8AUH9BFuo3Siqc4Yft + Bahz0/aRacNzVzq9wIBSGx340/IRbrN0q1ThioH6Q71vQf4YqrgY74H3Yf8AeKi83NVQrn0k7tDBmpWP + NqA2+LEkWt7f4RHaUww1pvBFDDlqpFufY0IrjOGA/SSd8FboD9I7ul8yggKIbwumn5ytlXY/k0Vw2rYe + +0d3w0scArGi3PNzoFj/ALqBslWnp/MJPiZgyLWHxBICoMcqjTFe2LLy1ae35IgtSy470fp/3hsgxhKq + AtskeWTV0AxI2tCNQDg/3f8AvBbZ/wAYGfy/94bP7Ha79UmtOuBHIyseYDT85C1o4HM/10mKLWrlQrfp + SMNhUYP8pQ1Jtyg+pj0qUQ3gH6yqLV8YVgf7rRwoOqsCT8+6MXcVmD/Kz3qY6Er84i1KXNsQv5WldaTr + 1J+it/pHaDtmq2n+Vv8ASTsqMK2jUNLbE/WCG3xzg/rKqKFXGvDH8rf6RyKpGXqnfpkEf5Q7j+1nG/wp + 0Fu3UH9o4U7QnYH9pVU0V3er16YBh31v0NUAY9DJ3HYHsK1otObY/oI5aVnjwH9BKS1bcBsVR9cwS4t9 + LZrAf3DJ7/8A2PrD8ryULRhhR+wj0o26jlA0/wAomYlzQ7zHfYX15pMLi3JOayw7/wD2DHH+V5aNpqyu + NP8AKI4Ubdm5Sh/uiURVoEMVuEH1ju+oKGK101fOLvfxr1i/ln9qjRpUKVGgE1sSWwoXYdJyGczd7SMG + rU+7YMNPUHO+TMGUXzXWv/6uohCEdyUjuXZiTljI4YhCN7p0GdvWd9wrg9tSsKYq92apCszMNWM+X0E5 + fgFkby/Qt/ykIJJ/YTr3U4Yq6az55ma+dXufGcOPnLkKVuFWZDBhSf6FYwcIsf8ApUv/ALoiKVZQSSuP + hEeFLBihz9InJvbOLifYQODWDN/yqX+JoHgtjjalSH95oul1Xrn+5vDu6oVdTH/Dqi72ZxcX8JBwKxB3 + SkPq0DwGxx4E/wATRQKpPUafzLHlaqrzEFflDvSPq4v4UP8AArIlv+V9Kpgez1kRynH/APNk2ir3fL4R + zaQDFQvnCnGfiYFYfYx9PE/hV27N2nkTpH5o89nrRl0rkKPMPJSr4wuNJ6NmOTvdLDPMD8OWzJ+zKX+f + huZ7YcKFjToVKJYqcq+WzuNx/nOTLZAnb9rBVbhSmrjSKox+hnD+eJrgqbb5jr8Dj5Ux9N0fY2xTiFzW + p1SdlBGDjznVJ2bt1GG1u3znIdk7pqPFkVTjvAV5jgZ6j9xO5FSqThcHJ9Yss0fDep8ZhxZ4eTaVb/dy + 3xlRVH96Q8R7P0aPDbmqpfUtJmGpgeg9JfSpVUsGwfSQcYqVhwm7LY090VO+/SIzy35bu6np+IxULzdG + 2kiNK+rYdJIh5ZrfIZ1pKhHTc+XuZ6NZdmwtrTFSrVFTSrMo9SMmcBwK2N3xW2pYypqgkew3M9QSrWYt + kdD4szLLNHw3s/FdKcguVGnZ2kOr1dP5QI5+zqNpFGrVT11IG/pJUrVccu/1ki16unphsRHK3sPS8XrV + WTs4V/8AGf8Aw/8AeOHZ1gM9/wDqp/1llKtXGWHKvvJPvFVW5lJ/lg8rZPScdVHZ6qoz3wP0P+sd/AKv + /VA/umWhcVdWFB/WOW6q4bYH6wOVp/xcdTHAa2G/tgPo0X+A1v8Arr+jS2t0wXnGG+cGun6BD+sPtyj/ + ABcdS/gFXH/zFL9Gkb9nqx8NxS/Rv9Jofen1YwT9ZG107eFD+sPtY/w4We/Z2vhv+Ipf4W/0kD9na+OW + vSLe4b/Sa5unx0P6yM3VUnlB+hh9rH+HisGp2fvMtpeiV+ZX/KQ1ezt8B1o/4v8AtOhe6Y6jg6fq0iNy + 7M2kHUvuYfc0/wCDiuVveCX1OhVdwhRVLHSwbYbzknbIznrPUKtZ3WojA6WUqdR65E8tr5pPUpMMMCQR + 8jiXhm5e7x/kOlOJEo3aRO3vFZpE53l3mQzRrHCwPgiGETj4JLao1a4ppTBLFgAq9TIAZt9l6ZbjNBgD + hMt+g/1iXXm14cO/Ixm/wy75iber8tMQ8OvMn/hKv+EzvTcVSzaSfbmMb94q82rPtvJ+5/C+g/47D+3C + fw65U81tVH0MT7hc5b/h6v8AhM7zv6uM7lvytGi5dz5/Qw+59aj/AI3C4NrG4xtb1R8wYhsbnzoP/hM7 + 1ro8pwYn3iqSwUH6GBzJR/x2Fwf3Gv17hx5eEw+6Vx/4D/oZ3vfuviB/WM+81VOFBP1lfc/yf/H4f24M + Wdf/AKL/AOEx33WsP/CfT8jO5+8vqxg/PMDXOObP7xnMx/xuP9uC+7Vv+m36GL93rf8ATP6Gd53p64On + /DBqpzjD/LEX3LT/AMdj/bghbVf+k36GBtqv/Sb9DO+Wu6htKEL8o5Kp9CW/DiH3P8l/x+N5+lrVAJZG + /QyO5o1Up5YEKTgZGMz0LW+Mikf0nPds2qslsMMKekkHHn/7RnLvxcvU9IcQo7uOhCAheTXLegausgFw + o+ESu66c/OdR2YvBSsrwEYKI1TONumJzLMWdjDe/FtngYYiO1o8yahSd2woJIGcASOafAXehxGiaZAbV + jn6EeYMN6808eBkg0X3aqfJ/0McLaqfgf9DO8SurLlMFT0IIxiHfahnCftH9162PQ4v7cH92qk/8o4+R + iNRq/hYfSd29cdOT+UkQWsCF1BB/MRD7qv8ABj/bgzQcHwt+himi+MKG/QzuXuKSsoZkDHlG4jWuqQOF + NIt+FSsPtpehxP24YUn9Gz8od2R8B1fKdt9+ALcgPy0tI24gnVkz9FjOWl6PH+3Gik5BIB/SR1aJKkKC + T8p238SoqG1DH0WMfitJRuM/4f8AWNzU1J6THXluDZCrEMCGHliNWbvaK5S6uVNOkQwXS+2MnMxT4VMg + vNzwMFB3NA5sLJe4qac6TpPniRpg1F9J2tLjVuq4VH0ABRhfSFr0/Fjyb26uNZSDhxhvcYjDvNntHe07 + ypTNNCjKCDkYzvMKIsuTE48kHZSAekuW1Kq1PKglQcbSKzIW5pOwygIYjGdszqv47b08hKThR00gLKMk + tOHiOTatzfcOfI/pFW2qnwgzo17QW/8A0n1euBE/3hojP9kf0Ev7G6fo4/7c792qqMshgLeqdWxnRDtD + R/6Ln9IHtFR3/sG/aL7GPqw/tzhtq3XBii1qt8Bm9/vFR/6TkfSH+8FH/on9ozlWPq4v7c/93dThlMcl + q58j+k3/APeKl/0mA+Yif7w0f+i5PzEfetP1cX9sX7rW04xI2tXXym9/vBS3/sSfTpA9oKX/AET+oj72 + Pq4v7YP3V89IlW1cU2LDlA1TfHaGlja3P7SOtx1KtCojUMBlZc5HmIu9aHHAHTc8tEshCjckD9sySoj0 + 6akgYYDEuWvEHpNSIph2DBsN0OBpkFWq9cUw7cqjSox5AwwucAKm+Tj36xithW9zJO71VGGcqokdJcls + HpJRWjfmcW3WCtp8UU09IUsT1HlHvTK+IRgz3Rg8zfKNfdm9o5l0t/dgi6lz8RMWnepbm7k9YIebEkdQ + FYqcn5RERSMscfSHY7iRiY0f1kxUYwudXyjQvi1CV2M9wqqB+aNb5STTqb5RdP0gYJG7pyCtPKgPjfHr + IHuEWg7HAZcZX0OZzqXFUeB2A/KTGPUc53O/vJ7lu16s14LrkQHTpAOY8Uhqzoz9JyNO4rIeWqwI6YJk + j3twy4eq5Hzk97a4dWa8l14oox3T9oJRU76B+k48XVb/AKrfqYhuKp+M/qYd7UdaF2SURjLIAvyiP3Ss + wVAXX4VE4/7xV3w5H1MFuKoJKltR6kE5i72b1pdgBRxzpj6bRR3AGQM/3ZxffuVwWcj0Jj1r1QMd6wHp + kwNx/tP5din3dlyo/wDtMdqty6BQNR/L/wCmcYtxVAwHYD0yYd+4YHJyPPMYbKjrguvp3Vu1dqK0hkEj + bqxHtJ0WgzNyZb5Thu9cNnJ1ZyGzvH/eaxUnvWx8zJ8xh8gG9l2ne2gbBQjHmynEiu6lFlU0Q4qKeiqV + DY8pyJuqxGGqsV9MnEHuKzaddRjjpknaPTD1wngulS+pVLukjUtBBOVyT5beU0Q1BmyyY322nCVarFsk + sW9cyUXVfAHevt05jtJ008fX9i7N3chqQ1cnTppy0e7W6qx0kYG/WcOL2uBy1nHyYw++3H/Wq/4zDTb/ + APIF29J6L08qhCk+8eGpBm2Iby2acPS4leqCFuKgX+cyQcWvqYOi4qjP5ou1qx+Rx15LtmqUMbB9XzMZ + UukVqaKCzMdJw/ScZ/GL7GGrv+u8mpcavEcnKsxULzKD0i7UrPkuN8auzRgxyofp7ywlF6mkU6VR18WF + BnD1e0F6wxqRPZVxB+PXJqU3yF0jGFyAfnvJ7W0PkeMu1vEe2tatV6RTSCylgV5vrKvDKwalrqEFmYMM + 49JylXi1xcjDgYbbAJ/beXLe9NKlTWvbsaYXGRqB+e+0OxDyxj1uGeW7rhTRfjQt5rkNI37oNhjSP5QB + MI8U4auna9YkhuYgY/1hW4xw5ghp17tG1b5pK2B+sntboeq4rcK0WVgwpcvxY6ftBBbnyon3YCc9W4vR + ptqS+r1l81ZMf5yM8cVagKVXKlt1bOAI+xZf7eI96uoe3t8ZYWxU9eQRvcWjatFK2OPyj/SYFPjtEMxJ + Qqd+ZS2IPx0Nq7usg3/Cd4jBn/r4mp9saKI9u1GklMMCCFXGd5yxfpN7jvEfv1GmNQLAk432/Wc/8U2x + ENN851uZlyLj6ZIQhKuKIZgJYt6RrVFCglicAQqxFdF1vY61s7ujXpXFEGohDBssNj5HE3zwvhW+gZf0 + BIxOfs6A4c1ABwjNlmOT6TTCO1Nnp1n0qmpl1bY/Wc+eCu76nodYcQOlpW4dYAc9syD1NUxn3CwGAlCt + 16qxlalcLVZy1V004w2nVLD370F/sLh2Yjqq4z+hi0/l2nYm0pf4dYFck3I/vH/SCcOsqjLSU3RJ81bS + P8R2mdUvriq7d5Vqgt+Ikj+skpi4qKxosjKp+EEYj7HXloHFdBaY4HRestFEv3JzgUyrAf3s4ip2ZdmY + CjxIJ66qf+syy12pIqVzqUb4qnI+girXuHqcld9K9c1Tj9TF2VHa108EH9oqpxfk6/2Rx/SI3BaGVzU4 + lTz+Kix/oJWStVqMQbsJjrqqiPqVVoBi1w9Vh+Gt/pJ7Ejtx90v8EoZIW7vRp9aLb/LaV/4Miuxe+utI + G2KDZhTqg0Gq07irSUg5LVW6j5SO8uqNvbLcVrh3YqGWn3raif8AISjFsOXPDEVsftHSo2yU0S9uK1Ru + YrUpFMDyO5nNZ3MtX109xWLVGLHy1Etgem8qEbib4mi+X6jkOTNSnpVDSqAqSGByCPIzrLO/fulI4toq + fErBiQfmAQZxvx7TruyzUattXFYoHplWCtncHr5GJDW236HN7u0dbplvroaccUpHJwcq2B79InEL65qW + VVGvrYqVK6VpEFl9AdM1Xo2Z0le6LY6An/8AGUOOJbjhNc03QNsAoYk7n5SQL2eowyx4lW4jpqjlaMEU + Nia3zV0PZWsbW8qVlrUaRClQaobBB69AZvVO0FwihaaUHOSrYB/X5GU+AUqVLhiFmAqMS3MxXI6Dy9pf + d7ZXVMAN57lT/SZIL5L3+jwyw4gHW5lLtLeBmzbIVI2VQdo8dpbvVn7oP0MlpG3XbVSTHTNVs/0i1aic + pR8t56Wb/wDGHYXXrLXlox2lvMsEtE0+4Mk/3mvG1H7mP5cNJKFymcNSqnP4qpUf0kjuFquFVCpHh70t + j9odgRrJPDRHtNe4wtigb+VoqdpLgf8A0HL8mkxrIqKO6Q5wpZarf6RzsqlgyAoOhyzBv2ho/kazP2gH + aS4Lf/IfTmj/APeK4Ytp4cdX16yP7xSVWxRp6fFjLf6RguBUZtARFx+aGj+SXI/adO0Fzq5uHP8A3dUZ + /Hr07/ww6R7NK7VHU5ZqWn8Wo/6Sakzvq56Jby3b/IQ0BMc30y/x27XVq4c+48syJ+O3rFscMIX+9Jko + 3C02dlolc7MrNmWRw+/5itCkVx8LMSIGj2TDJst+P3YHLYHV82jH49eNuLQLv5luk2k4beMMmkC/pqjm + 4Zeru1mhX81XT/nFvEq+rN9Nz1btDeojFrRAqjVk52nIV65rVXqv4mJJ28ycz0LjfD72rwq5RbABQNWo + VtRwDk7ec81J0s+ZWCPq8X5LDPBNuyQnZo1jAt4oMZpeTJAnxRrHaJCJ+ZqcKua9olRqJwrYBPngHMy1 + nSUeHXFS3pVaaI9Nh8OTn5+8Zr9unpsHN3j7KROO3hDBghOfERiL/Hb3BGimfp/3kD2tyuy0AR+VTIjb + XKn/AJGPXlMNY3prznjbTtx2/IzyD5LGrxy+9EP0kXc3SgnuBp91zIja3bA/2GR/LFrGlz5/61puN36j + BRBv+GRVONX7LgNhfyiNa1vGGDTb5ikf9Iz7rdhd6LlfkYBi0uXP/WceK35zzt+kenGr9VAV8488Ss1r + cb5pEfSIaNYEl0x89o9Y075Snbi15nOpthgjGxiHjF422vAHkMyt3dUAkKDmN7qoW2AzDtxp7+f+tbPE + 7onIqVAM5Kqxwf3kS8Tu8bPU+jt/rK70qnNsB9Ync1V8Q2hrGzc+Xfla03E7k9XfH8zf6wHEK4JO5z6l + v9ZTCN6foYul8Yx194dhH28v9ab77Xzk1W0+moyK6u61bC1KpKg6gCSf6xjq6hgwOflK7ah1g4BYcmeS + aWjgISRFLNhAS0VzlapVXp0GRQBqGCcbkSm4IYgyyKZ6YMgfZmDdY01XnvQUcs21U0qoIxqHqMysJJTU + swCjeAbpxUfFoC+rKOUqFPkANoDiNdfNT81EqBKoC7GOCOfI/pDV0HLyn61n+IV85Gj/AAr/AKQ/iVwf + E36AL/lKy0X9DF7h/Qw7SPt5P7WDxKuwwzD/AACH8QqddQ+ekSv3L42Bh3TgeE6pegj7eX+1gX9wo8ZH + 0EDf1iCO8On5CVxSfzEO7b8JhqX2Z/2l+/1yPGdvYQa/rt1c/TAlfQ3pDu2/CYajvznXVw9YDUc4O20q + GTOpUNkSGQmrDJV20lMkMCvizL33qvjGt9HzmfTGWkr5A5ZR6qxUPEtzXeqFDknHrK8lcaVWR/FIoVXz + PpMVqKRjY+Ylg1ySc4/wiVE6yYxlWCnqlFcjoQP7oga7eZB+gkGfKO0yt1d7S96TudH6CM7xpHp2gflH + uXcz9RBJAgjagPaIIzQQSBFDumRz6AxxYBug1SEEGErcUy1APgi94MdJBphpgLFYWtpXlEO9Uhh6iVxm + GPFHumdTcL3ZYZXJMkStp1jHmWErr5DPrFPiYesQ6JTw2mm5zzNtEo4GreI+5x5ARUwBDcapKrZU46wZ + yzYY8sjfcNiCNyrvDu8xOrNyjT57RwAXb4ZG53UfWJu3iMB87ilqHC8p5icSUKBSUKPm0qOxZlHpHKx9 + ZRkb3FZzs23lGI2R06SMOeYsc6o1GIX1j7zcVnH4Y1vzRi1D5w7yPuIr38Jb8a4+RiLwssSFqr+hl1Kt + LUwL1dONySJGlxzMEcqo5RqGqZdmrucMaha2Zr95pZdS74PnvFSyJZgzoHB04IMmt7l7W5YU3CK2MnAO + 31li6q1a4V2I1AagQBICRhilX/hjhsZQ/Uwbg9wC3g/xSazvazZBJLAaTmW0vlVW7wOXA9ZRgpaYcfHm + Wb/Cbg74H6wbhVxT2IQZ95uUeJW60stQqljj/wAX/tIri9FVv7GiUb3OqIG1en49bGxhwq49EP1jhwq5 + Pkn+ITSSpX6g6/yqse9xVQc4KKx9I+2Dp+OxqtjcUWUOECtsGztCvw6vQpd64QKehBDTUrr95VgpfUcY + 5ekoVr6q9u1vURCyksGYb+mJDsubk4scd7oLWwr3Ks9MIVB08xkicKuS7gBCV68wlnhN89sGQUaTgtki + oPLHSS1+J1VuapSkiJUOdK9NoyeOHFoVd1T+C3Y8k/xiKeE3QOCE/wAYlqjcV8k1HIVhsoGqXLane1ab + d1QqOWGQxXAx8zBdW2PDgniw7jht3SpNVqqAg8wRCz4Zd3dLvKIUrnHjAM3O9uUotSuKdAZIXmIz/WYd + pdVba4bRjSTg+Y6xCrYZ8OOGRtdMn3G5Wo1IqAw5dyBneS1+F3NFGqugCgjJBEuVqla4oKe5JZdxUUek + a99UrWD0mALZGWxuN49JafVxGxoaXBrxl1pSyh6c4h/BL/Ge5z8iJes764FKmqEBC2N0Ev24vK1wo10k + yC2Cyr/WJUPNth0uGQXN1+G3lqrNUpFVHnkRbXhd5cqHpopU7ZyJr8VoVa97Tt2rUnZQwOCMbDPWJw+r + eWtBXph2p75UHYbyNr6svpxMkd6LPrcGvaIQ1FAVmCjBB3jKvCrtBqYDGdIGQTtLt1xS5q6Ep1ar4IbH + ofSFhRatWY3Bc1G8JIZix9NoC78yeLBfFkvbV6dRQ2ASdiCJpJYcSamroSV05DCqOn6yve0KtqwSsKgI + OQrDHrLdg5KqXKFceHbJh5Y4sTaNCvDL+rhqeg53yaoGP3jE4XesrFRTIzg/2q/6y1Xrq1ZqFOm4UkKS + Dv8ApiXkSktPTRDdMlqhGM/pDbu2w6fHNdWJU4ReAnIT/wDur/rILmwuKC5cAAejAzpko1aqsWNqij4m + B2/QSC/oItnUGtDUAJ0qAB++8fdHL0gClgW1pVrrmmAVG27AGTtw26xtSGPZh/rG2pNKtyv1AXy3z1mx + atQrkhqoHsq9P6ShsuHhMzS6bn7q1q2oU1Fxq6bhsykTl50/FbNCtBKZBfBy3XM5x6ZpswbqDgxDu5uo + 4XjdUMIQjuWVRky2quhBwRkZB6ZlUcpnRWdMX5Fa6fRQpgIAuDj0ES6ujgw7nR7s8G5NNSGbQPPfAlo1 + 71bYhmcKRpyczpEtqLWrUKdZDSYcqty43z6yrxSvSFrTSmcOGG2MjAyPMyHMb2DpcuMVWzeH3t5RpBaa + ZX1wd5fS94kd3tmdPIlSBNC2vXXh9PuyhqKNKjul5d/UyU1UuVSq5c55eVlUD6CRu6eLidBuxBc3BuXZ + 7bWxAyGGcTVt71xa90Le3DEbs1LcD2OZI1SlSroWL6WAUbhcSwlYasKSNXMSrRrdXFxOC7bHSvcUS3ds + iKW3IAyf1i0q1Za2onXk+EMRLbXgPEGFSqQu2GI/L7y6bxEXCVapXG7BVj7wqwBV3YlwatWozFQje+WP + 7yvc1ag0hwOvkMA/pN0V7SrlXpVS2Ny2F/8AeZXGbq3sVpGiM1CdWlsNjaMyG5+oTiFWzOJ3AoNTNMgV + SAxAGwGPQzIr3T1zmoST0HoB8pHd3D3NZ6tQ5YnJaQygvm+bneRfPibCAgBmVc1IN+s1OAN/xgpdRVGn + Hv5TOVScUwCWM2uHWNxa1kuGV6QALKzcpJx5SF0XV0uGTmIXQUuHVWVQ5QNjoWOZn9oLM23DSWdCxYDS + ufeb9O1q1KVOrUrEMyK2KlUtnI+cxO1dIJZoUJ0sfzadh5ZmWGW3V9J1eOuBdXGAyVUy2B6yLo0t2Wjv + 6YrHCahqPoM7zovleMHLTdnQsatK1phaqcoDYP8A7yvQp9/d1XJCCmA3TUP6zZfh1FaDVaZpGmQWVlO3 + Q485ncBoh6FXW6DIAKsR5EzLv1tvpuLXgKdLZO8QqUPTK6R/rLL0BylhTCgeQDZ/QwtSK1NigQupKjGO + mess9zegKadCnoPqxmf2bvQOITYWa9r550fCrKAsjZatFtKly/qqrvNhKNdmy1Clq+emPehcMVC29PUP + zDpH9v5D0/6WQjVs8qEr5KwEa5rscsj/AMqrNtLW4UZUUgud2NVVkiUa2eYoF89LasfpD7QpOnUsJ8tQ + YrSKMoOTgyPh9B66uVpZZsZ5S06O4taq2tR9Y0BWYlnK+Ui4bT0WVPRVpBSFI1EnP6RPL48U/wCY2C2X + S4TVXUeTU3QMGXP7bSulrxZaqhaISn4T3bnpOjZ05g70x9DmV7quKVCoxONILfpvIOVXU+TgA3vWrHqp + fPWVWJ0qxUnUcAjpLKWV2q5+8VQxG+Ccf1mfZX3f0a+kk1GqhguPIzRS6LKxUjSrFW1NgDEtWy4sx87m + XAvLUK4uNdLI1ZJ2Hmesu2tw5pLVDUyGUMKelm2+rSK5Dta1AxGlgRzEKNx+Iypwmo9WkyA4VGCjbY4H + rJ8J5tTNxdDbIvLiouaNClUqD8Taf6Geb9pK9K54vWa2pLSTOCKfQsOpE6HtNxB7Gh3FMkVao30novT9 + 5wrE5mvEavD+V5zNMSAd51vZXgFrxShWr3hq7OKahGA3Izk5BnJAZM63sjSf7rX0sQutf6GXlcPTcZyZ + gmy5u7tzb3dWi3WmxXPyOJX+D6zT7RUu64nXHqQ36jMyn85R6sObDsySAdp6T2Uqd1wSmGCFWYsGJOQM + /wD/ADPNvKdpwy4ROE2mskOQVAx7mRmbL0PjEOXbdalehnLgf4oPXpNuqYb8xmKgLagx/WBLhuVwfhmW + r6PeP8tt7pGXCgfrI2rYDaSA380ysEFtT8vygrDm0nmj1P8A6/y1Bc6s6qoCxproy51gj0ZZm7Y5n/aU + 7latu7VKJ102G61NyAPQQCy5P+pvVtd5RZmDaOU+kR+6bYKmn8wDTC4ZcCr35BIdqucHqB8poGoi1FRS + Qw9oaSnBwzN6rf3e3086J7nSIfcrRm5gNR9FEpCsMbHmz8UcKw1Lg5aGn8bRx4v0rZ4bYs2WQaWP4RIn + 4VYEeBCvylZ6xXUXbCjz6RBW1KpVhpbcQDKlw4/5XBwzhijHcD6CM/hPDMsXpIF+crByy4LkxwYLstXL + Y33lHdR2Yfwnvw7hmWKLTDD8QM5ntVb2ls1BbfAdgSQvTrsf6zodSjVqzpxzNnpOO4xdLd3tRwvIOVfk + Ize/Leb8g8RjoNLZRM3+zVila4ercA90FIz03mNQQ1aqqBliQAJ29CklC2p0lPKoC4ztnzMtdXn9F05y + Z7fRJ/BrBixQ1Eb8pnK8Yp0qPEqq2+ru1OnLHJJHUzsdQwxUjUObrOW7QUBSvldfDVXV8j5xCr5bq67i + xMRDVjnaaHArdbu/VKhKJgkkewmedy01OztYUeIrnwsCoPpmU+Ly+EHlBt1uC24H/Nc7dYg4LRbpVP1l + 8MDqGsCHeAKwUgt84d7fQ/58Kh/BBnCvrX5yE8JCfA7r650zQo3QaswYjUMr7SU1QiqFPKPeHe6p/wA+ + D6LGq8NK6tKH9ZE/DmYYpoUb1zmbnfKqNqIK/ORVrgUqWc5yQJRm/tll0uFipwyqqksSVPSO/h9XfShK + /MTYpulOmqOQag6rqjXqhWqZzpUajj0h9jL/ACYhuxmsatMsNBP6RHsax3Wk4+WJtIwqKhQ5UjVzeUfp + Gnlzqj72j/Li+rm7q1elbOXDhRjJI95jTqO0NUUrcIp5mIJHsP8AvOYiXbeX1GBhlon0idQXOFJwZqvZ + lTnD93jxKu0yBtNi2r3AsW0EmkDgg4OBAz1TwgqNVvaJpKpYEKTtkaciUczQ4ndfeWpgFiFUAbY385nY + 3gu6c9bdVqwpd/WYeilumZMinUyOilgdPSRWTvSuVKnDHbPzli9V6TqcnvMaic7xk8A1ujenpZSwAydJ + jtAz0QL8oFnqUVYnoSTvH6S1NTnyDSzUwPyZpGfCn6Q0jHQbxw5lbUeaM31MMmV+RqU01OzABpWcaa3M + dj6yw2c5z56ZDd7FPlJfUmV6QXJVwW9FgihhykhvSFBjqOrfHrFJC1QRuCN4jU5RRQdST9I4UU9Tpku3 + 4ozwq2/SX4lqatFB6xRRRj0P6x6YYZU5jgBmHiYFRwFwfMMQZJXVErYxsBvpPnIqvKzDphpM7NUUnHU6 + j8htMlo8eqEU2VahPXA/eS2yhuoyMRSc0HJ6sen1iW2UVidgRKIwPNI6AM3Jtjl3kdFAwUMpJzg7yas2 + AoV8uxHSQ0305G5wcnaPxUhuGpA1G/ACFkporpJYfvBcpRBPXIY/rC6qFVOB4uXMR4jQVaiqMxLbKTgS + 13K4jRS/4ZQqc3izHUWBXI8UYf2A/s16KKrnJ6eHMZRUMrajJavKrfKR0QArCGjckndyCPP9YyqoReXJ + bwyXVpEhqMWYAdBzGNPEV2mBpYucN4htCjURqil8lTnwiCksrbY2lYMFrkMOQEiDb9+mLjQLvrhTiWUu + WRSCTp6jp0lS8UrpPxZj2xVoA45lAXMgpMkXUvfL95JBOhjuAZfpLSK1NbalI5WzMaqoVUK9SN5Ys6+j + Zs+0odeIw5NPkrlUoaZ7suWB3ztLFncgqvIC3h1ZlMM5WoKY8WW6SO2Z6VQh9sHfPrDY2pyo7LVc1QzN + kBR0UDMit6jszOx5gdIXEZl3DEOCqjw5xJFQrS56JG2rVBAtvsV3SJVDFdZf6Hac/c7VW+c07W6pVFbv + QARjG5le9CHBUDVk5Kj2idJ4sebPuB3R02FFqZBByN5ZcPcsCxRADygjGZlBipx1E0krE0UIAJUdPSI/ + llx5j4basry4qqyO7FVyNsKPSWb+5uFtqShKqU1AUkscEfWc1b3T0nYZYKx6A+cuVryq9LDElMaQGbVJ + cN3dh1AY6rNs9Kq1QsqFQQQdpjaBqqBgQ2MgD1zJOH1zTLAnZsL0zG3TEXS4J3xDVzcvIcgLTUrgrQZW + yGHKD5Y8xIre47pqmykNgEMM4kbk0yobO5DH0kFfmrMUGB6AQSzeVNXQBneyyEQKpLBlEgvq1alTVmIB + wJQtr56VFqWeU5zvK11cvX0gkkKPOD6tnqv+vhtSzu+arWOk1M7Z99tpUSrWfCAkKT/WZ4JHSODmm2xI + +Ri8XP8A6F8N0FK1NKyZgodSNWrO6mMD97bsKaZddwVJJJmMtxVVca30+mYtG6rUmYq5Bbr7x7G1/wBA + ABW6VY1rumKhyQQpBiuz0b1kp7tqKhfSUkrMtfvQcHOcgeckqV3qVmqseYnJPSKg5fHltdALd2BALKNR + LeZmjRXVuoBXGozAfilZ33CajjJC4Ji0eKFFYMA/pqMd18XVmDbyXAKvq/5Y6e/tK71RcUqv9i420r5z + OfjLGiqUxo09SCN/2kVvxF6RGXfTjBGfeILTk60y8DJqcKyYVSpNTJHptiaLIGoC4p4VgBqVR1J/pMgX + AauS5OCS3TzMntb8U6bBidzqx5QC5MOUxWui4FWohCBVXOcHpMS4YVK1QjzJaSJcFabBCRqxmVQOaGrL + m5XkmwhCFzRLthUxWUDOCdxKYj0Y02VlOCOhESbtOPPsRu64bcUKtBSyHoc6QDjeUe0DUluKApjCBBuR + jbJmNYcRNGm6Nkg4wc9MSW9uqd3cUwhwuy5Pzkdnm9p64z4g/boeH3NBbWgHRCpByQpz1+ca97a0NVEU + ixzkAkqcn5mZtHiQs2pIzA06edJVt5ELqlcXS3FVkGSMLq3GPMxOFodaAAm7atqiPQri4tkPeAsrAkEE + jblzG8MuqPfm3uAiVAcBsHOAPXMrjiFkGc5paSNtyTMzi91b1npm3KlwObGdzmHZXl1ZgCIpbd8tA39t + pd+7ckFsEHYfOFk9EXz29yKopqSQyjmIBwJjVeKUqtrRJ/5y6sqBgHMXiHEKFZkq0dYqgAHOwx1MXa0f + 7QXIS665ThlK1qV6guCtMFtQIXJ8hPPL2ubmsznJJP6DyEvcS41WuqXc4xTGOXzOPWYcvHFPdwdb1pz6 + CSEIS7zJ2Tmb/Z7h1ndMxv7hqSqNWlU3K+uTsJl0WpKtQ1ELkjC82MH1945bgtWBy4UgK+DuR5xO00W3 + EmKKbt65a0W7ppwehhaeVNVhqz7zoaFpajg9UsS9ywOKhJxnO2B5YnMDitjQtjStaVQVAMCocB/qRAcb + oLaaRRcv+ItMMsFva6fm4uN23fWl0tG0pBg4qKqqSoJyQAD5TmvtAvhc29oiFyiljhhj0Ez/APeakqYF + ElsDq+0xeNcUqcTrIXUIijCqDnEWHEjtr6zr+LLicMXa2UDgwyIkJ03zlp2V9WoU2oLVcU26gHbPkZ1v + ZWtxBaFQ2qVTTADEqcDr8pwKNgzpOznaB+EpcUiA9Osqqc9VwcgiZ5jp0Xp9B1BhmHI3bt/FqNbvqlY0 + qTAK3oPPPSXOH8Qq3FyQ2alJMqWLkEnqNsbzne0PGhxC3tre3cPTXSzMCMKuCCPXM1uFXqUuH0EFwmAo + UBmE5XB1tL6Ti6viyycR8F0L3FlTOPu9V2I1FgCw/rHobdhmnSxq/F/7zEe7Cu2irT0katWQ2YC7TOTV + R39FxM+xu3/Xxf2pcWr/AMM4jSD5qW1Vi5yuwOcAYm6UCqpwhXxaczme0BD2a6WOsddODjG/+UfwDjC3 + FlTFQl6qhs5q46k42mjxqCXFj1OGOaL4bZ4nTI4ZelQNqLZAPsZkdnAK9h1A0ALu2PKVuOcQFMcmju2B + UhW1ddt4vBq4p2tQKUGSq8o1eRgceUZ9VxZ5mm22oUerVUDDq2Zj9o3pLaUqNCrmtVqim2D5MCJd1Esv + OdvlOaq1xfcd72odC24DNkj4T7R4YO7Lqurx7NY+2l4Jwo16VYAENSqsobV4DgYOPOV2uhZ2l5Z3aA1i + WZKn1A6Dp0lZ+NVaNzd07ckirWZgcjG//tKhtme903FVRUqKCDnAznAzNjB27vHz6kAMbo+HC74loNY9 + 1bKAoUMCCRjqD7NL/CqZofe0PKq1ThQfLExOGcUKq1vd1gNBwrLhQQPPPnNJL6lUCFrikFHMVaqF/wA5 + Dg7vR4OficR35LnO2o/+JLvklBkehyZzbTa7TPSfirGiylCqklX1DOPWYpO83xNGr5/q8zPlUhchiZ2v + ZbP8PqHozPtvjoJxDTcs+NVrOgtGmiMikkMwORn6x5CmirpOY4s9tL2xx/FA6gAlBqA8jvMInLZk97cP + dVmrVDl2O+Okh6JGeDVhz5meanpo/OdNbd1VSypJghQ2Su+/Wcyst2l5WtiTTOFI6EZElN19NzHFltLu + k1svMAMjTnEbUrCk1MYTmz1PpOWt+0F5SVUUoVA0jIhccbuLl1JpUiV6YBH+cjsb2P8AkuLV12NR2wIa + TnmA0zll7S3A/wDAt8/I/wCslXtPcBT/AGFH583+sfY2h8lxXTPjm2B/uxhXdtOEX8wnNf7yVM5FGmPl + mDdparDBpIfqYdqQ/JcWRWL1mt+KaqBAJQsdOwO+/wC0ucNvBdVGYgFsFiPTfac7dcQNa6p1lpKmkYwD + qzGtfFazPTAQkljg5j1cOHWmOSjde1YaWCAaflB2dtWANOPCqznaPHTTpgGkCRsTmPHH+XBop+sersOv + wfbal5VZu7pKgO4Y7dBJkbFNQmAo6bTBHHP+Jaq9EFSukKD0kycfSnTwaGW+cNNB1vGqra9UHu6hU84B + xpHnChWDUUOQHXlPTr5zKTjtAdaDdNxkSOhxqlTep/YuVYk4yNiYtMf7eIR3XOMXptbTuwR3lTK5HUDz + nKfFL3F74Xt0aqUyihAoHpiUGbaMNXldTzfbmp6LQ4AuriVLTjIyd/lOppIdThiAw5jOQ4bW+73lOqdk + B3nSvdUFrU6tOvTdSQrZO4EG6uh5ccME3WwhbSQQF/NOZ43UqtcYqAhVOB/rOgq3dBQp7+lo8lUiY/aK + 6SqaSK6VFALEr0yYFr1vKZ46GwM9ZpcIqpRvVNQDSdsny95mRRnylXk4ZuGRkXe93heUgr5e8TSQOuPl + OasOLXFsgGoOq7AN5fKalhxdLmqtFkKMxwCDkSdN7XH1uOYC6axQUivULOV5mxLLqCrFXy0z7O5/4irS + YdGK/vL5bCrtzflEdvjy463NdCpXc/3TK1Rg9yEZyVVST8wZYeqEpO9THKurDGYdrcK97UaoVCtkgsfU + w82XL1AIbtZCGVXZyW/Ey7xzMdVQM50sAunPWRPdWi09C1qYGPXVMt7+lTo4zmqCcMPKL20ZdRiHltSz + UK9RGJ5ScfKCXGKtVGIC0mLZ9hMy1v6ffhqpIXTpIAJ3kXEb1KuRSLhW6sRjMqxy6oDeLVuI3DXVwzsS + R4QD5DylTVssaeuY2O8zLNyVYmxwy9pULWrRrE8x1aQMg7THhCjHJxdlNWIZyR0JJEhbrCEIXbuCZZFy + SqipzADA9RK0IzxAp6rNGrgMBuD0zLqEtTUr4sCZOJIK1QDAc/rKHVRmldfOVKHGRvENZF3Jy/sJSLE+ + Ik/WMg5R3tZe4OTpGFzmR1KpqdQBiRQxJ20qtMKuBuDnOY3IJzI4Q3Hmu2tQHAYjMl06WY/DiZ4Yq2V2 + jlqEeZ/WUZVGfjVZoNiqwJ5d8S2PVZk6znOTmTJcVVGAYGRUZh7iuMsxB88R41FcdMjUfkOkieoxDA4w + Tkxwq5VwepAEPdOze6V1Io08eX75kvKtvhsasHErM/8AwyjPMDJC+oEY2A1H9IHiYz6CgKzk5Ye8jU51 + IOrELI84o7dCcQp+IHbIGY9xuuVhyMF9JXumLMoHiElrtpotvzYlWjlmYn0gsL+VujVDDBGGH6GRJmlU + IwcHpEQBqa6Diop2b1jqZFXSGGGB3EYyHbOrNpXHqYUii6tUZWOKgDA7xUUhmBHXpD9j9nlgNR9OaVgW + NViPFvEdmXIbqZMg00ycAsd4b2x7rfD/AO1HPvC5RRWo4HXMIQfVvj6KTiFNTZrUI5t5CFH3Enz/AO0I + RE321LJ5flG1tn29IQkWL6nW9V01aGIjqjHvX9zCEoqPRPYnQg8smXKTuyaGqOUI3GYQjtsLLwO9ltur + /KEIYWBUH8ZlwE9wnuD/AFhCGFGPuW7Ap1Bp22Enof2lHn3x/pCEZ7tj3VKxK1Tj2hVclQ5PN6whJoP2 + muv+RTPnpEgtf+fCEGTREDUZE0ISaMohCEVMQhCERCEIREIQhEQhCERCEIREIQhEQhCERCEIREIQhEQh + CERCEIREIQhEQhCERCEIREIQhEQhCERCEIREIQhERw6QhCrGkUmSqxhCZt14Rkw1GEJNruXJ9YAwhKib + kwyYQhRKzGR5MIQJZ0bExGYk7mEJdyRFyYQhVMhCEdlEIQhEQhCERCEIREIQhEQhCERCEIREIQhEQhCE + RCEIREIQhEQhCERHQhComZMWEIUxCEIRHkZYtqr0qiVUOH9YQhXj7KwatRajVFqMG1HfMBUqOearU/xG + EIro/Ko7GRHxQhHYZxCEIWcQhCERCEIREIQhEQhCERCEIREIQhEQhCERCEIREIQhEQhCERCEIREkTxwh + KIJ1Tw/WOTwP8hCEVoe4Twj5/wCUKfib6whKKZjsahOo5j7XxuPLBhCT+y/Z1AAVto2py1Rp9YQlfk6Y + c2nPqsbWYhhg+UISvyf5RUeequrfeTsTqUeWmEIHqC//2Q== + + + \ No newline at end of file diff --git a/FamilyBudget/FamilyBudget/Forms/FormExpenseBudgetCategories.Designer.cs b/FamilyBudget/FamilyBudget/Forms/FormExpenseBudgetCategories.Designer.cs new file mode 100644 index 0000000..14f2d10 --- /dev/null +++ b/FamilyBudget/FamilyBudget/Forms/FormExpenseBudgetCategories.Designer.cs @@ -0,0 +1,126 @@ +namespace FamilyBudget.Forms +{ + partial class FormExpenseBudgetCategories + { + /// + /// 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() + { + panelEditing = new Panel(); + buttonEdit = new Button(); + buttonDelete = new Button(); + buttonAdd = new Button(); + dataGridViewExpanses = new DataGridView(); + panelEditing.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)dataGridViewExpanses).BeginInit(); + SuspendLayout(); + // + // panelEditing + // + panelEditing.Controls.Add(buttonEdit); + panelEditing.Controls.Add(buttonDelete); + panelEditing.Controls.Add(buttonAdd); + panelEditing.Dock = DockStyle.Right; + panelEditing.Location = new Point(544, 0); + panelEditing.Name = "panelEditing"; + panelEditing.Size = new Size(126, 404); + panelEditing.TabIndex = 0; + // + // buttonEdit + // + buttonEdit.BackgroundImage = Properties.Resources.free_icon_edit_tools_8847052; + buttonEdit.BackgroundImageLayout = ImageLayout.Stretch; + buttonEdit.Location = new Point(27, 116); + buttonEdit.Name = "buttonEdit"; + buttonEdit.Size = new Size(75, 61); + buttonEdit.TabIndex = 9; + buttonEdit.UseVisualStyleBackColor = true; + buttonEdit.Click += buttonEdit_Click; + // + // buttonDelete + // + buttonDelete.BackgroundImage = Properties.Resources.free_icon_dustbin_7709786; + buttonDelete.BackgroundImageLayout = ImageLayout.Stretch; + buttonDelete.Location = new Point(27, 208); + buttonDelete.Name = "buttonDelete"; + buttonDelete.Size = new Size(75, 61); + buttonDelete.TabIndex = 7; + buttonDelete.UseVisualStyleBackColor = true; + buttonDelete.Click += ButtonDelete_Click; + // + // buttonAdd + // + buttonAdd.BackgroundImage = Properties.Resources.free_icon_plus_181672; + buttonAdd.BackgroundImageLayout = ImageLayout.Stretch; + buttonAdd.Location = new Point(27, 36); + buttonAdd.Name = "buttonAdd"; + buttonAdd.Size = new Size(75, 61); + buttonAdd.TabIndex = 6; + buttonAdd.UseVisualStyleBackColor = true; + buttonAdd.Click += ButtonAdd_Click; + // + // dataGridViewExpanses + // + dataGridViewExpanses.AllowUserToAddRows = false; + dataGridViewExpanses.AllowUserToDeleteRows = false; + dataGridViewExpanses.AllowUserToResizeColumns = false; + dataGridViewExpanses.AllowUserToResizeRows = false; + dataGridViewExpanses.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill; + dataGridViewExpanses.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; + dataGridViewExpanses.Dock = DockStyle.Fill; + dataGridViewExpanses.Location = new Point(0, 0); + dataGridViewExpanses.MultiSelect = false; + dataGridViewExpanses.Name = "dataGridViewExpanses"; + dataGridViewExpanses.ReadOnly = true; + dataGridViewExpanses.RowHeadersVisible = false; + dataGridViewExpanses.SelectionMode = DataGridViewSelectionMode.FullRowSelect; + dataGridViewExpanses.Size = new Size(544, 404); + dataGridViewExpanses.TabIndex = 1; + // + // FormExpenseBudgetCategories + // + AutoScaleDimensions = new SizeF(7F, 15F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(670, 404); + Controls.Add(dataGridViewExpanses); + Controls.Add(panelEditing); + Name = "FormExpenseBudgetCategories"; + StartPosition = FormStartPosition.CenterParent; + Text = "Список категории расходов"; + Load += FormFamilyMembers_Load; + panelEditing.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)dataGridViewExpanses).EndInit(); + ResumeLayout(false); + } + + #endregion + + private Panel panelEditing; + private DataGridView dataGridViewExpanses; + private Button buttonDelete; + private Button buttonAdd; + private Button buttonEdit; + } +} \ No newline at end of file diff --git a/FamilyBudget/FamilyBudget/Forms/FormExpenseBudgetCategories.cs b/FamilyBudget/FamilyBudget/Forms/FormExpenseBudgetCategories.cs new file mode 100644 index 0000000..1b3c37d --- /dev/null +++ b/FamilyBudget/FamilyBudget/Forms/FormExpenseBudgetCategories.cs @@ -0,0 +1,129 @@ +using FamilyBudget.Repositories; +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; +using Unity; + +namespace FamilyBudget.Forms +{ + public partial class FormExpenseBudgetCategories : Form + { + private readonly IUnityContainer _container; + private readonly IExpenseBudgetCategoryRepository _expenseBudgetCategoryRepository; + + public FormExpenseBudgetCategories(IUnityContainer container, IExpenseBudgetCategoryRepository expenseBudgetCategoryRepository) + { + InitializeComponent(); + _container = container ?? throw new ArgumentNullException(nameof(container)); + _expenseBudgetCategoryRepository = expenseBudgetCategoryRepository ?? throw new ArgumentNullException(); + } + + private void FormFamilyMembers_Load(object sender, EventArgs e) + { + try + { + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при загрузке", MessageBoxButtons.OK, MessageBoxIcon.Error); + + } + } + + private void ButtonAdd_Click(object sender, EventArgs e) + { + try + { + _container.Resolve().ShowDialog(); + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при добавлении", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void ButtonUpdate_Click(object sender, EventArgs e) + { + if (!TryGetIdentifierFromSelectedRow(out var findId)) + { + return; + } + try + { + var form = _container.Resolve(); + form.Id = findId; + form.ShowDialog(); + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при изменении", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + + } + + private void ButtonDelete_Click(object sender, EventArgs e) + { + if (!TryGetIdentifierFromSelectedRow(out var findId)) + { + return; + } + if (MessageBox.Show("Удалить запись?", "Удаление", MessageBoxButtons.YesNo) != DialogResult.Yes) + { + return; + } + try + { + _expenseBudgetCategoryRepository.DeleteExpenseBudgetCategory(findId); + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при удалении", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void LoadList() => dataGridViewExpanses.DataSource = _expenseBudgetCategoryRepository.ReadExpenseBudgetCategories(); + + private bool TryGetIdentifierFromSelectedRow(out int id) + { + id = 0; + if (dataGridViewExpanses.Rows.Count < 1) + { + MessageBox.Show("Нет выбранной записи", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); + return false; + } + + id = Convert.ToInt32(dataGridViewExpanses.SelectedRows[0].Cells["Id"].Value); + return true; + + } + + private void buttonEdit_Click(object sender, EventArgs e) + { + if (!TryGetIdentifierFromSelectedRow(out var findId)) + { + return; + } + try + { + var form = _container.Resolve(); + form.Id = findId; + form.ShowDialog(); + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при изменении", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + } +} diff --git a/FamilyBudget/FamilyBudget/Forms/FormExpenseBudgetCategories.resx b/FamilyBudget/FamilyBudget/Forms/FormExpenseBudgetCategories.resx new file mode 100644 index 0000000..8b2ff64 --- /dev/null +++ b/FamilyBudget/FamilyBudget/Forms/FormExpenseBudgetCategories.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/FamilyBudget/FamilyBudget/Forms/FormExpenseBudgetCategory.Designer.cs b/FamilyBudget/FamilyBudget/Forms/FormExpenseBudgetCategory.Designer.cs new file mode 100644 index 0000000..91c748a --- /dev/null +++ b/FamilyBudget/FamilyBudget/Forms/FormExpenseBudgetCategory.Designer.cs @@ -0,0 +1,124 @@ +namespace FamilyBudget.Forms +{ + partial class FormExpenseBudgetCategory + { + /// + /// 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() + { + labelCategory = new Label(); + textBoxName = new TextBox(); + buttonCancel = new Button(); + buttonSave = new Button(); + checkedListBoxExpenses = new CheckedListBox(); + label2 = new Label(); + SuspendLayout(); + // + // labelCategory + // + labelCategory.Anchor = AnchorStyles.Top; + labelCategory.AutoSize = true; + labelCategory.Location = new Point(25, 30); + labelCategory.Name = "labelCategory"; + labelCategory.Size = new Size(60, 15); + labelCategory.TabIndex = 7; + labelCategory.Text = "название:"; + // + // textBoxName + // + textBoxName.Anchor = AnchorStyles.None; + textBoxName.Location = new Point(154, 27); + textBoxName.Name = "textBoxName"; + textBoxName.Size = new Size(224, 23); + textBoxName.TabIndex = 6; + // + // buttonCancel + // + buttonCancel.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; + buttonCancel.Location = new Point(303, 233); + buttonCancel.Name = "buttonCancel"; + buttonCancel.Size = new Size(75, 23); + buttonCancel.TabIndex = 5; + buttonCancel.Text = "Отмена"; + buttonCancel.UseVisualStyleBackColor = true; + buttonCancel.Click += ButtonCancel_Click; + // + // buttonSave + // + buttonSave.Anchor = AnchorStyles.Bottom | AnchorStyles.Left; + buttonSave.Location = new Point(25, 233); + buttonSave.Name = "buttonSave"; + buttonSave.Size = new Size(75, 23); + buttonSave.TabIndex = 4; + buttonSave.Text = "Сохранить"; + buttonSave.UseVisualStyleBackColor = true; + buttonSave.Click += ButtonSave_Click; + // + // checkedListBoxExpenses + // + checkedListBoxExpenses.FormattingEnabled = true; + checkedListBoxExpenses.Location = new Point(154, 73); + checkedListBoxExpenses.Name = "checkedListBoxExpenses"; + checkedListBoxExpenses.Size = new Size(224, 130); + checkedListBoxExpenses.TabIndex = 10; + // + // label2 + // + label2.Anchor = AnchorStyles.Top; + label2.AutoSize = true; + label2.Location = new Point(25, 73); + label2.Name = "label2"; + label2.Size = new Size(120, 15); + label2.TabIndex = 11; + label2.Text = "Категория расходов:"; + // + // FormExpenseBudgetCategory + // + AutoScaleDimensions = new SizeF(7F, 15F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(404, 280); + Controls.Add(label2); + Controls.Add(checkedListBoxExpenses); + Controls.Add(labelCategory); + Controls.Add(textBoxName); + Controls.Add(buttonCancel); + Controls.Add(buttonSave); + Name = "FormExpenseBudgetCategory"; + StartPosition = FormStartPosition.CenterParent; + Text = "Категория расходов"; + ResumeLayout(false); + PerformLayout(); + } + + #endregion + + private Label labelCategory; + private TextBox textBoxName; + private Button buttonCancel; + private Button buttonSave; + private CheckedListBox checkedListBoxExpenses; + private Label label2; + } +} \ No newline at end of file diff --git a/FamilyBudget/FamilyBudget/Forms/FormExpenseBudgetCategory.cs b/FamilyBudget/FamilyBudget/Forms/FormExpenseBudgetCategory.cs new file mode 100644 index 0000000..6c59c3a --- /dev/null +++ b/FamilyBudget/FamilyBudget/Forms/FormExpenseBudgetCategory.cs @@ -0,0 +1,95 @@ +using FamilyBudget.Entities; +using FamilyBudget.Entities.Enums; +using FamilyBudget.Repositories; +using FamilyBudget.Repositories.Implementations; +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; +using Unity; + +namespace FamilyBudget.Forms +{ + public partial class FormExpenseBudgetCategory : Form + { + private readonly IExpenseBudgetCategoryRepository _expenseBudgetCategoryRepository; + private int? _expenseId; + public int Id + { + set + { + try + { + var expense = _expenseBudgetCategoryRepository.ReadExpenseBudgetCategoryById(value); + if (expense == null) + { + throw new InvalidDataException(nameof(expense)); + } + foreach (ExpenseCategoryType elem in Enum.GetValues(typeof(ExpenseCategoryType))) + { + if ((elem & expense.ExpenseCategoryType) != 0) + { + checkedListBoxExpenses.SetItemChecked(checkedListBoxExpenses.Items.IndexOf( + elem), true); + } + } + textBoxName.Text = expense.Name; + _expenseId = value; + + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при получени данных", MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + } + } + } + + public FormExpenseBudgetCategory(IExpenseBudgetCategoryRepository expenseBudgetCategoryRepository) + { + InitializeComponent(); + _expenseBudgetCategoryRepository = expenseBudgetCategoryRepository ?? throw new ArgumentNullException(nameof( + expenseBudgetCategoryRepository)); + foreach (ExpenseCategoryType elem in Enum.GetValues(typeof(ExpenseCategoryType))) + { + checkedListBoxExpenses.Items.Add(elem); + } + } + + private void ButtonSave_Click(object sender, EventArgs e) + { + try + { + if (string.IsNullOrWhiteSpace(textBoxName.Text) || checkedListBoxExpenses.CheckedItems.Count == 0) + throw new Exception("Имеются незаполненные поля"); + if (_expenseId.HasValue) + _expenseBudgetCategoryRepository.UpdateExpenseBudgetCategoryById(CreateExpenseBudgetCategory(_expenseId.Value)); + else + _expenseBudgetCategoryRepository.CreateExpenseBudgetCategory(CreateExpenseBudgetCategory(0)); + Close(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при сохранении", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void ButtonCancel_Click(object sender, EventArgs e) => Close(); + + private ExpenseBudgetCategory CreateExpenseBudgetCategory(int id) + { + ExpenseCategoryType expenseType = ExpenseCategoryType.None; + foreach (ExpenseCategoryType elem in checkedListBoxExpenses.CheckedItems) + { + expenseType |= elem; + } + return ExpenseBudgetCategory.CreateEntity(id, textBoxName.Text, expenseType); + } + + } +} diff --git a/FamilyBudget/FamilyBudget/Forms/FormExpenseBudgetCategory.resx b/FamilyBudget/FamilyBudget/Forms/FormExpenseBudgetCategory.resx new file mode 100644 index 0000000..8b2ff64 --- /dev/null +++ b/FamilyBudget/FamilyBudget/Forms/FormExpenseBudgetCategory.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/FamilyBudget/FamilyBudget/Forms/FormFamilies.Designer.cs b/FamilyBudget/FamilyBudget/Forms/FormFamilies.Designer.cs new file mode 100644 index 0000000..1c6306f --- /dev/null +++ b/FamilyBudget/FamilyBudget/Forms/FormFamilies.Designer.cs @@ -0,0 +1,126 @@ +namespace FamilyBudget.Forms +{ + partial class FormFamilies + { + /// + /// 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() + { + dataGridViewFamilies = new DataGridView(); + buttonAdd = new Button(); + buttonEdit = new Button(); + buttonDelete = new Button(); + panel1 = new Panel(); + ((System.ComponentModel.ISupportInitialize)dataGridViewFamilies).BeginInit(); + panel1.SuspendLayout(); + SuspendLayout(); + // + // dataGridViewFamilies + // + dataGridViewFamilies.AllowUserToAddRows = false; + dataGridViewFamilies.AllowUserToDeleteRows = false; + dataGridViewFamilies.AllowUserToResizeColumns = false; + dataGridViewFamilies.AllowUserToResizeRows = false; + dataGridViewFamilies.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill; + dataGridViewFamilies.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; + dataGridViewFamilies.Dock = DockStyle.Fill; + dataGridViewFamilies.Location = new Point(0, 0); + dataGridViewFamilies.MultiSelect = false; + dataGridViewFamilies.Name = "dataGridViewFamilies"; + dataGridViewFamilies.ReadOnly = true; + dataGridViewFamilies.RowHeadersVisible = false; + dataGridViewFamilies.SelectionMode = DataGridViewSelectionMode.FullRowSelect; + dataGridViewFamilies.Size = new Size(765, 432); + dataGridViewFamilies.TabIndex = 0; + // + // buttonAdd + // + buttonAdd.BackgroundImage = Properties.Resources.free_icon_plus_181672; + buttonAdd.BackgroundImageLayout = ImageLayout.Stretch; + buttonAdd.Location = new Point(22, 24); + buttonAdd.Name = "buttonAdd"; + buttonAdd.Size = new Size(75, 61); + buttonAdd.TabIndex = 1; + buttonAdd.UseVisualStyleBackColor = true; + buttonAdd.Click += ButtonAdd_Click; + // + // buttonEdit + // + buttonEdit.BackgroundImage = Properties.Resources.free_icon_edit_tools_8847052; + buttonEdit.BackgroundImageLayout = ImageLayout.Stretch; + buttonEdit.Location = new Point(22, 150); + buttonEdit.Name = "buttonEdit"; + buttonEdit.Size = new Size(75, 61); + buttonEdit.TabIndex = 2; + buttonEdit.UseVisualStyleBackColor = true; + buttonEdit.Click += ButtonUpd_Click; + // + // buttonDelete + // + buttonDelete.BackgroundImage = Properties.Resources.free_icon_dustbin_7709786; + buttonDelete.BackgroundImageLayout = ImageLayout.Stretch; + buttonDelete.Location = new Point(22, 263); + buttonDelete.Name = "buttonDelete"; + buttonDelete.Size = new Size(75, 61); + buttonDelete.TabIndex = 3; + buttonDelete.UseVisualStyleBackColor = true; + buttonDelete.Click += ButtonDel_Click; + // + // panel1 + // + panel1.Controls.Add(buttonEdit); + panel1.Controls.Add(buttonDelete); + panel1.Controls.Add(buttonAdd); + panel1.Dock = DockStyle.Right; + panel1.Location = new Point(651, 0); + panel1.Name = "panel1"; + panel1.Size = new Size(114, 432); + panel1.TabIndex = 4; + // + // FormFamilies + // + AutoScaleDimensions = new SizeF(7F, 15F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(765, 432); + Controls.Add(panel1); + Controls.Add(dataGridViewFamilies); + Name = "FormFamilies"; + StartPosition = FormStartPosition.CenterParent; + Text = "Список семей"; + Load += FormFamiliesLoad; + ((System.ComponentModel.ISupportInitialize)dataGridViewFamilies).EndInit(); + panel1.ResumeLayout(false); + ResumeLayout(false); + } + + #endregion + + private DataGridView dataGridViewFamilies; + private Button buttonAdd; + private Button buttonEdit; + private Button buttonDelete; + private Panel panel1; + } +} \ No newline at end of file diff --git a/FamilyBudget/FamilyBudget/Forms/FormFamilies.cs b/FamilyBudget/FamilyBudget/Forms/FormFamilies.cs new file mode 100644 index 0000000..e64bea4 --- /dev/null +++ b/FamilyBudget/FamilyBudget/Forms/FormFamilies.cs @@ -0,0 +1,109 @@ +using FamilyBudget.Repositories; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Linq.Expressions; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using Unity; + +namespace FamilyBudget.Forms +{ + public partial class FormFamilies : Form + { + private readonly IUnityContainer _container; + private readonly IFamilyRepository _familyRepository; + public FormFamilies(IUnityContainer container, IFamilyRepository familyRepository) + { + InitializeComponent(); + _container = container ?? throw new ArgumentNullException(nameof(container)); + _familyRepository = familyRepository ?? throw new ArgumentNullException(nameof(familyRepository)); + } + + private void ButtonAdd_Click(object sender, EventArgs e) + { + try + { + _container.Resolve().ShowDialog(); + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при добавлении", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void FormFamiliesLoad(object sender, EventArgs e) + { + try + { + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при загрузке", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void ButtonUpd_Click(object sender, EventArgs e) + { + if (!TryGetIdentifierFromSelectedRow(out var findId)) + { + return; + } + try + { + var form = _container.Resolve(); + form.Id = findId; + form.ShowDialog(); + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при изменении", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void ButtonDel_Click(object sender, EventArgs e) + { + if (!TryGetIdentifierFromSelectedRow(out var findId)) + { + return; + } + + if (MessageBox.Show("Удалить запись?", "Удаление", MessageBoxButtons.YesNo) != DialogResult.Yes) + { + return; + } + + try + { + _familyRepository.DeleteFamily(findId); + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при удалении", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void LoadList() => dataGridViewFamilies.DataSource = _familyRepository.ReadFamilies(); + private bool TryGetIdentifierFromSelectedRow(out int id) + { + id = 0; + if (dataGridViewFamilies.SelectedRows.Count < 1) + { + MessageBox.Show("Нет выбранной записи", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); + return false; + + } + + id = Convert.ToInt32(dataGridViewFamilies.SelectedRows[0].Cells["Id"].Value); + return true; + } + } +} diff --git a/FamilyBudget/FamilyBudget/Form1.resx b/FamilyBudget/FamilyBudget/Forms/FormFamilies.resx similarity index 93% rename from FamilyBudget/FamilyBudget/Form1.resx rename to FamilyBudget/FamilyBudget/Forms/FormFamilies.resx index 1af7de1..af32865 100644 --- a/FamilyBudget/FamilyBudget/Form1.resx +++ b/FamilyBudget/FamilyBudget/Forms/FormFamilies.resx @@ -1,17 +1,17 @@  - diff --git a/FamilyBudget/FamilyBudget/Forms/FormFamily.Designer.cs b/FamilyBudget/FamilyBudget/Forms/FormFamily.Designer.cs new file mode 100644 index 0000000..3ab3ac5 --- /dev/null +++ b/FamilyBudget/FamilyBudget/Forms/FormFamily.Designer.cs @@ -0,0 +1,100 @@ +namespace FamilyBudget.Forms +{ + partial class FormFamily + { + /// + /// 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() + { + textBoxFamily = new TextBox(); + buttonSave = new Button(); + buttonCancel = new Button(); + labelFamily = new Label(); + SuspendLayout(); + // + // textBoxFamily + // + textBoxFamily.Anchor = AnchorStyles.Top; + textBoxFamily.Location = new Point(131, 41); + textBoxFamily.Name = "textBoxFamily"; + textBoxFamily.Size = new Size(153, 23); + textBoxFamily.TabIndex = 0; + // + // buttonSave + // + buttonSave.Anchor = AnchorStyles.Bottom | AnchorStyles.Left; + buttonSave.Location = new Point(43, 112); + buttonSave.Name = "buttonSave"; + buttonSave.Size = new Size(75, 23); + buttonSave.TabIndex = 1; + buttonSave.Text = "сохранить"; + buttonSave.UseVisualStyleBackColor = true; + buttonSave.Click += ButtonSave_Click; + // + // buttonCancel + // + buttonCancel.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; + buttonCancel.Location = new Point(220, 112); + buttonCancel.Name = "buttonCancel"; + buttonCancel.Size = new Size(75, 23); + buttonCancel.TabIndex = 2; + buttonCancel.Text = "отмена"; + buttonCancel.UseVisualStyleBackColor = true; + buttonCancel.Click += ButtonCancel_Click; + // + // labelFamily + // + labelFamily.Anchor = AnchorStyles.Top; + labelFamily.AutoSize = true; + labelFamily.Location = new Point(57, 44); + labelFamily.Name = "labelFamily"; + labelFamily.Size = new Size(61, 15); + labelFamily.TabIndex = 3; + labelFamily.Text = "Фамилия:"; + // + // FormFamily + // + AutoScaleDimensions = new SizeF(7F, 15F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(343, 170); + Controls.Add(labelFamily); + Controls.Add(buttonCancel); + Controls.Add(buttonSave); + Controls.Add(textBoxFamily); + Name = "FormFamily"; + StartPosition = FormStartPosition.CenterParent; + Text = "Семья"; + ResumeLayout(false); + PerformLayout(); + } + + #endregion + + private TextBox textBoxFamily; + private Button buttonSave; + private Button buttonCancel; + private Label labelFamily; + } +} \ No newline at end of file diff --git a/FamilyBudget/FamilyBudget/Forms/FormFamily.cs b/FamilyBudget/FamilyBudget/Forms/FormFamily.cs new file mode 100644 index 0000000..f6b8b40 --- /dev/null +++ b/FamilyBudget/FamilyBudget/Forms/FormFamily.cs @@ -0,0 +1,73 @@ +using FamilyBudget.Entities; +using FamilyBudget.Repositories; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Drawing.Text; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace FamilyBudget.Forms +{ + public partial class FormFamily : Form + { + private readonly IFamilyRepository _familyRepository; + private int? _familyId; + public int Id + { + set + { + try + { + var family = _familyRepository.ReadFamilyById(value); + if (family == null) + { + throw new InvalidDataException(nameof(family)); + } + textBoxFamily.Text = family.Name; + _familyId = value; + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при получении данных", MessageBoxButtons.OK, MessageBoxIcon. + Error); + return; + } + } + } + public FormFamily(IFamilyRepository familyRepository) + { + InitializeComponent(); + _familyRepository = familyRepository ?? throw new ArgumentNullException(nameof(familyRepository)); + } + + private void ButtonSave_Click(object sender, EventArgs e) + { + try + { + if (string.IsNullOrWhiteSpace(textBoxFamily.Text)) throw new Exception("Имеются незаполненные поля"); + if (_familyId.HasValue) + { + _familyRepository.UpdateFamily(CreateFamily(_familyId.Value)); + } + else + { + _familyRepository.CreateFamily(CreateFamily(0)); + } + Close(); } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при сохранении", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void ButtonCancel_Click(object sender, EventArgs e) => Close(); + + private Family CreateFamily(int id) => Family.CreateEntity(id, textBoxFamily.Text); + } +} + diff --git a/FamilyBudget/FamilyBudget/Forms/FormFamily.resx b/FamilyBudget/FamilyBudget/Forms/FormFamily.resx new file mode 100644 index 0000000..8b2ff64 --- /dev/null +++ b/FamilyBudget/FamilyBudget/Forms/FormFamily.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/FamilyBudget/FamilyBudget/Forms/FormFamilyMember.Designer.cs b/FamilyBudget/FamilyBudget/Forms/FormFamilyMember.Designer.cs new file mode 100644 index 0000000..1d61ff9 --- /dev/null +++ b/FamilyBudget/FamilyBudget/Forms/FormFamilyMember.Designer.cs @@ -0,0 +1,148 @@ +namespace FamilyBudget.Forms +{ + partial class FormFamilyMember + { + /// + /// 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() + { + labelName = new Label(); + textBoxName = new TextBox(); + buttonSave = new Button(); + buttonCancel = new Button(); + comboBoxFamily = new ComboBox(); + labelFamily = new Label(); + comboBoxFamilyMember = new ComboBox(); + labelMember = new Label(); + SuspendLayout(); + // + // labelName + // + labelName.Anchor = AnchorStyles.Top; + labelName.AutoSize = true; + labelName.Location = new Point(77, 61); + labelName.Name = "labelName"; + labelName.Size = new Size(34, 15); + labelName.TabIndex = 0; + labelName.Text = "Имя:"; + // + // textBoxName + // + textBoxName.Anchor = AnchorStyles.Top; + textBoxName.Location = new Point(123, 53); + textBoxName.Name = "textBoxName"; + textBoxName.Size = new Size(215, 23); + textBoxName.TabIndex = 1; + // + // buttonSave + // + buttonSave.Anchor = AnchorStyles.Bottom | AnchorStyles.Left; + buttonSave.Location = new Point(59, 269); + buttonSave.Name = "buttonSave"; + buttonSave.Size = new Size(75, 23); + buttonSave.TabIndex = 2; + buttonSave.Text = "Сохранить"; + buttonSave.UseVisualStyleBackColor = true; + buttonSave.Click += ButtonSave_Click; + // + // buttonCancel + // + buttonCancel.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; + buttonCancel.Location = new Point(246, 269); + buttonCancel.Name = "buttonCancel"; + buttonCancel.Size = new Size(75, 23); + buttonCancel.TabIndex = 3; + buttonCancel.Text = "Отмена"; + buttonCancel.UseVisualStyleBackColor = true; + buttonCancel.Click += ButtonCancel_Click; + // + // comboBoxFamily + // + comboBoxFamily.FormattingEnabled = true; + comboBoxFamily.Location = new Point(123, 106); + comboBoxFamily.Name = "comboBoxFamily"; + comboBoxFamily.Size = new Size(215, 23); + comboBoxFamily.TabIndex = 4; + // + // labelFamily + // + labelFamily.Anchor = AnchorStyles.Top; + labelFamily.AutoSize = true; + labelFamily.Location = new Point(66, 109); + labelFamily.Name = "labelFamily"; + labelFamily.Size = new Size(45, 15); + labelFamily.TabIndex = 5; + labelFamily.Text = "Семья:"; + // + // comboBoxFamilyMember + // + comboBoxFamilyMember.FormattingEnabled = true; + comboBoxFamilyMember.Location = new Point(123, 160); + comboBoxFamilyMember.Name = "comboBoxFamilyMember"; + comboBoxFamilyMember.Size = new Size(215, 23); + comboBoxFamilyMember.TabIndex = 6; + // + // labelMember + // + labelMember.Anchor = AnchorStyles.Top; + labelMember.AutoSize = true; + labelMember.Location = new Point(17, 163); + labelMember.Name = "labelMember"; + labelMember.Size = new Size(98, 15); + labelMember.TabIndex = 7; + labelMember.Text = "Участник семьи:"; + // + // FormFamilyMember + // + AutoScaleDimensions = new SizeF(7F, 15F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(387, 337); + Controls.Add(labelMember); + Controls.Add(comboBoxFamilyMember); + Controls.Add(labelFamily); + Controls.Add(comboBoxFamily); + Controls.Add(buttonCancel); + Controls.Add(buttonSave); + Controls.Add(textBoxName); + Controls.Add(labelName); + Name = "FormFamilyMember"; + StartPosition = FormStartPosition.CenterParent; + Text = "Участник семьи"; + ResumeLayout(false); + PerformLayout(); + } + + #endregion + + private Label labelName; + private TextBox textBoxName; + private Button buttonSave; + private Button buttonCancel; + private ComboBox comboBoxFamily; + private Label labelFamily; + private ComboBox comboBoxFamilyMember; + private Label labelMember; + } +} \ No newline at end of file diff --git a/FamilyBudget/FamilyBudget/Forms/FormFamilyMember.cs b/FamilyBudget/FamilyBudget/Forms/FormFamilyMember.cs new file mode 100644 index 0000000..6f8a19a --- /dev/null +++ b/FamilyBudget/FamilyBudget/Forms/FormFamilyMember.cs @@ -0,0 +1,84 @@ +using FamilyBudget.Entities; +using FamilyBudget.Entities.Enums; +using FamilyBudget.Repositories; +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 FamilyBudget.Forms +{ + public partial class FormFamilyMember : Form + { + private readonly IFamilyMemberRepository _familyMemberRepository; + private readonly IFamilyRepository _familyRepository; + private int? _familyMemberId; + + public int Id + { + set + { + try + { + var familyMember = _familyMemberRepository.ReadFamilyMemberById(value); + if (familyMember == null) + { + throw new InvalidDataException(nameof(familyMember)); + } + + comboBoxFamily.SelectedIndex = familyMember.FamilyId; + comboBoxFamilyMember.SelectedItem = familyMember.MemberType; + textBoxName.Text = familyMember.Name; + + _familyMemberId = value; + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при получении данных", MessageBoxButtons.OK, MessageBoxIcon. + Error); + return; + } + } + } + public FormFamilyMember(IFamilyMemberRepository familyMemberRepository, IFamilyRepository familyRepository) + { + InitializeComponent(); + _familyMemberRepository = familyMemberRepository ?? throw new ArgumentNullException(nameof( + familyMemberRepository)); + _familyRepository = familyRepository ?? throw new ArgumentNullException(nameof( + familyRepository)); + comboBoxFamilyMember.DataSource = Enum.GetValues(typeof(FamilyMemberType)); + comboBoxFamily.DataSource = _familyRepository.ReadFamilies(); + comboBoxFamily.DisplayMember = "Name"; + comboBoxFamily.ValueMember = "Id"; + + } + + private void ButtonSave_Click(object sender, EventArgs e) + { + try + { + if (string.IsNullOrWhiteSpace(textBoxName.Text) || comboBoxFamily.SelectedIndex < 0 || comboBoxFamilyMember.SelectedIndex < 0) + throw new Exception("Имеются незаполненные поля"); + if (_familyMemberId.HasValue) + _familyMemberRepository.UpdateFamilyMember(CreateFamilyMember(_familyMemberId.Value)); + else + _familyMemberRepository.CreateFamilyMember(CreateFamilyMember(0)); + Close(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при сохранении", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void ButtonCancel_Click(object sender, EventArgs e) => Close(); + + private FamilyMember CreateFamilyMember(int id) => FamilyMember.CreateEntity(id, textBoxName.Text, (int)comboBoxFamily.SelectedValue!, (FamilyMemberType)comboBoxFamilyMember.SelectedItem!); + } +} diff --git a/FamilyBudget/FamilyBudget/Forms/FormFamilyMember.resx b/FamilyBudget/FamilyBudget/Forms/FormFamilyMember.resx new file mode 100644 index 0000000..8b2ff64 --- /dev/null +++ b/FamilyBudget/FamilyBudget/Forms/FormFamilyMember.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/FamilyBudget/FamilyBudget/Forms/FormFamilyMember_ExpenseBudget.Designer.cs b/FamilyBudget/FamilyBudget/Forms/FormFamilyMember_ExpenseBudget.Designer.cs new file mode 100644 index 0000000..af0f8aa --- /dev/null +++ b/FamilyBudget/FamilyBudget/Forms/FormFamilyMember_ExpenseBudget.Designer.cs @@ -0,0 +1,176 @@ +namespace FamilyBudget.Forms +{ + partial class FormFamilyMember_ExpenseBudget + { + /// + /// 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() + { + comboBoxFamilyMember = new ComboBox(); + buttonCancel = new Button(); + buttonSave = new Button(); + labelDate = new Label(); + labelFamilyMember = new Label(); + dateTimePicker1 = new DateTimePicker(); + groupBox1 = new GroupBox(); + dataGridView = new DataGridView(); + ColumnExpanseName = new DataGridViewComboBoxColumn(); + ColumnSum = new DataGridViewTextBoxColumn(); + groupBox1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)dataGridView).BeginInit(); + SuspendLayout(); + // + // comboBoxFamilyMember + // + comboBoxFamilyMember.Anchor = AnchorStyles.Top; + comboBoxFamilyMember.FormattingEnabled = true; + comboBoxFamilyMember.Location = new Point(175, 82); + comboBoxFamilyMember.Name = "comboBoxFamilyMember"; + comboBoxFamilyMember.Size = new Size(164, 23); + comboBoxFamilyMember.TabIndex = 21; + // + // buttonCancel + // + buttonCancel.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; + buttonCancel.Location = new Point(312, 450); + buttonCancel.Name = "buttonCancel"; + buttonCancel.Size = new Size(75, 23); + buttonCancel.TabIndex = 20; + buttonCancel.Text = "Отмена"; + buttonCancel.UseVisualStyleBackColor = true; + buttonCancel.Click += ButtonCancel_Click; + // + // buttonSave + // + buttonSave.Anchor = AnchorStyles.Bottom | AnchorStyles.Left; + buttonSave.Location = new Point(28, 450); + buttonSave.Name = "buttonSave"; + buttonSave.Size = new Size(75, 23); + buttonSave.TabIndex = 19; + buttonSave.Text = "Сохранить"; + buttonSave.UseVisualStyleBackColor = true; + buttonSave.Click += ButtonSave_Click; + // + // labelDate + // + labelDate.Anchor = AnchorStyles.Top; + labelDate.AutoSize = true; + labelDate.Location = new Point(71, 35); + labelDate.Name = "labelDate"; + labelDate.Size = new Size(41, 15); + labelDate.TabIndex = 18; + labelDate.Text = "Дата: "; + // + // labelFamilyMember + // + labelFamilyMember.Anchor = AnchorStyles.Top; + labelFamilyMember.AutoSize = true; + labelFamilyMember.Location = new Point(61, 82); + labelFamilyMember.Name = "labelFamilyMember"; + labelFamilyMember.Size = new Size(101, 15); + labelFamilyMember.TabIndex = 17; + labelFamilyMember.Text = "Участник семьи: "; + // + // dateTimePicker1 + // + dateTimePicker1.Anchor = AnchorStyles.Top; + dateTimePicker1.Enabled = false; + dateTimePicker1.Location = new Point(175, 35); + dateTimePicker1.Name = "dateTimePicker1"; + dateTimePicker1.Size = new Size(164, 23); + dateTimePicker1.TabIndex = 14; + // + // groupBox1 + // + groupBox1.Controls.Add(dataGridView); + groupBox1.Location = new Point(28, 123); + groupBox1.Name = "groupBox1"; + groupBox1.Size = new Size(359, 308); + groupBox1.TabIndex = 22; + groupBox1.TabStop = false; + groupBox1.Text = "Траты"; + // + // dataGridView + // + dataGridView.AllowUserToResizeColumns = false; + dataGridView.AllowUserToResizeRows = false; + dataGridView.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; + dataGridView.Columns.AddRange(new DataGridViewColumn[] { ColumnExpanseName, ColumnSum }); + dataGridView.Dock = DockStyle.Fill; + dataGridView.Location = new Point(3, 19); + dataGridView.MultiSelect = false; + dataGridView.Name = "dataGridView"; + dataGridView.RowHeadersVisible = false; + dataGridView.SelectionMode = DataGridViewSelectionMode.FullRowSelect; + dataGridView.Size = new Size(353, 286); + dataGridView.TabIndex = 0; + // + // ColumnExpanseName + // + ColumnExpanseName.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill; + ColumnExpanseName.HeaderText = "Название"; + ColumnExpanseName.Name = "ColumnExpanseName"; + // + // ColumnSum + // + ColumnSum.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill; + ColumnSum.HeaderText = "Сумма"; + ColumnSum.Name = "ColumnSum"; + // + // FormFamilyMember_ExpenseBudget + // + AutoScaleDimensions = new SizeF(7F, 15F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(430, 500); + Controls.Add(groupBox1); + Controls.Add(comboBoxFamilyMember); + Controls.Add(buttonCancel); + Controls.Add(buttonSave); + Controls.Add(labelDate); + Controls.Add(labelFamilyMember); + Controls.Add(dateTimePicker1); + Name = "FormFamilyMember_ExpenseBudget"; + StartPosition = FormStartPosition.CenterParent; + Text = "Добавление расхода"; + groupBox1.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)dataGridView).EndInit(); + ResumeLayout(false); + PerformLayout(); + } + + #endregion + + private ComboBox comboBoxFamilyMember; + private Button buttonCancel; + private Button buttonSave; + private Label labelDate; + private Label labelFamilyMember; + private DateTimePicker dateTimePicker1; + private GroupBox groupBox1; + private DataGridView dataGridView; + private DataGridViewComboBoxColumn ColumnExpanseName; + private DataGridViewTextBoxColumn ColumnSum; + } +} \ No newline at end of file diff --git a/FamilyBudget/FamilyBudget/Forms/FormFamilyMember_ExpenseBudget.cs b/FamilyBudget/FamilyBudget/Forms/FormFamilyMember_ExpenseBudget.cs new file mode 100644 index 0000000..3fdb1c7 --- /dev/null +++ b/FamilyBudget/FamilyBudget/Forms/FormFamilyMember_ExpenseBudget.cs @@ -0,0 +1,68 @@ +using FamilyBudget.Entities; +using FamilyBudget.Repositories; +using FamilyBudget.Repositories.Implementations; +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 FamilyBudget.Forms +{ + public partial class FormFamilyMember_ExpenseBudget : Form + { + private readonly IExpenseBudgetRepository _expenseBudgetRepository; + public FormFamilyMember_ExpenseBudget(IExpenseBudgetRepository + expenseBudgetRepository, IFamilyMemberRepository familyMemberRepository, IExpenseBudgetCategoryRepository expenses) + { + InitializeComponent(); + _expenseBudgetRepository = expenseBudgetRepository ?? throw new ArgumentNullException(nameof( +expenseBudgetRepository)); + comboBoxFamilyMember.DataSource = familyMemberRepository.ReadFamilyMembers(); + comboBoxFamilyMember.DisplayMember = "Name"; + comboBoxFamilyMember.ValueMember = "Id"; + + ColumnExpanseName.DataSource = expenses.ReadExpenseBudgetCategories(); + comboBoxFamilyMember.DisplayMember = "Name"; + comboBoxFamilyMember.ValueMember = "Id"; + } + private void ButtonSave_Click(object sender, EventArgs e) + { + try + { + if (dataGridView.RowCount < 1 || comboBoxFamilyMember.SelectedIndex < 0) + { + throw new Exception("Имеются незаполненные поля"); + } + + _expenseBudgetRepository.CreateExpenseBudget(ExpenseBudget.СreateOperation(0, (int)comboBoxFamilyMember.SelectedValue!, + CreateListExpenseBudgetFromGrid())); + Close(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при сохранении", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + private void ButtonCancel_Click(object sender, EventArgs e) => Close(); + private List CreateListExpenseBudgetFromGrid() + { + var list = new List(); + foreach (DataGridViewRow row in dataGridView.Rows) + { + if (row.Cells["ColumnExpanseName"].Value == null || row.Cells["ColumnSum"].Value == null) + { + continue; + } + list.Add(FamilyMember_ExpenseBudget.CreateElement(0, Convert.ToInt32(row.Cells["ColumnExpanseName"].Value) + , Convert.ToInt32(row.Cells["ColumnSum"].Value))); + } + return list; + + } + } +} diff --git a/FamilyBudget/FamilyBudget/Forms/FormFamilyMember_ExpenseBudget.resx b/FamilyBudget/FamilyBudget/Forms/FormFamilyMember_ExpenseBudget.resx new file mode 100644 index 0000000..12b888b --- /dev/null +++ b/FamilyBudget/FamilyBudget/Forms/FormFamilyMember_ExpenseBudget.resx @@ -0,0 +1,126 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + + True + + + True + + \ No newline at end of file diff --git a/FamilyBudget/FamilyBudget/Forms/FormFamilyMember_ExpenseBudgets.Designer.cs b/FamilyBudget/FamilyBudget/Forms/FormFamilyMember_ExpenseBudgets.Designer.cs new file mode 100644 index 0000000..25a9133 --- /dev/null +++ b/FamilyBudget/FamilyBudget/Forms/FormFamilyMember_ExpenseBudgets.Designer.cs @@ -0,0 +1,112 @@ +namespace FamilyBudget.Forms +{ + partial class FormFamilyMember_ExpenseBudgets + { + /// + /// 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() + { + panel1 = new Panel(); + buttonDelete = new Button(); + buttonAdd = new Button(); + dataGridViewExpenses = new DataGridView(); + panel1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)dataGridViewExpenses).BeginInit(); + SuspendLayout(); + // + // panel1 + // + panel1.Controls.Add(buttonDelete); + panel1.Controls.Add(buttonAdd); + panel1.Dock = DockStyle.Right; + panel1.Location = new Point(693, 0); + panel1.Name = "panel1"; + panel1.Size = new Size(107, 450); + panel1.TabIndex = 0; + // + // buttonDelete + // + buttonDelete.BackgroundImage = Properties.Resources.free_icon_dustbin_7709786; + buttonDelete.BackgroundImageLayout = ImageLayout.Stretch; + buttonDelete.Location = new Point(20, 234); + buttonDelete.Name = "buttonDelete"; + buttonDelete.Size = new Size(75, 61); + buttonDelete.TabIndex = 4; + buttonDelete.UseVisualStyleBackColor = true; + buttonDelete.Click += ButtonDelete_Click; + // + // buttonAdd + // + buttonAdd.BackgroundImage = Properties.Resources.free_icon_plus_181672; + buttonAdd.BackgroundImageLayout = ImageLayout.Stretch; + buttonAdd.Location = new Point(20, 46); + buttonAdd.Name = "buttonAdd"; + buttonAdd.Size = new Size(75, 61); + buttonAdd.TabIndex = 3; + buttonAdd.UseVisualStyleBackColor = true; + buttonAdd.Click += ButtonAdd_Click; + // + // dataGridViewExpenses + // + dataGridViewExpenses.AllowUserToAddRows = false; + dataGridViewExpenses.AllowUserToDeleteRows = false; + dataGridViewExpenses.AllowUserToResizeColumns = false; + dataGridViewExpenses.AllowUserToResizeRows = false; + dataGridViewExpenses.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill; + dataGridViewExpenses.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; + dataGridViewExpenses.Dock = DockStyle.Fill; + dataGridViewExpenses.Location = new Point(0, 0); + dataGridViewExpenses.MultiSelect = false; + dataGridViewExpenses.Name = "dataGridViewExpenses"; + dataGridViewExpenses.ReadOnly = true; + dataGridViewExpenses.RowHeadersVisible = false; + dataGridViewExpenses.SelectionMode = DataGridViewSelectionMode.FullRowSelect; + dataGridViewExpenses.Size = new Size(693, 450); + dataGridViewExpenses.TabIndex = 1; + // + // FormFamilyMember_ExpenseBudgets + // + AutoScaleDimensions = new SizeF(7F, 15F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(800, 450); + Controls.Add(dataGridViewExpenses); + Controls.Add(panel1); + Name = "FormFamilyMember_ExpenseBudgets"; + StartPosition = FormStartPosition.CenterParent; + Text = "Список добавления расходов"; + Load += FormMemberExpenseBudgetLoad; + panel1.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)dataGridViewExpenses).EndInit(); + ResumeLayout(false); + } + + #endregion + + private Panel panel1; + private DataGridView dataGridViewExpenses; + private Button buttonDelete; + private Button buttonAdd; + } +} \ No newline at end of file diff --git a/FamilyBudget/FamilyBudget/Forms/FormFamilyMember_ExpenseBudgets.cs b/FamilyBudget/FamilyBudget/Forms/FormFamilyMember_ExpenseBudgets.cs new file mode 100644 index 0000000..b6e3f2c --- /dev/null +++ b/FamilyBudget/FamilyBudget/Forms/FormFamilyMember_ExpenseBudgets.cs @@ -0,0 +1,105 @@ +using FamilyBudget.Repositories; +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; +using Unity; + +namespace FamilyBudget.Forms +{ + public partial class FormFamilyMember_ExpenseBudgets : Form + { + private readonly IUnityContainer _container; + private readonly IExpenseBudgetRepository _expenseBudgetRepository; + + public FormFamilyMember_ExpenseBudgets(IUnityContainer container, IExpenseBudgetRepository expenseBudgetRepository) + { + InitializeComponent(); + _container = container ?? throw new ArgumentNullException(nameof(container)); + _expenseBudgetRepository = expenseBudgetRepository ?? throw new ArgumentNullException(); + } + + private void FormFamilyMembers_Load(object sender, EventArgs e) + { + try + { + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при загрузке", MessageBoxButtons.OK, MessageBoxIcon.Error); + + } + } + + private void ButtonAdd_Click(object sender, EventArgs e) + { + try + { + _container.Resolve().ShowDialog(); + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при добавлении", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + + private void ButtonDelete_Click(object sender, EventArgs e) + { + if (!TryGetIdentifierFromSelectedRow(out var findId)) + { + return; + } + if (MessageBox.Show("Удалить запись?", "Удаление", MessageBoxButtons.YesNo) != DialogResult.Yes) + { + return; + } + try + { + _expenseBudgetRepository.DeleteExpenseBudget(findId); + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при удалении", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void LoadList() => dataGridViewExpenses.DataSource = _expenseBudgetRepository.ReadExpenseBudgets(); + + private bool TryGetIdentifierFromSelectedRow(out int id) + { + id = 0; + if (dataGridViewExpenses.Rows.Count < 1) + { + MessageBox.Show("Нет выбранной записи", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); + return false; + } + + id = Convert.ToInt32(dataGridViewExpenses.SelectedRows[0].Cells["Id"].Value); + return true; + + } + + private void FormMemberExpenseBudgetLoad(object sender, EventArgs e) + { + try + { + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при загрузке", MessageBoxButtons.OK, MessageBoxIcon.Error); + + } + } + } + +} diff --git a/FamilyBudget/FamilyBudget/Forms/FormFamilyMember_ExpenseBudgets.resx b/FamilyBudget/FamilyBudget/Forms/FormFamilyMember_ExpenseBudgets.resx new file mode 100644 index 0000000..af32865 --- /dev/null +++ b/FamilyBudget/FamilyBudget/Forms/FormFamilyMember_ExpenseBudgets.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/FamilyBudget/FamilyBudget/Forms/FormFamilyMember_IncomeBudget.Designer.cs b/FamilyBudget/FamilyBudget/Forms/FormFamilyMember_IncomeBudget.Designer.cs new file mode 100644 index 0000000..1e90d6e --- /dev/null +++ b/FamilyBudget/FamilyBudget/Forms/FormFamilyMember_IncomeBudget.Designer.cs @@ -0,0 +1,174 @@ +namespace FamilyBudget.Forms +{ + partial class FormFamilyMember_IncomeBudget + { + /// + /// 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() + { + dateTimePicker1 = new DateTimePicker(); + labelFamilyMember = new Label(); + labelDate = new Label(); + buttonSave = new Button(); + buttonCancel = new Button(); + comboBoxFamilyMember = new ComboBox(); + dataGridView = new DataGridView(); + ColumnIncomeName = new DataGridViewComboBoxColumn(); + ColumnSum = new DataGridViewTextBoxColumn(); + groupBox1 = new GroupBox(); + ((System.ComponentModel.ISupportInitialize)dataGridView).BeginInit(); + groupBox1.SuspendLayout(); + SuspendLayout(); + // + // dateTimePicker1 + // + dateTimePicker1.Anchor = AnchorStyles.Top; + dateTimePicker1.Enabled = false; + dateTimePicker1.Location = new Point(151, 35); + dateTimePicker1.Name = "dateTimePicker1"; + dateTimePicker1.Size = new Size(164, 23); + dateTimePicker1.TabIndex = 2; + // + // labelFamilyMember + // + labelFamilyMember.Anchor = AnchorStyles.Top; + labelFamilyMember.AutoSize = true; + labelFamilyMember.Location = new Point(20, 90); + labelFamilyMember.Name = "labelFamilyMember"; + labelFamilyMember.Size = new Size(101, 15); + labelFamilyMember.TabIndex = 6; + labelFamilyMember.Text = "Участник семьи: "; + // + // labelDate + // + labelDate.Anchor = AnchorStyles.Top; + labelDate.AutoSize = true; + labelDate.Location = new Point(30, 35); + labelDate.Name = "labelDate"; + labelDate.Size = new Size(41, 15); + labelDate.TabIndex = 8; + labelDate.Text = "Дата: "; + // + // buttonSave + // + buttonSave.Anchor = AnchorStyles.Bottom | AnchorStyles.Left; + buttonSave.Location = new Point(43, 491); + buttonSave.Name = "buttonSave"; + buttonSave.Size = new Size(75, 23); + buttonSave.TabIndex = 9; + buttonSave.Text = "Сохранить"; + buttonSave.UseVisualStyleBackColor = true; + buttonSave.Click += ButtonSave_Click; + // + // buttonCancel + // + buttonCancel.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; + buttonCancel.Location = new Point(276, 491); + buttonCancel.Name = "buttonCancel"; + buttonCancel.Size = new Size(75, 23); + buttonCancel.TabIndex = 10; + buttonCancel.Text = "Отмена"; + buttonCancel.UseVisualStyleBackColor = true; + buttonCancel.Click += ButtonCancel_Click; + // + // comboBoxFamilyMember + // + comboBoxFamilyMember.Anchor = AnchorStyles.Top; + comboBoxFamilyMember.FormattingEnabled = true; + comboBoxFamilyMember.Location = new Point(151, 82); + comboBoxFamilyMember.Name = "comboBoxFamilyMember"; + comboBoxFamilyMember.Size = new Size(164, 23); + comboBoxFamilyMember.TabIndex = 11; + // + // dataGridView + // + dataGridView.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; + dataGridView.Columns.AddRange(new DataGridViewColumn[] { ColumnIncomeName, ColumnSum }); + dataGridView.Location = new Point(6, 22); + dataGridView.MultiSelect = false; + dataGridView.Name = "dataGridView"; + dataGridView.RowHeadersVisible = false; + dataGridView.SelectionMode = DataGridViewSelectionMode.FullRowSelect; + dataGridView.Size = new Size(349, 311); + dataGridView.TabIndex = 12; + // + // ColumnIncomeName + // + ColumnIncomeName.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill; + ColumnIncomeName.HeaderText = "Название"; + ColumnIncomeName.Name = "ColumnIncomeName"; + ColumnIncomeName.Resizable = DataGridViewTriState.True; + ColumnIncomeName.SortMode = DataGridViewColumnSortMode.Automatic; + // + // ColumnSum + // + ColumnSum.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill; + ColumnSum.HeaderText = "Сумма"; + ColumnSum.Name = "ColumnSum"; + // + // groupBox1 + // + groupBox1.Controls.Add(dataGridView); + groupBox1.Location = new Point(30, 123); + groupBox1.Name = "groupBox1"; + groupBox1.Size = new Size(361, 339); + groupBox1.TabIndex = 13; + groupBox1.TabStop = false; + groupBox1.Text = "Доходы"; + // + // FormFamilyMember_IncomeBudget + // + AutoScaleDimensions = new SizeF(7F, 15F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(403, 526); + Controls.Add(groupBox1); + Controls.Add(comboBoxFamilyMember); + Controls.Add(buttonCancel); + Controls.Add(buttonSave); + Controls.Add(labelDate); + Controls.Add(labelFamilyMember); + Controls.Add(dateTimePicker1); + Name = "FormFamilyMember_IncomeBudget"; + StartPosition = FormStartPosition.CenterParent; + Text = "Доход"; + ((System.ComponentModel.ISupportInitialize)dataGridView).EndInit(); + groupBox1.ResumeLayout(false); + ResumeLayout(false); + PerformLayout(); + } + + #endregion + private DateTimePicker dateTimePicker1; + private Label labelFamilyMember; + private Label labelDate; + private Button buttonSave; + private Button buttonCancel; + private ComboBox comboBoxFamilyMember; + private DataGridView dataGridView; + private GroupBox groupBox1; + private DataGridViewComboBoxColumn ColumnIncomeName; + private DataGridViewTextBoxColumn ColumnSum; + } +} \ No newline at end of file diff --git a/FamilyBudget/FamilyBudget/Forms/FormFamilyMember_IncomeBudget.cs b/FamilyBudget/FamilyBudget/Forms/FormFamilyMember_IncomeBudget.cs new file mode 100644 index 0000000..57b3157 --- /dev/null +++ b/FamilyBudget/FamilyBudget/Forms/FormFamilyMember_IncomeBudget.cs @@ -0,0 +1,68 @@ +using FamilyBudget.Entities; +using FamilyBudget.Repositories; +using FamilyBudget.Repositories.Implementations; +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 FamilyBudget.Forms +{ + public partial class FormFamilyMember_IncomeBudget : Form + { + private readonly IIncomeBudgetRepository _incomeBudgetRepository; + public FormFamilyMember_IncomeBudget(IIncomeBudgetRepository + incomeBudgetRepository, IFamilyMemberRepository familyMemberRepository, IIncomeBudgetCategoryRepository incomes) + { + InitializeComponent(); + _incomeBudgetRepository = incomeBudgetRepository ?? throw new ArgumentNullException(nameof( +incomeBudgetRepository)); + comboBoxFamilyMember.DataSource = familyMemberRepository.ReadFamilyMembers(); + comboBoxFamilyMember.DisplayMember = "Name"; + comboBoxFamilyMember.ValueMember = "Id"; + + ColumnIncomeName.DataSource = incomes.ReadIncomeBudgetCategories(); + comboBoxFamilyMember.DisplayMember = "Name"; + comboBoxFamilyMember.ValueMember = "Id"; + } + private void ButtonSave_Click(object sender, EventArgs e) + { + try + { + if (dataGridView.RowCount < 1 || comboBoxFamilyMember.SelectedIndex < 0) + { + throw new Exception("Имеются незаполненные поля"); + } + + _incomeBudgetRepository.CreateIncomeBudget(IncomeBudget.CreateOperation(0, (int)comboBoxFamilyMember.SelectedValue!, + CreateListIncomeBudgetFromGrid())); + Close(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при сохранении", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + private void ButtonCancel_Click(object sender, EventArgs e) => Close(); + private List CreateListIncomeBudgetFromGrid() + { + var list = new List(); + foreach (DataGridViewRow row in dataGridView.Rows) + { + if (row.Cells["ColumnIncomeName"].Value == null || row.Cells["ColumnSum"].Value == null) + { + continue; + } + list.Add(FamilyMember_IncomeBudget.CreateElement(0, Convert.ToInt32(row.Cells["ColumnIncomeName"].Value) + , Convert.ToInt32(row.Cells["ColumnSum"].Value))); + } + return list; + + } + } +} diff --git a/FamilyBudget/FamilyBudget/Forms/FormFamilyMember_IncomeBudget.resx b/FamilyBudget/FamilyBudget/Forms/FormFamilyMember_IncomeBudget.resx new file mode 100644 index 0000000..1d9ef2f --- /dev/null +++ b/FamilyBudget/FamilyBudget/Forms/FormFamilyMember_IncomeBudget.resx @@ -0,0 +1,126 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + + True + + + True + + \ No newline at end of file diff --git a/FamilyBudget/FamilyBudget/Forms/FormFamilyMember_IncomeBudgets.Designer.cs b/FamilyBudget/FamilyBudget/Forms/FormFamilyMember_IncomeBudgets.Designer.cs new file mode 100644 index 0000000..44b8895 --- /dev/null +++ b/FamilyBudget/FamilyBudget/Forms/FormFamilyMember_IncomeBudgets.Designer.cs @@ -0,0 +1,113 @@ +namespace FamilyBudget.Forms +{ + partial class FormFamilyMember_IncomeBudgets + { + /// + /// 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() + { + panel1 = new Panel(); + button2 = new Button(); + buttonAdd = new Button(); + dataGridViewIncomes = new DataGridView(); + panel1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)dataGridViewIncomes).BeginInit(); + SuspendLayout(); + // + // panel1 + // + panel1.Controls.Add(button2); + panel1.Controls.Add(buttonAdd); + panel1.Dock = DockStyle.Right; + panel1.Location = new Point(679, 0); + panel1.Name = "panel1"; + panel1.Size = new Size(121, 450); + panel1.TabIndex = 0; + // + // button2 + // + button2.BackgroundImage = Properties.Resources.free_icon_dustbin_7709786; + button2.BackgroundImageLayout = ImageLayout.Stretch; + button2.Location = new Point(30, 230); + button2.Name = "button2"; + button2.Size = new Size(75, 61); + button2.TabIndex = 2; + button2.UseVisualStyleBackColor = true; + button2.Click += ButtonDelete_Click; + // + // buttonAdd + // + buttonAdd.BackgroundImage = Properties.Resources.free_icon_plus_181672; + buttonAdd.BackgroundImageLayout = ImageLayout.Stretch; + buttonAdd.Location = new Point(30, 29); + buttonAdd.Name = "buttonAdd"; + buttonAdd.Size = new Size(75, 61); + buttonAdd.TabIndex = 0; + buttonAdd.UseVisualStyleBackColor = true; + buttonAdd.Click += ButtonAdd_Click; + // + // dataGridViewIncomes + // + dataGridViewIncomes.AllowUserToAddRows = false; + dataGridViewIncomes.AllowUserToDeleteRows = false; + dataGridViewIncomes.AllowUserToResizeColumns = false; + dataGridViewIncomes.AllowUserToResizeRows = false; + dataGridViewIncomes.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill; + dataGridViewIncomes.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; + dataGridViewIncomes.Dock = DockStyle.Fill; + dataGridViewIncomes.Location = new Point(0, 0); + dataGridViewIncomes.MultiSelect = false; + dataGridViewIncomes.Name = "dataGridViewIncomes"; + dataGridViewIncomes.ReadOnly = true; + dataGridViewIncomes.RowHeadersVisible = false; + dataGridViewIncomes.SelectionMode = DataGridViewSelectionMode.FullRowSelect; + dataGridViewIncomes.Size = new Size(679, 450); + dataGridViewIncomes.TabIndex = 1; + // + // FormFamilyMember_IncomeBudgets + // + AutoScaleDimensions = new SizeF(7F, 15F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(800, 450); + Controls.Add(dataGridViewIncomes); + Controls.Add(panel1); + Name = "FormFamilyMember_IncomeBudgets"; + StartPosition = FormStartPosition.CenterParent; + Text = "Список добавления доходов"; + Load += FormFamilyMembersIncome_Load; + panel1.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)dataGridViewIncomes).EndInit(); + ResumeLayout(false); + } + + #endregion + + private Panel panel1; + private Button button2; + private Button button1; + private Button buttonAdd; + private DataGridView dataGridViewIncomes; + } +} \ No newline at end of file diff --git a/FamilyBudget/FamilyBudget/Forms/FormFamilyMember_IncomeBudgets.cs b/FamilyBudget/FamilyBudget/Forms/FormFamilyMember_IncomeBudgets.cs new file mode 100644 index 0000000..05b51fb --- /dev/null +++ b/FamilyBudget/FamilyBudget/Forms/FormFamilyMember_IncomeBudgets.cs @@ -0,0 +1,91 @@ +using FamilyBudget.Repositories; +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; +using Unity; + +namespace FamilyBudget.Forms +{ + public partial class FormFamilyMember_IncomeBudgets : Form + { + private readonly IUnityContainer _container; + private readonly IIncomeBudgetRepository _incomeBudgetRepository; + + public FormFamilyMember_IncomeBudgets(IUnityContainer container, IIncomeBudgetRepository incomeBudgetRepository) + { + InitializeComponent(); + _container = container ?? throw new ArgumentNullException(nameof(container)); + _incomeBudgetRepository = incomeBudgetRepository ?? throw new ArgumentNullException(); + } + + private void ButtonAdd_Click(object sender, EventArgs e) + { + try + { + _container.Resolve().ShowDialog(); + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при добавлении", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + + private void ButtonDelete_Click(object sender, EventArgs e) + { + if (!TryGetIdentifierFromSelectedRow(out var findId)) + { + return; + } + if (MessageBox.Show("Удалить запись?", "Удаление", MessageBoxButtons.YesNo) != DialogResult.Yes) + { + return; + } + try + { + _incomeBudgetRepository.DeleteIncomeBudget(findId); + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при удалении", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void LoadList() => dataGridViewIncomes.DataSource = _incomeBudgetRepository.ReadIncomeBudgets(); + + private bool TryGetIdentifierFromSelectedRow(out int id) + { + id = 0; + if (dataGridViewIncomes.Rows.Count < 1) + { + MessageBox.Show("Нет выбранной записи", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); + return false; + } + + id = Convert.ToInt32(dataGridViewIncomes.SelectedRows[0].Cells["Id"].Value); + return true; + + } + + private void FormFamilyMembersIncome_Load(object sender, EventArgs e) + { + try + { + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при загрузке", MessageBoxButtons.OK, MessageBoxIcon.Error); + + } + } + } +} diff --git a/FamilyBudget/FamilyBudget/Forms/FormFamilyMember_IncomeBudgets.resx b/FamilyBudget/FamilyBudget/Forms/FormFamilyMember_IncomeBudgets.resx new file mode 100644 index 0000000..af32865 --- /dev/null +++ b/FamilyBudget/FamilyBudget/Forms/FormFamilyMember_IncomeBudgets.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/FamilyBudget/FamilyBudget/Forms/FormFamilyMembers.Designer.cs b/FamilyBudget/FamilyBudget/Forms/FormFamilyMembers.Designer.cs new file mode 100644 index 0000000..82e0698 --- /dev/null +++ b/FamilyBudget/FamilyBudget/Forms/FormFamilyMembers.Designer.cs @@ -0,0 +1,126 @@ +namespace FamilyBudget.Forms +{ + partial class FormFamilyMembers + { + /// + /// 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() + { + dataGridViewFamilyMembers = new DataGridView(); + panel1 = new Panel(); + buttonDelete = new Button(); + buttonUpdate = new Button(); + buttonAdd = new Button(); + ((System.ComponentModel.ISupportInitialize)dataGridViewFamilyMembers).BeginInit(); + panel1.SuspendLayout(); + SuspendLayout(); + // + // dataGridViewFamilyMembers + // + dataGridViewFamilyMembers.AllowUserToAddRows = false; + dataGridViewFamilyMembers.AllowUserToDeleteRows = false; + dataGridViewFamilyMembers.AllowUserToResizeColumns = false; + dataGridViewFamilyMembers.AllowUserToResizeRows = false; + dataGridViewFamilyMembers.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill; + dataGridViewFamilyMembers.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; + dataGridViewFamilyMembers.Dock = DockStyle.Fill; + dataGridViewFamilyMembers.Location = new Point(0, 0); + dataGridViewFamilyMembers.MultiSelect = false; + dataGridViewFamilyMembers.Name = "dataGridViewFamilyMembers"; + dataGridViewFamilyMembers.ReadOnly = true; + dataGridViewFamilyMembers.RowHeadersVisible = false; + dataGridViewFamilyMembers.SelectionMode = DataGridViewSelectionMode.FullRowSelect; + dataGridViewFamilyMembers.Size = new Size(800, 450); + dataGridViewFamilyMembers.TabIndex = 0; + // + // panel1 + // + panel1.Controls.Add(buttonDelete); + panel1.Controls.Add(buttonUpdate); + panel1.Controls.Add(buttonAdd); + panel1.Dock = DockStyle.Right; + panel1.Location = new Point(704, 0); + panel1.Name = "panel1"; + panel1.Size = new Size(96, 450); + panel1.TabIndex = 1; + // + // buttonDelete + // + buttonDelete.BackgroundImage = Properties.Resources.free_icon_dustbin_7709786; + buttonDelete.BackgroundImageLayout = ImageLayout.Stretch; + buttonDelete.Location = new Point(9, 259); + buttonDelete.Name = "buttonDelete"; + buttonDelete.Size = new Size(75, 61); + buttonDelete.TabIndex = 2; + buttonDelete.UseVisualStyleBackColor = true; + buttonDelete.Click += ButtonDelete_Click; + // + // buttonUpdate + // + buttonUpdate.BackgroundImage = Properties.Resources.free_icon_edit_tools_8847052; + buttonUpdate.BackgroundImageLayout = ImageLayout.Stretch; + buttonUpdate.Location = new Point(9, 143); + buttonUpdate.Name = "buttonUpdate"; + buttonUpdate.Size = new Size(75, 61); + buttonUpdate.TabIndex = 1; + buttonUpdate.UseVisualStyleBackColor = true; + buttonUpdate.Click += ButtonUpdate_Click; + // + // buttonAdd + // + buttonAdd.BackgroundImage = Properties.Resources.free_icon_plus_181672; + buttonAdd.BackgroundImageLayout = ImageLayout.Stretch; + buttonAdd.Location = new Point(9, 35); + buttonAdd.Name = "buttonAdd"; + buttonAdd.Size = new Size(75, 61); + buttonAdd.TabIndex = 0; + buttonAdd.UseVisualStyleBackColor = true; + buttonAdd.Click += ButtonAdd_Click; + // + // FormFamilyMembers + // + AutoScaleDimensions = new SizeF(7F, 15F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(800, 450); + Controls.Add(panel1); + Controls.Add(dataGridViewFamilyMembers); + Name = "FormFamilyMembers"; + StartPosition = FormStartPosition.CenterParent; + Text = "Список участников семьи"; + Load += FormFamilyMembers_Load; + ((System.ComponentModel.ISupportInitialize)dataGridViewFamilyMembers).EndInit(); + panel1.ResumeLayout(false); + ResumeLayout(false); + } + + #endregion + + private DataGridView dataGridViewFamilyMembers; + private Panel panel1; + private Button buttonAdd; + private Button buttonDelete; + private Button buttonUpdate; + } +} \ No newline at end of file diff --git a/FamilyBudget/FamilyBudget/Forms/FormFamilyMembers.cs b/FamilyBudget/FamilyBudget/Forms/FormFamilyMembers.cs new file mode 100644 index 0000000..959f15b --- /dev/null +++ b/FamilyBudget/FamilyBudget/Forms/FormFamilyMembers.cs @@ -0,0 +1,109 @@ +using FamilyBudget.Repositories; +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; +using Unity; + +namespace FamilyBudget.Forms +{ + public partial class FormFamilyMembers : Form + { + private readonly IUnityContainer _container; + private readonly IFamilyMemberRepository _familyMemberRepository; + + public FormFamilyMembers(IUnityContainer container, IFamilyMemberRepository familyMemberRepository) + { + InitializeComponent(); + _container = container ?? throw new ArgumentNullException(nameof(container)); + _familyMemberRepository = familyMemberRepository ?? throw new ArgumentNullException(); + } + + private void FormFamilyMembers_Load(object sender, EventArgs e) + { + try + { + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при загрузке", MessageBoxButtons.OK, MessageBoxIcon.Error); + + } + } + + private void ButtonAdd_Click(object sender, EventArgs e) + { + try + { + _container.Resolve().ShowDialog(); + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при добавлении", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void ButtonUpdate_Click(object sender, EventArgs e) + { + if (!TryGetIdentifierFromSelectedRow(out var findId)) + { + return; + } + try + { + var form = _container.Resolve(); + form.Id = findId; + form.ShowDialog(); + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при изменении", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + + } + + private void ButtonDelete_Click(object sender, EventArgs e) + { + if (!TryGetIdentifierFromSelectedRow(out var findId)) + { + return; + } + if (MessageBox.Show("Удалить запись?", "Удаление", MessageBoxButtons.YesNo) != DialogResult.Yes) + { + return; + } + try + { + _familyMemberRepository.DeleteFamilyMember(findId); + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при удалении", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void LoadList() => dataGridViewFamilyMembers.DataSource = _familyMemberRepository.ReadFamilyMembers(); + + private bool TryGetIdentifierFromSelectedRow(out int id) + { + id = 0; + if (dataGridViewFamilyMembers.Rows.Count < 1) { + MessageBox.Show("Нет выбранной записи", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); + return false; + } + + id = Convert.ToInt32(dataGridViewFamilyMembers.SelectedRows[id].Cells["Id"].Value); + return true; + + } + } +} diff --git a/FamilyBudget/FamilyBudget/Forms/FormFamilyMembers.resx b/FamilyBudget/FamilyBudget/Forms/FormFamilyMembers.resx new file mode 100644 index 0000000..8b2ff64 --- /dev/null +++ b/FamilyBudget/FamilyBudget/Forms/FormFamilyMembers.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/FamilyBudget/FamilyBudget/Forms/FormIncomeBudgetCategories.Designer.cs b/FamilyBudget/FamilyBudget/Forms/FormIncomeBudgetCategories.Designer.cs new file mode 100644 index 0000000..cbf0000 --- /dev/null +++ b/FamilyBudget/FamilyBudget/Forms/FormIncomeBudgetCategories.Designer.cs @@ -0,0 +1,125 @@ +namespace FamilyBudget.Forms +{ + partial class FormIncomeBudgetCategories + { + /// + /// 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() + { + panel1 = new Panel(); + buttonEdit = new Button(); + buttonDelete = new Button(); + buttonAdd = new Button(); + dataGridViewIncomes = new DataGridView(); + panel1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)dataGridViewIncomes).BeginInit(); + SuspendLayout(); + // + // panel1 + // + panel1.Controls.Add(buttonEdit); + panel1.Controls.Add(buttonDelete); + panel1.Controls.Add(buttonAdd); + panel1.Dock = DockStyle.Right; + panel1.Location = new Point(664, 0); + panel1.Name = "panel1"; + panel1.Size = new Size(136, 450); + panel1.TabIndex = 0; + // + // buttonEdit + // + buttonEdit.BackgroundImage = Properties.Resources.free_icon_edit_tools_8847052; + buttonEdit.BackgroundImageLayout = ImageLayout.Stretch; + buttonEdit.Location = new Point(34, 106); + buttonEdit.Name = "buttonEdit"; + buttonEdit.Size = new Size(75, 61); + buttonEdit.TabIndex = 10; + buttonEdit.UseVisualStyleBackColor = true; + buttonEdit.Click += buttonEdit_Click; + // + // buttonDelete + // + buttonDelete.BackgroundImage = Properties.Resources.free_icon_dustbin_7709786; + buttonDelete.BackgroundImageLayout = ImageLayout.Stretch; + buttonDelete.Location = new Point(34, 190); + buttonDelete.Name = "buttonDelete"; + buttonDelete.Size = new Size(75, 61); + buttonDelete.TabIndex = 5; + buttonDelete.UseVisualStyleBackColor = true; + buttonDelete.Click += ButtonDelete_Click; + // + // buttonAdd + // + buttonAdd.BackgroundImage = Properties.Resources.free_icon_plus_181672; + buttonAdd.BackgroundImageLayout = ImageLayout.Stretch; + buttonAdd.Location = new Point(34, 26); + buttonAdd.Name = "buttonAdd"; + buttonAdd.Size = new Size(75, 61); + buttonAdd.TabIndex = 3; + buttonAdd.UseVisualStyleBackColor = true; + buttonAdd.Click += ButtonAdd_Click; + // + // dataGridViewIncomes + // + dataGridViewIncomes.AllowUserToAddRows = false; + dataGridViewIncomes.AllowUserToDeleteRows = false; + dataGridViewIncomes.AllowUserToResizeColumns = false; + dataGridViewIncomes.AllowUserToResizeRows = false; + dataGridViewIncomes.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill; + dataGridViewIncomes.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; + dataGridViewIncomes.Dock = DockStyle.Fill; + dataGridViewIncomes.Location = new Point(0, 0); + dataGridViewIncomes.MultiSelect = false; + dataGridViewIncomes.Name = "dataGridViewIncomes"; + dataGridViewIncomes.ReadOnly = true; + dataGridViewIncomes.RowHeadersVisible = false; + dataGridViewIncomes.Size = new Size(664, 450); + dataGridViewIncomes.TabIndex = 1; + // + // FormIncomeBudgetCategories + // + AutoScaleDimensions = new SizeF(7F, 15F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(800, 450); + Controls.Add(dataGridViewIncomes); + Controls.Add(panel1); + Name = "FormIncomeBudgetCategories"; + StartPosition = FormStartPosition.CenterParent; + Text = "Список категорий доходов"; + Load += FormFamilyMembers_Load; + panel1.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)dataGridViewIncomes).EndInit(); + ResumeLayout(false); + } + + #endregion + + private Panel panel1; + private DataGridView dataGridViewIncomes; + private Button buttonDelete; + private Button buttonAdd; + private Button buttonEdit; + } +} \ No newline at end of file diff --git a/FamilyBudget/FamilyBudget/Forms/FormIncomeBudgetCategories.cs b/FamilyBudget/FamilyBudget/Forms/FormIncomeBudgetCategories.cs new file mode 100644 index 0000000..00e1060 --- /dev/null +++ b/FamilyBudget/FamilyBudget/Forms/FormIncomeBudgetCategories.cs @@ -0,0 +1,129 @@ +using FamilyBudget.Repositories; +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; +using Unity; + +namespace FamilyBudget.Forms +{ + public partial class FormIncomeBudgetCategories : Form + { + private readonly IUnityContainer _container; + private readonly IIncomeBudgetCategoryRepository _incomeBudgetCategoryRepository; + + public FormIncomeBudgetCategories(IUnityContainer container, IIncomeBudgetCategoryRepository incomeBudgetCategoryRepository) + { + InitializeComponent(); + _container = container ?? throw new ArgumentNullException(nameof(container)); + _incomeBudgetCategoryRepository = incomeBudgetCategoryRepository ?? throw new ArgumentNullException(); + } + + private void FormFamilyMembers_Load(object sender, EventArgs e) + { + try + { + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при загрузке", MessageBoxButtons.OK, MessageBoxIcon.Error); + + } + } + + private void ButtonAdd_Click(object sender, EventArgs e) + { + try + { + _container.Resolve().ShowDialog(); + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при добавлении", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void ButtonUpdate_Click(object sender, EventArgs e) + { + if (!TryGetIdentifierFromSelectedRow(out var findId)) + { + return; + } + try + { + var form = _container.Resolve(); + form.ShowDialog(); + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при изменении", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + + } + + private void ButtonDelete_Click(object sender, EventArgs e) + { + if (!TryGetIdentifierFromSelectedRow(out var findId)) + { + return; + } + if (MessageBox.Show("Удалить запись?", "Удаление", MessageBoxButtons.YesNo) != DialogResult.Yes) + { + return; + } + try + { + _incomeBudgetCategoryRepository.DeleteIncomeBudgetCategory(findId); + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при удалении", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void LoadList() => dataGridViewIncomes.DataSource = _incomeBudgetCategoryRepository.ReadIncomeBudgetCategories(); + + private bool TryGetIdentifierFromSelectedRow(out int id) + { + id = 0; + if (dataGridViewIncomes.Rows.Count < 1) + { + MessageBox.Show("Нет выбранной записи", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); + return false; + } + + id = Convert.ToInt32(dataGridViewIncomes.SelectedRows[0].Cells["Id"].Value); + return true; + + } + + + private void buttonEdit_Click(object sender, EventArgs e) + { + if (!TryGetIdentifierFromSelectedRow(out var findId)) + { + return; + } + try + { + var form = _container.Resolve(); + form.Id = findId; + form.ShowDialog(); + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при изменении", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + } +} diff --git a/FamilyBudget/FamilyBudget/Forms/FormIncomeBudgetCategories.resx b/FamilyBudget/FamilyBudget/Forms/FormIncomeBudgetCategories.resx new file mode 100644 index 0000000..8b2ff64 --- /dev/null +++ b/FamilyBudget/FamilyBudget/Forms/FormIncomeBudgetCategories.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/FamilyBudget/FamilyBudget/Forms/FormIncomeBudgetCategory.Designer.cs b/FamilyBudget/FamilyBudget/Forms/FormIncomeBudgetCategory.Designer.cs new file mode 100644 index 0000000..9280df6 --- /dev/null +++ b/FamilyBudget/FamilyBudget/Forms/FormIncomeBudgetCategory.Designer.cs @@ -0,0 +1,124 @@ +namespace FamilyBudget.Forms +{ + partial class FormIncomeBudgetCategory + { + /// + /// 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() + { + buttonSave = new Button(); + buttonCancel = new Button(); + textBoxName = new TextBox(); + labelCategory = new Label(); + label1 = new Label(); + checkedListBoxIncomes = new CheckedListBox(); + SuspendLayout(); + // + // buttonSave + // + buttonSave.Anchor = AnchorStyles.Bottom | AnchorStyles.Left; + buttonSave.Location = new Point(36, 253); + buttonSave.Name = "buttonSave"; + buttonSave.Size = new Size(75, 23); + buttonSave.TabIndex = 0; + buttonSave.Text = "Сохранить"; + buttonSave.UseVisualStyleBackColor = true; + buttonSave.Click += ButtonSave_Click; + // + // buttonCancel + // + buttonCancel.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; + buttonCancel.Location = new Point(320, 253); + buttonCancel.Name = "buttonCancel"; + buttonCancel.Size = new Size(75, 23); + buttonCancel.TabIndex = 1; + buttonCancel.Text = "Отмена"; + buttonCancel.UseVisualStyleBackColor = true; + buttonCancel.Click += ButtonCancel_Click; + // + // textBoxName + // + textBoxName.Anchor = AnchorStyles.Top; + textBoxName.Location = new Point(171, 21); + textBoxName.Name = "textBoxName"; + textBoxName.Size = new Size(224, 23); + textBoxName.TabIndex = 2; + // + // labelCategory + // + labelCategory.Anchor = AnchorStyles.Top; + labelCategory.AutoSize = true; + labelCategory.Location = new Point(36, 24); + labelCategory.Name = "labelCategory"; + labelCategory.Size = new Size(60, 15); + labelCategory.TabIndex = 3; + labelCategory.Text = "название:"; + // + // label1 + // + label1.Anchor = AnchorStyles.Top; + label1.AutoSize = true; + label1.Location = new Point(36, 63); + label1.Name = "label1"; + label1.Size = new Size(115, 15); + label1.TabIndex = 4; + label1.Text = "Категории доходов:"; + // + // checkedListBoxIncomes + // + checkedListBoxIncomes.FormattingEnabled = true; + checkedListBoxIncomes.Location = new Point(171, 63); + checkedListBoxIncomes.Name = "checkedListBoxIncomes"; + checkedListBoxIncomes.Size = new Size(224, 148); + checkedListBoxIncomes.TabIndex = 5; + // + // FormIncomeBudgetCategory + // + AutoScaleDimensions = new SizeF(7F, 15F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(429, 299); + Controls.Add(checkedListBoxIncomes); + Controls.Add(label1); + Controls.Add(labelCategory); + Controls.Add(textBoxName); + Controls.Add(buttonCancel); + Controls.Add(buttonSave); + Name = "FormIncomeBudgetCategory"; + StartPosition = FormStartPosition.CenterParent; + Text = "Категория дохода"; + ResumeLayout(false); + PerformLayout(); + } + + #endregion + + private Button buttonSave; + private Button buttonCancel; + private TextBox textBoxName; + private Label labelCategory; + private Label label1; + private CheckedListBox checkedListBoxIncomes; + } +} \ No newline at end of file diff --git a/FamilyBudget/FamilyBudget/Forms/FormIncomeBudgetCategory.cs b/FamilyBudget/FamilyBudget/Forms/FormIncomeBudgetCategory.cs new file mode 100644 index 0000000..ef941e6 --- /dev/null +++ b/FamilyBudget/FamilyBudget/Forms/FormIncomeBudgetCategory.cs @@ -0,0 +1,95 @@ +using FamilyBudget.Entities; +using FamilyBudget.Entities.Enums; +using FamilyBudget.Repositories; +using FamilyBudget.Repositories.Implementations; +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; +using Unity; + +namespace FamilyBudget.Forms +{ + public partial class FormIncomeBudgetCategory : Form + { + private readonly IIncomeBudgetCategoryRepository _incomeBudgetCategoryRepository; + private int? _incomeId; + public int Id + { + set + { + try + { + var income = _incomeBudgetCategoryRepository.ReadIncomeBudgetCategoryById(value); + if (income == null) + { + throw new InvalidDataException(nameof(income)); + } + foreach (IncomeCategoryType elem in Enum.GetValues(typeof(IncomeCategoryType))) + { + if ((elem & income.IncomeCategoryType) != 0) + { + checkedListBoxIncomes.SetItemChecked(checkedListBoxIncomes.Items.IndexOf( + elem), true); + } + } + textBoxName.Text = income.Name; + _incomeId = value; + + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при получени данных", MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + } + } + } + + public FormIncomeBudgetCategory(IIncomeBudgetCategoryRepository incomeBudgetCategoryRepository) + { + InitializeComponent(); + _incomeBudgetCategoryRepository = incomeBudgetCategoryRepository ?? throw new ArgumentNullException(nameof( + incomeBudgetCategoryRepository)); + foreach (IncomeCategoryType elem in Enum.GetValues(typeof(IncomeCategoryType))) + { + checkedListBoxIncomes.Items.Add(elem); + } + } + + private void ButtonSave_Click(object sender, EventArgs e) + { + try + { + if (string.IsNullOrWhiteSpace(textBoxName.Text) || checkedListBoxIncomes.CheckedItems.Count == 0) + throw new Exception("Имеются незаполненные поля"); + if (_incomeId.HasValue) + _incomeBudgetCategoryRepository.UpdateExpenseBudgetCategoryById(CreateIncomeBudgetCategory(_incomeId.Value)); + else + _incomeBudgetCategoryRepository.CreateIncomeBudgetCategory(CreateIncomeBudgetCategory(0)); + Close(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при сохранении", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void ButtonCancel_Click(object sender, EventArgs e) => Close(); + + private IncomeBudgetCategory CreateIncomeBudgetCategory(int id) + { + IncomeCategoryType incomeType = IncomeCategoryType.None; + foreach (IncomeCategoryType elem in checkedListBoxIncomes.CheckedItems) + { + incomeType |= elem; + } + return IncomeBudgetCategory.CreateEntity(id, textBoxName.Text, incomeType); + } + + } +} diff --git a/FamilyBudget/FamilyBudget/Forms/FormIncomeBudgetCategory.resx b/FamilyBudget/FamilyBudget/Forms/FormIncomeBudgetCategory.resx new file mode 100644 index 0000000..8b2ff64 --- /dev/null +++ b/FamilyBudget/FamilyBudget/Forms/FormIncomeBudgetCategory.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/FamilyBudget/FamilyBudget/Program.cs b/FamilyBudget/FamilyBudget/Program.cs index ee196c9..3871907 100644 --- a/FamilyBudget/FamilyBudget/Program.cs +++ b/FamilyBudget/FamilyBudget/Program.cs @@ -1,3 +1,12 @@ +using FamilyBudget.Repositories; +using FamilyBudget.Repositories.Implementations; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.Logging; +using Serilog; +using Unity; +using Unity.Lifetime; +using Unity.Microsoft.Logging; + namespace FamilyBudget { internal static class Program @@ -11,7 +20,38 @@ namespace FamilyBudget // To customize application configuration such as set high DPI settings or default font, // see https://aka.ms/applicationconfiguration. ApplicationConfiguration.Initialize(); - Application.Run(new Form1()); + Application.Run(CreateContainer().Resolve()); + } + + private static IUnityContainer CreateContainer() + { + var container = new UnityContainer(); + + container.AddExtension(new LoggingExtension(CreateLoggerFactory())); + + container.RegisterType(new TransientLifetimeManager()); + container.RegisterType(new TransientLifetimeManager()); + container.RegisterType(new TransientLifetimeManager()); + container.RegisterType(new TransientLifetimeManager()); + container.RegisterType(new TransientLifetimeManager()); + container.RegisterType(new TransientLifetimeManager()); + + container.RegisterType(new SingletonLifetimeManager()); + + return container; + } + + private static LoggerFactory CreateLoggerFactory() + { + var loggerFactory = new LoggerFactory(); + loggerFactory.AddSerilog(new LoggerConfiguration() + .ReadFrom.Configuration(new ConfigurationBuilder() + .SetBasePath(AppDomain.CurrentDomain.BaseDirectory) + .AddJsonFile("appsettings.json") + .Build()) + .CreateLogger()); + return loggerFactory; + } } } \ No newline at end of file diff --git a/FamilyBudget/FamilyBudget/Properties/Resources.Designer.cs b/FamilyBudget/FamilyBudget/Properties/Resources.Designer.cs new file mode 100644 index 0000000..70c228b --- /dev/null +++ b/FamilyBudget/FamilyBudget/Properties/Resources.Designer.cs @@ -0,0 +1,113 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace FamilyBudget.Properties { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("FamilyBudget.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap family { + get { + object obj = ResourceManager.GetObject("family", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap free_icon_dustbin_7709786 { + get { + object obj = ResourceManager.GetObject("free-icon-dustbin-7709786", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap free_icon_edit_tools_8847052 { + get { + object obj = ResourceManager.GetObject("free-icon-edit-tools-8847052", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap free_icon_plus_181672 { + get { + object obj = ResourceManager.GetObject("free-icon-plus-181672", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap free_icon_plus_1816721 { + get { + object obj = ResourceManager.GetObject("free-icon-plus-1816721", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + } +} diff --git a/FamilyBudget/FamilyBudget/Properties/Resources.resx b/FamilyBudget/FamilyBudget/Properties/Resources.resx new file mode 100644 index 0000000..a94bc6d --- /dev/null +++ b/FamilyBudget/FamilyBudget/Properties/Resources.resx @@ -0,0 +1,136 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + + + ..\Resources\free-icon-plus-181672.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\free-icon-edit-tools-8847052.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\family.jpg;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\free-icon-plus-1816721.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\free-icon-dustbin-7709786.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + \ No newline at end of file diff --git a/FamilyBudget/FamilyBudget/Repositories/IConnectionString.cs b/FamilyBudget/FamilyBudget/Repositories/IConnectionString.cs new file mode 100644 index 0000000..95bcc3b --- /dev/null +++ b/FamilyBudget/FamilyBudget/Repositories/IConnectionString.cs @@ -0,0 +1,13 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace FamilyBudget.Repositories +{ + public interface IConnectionString + { + public string ConnectionString { get; } + } +} diff --git a/FamilyBudget/FamilyBudget/Repositories/IExpenseBudgetCategoryRepository.cs b/FamilyBudget/FamilyBudget/Repositories/IExpenseBudgetCategoryRepository.cs new file mode 100644 index 0000000..d552f4f --- /dev/null +++ b/FamilyBudget/FamilyBudget/Repositories/IExpenseBudgetCategoryRepository.cs @@ -0,0 +1,18 @@ +using FamilyBudget.Entities; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace FamilyBudget.Repositories +{ + public interface IExpenseBudgetCategoryRepository + { + IEnumerable ReadExpenseBudgetCategories(); + ExpenseBudgetCategory ReadExpenseBudgetCategoryById(int id); + void UpdateExpenseBudgetCategoryById(ExpenseBudgetCategory expenseBudgetCategory); + void CreateExpenseBudgetCategory(ExpenseBudgetCategory expenseBudgetCategory); + void DeleteExpenseBudgetCategory(int id); + } +} diff --git a/FamilyBudget/FamilyBudget/Repositories/IExpenseBudgetRepository.cs b/FamilyBudget/FamilyBudget/Repositories/IExpenseBudgetRepository.cs new file mode 100644 index 0000000..3b369c3 --- /dev/null +++ b/FamilyBudget/FamilyBudget/Repositories/IExpenseBudgetRepository.cs @@ -0,0 +1,17 @@ +using FamilyBudget.Entities; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace FamilyBudget.Repositories +{ + public interface IExpenseBudgetRepository + { + IEnumerable ReadExpenseBudgets(DateTime? dateFrom = null, DateTime? dateTo = null, + int? familyMemberId = null, int? BudgetExpenseId = null); + void CreateExpenseBudget(ExpenseBudget expenseBudget); + void DeleteExpenseBudget(int id); + } +} diff --git a/FamilyBudget/FamilyBudget/Repositories/IFamilyMemberRepository.cs b/FamilyBudget/FamilyBudget/Repositories/IFamilyMemberRepository.cs new file mode 100644 index 0000000..19dcc06 --- /dev/null +++ b/FamilyBudget/FamilyBudget/Repositories/IFamilyMemberRepository.cs @@ -0,0 +1,18 @@ +using FamilyBudget.Entities; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace FamilyBudget.Repositories +{ + public interface IFamilyMemberRepository + { + IEnumerable ReadFamilyMembers(); + FamilyMember ReadFamilyMemberById(int id); + void CreateFamilyMember(FamilyMember familyMember); + void UpdateFamilyMember(FamilyMember familyMember); + void DeleteFamilyMember(int id); + } +} diff --git a/FamilyBudget/FamilyBudget/Repositories/IFamilyRepository.cs b/FamilyBudget/FamilyBudget/Repositories/IFamilyRepository.cs new file mode 100644 index 0000000..e9d295d --- /dev/null +++ b/FamilyBudget/FamilyBudget/Repositories/IFamilyRepository.cs @@ -0,0 +1,18 @@ +using FamilyBudget.Entities; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace FamilyBudget.Repositories +{ + public interface IFamilyRepository + { + IEnumerable ReadFamilies(); + Family ReadFamilyById(int id); + void CreateFamily(Family family); + void UpdateFamily(Family family); + void DeleteFamily(int id); + } +} diff --git a/FamilyBudget/FamilyBudget/Repositories/IIncomeBudgetCategoryRepository.cs b/FamilyBudget/FamilyBudget/Repositories/IIncomeBudgetCategoryRepository.cs new file mode 100644 index 0000000..474e019 --- /dev/null +++ b/FamilyBudget/FamilyBudget/Repositories/IIncomeBudgetCategoryRepository.cs @@ -0,0 +1,18 @@ +using FamilyBudget.Entities; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace FamilyBudget.Repositories +{ + public interface IIncomeBudgetCategoryRepository + { + IEnumerable ReadIncomeBudgetCategories(); + IncomeBudgetCategory ReadIncomeBudgetCategoryById(int id); + void UpdateExpenseBudgetCategoryById(IncomeBudgetCategory income); + void CreateIncomeBudgetCategory(IncomeBudgetCategory income); + void DeleteIncomeBudgetCategory(int id); + } +} diff --git a/FamilyBudget/FamilyBudget/Repositories/IIncomeBudgetRepository.cs b/FamilyBudget/FamilyBudget/Repositories/IIncomeBudgetRepository.cs new file mode 100644 index 0000000..c35d200 --- /dev/null +++ b/FamilyBudget/FamilyBudget/Repositories/IIncomeBudgetRepository.cs @@ -0,0 +1,17 @@ +using FamilyBudget.Entities; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace FamilyBudget.Repositories +{ + public interface IIncomeBudgetRepository + { + IEnumerable ReadIncomeBudgets(DateTime? dateFrom = null, DateTime? dateTo = null, + int? familyMemberId = null, int? BudgetIncomeId = null); + void CreateIncomeBudget(IncomeBudget incomeBudget); + void DeleteIncomeBudget(int id); + } +} diff --git a/FamilyBudget/FamilyBudget/Repositories/Implementations/ConnectionString.cs b/FamilyBudget/FamilyBudget/Repositories/Implementations/ConnectionString.cs new file mode 100644 index 0000000..4c3f653 --- /dev/null +++ b/FamilyBudget/FamilyBudget/Repositories/Implementations/ConnectionString.cs @@ -0,0 +1,13 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace FamilyBudget.Repositories.Implementations +{ + internal class ConnectionString : IConnectionString + { + string IConnectionString.ConnectionString => "Server=localhost;Database=familyBudget;User Id=postgres;Password=postgres;"; + } +} diff --git a/FamilyBudget/FamilyBudget/Repositories/Implementations/ExpenseBudgetCategoryRepository.cs b/FamilyBudget/FamilyBudget/Repositories/Implementations/ExpenseBudgetCategoryRepository.cs new file mode 100644 index 0000000..e08eaf5 --- /dev/null +++ b/FamilyBudget/FamilyBudget/Repositories/Implementations/ExpenseBudgetCategoryRepository.cs @@ -0,0 +1,129 @@ +using Dapper; +using FamilyBudget.Entities; +using Microsoft.Extensions.Logging; +using Newtonsoft.Json; +using Npgsql; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace FamilyBudget.Repositories.Implementations +{ + internal class ExpenseBudgetCategoryRepository : IExpenseBudgetCategoryRepository + { + private readonly IConnectionString _connectionString; + private readonly ILogger _logger; + public ExpenseBudgetCategoryRepository(IConnectionString connectionString, ILogger logger) + { + _connectionString = connectionString; + _logger = logger; + } + + public void CreateExpenseBudgetCategory(ExpenseBudgetCategory expenseBudgetCategory) + { + _logger.LogInformation("Добавление объекта"); + _logger.LogDebug("Объект: {json}", JsonConvert.SerializeObject(expenseBudgetCategory)); + + try + { + using var connection = new NpgsqlConnection(_connectionString.ConnectionString); + var queryInsert = @" + INSERT INTO ExpenseBudgetCategory (ExpenseCategoryType, Name) + VALUES (@ExpenseCategoryType, @Name)"; + connection.Execute(queryInsert, expenseBudgetCategory); + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка при добавлении объекта"); + throw; + } + } + + public void DeleteExpenseBudgetCategory(int id) + { + _logger.LogInformation("Удаление объекта"); + _logger.LogDebug("Объект: {id}", id); + try + { + using var connection = new NpgsqlConnection(_connectionString.ConnectionString); + var queryDelete = @" + DELETE FROM ExpenseBudgetCategory + WHERE Id=@id"; + connection.Execute(queryDelete, new { id }); + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка при удалении объекта"); + throw; + } + } + + public IEnumerable ReadExpenseBudgetCategories() + { + _logger.LogInformation("Получение всех объектов"); + try + { + using var connection = new NpgsqlConnection(_connectionString.ConnectionString); + var querySelect = "SELECT * FROM ExpenseBudgetCategory"; + var expenses = connection.Query(querySelect); + _logger.LogDebug("Полученные объекты: {json}", JsonConvert.SerializeObject(expenses)); + return expenses; + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка при чтении объектов"); + throw; + } + } + + public ExpenseBudgetCategory ReadExpenseBudgetCategoryById(int id) + { + _logger.LogInformation("Получение объекта по идентификатору"); + _logger.LogDebug("Объект: {id}", id); + try + { + using var connection = new NpgsqlConnection(_connectionString.ConnectionString); + var querySelect = @" + SELECT * FROM ExpenseBudgetCategory + WHERE Id=@id"; + var expense = connection.QueryFirst(querySelect, new { id }); + _logger.LogDebug("Найденный объект: {json}", JsonConvert.SerializeObject(expense)); + return expense; + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка при поиске объекта"); + throw; + } + } + + public void UpdateExpenseBudgetCategoryById(ExpenseBudgetCategory expenseBudgetCategory) + { + _logger.LogInformation("Редактирование объекта"); + _logger.LogDebug("Объект: {json}", JsonConvert.SerializeObject(expenseBudgetCategory)); + try + { + using var connection = new NpgsqlConnection(_connectionString.ConnectionString); + var queryUpdate = @"UPDATE ExpenseBudgetCategory + SET + Id=@Id, + Name=@Name, + ExpenseCategoryType=@ExpenseCategoryType + WHERE Id=@Id"; + connection.Execute(queryUpdate, new + { + expenseBudgetCategory.Id, + expenseBudgetCategory.Name, + expenseBudgetCategory.ExpenseCategoryType + }); + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка при редактировании объекта"); + throw; + } + } + } +} diff --git a/FamilyBudget/FamilyBudget/Repositories/Implementations/ExpenseBudgetRepository.cs b/FamilyBudget/FamilyBudget/Repositories/Implementations/ExpenseBudgetRepository.cs new file mode 100644 index 0000000..de73d6d --- /dev/null +++ b/FamilyBudget/FamilyBudget/Repositories/Implementations/ExpenseBudgetRepository.cs @@ -0,0 +1,111 @@ +using Dapper; +using FamilyBudget.Entities; +using Microsoft.Extensions.Logging; +using Newtonsoft.Json; +using Npgsql; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace FamilyBudget.Repositories.Implementations +{ + internal class ExpenseBudgetRepository : IExpenseBudgetRepository + { + private readonly IConnectionString _connectionString; + private readonly ILogger _logger; + + public ExpenseBudgetRepository(IConnectionString connectionString, ILogger logger) + { + _connectionString = connectionString; + _logger = logger; + } + + public void CreateExpenseBudget(ExpenseBudget expenseBudget) + { + _logger.LogInformation("Добавление объекта"); + _logger.LogDebug("Объект: {json}", JsonConvert.SerializeObject(expenseBudget)); + + try + { + using var connection = new NpgsqlConnection(_connectionString.ConnectionString); + connection.Open(); + using var transaction = connection.BeginTransaction(); + + var queryInsert = @" + INSERT INTO ExpenseBudget (FamilyMemberId, Date) + VALUES (@FamilyMemberId, @Date); + SELECT MAX(Id) FROM ExpenseBudget"; + var expenseBudgetId = connection.QueryFirst(queryInsert, expenseBudget, transaction); + + var querySubInsert = @" + INSERT INTO FamilyMember_ExpenseBudget (ExpenseBudgetId, FamilyMemberId, Sum) + VALUES (@ExpenseBudgetId, @FamilyMemberId, @Sum)"; + foreach (var elem in expenseBudget.FamilyMember_Expenses) + { + connection.Execute(querySubInsert, new + { + ExpenseBudgetId = expenseBudgetId, + expenseBudget.FamilyMemberId, + elem.Sum + }, transaction); + } + + transaction.Commit(); + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка при добавлении объекта"); + throw; + } + } + + public void DeleteExpenseBudget(int id) + { + _logger.LogInformation("Удаление объекта"); + _logger.LogDebug("Объект: {id}", id); + try + { + using var connection = new NpgsqlConnection(_connectionString.ConnectionString); + connection.Open(); + using var transaction = connection.BeginTransaction(); + var queryDeleteSub = @" + DELETE FROM FamilyMember_ExpenseBudget + WHERE ExpenseBudgetID = @id"; + connection.Execute(queryDeleteSub, new { id }, transaction); + + var queryDelete = @" + DELETE FROM ExpenseBudget + WHERE Id = @id"; + connection.Execute(queryDelete, new { id }, transaction); + + transaction.Commit(); + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка при удалении объекта"); + throw; + } + } + + public IEnumerable ReadExpenseBudgets(DateTime? dateFrom = null, DateTime? dateTo = null, + int? familyMemberId = null, int? BudgetExpenseId = null) + { + try + { + using var connection = new NpgsqlConnection(_connectionString.ConnectionString); + var querySelect = "SELECT * FROM ExpenseBudget"; + var expensesBudget = connection.Query(querySelect); + _logger.LogDebug("Полученные объекты: {json}", + JsonConvert.SerializeObject(expensesBudget)); + return expensesBudget; + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка при чтении объектов"); + throw; + } + } + } +} diff --git a/FamilyBudget/FamilyBudget/Repositories/Implementations/FamilyMemberRepository.cs b/FamilyBudget/FamilyBudget/Repositories/Implementations/FamilyMemberRepository.cs new file mode 100644 index 0000000..7a12d22 --- /dev/null +++ b/FamilyBudget/FamilyBudget/Repositories/Implementations/FamilyMemberRepository.cs @@ -0,0 +1,136 @@ +using Dapper; +using FamilyBudget.Entities; +using Microsoft.Extensions.Logging; +using Newtonsoft.Json; +using Npgsql; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace FamilyBudget.Repositories.Implementations +{ + internal class FamilyMemberRepository : IFamilyMemberRepository + { + private readonly IConnectionString _connectionString; + private readonly ILogger _logger; + + public FamilyMemberRepository(IConnectionString connectionString, ILogger logger) + { + _connectionString = connectionString; + _logger = logger; + } + public void CreateFamilyMember(FamilyMember familyMember) + { + _logger.LogInformation("Добавление объекта"); + _logger.LogDebug("Объект: {json}", JsonConvert.SerializeObject(familyMember)); + + try + { + using var connection = new NpgsqlConnection(_connectionString.ConnectionString); + var queryInsert = @" + INSERT INTO FamilyMember (FamilyId, Name, MemberType) + VALUES (@FamilyId, @Name, @MemberType)"; + connection.Execute(queryInsert, new + { + familyMember.FamilyId, + familyMember.Name, + familyMember.MemberType + }); + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка при добавлении объекта"); + throw; + } + } + + public void DeleteFamilyMember(int id) + { + _logger.LogInformation("Удаление объекта"); + _logger.LogDebug("Объект: {id}", id); + try + { + using var connection = new NpgsqlConnection(_connectionString.ConnectionString); + var queryDelete = @" + DELETE FROM FamilyMember + WHERE Id=@id"; + connection.Execute(queryDelete, new { id }); + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка при удалении объекта"); + throw; + } + } + + public FamilyMember ReadFamilyMemberById(int id) + { + _logger.LogInformation("Получение объекта по идентификатору"); + _logger.LogDebug("Объект: {id}", id); + try + { + using var connection = new NpgsqlConnection(_connectionString.ConnectionString); + var querySelect = @" + SELECT * FROM FamilyMember + WHERE Id=@id"; + var familyMember = connection.QueryFirst(querySelect, new { id }); + _logger.LogDebug("Найденный объект: {json}", + JsonConvert.SerializeObject(familyMember)); + return familyMember; + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка при поиске объекта"); + throw; + } + } + + public IEnumerable ReadFamilyMembers() + { + _logger.LogInformation("Получение всех объектов"); + try + { + using var connection = new NpgsqlConnection(_connectionString.ConnectionString); + var querySelect = "SELECT * FROM FamilyMember"; + var familyMembers = connection.Query(querySelect); + _logger.LogDebug("Полученные объекты: {json}", JsonConvert.SerializeObject(familyMembers)); + return familyMembers; + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка при чтении объектов"); + throw; + } + } + + public void UpdateFamilyMember(FamilyMember familyMember) + { + _logger.LogInformation("Редактирование объекта"); + _logger.LogDebug("Объект: {json}", JsonConvert.SerializeObject(familyMember)); + try + { + using var connection = new NpgsqlConnection(_connectionString.ConnectionString); + var queryUpdate = @"UPDATE FamilyMember + SET + familyId=@FamilyId, + Name=@Name, + MemberType=@MemberType + WHERE Id=@Id"; + connection.Execute(queryUpdate, new + { + familyMember.Id, + familyMember.FamilyId, + familyMember.Name, + familyMember.MemberType + }); + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка при редактировании объекта"); + throw; + } + } + } +} diff --git a/FamilyBudget/FamilyBudget/Repositories/Implementations/FamilyRepository.cs b/FamilyBudget/FamilyBudget/Repositories/Implementations/FamilyRepository.cs new file mode 100644 index 0000000..ad9aa6a --- /dev/null +++ b/FamilyBudget/FamilyBudget/Repositories/Implementations/FamilyRepository.cs @@ -0,0 +1,128 @@ +using Dapper; +using FamilyBudget.Entities; +using Microsoft.Extensions.Logging; +using Newtonsoft.Json; +using Npgsql; +using System; +using System.Collections.Generic; +using System.Data.SqlClient; +using System.Linq; +using System.Text; +using System.Text.Json.Nodes; +using System.Text.Json.Serialization; +using System.Threading.Tasks; + +namespace FamilyBudget.Repositories.Implementations +{ + internal class FamilyRepository : IFamilyRepository + { + private readonly IConnectionString _connectionString; + private readonly ILogger _logger; + + public FamilyRepository(ConnectionString connectionString, ILogger logger) + { + _connectionString = connectionString; + _logger = logger; + } + + public void CreateFamily(Family family) + { + _logger.LogInformation("Объект создан"); + _logger.LogDebug("Объект: {json}", JsonConvert.SerializeObject(family)); + try + { + using var connection = new NpgsqlConnection(_connectionString.ConnectionString); + var queryInsert = @" + INSERT INTO Family (Name) + Values (@Name)"; + connection.Execute(queryInsert, family); + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошбика при добавлении объекта"); + throw; + } + } + + public void DeleteFamily(int id) + { + _logger.LogInformation($"Удаление объекта"); + _logger.LogDebug($"Объект: {id} удален"); + try + { + using var connection = new NpgsqlConnection(_connectionString.ConnectionString); + var queryDelete = @" + DELETE FROM family + WHERE Id=@id"; + connection.Execute(queryDelete, new { id }); + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка при удалении объекта"); + throw; + } + } + + public IEnumerable ReadFamilies() + { + _logger.LogInformation("Получение всех объектов"); + try + { + using var connection = new NpgsqlConnection(_connectionString.ConnectionString); + var querySelect = "SELECT * FROM Family"; + var failmies = connection.Query(querySelect); + _logger.LogDebug("Полученные объекты: {json}", JsonConvert.SerializeObject(failmies)); + return failmies; + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка при чтении объектов"); + throw; + } + } + + public Family ReadFamilyById(int id) + { + _logger.LogInformation("Получение объекта по идентификатору"); + _logger.LogDebug("Объект: {id}", id); + try + { + using var connection = new NpgsqlConnection(_connectionString.ConnectionString); + var querySelect = @" + SELECT * FROM family + WHERE Id=@Id"; + var obj = connection.QueryFirst(querySelect, new { id }); + _logger.LogDebug("Найденный объект: {json}", JsonConvert.SerializeObject(obj)); + return obj; + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка при поиске объекта"); + throw; + } + } + + public void UpdateFamily(Family family) + { + _logger.LogInformation("Редактирование объекта"); + _logger.LogDebug("Объект: {json}", + JsonConvert.SerializeObject(family)); + + try + { + using var connection = new NpgsqlConnection(_connectionString.ConnectionString); + var queryUpdate = @" + UPDATE family + SET + Name=@Name + WHERE Id=@Id"; + connection.Execute(queryUpdate, family); + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка при редактировании объекта"); + throw; + } + } + } +} diff --git a/FamilyBudget/FamilyBudget/Repositories/Implementations/IncomeBudgetCategoryRepository.cs b/FamilyBudget/FamilyBudget/Repositories/Implementations/IncomeBudgetCategoryRepository.cs new file mode 100644 index 0000000..152f034 --- /dev/null +++ b/FamilyBudget/FamilyBudget/Repositories/Implementations/IncomeBudgetCategoryRepository.cs @@ -0,0 +1,130 @@ +using Dapper; +using FamilyBudget.Entities; +using Microsoft.Extensions.Logging; +using Newtonsoft.Json; +using Npgsql; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace FamilyBudget.Repositories.Implementations +{ + internal class IncomeBudgetCategoryRepository : IIncomeBudgetCategoryRepository + { + private readonly IConnectionString _connectionString; + private readonly ILogger _logger; + public IncomeBudgetCategoryRepository(IConnectionString connectionString, ILogger logger) + { + _connectionString = connectionString; + _logger = logger; + } + + public void CreateIncomeBudgetCategory(IncomeBudgetCategory incomeBudgetCategory) + { + _logger.LogInformation("Добавление объекта"); + _logger.LogDebug("Объект: {json}", JsonConvert.SerializeObject(incomeBudgetCategory)); + + try + { + using var connection = new NpgsqlConnection(_connectionString.ConnectionString); + var queryInsert = @" + INSERT INTO IncomeBudgetCategory (IncomeCategoryType, Name) + VALUES (@IncomeCategoryType, @Name)"; + connection.Execute(queryInsert, incomeBudgetCategory); + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка при добавлении объекта"); + throw; + } + } + + public void DeleteIncomeBudgetCategory(int id) + { + _logger.LogInformation("Удаление объекта"); + _logger.LogDebug("Объект: {id}", id); + try + { + using var connection = new NpgsqlConnection(_connectionString.ConnectionString); + var queryDelete = @" + DELETE FROM IncomeBudgetCategory + WHERE Id=@id"; + connection.Execute(queryDelete, new { id }); + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка при удалении объекта"); + throw; + } + } + + public IEnumerable ReadIncomeBudgetCategories() + { + _logger.LogInformation("Получение всех объектов"); + try + { + using var connection = new NpgsqlConnection(_connectionString.ConnectionString); + var querySelect = "SELECT * FROM IncomeBudgetCategory"; + var incomes = connection.Query(querySelect); + _logger.LogDebug("Полученные объекты: {json}", JsonConvert.SerializeObject(incomes)); + return incomes; + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка при чтении объектов"); + throw; + } + } + + public IncomeBudgetCategory ReadIncomeBudgetCategoryById(int id) + { + _logger.LogInformation("Получение объекта по идентификатору"); + _logger.LogDebug("Объект: {id}", id); + try + { + using var connection = new NpgsqlConnection(_connectionString.ConnectionString); + var querySelect = @" + SELECT * FROM IncomeBudgetCategory + WHERE Id=@id"; + var income = connection.QueryFirst(querySelect, new { id }); + _logger.LogDebug("Найденный объект: {json}", JsonConvert.SerializeObject(income)); + return income; + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка при поиске объекта"); + throw; + } + } + + public void UpdateExpenseBudgetCategoryById(IncomeBudgetCategory income) + { + _logger.LogInformation("Редактирование объекта"); + _logger.LogDebug("Объект: {json}", JsonConvert.SerializeObject(income)); + try + { + using var connection = new NpgsqlConnection(_connectionString.ConnectionString); + var queryUpdate = @"UPDATE IncomeBudgetCategory + SET + Id=@Id, + Name=@Name, + IncomeCategoryType=@IncomeCategoryType + WHERE Id=@Id"; + connection.Execute(queryUpdate, new + { + income.Id, + income.Name, + income.IncomeCategoryType + }); + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка при редактировании объекта"); + throw; + } + } + } + +} diff --git a/FamilyBudget/FamilyBudget/Repositories/Implementations/IncomeBudgetRepository.cs b/FamilyBudget/FamilyBudget/Repositories/Implementations/IncomeBudgetRepository.cs new file mode 100644 index 0000000..0b75675 --- /dev/null +++ b/FamilyBudget/FamilyBudget/Repositories/Implementations/IncomeBudgetRepository.cs @@ -0,0 +1,109 @@ +using Dapper; +using FamilyBudget.Entities; +using Microsoft.Extensions.Logging; +using Newtonsoft.Json; +using Npgsql; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace FamilyBudget.Repositories.Implementations +{ + internal class IncomeBudgetRepository : IIncomeBudgetRepository + { + private readonly IConnectionString _connectionString; + private readonly ILogger _logger; + + public IncomeBudgetRepository(IConnectionString connectionString, ILogger logger) + { + _connectionString = connectionString; + _logger = logger; + } + public void CreateIncomeBudget(IncomeBudget incomeBudget) + { + _logger.LogInformation("Добавление объекта"); + _logger.LogDebug("Объект: {json}", + JsonConvert.SerializeObject(incomeBudget)); + try + { + using var connection = new NpgsqlConnection(_connectionString.ConnectionString); + connection.Open(); + using var transaction = connection.BeginTransaction(); + var queryInsert = @" + INSERT INTO IncomeBudget (FamilyMemberId, Date) + VALUES (@FamilyMemberId, @Date); + SELECT MAX(Id) FROM IncomeBudget"; + var incomeBudgetId = + connection.QueryFirst(queryInsert, incomeBudget, transaction); + var querySubInsert = @" + INSERT INTO FamilyMember_IncomeBudget (IncomeBudgetId, FamilyMemberId, Sum) + VALUES (@IncomeBudgetId, @FamilyMemberId, @Sum)"; + foreach (var elem in incomeBudget.FamilyMember_Incomes) + { + connection.Execute(querySubInsert, new + { + IncomeBudgetId = incomeBudgetId, + incomeBudget.FamilyMemberId, + elem.Sum + }, transaction); + } + transaction.Commit(); + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка при добавлении объекта"); + throw; + } + } + + public void DeleteIncomeBudget(int id) + { + _logger.LogInformation("Удаление объекта"); + _logger.LogDebug("Объект: {id}", id); + try + { + using var connection = new NpgsqlConnection(_connectionString.ConnectionString); + connection.Open(); + using var transaction = connection.BeginTransaction(); + var queryDeleteSub = @" + DELETE FROM FamilyMember_IncomeBudget + WHERE IncomeBudgetId = @id"; + connection.Execute(queryDeleteSub, new { id }, transaction); + + var queryDelete = @" + DELETE FROM IncomeBudget + WHERE Id = @id"; + connection.Execute(queryDelete, new { id }, transaction); + + transaction.Commit(); + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка при удалении объекта"); + throw; + } + } + + public IEnumerable ReadIncomeBudgets(DateTime? dateFrom = null, DateTime? dateTo = null, + int? familyMemberId = null, int? BudgetIncomeId = null) + { + _logger.LogInformation("Получение всех объектов"); + try + { + using var connection = new NpgsqlConnection(_connectionString.ConnectionString); + var querySelect = "SELECT * FROM IncomeBudget"; + var incomeBudgets = connection.Query(querySelect); + _logger.LogDebug("Полученные объекты: {json}", + JsonConvert.SerializeObject(incomeBudgets)); + return incomeBudgets; + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка при чтении объектов"); + throw; + } + } + } +} diff --git a/FamilyBudget/FamilyBudget/Resources/family.jpg b/FamilyBudget/FamilyBudget/Resources/family.jpg new file mode 100644 index 0000000..5034c97 Binary files /dev/null and b/FamilyBudget/FamilyBudget/Resources/family.jpg differ diff --git a/FamilyBudget/FamilyBudget/Resources/free-icon-dustbin-7709786.png b/FamilyBudget/FamilyBudget/Resources/free-icon-dustbin-7709786.png new file mode 100644 index 0000000..fca45d0 Binary files /dev/null and b/FamilyBudget/FamilyBudget/Resources/free-icon-dustbin-7709786.png differ diff --git a/FamilyBudget/FamilyBudget/Resources/free-icon-edit-tools-8847052.png b/FamilyBudget/FamilyBudget/Resources/free-icon-edit-tools-8847052.png new file mode 100644 index 0000000..587dc47 Binary files /dev/null and b/FamilyBudget/FamilyBudget/Resources/free-icon-edit-tools-8847052.png differ diff --git a/FamilyBudget/FamilyBudget/Resources/free-icon-plus-181672.png b/FamilyBudget/FamilyBudget/Resources/free-icon-plus-181672.png new file mode 100644 index 0000000..e83f8fc Binary files /dev/null and b/FamilyBudget/FamilyBudget/Resources/free-icon-plus-181672.png differ diff --git a/FamilyBudget/FamilyBudget/Resources/free-icon-plus-1816721.png b/FamilyBudget/FamilyBudget/Resources/free-icon-plus-1816721.png new file mode 100644 index 0000000..e83f8fc Binary files /dev/null and b/FamilyBudget/FamilyBudget/Resources/free-icon-plus-1816721.png differ diff --git a/FamilyBudget/FamilyBudget/appsettings.json b/FamilyBudget/FamilyBudget/appsettings.json new file mode 100644 index 0000000..21d8003 --- /dev/null +++ b/FamilyBudget/FamilyBudget/appsettings.json @@ -0,0 +1,15 @@ +{ + "Serilog": { + "Using": [ "Serilog.Sinks.File" ], + "MinimumLevel": "Debug", + "WriteTo": [ + { + "Name": "File", + "Args": { + "path": "Logs/familyBudget_log.txt", + "rollingInterval": "Day" + } + } + ] + } +}