From: Vásáry Dániel Date: Tue, 26 Sep 2017 09:47:04 +0000 (+0000) Subject: git-tfs-id: [http://tfs.userrendszerhaz.hu:8080/tfs/DefaultCollection]$/MediaCube... X-Git-Url: http://git.useribm.hu/?a=commitdiff_plain;h=3c7b0efa09210be87c4b96206aba00b4011d231d;p=mediacube.git git-tfs-id: [tfs.userrendszerhaz.hu:8080/tfs/DefaultCollection]$/MediaCube;C30470 --- diff --git a/client/AudioRecorder/App.config b/client/AudioRecorder/App.config new file mode 100644 index 00000000..0b1c1c84 --- /dev/null +++ b/client/AudioRecorder/App.config @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/client/AudioRecorder/AudioDeviceSelectorForm.Designer.cs b/client/AudioRecorder/AudioDeviceSelectorForm.Designer.cs new file mode 100644 index 00000000..dca56118 --- /dev/null +++ b/client/AudioRecorder/AudioDeviceSelectorForm.Designer.cs @@ -0,0 +1,122 @@ +namespace AudioRecorder { + partial class AudioDeviceSelectorForm { + /// + /// 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.audioDevicesComboBox = new System.Windows.Forms.ComboBox(); + this.okButton = new System.Windows.Forms.Button(); + this.label1 = new System.Windows.Forms.Label(); + this.cancelButton = new System.Windows.Forms.Button(); + this.groupBox1 = new System.Windows.Forms.GroupBox(); + this.groupBox2 = new System.Windows.Forms.GroupBox(); + this.groupBox1.SuspendLayout(); + this.groupBox2.SuspendLayout(); + this.SuspendLayout(); + // + // audioDevicesComboBox + // + this.audioDevicesComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.audioDevicesComboBox.FormattingEnabled = true; + this.audioDevicesComboBox.Location = new System.Drawing.Point(9, 32); + this.audioDevicesComboBox.Name = "audioDevicesComboBox"; + this.audioDevicesComboBox.Size = new System.Drawing.Size(359, 21); + this.audioDevicesComboBox.TabIndex = 0; + // + // okButton + // + this.okButton.Location = new System.Drawing.Point(293, 16); + this.okButton.Name = "okButton"; + this.okButton.Size = new System.Drawing.Size(75, 23); + this.okButton.TabIndex = 1; + this.okButton.Text = "OK"; + this.okButton.UseVisualStyleBackColor = true; + this.okButton.Click += new System.EventHandler(this.okButton_Click); + // + // label1 + // + this.label1.AutoEllipsis = true; + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(10, 7); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(101, 13); + this.label1.TabIndex = 2; + this.label1.Text = "Select audio device"; + // + // cancelButton + // + this.cancelButton.Location = new System.Drawing.Point(9, 19); + this.cancelButton.Name = "cancelButton"; + this.cancelButton.Size = new System.Drawing.Size(75, 23); + this.cancelButton.TabIndex = 3; + this.cancelButton.Text = "Cancel"; + this.cancelButton.UseVisualStyleBackColor = true; + this.cancelButton.Click += new System.EventHandler(this.cancelButton_Click); + // + // groupBox1 + // + this.groupBox1.Controls.Add(this.label1); + this.groupBox1.Controls.Add(this.audioDevicesComboBox); + this.groupBox1.Location = new System.Drawing.Point(2, 2); + this.groupBox1.Name = "groupBox1"; + this.groupBox1.Size = new System.Drawing.Size(376, 69); + this.groupBox1.TabIndex = 4; + this.groupBox1.TabStop = false; + // + // groupBox2 + // + this.groupBox2.Controls.Add(this.okButton); + this.groupBox2.Controls.Add(this.cancelButton); + this.groupBox2.Location = new System.Drawing.Point(2, 77); + this.groupBox2.Name = "groupBox2"; + this.groupBox2.Size = new System.Drawing.Size(376, 45); + this.groupBox2.TabIndex = 5; + this.groupBox2.TabStop = false; + // + // AudioDeviceSelectorForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(381, 127); + this.ControlBox = false; + this.Controls.Add(this.groupBox2); + this.Controls.Add(this.groupBox1); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow; + this.Name = "AudioDeviceSelectorForm"; + this.Text = "AudioRecorder input device selector"; + this.groupBox1.ResumeLayout(false); + this.groupBox1.PerformLayout(); + this.groupBox2.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.ComboBox audioDevicesComboBox; + private System.Windows.Forms.Button okButton; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Button cancelButton; + private System.Windows.Forms.GroupBox groupBox1; + private System.Windows.Forms.GroupBox groupBox2; + } +} \ No newline at end of file diff --git a/client/AudioRecorder/AudioDeviceSelectorForm.cs b/client/AudioRecorder/AudioDeviceSelectorForm.cs new file mode 100644 index 00000000..a0fb7437 --- /dev/null +++ b/client/AudioRecorder/AudioDeviceSelectorForm.cs @@ -0,0 +1,92 @@ +using System; +using System.Collections.Generic; +using NAudio.CoreAudioApi; +using System.Windows.Forms; + +namespace AudioRecorder { + public partial class AudioDeviceSelectorForm : Form, IAudioDeviceSelectorForm { + + private IAudioDevicesDetector devicesDetector; + private List deviceNames = new List(); + private IMainForm mainForm; + private bool deviceConnected; + + public AudioDeviceSelectorForm(IMainForm mainForm) { + InitializeComponent(); + InitializeControlTexts(); + StartPosition = FormStartPosition.CenterParent; + devicesDetector = new AudioDevicesDetector(); + this.mainForm = mainForm; + audioDevicesComboBox.KeyDown += (sender, args) => { + if (args.KeyCode == Keys.Return) + okButton.PerformClick(); + }; + audioDevicesComboBox.KeyDown += (sender, args) => { + if (args.KeyCode == Keys.Escape) + { + Dispose(); + } + }; + findDevicesAnd(); + } + + private void InitializeControlTexts() + { + cancelButton.Text = Resources.MEGSE; + label1.Text = Resources.VALASSZON_MIKROFONT; + this.Text = Resources.MIKROFON_VALASZTAS; + } + + public AudioDeviceSelectorForm(IMainForm mainForm, IAudioDevicesDetector devicesDetector) { + InitializeComponent(); + this.devicesDetector = devicesDetector; + this.mainForm = mainForm; + findDevicesAnd(); + } + + private void findDevicesAnd() { + devicesDetector.findDevices(); + deviceNames = devicesDetector.getDeviceNames(); + foreach (String actual in deviceNames) + audioDevicesComboBox.Items.Add(actual); + if (deviceNames.Count > 0) { + audioDevicesComboBox.SelectedIndex = 0; + okButton.Enabled = true; + deviceConnected = true; + } else { + DialogResult result = MessageBox.Show(StringResources.CONNECT_AUDIO_DEVICE, StringResources.ERROR_TITLE, MessageBoxButtons.OK, MessageBoxIcon.Error); + deviceConnected = false; + mainForm.disableRecordButton(); + Dispose(); + } + } + + private void okButton_Click(object sender, EventArgs e) { + int index = audioDevicesComboBox.SelectedIndex; + String value = deviceNames[index]; + mainForm.initWavRecorder(index, value); + Dispose(); + } + + public List getDeviceNames() { + return deviceNames; + } + + public bool isDeviceConnected() { + return deviceConnected; + } + + public bool isDisposed() { + return IsDisposed; + } + + public List getDevices() { + return devicesDetector.getDevices(); + } + + private void cancelButton_Click(object sender, EventArgs e) + { + Dispose(); + } + } +} diff --git a/client/AudioRecorder/AudioDeviceSelectorForm.resx b/client/AudioRecorder/AudioDeviceSelectorForm.resx new file mode 100644 index 00000000..29dcb1b3 --- /dev/null +++ b/client/AudioRecorder/AudioDeviceSelectorForm.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/client/AudioRecorder/AudioDevicesDetector.cs b/client/AudioRecorder/AudioDevicesDetector.cs new file mode 100644 index 00000000..a2e69b02 --- /dev/null +++ b/client/AudioRecorder/AudioDevicesDetector.cs @@ -0,0 +1,40 @@ +using System; +using System.Collections.Generic; +using System.Management; +using NAudio.CoreAudioApi; +using System.Diagnostics; + +namespace AudioRecorder { + public class AudioDevicesDetector : IAudioDevicesDetector { + + private List deviceNames; + private List devices; + + public AudioDevicesDetector() { + deviceNames = new List(); + devices = new List(); + } + + public void findDevices() { + var deviceEnum = new MMDeviceEnumerator(); + MMDeviceCollection d = deviceEnum.EnumerateAudioEndPoints(DataFlow.Capture, DeviceState.Active); + foreach (MMDevice actualDevice in d) + { + deviceNames.Add(actualDevice.FriendlyName); + devices.Add(actualDevice); + } + } + + protected virtual ManagementObjectSearcher newManagementObjectSearcher() { + return new ManagementObjectSearcher(StringResources.QUERY_STRING); + } + + public List getDeviceNames() { + return deviceNames; + } + + public List getDevices() { + return devices; + } + } +} diff --git a/client/AudioRecorder/AudioRecorder.csproj b/client/AudioRecorder/AudioRecorder.csproj new file mode 100644 index 00000000..145dd2e1 --- /dev/null +++ b/client/AudioRecorder/AudioRecorder.csproj @@ -0,0 +1,198 @@ + + + + + Debug + AnyCPU + {616D8912-16A4-493B-BC45-53BF2A5D9B92} + WinExe + Properties + AudioRecorder + AudioRecorder + v4.6.1 + 512 + + SAK + SAK + SAK + SAK + + + AnyCPU + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + false + + + AnyCPU + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + false + + + true + bin\x86\Debug\ + DEBUG;TRACE + full + x86 + prompt + MinimumRecommendedRules.ruleset + false + + + bin\x86\Release\ + TRACE + true + pdbonly + x86 + prompt + MinimumRecommendedRules.ruleset + false + + + + + ..\packages\NAudio.1.8.3\lib\net35\NAudio.dll + + + ..\packages\Newtonsoft.Json.10.0.3\lib\net20\Newtonsoft.Json.dll + + + + + + + + + + + + + + Form + + + AudioDeviceSelectorForm.cs + + + UserControl + + + CustomTrackBar.cs + + + Form + + + FileNameForm.cs + + + + + + + + + + Form + + + MainForm.cs + + + + + + + + + True + True + Resources.resx + + + + + + + AudioDeviceSelectorForm.cs + + + CustomTrackBar.cs + + + FileNameForm.cs + + + MainForm.cs + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + True + Resources.resx + True + + + ResXFileCodeGenerator + Resources.Designer.cs + + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + True + Settings.settings + True + + + PreserveNewest + + + + + Designer + + + + + + + + + + {8cc7c930-9dbf-487b-aed5-776937a649d5} + OctopusClient + + + + + + + + + + + + + \ No newline at end of file diff --git a/client/AudioRecorder/AudioRecorder.csproj.vspscc b/client/AudioRecorder/AudioRecorder.csproj.vspscc new file mode 100644 index 00000000..feffdeca --- /dev/null +++ b/client/AudioRecorder/AudioRecorder.csproj.vspscc @@ -0,0 +1,10 @@ +"" +{ +"FILE_VERSION" = "9237" +"ENLISTMENT_CHOICE" = "NEVER" +"PROJECT_FILE_RELATIVE_PATH" = "" +"NUMBER_OF_EXCLUDED_FILES" = "0" +"ORIGINAL_PROJECT_FILE_PATH" = "" +"NUMBER_OF_NESTED_PROJECTS" = "0" +"SOURCE_CONTROL_SETTINGS_PROVIDER" = "PROVIDER" +} diff --git a/client/AudioRecorder/CustomTrackBar.Designer.cs b/client/AudioRecorder/CustomTrackBar.Designer.cs new file mode 100644 index 00000000..07cce022 --- /dev/null +++ b/client/AudioRecorder/CustomTrackBar.Designer.cs @@ -0,0 +1,75 @@ +namespace AudioRecorder +{ + partial class CustomTrackBar + { + /// + /// 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 Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.trackBar1 = new System.Windows.Forms.TrackBar(); + this.tickLabel = new System.Windows.Forms.Label(); + ((System.ComponentModel.ISupportInitialize)(this.trackBar1)).BeginInit(); + this.SuspendLayout(); + // + // trackBar1 + // + this.trackBar1.Location = new System.Drawing.Point(0, 0); + this.trackBar1.Name = "trackBar1"; + this.trackBar1.Orientation = System.Windows.Forms.Orientation.Vertical; + this.trackBar1.Size = new System.Drawing.Size(45, 214); + this.trackBar1.TabIndex = 0; + this.trackBar1.TickFrequency = 0; + this.trackBar1.ValueChanged += new System.EventHandler(this.trackBar1_ValueChanged); + // + // tickLabel + // + this.tickLabel.AutoSize = true; + this.tickLabel.ForeColor = System.Drawing.SystemColors.AppWorkspace; + this.tickLabel.Location = new System.Drawing.Point(19, 100); + this.tickLabel.Name = "tickLabel"; + this.tickLabel.Size = new System.Drawing.Size(13, 13); + this.tickLabel.TabIndex = 1; + this.tickLabel.Text = "_"; + // + // CustomTrackBar + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.tickLabel); + this.Controls.Add(this.trackBar1); + this.Name = "CustomTrackBar"; + this.Size = new System.Drawing.Size(40, 213); + ((System.ComponentModel.ISupportInitialize)(this.trackBar1)).EndInit(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.TrackBar trackBar1; + private System.Windows.Forms.Label tickLabel; + } +} diff --git a/client/AudioRecorder/CustomTrackBar.cs b/client/AudioRecorder/CustomTrackBar.cs new file mode 100644 index 00000000..97c101a3 --- /dev/null +++ b/client/AudioRecorder/CustomTrackBar.cs @@ -0,0 +1,40 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Data; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace AudioRecorder +{ + public partial class CustomTrackBar : UserControl + { + public MainForm MainForm { get; set; } + + public CustomTrackBar() + { + InitializeComponent(); + } + + public void setMinimumMaximumSizesAndVolume(int minimum, int maximum, int value) + { + trackBar1.Maximum = maximum; + trackBar1.Minimum = minimum; + trackBar1.Value = value; + } + + public void setTickLabelLocationByPercentage(int percentage) + { + //mert a magasága a trackbarnak 200 + tickLabel.Location = new Point(tickLabel.Location.X, 200 - (percentage * 2)); + } + + private void trackBar1_ValueChanged(object sender, EventArgs e) + { + MainForm.volumeChanged(sender, e); + } + } +} diff --git a/client/AudioRecorder/CustomTrackBar.resx b/client/AudioRecorder/CustomTrackBar.resx new file mode 100644 index 00000000..29dcb1b3 --- /dev/null +++ b/client/AudioRecorder/CustomTrackBar.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/client/AudioRecorder/FileNameForm.Designer.cs b/client/AudioRecorder/FileNameForm.Designer.cs new file mode 100644 index 00000000..97207221 --- /dev/null +++ b/client/AudioRecorder/FileNameForm.Designer.cs @@ -0,0 +1,59 @@ +namespace AudioRecorder { + partial class FileNameForm { + /// + /// 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.octopusIDSelector1 = new OctopusClient.OctopusIDSelector(); + this.SuspendLayout(); + // + // octopusIDSelector1 + // + this.octopusIDSelector1.BackColor = System.Drawing.Color.White; + this.octopusIDSelector1.IDChangedEvent = null; + this.octopusIDSelector1.Location = new System.Drawing.Point(7, 8); + this.octopusIDSelector1.Margin = new System.Windows.Forms.Padding(10); + this.octopusIDSelector1.Name = "octopusIDSelector1"; + this.octopusIDSelector1.Padding = new System.Windows.Forms.Padding(10); + this.octopusIDSelector1.Size = new System.Drawing.Size(271, 376); + this.octopusIDSelector1.TabIndex = 5; + // + // FileNameForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.BackColor = System.Drawing.Color.White; + this.ClientSize = new System.Drawing.Size(276, 383); + this.ControlBox = false; + this.Controls.Add(this.octopusIDSelector1); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow; + this.Name = "FileNameForm"; + this.Text = "File Name"; + this.Load += new System.EventHandler(this.FileNameForm_Load); + this.ResumeLayout(false); + + } + + #endregion + private OctopusClient.OctopusIDSelector octopusIDSelector1; + } +} \ No newline at end of file diff --git a/client/AudioRecorder/FileNameForm.cs b/client/AudioRecorder/FileNameForm.cs new file mode 100644 index 00000000..f876bdc2 --- /dev/null +++ b/client/AudioRecorder/FileNameForm.cs @@ -0,0 +1,45 @@ +using System; +using System.Windows.Forms; +using OctopusClient; + +namespace AudioRecorder { + public partial class FileNameForm : Form { + + private String result; + private IMainForm mainForm; + private ISettings settings; + public FileNameForm(IMainForm mainForm, ISettings settings) { + StartPosition = FormStartPosition.CenterParent; + InitializeComponent(); + this.settings = settings; + this.mainForm = mainForm; + octopusIDSelector1.Disposeabel = true; + octopusIDSelector1.IDChangedEvent = IdChangedEvent; + octopusIDSelector1.Configuration = new OctopusConfiguration() { Address = settings.getAddress(), Password = settings.getPassword(), UserName = settings.getUserName(), Timeout = settings.getTimeout() }; + octopusIDSelector1.KeyDown += (sender, args) => { + if (args.KeyCode == Keys.Escape) + { + Dispose(); + } + }; + } + + private void IdChangedEvent(String id) { + result = String.Format("{0}.wav", id); + if (!result.EndsWith(".wav")) + result = String.Format("{0}{1}", result, StringResources.DOT_WAV); + mainForm.recordFireEvent(result, id); + Dispose(); + } + + private void FileNameForm_Load(object sender, EventArgs e) + { + + } + + private void cancelButton_Click(object sender, EventArgs e) + { + Dispose(); + } + } +} diff --git a/client/AudioRecorder/FileNameForm.resx b/client/AudioRecorder/FileNameForm.resx new file mode 100644 index 00000000..29dcb1b3 --- /dev/null +++ b/client/AudioRecorder/FileNameForm.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/client/AudioRecorder/FileWorker.cs b/client/AudioRecorder/FileWorker.cs new file mode 100644 index 00000000..b35bd472 --- /dev/null +++ b/client/AudioRecorder/FileWorker.cs @@ -0,0 +1,19 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.IO; + +namespace AudioRecorder { + public class FileWorker : IFileWorker { + + public void copy(String source, String destination) { + File.Copy(source, destination, true); + } + + public void deleteFiles(List files) { + foreach (String actual in files) + if (File.Exists(actual)) + File.Delete(actual); + } + } +} diff --git a/client/AudioRecorder/IAudioDeviceSelectorForm.cs b/client/AudioRecorder/IAudioDeviceSelectorForm.cs new file mode 100644 index 00000000..9367c14b --- /dev/null +++ b/client/AudioRecorder/IAudioDeviceSelectorForm.cs @@ -0,0 +1,13 @@ +using System; +using System.Collections.Generic; +using NAudio.CoreAudioApi; +using System.Windows.Forms; +namespace AudioRecorder { + public interface IAudioDeviceSelectorForm { + DialogResult ShowDialog(); + List getDeviceNames(); + bool isDeviceConnected(); + bool isDisposed(); + List getDevices(); + } +} diff --git a/client/AudioRecorder/IAudioDevicesDetector.cs b/client/AudioRecorder/IAudioDevicesDetector.cs new file mode 100644 index 00000000..caf83c2b --- /dev/null +++ b/client/AudioRecorder/IAudioDevicesDetector.cs @@ -0,0 +1,13 @@ +using System; +using System.Collections.Generic; +using NAudio.CoreAudioApi; + +namespace AudioRecorder +{ + public interface IAudioDevicesDetector + { + void findDevices(); + List getDeviceNames(); + List getDevices(); + } +} diff --git a/client/AudioRecorder/IFileWorker.cs b/client/AudioRecorder/IFileWorker.cs new file mode 100644 index 00000000..a7eb761c --- /dev/null +++ b/client/AudioRecorder/IFileWorker.cs @@ -0,0 +1,10 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace AudioRecorder { + public interface IFileWorker { + void copy(String source, String destination); + void deleteFiles(List files); + } +} diff --git a/client/AudioRecorder/IMainForm.cs b/client/AudioRecorder/IMainForm.cs new file mode 100644 index 00000000..74dd919d --- /dev/null +++ b/client/AudioRecorder/IMainForm.cs @@ -0,0 +1,13 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace AudioRecorder { + public interface IMainForm { + void initWavRecorder(int index, String selectedAudioName); + void recordFireEvent(String currentFilePath, String id); + void disableRecordButton(); + + void setPanelSizeHeight(float height); + } +} diff --git a/client/AudioRecorder/IRecorder.cs b/client/AudioRecorder/IRecorder.cs new file mode 100644 index 00000000..3e6e6f1d --- /dev/null +++ b/client/AudioRecorder/IRecorder.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace AudioRecorder +{ + public interface IRecorder + { + void StartRecording(String filePath); + void StopRecording(); + void pauseRecording(bool pausing); + List getCreatedFiles(); + String getCurentWavFilePath(); + } +} diff --git a/client/AudioRecorder/ISettings.cs b/client/AudioRecorder/ISettings.cs new file mode 100644 index 00000000..4fd1085e --- /dev/null +++ b/client/AudioRecorder/ISettings.cs @@ -0,0 +1,15 @@ +using System; + +namespace AudioRecorder { + public interface ISettings { + String getAudioDeviceName(); + String getUncPath(); + int getLoudValue(); + String getWorkingDir(); + Uri getAddress(); + String getUserName(); + String getPassword(); + int getTimeout(); + void addSelectedAudio(String value, String fileName); + } +} diff --git a/client/AudioRecorder/ITimeCodeWorker.cs b/client/AudioRecorder/ITimeCodeWorker.cs new file mode 100644 index 00000000..8753dd6e --- /dev/null +++ b/client/AudioRecorder/ITimeCodeWorker.cs @@ -0,0 +1,12 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace AudioRecorder { + public interface ITimeCodeWorker { + void Start(); + void Stop(); + + void Pause(bool pausing); + } +} diff --git a/client/AudioRecorder/JsonSettings.cs b/client/AudioRecorder/JsonSettings.cs new file mode 100644 index 00000000..02ba3df6 --- /dev/null +++ b/client/AudioRecorder/JsonSettings.cs @@ -0,0 +1,94 @@ +using System; +using System.Collections.Generic; +using Newtonsoft.Json; +using System.IO; +namespace AudioRecorder +{ + public class JsonSettings : ISettings + { + public String audio_device_name { get; set; } + public String unc_path { get; set; } + public int loud_percent { get; set; } + public String working_dir { get; set; } + + public Uri address; + public String userName; + public String password; + public int timeout; + + private JsonSettings() + { + + } + + public static JsonSettings GetInstance(string configFileName) + { + string configuration = File.ReadAllText(configFileName); + KnownTypesBinder knownTypesBinder = new KnownTypesBinder + { + KnownTypes = new List { typeof(String), typeof(String), typeof(String), typeof(int), } + }; + JsonSerializerSettings settings = new JsonSerializerSettings + { + TypeNameHandling = TypeNameHandling.Objects, + SerializationBinder = knownTypesBinder, + }; + + return JsonConvert.DeserializeObject(configuration, settings); + } + + //public void addSelectedAudio(String value, String fileName) { } + public String getAudioDeviceName() + { + return audio_device_name; + } + public String getUncPath() + { + return unc_path; + } + + public int getLoudValue() + { + return loud_percent; + } + + public String getWorkingDir() + { + return working_dir; + } + + Uri ISettings.getAddress() + { + return address; + } + + string ISettings.getUserName() + { + return userName; + } + + string ISettings.getPassword() + { + return password; + } + + int ISettings.getTimeout() + { + return timeout; + } + + public void addSelectedAudio(string value, string fileName) + { + try + { + string json = File.ReadAllText(fileName); + dynamic jsonObj = JsonConvert.DeserializeObject(json); + jsonObj["audio_device_name"] = value; + string output = Newtonsoft.Json.JsonConvert.SerializeObject(jsonObj, Newtonsoft.Json.Formatting.Indented); + File.Delete(fileName); + File.WriteAllText(fileName, output); + } + catch (Exception e) { } + } + } +} diff --git a/client/AudioRecorder/KnownTypesBinder.cs b/client/AudioRecorder/KnownTypesBinder.cs new file mode 100644 index 00000000..b396da35 --- /dev/null +++ b/client/AudioRecorder/KnownTypesBinder.cs @@ -0,0 +1,23 @@ +using Newtonsoft.Json.Serialization; +using System; +using System.Collections.Generic; +using System.Linq; + +namespace AudioRecorder +{ + public class KnownTypesBinder : ISerializationBinder + { + public IList KnownTypes { get; set; } + + public Type BindToType(string assemblyName, string typeName) + { + return KnownTypes.SingleOrDefault(t => t.Name == typeName); + } + + public void BindToName(Type serializedType, out string assemblyName, out string typeName) + { + assemblyName = null; + typeName = serializedType.Name; + } + } +} diff --git a/client/AudioRecorder/MainForm.Designer.cs b/client/AudioRecorder/MainForm.Designer.cs new file mode 100644 index 00000000..bc203166 --- /dev/null +++ b/client/AudioRecorder/MainForm.Designer.cs @@ -0,0 +1,243 @@ +using System; +namespace AudioRecorder { + + partial class MainForm { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) { + if (disposing && (components != null)) { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MainForm)); + this.recordButton = new System.Windows.Forms.Button(); + this.stopButton = new System.Windows.Forms.Button(); + this.timecodeLabel = new System.Windows.Forms.Label(); + this.selectAudioButton = new System.Windows.Forms.Button(); + this.groupBox1 = new System.Windows.Forms.GroupBox(); + this.groupBox4 = new System.Windows.Forms.GroupBox(); + this.pauseButton = new System.Windows.Forms.Button(); + this.groupBox2 = new System.Windows.Forms.GroupBox(); + this.volumePanel = new System.Windows.Forms.Panel(); + this.customTrackBar1 = new AudioRecorder.CustomTrackBar(); + this.fileNameLabel = new System.Windows.Forms.Label(); + this.playButton = new System.Windows.Forms.Button(); + this.groupBox3 = new System.Windows.Forms.GroupBox(); + this.groupBox1.SuspendLayout(); + this.groupBox4.SuspendLayout(); + this.groupBox2.SuspendLayout(); + this.groupBox3.SuspendLayout(); + this.SuspendLayout(); + // + // recordButton + // + this.recordButton.BackColor = System.Drawing.Color.White; + this.recordButton.BackgroundImageLayout = System.Windows.Forms.ImageLayout.None; + this.recordButton.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(238))); + this.recordButton.Image = ((System.Drawing.Image)(resources.GetObject("recordButton.Image"))); + this.recordButton.ImageAlign = System.Drawing.ContentAlignment.MiddleRight; + this.recordButton.Location = new System.Drawing.Point(15, 14); + this.recordButton.Name = "recordButton"; + this.recordButton.Size = new System.Drawing.Size(181, 56); + this.recordButton.TabIndex = 0; + this.recordButton.Text = "Record"; + this.recordButton.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText; + this.recordButton.UseVisualStyleBackColor = false; + this.recordButton.Click += new System.EventHandler(this.record_Click); + // + // stopButton + // + this.stopButton.BackColor = System.Drawing.Color.White; + this.stopButton.BackgroundImageLayout = System.Windows.Forms.ImageLayout.None; + this.stopButton.Enabled = false; + this.stopButton.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(238))); + this.stopButton.Image = ((System.Drawing.Image)(resources.GetObject("stopButton.Image"))); + this.stopButton.ImageAlign = System.Drawing.ContentAlignment.MiddleRight; + this.stopButton.Location = new System.Drawing.Point(15, 115); + this.stopButton.Name = "stopButton"; + this.stopButton.Size = new System.Drawing.Size(181, 38); + this.stopButton.TabIndex = 1; + this.stopButton.Text = "Stop "; + this.stopButton.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText; + this.stopButton.UseVisualStyleBackColor = false; + this.stopButton.Click += new System.EventHandler(this.stop_Click); + // + // timecodeLabel + // + this.timecodeLabel.AutoSize = true; + this.timecodeLabel.Font = new System.Drawing.Font("Calibri", 28F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(238))); + this.timecodeLabel.Location = new System.Drawing.Point(9, 15); + this.timecodeLabel.Name = "timecodeLabel"; + this.timecodeLabel.Size = new System.Drawing.Size(202, 46); + this.timecodeLabel.TabIndex = 2; + this.timecodeLabel.Text = "00:00:00:00"; + // + // selectAudioButton + // + this.selectAudioButton.BackColor = System.Drawing.Color.White; + this.selectAudioButton.Location = new System.Drawing.Point(8, 19); + this.selectAudioButton.Name = "selectAudioButton"; + this.selectAudioButton.Size = new System.Drawing.Size(307, 23); + this.selectAudioButton.TabIndex = 3; + this.selectAudioButton.Text = "Select audio"; + this.selectAudioButton.UseVisualStyleBackColor = false; + this.selectAudioButton.Click += new System.EventHandler(this.selectAudioButton_Click); + // + // groupBox1 + // + this.groupBox1.Controls.Add(this.groupBox4); + this.groupBox1.Controls.Add(this.timecodeLabel); + this.groupBox1.Location = new System.Drawing.Point(15, 12); + this.groupBox1.Name = "groupBox1"; + this.groupBox1.Size = new System.Drawing.Size(228, 240); + this.groupBox1.TabIndex = 5; + this.groupBox1.TabStop = false; + // + // groupBox4 + // + this.groupBox4.Controls.Add(this.pauseButton); + this.groupBox4.Controls.Add(this.recordButton); + this.groupBox4.Controls.Add(this.stopButton); + this.groupBox4.Location = new System.Drawing.Point(8, 62); + this.groupBox4.Name = "groupBox4"; + this.groupBox4.Size = new System.Drawing.Size(214, 163); + this.groupBox4.TabIndex = 11; + this.groupBox4.TabStop = false; + // + // pauseButton + // + this.pauseButton.BackColor = System.Drawing.Color.White; + this.pauseButton.BackgroundImageLayout = System.Windows.Forms.ImageLayout.None; + this.pauseButton.Enabled = false; + this.pauseButton.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Bold); + this.pauseButton.Image = ((System.Drawing.Image)(resources.GetObject("pauseButton.Image"))); + this.pauseButton.ImageAlign = System.Drawing.ContentAlignment.MiddleRight; + this.pauseButton.Location = new System.Drawing.Point(15, 77); + this.pauseButton.Name = "pauseButton"; + this.pauseButton.Size = new System.Drawing.Size(181, 32); + this.pauseButton.TabIndex = 3; + this.pauseButton.Text = "Pause "; + this.pauseButton.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText; + this.pauseButton.UseVisualStyleBackColor = false; + this.pauseButton.Click += new System.EventHandler(this.pauseButton_Click); + // + // groupBox2 + // + this.groupBox2.Controls.Add(this.volumePanel); + this.groupBox2.Controls.Add(this.customTrackBar1); + this.groupBox2.Location = new System.Drawing.Point(262, 12); + this.groupBox2.Name = "groupBox2"; + this.groupBox2.Size = new System.Drawing.Size(85, 240); + this.groupBox2.TabIndex = 6; + this.groupBox2.TabStop = false; + // + // volumePanel + // + this.volumePanel.Anchor = System.Windows.Forms.AnchorStyles.Bottom; + this.volumePanel.AutoSize = true; + this.volumePanel.BackColor = System.Drawing.Color.Transparent; + this.volumePanel.Location = new System.Drawing.Point(14, 72); + this.volumePanel.Name = "volumePanel"; + this.volumePanel.Size = new System.Drawing.Size(15, 150); + this.volumePanel.TabIndex = 4; + // + // customTrackBar1 + // + this.customTrackBar1.Location = new System.Drawing.Point(39, 15); + this.customTrackBar1.MainForm = null; + this.customTrackBar1.Name = "customTrackBar1"; + this.customTrackBar1.Size = new System.Drawing.Size(40, 213); + this.customTrackBar1.TabIndex = 11; + // + // fileNameLabel + // + this.fileNameLabel.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.fileNameLabel.Location = new System.Drawing.Point(8, 45); + this.fileNameLabel.Name = "fileNameLabel"; + this.fileNameLabel.Size = new System.Drawing.Size(233, 23); + this.fileNameLabel.TabIndex = 8; + // + // playButton + // + this.playButton.BackColor = System.Drawing.Color.White; + this.playButton.Enabled = false; + this.playButton.Image = ((System.Drawing.Image)(resources.GetObject("playButton.Image"))); + this.playButton.ImageAlign = System.Drawing.ContentAlignment.MiddleRight; + this.playButton.Location = new System.Drawing.Point(247, 45); + this.playButton.Name = "playButton"; + this.playButton.Size = new System.Drawing.Size(68, 23); + this.playButton.TabIndex = 9; + this.playButton.Text = "Play"; + this.playButton.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText; + this.playButton.UseVisualStyleBackColor = false; + this.playButton.Click += new System.EventHandler(this.playButton_Click); + // + // groupBox3 + // + this.groupBox3.Controls.Add(this.selectAudioButton); + this.groupBox3.Controls.Add(this.playButton); + this.groupBox3.Controls.Add(this.fileNameLabel); + this.groupBox3.Location = new System.Drawing.Point(15, 258); + this.groupBox3.Name = "groupBox3"; + this.groupBox3.Size = new System.Drawing.Size(332, 86); + this.groupBox3.TabIndex = 10; + this.groupBox3.TabStop = false; + // + // MainForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.BackColor = System.Drawing.Color.White; + this.ClientSize = new System.Drawing.Size(365, 350); + this.Controls.Add(this.groupBox3); + this.Controls.Add(this.groupBox2); + this.Controls.Add(this.groupBox1); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow; + this.Name = "MainForm"; + this.Text = "AudioRecorder"; + this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.MainForm_FormClosing); + this.Load += new System.EventHandler(this.Form1_Load); + this.groupBox1.ResumeLayout(false); + this.groupBox1.PerformLayout(); + this.groupBox4.ResumeLayout(false); + this.groupBox2.ResumeLayout(false); + this.groupBox2.PerformLayout(); + this.groupBox3.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.Button recordButton; + private System.Windows.Forms.Button stopButton; + private System.Windows.Forms.Label timecodeLabel; + private System.Windows.Forms.Button selectAudioButton; + private System.Windows.Forms.GroupBox groupBox1; + private System.Windows.Forms.GroupBox groupBox2; + private System.Windows.Forms.Label fileNameLabel; + private System.Windows.Forms.Button playButton; + private System.Windows.Forms.Button pauseButton; + private System.Windows.Forms.GroupBox groupBox3; + private System.Windows.Forms.Panel volumePanel; + private System.Windows.Forms.GroupBox groupBox4; + private CustomTrackBar customTrackBar1; + } +} + diff --git a/client/AudioRecorder/MainForm.cs b/client/AudioRecorder/MainForm.cs new file mode 100644 index 00000000..5ae83e19 --- /dev/null +++ b/client/AudioRecorder/MainForm.cs @@ -0,0 +1,350 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Drawing; +using NAudio.CoreAudioApi; +using System.Windows.Forms; +using System.IO; + +namespace AudioRecorder +{ + public partial class MainForm : Form, IMainForm + { + + private const String CONFIG_FILE = "Resources/configuration.json"; + + private IRecorder recorder; + private ISettings settings; + private ITimeCodeWorker timeCodeWorker; + private IAudioDeviceSelectorForm selectorForm; + private IFileWorker fileWorker; + private String selectedAudioName; + private String currentFileName; + private String currentFilePath; + private bool recording; + private Timer countDownTimer; + private int countDown = 3; + private Point startingPanelLocation; + private Point originalPanelLocation; + private MMDevice currentDevice; + private bool pausing; + private float volumeHeight; + + public MainForm() + { + InitializeComponent(); + InitializeControlTexts(); + volumePanel.Paint += panelPaintEvent; + customTrackBar1.MainForm = this; + setVolumePanelData(); + try + { + settings = JsonSettings.GetInstance(CONFIG_FILE); + fileWorker = new FileWorker(); + countDownTimer = new Timer(); + countDownTimer.Interval = 1000; + countDownTimer.Tick += new EventHandler(timer_Tick); + selectorForm = new AudioDeviceSelectorForm(this); + if (selectorForm.isDeviceConnected()) + saveAudioDeviceToConfig(); + timeCodeWorker = new TimeCodeWorker(timecodeLabel); + } + catch (Exception e) + { + MessageBox.Show(e.Message, StringResources.ERROR_TITLE, MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void InitializeControlTexts() + { + recordButton.Text = Resources.FELVETEL; + stopButton.Text = Resources.LEALLITAS; + pauseButton.Text = Resources.SZUNET; + selectAudioButton.Text = Resources.VALASSZON_MIKROFONT; + playButton.Text = Resources.LEJATSZAS; + } + + private void setVolumeTrackerEdgesAndValue() + { + if (currentDevice != null) + { + customTrackBar1.setMinimumMaximumSizesAndVolume((int)currentDevice.AudioEndpointVolume.VolumeRange.MinDecibels, + (int)currentDevice.AudioEndpointVolume.VolumeRange.MaxDecibels, + (int)currentDevice.AudioEndpointVolume.MasterVolumeLevel); + } + } + + private void setVolumePanelData() + { + originalPanelLocation = volumePanel.Location; + startingPanelLocation = volumePanel.Location; + startingPanelLocation.X = 12; + startingPanelLocation.Y = 230; + } + + private void saveAudioDeviceToConfig() + { + if (String.IsNullOrEmpty(settings.getAudioDeviceName())) + recordButton.Enabled = false; + else + { + List devices = selectorForm.getDeviceNames(); + int indexOfDeviceName = devices.IndexOf(settings.getAudioDeviceName()); + if (indexOfDeviceName == -1) + showAudioDeviceSelectorForm(); + else + initWavRecorder(indexOfDeviceName, settings.getAudioDeviceName()); + } + } + + public void initWavRecorder(int index, String selectedAudioName) + { + int inputDeviceIndex = index; + this.selectedAudioName = selectedAudioName; + currentDevice = selectorForm.getDevices()[index]; + recorder = new WavRecorder(inputDeviceIndex, currentDevice, this); + recordButton.Enabled = true; + recordButton.BackColor = Color.Lime; + selectAudioButton.Text = selectedAudioName; + settings.addSelectedAudio(selectedAudioName, CONFIG_FILE); + setVolumeTrackerEdgesAndValue(); + customTrackBar1.setTickLabelLocationByPercentage(settings.getLoudValue()); + } + + public void setPanelSizeHeight(float height) + { + Debug.WriteLine(String.Format("height {0}", height)); + volumeHeight = height; + //volumePanel.Invalidate(); + //volumePanel.Update(); + volumePanel.Refresh(); + } + + private void panelPaintEvent(object sender, PaintEventArgs e) + { + //Debug.WriteLine(String.Format("volumeHeight {0}", volumeHeight)); + if (volumeHeight >= 200) + return; + if (!recording) + { + volumePanel.Controls.Clear(); + return; + } + if (volumeHeight > 500) + return; + float volumePercent = 100 / (200 / volumeHeight);// / 10; + Graphics g = e.Graphics; + Point panelLocation = startingPanelLocation; + panelLocation.Y = panelLocation.Y - (int)volumeHeight; + volumePanel.Location = panelLocation; + //volumeHeightnak mennyi a max értéke? akkor már tudnám, hogy az adott érték az hány %, és azt + //hasonlítanám össze a getLoudValue()-val + Color color = (volumePercent > settings.getLoudValue()) ? Color.Red : Color.Chartreuse; + SolidBrush brush = new SolidBrush(color); + //itt is a Rectangle.height értéke a volumeHeight százalékból lenne kiszámolva + //ha 70% a volumeHeight akkor a magasság is 70%-a lenne a területnek + Rectangle rectangle = new Rectangle(0, -10, 500, (int)volumeHeight); + g.FillRectangle(brush, rectangle); + } + + private void Form1_Load(object sender, EventArgs e) + { + + } + + private void stop_Click(object sender, EventArgs e) + { + stopRecording(); + } + + private void stopRecording() + { + try + { + recording = false; + recordButton.Enabled = true; + stopButton.Enabled = false; + selectAudioButton.Enabled = true; + pauseButton.Enabled = false; + recorder.StopRecording(); + timeCodeWorker.Stop(); + copyFileToUncPath(); + playButton.Enabled = true; + stopButton.BackColor = Color.White; + recordButton.BackColor = Color.Lime; + volumePanel.Refresh(); + } + catch (Exception e) + { + MessageBox.Show(e.Message, StringResources.ERROR_TITLE, MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void copyFileToUncPath() + { + String wavFileName = new FileInfo(recorder.getCurentWavFilePath()).Name; + String wavUncPath = String.Format("{0}{1}{2}", settings.getUncPath(), Path.DirectorySeparatorChar, wavFileName); + fileWorker.copy(recorder.getCurentWavFilePath(), wavUncPath); + } + + private void record_Click(object sender, EventArgs e) + { + FileNameForm nameForm = new FileNameForm(this, settings); + nameForm.ShowDialog(); + } + + private void startRecord() + { + try + { + recording = true; + recorder.StartRecording(currentFilePath); + timeCodeWorker.Start(); + pauseButton.Enabled = true; + recordButton.Enabled = false; + stopButton.Enabled = true; + selectAudioButton.Enabled = false; + playButton.Enabled = false; + stopButton.BackColor = Color.Red; + recordButton.BackColor = Color.White; + } + catch (Exception e) + { + MessageBox.Show(e.Message, StringResources.ERROR_TITLE, MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + public void recordFireEvent(String currentFileName, string id) + { + recordButton.Enabled = false; + String path = String.Format("{0}\\{1}", settings.getWorkingDir(), id); + if (!Directory.Exists(path)) + Directory.CreateDirectory(path); + SetCurrentFileNameAndPath(currentFileName, path); + fileNameLabel.Text = currentFileName; + setToolTipToFileNameLabel(currentFilePath); + countDownTimer.Start(); + } + + private void SetCurrentFileNameAndPath(string currentFileName, string path) + { + String filePath = String.Format("{0}\\{1}", path, currentFileName); + int i = 0; + this.currentFileName = currentFileName; + currentFilePath = String.Format("{0}\\{1}", path, currentFileName); + while (File.Exists(this.currentFilePath)) { + this.currentFileName = File.Exists(filePath) ? currentFileName.Insert(currentFileName.IndexOf("."), String.Format("_{0}", i)) : currentFileName; + currentFilePath = String.Format("{0}\\{1}", path, this.currentFileName); + i++; + } + + } + + void timer_Tick(object sender, EventArgs e) + { + recordButton.Text = countDown.ToString(); + countDown -= 1; + if (countDown < 0) + { + countDownTimer.Stop(); + recordButton.Text = StringResources.RECORD; + startRecord(); + countDown = 3; + } + } + + private void setToolTipToFileNameLabel(String filePath) + { + ToolTip toolTip = new ToolTip(); + String uncPath = String.Format("{0}{1}{2}", settings.getUncPath(), Path.DirectorySeparatorChar, currentFileName); + String tip = String.Format("{0}\n{1}", filePath, uncPath); + toolTip.SetToolTip(fileNameLabel, tip); + } + + private void selectAudioButton_Click(object sender, EventArgs e) + { + showAudioDeviceSelectorForm(); + } + + private void showAudioDeviceSelectorForm() + { + selectorForm = new AudioDeviceSelectorForm(this); + if (!selectorForm.isDisposed()) + selectorForm.ShowDialog(); + } + + private void MainForm_FormClosing(object sender, FormClosingEventArgs e) + { + if (recording) + { + DialogResult result = MessageBox.Show(StringResources.ARE_YOU_SURE_TO_QUIT_DURING_RECORDING, + StringResources.EXIT_TITLE, MessageBoxButtons.YesNo); + if (result == DialogResult.Yes) + { + stopRecording(); + deleteTemporariFiles(); + } + else + e.Cancel = true; + } + else + { + if (String.IsNullOrEmpty(settings.getAudioDeviceName())) + settings.addSelectedAudio(selectedAudioName, CONFIG_FILE); + deleteTemporariFiles(); + } + } + + private void deleteTemporariFiles() + { + if (recorder != null) + { + List createdFiles = recorder.getCreatedFiles(); + fileWorker.deleteFiles(createdFiles); + } + } + + public void disableRecordButton() + { + recordButton.Enabled = false; + } + + private void playButton_Click(object sender, EventArgs e) + { + Process process = new Process(); + ProcessStartInfo startInfo = new ProcessStartInfo(); + startInfo.FileName = new FileInfo(currentFileName).FullName; + process.StartInfo = startInfo; + process.Start(); + } + + private void volumeTrackBar_ValueChanged(object sender, EventArgs e) + { + TrackBar trackbar = sender as TrackBar; + if (trackbar == null) + return; + if (currentDevice == null) + return; + int value = trackbar.Value; + currentDevice.AudioEndpointVolume.MasterVolumeLevel = value; + } + + private void pauseButton_Click(object sender, EventArgs e) + { + pausing = !pausing; + recorder.pauseRecording(pausing); + timeCodeWorker.Pause(pausing); + } + + public void volumeChanged(object sender, EventArgs e) + { + TrackBar trackbar = sender as TrackBar; + if (trackbar == null) + return; + if (currentDevice == null) + return; + int value = trackbar.Value; + currentDevice.AudioEndpointVolume.MasterVolumeLevel = value; + } + } +} diff --git a/client/AudioRecorder/MainForm.resx b/client/AudioRecorder/MainForm.resx new file mode 100644 index 00000000..ec5dbe3a --- /dev/null +++ b/client/AudioRecorder/MainForm.resx @@ -0,0 +1,183 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + + + + iVBORw0KGgoAAAANSUhEUgAAABwAAAAcCAYAAAByDd+UAAAABGdBTUEAALGPC/xhBQAABHxJREFUSEuV + lntXGlcUxVldq5+jDCKJ7QyOIAIqIvj4BM33yR/N92oSBfGRiLaV9JGmicFU06rQILTE073vAwaEaO5a + Z8nCmftj77PPnQndtuThwy92o/FExXEf7US8A1S94nhtFj/zO/6P1/Bac9vnr91k8sstJ/7ttuOd7EXj + jVcz6U5jMS9Xy0X5uLqmip/5Hf/Ha3gt7+G9Zpu7rZ2YF8HNR/sxv9lcKoisr9+peO3+pN/kvdzDbPfp + VYlMx2BX6yyT647adFxdr61LF6r/XVmVk9RCdzviXZaj/rLZdvTaDnv5ctiV84WlkZsO1zXq49qa/AcI + Qe3iirQKRfkAq9+lF4V7UYDZfnAZGy8uFvIjNw/WNSAKBEUdgDrFVWkBQtA/+aJcLi3LRW5ZXs9mhW7d + sJdNBqx2m420TYOMosKKXKEIauYLPdA5gvQXXDqbX5KXfqa7hZ4OBAm/4gEDMgrConXsD0Ed2DYAQlAs + 6G+4Y0F/ZnPyLrModViLkWkyvQrG2WGcR6VRg1b7PQLE9qiB61nnBClF+R7oxIDezi3I69S8/OKnBSpP + 1JxyYDlDN0E6DEoRw6D6U9DW0TYDeg9IDwRIEPTH7Lz8nszKy0RWkNoGWbDTfcTBVaBAtBkG2kZFDALV + XBpFVMM6BURbl1Og4wDolQJl5NeZjFL4/J7fKYMV2p2IVy/wS3sgJO7K2GYVqSAYEBWdDll3nFqQNyhC + qOg3BUrLzwC9mE7LUTwlB18npex4ByGehw00nbb1FQWsM4l7b8JANQTRtr4igGCbBmUCoDn50UvJD+6s + VKeSGBG3zoS2P8AyO0OEB6Nte2Rte4t6AwhB1jZtnVZUm56TnwAh6PCbWTlAVaHu+f2EVMJuWwEbueEZ + 6lunFPVAWlHQOvZHgaCG1llFPdBUQvbuz8juvRmePO0Q0lM/zS4OWBecIWsdbbOKLOgF1ChFBmQV7QNi + QTsAbcd82YrGqbDOHlaPkaqz+ZxKHUFKke0REweYAqE/7JEFDfQIavZRzxQo0QdNTks5Oi2liCclxz3g + WHx35CY7CmTCwB4NKAqCrHWAaEUAARIEVZQiQFAbkbg8BWzTcc1YYBh3JrwG1dwA0TqEwYJoHdUcqh7p + /jwDRIN8qUz6Wg1qc4KguDxxPPkeTw3A9ODzuEFwTtgTDcoORTvVAxFStSCrCGqUIsBK6JMGefLYcRWI + 9YTAsKuPNi4e3jsT8WYfZMJg+kPrgiAmjv2hIvaIkA0LMpBglb5y+4c3Fx8dgNYOp5JdWqeDgNMhoMhG + W/UIEIJ0jzxl3SgQ62nY65bC7uDjiYsPSZzorf2pGa1oaIYGQEYR+/PY9GhU0cotx70c+37D1wG+FuzF + +iBlHUqFwdh2G4hl+ob77vBew19VmfC7BNkg9BQFNh1XtLEc9lpj32eGl7I37NZKjtdkj2y0byuq2kRA + 0LPaWBvHLROkB4wzZ4iDyw2pMFj8bkMPdYPX8p4bAfmcxdnhwPJEwoZVKK/jb5tlPld5gvCa3pyNXaHQ + /xR4sIm4FsxbAAAAAElFTkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAABGdBTUEAALGPC/xhBQAAAglJREFUSEvt + lFdPYnEUxOmEovTQBFFBegcRjFRFiqGFDqH6afyuPvo83nOzEHbXyH/3YbMPTjLJDTn3zI8hHMG3/ktJ + RSLRq1gsfuOewWKapXe4Zynnr0WDVqv1fTwe4+Xlhck0S+/8CPlaRPMny9frNRaLBdrtNrgA+tZH9emi + Q282GyyXS8xmM56+3++j2+3uKjuqT5eSV6sV5vM5JpMJhsMher0eT95sNvH09PR3AURLFRDtaDTiaTud + Dp6fn1Gv11GtVlEul1EoFNgDttvtnpYqGAwGfAWtVguNRoOnfXh4QLFYxP39PbLZLG5ubtgDptPpTxUQ + ba1Ww+PjI0qlEk+by+WQyWSQTCYRi8UQDofZAw5pqYJKpbKnvb29RTqdRiKRQCQSQTAYhM/ng9vtZg8g + 2l0F+Xyep6UKiDYajSIUCvFLPR4PLi8v4XQ6Ybfb2QOogru7O542lUohHo/ztIFAAF6vF1dXVzg/P4fD + 4aA/GEwmE/R6PXsAVUC0tHRHSxVcXFzwtDabDWazGQaDARqNBmq1GgqFgj2AfjC/34/r6+s97dnZGSwW + C4xGI3Q6HU5PT6FSqSCXyyGRSHbLjwcIhcI3WuhyuX6r4JBWKpWCmz1cTGY6Fa8ymeydSMlarRYnJydQ + KpXgPqfL+evSnd85Hz92nOjk0iDzueZMs2zn+lv/WALBB77ufbz/1a4AAAAAAElFTkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAABGdBTUEAALGPC/xhBQAAAT1JREFUSEvt + lEGLgmAQhqVYijwpeohIOol0EcmLEV4i8pTSJbVO1Z9p/+t26/yukxa40wdzaw89MDDMPMPrxU/78C/5 + 6nQ6391u90pFPc3qVQup16YSL8Ph8JbnOYqiAPXNcQupx6i+5oeOzufzvainWbN+IvVe8Tw6nU44Ho+g + Wb1qIfUYOBwO2O/3KMsSu91OGSD0GNhut8iyDGmaYrPZKAOEHgNJkmC9XmO1WmG5XCoDhB4DcRxjsVhg + Pp8jiiJlgNBjIAxDzGYzBEEA3/eVAUKPgel0Cs/z4LruvWhWr1pIPQYmkwkcx8F4PMZoNFIGCD0GbNuG + ZVkwTROGYSgDhB4Duq5jMBig3++j1+spA4Qeg373h/yoV0+A1GPQg3Wr6nFE/aWqv0g9Bj25dHxtivqX + z3VVEu/DW9G0X4qI8GE5H4QmAAAAAElFTkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAAAkAAAALCAYAAACtWacbAAAABGdBTUEAALGPC/xhBQAAANtJREFUKFN9 + kD1qhEAAhf1JUGx1EcRiBQsFLawEG1nEykJ2QcRS8Ba7B9iL5Fg5QaqIhWDx8kYTzJIlDz6Yme/NMDMS + cyZ3chSTp1EUZYyiaFFVdeL4yqWXzTwGwzCgbVs4jjOx/M6106b2rKUfyrKEpmni1De6w1b5LvV9j67r + UNc1iqKA67qzLMuf9O1aapoGVVWtMssyJEmCIAhgmiboP9ZSnudI0xRxHMP3fXE36Lo+0+0nhWEIz/Ng + 2zYMwxC7J/J4J8uyfsunrxvJQkThRl7Jn1zIPz8uSV/nWE9kicDiSwAAAABJRU5ErkJggg== + + + + 162 + + \ No newline at end of file diff --git a/client/AudioRecorder/Pause.cs b/client/AudioRecorder/Pause.cs new file mode 100644 index 00000000..6013391f --- /dev/null +++ b/client/AudioRecorder/Pause.cs @@ -0,0 +1,40 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace AudioRecorder +{ + class Pause + { + public int Hours { get; set; } + public int Minutes { get; set; } + public int Seconds { get; set; } + public int Milliseconds { get; set; } + + public Pause(int hours, int minutes, int seconds, int millisseconds) + { + Hours = hours; + Minutes = minutes; + Seconds = seconds; + Milliseconds = millisseconds; + } + + public void subtractDateTime(DateTime actual) { + Hours = actual.Hour - Hours; + Minutes = actual.Minute - Minutes; + Seconds = actual.Second - Seconds; + Milliseconds = (actual.Millisecond - Milliseconds); + } + + public override String ToString() + { + return String.Format("{0:00}:{1:00}:{2:00}:{3:00}", + Hours, + Minutes, + Seconds, + Milliseconds); + } + } +} diff --git a/client/AudioRecorder/Program.cs b/client/AudioRecorder/Program.cs new file mode 100644 index 00000000..9aec5d11 --- /dev/null +++ b/client/AudioRecorder/Program.cs @@ -0,0 +1,17 @@ +using System; +using System.Collections.Generic; +using System.Windows.Forms; + +namespace AudioRecorder { + static class Program { + /// + /// The main entry point for the application. + /// + [STAThread] + static void Main() { + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + Application.Run(new MainForm()); + } + } +} diff --git a/client/AudioRecorder/Properties/AssemblyInfo.cs b/client/AudioRecorder/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..4b7aa6b0 --- /dev/null +++ b/client/AudioRecorder/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("AudioRecorder")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("AudioRecorder")] +[assembly: AssemblyCopyright("Copyright © 2017")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("bfc274c4-17c8-445f-9590-ec21b12db48a")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/client/AudioRecorder/Properties/Resources.Designer.cs b/client/AudioRecorder/Properties/Resources.Designer.cs new file mode 100644 index 00000000..496d662f --- /dev/null +++ b/client/AudioRecorder/Properties/Resources.Designer.cs @@ -0,0 +1,108 @@ +//------------------------------------------------------------------------------ +// +// 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 AudioRecorder.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", "4.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + /// + /// 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("AudioRecorder.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 string similar to Felvétel. + /// + internal static string FELVETEL { + get { + return ResourceManager.GetString("FELVETEL", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Leállítás. + /// + internal static string LEALLITAS { + get { + return ResourceManager.GetString("LEALLITAS", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Lejátszás. + /// + internal static string LEJATSZAS { + get { + return ResourceManager.GetString("LEJATSZAS", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Szunet. + /// + internal static string SZUNET { + get { + return ResourceManager.GetString("SZUNET", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Válasszon mikrofont. + /// + internal static string VALASSZON_MIKROFONT { + get { + return ResourceManager.GetString("VALASSZON_MIKROFONT", resourceCulture); + } + } + } +} diff --git a/client/AudioRecorder/Properties/Resources.resx b/client/AudioRecorder/Properties/Resources.resx new file mode 100644 index 00000000..ffecec85 --- /dev/null +++ b/client/AudioRecorder/Properties/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/client/AudioRecorder/Properties/Settings.Designer.cs b/client/AudioRecorder/Properties/Settings.Designer.cs new file mode 100644 index 00000000..6a3bb1f9 --- /dev/null +++ b/client/AudioRecorder/Properties/Settings.Designer.cs @@ -0,0 +1,26 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace AudioRecorder.Properties { + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default { + get { + return defaultInstance; + } + } + } +} diff --git a/client/AudioRecorder/Properties/Settings.settings b/client/AudioRecorder/Properties/Settings.settings new file mode 100644 index 00000000..abf36c5d --- /dev/null +++ b/client/AudioRecorder/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/client/AudioRecorder/Resources.Designer.cs b/client/AudioRecorder/Resources.Designer.cs new file mode 100644 index 00000000..5fee7dc0 --- /dev/null +++ b/client/AudioRecorder/Resources.Designer.cs @@ -0,0 +1,126 @@ +//------------------------------------------------------------------------------ +// +// 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 AudioRecorder { + 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", "4.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + /// + /// 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("AudioRecorder.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 string similar to Felvétel. + /// + internal static string FELVETEL { + get { + return ResourceManager.GetString("FELVETEL", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Leállítás. + /// + internal static string LEALLITAS { + get { + return ResourceManager.GetString("LEALLITAS", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Lejátszás. + /// + internal static string LEJATSZAS { + get { + return ResourceManager.GetString("LEJATSZAS", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Mégse. + /// + internal static string MEGSE { + get { + return ResourceManager.GetString("MEGSE", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Mikrofon választás. + /// + internal static string MIKROFON_VALASZTAS { + get { + return ResourceManager.GetString("MIKROFON_VALASZTAS", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Szunet. + /// + internal static string SZUNET { + get { + return ResourceManager.GetString("SZUNET", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Válasszon mikrofont. + /// + internal static string VALASSZON_MIKROFONT { + get { + return ResourceManager.GetString("VALASSZON_MIKROFONT", resourceCulture); + } + } + } +} diff --git a/client/AudioRecorder/Resources.resx b/client/AudioRecorder/Resources.resx new file mode 100644 index 00000000..0f2b9ab9 --- /dev/null +++ b/client/AudioRecorder/Resources.resx @@ -0,0 +1,141 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + + Felvétel + + + Leállítás + + + Lejátszás + + + Mégse + + + Mikrofon választás + + + Szunet + + + Válasszon mikrofont + + \ No newline at end of file diff --git a/client/AudioRecorder/Resources/configuration.json b/client/AudioRecorder/Resources/configuration.json new file mode 100644 index 00000000..e3f8f050 --- /dev/null +++ b/client/AudioRecorder/Resources/configuration.json @@ -0,0 +1,10 @@ +{ + "audio_device_name": "", + "unc_path": "\\\\store.in.user.hu\\upload", + "working_dir": "C:\\temp", + "loud_percent": 30, + "address": "http://localhost:8080/services/rest/octopus/", + "userName": "dani", + "password": "dani", + "timeout": 1000 +} diff --git a/client/AudioRecorder/Resources/pause.png b/client/AudioRecorder/Resources/pause.png new file mode 100644 index 00000000..3e7117df Binary files /dev/null and b/client/AudioRecorder/Resources/pause.png differ diff --git a/client/AudioRecorder/Resources/record.png b/client/AudioRecorder/Resources/record.png new file mode 100644 index 00000000..f46ff047 Binary files /dev/null and b/client/AudioRecorder/Resources/record.png differ diff --git a/client/AudioRecorder/Resources/stop.png b/client/AudioRecorder/Resources/stop.png new file mode 100644 index 00000000..640ddf08 Binary files /dev/null and b/client/AudioRecorder/Resources/stop.png differ diff --git a/client/AudioRecorder/Settings.cs b/client/AudioRecorder/Settings.cs new file mode 100644 index 00000000..76b60c49 --- /dev/null +++ b/client/AudioRecorder/Settings.cs @@ -0,0 +1,50 @@ +using System; +using System.Configuration; +using System.IO; +namespace AudioRecorder +{ + class Settings + { + + private String audioDeviceName; + private String uncPath; + private int loudPercent; + + public Settings() + { + uncPath = ConfigurationManager.AppSettings[StringResources.UNC_PATH_KEY]; + audioDeviceName = ConfigurationManager.AppSettings[StringResources.AUDIO_DEVICE_NAME_KEY]; + try + { + loudPercent = Int32.Parse(ConfigurationManager.AppSettings[StringResources.LOUD_PERCENT]); + } + catch + { + throw new Exception(StringResources.EXCEPTION_WRONG_LOUD_VALUE); + } + } + + public void addSelectedAudio(String value) + { + Configuration config = ConfigurationManager.OpenExeConfiguration( + String.Format("{0}{1}{2}", Environment.CurrentDirectory, Path.DirectorySeparatorChar, StringResources.CONFIG_NAME)); + config.AppSettings.Settings.Remove(StringResources.AUDIO_DEVICE_NAME_KEY); + config.AppSettings.Settings.Add(StringResources.AUDIO_DEVICE_NAME_KEY, value); + config.Save(ConfigurationSaveMode.Minimal); + } + + public String getAudioDeviceName() + { + return audioDeviceName; + } + public String getUncPath() + { + return uncPath; + } + + public int getLoudValue() + { + return loudPercent; + } + } +} diff --git a/client/AudioRecorder/StringResources.cs b/client/AudioRecorder/StringResources.cs new file mode 100644 index 00000000..5e971956 --- /dev/null +++ b/client/AudioRecorder/StringResources.cs @@ -0,0 +1,30 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace AudioRecorder { + public class StringResources { + + public const String CONFIG_NAME = "AudioRecorder.exe"; + public const String AUDIO_DEVICE_NAME_KEY = "AUDIO_DEVICE_NAME"; + public const String UNC_PATH_KEY = "UNC_PATH"; + public const String LOUD_PERCENT = "LOUD_PERCENT"; + public const String TEMP = "TEMP"; + public const String AUDIO_RECORDER = "AudioRecorder"; + public const String EXTENSION = "wav"; + public const String QUERY_STRING = "SELECT Name FROM Win32_SoundDevice"; + public const String MP3 = "mp3"; + public const String DOT_WAV = ".wav"; + public const String ARE_YOU_SURE_TO_QUIT_DURING_RECORDING = "Are you sure to want to quit during recording?"; + public const String EXIT_TITLE = "Exit AudioRecorder"; + public const String RECORD = "Record"; + + public const String EXCEPTION_WAV_FILE_CAN_NOT_BE_NULL = "wavFile parameter can not be null."; + public const String EXCEPTION_WRONG_LOUD_VALUE = "The \"LOUD_VALUE\" paramtere is not a number in the configuration."; + public const String CONNECT_AUDIO_DEVICE = "Connect an audio device."; + public const String ERROR_TITLE = "Error"; + + public static String TEST_FILE_PATH = String.Format("{0}{1}testFiles\\test.wav", Environment.CurrentDirectory, System.IO.Path.DirectorySeparatorChar); + + } +} diff --git a/client/AudioRecorder/TimeCodeWorker.cs b/client/AudioRecorder/TimeCodeWorker.cs new file mode 100644 index 00000000..e9924435 --- /dev/null +++ b/client/AudioRecorder/TimeCodeWorker.cs @@ -0,0 +1,96 @@ +using System; +using System.Windows.Forms; +using System.Diagnostics; + +namespace AudioRecorder +{ + public class TimeCodeWorker : ITimeCodeWorker + { + private Label timecodeLabel; + private DateTime dateTime = new DateTime(); + protected Timer timer; + private DateTime startTime; + private int frame = 0; + private bool pausing; + private String previousText; + private Pause pause; + private bool added; + + public TimeCodeWorker(Label timecodeLabel) + { + this.timecodeLabel = timecodeLabel; + timer = new Timer(); + } + + void timer_Tick(object sender, EventArgs e) + { + if (!pausing) + { + DateTime endTime = DateTime.Now; + dateTime = endTime; + addPauseToStartTime(); + TimeSpan timeSpan = dateTime.Subtract(startTime); + frame = (timeSpan.Milliseconds / 41); + String text = String.Format("{0:00}:{1:00}:{2:00}:{3:00}", + timeSpan.Hours, + timeSpan.Minutes, + timeSpan.Seconds, + frame); + if (!String.IsNullOrEmpty(previousText)) + if (!previousText.Equals(text)) + timecodeLabel.Text = text; + previousText = text; + } + } + + private void addPauseToStartTime() + { + if (pause != null & !added) + { + startTime = startTime.AddHours(pause.Hours). + AddMinutes(pause.Minutes). + AddSeconds(pause.Seconds). + AddMilliseconds(pause.Milliseconds); + //Debug.WriteLine(String.Format("startTime: {0}", startTime)); + added = true; + } + } + + public void Start() + { + frame = 0; + timer.Interval = 1; + timer.Tick += newEventHandler(); + timer.Enabled = true; + startTime = DateTime.Now; + timer.Start(); + } + + protected virtual EventHandler newEventHandler() + { + return new EventHandler(timer_Tick); + } + + public void Stop() + { + timer.Stop(); + pause = null; + } + + public void Pause(bool pausing) + { + this.pausing = pausing; + if (pausing) + { + DateTime startPausing = DateTime.Now; + pause = new Pause(startPausing.Hour, startPausing.Minute, startPausing.Second, startPausing.Millisecond); + added = false; + } + else + { + DateTime stopPausing = DateTime.Now; + pause.subtractDateTime(stopPausing); + } + } + } +} diff --git a/client/AudioRecorder/WavRecorder.cs b/client/AudioRecorder/WavRecorder.cs new file mode 100644 index 00000000..9148bebf --- /dev/null +++ b/client/AudioRecorder/WavRecorder.cs @@ -0,0 +1,108 @@ +using System; +using System.Collections.Generic; +using NAudio.Wave; +using NAudio.CoreAudioApi; +using System.Diagnostics; + +namespace AudioRecorder +{ + public class WavRecorder : IRecorder + { + private const int MONO_CHANEL = 1; + + private int inputDeviceIndex; + private WaveIn sourceStream; + private WaveFileWriter waveWriter; + private String filePath; + private List createdWavFiles; + private MMDevice device; + private IMainForm mainForm; + private bool pausing; + + public WavRecorder(int inputDeviceIndex, MMDevice device, IMainForm mainForm) + { + this.inputDeviceIndex = inputDeviceIndex; + createdWavFiles = new List(); + this.device = device; + this.mainForm = mainForm; + } + + public void StartRecording(String filePath) + { + this.filePath = filePath; + sourceStream = newWaveIn(); + sourceStream.DataAvailable += newEventHandler(); + waveWriter = newWavFileWriter(); + sourceStream.StartRecording(); + createdWavFiles.Add(filePath); + } + + protected virtual EventHandler newEventHandler() + { + return new EventHandler(SourceStreamDataAvailable); + } + + protected virtual WaveFileWriter newWavFileWriter() + { + return new WaveFileWriter(filePath, sourceStream.WaveFormat); + } + + protected virtual WaveIn newWaveIn() + { + return new WaveIn + { + DeviceNumber = inputDeviceIndex, + WaveFormat = + new WaveFormat(44100, MONO_CHANEL) + }; + + } + + public void SourceStreamDataAvailable(object sender, WaveInEventArgs e) + { + if (waveWriter == null) return; + if (!pausing) + { + waveWriter.Write(e.Buffer, 0, e.BytesRecorded); + float panelHeight = (device.AudioMeterInformation.MasterPeakValue + device.AudioSessionManager.SimpleAudioVolume.Volume) * 100; + //float panelHeight = device.AudioMeterInformation.MasterPeakValue * 1000; + Debug.WriteLine(String.Format("device.AudioMeterInformation.MasterPeakValue {0}", device.AudioMeterInformation.MasterPeakValue)); + mainForm.setPanelSizeHeight(panelHeight); + //Debug.WriteLine(String.Format("device.AudioMeterInformation.MasterPeakValue {0}", device.AudioMeterInformation.MasterPeakValue)); + Debug.WriteLine(String.Format("panelHeight {0}", panelHeight)); + waveWriter.Flush(); + } + } + + public void StopRecording() + { + if (sourceStream != null) + { + sourceStream.StopRecording(); + sourceStream.Dispose(); + sourceStream = null; + } + if (waveWriter == null) + { + return; + } + waveWriter.Dispose(); + waveWriter = null; + } + + public void pauseRecording(bool pausing) + { + this.pausing = pausing; + } + + public List getCreatedFiles() + { + return createdWavFiles; + } + + public String getCurentWavFilePath() + { + return filePath; + } + } +} diff --git a/client/AudioRecorder/packages.config b/client/AudioRecorder/packages.config new file mode 100644 index 00000000..faa743ef --- /dev/null +++ b/client/AudioRecorder/packages.config @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/client/DxPlay/App.ico b/client/DxPlay/App.ico new file mode 100644 index 00000000..3a5525fd Binary files /dev/null and b/client/DxPlay/App.ico differ diff --git a/client/DxPlay/ColorSlider.cs b/client/DxPlay/ColorSlider.cs new file mode 100644 index 00000000..be317394 --- /dev/null +++ b/client/DxPlay/ColorSlider.cs @@ -0,0 +1,1071 @@ +using System; +using System.ComponentModel; +using System.Drawing; +using System.Drawing.Drawing2D; +using System.Windows.Forms; + +namespace DxPlay +{ + /// + /// Encapsulates control that visualy displays certain integer value and allows user to change it within desired range. It imitates as far as mouse usage is concerned. + /// + [ToolboxBitmap(typeof(TrackBar))] + [DefaultEvent("Scroll"), DefaultProperty("BarInnerColor")] + public partial class ColorSlider : Control + { + #region Events + + /// + /// Fires when Slider position has changed + /// + [Description("Event fires when the Value property changes")] + [Category("Action")] + public event EventHandler ValueChanged; + + /// + /// Fires when user scrolls the Slider + /// + [Description("Event fires when the Slider position is changed")] + [Category("Behavior")] + public event ScrollEventHandler Scroll; + + #endregion + + #region Properties + + private Rectangle thumbRect; //bounding rectangle of thumb area + /// + /// Gets the thumb rect. Usefull to determine bounding rectangle when creating custom thumb shape. + /// + /// The thumb rect. + [Browsable(false)] + public Rectangle ThumbRect + { + get { return thumbRect; } + } + + private Rectangle barRect; //bounding rectangle of bar area + private Rectangle barHalfRect; + private Rectangle thumbHalfRect; + private Rectangle elapsedRect; //bounding rectangle of elapsed area + + private int thumbSize = 15; + /// + /// Gets or sets the size of the thumb. + /// + /// The size of the thumb. + /// exception thrown when value is lower than zero or grather than half of appropiate dimension + [Description("Set Slider thumb size")] + [Category("ColorSlider")] + [DefaultValue(15)] + public int ThumbSize + { + get { return thumbSize; } + set + { + if (value > 0 & + value < (barOrientation == Orientation.Horizontal ? ClientRectangle.Width : ClientRectangle.Height)) + thumbSize = value; + else + throw new ArgumentOutOfRangeException( + "TrackSize has to be greather than zero and lower than half of Slider width"); + Invalidate(); + } + } + + private GraphicsPath thumbCustomShape = null; + /// + /// Gets or sets the thumb custom shape. Use ThumbRect property to determine bounding rectangle. + /// + /// The thumb custom shape. null means default shape + [Description("Set Slider's thumb's custom shape")] + [Category("ColorSlider")] + [Browsable(false)] + [DefaultValue(typeof(GraphicsPath), "null")] + public GraphicsPath ThumbCustomShape + { + get { return thumbCustomShape; } + set + { + thumbCustomShape = value; + thumbSize = (int) (barOrientation == Orientation.Horizontal ? value.GetBounds().Width : value.GetBounds().Height) + 1; + Invalidate(); + } + } + + private Size thumbRoundRectSize = new Size(8, 8); + /// + /// Gets or sets the size of the thumb round rectangle edges. + /// + /// The size of the thumb round rectangle edges. + [Description("Set Slider's thumb round rect size")] + [Category("ColorSlider")] + [DefaultValue(typeof(Size), "8; 8")] + public Size ThumbRoundRectSize + { + get { return thumbRoundRectSize; } + set + { + int h = value.Height, w = value.Width; + if (h <= 0) h = 1; + if (w <= 0) w = 1; + thumbRoundRectSize = new Size(w, h); + Invalidate(); + } + } + + private Size borderRoundRectSize = new Size(8, 8); + /// + /// Gets or sets the size of the border round rect. + /// + /// The size of the border round rect. + [Description("Set Slider's border round rect size")] + [Category("ColorSlider")] + [DefaultValue(typeof(Size), "8; 8")] + public Size BorderRoundRectSize + { + get { return borderRoundRectSize; } + set + { + int h = value.Height, w = value.Width; + if (h <= 0) h = 1; + if (w <= 0) w = 1; + borderRoundRectSize = new Size(w, h); + Invalidate(); + } + } + + private Orientation barOrientation = Orientation.Horizontal; + /// + /// Gets or sets the orientation of Slider. + /// + /// The orientation. + [Description("Set Slider orientation")] + [Category("ColorSlider")] + [DefaultValue(Orientation.Horizontal)] + public Orientation Orientation + { + get { return barOrientation; } + set + { + if (barOrientation != value) + { + barOrientation = value; + int temp = Width; + Width = Height; + Height = temp; + if (thumbCustomShape != null) + thumbSize = + (int) + (barOrientation == Orientation.Horizontal + ? thumbCustomShape.GetBounds().Width + : thumbCustomShape.GetBounds().Height) + 1; + Invalidate(); + } + } + } + + + private int trackerValue = 50; + /// + /// Gets or sets the value of Slider. + /// + /// The value. + /// exception thrown when value is outside appropriate range (min, max) + [Description("Set Slider value")] + [Category("ColorSlider")] + [DefaultValue(50)] + public int Value + { + get { return trackerValue; } + set + { + if (value >= barMinimum & value <= barMaximum) + { + trackerValue = value; + if (ValueChanged != null) ValueChanged(this, new EventArgs()); + Invalidate(); + } + else throw new ArgumentOutOfRangeException("Value is outside appropriate range (min, max)"); + } + } + + + private int barMinimum = 0; + /// + /// Gets or sets the minimum value. + /// + /// The minimum value. + /// exception thrown when minimal value is greather than maximal one + [Description("Set Slider minimal point")] + [Category("ColorSlider")] + [DefaultValue(0)] + public int Minimum + { + get { return barMinimum; } + set + { + if (value < barMaximum) + { + barMinimum = value; + if (trackerValue < barMinimum) + { + trackerValue = barMinimum; + if (ValueChanged != null) ValueChanged(this, new EventArgs()); + } + Invalidate(); + } + else throw new ArgumentOutOfRangeException("Minimal value is greather than maximal one"); + } + } + + + private int barMaximum = 100; + /// + /// Gets or sets the maximum value. + /// + /// The maximum value. + /// exception thrown when maximal value is lower than minimal one + [Description("Set Slider maximal point")] + [Category("ColorSlider")] + [DefaultValue(100)] + public int Maximum + { + get { return barMaximum; } + set + { + if (value > barMinimum) + { + barMaximum = value; + if (trackerValue > barMaximum) + { + trackerValue = barMaximum; + if (ValueChanged != null) ValueChanged(this, new EventArgs()); + } + Invalidate(); + } + else throw new ArgumentOutOfRangeException("Maximal value is lower than minimal one"); + } + } + + private uint smallChange = 1; + /// + /// Gets or sets trackbar's small change. It affects how to behave when directional keys are pressed + /// + /// The small change value. + [Description("Set trackbar's small change")] + [Category("ColorSlider")] + [DefaultValue(1)] + public uint SmallChange + { + get { return smallChange; } + set { smallChange = value; } + } + + private uint largeChange = 5; + + /// + /// Gets or sets trackbar's large change. It affects how to behave when PageUp/PageDown keys are pressed + /// + /// The large change value. + [Description("Set trackbar's large change")] + [Category("ColorSlider")] + [DefaultValue(5)] + public uint LargeChange + { + get { return largeChange; } + set { largeChange = value; } + } + + private bool drawFocusRectangle = true; + /// + /// Gets or sets a value indicating whether to draw focus rectangle. + /// + /// true if focus rectangle should be drawn; otherwise, false. + [Description("Set whether to draw focus rectangle")] + [Category("ColorSlider")] + [DefaultValue(true)] + public bool DrawFocusRectangle + { + get { return drawFocusRectangle; } + set + { + drawFocusRectangle = value; + Invalidate(); + } + } + + private bool drawSemitransparentThumb = true; + /// + /// Gets or sets a value indicating whether to draw semitransparent thumb. + /// + /// true if semitransparent thumb should be drawn; otherwise, false. + [Description("Set whether to draw semitransparent thumb")] + [Category("ColorSlider")] + [DefaultValue(true)] + public bool DrawSemitransparentThumb + { + get { return drawSemitransparentThumb; } + set + { + drawSemitransparentThumb = value; + Invalidate(); + } + } + + private bool mouseEffects = true; + /// + /// Gets or sets whether mouse entry and exit actions have impact on how control look. + /// + /// true if mouse entry and exit actions have impact on how control look; otherwise, false. + [Description("Set whether mouse entry and exit actions have impact on how control look")] + [Category("ColorSlider")] + [DefaultValue(true)] + public bool MouseEffects + { + get { return mouseEffects; } + set + { + mouseEffects = value; + Invalidate(); + } + } + + private int mouseWheelBarPartitions = 10; + /// + /// Gets or sets the mouse wheel bar partitions. + /// + /// The mouse wheel bar partitions. + /// exception thrown when value isn't greather than zero + [Description("Set to how many parts is bar divided when using mouse wheel")] + [Category("ColorSlider")] + [DefaultValue(10)] + public int MouseWheelBarPartitions + { + get { return mouseWheelBarPartitions; } + set + { + if (value > 0) + mouseWheelBarPartitions = value; + else throw new ArgumentOutOfRangeException("MouseWheelBarPartitions has to be greather than zero"); + } + } + + private Color thumbOuterColor = Color.White; + /// + /// Gets or sets the thumb outer color . + /// + /// The thumb outer color. + [Description("Set Slider thumb outer color")] + [Category("ColorSlider")] + [DefaultValue(typeof(Color), "White")] + public Color ThumbOuterColor + { + get { return thumbOuterColor; } + set + { + thumbOuterColor = value; + Invalidate(); + } + } + + + private Color thumbInnerColor = Color.Gainsboro; + /// + /// Gets or sets the inner color of the thumb. + /// + /// The inner color of the thumb. + [Description("Set Slider thumb inner color")] + [Category("ColorSlider")] + [DefaultValue(typeof(Color), "Gainsboro")] + public Color ThumbInnerColor + { + get { return thumbInnerColor; } + set + { + thumbInnerColor = value; + Invalidate(); + } + } + + + private Color thumbPenColor = Color.Silver; + /// + /// Gets or sets the color of the thumb pen. + /// + /// The color of the thumb pen. + [Description("Set Slider thumb pen color")] + [Category("ColorSlider")] + [DefaultValue(typeof(Color), "Silver")] + public Color ThumbPenColor + { + get { return thumbPenColor; } + set + { + thumbPenColor = value; + Invalidate(); + } + } + + + private Color barOuterColor = Color.SkyBlue; + /// + /// Gets or sets the outer color of the bar. + /// + /// The outer color of the bar. + [Description("Set Slider bar outer color")] + [Category("ColorSlider")] + [DefaultValue(typeof(Color), "SkyBlue")] + public Color BarOuterColor + { + get { return barOuterColor; } + set + { + barOuterColor = value; + Invalidate(); + } + } + + + private Color barInnerColor = Color.DarkSlateBlue; + /// + /// Gets or sets the inner color of the bar. + /// + /// The inner color of the bar. + [Description("Set Slider bar inner color")] + [Category("ColorSlider")] + [DefaultValue(typeof(Color), "DarkSlateBlue")] + public Color BarInnerColor + { + get { return barInnerColor; } + set + { + barInnerColor = value; + Invalidate(); + } + } + + + private Color barPenColor = Color.Gainsboro; + /// + /// Gets or sets the color of the bar pen. + /// + /// The color of the bar pen. + [Description("Set Slider bar pen color")] + [Category("ColorSlider")] + [DefaultValue(typeof(Color), "Gainsboro")] + public Color BarPenColor + { + get { return barPenColor; } + set + { + barPenColor = value; + Invalidate(); + } + } + + private Color elapsedOuterColor = Color.DarkGreen; + /// + /// Gets or sets the outer color of the elapsed. + /// + /// The outer color of the elapsed. + [Description("Set Slider's elapsed part outer color")] + [Category("ColorSlider")] + [DefaultValue(typeof(Color), "DarkGreen")] + public Color ElapsedOuterColor + { + get { return elapsedOuterColor; } + set + { + elapsedOuterColor = value; + Invalidate(); + } + } + + private Color elapsedInnerColor = Color.Chartreuse; + /// + /// Gets or sets the inner color of the elapsed. + /// + /// The inner color of the elapsed. + [Description("Set Slider's elapsed part inner color")] + [Category("ColorSlider")] + [DefaultValue(typeof(Color), "Chartreuse")] + public Color ElapsedInnerColor + { + get { return elapsedInnerColor; } + set + { + elapsedInnerColor = value; + Invalidate(); + } + } + + #endregion + + #region Color schemas + + //define own color schemas + private Color[,] aColorSchema = new Color[,] + { + { + Color.White, Color.Gainsboro, Color.Silver, Color.SkyBlue, Color.DarkSlateBlue, Color.Gainsboro, + Color.DarkGreen, Color.Chartreuse + }, + { + Color.White, Color.Gainsboro, Color.Silver, Color.Red, Color.DarkRed, Color.Gainsboro, Color.Coral, + Color.LightCoral + }, + { + Color.White, Color.Gainsboro, Color.Silver, Color.GreenYellow, Color.Yellow, Color.Gold, Color.Orange, + Color.OrangeRed + }, + { + Color.White, Color.Gainsboro, Color.Silver, Color.Red, Color.Crimson, Color.Gainsboro, Color.DarkViolet + , Color.Violet + } + }; + + public enum ColorSchemas + { + PerlBlueGreen, + PerlRedCoral, + PerlGold, + PerlRoyalColors + } + + private ColorSchemas colorSchema = ColorSchemas.PerlBlueGreen; + /// + /// Sets color schema. Color generalization / fast color changing. Has no effect when slider colors are changed manually after schema was applied. + /// + /// New color schema value + [Description("Set Slider color schema. Has no effect when slider colors are changed manually after schema was applied.")] + [Category("ColorSlider")] + [DefaultValue(typeof(ColorSchemas), "PerlBlueGreen")] + public ColorSchemas ColorSchema + { + get { return colorSchema; } + set + { + colorSchema = value; + byte sn = (byte)value; + thumbOuterColor = aColorSchema[sn, 0]; + thumbInnerColor = aColorSchema[sn, 1]; + thumbPenColor = aColorSchema[sn, 2]; + barOuterColor = aColorSchema[sn, 3]; + barInnerColor = aColorSchema[sn, 4]; + barPenColor = aColorSchema[sn, 5]; + elapsedOuterColor = aColorSchema[sn, 6]; + elapsedInnerColor = aColorSchema[sn, 7]; + + Invalidate(); + } + } + + #endregion + + #region Constructors + + /// + /// Initializes a new instance of the class. + /// + /// The minimum value. + /// The maximum value. + /// The current value. + public ColorSlider(int min, int max, int value) + { + InitializeComponent(); + SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.OptimizedDoubleBuffer | + ControlStyles.ResizeRedraw | ControlStyles.Selectable | + ControlStyles.SupportsTransparentBackColor | ControlStyles.UserMouse | + ControlStyles.UserPaint, true); + BackColor = Color.Transparent; + + Minimum = min; + Maximum = max; + Value = value; + } + + /// + /// Initializes a new instance of the class. + /// + public ColorSlider() : this(0, 100, 50) { } + + #endregion + + #region Paint + + /// + /// Raises the event. + /// + /// A that contains the event data. + protected override void OnPaint(PaintEventArgs e) + { + if (!Enabled) + { + Color[] desaturatedColors = DesaturateColors(thumbOuterColor, thumbInnerColor, thumbPenColor, + barOuterColor, barInnerColor, barPenColor, + elapsedOuterColor, elapsedInnerColor); + DrawColorSlider(e, desaturatedColors[0], desaturatedColors[1], desaturatedColors[2], + desaturatedColors[3], + desaturatedColors[4], desaturatedColors[5], desaturatedColors[6], desaturatedColors[7]); + } + else + { + if (mouseEffects && mouseInRegion) + { + Color[] lightenedColors = LightenColors(thumbOuterColor, thumbInnerColor, thumbPenColor, + barOuterColor, barInnerColor, barPenColor, + elapsedOuterColor, elapsedInnerColor); + DrawColorSlider(e, lightenedColors[0], lightenedColors[1], lightenedColors[2], lightenedColors[3], + lightenedColors[4], lightenedColors[5], lightenedColors[6], lightenedColors[7]); + } + else + { + DrawColorSlider(e, thumbOuterColor, thumbInnerColor, thumbPenColor, + barOuterColor, barInnerColor, barPenColor, + elapsedOuterColor, elapsedInnerColor); + } + } + } + + /// + /// Draws the colorslider control using passed colors. + /// + /// The instance containing the event data. + /// The thumb outer color paint. + /// The thumb inner color paint. + /// The thumb pen color paint. + /// The bar outer color paint. + /// The bar inner color paint. + /// The bar pen color paint. + /// The elapsed outer color paint. + /// The elapsed inner color paint. + private void DrawColorSlider(PaintEventArgs e, Color thumbOuterColorPaint, Color thumbInnerColorPaint, + Color thumbPenColorPaint, Color barOuterColorPaint, Color barInnerColorPaint, + Color barPenColorPaint, Color elapsedOuterColorPaint, Color elapsedInnerColorPaint) + { + try + { + //set up thumbRect aproprietly + if (barOrientation == Orientation.Horizontal) + { + int TrackX = (((trackerValue - barMinimum) * (ClientRectangle.Width - thumbSize)) / (barMaximum - barMinimum)); + thumbRect = new Rectangle(TrackX, 1, thumbSize - 1, ClientRectangle.Height - 3); + } + else + { + int TrackY = (((trackerValue - barMinimum) * (ClientRectangle.Height - thumbSize)) / (barMaximum - barMinimum)); + thumbRect = new Rectangle(1, TrackY, ClientRectangle.Width - 3, thumbSize - 1); + } + + //adjust drawing rects + barRect = ClientRectangle; + thumbHalfRect = thumbRect; + LinearGradientMode gradientOrientation; + if (barOrientation == Orientation.Horizontal) + { + barRect.Inflate(-1, -barRect.Height / 3); + barHalfRect = barRect; + barHalfRect.Height /= 2; + gradientOrientation = LinearGradientMode.Vertical; + thumbHalfRect.Height /= 2; + elapsedRect = barRect; + elapsedRect.Width = thumbRect.Left + thumbSize / 2; + } + else + { + barRect.Inflate(-barRect.Width / 3, -1); + barHalfRect = barRect; + barHalfRect.Width /= 2; + gradientOrientation = LinearGradientMode.Horizontal; + thumbHalfRect.Width /= 2; + elapsedRect = barRect; + elapsedRect.Height = thumbRect.Top + thumbSize / 2; + } + //get thumb shape path + GraphicsPath thumbPath; + if (thumbCustomShape == null) + thumbPath = CreateRoundRectPath(thumbRect, thumbRoundRectSize); + else + { + thumbPath = thumbCustomShape; + Matrix m = new Matrix(); + m.Translate(thumbRect.Left - thumbPath.GetBounds().Left, thumbRect.Top - thumbPath.GetBounds().Top); + thumbPath.Transform(m); + } + + //draw bar + using ( + LinearGradientBrush lgbBar = + new LinearGradientBrush(barHalfRect, barOuterColorPaint, barInnerColorPaint, gradientOrientation) + ) + { + lgbBar.WrapMode = WrapMode.TileFlipXY; + e.Graphics.FillRectangle(lgbBar, barRect); + //draw elapsed bar + using ( + LinearGradientBrush lgbElapsed = + new LinearGradientBrush(barHalfRect, elapsedOuterColorPaint, elapsedInnerColorPaint, + gradientOrientation)) + { + lgbElapsed.WrapMode = WrapMode.TileFlipXY; + if (Capture && drawSemitransparentThumb) + { + Region elapsedReg = new Region(elapsedRect); + elapsedReg.Exclude(thumbPath); + e.Graphics.FillRegion(lgbElapsed, elapsedReg); + } + else + e.Graphics.FillRectangle(lgbElapsed, elapsedRect); + } + //draw bar band + using (Pen barPen = new Pen(barPenColorPaint, 0.5f)) + { + e.Graphics.DrawRectangle(barPen, barRect); + } + } + + //draw thumb + Color newthumbOuterColorPaint = thumbOuterColorPaint, newthumbInnerColorPaint = thumbInnerColorPaint; + if (Capture && drawSemitransparentThumb) + { + newthumbOuterColorPaint = Color.FromArgb(175, thumbOuterColorPaint); + newthumbInnerColorPaint = Color.FromArgb(175, thumbInnerColorPaint); + } + using ( + LinearGradientBrush lgbThumb = + new LinearGradientBrush(thumbHalfRect, newthumbOuterColorPaint, newthumbInnerColorPaint, + gradientOrientation)) + { + lgbThumb.WrapMode = WrapMode.TileFlipXY; + e.Graphics.SmoothingMode = SmoothingMode.AntiAlias; + e.Graphics.FillPath(lgbThumb, thumbPath); + //draw thumb band + Color newThumbPenColor = thumbPenColorPaint; + if (mouseEffects && (Capture || mouseInThumbRegion)) + newThumbPenColor = ControlPaint.Dark(newThumbPenColor); + using (Pen thumbPen = new Pen(newThumbPenColor)) + { + e.Graphics.DrawPath(thumbPen, thumbPath); + } + //gp.Dispose(); + /*if (Capture || mouseInThumbRegion) + using (LinearGradientBrush lgbThumb2 = new LinearGradientBrush(thumbHalfRect, Color.FromArgb(150, Color.Blue), Color.Transparent, gradientOrientation)) + { + lgbThumb2.WrapMode = WrapMode.TileFlipXY; + e.Graphics.FillPath(lgbThumb2, gp); + }*/ + } + + //draw focusing rectangle + if (Focused & drawFocusRectangle) + using (Pen p = new Pen(Color.FromArgb(200, barPenColorPaint))) + { + p.DashStyle = DashStyle.Dot; + Rectangle r = ClientRectangle; + r.Width -= 2; + r.Height--; + r.X++; + //ControlPaint.DrawFocusRectangle(e.Graphics, r); + using (GraphicsPath gpBorder = CreateRoundRectPath(r, borderRoundRectSize)) + { + e.Graphics.SmoothingMode = SmoothingMode.AntiAlias; + e.Graphics.DrawPath(p, gpBorder); + } + } + } + catch (Exception Err) + { + Console.WriteLine("DrawBackGround Error in " + Name + ":" + Err.Message); + } + finally + { + } + } + + #endregion + + #region Overided events + + private bool mouseInRegion = false; + /// + /// Raises the event. + /// + /// An that contains the event data. + protected override void OnEnabledChanged(EventArgs e) + { + base.OnEnabledChanged(e); + Invalidate(); + } + + /// + /// Raises the event. + /// + /// An that contains the event data. + protected override void OnMouseEnter(EventArgs e) + { + base.OnMouseEnter(e); + mouseInRegion = true; + Invalidate(); + } + + /// + /// Raises the event. + /// + /// An that contains the event data. + protected override void OnMouseLeave(EventArgs e) + { + base.OnMouseLeave(e); + mouseInRegion = false; + mouseInThumbRegion = false; + Invalidate(); + } + + /// + /// Raises the event. + /// + /// A that contains the event data. + protected override void OnMouseDown(MouseEventArgs e) + { + base.OnMouseDown(e); + if (e.Button == MouseButtons.Left) + { + Capture = true; + if (Scroll != null) Scroll(this, new ScrollEventArgs(ScrollEventType.ThumbTrack, trackerValue)); + if (ValueChanged != null) ValueChanged(this, new EventArgs()); + OnMouseMove(e); + } + } + + private bool mouseInThumbRegion = false; + + /// + /// Raises the event. + /// + /// A that contains the event data. + protected override void OnMouseMove(MouseEventArgs e) + { + base.OnMouseMove(e); + mouseInThumbRegion = IsPointInRect(e.Location, thumbRect); + if (Capture & e.Button == MouseButtons.Left) + { + ScrollEventType set = ScrollEventType.ThumbPosition; + Point pt = e.Location; + int p = barOrientation == Orientation.Horizontal ? pt.X : pt.Y; + int margin = thumbSize >> 1; + p -= margin; + float coef = (float)(barMaximum - barMinimum) / + (float) + ((barOrientation == Orientation.Horizontal ? ClientSize.Width : ClientSize.Height) - + 2 * margin); + trackerValue = (int)(p * coef + barMinimum); + + if (trackerValue <= barMinimum) + { + trackerValue = barMinimum; + set = ScrollEventType.First; + } + else if (trackerValue >= barMaximum) + { + trackerValue = barMaximum; + set = ScrollEventType.Last; + } + + if (Scroll != null) Scroll(this, new ScrollEventArgs(set, trackerValue)); + if (ValueChanged != null) ValueChanged(this, new EventArgs()); + } + Invalidate(); + } + + /// + /// Raises the event. + /// + /// A that contains the event data. + protected override void OnMouseUp(MouseEventArgs e) + { + base.OnMouseUp(e); + Capture = false; + mouseInThumbRegion = IsPointInRect(e.Location, thumbRect); + if (Scroll != null) Scroll(this, new ScrollEventArgs(ScrollEventType.EndScroll, trackerValue)); + if (ValueChanged != null) ValueChanged(this, new EventArgs()); + Invalidate(); + } + + /// + /// Raises the event. + /// + /// A that contains the event data. + protected override void OnMouseWheel(MouseEventArgs e) + { + base.OnMouseWheel(e); + int v = e.Delta / 120 * (barMaximum - barMinimum) / mouseWheelBarPartitions; + SetProperValue(Value + v); + } + + /// + /// Raises the event. + /// + /// An that contains the event data. + protected override void OnGotFocus(EventArgs e) + { + base.OnGotFocus(e); + Invalidate(); + } + + /// + /// Raises the event. + /// + /// An that contains the event data. + protected override void OnLostFocus(EventArgs e) + { + base.OnLostFocus(e); + Invalidate(); + } + + /// + /// Raises the event. + /// + /// A that contains the event data. + protected override void OnKeyUp(KeyEventArgs e) + { + base.OnKeyUp(e); + switch (e.KeyCode) + { + case Keys.Down: + case Keys.Left: + SetProperValue(Value - (int)smallChange); + if (Scroll != null) Scroll(this, new ScrollEventArgs(ScrollEventType.SmallDecrement, Value)); + break; + case Keys.Up: + case Keys.Right: + SetProperValue(Value + (int)smallChange); + if (Scroll != null) Scroll(this, new ScrollEventArgs(ScrollEventType.SmallIncrement, Value)); + break; + case Keys.Home: + Value = barMinimum; + break; + case Keys.End: + Value = barMaximum; + break; + case Keys.PageDown: + SetProperValue(Value - (int)largeChange); + if (Scroll != null) Scroll(this, new ScrollEventArgs(ScrollEventType.LargeDecrement, Value)); + break; + case Keys.PageUp: + SetProperValue(Value + (int)largeChange); + if (Scroll != null) Scroll(this, new ScrollEventArgs(ScrollEventType.LargeIncrement, Value)); + break; + } + if (Scroll != null && Value == barMinimum) Scroll(this, new ScrollEventArgs(ScrollEventType.First, Value)); + if (Scroll != null && Value == barMaximum) Scroll(this, new ScrollEventArgs(ScrollEventType.Last, Value)); + Point pt = PointToClient(Cursor.Position); + OnMouseMove(new MouseEventArgs(MouseButtons.None, 0, pt.X, pt.Y, 0)); + } + + /// + /// Processes a dialog key. + /// + /// One of the values that represents the key to process. + /// + /// true if the key was processed by the control; otherwise, false. + /// + protected override bool ProcessDialogKey(Keys keyData) + { + if (keyData == Keys.Tab | ModifierKeys == Keys.Shift) + return base.ProcessDialogKey(keyData); + else + { + OnKeyDown(new KeyEventArgs(keyData)); + return true; + } + } + + #endregion + + #region Help routines + + /// + /// Creates the round rect path. + /// + /// The rectangle on which graphics path will be spanned. + /// The size of rounded rectangle edges. + /// + public static GraphicsPath CreateRoundRectPath(Rectangle rect, Size size) + { + GraphicsPath gp = new GraphicsPath(); + gp.AddLine(rect.Left + size.Width / 2, rect.Top, rect.Right - size.Width / 2, rect.Top); + gp.AddArc(rect.Right - size.Width, rect.Top, size.Width, size.Height, 270, 90); + + gp.AddLine(rect.Right, rect.Top + size.Height / 2, rect.Right, rect.Bottom - size.Width / 2); + gp.AddArc(rect.Right - size.Width, rect.Bottom - size.Height, size.Width, size.Height, 0, 90); + + gp.AddLine(rect.Right - size.Width / 2, rect.Bottom, rect.Left + size.Width / 2, rect.Bottom); + gp.AddArc(rect.Left, rect.Bottom - size.Height, size.Width, size.Height, 90, 90); + + gp.AddLine(rect.Left, rect.Bottom - size.Height / 2, rect.Left, rect.Top + size.Height / 2); + gp.AddArc(rect.Left, rect.Top, size.Width, size.Height, 180, 90); + return gp; + } + + /// + /// Desaturates colors from given array. + /// + /// The colors to be desaturated. + /// + public static Color[] DesaturateColors(params Color[] colorsToDesaturate) + { + Color[] colorsToReturn = new Color[colorsToDesaturate.Length]; + for (int i = 0; i < colorsToDesaturate.Length; i++) + { + //use NTSC weighted avarage + int gray = + (int)(colorsToDesaturate[i].R * 0.3 + colorsToDesaturate[i].G * 0.6 + colorsToDesaturate[i].B * 0.1); + colorsToReturn[i] = Color.FromArgb(-0x010101 * (255 - gray) - 1); + } + return colorsToReturn; + } + + /// + /// Lightens colors from given array. + /// + /// The colors to lighten. + /// + public static Color[] LightenColors(params Color[] colorsToLighten) + { + Color[] colorsToReturn = new Color[colorsToLighten.Length]; + for (int i = 0; i < colorsToLighten.Length; i++) + { + colorsToReturn[i] = ControlPaint.Light(colorsToLighten[i]); + } + return colorsToReturn; + } + + /// + /// Sets the trackbar value so that it wont exceed allowed range. + /// + /// The value. + private void SetProperValue(int val) + { + if (val < barMinimum) Value = barMinimum; + else if (val > barMaximum) Value = barMaximum; + else Value = val; + } + + /// + /// Determines whether rectangle contains given point. + /// + /// The point to test. + /// The base rectangle. + /// + /// true if rectangle contains given point; otherwise, false. + /// + private static bool IsPointInRect(Point pt, Rectangle rect) + { + if (pt.X > rect.Left & pt.X < rect.Right & pt.Y > rect.Top & pt.Y < rect.Bottom) + return true; + else return false; + } + + #endregion + } +} \ No newline at end of file diff --git a/client/DxPlay/ColorSlider.designer.cs b/client/DxPlay/ColorSlider.designer.cs new file mode 100644 index 00000000..d13c6ea3 --- /dev/null +++ b/client/DxPlay/ColorSlider.designer.cs @@ -0,0 +1,37 @@ +namespace DxPlay { + partial class ColorSlider { + /// + /// 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 Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() { + this.SuspendLayout(); + // + // ColorSlider + // + this.Size = new System.Drawing.Size(200, 30); + this.ResumeLayout(false); + + } + + #endregion + } +} diff --git a/client/DxPlay/ColorSlider.resx b/client/DxPlay/ColorSlider.resx new file mode 100644 index 00000000..3276f5c0 --- /dev/null +++ b/client/DxPlay/ColorSlider.resx @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + False + + \ No newline at end of file diff --git a/client/DxPlay/DirectShowLib.dll b/client/DxPlay/DirectShowLib.dll new file mode 100644 index 00000000..fc5918ba Binary files /dev/null and b/client/DxPlay/DirectShowLib.dll differ diff --git a/client/DxPlay/DxPlay.csproj b/client/DxPlay/DxPlay.csproj new file mode 100644 index 00000000..b92038ed --- /dev/null +++ b/client/DxPlay/DxPlay.csproj @@ -0,0 +1,225 @@ + + + Local + 8.0.50727 + 2.0 + {0B44B3D7-52D7-4C0E-9B1C-F48CEEDA36FE} + Debug + AnyCPU + App.ico + + + DxPlay + + + JScript + Grid + IE50 + false + WinExe + DxPlay + OnBuildSuccess + + + + + + + 3.5 + v4.6.1 + false + + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + true + SAK + SAK + SAK + SAK + + + bin\Debug\ + false + 285212672 + false + + + TRACE;DEBUG;USING_NET20 + + + true + 4096 + false + + + false + false + false + false + 4 + full + prompt + false + + + bin\Release\ + false + 285212672 + false + + + TRACE;USING_NET20 + + + false + 4096 + false + + + true + false + false + false + 4 + none + prompt + false + + + true + bin\x64\Debug\ + TRACE;DEBUG;USING_NET20 + 285212672 + 4096 + full + x64 + prompt + MinimumRecommendedRules.ruleset + false + + + bin\x64\Release\ + TRACE;USING_NET20 + 285212672 + true + 4096 + x64 + prompt + MinimumRecommendedRules.ruleset + false + + + + False + lib\DirectShowLib.dll + + + System + + + System.Data + + + System.Drawing + + + System.Windows.Forms + + + System.XML + + + + + Component + + + ColorSlider.cs + + + + + + + + + + Component + + + + + + + Resources.resx + True + True + + + + + + + + + Component + + + + Code + + + Form + + + PlayerForm.cs + + + + + + + + PublicResXFileCodeGenerator + Resources.Designer.cs + Designer + + + + PreserveNewest + + + ColorSlider.cs + + + PlayerForm.cs + + + + + + False + .NET Framework 3.5 SP1 + true + + + + + + + + + + + \ No newline at end of file diff --git a/client/DxPlay/DxPlay.csproj.vspscc b/client/DxPlay/DxPlay.csproj.vspscc new file mode 100644 index 00000000..feffdeca --- /dev/null +++ b/client/DxPlay/DxPlay.csproj.vspscc @@ -0,0 +1,10 @@ +"" +{ +"FILE_VERSION" = "9237" +"ENLISTMENT_CHOICE" = "NEVER" +"PROJECT_FILE_RELATIVE_PATH" = "" +"NUMBER_OF_EXCLUDED_FILES" = "0" +"ORIGINAL_PROJECT_FILE_PATH" = "" +"NUMBER_OF_NESTED_PROJECTS" = "0" +"SOURCE_CONTROL_SETTINGS_PROVIDER" = "PROVIDER" +} diff --git a/client/DxPlay/DxPlayer.cs b/client/DxPlay/DxPlayer.cs new file mode 100644 index 00000000..4ffb3db6 --- /dev/null +++ b/client/DxPlay/DxPlayer.cs @@ -0,0 +1,541 @@ +using System; +using System.Drawing; +using System.Runtime.InteropServices; +using System.Diagnostics; +using System.Windows.Forms; +using System.Threading; + +using DirectShowLib; +using DirectShowLib.Utils; +using Microsoft.Win32.SafeHandles; +using System.ComponentModel; +using System.Drawing.Imaging; +using System.Drawing.Drawing2D; + +namespace DxPlay { + internal class DxPlayer : ISampleGrabberCB, IDisposable { + + [DllImport("Kernel32.dll", EntryPoint = "RtlMoveMemory")] + private static extern void CopyMemory(IntPtr Destination, IntPtr Source, [MarshalAs(UnmanagedType.U4)] uint Length); + + private const int MEDIATIME_REFERENCE = 10000000; + + public enum GraphState { + Stopped, + Paused, + Playing, + Exiting + } + + public MediaDescription MediaDescription { get; internal set; } + public Timecode CurrentTC { get; internal set; } + public GraphState State { get; internal set; } + + private IFilterGraph2 m_FilterGraph; + private IMediaControl m_mediaCtrl; + private IMediaEvent m_mediaEvent; + private int m_videoWidth; + private int m_videoHeight; + + // Event used by Media Event thread + private ManualResetEvent m_mre; + private BackgroundWorker tcWorker; + // Current state of the graph (can change async) + + public event DxPlayEvent PlayEvent; + public delegate void DxPlayEvent(); + + private Thread m_eventThread = null; + private IMediaSeeking m_mediaSeek = null; + private IMediaPosition m_mediaPosition = null; + + private IVideoWindow m_videoWindow = null; + private IBaseFilter m_videoRenderer = null; + private object tcLock = new object(); + Bitmap m_Bitmap = null; + +#if DEBUG + // Allow you to "Connect to remote graph" from GraphEdit + DsROTEntry m_DsRot; +#endif + private int m_stride; + + // Release everything. + public void Dispose() { + CloseInterfaces(); + } + + ~DxPlayer() { + CloseInterfaces(); + } + + // Play an avi file into a window. Allow for snapshots. + // (Control to show video in, Avi file to play + public DxPlayer(Control hWin, MediaDescription mediaDesc) { + State = GraphState.Stopped; + try { + int hr; + IntPtr hEvent; + MediaDescription = mediaDesc; + CurrentTC = new Timecode(mediaDesc.FirstFrame); + Debug.WriteLine("SetupGraph"); + // Set up the graph + SetupGraph(hWin); + + hWin.Hide(); + hWin.Show(); + + // Get the event handle the graph will use to signal + // when events occur + Debug.WriteLine("GetEventHandle"); + hr = m_mediaEvent.GetEventHandle(out hEvent); + DsError.ThrowExceptionForHR(hr); + + // Wrap the graph event with a ManualResetEvent + m_mre = new ManualResetEvent(false); + m_mre.SafeWaitHandle = new SafeWaitHandle(hEvent, true); + + // Create a new thread to wait for events + Debug.WriteLine("m_eventThread.Start()"); + m_eventThread = new Thread(new ThreadStart(EventWait)); + m_eventThread.Name = "Media Event Thread"; + m_eventThread.Start(); + + m_Bitmap = Properties.Resources.lgs; + + tcWorker = new BackgroundWorker(); + tcWorker.DoWork += TcWorker_DoWork; + tcWorker.WorkerSupportsCancellation = true; + tcWorker.RunWorkerAsync(tcLock); + + } + catch { + Dispose(); + throw; + } + } + + private void TcWorker_DoWork(object sender, DoWorkEventArgs e) { + while (!e.Cancel) { + UpdateTC(); + Thread.Sleep(10); + } + } + + + // start playing + public void Play() { + // If we aren't already playing (or shutting down) + if (State == GraphState.Stopped || State == GraphState.Paused) { + int hr = m_mediaCtrl.Run(); + DsError.ThrowExceptionForHR(hr); + + State = GraphState.Playing; + } + } + + // Pause the capture graph. + public void Pause() { + // If we are playing + if (State == GraphState.Playing) { + int hr = m_mediaCtrl.Pause(); + DsError.ThrowExceptionForHR(hr); + + State = GraphState.Paused; + Seek(CurrentTC.ZeroBasedFrames); + } + } + + // Pause the capture graph. + public void Stop() { + // Can only Stop when playing or paused + if (State == GraphState.Playing || State == GraphState.Paused) { + int hr = m_mediaCtrl.Stop(); + DsError.ThrowExceptionForHR(hr); + State = GraphState.Stopped; + } + Rewind(); + PlayEvent?.Invoke(); + } + + // Reset the clip back to the beginning + public void Rewind() { + Seek(0); + } + + public void Seek(int value) { + double frameLength = (double)MEDIATIME_REFERENCE / MediaDescription.FrameRate; + long avgTimePerFrame = (long)Math.Ceiling(MEDIATIME_REFERENCE / MediaDescription.FrameRate); + long requestedPosition = (long)Math.Ceiling(value * frameLength); + int hr = m_mediaSeek.SetPositions(requestedPosition, AMSeekingSeekingFlags.AbsolutePositioning, null, AMSeekingSeekingFlags.NoPositioning); + DsError.ThrowExceptionForHR(hr); + + long currentPosition; + hr = m_mediaSeek.GetCurrentPosition(out currentPosition); + DsError.ThrowExceptionForHR(hr); + bool corrected = false; + int reachedFrames = (int)Math.Abs((double)currentPosition / avgTimePerFrame); + if (reachedFrames != value) { + //NTSC-n nem megy a seek a kerekítési hibák miatt, mindíg ua. a frame jön ki + requestedPosition += (int)frameLength / 2; + hr = m_mediaSeek.SetPositions(requestedPosition, AMSeekingSeekingFlags.AbsolutePositioning, null, AMSeekingSeekingFlags.NoPositioning); + DsError.ThrowExceptionForHR(hr); + corrected = true; + } + + Debug.WriteLine("Seeking requested frame {0} got frame {1}, media position {2}, frame length {3}, corrected {4}", value, reachedFrames, requestedPosition, avgTimePerFrame, corrected); + } + + private void UpdateTC() { + if (m_mediaSeek == null) + return; + long currentPosition; + int hr = m_mediaSeek.GetCurrentPosition(out currentPosition); + DsError.ThrowExceptionForHR(hr); + long AvgTimePerFrame = (long)Math.Ceiling(MEDIATIME_REFERENCE / MediaDescription.FrameRate); + int frames = (int)Math.Abs((double)currentPosition / AvgTimePerFrame); + if (CurrentTC.ZeroBasedFrames != frames) { + CurrentTC.Set(frames); + //Debug.WriteLine("Current frame is {0} ({1}), media position is {2}, AVG frame time is {3}", frames, CurrentTC.ToString(), currentPosition, AvgTimePerFrame); + } + PlayEvent?.Invoke(); + + } + + // Build the capture graph for grabber and renderer. + // (Control to show video in, Filename to play) + private void SetupGraph(Control hWin) { + int hr; + + m_videoWidth = MediaDescription.Resolution.Width; + m_videoHeight = MediaDescription.Resolution.Height; + + try { + m_FilterGraph = new FilterGraph() as IFilterGraph2; + + IGraphBuilder graphBuilder = m_FilterGraph as IGraphBuilder; + m_mediaSeek = m_FilterGraph as IMediaSeeking; + m_mediaPosition = m_FilterGraph as IMediaPosition; + m_mediaEvent = m_FilterGraph as IMediaEvent; + m_mediaCtrl = m_FilterGraph as IMediaControl; + m_videoWindow = m_FilterGraph as IVideoWindow; + +#if DEBUG + m_DsRot = new DsROTEntry(m_FilterGraph); +#endif + IBaseFilter sourceFilter = null; + hr = m_FilterGraph.AddSourceFilter(MediaDescription.FileName, MediaDescription.FileName, out sourceFilter); + DsError.ThrowExceptionForHR(hr); + + IBaseFilter splitter = FilterGraphTools.AddFilterByName(graphBuilder, FilterCategory.LegacyAmFilterCategory, "LAV Splitter"); + //IBaseFilter splitter = FilterGraphTools.AddFilterByDevicePath(graphBuilder, @"c:\Programs\LAVFilters\LAVSplitter.ax", "LAV Splitter"); + if (splitter == null) + throw new Exception("No splitter!"); + + FilterGraphTools.ConnectFilters(graphBuilder, sourceFilter, "Output", splitter, "Input", true); + + IBaseFilter videoDecoder = FilterGraphTools.AddFilterByName(graphBuilder, FilterCategory.LegacyAmFilterCategory, "LAV Video Decoder"); + if (videoDecoder == null) + throw new Exception("No video decoder!"); + + FilterGraphTools.ConnectFilters(graphBuilder, splitter, "Video", videoDecoder, "Input", true); + + IBaseFilter sampGrabber = (IBaseFilter)new SampleGrabber(); + ConfigureSampleGrabber((ISampleGrabber)sampGrabber); + hr = m_FilterGraph.AddFilter(sampGrabber, "Sample Grabber"); + DsError.ThrowExceptionForHR(hr); + + FilterGraphTools.ConnectFilters(graphBuilder, videoDecoder, "Output", sampGrabber, "Input", true); + + m_videoRenderer = (IBaseFilter)new VideoMixingRenderer9(); + hr = m_FilterGraph.AddFilter(m_videoRenderer, "Video Mixing Renderer 9"); + DsError.ThrowExceptionForHR(hr); + + FilterGraphTools.ConnectFilters(graphBuilder, sampGrabber, "Output", m_videoRenderer, "VMR Input0", true); + + ConfigureVideoWindow(hWin); + + if (DsFindPin.ByName(splitter, "Audio") != null) { + IBaseFilter audioDecoder = FilterGraphTools.AddFilterByName(graphBuilder, FilterCategory.LegacyAmFilterCategory, "LAV Audio Decoder"); + if (audioDecoder == null) + throw new Exception("No audio decoder!"); + + FilterGraphTools.ConnectFilters(graphBuilder, splitter, "Audio", audioDecoder, "Input", true); + FilterGraphTools.RenderPin(graphBuilder, audioDecoder, "Output"); + } + + SaveSizeInfo(sampGrabber as ISampleGrabber); + + } + catch (Exception e) { + Debug.WriteLine(e.Message); + } + finally { + } +#if DEBUG + // Double check to make sure we aren't releasing something + // important. + //GC.Collect(); + //GC.WaitForPendingFinalizers(); +#endif + } + + + // Configure the video window + private void ConfigureVideoWindow(Control hWin) { + int hr; + + // Set the output window + hr = m_videoWindow.put_Owner(hWin.Handle); + DsError.ThrowExceptionForHR(hr); + + hr = m_videoWindow.put_MessageDrain(hWin.Handle); + DsError.ThrowExceptionForHR(hr); + + // Set the window style + hr = m_videoWindow.put_WindowStyle((WindowStyle.Child | WindowStyle.ClipChildren | WindowStyle.ClipSiblings)); + DsError.ThrowExceptionForHR(hr); + + // Make the window visible + hr = m_videoWindow.put_Visible(OABool.True); + DsError.ThrowExceptionForHR(hr); + + UpdateVideoWindow(hWin); + } + + public void UpdateVideoWindow(Control hWin) { + int hr; + // Position the playing location + Rectangle rc = hWin.ClientRectangle; + double x = (double)m_videoWidth / m_videoHeight; + double y = (double)rc.Right / rc.Bottom; + int playerWidth = 0; + int playerHeight = 0; + if (x - y < 0) { + playerWidth = (int)Math.Ceiling(rc.Bottom * x); + playerHeight = rc.Bottom; + } else { + x = (double)m_videoHeight / m_videoWidth; + playerWidth = rc.Right; + playerHeight = (int)Math.Ceiling(rc.Right * x); ; + } + + hr = m_videoWindow.SetWindowPosition((rc.Right - playerWidth) / 2, (rc.Bottom - playerHeight) / 2, playerWidth, playerHeight); + DsError.ThrowExceptionForHR(hr); + } + + public void ToggleFullscreen() { + m_videoWindow.put_FullScreenMode(IsFullscreen() ? OABool.False : OABool.True); + } + + public bool IsFullscreen() { + OABool isFullscreen; + int hr = m_videoWindow.get_FullScreenMode(out isFullscreen); + DsError.ThrowExceptionForHR(hr); + return isFullscreen == OABool.True ? true : false; + } + + // Set the options on the sample grabber + private void ConfigureSampleGrabber(ISampleGrabber sampGrabber) { + AMMediaType media; + int hr; + + // Set the media type to Video/RBG24 + media = new AMMediaType(); + media.majorType = MediaType.Video; + media.subType = MediaSubType.RGB24; + media.formatType = FormatType.VideoInfo; + hr = sampGrabber.SetMediaType(media); + DsError.ThrowExceptionForHR(hr); + + DsUtils.FreeAMMediaType(media); + media = null; + + hr = sampGrabber.SetCallback(this, 1); + DsError.ThrowExceptionForHR(hr); + + // Configure the samplegrabber + hr = sampGrabber.SetBufferSamples(true); + DsError.ThrowExceptionForHR(hr); + } + + private void SaveSizeInfo(ISampleGrabber sampGrabber) { + int hr; + + // Get the media type from the SampleGrabber + AMMediaType media = new AMMediaType(); + hr = sampGrabber.GetConnectedMediaType(media); + DsError.ThrowExceptionForHR(hr); + + if ((media.formatType != FormatType.VideoInfo) || (media.formatPtr == IntPtr.Zero)) { + throw new NotSupportedException("Unknown Grabber Media Format"); + } + + // Grab the size info + VideoInfoHeader videoInfoHeader = (VideoInfoHeader)Marshal.PtrToStructure(media.formatPtr, typeof(VideoInfoHeader)); + m_videoWidth = videoInfoHeader.BmiHeader.Width; + m_videoHeight = videoInfoHeader.BmiHeader.Height; + m_stride = m_videoWidth * (videoInfoHeader.BmiHeader.BitCount / 8); + + DsUtils.FreeAMMediaType(media); + media = null; + } + + // Shut down capture + private void CloseInterfaces() { + Debug.WriteLine("CloseInterfaces"); + int hr; + GC.SuppressFinalize(this); + tcWorker.CancelAsync(); + lock (this) { + if (State != GraphState.Exiting) { + State = GraphState.Exiting; + + // Release the thread (if the thread was started) + if (m_mre != null) { + m_mre.Set(); + } + } + + if (m_mediaCtrl != null) { + // Stop the graph + hr = m_mediaCtrl.Stop(); + FilterGraphTools.DisconnectAllPins((IGraphBuilder)m_mediaCtrl); + FilterGraphTools.RemoveAllFilters((IGraphBuilder)m_mediaCtrl); + m_mediaCtrl = null; + + } + + if (m_videoWindow != null) { + hr = m_videoWindow.put_Visible(OABool.False); + hr = m_videoWindow.put_MessageDrain(IntPtr.Zero); + hr = m_videoWindow.put_Owner(IntPtr.Zero); + m_videoWindow = null; + } + + m_mediaEvent = null; + m_mediaSeek = null; + m_mediaPosition = null; + +#if DEBUG + if (m_DsRot != null) { + m_DsRot.Dispose(); + m_DsRot = null; + } +#endif + if (m_FilterGraph != null) { + Marshal.ReleaseComObject(m_FilterGraph); + m_FilterGraph = null; + } + } + GC.Collect(); + //if (m_eventThread != null) + // m_eventThread.Join(); + } + + public int SampleCB(double SampleTime, IMediaSample pSample) { + Marshal.ReleaseComObject(pSample); + return 0; + } + + public int BufferCB(double SampleTime, IntPtr pBuffer, int BufferLen) { + return 0; + int frames = (int)Math.Abs(SampleTime * MediaDescription.FrameRate); + //Debug.WriteLine("BufferCB frames {0}, sample time {1}", frames, SampleTime); + Font font = new Font("Tahoma", 30); + string display = frames.ToString(); + SizeF size = new SizeF(100, 100); + m_Bitmap = new Bitmap((int)Math.Ceiling(size.Width), (int)Math.Ceiling(size.Height)); + GraphicsUnit units = GraphicsUnit.Point; + RectangleF bitmapRectF = m_Bitmap.GetBounds(ref units); + + Graphics g = Graphics.FromImage(m_Bitmap); + + g.SmoothingMode = SmoothingMode.AntiAlias; + g.InterpolationMode = InterpolationMode.HighQualityBicubic; + g.PixelOffsetMode = PixelOffsetMode.HighQuality; + g.FillRectangle(Brushes.Transparent, bitmapRectF); + g.DrawString(display, font, Brushes.White, bitmapRectF); + g.Flush(); + + m_Bitmap.RotateFlip(RotateFlipType.RotateNoneFlipY); + Rectangle r = new Rectangle(0, 0, m_Bitmap.Width, m_Bitmap.Height); + lock (this) { + BitmapData bmdLogo = m_Bitmap.LockBits(r, ImageLockMode.ReadOnly, PixelFormat.Format24bppRgb); + if (bmdLogo != null) { + IntPtr ipSource = bmdLogo.Scan0; + IntPtr ipDest = pBuffer; + + for (int x = 0; x < bmdLogo.Height; x++) { + CopyMemory(ipDest, ipSource, (uint)bmdLogo.Stride); + ipDest = (IntPtr)(ipDest.ToInt64() + m_stride); + ipSource = (IntPtr)(ipSource.ToInt64() + bmdLogo.Stride); + } + } + m_Bitmap.UnlockBits(bmdLogo); + bmdLogo = null; + } + return 0; + } + + // Wait for events to happen. This approach uses waiting on an event handle. + // The nice thing about doing it this way is that you aren't in the windows message + // loop, and don't have to worry about re-entrency or taking too long. Plus, being + // in a class as we are, we don't have access to the message loop. + // Alternately, you can receive your events as windows messages. See + // IMediaEventEx.SetNotifyWindow. + private void EventWait() { + // Returned when GetEvent is called but there are no events + const int E_ABORT = unchecked((int)0x80004004); + + int hr; + IntPtr p1, p2; + EventCode ec; + + do { + // Wait for an event + m_mre.WaitOne(-1, true); + + // Avoid contention for m_State + lock (this) { + // If we are not shutting down + if (State != GraphState.Exiting) { + // Read the event + for ( + hr = m_mediaEvent.GetEvent(out ec, out p1, out p2, 0); + hr >= 0; + hr = m_mediaEvent.GetEvent(out ec, out p1, out p2, 0) + ) { + // Write the event name to the debug window + Debug.WriteLine(ec.ToString()); + + // If the clip is finished playing + if (ec == EventCode.Complete) { + //Stop(); + } + + // Release any resources the message allocated + hr = m_mediaEvent.FreeEventParams(ec, p1, p2); + DsError.ThrowExceptionForHR(hr); + + //lock (tcLock) { + // UpdateTC(""); + //} + + } + + // If the error that exited the loop wasn't due to running out of events + if (hr != E_ABORT) { + DsError.ThrowExceptionForHR(hr); + } + } else { + // We are shutting down + Debug.WriteLine("Shutdown"); + break; + } + } + } while (true); + } + + } +} diff --git a/client/DxPlay/FilterGraphTools.cs b/client/DxPlay/FilterGraphTools.cs new file mode 100644 index 00000000..4a75a06d --- /dev/null +++ b/client/DxPlay/FilterGraphTools.cs @@ -0,0 +1,1182 @@ +/**************************************************************************** +While the underlying libraries are covered by LGPL, this sample is released +as public domain. It is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY +or FITNESS FOR A PARTICULAR PURPOSE. +*****************************************************************************/ + +using System; +using System.Collections; +using System.Runtime.InteropServices; +using System.Security.Permissions; + +using DirectShowLib; + +#if !USING_NET11 +using System.Runtime.InteropServices.ComTypes; +using System.Collections.Generic; +using System.Text.RegularExpressions; +#endif + +namespace DirectShowLib.Utils { + /// + /// A collection of methods to do common DirectShow tasks. + /// + + public sealed class FilterGraphTools { + private FilterGraphTools() { } + + /// + /// Add a filter to a DirectShow Graph using its CLSID + /// + /// the IGraphBuilder interface of the graph + /// a valid CLSID. This object must implement IBaseFilter + /// the name used in the graph (may be null) + /// an instance of the filter if the method successfully created it, null if not + /// + /// You can use IsThisComObjectInstalled to check is the CLSID is valid before calling this method + /// + /// This sample shows how to programmatically add a NVIDIA Video decoder filter to a graph + /// + /// Guid nvidiaVideoDecClsid = new Guid("71E4616A-DB5E-452B-8CA5-71D9CC7805E9"); + /// + /// if (FilterGraphTools.IsThisComObjectInstalled(nvidiaVideoDecClsid)) + /// { + /// filter = FilterGraphTools.AddFilterFromClsid(graphBuilder, nvidiaVideoDecClsid, "NVIDIA Video Decoder"); + /// } + /// else + /// { + /// // use another filter... + /// } + /// + /// + /// + /// Thrown if graphBuilder is null + /// Thrown if errors occur when the filter is add to the graph + + [SecurityPermission(SecurityAction.LinkDemand, UnmanagedCode = true)] + public static IBaseFilter AddFilterFromClsid(IGraphBuilder graphBuilder, Guid clsid, string name) { + int hr = 0; + IBaseFilter filter = null; + + if (graphBuilder == null) + throw new ArgumentNullException("graphBuilder"); + + try { + Type type = Type.GetTypeFromCLSID(clsid); + filter = (IBaseFilter)Activator.CreateInstance(type); + + hr = graphBuilder.AddFilter(filter, name); + DsError.ThrowExceptionForHR(hr); + } + catch { + if (filter != null) { + Marshal.ReleaseComObject(filter); + filter = null; + } + } + + return filter; + } + + [SecurityPermission(SecurityAction.LinkDemand, UnmanagedCode = true)] + public static object CreateComObjectFromClsid(Guid clsid) { + try { + Type type = Type.GetTypeFromCLSID(clsid); + return Activator.CreateInstance(type); + } + catch { + return null; + } + } + + + /// + /// Add a filter to a DirectShow Graph using its name + /// + /// the IGraphBuilder interface of the graph + /// the filter category (see DirectShowLib.FilterCategory) + /// the filter name (case-sensitive) + /// an instance of the filter if the method successfully created it, null if not + /// This sample shows how to programmatically add a NVIDIA Video decoder filter to a graph + /// + /// filter = FilterGraphTools.AddFilterByName(graphBuilder, FilterCategory.LegacyAmFilterCategory, "NVIDIA Video Decoder"); + /// + /// + /// Thrown if graphBuilder is null + /// Thrown if errors occur when the filter is add to the graph + + public static IBaseFilter AddFilterByName(IGraphBuilder graphBuilder, Guid deviceCategory, string friendlyName) { + int hr = 0; + IBaseFilter filter = null; + + if (graphBuilder == null) + throw new ArgumentNullException("graphBuilder"); + + DsDevice[] devices = DsDevice.GetDevicesOfCat(deviceCategory); + + for (int i = 0; i < devices.Length; i++) { + if (string.IsNullOrEmpty(devices[i].Name)) //if the name is empty ignore the filter + continue; + else { + if (!devices[i].Name.Equals(friendlyName)) + continue; + } + + hr = (graphBuilder as IFilterGraph2).AddSourceFilterForMoniker(devices[i].Mon, null, friendlyName, out filter); + DsError.ThrowExceptionForHR(hr); + + break; + } + + return filter; + } + + /// + /// Add a filter to a DirectShow Graph using its Moniker's device path + /// + /// the IGraphBuilder interface of the graph + /// a moniker path + /// the name to use for the filter in the graph + /// an instance of the filter if the method successfully creates it, null if not + /// This sample shows how to programmatically add a NVIDIA Video decoder filter to a graph + /// + /// string devicePath = @"@device:sw:{083863F1-70DE-11D0-BD40-00A0C911CE86}\{71E4616A-DB5E-452B-8CA5-71D9CC7805E9}"; + /// filter = FilterGraphTools.AddFilterByDevicePath(graphBuilder, devicePath, "NVIDIA Video Decoder"); + /// + /// + /// Thrown if graphBuilder is null + /// Thrown if errors occur when the filter is add to the graph + + [SecurityPermission(SecurityAction.LinkDemand, UnmanagedCode = true)] + public static IBaseFilter AddFilterByDevicePath(IGraphBuilder graphBuilder, string devicePath, string name) { + int hr = 0; + IBaseFilter filter = null; +#if USING_NET11 + UCOMIBindCtx bindCtx = null; + UCOMIMoniker moniker = null; +#else + IBindCtx bindCtx = null; + IMoniker moniker = null; +#endif + int eaten; + + if (graphBuilder == null) + throw new ArgumentNullException("graphBuilder"); + + try { + hr = NativeMethods.CreateBindCtx(0, out bindCtx); + Marshal.ThrowExceptionForHR(hr); + + hr = NativeMethods.MkParseDisplayName(bindCtx, devicePath, out eaten, out moniker); + Marshal.ThrowExceptionForHR(hr); + + hr = (graphBuilder as IFilterGraph2).AddSourceFilterForMoniker(moniker, bindCtx, name, out filter); + DsError.ThrowExceptionForHR(hr); + } + catch { + // An error occur. Just returning null... + } + finally { + if (bindCtx != null) Marshal.ReleaseComObject(bindCtx); + if (moniker != null) Marshal.ReleaseComObject(moniker); + } + + return filter; + } + + public static IBaseFilter CreateFilterFromPath(Guid category, string devicePath) { + object source = null; + Guid iid = typeof(IBaseFilter).GUID; + foreach (DsDevice device in DsDevice.GetDevicesOfCat(category)) { + if (device.DevicePath.CompareTo(devicePath) == 0) { + device.Mon.BindToObject(null, null, ref iid, out source); + break; + } + } + return (IBaseFilter)source; + } + + /// + /// Find a filter in a DirectShow Graph using its name + /// + /// the IGraphBuilder interface of the graph + /// the filter name to find (case-sensitive) + /// an instance of the filter if found, null if not + /// + /// Thrown if graphBuilder is null + + [SecurityPermission(SecurityAction.LinkDemand, UnmanagedCode = true)] + public static IBaseFilter FindFilterByName(IGraphBuilder graphBuilder, string filterName) { + int hr = 0; + IBaseFilter filter = null; + IEnumFilters enumFilters = null; + + if (graphBuilder == null) + throw new ArgumentNullException("graphBuilder"); + + hr = graphBuilder.EnumFilters(out enumFilters); + if (hr == 0) { + IBaseFilter[] filters = new IBaseFilter[1]; + int pcFetched; + while (enumFilters.Next(filters.Length, filters, out pcFetched) == 0) { + FilterInfo filterInfo; + + hr = filters[0].QueryFilterInfo(out filterInfo); + if (hr == 0) { + if (filterInfo.pGraph != null) + Marshal.ReleaseComObject(filterInfo.pGraph); + + if (filterInfo.achName.Equals(filterName)) { + filter = filters[0]; + break; + } + } + + Marshal.ReleaseComObject(filters[0]); + } + Marshal.ReleaseComObject(enumFilters); + } + + return filter; + } + + [SecurityPermission(SecurityAction.LinkDemand, UnmanagedCode = true)] + public static string GetFilterName(IBaseFilter filter) { + int hr = 0; + string filterName = string.Empty; + + FilterInfo filterInfo; + hr = filter.QueryFilterInfo(out filterInfo); + if (hr == 0) { + if (filterInfo.pGraph != null) + Marshal.ReleaseComObject(filterInfo.pGraph); + + filterName = filterInfo.achName; + } + + return filterName; + } + + [SecurityPermission(SecurityAction.LinkDemand, UnmanagedCode = true)] + public static IBaseFilter FindFilterByClsid(IGraphBuilder graphBuilder, string filterClsid) { + int hr = 0; + IBaseFilter filter = null; + IEnumFilters enumFilters = null; + Guid gClsid = new Guid(filterClsid); + + if (graphBuilder == null) + throw new ArgumentNullException("graphBuilder"); + + hr = graphBuilder.EnumFilters(out enumFilters); + if (hr == 0) { + while (true) { + IBaseFilter[] filters = new IBaseFilter[1]; + int fetched; + hr = enumFilters.Next(1, filters, out fetched); + DsError.ThrowExceptionForHR(hr); + + if (fetched > 0) { + Guid clsid; + + hr = filters[0].GetClassID(out clsid); + + if ((hr == 0) && (clsid == gClsid)) { + filter = filters[0]; + break; + } + + Marshal.ReleaseComObject(filters[0]); + } else + break; + } + Marshal.ReleaseComObject(enumFilters); + } + + return filter; + } + + /// + /// Find a filter in a DirectShow Graph using its CLSID + /// + /// the IGraphBuilder interface of the graph + /// the CLSID to find + /// an instance of the filter if found, null if not + /// + /// Thrown if graphBuilder is null + + [SecurityPermission(SecurityAction.LinkDemand, UnmanagedCode = true)] + public static IBaseFilter FindFilterByClsid(IGraphBuilder graphBuilder, Guid filterClsid) { + int hr = 0; + IBaseFilter filter = null; + IEnumFilters enumFilters = null; + + if (graphBuilder == null) + throw new ArgumentNullException("graphBuilder"); + + hr = graphBuilder.EnumFilters(out enumFilters); + if (hr == 0) { + IBaseFilter[] filters = new IBaseFilter[1]; + + int pcFetched; + while (enumFilters.Next(filters.Length, filters, out pcFetched) == 0) { + Guid clsid; + + hr = filters[0].GetClassID(out clsid); + + if ((hr == 0) && (clsid == filterClsid)) { + filter = filters[0]; + break; + } + + Marshal.ReleaseComObject(filters[0]); + } + Marshal.ReleaseComObject(enumFilters); + } + + return filter; + } + + [SecurityPermission(SecurityAction.LinkDemand, UnmanagedCode = true)] + public static void SetGraphOutputFile(IGraphBuilder graphBuilder, string OutputFile) { + int hr = 0; + IEnumFilters enumFilters = null; + + if (graphBuilder == null) + throw new ArgumentNullException("graphBuilder"); + + hr = graphBuilder.EnumFilters(out enumFilters); + if (hr == 0) { + IBaseFilter[] filters = new IBaseFilter[1]; + + int pcFetched; + while (enumFilters.Next(filters.Length, filters, out pcFetched) == 0) { + Guid clsid; + + IFileSinkFilter fsf = filters[0] as IFileSinkFilter; + + if (fsf != null) { + hr = fsf.SetFileName(OutputFile, null); + Marshal.ReleaseComObject(filters[0]); + break; + } + + Marshal.ReleaseComObject(filters[0]); + } + Marshal.ReleaseComObject(enumFilters); + } + } + + /// + /// Render a filter's pin in a DirectShow Graph + /// + /// the IGraphBuilder interface of the graph + /// the filter containing the pin to render + /// the pin name + /// true if rendering is a success, false if not + /// + /// + /// hr = graphBuilder.AddSourceFilter(@"foo.avi", "Source Filter", out filter); + /// DsError.ThrowExceptionForHR(hr); + /// + /// if (!FilterGraphTools.RenderPin(graphBuilder, filter, "Output")) + /// { + /// // Something went wrong... + /// } + /// + /// + /// Thrown if graphBuilder or source is null + /// This method assumes that the filter is part of the given graph + + [SecurityPermission(SecurityAction.LinkDemand, UnmanagedCode = true)] + public static bool RenderPin(IGraphBuilder graphBuilder, IBaseFilter source, string pinName) { + int hr = 0; + + if (graphBuilder == null) + throw new ArgumentNullException("graphBuilder"); + + if (source == null) + throw new ArgumentNullException("source"); + + IPin pin = DsFindPin.ByName(source, pinName); + + if (pin != null) { + hr = graphBuilder.Render(pin); + Marshal.ReleaseComObject(pin); + + return (hr >= 0); + } + + return false; + } + + [SecurityPermission(SecurityAction.LinkDemand, UnmanagedCode = true)] + public static IBaseFilter GetFilterFromPin(IPin pin) { + PinInfo pi = default(PinInfo); + IBaseFilter filter; + int hr; + + //try + //{ + hr = pin.QueryPinInfo(out pi); + DsError.ThrowExceptionForHR(hr); + + filter = pi.filter; + return filter; + //} + //finally + //{ + // DsUtils.FreePinInfo(pi); + //} + } + + /// + /// Disconnect all pins on a given filter + /// + /// the filter on which to disconnect all the pins + /// Thrown if filter is null + /// Thrown if errors occured during the disconnection process + /// Both input and output pins are disconnected + + [SecurityPermission(SecurityAction.LinkDemand, UnmanagedCode = true)] + public static void DisconnectPins(IBaseFilter filter) { + int hr = 0; + + if (filter == null) + throw new ArgumentNullException("filter"); + + IEnumPins enumPins; + IPin[] pins = new IPin[1]; + + hr = filter.EnumPins(out enumPins); + DsError.ThrowExceptionForHR(hr); + + try { + int pcFetched; + while (enumPins.Next(pins.Length, pins, out pcFetched) == 0) { + try { + hr = pins[0].Disconnect(); + DsError.ThrowExceptionForHR(hr); + } + finally { + Marshal.ReleaseComObject(pins[0]); + } + } + } + finally { + Marshal.ReleaseComObject(enumPins); + } + } + + /// + /// Disconnect pins of all the filters in a DirectShow Graph + /// + /// the IGraphBuilder interface of the graph + /// Thrown if graphBuilder is null + /// Thrown if the method can't enumerate its filters + /// This method doesn't throw an exception if an error occurs during pin disconnections + + [SecurityPermission(SecurityAction.LinkDemand, UnmanagedCode = true)] + public static void DisconnectAllPins(IGraphBuilder graphBuilder) { + int hr = 0; + IEnumFilters enumFilters; + + if (graphBuilder == null) + throw new ArgumentNullException("graphBuilder"); + + hr = graphBuilder.EnumFilters(out enumFilters); + DsError.ThrowExceptionForHR(hr); + + try { + IBaseFilter[] filters = new IBaseFilter[1]; + int pcFetched; + while (enumFilters.Next(filters.Length, filters, out pcFetched) == 0) { + try { + DisconnectPins(filters[0]); + } + catch { } + Marshal.ReleaseComObject(filters[0]); + } + } + finally { + Marshal.ReleaseComObject(enumFilters); + } + } + + /// + /// Remove and release all filters from a DirectShow Graph + /// + /// the IGraphBuilder interface of the graph + /// Thrown if graphBuilder is null + /// Thrown if the method can't enumerate its filters + + [SecurityPermission(SecurityAction.LinkDemand, UnmanagedCode = true)] + public static void RemoveAllFilters(IGraphBuilder graphBuilder) { + int hr = 0; + IEnumFilters enumFilters; + ArrayList filtersArray = new ArrayList(); + + if (graphBuilder == null) + throw new ArgumentNullException("graphBuilder"); + + hr = graphBuilder.EnumFilters(out enumFilters); + DsError.ThrowExceptionForHR(hr); + + try { + IBaseFilter[] filters = new IBaseFilter[1]; + int pcFetched; + while (enumFilters.Next(filters.Length, filters, out pcFetched) == 0) { + filtersArray.Add(filters[0]); + } + } + finally { + Marshal.ReleaseComObject(enumFilters); + } + + foreach (IBaseFilter filter in filtersArray) { + hr = graphBuilder.RemoveFilter(filter); + Marshal.ReleaseComObject(filter); + } + } + + /// + /// Save a DirectShow Graph to a GRF file + /// + /// the IGraphBuilder interface of the graph + /// the file to be saved + /// Thrown if graphBuilder is null + /// Thrown if errors occur during the file creation + /// + /// This method overwrites any existing file + + [SecurityPermission(SecurityAction.LinkDemand, UnmanagedCode = true)] + public static void SaveGraphFile(IGraphBuilder graphBuilder, string fileName) { + int hr = 0; + IStorage storage = null; +#if USING_NET11 + UCOMIStream stream = null; +#else + IStream stream = null; +#endif + + if (graphBuilder == null) + throw new ArgumentNullException("graphBuilder"); + + try { + hr = NativeMethods.StgCreateDocfile( + fileName, + STGM.Create | STGM.Transacted | STGM.ReadWrite | STGM.ShareExclusive, + 0, + out storage + ); + + Marshal.ThrowExceptionForHR(hr); + + hr = storage.CreateStream( + @"ActiveMovieGraph", + STGM.Write | STGM.Create | STGM.ShareExclusive, + 0, + 0, + out stream + ); + + Marshal.ThrowExceptionForHR(hr); + + hr = (graphBuilder as IPersistStream).Save(stream, true); + Marshal.ThrowExceptionForHR(hr); + + hr = storage.Commit(STGC.Default); + Marshal.ThrowExceptionForHR(hr); + } + finally { + if (stream != null) + Marshal.ReleaseComObject(stream); + if (storage != null) + Marshal.ReleaseComObject(storage); + } + } + + /// + /// Load a DirectShow Graph from a file + /// + /// the IGraphBuilder interface of the graph + /// the file to be loaded + /// Thrown if graphBuilder is null + /// Thrown if the given file is not a valid graph file + /// Thrown if errors occur during loading + /// + + [SecurityPermission(SecurityAction.LinkDemand, UnmanagedCode = true)] + public static void LoadGraphFile(IGraphBuilder graphBuilder, string fileName) { + int hr = 0; + IStorage storage = null; +#if USING_NET11 + UCOMIStream stream = null; +#else + IStream stream = null; +#endif + + if (graphBuilder == null) + throw new ArgumentNullException("graphBuilder"); + + try { + if (NativeMethods.StgIsStorageFile(fileName) != 0) + throw new ArgumentException(); + + hr = NativeMethods.StgOpenStorage( + fileName, + null, + STGM.Transacted | STGM.Read | STGM.ShareDenyWrite, + IntPtr.Zero, + 0, + out storage + ); + + Marshal.ThrowExceptionForHR(hr); + + hr = storage.OpenStream( + @"ActiveMovieGraph", + IntPtr.Zero, + STGM.Read | STGM.ShareExclusive, + 0, + out stream + ); + + Marshal.ThrowExceptionForHR(hr); + + hr = (graphBuilder as IPersistStream).Load(stream); + Marshal.ThrowExceptionForHR(hr); + } + finally { + if (stream != null) + Marshal.ReleaseComObject(stream); + if (storage != null) + Marshal.ReleaseComObject(storage); + } + } + + /// + /// Check if a DirectShow filter can display Property Pages + /// + /// A DirectShow Filter + /// Thrown if filter is null + /// + /// true if the filter has Property Pages, false if not + /// + /// This method is intended to be used with ShowFilterPropertyPage + /// + + public static bool HasPropertyPages(IBaseFilter filter) { + if (filter == null) + throw new ArgumentNullException("filter"); + + return ((filter as ISpecifyPropertyPages) != null); + } + + /// + /// Display Property Pages of a given DirectShow filter + /// + /// A DirectShow Filter + /// A hwnd handle of a window to contain the pages + /// Thrown if filter is null + /// + /// + /// You can check if a filter supports Property Pages with the HasPropertyPages method.
+ /// Warning : This method is blocking. It only returns when the Property Pages are closed. + ///
+ /// This sample shows how to check if a filter supports Property Pages and displays them + /// + /// if (FilterGraphTools.HasPropertyPages(myFilter)) + /// { + /// FilterGraphTools.ShowFilterPropertyPage(myFilter, myForm.Handle); + /// } + /// + /// + + [SecurityPermission(SecurityAction.LinkDemand, UnmanagedCode = true)] + public static void ShowFilterPropertyPage(IBaseFilter filter, IntPtr parent) { + int hr = 0; + FilterInfo filterInfo; + DsCAUUID caGuid; + object[] objs; + + if (filter == null) + throw new ArgumentNullException("filter"); + + if (HasPropertyPages(filter)) { + hr = filter.QueryFilterInfo(out filterInfo); + DsError.ThrowExceptionForHR(hr); + + if (filterInfo.pGraph != null) + Marshal.ReleaseComObject(filterInfo.pGraph); + + hr = (filter as ISpecifyPropertyPages).GetPages(out caGuid); + DsError.ThrowExceptionForHR(hr); + + try { + objs = new object[1]; + objs[0] = filter; + + NativeMethods.OleCreatePropertyFrame( + parent, 0, 0, + filterInfo.achName, + objs.Length, objs, + caGuid.cElems, caGuid.pElems, + 0, 0, + IntPtr.Zero + ); + } + finally { + Marshal.FreeCoTaskMem(caGuid.pElems); + } + } + } + + /// + /// Check if a COM Object is available + /// + /// The CLSID of this object + /// This sample shows how to check if the MPEG-2 Demultiplexer filter is available + /// + /// if (FilterGraphTools.IsThisComObjectInstalled(typeof(MPEG2Demultiplexer).GUID)) + /// { + /// // Use it... + /// } + /// + /// + /// true if the object is available, false if not + + [SecurityPermission(SecurityAction.LinkDemand, UnmanagedCode = true)] + public static bool IsThisComObjectInstalled(Guid clsid) { + bool retval = false; + + try { + Type type = Type.GetTypeFromCLSID(clsid); + object o = Activator.CreateInstance(type); + retval = true; + Marshal.ReleaseComObject(o); + } + catch { } + + return retval; + } + + [SecurityPermission(SecurityAction.LinkDemand, UnmanagedCode = true)] + public static bool IsThisDeviceInstalled(string devicePath) { + bool retval = false; + IBindCtx bindCtx = null; + IMoniker moniker = null; + + int eaten; + + try { + int hr = NativeMethods.CreateBindCtx(0, out bindCtx); + Marshal.ThrowExceptionForHR(hr); + + hr = NativeMethods.MkParseDisplayName(bindCtx, devicePath, out eaten, out moniker); + Marshal.ThrowExceptionForHR(hr); + + retval = true; + } + catch { } + finally { + if (bindCtx != null) Marshal.ReleaseComObject(bindCtx); + if (moniker != null) Marshal.ReleaseComObject(moniker); + } + + return retval; + } + + /// + /// Check if the Video Mixing Renderer 9 Filter is available + /// + /// + /// + /// This method uses IsThisComObjectInstalled internally + /// + /// true if VMR9 is present, false if not + + [SecurityPermission(SecurityAction.LinkDemand, UnmanagedCode = true)] + public static bool IsVMR9Present() { + return IsThisComObjectInstalled(typeof(VideoMixingRenderer9).GUID); + } + + /// + /// Check if the Video Mixing Renderer 7 Filter is available + /// + /// + /// + /// This method uses IsThisComObjectInstalled internally + /// + /// true if VMR7 is present, false if not + + [SecurityPermission(SecurityAction.LinkDemand, UnmanagedCode = true)] + public static bool IsVMR7Present() { + return IsThisComObjectInstalled(typeof(VideoMixingRenderer).GUID); + } + + /// + /// Connect pins from two filters + /// + /// the IGraphBuilder interface of the graph + /// the upstream filter + /// the upstream filter pin name + /// the downstream filter + /// the downstream filter pin name + /// indicate if the method should use DirectShow's Intelligent Connect + /// Thrown if graphBuilder, upFilter or downFilter are null + /// Thrown if pin names are not found in filters + /// Thrown if pins can't connect + /// + /// If useIntelligentConnect is true, this method can add missing filters between the two pins.
+ /// If useIntelligentConnect is false, this method works only if the two media types are compatible. + ///
+ + public static void ConnectFilters(IGraphBuilder graphBuilder, IBaseFilter upFilter, string sourcePinName, IBaseFilter downFilter, string destPinName, bool useIntelligentConnect) { + ConnectFilters(graphBuilder, upFilter, sourcePinName, downFilter, destPinName, useIntelligentConnect, false); + } + + public static void ConnectFilters(IGraphBuilder graphBuilder, IBaseFilter upFilter, string sourcePinName, IBaseFilter downFilter, string destPinName, bool useIntelligentConnect, bool ignoreConnectedPins) { + if (graphBuilder == null) + throw new ArgumentNullException("graphBuilder"); + + if (upFilter == null) + throw new ArgumentNullException("upFilter"); + + if (downFilter == null) + throw new ArgumentNullException("downFilter"); + + IPin sourcePin, destPin; + IPin cPin = null; + + sourcePin = DsFindPin.ByName(upFilter, sourcePinName); + if (sourcePin == null) + throw new ArgumentException("The source filter has no pin called : " + sourcePinName, sourcePinName); + + destPin = DsFindPin.ByName(downFilter, destPinName); + if (destPin == null) + throw new ArgumentException("The downstream filter has no pin called : " + destPinName, destPinName); + + try { + sourcePin.ConnectedTo(out cPin); + if (cPin == null || !ignoreConnectedPins) + ConnectFilters(graphBuilder, sourcePin, destPin, useIntelligentConnect); + } + finally { + if (cPin != null) + Marshal.ReleaseComObject(cPin); + + Marshal.ReleaseComObject(sourcePin); + Marshal.ReleaseComObject(destPin); + } + } + + /// + /// Connect pins from two filters + /// + /// the IGraphBuilder interface of the graph + /// the source (upstream / output) pin + /// the destination (downstream / input) pin + /// indicates if the method should use DirectShow's Intelligent Connect + /// Thrown if graphBuilder, sourcePin or destPin are null + /// Thrown if pins can't connect + /// + /// If useIntelligentConnect is true, this method can add missing filters between the two pins.
+ /// If useIntelligentConnect is false, this method works only if the two media types are compatible. + ///
+ + [SecurityPermission(SecurityAction.LinkDemand, UnmanagedCode = true)] + public static void ConnectFilters(IGraphBuilder graphBuilder, IPin sourcePin, IPin destPin, bool useIntelligentConnect) { + int hr = 0; + + if (graphBuilder == null) + throw new ArgumentNullException("graphBuilder"); + + if (sourcePin == null) + throw new ArgumentNullException("sourcePin"); + + if (destPin == null) + throw new ArgumentNullException("destPin"); + + if (useIntelligentConnect) { + hr = graphBuilder.Connect(sourcePin, destPin); + DsError.ThrowExceptionForHR(hr); + } else { + hr = graphBuilder.ConnectDirect(sourcePin, destPin, null); + DsError.ThrowExceptionForHR(hr); + } + } + + public static IPin FindPinByMediaType(IBaseFilter filter, PinDirection direction, Guid mType, Guid sType) { + IPin pRet = null; + IPin tPin = null; + int hr; + int index = 0; + + tPin = DsFindPin.ByDirection(filter, direction, index); + while (tPin != null) { + + IEnumMediaTypes emtDvr = null; + AMMediaType[] amtDvr = new AMMediaType[1]; + + try { + tPin.EnumMediaTypes(out emtDvr); + int pcFetched; + hr = emtDvr.Next(1, amtDvr, out pcFetched); + DsError.ThrowExceptionForHR(hr); + + if (amtDvr[0] != null && amtDvr[0].majorType == mType && (amtDvr[0].subType == sType || sType == MediaSubType.Null)) { + pRet = tPin; + break; + } + } + finally { + DsUtils.FreeAMMediaType(amtDvr[0]); + if (emtDvr != null) + Marshal.ReleaseComObject(emtDvr); + } + + if (tPin != null) + Marshal.ReleaseComObject(tPin); + tPin = null; + index++; + tPin = DsFindPin.ByDirection(filter, direction, index); + } + + return pRet; + } + + [SecurityPermission(SecurityAction.LinkDemand, UnmanagedCode = true)] + public static void SetSyncSource(IGraphBuilder graphBuilder, IReferenceClock clock) { + int hr = 0; + IEnumFilters enumFilters = null; + + if (graphBuilder == null) + throw new ArgumentNullException("graphBuilder"); + + hr = graphBuilder.EnumFilters(out enumFilters); + if (hr == 0) { + IBaseFilter[] filters = new IBaseFilter[1]; + int pcFetched; + while (enumFilters.Next(filters.Length, filters, out pcFetched) == 0) { + hr = filters[0].SetSyncSource(clock); + DsError.ThrowExceptionForHR(hr); + + Marshal.ReleaseComObject(filters[0]); + } + Marshal.ReleaseComObject(enumFilters); + } + } + } + + #region Unmanaged Code declarations + + [Flags] + internal enum STGM { + Read = 0x00000000, + Write = 0x00000001, + ReadWrite = 0x00000002, + ShareDenyNone = 0x00000040, + ShareDenyRead = 0x00000030, + ShareDenyWrite = 0x00000020, + ShareExclusive = 0x00000010, + Priority = 0x00040000, + Create = 0x00001000, + Convert = 0x00020000, + FailIfThere = 0x00000000, + Direct = 0x00000000, + Transacted = 0x00010000, + NoScratch = 0x00100000, + NoSnapShot = 0x00200000, + Simple = 0x08000000, + DirectSWMR = 0x00400000, + DeleteOnRelease = 0x04000000, + } + + [Flags] + internal enum STGC { + Default = 0, + Overwrite = 1, + OnlyIfCurrent = 2, + DangerouslyCommitMerelyToDiskCache = 4, + Consolidate = 8 + } + + [Guid("0000000b-0000-0000-C000-000000000046"), + InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] + internal interface IStorage { + [PreserveSig] + int CreateStream( + [In, MarshalAs(UnmanagedType.LPWStr)] string pwcsName, + [In] STGM grfMode, + [In] int reserved1, + [In] int reserved2, +#if USING_NET11 + [Out] out UCOMIStream ppstm +#else + [Out] out IStream ppstm +#endif + ); + + [PreserveSig] + int OpenStream( + [In, MarshalAs(UnmanagedType.LPWStr)] string pwcsName, + [In] IntPtr reserved1, + [In] STGM grfMode, + [In] int reserved2, +#if USING_NET11 + [Out] out UCOMIStream ppstm +#else + [Out] out IStream ppstm +#endif + ); + + [PreserveSig] + int CreateStorage( + [In, MarshalAs(UnmanagedType.LPWStr)] string pwcsName, + [In] STGM grfMode, + [In] int reserved1, + [In] int reserved2, + [Out] out IStorage ppstg + ); + + [PreserveSig] + int OpenStorage( + [In, MarshalAs(UnmanagedType.LPWStr)] string pwcsName, + [In] IStorage pstgPriority, + [In] STGM grfMode, + [In] int snbExclude, + [In] int reserved, + [Out] out IStorage ppstg + ); + + [PreserveSig] + int CopyTo( + [In] int ciidExclude, + [In] Guid[] rgiidExclude, + [In] string[] snbExclude, + [In] IStorage pstgDest + ); + + [PreserveSig] + int MoveElementTo( + [In, MarshalAs(UnmanagedType.LPWStr)] string pwcsName, + [In] IStorage pstgDest, + [In, MarshalAs(UnmanagedType.LPWStr)] string pwcsNewName, + [In] STGM grfFlags + ); + + [PreserveSig] + int Commit([In] STGC grfCommitFlags); + + [PreserveSig] + int Revert(); + + [PreserveSig] + int EnumElements( + [In] int reserved1, + [In] IntPtr reserved2, + [In] int reserved3, + [Out, MarshalAs(UnmanagedType.Interface)] out object ppenum + ); + + [PreserveSig] + int DestroyElement([In, MarshalAs(UnmanagedType.LPWStr)] string pwcsName); + + [PreserveSig] + int RenameElement( + [In, MarshalAs(UnmanagedType.LPWStr)] string pwcsOldName, + [In, MarshalAs(UnmanagedType.LPWStr)] string pwcsNewName + ); + + [PreserveSig] + int SetElementTimes( + [In, MarshalAs(UnmanagedType.LPWStr)] string pwcsName, +#if USING_NET11 + [In] FILETIME pctime, + [In] FILETIME patime, + [In] FILETIME pmtime +#else + [In] System.Runtime.InteropServices.ComTypes.FILETIME pctime, + [In] System.Runtime.InteropServices.ComTypes.FILETIME patime, + [In] System.Runtime.InteropServices.ComTypes.FILETIME pmtime +#endif + ); + + [PreserveSig] + int SetClass([In, MarshalAs(UnmanagedType.LPStruct)] Guid clsid); + + [PreserveSig] + int SetStateBits( + [In] int grfStateBits, + [In] int grfMask + ); + + [PreserveSig] + int Stat( +#if USING_NET11 + [Out] out STATSTG pStatStg, +#else + [Out] out System.Runtime.InteropServices.ComTypes.STATSTG pStatStg, +#endif + [In] int grfStatFlag + ); + } + + internal sealed class NativeMethods { + private NativeMethods() { } + + [DllImport("ole32.dll")] +#if USING_NET11 + public static extern int CreateBindCtx(int reserved, out UCOMIBindCtx ppbc); +#else + public static extern int CreateBindCtx(int reserved, out IBindCtx ppbc); +#endif + + [DllImport("ole32.dll")] +#if USING_NET11 + public static extern int MkParseDisplayName(UCOMIBindCtx pcb, [MarshalAs(UnmanagedType.LPWStr)] string szUserName, out int pchEaten, out UCOMIMoniker ppmk); +#else + public static extern int MkParseDisplayName(IBindCtx pcb, [MarshalAs(UnmanagedType.LPWStr)] string szUserName, out int pchEaten, out IMoniker ppmk); +#endif + + [DllImport("oleaut32.dll", CharSet = CharSet.Unicode, ExactSpelling = true)] + public static extern int OleCreatePropertyFrame( + [In] IntPtr hwndOwner, + [In] int x, + [In] int y, + [In, MarshalAs(UnmanagedType.LPWStr)] string lpszCaption, + [In] int cObjects, + [In, MarshalAs(UnmanagedType.LPArray, ArraySubType = UnmanagedType.IUnknown)] object[] ppUnk, + [In] int cPages, + [In] IntPtr pPageClsID, + [In] int lcid, + [In] int dwReserved, + [In] IntPtr pvReserved + ); + + [DllImport("ole32.dll", CharSet = CharSet.Unicode, ExactSpelling = true)] + public static extern int StgCreateDocfile( + [In, MarshalAs(UnmanagedType.LPWStr)] string pwcsName, + [In] STGM grfMode, + [In] int reserved, + [Out] out IStorage ppstgOpen + ); + + [DllImport("ole32.dll", CharSet = CharSet.Unicode, ExactSpelling = true)] + public static extern int StgIsStorageFile([In, MarshalAs(UnmanagedType.LPWStr)] string pwcsName); + + [DllImport("ole32.dll", CharSet = CharSet.Unicode, ExactSpelling = true)] + public static extern int StgOpenStorage( + [In, MarshalAs(UnmanagedType.LPWStr)] string pwcsName, + [In] IStorage pstgPriority, + [In] STGM grfMode, + [In] IntPtr snbExclude, + [In] int reserved, + [Out] out IStorage ppstgOpen + ); + + } + #endregion + +} diff --git a/client/DxPlay/FlexibleMessageBox.cs b/client/DxPlay/FlexibleMessageBox.cs new file mode 100644 index 00000000..6c9bf95e --- /dev/null +++ b/client/DxPlay/FlexibleMessageBox.cs @@ -0,0 +1,757 @@ +using System; +using System.Diagnostics; +using System.Drawing; +using System.Globalization; +using System.Windows.Forms; + +namespace JR.Utils.GUI.Forms { + public class FlexibleMessageBox { + #region Public statics + + /// + /// Defines the maximum width for all FlexibleMessageBox instances in percent of the working area. + /// + /// Allowed values are 0.2 - 1.0 where: + /// 0.2 means: The FlexibleMessageBox can be at most half as wide as the working area. + /// 1.0 means: The FlexibleMessageBox can be as wide as the working area. + /// + /// Default is: 70% of the working area width. + /// + public static double MAX_WIDTH_FACTOR = 0.7; + + /// + /// Defines the maximum height for all FlexibleMessageBox instances in percent of the working area. + /// + /// Allowed values are 0.2 - 1.0 where: + /// 0.2 means: The FlexibleMessageBox can be at most half as high as the working area. + /// 1.0 means: The FlexibleMessageBox can be as high as the working area. + /// + /// Default is: 90% of the working area height. + /// + public static double MAX_HEIGHT_FACTOR = 0.9; + + /// + /// Defines the font for all FlexibleMessageBox instances. + /// + /// Default is: SystemFonts.MessageBoxFont + /// + public static Font FONT = SystemFonts.MessageBoxFont; + + #endregion + + #region Public show functions + + /// + /// Shows the specified message box. + /// + /// The text. + /// The dialog result. + public static DialogResult Show(string text) { + return FlexibleMessageBoxForm.Show(null, text, string.Empty, MessageBoxButtons.OK, MessageBoxIcon.None, MessageBoxDefaultButton.Button1); + } + + /// + /// Shows the specified message box. + /// + /// The owner. + /// The text. + /// The dialog result. + public static DialogResult Show(IWin32Window owner, string text) { + return FlexibleMessageBoxForm.Show(owner, text, string.Empty, MessageBoxButtons.OK, MessageBoxIcon.None, MessageBoxDefaultButton.Button1); + } + + /// + /// Shows the specified message box. + /// + /// The text. + /// The caption. + /// The dialog result. + public static DialogResult Show(string text, string caption) { + return FlexibleMessageBoxForm.Show(null, text, caption, MessageBoxButtons.OK, MessageBoxIcon.None, MessageBoxDefaultButton.Button1); + } + + /// + /// Shows the specified message box. + /// + /// The owner. + /// The text. + /// The caption. + /// The dialog result. + public static DialogResult Show(IWin32Window owner, string text, string caption) { + return FlexibleMessageBoxForm.Show(owner, text, caption, MessageBoxButtons.OK, MessageBoxIcon.None, MessageBoxDefaultButton.Button1); + } + + /// + /// Shows the specified message box. + /// + /// The text. + /// The caption. + /// The buttons. + /// The dialog result. + public static DialogResult Show(string text, string caption, MessageBoxButtons buttons) { + return FlexibleMessageBoxForm.Show(null, text, caption, buttons, MessageBoxIcon.None, MessageBoxDefaultButton.Button1); + } + + /// + /// Shows the specified message box. + /// + /// The owner. + /// The text. + /// The caption. + /// The buttons. + /// The dialog result. + public static DialogResult Show(IWin32Window owner, string text, string caption, MessageBoxButtons buttons) { + return FlexibleMessageBoxForm.Show(owner, text, caption, buttons, MessageBoxIcon.None, MessageBoxDefaultButton.Button1); + } + + /// + /// Shows the specified message box. + /// + /// The text. + /// The caption. + /// The buttons. + /// The icon. + /// + public static DialogResult Show(string text, string caption, MessageBoxButtons buttons, MessageBoxIcon icon) { + return FlexibleMessageBoxForm.Show(null, text, caption, buttons, icon, MessageBoxDefaultButton.Button1); + } + + /// + /// Shows the specified message box. + /// + /// The owner. + /// The text. + /// The caption. + /// The buttons. + /// The icon. + /// The dialog result. + public static DialogResult Show(IWin32Window owner, string text, string caption, MessageBoxButtons buttons, MessageBoxIcon icon) { + return FlexibleMessageBoxForm.Show(owner, text, caption, buttons, icon, MessageBoxDefaultButton.Button1); + } + + /// + /// Shows the specified message box. + /// + /// The text. + /// The caption. + /// The buttons. + /// The icon. + /// The default button. + /// The dialog result. + public static DialogResult Show(string text, string caption, MessageBoxButtons buttons, MessageBoxIcon icon, MessageBoxDefaultButton defaultButton) { + return FlexibleMessageBoxForm.Show(null, text, caption, buttons, icon, defaultButton); + } + + /// + /// Shows the specified message box. + /// + /// The owner. + /// The text. + /// The caption. + /// The buttons. + /// The icon. + /// The default button. + /// The dialog result. + public static DialogResult Show(IWin32Window owner, string text, string caption, MessageBoxButtons buttons, MessageBoxIcon icon, MessageBoxDefaultButton defaultButton) { + return FlexibleMessageBoxForm.Show(owner, text, caption, buttons, icon, defaultButton); + } + + #endregion + + #region Internal form class + + /// + /// The form to show the customized message box. + /// It is defined as an internal class to keep the public interface of the FlexibleMessageBox clean. + /// + class FlexibleMessageBoxForm : Form { + #region Form-Designer generated code + + /// + /// Erforderliche Designervariable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Verwendete Ressourcen bereinigen. + /// + /// True, wenn verwaltete Ressourcen gelöscht werden sollen; andernfalls False. + protected override void Dispose(bool disposing) { + if (disposing && (components != null)) { + components.Dispose(); + } + base.Dispose(disposing); + } + + /// + /// Erforderliche Methode für die Designerunterstützung. + /// Der Inhalt der Methode darf nicht mit dem Code-Editor geändert werden. + /// + private void InitializeComponent() { + this.components = new System.ComponentModel.Container(); + this.button1 = new System.Windows.Forms.Button(); + this.richTextBoxMessage = new System.Windows.Forms.RichTextBox(); + this.FlexibleMessageBoxFormBindingSource = new System.Windows.Forms.BindingSource(this.components); + this.panel1 = new System.Windows.Forms.Panel(); + this.pictureBoxForIcon = new System.Windows.Forms.PictureBox(); + this.button2 = new System.Windows.Forms.Button(); + this.button3 = new System.Windows.Forms.Button(); + ((System.ComponentModel.ISupportInitialize)(this.FlexibleMessageBoxFormBindingSource)).BeginInit(); + this.panel1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBoxForIcon)).BeginInit(); + this.SuspendLayout(); + // + // button1 + // + this.button1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.button1.AutoSize = true; + this.button1.DialogResult = System.Windows.Forms.DialogResult.OK; + this.button1.Location = new System.Drawing.Point(11, 67); + this.button1.MinimumSize = new System.Drawing.Size(0, 24); + this.button1.Name = "button1"; + this.button1.Size = new System.Drawing.Size(75, 24); + this.button1.TabIndex = 2; + this.button1.Text = "OK"; + this.button1.UseVisualStyleBackColor = true; + this.button1.Visible = false; + // + // richTextBoxMessage + // + this.richTextBoxMessage.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.richTextBoxMessage.BackColor = System.Drawing.Color.White; + this.richTextBoxMessage.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.richTextBoxMessage.DataBindings.Add(new System.Windows.Forms.Binding("Text", this.FlexibleMessageBoxFormBindingSource, "MessageText", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); + this.richTextBoxMessage.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.richTextBoxMessage.Location = new System.Drawing.Point(50, 26); + this.richTextBoxMessage.Margin = new System.Windows.Forms.Padding(0); + this.richTextBoxMessage.Name = "richTextBoxMessage"; + this.richTextBoxMessage.ReadOnly = true; + this.richTextBoxMessage.ScrollBars = System.Windows.Forms.RichTextBoxScrollBars.Vertical; + this.richTextBoxMessage.Size = new System.Drawing.Size(200, 20); + this.richTextBoxMessage.TabIndex = 0; + this.richTextBoxMessage.TabStop = false; + this.richTextBoxMessage.Text = ""; + this.richTextBoxMessage.LinkClicked += new System.Windows.Forms.LinkClickedEventHandler(this.richTextBoxMessage_LinkClicked); + // + // panel1 + // + this.panel1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.panel1.BackColor = System.Drawing.Color.White; + this.panel1.Controls.Add(this.pictureBoxForIcon); + this.panel1.Controls.Add(this.richTextBoxMessage); + this.panel1.Location = new System.Drawing.Point(-3, -4); + this.panel1.Name = "panel1"; + this.panel1.Size = new System.Drawing.Size(268, 59); + this.panel1.TabIndex = 1; + // + // pictureBoxForIcon + // + this.pictureBoxForIcon.BackColor = System.Drawing.Color.Transparent; + this.pictureBoxForIcon.Location = new System.Drawing.Point(15, 19); + this.pictureBoxForIcon.Name = "pictureBoxForIcon"; + this.pictureBoxForIcon.Size = new System.Drawing.Size(32, 32); + this.pictureBoxForIcon.TabIndex = 8; + this.pictureBoxForIcon.TabStop = false; + // + // button2 + // + this.button2.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.button2.DialogResult = System.Windows.Forms.DialogResult.OK; + this.button2.Location = new System.Drawing.Point(92, 67); + this.button2.MinimumSize = new System.Drawing.Size(0, 24); + this.button2.Name = "button2"; + this.button2.Size = new System.Drawing.Size(75, 24); + this.button2.TabIndex = 3; + this.button2.Text = "OK"; + this.button2.UseVisualStyleBackColor = true; + this.button2.Visible = false; + // + // button3 + // + this.button3.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.button3.AutoSize = true; + this.button3.DialogResult = System.Windows.Forms.DialogResult.OK; + this.button3.Location = new System.Drawing.Point(173, 67); + this.button3.MinimumSize = new System.Drawing.Size(0, 24); + this.button3.Name = "button3"; + this.button3.Size = new System.Drawing.Size(75, 24); + this.button3.TabIndex = 0; + this.button3.Text = "OK"; + this.button3.UseVisualStyleBackColor = true; + this.button3.Visible = false; + // + // FlexibleMessageBoxForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(260, 102); + this.Controls.Add(this.button3); + this.Controls.Add(this.button2); + this.Controls.Add(this.panel1); + this.Controls.Add(this.button1); + this.DataBindings.Add(new System.Windows.Forms.Binding("Text", this.FlexibleMessageBoxFormBindingSource, "CaptionText", true)); + this.MaximizeBox = false; + this.MinimizeBox = false; + this.MinimumSize = new System.Drawing.Size(276, 140); + this.Name = "FlexibleMessageBoxForm"; + this.ShowIcon = false; + this.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Show; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Text = ""; + this.Shown += new System.EventHandler(this.FlexibleMessageBoxForm_Shown); + ((System.ComponentModel.ISupportInitialize)(this.FlexibleMessageBoxFormBindingSource)).EndInit(); + this.panel1.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.pictureBoxForIcon)).EndInit(); + this.ResumeLayout(false); + this.PerformLayout(); + } + + private System.Windows.Forms.Button button1; + private System.Windows.Forms.BindingSource FlexibleMessageBoxFormBindingSource; + private System.Windows.Forms.RichTextBox richTextBoxMessage; + private System.Windows.Forms.Panel panel1; + private System.Windows.Forms.PictureBox pictureBoxForIcon; + private System.Windows.Forms.Button button2; + private System.Windows.Forms.Button button3; + + #endregion + + #region Private constants + + //These separators are used for the "copy to clipboard" standard operation, triggered by Ctrl + C (behavior and clipboard format is like in a standard MessageBox) + private static readonly String STANDARD_MESSAGEBOX_SEPARATOR_LINES = "---------------------------\n"; + private static readonly String STANDARD_MESSAGEBOX_SEPARATOR_SPACES = " "; + + //These are the possible buttons (in a standard MessageBox) + private enum ButtonID { OK = 0, CANCEL, YES, NO, ABORT, RETRY, IGNORE }; + + //These are the buttons texts for different languages. + //If you want to add a new language, add it here and in the GetButtonText-Function + private enum TwoLetterISOLanguageID { en, de, es, it }; + private static readonly String[] BUTTON_TEXTS_ENGLISH_EN = { "OK", "Cancel", "&Yes", "&No", "&Abort", "&Retry", "&Ignore" }; //Note: This is also the fallback language + private static readonly String[] BUTTON_TEXTS_GERMAN_DE = { "OK", "Abbrechen", "&Ja", "&Nein", "&Abbrechen", "&Wiederholen", "&Ignorieren" }; + private static readonly String[] BUTTON_TEXTS_SPANISH_ES = { "Aceptar", "Cancelar", "&Sí", "&No", "&Abortar", "&Reintentar", "&Ignorar" }; + private static readonly String[] BUTTON_TEXTS_ITALIAN_IT = { "OK", "Annulla", "&Sì", "&No", "&Interrompi", "&Riprova", "&Ignora" }; + + #endregion + + #region Private members + + private MessageBoxDefaultButton defaultButton; + private int visibleButtonsCount; + private TwoLetterISOLanguageID languageID = TwoLetterISOLanguageID.en; + + #endregion + + #region Private constructor + + /// + /// Initializes a new instance of the class. + /// + private FlexibleMessageBoxForm() { + InitializeComponent(); + + //Try to evaluate the language. If this fails, the fallback language English will be used + //Enum.TryParse(CultureInfo.CurrentUICulture.TwoLetterISOLanguageName, out this.languageID); + + //this.languageID = (TwoLetterISOLanguageID)Enum.Parse(typeof(CultureInfo), CultureInfo.CurrentUICulture.TwoLetterISOLanguageName); + + this.KeyPreview = true; + this.KeyUp += FlexibleMessageBoxForm_KeyUp; + } + + #endregion + + #region Private helper functions + + /// + /// Gets the string rows. + /// + /// The message. + /// The string rows as 1-dimensional array + private static string[] GetStringRows(string message) { + if (string.IsNullOrEmpty(message)) return null; + + var messageRows = message.Split(new char[] { '\n' }, StringSplitOptions.None); + return messageRows; + } + + /// + /// Gets the button text for the CurrentUICulture language. + /// Note: The fallback language is English + /// + /// The ID of the button. + /// The button text + private string GetButtonText(ButtonID buttonID) { + var buttonTextArrayIndex = Convert.ToInt32(buttonID); + + switch (this.languageID) { + case TwoLetterISOLanguageID.de: return BUTTON_TEXTS_GERMAN_DE[buttonTextArrayIndex]; + case TwoLetterISOLanguageID.es: return BUTTON_TEXTS_SPANISH_ES[buttonTextArrayIndex]; + case TwoLetterISOLanguageID.it: return BUTTON_TEXTS_ITALIAN_IT[buttonTextArrayIndex]; + + default: return BUTTON_TEXTS_ENGLISH_EN[buttonTextArrayIndex]; + } + } + + /// + /// Ensure the given working area factor in the range of 0.2 - 1.0 where: + /// + /// 0.2 means: 20 percent of the working area height or width. + /// 1.0 means: 100 percent of the working area height or width. + /// + /// The given working area factor. + /// The corrected given working area factor. + private static double GetCorrectedWorkingAreaFactor(double workingAreaFactor) { + const double MIN_FACTOR = 0.2; + const double MAX_FACTOR = 1.0; + + if (workingAreaFactor < MIN_FACTOR) return MIN_FACTOR; + if (workingAreaFactor > MAX_FACTOR) return MAX_FACTOR; + + return workingAreaFactor; + } + + /// + /// Set the dialogs start position when given. + /// Otherwise center the dialog on the current screen. + /// + /// The FlexibleMessageBox dialog. + /// The owner. + private static void SetDialogStartPosition(FlexibleMessageBoxForm flexibleMessageBoxForm, IWin32Window owner) { + //If no owner given: Center on current screen + if (owner == null) { + var screen = Screen.FromPoint(Cursor.Position); + flexibleMessageBoxForm.StartPosition = FormStartPosition.Manual; + flexibleMessageBoxForm.Left = screen.Bounds.Left + screen.Bounds.Width / 2 - flexibleMessageBoxForm.Width / 2; + flexibleMessageBoxForm.Top = screen.Bounds.Top + screen.Bounds.Height / 2 - flexibleMessageBoxForm.Height / 2; + } + } + + /// + /// Calculate the dialogs start size (Try to auto-size width to show longest text row). + /// Also set the maximum dialog size. + /// + /// The FlexibleMessageBox dialog. + /// The text (the longest text row is used to calculate the dialog width). + /// The caption (this can also affect the dialog width). + private static void SetDialogSizes(FlexibleMessageBoxForm flexibleMessageBoxForm, string text, string caption) { + //First set the bounds for the maximum dialog size + flexibleMessageBoxForm.MaximumSize = new Size(Convert.ToInt32(SystemInformation.WorkingArea.Width * FlexibleMessageBoxForm.GetCorrectedWorkingAreaFactor(MAX_WIDTH_FACTOR)), + Convert.ToInt32(SystemInformation.WorkingArea.Height * FlexibleMessageBoxForm.GetCorrectedWorkingAreaFactor(MAX_HEIGHT_FACTOR))); + + //Get rows. Exit if there are no rows to render... + var stringRows = GetStringRows(text); + if (stringRows == null) return; + + //Calculate whole text height + var textHeight = TextRenderer.MeasureText(text, FONT).Height; + + //Calculate width for longest text line + const int SCROLLBAR_WIDTH_OFFSET = 15; + + var longestTextRowWidth = 0; + foreach (string textForRow in stringRows) { + int c = TextRenderer.MeasureText(textForRow, FONT).Width; + if (c > longestTextRowWidth) + longestTextRowWidth = c; + } + //stringRows.Max(textForRow => TextRenderer.MeasureText(textForRow, FONT).Width); + var captionWidth = TextRenderer.MeasureText(caption, SystemFonts.CaptionFont).Width; + var textWidth = Math.Max(longestTextRowWidth + SCROLLBAR_WIDTH_OFFSET, captionWidth); + + //Calculate margins + var marginWidth = flexibleMessageBoxForm.Width - flexibleMessageBoxForm.richTextBoxMessage.Width; + var marginHeight = flexibleMessageBoxForm.Height - flexibleMessageBoxForm.richTextBoxMessage.Height; + + //Set calculated dialog size (if the calculated values exceed the maximums, they were cut by windows forms automatically) + flexibleMessageBoxForm.Size = new Size(textWidth + marginWidth, + textHeight + marginHeight); + } + + /// + /// Set the dialogs icon. + /// When no icon is used: Correct placement and width of rich text box. + /// + /// The FlexibleMessageBox dialog. + /// The MessageBoxIcon. + private static void SetDialogIcon(FlexibleMessageBoxForm flexibleMessageBoxForm, MessageBoxIcon icon) { + switch (icon) { + case MessageBoxIcon.Information: + flexibleMessageBoxForm.pictureBoxForIcon.Image = SystemIcons.Information.ToBitmap(); + break; + case MessageBoxIcon.Warning: + flexibleMessageBoxForm.pictureBoxForIcon.Image = SystemIcons.Warning.ToBitmap(); + break; + case MessageBoxIcon.Error: + flexibleMessageBoxForm.pictureBoxForIcon.Image = SystemIcons.Error.ToBitmap(); + break; + case MessageBoxIcon.Question: + flexibleMessageBoxForm.pictureBoxForIcon.Image = SystemIcons.Question.ToBitmap(); + break; + default: + //When no icon is used: Correct placement and width of rich text box. + flexibleMessageBoxForm.pictureBoxForIcon.Visible = false; + flexibleMessageBoxForm.richTextBoxMessage.Left -= flexibleMessageBoxForm.pictureBoxForIcon.Width; + flexibleMessageBoxForm.richTextBoxMessage.Width += flexibleMessageBoxForm.pictureBoxForIcon.Width; + break; + } + } + + /// + /// Set dialog buttons visibilities and texts. + /// Also set a default button. + /// + /// The FlexibleMessageBox dialog. + /// The buttons. + /// The default button. + private static void SetDialogButtons(FlexibleMessageBoxForm flexibleMessageBoxForm, MessageBoxButtons buttons, MessageBoxDefaultButton defaultButton) { + //Set the buttons visibilities and texts + switch (buttons) { + case MessageBoxButtons.AbortRetryIgnore: + flexibleMessageBoxForm.visibleButtonsCount = 3; + + flexibleMessageBoxForm.button1.Visible = true; + flexibleMessageBoxForm.button1.Text = flexibleMessageBoxForm.GetButtonText(ButtonID.ABORT); + flexibleMessageBoxForm.button1.DialogResult = DialogResult.Abort; + + flexibleMessageBoxForm.button2.Visible = true; + flexibleMessageBoxForm.button2.Text = flexibleMessageBoxForm.GetButtonText(ButtonID.RETRY); + flexibleMessageBoxForm.button2.DialogResult = DialogResult.Retry; + + flexibleMessageBoxForm.button3.Visible = true; + flexibleMessageBoxForm.button3.Text = flexibleMessageBoxForm.GetButtonText(ButtonID.IGNORE); + flexibleMessageBoxForm.button3.DialogResult = DialogResult.Ignore; + + flexibleMessageBoxForm.ControlBox = false; + break; + + case MessageBoxButtons.OKCancel: + flexibleMessageBoxForm.visibleButtonsCount = 2; + + flexibleMessageBoxForm.button2.Visible = true; + flexibleMessageBoxForm.button2.Text = flexibleMessageBoxForm.GetButtonText(ButtonID.OK); + flexibleMessageBoxForm.button2.DialogResult = DialogResult.OK; + + flexibleMessageBoxForm.button3.Visible = true; + flexibleMessageBoxForm.button3.Text = flexibleMessageBoxForm.GetButtonText(ButtonID.CANCEL); + flexibleMessageBoxForm.button3.DialogResult = DialogResult.Cancel; + + flexibleMessageBoxForm.CancelButton = flexibleMessageBoxForm.button3; + break; + + case MessageBoxButtons.RetryCancel: + flexibleMessageBoxForm.visibleButtonsCount = 2; + + flexibleMessageBoxForm.button2.Visible = true; + flexibleMessageBoxForm.button2.Text = flexibleMessageBoxForm.GetButtonText(ButtonID.RETRY); + flexibleMessageBoxForm.button2.DialogResult = DialogResult.Retry; + + flexibleMessageBoxForm.button3.Visible = true; + flexibleMessageBoxForm.button3.Text = flexibleMessageBoxForm.GetButtonText(ButtonID.CANCEL); + flexibleMessageBoxForm.button3.DialogResult = DialogResult.Cancel; + + flexibleMessageBoxForm.CancelButton = flexibleMessageBoxForm.button3; + break; + + case MessageBoxButtons.YesNo: + flexibleMessageBoxForm.visibleButtonsCount = 2; + + flexibleMessageBoxForm.button2.Visible = true; + flexibleMessageBoxForm.button2.Text = flexibleMessageBoxForm.GetButtonText(ButtonID.YES); + flexibleMessageBoxForm.button2.DialogResult = DialogResult.Yes; + + flexibleMessageBoxForm.button3.Visible = true; + flexibleMessageBoxForm.button3.Text = flexibleMessageBoxForm.GetButtonText(ButtonID.NO); + flexibleMessageBoxForm.button3.DialogResult = DialogResult.No; + + flexibleMessageBoxForm.ControlBox = false; + break; + + case MessageBoxButtons.YesNoCancel: + flexibleMessageBoxForm.visibleButtonsCount = 3; + + flexibleMessageBoxForm.button1.Visible = true; + flexibleMessageBoxForm.button1.Text = flexibleMessageBoxForm.GetButtonText(ButtonID.YES); + flexibleMessageBoxForm.button1.DialogResult = DialogResult.Yes; + + flexibleMessageBoxForm.button2.Visible = true; + flexibleMessageBoxForm.button2.Text = flexibleMessageBoxForm.GetButtonText(ButtonID.NO); + flexibleMessageBoxForm.button2.DialogResult = DialogResult.No; + + flexibleMessageBoxForm.button3.Visible = true; + flexibleMessageBoxForm.button3.Text = flexibleMessageBoxForm.GetButtonText(ButtonID.CANCEL); + flexibleMessageBoxForm.button3.DialogResult = DialogResult.Cancel; + + flexibleMessageBoxForm.CancelButton = flexibleMessageBoxForm.button3; + break; + + case MessageBoxButtons.OK: + default: + flexibleMessageBoxForm.visibleButtonsCount = 1; + flexibleMessageBoxForm.button3.Visible = true; + flexibleMessageBoxForm.button3.Text = flexibleMessageBoxForm.GetButtonText(ButtonID.OK); + flexibleMessageBoxForm.button3.DialogResult = DialogResult.OK; + + flexibleMessageBoxForm.CancelButton = flexibleMessageBoxForm.button3; + break; + } + + //Set default button (used in FlexibleMessageBoxForm_Shown) + flexibleMessageBoxForm.defaultButton = defaultButton; + } + + #endregion + + #region Private event handlers + + /// + /// Handles the Shown event of the FlexibleMessageBoxForm control. + /// + /// The source of the event. + /// The instance containing the event data. + private void FlexibleMessageBoxForm_Shown(object sender, EventArgs e) { + int buttonIndexToFocus = 1; + Button buttonToFocus; + + //Set the default button... + switch (this.defaultButton) { + case MessageBoxDefaultButton.Button1: + default: + buttonIndexToFocus = 1; + break; + case MessageBoxDefaultButton.Button2: + buttonIndexToFocus = 2; + break; + case MessageBoxDefaultButton.Button3: + buttonIndexToFocus = 3; + break; + } + + if (buttonIndexToFocus > this.visibleButtonsCount) buttonIndexToFocus = this.visibleButtonsCount; + + if (buttonIndexToFocus == 3) { + buttonToFocus = this.button3; + } else if (buttonIndexToFocus == 2) { + buttonToFocus = this.button2; + } else { + buttonToFocus = this.button1; + } + + buttonToFocus.Focus(); + } + + /// + /// Handles the LinkClicked event of the richTextBoxMessage control. + /// + /// The source of the event. + /// The instance containing the event data. + private void richTextBoxMessage_LinkClicked(object sender, LinkClickedEventArgs e) { + try { + Cursor.Current = Cursors.WaitCursor; + Process.Start(e.LinkText); + } + catch (Exception) { + //Let the caller of FlexibleMessageBoxForm decide what to do with this exception... + throw; + } + finally { + Cursor.Current = Cursors.Default; + } + + } + + /// + /// Handles the KeyUp event of the richTextBoxMessage control. + /// + /// The source of the event. + /// The instance containing the event data. + void FlexibleMessageBoxForm_KeyUp(object sender, KeyEventArgs e) { + //Handle standard key strikes for clipboard copy: "Ctrl + C" and "Ctrl + Insert" + if (e.Control && (e.KeyCode == Keys.C || e.KeyCode == Keys.Insert)) { + var buttonsTextLine = (this.button1.Visible ? this.button1.Text + STANDARD_MESSAGEBOX_SEPARATOR_SPACES : string.Empty) + + (this.button2.Visible ? this.button2.Text + STANDARD_MESSAGEBOX_SEPARATOR_SPACES : string.Empty) + + (this.button3.Visible ? this.button3.Text + STANDARD_MESSAGEBOX_SEPARATOR_SPACES : string.Empty); + + //Build same clipboard text like the standard .Net MessageBox + var textForClipboard = STANDARD_MESSAGEBOX_SEPARATOR_LINES + + this.Text + Environment.NewLine + + STANDARD_MESSAGEBOX_SEPARATOR_LINES + + this.richTextBoxMessage.Text + Environment.NewLine + + STANDARD_MESSAGEBOX_SEPARATOR_LINES + + buttonsTextLine.Replace("&", string.Empty) + Environment.NewLine + + STANDARD_MESSAGEBOX_SEPARATOR_LINES; + + //Set text in clipboard + Clipboard.SetText(textForClipboard); + } + } + + #endregion + + #region Properties (only used for binding) + + /// + /// The text that is been used for the heading. + /// + public string CaptionText { get; set; } + + /// + /// The text that is been used in the FlexibleMessageBoxForm. + /// + public string MessageText { get; set; } + + #endregion + + #region Public show function + + /// + /// Shows the specified message box. + /// + /// The owner. + /// The text. + /// The caption. + /// The buttons. + /// The icon. + /// The default button. + /// The dialog result. + public static DialogResult Show(IWin32Window owner, string text, string caption, MessageBoxButtons buttons, MessageBoxIcon icon, MessageBoxDefaultButton defaultButton) { + //Create a new instance of the FlexibleMessageBox form + var flexibleMessageBoxForm = new FlexibleMessageBoxForm(); + flexibleMessageBoxForm.ShowInTaskbar = false; + + //Bind the caption and the message text + flexibleMessageBoxForm.CaptionText = caption; + flexibleMessageBoxForm.MessageText = text; + flexibleMessageBoxForm.FlexibleMessageBoxFormBindingSource.DataSource = flexibleMessageBoxForm; + + //Set the buttons visibilities and texts. Also set a default button. + SetDialogButtons(flexibleMessageBoxForm, buttons, defaultButton); + + //Set the dialogs icon. When no icon is used: Correct placement and width of rich text box. + SetDialogIcon(flexibleMessageBoxForm, icon); + + //Set the font for all controls + flexibleMessageBoxForm.Font = FONT; + flexibleMessageBoxForm.richTextBoxMessage.Font = FONT; + + //Calculate the dialogs start size (Try to auto-size width to show longest text row). Also set the maximum dialog size. + SetDialogSizes(flexibleMessageBoxForm, text, caption); + + //Set the dialogs start position when given. Otherwise center the dialog on the current screen. + SetDialogStartPosition(flexibleMessageBoxForm, owner); + + //Show the dialog + return flexibleMessageBoxForm.ShowDialog(owner); + } + + #endregion + } //class FlexibleMessageBoxForm + + #endregion + } +} diff --git a/client/DxPlay/InterceptKeys.cs b/client/DxPlay/InterceptKeys.cs new file mode 100644 index 00000000..ab633d1f --- /dev/null +++ b/client/DxPlay/InterceptKeys.cs @@ -0,0 +1,62 @@ +using System; +using System.Diagnostics; +using System.Windows.Forms; +using System.Runtime.InteropServices; + +namespace DxPlay { + class InterceptKeys { + private const int WH_KEYBOARD_LL = 13; + private const int WM_KEYDOWN = 0x0100; + private static LowLevelKeyboardProc _proc = HookCallback; + private static IntPtr _hookID = IntPtr.Zero; + + public static void Start() { + _hookID = SetHook(_proc); + } + public static void Stop() { + UnhookWindowsHookEx(_hookID); + } + + private static IntPtr SetHook(LowLevelKeyboardProc proc) { + using (Process curProcess = Process.GetCurrentProcess()) + using (ProcessModule curModule = curProcess.MainModule) { + return SetWindowsHookEx(WH_KEYBOARD_LL, proc, + GetModuleHandle(curModule.ModuleName), 0); + } + } + + public delegate bool GlobalKeyEventDelegate(Keys key); + + public static GlobalKeyEventDelegate GlobalKeyEvent { get; set; } + + private delegate IntPtr LowLevelKeyboardProc(int nCode, IntPtr wParam, IntPtr lParam); + + private static IntPtr HookCallback(int nCode, IntPtr wParam, IntPtr lParam) { + if (nCode >= 0 && wParam == (IntPtr)WM_KEYDOWN) { + int vkCode = Marshal.ReadInt32(lParam); + //Debug.WriteLine((Keys)vkCode); + //if (GlobalKeyEvent != null) { + // if (GlobalKeyEvent.Invoke((Keys)vkCode)) + // return (IntPtr)1; + //} + GlobalKeyEvent?.Invoke((Keys)vkCode); + + } + + return CallNextHookEx(_hookID, nCode, wParam, lParam); + } + + [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)] + private static extern IntPtr SetWindowsHookEx(int idHook, LowLevelKeyboardProc lpfn, IntPtr hMod, uint dwThreadId); + + [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)] + [return: MarshalAs(UnmanagedType.Bool)] + private static extern bool UnhookWindowsHookEx(IntPtr hhk); + + [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)] + private static extern IntPtr CallNextHookEx(IntPtr hhk, int nCode, IntPtr wParam, IntPtr lParam); + + [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)] + private static extern IntPtr GetModuleHandle(string lpModuleName); + } +} diff --git a/client/DxPlay/MediaDescription.cs b/client/DxPlay/MediaDescription.cs new file mode 100644 index 00000000..c83c295b --- /dev/null +++ b/client/DxPlay/MediaDescription.cs @@ -0,0 +1,110 @@ +using System; +using System.ComponentModel; +using System.Drawing; +using System.Windows.Forms; + +namespace DxPlay { + /// + /// This class is mainly a storage class. + /// Its primary purpose is to be used with a PropertyGrid. + /// + public class MediaDescription { + internal Timecode firstFrame; + internal Timecode duration; + internal float frameRate; + internal string fileName; + internal Guid audioSubType; + internal int channels; + internal float samplesPerSec; + internal int bitsPerSample; + internal TimeSpan audioLength; + internal Guid videoSubType; + internal Size resolution; + internal int bitsPerPixel; + internal string fourCC; + internal TimeSpan videoLength; + internal Bitmap snapshot; + internal string description; + + [Category("General"), ReadOnly(true), Description("Content description")] + public string Description { + get { return description; } + } + + [Category("General"), ReadOnly(true), Description("The file name with its path")] + public string FileName { + get { return fileName; } + } + + [Category("Audio"), ReadOnly(true), Description("Audio subtype GUID")] + public Guid AudioSubType { + get { return audioSubType; } + } + + [Category("Audio"), ReadOnly(true), Description("Audio channel count")] + public int Channels { + get { return channels; } + } + + [Category("Audio"), ReadOnly(true), Description("Samples per second in kHz")] + public float SamplesPerSec { + get { return samplesPerSec; } + } + + [Category("Audio"), ReadOnly(true), Description("How many bits are used per samples")] + public int BitsPerSample { + get { return bitsPerSample; } + } + + [Category("Audio"), ReadOnly(true), Description("The audio stream length")] + public TimeSpan AudioLength { + get { return audioLength; } + } + + [Category("Video"), ReadOnly(true), Description("Video subtype GUID")] + public Guid VideoSubType { + get { return videoSubType; } + } + + [Category("Video"), ReadOnly(true), Description("Specifies the width and height of the bitmap, in pixels")] + public Size Resolution { + get { return resolution; } + } + + [Category("Video"), ReadOnly(true), Description("Specifies the number of bits per pixel (bpp)")] + public int BitsPerPixel { + get { return bitsPerPixel; } + } + + [Category("Video"), ReadOnly(true), Description("The Video's FOURCC code")] + public string FourCC { + get { return fourCC; } + } + + [Category("Video"), ReadOnly(true), Description("The video stream length")] + public TimeSpan VideoLength { + get { return videoLength; } + } + + [Category("Video"), ReadOnly(true), Description("A snapshot of the video stream at half its duration")] + public Bitmap Snapshot { + get { return snapshot; } + } + + [Category("Video"), ReadOnly(true), Description("Video frame rate (FPS)")] + public float FrameRate { + get { return frameRate; } + } + + [Category("Video"), ReadOnly(true), Description("Video duration in Timecode")] + public Timecode Duration { + get { return duration; } + } + + [Category("Video"), ReadOnly(true), Description("First frame Timecode")] + public Timecode FirstFrame { + get { return firstFrame; } + } + } + +} diff --git a/client/DxPlay/MediaDetector.cs b/client/DxPlay/MediaDetector.cs new file mode 100644 index 00000000..7be6354b --- /dev/null +++ b/client/DxPlay/MediaDetector.cs @@ -0,0 +1,177 @@ +using System; +using System.Drawing; +using System.Drawing.Imaging; +using System.Runtime.InteropServices; +using System.Text; +using System.Windows.Forms; + +using DirectShowLib; +using DirectShowLib.DES; +using MediaInfoLib; +using System.Diagnostics; +using System.Globalization; + +namespace DxPlay { + /// + /// A wrapper class around the DirectShow's MediaDet object. + /// + public sealed class MediaDetector { + + private static CultureInfo USCU = new CultureInfo("en-US"); + + public static MediaDescription GetDescription(string fileName) { + MediaDescription mediaDesc = new MediaDescription(); + mediaDesc.fileName = fileName; + + MediaInfo MI = new MediaInfo(); + MI.Open(fileName); + Debug.WriteLine(MI.Inform()); + try { + setResolution(mediaDesc, MI); + mediaDesc.frameRate = float.Parse(MI.Get(StreamKind.Video, 0, "FrameRate"), USCU.NumberFormat); + mediaDesc.duration = new Timecode(MI.Get(StreamKind.Video, 0, "Duration/String4"), mediaDesc.FrameRate); + Debug.WriteLine("Duration is " + mediaDesc.Duration.ToString()); + mediaDesc.description = MI.Inform(); + tryAssignTimeCode(mediaDesc, MI, StreamKind.Video, 0); + int otherStreams = MI.Count_Get(StreamKind.Other); + while (mediaDesc.firstFrame.StartsAtZeroFrame() && otherStreams-- > 0) + tryAssignTimeCode(mediaDesc, MI, StreamKind.Other, 0); + } + finally { + MI.Close(); + } + + return mediaDesc; + } + + private static void tryAssignTimeCode(MediaDescription mediaDesc, MediaInfo MI, StreamKind streamKind, int track) { + //bool valid = bool.Parse(MI.Get(StreamKind.Other, track, "TimeCode_Striped/String")); + string tc = MI.Get(streamKind, track, "TimeCode_FirstFrame"); + string TimeCode_Settings = MI.Get(streamKind, track, "TimeCode_Settings"); + string TimeCode_Source = MI.Get(streamKind, track, "TimeCode_Source"); + mediaDesc.firstFrame = new Timecode(tc, mediaDesc.FrameRate); + Debug.WriteLine(String.Format("Using TC {0} from {1}-{2} track.", tc, TimeCode_Settings, TimeCode_Source)); + } + + private static void setResolution(MediaDescription mediaDesc, MediaInfo MI) { + int videoStreams = MI.Count_Get(StreamKind.Video); + if (videoStreams != 1) + throw new Exception("Multiple video streams found!"); + int Width = int.Parse(MI.Get(StreamKind.Video, 0, "Width")); + int Height = int.Parse(MI.Get(StreamKind.Video, 0, "Height")); + mediaDesc.resolution = new Size(Width, Height); + } + + private static void UpdateAudioPart(IMediaDet mediaDet, MediaDescription mediaDesc) { + int hr = 0; + AMMediaType mediaType = new AMMediaType(); + + hr = mediaDet.get_StreamMediaType(mediaType); + DsError.ThrowExceptionForHR(hr); + + mediaDesc.audioSubType = mediaType.subType; + + double streamLength; + hr = mediaDet.get_StreamLength(out streamLength); + DsError.ThrowExceptionForHR(hr); + + mediaDesc.audioLength = TimeSpan.FromSeconds(streamLength); + + if (mediaType.formatType == FormatType.WaveEx) { + WaveFormatEx waveFormatEx = (WaveFormatEx)Marshal.PtrToStructure(mediaType.formatPtr, typeof(WaveFormatEx)); + mediaDesc.channels = waveFormatEx.nChannels; + mediaDesc.samplesPerSec = ((float)waveFormatEx.nSamplesPerSec) / 1000; + mediaDesc.bitsPerSample = waveFormatEx.wBitsPerSample; + } + } + + private static void UpdateVideoInfoPart(string fileName, int streamNumber) { + } + + private static void UpdateVideoPart(IMediaDet mediaDet, MediaDescription mediaDesc) { + int hr = 0; + AMMediaType mediaType = new AMMediaType(); + + hr = mediaDet.get_StreamMediaType(mediaType); + DsError.ThrowExceptionForHR(hr); + + mediaDesc.videoSubType = mediaType.subType; + + double streamLength; + hr = mediaDet.get_StreamLength(out streamLength); + DsError.ThrowExceptionForHR(hr); + + mediaDesc.videoLength = TimeSpan.FromSeconds(streamLength); + + if (mediaType.formatType == FormatType.VideoInfo) { + VideoInfoHeader videoHeader = (VideoInfoHeader)Marshal.PtrToStructure(mediaType.formatPtr, typeof(VideoInfoHeader)); + + mediaDesc.resolution = new Size(videoHeader.BmiHeader.Width, videoHeader.BmiHeader.Height); + mediaDesc.bitsPerPixel = videoHeader.BmiHeader.BitCount; + mediaDesc.fourCC = FourCCToString(videoHeader.BmiHeader.Compression); + } + + + + } + + private static string FourCCToString(int fourcc) { + byte[] bytes = new byte[4]; + + bytes[0] = (byte)(fourcc & 0x000000ff); fourcc = fourcc >> 8; + bytes[1] = (byte)(fourcc & 0x000000ff); fourcc = fourcc >> 8; + bytes[2] = (byte)(fourcc & 0x000000ff); fourcc = fourcc >> 8; + bytes[3] = (byte)(fourcc & 0x000000ff); + + return Encoding.ASCII.GetString(bytes); + } + + private static Bitmap GetSnapshot(IMediaDet mediaDet, int width, int height, double position) { + int hr = 0; + Bitmap bitmap = null; + int bufferSize = 0; + IntPtr buffer = IntPtr.Zero; + + try { + hr = mediaDet.GetBitmapBits(position, out bufferSize, IntPtr.Zero, width, height); + if (hr == 0) { + buffer = Marshal.AllocCoTaskMem(bufferSize); + hr = mediaDet.GetBitmapBits(position, out bufferSize, buffer, width, height); + + BitmapInfoHeader bitmapHeader = (BitmapInfoHeader)Marshal.PtrToStructure(buffer, typeof(BitmapInfoHeader)); + IntPtr bitmapData; + + if (IntPtr.Size == 4) + bitmapData = new IntPtr(buffer.ToInt32() + bitmapHeader.Size); + else + bitmapData = new IntPtr(buffer.ToInt64() + bitmapHeader.Size); + + bitmap = new Bitmap(bitmapHeader.Width, bitmapHeader.Height, PixelFormat.Format24bppRgb); + BitmapData bmpData = bitmap.LockBits(new Rectangle(0, 0, bitmapHeader.Width, bitmapHeader.Height), ImageLockMode.WriteOnly, PixelFormat.Format24bppRgb); + + /* + for (int i = 0; i < width * height * 3 ; i++) + { + byte b = Marshal.ReadByte(bitmapData, i); + Marshal.WriteByte(bmpData.Scan0, i, b); + } + */ + + CopyMemory(bmpData.Scan0, bitmapData, width * height * 3); + bitmap.UnlockBits(bmpData); + + bitmap.RotateFlip(RotateFlipType.Rotate180FlipX); + } + } + finally { + if (buffer != IntPtr.Zero) + Marshal.FreeCoTaskMem(buffer); + } + return bitmap; + } + + [DllImport("kernel32.dll", EntryPoint = "RtlMoveMemory")] + private static extern void CopyMemory(IntPtr Destination, IntPtr Source, int Length); + + } +} diff --git a/client/DxPlay/MediaInfo.dll b/client/DxPlay/MediaInfo.dll new file mode 100644 index 00000000..d23d6d49 Binary files /dev/null and b/client/DxPlay/MediaInfo.dll differ diff --git a/client/DxPlay/MediaInfoDLL.cs b/client/DxPlay/MediaInfoDLL.cs new file mode 100644 index 00000000..431e077e --- /dev/null +++ b/client/DxPlay/MediaInfoDLL.cs @@ -0,0 +1,294 @@ +/* Copyright (c) MediaArea.net SARL. All Rights Reserved. + * + * Use of this source code is governed by a BSD-style license that can + * be found in the License.html file in the root of the source tree. + */ + +//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +// +// Microsoft Visual C# wrapper for MediaInfo Library +// See MediaInfo.h for help +// +// To make it working, you must put MediaInfo.Dll +// in the executable folder +// +//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +using System; +using System.Runtime.InteropServices; + +#pragma warning disable 1591 // Disable XML documentation warnings + +namespace MediaInfoLib +{ + public enum StreamKind + { + General, + Video, + Audio, + Text, + Other, + Image, + Menu, + } + + public enum InfoKind + { + Name, + Text, + Measure, + Options, + NameText, + MeasureText, + Info, + HowTo + } + + public enum InfoOptions + { + ShowInInform, + Support, + ShowInSupported, + TypeOfValue + } + + public enum InfoFileOptions + { + FileOption_Nothing = 0x00, + FileOption_NoRecursive = 0x01, + FileOption_CloseAll = 0x02, + FileOption_Max = 0x04 + }; + + public enum Status + { + None = 0x00, + Accepted = 0x01, + Filled = 0x02, + Updated = 0x04, + Finalized = 0x08, + } + + public class MediaInfo + { + //Import of DLL functions. DO NOT USE until you know what you do (MediaInfo DLL do NOT use CoTaskMemAlloc to allocate memory) + [DllImport("MediaInfo.dll")] + private static extern IntPtr MediaInfo_New(); + [DllImport("MediaInfo.dll")] + private static extern void MediaInfo_Delete(IntPtr Handle); + [DllImport("MediaInfo.dll")] + private static extern IntPtr MediaInfo_Open(IntPtr Handle, [MarshalAs(UnmanagedType.LPWStr)] string FileName); + [DllImport("MediaInfo.dll")] + private static extern IntPtr MediaInfoA_Open(IntPtr Handle, IntPtr FileName); + [DllImport("MediaInfo.dll")] + private static extern IntPtr MediaInfo_Open_Buffer_Init(IntPtr Handle, Int64 File_Size, Int64 File_Offset); + [DllImport("MediaInfo.dll")] + private static extern IntPtr MediaInfoA_Open(IntPtr Handle, Int64 File_Size, Int64 File_Offset); + [DllImport("MediaInfo.dll")] + private static extern IntPtr MediaInfo_Open_Buffer_Continue(IntPtr Handle, IntPtr Buffer, IntPtr Buffer_Size); + [DllImport("MediaInfo.dll")] + private static extern IntPtr MediaInfoA_Open_Buffer_Continue(IntPtr Handle, Int64 File_Size, byte[] Buffer, IntPtr Buffer_Size); + [DllImport("MediaInfo.dll")] + private static extern Int64 MediaInfo_Open_Buffer_Continue_GoTo_Get(IntPtr Handle); + [DllImport("MediaInfo.dll")] + private static extern Int64 MediaInfoA_Open_Buffer_Continue_GoTo_Get(IntPtr Handle); + [DllImport("MediaInfo.dll")] + private static extern IntPtr MediaInfo_Open_Buffer_Finalize(IntPtr Handle); + [DllImport("MediaInfo.dll")] + private static extern IntPtr MediaInfoA_Open_Buffer_Finalize(IntPtr Handle); + [DllImport("MediaInfo.dll")] + private static extern void MediaInfo_Close(IntPtr Handle); + [DllImport("MediaInfo.dll")] + private static extern IntPtr MediaInfo_Inform(IntPtr Handle, IntPtr Reserved); + [DllImport("MediaInfo.dll")] + private static extern IntPtr MediaInfoA_Inform(IntPtr Handle, IntPtr Reserved); + [DllImport("MediaInfo.dll")] + private static extern IntPtr MediaInfo_GetI(IntPtr Handle, IntPtr StreamKind, IntPtr StreamNumber, IntPtr Parameter, IntPtr KindOfInfo); + [DllImport("MediaInfo.dll")] + private static extern IntPtr MediaInfoA_GetI(IntPtr Handle, IntPtr StreamKind, IntPtr StreamNumber, IntPtr Parameter, IntPtr KindOfInfo); + [DllImport("MediaInfo.dll")] + private static extern IntPtr MediaInfo_Get(IntPtr Handle, IntPtr StreamKind, IntPtr StreamNumber, [MarshalAs(UnmanagedType.LPWStr)] string Parameter, IntPtr KindOfInfo, IntPtr KindOfSearch); + [DllImport("MediaInfo.dll")] + private static extern IntPtr MediaInfoA_Get(IntPtr Handle, IntPtr StreamKind, IntPtr StreamNumber, IntPtr Parameter, IntPtr KindOfInfo, IntPtr KindOfSearch); + [DllImport("MediaInfo.dll")] + private static extern IntPtr MediaInfo_Option(IntPtr Handle, [MarshalAs(UnmanagedType.LPWStr)] string Option, [MarshalAs(UnmanagedType.LPWStr)] string Value); + [DllImport("MediaInfo.dll")] + private static extern IntPtr MediaInfoA_Option(IntPtr Handle, IntPtr Option, IntPtr Value); + [DllImport("MediaInfo.dll")] + private static extern IntPtr MediaInfo_State_Get(IntPtr Handle); + [DllImport("MediaInfo.dll")] + private static extern IntPtr MediaInfo_Count_Get(IntPtr Handle, IntPtr StreamKind, IntPtr StreamNumber); + + //MediaInfo class + public MediaInfo() + { + try + { + Handle = MediaInfo_New(); + } + catch + { + Handle = (IntPtr)0; + } + if (Environment.OSVersion.ToString().IndexOf("Windows") == -1) + MustUseAnsi=true; + else + MustUseAnsi=false; + } + ~MediaInfo() { if (Handle == (IntPtr)0) return; MediaInfo_Delete(Handle); } + public int Open(String FileName) + { + if (Handle == (IntPtr)0) + return 0; + if (MustUseAnsi) + { + IntPtr FileName_Ptr = Marshal.StringToHGlobalAnsi(FileName); + int ToReturn = (int)MediaInfoA_Open(Handle, FileName_Ptr); + Marshal.FreeHGlobal(FileName_Ptr); + return ToReturn; + } + else + return (int)MediaInfo_Open(Handle, FileName); + } + public int Open_Buffer_Init(Int64 File_Size, Int64 File_Offset) + { + if (Handle == (IntPtr)0) return 0; return (int)MediaInfo_Open_Buffer_Init(Handle, File_Size, File_Offset); + } + public int Open_Buffer_Continue(IntPtr Buffer, IntPtr Buffer_Size) + { + if (Handle == (IntPtr)0) return 0; return (int)MediaInfo_Open_Buffer_Continue(Handle, Buffer, Buffer_Size); + } + public Int64 Open_Buffer_Continue_GoTo_Get() + { + if (Handle == (IntPtr)0) return 0; return (Int64)MediaInfo_Open_Buffer_Continue_GoTo_Get(Handle); + } + public int Open_Buffer_Finalize() + { + if (Handle == (IntPtr)0) return 0; return (int)MediaInfo_Open_Buffer_Finalize(Handle); + } + public void Close() { if (Handle == (IntPtr)0) return; MediaInfo_Close(Handle); } + public String Inform() + { + if (Handle == (IntPtr)0) + return "Unable to load MediaInfo library"; + if (MustUseAnsi) + return Marshal.PtrToStringAnsi(MediaInfoA_Inform(Handle, (IntPtr)0)); + else + return Marshal.PtrToStringUni(MediaInfo_Inform(Handle, (IntPtr)0)); + } + public String Get(StreamKind StreamKind, int StreamNumber, String Parameter, InfoKind KindOfInfo, InfoKind KindOfSearch) + { + if (Handle == (IntPtr)0) + return "Unable to load MediaInfo library"; + if (MustUseAnsi) + { + IntPtr Parameter_Ptr=Marshal.StringToHGlobalAnsi(Parameter); + String ToReturn=Marshal.PtrToStringAnsi(MediaInfoA_Get(Handle, (IntPtr)StreamKind, (IntPtr)StreamNumber, Parameter_Ptr, (IntPtr)KindOfInfo, (IntPtr)KindOfSearch)); + Marshal.FreeHGlobal(Parameter_Ptr); + return ToReturn; + } + else + return Marshal.PtrToStringUni(MediaInfo_Get(Handle, (IntPtr)StreamKind, (IntPtr)StreamNumber, Parameter, (IntPtr)KindOfInfo, (IntPtr)KindOfSearch)); + } + public String Get(StreamKind StreamKind, int StreamNumber, int Parameter, InfoKind KindOfInfo) + { + if (Handle == (IntPtr)0) + return "Unable to load MediaInfo library"; + if (MustUseAnsi) + return Marshal.PtrToStringAnsi(MediaInfoA_GetI(Handle, (IntPtr)StreamKind, (IntPtr)StreamNumber, (IntPtr)Parameter, (IntPtr)KindOfInfo)); + else + return Marshal.PtrToStringUni(MediaInfo_GetI(Handle, (IntPtr)StreamKind, (IntPtr)StreamNumber, (IntPtr)Parameter, (IntPtr)KindOfInfo)); + } + public String Option(String Option, String Value) + { + if (Handle == (IntPtr)0) + return "Unable to load MediaInfo library"; + if (MustUseAnsi) + { + IntPtr Option_Ptr=Marshal.StringToHGlobalAnsi(Option); + IntPtr Value_Ptr=Marshal.StringToHGlobalAnsi(Value); + String ToReturn=Marshal.PtrToStringAnsi(MediaInfoA_Option(Handle, Option_Ptr, Value_Ptr)); + Marshal.FreeHGlobal(Option_Ptr); + Marshal.FreeHGlobal(Value_Ptr); + return ToReturn; + } + else + return Marshal.PtrToStringUni(MediaInfo_Option(Handle, Option, Value)); + } + public int State_Get() { if (Handle == (IntPtr)0) return 0; return (int)MediaInfo_State_Get(Handle); } + public int Count_Get(StreamKind StreamKind, int StreamNumber) { if (Handle == (IntPtr)0) return 0; return (int)MediaInfo_Count_Get(Handle, (IntPtr)StreamKind, (IntPtr)StreamNumber); } + private IntPtr Handle; + private bool MustUseAnsi; + + //Default values, if you know how to set default values in C#, say me + public String Get(StreamKind StreamKind, int StreamNumber, String Parameter, InfoKind KindOfInfo) { return Get(StreamKind, StreamNumber, Parameter, KindOfInfo, InfoKind.Name); } + public String Get(StreamKind StreamKind, int StreamNumber, String Parameter) { return Get(StreamKind, StreamNumber, Parameter, InfoKind.Text, InfoKind.Name); } + public String Get(StreamKind StreamKind, int StreamNumber, int Parameter) { return Get(StreamKind, StreamNumber, Parameter, InfoKind.Text); } + public String Option(String Option_) { return Option(Option_, ""); } + public int Count_Get(StreamKind StreamKind) { return Count_Get(StreamKind, -1); } + } + + + + + + + + + + + + + + + + + + public class MediaInfoList + { + //Import of DLL functions. DO NOT USE until you know what you do (MediaInfo DLL do NOT use CoTaskMemAlloc to allocate memory) + [DllImport("MediaInfo.dll")] + private static extern IntPtr MediaInfoList_New(); + [DllImport("MediaInfo.dll")] + private static extern void MediaInfoList_Delete(IntPtr Handle); + [DllImport("MediaInfo.dll")] + private static extern IntPtr MediaInfoList_Open(IntPtr Handle, [MarshalAs(UnmanagedType.LPWStr)] string FileName, IntPtr Options); + [DllImport("MediaInfo.dll")] + private static extern void MediaInfoList_Close(IntPtr Handle, IntPtr FilePos); + [DllImport("MediaInfo.dll")] + private static extern IntPtr MediaInfoList_Inform(IntPtr Handle, IntPtr FilePos, IntPtr Reserved); + [DllImport("MediaInfo.dll")] + private static extern IntPtr MediaInfoList_GetI(IntPtr Handle, IntPtr FilePos, IntPtr StreamKind, IntPtr StreamNumber, IntPtr Parameter, IntPtr KindOfInfo); + [DllImport("MediaInfo.dll")] + private static extern IntPtr MediaInfoList_Get(IntPtr Handle, IntPtr FilePos, IntPtr StreamKind, IntPtr StreamNumber, [MarshalAs(UnmanagedType.LPWStr)] string Parameter, IntPtr KindOfInfo, IntPtr KindOfSearch); + [DllImport("MediaInfo.dll")] + private static extern IntPtr MediaInfoList_Option(IntPtr Handle, [MarshalAs(UnmanagedType.LPWStr)] string Option, [MarshalAs(UnmanagedType.LPWStr)] string Value); + [DllImport("MediaInfo.dll")] + private static extern IntPtr MediaInfoList_State_Get(IntPtr Handle); + [DllImport("MediaInfo.dll")] + private static extern IntPtr MediaInfoList_Count_Get(IntPtr Handle, IntPtr FilePos, IntPtr StreamKind, IntPtr StreamNumber); + + //MediaInfo class + public MediaInfoList() { Handle = MediaInfoList_New(); } + ~MediaInfoList() { MediaInfoList_Delete(Handle); } + public int Open(String FileName, InfoFileOptions Options) { return (int)MediaInfoList_Open(Handle, FileName, (IntPtr)Options); } + public void Close(int FilePos) { MediaInfoList_Close(Handle, (IntPtr)FilePos); } + public String Inform(int FilePos) { return Marshal.PtrToStringUni(MediaInfoList_Inform(Handle, (IntPtr)FilePos, (IntPtr)0)); } + public String Get(int FilePos, StreamKind StreamKind, int StreamNumber, String Parameter, InfoKind KindOfInfo, InfoKind KindOfSearch) { return Marshal.PtrToStringUni(MediaInfoList_Get(Handle, (IntPtr)FilePos, (IntPtr)StreamKind, (IntPtr)StreamNumber, Parameter, (IntPtr)KindOfInfo, (IntPtr)KindOfSearch)); } + public String Get(int FilePos, StreamKind StreamKind, int StreamNumber, int Parameter, InfoKind KindOfInfo) { return Marshal.PtrToStringUni(MediaInfoList_GetI(Handle, (IntPtr)FilePos, (IntPtr)StreamKind, (IntPtr)StreamNumber, (IntPtr)Parameter, (IntPtr)KindOfInfo)); } + public String Option(String Option, String Value) { return Marshal.PtrToStringUni(MediaInfoList_Option(Handle, Option, Value)); } + public int State_Get() { return (int)MediaInfoList_State_Get(Handle); } + public int Count_Get(int FilePos, StreamKind StreamKind, int StreamNumber) { return (int)MediaInfoList_Count_Get(Handle, (IntPtr)FilePos, (IntPtr)StreamKind, (IntPtr)StreamNumber); } + private IntPtr Handle; + + //Default values, if you know how to set default values in C#, say me + public void Open(String FileName) { Open(FileName, 0); } + public void Close() { Close(-1); } + public String Get(int FilePos, StreamKind StreamKind, int StreamNumber, String Parameter, InfoKind KindOfInfo) { return Get(FilePos, StreamKind, StreamNumber, Parameter, KindOfInfo, InfoKind.Name); } + public String Get(int FilePos, StreamKind StreamKind, int StreamNumber, String Parameter) { return Get(FilePos, StreamKind, StreamNumber, Parameter, InfoKind.Text, InfoKind.Name); } + public String Get(int FilePos, StreamKind StreamKind, int StreamNumber, int Parameter) { return Get(FilePos, StreamKind, StreamNumber, Parameter, InfoKind.Text); } + public String Option(String Option_) { return Option(Option_, ""); } + public int Count_Get(int FilePos, StreamKind StreamKind) { return Count_Get(FilePos, StreamKind, -1); } + } + +} //NameSpace diff --git a/client/DxPlay/MenuButton.cs b/client/DxPlay/MenuButton.cs new file mode 100644 index 00000000..bf18ad59 --- /dev/null +++ b/client/DxPlay/MenuButton.cs @@ -0,0 +1,42 @@ +using System.ComponentModel; +using System.Drawing; +using System.Windows.Forms; + +namespace DxPlay { + public class MenuButton : Button { + [DefaultValue(null)] + public ContextMenuStrip Menu { get; set; } + + [DefaultValue(false)] + public bool ShowMenuUnderCursor { get; set; } + + protected override void OnMouseDown(MouseEventArgs mevent) { + base.OnMouseDown(mevent); + + if (Menu != null && mevent.Button == MouseButtons.Left) { + Point menuLocation; + + if (ShowMenuUnderCursor) { + menuLocation = mevent.Location; + } else { + menuLocation = new Point(0, Height); + } + + Menu.Show(this, menuLocation); + } + } + + protected override void OnPaint(PaintEventArgs pevent) { + base.OnPaint(pevent); + + if (Menu != null) { + int arrowX = ClientRectangle.Width - 14; + int arrowY = ClientRectangle.Height / 2 - 1; + + Brush brush = Enabled ? SystemBrushes.ControlText : SystemBrushes.ButtonShadow; + Point[] arrows = new Point[] { new Point(arrowX, arrowY), new Point(arrowX + 7, arrowY), new Point(arrowX + 3, arrowY + 4) }; + pevent.Graphics.FillPolygon(brush, arrows); + } + } + } +} diff --git a/client/DxPlay/Messages.cs b/client/DxPlay/Messages.cs new file mode 100644 index 00000000..633ffecb --- /dev/null +++ b/client/DxPlay/Messages.cs @@ -0,0 +1,960 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace DxPlay +{ + public enum WM + { + /// + /// The WM_NULL message performs no operation. An application sends the WM_NULL message if it wants to post a message that the recipient window will ignore. + /// + NULL = 0x0000, + /// + /// The WM_CREATE message is sent when an application requests that a window be created by calling the CreateWindowEx or CreateWindow function. (The message is sent before the function returns.) The window procedure of the new window receives this message after the window is created, but before the window becomes visible. + /// + CREATE = 0x0001, + /// + /// The WM_DESTROY message is sent when a window is being destroyed. It is sent to the window procedure of the window being destroyed after the window is removed from the screen. + /// This message is sent first to the window being destroyed and then to the child windows (if any) as they are destroyed. During the processing of the message, it can be assumed that all child windows still exist. + /// /// + DESTROY = 0x0002, + /// + /// The WM_MOVE message is sent after a window has been moved. + /// + MOVE = 0x0003, + /// + /// The WM_SIZE message is sent to a window after its size has changed. + /// + SIZE = 0x0005, + /// + /// The WM_ACTIVATE message is sent to both the window being activated and the window being deactivated. If the windows use the same input queue, the message is sent synchronously, first to the window procedure of the top-level window being deactivated, then to the window procedure of the top-level window being activated. If the windows use different input queues, the message is sent asynchronously, so the window is activated immediately. + /// + ACTIVATE = 0x0006, + /// + /// The WM_SETFOCUS message is sent to a window after it has gained the keyboard focus. + /// + SETFOCUS = 0x0007, + /// + /// The WM_KILLFOCUS message is sent to a window immediately before it loses the keyboard focus. + /// + KILLFOCUS = 0x0008, + /// + /// The WM_ENABLE message is sent when an application changes the enabled state of a window. It is sent to the window whose enabled state is changing. This message is sent before the EnableWindow function returns, but after the enabled state (WS_DISABLED style bit) of the window has changed. + /// + ENABLE = 0x000A, + /// + /// An application sends the WM_SETREDRAW message to a window to allow changes in that window to be redrawn or to prevent changes in that window from being redrawn. + /// + SETREDRAW = 0x000B, + /// + /// An application sends a WM_SETTEXT message to set the text of a window. + /// + SETTEXT = 0x000C, + /// + /// An application sends a WM_GETTEXT message to copy the text that corresponds to a window into a buffer provided by the caller. + /// + GETTEXT = 0x000D, + /// + /// An application sends a WM_GETTEXTLENGTH message to determine the length, in characters, of the text associated with a window. + /// + GETTEXTLENGTH = 0x000E, + /// + /// The WM_PAINT message is sent when the system or another application makes a request to paint a portion of an application's window. The message is sent when the UpdateWindow or RedrawWindow function is called, or by the DispatchMessage function when the application obtains a WM_PAINT message by using the GetMessage or PeekMessage function. + /// + PAINT = 0x000F, + /// + /// The WM_CLOSE message is sent as a signal that a window or an application should terminate. + /// + CLOSE = 0x0010, + /// + /// The WM_QUERYENDSESSION message is sent when the user chooses to end the session or when an application calls one of the system shutdown functions. If any application returns zero, the session is not ended. The system stops sending WM_QUERYENDSESSION messages as soon as one application returns zero. + /// After processing this message, the system sends the WM_ENDSESSION message with the wParam parameter set to the results of the WM_QUERYENDSESSION message. + /// + QUERYENDSESSION = 0x0011, + /// + /// The WM_QUERYOPEN message is sent to an icon when the user requests that the window be restored to its previous size and position. + /// + QUERYOPEN = 0x0013, + /// + /// The WM_ENDSESSION message is sent to an application after the system processes the results of the WM_QUERYENDSESSION message. The WM_ENDSESSION message informs the application whether the session is ending. + /// + ENDSESSION = 0x0016, + /// + /// The WM_QUIT message indicates a request to terminate an application and is generated when the application calls the PostQuitMessage function. It causes the GetMessage function to return zero. + /// + QUIT = 0x0012, + /// + /// The WM_ERASEBKGND message is sent when the window background must be erased (for example, when a window is resized). The message is sent to prepare an invalidated portion of a window for painting. + /// + ERASEBKGND = 0x0014, + /// + /// This message is sent to all top-level windows when a change is made to a system color setting. + /// + SYSCOLORCHANGE = 0x0015, + /// + /// The WM_SHOWWINDOW message is sent to a window when the window is about to be hidden or shown. + /// + SHOWWINDOW = 0x0018, + /// + /// An application sends the WM_WININICHANGE message to all top-level windows after making a change to the WIN.INI file. The SystemParametersInfo function sends this message after an application uses the function to change a setting in WIN.INI. + /// Note The WM_WININICHANGE message is provided only for compatibility with earlier versions of the system. Applications should use the WM_SETTINGCHANGE message. + /// + WININICHANGE = 0x001A, + /// + /// An application sends the WM_WININICHANGE message to all top-level windows after making a change to the WIN.INI file. The SystemParametersInfo function sends this message after an application uses the function to change a setting in WIN.INI. + /// Note The WM_WININICHANGE message is provided only for compatibility with earlier versions of the system. Applications should use the WM_SETTINGCHANGE message. + /// + SETTINGCHANGE = WM.WININICHANGE, + /// + /// The WM_DEVMODECHANGE message is sent to all top-level windows whenever the user changes device-mode settings. + /// + DEVMODECHANGE = 0x001B, + /// + /// The WM_ACTIVATEAPP message is sent when a window belonging to a different application than the active window is about to be activated. The message is sent to the application whose window is being activated and to the application whose window is being deactivated. + /// + ACTIVATEAPP = 0x001C, + /// + /// An application sends the WM_FONTCHANGE message to all top-level windows in the system after changing the pool of font resources. + /// + FONTCHANGE = 0x001D, + /// + /// A message that is sent whenever there is a change in the system time. + /// + TIMECHANGE = 0x001E, + /// + /// The WM_CANCELMODE message is sent to cancel certain modes, such as mouse capture. For example, the system sends this message to the active window when a dialog box or message box is displayed. Certain functions also send this message explicitly to the specified window regardless of whether it is the active window. For example, the EnableWindow function sends this message when disabling the specified window. + /// + CANCELMODE = 0x001F, + /// + /// The WM_SETCURSOR message is sent to a window if the mouse causes the cursor to move within a window and mouse input is not captured. + /// + SETCURSOR = 0x0020, + /// + /// The WM_MOUSEACTIVATE message is sent when the cursor is in an inactive window and the user presses a mouse button. The parent window receives this message only if the child window passes it to the DefWindowProc function. + /// + MOUSEACTIVATE = 0x0021, + /// + /// The WM_CHILDACTIVATE message is sent to a child window when the user clicks the window's title bar or when the window is activated, moved, or sized. + /// + CHILDACTIVATE = 0x0022, + /// + /// The WM_QUEUESYNC message is sent by a computer-based training (CBT) application to separate user-input messages from other messages sent through the WH_JOURNALPLAYBACK Hook procedure. + /// + QUEUESYNC = 0x0023, + /// + /// The WM_GETMINMAXINFO message is sent to a window when the size or position of the window is about to change. An application can use this message to override the window's default maximized size and position, or its default minimum or maximum tracking size. + /// + GETMINMAXINFO = 0x0024, + /// + /// Windows NT 3.51 and earlier: The WM_PAINTICON message is sent to a minimized window when the icon is to be painted. This message is not sent by newer versions of Microsoft Windows, except in unusual circumstances explained in the Remarks. + /// + PAINTICON = 0x0026, + /// + /// Windows NT 3.51 and earlier: The WM_ICONERASEBKGND message is sent to a minimized window when the background of the icon must be filled before painting the icon. A window receives this message only if a class icon is defined for the window; otherwise, WM_ERASEBKGND is sent. This message is not sent by newer versions of Windows. + /// + ICONERASEBKGND = 0x0027, + /// + /// The WM_NEXTDLGCTL message is sent to a dialog box procedure to set the keyboard focus to a different control in the dialog box. + /// + NEXTDLGCTL = 0x0028, + /// + /// The WM_SPOOLERSTATUS message is sent from Print Manager whenever a job is added to or removed from the Print Manager queue. + /// + SPOOLERSTATUS = 0x002A, + /// + /// The WM_DRAWITEM message is sent to the parent window of an owner-drawn button, combo box, list box, or menu when a visual aspect of the button, combo box, list box, or menu has changed. + /// + DRAWITEM = 0x002B, + /// + /// The WM_MEASUREITEM message is sent to the owner window of a combo box, list box, list view control, or menu item when the control or menu is created. + /// + MEASUREITEM = 0x002C, + /// + /// Sent to the owner of a list box or combo box when the list box or combo box is destroyed or when items are removed by the LB_DELETESTRING, LB_RESETCONTENT, CB_DELETESTRING, or CB_RESETCONTENT message. The system sends a WM_DELETEITEM message for each deleted item. The system sends the WM_DELETEITEM message for any deleted list box or combo box item with nonzero item data. + /// + DELETEITEM = 0x002D, + /// + /// Sent by a list box with the LBS_WANTKEYBOARDINPUT style to its owner in response to a WM_KEYDOWN message. + /// + VKEYTOITEM = 0x002E, + /// + /// Sent by a list box with the LBS_WANTKEYBOARDINPUT style to its owner in response to a WM_CHAR message. + /// + CHARTOITEM = 0x002F, + /// + /// An application sends a WM_SETFONT message to specify the font that a control is to use when drawing text. + /// + SETFONT = 0x0030, + /// + /// An application sends a WM_GETFONT message to a control to retrieve the font with which the control is currently drawing its text. + /// + GETFONT = 0x0031, + /// + /// An application sends a WM_SETHOTKEY message to a window to associate a hot key with the window. When the user presses the hot key, the system activates the window. + /// + SETHOTKEY = 0x0032, + /// + /// An application sends a WM_GETHOTKEY message to determine the hot key associated with a window. + /// + GETHOTKEY = 0x0033, + /// + /// The WM_QUERYDRAGICON message is sent to a minimized (iconic) window. The window is about to be dragged by the user but does not have an icon defined for its class. An application can return a handle to an icon or cursor. The system displays this cursor or icon while the user drags the icon. + /// + QUERYDRAGICON = 0x0037, + /// + /// The system sends the WM_COMPAREITEM message to determine the relative position of a new item in the sorted list of an owner-drawn combo box or list box. Whenever the application adds a new item, the system sends this message to the owner of a combo box or list box created with the CBS_SORT or LBS_SORT style. + /// + COMPAREITEM = 0x0039, + /// + /// Active Accessibility sends the WM_GETOBJECT message to obtain information about an accessible object contained in a server application. + /// Applications never send this message directly. It is sent only by Active Accessibility in response to calls to AccessibleObjectFromPoint, AccessibleObjectFromEvent, or AccessibleObjectFromWindow. However, server applications handle this message. + /// + GETOBJECT = 0x003D, + /// + /// The WM_COMPACTING message is sent to all top-level windows when the system detects more than 12.5 percent of system time over a 30- to 60-second interval is being spent compacting memory. This indicates that system memory is low. + /// + COMPACTING = 0x0041, + /// + /// WM_COMMNOTIFY is Obsolete for Win32-Based Applications + /// + [Obsolete] + COMMNOTIFY = 0x0044, + /// + /// The WM_WINDOWPOSCHANGING message is sent to a window whose size, position, or place in the Z order is about to change as a result of a call to the SetWindowPos function or another window-management function. + /// + WINDOWPOSCHANGING = 0x0046, + /// + /// The WM_WINDOWPOSCHANGED message is sent to a window whose size, position, or place in the Z order has changed as a result of a call to the SetWindowPos function or another window-management function. + /// + WINDOWPOSCHANGED = 0x0047, + /// + /// Notifies applications that the system, typically a battery-powered personal computer, is about to enter a suspended mode. + /// Use: POWERBROADCAST + /// + [Obsolete] + POWER = 0x0048, + /// + /// An application sends the WM_COPYDATA message to pass data to another application. + /// + COPYDATA = 0x004A, + /// + /// The WM_CANCELJOURNAL message is posted to an application when a user cancels the application's journaling activities. The message is posted with a NULL window handle. + /// + CANCELJOURNAL = 0x004B, + /// + /// Sent by a common control to its parent window when an event has occurred or the control requires some information. + /// + NOTIFY = 0x004E, + /// + /// The WM_INPUTLANGCHANGEREQUEST message is posted to the window with the focus when the user chooses a new input language, either with the hotkey (specified in the Keyboard control panel application) or from the indicator on the system taskbar. An application can accept the change by passing the message to the DefWindowProc function or reject the change (and prevent it from taking place) by returning immediately. + /// + INPUTLANGCHANGEREQUEST = 0x0050, + /// + /// The WM_INPUTLANGCHANGE message is sent to the topmost affected window after an application's input language has been changed. You should make any application-specific settings and pass the message to the DefWindowProc function, which passes the message to all first-level child windows. These child windows can pass the message to DefWindowProc to have it pass the message to their child windows, and so on. + /// + INPUTLANGCHANGE = 0x0051, + /// + /// Sent to an application that has initiated a training card with Microsoft Windows Help. The message informs the application when the user clicks an authorable button. An application initiates a training card by specifying the HELP_TCARD command in a call to the WinHelp function. + /// + TCARD = 0x0052, + /// + /// Indicates that the user pressed the F1 key. If a menu is active when F1 is pressed, WM_HELP is sent to the window associated with the menu; otherwise, WM_HELP is sent to the window that has the keyboard focus. If no window has the keyboard focus, WM_HELP is sent to the currently active window. + /// + HELP = 0x0053, + /// + /// The WM_USERCHANGED message is sent to all windows after the user has logged on or off. When the user logs on or off, the system updates the user-specific settings. The system sends this message immediately after updating the settings. + /// + USERCHANGED = 0x0054, + /// + /// Determines if a window accepts ANSI or Unicode structures in the WM_NOTIFY notification message. WM_NOTIFYFORMAT messages are sent from a common control to its parent window and from the parent window to the common control. + /// + NOTIFYFORMAT = 0x0055, + /// + /// The WM_CONTEXTMENU message notifies a window that the user clicked the right mouse button (right-clicked) in the window. + /// + CONTEXTMENU = 0x007B, + /// + /// The WM_STYLECHANGING message is sent to a window when the SetWindowLong function is about to change one or more of the window's styles. + /// + STYLECHANGING = 0x007C, + /// + /// The WM_STYLECHANGED message is sent to a window after the SetWindowLong function has changed one or more of the window's styles + /// + STYLECHANGED = 0x007D, + /// + /// The WM_DISPLAYCHANGE message is sent to all windows when the display resolution has changed. + /// + DISPLAYCHANGE = 0x007E, + /// + /// The WM_GETICON message is sent to a window to retrieve a handle to the large or small icon associated with a window. The system displays the large icon in the ALT+TAB dialog, and the small icon in the window caption. + /// + GETICON = 0x007F, + /// + /// An application sends the WM_SETICON message to associate a new large or small icon with a window. The system displays the large icon in the ALT+TAB dialog box, and the small icon in the window caption. + /// + SETICON = 0x0080, + /// + /// The WM_NCCREATE message is sent prior to the WM_CREATE message when a window is first created. + /// + NCCREATE = 0x0081, + /// + /// The WM_NCDESTROY message informs a window that its nonclient area is being destroyed. The DestroyWindow function sends the WM_NCDESTROY message to the window following the WM_DESTROY message. WM_DESTROY is used to free the allocated memory object associated with the window. + /// The WM_NCDESTROY message is sent after the child windows have been destroyed. In contrast, WM_DESTROY is sent before the child windows are destroyed. + /// + NCDESTROY = 0x0082, + /// + /// The WM_NCCALCSIZE message is sent when the size and position of a window's client area must be calculated. By processing this message, an application can control the content of the window's client area when the size or position of the window changes. + /// + NCCALCSIZE = 0x0083, + /// + /// The WM_NCHITTEST message is sent to a window when the cursor moves, or when a mouse button is pressed or released. If the mouse is not captured, the message is sent to the window beneath the cursor. Otherwise, the message is sent to the window that has captured the mouse. + /// + NCHITTEST = 0x0084, + /// + /// The WM_NCPAINT message is sent to a window when its frame must be painted. + /// + NCPAINT = 0x0085, + /// + /// The WM_NCACTIVATE message is sent to a window when its nonclient area needs to be changed to indicate an active or inactive state. + /// + NCACTIVATE = 0x0086, + /// + /// The WM_GETDLGCODE message is sent to the window procedure associated with a control. By default, the system handles all keyboard input to the control; the system interprets certain types of keyboard input as dialog box navigation keys. To override this default behavior, the control can respond to the WM_GETDLGCODE message to indicate the types of input it wants to process itself. + /// + GETDLGCODE = 0x0087, + /// + /// The WM_SYNCPAINT message is used to synchronize painting while avoiding linking independent GUI threads. + /// + SYNCPAINT = 0x0088, + /// + /// The WM_NCMOUSEMOVE message is posted to a window when the cursor is moved within the nonclient area of the window. This message is posted to the window that contains the cursor. If a window has captured the mouse, this message is not posted. + /// + NCMOUSEMOVE = 0x00A0, + /// + /// The WM_NCLBUTTONDOWN message is posted when the user presses the left mouse button while the cursor is within the nonclient area of a window. This message is posted to the window that contains the cursor. If a window has captured the mouse, this message is not posted. + /// + NCLBUTTONDOWN = 0x00A1, + /// + /// The WM_NCLBUTTONUP message is posted when the user releases the left mouse button while the cursor is within the nonclient area of a window. This message is posted to the window that contains the cursor. If a window has captured the mouse, this message is not posted. + /// + NCLBUTTONUP = 0x00A2, + /// + /// The WM_NCLBUTTONDBLCLK message is posted when the user double-clicks the left mouse button while the cursor is within the nonclient area of a window. This message is posted to the window that contains the cursor. If a window has captured the mouse, this message is not posted. + /// + NCLBUTTONDBLCLK = 0x00A3, + /// + /// The WM_NCRBUTTONDOWN message is posted when the user presses the right mouse button while the cursor is within the nonclient area of a window. This message is posted to the window that contains the cursor. If a window has captured the mouse, this message is not posted. + /// + NCRBUTTONDOWN = 0x00A4, + /// + /// The WM_NCRBUTTONUP message is posted when the user releases the right mouse button while the cursor is within the nonclient area of a window. This message is posted to the window that contains the cursor. If a window has captured the mouse, this message is not posted. + /// + NCRBUTTONUP = 0x00A5, + /// + /// The WM_NCRBUTTONDBLCLK message is posted when the user double-clicks the right mouse button while the cursor is within the nonclient area of a window. This message is posted to the window that contains the cursor. If a window has captured the mouse, this message is not posted. + /// + NCRBUTTONDBLCLK = 0x00A6, + /// + /// The WM_NCMBUTTONDOWN message is posted when the user presses the middle mouse button while the cursor is within the nonclient area of a window. This message is posted to the window that contains the cursor. If a window has captured the mouse, this message is not posted. + /// + NCMBUTTONDOWN = 0x00A7, + /// + /// The WM_NCMBUTTONUP message is posted when the user releases the middle mouse button while the cursor is within the nonclient area of a window. This message is posted to the window that contains the cursor. If a window has captured the mouse, this message is not posted. + /// + NCMBUTTONUP = 0x00A8, + /// + /// The WM_NCMBUTTONDBLCLK message is posted when the user double-clicks the middle mouse button while the cursor is within the nonclient area of a window. This message is posted to the window that contains the cursor. If a window has captured the mouse, this message is not posted. + /// + NCMBUTTONDBLCLK = 0x00A9, + /// + /// The WM_NCXBUTTONDOWN message is posted when the user presses the first or second X button while the cursor is in the nonclient area of a window. This message is posted to the window that contains the cursor. If a window has captured the mouse, this message is not posted. + /// + NCXBUTTONDOWN = 0x00AB, + /// + /// The WM_NCXBUTTONUP message is posted when the user releases the first or second X button while the cursor is in the nonclient area of a window. This message is posted to the window that contains the cursor. If a window has captured the mouse, this message is not posted. + /// + NCXBUTTONUP = 0x00AC, + /// + /// The WM_NCXBUTTONDBLCLK message is posted when the user double-clicks the first or second X button while the cursor is in the nonclient area of a window. This message is posted to the window that contains the cursor. If a window has captured the mouse, this message is not posted. + /// + NCXBUTTONDBLCLK = 0x00AD, + /// + /// The WM_INPUT_DEVICE_CHANGE message is sent to the window that registered to receive raw input. A window receives this message through its WindowProc function. + /// + INPUT_DEVICE_CHANGE = 0x00FE, + /// + /// The WM_INPUT message is sent to the window that is getting raw input. + /// + INPUT = 0x00FF, + /// + /// This message filters for keyboard messages. + /// + KEYFIRST = 0x0100, + /// + /// The WM_KEYDOWN message is posted to the window with the keyboard focus when a nonsystem key is pressed. A nonsystem key is a key that is pressed when the ALT key is not pressed. + /// + KEYDOWN = 0x0100, + /// + /// The WM_KEYUP message is posted to the window with the keyboard focus when a nonsystem key is released. A nonsystem key is a key that is pressed when the ALT key is not pressed, or a keyboard key that is pressed when a window has the keyboard focus. + /// + KEYUP = 0x0101, + /// + /// The WM_CHAR message is posted to the window with the keyboard focus when a WM_KEYDOWN message is translated by the TranslateMessage function. The WM_CHAR message contains the character code of the key that was pressed. + /// + CHAR = 0x0102, + /// + /// The WM_DEADCHAR message is posted to the window with the keyboard focus when a WM_KEYUP message is translated by the TranslateMessage function. WM_DEADCHAR specifies a character code generated by a dead key. A dead key is a key that generates a character, such as the umlaut (double-dot), that is combined with another character to form a composite character. For example, the umlaut-O character (Ö) is generated by typing the dead key for the umlaut character, and then typing the O key. + /// + DEADCHAR = 0x0103, + /// + /// The WM_SYSKEYDOWN message is posted to the window with the keyboard focus when the user presses the F10 key (which activates the menu bar) or holds down the ALT key and then presses another key. It also occurs when no window currently has the keyboard focus; in this case, the WM_SYSKEYDOWN message is sent to the active window. The window that receives the message can distinguish between these two contexts by checking the context code in the lParam parameter. + /// + SYSKEYDOWN = 0x0104, + /// + /// The WM_SYSKEYUP message is posted to the window with the keyboard focus when the user releases a key that was pressed while the ALT key was held down. It also occurs when no window currently has the keyboard focus; in this case, the WM_SYSKEYUP message is sent to the active window. The window that receives the message can distinguish between these two contexts by checking the context code in the lParam parameter. + /// + SYSKEYUP = 0x0105, + /// + /// The WM_SYSCHAR message is posted to the window with the keyboard focus when a WM_SYSKEYDOWN message is translated by the TranslateMessage function. It specifies the character code of a system character key — that is, a character key that is pressed while the ALT key is down. + /// + SYSCHAR = 0x0106, + /// + /// The WM_SYSDEADCHAR message is sent to the window with the keyboard focus when a WM_SYSKEYDOWN message is translated by the TranslateMessage function. WM_SYSDEADCHAR specifies the character code of a system dead key — that is, a dead key that is pressed while holding down the ALT key. + /// + SYSDEADCHAR = 0x0107, + /// + /// The WM_UNICHAR message is posted to the window with the keyboard focus when a WM_KEYDOWN message is translated by the TranslateMessage function. The WM_UNICHAR message contains the character code of the key that was pressed. + /// The WM_UNICHAR message is equivalent to WM_CHAR, but it uses Unicode Transformation Format (UTF)-32, whereas WM_CHAR uses UTF-16. It is designed to send or post Unicode characters to ANSI windows and it can can handle Unicode Supplementary Plane characters. + /// + UNICHAR = 0x0109, + /// + /// This message filters for keyboard messages. + /// + KEYLAST = 0x0109, + /// + /// Sent immediately before the IME generates the composition string as a result of a keystroke. A window receives this message through its WindowProc function. + /// + IME_STARTCOMPOSITION = 0x010D, + /// + /// Sent to an application when the IME ends composition. A window receives this message through its WindowProc function. + /// + IME_ENDCOMPOSITION = 0x010E, + /// + /// Sent to an application when the IME changes composition status as a result of a keystroke. A window receives this message through its WindowProc function. + /// + IME_COMPOSITION = 0x010F, + IME_KEYLAST = 0x010F, + /// + /// The WM_INITDIALOG message is sent to the dialog box procedure immediately before a dialog box is displayed. Dialog box procedures typically use this message to initialize controls and carry out any other initialization tasks that affect the appearance of the dialog box. + /// + INITDIALOG = 0x0110, + /// + /// The WM_COMMAND message is sent when the user selects a command item from a menu, when a control sends a notification message to its parent window, or when an accelerator keystroke is translated. + /// + COMMAND = 0x0111, + /// + /// A window receives this message when the user chooses a command from the Window menu (formerly known as the system or control menu) or when the user chooses the maximize button, minimize button, restore button, or close button. + /// + SYSCOMMAND = 0x0112, + /// + /// The WM_TIMER message is posted to the installing thread's message queue when a timer expires. The message is posted by the GetMessage or PeekMessage function. + /// + TIMER = 0x0113, + /// + /// The WM_HSCROLL message is sent to a window when a scroll event occurs in the window's standard horizontal scroll bar. This message is also sent to the owner of a horizontal scroll bar control when a scroll event occurs in the control. + /// + HSCROLL = 0x0114, + /// + /// The WM_VSCROLL message is sent to a window when a scroll event occurs in the window's standard vertical scroll bar. This message is also sent to the owner of a vertical scroll bar control when a scroll event occurs in the control. + /// + VSCROLL = 0x0115, + /// + /// The WM_INITMENU message is sent when a menu is about to become active. It occurs when the user clicks an item on the menu bar or presses a menu key. This allows the application to modify the menu before it is displayed. + /// + INITMENU = 0x0116, + /// + /// The WM_INITMENUPOPUP message is sent when a drop-down menu or submenu is about to become active. This allows an application to modify the menu before it is displayed, without changing the entire menu. + /// + INITMENUPOPUP = 0x0117, + /// + /// The WM_MENUSELECT message is sent to a menu's owner window when the user selects a menu item. + /// + MENUSELECT = 0x011F, + /// + /// The WM_MENUCHAR message is sent when a menu is active and the user presses a key that does not correspond to any mnemonic or accelerator key. This message is sent to the window that owns the menu. + /// + MENUCHAR = 0x0120, + /// + /// The WM_ENTERIDLE message is sent to the owner window of a modal dialog box or menu that is entering an idle state. A modal dialog box or menu enters an idle state when no messages are waiting in its queue after it has processed one or more previous messages. + /// + ENTERIDLE = 0x0121, + /// + /// The WM_MENURBUTTONUP message is sent when the user releases the right mouse button while the cursor is on a menu item. + /// + MENURBUTTONUP = 0x0122, + /// + /// The WM_MENUDRAG message is sent to the owner of a drag-and-drop menu when the user drags a menu item. + /// + MENUDRAG = 0x0123, + /// + /// The WM_MENUGETOBJECT message is sent to the owner of a drag-and-drop menu when the mouse cursor enters a menu item or moves from the center of the item to the top or bottom of the item. + /// + MENUGETOBJECT = 0x0124, + /// + /// The WM_UNINITMENUPOPUP message is sent when a drop-down menu or submenu has been destroyed. + /// + UNINITMENUPOPUP = 0x0125, + /// + /// The WM_MENUCOMMAND message is sent when the user makes a selection from a menu. + /// + MENUCOMMAND = 0x0126, + /// + /// An application sends the WM_CHANGEUISTATE message to indicate that the user interface (UI) state should be changed. + /// + CHANGEUISTATE = 0x0127, + /// + /// An application sends the WM_UPDATEUISTATE message to change the user interface (UI) state for the specified window and all its child windows. + /// + UPDATEUISTATE = 0x0128, + /// + /// An application sends the WM_QUERYUISTATE message to retrieve the user interface (UI) state for a window. + /// + QUERYUISTATE = 0x0129, + /// + /// The WM_CTLCOLORMSGBOX message is sent to the owner window of a message box before Windows draws the message box. By responding to this message, the owner window can set the text and background colors of the message box by using the given display device context handle. + /// + CTLCOLORMSGBOX = 0x0132, + /// + /// An edit control that is not read-only or disabled sends the WM_CTLCOLOREDIT message to its parent window when the control is about to be drawn. By responding to this message, the parent window can use the specified device context handle to set the text and background colors of the edit control. + /// + CTLCOLOREDIT = 0x0133, + /// + /// Sent to the parent window of a list box before the system draws the list box. By responding to this message, the parent window can set the text and background colors of the list box by using the specified display device context handle. + /// + CTLCOLORLISTBOX = 0x0134, + /// + /// The WM_CTLCOLORBTN message is sent to the parent window of a button before drawing the button. The parent window can change the button's text and background colors. However, only owner-drawn buttons respond to the parent window processing this message. + /// + CTLCOLORBTN = 0x0135, + /// + /// The WM_CTLCOLORDLG message is sent to a dialog box before the system draws the dialog box. By responding to this message, the dialog box can set its text and background colors using the specified display device context handle. + /// + CTLCOLORDLG = 0x0136, + /// + /// The WM_CTLCOLORSCROLLBAR message is sent to the parent window of a scroll bar control when the control is about to be drawn. By responding to this message, the parent window can use the display context handle to set the background color of the scroll bar control. + /// + CTLCOLORSCROLLBAR = 0x0137, + /// + /// A static control, or an edit control that is read-only or disabled, sends the WM_CTLCOLORSTATIC message to its parent window when the control is about to be drawn. By responding to this message, the parent window can use the specified device context handle to set the text and background colors of the static control. + /// + CTLCOLORSTATIC = 0x0138, + /// + /// Use WM_MOUSEFIRST to specify the first mouse message. Use the PeekMessage() Function. + /// + MOUSEFIRST = 0x0200, + /// + /// The WM_MOUSEMOVE message is posted to a window when the cursor moves. If the mouse is not captured, the message is posted to the window that contains the cursor. Otherwise, the message is posted to the window that has captured the mouse. + /// + MOUSEMOVE = 0x0200, + /// + /// The WM_LBUTTONDOWN message is posted when the user presses the left mouse button while the cursor is in the client area of a window. If the mouse is not captured, the message is posted to the window beneath the cursor. Otherwise, the message is posted to the window that has captured the mouse. + /// + LBUTTONDOWN = 0x0201, + /// + /// The WM_LBUTTONUP message is posted when the user releases the left mouse button while the cursor is in the client area of a window. If the mouse is not captured, the message is posted to the window beneath the cursor. Otherwise, the message is posted to the window that has captured the mouse. + /// + LBUTTONUP = 0x0202, + /// + /// The WM_LBUTTONDBLCLK message is posted when the user double-clicks the left mouse button while the cursor is in the client area of a window. If the mouse is not captured, the message is posted to the window beneath the cursor. Otherwise, the message is posted to the window that has captured the mouse. + /// + LBUTTONDBLCLK = 0x0203, + /// + /// The WM_RBUTTONDOWN message is posted when the user presses the right mouse button while the cursor is in the client area of a window. If the mouse is not captured, the message is posted to the window beneath the cursor. Otherwise, the message is posted to the window that has captured the mouse. + /// + RBUTTONDOWN = 0x0204, + /// + /// The WM_RBUTTONUP message is posted when the user releases the right mouse button while the cursor is in the client area of a window. If the mouse is not captured, the message is posted to the window beneath the cursor. Otherwise, the message is posted to the window that has captured the mouse. + /// + RBUTTONUP = 0x0205, + /// + /// The WM_RBUTTONDBLCLK message is posted when the user double-clicks the right mouse button while the cursor is in the client area of a window. If the mouse is not captured, the message is posted to the window beneath the cursor. Otherwise, the message is posted to the window that has captured the mouse. + /// + RBUTTONDBLCLK = 0x0206, + /// + /// The WM_MBUTTONDOWN message is posted when the user presses the middle mouse button while the cursor is in the client area of a window. If the mouse is not captured, the message is posted to the window beneath the cursor. Otherwise, the message is posted to the window that has captured the mouse. + /// + MBUTTONDOWN = 0x0207, + /// + /// The WM_MBUTTONUP message is posted when the user releases the middle mouse button while the cursor is in the client area of a window. If the mouse is not captured, the message is posted to the window beneath the cursor. Otherwise, the message is posted to the window that has captured the mouse. + /// + MBUTTONUP = 0x0208, + /// + /// The WM_MBUTTONDBLCLK message is posted when the user double-clicks the middle mouse button while the cursor is in the client area of a window. If the mouse is not captured, the message is posted to the window beneath the cursor. Otherwise, the message is posted to the window that has captured the mouse. + /// + MBUTTONDBLCLK = 0x0209, + /// + /// The WM_MOUSEWHEEL message is sent to the focus window when the mouse wheel is rotated. The DefWindowProc function propagates the message to the window's parent. There should be no internal forwarding of the message, since DefWindowProc propagates it up the parent chain until it finds a window that processes it. + /// + MOUSEWHEEL = 0x020A, + /// + /// The WM_XBUTTONDOWN message is posted when the user presses the first or second X button while the cursor is in the client area of a window. If the mouse is not captured, the message is posted to the window beneath the cursor. Otherwise, the message is posted to the window that has captured the mouse. + /// + XBUTTONDOWN = 0x020B, + /// + /// The WM_XBUTTONUP message is posted when the user releases the first or second X button while the cursor is in the client area of a window. If the mouse is not captured, the message is posted to the window beneath the cursor. Otherwise, the message is posted to the window that has captured the mouse. + /// + XBUTTONUP = 0x020C, + /// + /// The WM_XBUTTONDBLCLK message is posted when the user double-clicks the first or second X button while the cursor is in the client area of a window. If the mouse is not captured, the message is posted to the window beneath the cursor. Otherwise, the message is posted to the window that has captured the mouse. + /// + XBUTTONDBLCLK = 0x020D, + /// + /// The WM_MOUSEHWHEEL message is sent to the focus window when the mouse's horizontal scroll wheel is tilted or rotated. The DefWindowProc function propagates the message to the window's parent. There should be no internal forwarding of the message, since DefWindowProc propagates it up the parent chain until it finds a window that processes it. + /// + MOUSEHWHEEL = 0x020E, + /// + /// Use WM_MOUSELAST to specify the last mouse message. Used with PeekMessage() Function. + /// + MOUSELAST = 0x020E, + /// + /// The WM_PARENTNOTIFY message is sent to the parent of a child window when the child window is created or destroyed, or when the user clicks a mouse button while the cursor is over the child window. When the child window is being created, the system sends WM_PARENTNOTIFY just before the CreateWindow or CreateWindowEx function that creates the window returns. When the child window is being destroyed, the system sends the message before any processing to destroy the window takes place. + /// + PARENTNOTIFY = 0x0210, + /// + /// The WM_ENTERMENULOOP message informs an application's main window procedure that a menu modal loop has been entered. + /// + ENTERMENULOOP = 0x0211, + /// + /// The WM_EXITMENULOOP message informs an application's main window procedure that a menu modal loop has been exited. + /// + EXITMENULOOP = 0x0212, + /// + /// The WM_NEXTMENU message is sent to an application when the right or left arrow key is used to switch between the menu bar and the system menu. + /// + NEXTMENU = 0x0213, + /// + /// The WM_SIZING message is sent to a window that the user is resizing. By processing this message, an application can monitor the size and position of the drag rectangle and, if needed, change its size or position. + /// + SIZING = 0x0214, + /// + /// The WM_CAPTURECHANGED message is sent to the window that is losing the mouse capture. + /// + CAPTURECHANGED = 0x0215, + /// + /// The WM_MOVING message is sent to a window that the user is moving. By processing this message, an application can monitor the position of the drag rectangle and, if needed, change its position. + /// + MOVING = 0x0216, + /// + /// Notifies applications that a power-management event has occurred. + /// + POWERBROADCAST = 0x0218, + /// + /// Notifies an application of a change to the hardware configuration of a device or the computer. + /// + DEVICECHANGE = 0x0219, + /// + /// An application sends the WM_MDICREATE message to a multiple-document interface (MDI) client window to create an MDI child window. + /// + MDICREATE = 0x0220, + /// + /// An application sends the WM_MDIDESTROY message to a multiple-document interface (MDI) client window to close an MDI child window. + /// + MDIDESTROY = 0x0221, + /// + /// An application sends the WM_MDIACTIVATE message to a multiple-document interface (MDI) client window to instruct the client window to activate a different MDI child window. + /// + MDIACTIVATE = 0x0222, + /// + /// An application sends the WM_MDIRESTORE message to a multiple-document interface (MDI) client window to restore an MDI child window from maximized or minimized size. + /// + MDIRESTORE = 0x0223, + /// + /// An application sends the WM_MDINEXT message to a multiple-document interface (MDI) client window to activate the next or previous child window. + /// + MDINEXT = 0x0224, + /// + /// An application sends the WM_MDIMAXIMIZE message to a multiple-document interface (MDI) client window to maximize an MDI child window. The system resizes the child window to make its client area fill the client window. The system places the child window's window menu icon in the rightmost position of the frame window's menu bar, and places the child window's restore icon in the leftmost position. The system also appends the title bar text of the child window to that of the frame window. + /// + MDIMAXIMIZE = 0x0225, + /// + /// An application sends the WM_MDITILE message to a multiple-document interface (MDI) client window to arrange all of its MDI child windows in a tile format. + /// + MDITILE = 0x0226, + /// + /// An application sends the WM_MDICASCADE message to a multiple-document interface (MDI) client window to arrange all its child windows in a cascade format. + /// + MDICASCADE = 0x0227, + /// + /// An application sends the WM_MDIICONARRANGE message to a multiple-document interface (MDI) client window to arrange all minimized MDI child windows. It does not affect child windows that are not minimized. + /// + MDIICONARRANGE = 0x0228, + /// + /// An application sends the WM_MDIGETACTIVE message to a multiple-document interface (MDI) client window to retrieve the handle to the active MDI child window. + /// + MDIGETACTIVE = 0x0229, + /// + /// An application sends the WM_MDISETMENU message to a multiple-document interface (MDI) client window to replace the entire menu of an MDI frame window, to replace the window menu of the frame window, or both. + /// + MDISETMENU = 0x0230, + /// + /// The WM_ENTERSIZEMOVE message is sent one time to a window after it enters the moving or sizing modal loop. The window enters the moving or sizing modal loop when the user clicks the window's title bar or sizing border, or when the window passes the WM_SYSCOMMAND message to the DefWindowProc function and the wParam parameter of the message specifies the SC_MOVE or SC_SIZE value. The operation is complete when DefWindowProc returns. + /// The system sends the WM_ENTERSIZEMOVE message regardless of whether the dragging of full windows is enabled. + /// + ENTERSIZEMOVE = 0x0231, + /// + /// The WM_EXITSIZEMOVE message is sent one time to a window, after it has exited the moving or sizing modal loop. The window enters the moving or sizing modal loop when the user clicks the window's title bar or sizing border, or when the window passes the WM_SYSCOMMAND message to the DefWindowProc function and the wParam parameter of the message specifies the SC_MOVE or SC_SIZE value. The operation is complete when DefWindowProc returns. + /// + EXITSIZEMOVE = 0x0232, + /// + /// Sent when the user drops a file on the window of an application that has registered itself as a recipient of dropped files. + /// + DROPFILES = 0x0233, + /// + /// An application sends the WM_MDIREFRESHMENU message to a multiple-document interface (MDI) client window to refresh the window menu of the MDI frame window. + /// + MDIREFRESHMENU = 0x0234, + /// + /// Sent to an application when a window is activated. A window receives this message through its WindowProc function. + /// + IME_SETCONTEXT = 0x0281, + /// + /// Sent to an application to notify it of changes to the IME window. A window receives this message through its WindowProc function. + /// + IME_NOTIFY = 0x0282, + /// + /// Sent by an application to direct the IME window to carry out the requested command. The application uses this message to control the IME window that it has created. To send this message, the application calls the SendMessage function with the following parameters. + /// + IME_CONTROL = 0x0283, + /// + /// Sent to an application when the IME window finds no space to extend the area for the composition window. A window receives this message through its WindowProc function. + /// + IME_COMPOSITIONFULL = 0x0284, + /// + /// Sent to an application when the operating system is about to change the current IME. A window receives this message through its WindowProc function. + /// + IME_SELECT = 0x0285, + /// + /// Sent to an application when the IME gets a character of the conversion result. A window receives this message through its WindowProc function. + /// + IME_CHAR = 0x0286, + /// + /// Sent to an application to provide commands and request information. A window receives this message through its WindowProc function. + /// + IME_REQUEST = 0x0288, + /// + /// Sent to an application by the IME to notify the application of a key press and to keep message order. A window receives this message through its WindowProc function. + /// + IME_KEYDOWN = 0x0290, + /// + /// Sent to an application by the IME to notify the application of a key release and to keep message order. A window receives this message through its WindowProc function. + /// + IME_KEYUP = 0x0291, + /// + /// The WM_MOUSEHOVER message is posted to a window when the cursor hovers over the client area of the window for the period of time specified in a prior call to TrackMouseEvent. + /// + MOUSEHOVER = 0x02A1, + /// + /// The WM_MOUSELEAVE message is posted to a window when the cursor leaves the client area of the window specified in a prior call to TrackMouseEvent. + /// + MOUSELEAVE = 0x02A3, + /// + /// The WM_NCMOUSEHOVER message is posted to a window when the cursor hovers over the nonclient area of the window for the period of time specified in a prior call to TrackMouseEvent. + /// + NCMOUSEHOVER = 0x02A0, + /// + /// The WM_NCMOUSELEAVE message is posted to a window when the cursor leaves the nonclient area of the window specified in a prior call to TrackMouseEvent. + /// + NCMOUSELEAVE = 0x02A2, + /// + /// The WM_WTSSESSION_CHANGE message notifies applications of changes in session state. + /// + WTSSESSION_CHANGE = 0x02B1, + TABLET_FIRST = 0x02c0, + TABLET_LAST = 0x02df, + /// + /// An application sends a WM_CUT message to an edit control or combo box to delete (cut) the current selection, if any, in the edit control and copy the deleted text to the clipboard in CF_TEXT format. + /// + CUT = 0x0300, + /// + /// An application sends the WM_COPY message to an edit control or combo box to copy the current selection to the clipboard in CF_TEXT format. + /// + COPY = 0x0301, + /// + /// An application sends a WM_PASTE message to an edit control or combo box to copy the current content of the clipboard to the edit control at the current caret position. Data is inserted only if the clipboard contains data in CF_TEXT format. + /// + PASTE = 0x0302, + /// + /// An application sends a WM_CLEAR message to an edit control or combo box to delete (clear) the current selection, if any, from the edit control. + /// + CLEAR = 0x0303, + /// + /// An application sends a WM_UNDO message to an edit control to undo the last operation. When this message is sent to an edit control, the previously deleted text is restored or the previously added text is deleted. + /// + UNDO = 0x0304, + /// + /// The WM_RENDERFORMAT message is sent to the clipboard owner if it has delayed rendering a specific clipboard format and if an application has requested data in that format. The clipboard owner must render data in the specified format and place it on the clipboard by calling the SetClipboardData function. + /// + RENDERFORMAT = 0x0305, + /// + /// The WM_RENDERALLFORMATS message is sent to the clipboard owner before it is destroyed, if the clipboard owner has delayed rendering one or more clipboard formats. For the content of the clipboard to remain available to other applications, the clipboard owner must render data in all the formats it is capable of generating, and place the data on the clipboard by calling the SetClipboardData function. + /// + RENDERALLFORMATS = 0x0306, + /// + /// The WM_DESTROYCLIPBOARD message is sent to the clipboard owner when a call to the EmptyClipboard function empties the clipboard. + /// + DESTROYCLIPBOARD = 0x0307, + /// + /// The WM_DRAWCLIPBOARD message is sent to the first window in the clipboard viewer chain when the content of the clipboard changes. This enables a clipboard viewer window to display the new content of the clipboard. + /// + DRAWCLIPBOARD = 0x0308, + /// + /// The WM_PAINTCLIPBOARD message is sent to the clipboard owner by a clipboard viewer window when the clipboard contains data in the CF_OWNERDISPLAY format and the clipboard viewer's client area needs repainting. + /// + PAINTCLIPBOARD = 0x0309, + /// + /// The WM_VSCROLLCLIPBOARD message is sent to the clipboard owner by a clipboard viewer window when the clipboard contains data in the CF_OWNERDISPLAY format and an event occurs in the clipboard viewer's vertical scroll bar. The owner should scroll the clipboard image and update the scroll bar values. + /// + VSCROLLCLIPBOARD = 0x030A, + /// + /// The WM_SIZECLIPBOARD message is sent to the clipboard owner by a clipboard viewer window when the clipboard contains data in the CF_OWNERDISPLAY format and the clipboard viewer's client area has changed size. + /// + SIZECLIPBOARD = 0x030B, + /// + /// The WM_ASKCBFORMATNAME message is sent to the clipboard owner by a clipboard viewer window to request the name of a CF_OWNERDISPLAY clipboard format. + /// + ASKCBFORMATNAME = 0x030C, + /// + /// The WM_CHANGECBCHAIN message is sent to the first window in the clipboard viewer chain when a window is being removed from the chain. + /// + CHANGECBCHAIN = 0x030D, + /// + /// The WM_HSCROLLCLIPBOARD message is sent to the clipboard owner by a clipboard viewer window. This occurs when the clipboard contains data in the CF_OWNERDISPLAY format and an event occurs in the clipboard viewer's horizontal scroll bar. The owner should scroll the clipboard image and update the scroll bar values. + /// + HSCROLLCLIPBOARD = 0x030E, + /// + /// This message informs a window that it is about to receive the keyboard focus, giving the window the opportunity to realize its logical palette when it receives the focus. + /// + QUERYNEWPALETTE = 0x030F, + /// + /// The WM_PALETTEISCHANGING message informs applications that an application is going to realize its logical palette. + /// + PALETTEISCHANGING = 0x0310, + /// + /// This message is sent by the OS to all top-level and overlapped windows after the window with the keyboard focus realizes its logical palette. + /// This message enables windows that do not have the keyboard focus to realize their logical palettes and update their client areas. + /// + PALETTECHANGED = 0x0311, + /// + /// The WM_HOTKEY message is posted when the user presses a hot key registered by the RegisterHotKey function. The message is placed at the top of the message queue associated with the thread that registered the hot key. + /// + HOTKEY = 0x0312, + /// + /// The WM_PRINT message is sent to a window to request that it draw itself in the specified device context, most commonly in a printer device context. + /// + PRINT = 0x0317, + /// + /// The WM_PRINTCLIENT message is sent to a window to request that it draw its client area in the specified device context, most commonly in a printer device context. + /// + PRINTCLIENT = 0x0318, + /// + /// The WM_APPCOMMAND message notifies a window that the user generated an application command event, for example, by clicking an application command button using the mouse or typing an application command key on the keyboard. + /// + APPCOMMAND = 0x0319, + /// + /// The WM_THEMECHANGED message is broadcast to every window following a theme change event. Examples of theme change events are the activation of a theme, the deactivation of a theme, or a transition from one theme to another. + /// + THEMECHANGED = 0x031A, + /// + /// Sent when the contents of the clipboard have changed. + /// + CLIPBOARDUPDATE = 0x031D, + /// + /// The system will send a window the WM_DWMCOMPOSITIONCHANGED message to indicate that the availability of desktop composition has changed. + /// + DWMCOMPOSITIONCHANGED = 0x031E, + /// + /// WM_DWMNCRENDERINGCHANGED is called when the non-client area rendering status of a window has changed. Only windows that have set the flag DWM_BLURBEHIND.fTransitionOnMaximized to true will get this message. + /// + DWMNCRENDERINGCHANGED = 0x031F, + /// + /// Sent to all top-level windows when the colorization color has changed. + /// + DWMCOLORIZATIONCOLORCHANGED = 0x0320, + /// + /// WM_DWMWINDOWMAXIMIZEDCHANGE will let you know when a DWM composed window is maximized. You also have to register for this message as well. You'd have other windowd go opaque when this message is sent. + /// + DWMWINDOWMAXIMIZEDCHANGE = 0x0321, + /// + /// Sent to request extended title bar information. A window receives this message through its WindowProc function. + /// + GETTITLEBARINFOEX = 0x033F, + HANDHELDFIRST = 0x0358, + HANDHELDLAST = 0x035F, + AFXFIRST = 0x0360, + AFXLAST = 0x037F, + PENWINFIRST = 0x0380, + PENWINLAST = 0x038F, + /// + /// The WM_APP constant is used by applications to help define private messages, usually of the form WM_APP+X, where X is an integer value. + /// + APP = 0x8000, + /// + /// The WM_USER constant is used by applications to help define private messages for use by private window classes, usually of the form WM_USER+X, where X is an integer value. + /// + USER = 0x0400, + + /// + /// An application sends the WM_CPL_LAUNCH message to Windows Control Panel to request that a Control Panel application be started. + /// + CPL_LAUNCH = USER + 0x1000, + /// + /// The WM_CPL_LAUNCHED message is sent when a Control Panel application, started by the WM_CPL_LAUNCH message, has closed. The WM_CPL_LAUNCHED message is sent to the window identified by the wParam parameter of the WM_CPL_LAUNCH message that started the application. + /// + CPL_LAUNCHED = USER + 0x1001, + /// + /// WM_SYSTIMER is a well-known yet still undocumented message. Windows uses WM_SYSTIMER for internal actions like scrolling. + /// + SYSTIMER = 0x118, + // message from dvd graph + DVD_EVENT = 0x00008002, + //DirectShow Graph Events + GRAPH_NOTIFY = 0x0400 + 13, + SAGE = USER + 234, + BM_GETCHECK = 0x00F0, + BM_SETCHECK = 0x00F1, + BM_GETSTATE = 0x00F2, + BM_SETSTATE = 0x00F3, + BM_SETSTYLE = 0x00F4, + BM_CLICK = 0x00F5, + BM_GETIMAGE = 0x00F6, + BM_SETIMAGE = 0x00F7, + BM_SETDONTCLICK = 0x00F8 + } + + public enum SystemMenuCommands + { + SC_SIZE = 0xF000, + SC_MOVE = 0xF010, + SC_MINIMIZE = 0xF020, + SC_MAXIMIZE = 0xF030, + SC_NEXTWINDOW = 0xF040, + SC_PREVWINDOW = 0xF050, + SC_CLOSE = 0xF060, + SC_VSCROLL = 0xF070, + SC_HSCROLL = 0xF080, + SC_MOUSEMENU = 0xF090, + SC_KEYMENU = 0xF100, + SC_ARRANGE = 0xF110, + SC_RESTORE = 0xF120, + SC_TASKLIST = 0xF130, + SC_SCREENSAVE = 0xF140, + SC_HOTKEY = 0xF150, + SC_DEFAULT = 0xF160, + SC_MONITORPOWER = 0xF170, + SC_CONTEXTHELP = 0xF180, + SC_SEPARATOR = 0xF00F, + SCF_ISSECURE = 0x00000001 + } + +} diff --git a/client/DxPlay/MovieSegment.cs b/client/DxPlay/MovieSegment.cs new file mode 100644 index 00000000..935fbe93 --- /dev/null +++ b/client/DxPlay/MovieSegment.cs @@ -0,0 +1,8 @@ +namespace DxPlay { + public class MovieSegment { + public Timecode TCIn { get; set; } + public Timecode TCOut { get; set; } + public bool Optional { get; set; } + public string Comment { get; set; } + } +} diff --git a/client/DxPlay/NativeMethods.cs b/client/DxPlay/NativeMethods.cs new file mode 100644 index 00000000..345416da --- /dev/null +++ b/client/DxPlay/NativeMethods.cs @@ -0,0 +1,507 @@ +using System; +using System.Collections.Generic; +using System.Runtime.InteropServices; +using System.Text; +using System.Runtime.ConstrainedExecution; + +namespace DxPlay { + #region Enum + + public enum ButtonNotification : int + { + CLICKED = 0, + PAINT = 1, + HILITE = 2, + UNHILITE = 3, + DISABLE = 4, + DOUBLECLICKED = 5, + SETFOCUS = 6, + KILLFOCUS = 7 + } + + public enum ButtonState + { + UNCHECKED = 0x0000, + CHECKED = 0x0001, + INDETERMINATE = 0x0002, + PUSHED = 0x0004, + FOCUS = 0x0008 + } + + public enum NT_STATUS + { + STATUS_SUCCESS = 0x00000000, + STATUS_BUFFER_OVERFLOW = unchecked((int)0x80000005L), + STATUS_INFO_LENGTH_MISMATCH = unchecked((int)0xC0000004L) + } + + public enum SYSTEM_INFORMATION_CLASS + { + SystemBasicInformation = 0, + SystemPerformanceInformation = 2, + SystemTimeOfDayInformation = 3, + SystemProcessInformation = 5, + SystemProcessorPerformanceInformation = 8, + SystemHandleInformation = 16, + SystemInterruptInformation = 23, + SystemExceptionInformation = 33, + SystemRegistryQuotaInformation = 37, + SystemLookasideInformation = 45 + } + + public enum OBJECT_INFORMATION_CLASS + { + ObjectBasicInformation = 0, + ObjectNameInformation = 1, + ObjectTypeInformation = 2, + ObjectAllTypesInformation = 3, + ObjectHandleInformation = 4 + } + + [Flags] + public enum ProcessAccessRights + { + All = 0x001F0FFF, + Terminate = 0x00000001, + CreateThread = 0x00000002, + VMOperation = 0x00000008, + VMRead = 0x00000010, + VMWrite = 0x00000020, + DupHandle = 0x00000040, + SetInformation = 0x00000200, + QueryInformation = 0x00000400, + Synchronize = 0x00100000 + } + + [Flags] + public enum DuplicateHandleOptions + { + DUPLICATE_CLOSE_SOURCE = 0x1, + DUPLICATE_SAME_ACCESS = 0x2 + } + + public enum EXECUTION_STATE : uint + { + ES_NONE = 0, + ES_SYSTEM_REQUIRED = 0x00000001, + ES_DISPLAY_REQUIRED = 0x00000002, + ES_USER_PRESENT = 0x00000004, + ES_AWAYMODE_REQUIRED = 0x00000040, + ES_CONTINUOUS = 0x80000000 + } + + public enum SE_OBJECT_TYPE + { + SE_UNKNOWN_OBJECT_TYPE, + SE_FILE_OBJECT, + SE_SERVICE, + SE_PRINTER, + SE_REGISTRY_KEY, + SE_LMSHARE, + SE_KERNEL_OBJECT, + SE_WINDOW_OBJECT, + SE_DS_OBJECT, + SE_DS_OBJECT_ALL, + SE_PROVIDER_DEFINED_OBJECT, + SE_WMIGUID_OBJECT, + SE_REGISTRY_WOW64_32KEY + } + + public enum SECURITY_INFORMATION + { + OWNER_SECURITY_INFORMATION = 1, + GROUP_SECURITY_INFORMATION = 2, + DACL_SECURITY_INFORMATION = 4, + SACL_SECURITY_INFORMATION = 8, + } + + public enum KeyAccess + { + QUERY_VALUE = 0x0001, + SET_VALUE = 0x0002, + CREATE_SUB_KEY = 0x0004, + ENUMERATE_SUB_KEYS = 0x0008, + NOTIFY = 0x0010, + CREATE_LINK = 0x0020, + WOW64_32KEY = 0x0200, + WOW64_64KEY = 0x0100 + } + + public enum RegValueTypes + { + REG_NONE = 0, + REG_SZ = 1, + REG_EXPAND_SZ = 2, + REG_BINARY = 3, + REG_DWORD = 4, + REG_DWORD_LITTLE_ENDIAN = 4, + REG_DWORD_BIG_ENDIAN = 5, + REG_LINK = 6, + REG_MULTI_SZ = 7 + } + + [Flags()] + public enum DM : int + { + Orientation = 0x1, + PaperSize = 0x2, + PaperLength = 0x4, + PaperWidth = 0x8, + Scale = 0x10, + Position = 0x20, + NUP = 0x40, + DisplayOrientation = 0x80, + Copies = 0x100, + DefaultSource = 0x200, + PrintQuality = 0x400, + Color = 0x800, + Duplex = 0x1000, + YResolution = 0x2000, + TTOption = 0x4000, + Collate = 0x8000, + FormName = 0x10000, + LogPixels = 0x20000, + BitsPerPixel = 0x40000, + PelsWidth = 0x80000, + PelsHeight = 0x100000, + DisplayFlags = 0x200000, + DisplayFrequency = 0x400000, + ICMMethod = 0x800000, + ICMIntent = 0x1000000, + MediaType = 0x2000000, + DitherType = 0x4000000, + PanningWidth = 0x8000000, + PanningHeight = 0x10000000, + DisplayFixedOutput = 0x20000000 + } + + public enum CDS + { + Dynamic = 0, + UpdateRegistry = 1, + Test = 2, + FullScreen = 4, + Global = 8, + SetPrimary = 10, + VideoParameters = 20 + } + + public enum DisplayFixedOutput + { + Default = 0, + Stretch, + Center + } + + #endregion + + public struct POINTL + { + public int x; + public int y; + } + + [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)] + public struct DEVMODE + { + [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)] + public string dmDeviceName; + public short dmSpecVersion; + public short dmDriverVersion; + public short dmSize; + public short dmDriverExtra; + public DM dmFields; + //short dmOrientation; + //short dmPaperSize; + //short dmPaperLength; + //short dmPaperWidth; + //short dmScale; + //short dmCopies; + //short dmDefaultSource; + //short dmPrintQuality; + public POINTL dmPosition; + public int dmDisplayOrientation; + public int dmDisplayFixedOutput; + short dmColor; + short dmDuplex; + short dmYResolution; + short dmTTOption; + short dmCollate; + [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)] + public string dmFormName; + public short dmLogPixels; + public int dmBitsPerPel; + public int dmPelsWidth; + public int dmPelsHeight; + public int dmDisplayFlags; + public int dmDisplayFrequency; + public int dmICMMethod; + public int dmICMIntent; + public int dmMediaType; + public int dmDitherType; + public int dmReserved1; + public int dmReserved2; + public int dmPanningWidth; + public int dmPanningHeight; + } + + [StructLayout(LayoutKind.Sequential)] + public struct RECT + { + public int Left; + public int Top; + public int Right; + public int Bottom; + } + + public static class NativeMethods + { + #region Methods + + [DllImport("ntdll.dll")] + public static extern NT_STATUS NtQuerySystemInformation( + [In] SYSTEM_INFORMATION_CLASS SystemInformationClass, + [In] IntPtr SystemInformation, + [In] int SystemInformationLength, + [Out] out int ReturnLength); + + [DllImport("ntdll.dll")] + public static extern NT_STATUS NtQueryObject( + [In] IntPtr Handle, + [In] OBJECT_INFORMATION_CLASS ObjectInformationClass, + [In] IntPtr ObjectInformation, + [In] int ObjectInformationLength, + [Out] out int ReturnLength); + + [DllImport("kernel32.dll", SetLastError = true)] + public static extern SafeProcessHandle OpenProcess( + [In] ProcessAccessRights dwDesiredAccess, + [In, MarshalAs(UnmanagedType.Bool)] bool bInheritHandle, + [In] int dwProcessId); + + [DllImport("kernel32.dll", SetLastError = true)] + [return: MarshalAs(UnmanagedType.Bool)] + public static extern bool DuplicateHandle( + [In] IntPtr hSourceProcessHandle, + [In] IntPtr hSourceHandle, + [In] IntPtr hTargetProcessHandle, + [Out] out SafeObjectHandle lpTargetHandle, + [In] int dwDesiredAccess, + [In, MarshalAs(UnmanagedType.Bool)] bool bInheritHandle, + [In] DuplicateHandleOptions dwOptions); + + [DllImport("kernel32.dll")] + public static extern IntPtr GetCurrentProcess(); + + [DllImport("kernel32.dll", SetLastError = true)] + public static extern int GetProcessId( + [In] IntPtr Process); + + [DllImport("kernel32", CharSet = CharSet.Ansi, ExactSpelling = true, SetLastError = true)] + public static extern IntPtr GetProcAddress(IntPtr hModule, string procName); + + [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)] + [DllImport("kernel32.dll", SetLastError = true)] + [return: MarshalAs(UnmanagedType.Bool)] + public static extern bool CloseHandle( + [In] IntPtr hObject); + + [DllImport("kernel32.dll", SetLastError = true)] + public static extern int QueryDosDevice( + [In] string lpDeviceName, + [Out] StringBuilder lpTargetPath, + [In] int ucchMax); + + [DllImport("kernel32.dll", SetLastError = true)] + public static extern IntPtr FindFirstVolume( + [Out] StringBuilder lpszVolumeName, + [In] int cchBufferLength); + + [DllImport("kernel32.dll", SetLastError = true)] + public static extern int FindNextVolume( + [In]IntPtr hFindVolume, + [Out] StringBuilder lpszVolumeName, + [In] int cchBufferLength); + + [DllImport("kernel32.dll", SetLastError = true)] + public static extern int FindVolumeClose( + [In]IntPtr hFindVolume); + + [DllImport("kernel32.dll", SetLastError = true)] + public static extern IntPtr FindFirstVolumeMountPoint( + [In] string lpszRootPathName, + [Out] StringBuilder lpszVolumeMountPoint, + [In] int cchBufferLength); + + [DllImport("kernel32.dll", SetLastError = true)] + public static extern int FindVolumeMountPointClose( + [In] IntPtr hFindVolumeMountPoint); + + [DllImport("kernel32.dll", SetLastError = true)] + public static extern int GetVolumePathName( + [In] string lpszFileName, + [Out] StringBuilder lpszVolumePathName, + [In] int cchBufferLength); + + [DllImport("kernel32.dll", SetLastError = true)] + public static extern int GetVolumePathNamesForVolumeName( + [In] string lpszVolumeName, + [Out] StringBuilder lpszVolumePathNames, + [In] int cchBufferLength, + [Out] out int lpcchReturnLength); + + [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)] + public static extern EXECUTION_STATE SetThreadExecutionState(EXECUTION_STATE esFlags); + + [DllImport("kernel32.dll")] + public static extern bool SetPriorityClass(IntPtr hProcess, uint dwPriorityClass); + + //SafeProcessHandle + [DllImport("kernel32.dll")] + public static extern bool SetPriorityClass(SafeProcessHandle hProcess, uint dwPriorityClass); + + [DllImport("advapi32.dll", SetLastError = true)] + public static extern int RegOpenKeyEx(IntPtr hKey, string subKey, uint options, int samDesired, out IntPtr phkResult); + + [DllImport("advapi32.dll", SetLastError = true)] + public static extern int RegOpenKeyEx(IntPtr hKey, string subKey, uint options, KeyAccess samDesired, out IntPtr phkResult); + + [DllImport("advapi32.dll", CharSet = CharSet.Unicode, EntryPoint = "RegQueryValueExW", SetLastError = true)] + public static extern int RegQueryValueEx( + IntPtr hKey, + string lpValueName, + IntPtr lpReserved, + out RegValueTypes lpType, + byte[] lpData, + ref uint lpcbData); + + [DllImport("advapi32.dll", SetLastError = true)] + public static extern int RegCloseKey(IntPtr hKey); + + [DllImport("kernel32.dll")] + public static extern IntPtr CreateWaitableTimer(IntPtr lpTimerAttributes, bool bManualReset, string lpTimerName); + + [DllImport("kernel32.dll")] + public static extern bool SetWaitableTimer(IntPtr hTimer, [In] ref long pDueTime, int lPeriod, IntPtr pfnCompletionRoutine, IntPtr lpArgToCompletionRoutine, bool fResume); + + [DllImport("kernel32", SetLastError = true, ExactSpelling = true)] + public static extern int WaitForSingleObject(IntPtr handle, uint milliseconds); + + [DllImport("wer.dll", CharSet = CharSet.Auto)] + public static extern void WerAddExcludedApplication(string AppName, bool AllUsers); + + [DllImport("wer.dll", CharSet = CharSet.Auto)] + public static extern void WerRemoveExcludedApplication(string AppName, bool AllUsers); + + [DllImport("kernel32.dll", CharSet = CharSet.Auto)] + public static extern int WerRegisterFile(string pwzFile, int regFileType, int dwFlags); + + [DllImport("advapi32.dll", SetLastError = true)] + public static extern int GetSecurityInfo( + IntPtr handle, + SE_OBJECT_TYPE ObjectType, + SECURITY_INFORMATION SecurityInfo, + out IntPtr pSidOwner, + out IntPtr pSidGroup, + out IntPtr pDacl, + out IntPtr pSacl, + out IntPtr pSecurityDescriptor); + + [DllImport("advapi32", CharSet = CharSet.Unicode, SetLastError = true)] + public static extern bool ConvertSidToStringSid( + IntPtr sid, + out IntPtr sidString); + + [DllImport("kernel32.dll", SetLastError = true)] + public static extern IntPtr LocalFree( + IntPtr handle + ); + + [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = false)] + public static extern IntPtr SendMessage(IntPtr hWnd, WM Msg, IntPtr wParam, IntPtr lParam); + + [DllImport("kernel32.dll", CharSet = CharSet.Unicode, SetLastError = true)] + [return: MarshalAs(UnmanagedType.Bool)] + public static extern bool SetDllDirectory(string lpPathName); + + [DllImport("user32.dll", SetLastError = true)] + public static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string lpszClass, string lpszWindow); + + [DllImport("user32.dll", SetLastError = true)] + public static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string lpszClass, IntPtr windowTitle); + + [DllImport("user32.dll")] + public static extern int GetDlgCtrlID(IntPtr hwndCtl); + + [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError=true)] + public static extern IntPtr LoadLibrary(string lpFileName); + + [DllImport("kernel32.dll", CharSet = CharSet.Auto)] + public static extern bool FreeLibrary(IntPtr hModule); + + [DllImport("kernel32.dll", SetLastError = true)] + public static extern bool GetProcessAffinityMask(IntPtr hProcess, out UIntPtr lpProcessAffinityMask, out UIntPtr lpSystemAffinityMask); + + [DllImport("kernel32.dll")] + public static extern bool SetProcessAffinityMask(IntPtr hProcess, UIntPtr dwProcessAffinityMask); + + [DllImport("user32.dll", CharSet = CharSet.Auto)] + public static extern int EnumDisplaySettings(string deviceName, int modeNum, ref DEVMODE devMode); + [DllImport("user32.dll", CharSet = CharSet.Auto)] + public static extern int ChangeDisplaySettings(ref DEVMODE devMode, CDS flags); + [DllImport("user32.dll", CharSet = CharSet.Auto)] + public static extern int ChangeDisplaySettings(IntPtr devMode, CDS flags); + + public static IntPtr MakeParam(int loWord, int hiWord) + { + return new IntPtr((loWord & 0xFFFF) + ((hiWord & 0xFFFF)<< 16)); + } + + [DllImport("user32.dll")] + public static extern bool SetProcessDPIAware(); + + [DllImport("user32.dll")] + [return: MarshalAs(UnmanagedType.Bool)] + public static extern bool GetWindowRect(IntPtr hWnd, out RECT lpRect); + + #endregion + + #region Constants + + public const int WerRegFileTypeOther = 2; + public const int WER_FILE_ANONYMOUS_DATA = 2; + + public const uint INFINITE = 0xFFFFFFFF; + + //public const int KEY_QUERY_VALUE = 0x0001; + //public const int KEY_NOTIFY = 0x0010; + public const int STANDARD_RIGHTS_READ = 0x00020000; + public const int STANDARD_RIGHTS_WRITE = 0x00020000; + + public static readonly IntPtr HKEY_CLASSES_ROOT = new IntPtr(unchecked((int)0x80000000)); + public static readonly IntPtr HKEY_CURRENT_USER = new IntPtr(unchecked((int)0x80000001)); + public static readonly IntPtr HKEY_LOCAL_MACHINE = new IntPtr(unchecked((int)0x80000002)); + public static readonly IntPtr HKEY_USERS = new IntPtr(unchecked((int)0x80000003)); + public static readonly IntPtr HKEY_PERFORMANCE_DATA = new IntPtr(unchecked((int)0x80000004)); + public static readonly IntPtr HKEY_CURRENT_CONFIG = new IntPtr(unchecked((int)0x80000005)); + public static readonly IntPtr HKEY_DYN_DATA = new IntPtr(unchecked((int)0x80000006)); + + public const uint IDLE_PRIORITY_CLASS = 0x00000040; + public const uint PROCESS_MODE_BACKGROUND_BEGIN = 0x00100000; + public const uint PROCESS_MODE_BACKGROUND_END = 0x00200000; + + public const int ENUM_CURRENT_SETTINGS = -1; + public const int ENUM_REGISTRY_SETTINGS = -2; + + public const int CDS_UPDATEREGISTRY = 0x01; + public const int CDS_TEST = 0x02; + public const int DISP_CHANGE_SUCCESSFUL = 0; + public const int DISP_CHANGE_RESTART = 1; + public const int DISP_CHANGE_FAILED = -1; + public const int DM_INTERLACED = 0x00000002; + + #endregion + + + } +} diff --git a/client/DxPlay/PlayerForm.Designer.cs b/client/DxPlay/PlayerForm.Designer.cs new file mode 100644 index 00000000..661baf56 --- /dev/null +++ b/client/DxPlay/PlayerForm.Designer.cs @@ -0,0 +1,383 @@ + +using System.Windows.Forms; + +namespace DxPlay { + partial class PlayerForm : Form { + private Panel panelVideo; + private Button btnPlay; + private Button btnPause; + private Panel panel2; + private TextBox textCurrentTC; + private Button btnStop; + private TextBox txtStartTC; + private TextBox txtEndTC; + private Panel panel3; + private Label label2; + private Label label1; + + /// + /// Clean up any resources being used. + /// + protected override void Dispose(bool disposing) { + // Make sure to release the DxPlay object to avoid hanging + if (m_play != null) { + m_play.Dispose(); + } + if (disposing) { + if (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(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle2 = new System.Windows.Forms.DataGridViewCellStyle(); + this.panelVideo = new System.Windows.Forms.Panel(); + this.panel2 = new System.Windows.Forms.Panel(); + this.btnStop = new System.Windows.Forms.Button(); + this.btnPlay = new System.Windows.Forms.Button(); + this.btnPause = new System.Windows.Forms.Button(); + this.textCurrentTC = new System.Windows.Forms.TextBox(); + this.txtStartTC = new System.Windows.Forms.TextBox(); + this.txtEndTC = new System.Windows.Forms.TextBox(); + this.panel3 = new System.Windows.Forms.Panel(); + this.labelStatus = new System.Windows.Forms.Label(); + this.label2 = new System.Windows.Forms.Label(); + this.label1 = new System.Windows.Forms.Label(); + this.trackBar1 = new DxPlay.ColorSlider(); + this.splitContainer1 = new System.Windows.Forms.SplitContainer(); + this.panelPlayer = new System.Windows.Forms.Panel(); + this.dgSegments = new System.Windows.Forms.DataGridView(); + this.bsSegments = new System.Windows.Forms.BindingSource(this.components); + this.menuButtonSegmentActions = new DxPlay.MenuButton(); + this.ctxmSegmentActions = new System.Windows.Forms.ContextMenuStrip(this.components); + this.defineOneSegmentToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.splitSegmentAtCurrentPositionToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.panel2.SuspendLayout(); + this.panel3.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit(); + this.splitContainer1.Panel1.SuspendLayout(); + this.splitContainer1.Panel2.SuspendLayout(); + this.splitContainer1.SuspendLayout(); + this.panelPlayer.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.dgSegments)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.bsSegments)).BeginInit(); + this.ctxmSegmentActions.SuspendLayout(); + this.SuspendLayout(); + // + // panelVideo + // + this.panelVideo.BackColor = System.Drawing.Color.Black; + this.panelVideo.Dock = System.Windows.Forms.DockStyle.Fill; + this.panelVideo.Location = new System.Drawing.Point(0, 0); + this.panelVideo.Name = "panelVideo"; + this.panelVideo.Size = new System.Drawing.Size(675, 447); + this.panelVideo.TabIndex = 10; + this.panelVideo.TabStop = true; + this.panelVideo.SizeChanged += new System.EventHandler(this.panel1_SizeChanged); + this.panelVideo.MouseDown += new System.Windows.Forms.MouseEventHandler(this.panel1_MouseDown); + // + // panel2 + // + this.panel2.BackColor = System.Drawing.SystemColors.Control; + this.panel2.Controls.Add(this.btnStop); + this.panel2.Controls.Add(this.btnPlay); + this.panel2.Controls.Add(this.btnPause); + this.panel2.Dock = System.Windows.Forms.DockStyle.Bottom; + this.panel2.Location = new System.Drawing.Point(0, 510); + this.panel2.Name = "panel2"; + this.panel2.Size = new System.Drawing.Size(675, 34); + this.panel2.TabIndex = 14; + // + // btnStop + // + this.btnStop.Image = global::DxPlay.Properties.Resources.Stop; + this.btnStop.Location = new System.Drawing.Point(66, 4); + this.btnStop.Name = "btnStop"; + this.btnStop.Size = new System.Drawing.Size(61, 25); + this.btnStop.TabIndex = 16; + this.btnStop.Text = "Stop"; + this.btnStop.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText; + this.btnStop.Click += new System.EventHandler(this.btnStop_Click); + // + // btnPlay + // + this.btnPlay.Image = global::DxPlay.Properties.Resources.Play; + this.btnPlay.Location = new System.Drawing.Point(3, 4); + this.btnPlay.Name = "btnPlay"; + this.btnPlay.Size = new System.Drawing.Size(61, 25); + this.btnPlay.TabIndex = 1; + this.btnPlay.Text = "Play"; + this.btnPlay.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText; + this.btnPlay.Click += new System.EventHandler(this.btnPlay_Click); + // + // btnPause + // + this.btnPause.Image = global::DxPlay.Properties.Resources.Pause; + this.btnPause.Location = new System.Drawing.Point(129, 4); + this.btnPause.Name = "btnPause"; + this.btnPause.Size = new System.Drawing.Size(61, 25); + this.btnPause.TabIndex = 11; + this.btnPause.Text = "Pause"; + this.btnPause.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText; + this.btnPause.Click += new System.EventHandler(this.btnPause_Click); + // + // textCurrentTC + // + this.textCurrentTC.Anchor = System.Windows.Forms.AnchorStyles.Top; + this.textCurrentTC.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.textCurrentTC.Font = new System.Drawing.Font("Calibri", 16F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(238))); + this.textCurrentTC.Location = new System.Drawing.Point(284, 13); + this.textCurrentTC.Name = "textCurrentTC"; + this.textCurrentTC.ReadOnly = true; + this.textCurrentTC.Size = new System.Drawing.Size(108, 27); + this.textCurrentTC.TabIndex = 15; + this.textCurrentTC.Text = "00:00:00.00"; + // + // txtStartTC + // + this.txtStartTC.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.txtStartTC.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.txtStartTC.Font = new System.Drawing.Font("Calibri", 10F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238))); + this.txtStartTC.ForeColor = System.Drawing.SystemColors.WindowText; + this.txtStartTC.Location = new System.Drawing.Point(6, 21); + this.txtStartTC.Name = "txtStartTC"; + this.txtStartTC.ReadOnly = true; + this.txtStartTC.Size = new System.Drawing.Size(66, 17); + this.txtStartTC.TabIndex = 16; + this.txtStartTC.Text = "00:00:00.00"; + // + // txtEndTC + // + this.txtEndTC.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.txtEndTC.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.txtEndTC.Font = new System.Drawing.Font("Calibri", 10F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238))); + this.txtEndTC.ForeColor = System.Drawing.SystemColors.WindowText; + this.txtEndTC.Location = new System.Drawing.Point(603, 21); + this.txtEndTC.Name = "txtEndTC"; + this.txtEndTC.ReadOnly = true; + this.txtEndTC.Size = new System.Drawing.Size(65, 17); + this.txtEndTC.TabIndex = 17; + this.txtEndTC.Text = "00:00:00.00"; + // + // panel3 + // + this.panel3.Controls.Add(this.labelStatus); + this.panel3.Controls.Add(this.label2); + this.panel3.Controls.Add(this.label1); + this.panel3.Controls.Add(this.txtStartTC); + this.panel3.Controls.Add(this.txtEndTC); + this.panel3.Controls.Add(this.textCurrentTC); + this.panel3.Dock = System.Windows.Forms.DockStyle.Bottom; + this.panel3.Location = new System.Drawing.Point(0, 447); + this.panel3.Name = "panel3"; + this.panel3.Size = new System.Drawing.Size(675, 41); + this.panel3.TabIndex = 19; + // + // labelStatus + // + this.labelStatus.Anchor = System.Windows.Forms.AnchorStyles.Top; + this.labelStatus.Font = new System.Drawing.Font("Calibri", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238))); + this.labelStatus.Location = new System.Drawing.Point(281, 5); + this.labelStatus.Name = "labelStatus"; + this.labelStatus.Size = new System.Drawing.Size(111, 13); + this.labelStatus.TabIndex = 20; + this.labelStatus.Text = "NO INPUT"; + this.labelStatus.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // label2 + // + this.label2.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.label2.AutoSize = true; + this.label2.Font = new System.Drawing.Font("Calibri", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238))); + this.label2.Location = new System.Drawing.Point(618, 5); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(54, 13); + this.label2.TabIndex = 19; + this.label2.Text = "DURATION"; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Font = new System.Drawing.Font("Calibri", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238))); + this.label1.Location = new System.Drawing.Point(4, 6); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(33, 13); + this.label1.TabIndex = 18; + this.label1.Text = "START"; + // + // trackBar1 + // + this.trackBar1.BackColor = System.Drawing.Color.Transparent; + this.trackBar1.BarInnerColor = System.Drawing.Color.Transparent; + this.trackBar1.BarOuterColor = System.Drawing.Color.Black; + this.trackBar1.BarPenColor = System.Drawing.Color.Black; + this.trackBar1.BorderRoundRectSize = new System.Drawing.Size(8, 8); + this.trackBar1.Dock = System.Windows.Forms.DockStyle.Bottom; + this.trackBar1.ElapsedInnerColor = System.Drawing.Color.Black; + this.trackBar1.ElapsedOuterColor = System.Drawing.Color.DarkGray; + this.trackBar1.LargeChange = ((uint)(0u)); + this.trackBar1.Location = new System.Drawing.Point(0, 488); + this.trackBar1.Maximum = 1; + this.trackBar1.Name = "trackBar1"; + this.trackBar1.Size = new System.Drawing.Size(675, 22); + this.trackBar1.SmallChange = ((uint)(1u)); + this.trackBar1.TabIndex = 18; + this.trackBar1.Text = "colorSlider1"; + this.trackBar1.ThumbInnerColor = System.Drawing.Color.Black; + this.trackBar1.ThumbOuterColor = System.Drawing.Color.Silver; + this.trackBar1.ThumbPenColor = System.Drawing.Color.Black; + this.trackBar1.ThumbRoundRectSize = new System.Drawing.Size(8, 8); + this.trackBar1.ThumbSize = 10; + this.trackBar1.Value = 0; + this.trackBar1.MouseDown += new System.Windows.Forms.MouseEventHandler(this.trackBar1_MouseDown); + this.trackBar1.MouseUp += new System.Windows.Forms.MouseEventHandler(this.trackBar1_MouseUp); + // + // splitContainer1 + // + this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer1.Location = new System.Drawing.Point(0, 0); + this.splitContainer1.Name = "splitContainer1"; + // + // splitContainer1.Panel1 + // + this.splitContainer1.Panel1.Controls.Add(this.panelPlayer); + // + // splitContainer1.Panel2 + // + this.splitContainer1.Panel2.Controls.Add(this.dgSegments); + this.splitContainer1.Panel2.Controls.Add(this.menuButtonSegmentActions); + this.splitContainer1.Size = new System.Drawing.Size(936, 544); + this.splitContainer1.SplitterDistance = 675; + this.splitContainer1.TabIndex = 20; + // + // panelPlayer + // + this.panelPlayer.Controls.Add(this.panelVideo); + this.panelPlayer.Controls.Add(this.panel3); + this.panelPlayer.Controls.Add(this.trackBar1); + this.panelPlayer.Controls.Add(this.panel2); + this.panelPlayer.Dock = System.Windows.Forms.DockStyle.Fill; + this.panelPlayer.Location = new System.Drawing.Point(0, 0); + this.panelPlayer.Name = "panelPlayer"; + this.panelPlayer.Size = new System.Drawing.Size(675, 544); + this.panelPlayer.TabIndex = 0; + // + // dgSegments + // + this.dgSegments.AllowUserToAddRows = false; + this.dgSegments.AllowUserToOrderColumns = true; + this.dgSegments.AllowUserToResizeRows = false; + this.dgSegments.AutoGenerateColumns = false; + this.dgSegments.BackgroundColor = System.Drawing.Color.White; + this.dgSegments.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.dgSegments.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.dgSegments.DataSource = this.bsSegments; + dataGridViewCellStyle2.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; + dataGridViewCellStyle2.BackColor = System.Drawing.SystemColors.Window; + dataGridViewCellStyle2.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238))); + dataGridViewCellStyle2.ForeColor = System.Drawing.SystemColors.ControlText; + dataGridViewCellStyle2.SelectionBackColor = System.Drawing.Color.Gainsboro; + dataGridViewCellStyle2.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle2.WrapMode = System.Windows.Forms.DataGridViewTriState.False; + this.dgSegments.DefaultCellStyle = dataGridViewCellStyle2; + this.dgSegments.Dock = System.Windows.Forms.DockStyle.Fill; + this.dgSegments.EditMode = System.Windows.Forms.DataGridViewEditMode.EditOnF2; + this.dgSegments.Location = new System.Drawing.Point(0, 23); + this.dgSegments.MultiSelect = false; + this.dgSegments.Name = "dgSegments"; + this.dgSegments.RowHeadersVisible = false; + this.dgSegments.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; + this.dgSegments.Size = new System.Drawing.Size(257, 521); + this.dgSegments.TabIndex = 1; + // + // menuButtonSegmentActions + // + this.menuButtonSegmentActions.BackColor = System.Drawing.Color.White; + this.menuButtonSegmentActions.Dock = System.Windows.Forms.DockStyle.Top; + this.menuButtonSegmentActions.Location = new System.Drawing.Point(0, 0); + this.menuButtonSegmentActions.Menu = this.ctxmSegmentActions; + this.menuButtonSegmentActions.Name = "menuButtonSegmentActions"; + this.menuButtonSegmentActions.Size = new System.Drawing.Size(257, 23); + this.menuButtonSegmentActions.TabIndex = 0; + this.menuButtonSegmentActions.Text = "Segment actions"; + this.menuButtonSegmentActions.UseVisualStyleBackColor = false; + // + // ctxmSegmentActions + // + this.ctxmSegmentActions.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.defineOneSegmentToolStripMenuItem, + this.splitSegmentAtCurrentPositionToolStripMenuItem}); + this.ctxmSegmentActions.Name = "ctxmSegmentActions"; + this.ctxmSegmentActions.Size = new System.Drawing.Size(247, 48); + // + // defineOneSegmentToolStripMenuItem + // + this.defineOneSegmentToolStripMenuItem.Name = "defineOneSegmentToolStripMenuItem"; + this.defineOneSegmentToolStripMenuItem.Size = new System.Drawing.Size(246, 22); + this.defineOneSegmentToolStripMenuItem.Text = "Define one segment for movie"; + this.defineOneSegmentToolStripMenuItem.Click += new System.EventHandler(this.OnDefineOneSegmentClick); + // + // splitSegmentAtCurrentPositionToolStripMenuItem + // + this.splitSegmentAtCurrentPositionToolStripMenuItem.Name = "splitSegmentAtCurrentPositionToolStripMenuItem"; + this.splitSegmentAtCurrentPositionToolStripMenuItem.Size = new System.Drawing.Size(246, 22); + this.splitSegmentAtCurrentPositionToolStripMenuItem.Text = "Split segment at current position"; + this.splitSegmentAtCurrentPositionToolStripMenuItem.Click += new System.EventHandler(this.OnSplitSegmentAtCurrentPositionClick); + // + // PlayerForm + // + this.AllowDrop = true; + this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); + this.ClientSize = new System.Drawing.Size(936, 544); + this.Controls.Add(this.splitContainer1); + this.KeyPreview = true; + this.MinimumSize = new System.Drawing.Size(640, 480); + this.Name = "PlayerForm"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "MediaCUBE Video Player"; + this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.PlayerForm_FormClosing); + this.FormClosed += new System.Windows.Forms.FormClosedEventHandler(this.PlayerForm_FormClosed); + this.Load += new System.EventHandler(this.PlayerForm_Load); + this.Shown += new System.EventHandler(this.PlayerForm_Shown); + this.DragDrop += new System.Windows.Forms.DragEventHandler(this.Form1_DragDrop); + this.DragEnter += new System.Windows.Forms.DragEventHandler(this.Form1_DragEnter); + this.KeyDown += new System.Windows.Forms.KeyEventHandler(this.PlayerForm_KeyDown); + this.PreviewKeyDown += new System.Windows.Forms.PreviewKeyDownEventHandler(this.PlayerForm_PreviewKeyDown); + this.panel2.ResumeLayout(false); + this.panel3.ResumeLayout(false); + this.panel3.PerformLayout(); + this.splitContainer1.Panel1.ResumeLayout(false); + this.splitContainer1.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit(); + this.splitContainer1.ResumeLayout(false); + this.panelPlayer.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.dgSegments)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.bsSegments)).EndInit(); + this.ctxmSegmentActions.ResumeLayout(false); + this.ResumeLayout(false); + + } + #endregion + + private ColorSlider trackBar1; + private Label labelStatus; + private SplitContainer splitContainer1; + private Panel panelPlayer; + private MenuButton menuButtonSegmentActions; + private ContextMenuStrip ctxmSegmentActions; + private System.ComponentModel.IContainer components; + private ToolStripMenuItem defineOneSegmentToolStripMenuItem; + private ToolStripMenuItem splitSegmentAtCurrentPositionToolStripMenuItem; + private DataGridView dgSegments; + private BindingSource bsSegments; + } +} + diff --git a/client/DxPlay/PlayerForm.cs b/client/DxPlay/PlayerForm.cs new file mode 100644 index 00000000..90688723 --- /dev/null +++ b/client/DxPlay/PlayerForm.cs @@ -0,0 +1,338 @@ +/**************************************************************************** +While the underlying libraries are covered by LGPL, this sample is released +as public domain. It is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY +or FITNESS FOR A PARTICULAR PURPOSE. +*****************************************************************************/ + +using System; +using System.Windows.Forms; +using System.Runtime.InteropServices; +using System.Diagnostics; +using static DxPlay.DxPlayer; +using JR.Utils.GUI.Forms; +using System.IO; +using System.Linq; +using System.ComponentModel; +using System.Collections.Generic; + +namespace DxPlay { + + public partial class PlayerForm : Form { + + private BindingList segments = new BindingList(); + private DateTime lastClick = DateTime.Now; + private string selectedFile; + private volatile bool trackBarAtUser; + private DxPlayer m_play = null; + private MediaDescription m_mediaDescription = null; + public bool AutoStart; + + public bool SegmentEditor { get; set; } + + public PlayerForm() { + InitializeComponent(); + } + + public PlayerForm(ref BindingList segments) { + this.segments = segments; + InitializeComponent(); + } + + private void cueue() { + m_play = null; + try { + m_mediaDescription = MediaDetector.GetDescription(selectedFile); + + trackBar1.Value = 0; + trackBar1.Minimum = 0; + trackBar1.Maximum = m_mediaDescription.Duration.Frames + 1; + m_play = new DxPlayer(panelVideo, m_mediaDescription); + txtStartTC.Text = m_mediaDescription.FirstFrame.ToString(); + txtEndTC.Text = m_mediaDescription.Duration.ToString(); + } + catch (COMException ce) { + MessageBox.Show("Failed to open file: " + ce.Message, "Open Error", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void playEvent() { + if (this.Disposing || this.IsDisposed || m_play == null) + return; + //Debug.WriteLine("Event " + m_play.State); + //switch (m_play.State) { + // case GraphState.Paused: { + // break; + // } + // case GraphState.Stopped: { + // break; + // } + // case GraphState.Playing: { + // break; + // } + //} + BeginInvoke((Action)(() => { + if (Disposing || IsDisposed || m_play == null) + return; + if (!trackBarAtUser) + trackBar1.Value = m_play.CurrentTC.ZeroBasedFrames; + textCurrentTC.Text = m_play.CurrentTC.ToString(); + labelStatus.Text = m_play.State.ToString().ToUpper(); + })); + } + + + private void Form1_DragEnter(object sender, DragEventArgs e) { + if (e.Data.GetDataPresent(DataFormats.FileDrop)) { + string[] files = (string[])e.Data.GetData(DataFormats.FileDrop); + if (files.Length == 1) + e.Effect = DragDropEffects.Copy; + } + } + + public void Open(FileInfo fileInfo) { + this.Text = fileInfo.Name; + selectedFile = fileInfo.FullName; + if (m_play != null && selectedFile != m_mediaDescription.FileName) { + m_play.Stop(); + m_play.Dispose(); + m_play = null; + } + cueue(); + BringToFront(); + Activate(); + } + + private void Form1_DragDrop(object sender, DragEventArgs e) { + string[] files = (string[])e.Data.GetData(DataFormats.FileDrop); + FileInfo fileInfo = new FileInfo(files[0]); + Open(fileInfo); + ShowFirstFrame(); + } + + private void panel1_MouseDown(object sender, MouseEventArgs e) { + if (e.Button == MouseButtons.Left) { + DateTime currentClick = DateTime.Now; + if ((currentClick - lastClick).TotalMilliseconds < 300) { + m_play.ToggleFullscreen(); + Debug.WriteLine("Fullscreen"); + } else + lastClick = currentClick; + } + + if (e.Button == MouseButtons.Right) { + FlexibleMessageBox.Show(m_play.MediaDescription.Description); + } + } + + private void panel1_SizeChanged(object sender, EventArgs e) { + if (m_play != null) + m_play.UpdateVideoWindow(panelVideo); + } + + private void trackBar1_MouseDown(object sender, MouseEventArgs e) { + trackBarAtUser = true; + lastClick = DateTime.Now; + } + + private void trackBar1_MouseUp(object sender, MouseEventArgs e) { + if (trackBarAtUser) { + trackBarAtUser = false; + /* + DateTime currentClick = DateTime.Now; + if ((currentClick - lastClick).TotalMilliseconds < 300) { + double absoluteMouse = (double)e.X / trackBar1.Width; + int seek = (int)Math.Round(trackBar1.Maximum * absoluteMouse); + m_play.Seek(seek); + } else { + if (m_play != null) + m_play.Seek(trackBar1.Value); + else + trackBar1.Value = 0; + } + */ + if (m_play != null) + m_play.Seek(trackBar1.Value); + else + trackBar1.Value = 0; + } + } + + private void btnPlay_Click(object sender, EventArgs e) { + if (m_play != null && m_play.State != GraphState.Playing) + m_play.Play(); + } + + private void btnStop_Click(object sender, EventArgs e) { + if (m_play != null && m_play.State != GraphState.Stopped) { + m_play.Stop(); + } + } + + private void btnPause_Click(object sender, EventArgs e) { + if (m_play != null && m_play.State != GraphState.Paused) + m_play.Pause(); + } + + + private void PlayerForm_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e) { + if (e.KeyCode == Keys.Left || e.KeyCode == Keys.Right || e.KeyCode == Keys.Space || e.KeyCode == Keys.Escape) { + e.IsInputKey = true; + } + } + + private void DisableHotKeysDefaults(Control.ControlCollection controls) { + foreach (Control control in controls) { + control.PreviewKeyDown += new PreviewKeyDownEventHandler(PlayerForm_PreviewKeyDown); + if (control.HasChildren) + DisableHotKeysDefaults(control.Controls); + } + } + + private void PlayerForm_Load(object sender, EventArgs e) { + DisableHotKeysDefaults(this.Controls); + InterceptKeys.Start(); + InterceptKeys.GlobalKeyEvent += HandleFullscreenHotKey; + + bsSegments.DataSource = segments; + dgSegments.AutoGenerateColumns = true; + + if (SegmentEditor) { + splitContainer1.Panel2Collapsed = false; + splitContainer1.Panel2.Show(); + } else { + splitContainer1.Panel2Collapsed = true; + splitContainer1.Panel2.Hide(); + } + } + + private void PlayerForm_KeyDown(object sender, KeyEventArgs e) { + if (HandleHotKey(e.KeyCode)) { + e.Handled = true; + e.SuppressKeyPress = true; + } + } + + private bool HandleFullscreenHotKey(Keys keyCode) { + if (m_play == null || !m_play.IsFullscreen()) + return false; + bool result = false; + switch (keyCode) { + case Keys.Left: + case Keys.Right: + result = HandleHotKey(keyCode); + break; + case Keys.Escape: + if (m_play.IsFullscreen()) + m_play.ToggleFullscreen(); + result = true; + break; + } + return result; + } + + private bool HandleHotKey(Keys keyCode) { + if (m_play == null) + return false; + bool result = false; + switch (keyCode) { + case Keys.Left: + if (ModifierKeys.HasFlag(Keys.Control)) { + if (m_play.CurrentTC.ZeroBasedFrames > 4) { + m_play.Pause(); + m_play.Seek(m_play.CurrentTC.ZeroBasedFrames - 5); + } + } else { + if (m_play.CurrentTC.ZeroBasedFrames > 0) { + m_play.Pause(); + m_play.Seek(m_play.CurrentTC.ZeroBasedFrames - 1); + } + } + result = true; + break; + case Keys.Right: + if (ModifierKeys.HasFlag(Keys.Control)) { + if (m_play.CurrentTC.ZeroBasedFrames + 5 <= m_mediaDescription.Duration.Frames) { + m_play.Pause(); + m_play.Seek(m_play.CurrentTC.ZeroBasedFrames + 5); + } + } else { + if (m_play.CurrentTC.ZeroBasedFrames + 1 <= m_mediaDescription.Duration.Frames) { + m_play.Pause(); + m_play.Seek(m_play.CurrentTC.ZeroBasedFrames + 1); + } + } + result = true; + break; + case Keys.Space: + if (m_play.State == GraphState.Playing) + m_play.Pause(); + else + m_play.Play(); + result = true; + break; + } + return result; + } + + private void PlayerForm_FormClosing(object sender, FormClosingEventArgs e) { + if (m_play != null) { + m_play.Stop(); + m_play.Dispose(); + m_play = null; + } + } + + private void PlayerForm_Shown(object sender, EventArgs e) { + if (m_play != null) { + m_play.PlayEvent += new DxPlayEvent(playEvent); + if (AutoStart) + m_play.Play(); + else { + ShowFirstFrame(); + } + } + } + + private void ShowFirstFrame() { + m_play.Play(); + m_play.Pause(); + m_play.Seek(0); + } + + private void PlayerForm_FormClosed(object sender, FormClosedEventArgs e) { + InterceptKeys.Stop(); + } + + private void OnDefineOneSegmentClick(object sender, EventArgs e) { + MovieSegment segment = new MovieSegment() { + TCIn = new Timecode(m_mediaDescription.FirstFrame), + TCOut = new Timecode(m_mediaDescription.FirstFrame, m_mediaDescription.Duration) + }; + segments.Add(segment); + } + + private void OnSplitSegmentAtCurrentPositionClick(object sender, EventArgs e) { + + MovieSegment segment = segments.Where(s => m_play.CurrentTC.Frames > s.TCIn.Frames && m_play.CurrentTC.Frames < s.TCOut.Frames).FirstOrDefault(); + if (segment == null) + return; + segments.Remove(segment); + MovieSegment lSegment = new MovieSegment() { + TCIn = segment.TCIn, + TCOut = new Timecode(m_play.CurrentTC) + }; + lSegment.TCOut.Set(m_play.CurrentTC.ZeroBasedFrames); + segments.Add(lSegment); + + MovieSegment hSegment = new MovieSegment() { + TCIn = new Timecode(m_play.CurrentTC), + TCOut = segment.TCOut + }; + hSegment.TCIn.Set(m_play.CurrentTC.ZeroBasedFrames + 1); + segments.Add(hSegment); + + } + + } +} diff --git a/client/DxPlay/PlayerForm.resx b/client/DxPlay/PlayerForm.resx new file mode 100644 index 00000000..bc8fe732 --- /dev/null +++ b/client/DxPlay/PlayerForm.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 + + + 184, 17 + + + 17, 17 + + \ No newline at end of file diff --git a/client/DxPlay/Program.cs b/client/DxPlay/Program.cs new file mode 100644 index 00000000..4e91da20 --- /dev/null +++ b/client/DxPlay/Program.cs @@ -0,0 +1,24 @@ +using DxPlay; +using System; +using System.Diagnostics; +using System.Windows.Forms; + +namespace Maestro { + static class Program { + /// + /// The main entry point for the application. + /// + [STAThread] + static void Main() { + AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(MyHandler); + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + Application.Run(new PlayerForm()); + } + + private static void MyHandler(object sender, UnhandledExceptionEventArgs e) { + Debug.WriteLine("Unhandled exception: " + e.ExceptionObject); + } + + } +} diff --git a/client/DxPlay/Properties/AssemblyInfo.cs b/client/DxPlay/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..177a4f0e --- /dev/null +++ b/client/DxPlay/Properties/AssemblyInfo.cs @@ -0,0 +1,58 @@ +using System.Reflection; +using System.Runtime.CompilerServices; + +// +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +// +[assembly: AssemblyTitle("")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("")] +[assembly: AssemblyCopyright("")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Revision and Build Numbers +// by using the '*' as shown below: + +[assembly: AssemblyVersion("1.0.*")] + +// +// In order to sign your assembly you must specify a key to use. Refer to the +// Microsoft .NET Framework documentation for more information on assembly signing. +// +// Use the attributes below to control which key is used for signing. +// +// Notes: +// (*) If no key is specified, the assembly is not signed. +// (*) KeyName refers to a key that has been installed in the Crypto Service +// Provider (CSP) on your machine. KeyFile refers to a file which contains +// a key. +// (*) If the KeyFile and the KeyName values are both specified, the +// following processing occurs: +// (1) If the KeyName can be found in the CSP, that key is used. +// (2) If the KeyName does not exist and the KeyFile does exist, the key +// in the KeyFile is installed into the CSP and used. +// (*) In order to create a KeyFile, you can use the sn.exe (Strong Name) utility. +// When specifying the KeyFile, the location of the KeyFile should be +// relative to the project output directory which is +// %Project Directory%\obj\. For example, if your KeyFile is +// located in the project directory, you would specify the AssemblyKeyFile +// attribute as [assembly: AssemblyKeyFile("..\\..\\mykey.snk")] +// (*) Delay Signing is an advanced option - see the Microsoft .NET Framework +// documentation for more information on this. +// +[assembly: AssemblyDelaySign(false)] +[assembly: AssemblyKeyFile("")] +[assembly: AssemblyKeyName("")] diff --git a/client/DxPlay/Properties/Resources.Designer.cs b/client/DxPlay/Properties/Resources.Designer.cs new file mode 100644 index 00000000..35fa24ad --- /dev/null +++ b/client/DxPlay/Properties/Resources.Designer.cs @@ -0,0 +1,103 @@ +//------------------------------------------------------------------------------ +// +// 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 DxPlay.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", "4.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + public 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)] + public static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("DxPlay.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)] + public static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + public static System.Drawing.Bitmap lgs { + get { + object obj = ResourceManager.GetObject("lgs", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + public static System.Drawing.Bitmap Pause { + get { + object obj = ResourceManager.GetObject("Pause", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + public static System.Drawing.Bitmap Play { + get { + object obj = ResourceManager.GetObject("Play", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + public static System.Drawing.Bitmap Stop { + get { + object obj = ResourceManager.GetObject("Stop", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + } +} diff --git a/client/DxPlay/Properties/Resources.resx b/client/DxPlay/Properties/Resources.resx new file mode 100644 index 00000000..0437d4d7 --- /dev/null +++ b/client/DxPlay/Properties/Resources.resx @@ -0,0 +1,133 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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\lgs.jpg;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\Pause.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\Play.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\Stop.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + \ No newline at end of file diff --git a/client/DxPlay/Resources/Pause.png b/client/DxPlay/Resources/Pause.png new file mode 100644 index 00000000..983cab7a Binary files /dev/null and b/client/DxPlay/Resources/Pause.png differ diff --git a/client/DxPlay/Resources/Play.png b/client/DxPlay/Resources/Play.png new file mode 100644 index 00000000..eb023d1d Binary files /dev/null and b/client/DxPlay/Resources/Play.png differ diff --git a/client/DxPlay/Resources/Stop.png b/client/DxPlay/Resources/Stop.png new file mode 100644 index 00000000..8490e75c Binary files /dev/null and b/client/DxPlay/Resources/Stop.png differ diff --git a/client/DxPlay/Resources/lgs.jpg b/client/DxPlay/Resources/lgs.jpg new file mode 100644 index 00000000..0905e9cf Binary files /dev/null and b/client/DxPlay/Resources/lgs.jpg differ diff --git a/client/DxPlay/SMTPETimeCode/Enums.cs b/client/DxPlay/SMTPETimeCode/Enums.cs new file mode 100644 index 00000000..7fd56580 --- /dev/null +++ b/client/DxPlay/SMTPETimeCode/Enums.cs @@ -0,0 +1,44 @@ +using System; +// ReSharper disable InconsistentNaming + +namespace DxPlay.SMTPETimeCode { + public enum FrameRate + { + /// + /// SMPTE 23.98frames/sec. + /// + fps23_98, + /// + /// SMPTE 24frames/sec. + /// + fps24, + /// + /// SMPTE 25frames/sec. + /// + fps25, + /// + /// SMPTE 29.97frames/sec. + /// + fps29_97, + /// + /// SMPTE 30frames/sec. + /// + fps30, + /// + /// SMPTE 50frames/sec. + /// + fps50, + /// + /// SMPTE 59.94frames/sec. + /// + fps59_94, + /// + /// SMPTE 60frames/sec. + /// + fps60, + /// + /// milliseconds + /// + msec + } +} diff --git a/client/DxPlay/SMTPETimeCode/Extensions.cs b/client/DxPlay/SMTPETimeCode/Extensions.cs new file mode 100644 index 00000000..843853ce --- /dev/null +++ b/client/DxPlay/SMTPETimeCode/Extensions.cs @@ -0,0 +1,30 @@ +using System; + +namespace DxPlay.SMTPETimeCode { + internal static class Extensions + { + public static int ToInt(this FrameRate frameRate) + { + switch (frameRate) + { + case FrameRate.fps23_98: + case FrameRate.fps24: + return 24; + case FrameRate.fps25: + return 25; + case FrameRate.fps29_97: + case FrameRate.fps30: + return 30; + case FrameRate.fps50: + return 50; + case FrameRate.fps59_94: + case FrameRate.fps60: + return 60; + case FrameRate.msec: + return 1000; + default: + throw new ArgumentOutOfRangeException(nameof(frameRate), frameRate, null); + } + } + } +} diff --git a/client/DxPlay/SMTPETimeCode/TimeCode.cs b/client/DxPlay/SMTPETimeCode/TimeCode.cs new file mode 100644 index 00000000..fbc5d5c4 --- /dev/null +++ b/client/DxPlay/SMTPETimeCode/TimeCode.cs @@ -0,0 +1,146 @@ +using System; +using System.Text.RegularExpressions; + +namespace DxPlay.SMTPETimeCode { + public class Timecode + { + public static Timecode FromFrames(int totalFrames, FrameRate frameRate, bool isDropFrame) + { + FrameRateSanityCheck(frameRate, isDropFrame); + + var tc = new Timecode(frameRate, isDropFrame) {TotalFrames = totalFrames}; + tc.UpdateByTotalFrames(); + return tc; + } + + private const string TimeCodePattern = @"^(?[0-2][0-9]):(?[0-5][0-9]):(?[0-5][0-9])[:|;|\.](?[0-9]{2,3})$"; + + public static Timecode FromString(string input, FrameRate frameRate, bool isDropFrame) + { + if (string.IsNullOrEmpty(input)) + { + throw new ArgumentNullException(nameof(input)); + } + FrameRateSanityCheck(frameRate, isDropFrame); + + var tcRegex = new Regex(TimeCodePattern); + var match = tcRegex.Match(input); + if (!match.Success) + { + throw new ArgumentException("Input text was not in valid timecode format.", nameof(input)); + } + + var tc = new Timecode(frameRate, isDropFrame) + { + Hours = int.Parse(match.Groups["hours"].Value), + Minutes = int.Parse(match.Groups["minutes"].Value), + Seconds = int.Parse(match.Groups["seconds"].Value), + Frames = int.Parse(match.Groups["frames"].Value) + }; + tc.UpdateTotalFrames(); + + return tc; + } + + private static void FrameRateSanityCheck(FrameRate frameRate, bool isDropFrame) + { + if (isDropFrame && frameRate != FrameRate.fps29_97 && frameRate != FrameRate.fps59_94) + { + throw new ArgumentException("Dropframe is supported with 29.97 or 59.94 fps.", nameof(isDropFrame)); + } + if (!Enum.IsDefined(typeof(FrameRate), frameRate)) + throw new ArgumentOutOfRangeException(nameof(frameRate), + "Value should be defined in the FrameRate enum."); + } + + private Timecode(FrameRate frameRate, bool isDropFrame) + { + this._isDropFrame = isDropFrame; + this._rawFrameRate = frameRate; + this._frameRate = frameRate.ToInt(); + } + + private readonly bool _isDropFrame; + + private readonly FrameRate _rawFrameRate; + + private readonly int _frameRate; + + public int TotalFrames { get; private set; } + + public int Hours { get; private set; } + + public int Minutes { get; private set; } + + public int Seconds { get; private set; } + + public int Frames { get; private set; } + + public Timecode AddHours(double hours) + { + throw new NotImplementedException(); + } + + public Timecode AddMinutes(double minutes) + { + throw new NotImplementedException(); + } + + public Timecode AddSeconds(double seconds) + { + throw new NotImplementedException(); + } + + public Timecode AddFrames(uint frames) + { + throw new NotImplementedException(); + } + + public TimeSpan ToTimeSpan() + { + var tc = new Timecode(FrameRate.msec, false) {TotalFrames = this.TotalFrames}; + return new TimeSpan(0, tc.Hours, tc.Minutes, tc.Seconds, tc.Frames); + } + + public override string ToString() + { + var frameSeparator = this._isDropFrame ? ";" : ":"; + return $"{this.Hours:D2}:{this.Minutes:D2}:{this.Seconds:D2}{frameSeparator}{this.Frames:D2}"; + } + + private void UpdateTotalFrames() + { + var frames = this.Hours * 3600; + frames += this.Minutes * 60; + frames += this.Seconds; + frames *= this._frameRate; + frames += this.Frames; + if (this._isDropFrame) + { + var totalMinutes = this.Hours * 60 + this.Minutes; + var dropFrames = this._rawFrameRate == FrameRate.fps29_97 ? 2 : 4; + frames -= dropFrames * (totalMinutes - totalMinutes / 10); + } + this.TotalFrames = frames; + } + + private void UpdateByTotalFrames() + { + var frameCount = this.TotalFrames; + if (this._isDropFrame) + { + // 29.97 - 2, 59.94 - 4 + var dropFrames = this._rawFrameRate == FrameRate.fps29_97 ? 2 : 4; + var dropInHours = 17982 * dropFrames / 2d; + var dropInMinutes = 1798 * dropFrames / 2d; + var h = (int)Math.Floor(this.TotalFrames / dropInHours); + var m = this.TotalFrames % dropInHours; + frameCount += 9 * dropFrames * h + dropFrames * (int)Math.Floor((m - dropFrames) / dropInMinutes); + } + this.Frames = frameCount % this._frameRate; + this.Seconds = (int) Math.Floor(frameCount / (double) this._frameRate) % 60; + this.Minutes = (int) Math.Floor(frameCount / (this._frameRate * 60d)) % 60; + this.Hours = (int)Math.Floor(frameCount / (this._frameRate * 60 * 60d)) % 24; + } + } +} diff --git a/client/DxPlay/SafeHandles.cs b/client/DxPlay/SafeHandles.cs new file mode 100644 index 00000000..b2325a04 --- /dev/null +++ b/client/DxPlay/SafeHandles.cs @@ -0,0 +1,46 @@ +using System; +using System.Collections.Generic; +using System.Security.Permissions; +using System.Text; + +using Microsoft.Win32.SafeHandles; + +namespace DxPlay { + [SecurityPermission(SecurityAction.LinkDemand, UnmanagedCode = true)] + public sealed class SafeObjectHandle : SafeHandleZeroOrMinusOneIsInvalid + { + private SafeObjectHandle() + : base(true) + { } + + internal SafeObjectHandle(IntPtr preexistingHandle, bool ownsHandle) + : base(ownsHandle) + { + base.SetHandle(preexistingHandle); + } + + protected override bool ReleaseHandle() + { + return NativeMethods.CloseHandle(base.handle); + } + } + + [SecurityPermission(SecurityAction.LinkDemand, UnmanagedCode = true)] + public sealed class SafeProcessHandle : SafeHandleZeroOrMinusOneIsInvalid + { + private SafeProcessHandle() + : base(true) + { } + + internal SafeProcessHandle(IntPtr preexistingHandle, bool ownsHandle) + : base(ownsHandle) + { + base.SetHandle(preexistingHandle); + } + + protected override bool ReleaseHandle() + { + return NativeMethods.CloseHandle(base.handle); + } + } +} diff --git a/client/DxPlay/Timecode.cs b/client/DxPlay/Timecode.cs new file mode 100644 index 00000000..2ba4faba --- /dev/null +++ b/client/DxPlay/Timecode.cs @@ -0,0 +1,87 @@ +using System; +using System.Diagnostics; + +namespace DxPlay { + public class Timecode { + private const int MEDIATIME_REFERENCE = 10000000; + internal float frameRate = 0; + internal int startFrame; + private int currentFrame; + + public Timecode() : this("00:00:00:00", 25) { + + } + + public Timecode(Timecode tc) { + startFrame = tc.startFrame; + frameRate = tc.frameRate; + } + + public Timecode(Timecode startTC, Timecode durationTC) { + startFrame = startTC.startFrame; + frameRate = startTC.frameRate; + Set(durationTC.Frames); + } + + public Timecode(String tc, float frameRate) { + this.frameRate = frameRate; + if (String.IsNullOrEmpty(tc) || tc.Length != 11) + return; + int hour = int.Parse(tc.Substring(0, 2)); + int minute = int.Parse(tc.Substring(3, 2)); + int sec = int.Parse(tc.Substring(6, 2)); + int frame = int.Parse(tc.Substring(9, 2)); + startFrame = currentFrame = (int)Math.Ceiling(hour * 60 * 60 * frameRate + minute * 60 * frameRate + sec * frameRate + frame); + //Debug.WriteLine(tc + " ?? " + ToString()); + } + + public override string ToString() { + lock (this) { + float reminder = currentFrame; + int hour = (int)(reminder / (60 * 60 * frameRate)); + reminder = reminder % (60 * 60 * frameRate); + int minute = (int)(reminder / (60 * frameRate)); + reminder = reminder % (60 * frameRate); + int sec = (int)(reminder / frameRate); + reminder = reminder % frameRate; + int frame = (int)reminder; + return String.Format("{0}:{1}:{2}:{3}", hour.ToString("D2"), minute.ToString("D2"), sec.ToString("D2"), frame.ToString("D2")); + //return frame.ToString("D2")); + } + } + + public int Frames { + get { + lock (this) { + return currentFrame; + } + } + } + + public int ZeroBasedFrames { + get { + lock (this) { + return currentFrame - startFrame; + } + } + } + + public bool Set(int frames) { + bool changed = false; + lock (this) { + if (currentFrame != startFrame + frames) + currentFrame = startFrame + frames; + } + return changed; + } + + public bool Set(long mediaTime) { + int frames = (int)Math.Ceiling(mediaTime * frameRate / MEDIATIME_REFERENCE); + return Set(frames); + } + + public bool StartsAtZeroFrame() { + return startFrame == 0; + } + } +} diff --git a/client/DxPlay/URCOMLoader.cs b/client/DxPlay/URCOMLoader.cs new file mode 100644 index 00000000..99378ae9 --- /dev/null +++ b/client/DxPlay/URCOMLoader.cs @@ -0,0 +1,132 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Runtime.InteropServices; +using System.ComponentModel; +using System.IO; +using DirectShowLib; +using System.Text.RegularExpressions; +using DirectShowLib.Utils; + +namespace DxPlay +{ + [ComVisible(true), ComImport(), + Guid("00000001-0000-0000-C000-000000000046"), + InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown)] + public interface IClassFactory + { + [return: MarshalAs(UnmanagedType.I4)] + [PreserveSig] + int CreateInstance( + [In, MarshalAs(UnmanagedType.IUnknown)] object pUnkOuter, + [MarshalAs(UnmanagedType.LPStruct)] Guid riid, + [Out, MarshalAs(UnmanagedType.Interface)] out object obj); + + [return: MarshalAs(UnmanagedType.I4)] + [PreserveSig] + int LockServer( + [MarshalAs(UnmanagedType.Bool), In] bool fLock); + } + + public class URCOMLoader : IDisposable + { + delegate int DllGETCLASSOBJECTInvoker([MarshalAs(UnmanagedType.LPStruct)]Guid clsid, [MarshalAs(UnmanagedType.LPStruct)]Guid iid, [MarshalAs(UnmanagedType.IUnknown)] out object ppv); + static Guid IID_IUnknown = new Guid("00000000-0000-0000-C000-000000000046"); + + bool _disposed = false; + Dictionary _libsLoaded = new Dictionary(); + + public object CreateObjectFromPath(string dllPath, Guid clsid) + { + return CreateObjectFromPath(dllPath, clsid, false); + } + + //http://www.gdcl.co.uk/2011/June/UnregisteredFilters.htm + public object CreateObjectFromPath(string dllPath, Guid clsid, bool setSearchPath) + { + object createdObject = null; + IntPtr lib = IntPtr.Zero; + + if (_libsLoaded.ContainsKey(dllPath)) + lib = _libsLoaded[dllPath]; + else + { + //some dlls have external dependancies, setting the search path to its location should assist with this + if (setSearchPath) + { + NativeMethods.SetDllDirectory(Path.GetDirectoryName(dllPath)); + } + + lib = NativeMethods.LoadLibrary(dllPath); + + if (setSearchPath) + { + NativeMethods.SetDllDirectory(null); + } + } + + if (lib != IntPtr.Zero) + { + //we need to cache the handle so the COM object will work and we can clean up later + _libsLoaded[dllPath] = lib; + IntPtr fnP = NativeMethods.GetProcAddress(lib, "DllGetClassObject"); + if (fnP != IntPtr.Zero) + { + DllGETCLASSOBJECTInvoker fn = Marshal.GetDelegateForFunctionPointer(fnP, typeof(DllGETCLASSOBJECTInvoker)) as DllGETCLASSOBJECTInvoker; + + object pUnk = null; + int hr = fn(clsid, IID_IUnknown, out pUnk); + if (hr >= 0) + { + IClassFactory pCF = pUnk as IClassFactory; + if (pCF != null) + { + hr = pCF.CreateInstance(null, IID_IUnknown, out createdObject); + } + } + } + else + { + throw new Win32Exception(); + } + } + else + { + throw new Win32Exception(); + } + + return createdObject; + } + + #region IDisposable Members + + protected void Dispose(bool disposing) + { + if (!_disposed) + { + if (disposing) + { + + } + + foreach (string key in _libsLoaded.Keys) + { + IntPtr lib = _libsLoaded[key]; + NativeMethods.FreeLibrary(lib); + } + + _libsLoaded = new Dictionary(); + + _disposed = true; + } + } + + public void Dispose() + { + Dispose(true); + GC.SuppressFinalize(this); + } + + #endregion + } +} diff --git a/client/DxPlay/VideoTrackBar.cs b/client/DxPlay/VideoTrackBar.cs new file mode 100644 index 00000000..b85d3e04 --- /dev/null +++ b/client/DxPlay/VideoTrackBar.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace DxPlay { + class VideoTrackBar : TrackBar { + + protected override void OnPaint(PaintEventArgs e) { + base.OnPaint(e); + } + + protected override void OnPaintBackground(PaintEventArgs e) { + base.OnPaintBackground(e); + } + + protected override bool ProcessCmdKey(ref Message msg, Keys keyData) { + return false; + } + + } +} diff --git a/client/DxPlay/app.config b/client/DxPlay/app.config new file mode 100644 index 00000000..d4050983 --- /dev/null +++ b/client/DxPlay/app.config @@ -0,0 +1,3 @@ + + + diff --git a/client/DxPlay/readme.txt b/client/DxPlay/readme.txt new file mode 100644 index 00000000..c9faa92a --- /dev/null +++ b/client/DxPlay/readme.txt @@ -0,0 +1,15 @@ +--------------------------------------------------------------------- +DxPlay + +While the underlying libraries are covered by LGPL, this sample is released +as public domain. It is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY +or FITNESS FOR A PARTICULAR PURPOSE. + +--------------------------------------------------------------------- + +A sample application showing how to play media files (AVI, WMV, etc) and +capture snapshots. + +Note, this sample is primarily meant to show building the graph and capturing +frames. It does NOT connect the audio pin. \ No newline at end of file diff --git a/client/IntegrationTests/App.config b/client/IntegrationTests/App.config new file mode 100644 index 00000000..30273041 --- /dev/null +++ b/client/IntegrationTests/App.config @@ -0,0 +1,15 @@ + + + +
+ + + + + + + + + + + diff --git a/client/IntegrationTests/Db2JsonIT.cs b/client/IntegrationTests/Db2JsonIT.cs new file mode 100644 index 00000000..6b9b66d8 --- /dev/null +++ b/client/IntegrationTests/Db2JsonIT.cs @@ -0,0 +1,91 @@ +using Microsoft.VisualStudio.TestTools.UnitTesting; +using MongoDB.Bson; +using MongoDB.Driver; +using System; +using System.Diagnostics; +using System.Security.Cryptography; +using System.Threading.Tasks; + +namespace IntegrationTests { + [TestClass] + public class Db2JsonTests { + protected static IMongoClient client; + protected static IMongoDatabase database; + + [TestMethod] + public void TestConnect() { + client = new MongoClient("mongodb://db2admin:password@10.228.198.1:27017"); + database = client.GetDatabase("mccache"); + Assert.IsNotNull(database); + } + + // private void createCounter(IMongoDatabase database, string collectionName, long value) { + // MongoCollectionSettings settings = new MongoCollectionSettings() { + // AssignIdOnInsert = true + // }; + + // var collection = database.GetCollection("COUNTERS", settings); + // DBCursor cursor = collection.find(new BasicDBObject(_ID, String.format(SEQ, collectionName))); + // if (cursor.count() == 0) { + // BasicDBObject counter = new BasicDBObject(); + // counter.append(_ID, String.format(FORMAT_SEQ, collectionName)); + // counter.append(SEQ, value); + // collection.insert(counter); + // } + // } + + // public long getNextSequence(string collectionName) { + // createCounter(collectionName, 0L); + // DBCollection counters = db.getCollection(COUNTERS); + // BasicDBObject searchQuery = new BasicDBObject(_ID, String.format(FORMAT_SEQ, collectionName)); + // BasicDBObject increase = new BasicDBObject(SEQ, 1L); + // BasicDBObject updateQuery = new BasicDBObject(INoSQLMongoBase.INC, increase); + // DBObject result = counters.findAndModify(searchQuery, null, null, false, updateQuery, true, false); + // if (result instanceof BasicDBObject) + //return ((BasicDBObject)result).getLong(SEQ); + // return Long.valueOf(result.get(SEQ).toString()); + // } + + public class Post { + public Oid Id { get; private set; } + public string Title { get; set; } + public string Body { get; set; } + } + + [TestMethod] + public void TestInsert() { + client = new MongoClient("mongodb://db2admin:password@10.228.198.1:27017"); + database = client.GetDatabase("mccache"); + var collection = database.GetCollection("test").AsQueryable(); + foreach (var i in collection) { + Debug.WriteLine(i); + } + + var document = new BsonDocument + { + { "name", "Manhattan" }, + { "title", "Italian" } + }; + + //try { + // await collection.InsertOneAsync(document); + //} + //catch (Exception ex) { + // Debug.WriteLine(ex.Message); + //} + //var filter = new BsonDocument(); + //var count = 0; + //using (var cursor = await collection.FindAsync(filter)) { + // while (await cursor.MoveNextAsync()) { + // var batch = cursor.Current; + // foreach (var doc in batch) { + // // process document + // count++; + // } + // } + //} + + } + + } +} diff --git a/client/IntegrationTests/IntegrationTests.csproj b/client/IntegrationTests/IntegrationTests.csproj new file mode 100644 index 00000000..88437a5b --- /dev/null +++ b/client/IntegrationTests/IntegrationTests.csproj @@ -0,0 +1,126 @@ + + + + + Debug + AnyCPU + {4A61E975-F8DB-4BBF-BEFF-72FE67B2C08B} + Library + Properties + IntegrationTests + IntegrationTests + v4.6.1 + 512 + {3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + 15.0 + $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) + $(ProgramFiles)\Common Files\microsoft shared\VSTT\$(VisualStudioVersion)\UITestExtensionPackages + False + UnitTest + + + SAK + SAK + SAK + SAK + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + ..\packages\MSTest.TestFramework.1.1.11\lib\net45\Microsoft.VisualStudio.TestPlatform.TestFramework.dll + + + ..\packages\MSTest.TestFramework.1.1.11\lib\net45\Microsoft.VisualStudio.TestPlatform.TestFramework.Extensions.dll + + + ..\packages\MongoDB.Bson.2.4.4\lib\net45\MongoDB.Bson.dll + + + ..\packages\MongoDB.Driver.2.4.4\lib\net45\MongoDB.Driver.dll + + + ..\packages\MongoDB.Driver.Core.2.4.4\lib\net45\MongoDB.Driver.Core.dll + + + ..\packages\Newtonsoft.Json.10.0.3\lib\net45\Newtonsoft.Json.dll + + + ..\packages\RestSharp.105.2.3\lib\net46\RestSharp.dll + + + + + ..\packages\System.Runtime.InteropServices.RuntimeInformation.4.0.0\lib\net45\System.Runtime.InteropServices.RuntimeInformation.dll + + + + + + + + + + + + + + + + + + PreserveNewest + + + + + + {0b44b3d7-52d7-4c0e-9b1c-f48ceeda36fe} + DxPlay + + + {baf3e174-5d82-40fa-9e62-8c76adbea1e4} + Maestro + + + {cefd0348-ded4-453e-bf3a-0b52f8890ab3} + MediaCubeClient + + + {8cc7c930-9dbf-487b-aed5-776937a649d5} + OctopusClient + + + {a7a21311-cb0e-465f-8ad6-829faf093f00} + TrafficClient + + + + + + + + + + This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. + + + + + + \ No newline at end of file diff --git a/client/IntegrationTests/IntegrationTests.csproj.vspscc b/client/IntegrationTests/IntegrationTests.csproj.vspscc new file mode 100644 index 00000000..feffdeca --- /dev/null +++ b/client/IntegrationTests/IntegrationTests.csproj.vspscc @@ -0,0 +1,10 @@ +"" +{ +"FILE_VERSION" = "9237" +"ENLISTMENT_CHOICE" = "NEVER" +"PROJECT_FILE_RELATIVE_PATH" = "" +"NUMBER_OF_EXCLUDED_FILES" = "0" +"ORIGINAL_PROJECT_FILE_PATH" = "" +"NUMBER_OF_NESTED_PROJECTS" = "0" +"SOURCE_CONTROL_SETTINGS_PROVIDER" = "PROVIDER" +} diff --git a/client/IntegrationTests/JobEngineIT.cs b/client/IntegrationTests/JobEngineIT.cs new file mode 100644 index 00000000..384d81c2 --- /dev/null +++ b/client/IntegrationTests/JobEngineIT.cs @@ -0,0 +1,70 @@ +using Microsoft.VisualStudio.TestTools.UnitTesting; +using JobEngineClient; +using System.Net; +using Model; +using System; + +namespace IntegrationTests { + [TestClass] + public class JobEngineTests { + + [TestInitialize] + public void initialize() { + ServicePointManager.ServerCertificateValidationCallback += (sender, certificate, chain, sslPolicyErrors) => true; + } + + + [TestMethod] + public void TestCreate() { + JobEngineAPI client = new JobEngineAPI("http://localhost:8080/services/rest/jobengine/", null, null, 100); + + WorkflowAction item = new WorkflowAction(); + item.description = "description"; + item.source = "source"; + item.destination = "destination"; + item.houseId = "houseId"; + item.tag = "tag"; + item.touched = DateTime.Now; + item.started = DateTime.Now; + item.finished = DateTime.Now; + var actual = client.Create(item); + } + + [TestMethod] + public void TestCreateMany() { + JobEngineAPI client = new JobEngineAPI("http://localhost:8080/services/rest/jobengine/", null, null, 100); + + for (int i = 0; i < 10; i++) { + WorkflowAction item = new WorkflowAction(); + item.description = "description"; + item.source = "source"; + item.destination = "destination"; + item.houseId = "BBBBB"; + item.tag = "INGEST"; + item.touched = DateTime.Now; + item.started = DateTime.Now; + item.finished = DateTime.Now.AddMinutes(5 * i); + var actual = client.Create(item); + } + + for (int i = 0; i < 10; i++) { + WorkflowAction item = new WorkflowAction(); + item.description = "description"; + item.source = "source"; + item.destination = "destination"; + item.houseId = "AAAAA"; + item.tag = "ARCHIVE"; + item.touched = DateTime.Now; + item.started = DateTime.Now; + item.finished = DateTime.Now.AddHours(-5).AddMinutes(i); + var actual = client.Create(item); + } + } + + [TestMethod] + public void TestItem() { + JobEngineAPI client = new JobEngineAPI("http://localhost:8080/services/rest/jobengine/", null, null, 100); + client.Item(); + } + } +} diff --git a/client/IntegrationTests/MaestroIT.cs b/client/IntegrationTests/MaestroIT.cs new file mode 100644 index 00000000..e9ef00c2 --- /dev/null +++ b/client/IntegrationTests/MaestroIT.cs @@ -0,0 +1,26 @@ +using Maestro.Configuration; +using Maestro.Targets; +using Microsoft.VisualStudio.TestTools.UnitTesting; +using System; + +namespace IntegrationTests { + [TestClass] + public class MaestroTests { + + [TestMethod] + public void TestFTPTarget() { + Target configuration = new Target() { + Remote = new Connection() { + Address = new Uri("ftp://localhost:21/watch"), + UserName = "dani", + Password = "dani", + }, + OutputFormat = "{0}_{1}_{2}" + }; + //todo utolsó paraméterként szegmens lista átadása + FTPTargetProcessor sut = new FTPTargetProcessor(null, null, configuration, @"c:\tmp\watch\tcdrone.MXF", "000000", null); + sut.Execute(); + } + + } +} diff --git a/client/IntegrationTests/MediaCubeClientIT.cs b/client/IntegrationTests/MediaCubeClientIT.cs new file mode 100644 index 00000000..33a33391 --- /dev/null +++ b/client/IntegrationTests/MediaCubeClientIT.cs @@ -0,0 +1,47 @@ +using Microsoft.VisualStudio.TestTools.UnitTesting; +using IO.Swagger.Api; +using IO.Swagger.Model; +using System.Diagnostics; +using System.Net; +using NexioClient; +using System.Threading; +using Newtonsoft.Json.Linq; +using System.Linq; + +namespace IntegrationTests { + [TestClass] + public class MediaCubeAPITests { + + [ClassInitialize] + static public void ClassInitialize(TestContext context) { + ServicePointManager.ServerCertificateValidationCallback += (s, c, ch, e) => true; + } + + [TestMethod] + public void TestLoginLogout() { + DefaultApi sut = new DefaultApi("https://localhost:8443/rest/service"); + UserInfo result = sut.LoginPost(new LoginParameters() { Username = "admin", Password = "admin" }); + Assert.IsNotNull(result); + Debug.WriteLine("Logged in"); + sut.MasLogoutGet(); + } + + [TestMethod] + public void TestWebSocket() { + CountdownEvent cde = new CountdownEvent(1); + NexioAPI ws = new NexioAPI("ws://localhost:8080/services/nexio"); + ws.Open((sender, e) => { + JObject resultObject = JObject.Parse(e.Data); + JToken resultList = JToken.Parse(resultObject.GetValue("data").ToString()); + resultList.Children().First().ToList().ForEach(d => { + Debug.WriteLine(d["longnameid"]); + }); + cde.Signal(); + }); + ws.GetListAsync(); + cde.Wait(); + ws.Close(); + } + + } +} diff --git a/client/IntegrationTests/OctopusIT.cs b/client/IntegrationTests/OctopusIT.cs new file mode 100644 index 00000000..0c7ce2fc --- /dev/null +++ b/client/IntegrationTests/OctopusIT.cs @@ -0,0 +1,28 @@ +using Microsoft.VisualStudio.TestTools.UnitTesting; +using MongoDB.Bson; +using MongoDB.Bson.Serialization; +using OctopusClient; +using RestSharp; +using System; +using System.Diagnostics; +using System.Linq; +using System.Net; + +namespace IntegrationTests { + [TestClass] + public class OctopusTests { + + [TestInitialize] + public void initialize() { + ServicePointManager.ServerCertificateValidationCallback += (sender, certificate, chain, sslPolicyErrors) => true; + } + + + [TestMethod] + public void TestGetRundowns() { + OctopusAPI client = new OctopusAPI("http://localhost:8080/rest/services/octopus/", null, null, 100); + var actual = client.GetRundowns(DateTime.Now); + } + + } +} diff --git a/client/IntegrationTests/PlanAIRTests.cs b/client/IntegrationTests/PlanAIRTests.cs new file mode 100644 index 00000000..a4e26b69 --- /dev/null +++ b/client/IntegrationTests/PlanAIRTests.cs @@ -0,0 +1,63 @@ +using Microsoft.VisualStudio.TestTools.UnitTesting; +using TrafficClient; +using System.Collections.Generic; + +namespace IntegrationTests { + [TestClass] + public class PlanAIRTests { + + private const string CONNECTION_STRING = "Data Source=folkloredb.hu\\sql08,33860;Initial Catalog=CLArchiveTF_0;Persist Security Info=True;"; + private const string USER_NAME = "MAM"; + private const string PASSWORD = "Echotv.hu"; + private const int TIMEOUT = 5; + private const int ITEM_ID = 33686; + + private TrafficAPI sut; + + [TestInitialize] + public void initialize() { + sut = new TrafficAPI(CONNECTION_STRING, USER_NAME, PASSWORD, TIMEOUT); + } + + [TestMethod] + public void GetSegmentReadyTest() { + //Exercise + List actual = sut.GetSegmentReady(ITEM_ID); + + //Verify + Assert.IsTrue(actual.Count > 0); + } + + [TestMethod] + public void AddSegmentToKopiaTest() { + //Fixture + Segment segment = new Segment() { Comment = "Test", Optional = true, TCIn = 1000, TCOut = 2000}; + + //Fixture + sut.AddSegmentToCopia(ITEM_ID, segment.Comment, segment.TCIn, segment.TCOut, segment.Optional); + } + + [TestMethod] + public void DeletesegmentsTest() { + + //Exercise + sut.DeleteSegments(ITEM_ID); + } + + [TestMethod] + public void DeleteSegmentTest() { + const int segmentID = 82454; + + //Exercise + sut.DeleteSegment(ITEM_ID, segmentID); + } + + [TestMethod] + public void TestGetList() { + //TrafficAPI sut = new TrafficAPI(); + //var result = sut.GetList(); + //Assert.IsNotNull(result); + } + + } +} diff --git a/client/IntegrationTests/Properties/AssemblyInfo.cs b/client/IntegrationTests/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..d1a29905 --- /dev/null +++ b/client/IntegrationTests/Properties/AssemblyInfo.cs @@ -0,0 +1,20 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +[assembly: AssemblyTitle("IntegrationTests")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("IntegrationTests")] +[assembly: AssemblyCopyright("Copyright © 2017")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +[assembly: ComVisible(false)] + +[assembly: Guid("4a61e975-f8db-4bbf-beff-72fe67b2c08b")] + +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/client/IntegrationTests/TimecodeTests.cs b/client/IntegrationTests/TimecodeTests.cs new file mode 100644 index 00000000..4720f407 --- /dev/null +++ b/client/IntegrationTests/TimecodeTests.cs @@ -0,0 +1,41 @@ +using DxPlay; +using Microsoft.VisualStudio.TestTools.UnitTesting; +using MongoDB.Bson; +using MongoDB.Driver; +using System; +using System.Diagnostics; +using System.Security.Cryptography; +using System.Threading.Tasks; + +namespace IntegrationTests { + [TestClass] + public class TimecodeTests { + + [TestMethod] + public void TestEmpty() { + Timecode sut = new Timecode(); + Assert.AreEqual(0, sut.Frames); + Assert.AreEqual(0, sut.ZeroBasedFrames); + Assert.AreEqual("00:00:00:00", sut.ToString()); + } + + [TestMethod] + public void TestSetBoundchange() { + Timecode sut = new Timecode(); + + for (int i = 1; i < 24; i++) { + sut.Set(i); + Assert.AreEqual(i, sut.Frames); + Assert.AreEqual(i, sut.ZeroBasedFrames); + Assert.AreEqual(String.Format("00:00:00:{0}", i.ToString("D2")), sut.ToString()); + } + + sut.Set(25); + Assert.AreEqual(25, sut.Frames); + Assert.AreEqual(25, sut.ZeroBasedFrames); + Assert.AreEqual("00:00:01:00", sut.ToString()); + + } + + } +} diff --git a/client/IntegrationTests/nlog.config b/client/IntegrationTests/nlog.config new file mode 100644 index 00000000..4fed02b5 --- /dev/null +++ b/client/IntegrationTests/nlog.config @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/client/IntegrationTests/packages.config b/client/IntegrationTests/packages.config new file mode 100644 index 00000000..9d5a51e0 --- /dev/null +++ b/client/IntegrationTests/packages.config @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/client/Maestro/Commons/DataGridViewProgressColumn.cs b/client/Maestro/Commons/DataGridViewProgressColumn.cs new file mode 100644 index 00000000..c8ce994b --- /dev/null +++ b/client/Maestro/Commons/DataGridViewProgressColumn.cs @@ -0,0 +1,62 @@ +using System; +using System.Windows.Forms; +using System.Drawing; +using System.ComponentModel; + +namespace Maestro.Commons { + + public class DataGridViewProgressColumn : DataGridViewImageColumn { + public DataGridViewProgressColumn() { + CellTemplate = new DataGridViewProgressCell(); + } + } + + class DataGridViewProgressCell : DataGridViewImageCell { + // Used to make custom cell consistent with a DataGridViewImageCell + static Image emptyImage; + + static DataGridViewProgressCell() { + emptyImage = new Bitmap(1, 1, System.Drawing.Imaging.PixelFormat.Format32bppArgb); + } + + public DataGridViewProgressCell() { + this.ValueType = typeof(int); + } + + protected override object GetFormattedValue(object value, + int rowIndex, ref DataGridViewCellStyle cellStyle, + TypeConverter valueTypeConverter, + TypeConverter formattedValueTypeConverter, + DataGridViewDataErrorContexts context) { + return emptyImage; + } + + protected override void Paint(Graphics g, Rectangle clipBounds, Rectangle cellBounds, int rowIndex, DataGridViewElementStates cellState, object value, object formattedValue, string errorText, DataGridViewCellStyle cellStyle, DataGridViewAdvancedBorderStyle advancedBorderStyle, DataGridViewPaintParts paintParts) { + int progressVal = (int)value; + float percentage = ((float)progressVal / 100.0f); // Need to convert to float before division; otherwise C# returns int which is 0 for anything but 100%. + Brush backColorBrush = new SolidBrush(cellStyle.BackColor); + Brush foreColorBrush = new SolidBrush(cellStyle.ForeColor); + // Draws the cell grid + base.Paint(g, clipBounds, cellBounds, + rowIndex, cellState, value, formattedValue, errorText, + cellStyle, advancedBorderStyle, (paintParts & ~DataGridViewPaintParts.ContentForeground)); + + Brush foreBrush = foreColorBrush; + if (percentage > 0.0) { + // Draw the progress bar and the text + g.FillRectangle(new SolidBrush(Color.FromArgb(163, 189, 242)), cellBounds.X + 2, cellBounds.Y + 2, Convert.ToInt32((percentage * cellBounds.Width - 4)), cellBounds.Height - 4); + } else { + // draw the text + if (this.DataGridView.CurrentRow.Index == rowIndex) + foreBrush = new SolidBrush(cellStyle.SelectionForeColor); + } + String text = String.Format("{0} %", progressVal); + SizeF textSize = g.MeasureString(text, cellStyle.Font); + if (cellStyle.Alignment == DataGridViewContentAlignment.MiddleCenter) { + g.DrawString(text, cellStyle.Font, foreBrush, cellBounds.X + (cellBounds.Width / 2 - textSize.Width / 2), cellBounds.Y + 2); + } + else + g.DrawString(text, cellStyle.Font, foreBrush, cellBounds.X + 6, cellBounds.Y + 2); + } + } +} diff --git a/client/Maestro/Commons/ObjectExtensions.cs b/client/Maestro/Commons/ObjectExtensions.cs new file mode 100644 index 00000000..7d328df9 --- /dev/null +++ b/client/Maestro/Commons/ObjectExtensions.cs @@ -0,0 +1,17 @@ +using System; +using System.Windows.Forms; + +namespace Maestro.Commons { + public static class ObjectExtensions { + + public static void SafeCall(this Control ctrl, Action x) { + if (x != null) { + if (ctrl.InvokeRequired) { + ctrl.BeginInvoke(x); + } else { + x(); + } + } + } + } +} diff --git a/client/Maestro/Configuration/ConfigurationInfo.cs b/client/Maestro/Configuration/ConfigurationInfo.cs new file mode 100644 index 00000000..8d6d7abd --- /dev/null +++ b/client/Maestro/Configuration/ConfigurationInfo.cs @@ -0,0 +1,84 @@ +using Newtonsoft.Json; +using System; +using System.Collections.Generic; +using System.IO; + +namespace Maestro.Configuration { + + public class Loader { + public static ConfigurationInfo Get(string fileName) { + string configuration = File.ReadAllText(fileName); + KnownTypesBinder knownTypesBinder = new KnownTypesBinder { + KnownTypes = new List { typeof(UNCSource), typeof(NEXIOSource), typeof(OctopusMetadata), typeof(TrafficMetadata), typeof(MediaCubeMetadata), } + }; + JsonSerializerSettings settings = new JsonSerializerSettings { + TypeNameHandling = TypeNameHandling.Objects, + SerializationBinder = knownTypesBinder, + //Converters = { new KeysJsonConverter() } + }; + + return JsonConvert.DeserializeObject(configuration, settings); + } + } + + public class ConfigurationInfo { + public bool StartInTray { get; set; } + public bool Active { get; set; } + public string Title { get; set; } + public bool IsAdmin { get; set; } + public Player Player { get; set; } + public Source Source { get; set; } + public MetadataProvider[] Metadatas { get; set; } + public Target[] Targets { get; set; } + } + + public class Player { + public bool Enabled { get; set; } + public bool AutoStart { get; set; } + public bool SegmentEditor { get; set; } + } + + public class Target { + public string Label { get; set; } + public string Processor { get; set; } + public string OutputFormat { get; set; } + public bool FileNameOverride { get; set; } + public int KillDateDays { get; set; } + public Connection Remote { get; set; } + public bool SaveSegments { get; set; } + public bool CreateSubFolder { get; set; } + public string Tag { get; set; } + } + + public class Connection { + //[JsonConverter(typeof(KeysJsonConverter))] + public Uri Address { get; set; } + public string UserName { get; set; } + public string Password { get; set; } + public int Timeout { get; set; } + } + + public class Source { + public Connection Local { get; set; } + public Connection Remote { get; set; } + } + + public class UNCSource : Source { + } + + public class NEXIOSource : Source { + } + + public class MetadataProvider { + public Connection Server { get; set; } + } + + public class OctopusMetadata : MetadataProvider { + } + + public class TrafficMetadata : MetadataProvider { + } + + public class MediaCubeMetadata : MetadataProvider { + } +} diff --git a/client/Maestro/Configuration/KeysJsonConverter.cs b/client/Maestro/Configuration/KeysJsonConverter.cs new file mode 100644 index 00000000..c65c2bd8 --- /dev/null +++ b/client/Maestro/Configuration/KeysJsonConverter.cs @@ -0,0 +1,23 @@ +using Newtonsoft.Json; +using System; + +namespace Maestro.Configuration { + public class KeysJsonConverter : JsonConverter { + public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) { + } + + public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { + return new Uri(serializer.Deserialize(reader, objectType)?.ToString()); + } + + public override bool CanConvert(Type objectType) { + return true; + } + + public override bool CanRead { + get { + return true; + } + } + } +} diff --git a/client/Maestro/Configuration/KnownTypesBinder.cs b/client/Maestro/Configuration/KnownTypesBinder.cs new file mode 100644 index 00000000..19b41f51 --- /dev/null +++ b/client/Maestro/Configuration/KnownTypesBinder.cs @@ -0,0 +1,19 @@ +using Newtonsoft.Json.Serialization; +using System; +using System.Collections.Generic; +using System.Linq; + +namespace Maestro.Configuration { + public class KnownTypesBinder : ISerializationBinder { + public IList KnownTypes { get; set; } + + public Type BindToType(string assemblyName, string typeName) { + return KnownTypes.SingleOrDefault(t => t.Name == typeName); + } + + public void BindToName(Type serializedType, out string assemblyName, out string typeName) { + assemblyName = null; + typeName = serializedType.Name; + } + } +} diff --git a/client/Maestro/Maestro.csproj b/client/Maestro/Maestro.csproj new file mode 100644 index 00000000..90a16623 --- /dev/null +++ b/client/Maestro/Maestro.csproj @@ -0,0 +1,239 @@ + + + + + Debug + AnyCPU + {BAF3E174-5D82-40FA-9E62-8C76ADBEA1E4} + WinExe + Maestro + Maestro + v4.6.1 + 512 + SAK + SAK + SAK + SAK + + + + AnyCPU + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + false + true + + + AnyCPU + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + false + + + + ..\packages\FluentFTP.17.5.8\lib\net45\FluentFTP.dll + + + ..\packages\LinkDotNet.MessageBus.0.1.1\lib\LinkDotNet.MessageHandling.dll + + + ..\packages\LinkDotNet.MessageBus.Contracts.0.1.1\lib\LinkDotNet.MessageHandling.Contracts.dll + + + ..\packages\Microsoft.VisualStudio.OLE.Interop.7.10.6070\lib\Microsoft.VisualStudio.OLE.Interop.dll + True + + + ..\packages\Microsoft.VisualStudio.Shell.Interop.7.10.6071\lib\Microsoft.VisualStudio.Shell.Interop.dll + True + + + True + ..\packages\Microsoft.VisualStudio.Shell.Interop.10.0.10.0.30319\lib\Microsoft.VisualStudio.Shell.Interop.10.0.dll + True + + + True + ..\packages\Microsoft.VisualStudio.Shell.Interop.11.0.11.0.61030\lib\Microsoft.VisualStudio.Shell.Interop.11.0.dll + True + + + ..\packages\Microsoft.VisualStudio.Shell.Interop.8.0.8.0.50727\lib\Microsoft.VisualStudio.Shell.Interop.8.0.dll + True + + + ..\packages\Microsoft.VisualStudio.TextManager.Interop.7.10.6070\lib\Microsoft.VisualStudio.TextManager.Interop.dll + True + + + ..\packages\Microsoft.VisualStudio.TextManager.Interop.8.0.8.0.50727\lib\Microsoft.VisualStudio.TextManager.Interop.8.0.dll + True + + + ..\packages\Newtonsoft.Json.10.0.3\lib\net20\Newtonsoft.Json.dll + + + ..\packages\NLog.4.4.11\lib\net45\NLog.dll + + + ..\packages\NLog.Windows.Forms.4.2.3\lib\net35\NLog.Windows.Forms.dll + + + ..\packages\RestSharp.105.2.3\lib\net46\RestSharp.dll + + + + + + + + + + + + + + + + + + + Form + + + Form + + + Component + + + + + Form + + + Splash.cs + + + True + True + StringResources.resx + + + Component + + + + + + + + + + + Form + + + MaestroForm.cs + + + + + + + + + + + + + MaestroForm.cs + Designer + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + True + Resources.resx + True + + + Splash.cs + + + ResXFileCodeGenerator + StringResources.Designer.cs + Designer + + + + Form + + + PreserveNewest + + + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + True + Settings.settings + True + + + PreserveNewest + + + PreserveNewest + + + + + + + + + + + {0b44b3d7-52d7-4c0e-9b1c-f48ceeda36fe} + DxPlay + + + {cefd0348-ded4-453e-bf3a-0b52f8890ab3} + MediaCubeClient + + + {8CC7C930-9DBF-487B-AED5-776937A649D5} + OctopusClient + + + {a7a21311-cb0e-465f-8ad6-829faf093f00} + TrafficClient + + + + + + + + + + + + + \ No newline at end of file diff --git a/client/Maestro/Maestro.csproj.vspscc b/client/Maestro/Maestro.csproj.vspscc new file mode 100644 index 00000000..feffdeca --- /dev/null +++ b/client/Maestro/Maestro.csproj.vspscc @@ -0,0 +1,10 @@ +"" +{ +"FILE_VERSION" = "9237" +"ENLISTMENT_CHOICE" = "NEVER" +"PROJECT_FILE_RELATIVE_PATH" = "" +"NUMBER_OF_EXCLUDED_FILES" = "0" +"ORIGINAL_PROJECT_FILE_PATH" = "" +"NUMBER_OF_NESTED_PROJECTS" = "0" +"SOURCE_CONTROL_SETTINGS_PROVIDER" = "PROVIDER" +} diff --git a/client/Maestro/MaestroForm.Designer.cs b/client/Maestro/MaestroForm.Designer.cs new file mode 100644 index 00000000..1c2301e6 --- /dev/null +++ b/client/Maestro/MaestroForm.Designer.cs @@ -0,0 +1,747 @@ +using Maestro.Properties; + +namespace Maestro { + partial class MaestroForm { + /// + /// 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(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle1 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle2 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle3 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle4 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle8 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle9 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle10 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle5 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle6 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle7 = new System.Windows.Forms.DataGridViewCellStyle(); + this.groupSource = new System.Windows.Forms.GroupBox(); + this.dataGridSource = new System.Windows.Forms.DataGridView(); + this.bindingSource = new System.Windows.Forms.BindingSource(this.components); + this.txtSorceFilter = new System.Windows.Forms.TextBox(); + this.tableLayoutPanel2 = new System.Windows.Forms.TableLayoutPanel(); + this.textSelectedSource = new System.Windows.Forms.TextBox(); + this.label1 = new System.Windows.Forms.Label(); + this.buttonMetadata = new System.Windows.Forms.Button(); + this.ctxmActions = new System.Windows.Forms.ContextMenuStrip(this.components); + this.ctxiDefineSegments = new System.Windows.Forms.ToolStripMenuItem(); + this.ctxiModifyArchiveMetadata = new System.Windows.Forms.ToolStripMenuItem(); + this.splitContainer1 = new System.Windows.Forms.SplitContainer(); + this.splitContainer3 = new System.Windows.Forms.SplitContainer(); + this.groupMetadata = new System.Windows.Forms.GroupBox(); + this.tabControl1 = new System.Windows.Forms.TabControl(); + this.tpOctopus = new System.Windows.Forms.TabPage(); + this.octopusIDSelector = new OctopusClient.OctopusIDSelector(); + this.tpTraffic = new System.Windows.Forms.TabPage(); + this.trafficIDSelector = new TrafficClient.TrafficIDSelector(); + this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); + this.labelSelectedMetadata = new System.Windows.Forms.Label(); + this.textSelectedMetadata = new System.Windows.Forms.TextBox(); + this.menuButtonActions = new Maestro.MenuButton(); + this.groupTarget = new System.Windows.Forms.GroupBox(); + this.panelActions = new System.Windows.Forms.TableLayoutPanel(); + this.panel1 = new System.Windows.Forms.Panel(); + this.btnExecute = new System.Windows.Forms.Button(); + this.splitContainer2 = new System.Windows.Forms.SplitContainer(); + this.groupActions = new System.Windows.Forms.GroupBox(); + this.dataGridJobs = new System.Windows.Forms.DataGridView(); + this.columnID = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.columnStarted = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.columnFinished = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.columnInput = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.columnOutput = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.columnProgress = new Maestro.Commons.DataGridViewProgressColumn(); + this.columnStatus = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.bindingSourceJobs = new System.Windows.Forms.BindingSource(this.components); + this.metadataInfoBindingSource = new System.Windows.Forms.BindingSource(this.components); + this.groupSource.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.dataGridSource)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.bindingSource)).BeginInit(); + this.tableLayoutPanel2.SuspendLayout(); + this.ctxmActions.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit(); + this.splitContainer1.Panel1.SuspendLayout(); + this.splitContainer1.Panel2.SuspendLayout(); + this.splitContainer1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer3)).BeginInit(); + this.splitContainer3.Panel1.SuspendLayout(); + this.splitContainer3.Panel2.SuspendLayout(); + this.splitContainer3.SuspendLayout(); + this.groupMetadata.SuspendLayout(); + this.tabControl1.SuspendLayout(); + this.tpOctopus.SuspendLayout(); + this.tpTraffic.SuspendLayout(); + this.tableLayoutPanel1.SuspendLayout(); + this.groupTarget.SuspendLayout(); + this.panel1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).BeginInit(); + this.splitContainer2.Panel1.SuspendLayout(); + this.splitContainer2.Panel2.SuspendLayout(); + this.splitContainer2.SuspendLayout(); + this.groupActions.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.dataGridJobs)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.bindingSourceJobs)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.metadataInfoBindingSource)).BeginInit(); + this.SuspendLayout(); + // + // groupSource + // + this.groupSource.BackColor = System.Drawing.Color.Transparent; + this.groupSource.Controls.Add(this.dataGridSource); + this.groupSource.Controls.Add(this.txtSorceFilter); + this.groupSource.Controls.Add(this.tableLayoutPanel2); + this.groupSource.Dock = System.Windows.Forms.DockStyle.Fill; + this.groupSource.Location = new System.Drawing.Point(0, 0); + this.groupSource.Name = "groupSource"; + this.groupSource.Padding = new System.Windows.Forms.Padding(10); + this.groupSource.Size = new System.Drawing.Size(414, 419); + this.groupSource.TabIndex = 0; + this.groupSource.TabStop = false; + this.groupSource.Text = "Source file"; + this.groupSource.Enter += new System.EventHandler(this.groupBox_Enter); + this.groupSource.Leave += new System.EventHandler(this.groupBox_Leave); + // + // dataGridSource + // + this.dataGridSource.AllowUserToAddRows = false; + this.dataGridSource.AllowUserToDeleteRows = false; + this.dataGridSource.AllowUserToResizeRows = false; + this.dataGridSource.AutoGenerateColumns = false; + this.dataGridSource.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.DisplayedCells; + this.dataGridSource.AutoSizeRowsMode = System.Windows.Forms.DataGridViewAutoSizeRowsMode.DisplayedCells; + this.dataGridSource.BackgroundColor = System.Drawing.Color.White; + this.dataGridSource.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.dataGridSource.CellBorderStyle = System.Windows.Forms.DataGridViewCellBorderStyle.Raised; + dataGridViewCellStyle1.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; + dataGridViewCellStyle1.BackColor = System.Drawing.SystemColors.Control; + dataGridViewCellStyle1.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238))); + dataGridViewCellStyle1.ForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle1.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle1.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle1.WrapMode = System.Windows.Forms.DataGridViewTriState.True; + this.dataGridSource.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle1; + this.dataGridSource.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.dataGridSource.DataSource = this.bindingSource; + dataGridViewCellStyle2.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; + dataGridViewCellStyle2.BackColor = System.Drawing.SystemColors.Window; + dataGridViewCellStyle2.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238))); + dataGridViewCellStyle2.ForeColor = System.Drawing.SystemColors.ControlText; + dataGridViewCellStyle2.SelectionBackColor = System.Drawing.Color.Gainsboro; + dataGridViewCellStyle2.SelectionForeColor = System.Drawing.Color.Black; + dataGridViewCellStyle2.WrapMode = System.Windows.Forms.DataGridViewTriState.False; + this.dataGridSource.DefaultCellStyle = dataGridViewCellStyle2; + this.dataGridSource.Dock = System.Windows.Forms.DockStyle.Fill; + this.dataGridSource.EditMode = System.Windows.Forms.DataGridViewEditMode.EditProgrammatically; + this.dataGridSource.Location = new System.Drawing.Point(10, 43); + this.dataGridSource.Name = "dataGridSource"; + this.dataGridSource.RowHeadersVisible = false; + dataGridViewCellStyle3.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238))); + this.dataGridSource.RowsDefaultCellStyle = dataGridViewCellStyle3; + this.dataGridSource.RowTemplate.DefaultCellStyle.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238))); + this.dataGridSource.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; + this.dataGridSource.Size = new System.Drawing.Size(394, 304); + this.dataGridSource.TabIndex = 0; + this.dataGridSource.CellContentClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.sourceGridView_CellContentClick); + this.dataGridSource.CellEnter += new System.Windows.Forms.DataGridViewCellEventHandler(this.dataGridSource_CellEnter); + this.dataGridSource.CellMouseDoubleClick += new System.Windows.Forms.DataGridViewCellMouseEventHandler(this.dataGridSource_CellMouseDoubleClick); + this.dataGridSource.CellMouseEnter += new System.Windows.Forms.DataGridViewCellEventHandler(this.dataGridSource_CellMouseEnter); + this.dataGridSource.CellMouseLeave += new System.Windows.Forms.DataGridViewCellEventHandler(this.dataGridSource_CellMouseLeave); + this.dataGridSource.CellPainting += new System.Windows.Forms.DataGridViewCellPaintingEventHandler(this.dataGridSource_CellPainting); + this.dataGridSource.SelectionChanged += new System.EventHandler(this.sourceGridView_SelectionChanged); + // + // txtSorceFilter + // + this.txtSorceFilter.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.txtSorceFilter.Dock = System.Windows.Forms.DockStyle.Top; + this.txtSorceFilter.Location = new System.Drawing.Point(10, 23); + this.txtSorceFilter.Name = "txtSorceFilter"; + this.txtSorceFilter.Size = new System.Drawing.Size(394, 20); + this.txtSorceFilter.TabIndex = 13; + this.txtSorceFilter.KeyUp += new System.Windows.Forms.KeyEventHandler(this.textBox1_KeyUp); + // + // tableLayoutPanel2 + // + this.tableLayoutPanel2.ColumnCount = 2; + this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel2.Controls.Add(this.textSelectedSource, 0, 1); + this.tableLayoutPanel2.Controls.Add(this.label1, 0, 0); + this.tableLayoutPanel2.Controls.Add(this.buttonMetadata, 1, 1); + this.tableLayoutPanel2.Dock = System.Windows.Forms.DockStyle.Bottom; + this.tableLayoutPanel2.Location = new System.Drawing.Point(10, 347); + this.tableLayoutPanel2.Margin = new System.Windows.Forms.Padding(0); + this.tableLayoutPanel2.Name = "tableLayoutPanel2"; + this.tableLayoutPanel2.RowCount = 2; + this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel2.Size = new System.Drawing.Size(394, 62); + this.tableLayoutPanel2.TabIndex = 12; + // + // textSelectedSource + // + this.textSelectedSource.BackColor = System.Drawing.SystemColors.ActiveCaption; + this.textSelectedSource.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.textSelectedSource.Dock = System.Windows.Forms.DockStyle.Fill; + this.textSelectedSource.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(238))); + this.textSelectedSource.Location = new System.Drawing.Point(3, 28); + this.textSelectedSource.Name = "textSelectedSource"; + this.textSelectedSource.Size = new System.Drawing.Size(292, 26); + this.textSelectedSource.TabIndex = 10; + this.textSelectedSource.TextChanged += new System.EventHandler(this.OnInfoTextChanged); + // + // label1 + // + this.label1.AutoSize = true; + this.tableLayoutPanel2.SetColumnSpan(this.label1, 2); + this.label1.Dock = System.Windows.Forms.DockStyle.Fill; + this.label1.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238))); + this.label1.Location = new System.Drawing.Point(3, 0); + this.label1.Name = "label1"; + this.label1.Padding = new System.Windows.Forms.Padding(0, 5, 0, 5); + this.label1.Size = new System.Drawing.Size(388, 25); + this.label1.TabIndex = 13; + this.label1.Text = "Selected source"; + // + // buttonMetadata + // + this.buttonMetadata.BackColor = System.Drawing.SystemColors.ButtonFace; + this.buttonMetadata.Dock = System.Windows.Forms.DockStyle.Top; + this.buttonMetadata.Enabled = false; + this.buttonMetadata.FlatStyle = System.Windows.Forms.FlatStyle.Popup; + this.buttonMetadata.Font = new System.Drawing.Font("Microsoft Sans Serif", 10F); + this.buttonMetadata.Location = new System.Drawing.Point(301, 28); + this.buttonMetadata.Name = "buttonMetadata"; + this.buttonMetadata.Size = new System.Drawing.Size(90, 26); + this.buttonMetadata.TabIndex = 14; + this.buttonMetadata.Text = "Metadata"; + this.buttonMetadata.UseVisualStyleBackColor = false; + this.buttonMetadata.Click += new System.EventHandler(this.buttonMetadata_Click); + // + // ctxmActions + // + this.ctxmActions.ImageScalingSize = new System.Drawing.Size(19, 19); + this.ctxmActions.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.ctxiDefineSegments, + this.ctxiModifyArchiveMetadata}); + this.ctxmActions.Name = "contextMenuMetadataActions"; + this.ctxmActions.Size = new System.Drawing.Size(207, 48); + // + // ctxiDefineSegments + // + this.ctxiDefineSegments.Name = "ctxiDefineSegments"; + this.ctxiDefineSegments.Size = new System.Drawing.Size(206, 22); + this.ctxiDefineSegments.Text = "Define segments"; + this.ctxiDefineSegments.Click += new System.EventHandler(this.OnDefineSegmentsClick); + // + // ctxiModifyArchiveMetadata + // + this.ctxiModifyArchiveMetadata.Name = "ctxiModifyArchiveMetadata"; + this.ctxiModifyArchiveMetadata.Size = new System.Drawing.Size(206, 22); + this.ctxiModifyArchiveMetadata.Text = "Modify archive metadata"; + // + // splitContainer1 + // + this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer1.Location = new System.Drawing.Point(0, 0); + this.splitContainer1.Name = "splitContainer1"; + // + // splitContainer1.Panel1 + // + this.splitContainer1.Panel1.Controls.Add(this.groupSource); + // + // splitContainer1.Panel2 + // + this.splitContainer1.Panel2.Controls.Add(this.splitContainer3); + this.splitContainer1.Size = new System.Drawing.Size(1022, 419); + this.splitContainer1.SplitterDistance = 414; + this.splitContainer1.TabIndex = 1; + // + // splitContainer3 + // + this.splitContainer3.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer3.Location = new System.Drawing.Point(0, 0); + this.splitContainer3.Name = "splitContainer3"; + // + // splitContainer3.Panel1 + // + this.splitContainer3.Panel1.Controls.Add(this.groupMetadata); + // + // splitContainer3.Panel2 + // + this.splitContainer3.Panel2.Controls.Add(this.groupTarget); + this.splitContainer3.Size = new System.Drawing.Size(604, 419); + this.splitContainer3.SplitterDistance = 284; + this.splitContainer3.TabIndex = 2; + // + // groupMetadata + // + this.groupMetadata.BackColor = System.Drawing.Color.Transparent; + this.groupMetadata.Controls.Add(this.tabControl1); + this.groupMetadata.Controls.Add(this.tableLayoutPanel1); + this.groupMetadata.Dock = System.Windows.Forms.DockStyle.Fill; + this.groupMetadata.Location = new System.Drawing.Point(0, 0); + this.groupMetadata.Name = "groupMetadata"; + this.groupMetadata.Padding = new System.Windows.Forms.Padding(10); + this.groupMetadata.Size = new System.Drawing.Size(284, 419); + this.groupMetadata.TabIndex = 1; + this.groupMetadata.TabStop = false; + this.groupMetadata.Text = "Metadata"; + this.groupMetadata.Enter += new System.EventHandler(this.groupBox_Enter); + this.groupMetadata.Leave += new System.EventHandler(this.groupBox_Leave); + // + // tabControl1 + // + this.tabControl1.Controls.Add(this.tpOctopus); + this.tabControl1.Controls.Add(this.tpTraffic); + this.tabControl1.Dock = System.Windows.Forms.DockStyle.Fill; + this.tabControl1.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238))); + this.tabControl1.Location = new System.Drawing.Point(10, 23); + this.tabControl1.Name = "tabControl1"; + this.tabControl1.SelectedIndex = 0; + this.tabControl1.Size = new System.Drawing.Size(264, 324); + this.tabControl1.TabIndex = 1; + this.tabControl1.SelectedIndexChanged += new System.EventHandler(this.tabControl1_SelectedIndexChanged); + // + // tpOctopus + // + this.tpOctopus.Controls.Add(this.octopusIDSelector); + this.tpOctopus.Location = new System.Drawing.Point(4, 24); + this.tpOctopus.Name = "tpOctopus"; + this.tpOctopus.Padding = new System.Windows.Forms.Padding(3); + this.tpOctopus.Size = new System.Drawing.Size(256, 296); + this.tpOctopus.TabIndex = 0; + this.tpOctopus.Text = "Octopus"; + this.tpOctopus.UseVisualStyleBackColor = true; + // + // octopusIDSelector + // + this.octopusIDSelector.BackColor = System.Drawing.Color.White; + this.octopusIDSelector.clearCheckBox = null; + this.octopusIDSelector.Disposeabel = false; + this.octopusIDSelector.Dock = System.Windows.Forms.DockStyle.Fill; + this.octopusIDSelector.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238))); + this.octopusIDSelector.IDChangedEvent = null; + this.octopusIDSelector.Location = new System.Drawing.Point(3, 3); + this.octopusIDSelector.Margin = new System.Windows.Forms.Padding(12, 12, 12, 12); + this.octopusIDSelector.MinimumSize = new System.Drawing.Size(200, 300); + this.octopusIDSelector.Name = "octopusIDSelector"; + this.octopusIDSelector.Padding = new System.Windows.Forms.Padding(6); + this.octopusIDSelector.Size = new System.Drawing.Size(250, 300); + this.octopusIDSelector.TabIndex = 1; + // + // tpTraffic + // + this.tpTraffic.Controls.Add(this.trafficIDSelector); + this.tpTraffic.Location = new System.Drawing.Point(4, 24); + this.tpTraffic.Name = "tpTraffic"; + this.tpTraffic.Padding = new System.Windows.Forms.Padding(3); + this.tpTraffic.Size = new System.Drawing.Size(256, 296); + this.tpTraffic.TabIndex = 1; + this.tpTraffic.Text = "Traffic"; + this.tpTraffic.UseVisualStyleBackColor = true; + // + // trafficIDSelector + // + this.trafficIDSelector.AutoSize = true; + this.trafficIDSelector.BackColor = System.Drawing.Color.White; + this.trafficIDSelector.clearCheckBox = null; + this.trafficIDSelector.Dock = System.Windows.Forms.DockStyle.Fill; + this.trafficIDSelector.IDChangedEvent = null; + this.trafficIDSelector.Location = new System.Drawing.Point(3, 3); + this.trafficIDSelector.Margin = new System.Windows.Forms.Padding(4); + this.trafficIDSelector.Name = "trafficIDSelector"; + this.trafficIDSelector.Padding = new System.Windows.Forms.Padding(6); + this.trafficIDSelector.Size = new System.Drawing.Size(250, 290); + this.trafficIDSelector.TabIndex = 0; + // + // tableLayoutPanel1 + // + this.tableLayoutPanel1.ColumnCount = 2; + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel1.Controls.Add(this.labelSelectedMetadata, 0, 0); + this.tableLayoutPanel1.Controls.Add(this.textSelectedMetadata, 0, 1); + this.tableLayoutPanel1.Controls.Add(this.menuButtonActions, 1, 1); + this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Bottom; + this.tableLayoutPanel1.Location = new System.Drawing.Point(10, 347); + this.tableLayoutPanel1.Margin = new System.Windows.Forms.Padding(0); + this.tableLayoutPanel1.Name = "tableLayoutPanel1"; + this.tableLayoutPanel1.RowCount = 2; + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel1.Size = new System.Drawing.Size(264, 62); + this.tableLayoutPanel1.TabIndex = 4; + // + // labelSelectedMetadata + // + this.labelSelectedMetadata.AutoSize = true; + this.tableLayoutPanel1.SetColumnSpan(this.labelSelectedMetadata, 2); + this.labelSelectedMetadata.Dock = System.Windows.Forms.DockStyle.Fill; + this.labelSelectedMetadata.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238))); + this.labelSelectedMetadata.Location = new System.Drawing.Point(3, 0); + this.labelSelectedMetadata.Name = "labelSelectedMetadata"; + this.labelSelectedMetadata.Padding = new System.Windows.Forms.Padding(0, 5, 0, 5); + this.labelSelectedMetadata.Size = new System.Drawing.Size(258, 25); + this.labelSelectedMetadata.TabIndex = 13; + this.labelSelectedMetadata.Text = "Selected metadata"; + // + // textSelectedMetadata + // + this.textSelectedMetadata.BackColor = System.Drawing.SystemColors.ActiveCaption; + this.textSelectedMetadata.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.textSelectedMetadata.Dock = System.Windows.Forms.DockStyle.Fill; + this.textSelectedMetadata.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(238))); + this.textSelectedMetadata.Location = new System.Drawing.Point(3, 28); + this.textSelectedMetadata.Name = "textSelectedMetadata"; + this.textSelectedMetadata.Size = new System.Drawing.Size(162, 26); + this.textSelectedMetadata.TabIndex = 12; + this.textSelectedMetadata.TextChanged += new System.EventHandler(this.OnInfoTextChanged); + // + // menuButtonActions + // + this.menuButtonActions.BackColor = System.Drawing.SystemColors.ButtonFace; + this.menuButtonActions.Dock = System.Windows.Forms.DockStyle.Top; + this.menuButtonActions.FlatStyle = System.Windows.Forms.FlatStyle.Popup; + this.menuButtonActions.Font = new System.Drawing.Font("Microsoft Sans Serif", 10F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238))); + this.menuButtonActions.Location = new System.Drawing.Point(171, 28); + this.menuButtonActions.Menu = this.ctxmActions; + this.menuButtonActions.Name = "menuButtonActions"; + this.menuButtonActions.Size = new System.Drawing.Size(90, 27); + this.menuButtonActions.TabIndex = 14; + this.menuButtonActions.Text = "Actions"; + this.menuButtonActions.UseVisualStyleBackColor = false; + // + // groupTarget + // + this.groupTarget.BackColor = System.Drawing.Color.Transparent; + this.groupTarget.Controls.Add(this.panelActions); + this.groupTarget.Controls.Add(this.panel1); + this.groupTarget.Dock = System.Windows.Forms.DockStyle.Fill; + this.groupTarget.Location = new System.Drawing.Point(0, 0); + this.groupTarget.Name = "groupTarget"; + this.groupTarget.Padding = new System.Windows.Forms.Padding(10); + this.groupTarget.Size = new System.Drawing.Size(316, 419); + this.groupTarget.TabIndex = 0; + this.groupTarget.TabStop = false; + this.groupTarget.Text = "Target action"; + this.groupTarget.Enter += new System.EventHandler(this.groupBox_Enter); + this.groupTarget.Leave += new System.EventHandler(this.groupBox_Leave); + // + // panelActions + // + this.panelActions.AutoScroll = true; + this.panelActions.BackColor = System.Drawing.Color.White; + this.panelActions.ColumnCount = 1; + this.panelActions.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.panelActions.Dock = System.Windows.Forms.DockStyle.Fill; + this.panelActions.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238))); + this.panelActions.Location = new System.Drawing.Point(10, 23); + this.panelActions.Name = "panelActions"; + this.panelActions.Padding = new System.Windows.Forms.Padding(0, 0, 5, 0); + this.panelActions.RowCount = 1; + this.panelActions.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.panelActions.Size = new System.Drawing.Size(296, 324); + this.panelActions.TabIndex = 4; + this.panelActions.MouseClick += new System.Windows.Forms.MouseEventHandler(this.OnTargetPanelsMouseClick); + // + // panel1 + // + this.panel1.BackColor = System.Drawing.Color.Transparent; + this.panel1.Controls.Add(this.btnExecute); + this.panel1.Dock = System.Windows.Forms.DockStyle.Bottom; + this.panel1.Location = new System.Drawing.Point(10, 347); + this.panel1.Name = "panel1"; + this.panel1.Size = new System.Drawing.Size(296, 62); + this.panel1.TabIndex = 5; + this.panel1.MouseClick += new System.Windows.Forms.MouseEventHandler(this.OnTargetPanelsMouseClick); + // + // btnExecute + // + this.btnExecute.BackColor = System.Drawing.SystemColors.ActiveCaption; + this.btnExecute.Dock = System.Windows.Forms.DockStyle.Right; + this.btnExecute.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(238))); + this.btnExecute.Location = new System.Drawing.Point(164, 0); + this.btnExecute.Margin = new System.Windows.Forms.Padding(3, 20, 3, 3); + this.btnExecute.Name = "btnExecute"; + this.btnExecute.Size = new System.Drawing.Size(132, 62); + this.btnExecute.TabIndex = 0; + this.btnExecute.Text = "Execute"; + this.btnExecute.UseVisualStyleBackColor = false; + this.btnExecute.Click += new System.EventHandler(this.OnExecuteClick); + // + // splitContainer2 + // + this.splitContainer2.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer2.Location = new System.Drawing.Point(0, 0); + this.splitContainer2.Name = "splitContainer2"; + this.splitContainer2.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // splitContainer2.Panel1 + // + this.splitContainer2.Panel1.Controls.Add(this.splitContainer1); + // + // splitContainer2.Panel2 + // + this.splitContainer2.Panel2.Controls.Add(this.groupActions); + this.splitContainer2.Size = new System.Drawing.Size(1022, 561); + this.splitContainer2.SplitterDistance = 419; + this.splitContainer2.TabIndex = 2; + // + // groupActions + // + this.groupActions.BackColor = System.Drawing.Color.Transparent; + this.groupActions.Controls.Add(this.dataGridJobs); + this.groupActions.Dock = System.Windows.Forms.DockStyle.Fill; + this.groupActions.Location = new System.Drawing.Point(0, 0); + this.groupActions.Name = "groupActions"; + this.groupActions.Padding = new System.Windows.Forms.Padding(10); + this.groupActions.Size = new System.Drawing.Size(1022, 138); + this.groupActions.TabIndex = 1; + this.groupActions.TabStop = false; + this.groupActions.Text = "Actions"; + this.groupActions.Enter += new System.EventHandler(this.groupBox_Enter); + this.groupActions.Leave += new System.EventHandler(this.groupBox_Leave); + // + // dataGridJobs + // + this.dataGridJobs.AllowUserToAddRows = false; + this.dataGridJobs.AllowUserToOrderColumns = true; + this.dataGridJobs.AllowUserToResizeRows = false; + this.dataGridJobs.AutoGenerateColumns = false; + this.dataGridJobs.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.DisplayedCells; + this.dataGridJobs.AutoSizeRowsMode = System.Windows.Forms.DataGridViewAutoSizeRowsMode.DisplayedCells; + this.dataGridJobs.BackgroundColor = System.Drawing.Color.White; + this.dataGridJobs.BorderStyle = System.Windows.Forms.BorderStyle.None; + dataGridViewCellStyle4.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; + dataGridViewCellStyle4.BackColor = System.Drawing.SystemColors.Control; + dataGridViewCellStyle4.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238))); + dataGridViewCellStyle4.ForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle4.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle4.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle4.WrapMode = System.Windows.Forms.DataGridViewTriState.True; + this.dataGridJobs.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle4; + this.dataGridJobs.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.dataGridJobs.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.columnID, + this.columnStarted, + this.columnFinished, + this.columnInput, + this.columnOutput, + this.columnProgress, + this.columnStatus}); + this.dataGridJobs.DataSource = this.bindingSourceJobs; + dataGridViewCellStyle8.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; + dataGridViewCellStyle8.BackColor = System.Drawing.SystemColors.Window; + dataGridViewCellStyle8.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238))); + dataGridViewCellStyle8.ForeColor = System.Drawing.SystemColors.ControlText; + dataGridViewCellStyle8.SelectionBackColor = System.Drawing.Color.Gainsboro; + dataGridViewCellStyle8.SelectionForeColor = System.Drawing.Color.Black; + dataGridViewCellStyle8.WrapMode = System.Windows.Forms.DataGridViewTriState.False; + this.dataGridJobs.DefaultCellStyle = dataGridViewCellStyle8; + this.dataGridJobs.Dock = System.Windows.Forms.DockStyle.Fill; + this.dataGridJobs.EditMode = System.Windows.Forms.DataGridViewEditMode.EditProgrammatically; + this.dataGridJobs.Location = new System.Drawing.Point(10, 23); + this.dataGridJobs.Name = "dataGridJobs"; + dataGridViewCellStyle9.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; + dataGridViewCellStyle9.BackColor = System.Drawing.SystemColors.Control; + dataGridViewCellStyle9.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238))); + dataGridViewCellStyle9.ForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle9.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle9.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle9.WrapMode = System.Windows.Forms.DataGridViewTriState.True; + this.dataGridJobs.RowHeadersDefaultCellStyle = dataGridViewCellStyle9; + this.dataGridJobs.RowHeadersVisible = false; + dataGridViewCellStyle10.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238))); + this.dataGridJobs.RowsDefaultCellStyle = dataGridViewCellStyle10; + this.dataGridJobs.RowTemplate.DefaultCellStyle.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238))); + this.dataGridJobs.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; + this.dataGridJobs.Size = new System.Drawing.Size(1002, 105); + this.dataGridJobs.TabIndex = 0; + this.dataGridJobs.CellEnter += new System.Windows.Forms.DataGridViewCellEventHandler(this.dataGridJobs_CellEnter); + // + // columnID + // + this.columnID.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.DisplayedCells; + this.columnID.DataPropertyName = "ID"; + dataGridViewCellStyle5.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238))); + this.columnID.DefaultCellStyle = dataGridViewCellStyle5; + this.columnID.Frozen = true; + this.columnID.HeaderText = "ID"; + this.columnID.Name = "columnID"; + this.columnID.Width = 44; + // + // columnStarted + // + this.columnStarted.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.DisplayedCells; + this.columnStarted.DataPropertyName = "Started"; + this.columnStarted.HeaderText = "Started"; + this.columnStarted.Name = "columnStarted"; + this.columnStarted.Width = 71; + // + // columnFinished + // + this.columnFinished.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.DisplayedCells; + this.columnFinished.DataPropertyName = "Finished"; + this.columnFinished.HeaderText = "Finished"; + this.columnFinished.Name = "columnFinished"; + this.columnFinished.Width = 79; + // + // columnInput + // + this.columnInput.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.DisplayedCells; + this.columnInput.DataPropertyName = "Input"; + this.columnInput.HeaderText = "Input"; + this.columnInput.Name = "columnInput"; + this.columnInput.Width = 59; + // + // columnOutput + // + this.columnOutput.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.DisplayedCells; + this.columnOutput.DataPropertyName = "Output"; + this.columnOutput.HeaderText = "Output"; + this.columnOutput.Name = "columnOutput"; + this.columnOutput.Width = 68; + // + // columnProgress + // + this.columnProgress.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.columnProgress.DataPropertyName = "Progress"; + dataGridViewCellStyle6.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; + dataGridViewCellStyle6.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238))); + dataGridViewCellStyle6.NullValue = null; + this.columnProgress.DefaultCellStyle = dataGridViewCellStyle6; + this.columnProgress.HeaderText = "Progress"; + this.columnProgress.Name = "columnProgress"; + this.columnProgress.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.columnProgress.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.Automatic; + this.columnProgress.Width = 200; + // + // columnStatus + // + this.columnStatus.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.DisplayedCells; + this.columnStatus.DataPropertyName = "Status"; + dataGridViewCellStyle7.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238))); + this.columnStatus.DefaultCellStyle = dataGridViewCellStyle7; + this.columnStatus.HeaderText = "Status"; + this.columnStatus.Name = "columnStatus"; + this.columnStatus.Width = 66; + // + // metadataInfoBindingSource + // + this.metadataInfoBindingSource.DataSource = typeof(Maestro.Metadata.MetadataInfo); + // + // MaestroForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.BackColor = System.Drawing.SystemColors.Control; + this.ClientSize = new System.Drawing.Size(1022, 561); + this.Controls.Add(this.splitContainer2); + this.Icon = global::Maestro.Properties.Resources.AppIcon; + this.Name = "MaestroForm"; + this.ShowInTaskbar = false; + this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.MaestroForm_FormClosing); + this.FormClosed += new System.Windows.Forms.FormClosedEventHandler(this.MaestroForm_FormClosed); + this.Shown += new System.EventHandler(this.MaestroForm_Shown); + this.Resize += new System.EventHandler(this.MaestroForm_Resize); + this.groupSource.ResumeLayout(false); + this.groupSource.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.dataGridSource)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.bindingSource)).EndInit(); + this.tableLayoutPanel2.ResumeLayout(false); + this.tableLayoutPanel2.PerformLayout(); + this.ctxmActions.ResumeLayout(false); + this.splitContainer1.Panel1.ResumeLayout(false); + this.splitContainer1.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit(); + this.splitContainer1.ResumeLayout(false); + this.splitContainer3.Panel1.ResumeLayout(false); + this.splitContainer3.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer3)).EndInit(); + this.splitContainer3.ResumeLayout(false); + this.groupMetadata.ResumeLayout(false); + this.tabControl1.ResumeLayout(false); + this.tpOctopus.ResumeLayout(false); + this.tpTraffic.ResumeLayout(false); + this.tpTraffic.PerformLayout(); + this.tableLayoutPanel1.ResumeLayout(false); + this.tableLayoutPanel1.PerformLayout(); + this.groupTarget.ResumeLayout(false); + this.panel1.ResumeLayout(false); + this.splitContainer2.Panel1.ResumeLayout(false); + this.splitContainer2.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).EndInit(); + this.splitContainer2.ResumeLayout(false); + this.groupActions.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.dataGridJobs)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.bindingSourceJobs)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.metadataInfoBindingSource)).EndInit(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.GroupBox groupSource; + private System.Windows.Forms.DataGridView dataGridSource; + private System.Windows.Forms.BindingSource bindingSource; + private System.Windows.Forms.SplitContainer splitContainer1; + private System.Windows.Forms.SplitContainer splitContainer2; + private System.Windows.Forms.SplitContainer splitContainer3; + private System.Windows.Forms.GroupBox groupMetadata; + private System.Windows.Forms.GroupBox groupTarget; + private System.Windows.Forms.Button btnExecute; + private System.Windows.Forms.TextBox textSelectedSource; + private System.Windows.Forms.Label labelSelectedMetadata; + private System.Windows.Forms.TextBox textSelectedMetadata; + private System.Windows.Forms.TableLayoutPanel panelActions; + private System.Windows.Forms.GroupBox groupActions; + private System.Windows.Forms.DataGridView dataGridJobs; + private System.Windows.Forms.BindingSource bindingSourceJobs; + private System.Windows.Forms.TabControl tabControl1; + private System.Windows.Forms.TabPage tpOctopus; + private OctopusClient.OctopusIDSelector octopusIDSelector; + private System.Windows.Forms.TabPage tpTraffic; + private System.Windows.Forms.BindingSource metadataInfoBindingSource; + private System.Windows.Forms.Panel panel1; + private MenuButton menuButtonActions; + private System.Windows.Forms.ContextMenuStrip ctxmActions; + private System.Windows.Forms.ToolStripMenuItem ctxiDefineSegments; + private System.Windows.Forms.ToolStripMenuItem ctxiModifyArchiveMetadata; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanel2; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1; + private TrafficClient.TrafficIDSelector trafficIDSelector; + private System.Windows.Forms.DataGridViewTextBoxColumn columnID; + private System.Windows.Forms.DataGridViewTextBoxColumn columnStarted; + private System.Windows.Forms.DataGridViewTextBoxColumn columnFinished; + private System.Windows.Forms.DataGridViewTextBoxColumn columnInput; + private System.Windows.Forms.DataGridViewTextBoxColumn columnOutput; + private Commons.DataGridViewProgressColumn columnProgress; + private System.Windows.Forms.DataGridViewTextBoxColumn columnStatus; + private System.Windows.Forms.Button buttonMetadata; + private System.Windows.Forms.TextBox txtSorceFilter; + } +} + diff --git a/client/Maestro/MaestroForm.Metadata.cs b/client/Maestro/MaestroForm.Metadata.cs new file mode 100644 index 00000000..87d15854 --- /dev/null +++ b/client/Maestro/MaestroForm.Metadata.cs @@ -0,0 +1,108 @@ +using Maestro.Configuration; +using Maestro.Metadata; +using OctopusClient; +using System.Linq; +using System; +using DxPlay; +using System.Windows.Forms; +using TrafficClient; +using System.Collections.Generic; +using System.ComponentModel; + +namespace Maestro { + public partial class MaestroForm { + private MetadataInfo selectedMetadata; + private List segments = new List(); + + public MetadataInfo SelectedMetadata { + get { + return selectedMetadata; + } + set { + selectedMetadata = value; + textSelectedMetadata.Text = selectedMetadata.ID; + } + } + + private void InitializeMetadata() { + InitializeOctopusSelector(); + InitializeTrafficSelector(); + } + + private void InitializeTrafficSelector() { + TrafficMetadata metadata = Configuration.Metadatas.Where(m => { return m is TrafficMetadata; }).FirstOrDefault() as TrafficMetadata; + if (metadata == null) + return; + trafficIDSelector.Configuration = new TrafficConfiguration() { + Address = metadata.Server.Address, + UserName = metadata.Server.UserName, + Password = metadata.Server.Password, + Timeout = metadata.Server.Timeout + }; + trafficIDSelector.IDChangedEvent += TrafficIDSelected; + } + + private void InitializeOctopusSelector() { + OctopusMetadata metadata = Configuration.Metadatas.Where(m => { return m is OctopusMetadata; }).FirstOrDefault() as OctopusMetadata; + if (metadata == null) + return; + octopusIDSelector.Configuration = new OctopusConfiguration() { + Address = metadata.Server.Address, + UserName = metadata.Server.UserName, + Password = metadata.Server.Password, + Timeout = metadata.Server.Timeout + }; + octopusIDSelector.IDChangedEvent += OnOctopusIDSelected; + } + + private void OnOctopusIDSelected(string selectedID) { + SelectedMetadata = new MetadataInfo() { + Kind = MetadataType.OctopusStory, + Tooltip = "Story ID", + ID = selectedID + }; + } + + private void OnDefineSegmentsClick(object sender, EventArgs e) { + if (SelectedSource?.FileInfo == null) + return; + Cursor = Cursors.WaitCursor; + BindingList movieSegments = GetMovieSegmentsFromSegments(); + PlayerForm player = new PlayerForm(ref movieSegments); + player.AutoStart = Configuration.Player.AutoStart; + player.SegmentEditor = Configuration.Player.SegmentEditor; + player.Open(SelectedSource.FileInfo); + Cursor = Cursors.Default; + player.ShowDialog(); + ConvertMovieSegmentsToSegments(movieSegments); + } + + private void ConvertMovieSegmentsToSegments(BindingList movieSegments) { + foreach (MovieSegment actual in movieSegments) { + Segment actualSegment = segmentConverter.ConvertToSegment(actual); + segments.Add(actualSegment); + } + } + + private BindingList GetMovieSegmentsFromSegments() { + BindingList result = new BindingList(); + TrafficAPI trafficApi = trafficIDSelector.trafficAPI; + List segments = trafficApi.GetSegmentReady(selectedMetadata.VariantID); + if (segments != null) + foreach (Segment segment in segments) { + MovieSegment movieSegment = segmentConverter.ConvertToMovieSegment(segment); + result.Add(movieSegment); + } + return result; + } + + private void TrafficIDSelected(string selectedID, int variantID) { + SelectedMetadata = new MetadataInfo() { + Kind = MetadataType.Traffic, + Tooltip = "Epizod ID", + ID = selectedID, + VariantID = variantID + }; + } + } +} diff --git a/client/Maestro/MaestroForm.Source.cs b/client/Maestro/MaestroForm.Source.cs new file mode 100644 index 00000000..ef0854af --- /dev/null +++ b/client/Maestro/MaestroForm.Source.cs @@ -0,0 +1,221 @@ +using DxPlay; +using Maestro.Configuration; +using Maestro.Metadata; +using Maestro.Sources; +using Maestro.Sources.Messages; +using System; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Drawing; +using System.Linq; +using System.Windows.Forms; +using System.Text; + +namespace Maestro { + public partial class MaestroForm { + private ISource source; + private SourceInfo selectedSource; + private string startingName; + private List selectedSources = new List(); + + //todo rename + public bool IsTrafficID { get; set; } + + public SourceInfo SelectedSource { + get { + return selectedSource; + } + set { + selectedSource = value; + textSelectedSource.Text = selectedSource.Name; + } + } + + private void InitializeSource() { + Uri address = Configuration?.Source?.Local?.Address; + + if (Configuration?.Source is UNCSource) { + logger.Debug("UNC source initialization"); + source = new FileSystemSource(this, MessageBus); + logger.Debug("UNC source created"); + } + if (Configuration?.Source is NEXIOSource) { + logger.Debug("NEXIO source initialization"); + source = new NexioRESTSource(this, MessageBus); + logger.Debug("NEXIO source created"); + } + + MessageBus.Subscribe(OnFileInvolved); + MessageBus.Subscribe(OnFileInvolved); + + source.Startup(address); + bindingSource.DataSource = source; + dataGridSource.Columns.AddRange(new DataGridViewCheckBoxColumn()); + dataGridSource.Columns.AddRange(source.Columns); + } + + private void OnFileInvolved(FileActionMsg m) { + Collection source = bindingSource.DataSource as Collection; + if (source == null) + return; + ISourceItem item = source.Where(x => x.Name.Equals(m.FileName)).SingleOrDefault(); + if (item == null) + return; + + item.IsHighlighted = true; + } + + private void dataGridSource_CellMouseEnter(object sender, DataGridViewCellEventArgs e) { + if (e.RowIndex == -1) + return; + DataGridView gridView = sender as DataGridView; + if (gridView == null) + return; + DataGridViewColumn currentColumn = gridView.Columns[e.ColumnIndex]; + if (currentColumn.GetType() == typeof(DataGridViewImageColumn)) + dataGridSource.Cursor = Cursors.Hand; + } + + private void dataGridSource_CellMouseLeave(object sender, DataGridViewCellEventArgs e) { + if (e.ColumnIndex != 2) + return; + dataGridSource.Cursor = Cursors.Default; + } + + private void dataGridSource_CellEnter(object sender, DataGridViewCellEventArgs e) { + ISourceItem item = bindingSource.Current as ISourceItem; + if (item == null || e.RowIndex < 0 || e.ColumnIndex < 0) + return; + item.IsHighlighted = false; + } + + private void sourceGridView_SelectionChanged(object sender, EventArgs e) { + } + + private void sourceGridView_CellContentClick(object sender, DataGridViewCellEventArgs e) { + var selectedItem = bindingSource.Current; + if (selectedItem == null) { + return; + } + if (e.ColumnIndex == 0) { + SetSourceFromCheckBoxAction(sender, selectedItem); + return; + } + if (e.ColumnIndex != 3) + return; + FileSourceItem fileSourceItem = selectedItem as FileSourceItem; + if (fileSourceItem == null) + return; + Cursor = Cursors.WaitCursor; + BeginInvoke(new Action(() => { + PlayerForm player = new PlayerForm(); + player.AutoStart = Configuration.Player.AutoStart; + player.Open(fileSourceItem.FileInfo); + player.ShowDialog(); + Cursor = Cursors.Default; + })); + } + + private void SetSourceFromCheckBoxAction(object sender, object selectedItem) { + String name; + NexioSourceItem n = selectedItem as NexioSourceItem; + if (n == null) { + FileSourceItem f = selectedItem as FileSourceItem; + name = f.Name; + } else name = n.Name; + + DataGridView gridView = sender as DataGridView; + var cells = gridView.SelectedCells; + if (cells.Count <= 0) + return; + DataGridViewCheckBoxCell checkBoxCell = cells[0] as DataGridViewCheckBoxCell; + checkBoxCell.Value = (checkBoxCell.Value == null || checkBoxCell.Value.Equals(false)) ? true : false; + if (checkBoxCell.Value.Equals(false)) + selectedSources.Remove(name); + else + selectedSources.Add(name); + SetTextSelectedSourceTextFromCheckBoxes(); + SetMetadataButtonEnabled((bool)checkBoxCell.Value); + } + + private void SetMetadataButtonEnabled(bool checkBox) { + SetStartingName(checkBox); + if (selectedSources == null || selectedSources.Count == 0) { + buttonMetadata.Enabled = false; + IsSelectedIDTrafficID(); + return; + } + if (selectedSources.Count == 1) { + buttonMetadata.Enabled = true; + IsSelectedIDTrafficID(); + return; + } + + for (int i = 1; i < selectedSources.Count; i++) { + string name = selectedSources[i]; + if (!name.StartsWith(String.Format("{0}-", startingName)) && + !name.StartsWith(String.Format("{0}_", startingName)) && + !name.StartsWith(String.Format("{0}.", startingName))) { + buttonMetadata.Enabled = false; + return; + } + } + buttonMetadata.Enabled = true; + IsSelectedIDTrafficID(); + } + + private void SetStartingName(bool checkBox) { + if (!checkBox) { + startingName = null; + return; + } + if (selectedSources == null || selectedSources.Count == 0) + return; + string query = selectedSources[0]; + int separatorPosition = query.IndexOf("-") == -1 ? query.IndexOf("_") : query.IndexOf("-"); + int dotPosition = query.IndexOf("."); + startingName = separatorPosition == -1 ? query.Substring(0, dotPosition) : query.Substring(0, separatorPosition); + } + + private void SetTextSelectedSourceTextFromCheckBoxes() { + StringBuilder builder = new StringBuilder(); + foreach (String actual in selectedSources) + builder.Append(String.Format("{0} ", actual)); + SelectedSource = new SourceInfo() { + Name = builder.ToString() + }; + SetSelectedSourceFileInfo(SelectedSource); + ApplyProcessorButtonsLogic(); + } + + private void SetSelectedSourceFileInfo(SourceInfo selectedSource) { + if (selectedSources.Count == 1) + selectedSource.FileInfo = new System.IO.FileInfo(selectedSources[0]); + } + + private void dataGridSource_CellPainting(object sender, DataGridViewCellPaintingEventArgs e) { + if (e.RowIndex < 0) + return; + ISourceItem item = dataGridSource.Rows[e.RowIndex].DataBoundItem as ISourceItem; + if (item == null) + return; + DataGridViewRow row = dataGridSource.Rows[e.RowIndex]; + if (item.IsHighlighted) { + row.DefaultCellStyle.BackColor = Color.DarkGreen; + row.DefaultCellStyle.ForeColor = Color.White; + } else { + row.DefaultCellStyle = null; + } + } + + private void dataGridSource_CellMouseDoubleClick(object sender, DataGridViewCellMouseEventArgs e) { + if (e.RowIndex < 0) + return; + ISourceItem item = dataGridSource.Rows[e.RowIndex].DataBoundItem as ISourceItem; + SelectedSource = new SourceInfo() { + FileInfo = (item as FileSourceItem)?.FileInfo, + Name = item.Name + }; + } + } +} diff --git a/client/Maestro/MaestroForm.Target.cs b/client/Maestro/MaestroForm.Target.cs new file mode 100644 index 00000000..c40b22c7 --- /dev/null +++ b/client/Maestro/MaestroForm.Target.cs @@ -0,0 +1,146 @@ +using Maestro.Configuration; +using Maestro.Sources; +using Maestro.Targets; +using System; +using System.Linq; +using System.Windows.Forms; +using Maestro.Metadata; +using System.Collections.Generic; +using System.Text.RegularExpressions; +using TrafficClient; + +namespace Maestro { + public partial class MaestroForm { + + private SegmentConverter segmentConverter; + + private void InitializeTarget() { + btnExecute.Enabled = false; + if (Configuration.Targets == null) + return; + foreach (Target target in Configuration.Targets) { + CreateTarget(target); + } + + textSelectedSource.ReadOnly = !Configuration.IsAdmin; + textSelectedMetadata.ReadOnly = !Configuration.IsAdmin; + ApplyProcessorButtonsLogic(); + segmentConverter = new SegmentConverter(); + } + + private void CreateTarget(Target target) { + logger.Debug("Creating target {0}", target); + CheckBox checkBox = new CheckBox() { + Appearance = Appearance.Button, + Text = target.Label, + UseVisualStyleBackColor = true, + Dock = DockStyle.Top + }; + checkBox.CheckStateChanged += (s, e) => { + if (checkBox.Checked) { + List processors = new List(); + foreach (String actual in selectedSources) { + string typeName = string.Format("{0}.{1}", typeof(ITargetProcessor).Namespace, target.Processor); + Type type = Type.GetType(typeName); + + //ISourceItem actualFile = new FileSourceItem() { FileInfo = new System.IO.FileInfo(actual), }; + ISourceItem selectedFile = GetSourceItemFromBindingSource(actual);//bindingSource.Current as ISourceItem; + string id = selectedMetadata.ID; + object[] parameters = new object[] { this, Configuration.Source, target, selectedFile.Name, id, segments }; + ITargetProcessor processor = (ITargetProcessor)Activator.CreateInstance(type, parameters); + processors.Add(processor); + } + currentProcessors.Add(checkBox, processors); + } else + currentProcessors.Remove(checkBox); + + btnExecute.Enabled = currentProcessors.Count > 0; + }; + + panelActions.Controls.Add(checkBox); + panelActions.RowCount = panelActions.Controls.Count; + + } + + private ISourceItem GetSourceItemFromBindingSource(string actual) { + ISourceItem result = null; + foreach (ISourceItem actualSource in bindingSource) { + if (actualSource.Name.Equals(actual)) + result = actualSource; + } + return result; + } + + private void OnInfoTextChanged(object sender, EventArgs e) { + ApplyProcessorButtonsLogic(); + ApplyMetaDataButtonLogic(); + } + + private void ApplyMetaDataButtonLogic() { + if (selectedSources.Count <= 0) { + buttonMetadata.Enabled = false; + return; + } + if (selectedSources.Count == 1) + buttonMetadata.Enabled = true; + else { + String calculatedHouseID = selectedSources[0]; + foreach (String actual in selectedSources) + if (!actual.StartsWith(calculatedHouseID)) + buttonMetadata.Enabled = false; + } + } + + private void ChangeProcessButtonsState(bool enabled) { + if (panelActions.Controls == null) + return; + foreach (Control c in panelActions.Controls) + c.Enabled = enabled; + } + + private void ApplyProcessorButtonsLogic() { + ClearSelectedProcessors(); + if (!String.IsNullOrEmpty(textSelectedMetadata.Text) && !String.IsNullOrEmpty(textSelectedMetadata.Text)) { + ChangeProcessButtonsState(true); + } else { + ChangeProcessButtonsState(false); + } + + + if (Configuration.Player != null) + ctxiDefineSegments.Enabled = SelectedSource?.FileInfo != null && Configuration.Player.SegmentEditor && MetadataType.Traffic.Equals(SelectedMetadata?.Kind); + IsSelectedIDTrafficID(); + } + + private void IsSelectedIDTrafficID() { + if (String.IsNullOrEmpty(startingName)) + return; + + //kisbetük kellenek? + string pattern = "[A-Z]{1}[0-9]{6}[A-Z]{1}"; + Match match = Regex.Match(startingName, pattern); + IsTrafficID = match.Success; + } + + public void OnTargetPanelsMouseClick(object sender, MouseEventArgs e) { + (sender as Control).Select(); + } + + private void ClearSelectedProcessors() { + currentProcessors.Keys.ToList().ForEach(c => c.Checked = false); + } + + private void OnExecuteClick(object sender, EventArgs e) { + foreach (var element in currentProcessors) + foreach (ITargetProcessor value in element.Value) { + jobs.Add(value); + jobsQueue.Add(value); + } + + ClearSelectedProcessors(); + if (processorWorker == null) + CreateJobsQueueWorker(); + } + + } +} diff --git a/client/Maestro/MaestroForm.cs b/client/Maestro/MaestroForm.cs new file mode 100644 index 00000000..a186f177 --- /dev/null +++ b/client/Maestro/MaestroForm.cs @@ -0,0 +1,241 @@ +using LinkDotNet.MessageHandling.Contracts; +using Maestro.Commons; +using Maestro.Configuration; +using Maestro.Targets; +using NLog; +using System; +using System.Collections.Concurrent; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Windows.Forms; +using System.Threading; +using TrafficClient; +using OctopusClient; +using System.Linq; + +namespace Maestro { + + public delegate void Clear(); + + public partial class MaestroForm : Form { + private static Logger logger = LogManager.GetCurrentClassLogger(); + private GroupBox[] groups; + private Dictionary> currentProcessors = new Dictionary>(); + private BindingList jobs = new BindingList(); + private BlockingCollection jobsQueue = new BlockingCollection(); + private BackgroundWorker processorWorker; + public IMessageBus MessageBus { get; set; } + public ConfigurationInfo Configuration; + private TraficMetadataSelected trafficMetadataSelected; + private OctopusMetadataSelected octopusMetadataSelected; + + public Clear clear; + + public bool CanExecute { + get { + return currentProcessors.Count > 0; + } + } + + public MaestroForm() { + InitializeComponent(); + trafficIDSelector.clearCheckBox = octopusIDSelector.ClearEveryCheckBox; + octopusIDSelector.clearCheckBox = trafficIDSelector.ClearSelectionSource; + groups = new GroupBox[] { groupSource, groupMetadata, groupTarget, groupActions }; + trafficMetadataSelected = TrafficIDSelected; + octopusMetadataSelected = OnOctopusIDSelected; + } + + private void InitializeControlTexts() { + groupSource.Text = StringResources.FORRAS_FAJL; + groupMetadata.Text = StringResources.METAADAT; + groupTarget.Text = StringResources.CEL_AKCIO; + label1.Text = StringResources.KIVALASZTOTT_FORRAS; + labelSelectedMetadata.Text = StringResources.KIVALASZTOTT_METAADAT; + btnExecute.Text = StringResources.VEGREHAJT; + menuButtonActions.Text = StringResources.AKCIOK; + groupActions.Text = StringResources.AKCIOK; + columnStarted.HeaderText = StringResources.KEZDES; + columnFinished.HeaderText = StringResources.BEFEJEZES; + columnInput.HeaderText = StringResources.BEMENET; + columnOutput.HeaderText = StringResources.KIMENET; + columnProgress.HeaderText = StringResources.ALLAPOT; + columnStatus.HeaderText = StringResources.STATUSZ; + ctxiDefineSegments.Text = StringResources.SZEGMENS_LETREHOZASA; + ctxiModifyArchiveMetadata.Text = StringResources.ARCHÍV_METAADATOK_MODOSITASA; + buttonMetadata.Text = StringResources.METAADAT; + } + + private void InitializeComponents() { + InitializeSource(); + InitializeMetadata(); + InitializeTarget(); + InitializeJobs(); + InitializeControlTexts(); + } + + private void InitializeJobs() { + bindingSourceJobs.DataSource = jobs; + foreach (DataGridViewColumn column in dataGridJobs.Columns) { + column.HeaderCell.Style.Font = new Font(dataGridJobs.Font, FontStyle.Regular); + } + } + + private void MaestroForm_Resize(object sender, EventArgs e) { + if (WindowState == FormWindowState.Minimized) { + Visible = false; + } + } + + private void MaestroForm_FormClosing(object sender, FormClosingEventArgs e) { + Visible = false; + e.Cancel = true; + } + + private void CreateJobsQueueWorker() { + processorWorker = new BackgroundWorker() { + WorkerSupportsCancellation = true + }; + processorWorker.DoWork += (s, e) => { + while (!e.Cancel) { + ITargetProcessor job; + if (jobsQueue.TryTake(out job)) { + (this).SafeCall(() => { + int position = jobs.IndexOf(job); + bindingSourceJobs.Position = position; + dataGridJobs.FirstDisplayedScrollingRowIndex = position; + }); + job.Execute(); + } else { + Thread.Sleep(100); + } + } + }; + processorWorker.RunWorkerAsync(); + } + + private void groupBox_Enter(object sender, EventArgs e) { + Control control = sender as Control; + control.Font = new Font(control.Font, FontStyle.Bold); + control.BackColor = Color.White; + } + + private void groupBox_Leave(object sender, EventArgs e) { + Control control; + if (sender is TabControl) + control = (sender as Control).Parent; + else + control = sender as Control; + control.Font = new Font(control.Font, FontStyle.Regular); + control.BackColor = Color.Transparent; + } + + private void MaestroForm_FormClosed(object sender, FormClosedEventArgs e) { + if (processorWorker != null) { + processorWorker.CancelAsync(); + } + } + + private void dataGridJobs_CellEnter(object sender, DataGridViewCellEventArgs e) { + ITargetProcessor item = bindingSourceJobs.Current as ITargetProcessor; + if (item == null || e.RowIndex < 0 || e.ColumnIndex < 0) + return; + DataGridViewCell cell = dataGridJobs.Rows[e.RowIndex].Cells[e.ColumnIndex]; + cell.ToolTipText = item.Message; + } + + private void MaestroForm_Shown(object sender, EventArgs e) { + Text = Configuration.Title; + InitializeComponents(); + } + + private void tabControl1_SelectedIndexChanged(object sender, EventArgs e) { + //TabControl actual = sender as TabControl; + //if (actual.SelectedIndex == 1) + // if (!traffiTabcInitialized) { + // trafficIDSelector.RefreshDataGridSource(); + // traffiTabcInitialized = true; + // } + } + + + private void textBox1_KeyUp(object sender, KeyEventArgs e) { + if (e.KeyCode != Keys.Return) + return; + if (String.IsNullOrEmpty(txtSorceFilter.Text)) + bindingSource.RemoveFilter(); + else + bindingSource.Filter = txtSorceFilter.Text; + } + + private void buttonMetadata_Click(object sender, EventArgs e) { + IsSelectedIDTrafficID(); + if (IsTrafficID) + SetTrafficIDToMetadataText(); + else + SetOctopusIDToMetadataText(); + } + + private void SetOctopusIDToMetadataText() { + OctopusAPI api = octopusIDSelector.GetClient(); + IEnumerable stories = api.GetStoriesById(startingName); + Cursor.Current = Cursors.WaitCursor; + ProcessOctopusResult(stories, api); + } + + private void ProcessOctopusResult(IEnumerable stories, OctopusAPI api) { + if (stories == null) { + SearchMosIDs(api); + return; + } + List list = stories.ToList(); + if (list.Count == 1) { + //textSelectedMetadata.Text = list[0].ID; + //return; + SearchMessageBox box = new SearchMessageBox(list, octopusMetadataSelected); + box.ShowDialog(); + } + //SearchMessageBox box = new SearchMessageBox(list, octopusMetadataSelected); + //box.ShowDialog(); + + } + + private void SearchMosIDs(OctopusAPI api) { + IEnumerable mosIDs = api.GetMosObjectsByID(startingName); + List list = mosIDs.ToList(); + if (list == null || list.Count == 0) { + MessageBox.Show(this, StringResources.NINCS_TALALAT); + return; + } if (list.Count == 1) { + SearchMessageBox box = new SearchMessageBox(list, octopusMetadataSelected); + box.ShowDialog(); + //textSelectedMetadata.Text = list[0].ID; + //return; + } + //SearchMessageBox box = new SearchMessageBox(list, octopusMetadataSelected); + //box.ShowDialog(); + + } + + private void SetTrafficIDToMetadataText() { + TrafficAPI api = trafficIDSelector.trafficAPI; + Cursor.Current = Cursors.WaitCursor; + List result = api.Search(startingName, null, null, true); + ProcessMamResults(result); + } + + private void ProcessMamResults(List result) { + if (result == null || result.Count == 0) { + MessageBox.Show(this, StringResources.NINCS_TALALAT); + return; + } + if (result.Count == 1) { + textSelectedMetadata.Text = result[0].MediaID; + return; + } + SearchResult searchResult = new SearchResult(result, trafficMetadataSelected); + searchResult.ShowDialog(); + } + } +} diff --git a/client/Maestro/MaestroForm.resx b/client/Maestro/MaestroForm.resx new file mode 100644 index 00000000..93ab1e2f --- /dev/null +++ b/client/Maestro/MaestroForm.resx @@ -0,0 +1,156 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + + 512, 17 + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + 154, 17 + + + 309, 17 + + + 59 + + \ No newline at end of file diff --git a/client/Maestro/MeastroFormNotifyIcon.cs b/client/Maestro/MeastroFormNotifyIcon.cs new file mode 100644 index 00000000..3fa7ac9b --- /dev/null +++ b/client/Maestro/MeastroFormNotifyIcon.cs @@ -0,0 +1,91 @@ +using LinkDotNet.MessageHandling.Contracts; +using Maestro.Configuration; +using Maestro.Sources.Messages; +using System; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace Maestro { + public class MeastroFormNotifyIcon { + private NotifyIcon notification = new NotifyIcon(); + private MaestroForm form = new MaestroForm(); + + public ConfigurationInfo Config { get; private set; } + + public MeastroFormNotifyIcon(ConfigurationInfo config, IMessageBus messageBus) { + Config = config; + form.Configuration = config; + form.MessageBus = messageBus; + + messageBus.Subscribe(OnFileCreated); + messageBus.Subscribe(OnFileRemoved); + messageBus.Subscribe(OnFileModified); + + notification.Icon = System.Drawing.SystemIcons.Information; + notification.Click += Notification_Click; + notification.BalloonTipClicked += Notification_BalloonTipClicked; + } + + private void OnFileCreated(FileActionMsg m) { + if (!form.Equals(m.Source)) + return; + Show(String.Format("File {0} created in source {1}", m.FileName, m.Source.Text)); + } + + private void OnFileModified(FileActionMsg m) { + if (!form.Equals(m.Source)) + return; + Show(String.Format("File {0} modified in source {1}", m.FileName, m.Source.Text)); + } + + private void OnFileRemoved(FileActionMsg m) { + if (!form.Equals(m.Source)) + return; + Show(String.Format("File {0} removed in source {1}", m.FileName, m.Source.Text)); + } + + public void Show(string tooltipText) { + if (tooltipText == null) + return; + notification.BalloonTipText = tooltipText; + notification.Visible = true; + notification.ShowBalloonTip(3); + } + + public void ShowForm() { + notification.Visible = false; + if (!form.Visible) + form.Show(); + if (form.WindowState == FormWindowState.Minimized) + form.WindowState = FormWindowState.Normal; + form.BringToFront(); + form.Activate(); + } + + public void BeginShowForm() { + Task.Run(() => { + ShowForm(); + }); + } + + public void HideForm() { + notification.Visible = false; + if (form.Visible) + form.Hide(); + } + + private void Notification_BalloonTipClicked(object sender, EventArgs e) { + ShowForm(); + } + + private void Notification_Click(object sender, EventArgs e) { + ShowForm(); + } + + internal void CloseForm() { + notification.Dispose(); + form.Close(); + form.Dispose(); + } + } +} diff --git a/client/Maestro/Metadata/MenuButton.cs b/client/Maestro/Metadata/MenuButton.cs new file mode 100644 index 00000000..fe3fac77 --- /dev/null +++ b/client/Maestro/Metadata/MenuButton.cs @@ -0,0 +1,47 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace Maestro { + public class MenuButton : Button { + [DefaultValue(null)] + public ContextMenuStrip Menu { get; set; } + + [DefaultValue(false)] + public bool ShowMenuUnderCursor { get; set; } + + protected override void OnMouseDown(MouseEventArgs mevent) { + base.OnMouseDown(mevent); + + if (Menu != null && mevent.Button == MouseButtons.Left) { + Point menuLocation; + + if (ShowMenuUnderCursor) { + menuLocation = mevent.Location; + } else { + menuLocation = new Point(0, Height); + } + + Menu.Show(this, menuLocation); + } + } + + protected override void OnPaint(PaintEventArgs pevent) { + base.OnPaint(pevent); + + if (Menu != null) { + int arrowX = ClientRectangle.Width - 14; + int arrowY = ClientRectangle.Height / 2 - 1; + + Brush brush = Enabled ? SystemBrushes.ControlText : SystemBrushes.ButtonShadow; + Point[] arrows = new Point[] { new Point(arrowX, arrowY), new Point(arrowX + 7, arrowY), new Point(arrowX + 3, arrowY + 4) }; + pevent.Graphics.FillPolygon(brush, arrows); + } + } + } +} diff --git a/client/Maestro/Metadata/MetaDataInfo.cs b/client/Maestro/Metadata/MetaDataInfo.cs new file mode 100644 index 00000000..33eed301 --- /dev/null +++ b/client/Maestro/Metadata/MetaDataInfo.cs @@ -0,0 +1,8 @@ +namespace Maestro.Metadata { + public class MetadataInfo { + public string ID { get; set; } + public string Tooltip { get; set; } + public MetadataType Kind { get; set; } + public int VariantID { get; set; } + } +} diff --git a/client/Maestro/Metadata/MetadataType.cs b/client/Maestro/Metadata/MetadataType.cs new file mode 100644 index 00000000..80088e78 --- /dev/null +++ b/client/Maestro/Metadata/MetadataType.cs @@ -0,0 +1,5 @@ +namespace Maestro.Metadata { + public enum MetadataType { + OctopusStory, OctopusPlaceHolder, Traffic, Archive + } +} diff --git a/client/Maestro/Program.cs b/client/Maestro/Program.cs new file mode 100644 index 00000000..0d9779c0 --- /dev/null +++ b/client/Maestro/Program.cs @@ -0,0 +1,139 @@ +using LinkDotNet.MessageHandling; +using LinkDotNet.MessageHandling.Contracts; +using Maestro.Configuration; +using Maestro.Properties; +using NLog; +using System; +using System.Collections.Concurrent; +using System.Collections.Generic; +using System.Drawing; +using System.IO; +using System.Reflection; +using System.Threading; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace Maestro { + + static class Program { + + /// + /// The main entry point for the application. + /// + [STAThread] + static void Main() { + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + Application.Run(new TrayApplicationContext()); + } + } + + public class TrayApplicationContext : ApplicationContext { + private static Logger logger = LogManager.GetCurrentClassLogger(); + private NotifyIcon trayIcon; + private ConcurrentBag forms = new ConcurrentBag(); + private IMessageBus messageBus = new MessageBus(); + + public TrayApplicationContext() { + Splash splash = new Splash(); + Task.Run(() => { + Application.Run(splash); + }); + + CreateForms(); + CreateTrayIcon(); + } + + private void CreateForms() { + string[] files = Directory.GetFiles("./Resources", "*.json"); + if (files.Length == 0) { + MessageBox.Show("Hiányos konfiguráció!"); + Application.Exit(); + } + foreach (String file in files) { + CreateForm(file); + } + if (forms.Count == 0) { + MessageBox.Show("Hiányos konfiguráció!"); + TerminateApplication(); + } + } + + private void CreateForm(string file) { + try { + ConfigurationInfo config = Loader.Get(file); + if (!config.Active) + return; + MeastroFormNotifyIcon form = new MeastroFormNotifyIcon(config, messageBus); + forms.Add(form); + if (!config.StartInTray) + form.ShowForm(); + } + catch (Exception e) { + logger.Error(e); + MessageBox.Show(e.Message); + } + } + + private List CreateMenuItems() { + List menuItems = new List(); + menuItems.Add(new MenuItem("Mindet megjeleníti", ShowAll)); + menuItems.Add(new MenuItem("Mindet elrejti", HideAll)); + menuItems.Add(new MenuItem("-")); + foreach (MeastroFormNotifyIcon form in forms) { + menuItems.Add(new MenuItem(form.Config.Title, (s, e) => { + form.ShowForm(); + })); + } + if (forms.Count > 0) + menuItems.Add(new MenuItem("-")); + menuItems.Add(new MenuItem("Kilépés", Exit)); + return menuItems; + } + + private void CreateTrayIcon() { + + List menuItems = CreateMenuItems(); + trayIcon = new NotifyIcon() { + Icon = Resources.AppIcon, + ContextMenu = new ContextMenu(menuItems.ToArray()), + Visible = true + }; + trayIcon.Click += TrayIcon_Click; + } + + private void TrayIcon_Click(object sender, EventArgs e) { + MethodInfo mi = typeof(NotifyIcon).GetMethod("ShowContextMenu", BindingFlags.Instance | BindingFlags.NonPublic); + mi.Invoke(sender as NotifyIcon, null); + } + + private void ShowAllForms() { + foreach (MeastroFormNotifyIcon form in forms) { + form.ShowForm(); + } + } + + private void ShowAll(object sender, EventArgs e) { + ShowAllForms(); + } + + private void HideAll(object sender, EventArgs e) { + foreach (MeastroFormNotifyIcon form in forms) { + form.HideForm(); + } + } + + void Exit(object sender, EventArgs e) { + TerminateApplication(); + } + + private void TerminateApplication() { + foreach (MeastroFormNotifyIcon form in forms) { + form.CloseForm(); + } + trayIcon.Visible = false; + trayIcon.Dispose(); + Application.Exit(); + } + } +} diff --git a/client/Maestro/Properties/AssemblyInfo.cs b/client/Maestro/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..b7890f4a --- /dev/null +++ b/client/Maestro/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("Maestro")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("Maestro")] +[assembly: AssemblyCopyright("Copyright © 2017")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("baf3e174-5d82-40fa-9e62-8c76adbea1e4")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/client/Maestro/Properties/DataSources/Maestro.Metadata.MetadataInfo.datasource b/client/Maestro/Properties/DataSources/Maestro.Metadata.MetadataInfo.datasource new file mode 100644 index 00000000..4577c253 --- /dev/null +++ b/client/Maestro/Properties/DataSources/Maestro.Metadata.MetadataInfo.datasource @@ -0,0 +1,10 @@ + + + + Maestro.Metadata.MetadataInfo, Maestro, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + \ No newline at end of file diff --git a/client/Maestro/Properties/Resources.Designer.cs b/client/Maestro/Properties/Resources.Designer.cs new file mode 100644 index 00000000..f2000603 --- /dev/null +++ b/client/Maestro/Properties/Resources.Designer.cs @@ -0,0 +1,103 @@ +//------------------------------------------------------------------------------ +// +// 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 Maestro.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", "4.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + /// + /// 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("Maestro.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.Icon similar to (Icon). + /// + internal static System.Drawing.Icon AppIcon { + get { + object obj = ResourceManager.GetObject("AppIcon", resourceCulture); + return ((System.Drawing.Icon)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Icon similar to (Icon). + /// + internal static System.Drawing.Icon Pause { + get { + object obj = ResourceManager.GetObject("Pause", resourceCulture); + return ((System.Drawing.Icon)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Icon similar to (Icon). + /// + internal static System.Drawing.Icon Play { + get { + object obj = ResourceManager.GetObject("Play", resourceCulture); + return ((System.Drawing.Icon)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Icon similar to (Icon). + /// + internal static System.Drawing.Icon Stop { + get { + object obj = ResourceManager.GetObject("Stop", resourceCulture); + return ((System.Drawing.Icon)(obj)); + } + } + } +} diff --git a/client/Maestro/Properties/Resources.resx b/client/Maestro/Properties/Resources.resx new file mode 100644 index 00000000..36fe5867 --- /dev/null +++ b/client/Maestro/Properties/Resources.resx @@ -0,0 +1,133 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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\mediacube_logo_small.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\Pause.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\Play.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\Stop.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + \ No newline at end of file diff --git a/client/Maestro/Properties/Settings.Designer.cs b/client/Maestro/Properties/Settings.Designer.cs new file mode 100644 index 00000000..a1089441 --- /dev/null +++ b/client/Maestro/Properties/Settings.Designer.cs @@ -0,0 +1,26 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace Maestro.Properties { + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "15.1.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default { + get { + return defaultInstance; + } + } + } +} diff --git a/client/Maestro/Properties/Settings.settings b/client/Maestro/Properties/Settings.settings new file mode 100644 index 00000000..abf36c5d --- /dev/null +++ b/client/Maestro/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/client/Maestro/Resources/AppIcon.ico b/client/Maestro/Resources/AppIcon.ico new file mode 100644 index 00000000..8aa98e51 Binary files /dev/null and b/client/Maestro/Resources/AppIcon.ico differ diff --git a/client/Maestro/Resources/Pause.ico b/client/Maestro/Resources/Pause.ico new file mode 100644 index 00000000..4385a539 Binary files /dev/null and b/client/Maestro/Resources/Pause.ico differ diff --git a/client/Maestro/Resources/Play.ico b/client/Maestro/Resources/Play.ico new file mode 100644 index 00000000..2b5c9964 Binary files /dev/null and b/client/Maestro/Resources/Play.ico differ diff --git a/client/Maestro/Resources/Stop.ico b/client/Maestro/Resources/Stop.ico new file mode 100644 index 00000000..f9d158c1 Binary files /dev/null and b/client/Maestro/Resources/Stop.ico differ diff --git a/client/Maestro/Resources/configuration-nexio.json b/client/Maestro/Resources/configuration-nexio.json new file mode 100644 index 00000000..17eef4eb --- /dev/null +++ b/client/Maestro/Resources/configuration-nexio.json @@ -0,0 +1,73 @@ +{ + "title": "PLAYOUT", + "active": true, + "startInTray": false, + "enableNameOverride": false, + "player": { + "enabled": true, + "autoStart": false, + "segmentEditor": true + }, + "source": { + "$type": "NEXIOSource", + "local": { + "address": "ws://localhost:8080/services/nexio" + }, + "remote": { + "address": "ftp://localhost:21/watch", + "userName": "dani", + "password": "dani" + } + }, + "metadatas": [ + { + "$type": "OctopusMetadata", + "server": { + "address": "http://localhost:8080/services/rest/octopus/", + "userName": "dani", + "password": "dani", + "timeout": 1000 + } + }, + { + "$type": "TrafficMetadata", + "server": { + "address": "Data Source=folkloredb.hu\\sql08,33860;Initial Catalog=CLArchiveTF_0;Persist Security Info=True;", + "userName": "MAM", + "password": "Echotv.hu", + "timeout": 5 + } + }, + { + "$type": "MediaCubeMetadata", + "server": { + "address": "ftp://localhost:21/out", + "userName": "dani", + "password": "dani" + } + } + ], + "targets": [ + { + "label": "Archive", + "processor": "FTPTargetProcessor", + "outputFormat": "{0}-{1}-{2}", + "killDateDays": 1, + "remote": { + "address": "ftp://localhost:21/out", + "userName": "dani", + "password": "dani" + } + }, + { + "label": "Ready", + "processor": "FXPTargetProcessor", + "outputFormat": "{0}-{1}-{2}", + "remote": { + "address": "ftp://localhost:22/out", + "userName": "dani", + "password": "dani" + } + } + ] +} diff --git a/client/Maestro/Resources/configuration-unc.json b/client/Maestro/Resources/configuration-unc.json new file mode 100644 index 00000000..14986520 --- /dev/null +++ b/client/Maestro/Resources/configuration-unc.json @@ -0,0 +1,77 @@ +{ + "title": "INGEST", + "active": true, + "startInTray": false, + "enableNameOverride": false, + "player": { + "enabled": true, + "autoStart": false, + "segmentEditor": true + }, + "source": { + "$type": "UNCSource", + "local": { + "address": "file://localhost/watch" + }, + "remote": { + "address": "ftp://localhost:21/watch", + "userName": "dani", + "password": "dani" + } + }, + "metadatas": [ + { + "$type": "OctopusMetadata", + "server": { + "address": "http://localhost:8080/services/rest/octopus/", + "userName": "dani", + "password": "dani", + "timeout": 1000 + } + }, + { + "$type": "TrafficMetadata", + "server": { + "address": "Data Source=folkloredb.hu\\sql08,33860;Initial Catalog=CLArchiveTF_0;Persist Security Info=True;", + "userName": "MAM", + "password": "Echotv.hu", + "timeout": 60 + } + }, + { + "$type": "MediaCubeMetadata", + "server": { + "address": "ftp://localhost:21/out", + "userName": "dani", + "password": "dani" + } + } + ], + "targets": [ + { + "label": "Archive", + "processor": "FTPTargetProcessor", + "outputFormat": "{0}-{1}", + "killDateDays": 1, + "remote": { + "address": "ftp://localhost:21/out", + "userName": "dani", + "password": "dani" + } + }, + { + "label": "Ready", + "processor": "FTPTargetProcessor", + "outputFormat": "{0}-{1}", + "saveSegments": true, + "killDateDays": 1, + "tag": "tag", + "createSubFolder": true, + "remote": { + "address": "ftp://localhost:21/out", + "userName": "dani", + "password": "dani" + } + } + ] +} diff --git a/client/Maestro/Resources/mc_logo.ico b/client/Maestro/Resources/mc_logo.ico new file mode 100644 index 00000000..c4c365a4 Binary files /dev/null and b/client/Maestro/Resources/mc_logo.ico differ diff --git a/client/Maestro/Resources/mediacube_logo_small.ico b/client/Maestro/Resources/mediacube_logo_small.ico new file mode 100644 index 00000000..e81b6ff6 Binary files /dev/null and b/client/Maestro/Resources/mediacube_logo_small.ico differ diff --git a/client/Maestro/Sources/CreatedFileMonitor.cs b/client/Maestro/Sources/CreatedFileMonitor.cs new file mode 100644 index 00000000..fa65e0ae --- /dev/null +++ b/client/Maestro/Sources/CreatedFileMonitor.cs @@ -0,0 +1,32 @@ +using System.ComponentModel; +using System.IO; +using System.Threading; + +namespace Maestro.Sources { + internal class CreatedFileMonitor : BackgroundWorker { + private long lastSize; + + internal CreatedFileMonitor(string path) { + DoWork += CreatedFileMonitor_DoWork; + WorkerSupportsCancellation = true; + RunWorkerAsync(path); + } + + private void CreatedFileMonitor_DoWork(object sender, DoWorkEventArgs e) { + string path = e.Argument as string; + while (!e.Cancel) { + Thread.Sleep(3000); + FileInfo fi = new FileInfo(path); + if (lastSize == fi.Length) { + e.Result = fi; + break; + } + else + lastSize = fi.Length; + } + + } + + + } +} diff --git a/client/Maestro/Sources/FileSourceItem.cs b/client/Maestro/Sources/FileSourceItem.cs new file mode 100644 index 00000000..815c1248 --- /dev/null +++ b/client/Maestro/Sources/FileSourceItem.cs @@ -0,0 +1,64 @@ +using System; +using System.ComponentModel; +using System.Drawing; +using System.IO; +using System.Runtime.CompilerServices; + +namespace Maestro.Sources { + public class FileSourceItem : ISourceItem { + private FileInfo fileInfo; + private Icon icon; + private bool isHighlighted; + + public event PropertyChangedEventHandler PropertyChanged; + + protected void NotifyPropertyChanged([CallerMemberName] String propertyName = "") { + PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); + } + + public FileInfo FileInfo { + get { + return fileInfo; + } + set { + fileInfo = value; + NotifyPropertyChanged("Name"); + NotifyPropertyChanged("Created"); + } + } + + public bool IsHighlighted { + get { + return isHighlighted; + } + set { + if (isHighlighted != value) { + isHighlighted = value; + NotifyPropertyChanged(); + } + } + } + + public string Name { + get { + return FileInfo?.Name; + } + } + public DateTime Created { + get { + return (FileInfo == null) ? DateTime.MinValue : FileInfo.CreationTime; + } + } + + public Icon Icon { + get { + return icon; + } + set { + icon = value; + NotifyPropertyChanged(); + } + } + + } +} diff --git a/client/Maestro/Sources/FileSystemSource.cs b/client/Maestro/Sources/FileSystemSource.cs new file mode 100644 index 00000000..709264e6 --- /dev/null +++ b/client/Maestro/Sources/FileSystemSource.cs @@ -0,0 +1,171 @@ +using System; +using System.Linq; +using System.Collections.Generic; +using System.ComponentModel; +using System.Diagnostics; +using System.IO; +using System.Windows.Forms; +using LinkDotNet.MessageHandling.Contracts; +using Maestro.Sources.Messages; +using Maestro.Commons; +using System.Threading.Tasks; +using System.Drawing; +using NLog; + +namespace Maestro.Sources { + class FileSystemSource : BindingList, ISource { + private readonly Logger logger = LogManager.GetCurrentClassLogger(); + private IMessageBus messageBus; + private List createdFileMonitors = new List(); + private Control parent; + private string filter; + private List cache = new List(); + + public DataGridViewColumn[] Columns { + get { + DataGridViewColumn[] result = new DataGridViewColumn[] { + new DataGridViewTextBoxColumn(){ + DataPropertyName = "Name", + HeaderText = StringResources.NEV, + AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill + }, + new DataGridViewTextBoxColumn() { + DataPropertyName = "Created", + HeaderText = StringResources.LETREHOZVA, + AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells + }, + new DataGridViewImageColumn(){ + DataPropertyName = "Icon", + HeaderText = StringResources.LEJATSZAS, + AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells, + } + }; + foreach (DataGridViewColumn column in result) { + column.HeaderCell.Style.Font = new Font(parent.Font, FontStyle.Regular); + } + return result; + } + } + + public string Filter { + get => filter; set { + filter = value; + Clear(); + cache.Where(i => i.Name.StartsWith(filter)).ToList().ForEach(i => Add(i)); + } + } + + public ListSortDescriptionCollection SortDescriptions => throw new NotImplementedException(); + + public bool SupportsAdvancedSorting => throw new NotImplementedException(); + + public bool SupportsFiltering => true; + + public FileSystemSource(Control parent, IMessageBus messageBus) { + this.parent = parent; + this.messageBus = messageBus; + } + + public void Startup(Uri address) { + string path = address.LocalPath; + createWatch(path); + Task.Run(() => initializeList(path)); + } + + //private void AddItem(FileInfo fi, bool highlight) { + // FileSourceItem item = CreateItem(fi, highlight); + // Add(item); + //} + + private FileSourceItem CreateItem(FileInfo fi, bool highlight) { + return new FileSourceItem() { + FileInfo = fi, + IsHighlighted = highlight, + Icon = Properties.Resources.Play + }; + } + + private void initializeList(string path) { + string[] files = Directory.GetFiles(path); + files.Select(f => CreateItem(new FileInfo(f), false)).OrderByDescending(i => i.Created).ToList().ForEach(i => parent.SafeCall(() => Add(i))); + cache.AddRange(this); + } + + private void createWatch(string path) { + FileSystemWatcher watcher = new FileSystemWatcher(); + watcher.Path = path; + //watcher.NotifyFilter = NotifyFilters.LastWrite; + watcher.Filter = "*.*"; + watcher.Changed += new FileSystemEventHandler(OnChanged); + watcher.Created += new FileSystemEventHandler(OnCreated); + watcher.Deleted += new FileSystemEventHandler(OnDeleted); + watcher.Renamed += new RenamedEventHandler(OnRenamed); + watcher.EnableRaisingEvents = true; + } + + public void OnRenamed(object sender, RenamedEventArgs e) { + logger.Debug("{0} {1} {2}", e.ChangeType, e.OldName, e.Name); + var item = this.Where(x => x.Name == e.OldName).SingleOrDefault(); + if (item == null) + return; + item.FileInfo = new FileInfo(e.FullPath); + parent.SafeCall(() => { + messageBus.Send(new ModifyFileActionMsg() { + FileName = e.Name, + Source = parent + }); + }); + } + + private void OnChanged(object sender, FileSystemEventArgs e) { + logger.Debug("{0} {1}", e.ChangeType, e.Name); + var item = this.Where(x => x.Name == e.Name).SingleOrDefault(); + if (item == null) + return; + item.FileInfo = new FileInfo(e.FullPath); + parent.SafeCall(() => { + messageBus.Send(new ModifyFileActionMsg() { + FileName = e.Name, + Source = parent + }); + }); + } + + private void OnCreated(object sender, FileSystemEventArgs e) { + //TODO enable cancel + CreatedFileMonitor createdFileMonitor = new CreatedFileMonitor(e.FullPath); + createdFileMonitor.RunWorkerCompleted += (s1, e1) => { + FileInfo fileInfo = e1.Result as FileInfo; + parent.SafeCall(() => { + Insert(0, CreateItem(fileInfo, true)); + messageBus.Send(new CreateFileActionMsg() { + FileName = fileInfo.Name, + Source = parent + }); + }); + }; + logger.Debug("{0} {1}", e.ChangeType, e.Name); + } + + private void OnDeleted(object sender, FileSystemEventArgs e) { + logger.Debug("{0} {1}", e.ChangeType, e.Name); + FileSourceItem fileSourceItem = this.Where(item => item.Name.Equals(e.Name)).First(); + parent.SafeCall(() => { + Remove(fileSourceItem); + messageBus.Send(new RemoveFileActionMsg() { + FileName = e.Name, + Source = parent + }); + }); + } + + public void ApplySort(ListSortDescriptionCollection sorts) { + throw new NotImplementedException(); + } + + public void RemoveFilter() { + Clear(); + cache.ForEach(i => Add(i)); + } + } +} diff --git a/client/Maestro/Sources/ISource.cs b/client/Maestro/Sources/ISource.cs new file mode 100644 index 00000000..23801d7d --- /dev/null +++ b/client/Maestro/Sources/ISource.cs @@ -0,0 +1,10 @@ +using System; +using System.ComponentModel; +using System.Windows.Forms; + +namespace Maestro.Sources { + public interface ISource : IBindingListView { + DataGridViewColumn[] Columns { get; } + void Startup(Uri address); + } +} \ No newline at end of file diff --git a/client/Maestro/Sources/ISourceItem.cs b/client/Maestro/Sources/ISourceItem.cs new file mode 100644 index 00000000..749c2826 --- /dev/null +++ b/client/Maestro/Sources/ISourceItem.cs @@ -0,0 +1,10 @@ +using System; +using System.ComponentModel; + +namespace Maestro.Sources { + public interface ISourceItem : INotifyPropertyChanged { + string Name { get; } + DateTime Created { get; } + bool IsHighlighted { get; set; } + } +} \ No newline at end of file diff --git a/client/Maestro/Sources/Messages/FileActionMsg.cs b/client/Maestro/Sources/Messages/FileActionMsg.cs new file mode 100644 index 00000000..7ad1ce8d --- /dev/null +++ b/client/Maestro/Sources/Messages/FileActionMsg.cs @@ -0,0 +1,13 @@ +using LinkDotNet.MessageHandling.Contracts; +using System.Windows.Forms; + +namespace Maestro.Sources.Messages { + public class FileActionMsg : IMessage { + public Control Source { get; set; } + public string FileName { get; set; } + } + + public class CreateFileActionMsg : FileActionMsg { } + public class ModifyFileActionMsg : FileActionMsg { } + public class RemoveFileActionMsg : FileActionMsg { } +} diff --git a/client/Maestro/Sources/NexioRESTSource.cs b/client/Maestro/Sources/NexioRESTSource.cs new file mode 100644 index 00000000..4fac1aa3 --- /dev/null +++ b/client/Maestro/Sources/NexioRESTSource.cs @@ -0,0 +1,189 @@ +using System.Linq; +using System.ComponentModel; +using System.Diagnostics; +using System.Windows.Forms; +using LinkDotNet.MessageHandling.Contracts; +using Maestro.Sources.Messages; +using Maestro.Commons; +using NexioClient; +using Newtonsoft.Json.Linq; +using WebSocketSharp; +using System; +using System.Drawing; +using NLog; + +namespace Maestro.Sources { + class NexioRESTSource : BindingList, ISource { + private readonly NLog.Logger logger = LogManager.GetCurrentClassLogger(); + private const string LONGNAMEID = "longnameid"; + private const string RECORDDATE = "recorddate"; + private const string EXTAGENCY = "extagency"; + private const string DURATION = "duration"; + private const string MODIFIED = "modifiedtimestamp"; + + private IMessageBus messageBus; + private Control parent; + private NexioAPI dataClient; + + public DataGridViewColumn[] Columns { + get { + DataGridViewColumn[] result = new DataGridViewColumn[] { + //todo DataPropertyName-et is át kell írni? + new DataGridViewTextBoxColumn(){ + DataPropertyName = "Name", + HeaderText = StringResources.NEV, + AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells, + }, + new DataGridViewTextBoxColumn(){ + DataPropertyName = "Agency", + HeaderText = StringResources.UGYNOKSEG, + AutoSizeMode = DataGridViewAutoSizeColumnMode.ColumnHeader + }, + new DataGridViewTextBoxColumn() { + DataPropertyName = "Created", + HeaderText = StringResources.FELVETEL_DATUMA, + AutoSizeMode = DataGridViewAutoSizeColumnMode.None + }, + new DataGridViewTextBoxColumn() { + DataPropertyName = "Modified", + HeaderText = StringResources.MODOSITVA, + AutoSizeMode = DataGridViewAutoSizeColumnMode.None + } + }; + foreach (DataGridViewColumn column in result) { + column.HeaderCell.Style.Font = new Font(parent.Font, FontStyle.Regular); + } + return result; + } + } + + public string Filter { get => throw new NotImplementedException(); set => throw new NotImplementedException(); } + + public ListSortDescriptionCollection SortDescriptions => throw new NotImplementedException(); + + public bool SupportsAdvancedSorting => throw new NotImplementedException(); + + public bool SupportsFiltering => throw new NotImplementedException(); + + public NexioRESTSource(Control parent, IMessageBus messageBus) { + this.parent = parent; + this.messageBus = messageBus; + } + + public void Startup(Uri address) { + string path = address.OriginalString; + CreateWatch(path); + initializeList(path); + } + + private void CreateWatch(string path) { + logger.Info("info"); + logger.Error("error"); + dataClient = new NexioAPI(path); + dataClient.Open(OnResponse); + } + + private void initializeList(string path) { + dataClient.GetListAsync(); + } + + private void OnResponse(object sender, MessageEventArgs e) { + JObject resultObject = JObject.Parse(e.Data); + JToken jToken = resultObject.GetValue(NexioAPI.DATA); + + if (!jToken.HasValues) + return; + JToken d = JToken.Parse(jToken.ToString()); + string action = resultObject.GetValue(NexioAPI.ACTION).ToString(); + switch (action) { + case NexioAPI.LIST: + OnList(d); + break; + case NexioAPI.CREATE: + OnCreated(d); + break; + case NexioAPI.DELETE: + OnDeleted(d); + break; + case NexioAPI.UPDATE: + OnChanged(d); + break; + } + } + + //private void AddItem(JToken token, Boolean highlight) { + // //Add(item); + //} + + private NexioSourceItem CreateItem(JToken token, bool highlight) { + NexioSourceItem item = new NexioSourceItem() { + IsHighlighted = highlight + }; + SetItem(ref item, token); + return item; + } + + private void SetItem(ref NexioSourceItem item, JToken token) { + item.Name = token[LONGNAMEID].ToString(); + item.Created = DateTime.Parse(token[RECORDDATE].ToString()); + item.Agency = token[EXTAGENCY].ToString(); + item.Modified = DateTime.Parse(token[RECORDDATE].ToString()); + if (DateTime.MinValue.Equals(item.Modified)) + item.Modified = item.Created; + } + + + private void OnList(JToken l) { + if (l == null) + return; + l.Children().ToList().Select(t => CreateItem(t, false)).OrderByDescending(i => i.Created).ToList().ForEach(i => parent.SafeCall(() => Add(i))); + } + + private void OnChanged(JToken token) { + string name = token[LONGNAMEID].ToString(); + var item = Items.Where(x => x.Name == name).SingleOrDefault(); + if (item != null) { + parent.SafeCall(() => { + SetItem(ref item, token); + messageBus.Send(new ModifyFileActionMsg() { + FileName = name, + Source = parent + }); + }); + } + Debug.WriteLine(string.Format("Changed {0}", name)); + } + + private void OnCreated(JToken token) { + string name = token[LONGNAMEID].ToString(); + parent.SafeCall(() => { + Insert(0, CreateItem(token, true)); + messageBus.Send(new CreateFileActionMsg() { + FileName = name, + Source = parent + }); + }); + Debug.WriteLine(string.Format("Created {0}", name)); + } + + private void OnDeleted(JToken d) { + string name = d[LONGNAMEID].ToString(); + NexioSourceItem fileSourceItem = this.Where(item => item.Name.Equals(name)).First(); + parent.SafeCall(() => { + Remove(fileSourceItem); + messageBus.Send(new RemoveFileActionMsg() { + FileName = name, + Source = parent + }); + }); + } + + public void ApplySort(ListSortDescriptionCollection sorts) { + throw new NotImplementedException(); + } + + public void RemoveFilter() { + throw new NotImplementedException(); + } + } +} diff --git a/client/Maestro/Sources/NexioSourceItem.cs b/client/Maestro/Sources/NexioSourceItem.cs new file mode 100644 index 00000000..ea640ab5 --- /dev/null +++ b/client/Maestro/Sources/NexioSourceItem.cs @@ -0,0 +1,68 @@ +using System; +using System.ComponentModel; +using System.IO; +using System.Runtime.CompilerServices; + +namespace Maestro.Sources { + public class NexioSourceItem : ISourceItem { + private bool isHighlighted; + private string name; + private DateTime created; + private DateTime modified; + private string agency; + + public event PropertyChangedEventHandler PropertyChanged; + + protected void NotifyPropertyChanged([CallerMemberName] String propertyName = "") { + PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); + } + + public bool IsHighlighted { + get { + return isHighlighted; + } + set { + isHighlighted = value; + NotifyPropertyChanged(); + } + } + + + public DateTime Created { + get { + return created; + } + set { + created = value; + NotifyPropertyChanged(); + } + } + + public DateTime Modified { + get { + return modified; + } + set { + modified = value; + NotifyPropertyChanged(); + } + } + + public string Name { + get { return name; } + set { + name = value; + NotifyPropertyChanged(); + } + } + + public string Agency { + get { return agency; } + set { + agency = value; + NotifyPropertyChanged(); + } + } + + } +} diff --git a/client/Maestro/Sources/SourceInfo.cs b/client/Maestro/Sources/SourceInfo.cs new file mode 100644 index 00000000..6a0aa418 --- /dev/null +++ b/client/Maestro/Sources/SourceInfo.cs @@ -0,0 +1,9 @@ +using System.IO; + +namespace Maestro.Metadata { + public class SourceInfo { + public FileInfo FileInfo { get; set; } + public string Tooltip { get; set; } + public string Name { get; set; } + } +} diff --git a/client/Maestro/Sources/SourceType.cs b/client/Maestro/Sources/SourceType.cs new file mode 100644 index 00000000..cb2d35aa --- /dev/null +++ b/client/Maestro/Sources/SourceType.cs @@ -0,0 +1,5 @@ +namespace Maestro.Metadata { + public enum SourceType { + UNC, NEXIO + } +} diff --git a/client/Maestro/Splash.Designer.cs b/client/Maestro/Splash.Designer.cs new file mode 100644 index 00000000..b0c8932e --- /dev/null +++ b/client/Maestro/Splash.Designer.cs @@ -0,0 +1,84 @@ +namespace Maestro { + partial class Splash { + /// + /// 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(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Splash)); + this.splashTimer = new System.Windows.Forms.Timer(this.components); + this.imageList1 = new System.Windows.Forms.ImageList(this.components); + this.pictureBox1 = new System.Windows.Forms.PictureBox(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit(); + this.SuspendLayout(); + // + // splashTimer + // + this.splashTimer.Enabled = true; + this.splashTimer.Interval = 2000; + this.splashTimer.Tick += new System.EventHandler(this.splashTimer_Tick); + // + // imageList1 + // + this.imageList1.ColorDepth = System.Windows.Forms.ColorDepth.Depth8Bit; + this.imageList1.ImageSize = new System.Drawing.Size(16, 16); + this.imageList1.TransparentColor = System.Drawing.Color.Transparent; + // + // pictureBox1 + // + this.pictureBox1.BackColor = System.Drawing.Color.Transparent; + this.pictureBox1.Dock = System.Windows.Forms.DockStyle.Fill; + this.pictureBox1.Image = ((System.Drawing.Image)(resources.GetObject("pictureBox1.Image"))); + this.pictureBox1.Location = new System.Drawing.Point(0, 0); + this.pictureBox1.Name = "pictureBox1"; + this.pictureBox1.Size = new System.Drawing.Size(320, 349); + this.pictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom; + this.pictureBox1.TabIndex = 0; + this.pictureBox1.TabStop = false; + // + // Splash + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("$this.BackgroundImage"))); + this.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch; + this.ClientSize = new System.Drawing.Size(320, 349); + this.Controls.Add(this.pictureBox1); + this.DoubleBuffered = true; + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; + this.Name = "Splash"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "Splash"; + this.TopMost = true; + this.TransparencyKey = System.Drawing.SystemColors.Control; + ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.Timer splashTimer; + private System.Windows.Forms.ImageList imageList1; + private System.Windows.Forms.PictureBox pictureBox1; + } +} \ No newline at end of file diff --git a/client/Maestro/Splash.cs b/client/Maestro/Splash.cs new file mode 100644 index 00000000..5f92bcdc --- /dev/null +++ b/client/Maestro/Splash.cs @@ -0,0 +1,23 @@ +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 Maestro { + public partial class Splash : Form { + public Splash() { + InitializeComponent(); + } + + private void splashTimer_Tick(object sender, EventArgs e) { + BeginInvoke(new Action(() => Close())); + //Close(); + } + + } +} diff --git a/client/Maestro/Splash.resx b/client/Maestro/Splash.resx new file mode 100644 index 00000000..7a9bd68e --- /dev/null +++ b/client/Maestro/Splash.resx @@ -0,0 +1,10669 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + + 133, 17 + + + + + R0lGODlhWAJ0ATAAACH/C05FVFNDQVBFMi4wAwEAAAAh+QQNFAAAACH5BA0UAAAALAAAAABYAnQBgf// + //DkQla06QAAAAL+hI+py93hYoSy2oubEIvmD4bieHjkqWwqyjpmC8fA20KrjOcMzfL6z+AofMCicXj8 + qG5JELEJfY4CTKj1Ip1ek5tEdgvWhjXL7ljyPcPSzqo6zP7E30ov/R6aHzllId7+B6SH5RZoNGiBaEiG + oLgI5qjTZ/YY+eiiQ+V3KZjJyeJn+ZkkKjO5uVg6aqCKRLka0woIKxJKeynbsgSb+9nLinp78jsjHGJG + bDz8V3abnJoZrCznOa20a333fD29bUj8mo314x2oKf5WbhHujE4t6Y5BrP7WXBhPqoZtTa8djY+mGsAK + JtgN7DRmhbR2BwPmWHgwWT86BflAbLgm4UX+YxPTSdroTiLGCX7MgBxJoiOCkwxRdpCksolIlzsObGJJ + 892Ve9liqhEVjIPPQwJzNlpZ0qgMlTzFDR0TyaCAp+SqKj0aBOdVh3v2Rdxa4gS7DVRxzAT7xCBYnUaa + PtLKam0xHEIBnkUbAa5cJFz0KisLiW7dkAjXSgmndi/ftn7/7v0lBPCyoluzSGumuCbjq5Kv9OrSWcRd + vHlTGHD7uCtnxZ/j8itMWgKqm6grq14tF7JrjrBjl16ZojHGcsJfpzYVVtiz0J7X3TSdeVaC4guoO2ZN + Nzmt0b7zPp8eXbpNi5hBWL9+HAayljmYW2HzKuj5eKfql7+QeKT7KNn+d/sKAGCAAg5IYIEGHohgggoS + +FMG34EXnn3elYTafMqdsWCGGm644VQDegjgKsthyGGJJioIoiYEpnhiiy4uCCJZK7II4BJUZDiJJjQG + uOOLPv4IZJAINoicf5X0ZpiDFM5mIR321YeUVxMymVV3SRY5Fy5IWikbbRQC5FYfp4kpllpN8hJda0aa + s6VtEMoW5Zj41DYelKBIxaWbKHRByX5rxpImdF3WOeaZYdA53S6IOlddnriBcpp2bLb5qE34CXGKMpNM + 1l9wleZGAiV8YjUpZaCO4KWlt5DJKZaJfnrqMXwAwKctgUxFKazeATceUqsuShA81RnKiZ/8oUr+q5y2 + MlOEsfko2Wu00nIiJQrgaKBnerXYQ6o/VmU2CKu0MplfPeWK9tFlxGoZKKqKbhLaNs4+q6SUeF5yLroP + mbkuNO1uG2my3RJpaqzQBiGwqoZUW8NHDuRLWHiyoCKZvBK7W+WrC0Ocxw+JcYzOvEdMTDFFzV7sLqa8 + JtpvqC0/w1PLpWIXQ8kefQvunlUUAmxfOAu2kHzjglxseFneOXBguepqXnxSEX2bWUXc4+W7MtObc83i + bWExyro8KKiTUI8DBNVhWxSy0bnYDMfJXqv3ZXBXc9PeHo0+PG7E/0K6NRRXizzyQ9MqjMfYiXQ126B6 + Z63LYp7JDHjgghX+KvetBe/7IGIDRU6Ueo4f+zPNpmA6Vs9Th162tOXO7fbbe34uU+t7ez54oayvg3rZ + DBM+tHGuiwW75AkDqva+cWZ1O965e7x73k77Pjvwfbe+Lueyw8mor4ycAflO+d1nuMnF05709XWPPzpt + DyeP8NKQ3jfs8MqiF7305S/fsNFHwy3q9+G/7r7XQaw86ruQ/iYWvMsRD31Asx1E/mc/BXLveXJiT/2Q + lUCpBVApxJmV/9hXQfxpJD6qQ9MByXc/DYowW6kLIbasMDc/hSlgo7Ce+TA2vaWErQf62x/zSLcrv3WO + exnzVfO+0cNWGMQbXTthE5ISRC4MMSH1gmD+c5KIQkmdb4NGmQgQsSfFG9bsSS4zIAMjmEIevrBVF/wh + TpIXQ8z1L1MAq90fbMjFCixxhdbqoQ83gwHWWTFYXxNVl8JHOhA6wY9K1IwK+cg0y00thvNhAh2HBT/n + mA50ZwyVIxcIyUgya5KHOA8FKUeGTbVPY727ox//eIwHPHJ9+nLiKAQ5RYxVCzMP3J3QasjIxn0yfxOq + ZSffYjcxBpJbXlEl8kypSFliUZgZNCYtoYZHZdZDe7rTpiZNY5K8HU9uiMwk116pCojIYg7YRCe+CvjD + 3kiois575s56NipLRTONBvPkMFNSL7Ycs3Bgc5gb8QQ14aiLY+Tapxb+f1fHl6jxYIcLJi0GqTjj4a6F + 8qtTU46IIXfyTaJsvBROsplHfdyuZbjS49xqtRF+OZSQ09SZNAHaNJagNKUTDKNgvoBRl17SozPtmEht + SlIx0I2mNb0lHAUH1KBulHeeMqFFR5pDssWyok39BAilainLdNRvINmk0rpaxqQuMqKYOKpTYWiowazx + UBchD5WQ6FY0PlQeKWOqLVehSKmCJopbeFImySSuK14VqdWcALJOstNQim0ntEsLWDE5Oo9G6bJ+Hais + /snVWIIkspKdrBCFadmiuqysil2sXvfKFVmN9pWw1Chjo5ZWy6bviZpMHmm3CEC1hnapbc3rRTn+uz0c + 1paG08iXOYGLVrbyU7gOGu5fu7lb3FL0T/VsLrBAOlHX+pO6xeVpF30mrEmCdKh/fBdgsVGr7bqUquRt + Y9NAe1PznhcdgW2oSaTEA0WBgb29SmRiA4ZYlhGQaL+VYB3wW19QRhc/zEAuI9y7sr6BF7uEQt7QErlZ + xJzSgSKO7YRrAeGsSvi6/FUIINdauZ5qNpWoDOf2wvlffpmYxeNtLHd1SNvlisOsWOPmBJ15jYSKK2iO + DXIjUwxbINO2wYTFQ4AtjGKdxfWuVKXyLHusYiETc8o5wbJSN2serz4RitMVXXAbWw4vS7nMqtWwOIP8 + zfyKd4fKi7A65Lz+YpdsWHhGxjOF7xxl+yL6NxCOs6EBbVKCFdrQh/axm+PHXD7fryClZeFWBg3dTFO6 + 0mG+dJXq2uRSh3fPcjEdBGnwMSJHJxyQHnNy+0xdR+O51iljyYGHG+tRT2lZZCa1ph/650cHOUxzhPGi + VWdjYXf3xxCd67G1qOtd45lVvmSL1Qz7XD/OKtHVfnB+k61sYYebvuWN1POYbOZV3ZrXtsbgTdHtZGnf + 17qrrfNb2FbsN0sU3/nWd5I7229/LwLgAV8fqh0rpIhLfOIUr7jFL17xHmG8RjLauMc/DvKQf9xGB9K4 + gMRcb1YbXI87/pqh+0Rpy6yO36FW+crBCGX+5dL2BvRe9WcRXvMT3zyjlkZxvL1L7XLLN8JzbvjQl550 + TyqcXdpGWrs77ains7zo+952ZEZdinIRvOBal62N0uv1qCs6kKn25trLXl3BURrm6RZ42+oOdy2Xzi8g + m/pZyV4m1fa8j3mfqD02GdMIHeXo9EtrSPFe+DOTeGx+X9jiKy++29696pHHKY2hLu42m/qxj+d8562J + 6WUaA47wijn/oAL203uelpG+25Gr2hZVj162sHe97FFfxPlurHn/zazod5/T3kP+93w19o1vVXxUilNl + Vie30onbWsAzv/nZq/IdSKjPPudz0nwePOHvxHimX3/7OWflrcVmYDT+D8pC5i/pav+uffYDnfbvV6kd + CYx1nnZ/5+R7+qdVqmdthZVYDcUyk1R/s6dl+GdcBth2cWd73jNW2rM6erFhg7V8/UaApkeBLSd8qbdm + 4IUoJzFHZfV1H1gm2ed0I3h1l9J/2FUbDJWAREVGasc4WURo+SeD7Rd81yZ3FnhIdkJODuRu1vd22JdL + MVhY65cxD4ReywRNDThO8YVyPeiDbteEMqgIX3SBzAMtg0Rg87SFyOd4PwiFQch1mEQ1L6UV/dOFygJg + sVeEbDiBbqh79jSEk0ODLsQYXvGAkgc3sVOAfCiE1/Q0KghqosZoGegxycJzeJiHXsiFitiHQoX+WR6m + hJ+HgOnHCIUIfNSEiZmoiUzohEt2SnG4LaLoYaRYinbnYJ6liZAhH3QYYoUGQbAYi8IGDqwji0aVim9o + UkFjL3ETQr6YLi2ViK4SgKJ0i4LTdwzoPJiXZL8mdK/1ZXtYjMFoV6CoECvoDkygIyKoNU/ojam4Dewl + YvHXSpsTjzb3gqeoLcV4fABjY2KIe3aUNv6ohrTYdG34jd6ji/3oEi+Ajcp3iUG3jYroReDzh8NBhFeC + dg75kHwYka30Ufv1JrbIjRlhifiYj9W3XswIg5LYTxYEhPgYOQspku73hXj1jCSZhv6HEleGkjTJGyNp + kzeJkxQJHTvpSt3+AIw/WZL6kJO2R5Te0ngEWZCw0JR6SH7SWDQ1aZOcM5XqqGA6mJAwFJPomJW/spRw + Al/a+I89iZUkqZVbGUDwNE528ZRQyY5TpRFf6X2e8ojApJYu6JLyVpZo5JYpx5dr+ZcXhZeAmJYsSZfT + iJiBqZg9QVn2t451eVyQmV2S2ZdiyZaAqR/qpZlm5JdR+V4weX7NCD1WZZik6VSmSZlj5JoV6FPONpqW + CZa8J5S6M5jEeFq8yZmdSZaf+WKbWZi1aZvvlZgcRpy+cJRImZR3mZwctZxXuZqs6VWx+ZrQyJjUaZyO + SS3P1hDqsJsCVZy/eZjXiZ3ZqZ2qKSLN6Zz+PEhXsradDcmezOme7+ks4+aRwzmfPNmdEPlOWZeZ/UlK + 3Fedxwl9Agqbc1mFNFeZCEpQ6RmWgyih8EmfM9iY7KdOyGSRvVmfVHeg+rcQMlShhHk6BFqUIeqdFVai + JmpQ2wGjPumcobFu0cmf5Qmi/wmg8CeFr6cc47mIqFiMxEZEIDmgH+qf5qmIREpFRso/8pmSSdqS+ChX + SumkhQSl72EWIselXeqlXwqmPqICKhKmH2JyZYqmEvckaeqlOXiAOrp9mVIWQFp6blRgdKp+deig9DiC + Z1lnLapfVmgmkOiU3AmnGjqONkCUeLp5zYiMaNmoOaqkfYo2ZJGluMn+Y1oThzB1qS6aoocap68wFIxa + p0CTjO/olpwzjLT5k5bapHxqdIe1qfoZgjg6pakoFIv6oK9YfAYWa02pqtK2qoY6mRmZUyuIZHAYqcR6 + q9ZZrJkqRzVqO8sqqc0KobcpiB16OuGIgFHqLzL6k6NaUCvJW1YInoFaq6A6guIKYkJ6o0fYqfv3repK + gXO6l+E5YBz4bfaYefRqgIARr6lJLagKqeRpnyqqkTw6k0EZY+fKqgfrr/onGaTKSQMLegbLrLu6o7fX + o9vkhA+bsbC6sXRlrNZgRTY0rBmQskfyqtA6Jxz4nJNIghrrhuIqsvy1XZ0BWcL6nhZqfCWLs7P+WK00 + G4QxQbHUihGGk00r+6bhOmDWCia+iaQ3W7T5mqEvC7IQO6kji61AW44MxqBUC4aHcrUDIa1AWahbm7BP + S7QNsbPTKbbr2rJXOhLnorNNW7ZVS7Je67Yzq7V5O7ZWG7cHsRE7xbTyeq0NSrd1K5sxGrHbZ7N8a7aF + K7CAW68jBKjdCBaUa5Tgep4yFpBGwblhK7kS+32Z66mi27hTW7rsp7Ooe5p7Mbpw27qQO0rkurmr256e + 66xFirufpru7+7i/xxywC4FrkR+kdbh+u6JOco/IexHXQpVG+BX4aXnaCr0YKpCaW7vMtx/GK7W5q72s + u7hyuzEKShOzS7r+5Xu5C4e+KCF2TlFI+Dqj/2aV6cu8XYu3Zle9SGks4GugrZa/f2u5pmu/+4m8iCu8 + ISm/9XvAOcG0s7WYUKu3HArBsvu2DeyjizOWAXrBrZbBZKueWxUPy9uv7vvBm6tTHFzArqtmKQy8ezqb + Qqtzoem0FksTq8oxDSa9Ewyc35nDKhzAnTu8pwc4ABy8bgsXXlSL7tq8D5ybdKayycSv7xu4t2SjdasX + O8VwLey9UonEeYq1U9xcm4i9vWvB/VtmWUu77OvCj6nGgha+RKy25iuVUSzHbCyaFGzHb0W/6dsYXmbC + 47u2lymPazzH69ux7euZ+DB4tIqxdOzFxLv+emHss8Jwr6rouHzMyI3MwmDyP4A2yEH6r5piyfQmn+JZ + ZG1rwKsnl0kbu8rZxKFbwZj8yoR7HskWR0UceSh1ykmby/kQb6NMym+MyWGMysEsOZAcaOb2xz9syyWs + xbGcXmaWFluHx2jsxz48J9QMEx/ZzNP3vIkLWNIMyyMczgNZkVn8xIaswWbrc+hKxgH7ye3syYpcxt6c + CV06pmzqz/8M0AEN0Gcq0AWtpgZtIGhrTeO4sMacDbDLa/OBblQwvcx8v31sskdLyCarz1JG0Vwpkxx0 + w1/bxg/d0aD00QycJanCWiqJz53cYhUa0dZBHAopjM+0ShlWz4U8xgv+HLXovCcKmW3to9HcW7PAHJsR + fdL15oyaKnr0HLJHrcWmWWsnu8pYVol5hsD2DMrYqNRATc1NLZgtyMm2q7oz09OGGHRiLbOBGMTQLGhA + WtVLTZhkMb0uLYnGS8zeitRpSx903dFsbVsISX2WbIyULL6S9tNqjZF2LbMJBc7mrM3wW2dfzdjqjBRx + BhdB8cxcHdeKTdJgfbwpMHZpFsdcexVTCWnKDNJhddfdl9PkC9OfNlOAJtGvLX3yTKghHdWzTdsSGLSi + fdmJMtSmKMk8ncDAbdKADdaO3dKJ7MS+ndpIy9HMPdpVYgNVDByGrdCdF8HUnc/XjdlJHNn7a5f+2VrS + rSzAyl3d4p3Objre0a3eyc3XmhLPRq0BetBOa7jT0q0UKClng1TczqHfWzzJcBfB0eRlGDXgQ1waS3zg + Zffd6brc1k3DA2zhMIzcia2loS3cF47h7j3OGM3hiNhi+QPV3S0nDW507yzVskvhppy6903G2h2JL43Y + MF7fyDnjGR4caVAce73XuJ3HHV7hND6htQDkIq55ve3Q9F2xlZzkGBnJU069RG2r/i3FRt7eSN7j68BE + guniVwzlJt7lPl7l0D2GMuzMOj20pazjXC7jXz7cIP7h7Azn6y3nv3ImYV5ZnXLJeP7k073j+ILfXl7n + JBzomEni/x3jHsz+WX5+6GgunC9e4qu8cGiD12qO6IlO6Vk2r2T+3wA+sEho5e9952kO6Gjd6PjL3grb + 2nTO6aFCzEMejQ+t4O/EPk106+Z9xvMturme6Xs+6Z/OVX6nSLY+y/D86PHJjLyu2wos0pbu6M2ugNRn + 5sue6jXO48Xu3WWe7XsL3rLO5NsuuFQue8NI6uYC2vHt7Z4ezapuxJeO6XB1M9HO7eg+7aKOyIUeT/eu + 7eQu73OL7zwbw/7+ou2O6vpe7hqe59WO8LCpcNAe7u5+0YUni+tukFZm48bO5ls96EVO7O/KkAG/8A3/ + 1q3OuNZOhhxf8LOO8oKe7iJMVq/e8n5t8R3+7+v7jsPH7aHaVfG55/K93ukxz+hmfdYRf4hDb/IMb+cp + //CfzfIJD/Dv/vLF3NlrxvMiP/InivMnH+se39/SCfWUPe4XqfCnrvR6vOlj/sVbvvbVV/VWr/Nszt2H + PXT1R5RMMXUUX6o5X/ZID78lD/R/D/ZBr/Ygn+ODf/arnvYCH/ZGn/Vvb/aNP0afSvf1DvmHDOyES/gF + yvSZT+SSf9qLr8Sff/Nfn/iov/mOrOUnzvqOf8KAz7ZE7/YzP82xv/SsTvs2b+5jj/FcH/cfO/uH7/uk + z/mC37eWz9+Y3/vMD/OVrvyTq/tYxfurTxEIrf3bz/3dL3IE7f0CUgb+4T9xso38kj39aT31ZgeTI7LJ + z1/637781f9ZR8sdBIz90m/63Wz4geea7k8A8DF1uf3DkzJOe3HWpm7/wVDsxNJEhPMjVcFN1ZiTE5a+ + Zxyw9d7jfUHhBDjswYyK4scFaCY1y5IUuqGCrtVhVttVcb3M8C72eo4hOjC6sc642Sd4nM6Y1xtI7Z1h + xtvV/n56+AQxCg3ZEBP1qhYP/BIPHtsk3wItMTM3ESj/GpM8nUATRWs4L0w7UWVUWXFc2Ui3FGYtbP9i + yV6JNHlHfi11w86geHAfkOt0h8Nim0uDJaG1lH0hPazpnqV7YbuxwAWpoYqNE142tOOYxdO+3aP+4rfn + UbxszG9Z2+sB4fspABxDLs+6CwZboUM4auG9awIn/YNYaaIjI6TyhcgoBJ+GjdFuEFQkseKpkqH6fQyC + z6DKcSRP7goZ0yTNlSmdKVznMtfDmNxsRgxKqB7PhykiFeQFdKgTpjZFlox6JKdCSE/0GO05symkpzSn + Qgx7QyvXWmfMJH31takLtlK7mgVXVm4tgG/b4p049q47unWt1tMb1C1MuHFj8G0x0MHfTIOHFgZcUfG8 + yiUcJ8zTD3JbAa4uo0QsZ27DxMk4Tx49SuZpqKtNhAZh2nVB2nhAw+7z2bBY3cCkZdbcOF5nxJKH//wd + Lpjw2sTd5V5+ljf+Ddk3p1v5lQ4NFefLyuTIblW68vGHtn8njTq66vFNyh8+b+H6wdvPF9ynZ31+fvj8 + werPG1bUW283ywAUUKf4KFPwnVf0i02p4tzr778EG3SQIlS4Y4w6BDHU8KrWDJRPxFUIjHAKnVTcD78T + GSJRwpPq24eXFu1TIi3fkoPxqhRUqbFCAYWcAEcj0+pwrxB9/DFI85osUoIjpyxGyhdXbNK/6rBMTcsr + JxzCHDBn7FJLhp408UQyz0piTBqZPBMFIOMU7MsUqWQPxSV7lLNNU9gEDsZAsXHTSjhbIDS9NPkclMM8 + k2lE0UHKmPRGLr/I0FFOIFVyxJoEYtTPKgERVdNBQgvsI0YDPJXRy0x5KQAAIfkEDRQAAAAh+QQNFAAA + ACwAAAAAWAJ0AYH////w5EJWtOkAAAAC/oSPqcvt4SKMtNq7BJu4+w+GCSeWmYCi5mqR7AtLcaUC9Yzn + jYvx+m9b+IDEImJobKRSSROyCRVGmZqotfOUXWe3Q3YLxoaVy+qY8j0T09yl+s3evE1dQHyOvxvLTPzO + b6XHomIGGCV4ZBhSaKfoOAJYFvToRWmESNdnuRaC6XjjuVkUqsNX50gqimYlqZrjmRppFus6Q9umKXpb + CzkFccorErr7Nhuc59daS3zMbCHwy3j8MTztoGwd5iwC7LrN+33dKJ3dIlxO0Y1+Oafuve40pfELf1Fd + f+CWi8855oYe7t2UceT4VepksJeNgglhBKRRheGyhh4eKqhCj2Ii/oQaJxCSqPEcGJDTLOqCMssdvHsU + b0QkGbLiSJjBTG6yaQAUTWukcG7hUGhnTHNX9q0cShSGukIBhNYU2TFfPqdIH7BSWc4nJWJLj1AVCELr + lSFYqyYlwiekWFRtlGw0yDLqCbMrcJY1RHUt2ySM9ALpORTJV7oK0Q4uSdgq38IAS/iF8kTa3cQmjcpN + LGUx42xxL2e4SAizYsN0Hxuyuxkxx5hZJC+cHHjPYc6iM+9RYJoF4NjXgvqeja8ycNW1U5fCTRuq2nS+ + E8D2/GM48eJv0doG57hqmuYIpB+d+8J7M+rGc5DLHVb5cubdL5I3QFaDKRDin74/WOQUepnq/qG7lepc + fdZQYUqBlomD2X5+2HTeMgE8CGGEEk5IYYUWXojhgz9dENRnxRkI0j//MPBccPfh18mE0FC44oRgpRdI + hjLOSKOKEaIgIY417shjjyxCqGOOLQq5xIx8NDWkjT4uyWSTTj4JZZRSVohBgyf15x8ZUzEiYBggEpgL + NNgwx52HlJ2IonXI3ZQdUnpoAmc9B74mYlqZ/EeYggtqVh4yWFLkAky/vbbOnKCBuIJlJX6HZkBmFKSn + HH82FChEWxJaTolleFQfMF2qEikcQLh03WnxaNcdTTUUyMt8bbYF2plowqdUgACuqchubi7yaB+fjjri + qTiQYyils9Ia/p58Ed3ap5eNTJrQHV10OJUqwdZlXkGLZnUssoMslNOypbaj664c9tpeqptci+2w2v66 + VbfPJtsKQ6F6CyOqVWLDZbFe+ptvDAfCG++xXI2ozr2p3PuDIHaGayZe8G4zMMF7GVxrTsyOe0a5vHXQ + jXzOKQLwagJLtC1P8lokUaQLl0Yfif1azOvE0TGU8nSN5qeFqK+a64Gv6dqaDMGOhgzzyqT9MYfHrJUQ + rKc5u9swsNrGyi633bI8WsfCAl1zqpJNTfUrhhHbqyQlX4mxmkx7Da2xg1Abazs2Wx2xxlvSDJm88x7X + NRgvJz33xtXarUNlebtHtp9bu/02K/gG/vxxeIcPjbjZ+dVBUuOOPx7dKlvM8zXY34Y7M99VJs7XtJfr + zQ/DTQMr+oY/m57opWKr/kzVTaALO55agx56z2Pdjjsd6h5ajO+tY0pigLz/5fffw9buS+mVF/669P5Q + /3vW1U47Pet+H43974ObFYeg5PfmLPgohajs8iqfD7mkh2i/fSaDyhw/54VuTFgroM7aBjjjJWF97MOF + 7mRWPsxpDm/PCJP97KO04ilwFPx7mrs+MifPBY2DEqMbuMZTvXDQxCcM1FcplOUOEa6uH7Lg0uUi2MET + qRAmLMxhlgTWvcXlb4KyiIC4QFU9652sAjhpCvKSByuVyJAGJAyg/nuwtrbZJVGFZ5GfyVzots6hpIoz + AZnIMIi/BG6QiF+E4vVOCD8+CfCDBroTGon3RiZWcTCyo+HZVPU8P9KLfK6iz/ss0Uctli19OIhFIuc4 + KjPyjIxQExGZZgNDHFIOj1ywhxc36cbmDfEV0oFTIQ9FwEtOkY2cBGIXY+DIBFGCb6pzYiUvaKg6Ro95 + 0APEI32WRz2ysUS/ZGUyJvlJXtEJlS+BYFdG9qIMBpORLyBBFpUIRrxsTpAfYFXUHnYCz63Shzo0Tw+G + ecZXhrKMEKNdMoN2ivoFgXNLuab07AnJVnJPnfybTDGNeYZDvtBiPEDUvj4yiXCGyZ6hkYom/nGVQjVS + 84lwnGj/imHCbP0FnA51ymHQNhnOVVRwSUyT5c7pEC0JU1azpNk4H2hEiz2KDOIT3+fSOM01tvGCkSPc + I156RXe1b5vFChk+91fSb8DmFpHhoWh+CVRoXo8NUd0dR+lU1XzqM1H+rGYcA+dTkmXVcN/azlFjxlOi + TaSk2NynRcVgxLd68Kfzm+ol2dmbh+50q27VKVxVCtZskkwenfyCXtvpTHoe1q8IzGlPqcGewAp2sHVN + VluDOL8vGcVOVz0eW7noybgV658ALeIYudcamY7TV988Kzl3Zs7QgnJkICFtI601kNNdFrHBANhDbTsG + pQoFFmSS7DpP/uq/8Ok2tUtU7l37xtbdKk+2/Pmq/lhqrbHytptMiWs27pJK80VXuNRFqXcfG9bYNneb + 3O2LWxZbySy6trpJ1eBKzRu3udrXlX+k3ynbqg9R1MumgOWQBNErzUXKlWOQfep3y7fQOhklPvKUR2fB + 9ZL/Qmw+hHwYPoEb3P0ylsF/lSV3MQrhtLiGYwQ+m/cguMwYY3Vmau1oPEkCYm2I2LgkLjF2H5zOm+11 + vlxtjxRXheTggWemSK7ngmelVB/zuLw/RgeR3znS0enSkF85JdKm3NhOUhnBUk6vnOB73bT+y7IOlCAw + ckxSiY7YpLOd7JlNFc4RWkK7vLVSdKXL/o0yQ3SvDdTIlVOq0D/nFcxQ7p2e+Vmd/Oq3JYfuIJ+RkuRm + hRmAj4b05OpsZ0ovNj6KrmCaP2spsgbV096BM6Lp0mKtotkgCSt1+46IIPxq2tPHDYmmgOMDJ896GnVw + te1S7WhdRxrUoTZLyS7MSCeXmpl03iI800HfZTP7oqLJpUvsGah36W7Y2e2CsY89w/OOmRbnbteJlFFT + p4QbhJqN9X2C1W7PilnZ7CZPvgeKlaV+5n3EyvKHrPtvpO5b1/2mTsLVsJODkfun7rW1evHb8OI8HOJl + kfiliV1xi5+Lig22w5ROjvKUq3zlLFd5klpOJJjLfOY0r7nNZVSk/gy9nEbVzraJp43tOSuzeprY+AIr + WBY+9lzQZga6ELXd126BAujM2BYHMl4bo+Oh1seZuGkBzVeoNZip/nb6yHusPK8/QuuUZLMYsJ51s6cb + 6rljqzGormBPwt3Bcj/XpuQsr7tPm2J5Aft9+d73ofO3pIIXOazOufcqJ74HY7K3VJPtcLxna7iGf/Kk + J49ftTFU3R/qrtoL1mamq77ZoA8sq+ZOdNOf/mILV/a2ud36EY/e7t0d/AsTenhJfz73C9bUMT5ebM3T + 0fYl1zjxV69qGD/9KnUL5NJxigvOu9v5zx8zpyMrVptmer3XT/Djee39PHU//eA5r9pJ9cBV/in5lrsO + e3yZ7/Ofr1/oB27/178NfEGFUJcnPOVnfifzcWyXf/s3aOBXYHaTSS/GHjKkgNykFJWGfr22fw4TQxPn + Ogplea/meMvXBBWIfwxogP5HgEXBUWPjgrdhglpFL9DFfSjIaN+3gsrVOTAUU+1lajEoXps3PUDoeRvI + ZTjYOrFmeaqSNoLyaePFXm2nfzaIdtaVg+7kWzuBMzRVbzVAhLeFTBYoeVSYgip4hYDngDFlUNSGVRrT + eIomHOxQdiOReWh1Ndbnd26HOjU2T28IhbchhWNIhp13RV8WhaYmQho2Y8rwhbYgG4GofoNYhfAjNbT0 + aFMkbOzSiLCE/oel1XSDSAriF4aYh0MctYkiOEqcOIeSWH9qKDVIBxvPAX8D0UxPiGpy5ImFxop0Z0h5 + RlOo421UITQQZ4v11YmquIq7WIzckDodZj+K8lEVtmaECFu4iIx1qIzLGGj3lGFWtYJT83GLRo3l5Fxg + mIzKWHUhtA+sBTzbBWSko3yPmIusR4XOEF5IyI4Y6A+vN4KAaI41mI3jCIsydk/jEyezd4S0Eo7r4BN3 + g40BiT4ERE/ACFOx447WVo7XGHcBqY11V4u1KEQLWYJqdoCp+FoayIBiUWGGKFgIuSeVpZGIB5GZZUFm + uB4k2Wgw6VXvcYovGT48qI7pJZLYoZO6/nEfPXlT8qiELumIq1aSS7OT57iLpMWUqHiR1ViUFCWIZEiV + LamPcDE6VimT6OgKX5krdVOVcSY5UfmQZFmWaak9s7hp1khonwiKtQCXrzWUiKRlRimVU4mXeSlpCHOP + N7mWwMaTHNmRkYB76iJ6hRktdHiSKGmEb9mYr1OJ9BhJWhmJHDlU+9hrSUeRP0SX0KeZKGhbe0mDdYdZ + 9fAYU4OUk4iagXmZdhSZVtR8AJmNwCWYdRl1jBKWAch+dsmVrVKbyXWbKPSXrMiblBk2FnlAY+mW2eWc + XNabRehL5OiZgXmduQlwJkKMpnmaKVkUz2mYN6Oa/4ibwSed00md/sO3Y/dzRxupmLzZnQuIhtHJNm25 + m7R5nBkDnGu1nMyJl+P5m/rJJompmAJ5mLpYmspJlAMqif+Ungr3oBAaTfS5nS1llmtHWAG6n/zpniV0 + n8J3ga45nxo6k59QopNJfskRnuzZnoBJV1MoGy1ahod4g9XZfbLToSGahI2BURlooH1nLyyqolkZoRma + pAwIKUjapBcKpAkqoRMKpTOqoynKlwq6oJECmf+Zd1rqoUe5oIuZhDgqllk6HnAZm7K5fn4omdr5kwwp + oFWKgnDal3IapDhqW23agLsIjxyHlTf6oyP5EzeHqImqqIs6cymAJIyqIjsHqZMqc5pFqZc6/iPCiZ3w + uX+sgh4Vimebw469hERxOpzE2X0SFqODCnBbqKm0R6V2mqoEwikPBarZKaoDM2NbWqpcOogIhSOkGqRz + eT0V02SF6qKKJKI2mAumgaYyeIESuY5fGghi2pkBGax69axBWKxXlTVqo6y9KqtOShB5SqxchTCToIh7 + E65TiqVWup5k2qpWFWCuCExM+q53OY05+ZPryjigCmJ+2orkua+3qgZaoQ8MhWYBq6f9iVevaqMfelDz + t5riuqwEOo3IWqcs2F7Uqp4WG6UYu48ai6/DakYJm4AYGrLwGlAkC7ICdmP05pAbu7L62rLb6petgjIC + xZY0m6/FOaTy/uqfkpSmsaqbDtuyrLouird9PhuxNLqvDetr4gFnApujlWmqSju1aHW1p0VmWwm05sqv + ztZlA5tbX3utSEt9TxkT0uFqVmumBLu2bLu1nMmrF2uzZ0u3bWu3qIe3YSux54pps/G2QruiHGt/Q/Fh + MPq39fiwWksYHsug7fqzNugXBour77ZCjHu0UIu4Y3tvRFqem0qaeTu6oPsem8u5lTubWoazMUkeqiuf + nSuyc4u6sSu6sMq6cvu5kFsbsougaeu5LIi5B3ssHTc8jdu6SWu494ZjQjquWMu80QtrpBuqysu700u7 + pWe9mYu90ruqNdtt3euT37t+Xvq6vjm+/vx3t+Jruce0vdzLvn7rvssbtLtbveTbaR9rYChan18Htus7 + v2IHrQ6qtpkTwJjhVNAbv4C7dfjrbDK6pPWbvQiMqomxwAzsgxo8vA+cwJErweE7wLyUvCPqwcJLHchL + p75qwhZcpIqbu+1LtBxcuwDMo4Z2qiV7wRUMvwb8u10For04uy28demrv/wgcD2MnyBTwh1cNDsMwyc4 + wRD8fI9kxCPcEM9xL0qHXNbquC3lwwosni+7CEPsxIx5w0hceP5rvj26LlfsppTmnVmrvmB6vgKWxvBg + ddDZwO/7xnZMa4dxbiHXxzwsMYCsxnU8S2YLKBuKx+dJtiZKxihs/rpgXLq+1rdT/LQOvGeQXBWIea+S + fMn2u2dw3LV6nKxiuMRhXMml3MiRC8qhrMic+sUFKjeYRrFjLIdNu8m1bJnJ2bYhiLbVyssffMe9dcvB + 3Dguk7MU7Ma9dcVfeGjMXMyUzMnvCZ7BXLRFEXnW7MvGycd128wB1c1Q/MzQHM7iXM1jAQ3jTMWtl2PF + 684tAbs/4TmhgLNwq2/gnM3qvM6BIEJkEXQrTMR/3M+GVh968gu29ETyR8ukPLQEjcnbrHDlDLHpzLLH + l8+4TNE02HAue701jM4SjcMdbagmd3JBgqkrzdIt7dIsp9IvLdM3J6kzzXNxazzQBpYHDHI0/pwQAqIg + QNHNIA03ZzzSZpzFJn10+WDRBofR1zwg90mEQK2swdq/mcFkFz1PTQzVUX2dU53QAVRQrTZwi8OnPF0o + vTnVSq1BwRZLACTPTSnSekzUqdzTPauWzoEJ5paGT+3Homa0SY3Xec2H+9KRwuy0EP3Tcc2LcsLWaCEY + 0tKOfqrPFevPlEtr9UzMJEILWpjMXZ3FageEYS3LqfLW0/eqX23UgJ2UP/3YG9UbDM20mNNQG73a9Nza + iTzY+ywz+CyswsPYugzPGExuMUjaHbODjgRIOJnY4PvJs2bcxx1cyT3PyLa6fw3LxjvRu73ZMXXa+1vY + ZznXkaxjJc3d/ofAhE2da0gY0t+MwSGG269dwOry3QSsyYYcweUt2OcNGVpo1f2HxQeN3WKs364t39xK + JvWNdD7t3CBM2Jl94I3ExWd4aiTXmjKs2PmLboEc4RLOxJPLyAKO359c4BDO3yc9Q6QWwwDe3FWcwiWO + D1OEHrLdvyoewg9NfAJ7WGzXJfvRQhf+p3nsewe34Xem2f1t13G80+7t4Lzt2HIN47d3xNd9zL/74Gkt + 10FWgsCBEf+chy2ee366l0Y3TjNO1km+Szqc4y9e5JnyKzNuRwW1yqMMejp+5VE9j7tMwHIu3Fc9pgP+ + 3k6eKQgu6Jkc4FqNa+U74or7W0ic56PQ/uNeDtxePNxW3uYDQujdLZZAbN8Urt0ZTuKXTmyZjuT8O+ef + XeUEXug6+1Jwzl+I0HveHObd1uhWRlBF/eiXh5SVjWVRvOqunMsdLuw3vuJB7OKqrulLe0JVlRvt3Os5 + PF2Knurk/etFs2WkjuLYDu3bKO3nTO3VXsSa5KwmEYo9yevaHtpRbu21ru6mLsWvvOjxnew2PO8Wqsqh + tVjlc+7ujtB3frN1HeSW/ezFzuCVruHgTrzRp+einus7erpHXueBzvAJj9kCP/DEHq/VbfD5PfGB++n+ + Pt9T/j1zPOtNjvDy2O32vtSiTNLHfvAqL7a5ne0zf+q/s/Auz/H1/u7xFU/zKy/lfh3xJg/z/aq7Q+/z + P8/G3s7RHU9B4g3ykLjtSY/zjN7uairzPY/1Ud/yJf/cTw+VTs/0907wVD55l/vwOo/y7Y32WY/xQC/C + YL6ZXnvyv1f0Fr/2bS/1XL/0cx+mKc/2dj/2wdt3jaial4uQpqHQaI7UQobIeF71X++9fA/1ga+y7oTj + T+71lq/2gC/5AR/sgi93YP34kH/1N4/roJa++37iWD76jA/2nW/67+72oe/rmZ+fpf33Ye/wBU/7fAvf + thv5d2/7wyziZa/Nra9Rfw77ub/7XG382z38CEi/Rv/xSM/7TmeCFboWTIn409/nZN/78h79/l1c90cf + CU5D50Mu/rp/oH5v/puv9eBvdtlf/XGP4cx/+jVv7OG/3+Pf6fdPAPAxdfmiYZSzPcrs1Zt3k71QHEkN + LNH0ENTwbBOBhemvvt4bDfje/4FB4ZBYNB6RSeWS2XQ+oVHp1CejXrE9qzXb9Up1tZwpXN6MzWn1Ar3W + ydyVtwweF7XNeDtFD+nvxQAF8wbLZgr/PODoCs8EExsTINki0yYrMTEyYQ4HLzXoOjc1H0dxRj5NJ1JV + I1lbEUQBXyNCYSlLbyNoaXUdfIFtgjlk7XoZQuuCj12G5ZqdoaNVmVWL46pjbZ2zObo976Y7vsVTyDGv + 3b6To8/5ynGl/uFX5zfdG9PVyBmn7yX8jaGqR29gJYCC8lmioYxbroK/5D2MJ3EWxViIFCSUoLHVwWcW + AbzyiBHknpF2OOrIkRIZvJOSSkL08LJiTHUlWd5YKSKnvZo2edkUJlShRYYmM/ZcoRQTTQROA0YECXUq + SKYtXhy9oHUYVapRZxL9KnEsgKu1SF7swHXZT6JDxwktW3AkV7Yh7hbVRuxsU6RvYUqlOLceYRV59S7d + gNgXVMPYwgEFHOYxir7mkrJkrMvrZAUi5XoOJPFyiZ3bGmzm/Ff008glK/cjXZrEykP8RNF2xbq167CS + e2N+qFvgAn5mF6Ge5zj4REcxYzcsqFol/tq3TqM7jAu9+Y6B1KtDAC+OeffPry1mbztvvE7xxDvyNu97 + e9X56MW1p4EHfnzI9zNiRT3TAPytHP32sw64mwoMULCBBlwNnv7wy4y7/xr87KwIK8zQjwkpNFDB9MDy + cIUAruLwQRPPyy9EEVO7kEEWYxEQNhp3mea4RvRAUMIbtFIRHRtJxPGjYXYEp5YXd5vRSAPoIHKwJ50D + hkkYk5JRHypjsAJLCLkMzJkr67PwRifDjDJF+8IMSUe/YlxwyzaXEkDKh4TMJM8VzILTzDPX2HMUOO6k + i05B+yTzuToVTWtOOru088vlDn0zjiCTadQgNCGtMxVE/6k0Gk0jiM00uJdAbcXLSctJVTsrSa1TTM9o + ctUaSVmVrU1QY1WMPtFQ7XQjXL2ZMkxEfcRLFls7DE/YJT8la1cke4WySrE4fRYZYhcFk0tBq0VOFGZX + TOEQcn2xkyl0fzVyz2SVHbe1g87VFhQUyyzs22CYTNLXdrEN1N7FojWUyjzhFU9cRlukVeBpCgAAIfkE + DRQAAAAh+QQNFAAAACwAAAAAWAJ0AYH////w5EJWtOkAAAAC/oSPqcvtF1x8tNoq1ry8+w8yW0g2wnmW + ajeu7ku2cIcGGXCn885fMvLruW6JoPCIBCZBKN3SZXxKWdNHapJyVrefaJSLUXzBZF/Z0dSeK+M1uP28 + 4nJEtx3gvXPUcL27L5WG4vcASIhkeCRHpHZY9ZVoVxfp+HiYhlOpoXlG2YN50MiJKDFqomRK6CkkKKq5 + mhoCCyOIUBfbk4ebQDS7C+O7A7ob/GtRrHLT4mocU9o8BwG9hrwy/Fs9vSkpbXur3VU4fQ2+lU3CTFwu + dP7htPy9zia+ni7P084U35xf3k+DKtQ9Kg3+LWkyZ9/AGQYxDJLXcFpECu94KVwYcNs6/iz2MJaYyODh + RWwegXHrFmrkQkgQDWRRWTIcmY4SY64AaeLWMptF6JXTAZSnyZk2cRozqiDeCJr+fDaN5lLoC6QJi0p1 + poiiUltSdbWEmumqCqRMtVFV9wmmUqAwzT77mlTs2CkIu8oFke/hKQ2MrL7duKDsXTFV9O4SbOAsLsVg + i9ApyfKekbaDCQeiDLeymTIKbUTFGFny3pSanSIxfJVxKtWdM2Be/Bfw6JSIeU6sLbv0sTOtXa80/TQk + L5e4Icd5LVr3ZjDMPIfNLeI3muG0lSc+rll1LMYXsWTWmHz2c+LW8RxEPlD7as7i0B8KHT4n1/nWfxQP + 6f57+YLs/iXk9wOffknVcct/8XlTFWp76KbeejN1d98dAUInH3n0aYZQKxrWtWBpDTrIHIRmBUBiiSae + iGKKKq6IoiVhfIZgaRqOF5gWClLn4X7zMHSiACz6yOKHMvH3RJBGHolkj0DasCSJJyQJZZRSrrjkkyg2 + qaSPWP6YhpNblmjllGKOSWaZZp6JZppqkghQbGgRKZ1WMQr004YvGaYlh1qpwYyB4Ag5CnfAbTfon3s4 + oZefkvSZEB21JOOKojXpuCNzhQZ6qVukWeGNa5LyxpSdEVokXHaUVnrehdGR5CZ0HSH6Eji1dVnVC6J8 + ys+pmQpDIAWA+gosaKqO1sphj2LF/kM8o2qqK5y0KDsseKZMSOEFsOaACznICoOfqc06S4uFYMH0q3DU + BienuLCmoudNaXVbWbmvsDJuX8GOksG56FrBSL9zVnLjR6zssyw08s6blqeI7gbiqnE65Kmq7d4xsbsJ + lzrYwZXkFSudqCLc6r572gitIwVL+6xCuL75rWW8XoiZxteFLHK6wxG48hAno2zrRTuz3HJPhXEgs3k0 + G0qDsgXmDOnPQr8L711Fq7JFWTLri7QHg/RqEdPoeD3zwATHG7TDdBHNCdbMukNyjXo4/fTFgZFacc1l + G332cu/d+7DW9X4TMBdwZyQ3jsUGbvDdPJ9G0N5Hr/11tDRy/gY23mLPDXNj1Spu1GvljjH1kJB6/O8a + lUdUsnCDU6O4y3F4oN4ku0JegqOkvn0E6oDz61HoAA7dOFFxL755CI7ivLo7uR+HM4ykC9s64UkgByjo + xoVLHPKVH7r8ZZuOlPwb0Q9/GvW/P0575OJ26sb2ON05W91HjS8948FXTb7rfdfOfo3bc9o9utQNfpvK + Gv3eJzrgocRs0AMgv5oXNcGRomp9ykLp0sc5AcJOQrOblM76pbL/iQcfB2mUzyJ2MxEmwXfnC8QG/8C3 + /dUuKCe01AQZ15ZhFMhud0PgCzvRQQ/2TGGMwt8KTcanCwJtfCBBj2qsd71kERENKnxe/i4A1jYLhY8d + 9KsfvRJojiAmbmBWxNHrjohE8E2uYQfM2w/PGDZwyfBZ6xuQGwPYHzvezje56uIC7QdGKUAxil9coxI/ + sQTtvEZbS4zebWRBBrUZ8IuvciEaxWYn9Y3Rj4/EixsH2bvz0ESFW4zjEEl2LH0c0hEspFqqPBlG9E2y + kA6ZXpFOia0HoiN7jXSkJQN5QzmmB2C2fOUMQchIEyIuJ8vUQytbWExYClKMmyTE/0jppyzyEj/Fwtjt + arUxP3qRW5AsoeWIJ6CTZOWSM2zUgESitMABropDESfqtkVGUIbSZNHEoz5qgZpu+k9SpZSmPc1ZTkU8 + iZp9pJi//hTKTiZMjo+Z4FMII5RKOzwTmrQE5gw6slG0vQ2ChbtipwRqAUxY8J16kp98ekXPGHaxIX4y + iD1CKtKRFhCR5asYCq3lnnhSxqKGFJ84/8jThJJRlhjEHSClmMPt2YulAUsmRzlpTINKkaHz00RBvSaH + FylUYbwbKKGOek6oKXWrwpyjQxH6UVN6s6cozV4z04ZWubJVqwxJB071Zs2vMk0Ze9LgTt1WzYNm9Y19 + 7YxQNEZPuBF2OgWtEBVjOpW8prWj98tscx7LiZiurBcOfBBlA1pZfCoWroyFgubGeaDAKtAak42g4EQ1 + sUdltAx/5SAcPRqDgPX2Y/y8Yzv1/rpNiPLqeNrDLGx9+dvWzkW4oMVXZG01zrt6dZRA1Ow9VSswVwyX + uOQ87mJVidzkftCwD0ztc1unO/BC8rPVNYV2R6fJzUrOWCl1qUnz2sm1OqM79VWrzrDDNv2RxrkpE4x/ + GaLZ9H70P8HQJyH3ij26gm9G9ctQturSMe4lrYwMPGqA+QpcCceWXZFFJTwVZJ+thWi3dCIije+UoaUJ + 9L7vha9xO5vi8ZKXIu1z7xSTWGJwzvikzHRnS8mBWqpalFwR1m+y5JvTtrr1wxTlbJZXyd6KnvB4Wiwr + DclsWab28Jco/jI6VwwNHseya4uqK0BwU1eCqUTIrENwmxmm/uZZyorB5HVvSocI1bgokc99Zq10Aa3l + YWJEzrd8p/LsS8FoMbq7jgYypN8M53oQWphdjvBNq2xlzEkUy7PbdKRFPer8xTomD+0xdG12aVa/OtWS + 5gmlSahoVJtRwSbuL0mJLDBkq5jXofbIg/35WmHTN8KG2NpQLQZYUKdTKHIelX1eWuVvuJq3I/Zbsj+t + 7W1LRbs0/lhVZ32Pa4w7ksa79lzQTex9KgdxicLNUvRcnWgrDjXzNmqCD33vIduah4PRYVXfmGPctrtl + eiq4wdd57laLxeL1bqbn4tK2sRk6FiHM92oxnvFdc3zhQYvZhOFNcj4Im6au1XhqUM2U/mpY9VQyn7nW + yvIpSKxp6EQvutGPjnQwfSnpSl86058O9ahLfepQ6hKSnD4lm9tF2EVFas9ap5eVu6i/XQ92wpOcvwub + eiR5iV7Yuf6PnUlS7Mv2o1/JCHPreh2tNMc2qOled3E6ll55h43Pp1cwI1jYL1wncdvdTlq4n9eji1d7 + 44vVjsKzeO98n/yjmQ14wOv0yuOriOQR7/e0s1zQjTdr19CzSEqJvtKIj5DiZRqT2fvWhO4091yto4UI + jDz3fhYw54+/5dYj1c5iHbhOft2s76Yc+YEvnvJhS+nhj0Mnp0e97f8uF91rtKwiNoZzxd19DYO38pa/ + /nsREymY/t8Ks+g/vCinD/rwu1+W99W+sQUOFcmzFfZXe/jHfvq2fyZndlRUR4tCOv0WMaM1gATYU+uH + e8SXgOkGgGBmOrVWUdOxYKrGgAp4cnRlfAeYfO4HCNx1CTj2emSXM+IXTLXnHjLQBqGXgWiXZog1es5z + Us8GbBRoglp1gxuXgxp4WMM2Y+0yT0rjPTIIbWOVHy2AgimofJ6gMg9Sam6zTHjGbrWFak0EhPpThb12 + hNX3TXpUGGTVXmRnM0AYeUJ4f4xVhs2mgvW2g6i3gRy4X0UlccMAhVxEQU6ketRnhmeIhT4TZkAFVKLC + TWwhEjASiP+1hglUh+r2VBmjSpHy/mMQ83X9Uzq5xGwzJTzBU4RGeIaGiFjx53kMuDMcRmcCNYmUuIiA + doo3l4po+Hqs2E+11IDJ4IortXo+FiI/dImYeH2r0G5bBH9ck2kE13qKgRgbcIwMt3+zQEBpyEzw93Mk + VkK2M4qkaFo5VY2sl4E6N38jyHvb+HOi2D6qyES80Tjl2FQJeA6NcA0cok1KeCj+x4OzuAPc4XLLJnoA + eXEZRhvrYlf76IMH51BgWGWsIVK3uHW5GI5JE3944oEKORB1YZD1VIq7QZEFloqZ13869hj+mDDM13mg + gjYjaRsWqYuNOEX+Ux39VnbNYBhMkn639ZIXiIEWGXc2poa1/gJiKjlN0Bd9pvOTXGWO9lhMjxEWvMiH + rhKRHehpw/iU13hbHFmVF6Z5ieWTbkaCDZSLndNSv4eKfUiMlEMZMMl4QrmGbEiVUiOCWIWV+FaWh1iS + mWZX6qh/CyiOeQmUWilEZ0lymliUg0mYslSQMjmT47iWTIaX6oR/cYmYMReY1IGUDVVkqUeSfamZk6ku + YclGLnmZQSmXo4mLgNmWlvln7ZeDvtOZUwAH+rhzZNODsYmAmZmYpPlSEZebrUkxqSmb5/hhm1laAqeU + yChBxoeZokl+lGOXysY7Y2iFRsSb2ZmMyamcwPiV3LmIzTR7H3mQ+FKdKEecThVwgWZ9/rN5GOmpXOv5 + Vg25a+IZjfH5nSUVmg5oNfK5mr8JnJdTkYE1kAOKiN6JoMtVmxHlB4JRnpAZmVq4n1LYn2IZkxJKFv9k + moKIHR0KYe95nFDJXwuqnr15mAXqm6ypotGFohiaoTLJQg06TdqpmvX4ogmaLYo5WyNqeCaKnOiZkzla + PjG6lWYZoHrHoz1KpL10oyuaRjRqm8UYnZ7ZotKJREPqowbWpGdVoTpKTMpxFlIakNbYpSQapgxCoVuK + KQAKpSMFomM3iGyKV256ee5Zi96SR3zZVV/KdYPXgvshkUhqpVcKprJVHgJ5ptNip1haZM2Jny9DqH1K + n2/qlroi/o1xOl0wWqUJaHqwqSNjSqYgSamV6qlx+I5LuWSjenalaqgZCJHyqKqDiJ1emjZUh6u5qqu7 + aiQ1ECa8aiK/CqzDiqsSR6zHmnT3GalH1U2xo6mcxjyQqF4p6qRPen0qtVCp+i1iyG/2+aOFeqHXeicc + QZ3behnJtCGuyipA+qefkS97OFZBcxtsaFYsyUpHuqzMupNMWTbzqi1QNpwwhK/5qllXEGvPKrAallsD + NHGNRq1GeobK4I8I67BQlSjP0bDr6Dg4uqh3KKvyOoQJqUwqEbBcMFy6Z54m25izKkDpemiserJLmqRU + yqrQ2rI16XtXpa4Qa6nsRbFztrL//qeltMexBHuVqFmz5PaZbGOvU2qmRkttdfazThu0NIljhDZeEaqh + D4mpddKELhuFO2uth4qap9JbXciQIfq0fEq2Hyt7g4ZeQTiwbAufDti12mAggyNkKLu1HTi1coohMeic + UAtg/NoyAIlRe/mgymqHaDqWh7sf/1F/O6qDdHqFkgm5kUuqRUu3dfuc/aojcte4hFu4jwuyoSspfKa1 + kEkVSetMPKcoqtuoRyiqawa7FNa5HdudVHq6upKxivut4eq5ftm7LXeggzu6u8u75jpwZBlaTsm5l7un + d9u82Ta3yJufS5a51auXDzu2w1uJxVs2xyuik0q7ZUu9d0O+/mubvNJLFK5Lb2DnvN5ruY3XIH9LtONr + vXUKvZwapNoaqpDXveFUmOYLvuUawGDXFq0El9/7v0srqKU3wPdawKRbbOyZqBKscCDDuNjbk1Wrp+q7 + wGILjx4shwhcH263v52GAeWIv4XIlQ/6wrTYcivci/NbwuWrvIubwvI7wVTTwPV7woarpj68wXsTxLpr + v2maI9xbwUB8xLZlq46KwSFcwz9MNT7yxJa2rj0LqrNLKevLv/RIvzGcpU2svza8sfQIv5VrxoGKxhSX + lRScf+y6w5cQx80iZyxEjVssxW3qxXYrs75rPj+axNN5mgdsTVbsuynmSqP4mDMLx2AM/nzbCU1k7I10 + TMV4PMiha8mv+16w8LcpW6OhNcPGqRvFwccwfJE6nL1C6qeprGuPTJCx7LGYZssNZyCrHMq57L6wbKoy + 0qqAjFyyE8yOu12+LBbLwst7Z8yviszJfMwNB5r8S304KKMKyrMyErvBW8t2/Mr2dcqfR83VTMCsHMmB + jKjCKxcn4zs/gMng+sDiDM3tXHNT/M3TfMf0vM3L7K2OrLPxTMK3TLmdum61iqc2W3fYrM5MrMQLgdAJ + rbRlydCbzM9CHG9O885zItDVStD6+dAdyTQbTTod7c2KLKAWrJMj/a3P3MHXO8TArNK/AKluDE0ubdPt + +8Gbh9Hy/uA1JO08LlzGvwzSBuxrP93SUbF4iui/+8yiuUtrLB28fGRhP2XCURtn4yzRP0HDHDy5baXV + Ob3E22fUNoHUtvrV0VHTxHy+eBvWwAvRXX3OkxMlwoqsd43Xea3XUmLXe+3XvIp1f60mSQhKEc2oDc3T + rjxpck3HzljVQ3vSb+zWV10PckvMjg2UbYzDRA23MB1vlm3Nzmg5W8EWfgjZ42fR2zfOMqi3WEQ4zqjF + wIGP/GjNKN3ZA01roF3FS5ET1CKMin20zqbZhsnVZcpGPhNjxzfcfhzcJbHWpdzOUn3YmRzbbhMFz12x + 8+zcbSx+0j3dZZetMKIDdEfKM2jW/s+qe6193PwyBiQL3Fh9Fdht3Hdx1t8N3uGdZFlI27Ss3dw2qt2t + 25qckzWAyOMylU091uWss9wW4Bv7z95w3R7HlnMdzfEdlgA+32ytFvjNg3M1w+Xtobq84FHd4PzNXdX9 + 0h/ettENyv5c4hwVVTggSdqYhLvX39ENc6IHNlMjA+6t1MzddTDb1vuWsPHN2CZeS+Pdv6c90RWu4E3O + 4Efe4pn8PRyOhAgehuUBbzoe4hwMrwFo5XC93MTdRpWc3WYt5VPO5D8eaMdW20795PFr5C9u4w++gCbN + 1h9dGVu+zPVd2w5GIDO+3xSu53Gushae5qg94SD3i6zMvqUr/ssKvd1dTuh56xwvLc8JLsyS7mxhi+Tm + nMOZvtP0feaTtuOnmbpALupZTuScLtIBtIWKbudiJegd7uWcbehAK9zm7eCzvtmtPOhqjuuk7uqixuu9 + jlG5VOtY7l1mLufO7aC9vuacqWLFIOSSvefFXtzHflWCS01MrXkgvrm5TrWdzu0wLuUrOFVvrukYou2y + Eu0mPlhknDp1Hs57HmsFV0pFsxOU7ujRW4LkXu4+Ld9irdC4wn1mZ3Hinlmb/uwED90U7j4iuPBOPucP + n9VUrrZe/j/LvurN7vDnGZ/wFPECLkJ4HuwD3+59nu/m54glj+z5C9fWYu+jHuXv3oJI/nk1NH7k79rT + t0bfszajBf/JNktPHt/FK+/iUG7Kws7f086bwmejng7fxM70Bkr0qFzkUL+dBcfww3zxGC/D617qN41Z + SL9U497c9ozz2ivgMa/rV36iYL/2Sy/2EEzonx73/w7AWBzwYS/y6Jv36B74oR7ZVc/2V7+meU7L/ofy + OZvolWn1d7+87H7T2u71w37zhT+XP7vzNa7yM3/4IM/iij+n+Nz4Wy/6qF/3R132eWr5Nt6ZaM/6pG/3 + nO89oy/reUf79s3qNjT1hy74jD/lDdr7xN/3Sc+krQjzc+nRDlt4jz/iLXn7wo/Cvv/IUnr8sU/9gG/9 + mIv9xf/0/nyv/PNp0Lve9kWq+43230t+63Mf0nir+qaL/Lv/9qqn1V8P0J/9+rmfyC1OABIwdbn9IQhR + ukNx1ntu/8FQ1LrRPD0DPcsVVN34aeW1vGo7ovOe4n1BIQg4NFqOv+QDthwVnZBb1ANFWKkxbJar6y6b + 3a0R9yWZd4gwuoEds6twuek9D5XFXwPezqhTp/oW3ARZCg+VEFf4sv5y1hQdozoYBQkVPyQxzTQ3FSAb + uyoRO48oR+0uPc9WMUs9QUOzUA9fhyZi+wRUWxN7a38/aJds74YtSQGO53iD25wLizGXb6mo+6R9cK/Z + mqEVsr9lwg+5taPMmYHT0bzFK97h/sgL2WvmMerb150D+v3/AQYUOJBgQYMHESZUuJBhQ4cPIUaUONGf + AYoXMRK0uGtXRo8fQR7M5SpNPHAm9aFkMNLJvZV78qVEFlOmA5dfbqpkpTMBTRc5ex7Y8w0oHWXv3Ikr + ynMG057yhsBUWoulp6TQljp95tSnFx9Sp85EeZWf1pZau6LICbNqpGhHVZL9ldVsArqzun0V2jbZzLRy + rNxNIlgrYSd/n/RgG89whm1M5fZqzHPyEcQibg5l/PYy4JImK49FW1MGX5J+zUZeFRo02s5xGtB8LSuV + stmem4quK4S1kNs7P+Uzfbo23N2Bde8O0vsraTXC42J7rhxe/u7N1Hswf/QbAxDNL6JLH470c1js9phy + 7/5yhHpiyIxjV71Je1lRnd2Xn/4i/2Dpts+zS4rWAtQCDPZK68+6p/jTqb6TACzwigGvk9AQlcbLLjbw + HPwvw/AWxMpCtXRSMETbuPnQrdq+s3C+FUfErMS8FrgALAhU7IuZG2NEjrwYEzMpRwNfwkGqMIbUEaok + OzwxmAdbgdIEE21iogm2eGwSNyph3Mo8IGF7h0mvkJBQSinVoZAoMImIZ0wyywzwTDbV9HJNOoGDhks7 + 4zxvTjydFPBLQOt05k0ScTSzOEKrDDRKRvULZk8+V1IUN0gbzdQ+TDX95dALI/iUOBo5/qV0kEFLndDQ + Sf3IgNVJ0ky1VUetkvXUVS8NVb5Ybb2107l6VbWXFp2L7VX/Diw0WEF/fTRYNPER1SgKjn0PqmUr9XFT + WaENtVoIE931WmxrtIjWUVPtVldeEaTuQXVbMffcLkuFl4lFN/QzV3JrrM7UWnu1t99vhS2XYFP25bdf + bYG1VeBP4iMtS3fHVdhYf2dtmFtPuYAkACxHrO9hT+X9lz6HSbYGS2JDrthiKxl2Nl1JVcZjZCNEftnV + mFfbeFgu+biZN5d1xpFngDkVWo1ZgmYz56I12GXet2ZeRdpoMwZSO6XFhILrgiG9+epobXYanaahzkTZ + k+u1umO0JrU+O+u08/RV5rBhuY3lpe1uuVi612sWXUJHHhvA7yb+ehxSnSkAACH5BA0UAAAAIfkEDRQA + AAAsAAAAAFgCdAGB////8ORCVrTpAAAAAv6Ej6nL7RuenDQJWLPevKfohY9AkuK5gejKtoDqruVxlfYc + 57oG75z58QmHQaLmdjGiesrmiukcJQFJm6E2jWpD0K0l+/KKOd0x9WbmpdeO8hpIw17P7HrRfgW78eK9 + FonDhyFo5zcGN0dngkjoZSiW9dioJNmEBjYZlplWuXUZh7ap1fmHQCqacyoEiDmpitryaoQVmCcHS5k5 + JYu7xBeKy9srIuwDhjnDOBxTvGq6PIoHPNwMnVGt08qgbO2rW4LdPRF+wk0t3kTeor3Njq4Ga/7OzCZ/ + Pj+kvp7hji+hH8NGgFr+XACsME3cwYKaBPX7wjBFMFsRDR6q4m9hQf6NIR5CrDiuV4RFIJ9A8miNIz6V + G+y1K9mmV5VbMD2wXOBSYU2L0jrkZHiTxUgEKHcO+lMUWlB0LH9S8Zn03VJvQKIafRaFYMSpOoc4TXTk + q9R7RK92aGplJ9duKr9aPSOWLdmyZuHNilvnbcO6XHq2TFtybV+cfK9Z0iu38GA7b2lWFLz4Yx7FR1fh + HUvZpt8jcAPPtfBFK9+2iLtmJrPZwbHJj5eVWS3aLOnMkJUy9lg191bXqolOia2WCPDgp88ypkAS1Ebb + DbIgujyPI/SVxY3n5XesNJ/amlX/dk4bp3bJirkzr8dPwfTt57fRpRFePa3OP8abrm73jXb7a/7Mo5YC + 33t1JcNKgT8U599nZqy3HhsBPAhhhBJOSCGF+UjwHWh8sfKUd9+5xF9i+OWXSoQkVGgiihbutoOKLr4I + I4QCpEhjjDbeiGOFJw4044Q7+nhijy8GCc6PFAqZY5JKLslkk04+CWWUTtZHQYKxpDQBHM+FiFSBgBDF + 43ChOccOl+2NWIGVHYa0HG/IfcjaMoCNqSUSKMhjpoJosolelW26CZZ7FNEhp1NeNqiceqepKdJJGvpJ + 3XkgzjTfMGLKZ8JIiArIaV2MTuQFI0l9ah2ghPbW2ZyEfBmZC9psiuWeJAb06mqGYWbqm7ZgNImdJwBU + a3yypulVHMZ2+v4AqQgZoOw/WWYYKKzZqNrqPuIJOyyfOyyyJbIxWZNEs85i+BunebJALTHTNodttsne + 9UmAs+qJiiTTkCktuvkeoE9s+4LqrrbTEuhbqWc2+mYtop4rwr/MDsxueQFDagyZBRtMb73pXXusfgzv + 5ap3Ek887iHdHQxLJ9xkl5fDD6/7UmHiilIbYjM3cDPOf4G1cD0fg+yqOT+7QrLApZyMMMrk1olpGi4D + HfSrisI1dB9Fv3sR0imL+Bec5EHSomUr+3bJ01Zf/W2opeWMldIIQfs1UmFbJmjHVAOFdtqeqAuw22/L + m2jWqQjXSj/p3pf3HXvz/UtlGXNGH+CC0/5D+NQi4504A4KNxyg7bDvuAaWhOT23V90GeiqLmSuw+a9b + c93RoIGDrcNNcK8Zc3Srg26JN5t8zroMt8u+eO2HHR5n5EztzrsSnPepOeKhX9z00aUTPhy31EvPfOuu + k64z7IQBaPejWfkw1aSpmx0F8IR4z3gj7iseOtO5946+6XcDiEwNuDL/slB9T37cq4/Xqoe/623LLQrb + nt8St5ZNNWt+bSsHgfDkhKp9ak4WE1/3BOg79hQwdsqLmzEu5BBRHatqCgRgBIXyvhF2pFyo0p8QlAUi + 3PUNgAHMIAytFz0ZzjB5livWDcEnn6ZdioA8rGACQ+ig5cHMHexDnf7xFhSWJTKxiT184gDrQEF+VSx1 + 43MGChfopYaxMH9cFOP5fujD8HlQXzmpogZzcC8DTa98v2tjF+9yJTBKcVt/W+AZLYgD3ExHdEnjIle4 + lKAwuhF6eKzaphTmK/Fk8m1ajKIfoWZEOJpBkn80GSHzYZ8OEg9TmzRfxzp5Nj+mjyeVk2OsKBkQIhSD + W8oIhdCQx7LHrW6Wgaxl8xqJxEoe0oBl21JCxnSnNf5HlkA0iTGDJ0RAWnEd7OOFVvw3B2eWCZZ0kuat + PrmUPM3mmDv0xPC4OTQYpBE7BKuVqpD3EvCY02hNTOfgQonNbGpTh0Gr2DMd8yyoaBIlKiToKP4/CcoT + Us6MAZ0jFg0JM3LRbZtU+2UVi0nNONLylBW9ZcsoGrJHsJBg5IOmxiCaTnVutKQPlBtK9RVRB6KRVS61 + 6AczuK+FcIOUpVzQSnOZ01XakIgmfB1MbSpKpNI0V05b477CNQIyZsVwH73iU6v5Rak60aS4lCi6iio5 + qLaDIF0NaxsfaaZ+tYKoSQXhLHCa07Y251Ar8+UzY/lVoI6Um+x06m2cJ7xJIhBiUQMFvsg50cAeZrB4 + HWtN7QpQEuZVr8rU6BjoiodHRrayivWpZus3UM264V+cZShko/rW4sHWglOl6m1WWhpE7GGf2eAkZ9HK + Q9FStmGFNay1Ev67VHrSDz68jVpcXhs/dLpzuNS17Z3EOjB76LG0kwHnJoCBz73ujKNBhGhdSTpbkJr2 + sKnt6K4wAYVWHu+vT+GlfAn1JXHmUS+gFeEb1TtasmLoIlalhXfJy4Twmi479twfBxPC1v5B+Cf9DS1m + oVhdYaYQuoWcZlMFy1wq5oaRIg6Q9vZ3P1tKVqTpxfBlG6HgLcS3uWu9LyeZec8UF9eFsrVmgAVcKAtz + 7KTRZGyntFHhQlzYxW4FcpAFqckDfWOr3koylMHa5CxrGBcc/jFCm5gTK18ZOTL4cXTXa6nf8k7NO3nn + eX+asOuaWWtoLhSNuavVT7pDzJ7sMFMHPP7nGi7XyfiI8T9daV558LnP2PlzVg+t5S3P47naSfA42cwQ + Riy6P1TaY6DP+b82/8TGJXN0nneXyU1zgrYbgzSd61wQ4ATitfKU2grvjA6CqPqhagyLV6tF6JqA118k + 4itfM6eqXX8Wy0wG9SAzQ19vlTfEGpIarmF8OctK97+fLvWz0VaUcHR5Q5o276AzC2BnCzRbFHbutbms + B3Of+1lRiadNpITvfOt73/yOEZL6rSMjAXzgBC+4wQ+O8AfNCBw3+re+Xx3soj0EWO+OBxyUvWxf48Xe + GFt3wPoBrLwFAuOAXTAbPfxtVOutoBUXxcXlrW2zuppYGWmjOQ5yYP60kdwRW/3YKSq88+Tiucgi3wXM + Y47RmfMz4quzU7+QbfSjAzej3d6xcc3tspbDe+grvuuvaa47qbuXbI2B3IiCLuMuBRXlHufxe1Hc6jKO + SLenjm3Ple7ttsPZsa/VOiroPu6AERPvWAu71Fe7cb+7PBJif3NBHQrswhv+6Lu1CqbLoVbHux2oga+t + ilNuXkOIhdj6GbLz4Ct2uP6rE0lGe/virKsNZ28mSUe63e9eddsjU96VcC15T0JD2SXj9wr1/LZxn+6V + 6313vVfkqlSZnLopwvQRM35I1Z78z8N687HPdssoxeC/ncv1r3dn56du/d2bmxTqI3Ja33t+tv6vX235 + Yn3NU99p6dP/mz2dnRHJ7wQRZGhLN22hxnvFJ3cgxlWmxkewl1Cat3ecF3+S0HqNpwp40lwnJgVF4Xtv + 51kQyHxGFSIU+CeUh4AJWEujlhRUtFfGVgsAmA5V1WLpp36hd4IoeFMPmDDzxErgVxW4A4O5IIPNRoPt + lIPE0RLkZU6JFyIL44QFw3j49wY+lnfbx30bQ3rXlCUMmEV/1Ux0Z4GlF2nzZl02qFCi0VX1Jm2nlUR/ + FYRCOISRV4RXd4D1I2vCYXZ1RzfJ1nggOEZnZnV0OH/ElS4qSE71FnylwEtc13WmJIe6V4NmKDyFo10f + MnuWR3s+g363J/6GEEeGZdiIvVZOZGM+v3SGfocDb2gEalJpBPhi/dRZZFc+eZREqHVbm+hI0rA2rgiK + x0dH9tQzyXM6/mAFqqhLuviIjNiL17cPo8dgtBd/HsNTJsheHReINNOHfkhvcDc6FNFAijeJRnd5RsGK + yaiNWySFO3VP4Ydi4yiE7ggTrLiLyrd8EUgra8IrGFiL8ahTzFhW6vaJkpaLEtiAesiPiMaJmmiNkGiE + dXh6gGGKMrOPvugz/CV5BuiQp1dfSvV+5DiRCamQEkGPVmiPSxVe0UiH4Ah6nQiQDCmIkvhdEvmRsPh8 + Iql9JBmCf6eSyzR2A7kqNnmNL5WOi+cptf4IjxjpfmA3h0I5lC5XlJJxlCt5HS15jjHUh58TlXAoXjQJ + Y6MiORV4lVsnGzvIdzupZLpwTvF2f2HIZU+pUV84gG7ZKzRXbmvZlFM2llvYjyVUHTcTbiUElmwJaEYl + l4ImMtFWmNgWEnNVgocnE4kpigUJmSm0UBfAI0vJlI7Zlnk5U5TBNhLWky75kjDplJzZmTL5dw50IkHZ + R9kIPGbZQmjULmiZZzPCmplgjKv4mKa5YLB5RBanaLdJNK4plldhO3EZKRZHj4EpmIvnm7kHT6g5ecoo + kD7pRfT0nNm3U6PRmFVplWFZnEgIYrwZalaWm8cYnjUBV9zZmOaZjf7eSWXkiViTCTvuSZzxwJ7M5hnt + iTngOZeQd5CZp579iYujOYjflZ2Eh4f0eSbM2Zyyl6DQiUf5OZ0OqpldmZXRMF3yyTX26Z+UiSCOYpz9 + 6aEP2jghSn8j+iclepff15cE5pErSqA2d5MsOZs91hoy2p1chGRdiR/mEaGAaBoseqG6GKS/OTn7uZZE + So3fl6EZl6Qg4aEWWqQieKS6CaPBcaXfwqSJRp3XeXZZKp6606UQFXVTmC2QwVJKSh1laqaWmZRosjmk + lpxtmnB3iqd5OnBF4nB6qnB96qeBGqjGJqiFaqhDAp/+lWihAKRbGoM9N2KVsqM64aY8lBarmf5MwxJT + epiJSCkXlWqpSAACl/ekZ/mQh2NfKKmh90elNicHq6mqDpimPgRMiUSnw5mcoMo8L3hRE3OcoelYPXil + UzqjMAenuOao5Yc9iwgRGIiYY2Z4usqjYYCsRaMRrBJ901iZ2KijdtmiLOYu17qOqQqgZJedxDqpGbmh + grd/2ppVsZph5yGtIBmfBjky2IecewmtuDKv1qlWycqTIto1XMhzJdiq6mpT8FqP6NU1t6qsFZquCKt2 + ABubajNDcLlq3nqwEot9e9Jf1HJsWlmexdqkYiqnhfYQEYaeGkuyMOcfpZqxuZZbd8SfEUuaFqupk0Z0 + XzeyNhuKxxOue/7yNCzar1yJo7JyngQ7mKKZmYlqqiY6Wb46LA3CmN5aoE1bsuPJrlOroLa1sTc7nyST + tP43hnrytT97mkHrLnG1o2dLkRpprR8nLVRatFcYtVI7MRJEsnVbku01qyTjrrxoXW5Lr36bs1AHlJ5K + uP6qtX+LbIkrlYtrtPoZpk0HuSMkucGVonj7uPNiUZlrt3DLuYljFQcLun0ruo5Lupf7uT7rj+cDs5zW + dFFhui0Ltut6siqnlNMZkJGIttxWuZa7u1J5tdz6rbj7o7tKlQ90usNUjcmruxTDu73bkLdLO8HbudLr + qcXbmlArsCg6u8vbi83rvMcBveE7vEu2kP5fWq5PW6VxuCi76pVoOobkmzkb9KLRq73EC6d1+r42Kp2r + K76+ewb2mzekQrFUKHKey3RvprDa+bYhea8CnL5oplKxy7Som6kUCm6067oGrHM+6pnCO8AE3L96iZsf + eqITfDV44bYgfDXNgsEBu7aX8cJJiI5Zu8IcnLcWabUFuLSKqsPIGMB564nLyL5Ye6CKycNra47Vi5nt + y2v/S8QMiibz6L8jaZhCRsWpoaI9/MRQTL0GWrhV/MXs9jw/DMQLC0GpacWnobdqLJw5zLG/kMCsWx2w + crZnur2vW5Mcmsf8AXQoPMjHC6JjOncjKMdr3MCTG5MxKiuQtMhzLP4IY9u1OxygQgvBBBzFuDrEvXLH + +5vH8crJY6zEEYyXmYwf9ee6GZzCXfyfqgxtxIfHr8i9rwzLTJyjgSzFtYzEpty9n5zKqlMc+VqFjQzM + uCzMtLnLcOwyhdxSTstoLgsuUrrKJ7e9QzXJZfzIxEwZZgPN+nfLdLzEu+nNigHOk1y102u9w9zKMJHO + WdyPKmW8y8zMtmsW8czORHTCHZmglkzKIozPV/EzrZpzHVJrM6zFfqycA20UBS3HIFdEpay53aDQ8jcg + EC3PxKcpfcy4afbOIKHPngpyf3qoJ43SKa3SQwKoK+3Sh9rSL62nOnYHxjzN5QwuoTzOxIikSP5pa110 + 0TXKzeZMvA+NzVL501AT1J18wMQYym+o0ezcV0HASKDhmwA9g3bGxoV21KXpeUndQw3Ukfv6u9Cw1Ewd + axV7zzHHgT1w0PWM05N21kks0j630b28CDNWneVbEQ98ycLW1YTGgQtHfcEc15kW1FAd2G6TsrbQX1hN + hLF2rnC82KC4gvpIxqFb11dN2WqdMWpom++HDEJc1ohtlkEY1TKEiR00fHCNyoBdydBm1/vcy1ZdJpJ5 + 0wwtbDsJg0N715RWd4n4nYe924rX26ntU43Rz1vpyaVd12RN0JX9OMq9iZQI3R+dz1oHgBzHvxyoHqLH + 3FDazg/dcuRHs/7822jhBIGnXcfRLbsb0tOmxVDRstzI3MadHbMDEt/BNtiYMhAfONyvTdDljc777TeX + LdQ8w9vt7d5TnN0GLkxlh9ZcLOANLt4W/teura8tuGPPCdlhXBIV53rd1MdlF3x09eFHbNQOvuIQbsL5 + l8wBPtRtlt8t7tlQvHoezdffXOOw7eJiPH46fr/F3OMhzkIq8NaGPdHEdbUwm+K+TOMsbuQrK983vuTv + rdsYnnaihqVCtB/bRFRPzsBavqpT3uURR7VgbotS7sjwzeaZ9qhVLt3+bK80rNlkHoBcfuZobufysuDO + LdJvntYi24tNmOCIJuLj7eMFC89xzudUbv7Lccvjgv4ONo3RQH4uvCLNJdfmeJ7nfc1bYf5oJCXqFd7o + lC4Tbtbnp0zLm6zkdx7lFy4ncfJbpV59e+5pZd7pxV3kzsmDjv5AoS5nWz7joI7l8JaVpFR5vWPr2A3P + iZ5mGdrsOAjpez26+dzroBzb60Vj/y1zGR7DBY7qFenXIC7jCInrFB3uhQHtoCzc183qlzd4kd3U5Jbt + AHzuQC7rC6rAsB7o906YrK7huJ3u1yvKOanfAI+zmU3Oa0jo6n7t5K3wyCfwr07wBY9dri7pbr7vUTrw + o6ndOKm6Et/xE/vL+a60GF/x647t436qJ4/ytf3wDC+2GT3xhrvyDf6f8jOf8zX/4C6PPfZN2g5P7DCv + tkcrdEUPfJFO4dRe8h+P9MpMuVTH6B5P89suzscO8Udv45yOvGIs9Rv+9GG/47E+9qm79e6L7loP9qzW + zLvN9gLa81g/k2p/9Tfo0Fx981p493Y/1jcdoWJ+kSEe93IP9WS/81Wf+Gfv83C/92k790Pf6o/f9GX/ + 75Rfe22P8okt9Ie76IzP79Z+3UEaRoLPyHBe+Heb9qNP+p3vsWYP9H9o9H4/15v+6Ros1/Ae+rOf25Pv + 9xYfwqfe+14n8r0+1/Xd969v5phPWkwP3clKQaZPyW7M/MO+1R1f+3T9+yx/+bFPWEIu+RQb/f7+LrPD + /+2uH/cJLNPrz/7tj28x7f4Nt3ADEf/1fyOFLfqpH/FOrfvhKPOITwDwMXW5XQMTj1Z7XcSbY93BUByf + jzzRZEpPk0WEKV7f+nLtHDfo3Gd2P1ZQWDQaiEdhT9lIpmbMpm4K3cWqwmfWsuV+N17wSAoWk2fj2lmd + CJbbI3YcSbd37y84d75JY/NE+uICygAD5RBLFBnrGkX2sgYtsNIewy4hDCMzMzoRJj+pRDEO1UIpojhJ + AVC/IgxZPVhdZVFqFU3NfKJsPWl1AYJ9gWiJX48bVpVwJZZlm6dgF56Po5uuk/G0qQm7SapJs480pMKt + xbmx1RXOfa7A2f7d0oWZhuUPxo308efx3Ue1I9PPkahyKgAS4/djIcFW/xKuoRZRmMOHBg/Ys+iE3sYh + EL0hhETxUcOApu55NCnR48cxJCeGhBHCUr+VLHnAgKkQY8tbTTbp2dlCYIeU3G66zLjiaMukKZ4iZdeU + 2Tc/QxlF/alThs9Fn7SiU4eVBI6alMgqCpsI4VmvC9YKesuWW1q5Kni4jbkxbggiVN/27SC4YzLA5Nod + 6oXSrlqwyhqLzUT4cV07bxirOpyM8ixlc7dNBu1X2+YiT0w77Ox59F3RrTEdS60lFWxQlW2Tfp27wuqB + lx/Mxue7N2+6JY1TIA5COEMHzeUt/5UchP50jtSny4qsGzJv69exD+70PQ95Sne26A08Prxr5O39ad9e + /Xxr8/Hhi790XyYp6O8q+I+n3fKjb78CCxJFwICeg02wavizJcKLEJyQq/ICdJA9BGma0EJkFJyPu880 + PJBDmgSI8EM+/BPRQGds8/BENFSskBUX9ZMgRgJnZC5FE+FbsSsME8OxkRp7BAfJ/D4cEjiujDySxySZ + W7K9FSviYphCeqHOSioh4Q/LdULUUjP1jPsSzDDfu/JGM6UYEzEp14SqTTcV/CJOJoGskyg68ewkysQg + CLJPP/90zFBBB9UJrkWzQhQnROQ87ZNGL8Qvuc4iqZSg+zwFUFA9yyYIlUE9wZP0BVAhbURENIMx1QYx + VT2VSOwmnK8SxdSTddJAfDWgAAAh+QQNFAAAACH5BA0UAAAALAAAAABYAnQBgf////DkQla06QAAAAL+ + hI+py+0XnpxNrEiz3rwj7IWOQJLiGYLoyraO6sZHaUGzEtClzPcU7GPUEsCg0VU8PnRDJSvpjMagUs3u + Y2hCLLqqV0RVagHhrxl3rnTTnTL7zXDDESZsnZi9zvfkt1bOFwXotEMTKDF4eJYIp2eQ04BhqJjGyHPX + R/lmGdQ1pmkDqsmZVkgCGZmHKepE6tLkynoSK8O0Kksry5NbxcX0YuKoG8SLMlQ8rIHMMpkc6jy3fPSZ + Ged7C/00dyednbq95t3tzTHeGfeSRz61R2O+/uyHnf0OP1Ffi54+b7+B38GvH4p/EwLSE/iFYIt5YSJQ + Q/ijXYkcDyF6UChEWD/+jBar6XpIxaHBjngOSapIMgNHOnVQHkypZKWIgCEBjIQp857NnTBTnLm5LidC + oRsMNrTpkiRRNVma9mzz86lHqbs+6tyXFOJSYDWAUo0XRWPHrfZkZr1xNVWws0EpiXT6VWUvr/DI1p3L + lmfaC6ryvjSpwK9Ugr++2r0rRSzTiN+QCh52GA3LuHLF0A10GSzlFpErVG6cGfKoBY97Ei6NeLOMzqTP + HlU3FlSRJqG1EkKdWjUSWWxfK27rtjXL30//1RbIWhyrvCG7HleU/FFGOo51T72Eu6z11cv9PYBE3Fl0 + 6UJmDHlODh967dvZgbocxtRG2Yv1wo2rPjv79pz+u3sf0dV+0AGIFmyUzfaKfrnxt8J4Bn5WHlILBkLF + HbQpmAwQa4VTFIbAMdjgcsx9Z1569BEoYYlf2cIiixx4aCKI2oji12v2ZRhAjjruyGOPPkoTX4EPPtVi + RXo0EyF/DkKDEY8C/NjjKVBOSeWEs1CJZZZO6ihljk9qCWaYYkbp5Zdb+uiOmVQyQdGUao4JZ5xyzkln + nXbeiWeePYZQI4kxjraEikPyVuQ1FtpCAZL8wKicjDO+B1U6jQZXkHPOQYMkdZMgagw16wno6Cw0RtqY + eKKAENB5azkTnnktMoMNo0yG+qgfpF3kp6kn3hhYia3y8etwT1a30K1K0hr+Iji9kqpPhqdSh2JhmkiL + 6yXCtbfkX5Z5lkBtZWRbEqAZWMrFe5lWm09gn/6JLBhhndetFqjZqMuS8bUE76DgrHvdCvPwq2276Iox + 5Crz5orLsxLgK6SsJ5wrarrGYiuwu3hVhwl69CosLoBHqgrwwyGTF4NYI+ta8cDTlCvMpxt3TOkSzdzi + MECyjqNYzfWm7NNt8XZba7O7xrzwGOXq6wXEA/WwqM6sgDsrsAq+PODQMqs7mTwO4/zQyaLxzOw2QUtm + ddWJ+iJkimx4bU7OFIMdtq1jh0u02eNmLK/TBfnQ9r/LKj0f3OVg1p+kddt9t6rx6h1oD++YLKx8Sgn+ + PjiwhRsOGMcv5gt0KXx3EuvPrjLuBdQBl+Ih1XBk64qFWHte1TQTZ0R66ZRX3oh7mO/B+sOqZA07dyuL + jmJstyvTjvClbtP7TL+7urbjltEm6H0pmR517roLHc3TxjwP/hdshyWoS7ULcvx/cu+G8Orez6S4sGbU + rNCGI8g/VPrIi709X9GTXLaiAG84SSPGu34jOaRNSn/tC97llldAAB6uc/VRG/EIYcC5eMw+wdoZAxGR + POVxrxLv49OhppOYDPrAUChZFdC8ZrsPglB7/SMbG8AViyvkDIazE6G1gBIOeSFHhjNcH/t2Z4bmicxQ + KCSYCqV2oeqxi4j+M+L+EUcYQ82JbCddI53TktOy8p3vilSs4k+2VsQkJqxY1qMg6IwQHYMEaIFltOH8 + 6NfAc2ChhAtBWxNXeISldE04gFtjHc14x8/lsRWGfEUboaVHRaLOCoX04CHtOD9JQhB9fCxWqpz2RdAV + 6XtWumS/evFERDINk4jro/nemEp/zexVJnRjI02pmQhKb5FwvGUfK7XCUMqyJZU6jqWyh8tcojKWdGOk + L3UpMUB2KnIIpFbieOjDZJ6SfMxsZiCfCc2SyW6LYvykNQdYzk5qU5DfROIvvdlK8UlTk3xyjNE25SnA + 3ZOOySQKNrcpQUfCM3NWFCg9O2SIY96AQ+pa1z/+e6bNgKawne70FysJmjTO1UJnrQsjMQ3WtOec030R + Vea2KIrFae5Rne+S4jt32ReGFhNt+cxUJQmpKQqV1KRO7CUv6zlQnU7ykbIM5rmC8SIPxKqDRrMgSXfq + T2du0ncr1eL/rIUdN4BSo9RUw0Pn1s8zxiSNKuUpH+zCQ1lZQKt6SyC3WvPVZO0UoEboIESnqtSLCrUR + OmOUCbR6Gxctzq4TDOsZ9aa6vFY1gImMJDMkij8MovOCp1vn2rD5rccGda9XhaVmK0TYjcosrjWMqCAR + +1MrbPasIRznZ+93WY8pirR3hWpBs6lX1S4WZkOtq4LqUKHLFkoj0hqpGuf+CtnECLOilFwt7yzXU/iZ + FJuhLWZMI7sI5Jp1eD7F6912W1ixutZ5yXUqpkYyRlWW9LQoTem4nNs9cUrXt+QEaMhoe5ObHtS0sW1v + bosG3vD2dp42CzBRWZUUmUp1rlv5Z2YVu934GrSs2CkwPJG6Dv2OLovIbbB//wshq5ISVkY1p0xng+GP + fIywoXFdiG1729LCl6yMhS59I3ddbyb0jsblIguVRi4Xji6I1aWrKcmC2tQyhqVvvRh9dwzJC9P2ddBj + iiccQS3iNvSoN8EeqKLSXfe+mLfTSrFo46bAli60hfiKn5Eu5WNywZbGMO4sTL27FxHTaMp0LnLJaJn+ + V8FwKm2TBfGRabjfGYuZswhmdJrFhyE/F4/Q2PDyl+X5YUUbWsLZ4PMmQ5teoE6U0EbGpYczbWA6C1jF + nK7yIcNj6UtfjY2oLi9zMZphT4M31CvSV6xLOekRh3nRxH4uQiQdMcriEiTaTTXtlpXUsSq5W9j7tWw5 + TGpTMrvZEW7iY2r34DGv2h50eY6GasprktzC2lNsrrC76WxNb0Iqv+rx7v6V7pRwiN38VOq3OXlred9w + RSF1NYSWWuV8k/to3T50pwQNcDzH29hxmSXC9xfT4Q76dsLgd79HXWtbN/ypqrmpa3plMF41RdejqmCp + TW3nYat3062uWFaQoWH+R63C45UFeciNXG3KtWoZOQfRzrk9ca/+WwrhjoOeng71qEt9Tl2aOppyYPWs + a33rXO+617V0ionA6U1f/9G0KS70s2+O49xA+sihV5v0Nn3m40YWTZimcAQfw+0ix/sY505zkgt92z8c + /NsPGVWmq7rvrNUfQwCZ948zuL8Ldm/QZfgJnKWv7Xw/LbgXf3nMd6EbLPcG5zuPus/zMvSvVqvj9873 + lwcz4pZ31rKJ22IB0ornkg8sshdvUtYjfsjE0n2SQoWJkyDd85Wnu/DLiGIFN47teyy9atjb/It6mfeN + 92qHNg+L2MtempjNM+PRXscy+MX6olauwIcvXAf+03n7MF8YJT0lkaZm9P3p15r880h/DgdgZ2Mu+gRn + FcZ/0Kc12QdPz6eAiUKAKsdXYgR3c5QggSeAqZdk7uSAVDQICRZ59YE300dM0DZ9SWdY/sdR82d7GTiA + wZZ/9rQ4Z8NwD+R2aPV7AXcdAeiCL/hHypJtgoVty8dXOShxU8GDl8QIqVKENrVlyuZb3NdzGWWEdLdY + SQh/0dZDylWD00EcccdUNSCFKBN/MDR3WNh/a/eDPtMq+gVEIJMVp3eDmGGGZIWGD6iFW8hdbxiBejhk + GoeC9Sc1iXaFZJiF7tZk3PV9NDhKcNVmrhN+sQdGaNQ+d4hVhlFgg8RNCPX+UuETPmY2hi1IOLGDOZbo + gZnoNyfVXPwihNS0b+IXRyPjBiBgikTECfZDZXW1iOb1bj+jYKH4NYpQhX1Hi4Z4iAiFb4rYhxI4PJkC + jJYkjIwSbrUoQzlUfARUNCyWh+l2NHrwjNB4CNJYRNTIQDi3VF0UZG+WGQzTWt8ITkBog1VEjvojDTQz + WyPoiY8WKOxXZe7IZBJBRvJojHh4gTj2IAy1T/MFReeXgpQAMA9maf54XAmCby2jUBbEj38GXOI3fpkU + j3wRkQ3pSmwBUunYEY2Ienv2kWgwj/SIHRuCbr5yJMwID45AESG4GdnCL7PYkfMmkvkgUyDVFy6FE9f+ + qF06mTog1JLpUw9zVILJOINUoQIZKZWEspIY6JOCSD4u5of4YYJ1VoBghZUD95OihGVreCC5uF6E4jLm + 94+2yIUpUk3bgWJHaZVypYO4dox72IY4WQVJ4JemMQzrwZMDSZDmohuAGZjXkwwa45Z6dop3mZOOuJgW + 4WW48YwSOZEicn3XQpXGM5iY2ZXvGJlWMZkm+Jm2gSkWg41TWJqceZqzppWheVfsiEw9WGadyYgVWJmQ + qZKkIkSuCZe0mZYEuAYbxzPWFhrKV2hvOZxsGZv2Z0sblpwZBhUWKZwfJAeRl5o/l22ENIyWWZODg3+3 + uZctV5zyFWW7l2tKdwz+qWiYr8kbuhldocJvn5BQtvmV4HiekBKdyigjHpc3cAUF3ZmX5cgq9Dk9vbmZ + 5KCfQBNcooib/pmeB8SgfykQNxWhwTibe3ahpGihH8qAnZYUG8qf/emQBkqIviWi0lahsnaY9Xl/LXqV + LEqj8FaU+WNZjXmjNXpjb/OfH9Khv/mi7ncsCgps8kmkRepziemkQ7Sjpomky3SkTNp7z5mbPSpjPlOl + Xhk4UbqkQUqldDmlV4ql0RieEhpOT2ql5qmEiKmluGWkZCqm2VmNFNqlkBanAVmVMBqjNpanVLinYimY + fnqmCwkiSKaiMtenSQo3hBeOgwqiMVYcbCqkDET+DQ4iqXLqkXVaqYZ6pynqKIexqCuao44aqvlXqhgK + j556qu32pvuyqaZ6QNbhEG3KoXW0ka3Kngtoq5Zqp8ezqxMoMIrqR7j6qsG6eT05e8WqgqvKqYWKA2VH + rdVqrWgSdmR3rVV3rd3qrTuicd8qruN6J9pqOpq5oDugqNWpp4cCk4MBrG76eqbAnWBjFkLmmcmKiZdK + RPSqj81aMfcqfXE2sMqqmrCKqU4xLGlqXeyKSgaoQ/aWq43Kr5jqjTHnrHihYEFZsKTJmKD6erfaWA5L + MPmJn9UksfEEryC7rCILaXBzGsfJcMhJmfL6qaiqnRjbLjFbkixEkwY5sRT+i7B/OqYBW4Yp+0LQenhf + WrEoKlm8mKjR8661FLQri7M5y2NEGbV0aEIlWGPS2rRpmLUMy7T807U0W3NWe7UIWoYZC5DwI7NkqzJC + O7REq7Fue2y4VygJUaZmirXCZbQWkV9CqXiuGp9KOrLIMoboIbdjubbOmaqpF7h5W1TeCZos65KUh7e0 + 8n+Gq6ZOC6Cby7mfkqnxWreH2qQ7+6gWZYUfC6Vl+bQkmzJ45LmfK7ZFmzLoSmF8erNlG6trOrmrG62u + 67ugS2CyyzPhqbtL+7WRi7uiCzYP2ben+7fAq7rzWnQJSL2H67ype71UVBrLy6y+2b3e26vgO7dq+7r+ + Qxq7wSt6aNa76zuhofu96Is7Xnqw7Eu/ivtq8Au28vu7+4e8HyQY4ju+zVu+vpe7/Xu/+yqesKtB9duv + /quvjktCEBzB5wu+fYKsDJm2divA9tl6Day+xeZot0updKqrJBy/Jtx984tpIszAGOfAavfBiOtAW1tG + 8DG92su3GPyyozrD4oZovKtXlWnAIypeOmy/NDyKw8u82QXEiQukTUzEFYwHS3k8cRSgQ7xkNZwKIam/ + mqvCE8zC/4sOoBWYSWy5MVzFmEfBkzNDBfqZbMyovGq64BfHl9ssWkw5msogdjxhTlzCaLBWc4Z+KMy1 + b+x4tVXI4eLHf4yneSz+OObmucUom1kJw/LAyNSXvi1MNur3wgEsjJ1cyQfTwdUQyYKzJEo7qRyXbGAs + NOqHk4JMqykMysLLmrJsR4B1wwk8iJRsc/ohvmfIvWyLnrWLfD7Kx4i0yvYqpaksI1VYzGk0LLaLuqXc + w6NrxMSrD2J4zJkLm/gbvTCyvIUJztgMzJEqzUZnzqkMBB2YzaLKy+0iix1cBPK8ztpMtwIjjvjcuieM + w/Tcz3b3z+SMRc+8wDw6q19sc6+cy+Cl0O4bzVhsdAcWywUt0eG8xST6yAyCr90sxxzI0bfzaw0NfO2R + vYSMxv7zB+qMzI3W0iBdfghdRS9dtfMcpg/MzXf+7M037cOsusmTzNM6xzjnPENHl9P7TNT5O81HDdC8 + os/Vy6MzrdJQbdOSIS8mKniKPJhWvR2dW892sNWUppcDPc7NDNIuOtY2EJyS8LOa7NVf/dNr3cbFWxKl + +68XTMoyrdb8gdVtTR6ZeqO2DNF+raPLfNeg+hYXgHXkCtmRLdnUyq2TbdmX/diYrdliwowiIaKGDcWs + ltg6x9Yf7daSsqqgLdJVDcB2jaN/bQcIs6iqzcyIvb2bsYEafdoTw7GJjNYkOqu0vde7TG46CNd+wpV+ + Kdx4CRGubMH6VtrjKXEui9yzPdQO6txRDN0+PdLf3DhTyaDLvTQ9sdJ87c7+ix22ofBKMKCi4k3cMNG4 + tU0ZgW3a0sGE6eyxHT3fkIvb6E29x10QGlJ3Jo3bFyrc9B3R6v0fwYnRtKfT+magBx7dFj3YZ3EKChvf + e0zgutGbEu7f2QngDds5yt3XBKey1pHbCT7YHcLe39mgTA3fdfzUE97d31zAiSjXME7eJH7RNA7bCv7J + hPvDIExwIQjaqlffqOLIpJZu7v3J/d3VHK7ETg3USz6dQ/7bvRblUO7jRX3TFk4dUOPkGk5vv6zlXT7a + zVIah3wtvi3OKm3mVEE66BpueTEGCDLcry3Jrk2WcI7maW5D2SHmc83l5o3ic67bJLOOF0WVY64+YZ3+ + d7YcV5pJLxAX1FO+54Cd4/ON5GANQIKG0/wNsz1u6IX+4ceMKhgy6Fku55tu4g5e44G+2nE+6oAd6WFd + uHm+1J++pbp+2Pp91a5OJH+X6ODd6w2O6dDM5y8u58Su4h6BG+uW37Xu56VOb3KX5FdufA3naY5+xWcu + xRWH7dm+nmLZVKHm7Y+5330O7rDu5WZEu3+z5Rte7eHe7snuqC3Ous7G4LlO1SV36+su1HXdTCso6hRt + 6syubnwmkRvjeh6s8PQu5ewe49ZO5Xb08Afs7zFdcsIu3cjO3XhdVWJNZhLf8RQv3Sdk7wQPFggOgRvP + lJDu8So2XBYP6IGO6Nv+/ucDfO9YbnoZ/uStvViMw+bky/PXPu9saeCePhXno0RvXuAzj5hGn+/ajneD + TKjUnvA+76FAP94UDu3OTvUI3+pSH4Mgb/b/Xe47335WzsoonvRvW9JXqu8DH01ur/UCb/NyP/c2Gw/d + 7sYpvdAnj/LB7LenW/dDeNZvP/GFT6zpbajGHvFt//Ux3/h7v8S3baZT6fijbPI9r/iHhdLuWOkK9/TA + Lu5pX6siz9hrH/punvdl3/lUDPmQL/mzT+sSLPuYn8GYK5ycn/srn+nWO17CP2CPy723r/qTr2a7rovE + D/PHX/uI7/rMH/dkD9/Xb75+j6qpLtCwf/Tbjfv+vT/9dF/9xu/5BfnjJxl5kZHdR2j+Lo7+4F9f707e + wa+KyL/rwI9Ri5nuAU0A8DF1uf2dgJO+UHFGQmr/qwscSUpsTqAr2SRdWzaN6Tqe7RzkdA3vIRwYkPgj + Hg1GxGmIxCidEGiUKqteN1jGlMrT1rhf0pTZFCvC4vSZjW4jzdr1Mf5+2m3kQ90+v/rx1AJ7+KoAdbwG + fRStHF4YlyCTJBkPKRcSzyxtMi8tPD30DAr7JDdBc05BOwXZWFEXVCs/90BlgW5hG3UzSKlyR3xhgQNF + VVCJU3k1l3uFkZKdmx2naVFGn9uiabarJ7rxsou+Xr0BwFuvR3XRS9rNY+H+H8RxyeXd7g9Ey03784/e + uSqFhZ6tf5OoreMVgGFDhw8hRpQ4kWJFixcxZtS4kWNHjx9BPhQQkmRJjhwCjBxpkmVLly9hMsTWLCCI + mvJuauH3x4kQIQcR/ttXcKCinPCOViGqo2aHn0CTArS29E3UEEB7WO2JJ6BPqpS01mswcqa3sNawgkl7 + rGrPp1jPKkvI1lxcdWtvrP3KjcjPtwftqo3gdG/RQYE9IeZkOIfXwpAU79qy4jFjy3hHRKax8xcQr3g1 + u6PmFDBkzC1Ct+AcBd3ftKltWiAM1fRp0UBXO2ld2d89PaThzrI9Ji3vzJhY5Eaa73fZ4EaHH8dqPLb+ + gr3K6wpNKAH7tNCwuU6nHorB9eHgF6njMf6w8OjkD7JPn6A7ctvoM+yjizk1fjb+NZAvP+u+ErA9nGjx + Kbrv3oNPp/EMvIq+pVxbC8BvptrvPugavAOOJuqbIESmrNshwmJ8m0uFEbM7sEMT/jkRxgk9YNG7FO9a + UUYXw3txRnlszGPC+oKkCUEVizSLQx/RMifJvDbgTsF5drxsGWOce1GzC+W4p8oms3wqkyevPHILGpkM + yso09fHSyr8cq/A8M+Ohj802UbyzTie/VJFAPfFp8UxA91yTTS7H6tNP+wg9Z7lFG3U0z0glrUZRSLOI + FNEcA6U0kkkb3RRNQ8n+1E7QQj391FAmRc20x/Iu7a0aKFpNpy1Ka9XwvyBKfXRWTFNVUxtPa+1VsggA + zVXYToNldldNpzH2tiCSPdXZZl0AVU9R5WSG123tGJFWbKV4ldBNu7UV1mp/5ZTcQW89l5dYwRz1UCXd + fRfeYeXVhV5gpcX3xn31BRYLZYWcd8kS+x2Y4ILz/QJhwVbR9VkC/+VxIYMhzjZecFFJV+IhM9aYHY47 + 9phfkGG5VE7Hgq113JQ9XPlORAPmNU6yyM1ViYkvQQxo1BQmiJWhxzEyYppRZo3dlh9ElViHpWYaw49Z + 9VfRcpAmUemHrf7R25tDznkesKH9+tqwxVbXxws6XX6la7nCaVtVtucbO024yTFj7oTrLndpvAW/eO+K + EeFH7mZbnZnwDwL7O29IzCaMsm4lh3JjtGEpAAAh+QQNFAAAACH5BA0UAAAALAAAAABYAnQBgf////Dk + Qla06QAAAAL+hI+py+3hojRCKDiz3rwb7IVSRYrmCZ7qynJpC0/ldVijHZBVzPfT27MhgL4ii2iM6HZJ + HrIJjT6jq1kCI1TWdNQuCpr9eMeZ6XjJJIfM6raH7dZYh2mlZVaP6wHw6nWv1xd1B8AFWHaY6KLoYUjH + QZhTGMZIJaiSdVnZopm0NLnZ0BnaNsp4h2pDaXcgmUdqZNo4BGt5iPZay6cLK3tLgavJlEPIW+QLKYRs + LLEc88lMG83orLfamvzhOL1SnZHJ3eN9ghaObX44rnYttpEmia6ifmMxb27fMRePH9/BT8WunRxp/das + C1hwwz85CKctTNisIMJLYR6GsoigRC7+iArdbEuIkSODkEUmZhMoMqIaCA1TjjyoKiVJl+fMbSQo4x3N + B6U+7uRJ5ibIn15mwhCKM2dNoii7VCBWiKnKM0yN7rTKouVSpU2vuoEXVSpQp0gLYqV5FtQsDZ10ar1X + KmxZojP1eRULBavdgR2TPVXrMm2KuT8tQhObNnAbwgkYb2XI8i0zwY3xigLjOFHmx5bFcZPMOScx0LUo + V+78BzPqXauPfX4j4ulmUomBZCHd7+FeqYkVR8PNetZubqYz3h4u09Psoa1d/wYuS8Bos3FsG0fOcSH2 + qs2dMwMePBnUfdUX3N7CW3n3ruu7TQMf3efk8ubR10hvZHn29p7+v5vwtd1FgTAgRBrgzaeAfgny15tv + /okA4IH0xUXgfRbSZV4qAdbXXoMO8qJgfOHU5oAq5/2kES4qZiYhc/zF4KE78Jmg4EoB3IhjjjrueKN7 + DcSUEYorlmggci1S96ITNt4oHY9O5vBklFJOqWM0yFCJpZNPEZNjk1l+CSaWTW7ZpZc6kgDllLKhSeaO + ZoYJZ5xyzklnnXbeiWeeWdL43xfG9DYFE3UcOciK5dQwGmHbsEMoeUnC+J6fEP454Y8mAqnLbuXgggmj + HT6q5IOT9qkLoMD8CAwqmQZoaBW5NAoXqDDE2NgqLV5Z6oBhVTiJfKdIpkNkjdr6qaycbPL+qjySCjhh + QJdu6MWhBvFgK6zEGXvsGQhVq+yylZjKlUa/QnsZtRlaayW22UZrXK0L+jgqsxRaeuquNT5D7lgtvIpu + uurC65R97Z7Wbbzf6kqvgUECkm8E83jaHa0famtivRYDDNsm4FpqRYEN43tvUq7yG/G/GAMUVcW1Wovr + wZUS6EgYIZPDchAb9UupyQUH/O7As+6cDsIlLlhgHB87bDOqzUk8sSIzp2YwIA3CQcmgHj0tsqtKL62z + t6f0R2rQL3Ms13E4cwWpzdxy3XXUX4cattRC03NxrwfBTe01eezgq4ttZ4ysDy3LPbcdKm9xthZ4g1y1 + 2Skm/tXfbmv+JjjQkY8tw4ULU7X4UckS3Cvk80q+SODeTVs4GaMImqDovKZdEodko0U64E4nsczUqX9z + MdaQgO2DPg35ngjTTe9BfNalX44574DZHRTwag+8t+vN1450JZDnfn0XpghqdlDoYgS+wBkej332b5+O + +kq7hytz8orDrlzfu4YukvHJad/E4Krv8T2PnQ9l0itJ3/hmtf2kb3mUw53lbPE+ZwmwdQQsYH4kOAf5 + jW6BP+CfA70mBQDGZoLuAkMsDHgYmN3vVBosCgf74jTRcW8MugvB41TYhLP9w37XOVHdYvXCDq7vhCD8 + YPeU4ivX6XBcm3seEIM4lV/k5YFEPCL+7zQFOQ0yTXj2aaERoag+hllvhhC0YuYosLXgVVEz21qhv8AY + RuSVcXLsc19W0IhDNdaRZxR0Fw9LA8coynGO7fviBmlUjNcFYY2cY4gXQxjIOBrNe1TsnB3v6KzY7TEr + hpLQI/sXSUl6hJKVvGMNOSkU+SVOHYcZ0giP88ZQLoBW1gsNDDdJw2ecEV+MtCEXWnI0NP6RGrIsF8Nc + WMqTXZJdusxPpzwmrZUNs3XBXGYxoWaNXBbxCISLXjM1OUKfGUlFaRRYNQl5TVs2Ep22u2N4mLdOd1aO + HPiTJqbsWU4nIiidyvMmKbcZG/Zo059H6aUjxRUzTs2uU7ThJzb+R/k/gDaiHt0chPk4iUt6yMxeK0xi + NaNZPIc+dDERlaiMBDrQQmkOo/NMFUg1Wk9qZrBhfAtSLdki0n4yM6WF5NM7D5nDovFSbXZRFUNseK63 + VE2f7yumh26qU5wy9KfWjKc89zWXFgpVpjeZZkVF+lSoovSWAaVqVfn4TYxSrX5MBZ0095lTs0brkzRI + 5g3G+k/x6XFfeHVj8MhpT7FakJ9hFaszkKGMr871rwWVa6oAAkt6OSqujp2rYe2quBidJYtYHWsi9Uok + wa4rrhK7LGZx6KG0iI5QiVUkaCv0kXOy06G0hOphy6rZq3lCa44VrUs72ThDvNSMoawtT3v+ypXUZtOZ + mLClVpNXpOrJ9rSRNC4yTcqh3E7ygs1FKV0Zu0ug0paNx0VuZsXmh4kmzpOtHSBLK2g43+qPO2IsadyS + q9jFnG05eXiCb/n6Da/+jLLq1FZ5/fG7yuYVkVNNmowqcr7/0ixf02UgZUtrXzqK8qwTvarnUqlQzohr + VXgQ8A/DK5n5Yuh2172vEEU4xOkhDnyvsM2ILZvChT0rx/XiVPxCHEwVr1iKC9bwS/IrO8xw9pdufUyF + 1bsysv0yoTnmItGERxghFybGU6Sugmcrxs92tp0nJotNMXipHrNCLalwqWQFeWEug1KZR4YxLJ58Mjz7 + MsTCwQ1g8dj+xw2DVc5zxm5fwfyr/H43vBOWcRMBPdI4N7DFRo5qke8sYfZQONOMVs1KC0xYFlO60oeG + 5HcybeNFM2UuWr5LPvol2tsKOsPGUPVIbS0VEkY6pwFcJK3NC2pEr6qquBaLSQhs6XP1DKkctvCum11r + PYuS0zs5NrJL/WYFyZebdbazRJQ6oxLKFIq5aLWrfQngX5M52KaGyHaGG8ebUfvb+jA37TxXVmhLta5I + 7gcWoclAkvV43s9xo73v/d61qBvB/G6qv6mc5Bfb7RPAJTiIDH7tZMN31D2l1cERiZQUVyaBxCr2nYnU + 8GvTEp739bistOINE6+nxhlnt6f1ve/+Lwu7OWUZh8x5TomPo+93B0I1t/mgp6QrfelMx9Gbml6mp0N9 + 6lSvutWvjnUxSQdNcpJ61vFk8y5jy9r4btschL4/KGvb6PBy+b8CYg+Tv6cOaM+fNeSObfW5XV03wYeY + +Q6OmueduywflcTqvtNn09PiORN8jP6+c5zuXWereBjjMa3xdD5e7tWAwOQp/4mH1Y7ugh+8esSL4M+T + jniXx3zYr7n5whtE9ZJL1FsT7DxQIV6ByONxob9A+78N5nGgkeDLIdx6vGy+2OMIfttSLfPkIwv50qfv + MVG/buzrLFAsqn6iM6958rY1o84mLrbMwCKbvPb1TmWjtOFMao7+C/+uAV7b3d27cdPLsrbvh3/2tW8y + VKMVeGc440dje6V4pOV+sXZ03oY9fTCAn9Z7mtMxCORXDDZLpad/3CVYnRdSHCQIwBQKgyJAxsdC8ZN7 + Cchr49J/3QYRu+eAKDc/MeRm13FUxAODfnMLPxd/DvFCFGGCO+hDgWVyOYgkC7hoRphytSMMEGM0PPZj + wQVZG1hd2sODwIYOSgiAgSZulnWBXTQ8fgYtw6CBVIhCV1h+ufGDr5ZPqpFVjDGA0BSB7Nd+I0hXWgh+ + xtIWjHJTJYY2nfZoM1ZxpFeGQvZdeGiGDMKGbQhOJ3VQroRPocM694OITzR97aaDaTV0Q3P+gbU0G09G + gtJFPXkIe5mCiWoIgmtxMyrliLDCZ4IoiYGnga3WgnTYUKmoXnuhRPlwUR7WQ75XiSMCIl6EiMF4afW3 + iruFe18YVD5hjD44jIaEigsUIdDThRzjGKShMDDRZrZYXKdmUFm4hgmHOLMDb4/lF5A2SDo3XuDYUplI + OqzEVT0kTnoDHhYYZt5Yhb8RjsKIi41Fj72zKI1DMzHUXqUndFrEe+njc/8WigLpMxxhCM8YS9H4jtPI + kLqUjY5zginRSWXIjvV1keI4jh8WU1GGHhnEjOhwdgSoiO44WNdSknkDhShYT7WoCMKCkHM3kpb4gJqk + Mvd0jeOXdiv+GWqREpPQ+I8mVD74txov4H3nFm1JWZE/qWQq6ZSdYWMq9xk4+IIzWT8lZo/rYR3IVnfJ + o4QUKXaexkMueUhRWZQ8OWAYaZUn1xpbSWAwiDVpCZam85TjpoDxACt8uZSk4JajdjjtyJKN4l9wqZZr + aZhwST/PI5mTJZgNGJC9EETmVplzCTOd6Y+CeS9QuY2a2ZeXiBoCGIpo+JISsTOv4H2P+Xt2qZVXJFyv + OH/uJikCJy/UaJG1SX8SWIO5qZt9oovVJ5vSyIXrZxkCyBesqXwiESIgdouFOYJ3OVSBqIceGV8ztWYa + s5kX95cmFIAuwYcI1JQyCJ6naYXjeXP+2+mRBJlUa2VU/VZ7teaezQiap+huukZB9ImTaXifv9mcOCYr + FImP/hdYH2id07efXjYyh2mf9JZz2KiOshePw/ighgYyunegi+hwXVMXr5Sa4iOhIVqiJ4Gi5TmVwMmc + xZIkTUhtydmP3+eiBvYoNIoIDzahIkqgBUpSOeqhPBqDTPij0RmkMTqkjtSj23dyJ3qMrPgiOipxfGF+ + /6JlAdqbBAWjU6pwGJqhDgqlUWpRSiqkvLiiLMo/GzpaL8o2Z+oORWqkHtSa+sWmbVqnKbiFTtqeeWqi + ftqleopzPspEgEoxdwqh+BGnadoe7LBFiOqZy/WmZnpGnEal9LT+hCJpqOtAlh/qPJYanoW6qThaMnBq + pWBKnL2npY13f51qqgF2pepSWOeXj64KqZg5Aoz6comYbvD5hGMqf6V6qoPKd7zqi6/KjUa5ZUvKicqq + nJJDUevoq3YKnSSJrIHWJl+nrdt6J0vArW7idd8qruM6iONqruf6deHqdF6Cd5c6YVzQG8CKXjgWXeiI + GJ46rAs3dlOWabdaoyhElGVjfZT6h8QKKgpVbPLapDR5QBqyqgcmrAWrr/sqFzrphWoaMPZjVH92hASb + q3IKeDqRpBhbKMPle+dYla6arwZrLH8hWv76rGrErxF2nr7HqqOalRNrMhT1ss9XsrdpLyj+C4uh6bER + B6qhyqWyepXS1So58bCTibMRx7JKy6mESq24matPi6eBCogQO6CvpbCoepWSiIEpq7Ir67WpambCGbWk + motlRkzMKqg6a7U4qrU3O4Egh7UMWrTBuacke6gwG6l3x17QYLOxOrBHhbjTChNUK53HSXx3q4+b+GZi + W7eNS6vx6bQ2GazY+aV/67i6lbkSWSNa6676sqiLK7du2reiSY4x67loqrrXOoWAe3z8GbGpa7l8mrSj + +3bDYkxe6pNz6rZYanas5YJtu6V1ubaX+3awG7sy2aA59LVdo5C0i7fEi1a8e7w9mbtKOb3M5bOr1y+n + G7xEm5GLNb7+5Fsz2Ju9Ydq83Mu+h1ulXAu+6Ru/trtAB2K+yXu/zLu9oUtuPYik1uqbvcu4QRRurQtX + +Ju/AqzABKyoBuzA+QfBL7TAymua4Xt6+ru/Epy46AvAKBO2ugp6/xe9FKy9d+O7YIQb/ZuBHTvCCKzB + f/PCqyvC8PuECRzBDMfAZqu2+sXDGIzC+anCOrxdOEzEPiy8dDnDVfvD6TMbMKyC71u9SdzEgXTDpjib + PgW6LbzDWezCW1wLrqOFVJyoyljD3cvE9pvDSCyt39vDbXy2TgzHrVrHCgwd7guidGu8hHajA1zEKZpv + AQu98nt9ecxBy4HGpNhku/vHNKjIH4z+hUYsuxdKps6rqSm8yBnsxrprwkocx4TcyfzLx4DIgBwcxpyM + PTXSyLxKLH58wURmyaN3K6f8nSC7vnRay6tHZ6wMytoJmXe8g5Payrgqx8HMtofswaNcwLa8tcZ8yQs7 + y7QMpNAczcCMtpBczZv8zMfbvmsstaGMy1j8zdY7PlHctdwMxjZ6zjubzur8sXz7xJL8zr9rSdKsovNa + z/Y8wSecz9o8t+Qsz3l7rzbsvQJ9Rs63y5F5zQAd0L3MF4enyu530NZLfoF8EhR9wPj5z7vqrJWs0anL + 0RVcxoLrvy+SIv/60H3M0Ihcxh/9KNWKusmspy/dzKi5rC37Sa/+DCBVHHndbIdDBtLDrM+CitORzI87 + fbC15NOFbKzZ3NDiKZVJcogFnWSeR88rPGxMPdNjVM7LtgtEkModLSoI19S4q9DlpNX3s21m3aJoPdNB + LdM3LQYu+cqDrNNxadV0HcJ23Q5Ha9JxbXct69dEDcogABYELc7iV9hF3cVHncvBwSXoatmXjdndqq6Z + zdmdzSSeDdpXJ3XYgNcVfdKPfbCH7dVITQulPdhyCY/8AdZiDKtJAQJs99pzB6l5LcwRPdLzvBQa0otG + HcSLeae8vcyDa54KOoNUFRnCNLVhTdj/K9uqDdvnW9uh8dyz+8nG/cYzp9akPKxIIB1wa93+jR1tnYnc + Ic2hiD3eBHLbErbe9RufkoncTk3bBUveIcnM7WyeUXnf543aiV0it83YNq25G6zSs93dzdpXLHEhtpXb + /y19vI3f6C2LPwLhkhvV4p1rrRfg4X3PwK1gfwHd0Y3erhu3cy3iF72MEGjgb83VH77iC97iLq67glCW + aSvU1WZxeX1TaNxrYQeVEdnfokzj1LxqQY7heUiaj0yV/o0X8/bKEj7J4dUJ+925Um5s/NwdTN7gzSoM + /M3S+NoaVN7XAr6QuGcKw4fiYS4kSk4UYI7gH7s64ZGYN47kuSbnPp7Jdb1LsqBdV4waM6rSf/7XVnrn + 71TWxW0Zht7+qHQu2QuNboM+1Z0B6V/O44nuPNHR4e2d31Pe59y55ZxO6Wkc5WZe6KMukZvu3ovqgbo8 + xF0u63NuWieO47zoDWRt5Y5O6we+mLIs19mw664V2Upd6IKN6Y0u0adekMrl67/Ozv355l/JJzHXWwx+ + 6aIO7K9R7bE9EPMwGCNH3Fy+arWe4MJOuXZgD25+65rM7dytft9ux3Hqc0423L6953He7QWn7nwNCfwA + 7fDO5+ieEDSt11UtHr52SgQ/5wb/bf3+3d/gd58Owlf+8BJvo6691kqwEAMP0wUv74lWgRpP3fZ+7FAu + 1fv+3xAfmcDl8gDvDhaxVmUe6hlv8sn+Wp0evvDM1fDIbmzK3pUlTObWHhsh8fNAL/LT7s8KzvMzb1Hf + o9yzXm2sfrWVab6INRNJb+7LHfO/mtw5OekysPXHWqE9Tuo5D17DC+gBZhTOICHzDdSt/vUUY5m/LQdW + sUM7mtNer/YAefctnQ9YsTF9/7h1L6X1bupk/8UqL6DSffCIH1RrPuIUz/T6nuLzPvKMQ/mVPwKL7eo2 + j/Et//ck2vltT/b/xfUsT/elj24D7vlaUPj0nusoYvUOBvuo//m4ffl4L76J1/t/JbinGyEgT/vMlis0 + /PvBj/tG7/uf7+WhP/bSefvmIvOvDhlbLf3NfviS3/zgvtozT3D+s89bMszvrt/H5q/7RFLSje+3ik/9 + 1Z+d4K/w4U5MRWj4run93w//9W/5cUsAwjF1uT1clJNWexnEm/coDE9ctNFMwFNVy9V9kXYDZdir7QjP + +R7YfcFFSDgBFofI4lHZZEoEz2ZC6qtOsZlsk7iNeYddMGs8vTJo5Qf4rHa6eWJvu5eCn+h3Th4R1Sv4 + VgL/bAYJk9QMXewO9xpzBv0aFU0oH0UsDxnHMkfkLik6QX9EDEQL2UazTu8+t1hnVDFgJ0tpXW4rcmVJ + eGdcsXahgH17izE90kCFdY6FmL2I37aknb+sNyKhK1Oxe7axqpHAUcSdyTmTSVXRqbx52pH+zJ+p35vt + dW15A/j7/f8BBhQ4kGBBgwcRJlS4kGFDhw8B0oA4keJDGlGiVNS4kWNHjx4z+op3YGQtfAo2pSsCIsW8 + cyeNJJMkcg5MXDYPuKQnpGVKnCXNJAN6oxvOEUNt+KzJk6XOY0iXyITqaKlRokadflvJ0qq7roD0YRs5 + FQ7ZFVnh+eCq9OdXrx24ehvrlqpNtJDUAojr1qxWmfjm0r3Q9wTbYHWaCl5HN5Jhmq8UD8aaSK1jm4RR + lbpLKHDkmDg334wTuhjmF4b2Aq7qeQ1oyohMkH7MWLPsP/FMr3JdBodlCr4vCx4UAPhL3azvwbTNLUxs + 1rkFYUodHDL+8gbQf70uF3q5LOzMZXbnXN26lpPikaHkjn4Z7RvTjeIubz4c+uJBamyG7/7rcAPsxzts + PmMQa+6F+6xQ7y/rvkuvA+L2s6qdBnd6B8EEUYILwPb6QyZCCckbcDFvNqwrpw8buBAmCh+UTsV3JhTx + LWxKzEbBpqp5UbUOidIRxuNkZNGBGmcx8MSeFJxPyCJ7JPKRGIO0x0kLdtgLRxxFXJJJqqZ8UsAoaewy + lA/EfIpHE8EMKk1nypTgiTb3ORPNNZXQ8jQa72DCR+G6Gk5G+ur800698oTiz+TaavFQAgPNkk04EUVj + UUCpm3PSEcdx9BhII0Vjzz5BVPRSsNT+HHDJTzMbZtRB3XRw1BkzNbUYVGGQglMv47vqVUZjLU9IWmv9 + bVVCSAuE1S979VUWFENM8dVjr9N112inUVYVYIMlc9hELZ2W1EYZ5OXWTvsY16RKt/S2NXDDvdZcSlHY + FVp4qVT3M3afc/ddXo+Ul1sb7b03Wc8aZBZIvQxW8t90AybXr3ZHgXS/KwOe91uGG3Y4LYhBwRaDK7my + eOAfu82YXgzzXTYL+ESOakVpTW4V38golPiTliu0x9iYJZuZz4htPtnfl0vmmdqR+bvEYwvYwhllnUU1 + ul6kk27E5pszzk0nPpwOkGo5Nbla6G01wTgfqQH+OtRHlk7SyIsWvW2Za7Sjxg856GrEst+j1RV57mMK + AAAh+QQNFAAAACH5BA0UAAAALAAAAABYAnQBgf////DkQla06QAAAAL+hI+py93hIhIKyouz3sDyHwni + CJbm4Z3qypZpC3MjtXiiRjPBHPe+9CrlDMGf8VM8NmY3ZS/pjEpR0ylJZxhemtnEjlsNb6Ayr/iMIIeZ + WvTYDf+p46BrxZ5p4jt7OnyOk+YXBhhF0jfoUJjIWNG4wrMAhkPRRoT46LS4lbOZCeJpxGb5SVV6WoNa + B6DXKkSaNakqB8MVOhtx6zMKW6qLK/ZbSsMrICyLggmsIixpurzS3MIELVjtex0CZIJ82Z39VksjfU2u + Qg3ekZ5pzthL9Kr4vb4dM9IOjV/3vqxPz/wvAT91H/jtCBhulz9cC/PMq9YQIYeIbgbqeshHIgb+f+g0 + 1hPTMSBFjxs1DiQoY94Xkg+MQMDocSQDPTFZ/pEIE15BlSf/UTzYUyTIoOVs3vyXU+fOXESzRTTGKqpR + R2ua5puKRqahpr+UZTT6U6rVdFoPeBWKNdigsV2QcINljO2siC8ryYVoJem6smnNVNTrDNRbWWfJHklx + F+8RNn1RNpbCdwngCS5YgImkMazZxP2cFP40WeljyOvkmuMS0udhgZyByQxNL/Jo2btMnM5hV+LIF6ix + joQde3QV2j1MT9vMqrUfzZQ3K3/0+/lV4VOIT7vbDncs6WeYN4/6uago7p2pk06XOLvZWHuVFCEGnyRF + 4GjNR7FuGeD15Oz+nbqXRMx3ui1GXnn2aYJeNPa4Ip5LMwXYX2YK0Cegefj1dSEkCtYiVYcG+gCFdm1J + OCEvBR0oGooOgkNhiud0otiKgfWGUzE2ElXghyrSgl56xcHoWgBCDklkkUYeiWSSOwhpzJBNKgmlkXQU + 4wBqXuXo2o4IxuFklEc+6WWYYo6ZoQa7LbFemi2Q6WWTIhj5JpxvgpkkG1/UyWaeeu7JZ59+/glooIIC + egJnZ871n2QjevjIjR3FhVmVeHSDJUNaJsoiC4eisulM2/E3DDKMJRfpUoEdWGZaqXKjKabYrLboBPG1 + OB4/Nr5oSaWqrOobKt8oNx+vWMDKKHKjNtr+0wx1tZYrisKC5SsptLoYw0GfyGQDmsfGsW1Cx03o7KWu + ViWBqM/99qw1MmpDarFnpDZRcQCiKi6x7+LWhqhPuKerYPaylluH/YYQXi72PEhvvTyigW++zVbLLztb + ziuwmgwXrIi8p1qo8LoX33DFJNP6ddjAZo4LMIPt3gvsgrmaLHHHIMJRiVjm/vsEzBdgS7DKoA4Fgz6Y + 6NxIujbhdzO4OOfMSKeesmZxXtIJDVfCMkOMi667Ed0SykoLyDXGH3H4NMdX7zuL1krENQjPBFeMHLlB + 75I0dUYfnfXELnGdytIAihh3Xli7TLGxYut49oaq9Ls13+p6LGngP0v+MTK1kBDWMA+VN5344L7ep4nj + z0Ae+eTuEui5OBtPfrilna+5+MDYbu7twnnESju7sIuyeomi+/26v8MMF/pRwKPJOkipLwh16fIFv/vw + 1YXOt9sbxPdpFVMTOARNAvUKveKgEVJ8d3rf/nPr8cy9duDv/G57+JWdovPsWZ3PSYQrG4I26spcljvj + yW9+0psev4hmvUDob4E/4I5W4GU4WQ1ogCe4GwO9Vi0E4i9WEuSg6WrTv7X9CmT4IhEFCTg+4h1QhRgs + Xd0aGL/jQDCCEgygWk6IwkzU7z4wS6BDLmhDD4qPQzB5VAeDg0Ph6VCDKwTdBvOHCCzliFeTOqL+YZLo + lgKysGTnOV65ShU1soVwSiKLWxBbiEWDLfF+EXOiF8slxBwV6FkPqRk4LAgtHbphdmp74g9fKMblUQ5h + UAPjdNJYu0Q4TivWeqN+CnW6SLIqhpQLCshUg8hErkWAcggiIzVUNY2N8TpUegsSM3myRnGyk4585GAU + dbCZWeZRJtqHFV2HygwYTXSMDOAnNaS7WVLyeiH7IlvgA78s5rIkqlwliOboRs/E8keFypwhSXVNSWXz + WsvUpR6dybRRynKQgZymqdL3v1p+TVbIxGU31egO+P1SkOLkXTmjtwowRkJa2czXHd/JTEUuh4f1pCcM + 79mqnTBmUt0C2OX+ToHHqdBxoOXDJ+lE+Rxf7sNhAQIgpdSHzTPmEKDDEihF0ajMVlbzghsdZykxoDk7 + +o6hTbnkepJJMpJ2zaR06OWaGLcVlq7iR30IGEytwtFkacGoiYhoHnnKpS4Wap5WMOfl5mBDwKXsoyJl + n04z5o62EXSqUg0qQoVguQox74PNmynivppTP3R1bKKQBlT8OB6rQtIxvSPqKGaK0wrCFayKnCs8VboE + qppVr0Plq0P5J7m+HnKwVGmEYXfKRSGURTYFotU4JHPZW/ruipTtm2V/t1luKBayINxriP6izT2AlHyl + Na1lexrN66V2DfY0pWPDKDVHARaZsx1nbR/+F9aoeuYiu9Veb21puazSzkoeDW1Jjzu6wuI2tzBtrvY6 + u9foBpaYWzgpdtPKLfPWVQbebSwl6La+3wo1Jc7lhHWze95dyrOsW1jtd1tLXvwCFxgnmSFeKXu3ZPr3 + sIgt3Dn389647g8aBv4bE88rYLnul7sMvugPfUvKEcKLN4eIXciYetRzBsWp4PsmOAtq2wY/d63baYUs + SLxNujW0LcSFYI9JuFXMgJTFEtXiHvmL2Tf2q7jaKvGAg8Bk6DoHtNissnNkK7KkFvUkRC5yCl9sUAl7 + mGXSCc17HHcZtk7Zyt6D5ayI67wO59fI5kNyZVH6MfWqObgVhiNS/6r+1gGLGbsWVLCdBw1jbm14zWQU + po7XecEuP9XFR+YwosOsYeWyM8KhAlpk0VtaPBra0hlOdKbZSJnxlsYgGL7z9VC3XbzyhcVRjtf3lllC + V7f6IlkV66HbG60bBhqRvZD0pCnxsnM01c6zrkatd9ZWXBO21aC276fL4GsONzsbOYENlB90X4+0wdjH + fjAw9Uw6YFO4jn2+cxRVzaJIkRtvNHZvrFG27VW/DM7eBGKuw71qRs2bJRy5C8B17TF1c9sOUUxlSB21 + 47PJtNqh/jK6jZvvGs2jJ4hhqLtQvKNeTGLgz2vmsruYceFYZJYHX/elCW3ybG8p5Sp/SHaePZX+kVMb + 4QpNDLybPaigC33oYooT0eVEp6MrfelMb7rTn/6nOd2jT0mHutWlRHPqvINq8AaNLXb+8p7NN3/QoS2p + R1NsUXbODiQv+VpaHuMDexVF3+DInsX1dbCXuiJlN+ChtX7d/HR9V3rf+18CG5ms0z3uK4Ve3guv3/Eq + 3riXYozQ5Pd4vSdY8n6Xu4pwPnj6AQnyXudcTTr3BY6+Gn3iarvb49luPDfobDY4hNhErjAwrIT0yII7 + xWNE+yDjCPNDSD3vb2t6EwYf3JwOnhZcf/rTXnuLCIH+2fXie2x72vAw7z3OlVifxKmh24C8mIOrGvbj + bv774D+l+L+Y4iX+9hN7B01/bdePU+sj92qAGEibtbsoDAch3IEM+ld9nTZqB/g6/WcrXQdAxlIlU/Yw + 8MdzuyZ6OSZ7b9UxhcBup8VvjCZ25GGA4Sd/BzeC8qUwi7BxgSWA4BZ7w2SBoYKBMsYpwbMJH6Vo+pQy + oyU4J+h+JchLysd/9CVZIjRxFIMRYzGD/eGD7XGBS2hqkzWEyEZIgpOE4UF+VxZ/KIhhXQaFc/eDU9h8 + olUrY2eG0ydJEBcSTUhaaRNuBsiGURhtt8ZaY9gzLwVYD3dT+7dzxvaGCqg6Qgh/0lJJKZFRPHhLNvV7 + 90dhqBaGMhMKdjGBsPZHGQVo7CSJ8lZ4fHj+gcL2iBtIXw0nQpw2XSJHDZYQh//kbDtEgmKIbJTSPs2H + Zt2Siv5xDZcFhzaIVu9mTNinfZIkTe20iBV3iz0EiO/3In8DSyGlTUSYfWpSi7Pncn+ngaDoaFfWPS2Y + PXMYCM+YPdEIfKvYeaq4gPe0T9VFh2hIdh44jAjWI+Noi+V4OVy1VMLIOqE3GJ+1ie2ILNToTssneEr1 + WCSEjxsVcdTmenNlfeA4RLhiZYhIkNpRkK+QjRP5GAkpO5iEeg3ULVlWY+qYGeyHQxjpj4gijxozgCyF + OY1Re5pHD121kLq4FVZSNmZzhl8FfSJpfzV4ktzDcFVoN9yofi+pk9z+R3gyOYonhjw2CZJwlZMi5XoM + 2ZDw9ZFxdpFF6I4B4UlO2JMxd5VCyYgIYUNRCT2iZpGj9IXLdIIa1YbI2Gmz8TXeyJLiJoJW2Xdd2Y9w + mY5yqSokQTtJ8IKOCJB01pdvE5Z0mTqy9SobGWx62YsSyJfkiJj4VH4yN5iE6WWDeI4HiZR+2TITBpZg + Vi9OFZkZ6E/Md0K1eC7gsYwnh5eQJjeOaZeKEphaEo3TsnuzKZqttzhBqVelyU1Y0YCa81iG6ZqMST++ + WYduaRQraHs2xoF3iZxv+ZUz+ZqeeX6PxYF21HJS6UqlJ5ueAZzHKZwNQ4EqqIeVdp3xJBy0UZT+rdic + acmFwheEnSl/7VkV7/mJ8ZlSjwmMNGgfEaWfMUMuZ1ln9kmFnjidsWiI4VlJ46lp62lMB7qg1IkhNOOK + FeoQXOOdghU7+Ml3kBg+vPaflHeZawSiDJOhzPleHFqWH5qiKmqNCJpiLkqjmwShY7acl9KhHopWCnqi + sMeU9zKjElpeQLqiGjagixmiozmi4QWPQTolJVpuypOC8nMMSJqkirYjZbKk1SiiP0p9LHpq4ZKDBnp2 + RfqLJcmj7Kgiq/KlJvmiYhqlixd4U2qbyPemWBpgVAqGWkIKdISmADpjVmOkp3JhGkozOcqmhZinc2pv + acqbSsqojbpYewr+qScyplL6XYNqqaPYpncXqppap/WijxgapmTkqYQ6pB9WqnjHj2rnpKoKcsp5oxsT + Wj26D166qpI6k/L5eodqMZhwdcVqrEi3JMfqJFWnrM3qrGrorNEqrdPKJ3RidEUCg59HDRdSqYLZqdSV + ibYqrFiZrXT3nKi6peJZq2bUq/2pqMb5qtqKDtbVrRTKZxv3cPXqrmS6jvG6eCCzLJ3Kr+IJmm6Vr+06 + beMamqyac5lXXwPbPjvmY7UppwoLm76qrS+xfemqYzHlgnBxihppsQtbroB6CRubqkYoZCNyibGFsEY5 + qsF0k3/KqZTIseKAZfyhTneorzv5qOaGsT/+y1sQe68UazNt+a4UuKk321s9G7S884F0Go5JC6+faqYC + K0SYKn2vJKrSObLpaLWGKjUF26WUZpCcmXy32q9h26p8pqZlSpHzCqxs27Z26HlCOxROe7er+G7PObcW + RbRr+7RXyzIpq3H2VY/q+bUXm4Flu6iGK5accV+6OlJrOrhiG5tX6pekZHaLC7aXG6CwxbSAaoyZKrV7 + q7X/Fbh4V2ZJtrpH6q+T+rA1m3vKUXdPqmxLC7kM+rqsC7qhm4y6q7nk5LkHApWmO0mxi7e827u517ip + C6W/K66gSrVXo5OU236n+7yEu6O763h/ibvnRrcxeqmjmzg7u6/mC7v+4+ug1Eu7J4Qd4Zu7yuu4qvu+ + 8Gsb8hu9qMu9xKu+mJe/yKu92wu8glO9+Fu53ttS9Nu/7vu/4WMcakuEDIy5BNu8xJfAb5u8FFzBKvvA + EJzBwyu+7FudKBuz0pa9CkyqHFzARCrCKJy+GhxfJDyXjzur78QW2Gtr+dG5F1x/J5xLOSzAA8ywJWx+ + sttNQizBq9fDHwxg9ZvEKSzDRFzEF9poQIxKYzFvNvotTazC9gu9QSzFyamlVKyjWNykDUxsWjzEZlyy + y4uuapxGSly8NcnC02vDcoxFdHzACuTFXzy0eoxDwKHDmrTBd4zHotvBexzAdVwi9nq/s1u3SUT+H4Xs + cCMsvEgMt4k8yPHryIwrve2bXos8QExmyQHFwyQ7lVOsyJxcyoayxEz8uXIYxnJFygC8yi88v2V8w+w5 + ybicy72MyYKWUH1spa7seDTLyis8y8qsy2/3y69TOaeMysNMw4WJoqLsfNsTy34Mycs8ytp8vuD7yaAc + yjUMnkb8vSYKyJabyWi8ydgMwdBUzsOGyOJsy+oszfRszDAVoZEcxy22zm8MxdZ8z/qsp/LsfFWs0Lv8 + zeB8xQ09zgwt0MGruACdx5m50BSt0Q790M+czVVqqsRczD6sm38szGTc0bW7rs6syfvrrRANzSttqn97 + yU5sx7tZ0J9D06z+azLULGeRetHtnFz0JjO5Ws/PCNQJC6MEJ3GsaNI5XYG0fMteGX0dg4vdDEdBzc4y + Hc+C6LsHjc4g1jV91M8RHaw1/c5w7M53kLWA69VffYzOu9a1zMytydFGnTUvy9SwWteCvIVMcc09LXpO + bb0o/dJ3vZT8G83pPEFHjdjw7M0EQ62VbdmXfa2XrdmbjSec7dmYzaxYl5FnndAiS9diLdGyDFYKSdpC + Cp+VF9k7rdiV1UgEjMwmZtojjdoVPduV5TNdndh8y5VY/dcmwWUGjVxOdsZ2XYxIW3mlW3PVDLRxN9oY + 7YarutTNvNyAvdUdxjbnzNtIoa/Zbc8E3cL+buxYkALe4a2VlUrebw3ckh3YrssKChfckVuxfr3bIj3Z + d5oFtZ3XV80ScTrGxhvb3N3dfc0eEBLfsu2ZoffeflrScb3Y/q2FjI3POMGkz13ct72+9H1Tx2vd70ig + uj3Yhg3TL0cBubnd592wP1e7B17VH854jiDiRF0jRXPa+53W021/GgvfIczc8Yl4Jt7hGU7jU20G3dPg + Q96c5GmnMu7ivf3fDoclER6rSAHlBs7LTs56Fg7iVE2+jVHksN3lCJ7gNS4PZg3Swrnl9sHFbd7WJzsG + RyjmCF2elhnlRz7WKU7nN93iHr65F6d1iSrnqu0FVgHkAT7XZK7n5jH+uTiNlSzebxhuxSr36NH90V7+ + 5W5d4BN+3zmX6Wg31PLd38nAx4ye232Rf9pa6g4u1H/+6cGM5hpO6I6OaopY62lOBZ68lRSulaOeFiaI + 40nuDT565cWO3/em6TEN670N4LP+naY+4Lcu6v9M7Z2O6uLDlinN6tZuE3D33pdXA8CSa5g25W7O7Liu + 04I+38euKXbu0jMubuBe7djO1rEe7YLF4Oju7raO78O+7s+u2IsO6k3+72Jp74c78Jx+6pQ+SQu260S5 + 8OL95hPP6wafuxJP78se8BZP0lKO50K977R+8A6v8BVPYPrDeYfuziXfkA7k8jmu8k94Kxef7jP+DO8m + KvPeHu44vww2zeeETfLgNZ8mn/Ak3vAERuDTTvB92uu2vcPZHuw1v7VS+PSI/hUHhVU+SvVabvVn2vQn + 3/GCq/Hm3cj5PuhLf58hX+JZ//AwqfV0hfJgz/a+vOpln+QwT9WKPvNVf/cznfd6X7VbD96sFuomIexy + LZlwr+2Gv95c3dgpH/iHJ+B1T+NnL3uE7PPYWfkyevkYj9d8YOgI3+f8+flu2+M5H6mab+mALvrOtvh5 + y9dgPvmuGvVnjvSnf++p76go7vj+fAfV8/qrX+9hb7Ohz/oTnPubTvZJ79Hd6/wm/NjBz+uk3+5pL00b + 7r/d/+p5ptexn9P+fH/itj/ma//xoG/80D/65F/+So7kLzn7gbz+53+6ri/y0i64YNre8w/GYE0A8DF1 + uf1hBEFKIVTAlffpPQpcttE8M1RdoZI9xVe95FqN7Vw/8HnRdh6Xrhc0ropHJYK2fCSdpGHUCKVeGdbR + FIhlTG1a71g8fjXNhjIVnQ674WoZeE2tm+7xYF7PAXv5jv768AjNAh24BsmOEA2RHuf0HHXaIgsvoyi/ + MhYZ9zI1Q33iNmssRztMUyVWmTojXR1kWZ9qhfpoZzxvU3p3dBVjG3+JiiNQD+N4j3maa3QBuDKjfZ9Z + qpeZnbJxryG6f4OHuoarviHRSXLTktURwm/+o6dD4z/eMfEP3LHsH7bR+Us1LkG5S/YEDtT3qtQYfvoS + jgpmrd65hSEuSgNIzMvGaxGpzSFXK0BJkydRplS5kmVLly9hxpQ5k2ZNmzdRXsC5k2dPDQI0BPU5lGhR + o0eR1gSaUp7FjK0uPrwS8UJVjx+fViAITxyorFD1XXVqpIlUiF/BsiAnNg1CtOAWmhWlxCrbZiDNqR1Z + zO3bWXHZ0a3q1xnhLKcK2nXT13BBwJMEYRhsGK+heS4M8vXamGtYxdDISpZ7lnPnM/A+NwRW2vS71C/i + 1S1dmVC1Ej8DjuVMmyzkHVZZ81Ytad/r4TmEH0dnPF0l5l1Zy0Gs5jn+nHjJF3tWbsB49V7Y29q4Pbrp + 6ujgRW6XtsJ7+eDiN+C+GA79J3XkdXNnH/3e+/Qf2lMPtvPwCRCEIvDjhL/6+jllvK+uI/A+34ojRcLZ + xOMhQc3M262jDJXbkAkDSfLvP/nQou/CSqSYzroEROSORFYYnApEFN9SEcNvYkQORrZ6xKfGudKbjLAI + PeQxsOKuClLIHYt08hgdk3xmRlVglNHIBqRUZ0hu4Ovyrg4pU5LCCpkU7Uf+HKtSpC9tNMbNYq7kIIkt + 65KNzdaOrATOBuUssxkxsUmkznf+3OyNPaXzsbFEkantH0a1mlMGSON0VNBfCC2Uy0Nze5RMSqn+9AvT + TyXlktK0TB111W5OXbQXUCtFddW/RNX01sJkbZVTy/7pNKNYLw10V157TZFTWllV9dg2fdX12f5A25QV + YZtLZFpkczR2W2qL7fNabLP9glnoLiEU1m8pCjfaULY8s8VvifU0WXYbrbbbVMgtd012673BW3y5tXdf + eM9tdkR8Axb4XoLzdVdZfhOGS0GAxX0YYnAHPDgTyR65s1/SJtZ4Y479fepUkIFNE+KGYZD2ZGglzorY + ijUCQ8+TYR4hm54PknnYax3KU6eZ+VRZaKSTTnm+cTtCBegXPe6Y6QZ+rjrdipOZOruSa776h6VJ/rjo + sZn2ulZ9xcaV7aFIEXbosLTBtrptW96Ge+uo6aAb6gNNvptmu/WOZORg+0a6XhGzFjyCxpU2O4h40Rz8 + ZQjJdrxdp59Md3LRXKA8YoLVfjzwTAoAACH5BA0UAAAAIfkEDRQAAAAsAAAAAFgCdAGB////8ORCVrTp + AAAAAv6Ej6nL7eGSSDDai7OuulsBgt5INlyJpuqqnOy7ipN5iON8hToO9/7lctgMwZ8ReMzsksYi8wml + RaeSIaPC61gBWcQEEqKKS04GrzxupqvhNdkNP6LjsC2lTbJN7DVBQEcXeDCncCaoBheGd2hByPh4Bemz + WNjloffhByg55uiF48mJlLhjKUp0mhqpmjIjs1cTKmS6AMjH2iPLNaOLi9DbU3orCuy7VmyMIxyCLKHR + Rmuc0ssrPdLMsmmNbR3FrRo9GDNcaUDe3UFdjY7xXbLE7s6OOP8xqnLeYh5e/3ADIo+Ym3y4AvZ7YVAS + P1T4ru07mO7dwn4JcxAsCBFSRf5GEwFw60jBXMYMwOCNDEnF5MGNJx229EISH6VGD1+uIvEHZDeWtWSc + 5GmzXdBdG2Tq9FhzKEOcsIIC/TT0qVJ/LWfSlOkBy1SkeWAdNSY16cuwW/WdvGjWaES06LD9IWozrNWR + ZMv+evTV2ZtsC0HBjYsiJ5eoT+b+tJumbgPDz6a9UPlpXV5WzTiwlcYTslPEnQQxxjB5aR0+TbW2rAxz + s5HPnC6L40xFcWEVG+3sqeY6ldvUgFeHbgtbjOwkv0WP1hsGDF3HvIs/qp2bYvDYI52zzDJEhHKIqKHu + cn6oIuve06EMPwL+ut59YMDH6d58POUf8k+Xpw4xPfH13/6jM9qNnFjziOfeNvdNcR59+qGnB3b1SQKg + d8qstNp9CSJ24SQIMaFIJQUKxxxyrnx4DH8okAjWgQhm5J5UPkmQYWAy1iJSjfUEcdttl6DoS4xl+cjX + ghzyAWRWITqTXT3LLHkZjxipaN5ZGxZmSpEkBYBlllpuyWWXWgLkR5Zhekmml2ksuViDw/hHIZRR4pVX + i7SVSaeYKc5YiI0F1slnTn5uOeaXYNZZyp9cAtRnooouymijjj4KaaSSTkpppY0GaqmjtDnpQ4R5Dmaj + Z2hqk2M+2oBaTnlWKrVqKzDE+NZ8eJbTIUekbVLKiaZwqkqrquWXy3tsesMcaf3xqv7FOUy2Ygmyp/j6 + KzjRfAirs0e6ZOwrh1wESE7F2Wahm8Tisia1dAgmULFmHEvKqUXxlWpw0JI3UF+7oljts9fSWOuZ7r6b + TU+qivsmKd5Vse4P1Vrr0l606oiqGP9GBG+8sM07ViDK3CowPSUO63HDHrpSg7/WPWYGwxoR/ESR8KjJ + RhKwRhzevn1g0t8UE4usa7MqP8dyyxoPNuK9BbvRHtA27zNhySkJOU7C8gbNRIwc0zguHNvVPOunfQhI + HMivBSz1xVTL3A3DM4vNAjdoYPc1FA9eRTbWZp8tR9ornkuz1rTNAioPbGfy6mjNTocxvb6ovPbPUjic + JslxD/5ZuOF2P7SzdHjnLQ3jfPed2N8RJDl52JVbzl+ug/+3OeeLe8736jgtnSrcVJ7+2OG8fZdx6won + 4/jMoOPXtRChyp4y7igjHHnvvgdLruNcvfdX6LTnaYW1g0NnosXLPQ89K9IbZ/3400NuDzTIXy76JNk1 + 7XS04K+Q+O4gxj6+20pAzDvlU1aop2nZZ37KE4X5fGSazhQPcNlbn/3apyDGCM6BJSLg/1JhvvNVkIKP + Qx/gqgfCYITPN+WqXgY7ZcELnoKDEUBgqLLmQaOBkIIkekq5+MfC+6UQghhEWiCwALsFpumFIaxbARuS + OaJs4UWa2+H18OK3zwXRgwy0Df6K8OU+e+Fhgm1y4hNFFUXqFfF3X2TDTNZXQ41lr3Tx8CIPFXJCDW4Q + hrO7RBFJhDwfLaJB8TOQG4XIkR8KcowjrKMWiDi8E5GRDuSQ3E7+CEgwfk6MOdTfP0AnOyymJHkIa0ob + IWnI1sSRfOXjlSVvMLwCafJp+5sbhEAZSjgKwoWEpJ8tu7KrOiwySMvQVRNhSbHWcE2KTjrljmihyl1K + ZIu9/Ifg/AjMYCqEdcQMWSwPOcSooXCZnmzeJV05yGgCbJrDpJ4DjUkfI1asKzfbmTCSlcRXinOckBjl + 2CiZxjeKMAbue8fBDNNM9vUPnNabp1BEqTT8bbOMisTKQv7heUZopGwuXbCnkQxKz21ZlJSlLCTPNKRN + j2aiQ3tk10RDujKMxoScCY3i6r5RG0ReUqTpQ5JIGngv/+QqpSq9BxR5SskjSnOfYssj03ZqEW35zF1z + YyJB0dZTnwYSqC6FGhXJxjZVQiaeB1NCTzpS0UT6MKp0+ylVfcg2mM5Gnb582xX7GBmKPlWBZG2hLM+6 + weKo1X/87OscnKStD3roTnWlCpw2ytHQgWyvpmPrTN82pHeaEbEfLSxK6pnDiyqUoYZlkC4bkti5guaZ + 2fykZW9y13JWNZIr3c9xXMVR0c7Um488LWpTG87NXrOy+/ysRGJrssXkrKv6su0C6v6HWCC1Jy+Mde1r + 83DPB8qNSUx9mWbEaNy04Da3wopOc9HTT+hGF2zrDNJRJ5jZsmZ3vLbCq2K/4g4XhReV7E1v7vgxyvr9 + qIct7e5Rvru/Z3woOkMoQlbTOxGuum697NWoexPjSgB71rcCvotAxdfK/DH4sgjtL1p1IuEcsDN3FeZw + /173IAXTNLuJs+9Bf/igENvDn7yM3L9OYIsVMtM1uYHfizec2G15GGn1ie+Z5suuG0/2aUhFUqmuWzRb + oLfJT9XvfvlLTRh3RMZiZRYecwzX6Mp2RzFLnpRxSok0h3WrF7HyVvSb3PC0uW0Gc49rXDBmMpeskTCD + y7Salv6joxrvx0CG84M7sxAu68zF2q1lZJt8yK8ENJEEcfNUDD3kY1T6lkOrIBvXAB4Hgot5jS40OA4t + nHwYWZJ0ZVpjDPizJd7W1FjO8rnOoegxMNo43dzhZyz95oZySJ6CjMaqbfUzPMOSj6WmtTPXmukzxWrW + vFXj3qTrRWMDudmjzaVjuau1WxwbjpUkNSiHAexgO1Sm9EV1SqZt4qvCCTShvNWuq8PtDX9D1JywErwt + zFlGKkvFY7sFZTt3qnRf2jd9Jfatj0tn4C3V1S82Vk0OrmOaKZxVDAetwx8e791icMdeoxt1qQu+Xm+c + MCssLoxDXm3xSfDHp+r1TQn2Z/6Y67vW7iZekDP6kkSrxXdbWDnLhZmuWQI84PPA9TjujXCd7xxeRe3V + tjiQqaxrfVKY2jqWNOH1sIt97GQvu9nPHiYdcP3sbPd6gzW7FW2TuHV4MLr8jklePesmy+OeCropjLe6 + bxvimMX40ifZd79X6TiGZ7XdFddelw9SHo/X++G93PieGxdjNlct3xJfFkvIA+rWKPDg863GxvtbjiKP + +xJGPz/Tn/7y8066IEEfnNVlPvKs33aLVc863OdezSBBy+59Pvvei+q6Ybx9xKFkGUWwBZnHj0LRHb15 + HZPertEearjiOv2UZyFpyef83rsPdMSd1KvPu37y327tMP5jV+nPV1EZwp8Mf6F+6qJk/lg933pTU1qj + 4zNxEFG61gWV5zz9l2cqNElMx3GCJYHLB1AjMmFSx38M+HEPyFqcQQj45UjxFzHMVCNfRnjvp3wOdnCr + x2nQRzgTKILvI1Ybg0gJRm2DB2f+V1Df4yaOwGfINlw3021dFoAZqH0NqE+/ZH+jNYAGI3/HgoTed3o5 + qIM6xIMuSG9lIzGQ5iBWxDA2oIADJC0EJzRiuISvVnLW13kSgl+4BFbrgIJWJlkcyB3iIgsG94VVeGIE + mFTtlIU/x2DpRoYLVod2iE0XpiAUB4PCxYhfdXIJh4KASG7gpoQHcofINF2WN1Jo4v6IUYYJVhCGh4EO + +WWGwjYgr6Y7fDWE5RWEiqhEhhCJKZhx81eIPYiKqXiBFsFuxwRlZ7YIoSiKabN9sghNWJhhuJhOaIg8 + fwZp8OdswphBwAiMEOhOuShiT3g7ShaLj0d60kgwJbGHeWdGaMiEuzhsrwCLkciNBxSMxohL3hMZ52Vj + ySKO+ieJ61V5UBeK0wiBHSOEGyODroiN6bNRgreN+SE9+8gy7tCFNNhOpEVch6hRfnGQB3FvCvmNRrFU + DTQ5AVkdBqmOLBI8V3iGSJRgXYg51XeMehiIItlqlfh9TxeOQnhez6SSrVRm7xeGF5kR/Chv/qQSexRl + AukUUf4ISjuZkD2ZkSIUWPxjbvXIg8O4kB/5kqdoiOdogYh4ZQNpW6FolNzXRe4YQR4ZkXaBZzd5dBb5 + lR1klVfpWX2Whmbpj8/YD2t5g8UoluGVRFK5g9iWfVVhLQrokz85EHeTk0bokmUIkzE5VRjSiXRJlVVT + i7aIWR5oN3w5MEHBQh+4e4NZhIXpmCWHmQI4FKZkY6N5gnkpZKHJhyymeMU0jn5JiZnJUlu5if+Ilk+i + eB6zJrZXkpUpl0xoXSwJPp75lBG3hlzpaZRZeKw5Y9hml87pd78TT6h5j8HJSQhombqoi8RJNcYJj9PA + LZQFnlLoGdsJeNh3NuXZPRPVL/40+YcAyJhmZZvDlkLsWZbg92RMowvkOZVIh51Ukpu0aBf2NgtgeIhZ + uZyqeZ7SGVkEhJ8WIx/pyJ3NeG3MWU/ouWgDuqCcEVgx14mDKFS0eVgO+mgcWpUeyib9SSod+ptAGKCL + RoQMCqEyaYUYCkDwZKKzEZ2T6UQMOZJL2WH1uYW+E6HWhEpB6pbbFYGghqIX+qNYoaQ4yntEKjFGCkkf + 4ZRHQ6OMZJighqV/pKXm+FBdqn9PSpjQhjdHqkywBaUvymo7KqObw6ZtSmNvaonIZp10dGR0epTLw6dw + Wi8zCnnauaZ/+m1ImqcNOp/BtZ6I2nBcaqas1KgIuKf0J/6mgCqpguqoJNou3wmpHrepcceWTjqpV/qf + mSpeULli05maiXCqmxQ0ddqqoyObdlqp9riocbqkURqpo+qplnqpKTqos5qlrAhVQmqpqSpwaKoGw6qb + vhSoueeMzqWsnwqqx7puinkgFNmnzFovH0qlO0QN4amow0eM1hirJwqtLnqfmhhhbSevWQcmXcd2iDKv + +aqvhPKI9rqv/wqwAcso/lomXccMi/KZpQkPw9GuzbeFO1Yqu+pG+4Z8Kloo32qswaUsrLqAXoQNPYqB + rqd26jl3Gfuw/oeO3nkjoTpb01qgSuQRIEuUvaqGrYg9niizDuurpuiyIuut1tc6DP47h+AXos56l/ND + sTdaHtqhMg1LoOw6RuI6MiIqeTsrrXg6HSEoN346XSbhVEN7miRJrhL5aZIJrqposifaSU9WHypbtVb7 + WxXLqeB1qAa4LHaUs2arqqIKrMFqnyQbo0eWsr/htFIFt3fas+o3p4Qqp07ITRy7gWP7q9w6rgwSaNfK + q84Etlanrdvat6S5oYUrt3b7dMPptLRaqyWWuF8aumcrkvYmfRZKrBYEe6PrtwKatmdxkks0jKjrgFf7 + uay7uDSLkM6xfb5bf5ObrJX7oK6rls+ltO+ansu7riXrvFTDk3urqXrLvDmareI3YGDpsSAVvMKrrphL + dMnUWf6Hy7fUW73A+70ENEXs276EOLe9VbcplF7I24Lb674Se77Xm77lG7SJSMCBa8Bc60TRyb/9i6zn + qri3o8DZdk6dS77c+75xm79/NGlpGqbJSLn3C73xK04no734+7+5msAkXMJJWKPem8K3C8MCDEl6ZcEo + HMOgi7Y0zMEujLSWe8DqtrUTPE82fMIjbL8qvMI87EbD0sD9GJ8YLMK6JLrRG02/8cQdiLhSDMBAy8RN + DMXE679JrMQBLMPLFsbd67lkfMaNpcY1HBpZnLBbnMM6TKkZrL9aTMQ4zMYRjLFdXMR6vMEXHMJl/Ld4 + HHuTIcdzvKpBvHDFisgpJ8hMOv67ytvH5nvHgAxMcdx0cQQUaoO+uhbJ7TfJj2qtXNzGXqzJaOzBBWzG + ZbrKmezHLVzKuUvIqJzKQ2zI2ZbGo3yNq6uhkDzLm4zFR4zEdYzJhjrMrFzLX9zIwIzAumrH5+bAtHvK + jtykXprLiWxV0jvDhbzNmbjMFNzN1ky3tjvNoJnOCywnE3vN4DzOprrO+rsnxjzGuDzPfxzN9Jy6e8zH + +JzM8hzM7NzP/jy9AD3QAhfQ7bdK9HvPCL3PsJrQ4AvBz/PJfbnLymyl4nfJH/zN8JzP0izEFsRBiwx3 + IIzOCy3M2Sy/nGLS5vnQyNy4BhjRm2Oa7nzOVhzP2jzSsf4H0hb9zuvbyhstgiwtyRBt0Il6tOm30wr9 + yPKLzaH8wELNyD0NnGkZeMqZvOb80VRd1UadoWDNMtIHzaa8xIQ21E/dcliNvVT71c5MjyDaWlNc1KXY + 1smG07c8181cqLVp12OdlOOLZDBN2BN91X+Nc4Ht0DzrVcKn0pmrlDY9pZL7zzTh2I9NuncH2JUM1MHA + XIwrvnTt1B0bNLv20kxNxySxPWJce6Q91hj9wpU9Om9x2TPdmO2IvbD9w55dR36w1eE82mL72pztygc9 + CmnF2kPqo6Wt28XJ271NsAIr3dNtKfhK3deN3YoS3dnN3d3tJdtdJ1ptuMDtYMs93P463dkxbXK1XdOT + GJa5TdyDvMZz7dvV3NSz2JZnM9lcrdRllWdPbHR5i6vist9LC2LHjNbI7ct1TVj6Hd+hBxIGwcnOkGvt + LXO5edqQO6IebclAEFbsbdXsIOA+rCKKzd8olQ4VpQn2jdkSJysO/uC2zCxksCsgLtZ12ZmBV+DObdyN + cC82fuNK0q4ZbuKxrd4PgIkmLNqjOKxE3tzFPdU0QX1ArtlS0m8wjt5J/cxFQX313cvmrbtXDt9ZbtZH + HgmNlK7qRd7QqHkqGuNwHcUxgV9U3teAiX7U+uRa3rJcXlMkTtSAaVGLrI+UbeaE14b/9taIrZnyubT/ + Z+T9Tf4DYFXhau2qs9no7qrnW37cqL3X941vmOom7HjikG7oTDjpbF2ajJ61mJ7p7bZSb+jlfC3cmmlP + gs7qZd7jq/Bfv23YQQfqJa5ho07qKFF8X8DiFs4iv34f3ejNsm3o8HXsf14Vyp610Sjsw/4aihztlK4U + fPnE1n7tHf7saV2qLY7jlo4Yx9vsCF4LCZTo+8fttI7uEI5dyfnGqf04kwEQ2x7kYU6Hbv60ra7pUsAm + sU7uiu7r/16gpPjouU7s/K7mvW7lAR961C7fDp/txgvxVR50nmzg8y7jhY4UILOlct3vkamzLwvyUo3i + BP8txu7nqG4TDI/nCo/rzm5hVf4H2ksd7wlP8ZX+8yE/7LFiLjHP8ROf8t0+mhkO727aQiWvSOgk8cm+ + 8gh55ywv7oMA9VFv9HWO9En/vOKd0nAe108PuJyO1rZtkRbfdGLhnzye01RRTMW85qVX62r5iG2+5Ht+ + BVr7KkYc0nWp6iiGlkwfsoyt62+V5l4d4v5u89FTxbTHwjgfs2T65b4Lnncv4ihq+JJv5kCUozhm8l4P + LFU/kW5t+rGc9UTg9wPe6cje9qnfrGUbrQI/YtyXWU4Q4Z6uJGzf2mAu9KvPEKAcl4zf81T/+OU962RP + tn1v+bzentV69Gsv+xq9/Fhfv2aB118OHApb/cOL2xdvvf43sf1iL/2ujfJgn9mkf++Ir/15HvHSLvjJ + L6xGW+7BP9/EXuSjj/DnTv8nSwDwMXW5/WEKkVZ7sZ2Zirg9TjS2sRzRlDvV1g1dkY05AaZxdM75Xtlj + t8bE5nsANUblatlcCJ2/aKQ4tSKt2Qo2BV2AtKQUN6wkv6be7DlaLZvf8Y9RLQG4tewhXf5tt+ui9Jrw + +nAGDacQMQLF7uIWpRKbIicbGp0qezAtMzQ7eT4hOIk44UxAjURTH+VWaUxZ52TfXh0wwVzHUAppAWwt + Y1Une30vgI0xkBWK7YSHdXiTEZYNn3uqea+nf7nXfEhb4zxEs2nNxw3RM5q999wz+f6OxNNX10Hvw7ZD + E9vhJf+d4kFqHzQZAQ8iZFbwUD+FEPIhXIeLnrpdD5NgPMCwoTWN7z7GuIfLX5lyIWd9LCnIGsdzKGmM + nOcSWzSYDiKmSZRzFE1ZPOFNbBRgZRh7N3Gq9NkC6KWlrJpyk3nkaY6TSBlEBVfVZhmuqbQmmzrka8yu + WO2o3Om1LD60qLZS9XX17YGwm9oq81qXGl9P8sgao+v37kCLWvJ2KvwSnFzBZ+suxpE4YxbKkySDBZz1 + sosAn0GHFj2adGnTp1GnVr2adWvXr2F/FhCbdm3bomcT1X2bd2/fv4EHF44692lvg99mRnN4iY0indf6 + rTwwEP5Rd5+Ux8MIPSWdEEVDZrc09gt3kZDRipfG3Ltz6Xbfb/F+KyDy9NujK3Funn18kJtu4c8suCLb + TsCs9PPAvfjU6y+HOsD7icACHzrQj7gWZNA/iBLkTCPsCDOwD6Ey9K9BSJrz8EP0kDqRHQdfKFHDDZOa + 7wkL+ZkQKxcZgbGFCFuk8T8Ab4QJRL54tABIH3agCUcfaYyomCWnOTK5Cp+Ej5kuhNSyy7Ti+iFLg/6i + MKAxHUmASjW/7KZNL/EqD82adLwpyQ4clPGCOWt5M83GirwyofsQmnMGjtZE6c4rOlwoxEF31CkINA8d + IVFF/XRzs434XMLKIKlzNMYRt/5kp1OTMtU0TjVP9bROTP8xVNQ9M12UJf041RPJV8OLVVZWn7nUSD+l + /M45W+lkglB3fkVAwf16qlXaBBdElkleV4Sn2VydrcINYe0klhA3rCXzGEG5Afe8G2/Yz91U/xSSpxvK + FUivSL3hEwtd4e3rTa3qtfdeUKfplItWofo3D3g/hTWZU/dFWLMvwwqYEkgdNkbdARmQ2K02Ae4XznMJ + 9gXiAEVGkOJvUo53ul4fHu8BfhlemdGWXX75I2Q35pg+nFWNkmWgNbGYAp5PHgXooE0ceumiSwalZ58v + efphrkJe2t8yM5a6VTI8hvLRW7XeemCYU0H44LBJlffmss3BJLnrYL5G2WqhFYH7Qq7Rllqxn4nuMiqj + 8zs7205oRjXQuzccXO8hdX6Ix8QX7nZqM2ck+/G95d5ZlgN1dZftv/HWbnPIj547GMREt4FwsZe9+PQa + +cbozssr0PV1XZrOe3baDVfodgGb2b3Pxn3/HfjIJWIFdDWMVzxz2ZWfp3bh08YdT5VPjz54c6tHvTvJ + vWbdC++dvprFZMO3/vv60jafc72NZqgp9OdS9nBi8FKj+NnxlzrNtY9D14Mf4oiUIWjNr2wBFCD1vFEA + ACH5BA0UAAAAIfkEDRQAAAAsAAAAAFgCdAGB////8ORCVrTpAAAAAv6Ej6nL7ReQSPHZi7OqujsBgt5I + MlyJpuq6se67iKLDzeXkhUDI2/APxJx2iGHwCEE+ekqYsQmNNp7SqoH3qKl8V9wHotNZx6WhjUpGoaHM + 9Gjtjq/gcqCYdkfZcN6vIdDXVzeYlOBFR2iBaCfDlWjyGFkm2ZQX43jDJ7ikeYBJWWV0BtqxyNhGSpG6 + OsX607lzJ2CK8WmBaumqJFqoS5PWYwtK61tHXMzgFcx0zDmCGruJ/CKK00x5vQLtmz0d6q2n0X1JElIj + DE7yZJ3eMrZdPN6OJI8s3fqCfnF+P1+aPKHeIIEd9Lki6M9Jwgz9ILEwuE9Cw4W/GsyiiPACRP5WGSnO + 8Xjr38OJ4iSAFGkoV7qOFlWCY3lSXUyLHghO2IjP00xFeDBGmUGS205jQ1O+ceESZayiC+DgTAXTaMyo + TCMWTZoFxlOHV6oW+QAo6EE2O6l6rbhzq6p8atd29er0ZkKz0cqeJUP3mdiQKVjidHQObs+9q6hinXt3 + TF6Ghxl/PIUOSy8iTNdo8edXctHFib8+krvFhdmksP6YHAqnQttImQnXacu582SQrtEiUamsT+CZqXVi + DrJ6WmzZAIZbqZ1TibRAo96e7O0beaKOjT0al32drGgpyyUe6jLVdiPpRLUG95Y9cXrlCn8q4KIjAmjr + WaNXl5TxPn3i3/5ikk9+2yYCmqMZYrYR0Yhwr/y3En/9nXSeOz/tcU8wPh3IB3jIUEfcend5eASDTR0H + VIUFtgOdSUApKFEKEb7k4IO0AWHcihaBuB2G84moWEoWasAjejHK6NGLblUhQxZBypGiTiX6skyUJ/rR + GY6CpfXDdY0BMk8AXn4JZphhzjKLl2WKiWaaXnLHRD8UutnhkER+9t+Ss82hZp55GolXfS0qg6eee5p5 + Zlhi9qBnMIaiWaigjj4KaaSSTkpppZZeimmmmm56aaOcfppRWDAe+FZpwEip2Y8f+FBhnHJGYaUdNBam + 33R+/jmfG7m0CY9j77n6ahOxmhfEsBtMCf5VfQJGY2cOkUWpx7LYBQuFsb4mc4S1EoTV7C5ZOXJTrQtq + ROB50lZJbbXe2MKnhMPUNda374XbLrnimqbNvNOm6+0g1bHb7ZGSkFlvtrcalSSbsI2kL7r80pMIq8vB + 2S8p8hU8K6kJZzjhagJNvO/DxX7WBSafYCwwfvAmSyqzS1FWyXn1mByyyBnTGUaJAwY8IikX3WtFk57Y + CDSQEX4MLs8s23yzv11pYqLSXL2LLCF0rGPjy7c9tgXN6jFtsL8mYtsjrUWr2zLML0u9shoMx+Aw2Fm2 + wzaAKof7btqB+BZikB8DFLfc1NCdhrZf9crkwd45h7JzfSHl9YeCz/6dTt1TU621rWnXRWHfLCAU+dNn + Lz3554QXXhiCjR+l+NB4a8iI6ZCfa+HqqJee47qWX45Ngprb/avaSr+Y37mwj5437lzbszvvd8OeeOuG + CD88jxxO31LzUhhe2TTaA8+a7+WBP/2TIcrOVosthac8+lAOxJH50ZOvItTnL/8249jz1r77unzvvPDZ + Lw5Xu8XrGuc34JTGTQCsWP/cZg+rxc9Ufdpc/dT3Cv9Brm0YRB5rHqgC7tEEfmYrmRsK6AyJyUqDI3GJ + +Gy3PRCG0HsSnCD0gnawAd2wW3aKigsTdsMGyfBxxWhgAB8hKg7G0IIaMl6+ctdC0uRKdL8ZIv4E31dD + qHSubExcStLyMTi2kCRVGBSiFWUCJSP2jFau4+IRfQQfMIbxVLkZWpfOOAks/s5iW1xiF10nCD71UA55 + qKPa4oFHNLoChkoBBZna6Mc3/gpc+cPfO9jlOEQmsib/UyP99pg5B0oSjsHr2hwrQbY/hVKTmyzJIj35 + ySwqcWTSy14pXdQe7diLkRBrZSMdCctRktCOaIulj+D2RBZmAlrlCCYRfZkBEfLtgxw5pijXWIvQ3SCX + zZQFMwvSR11Is3uscKYwxxdEyhlTKsjMBDeNljWAIGc8LIKmEBZpsXgRM2x/BJKLltQWMSxDnlUjKC+V + aU9s+iyf+kwnFP4VmsxypM9Z+5SiqvYHSQ8WM6G1jJg5zzk/hyIUX3Lc5ikZcyLJRK1VZRQKR++Zio+C + lIANU+c6GRKakxqQV4BCXEGzydCX8mSh1SzqPt/pLlwe8hk63amKSsaciQUUcSEV6k3JcNA8po6dD4Wo + Sc21JNUMNJv0kip8/pIrjTbVqimLhExnStOWWrKtX2VQkC76U7k6w5oGLJ/K2NpPXTU0qNOcK12VGo6u + raFgFITqSl0KWLhe0qhbPeoMO9rMnCZ2sbHDisnUutHIJtWtb/UqNrh62asCVbOZLc4IIbONiwpJtJJF + EmhpWVnLalW15IooU0nK19gVFrUbom1tSf5UWs9QdpWKPO6qKpkD4C6OTZxIrlWMe1g6kW67S2VdYK/F + WnBKV6SnyF4hrTta7I4zk39d7tGGOlHf+nO83Q0QqpImUKreDrvKXUVWOTnY9353vvKtxZ2Y+0+A6iyq + /3VuK9eLYFlyl0EozOBDJErfBneTL1Xlr2vLiV76nlav0cTsLfdqSvFmWESM1Edee+nh/vosxB9ebn2v + y1ujacM1PlhHEcmqYQhfqZy5LfLCTHwaAiO2rzK+rXJq5WQcx7jGROZu8sgbS2LMc8ef3YYZgIiz3Dxl + K3v4pYeFTGMhm8G7OY4uUrwzwP7qV4xVy5CUGla7QI7VhM2dspBvPP5M99ZGaMP95+xwMbUoPxeS5MBC + gfB61knuai9/rgqai0xY9pqYMy/ubYmJ+2QnNSRnTxIG0VQqxU9P+cCOxHSmXVPhjrkxwvad86pq880b + i6XS5MSnla9M6+yKGJU41K1tuxYwSmJU2LS9tKuBTWn4kohI+rHu91jV5oQ6+9cjLrQk13PQNdMYmFL2 + 85LZ8+xuY3nYrFZYaMcdUz6n98zR2h281UxiZuMIhmse4kR43Wtnje3NNn61tB1sHqV92Yr/XjWzyWps + k6Zb3eiItdiY7Mp0dppagHH4w+11v4JfWRgWJ4RFcbIbUMsNGgAPOLEuPNjcNqTkHiXHLNf4Rf7Owfs1 + Hfd4u1NcYHVT1hY096jOVO6W+96ZaSdq+Wb+B9mh36PoA3Mhjl9HmWXtfGvr+3izfR1z0k394Kcb8Ly2 + Plmvi3acGu6zzE0r43mQHNloP7baI5ufYCs57EEFDKj+DnhPBR4EgC+84Q+P+MQrfvGPIjy3BF8pyDN+ + 8pT/km6pXrlsB5fjPfZ53AW+bvCKMx6A0jeExg7zh+XB6U8HZt2pbMOlYj7zcI/u6yf0+VVLs+27rSbH + fs5uude+IICmFutRA+LigzJ+mZy98O/+WpF13vPBNznvASxOTDhf7jywCdimT/31Khq3Y+m52ct+btXr + hvrVt37Ui7qJ7f5T5NF/MfCrjm+XV9o6rqMPpfwXIlb0hFM25yCAcX0iA2Eb12FLIwj/ZyCAtBG3R10U + cIAICHZ8B2zA134XUlMYp37zpnuvlGRCV3AO+IBId2LxNm0gaG4gtn8nVFwsuIEc2IG2hIJPpkN2B32A + JX6yRU3vV334Z2YRl29YRVXy83IySG8uWIFk52omWEXRRzbmVGYZlSA8hHrsh2ZTRIJWBoV3tGhSSEiG + 5EVdV4YpmEpKyF9/5oPLp0UN6IT5h2LtNIZlBWdAxTNCyD9F9IKzVkIaCHutx2E1aIQjCGfjB1NamEZt + GGgH0RxIRoNLkIa2lVKkdIPxpYfs00l9WP5s3PCImjdb9rdsOAhoSEiA8CQWnxh+fMiIC6hFuQeLe+hp + l8gwLgYRqShmqRiLLag7TbiDBLR+kBiJYTiKwmWLA0iHcKR0q8d+gDhjpVVpXKKBmZiIHmiIwiV6t7Z0 + Z7dgKwKHzRiINPSD2fcdwoiGIgc3LBVyELdjlshoXhSMzYh/vuiM0zEDiECN5UYTuxIgOmYkuQaBspWP + ICGEiMhmjth+AymMAniNG4SM9TJqZZWFipgQBjmEfBSEgbNT2kRwq6VpMeMyv8hW1OiL0cgO5niCOGUJ + thiBhEGGx5F14EeRC1GSMRiOIjkqG6Zy+WVRKkaP8SiPReJM0TiNX/5jaHf4jmJGiAb2k6q4ikKJTvr0 + hSjiW6h2iJa1GvTYNgq5H/MXTER5kzgZist0CSp0PC/pD5rBlcOYlrDEaxGAj0ZZb7g4XeLTlgD5lELp + SW8Zlrv4HFw2S6iWKloJmEXIi14ZldU0lVQZRSvJHFAVephhkSA0kJOJkkSxmGaUL53QWKFEmLglgYII + lfzHSqA4lglXeucYcKEph7TBewCXmTmJmnujmqL5mTHClQqIVOjolwTpOaR2imexcB63lq9ZT+fHmMbo + Wazpdszpm0NhmWJZQZcJhu4nObQ4klXxX3wZh63Jc3LpWCGondqjkGtpmkloaVJxm+B5Fc2DCP7riXCn + 6TTCyU7wOWRe4Z7mFZ2pRZ/a1Z9maFzmWZbvNmkY6J3f+Z/aGJDOmYHjKSxFaJ8zyJaEdJ0pJJicKDcC + CqAZw4VLiUQaiaD3KYYMxKCNeBdsczEsyW0HSoSek6Bi2HW6+TAauqFipGOZ5nIX96LhpXdMQ6M1qp9T + ci/w+aO9+Q4Vim79U6SAU13dCEjNgF5LKqHcgaSh1j5SGpzvSFD1mGRoOZ07Op8iWmvKg6VMKm/WeAxK + uZ/xeZwRU6UxU6KwEiw5w58otWf7BaZj+Ka1FqcPynnWoxdkRJpiGqLpOW19CmO+BDpraqRdiY0oladb + w6iy+WAJ96WRGv4HEdpVOuij2kZnl0qoehqquJehntqYoGqoJIOputSp9mQTvzcnOVqosookglOmcvo2 + DYSlsYJ1o+oepeqqK9SJq5p2xGqlrRqsWoGqopmpk5qYRwo2t4qrJRWrzEpHiFqNpxKtHHU91WqtWOUg + IOKsQLhJ3RpJxkpswKIr42qgVmSu07qnK6iuzYqtm4pH7xpaMzJ8IBmuqjqjpupODXlN+iqdPMqeFGqB + yZpYkblW38qpNfMaNiOtftqR3sqiHVOvFwmuCQtNxfM9u2qEGXuQzSqxPXqlymqxEDKlqXd/1ieydVqp + DnmuV7Gy7Rgs+4ahvuqurWWYNjWeWvKy2P5Hr+y6ojurF2dHI5WntGpCeJKXeI63tFErtXuyjFNrtVeL + tVl7KJ5iDn93nv7FDPJ6s+vqTXY4JBNLsUGXqGnRCMOhqX4oa6bGsH8JsLgEQD+KKCYLdGN7SYw4Hjmb + nB3bQstaJF50MWwQtG6HuCGZjt34tjBbrhWbshXplC7KL1rCLPjVZTJqk4pKrZMLlbyUuIrLp71qR6Z2 + pwBYt3s7s9A5twubLouxZxyDl2X5uBnnucRnpqBLt6xqfBirZ5nbh4BbtDJUPHBLq8IauzxXuyFBtD4b + uZ8Lr+iaTLebtsAgvCw2ofeKntOrszI7uqpWc3P5uuOYu9Kbr8lrqf7P+6GkRXep265DRB13C6J8yrfj + m2BtQLzIy73dm74O2zfWO7CUixvL6IaJNL/8e7EB/Lv+cYs554pnBBPbWb/HKie5eVduubrou7bfa6P3 + S7DQxbtKuo7/C8DjsryT03Zo28EcTH7Um34tWzpR1nAKq7wmvMDxdbnKw0PUOTmGMawefJQcO8NBHL0l + PMDIl6REPMP5acM3nMQ5zLL/2j+8xML8hMRYLMSwS8VVzG8bbGE4LItcx8TtY5BX3DRZ/MKpSsZdLEPN + O7L9a8FRrIltvMPQZCRoDL1Q3MInLLkNjMcjZbyL673q+8cg3EqA+sTAMcLbK7N3jMciosd7vP4gjASy + cwzIgfxM52tfhezHIizDkQy5ctyPnqzEOBi+uOtLkgzGfLzGhozCoSzKVxSzvtt7bFqavyrLq0xhi6zG + Qvu15IrJ/DHJriy+R5yumxzM/Se2/cpRvSy4uqzMuCzMyezMCQXNnLzE06yGz9nM85rI2VzL1kzL1FzN + pYybzyzOtNe+tnzL3eyoDwux4czN3vNWnJZAPhy40ErM6lzPRivNMhGX8RrQFYxHrBzNBc1JAw3DxszG + 9PzPg1yrj8PQW8zI/WxPijzO5Mw6sdmmGzvPiaTRyDzMKOHRnautIX1G+bzRdqxIJ53LhajS/sbSJO3S + 3gXT50ylM/1Aav5VzPbq0KqW0zpNyAdL00Atvzv9TBX90Nhr0F7csEmt0NjH1LBc1A39fbspwUpNy0Md + v1N9ygxHyVJNqr3n1bwpz58sOBjz04b1y9l61hP3zWHd01pMyu6synFdvBNt0fyyOm09ym8tZXqNoyTb + 15xHxw/ktspc1XQtqoctJxYJ2BEdxmatj1IM0lbt13Uz2eW8zSNL2F0YsU291mKs2HytuKEt2pkK2TFi + yQnNr3kElOb81XPdu0Vs2iQM1iUmk7SN1int2N+3O51Nuo8qE729r97svsHt1+X7zmTN0ZyE3PCsuq3G + 3H+qfFF92lddBlzQ2Ji9rtc9p4xK3HEc1P7RZH7L/NusDd6u3WDlDcwXPUPp7dt7zd51/IEKTJmx3Re5 + oNrmW3VjnN9GvNWf3d2y1534PTDtTRzOCt/xXdn9Td/J7cizGs/NTbgSbbkhFAZ+KaUiJMDHnC4rDNvn + LQ7emJEEraO3rXp4etex/BFk+N/tTFTK3eIZvt2CXQppVZRYXawV7tow2NIo+zkdrhMzfsABDuQFaEQP + rsr+6zZgFhBaS+VVvrVWjuVZDilOq+Vd7uWUwuWUcoZLgeQS5l9LXoAuXuDybTpYV47ISakxFeIUzh9N + PuSHrAZyQZt9WbOaqX/VKX1qDt1QnucIAkgpTtou6OcYTuCvohY+5P4ESZKLiK7ZlDDnfD4kumozWwHE + 1BBnjkNo4g22AtzZQXbnU/w4jTXbdB6FlXO7pS7oGg7jHK7qHu7jls6+lx3ZsZ7jJn7iZxoDZf6srr7e + sqFGTq7ransUnQkowh7B4BChgG3nNv3ItO5Q092orU6TRBroOE6mNz0JpkhMAZHgF77tDbrr3o47nd7m + IpUbzj6oiNleI87rus3m8+3uHAPv9c598+7oJP7iOpzqsJqM+67uxE7jjh7v+63jJZGau8vnP6qh9FjM + 14fs+qwROdKZLWXw+l2RSd7gC9/rvm4VBD+JEd/aP2bmQS7ka37vsu3cmE6jE29OFS/y9t7wQ/5l8lLY + 8Y1euCbK8vxeOnSRz6ZLJcAn8UxR8/Te8oNO8hWx809O3Yt+eivf4HsZ8EQOQUZPjME389pp9Z1h8Vmv + 9YrE9Rrb5yjtH2F/ohrs8jkP9R0K4QVb7Oh38yc67Ccb3a509nPPpVQfwnePn1/59nDPFXJv3tkO+PPH + 9vg5TIiPrAbO93qbgqHO4lWf9+M5lIX/8hnX94NI6QK+9pmv9Evv9IYvIZBf3GlP1GkJ9IPf+D+82/DF + uaNo+TaO+YLvurFvq7PvJ58/i6Gv4K5J+mwL8rLv+1Af85eH8cw8E5tv7AmP85J/XcDvkcKP+4Ev9M// + URfP6jGciNb/3P5/L58//+wOrJXeT/eiiBLiXw49n9vsfP6jKf16n/w4R/kFAf/Xq/3bD+09SwDwMXV5 + o2GUk1Z7z8PbCK4Bz+MqkDHJVKXQ1X1DWG3lmhqFsdPtlO6BQcsPyBsecjmbkZgRPllQ6UI5jTStq+SW + W81Gv+EntmYsIWNL5lWcJbe1cMVbfkvWN3T8/mT1HpH+ekbI9PguDA8nBOESFUPuHs8kKfv8PtAYg7Ac + Kxs6PRE0w0D3RkPnUFFLN8wmTCKDIjlVZ2pb+VjDulxvDXR9N/162QKJewqDMYArj918Y9OUEZinYapv + MHecl2itJ78buKewhaLDE8rRtafGU42/BP6S1yHU+dyh7NXoLfnF9BngS5epjYZeAHP5S3DqmSeG9BAq + /JRFoBN4/4pJpKYRDZ6IKc5x/Mhx46VlF+MBmEdSJcmHUkZyeAmRJcxheVBirFezJceZYx5t4flrqJCY + HRGJqmhjpUiXCQ+FJHl06s2TO/Z4q+oT6r2l36g6bYcTa9aMWyV+RRb1J82ia00m7aBIq9gnamV2xSMV + 7VsZVNtahET37Au8NY4evhBYmFfFvsJKBExWmt5+dv0xBhI5wuNbnP2F/WrQM+LCkjVqhnvPL2h+gJeC + KG16J65VqS3XUT3NtVspo8tKqlthdmOFxX0o2q2sNzrRVyvv1TEc9f7x3HKWB2se7rlc5C6mS9hunN93 + dqbMC/dL+zfO9H9Ph057HU52yOuvUbz6Pn/tvuv4A4S1osazprsjAuxvov/QSRAM9N4qkDf9AHHQBerk + y+yQAu27D78LU0LQQhD9q46eDhXEbj0JtQsxChStwPC18gjTDT8WPYzrlehUkdG3BkcUD7sgzfrQFgpL + IPIFH53TkL72PsTxMxdfgfELJrnLTMnLqGzNyBVEEyiALZeM78dwrDxSDDLlkLLHLq9g88IA6KzTzjvx + zFPPPfns088/AQ1U0EH/lIfQQxFNtM8cxpTHUEUhjVTSSSmt1NJL+XwUUDlJXFAjNzHgtKTfuP74ElRP + IhNT1E65nBHADW/ii6dTUYXzk1VZdYBBZXDtiVRZZ/2SBM7w6TXXd0z8Jk017wI2WGEpG8uOT81sskFY + zVHC2ZpoVc9WKoxNUddkren1I22XzRFacJCEIF1sWz2TV1wjKhXabh8hlpt34Y3XWjSfBG/bofDtV0dx + CKwWrGuLLCJcndZ9kKJ9vSxR3mD4lWshwyImquMdd5EgY2/9zRJgj8DV4mGIP/Z04s5WNsridQp2N7cO + YyalZYWLEDln8sbNcJqRBdwmjo5rRjkeZ4iudWaTh6Z3ocd+bmjnoNtN+V6eW5SW44aDa6Vqq68eKGRx + xs7n6YUHmVoGqf6VIqHprsseNWul0rbJZZqjvlmmvMmp2+yl8U4iab33hhoauI1ZCvDABRfs5W2qOBzx + kpmb1297YS7bcp3X5Nzjq5v4PHFVzJ1aB6EGC6Ru069sQyrYL0eW78UNNrpx0UmPfPQ1sX597QlvmVti + 1X0fHmmSI8dyyuJrRDh5zCN2k3aybf83FOOPd3v67HvP9/vfwTewFu5BDmj88j+2fn3yB9e+GfHRfl/y + 8HP/vvSLgwoXC/RvJ7zo2c95b9oe8wLyuDY1j372g5/d2OYQBKpvfNeT2QAd6Kvgma8ZDyMDABUHjQvm + z4H7kx9bPNi5CgoORxbEYPw4KImV/e99LtlcDdgyyD4NxrB/ExQFAT33whxCEIbEk6EPw6a/IJJwiA+8 + X+ZkOEMFDGxnNmQPDpuowx1CUTkgFFJO1mdF+AQsi040owGPGDpwsS6HYiwTGctoRgueaku8UIIbG4E/ + pcVRYdejlZJmF0c8gomJfCTiIZ+XRsJpMYxVLKQhEXnG2yhyckXM4CCH9UhIRtKPUQQe9aaHyUxicZPD + 66RyQneQLLoQRRISZSI3CEsI7UKVTWSlZ1xZSo3FshY44hdfRvHK2m2NlLqsFu18mR4ceEFWwlTb8ooZ + jAIAACH5BA0UAAAAIfkEDRQAAAAsAAAAAFgCdAGB////VrTp8ORCAAAAAv6Ej6nL7RbCEa/aayneLnoO + ho0mluaJZunKXhEgVYL2oa/5vd5et/5figFIwB+xqOAhjcumU3R8Si29B60lTNwqW4gktpuKfdnoeGN2 + Ks+hNPtddMOn1VH91ANnudpFdw7YMRGINsbzR8ggl8hY2Cj2teeHmHJDSSWEePc4d7P4+PlzyDlCaup4 + upSp1xUwU3SJcSi5mQppENqYyzJri7DrqxsMizAbNoQkCTKqVTucPPgMvHL8jGw9PI3Nh0qmvHy3tp0c + ow1oHlQtPZ7NXsmBzvWNFekO9BL/ls/hHLxv7+Qfu1ilRBkCKEqgGIWYEDJEyATisjYPIRiaJ1EWQf5T + FSdtbJcRVMgNGB10rCel5MgHH0Wq0iGx48oSMm31M3myJTWVM5PoZFTTy8igPUEQfXRTBiyeO4u6+JmI + KFSQTs9VPTC1oKisIpgW/YItaNJtR68qNeWVCgupXH9yjTkW6NK01sqaNckprqwWR3vJ00k3JIXAVnmp + W2n3riJSermtvchSjwvFv2AQhlOxMZy3iSkv6Lw5Ip1YWVpetndlHb3Tqj2fAR2aL2zLDPYcTkKZBlh/ + q83Odn3NKWutt2r7xDg8rEXath6+HffbdfTiPl6d+UYp3PKrJCIlD2j4O2/gbKanjPMGe+1jzJx2py0e + ifP4vsx7tq9Gfvo6Jf51iOtJxG70AcHQc9CRV15VA1YGyBYbhaGZcljlsCBffQRxH4KvXVUhLoE42JBv + xcCwHUfF+DVZbhqOgZ8aHbYInw0ZHUEhWsYYs5diMOrIoX6EROgTRDMMKYArrhR5JJFKLqnkS/+dyEoD + HZq4Ios2JfdiE0xuyWWX1q0y5RQ0kkgmTV4yeWQERCY5JA9duqnmkmyeSWeddt6JZ5567slnn37+CWig + fsYpaKFealmigYTQCJai4NxoiWUP5uFHhlUu1KOP7AzWqKNzMCrpdbRA+ORTuKl4qZiZakqWF/65MxiU + QOKAHIr8/OFpa6mC586kiMIqqXeblhlsrqZGJv4BkjiceteOzdpDkLHEtRosc8q1Uq2TU/2Da5gu7SqF + s2514G00w4Zqra5YoUtOhNwG+Sy44TbS7SRSlmvuga6mS1W1KN0z6z6a4BuVvPPSO2F2lxDsIbD78ttc + M/VMOWvDGMIrosG8IsWeJQMzbPG5oVa8IZRkSpuwCQIPzKPGvzICBnPOkKwyarKizKpQJ1eo6MrKgFyY + yzk3OM/CQCfgbBsp03zwiEItyPTK9sYrNHoIHY00QAHmMN6EOkPdsw0/Y61P1UOPQzaDIheLc3XHybwV + CgJl17LZokEbSNJG3Zz2BWbApLNhclfyM9+C2X02Nn2HrK+ru1EZ5CpkDP5OuG1gvhoT4lb3ujjj1LLd + +bReSy74CQppcmLKmWt+t+JtK21zwo9/WynpTZnOSzP3hr6C3nVvw7vnn9sq13qReoN76SViLCTrrVsT + vPB1Gc6JGyihnNx8XhPL/erOPzYQ7Y2DLn4f/tHnaGbrLp9689+DD3z0wcE68W1BH2f7O8mvZrTqWr8P + P8WRwndoqEF78iYIbFEjBTkxGqUcAsDeDUR+80Pb1uxXtuVhjn1dkWDcPOIgCu4tgh4EXvUgeLPi2as0 + 34nP3LK1QomJEAME/N0zXlez/40Ig1banW30RzkZqaQapYkdCYMIPcg5THahk8N/sBTAlCgQYuo6Iv4U + TKjEtZGIaUg0XhHxEEUpOg1uErJiDm84wwquzTuL+8TsunerEkLGOHCMmBnPGAwcynGNFulbKN44nFyV + ZWy6+9f07kgT6KVRemVkRdr+yL1AhtEgT9HjyxA5wmEskpGHLNMbMfWXC12si125USmXiEl4JLE+KPQk + FzMZGWaFwIXpyAPxQhQ4O6YSdnnsWuyKiLVcqKeDe8QE4HY3ER6ecJe89MUmOamaENYxcSQ5pQ20YcAD + MjEtpcoiM/2myWdCsx2tsKQC3jVLakxDmjCUYS1G9bBT1BBVzqzigUYFMoGNkpQsaSd7QEjH7dnzm1bI + ozjHOR7LMQyd6SymD/7Pt65usmuWM5ynDdHSyf/Vq2kTmWYsGUgSbEXJfyaj6CstRNBunOKg+XKYQp+Q + j5hRVII4+ouw8MdCbm7HnKpMKQ17mdFfSmxjDT0NltQRF6jgM0URFYZPVcqYMupwo9QMqTVL6Qop0YOD + ElVmwZ760ytJVajtq+qxiDlTNeaScFRcK0nlCdawpuKkMPVeTpfALaMataVurdyTJOrLuOLFJm0doF11 + tzlaLSutf3vdFJkXVMEuJpwDpZYtswTGzHZUjV69nfE+J1nRzfWgFpVrCCv0Qs3yg68Ee6c/n1nai462 + X1M97fMautg4cra1kPqYxzqrqtAOlrK0RWUmPP56RRmp9qyMQp94sllOujZTuOdUZGWletdJ4nafTK2g + dL3RHz9St6DEDawRQUQfSH40HVZtqaIsyRPg3na8fF0pS2MLzvXFc39sza081CbQlRqTp1mj72Q1Gdkl + AtOhiFWLf5EJ4E/SS74TrauBPyPA4io4Ut/5o1cMtAnidYfCTyBiY7ICIrleGMBANa8RXZm9DyrWce2c + H2B30s2YmfJCo4hueyqGX9kSVsNrHCkeC6sRIRIRw/t9SUkjR6HT8ueH7uwWU4JMtRted6z5m25v2Kti + AlvLkEPNJge3p+PzIUfFK0YoUraM3bf2dC4cRfJWtDmZwBBvmGdpc32HTP7k8cnsNHYh2NbYcNQB8UeW + LPazWueaYFTu7DKFxtcFu/shhj220X7GMnLL92L4cEaMeH2y2T7i6Syn9TyRFvTOvOxkVokZIkbmdJtj + OmuWupm2EJ0zqQk0RudhJNUZwyqfc9dqV9+YyRdZ0KHfN2xHF7hywQZiskFLY6iOpp/d+BjiEEFs7oRH + Fa4OdbZV0AkHemXEkHXZAcNdFbZgodzmpjB+wiEZdG/0eBq7A7zd46R5j7WVpiYv0X5bVq30tqbgeuO/ + 473KgZu7xgdOhGsNzq5PStgstZq2tP8cVXpLmuLMRvBwHyWvPzwc4CbHNsHlXF3XiVYjs3bmHlZelP4G + om/i9Ua1oX6+pTkZygNAL7rRj470pCt96V6K0w4KJXSmS33qfvIIxiPu8aumqgs4BxC17azbkeuw3VnX + csm1fqkedH0mpf0uKGe0nquj8ewd1HUT1P7xsttI7Dz36L/B/XWNrR0xWrb7rgcabbzZerUpL0PeF58X + txPVfYzWu+uILjaDcf3xIGeM4Q/v4j7TGoqadzznH713kWsxvxmpgl7iu6LBD0WRePbm2LX9y147pvKK + UXnNNYdlEn8V7rCkfLEwvfWb/x5xwee7809u/AALQvMx53zwWRjo1YveewmfvoDnCPkVX3/ZTj1cg6tP + fLKfX7+QoCqrw39r2v5LHtizXz/8XS599Td7Zn21duc7LX8Sd3v9h3raV22nsjgplnEy5Vx0l3eetkGh + J3bzIHuL0HGZJlAbt1MaB3sO+HGpdkuGZX5s9nL6t3wmg1SAoYGJdHqgZ3G1B2p9V3HRNzX65yIHCDrB + 1IIumGnktyj1R4IDGFCiJEWH8VL2txQ8GFrEBoMx+Hzox33eh4MA41G6V4MhxRQ1IHuEFz9spEvpt300 + eIX5B179AFzxdTndtYVAOEHzB1JsKHclOIRkWDofARha5UULt3k7iHNuyE9COHMySIdhQhcqCCl5yDZ9 + ZHnS1nUnyHpgGIdSaHu4UThJSHP99VauZ0hrOP6CV5MKW7gLFZhnlShj/+UpDMdEx3d/FzZ4fsiCkAh9 + crhC8ERJuKRoD1ULnAiLAOGKsCaI/6d67sR7ePBhxwUZt6GLUSgRjhiIT6iEn4iFLPNQyOd9WFM/pteC + a8iMMyiGUNiN/4WEg/ZOJyZTH7KKBsaJ2+iNsriIziiJJqaAdAMOn1aEwCh+XxE9oIhunbhZ2SZlXfYW + 6rhfyfiNV5OPXBiJvwhhMtQ+7AR2BrUFBMmOo6dCu7iOgHiJ4PgwPnglsyCRGLmMAlmABtiOwRhKIfZb + lPJ5Vtd9DygcB8mPHqiQapGCKGhmOSeSgveSwaOPsTiR1cSAVOR+XJiT4P5CkDnZk81IkrTiMZVCT/Qo + XBLZi2H4k0kZHgo4hTnXkveoIFPpkyD5jHCFPE1pg3D4kEvIIepolTLpjrrFQ0VZasOIjr0nXmZZkiaZ + H8UGc3NJl5iBkNz4kyW2kr52bvFHGSe4lneJlzcIcaI0mHbZlQmCS6wEmGDZfuJGhI9pkWlZMnkIl5U5 + kovJmCxHLlwJHF65W/IIjaDZlqOplTa1TZr5hae5UFtJhCLIlkt5EI0ZS2uAioj0kdxmYStomz/Imrq5 + bbxZmlkpfFUTnMKpJRyJmrgXmvh3ZlSImdDJDc1pMM+5XuSAcrh5kTOZl8qJiQQIfLuiVD02Npfxmf7S + s4YwIpv7eHdH5J0aiYuOdFfo8J7CE58Wp5d3N5+SqZ5FYxr/Eg/GiJ4WppgCiGgD+pUA05+r2XhDVU0N + yiykUpcYCmd0EKAuMqHi2XBWeGTRGILBxaHZ134QqpR3FqJOmHbSkqBP9Cm5KZoCyqLHSWfpiZYSSqDn + 2KHbdVavuX88Klk1MZ2e858vmJ2iYqSCJRPc+Yb2aJ0P2qTgZzb3iUDgBZWts6QYeKW7aTdaej+3s3xH + 8KUNompimqVRKWM6CKRBCg0vql3v16Y9Cg2dGZaT2GxrepljSl1S8aPV6aBFmKMRaqdCQ6ZlOjl6SqjX + hqNPuR/M56Z52kN7yv6nJSYdPQioeHoPGfSokEpulpJudMqoTyWoBJqmWOqnD3qoKHWk4KmqvGijlkiq + AOoyi+qX/neWovFwgJcewJE0r8pgKXU6crkxq5qctwqmOumpWwWqyoqjxEqVm0Gtf2isO9qZiRlwGrIj + prqr1wqjDwZKrYip7eWtLyiu/AWl2Fk25hqqmRd7P1Ij3RmoMxaO8yJ7avKn6dqDUmqecYVrAJUgVFd0 + biJ1RGewC8uwXKKHhNKwESuxE8uwUWcnENsmCmuw8WojH9AZ6/qI+5eGABuTYBWlVtGHTViL8+qqdpZv + wnqv89ZGHNux9SqrVfIbv5k6Okuasfplu9qHW/7EKbF2KTnrhVqVkiQrp5h0EkGTskIwSEbpqjlmPyeq + jKj6qTV6rjBDZiuLsyLbtU9TKxxZqN8UpRu6r72KVkVrqA90OWeYpAzarkJalnFJs5Q5qqmSGH91jWSr + tCJqsra6rWznmixbqjwLmyXrU0j6SFRatv0FrmalqWomSYqbre46uH/prpGbWFzLlC/bmsBpqXrKrcij + toQbecS4Y1VKUGIBp467tJ/7tRMmNsxAtlv6rKb7dltbftM6uyNBtRp6u5c0t8TgqNLqo4YbEkk1ZU1U + qXmLorzbu/X5u8v7XJ2jq6B6s3WGvFxava2nu4MauOXJvahLtN8rNI6Yvf7im7XRe7ezWYroWzVtUxLr + 66ijO3nvK5b4K7/zCzUJ2bqJardxKoHnybbfU3P2e6nkO8Cwq6LLdcAInE/PW7idK73DF78RDG3uO74C + TH8pWsDEaK8R1IsKvLsMbMH6u78ZrLwA5IcmXGcVfFvdK6+7AsOfO7yIykywYU5pULoG3L93REs+Sx0p + fMHGKbhBLMTFarbXQbwEjLfGq7c+JR43nL8o7DY6yro1rMHMVMW5C6KYVauPS64tvEueYsVPDKLU9MOe + pcRmhMZgTL1srLkGwbmSa0UdJsfQ+8HjSZ74iiBp3KjsuriIpsYOHMLKQx6CDK0lerlObMSIHMVzvP7I + T5U+RMymWdyiW9zIMGvJ2LrDwRrJR4y7mhrIYBVjxZvJsKrFZCxwlZxSYYPJRazJrSyqr+zJBCXL4LvC + tMzKY3zLisysZzwcadvLHjrKKgy4prypsQzKoWylfWzLD4y5QoZIqazK/frL00zNXtuqQozNHeyk8wXC + k/xr1gzHUyrOq8zEkgy/Hhyw16zH2bystbzJrszCPZtKX0zP8KzO9xzM3hzPcMzPAivK0szNiby9YZrH + xsLICO3Pz0zKp4rM30zC6TXLFU3O5UyhhozO0DYgD73RfFynfnyj+Wy+BD3SqRQdbROKdezLRJrOKy26 + sWHPFAjTMZ3SJPQ6Iv69zTpNyAAduyhtuZqjRz5d0lgs0e7c0Qetz8JmSUjdzpSc1FD8zqy601B9xU1s + 0z8t1AotoAz9bT3cz+c81Rx9zE6d1UZtaWXNzF791ebc1TltN4bm1kod1DrMyRpN1/4bwwGs1mdt1Wk9 + qV63wX/N1eNsz9X6x2G91qdWm+sM1Hkd13JtrY9NfadL2Sxd2DQ92IQ915tZoMS52ICN1VVt0nutzaKd + fAl81/yL2qmNz3x9tY13NFL9z2/t2WidqaEdmCuCmK9N1Est2wFN27+tIcFt0JOd2/RZkL5tmcCt3JJN + 1fOVeKwdzUWddrtK3bBd2icDzN182o3tGo273P6CudXlCLV93dm1rZ7cXcjHbd3nJ4oh595bB9+PrNsQ + zS83B5nNitzkob7nvd/WXTTKPK7pdt/brb367dgNPIjJQrETnnQYS+EXjuF3YrEZzuEdbrAbbigsOVT1 + DWnRDdz5bdoPrthESOIdS96eYd7xXeD1HGAtbl8r6dMx7uALzaqSUQ7aPWGGl+Mo7m6vWN3nMWWBY+Ni + Ndvl3eDzm1wzXo9jOHgQyLkiTTa47cjt2963ieAViUam+tA6nuIkvaJ4+NnL1IZXzeDsu0t7W6qEaeKz + BdpVQubQLOVrjOZYUeUGWVHududvHtF6/jbcs3aN+JmMvKFl7t2CGS2Pw/6v2G120/veRM608u3o32kZ + fR6SCS7ggX7p6G3IvpI6h269MDmilh7qeB3WpF7c4l1epYzfqn5HHxusDzJNpg68AmnFM7vjjV6fdojT + C94rSDzrtG5Gtg7JpqHXQ91iWnvsyG6fqz258/zc4SPrJ07Rtc7OTjYuCV3nnJPtyT3uNY3p2OkWwx7g + 1rXtAt7uVsTDxeHQko5F0N7m0h5Bs6FpoOtg4L7Mnlju5e3riX3ugyyjxI7t9o4gzsvorL5AZBnbYJ1h + Cu/uAQ/vHg2eXdbcJ91y+B6ZFj/tkNwu/C7Ylk2r785xw0faTzro76Dx1JjmYE5rIP/xxr7qzI1sXf6K + rF9O8/GD8i8p89wu8rF21NeONj/fE0Wp5dRp5roLYgDs7PVE8b3n6e+Ts4z5XrmO8BPv8btO6UI/9Jbo + KASBc1uIvbT59cke2B/UQlAP6x3/5HeB6pyN8XlKYGUPvD3fenHb7N8zHd4C8Yfc5FI/9Un/54K+9gIn + Zni/vHp/9HRo82Af9pQ0a4zf6YVf7OkyoUvv3NT+yrfY92zu80jfkb3V1Grf5Y2KPYwd9Z7n+KN1x0yd + q9Btppo20QvMi2cPLbEv+86a3Vk73aFL+F0feZrJ+ax/5HVIMSy+7oCG+Z6Xw2pu7pP/+cTf2+z+/MXP + fsjp94lf+3i9cmun+/42h9kA9Pd5iy/qLvwlnv30SqzHH/oCvUALOsgxT/rDH/cI89QhX/cGH/mqTQDw + MXW5PUN4kz5RcZ5Rd/+dCxzJ0lzEU+NURDLYtnlR2abSW5/3Ku89NODQQjQeGz+kUBUDMJEKZbQ0pZ6g + VOv1GXFyh1vwuArOloTfsZiMYbcrai384D3TVW/8nqHX3UeYAK/8+BAKDV3gEIfkEk0YH+kim2wc8Sj3 + Mg0HiTZvLiVBPkUJzWRCMUsnSB86sdpaW7xWT2Rrw8xeM1In0daAdkmEd26xiHGTkkuNO5ApnrmaTZcZ + omWmf6tHtx+zMa5nwue6Db6pxm350pfPy0fcXf7ZIdp5DeON5knwnfVX+d9lAGgN1bZC/vIEhLFoTy+F + 5h764oLwSSkoA3Vg3EHxg8YNHBN5jNjnVCWLTERiUwiyQ0pxI4vABOOyi8luNCGtZIjH4UOcMGkiZOkp + 4E9tZIwqkqlsKbUr/oYaScrtXVQ3PK2qahoFJ1SFUzsGzIoD69YaZo90nTc2Vzmw/Xa2YSsRLVFdaOb2 + eKthL6+8TMn8jVVX6pi1I/sKrCr47ETGwAi3LQmiJ67EPsTGfRpZCmcgP9M9LvbuchzNUURD9pzR8LjU + o91WPb1k9aHaN0AHep1RQG/fv4EHFz6ceHHjx5EnV77cdwDmz6FHVx5BgP5z59KxZ9e+nXt379/B/74e + fTfsm90q6z1iJ73M0rVAX6tO+H0I9OUxvqB1GyL/hIY7Ku8z0tCjK5guBCTHv5wC+yDBAc/bRkCA2FsQ + gPqYCSya9oqKrRoOcQuGg/38w1ASozZ80K5qTFQAPxERtPBCGfeRCy7+Wkwgxzp2i6dCGnfUBA5kQIwo + yP4+nK0JEi08chIUiSkSsQiXefEPFWeikaoG7QGSymR6XGAtLKXR0oOkKpNyqSOPDNNFE8gs00y+hgQn + TqfqqXI2NRcy08nBNLTzT9ZYTBJQHkObc0ZFr+ISGucYRTKZHa3kcZg7FYzUPhsfHRTCSRvRh08GLf6l + DNNMNUUByk5TPSDIaQQR1c1Sg9DUUzwns8aLWyWzDEwDKwriVFRbPWRVF9ijgdde4cNlQmTbG7WpZZGA + Mg1aYqCW2X9qeVaRH+WxtdjGWpPADpLG1THPk04j8dyaaI1U2xU1DGXewkC1CFgYnEiWSXHTdbWhmAJW + N19REtxC2hILNmfHe9Na95GEHRjWm4YX9RXjzjSemGIeNha44N4ODtm2jhP5mCCTM043R4hxFaW0hdVZ + OWSYcXuZZXIznFhIcSzWKmCdd+ZZ5pQffCPofVMlumijL+Yk6Q02xrkFkpt9GrCesZralaplo/dorbce + u2s+xKA5MqvzaJHtQ8a5pgPLtMF2GWWy0Y27TrR1vdllE98W2my5+RZzaaYVxVpvvDdd/K6fITgc8TkB + Z7xRxx1TMYV3625V8cEtJxh0R9c7A1yWA4cn69AxwzxXIvylJfVtE8dw9qhHJx12OW5Xz3NuWafT9YnQ + Kdvk3vmyPfiWgCccNeP9blr55ZnP3bHi894ZeTfq2956wXUP9Qzvrx4Joc9Dol71759HbXytqT1/ePVZ + mX+9K7O4hHxSGUX/HvrXd6IhgcRc7tJf0fbXONxFpAAAIfkEDRQAAAAh+QQNFAAAACwAAAAAWAJ0AYH/ + //9WtOnw5EIAAAAC/oSPqcvNEY5wtNo1r34w7g86WUiW5vmN6Mp+kOFZWdcCL3vbXkfzeQ0MhnIqYaho + 1P2SKCTzCdU4o1QLTwoTxhTLSldnO/S21fIqNjUn0kCf+viOV9ly89VKC+azYBBZlxZAV0cI4zGohoji + 81WooOgYKSMp99KYcIkT8+eX8+IUIUg5ejhqAHnCaIqx2orlWrWz2WcIgDrEWcIYgeRzC1tz8ws1jHsH + XAxcmKy8sbXrZguVS7J7ihndHFs6yuyyp+ytnTjORC3ylGlMhHAlWj59bSrudaxNDx+Fn99Oss9BRUWe + d/z08Fr1j8M5VwkLCmmYbyE6I+pqBCLoUBPE/hUbxUhkmBFZyEUlOn602ODgyFQQOpowCS6fy5UvaVY7 + yWCjpTkcZmrDKEnnzow+bYIo2qoiBZhKWUxRafRbK4hNw0XtdhUPzokUq554CjWrA3tBtWwVKdYRUkpe + l05r6++BvLQpz/JsYxfWWroN9g7BC6RozG8LQXHjiy0vMbyKQSKW4/cC2TNB1lqTPHnNgsOPTzVmsi9z + yMidJbgabOIzVztKn50DNfexALj6NKlOp5h06dh8b+esg7pfO2qweaed4Luy7eO74+h+Q3sS8HN/MheX + xhd5dNBntltt/ua5muSsCFFXWF648ajIaantnh18+NLk01caO3aJdjGm/pmH8h5Yd/UhJB85jwHoViHU + XGKJMHdsIR53SiDYAj0UolXgXQc+EaEhXZx0Q4P6XTVDg5FYOCCBGZbRYSwckvIDiA920WKFHgVnIB9/ + IVYjj/QtBiN/zmDXl00lhlLWjaJtJtuKZvSI24um9ADHailqSKV50FzmRZNOarihhFNGR8cIV+ojQJod + zCZImm6+CSecwajChSy5nInVl2DC4hue6yURZ6CCDkrom23GWYtMN4bhT6FuCtLSo3DyQKgvhxrqaKaa + bsppp55+Cmqooo5Kaqmmmnrpqap2yqKQmuk4jkBL2gZNFrPuwYmfSepZW2e6/jlSibAKW46ZswqY/th/ + x9bJhZe8AhkmtEYZy+hcF+oT4rKpNVJrJ5g4+6yYGalzbYIkeviDmbFuou1NFIyR1xK/LhNur+NmUq65 + 7HlULZH5GtEeugbh+Mi238ZXr5RsVYXvvP2dqyQC6n6H7oDtPryjeswlLK4kMXK7oMMSiyVQv9SiRaXF + cCUjr8iQcdxxJOyCvOB8WcnKDr+OTUiwt0elxiTCMAN82oyL1unyyCQPlzOs8/D733JVGtOs0EMrF+QO + /IWctH3TJhvbv04pGTV8cd1UndVXBxjkZiGfuDTTaGhMycRDLdIYM190/eTaRNPE929xQx124OZq3a8u + 2+ntttp+jw34rhD3/vPJ0XUPx2ifn+ndsuOPN2GT4V5/jXnlE+YpcOLunq04s1uLbfPnNkYu+b7YhGGs + 6AXL7XQ1NW1LxswmBis7SivBzvrklEPVc6uUu9p6SSxVrWPzzUBZGva4qHgzsy1ZTkgvmd+2OGWYu607 + R8Ub7xDyX218u0oXxzyG2VMbDP3txK8Pefs7d9+s73noPYlxjy5+N71EPYN0/APduP6nPKgJL3xIKxv+ + 7pcKBdZlNA1U3wMhyMBvfS8bzkFaooAmPVrlamZE6aAD/QfCEC4PXi8DW+9c8D5aoW+BDtFe9j44Fbo8 + BQazGWAJ2dUH76jmH6jJhvsU5kIE8iN9qwFg/tVcE7giHGM7t/GGsu6EpOfxw4c/hGEMjQQQLMYuYif0 + wwvR9i5c5S9WUXwjPJ5oR9sFTY19s6EBNdDFbcyijXSsoxTLgcc86jGALHSeCecoGUV2hYchKpYhD/kT + KkpncN6zk8vAwkOp5JAK3LrhGS+5yXEksn+c/FYRTQmoDepMlCnUQtAkuMrZofJnd9RkKq3IrCLmElgf + y1gtbVmPYbJylxsgI34KCT8msUmZF6EbICWJGS45w5evYGYKIgIPZy5zOO35pCwh2aVRbnMg2sSDNbnn + zW5mMpye4880HUm9WWIGm+ihTluUdY94fhORiqonIJQQEFpGEmioyFZm/uikFWViUKD6agY35QnMOt3T + XgsdUmoaqrPgtNNp7NQLRTEKDIl6UIhj2Q9HraDQ5CXzY3fjXT5Vd8qTju40BRHnOEWIx1+cBUCKUAWu + SAg+n9VOp1XkaU99lJ8/Yg2m/1xiNpkWBj7adJ0qLRJTf+nUpxrUVu4DaVXfN9IKTsaJDAujVEv41Qr4 + FJ0BHSvPYoafs6JNq8/sqBHfJcKlxnV3yrjoQO0K0IcY06/bJNLBSPJHpKYup4N1LJ8M20yo1sV6E62H + G31mGE28VaqcrWFlvVrYrq40mnJxK/uu+VkcWpaQLIFoxQp6WsGltrSX02xr/yXUeIH2kcF4J20x/pRb + ws4TtywFLG/Bms7Ywtay81Nq46CZ3FchErNyBReTqttUzy4WprP9Fc2KSdnKzvWWlvTtZrRDHqFGb5/U + 1dWWyBINycI1u9pVJXcr2so9xle6sp0uzpCFt8mezrT8xdhymcvaK1JoGNHZytzOB6OFGG69neEwhunp + XtdNWC7nLDB56ztfPcw0Rw1Wmn/FGuKDPVe5MaVvHF0MSwVFtI8txvGD2xvj8xGVxIC1LkAw5lqPcXbG + mGyxh41LseY+k8nEPDFX1QohsimopBYe6iAv8OQgpxTGiJXFMcfr0dPFJHd4SiuSulU6N9CUrXnrcX8J + CuEISzg3dI3qXj2h/twnoreTIiJb8ILHyJZ9JMxiHnOe9RznvKBIMSeR1VuSilUuv62SDq0ZdJ1ckP8C + OMCd7CzVYqnPJKQ1mYSxx50+3WBG59ik3sVAYlGawb8dV9XAmxOiP+xjO8sap9cr45S9khA8HbjIOo5C + jHRrZ2A5eowdluutYb26qVIZMRUZNqRNTMoeGjsnZgazWaZK7GeVm8bCru14xF3tG3NWKGybtZ5eE+07 + n9p1xYV3rR/xxe6quj4nu9olvP3tfY/2gC2Md16TvFPAEFngvds2XWiUb31fkNcN/3f8CIaUvVmv4Lv+ + EgkRnnD74YCD4yYxxIM9cP11m5BmVu2YRpRx/gcbpA3783jp0j1bcxS6z/66r20zRBaUk3ra/m50LSyo + 8bfkykrZSpzF71jioEeb0aI2d8t3SGzs4bsTXXc2GZS+9KL13OeE44QPc8EymzsC5zmXdutSVHavOzwl + Wf3Dqk6VKlRF6u+EL7zhD4/4xCs+U22i1KoCv/jIS37yjnIHu2UW8auuaA9oz6jiht4Cub/W6bZ48+Xn + nnnGyofzddd5UkSvS7Z7pqZ2r4TfM5j3gV+49U+G/WpJD9+z8+n0gPQ93FqvdZ4aX6bAH4xPs4xCk8N8 + 6xFZvqlTLg2Mp3RNG0c69Hlf/dyHF/sunf4qlMirdCE/+ZddO/AJ2Xua/lp54l/PN9dXjdz3G/DJR0Jo + dKEsFvphfXpyfwN4WLLnL1EXRBUjEeIXJaZhgE5yfyvReXqHWt9XV8BGf0ingO1WfQCYXjIkOBhYbDe1 + gZi3DR3YY7KGf7RWfxoXZqHlZyC4c/rjbMTngb2kX1GGgE4Qg0cGhNBBe3GGTCoIauHngDjoeZfHf321 + R3EAaEaUJeTxBRUYQS8WgRS3d9Dmejn1NrYXUi9XPRD3EXC3fuy3fUeXf/pnhL0VhI/FGgGHaSY0IFa4 + SEh4dSzGhl1IWSI3HqEkN3nIS8jnbXCWgQhoWT/IbDSoQr+mYAsXepxRdwj3RUloh6NGY4o4g0SH/jcN + s3BwoS1NQ4jtY4hraFeJCGKbWHIJ1jBl6E6POHGXKIKhBl77tYVeo4lZB4nRQy6ueII8Y3Tqd4YVKIgJ + tRuDUAS5+Ib2tj3TFUf3tUOVqDXCN4xRkYVtOIt3RgcXNQhkWIRakWBJBQ60J4toZI2H2IPmt4DOlTZz + UnxAV3ySJWdJd4ZoOEXXWHt3qFvKqBDyomKveC1cs4PlSBPlWIy6dovpwY/9aILdx3ec6I6oQZAUmBYH + iW4JqV0L+Vs2CHbzd05JE0bgMJHuZ42iNpJKSCQaqYogc1vExWqit3vrN5JZeJJGOAIquYj5VVK0ZRe1 + 6Gt8aH/cxl01qY5z/oGTTuh/njCOcJhm0xGTo9gbQ9kcyJiPqLNOFSQcSplqOiiJ4BeVmEWUQGkajFYM + zaOUnkSKpeiVF2eAYZmPE3CU+SGPVTcQ8JiGfDWJQgmWUzkJcfmM4+gaC4aPR2CRzFSTbQkeVOmXzgUG + UJc/gzmISYiRVzGAblmVixmPNySZ97OZpwg4halOk4mNgvVncwSZ6nSaL0iZPqlYfKmF6GgwoMeILLeV + R3gg1meZiECWkfhX/BZgnZl2Fel7uYlt68gaUlab/GWZycljoimW8FQGqYlBO5hby8mce0J6ZHacrYRE + K7h5NldU0ola5giFwPmagKicJrdhf8max5eN/uGWcuKpj6unUr3wUOZ5ieJhnq/ZkcC4ny6onnpYEfL5 + nI8WndgnIp3WnhxjnbooJYjziqlInkKIoI7oknXUoA/JE/MDmtJSkNcldNhnl7hEoG6obiLDZB0KRR96 + H8E5XiXqnuFSVUYFRkDRWBLKolAoouHYQBl6YxHFTluUB3FHbe95gy7Kmz06NDiyZPTIcO4RgVYYIf85 + nkIHowzGMTExY9rnO6mjoqFJmzqKpL5GpdiZpbLJT1S1JdAZpn+4oyokOz5KGBdJdvj1NBP6h2WKkgOj + pyuaXTOxoKPXppD1jksYJX2KV9WJG8YnpVoypuf2OXJKLzG3fBU4pYha/qAUEafeOUm7iE+DGp2Ymqnf + uDaSSkFdAZFmqp12gJysGqk5KHEjqqpFyqpXyp8p+DimeqrpYKId56at6qp+o6t1IBi92nSCJKpFyau5 + CqscF6O+Skq2aoG/WqrNqqmkaaDmoJpml6yCmlzFaqy06iLOKXXVyqnLiq1AFq3kyq3dmqZxBa7pen6p + V4OIOK4Maq0OiZvgNJorx673mjDDiqWEmqqfuqoh+q9mNzQCa4vXGq7ZSqbu2q8PiK/56o4Pq666l5gy + I62o1rEHe7HyOnz2aD4bu2Uf25rniqpWiWfx6ppaMoQESH0Ey5HPul0ue4wnG6iGqqgJhD4sKwGU/rcp + jpd4gye0R4u0jxKMkJe0Teu0T+u0TMspRjspVAu1gVI0NACoEjt+Uid//ieBM7uyQHuXAhRzBUIa9XNs + GcKwDRt6sqqHmTRCZ4Kygxiq1JmgO4tdsdapbFpYWcUmYysfabtg/ehJX4qxpwUTfrtbo1pjL4us99lE + amik6uWsZIuFlzu4d0tDpbZZ1Hmsf2qld+o/bRa27aqVwhOKepu4g8U4P9q6sPm2KyIYSLW08Vi3JMtU + W0u60NpvbAuza4pDiBu330qxIluCRci1XFirlUizoNqz2oq5OJqkcDuf01Fb6wayihsP05uxEbm89Eqt + n6eWycu3i4q85msW/rk7rTDbiTpJvN4avQhLQCTJGGibFfpFo6BbvPN7tvVrv5EYvnsaftmElwNrvAoL + wNBbvZAbOpqTPm3bv5C6qwEsWvhLmSHrtv7bvRXMwDy6uX4Tv1WawACLwNuba7QrO2IjERJssB18wuL6 + u8C7wniHidwbrBscuiWrwsVDTRaLrmtkwdHXwz6cSy78wpemwyicbUW8PiKDxLMaxM05xE1Mww2USFFs + jO+2xEzcjE7MP6wrvl/1HFl0vQ5psnVUvsxXwlw8wV5sZCEcTxeixS91oG8Mx3HswMyUHHXsp3dMxRRJ + qnLsTX2ssm6cxL6rchg8x77hx4karcOUn4NM/siF/HttnKeBXMVPesVzfMkcHKp4LMMCDMZ8HEi2KaaJ + rMgNnLMUhSCPjGotqspVGbspvMd8/K6766hS7Lg2G6ut7Mq5rFMdYk63aoq/nLBYLMwnRcyzTMvpa8vJ + HMbLTFHNzMu9PKlTbK8ddMrp2WxbfMPG+b/S/MTUrEqyi8geSsLHXK/brMxgejx51yLFbMwheMHuPM3w + bLnfbMcFg5k87Jnc3M2iu2XgXCS7ua747MOfvM+7rM6sgNDwmZ1Y7MioLMsPvTv//LyPms/m7E3EDMUU + p9E+C6yoZMjnCxzOfJPUe7wcvdA/1dAXjdEuNtIbfYUuZJGwnLIy/ccZ/snS2syzYVyHKJ3S17zS36vE + Jc3NdBrTPB3LXFHTNl25NczUrjt3DqObyuq9ghvUK4yQoAwdBo2LPw3UUy3CZ6LT9WYeYp2JZF3WOUrR + kEzGKDjTDhbVIHzGa0O8aS2/6fzUXHjXUr3JMBNURF3UdX0NT8mDodzVhP0rfN3XOfzXv6HY7KzAeb2k + j23R5dnPBUOCln2kmH2mnW3V/CzX8vDZABrWN63XbF3apj3Zu5Pa9jzOcP05WG3YTr3TlD3btM3Vgy2j + 18zMqOfaI0ONe0uheJqlBcvQ8FrQxQ2BE5vNhy3Ime2YPe3c2GvUiRPYM/zB9ybGxTnMay3cgSvd/sTK + sbadMOEt3sOt27GtGW6H1KkM3AWynt6c3Nst38gNhtW93vdN0Kut0jjVhB6j3icaw3Od3/o9xtCc1N/9 + nQmuywKu0mbI35zt3/WiWpDd3C0N3Z7BvKDN2BC+eRLu3n794aW3zr4NwzusbiZezfTN4KpT4OlN4vaN + 3gEu2Slu3rd34dqdx/QJ4wKVtnyDjF8WtFer5FMrtUvu5E8+KVAu5VNO5U0etbRV46Tg4uk35PEUGV3V + jdqLzTmeYaMc3F184oCsyWuA5Frt4HHo1tKH5jG+naL8StziYc8nnUgM4EbcZG+N3RLQnVyQ5a/343Iu + xLe9OXW+5hJjJ13b/rtZq75nnugKruaNPnurqLsLfFld58IbjsmhjekgDrYhzuInK84vPudEjuKkHYYt + fOhqF+mqXukTPuIVfp1jvurnt5fr3eW79OVzbiIaZgN5TovcuNy7bpitjtiB2b6nvjC1DB59/tom/OFn + KRnGfi9v7iu/fknBXuuGoC44YaPQHu2c7iTgCdbSO+oYUVrlnuofON335sGWbu2ubraeqjUchnYjDOnT + Pu/2LtGq7O4juu+xfs71zoEKn+b3Huj5/u66Lso/EfALT+bZzexfjQlaxGeTTosMv3oV3/AOr/HkJEYu + oO0joTvDGsFNfenYzRnPpbXozK/efnEiz+oy/g7zKHZm5j4mF5/uIJ/zFN7TwqCBsMXvtGPz+YvzQ5/x + ao05HO/Rys504b4bLV/tTx97B8NmU2/1eLb0Jdn0H03diWr0sHh9W/1jE98b6E7nOl/yjNL1HS7t2wf0 + 005F4z7AzgzoW68z1KIalT3roXb3V69JHG63RB/3ppPrJ5b0Kl/4vuJLiH+Ail/Vco9Vkc3tvB753Fb3 + GErekBwWpd6lzxz2U9L5bPn5LmTNZn8Qj55Ao+/zbJH6Fan23w7bUB/143Ox69XvtR+At29IrR/3uJP5 + 9uP7xwP8wb/5/APS8J0FJaNsHo91p3+P+2rroX/5EF9W1A/2VL/tg+/l/nSt+/0wA1l12r5c/dY/sszN + 98N/1cXP+J6qz8IfVuDvaINm/6xP/uUf/cdPAPAxVSNlYZSToldx1jO0/acLHEmpO9HUK9lIbOFYlt95 + 6+yjTpr3zHGWXG43NBpWx5CSeUA1h0XolLqsQpI2KaDjCza3V6s49iWHybdfuoVmv4lwpDHcQ5jBcopb + b3rz+xiyAjUACQ/3+gZjtuzuFssUDNkmEbngKt9UIC1dOj8/Moc42yIc50jjQA1EA1PzVpHMXmNbYwNt + Z2hBGk+5dkkGc6eG4YDpYvFuMYqX05phjgtNAbykP4RrnReutVaVt8fCl6FZwEuxWB+nssqP3K+6/mfg + deWd6ceV8LGRuX3XxOybl0/WH0sACVYQmHCgHHvinHiwxs6BtoQP0R06x3DBQo4ZjUURJCSiwVUelWyE + gjLDk48KX3ZiSUEliR1JvGCymA8jSGMIY3YMamkmB5HrSBbUCaookKV6ag5tOpQZ1KNOKiKayotgVH2u + et6jSmhrOlVKdcg8OQpKWJtgx3qKq6csg6toq33K5LYqWyZ8uSoCvHaunLo87l5KqnVnuMGhXBWWJNmk + w7N48+olPO7xhsN2KacNfQbq4xrtNmPpnOFzidWs4Y5uXXi2Ym9YszL183Tb676lR2cOXqW2acSLNevm + zPtn8NpjnxvHjVyt/nLHzDX5JjucuKLbcybfei63N3Y2Xl+Ol+q9IXjqyeE70w4TuGzuxCK3X6Q+Ufxl + 8/trzrn7VsqPkZJyIye1WwCEKA30PuIvpvEAE2G/cSR8D5QGJZgNwggJLJA9GCwUCkPr/jMsJO4y5Eg9 + vi6ApEUHD5nRH/Oo+DC9EJl4kQbbwjvRv2RUJEPHHXl8hxC3HjjHRhpxcYxDCOqaMsok+6mvFE6ehLKP + Lo+j5MEQwdzGRxKBTDAfAdhs08034YxTzjnprNPOO/HM880A9OzTzz/17IJPPgEt1NBDEU1U0UUZbTRR + Qh+tE8QhPznyu79S4LFMBZckkZRNvSySQbra/pLFyiuxbE9LmzYCNVRRvzk1yJR+kfXLVFW1qoVUXH21 + MiJxtMElMnHN1TJzPoWO0oNgHaUBoFgs9kCNkO1wrhnLtFXDaJ61NKhel9XEtWRpqy4ZbdUxIlMswSWK + 2RFUahc2c78JdldvqZK3RkS8rUnf3xgD9td6pP33Vn7h5XVAd0cdOE14pRUu4sCW7MbfaBmu1+Ge0A14 + YsgQxoZPa+/LEMyOb8Ko4+0+plgwELoguWR6O1l5ItciNrhZXdVAQ2eXWa4UZaSCmfhnhwVsyRcTNc0Y + iLCGRjBho1v2jN9jcPAZV5MjIRrnX/Fd2eOq6eu0ApfCOJoFriuF1VKx/scmW+bYeNhkW4lTZfsgmx+5 + Bu595Q6Q7oJwwEPrnJ2mlrfChzXl76ADp3JvUxWeu+C4zV78iydmeRzyyJnWCMK0yZawRbFTTmITfENT + +wobgSFdbtPfxZH1vEGXHEndZ8ecZ6Sny/3uwHU+nHjfszuYG+FnZf5n2UGnPXPbPReLedFctDxy/viD + u5Hrh6+6eO2jB3zEnSOqHkXnJ+X9eu6nt/fh48E32Pj6zT+W1N2Ed11EhqAHvnShKnnKM0v/OHI7q2WP + PALE3v6SBsGRsO99DHSfAx+IvnjkL0wIpGBCAojB8HWngAa8gwD99xUANlCEI6RCcQh4Qvx5EITkumsh + 3uTXBAXmClrbq2ANWXhDF/7vQTucVq0cmMIsrcmGQhygBqswpR6uC4NKTIyZmujEJ+ZQh1Fc3RaTSEMm + XlCLzQPeBtnhJCFa8VLhCGEZzSimFaWRjCjMnbzeCMc4PiOCmKrjDOk3xj/qUU1yPA+HyFXFOwIxdITM + IgnHlCM1itB10hHkHh2JydeVUIeTVORQLOnGR2Yyg4Y00tMW0SpK+vCSmiRlIfkYSV3UygM9LOUHS0eQ + LRisAAAh+QQNFAAAACH5BA0UAAAALAAAAABYAnQBgf///1a06fDkQgAAAAL+hI+py61xhJvUyYpf2Ll7 + +4XiSJbAZabqyHEYukHrIc9ATLfxfkM6g7IJhxNXkLg4CnlIk7IJjVae0qoH17nUlg5XaJvYCLxMb4Jq + TWeM6khzB25P0PL6jG63YzFMovmWw8LAgRfnloe4IIOHxEiiY5ho4ChZOWUp6ROpsTlj1vnxR9jQp0CJ + iTQqdyoCB5rHiio7OasX2IMbGMvy2urKxpmbVKsG3Lbb4Up8stzcgOzcivCrTCvV6wuHcPSzCR2dbH0M + VTr7DV53js4nor7251nOjQN/uG6juupXXut+X+XvnyISAYvUi6KEjDeBKyAU/PBwGjZLERkKqchw4jD+ + chovFgFh8VEAjC/23SMZUgXKex3PRGnpkVSnlbXyjYt3cBnNlAR5pshZ8o2mdB+f+bwy0s5DegJ3HoX4 + NJuTl3tuDpoZlYIYpfFCOs2a4eusqiWckk1DB5RYRGfRNoSJaS3YOXMrAA0htq0UNHfl1rkLpSBgZ37r + biQ2GOmQtXpDYUtLoXAxuCkCNkYn2bDLsYlDEfFLzfFlew8iaxamT2TnZplPi5PFrwTlS2w7bxnNbJBp + w7Onyu5tEqprrsOnNWktsVecXlQAI08FfIS71YSLE7cOqBEmwMu1HS69O+qY6O1+Z31+Gn2xwNu1yjzY + POjT2AjNn8ee2jp5kJb+QN1tq0UYtB013n4enENdNOqlh52BRrXXhVbeTdLHYwTSxx4vcy2oGYcv7QVb + bBphMYYBE4ZnkQQYavdIXR662CBAy1RF3YQrmuJVDwlWZmJLO1aHH1Ex1tfMJ9Ko82JYOuZXjXsbBimk + fg4C4QwWvSHIkIq44UTNjdmBleST+E353Yw/biPSPwKsucOabr4Jp5u/iShDPWfqBGWUVapAZplWxAlo + oIIOOuhIhMJ5pz5emlLoeG4a+mgMgf4SJ6SHXopppppuymmnnn4Kaqiijkpqp5aWiqqo133JR5+f9Zho + GF3CmtMey8GYp1XFuYojfjDUoByvNmgZq6zJabL+JQ3ggZmrrsMJu5l1v9ZpV7EIIWvgQb8kAwa0+TX7 + 51HceUtacdOi9t6eS76VboLdigluuDyNZq2SvkqErkysYWvCiQ8qdst98cqLymr/kYvmvfgOlqyQi3bR + MDKfIOzWwDKGKGskQFEcrbQZY1PvYv5+oZHE3XJ8scVEwpaDtrWiXO5w82zZsBrEskrygV8sK7DKGdbk + nULw1LwYlDMzHPIKBRKdnHDcvsuszysXbGIuGDL9apAJeTmeLMRi3aPTTwsYtdTHcaYvKaiEebYGOF8F + MwjIaij2Ozw/xTau88X9L3ZbVz0H2EW38LbddbNzN4FmTz2v10YrMpRBfOP+yANcO0JD1uQsLr65T5r7 + KbNu+Z4h+LBL/ni5L8s2qSbnP3tuzuNuF45m0uWdbvntouGr4w9Nud427LFrfRXgz5SuEqy0S4gX3co+ + /7DjwGedku1K5xnf6G5Yn0UgqMOEZcBNZzk99RZxn7zsA2lPC/oDEi7N4dwaJzr55ccU0ucoelz88sy4 + TxdaWQ589vGd8VJ0P/ydD0jEEx1QtBSlkSFOflewWv9OkkAFCgSAPFLf+nICwdTQAyZwmY6IWta6DN6h + egrKFV+oBYToXS9sB1yD7ngxtDLoT2cqnOECW+jB1R2Pg+Cxko+k8xNDwI99xMhbh1gIxAb2byFMxJ/+ + lTxzQ6ToJXP+G14PO/hDBkoRcuwLYcquWMEsji1dxtuhfL7om4y4MYBBFOJGiJgb5XUxcfYSyvOqGBc4 + pm+Dc9yf34oCH0AOcl0docxOyOC9QoJOkBSskiTpOEYyjk4L3goCJG2IRI7o5pK9omRP/oHHFWLPSYWD + AeM+OcFKCsJYkSRlKU2pxmik0od1JFsNrQEtT8LSLqH0RLVsOUlcvhEdyORPJmeXrwAFj4aK/GX3RMO6 + amFGmadcxy5V2UtfttKavBTGiIrZKhdsa37krIQTGcSSZvbtmbSMZjvj+Mc9io+HEloiNI/5TVlyE5Pg + kOc8FQaxfG6vT4UApWf+KKFOOiVLhs4aaB+ZmSMXMs+e+hRoR1EHURq2JZs1HOEl3/lEbxr0oIfcqCFU + VLSisLJ5/ZyYP2l1N3miFJ66XClL+eckeJixnHysn0eVITQ7fY8iFkVnkXiy085F6G3SJKpxJuLIfirL + B186C9Ek+K2mXlOXPolqTIMah6HiszQgcyRJOVEOGyWGq9SEhVhpSlaogssR6uzVfhraVmwC62CxXFfa + qqY/s+pNXSlRrAbVNk5rMWKujsnjPrGoxJEGdJl35SxifPpToAbVr2A87Ey1adl72tBlkCOlY+FlybLu + FXFCraYzL3haJyWET+sU4DY7y09Lbhacq0RtWlX+OyDIFlamM2vIZZHLVOCOtaCgTaZop/oHTnZTucud + qmWRZ9rxsUa606VuRpsV0rr+bzaTTSPiuBEcuA72pOS9KEbPW1xi1rCqHu2oQhP6Xeh06TY6BG9Z6mvf + njY2XulFl1oTvD6HGuQ1sUpURJOqJwTfVsH4ze+E68pfCEe4uxEWZn86EbfXwta8HQ7niMHw4P1pzL0A + /i4Jp3Qwjqm4bMysrnXNFUszhDi53iUx71I7x1dQ9MAaNiSHETjbICesI/DFbW7rmcfhtjZY5Noxj725 + YAYHeQsxnieK19iy7OL0L0bE6oiAJeImdwzMLXYxlskM3dfoNxy9M2yWDfz+saHhorfQI3Ro+tzfJu/Y + x3O2cz1hXE2YGvk9dD2un9n13N5BIs0TO7IAT+ZZOTf6vlCOMmpZNeQft5bGVMp0v+YLN0a2sxuV26KF + RL1hUtvP1HuGNHNyZjr14uOtEXrziWbsZFzHTNe/G9gpIlq7V2DOQa78kFSSCLXnevnLdK4zPZXrhVQn + DNiLJKwtyOHpZStb3Xn1NkJPjWe1tMiHgM5fX9ada3auJ8xidmi8qThvMDLaJADCd2iP2QYtW9XRtBTy + 8kxY2oGnIt8GR5CthyDxUTOcfg6PhGWA8yupAdzgt5xTuvmkOGfzGTUlUvXKxQkSUSi8PyUnObt3Z23+ + varccKiux1K6c290zbwSJ9r2ipeA45TvfILxrvmrFyZvnNWJrlCSh81dniZ84M1irEAjhZz+dBr9a8Bg + dQ1ZjM7tduu83+k8YMtvbnKYj9tW78q4TP+p56unVu1rZ7txsVwYj2sxSGrWu8ZnJB6VdX3q26iBZF5K + MrvvbNyGzzu2yST5w3+7eKKIQKoydapQSerzpC+96U+P+tSrvlKGalOqQr/62Mt+9qQXwxgQBfc3gH2j + DQp35SmvGmE/Pe0e1qaRLF8FS1d2TL7/PfJDNPTHalQxt8k9dDT/YSk53vnPB1rP/L5a+iEH0pHndeUd + S/W+mz+dwJLA+LdP7jH+Ad/w6K83ItC+cMnRwP2JaFP8CI9n3Pda0bdI4Nd2JsJ/NDd5ADh/ejeAmWd9 + QFZ+N5CARCc02WdUhoF/xFckhJZCSzd4W8EhN0MvI1YXHSeAhESAa4VeGgJ/7sRpd9d70eZ8A/h962c3 + LygJ83Blz4J9FUdIJ7cOG8iCa+QhuyWDbJF8u2dzD0hs4ECETHZtR4h3WOZfcfdfGKd8NaiCS7Y2PhM+ + e3d/JmiF1yBB0GZMTEhyTriC22WAKzeCVuY9kwFD5jQU5OFz3Nd9HWhb/QCGAReHGehq1ydSywNnMteD + Ubh15/OE46V4WfeFgih8flQh42J/iqh0clR2ePL+iLMkPZpUhoT4Nh7IOOfHiI3IiVwHiYEUXlcYeWKX + ZuIVHJgoW6fohTv4hwHHityVZ5W1CQZEhpITLBGobF42Kx/4hvoWXXKIeVczLtnnJeSXguJyi3alirLx + iYKIY5HTikWlMWTnL7SoftVjfykDgvGHi63oILYBUKSoaZpGLdLIhVnRhqFWfAtIP2ElINnGWweoOrJI + I+knjuPoOdU1kIlWZIkAWPxoH8zTG6RIdg1IfydYjxS3cUMojATmXC4VHS7zVgfpbvNSjuaTjKVGaXL3 + j9CYfCMDkiY5FxWJdRK4iMIohGuWhJqUSiYlkQ54GiMpfdM3k6c2OheWWW3+lX4Jt5NX15IwmZSbt2ut + Eot6hIb5yH560Hx62JKuWFE46JJ7xkhTpxA1mZAJd5XTaHbIlJVx1mzvcDJhCUtMCTFlOY9nmYrXmIkI + V2Mj1IeZQA1piYya4ZP5d5FRxJZxRZRgqYKhyJPP0kx+mWxrKVhHtml7aSYQeIOAiZa5WIs7w1V1KD5w + KRygOZjC44eduJmqwY1ZqHSWeZc9yZSOSVAhyX6e2YvIyJoEyRvVKFVcCZnZAIyTyG/AuW5+GZhSaJfB + +Y8Xd5m3iZy7UkiwGZtPmXNBKZy4Bp3VWTGm2Zy6d4O62VTXiZ3meI5d6UeJl4/M2ZsMqJBodnTpOZ3+ + p8kq6IlB8TJzk3VoHIiRaSCaslSc9wOeGWONHyOH8CmdVHGZcMVp+0meuaJlPMh71Fmg74mbUGdSmyhI + /wmKNgM4b2ae21meEJpT3yifGWYxMLM0jaSgagmFRYVyB4qSONmfMukz31Q6KWqPv2UFNnqjrEaZUoOh + 3ZiRlfMe6qCjj4mjS+iimHahrjNR1dBbTECkrGl0clGkRtqPSwo8G2MbVoeNChWjxOWeotShAjai08Sk + QIeOYggwiOadBBOh6DamHFGlY5hAOgmmvjlgKyqbWhinQvGlfTo9Pvlx/rJS20alc3pwWlimPzmcK7mf + XmYZPEegcrqodwqEjir+Rn+JpK1phhn0o7t4fY+6p0gHqAaaQJ+6jPvAeHWpqWIKotfgqb9HE0bkiG86 + cUkKp/4pq66qlRq6oEiHqBbJnbpqivpZq636oa9qquWDqjBorKyan1QRrMI6rNPTrOmYo8c6nx8in5kx + rW6qlPsGrXrKq/gpp8y6q886roRZrebqp5VqnOGqrk1kq12hgbUBr07VhPqpU3ynpvZ6r5ngOte6nqRa + hdmIGGrYooulhJxDsHSqdcGIsEcaX+0pB99qpvK6rOuaqVzCU7UxsHN5rtpKrsAaOv2Xr7eTsiR7qx2b + sP/aL9d1sRibsfvaqeyKeDDbpSdrlb95nIuZRED+OrGIhxIp+34Weo82G7Rw068QMXuuV3q2R3tTS7Xg + KLVUi7VZq7Vbuymw5ylXiyijx7WpQoc2oaQ8y690B5Yrm6jFuKkuC31bYbAyiqlaWpvuap3SSrGfJQZJ + Q7MqCqwrgi1tuq0TWa4syzKSEjJ/C7jDdmmB9mn5+rAQK4o4yxk6+BNOqahnyA/uWKqXmqyIm7B+y7Z5 + oQ0eiWKna7GgG7r0Cmak+25k+knztShIG6b4Nh14Kbq7i48yO2yZc4eeK1+3ObmrcrheVLhL21Ize4x8 + xrh7mLcrabnTO29GawuQABzEm643y7uuu5G9Wq9kiYWSV7wk2q6liawuaL3+Coiawtu9osYYoqliGEG4 + 1Cu+rxY09SueSiu93sujW4m/vkuOSlVrqOirhpujmdm75jt8aFuQRtmWzorACey/L2e8V+rAIslbn1O+ + +si9kYhFlLvBAhxGGMzAuPsX6KuMF9yQdLs4f9pqEzyvoCphAbqwJCxy22il0XuxyFvDLOw8OJzDjhud + KGyVQ9uDAJymGZylKNPBB5zCIGzBQLzALhyou/TE2XluErzCVBzCsVunWsy/bJaqP+zF/2vF5YNHWQyu + UYytU2zDOwvGdRqjbLy/M8vFkirCuri8gnSfpTXGZPzG/liwmTuadCyYPNywhazHe8zHaYxLf1Ws/Zf+ + x0LJyDGruX6cyPBLdJWcxCe8fHPMTeRhxyAisAonMVLcwkJMSaQ8yfjqyPpXxqvMxKNcgGvYyZesu4M8 + JytbymiMkPW1IIkVyrPcwK7xy3CMV4GcBxxcxbEsxx/bVK4MtHwJzWOpy8orzRZFzRqby2cside8igF7 + V8WSzLvZzJqTyqqchts8UOYsw5Qcx5bMy9/rzsoUK+eMzs08z/SczSZMztMMcryRvPIMykILzuO8uqaU + zxRZ0IvswQ/qyQDLsO8MyLi8HXyzzuzMBSklVtGhzyQpsAcdzv98tnj7RSD9yt+sxNhczxFb0bZchI1a + MBr9zCZtzyitQvBczdb+nNCKidMA/bmtfMtGzL4kfbAvDdM6HcZFTdNH3dII3c9zi6s7HTIhzahuHNE3 + OdEdzdRXbKlPbYE//aJKTcRVnUFJg9XBBiFb7dJmvdTKatVZzclUg9RJDdcnPakpfVbMDNFQ3MjG7AcL + rcYMFc8GHdW8SMOtO6Fgvc9uW9N3DdRBHdd73cTCstZh/dd37JVIXLGWfaalaNRtLcZmLNif3dgvzEGZ + 7dSbzdmj5dktC9qqbcp+7dq1zU70NRly/cKvXdd2ndgRptvimtpm02U97dPBbUeBuNuzLXJtLNYsDdhM + 5xAcvbG/atwIw9oXDbKSzXGLYN0SerslqpoiHd3+3e3dwkaFeOyhJXpTog3Zye3Wh2UMeS3b4QsutqvZ + v43Y821UmCvOjB2tqm2iyC3IZE2VTTnd/DqqedKgBn6/U52E1X3ab5u+9GnT3rzFEq6OOrvgM3zhzfLg + Gq7VCP5LZhvgAr637m3inYUeO7QL3eHhpd3c+O3gGY7R6dzVio3iKV65IS7iLX5XzwHjxbwuzH3gQH7j + Qi5WRL7jVjYS4F3h/avkVcfhitbfLS7j0EvjET7gM4rjrMvelB2ijje2Z84mXovma87miNLmbw7ncX4o + ai7njvImUU6MuI3eJfvc6e3iOv7kZR6AgU7BK07eft7kt+3fZf6DXX7EfK7+MmF+3gxO6An+3gvyIjAc + r5HO5CzuhsTt41Q5mXkO33uuwjPa6QOTKK3hRrHQaYJX6WSpwMad6srE6ot9d4QA67Eu66fu6YsuXbfO + 66ixqgrr6CcW2wx65cLMz7zeaf6D6QWV7FZe67gk7GRu6V/Xtsee0bie38se7M1u3wFDq9QK3UBT5H2O + 6AN17dguaCcgbVPOMuM+JMAOXO0O7kOp7UVs7/Jd7WAh6YqMlOOuRBTya8OOss4c6QEvZ6ye7ly9CLdG + 792e7z5Y8UMu7imuLfu+w+fOh/8uLqGO8Rmf0L/4P43r22YC8o0j8olO8ou+8fAeXC0P1dyuH9g+8i/+ + n9i1cvLldfGk/eGEh/Mur+gp3xgOQUATD/RBX+8r30MvvuxnJmkz//Njve4AT/PsPtIHvTEyv8xZv/XK + 3ZNDb1HqwfBb9RFvF8w1+2RM75xkr/Vhz/QHM/Vrz/aM5fZ0CffcZPZerGTwfibqoWJnvysIz/fS7fFV + tBV3IvgZ4fTxZPjWXvO+/fclciWRX/SvI3/OepT3PvmlrlqLD76k/tgq3+9RsYLbTfUbnvhdhPStnfc1 + cfX25u3kNczz7R8yr9JKj/gpf4Lh7fmff/ehv167v/coO/tBWPvBL/zmneBd9fqSzPty3/pYD/x/vvSa + nzhwpvawb/NjkfyoNO3+RN/7pc8+ut7Xj2/h1U+Pz8nf5e/85Q0Idb/Jvj/vYj/AkqT6O9rDvv+Lr08A + 8DF1UfhhjE5We2PAW1L+wRAJNNGEvFNd2bZx1RJe0oVUSs2R4XqufL8WT8gIFpGG24GYxBydUekFOk00 + hVUAlgkQcFdaqdgqWZbJ5c+NxAOrE2n4PEtnnJFi8O2btxvk/pTeigIFr9oSFfEODwwbIZ8itwhZtBhH + vDBdHmc66SrrJi8URztMUU0+i0JV9CB0WlUFV9U2nWpB21JPeX0lI2VnYWED+nBpfzPhcm2FUZuVk4Of + Qy6Jj5F0ppWrLX8XvSejpe3Ih6Iu94y3xrjB587+Wc/EI+XL1e5PbnsysOsx8HnnC+AwVPzwKdCX0B0k + hN+IPWBTkBSggakeijKVkaHFjvgWmqBo4ZpETVJKhNygcsbIDyxFcPzoZWY5mGvSFSMmk9Ofm+iYUXOZ + 6mfNMJOGopBIiEQ2lDR9SuPZ02FSaEaVFQ2IDEdGDVOp0tEaI6igRFiBoOU11gJYED5kug0bT6pVKofO + qlWq1xTbCnZpdCUFGJg5qWX/yP3oly9JpFyX3TU8GR5iXY33YobE2J8fRIXFXowphHDaxIoZctZsBGlp + R4IlR+2skewP1AYvr1ao+5DqpUlqPPMdR3ZlNHh5E09OuZFrj5EdNxoOlaD+5dzLpyfPfgU4DtCinSuv + ng9veOnLQz8u5P17cejdjR83i546fSvbRziHu3Kc+4N0zTLPP/sacgi+LtoT7b74FgwQOwLJC8YzBBNU + sECMAEwMPfw045DCH4Ljr68B1YtQwwchnMLDQWhrR8QR08MwwzlusylFFTeiDawVxbNuFAFZs6NGaXjU + q8ghg6SEgyJfY+7HGOEA0sIb55LQEya8YbLJGZ/k0gopp6QSoi77UeKlX6bTEsm3aIRQS6OYJGwHcd7c + 0kdq7nQCzN7EPLDEFiigk0gnyZTvyxTrXEzGnupJ1E4Tc8xTG0T7XO8/Rq0BSYBNOe3U009BDVXUUUn+ + LdXUUzc1BtVVWW111aaMUdXVWWmt1dZbcc1V1115PbWpXn+dNaHh1PSypVIorRTESwF18czUoPzTUNK+ + WnNYZa9klgXUHA0s2qqMdQHZZLFtVtvaMlX02+bCRWeXG7u1cVFXAIo3SUitlHSficS0NytehnJqSbR8 + i7PdfVjst9wxzw3hNn8zw7e5PZ8TNy+FF3ZlPJHq5avghi/c9l2MM8ZtI4pqhHiCdefTNyaK+yvZ5EJB + SLlDlk+c1kyElVX5KoALakoEn02TGDnraoR5FKKX3rhmdtLVTTUerX0Ry9GwZdoeoDmuReuijRYS5uBu + UzpmmZ8FebD60uZt6tb+Zix74a/Pm3eDJby27+0hgo67nqrhRLvtSO+WIW8COWvGjb4zVAzwwAW3+kdh + Lj7cTZfLMDsFucyGMfLoDtpkEUqIsPxyzKfQPL9nHof8c7Anb4LfkV+ImtwGy4txItpt6Nzz1yM+OYeL + V7YdXtSf8luGs/BoHSu6CRVeuKGzRl7Pb2kPx3eigC++m8ErPF5nUKLnvXu2z699tVWgPyrszKPfOX30 + 56ffSOozTvy0+J1Nv33roWW8cjEmO747wvauVb8eNYZ9kSNgzsLlPKkpUH2YaeDnHkg+/pnPgRR81P3Y + 9LoMtolEV+ve/3DHQPyJ8H16MuBsWOhBFH4wNsD6G+GXJFhDG5zvaxSbYcUkZ8PxRYGDQ5SfECn4wwvW + zy+cQSAUEPgvBSpRgP4zoja2d8D5/dBPIByYB+1nqcxlcYdWZOLNQgjGJjpjIEUUHBfF6MUvghGIkEFJ + DkHnxg5u0YJVlGEKU0dELIxrimdUIfjoGMZl2UKQo1PkCQ0px/Cp8YqTSgIH4WhHSHrMj4lkixMFea9I + 8pCTaUykt0IWyktyIZMT2qQkdXjK3eAIhy4UJR/NqJZPtJJPqVylC1n5R74473+7lCXsung9W6JylGgh + ZinneMzgJdOSIpNdMJNISliCTpre0+Qvt0U6LIGBl9lCIsFMiY8CAAAh+QQNFAAAACH5BA0UAAAALAAA + AABYAnQBgf///1a06fDkQgAAAAL+hI+py50RjHCUzooR3Ln7dn3iSJbmEZ7qqkJG9F0cq8D0A9gvvAVC + v3sFPamb8ViBFWnLFRB5akKnVGL1anxaXVTdglsCfyM/nVaMkWLXIpda9Q7P2Gm6/R6/6x9zjLbrZeY1 + MnjgllFosbfocAiV19aTyAjJaBlzmakxlARR6WSG1Df05oJWp8noiPTpITm52Jo6iyBLK2poYyooQXd6 + 9KrV9PSreGunNGXb+ae5fOwMvSgYLFnre2XdNxzBBcvwLB0JEF5R3jA6ey6ut87eZuLekQ5snbC0y9kh + /z5GrlyvWCZ+/bAQLNgIDht6eGqIEQgC4Y1VRw4yVCex38H+jDUUZoPYMMmIje/IUCEIMhVJjjdWsszh + sUpKO5C+RXxJyOQjFs2kucQZEyhPm6hk5iC6Js9MBT9v6WQ1FGbBpkJJUO13EROWnrFEjqyK6B/AFhyv + gtV6NtLSfQvXVlGKlGladD5Ogio7V2VeV3HRrsnKRmkJs3s82T0BGBrhvQ4Wk+jraiwyt8z8fonHeIfL + dZT1ZrbkeF7ix28LB3tsL0MpyNcYG5aslrXnz12hcUUs24qm0RqoqaaQu9feurA/8N4KOTTte8sZBNed + inehpasxz+0MPadQ5c2Fd990hTvwsGO6GXMeJe3xrzmfR/seEv5Rg7b9NMpaKihQ7Gz+21cV3x2AhQVW + H3BEmbeADIO4J+BQ7jWG2oMDyRcffBL+dkxKB75yT2pSWbffheCgBlaDy5mIDB0ollcMa3OUscNtlmW0 + 3oyIiAgahRV+h6M5BY2SG4e58JfgSzDuJERkZ62YGZN/qSjRQ+49hSSNRJ53lIyGLKnjjt1dKYKTnSS5 + wkY2iFmZKNVoCeZsXSbVZZv9RVkjhFmcKVEZPgjAZ59+/glooHy+AqgnGxQqaKKCTvgmlD+K2COWeyhK + aaWWJrrnpYEe2idCdW7iTW+/ALFgmZqeimqqqq7KaquuvgprrLKWMWuttvLJ6JYmPIFmgp/GKKSezoXa + G5eNEkj+oZzZHZvCQ/DgWdKVUgrpla4lHousfJH6iK13WVorGhe9ihrcKaf5Ecq13dJ3lobbcttts964 + OJ9Ytv1ar0NHkkfmduuyWxVgyob5bxEcYIfguFm6CJgszqr772G0uOVubfE61K9oUo1bZ2K2BGJsxMXt + FkiL37w758V85BsZRbNoWV5RNxYLschQZTjkJBANbFXE3PBnXq818uYwDjXbXJE4Qs5BD75GKOwoHzD7 + QyXJFFNnHMhHI91Sgd3o8mHMGBXMYmc9iDk1zTKja/R/XFf5ss6woJwe2THL9rWT6631cUdbv13mcIqJ + LAWxfOXAZNr6wDvPym4DnvR1dNf+vW7hPDCM+OThxuXWx7w8DnnX14kDddQYsxyW0zQonrGk/HLyteZP + hz776D4Rjk4uWX9rCeudqwWeNhmVPhfxGt/uM13gzsxzhJz35bnal8suOu0sGD8mO9gD7E/rIqkehe/L + Nr58jHlaX/1+CG0fXkKLMwO+HBSPz++o1DOBPv4Br4+7+6h3si+aiC9lu5OKLu6XvvyBCCfNk5jdhmW+ + zTUQXWv5HYkMB56pKDBwQkGgflSWu/cZKIBtCdt46HejUUVQIxv8IEc8SLkHhvB/BoofXxBULQw5T2pg + Y2ELY/gSGAIRhBAUIV1I2IX5LCU5uzLXDCZ4sx8OZn/n69/+fcpXQwQe7HU6lOBlQiFEgklxiiEans1q + ojvRIHEKW7QPCg10Hx5g8Rbs+5unwrhAGRbRhPBLCgZnSEAHDQGPbxwj46zEkjq2L3t7s6EF8gHHQjax + h3IcnCF7xhIock+Pe6ygIxtjCjdKUn5fRN4lxYhInCiyNNnzHgg+6atKXtFGhPAbsDTJwVPSkh24XKQV + T2jEEeHySDZhDT9OBsso6jKQWPEX0mryOVSgbAKQ9B8z4+ihVlpymaPEmTN/aU0+Qmiaf7wMKrN4y+el + cWzcvKbSCHm9Z85sndzaFjXnmEF3ikqcNERPL8nYzi7+yI7YqsTDfmPPtu3RPnC5pUP+EpPNXAX0kM0E + HThn6coiNQ8fwEREQ5XoxJ6UjHfvmShFeQnPeHLtE2CAHj8BGsyM3gSb+1yQudRGi1USNEMp1d8ZD9dP + jeLIYJEspDbk2DS8SdSkdhpoWnTqQFHGRQY+hcnJztk9q/IOSFdL5i6Z2hqs9LSqF/Uf34LqFxwuNA3U + KlvJWjoTBKnVS2CVi1Of+raiyZQ5L12WwG54QIwCkqRZZZ0y61qku4bsp8bZK3MkxNGOxtFg5cpYRL2a + R8TaVax5gWpUqzVVx7oOJJzzVl/HlIiQ5lSzTY3WWFUqT6CelUG2HKzyKIsbDxl2UqydqWv/Cae8Nla0 + vbgSbiX+G0J5PWheWd1mb/lKp8UylnxobU1wIovc7oUAliYz5XOhG92dMquA1UXBaVtb3vNuLJ93eShc + 2fndsNJIumW15kyoKRvsZtdx2+3Rmqa1C8yuLb72Cq9Fp8vF+6p3s/hUKHq8AzQizeuAwAUvgQt8R/om + b7gNNq8xzZnDBzdLFXOj63cVWWFfrpTDMUUBZe7JXtu2rb/kdQJNN3lhFL/WhZwMMVFgzEykzC0ZHf4I + OlV8YQx7Cq+A0ys9hbmF0+1XDArCY9oEbN4kZ/mFO85sfZUX41iyxaZsy5kOqqzFCQtZSQtWMoF12mWY + xhaoLf4HUtSwxNiRFM2ryyap2mr+VeGZGa751fKWX6jhLw/2xxsCM/xkKRyeScm9ATbzPhfXVgUb2rTz + FW9Bx/FkXw3YcSG2a/NCldrLJSnVIJ3wWke0aTcv2dPjBbVof3BSB2MyvVmLaO6e94fp2MSziVYsUIjN + ShanBNeuqy0ZNYk3OaFBawzWMlTjvGvh1jLUHWq2lHe9sztAO13VTvK1i73hGhfT26QGN7YBwe74cmZA + TG4yabiNUwuHU4wpfpkIkU1ruoTx3dle8bZbLJBWXLfIn4EFwA8MvAfXo3i0WwahBSvfMqOS4EaGdayP + OW0ocJw9kHtGNC/ThOjp2tS+0ZYXHg7xJj6ps6Ez+clxkPL+gwPrJpNO1jZifWg14YLmNb83Pqsm61ZW + Uy7OCiWP0ADzb4q8gSMnub39k1GXhaOaiUDzf78EdaBz2tgB/3TE+0qlc/Sh62lce7+NIvGgGxrFjIk6 + 3G4YTCInfVeJpeBywi72vUuj6gU3+Nl1JpyVDELhWM7EywMv+AsOve7Ws/nRzXurQcHKE5nvvOc/D/rQ + i35VnD+brTI1+tSrfvWs9xOnOI+oTrnk8TV2DRjsfmxBEjYqn8F95LTjPcBPfuz7lRy0xI69xueo4jIX + 5+LZqO80ZeZFkGff2013db7fNON34r70A1R9LreZf8zHDR9pD33i79v23rd2Jq+P5Oz+h+H80b8TcdhM + GyqHn8uE/6qiU3hzZkEZ/dcCZ7Z/4tdZvlc7uRVmbTE968dwiQR5kcdT5yJ18kdKdWYXvhZjBHg8EgB/ + 2mYlykcTlcd743czMOOB81cLIWh4BkZ0RQcKkNYO+dZuDVd/7vd+NiiB5XcXLmhaJdY72VBum7ZKFniB + IliAJOhbWUdtU7dyE/F8BziCu+VdJddnl4APrPYXXLF05leEcxdETJgtMsgTWghiOEA9huNqc0UiYaiD + O4iCpIM+KIGGzhaB7eVqINYM69Z3yBcigIYXJrg6cZdsPCg7B3Nx2CQiCmgkHSSIZkSI7YWHI9M6/8Rc + 5EKGjtj+g2MYiVXkg0v4bYeYb+9CLdRwc1Iod0bYQQuzgnCIYDbGg5ZoWQHxa90VLhrHiYPIQNWgSruY + S2eIb7QYcn12EX+FURCVg+ZmfEAYD8DIY3zHa2TlYMqSic1liK70X4AGjeSnHmT4NN04RIixe/EXahci + ZMW0JiziiuYxhYGHe844GOLoZWDYgAkEKlFYe8NSLi23QoHWfmLoGqpUhxNnYgCZhxhHNZPUh+sYkHGY + F1Z4h6GYhDkzi/gXQm2SapFIjz40ffLof+kWc0Oij9RlVh/REx35DrsIkvr0f6DIj7OoglKFHHq2iqz4 + dx6oklZXkd/mRDsnNWwDfwY4gcD+2JKj9oK5N08LE0HXOI0SyYA3KZDNcZTxFouPSF1PND09RFzDCAhE + SYX5V5VNiIUjKTZAaUCyNJYC95DM+HQeSZFY6XeOpmZiFQw7SYdPV3W4MolKCYBvBZTgGJUaKG8WQnh8 + GZed6EWDZJNruY84CXZ7iZchCZcppFWl4pUs5JhvIo6bWQuT2U0rOUmo84rGUJpN4nMch5hm6JexYVmn + CWueSSH0yIFaCJouWZm99jWVKJfTWFcdKZiU2WMwCQ/l6Jt5mZBghZebeZu4qT1EWDOyCR+guZbNKVC8 + mH4WBZXcdJtjaZ1I6Y1sBJvypWoQ2ShVyXjjWY/hmZ2tGVj+brkuLQkXvigfnkUV0nmdmamcIhOcTLGF + x6iewnmFQmeWK4SE3Ik0zrianjSdPZkF4hU7atafvcc1QIgrNPh9FEqQHeegtXiWl/SdvGkQnxhH4Neb + xylKHRpXEQqikDOUU4KfwSiJcFegJtmVSZmg7cEhAnE2BWiiitmerfmgUhSiryZwZ6BbM7Cab3giG0qj + HeqjLVSkRnppf3kP7kBu/3iixAmFNZpbAVqC6JMOv3IKS2p03/KAQsqlw+ekX6lAU1pDhIlV8rON46lT + 9xmjVjmDebpUYjpMDnJZaqpBKOmlUQGmOAaIC4GiJbWmGOlobfqVh2qOQOcYExqNyCn+EwFaqQU5gRIg + gLsJpIPKoZAKnYlJqVehlaGamwQKpcDAqZ1qpmpSnjPaqENaqBPxqkWJqlnKnqI6dYdaqZL6WcinHKWp + SHiKbiLXl9VXrKoqmuIpqaEhrLT4cc2Knb5qi/VWQqzJrHpwmuzzE9NKgQaJgfBordf6rMoag77ApzXY + qeRwrrRaiHeniuvKru2KfeYqbt/KptIolWSxFwIirrClq106ir0KsML4r+Ror96qhEUZpHJKR65Krfao + rd46sDLarYpKqgl7WHsasL2TsZdqhIthqePorx8bpZQ3DfiKLCP7iynSsSzoqmZCG+Jxss/5rvDKroJK + sw9qsxr+irGg+pLWhhJD5rM6BwxBi5pDu51CC6tHe2PoSrOzwim1Anutp7WZV6eot7VfC7ZhK7aK4rWu + krWFcrVjq3qwJ4WvcYJN24VMo4gu+3tRiw1Jy2JtK2kwO64ziFbl1KA7G6uuSrdtaaN6O4dUerGReozt + WLiFp6+E2qpcVIiGIiGP65xnKCP2cKBwa7fIcatFZX/ql7eey7hJNaYkWnZvJoChW3yV+7amiwt/Jmw7 + 07muK2+faqcKC33oyLd9q6OpSmFX9rTOBbEeW6JbeqbDqrRQa3/TNre1yUPTCqcDYbKPi6XUIw+Ym7l6 + e7vjkbMLWLA9q7yPSa8sCLPSGr3+Fou7zzW44jmzdDap48C9egq6dCqxx1C9tilu8fuB87s79Yte9MaQ + qoupG3uvzuqopDiazouxS0gM0rta7/q+8CavwFeGg8myAYO60Vu84ovA5FurhwvAvXaz7ZKO0DtW+wsa + 3IGv8xamsduw73e58sjClICzOom8iMqksiuHMhzD40vAqyq/wbWyDhwxLnjDsSCwCLvAJUzCIQs4EwQS + SzwpTYytxRnEcvCjb0N132DF7jqERLyU+dq8Pmwz1xfGBynCB2y+UPy6M5yg/bbGW9yyOvuzdly6SOzF + 91PHZmwablzEgPy/TeqnRhzCIivIhUzIUbzBfjo5f5wUiUP+cOWgxDvMx6FDnwQbuSQzoIOcwWeMxi00 + MJJsEHrzyYwcyqIsxbrUiBSMysaLd7yFyY98ScpiyuERy/rLxZTAvpn8QxeSy2+ByuFruAqpx6Bsy7fM + ycQ6MdXZfBbTy4a8THIyzCexyxPcw2LcwMAczBpLqU4hy8q8ytssx2MEWRTsTdrMyuW8vOcsRekMqzw1 + sdNMy0CcrKT8INdcsapQz3nMxu08uRu0z+q8zm5ia/eMz+1LOwU9zwfNqFrsy7g6ysHs0IkcHeyMwdJM + ifCszySrPokkNBqd0ArNuxTHTW2igHRbwWMc0SXNzfPq0QQNziU7ePAF0zG90P5LyjX+PXccg9N7rNMn + vbqaLM8YndEILdQBDdAM7cXN/HGDt2OW/NI7rcA97dPmGR1dRtV9KtP5LKbUGNUQ7dWOzNTmjLf5U8oP + TdYT3dTJibKyCNYuyjP8rLK7EdRLfdZoXb5q3SN2XbcTk9dPnL/rKddOncSBHc4FUtWEvdfvzNOafNdT + Kc5K/cbJbNVObD3vAtggHDeWTc6YTdSRPcf9zLpKA9qO3cijfdUVSjedzQQK81owXNZZiNg60niwfT2y + 3dihLdqsfcFTrDm6bSqoXdtm/dj23NdpLDvEDdIuvXwpC0+7OtDdAlzOHdd4fdz1U5Ln26/BXaGIvNg3 + vd1KN5H+T9ra/+LHx8vY543BmOnO3Ufa1h3fOWbc5S1ZByXeFpze9F3fbybVqf06PfffFN3fcVLYhm3f + 9CzgKXqwcJzZ42zdTlfgJ8bgvX2477natgre2PLBcwqZST3Yhfxevy3fHX4s/YndCu6wJK3Xi5rdrKrZ + 54lHKy5nl4Btape8G06xI/wmlxyWivzPkL1ChCGtB26YHG3TIu7iqlzkFW7bKB4nNR7kJCbhlJuPpOvZ + o5rFHk7l8OhvV+7gxXJ8PAy/Uo7bX56o2j3krAxpRr6vaO5zSk7ZQt7mEq2Gy7jlXI7H6u3W443jqRzF + FK7l+NiFMz7ldK7V0yDoGmc0L6f+tp13tpFO6ZFetpWO6Zmu6ZZy6ZuuKZ1een4CvDGeqWR8nooOn9B9 + 56p8jRcA53fc535u0iEO67z81tUUAq/esiNXpGo+1nZu65Dd6scM1ZOxyDQ+69/83KUa7Gf8XvdX6GId + 52KO4MmO1aS+FceuTQYqd2axIo7Z66gO4IHe6MjVczm331Y+4j8u7oUJ7E3u6B7qZrq+1euO2+3uvo5X + yeZcjLLm7feC4cny53U+xKs+5iYkLmRp2oHs3ik+8Ivev9S+Vn34r/9+L9Od2PjeWyay70tNbXFA75X9 + 8Oyu8ZrF8eWOjU9W5h7HwJ898olu7e6u6vYuovRHgRYf4CX+n5MvL/P+LPH3+JrRHvJtne73zvMWTu4G + r7jyXgk4/05DLfDRTfAtrvRpaIh6l2uK3d48nn8NP+44nuPIjfBYn/V7LthQbyFe3/Mzr/Yp72xkX/aG + 7hRCRJ1tn+9s3uD6ifDRrufSfvYm/nd2v/H1nvca+DDL4PQ5z/U4KPWpnvT4vWBag/hFL/KLP5CN//V4 + L/huCEgr373Y/vhQPhwpZeP56fPlLR3pAmShuezvbuaBD/n7GeaoX1pptPqsz+Ka//pdH/tMpTcrLLo5 + lAz8kfhbv/sfGfAmX/n4XkEZdPsCmvuhT/mMzyic/5tEb+J9ofo3Coty7/KWDxZHWfr+cV/waA/0CuX5 + PLnw0g/hKEzz17/85p+H5MZsoG//py/6VFT4sv/3zL9m4EEAQiB1uddclFNBenGOAWkvrU8cyYkr0SlM + 2dZ9sRVGu9mTnbOpE72vfCmcbWhL8YyOYpJ5QTY1S+iUKqyKnteEtJdF8mrcj5hF1ubOAHN6FmQ31m/5 + NH51n8X3HbhCpNbTsqAA52gK4Q4T3wipBP8yHBe+towYbxRN0iwxTTgiFzlD6UQVPpvyTCcpKx9JS9k2 + XbtkY2Vt1WxNk8j0fFRrI4AphJP0Bm89gnTliJE5m9tAMVL5VllHb5dhoANnS7U1ncXHZI2xKcxfJfuY + uBHLwV3+3Kc86+3TD+fHpUnxdyFTrbP271w/WPskeULIbmFDBvqO8EM3TSCuYxdd+bs2rp7DgR4XQox4 + 0Mm0GmFaYTQYjmM8VyJBtstFEp2uahYLEsxIM+O9mB9/ioNJwqU8k05OMsypU5TGGUNLKPzxE2rQF1U/ + FC0DiaI6nEs3rtSCNZlWZGStWtnJcmLXAw/GgsVkFgVapGnf4T0Lj+cGmxWrBoBp121cTk49EtZ7qRxb + CU6TKq0iUnFJPIfpCl28t/Hlx4g7+EBLOVdmEZUTbs6rmhTqz44TxkMQxC7pzldQ22MNd3fr27j9YpEK + FLjKUIivHhre23XvhzM9MzDrhvD+4J6w2SCP2dy55MPYD5jmLZHpcfBntIPk3v2r+eipjc6xPTLa+zfp + E7PHtF46ePHesfsPQCxswK8u5QTkTL98fkupohZcm6+p87RI8Bb+mIOuuP6SSwQiDL3aUA4LbQGRNROn + EjFEtTxM0Q+xVMyOxJcWZLBB41zcShEIZiQukR5V+JE9FDdDEchg0OhwR7kKMfDAJo/cr0b5NHRwRRaX + xPHHKJVAsDsi9SKSy/GuxDJLmSak0I4hp2SmtBgTBFFCRZwsITc22+wrzaUsNPFDGCeDEs887dvTuDpX + C+VPQ2OscMwWCTXszYIQTfQZJkfUs0L9wEyr07dUqtTSS0/+YTTQ+xb8NKhPubRA1OdKxFRGNZl4dRxV + qXImSldn7HTR7wptZEpct9P1IlvJpEVLQYNtAlnNIj0VmV1zVPLCZed4NFl62iQ2v2mPLa9EAcgt19xz + 0U1X3XXZbddddwV7V9556a23XA4EECxee/nt199/AQ5Y4IEJLtjgew9Od9+E9/mVTlpb8GnYaKWt0g8g + vW3vKfeafeGE5TilWNa5TsG4IYe97NgF3boVGVuOiTgyYx+tVU5Tj8PTVlGX0TS2kme3bfhl9G5mQSGg + b+VZ3BshRJrmpHsWUmUaZnPamZmFFodEqzV2SB/uuEayQJAnVnpjjtqQ2dOhN52aqLD+rzb7bK1hCBtr + sZe+T+en3xb5bgXpXlmwUsMkXGpJy0zG5b+vRVvwr1WDfEvYMttbWbkh3OdVfA0vMuomKafLchox13Fa + URWah/ELJLfZvjpH9610M/kyuoPWT+w8U8dE53l12XWtXAfcdyM+qqgsD8FAuKGenQRcYUfp8wzzLqx3 + tvBjvnnnyWlJuOVULzssVHl3KfbLue8+eEHuqTqL8MUfv5vywdF++/QzgL4X93PGW/5BX7Q77LkvIGb7 + Ham05ouOMOZ/IateFUanPAWGBj4GxB8DW+Ik+EVqg9khz3COtkC5HfBMCNHg9PLUQaJpimzpIyGkUoXC + FMpQWEX+O9+3Lsi6+M3NbzSEwvmGcEOv5VCHNVJhDx9YKzcliYgvLIQTi9hAirkDLTfEgf2sAkXyfCmJ + 0aKiB7f4jRxqsWiR66IXfWgELMLqMRckI8TwcsQRnrFuVswE/t6IOC5K0YJ8HBuV2ohHq9jRgQEUpB/r + +MRAupCI/nPOFxsJyRoucQ9ubGSXALiNS/LteXYQogzWqJ5NBi13howkHSNGyAoycpScXBsinSfJH6qy + C0LMWivzSErT4RKWqSRkC2PZyq6Z0ZS8LKYSZ5kDYLJylLkcEO2EyQ2ocK19wzPmJp3pytMIE5M85Jaz + 9JBNVM5xj97kpjbVR48ohfOal8xfpjTP6cj4TLIYghDnMQ9JPXPG85lPSiY45WlJbD6yl9HEZ4Fmac+B + LoZr7zwoP9GJwVqtU6Hu3ExDCfpQiA4TmggVHBPZ2MSFlnKfGw3pPAEasf6ttJtjtKg+azaOAgAAIfkE + DRQAAAAh+QQNFAAAACwAAAAAWAJ0AYH///9WtOnw5EIAAAAC/oSPqcu9EYBwdNJrIMS8O+uF4kiWCWim + 6npsQCRaGtvANBO5ra0FQr/LwHQp1O2I5GyMHmYJmBw5o9QqZmrNmqChCZFqq4Wf40fkN+a+yiSs9j1a + ltyhHht+wuvf9L1fMeNh9xaIEPb15DDTZ0jD+PcnN8cyCJlnicnymImXc2d2pkeEeEOq07dB2sbJ+iJh + snlRyRnbavt6i3nI42loU7uimmRHjIBVKByTGxm6SqmGCbwcPW2ZRoxt7PeJVIk4lcrjWN3ZLFWa7CdN + rs6+rbK+xT08qw04FKTpbiXpnAJNa5+7eALjwBOVrh2oXeMKHul3TkVCSAQdWqloEcPE/grlqsWa1yVj + MHMR/4G0hFEkkpQqcegjxG7TySYtyeDyF6fQMpY1X/aksfECT1lCdnYIeuVnHZLKbM6kqDRgVJNPhZZD + ikfmkaHsIDYlURXl1ExcMwI8eHXao7BJx+JgGtLmvrJuadY9yrYDXVlYtazNy/Fuo4rrdJLbK9gqub5K + AHNAzNcxBcZrk0DO5DWuCMZQE++5TEbyZNFtIWGTnM3uZMuJM6vGy/kPaM8LZoONrYh06VaGGydAygh3 + A9sIb5YUpHvLV9pwiNsS/rhab0VmXteI4hwm4c3J9WRn/p0T9OjSZ34CAhIVlfBgfBThLpK9Z/nWmnf1 + nXv6geDr/qO61gtffMx9NuBvWblj3lFrMACCKf0pBZd1GnXnXYEHWthChffx1ZgnRMhQD4UK0PfMdsi1 + ROJdKb5zYVf1NHLbLzqk9mBL7sGyGYoY2rejKy0WNB1qM1yj31Y2itYgfgL2mMWKe4i4m0NfJHejWGZV + WVIx16nkZF1ddvSjRcjcYBspXx5F0GlF+rgkkxe5CWVgR453CT93nMmXAHruyWeffu7ZQ58+aCDon4Ye + 2pmbbwpEJ5s8KjrcA00cCiihfwKJZX4Z7IDIkAYWQWmooo5Kaqmmnopqqqquymqrrorqw6uyzkprralC + UOqEC9aJoHnZoFFGIGnoCGkVeGoR/qdixTJ4z6dOlXHsPX9xepazjloUbVTZVpGsnMvW1myG8mzKa3lK + CrGmuOS2+e1KU03UrbLt2vMbLybtSu80uOpab7rrXuvQtj8JDBuHss07IihF/bPwfi6OJoxW6mZEcE3H + IpVQozghbIATwkqET7nPZXrPJzLZyy7HPo3c71ujkaVyvr40LNcY0f5HM7hKzJxyzO/lMmORyWg8ic8d + v+WvRjTfTDLPke4MY89Gb3yLN0F3mjQfUxtX7xqkhexw1RHmrHNkUVO8NVpVk8sLN9VSY7QbWj77C9BN + T/y0wXgXVHFPeA7t9mFbH+OCcIXXzdvY+OatN8B8p632u4JP/i23OAyv++W+Lsu72tnYQo6jW/Gu0Hei + mxs+xBBOEipGlLl5HjDoRY81euQ+04Fyzb2IN/ZEHzn7ti2lE/tu7barjHvut6FrfGSEuy6GvTR6JPvs + /s01OFF758g8Zoqf9NEh4mZtZfXL1UQ+3JRr/y9Y1FqjeXWcs4819uafrxLRi67PvuPIpd48lx2DPEpi + QwBDdz/NoO9zaUOF8rhzuAP64m7tY9aJFmQ5+yVQQiKR4PFixp98xKh7T4ofIAiooFRIKiYbVGD+PPhB + jlUGXfIAoP40NcD5TWhKIlRLCzkoJqkhj19eCw3zboi0HOoQYkTaXiuGZ7GfwDCGMoSa/hM7VEQkluxu + T5HGlIQ1RRT+cIlSEmIVreg/vHhtd3biIoBgE6xRaJGKY0wY+sKIwOwRETdDKhyyTAg7xjVugmzDo7fq + +IE7Eo9/REzjDnHFxihUq4voKKQPEQk9RhnyZw1UUA8hmIMKPgSQV7TjMyw5x+NgUpCY8hvowvfJpZwh + lNx6gccoCZRgOfJgqzykJgf2yguSTQrBo8odNlKRYWUofY/qpQXFtEk6nrGRi5sDM/8HjjcmInqXdCYr + 9xFNaSLsd117zzV3dkwgbjFrqbSeN00JpKlA0XSD3GV0bqjCFWZygh5iZykJ9M5nxlNbsoOl0yaBT/8F + pXK0LOdq/trpwoCGrYwEDaYwhxmSbqUzT69bY7/SUcwwSXSiv6wo5IDBQ3PG6Qcu4eiWUrdOa/VRKiMV + 2WLCubJOLiWQMThn506ozS1y6lqGEd8t5hnFVroFqbzcKUab4FPq6HOJpyHhQampoZqSFEEqqp4XeQpV + jQUJlyUrChh34auoclKrRxvoUr2ak1j2tFGqQOaL+NnEpy6ThgBla1sZ1dWCuu+fV1CrQw+LNJi2dEt8 + Xaxh3anV4eGUTOYrDGEL2526cggFbMnn+/jJCqYu8mGBtWiA7CmUx0rgPC/jbF4aelXVks6vMrvpZBti + WqdWk5i6Yan8ttQgwMzNo0ah7V97/iXbJ1Z2sKLswng0+zrX1myqwjPucUsqz+UaRK5hhQdrpRrckSjs + qNblGnaVItqm6na3zhWNMOYBAxCJ96PczapxmXrbteZWEIhtLywC17okgUxN1OqnB9M72vOiV7un1Wtq + /ytV+cl3vWosYmP9Ul7zgjO/+j0pc+v74FUAWJ8TJsR3tVZepEJUpDrlnrUavDM0tE7CDr7qh+m7P+uq + 2Ev3i4cBrdmG924OFysGcXK/yVb8vrXHN64xg8LSjBM7rcQmBkkqEZxgBQOTwRRurtL464XzoLVuITUm + cTtqMLLq2EZLhuvyXszfuMDXwNp47ItCOVxXVPWIEcQfbUXL/uE8CvbNYH3Zl2XARNiG+WsPXKOHjnjQ + Mctxn5Fl81iwrBBCO5m6cgLp06gEwLKGQ6GbgsJYKV1TQLeZyzAW7iY46ww6TU9TkdFJHMlY6RdeeoPJ + 7K9LdwMYRJcCxq22sYb/bOldM/lyIMbBI4wQbAsDNQtxClrZMqzqVbt5m4V+CyOgHZEil9CXyJZIJHic + wGReow7Hrm1fhN2aYWKaSyBjkbYHrRxCepIOHpNzoIct0BTXe7HdKO2y5XJhQ7sBHFWBt2dMluGt1tCo + wxDMvPvKbWnrDQtK9PIrrvZweAo8l8YTN4s9zOxmT4zjM9Z4nSl+l3pc3IynLLjFW9jr/mn/9Ni4WyYb + vNCIIyfOZhGX+Cih9G9xxs3cMI/wdZ/+UbC9XE1JzwnRi97uDRn84CPsdvuYEJymE1mFjXYrYmdO88Uk + Bu327brHP2mEr9o0XMWbe7mhOR+cD9jr1URBYcLwl6qvl+1o6wZsAb72H2Jk0juf6KpwdatY2WrylK+8 + 5S+PeVZBPlC2knzmPw/60Iu+85DXk+f/VPo+GR2NJ6PdKbAOdatvustbZ7Xb4ftMH9eWsf55PexLV2ZX + 6r3m773T6r8c+/H2/vh3V2rih0983l8iTbtH2vOxvmPBQ3bblPAyNyaQpvhWmHbVv28Hha5cxVfSFN/P + +g4l5vry/jdfStqnmu3NrHNwpSQo9Rcm4Qt/JdfHa4b3Y4nEEofTcnBGb7DnfuWRZ8I3gEfna3nAEsAi + ZHxHWh1jckN0JegXWupXcBmEagDyNv03fqtlgrUHWHkHfegggrimGnWVgsiXfOZ3fsaWZfgmgQuFWzL4 + JLVkdzbYgcH3OC14dCAlfrPFUwxheDg4cPI3f5hyVxCYbtxyEi5QgQqIWhN3a7J2bUWHX0QYO0b4EDtU + gxISR/HiRxZGdvcichEHaJ6VXSBYcRuXUwAzOgioZyskh7tkfAyYXnu2ZWQIFIbmLnCmho+WcF2THP/H + QHMyhQAYgU2IZkaCiJKkWAVmPI44/oYv9IALSIgjIWbJ0m+X9T8zom+z538M2ID3EYmSWIVgcDqsoXOZ + pVk++EiGyImd6Imf+IiTSA8t83ZUw3j4V1ZDJj/FBHis2IpSuIGWGIqFWGpaKGgTAx196IQVxH5UpxO7 + WITF84yURYeYeGbD6GcphXAJuBBTiB7ocS3eKBCEF464BYyYeEwi0m9ix24QE1dD1UOHB48aJDqDGIt2 + goxKaCD6eILVIVx3RWBQGIW9N49Kx0jbgI8LoXLqCFR8lFiqEJAD8XATWY331wnQKIzmSHAtpUUP+JEs + RBsiaX/cZ293aFXb6HQq2UZ9x4ze6IE5VpDnJo6890Xl6HIM/gkmZxiRddGTNVKPP0iPjHVWuzIKHRJA + 3biTBQKTEUWScEAhIZRFoYYv/IcQy8iKAbmUtBiNMPGUyseGu5OJy2CVZWkhWRlUPzmT4iQ0QSCGV0EM + LemSA3KWJmmXTkmTMTVUpkaXbJmYy/KRiwmDKAeUhWmYbDJq7HVTV4mVjplIY0QfXYlFeCZTKRhmgLgj + /eeXaHmXHWY2ykQsM4huc6mZXziYJbmWTPQvsalNrqlssBmYFFmRhOmb74OObYKbA3KaRVlcaUlttfky + vVGc8qKbC6YovTmSMikKzJlyj/ictHGcE0hTTUmbCIl4ALiXmNSd3qk+4MmV2DkuxKmK/ubZLtSpldw0 + L53JnunYiWU3UueZkjCTaK+4I/LRHXShm8+TlNOZmLckNNEZlMCpmuZGc4gJoFw3L3QJbU+xnRgWmcG5 + kPH4OhJaniBkNNE0mn2RocZiGpLphr+Yf/fIoN+pMpskY4whn8npoNaTWaDIaQxZo/fGMfNoZyeKmtcp + nuPJizcmpOS1NTRKYG7DOnvHJOxBJ3tRoJJEoT6DMXMzPVxwgIoipfeZcUeaS1v5o0gIZZGElGhEVEmq + TvwApk3mofaog5CDNZwxHQeIVj4Son8ZnhzqSbB4hJBZPX0UL3jqaII4h0RapDUHqC7IpuplPr3JE4iK + kmKKLCra/p6NKoF6xIwBR217mgvh0YjbRWssSg+PinGdGoT2+KLMZ6WYmm+mKoucqqqrOkrvST2K6qd/ + aqmv+pu1mqbP8JZJ1acP+oS9Woe/CqzEgQyt2oxGWp0Qqqm+ejvA+obtQY3ISo6wSmzfeKnKWqv2SZDf + yq20F6dquXTWCpHYKp3ouqhUkYPbWq3q6qpA2K7kuqulmnY2N6/0+qz8Oq72+q6xGq9yKqL++q9laFLL + +aZxRqxV1q/0KqCJ6qYNeqw6WmXOKpjWOrELy65hOhTO2rHjhLAJa66oimQKm3Ihe6+62i786a23uqMF + 232HWLMPWxzT5K/fgbIpK40ba3Wt/iqgGmux6sqzPYqiFVu0steyXNmzSbuF2GaRuxmMhbh/RCuqTwu1 + O1tCRGuyDtt9V0uxToumxQKz5/qz1je20AoyYuuxfzShAVqyX6uvQvW2acsgpWIpr3J6o+e3ssKNqfe3 + g0u4hWu4h2t6fSsoe4u4jcsngnspBbN4XsusIEqUcluyPPuaKiusFMSrTcuqAKa127esJem1wepiJOdb + +EmF7fGKBja6bdqplXu6qAu2nctHpzsbvuhohxq75Fa6TquC0jqmtpt/oBuCZ+GQcUuzmGlim8u2okh9 + Puqoy2uZvqu7c5sdv7uu3SqsBLu2uAtTbRNSzKutsxsMBRO+/sSLHeB7twP2ReHgKY9EuZk7teubnUO6 + j9QburzrEki7tUZ7v++bqUzJPfVLtv1UwK3LsQOMvKyrv3GGwKbhGIiJsw2cmhe8ogG8U9xLt3gLSv6b + q1xrkRrLFQEUfh7cme6VDTMlkALMDCJbSSgGwc3rIttIqKAaweFaHw9MqhpawxjbgbmYjSenqiQyuiF7 + QItHtTd4sZkmsd6jwWHaJBscsEFUvJCKwbowxXDKwRflw0wyj2cLkuJhw+cCxN7bxQhabcB7xKwQnSxr + xP3TxPEpIulAxnwKP0JMxVXsxVf8LQdmv3DsmpMKxZ9bxxW6xINMyNOaus2EyPgbn5C8/sWNfL4dmsaY + HMbLQp15PMKJI6s/PMc3KcmKPDqe3E0sg7Y1dMiRvMmmbL5iFLxiE7OJAEOWNbyyM6AIezO17HajTMqv + vKTlCob64stM23a3S8C6TMxwaMyrrGmpisbLDDqjSsJ2A8DzKUv0NM3CPDXWHMVwmc3a/D/c3M0MfD/j + gco2qsplDK9ajEX8y8z5eqCYAc3ILM37S810OrDo+8x67L7AbIjePKKksc6hqnYA3ceU/MjoHKkGzcsJ + PTnpa87muq/8bKzOC5fuzL7JLMprPM/RqtFAw9ELnM8WHcqR2s+kqXWprBx4tH/7jNEZ3RMvSjBVh6cw + PV8OrdL0/twrIG3GE23FJ93QF502vRXOl/nJAe3Rf3zMg4rUMNzSCE3R5dPRjlzNzbxmXOXSTC3Q53zJ + w7zSv/fTXb3QX62mRo2l4DzL+pJ0hpyeT5zSM+3TqTbVVF3VVj3Ucy3WWi2Ebi3U+Ut37QvCfB0zQnfQ + 6WcuS+3VaI1VYR2jFynVgM3YZ71XBnzVT13QNtvW/8zOQezYj33Pfb20I73RlR3NrZzZL3zUhF3Jnq2k + jFrRja3Qa43Zpg3bin2zs03bqB2jPunPXI3Xu83bqc3ake3HnS0dZg3aDL3agR3ZtZPYMLrcn23Sqi3X + JV2mmRzcd/2BeDtFVKrWYryJky3R/rGd13jI3bI92pO83nIJTsz9YeGIGDM43VFb1xJVMbg5qUx4vMbr + s3sN3RXq3Czt3d+d3qL0h/ldidrt3jTMwxmI3h1dP7IZk4Xt22KMqyKNfRI+4YL9W7ZalzJ73HCCjcCN + 26Cc4UW9pgE+4pxb2+S9gfcd18/h4Mbd4p564ey94hiSzTSu1zYe42qciteqSsk65D4eRkBe3MxQ4h9t + lDp+5Eje45nZ5M5M0k/O4ozo4rJM5fJdmkv+2rzR3lueDz/3wSIu4MONoFc+crSs5frsMsaXhQx742Hu + 5lu9NmUOxnzILDwBGieax2Ku3EF952a+MH9Y50o74BoOzwau/uKHLuf6hOYALuUAC+Y+nud/DceaPenl + ZCb16uXUat2Ojt1k3c6SrslnnnuOSyqQ6+qx/reKK+u1buu3jiq0juuuAuuVAiiIYukWLrAfDiebXs8Z + XOU0ONgLnubdy+O63ean3uFk7umrLpWh7uxu/LHVFciPPu2WzOeuLG13auR+ZpDEbupNnUBsbc+Q3XhF + PpUatuhHieDFEt6rxO5cXO1pbVXsNQUpMbTcDin0Xegpuu90LFeVLuzmDrf1XuzeXszgruqibUAKX+7k + /Lw13iOE/sYSn+QUX4AXP+9OHuQbb+y51ukHr5Hbg+1dPoJ/pPGaDvFSS+1xXk96VvEL/i/qjym8M88c + HJ/iG/rxKx9ILb+ZDE7coa2UJR/xhm7zB/nf/vNsY+2yBY6VTI/lTj/0M6uFFq/tL77HRP3zOh30yF7q + 796fovRqfn3uSi85WP/mWt/oDS59zRULAG836v6S/gnfHp/paZ/2Xs/zL1/1KA6YfA/pcn/2dc/4Rj/q + GC/0yS3zcK/nKT/3RL+jgk/4Xx/5hr/3MU/zQp7sGcnyOn/0HO7Akj+XiP/tov/3GBhLmv/4spv6nh9y + oF/5Nb/4g63sak+6DG/wVi8YMlr2FFzlZYvwzA78YB/2EA6YxN/3e777i1hPlR5tSA/jtq+UJFr8wY/u + vI/GDkLT/rPf+bcdb9Qd+lnO5ozf+z8H0diP4ea//Q6f9er//UXcn/dI9Zuf8c7fGuFEAAIi8Lj9YZST + VntxbkZ3f5RPtLgq7E4mZYRkZN+jjGmwvuZbr91dzH1B4RBHfK2MGGCkl0EiZbdlZ5qcQIdV63bBrWi9 + YfF3fGmWIWAV9vqABtSZOBkNOSfn9SN7nNf/jfzE+PowCO3cng41BCMakxalAIkiuR4nMWMuuSq38tje + nuw6i142h0hNM4NSA1dfrU6tWrOcJETdHINkozLviHhhG2hrhY19gimJkQ0733R3NVd/gY9jlqOttaWt + sXU+nXAfktNoyHm8zjETqOvUt1/f/n3aw/ycEcuLR+RHvOXgwxnjB1DPwB3+uFmg10VFonz6fkxLR5BJ + CoRCDFIstO3ivmYfHWDJGCyjhoXMNHY5c9JdSpcPj3WMaMhWSJF4EgJi+Y0gO58/d6Ip+TIWR0D2ag6D + 5iqnHpl04Pl0OZQo025HQZoJKYEqL6oKn074uieosLFVs8UMyygp2K0wrc6ctJartrLHzqLlaRer1rY2 + 4Mb9kPdWPWFA6VrSO9Vowb8U7tycqGpu4nGw2K1BS3hxU8yWSTxuM0yyYs9oQG94dRcg584er/4B95dN + Xq/rDK9LvfF1a76O/WZleFnM7cqT/7Cm6Lq3B+bBhZohZbF2/hnjOpHXUb68Obzn0oFfaWWxrvXTZbYP + xt5dNXtr3xWGrygiROalvNXjNj1Gqvte/s1qLLr5+rHvPvzyS263/wZJjzsAA/xtwFyuOem565LLLgwH + H4QwHrsWDAyEBb/DUDsNveCQIPg8dIBFyORbYzf4TDTpBhXZ4g/HbV5skUFjQiRuFE8maQG2DzoKkTMD + /evRRyeZaAmfooo8bxAUOWkRSg+3pNC8KXHCRBYWlUQtyC99rFLC4gqjcq4adcRyix3fS1NMAdkEUzCn + 4GxQzlnOzNPOGIGc8C037zzSqT8hCVTQQdGM7VGliPyQskX38xPCLt3j9NDcPg3TUrlO/mTUCEdBhRTB + Qlcdbs9EFUUv1Q25VNXQmFotU6BLS61UUwA9bS7YUBEdMVNYxlzP1w1RNdVWjHoKMgc6S9mVV1mdZUXL + ZyddU1RjsyU0x16XnfNJbmf1Ni5qq8Xr2jiPhSTNYV+jl1JEA7U3WUzLPdVOexcDGDA38/UtVnj7ReVf + dONVV5+CDSYV24SFaLZVhtMCaEZw031PgI9BDlnkkUku2eSTUR4ZjpRZbtnll0OGgx2Yaa7Z5ptxzlnn + nXnu2eecV/7Z5ASEdlmjfVELF8n+5sW4WBCpdFTg9hKcmGIa6rP4Yqcl0Sg1A6R+CWmEn76R6XO5hkhj + PNgdN6Wx/q9U2iQm0U4747WrQXVqEf9JumGy6N7WbpS8DkTvgA9OUVezEdA60sFr2HtgVg7v7BTmFuch + 8Lohj9wlutru2/J3Ocm8Qsel7NxKh09PffTEzf17aXQlX/GlsOBwvV7YAc1umdCPVt2cz+fJ/dbeLvd7 + WQdRF1d40Slq2wXXaoeeCvQyT6953Z93W2OZpj++O7jnXHzz+GjvXmKOkgyBueq9jz/25eljGP46U0LI + QOqbXt9GFMyHJIzdz135w1oK+Lcw/4mnIR4wXyq25zz1ieV29DkbADhDwKpdj1bIgaDTNIisz/EBMY1r + RwZtlbwO7ud8QxrgBOUHona4oAct/sSg+DjHwdLlpoSjeSEM2xWtJvxkg7LLYQwV5sEaZmaIEZQNEIPo + NRtG8WoKdM4KM2UgxDjxiVCEyu28gUIQLrBi3QJep7xIgRAOr1vcUuEscgXDNaopfVtLIe8OcqYlcNFa + aeSbFTtmPzLOo418jJAfXfTDQCpSh/4yoyFHhUgY1HGRYyyittrYuO7NsYvPIgwnoTVIzW0NknSU5A0p + KTdPivKApHweKHHYv0rabRMZOeMX79W5EGoNltarIuRqqYzHNVB1vcykLI1YTFb2Q3yl7MspjUnFV03w + Ega5pRq9pMxTolJVtpFkMFERtlzqcpvRDM0sN7nM2eHnmq/7quYq0ak+cBYvbFO05Du7eUwvVlOYFVNE + O4UFTXgmc5+XZBzlgPKjdOITUmcx5zCV0M/iHWihfnwoRb+1zUleMYmYFBI1EXlRjFZDo3/EZjj9OVJy + WjSfqiwoRymXUpMOTqShBGTZSko1JO4BpTNNGywBWtNEErSk/JTpRH3KtV6CRqgb/WVOubnTArWOWE4V + XlP3gkycQnWojdSBNxKqSZXSMo1YjWpGCVIAACH5BA0UAAAAIfkEDRQAAAAsAAAAAFgCdAGB////VrTp + 8ORCAAAAAv6Ej6nL7RCAcPO1gKPdfNUOhuJIMl+JpuqCGW1YZdp6zfSTKbmby/ML+d1Mw6JxhTkplCHZ + EcR8SqeNKPWqco4mNiqwNuyCuWLtQVy0Yte3JCW1Yy/l9Km6jq+hcWbs94zwl8Wncceyd2OYt8jgVoXi + wyghSUmiWEnXIuiQcWkUF3QFGmhz+YKYiKma4PhYErnouYopOztlA6TZ9VJbhPrkE/l1Z7aZZovZctfL + 2ofHjPwczbgbbJ0AjfR7BDtqYNXzs52SPU2j/AZpLFduvtbu/qoC/7p+e+1xyBN4RR8vEmFZPXvs/kXz + Z5DDOAsIm3ibBW4UwRUNE455kG1iQf6LEDmKolFxg0ZaTbCE9LjPUMaFbE6itPRSykiGmSz2Ykku5jl0 + rhziNKmTksuYM2nK0VA0FoikMIOq+5Zu6UNJQ51yqMpxatOjWjt2+FkCqzleGB0etMpIbDxnIPF0VVUL + bFi0UgOWlTpNLV0ie81K0duIaR1Zgrf2vRhVYeF+hwe7k6uYCmA9kEUuJlx5S+PAUHtGzrt54yy2bTJf + TWbNdGrNCkWH3jfJMyHTkl+3jEY6C+3TuAsLEuxpNxTboWLL5iR8KQzijJnruD327XN9y1u7blzoruV4 + k193X5Xc6FqWqJxoDO4YO8/jYLg7r/3+THjxj79ug5WYk7S+O/4Efnb3XWgBVjIfffVZFxkqJ+xR4AYD + 3pNdfu25F99fFRYH3T8jFaWLN2Q406CDdPWnHR8GPdgYiouEKOFj+E03EAICfIHPfk7loNJXCanYF49u + 2egRabTVKJ908OmE4133sXjMhRZWuNhcQf0Whl2gIRmhK7lBsKOTT/joFpN83SjEEShuA2aMxKTG4Ile + fulllKxZ9WKTdUyUJkDKCMBnn37y2UmfPvgZwJ+GHuonHXlataiJbaT3ZnUwioDon4NWyidKZBXJZRDV + RIALCpiOSmqppp6Kaqqqrspqq66+Ciuhsc5Ka6223looq5aBqmCQ63mKo0S8yudmpEY0uv6GmOwZWyKx + /JQG25gGbQpbMBc8SyGzQyArirLSaitiM7gkt0OvCcmwoDhd5VIsuG3RqZG337rbYhxyNhNtPhqi6ywP + M5ZXZrb05gSvBfcSPHCLnuarDcMyTgtqDJsoIk67CUsJ3k8THYzwxfMu7DAc/c7h4gEf6oscIP9w6xSy + f2hlD8fzeKxwufOx+3HGM/y7B8Ujm8NyUNyqi8i6cNG87MIy99uzi9kZQ3HFKyNtmC0d8qDuIUvPTDXK + OlxdZcjGWQ3Ev0kzbXHXHQyNVHFbgmxL0EAjV+cgIQdddqc5jywv12oPN9o6MfddtdqG2Bz23cjEMaPC + pPx85d9rH/5GeOGGO4phwyo/TPbjZ7uArcCSG0im6H8fPm7iGLaiyjDmYl45xqOHO+LUs4/NGeRPVcs6 + gal/nnnbW6dyO+1oxT7n7D6HrjmwvUvierNa72Nt3MUbf2PakkfNii+kaJJnNY573inYq8gtNLzIW365 + wb/v9PjzeUQ/vrMvry/99V6/NHxzt5vyPm0IoRMEwsbrcLC5BJ5Pf6QLEkrQFzkEkk83uXhbsnaRP31o + AX/YYyDJiMJB2Y0uOOMil70s+BEZ/QI9msCXVzwIvAN5BIIRlKDYSACKDg2LDS/LoNZS17+OwfCD/HsJ + Dc/yn8zBoVxB4JmRHqVCH36thDfMw/4RH5g9LF4vLi4UIOh4gsKdhKp+XQSWEitxxRlmUYvFw0z3oNXC + QpVRJqzI0WyoiLUFDnFvEItJGl+4Hd3hkF1yfOM9DAm8TTBRb2jcIx/Ho5M/6lFHzNON0pQQRAUWMoYp + 41Imk+dIk4Ewffq7yfdKs8FJfQKDUgzksELYmVBiQ1OffAcDb0IjE5YLk7eoYyvd9xxY4k6Ww9QQWiQ5 + SfvM0ResXCUiH8kCQ/JKmMUMpSRrmaEt+mWCzhTkEp+5v0BOMZnErGZ06ILMo5Xka3+hUTfPYEe6SQeb + kysn585FzXdpc5uVTEUAm3dGIoprmhurIlDsKUqL0DObbdQTO/6/5E7VQSCeA32oPIWC0ISeq0cehAYa + gkgGBdpNpPyIyIveFsYnZdSci8unPvfpUHD6s5/ygCcnwBGK++UwfvhLJ0euuNDrNHQE94MTzpDgy5qd + ooWc2lxQyQhDoLp0Wx2th0wpAjqDUlKrTKgeiBbyVI0iFKgCimpNSdqWMX7TpvVCygbxeFGhlpOsm/Gp + OnHITX9KDRJX/d5H+3BC/bhVrsSka4rMetasmklvcuphYAZr0UkJrqm2XClLM1ZWxOIVrVhV62YFuR6c + gMqv4lKKZS/buqlSVbNE9Wwa/rlOzkaIQ4zM1xPhdNoj3laNVbWqN8lRQd+iFYwaw89u/f63Ut3CbS92 + vStRl9lZmorEgI3oDFMgK11IJTcrqsUqa5+b3d1plTrDtVKUfiPM5trEV4dRbyP5esrXuhZB32hTbDLz + qaWaNrfs5egQ2/HXd9aWvhII8CTwuxqsEbRv7tUeJP37XX7+FrwTjmYUpxNSxYh2mpRVKX8VGtaDRji2 + fbVEM5NoNgwHVKLh9e5pUWu1uu4RwLmDImfJW18Lx2C6wi2th7fLXRn/V2Q4tmSLQ8eFh+7YC5T5cUaR + GWIR9zaxJaawYhFYitqWrZZvAemLY5mVw86YyJFda4XhJrE8QuW4Gl5udYE54HA+uYjtdSQ8jEEu3IH1 + ntUrsG8Ay/4mftTIq0lpsIOnVecxmzmvg+QlnGPZA1EuRr9+fWtgbQvoBo6VKGIe8qJv3ARMjoNacc7w + ZtGrtDjHMRwG5qSdOZ1oT4/0zNN1tKMUkWR1GGmexlWlQC3r0+76bcStLXOxba0f1Jq6x5iL6ZUn9mUw + hznWsiYzo5UD5oIqO6AsulklDd0lOkO42tYGNZyR/eYcsTlwUJXlnecnZEUj1cI1RXc0cR1nTV1ZrC8G + cIijLGVyM9vNeMm2wbYtbCvPMtow1sOEwuAda9q4w3Xh9y/wtGJ9yxnYqLx2ucdN7GKTVsJju4/ucp1x + EC882hVZN0AiLvFzvBnbK8+3yfYqaf7sYmkYDG/4wI0cb3nP+shX/YA9GkfwFNeNu1nuuVhcnuygC3wg + ZSDxPW3uZ6aqkE0Jd1/TGQ7lrg9b6CKresGpu2/OnWLhuqA1JT5a8y9DmTjgfq8AT0xgjSKiq1+vsQOv + Lvf+wvzVHSe6IJEObXpzT9w+dzc3oB71wRMefh6nN8rQUKlcnUrzt+q85z8P+tCLPvO5QpetOD/61Kt+ + 9axvPc8stXnUG4qkOJV2kVVu+36Lcbwkz2zMC592v19+4zt7tODrHu7xiH21v1edtjGi89zrLWrLrzHy + Dz2N6rt48sw09ziQXls1ZIlujOq59LM/WsmTPXEmp10XxH9+t/63lN+BZ7r22TflT9zwiYiPezOWN0qN + 53hMZxvXh1HAsEO3VwVtA3jG5mvTJoDNh08FOFcQgmdQ0DQmcoEPaDr1B2JEUn6F5QXpR3EMkYEUICRV + xm43d3/M5SuQByAVyGSw5SAn+AgP0YKRlWJgJ3jqN3XMdFQwIAiXkGYc2Ef054ETWHlGJILdwmEm9msf + 1GpM1n0NmIQQ02cuOIBO+ESgAH5IuHKoFnzCNTxiYIC284FL1zJN6AfFVQp/gG8iVYbe0Hbw5X9XiIU5 + KCncR4U6wnPvRx+f4kxgo4biZIW6R0spF0ky2C0V9zCAWCLiU4XCMx1al3GJZ37BBoKktP6FI5hEj3iH + NYd3DWMzRUOC+Pdh/JOFa8iGh7QrfFF8gThfu5NfmXSGaGh/hchGEoiAS2JzKEeEiLQbxdBhS0NqTgdC + q8iJvCgTpsiA+RCLEjKLylQGKfiKUXeLMZiMC3ZMjOgH08NZwEg607grf1U0nWQ0YJiK6gNwdsKMzQgI + YjgH0Xgc5HhwGzhzJMV1fZCNc7MXKaWNnfiNZmR5gBeHfDNInfRYymgeiHOI6zgierhx+ZcsWJdvSnCQ + tvVZwidOJ0Q0D8lxlCORURhyzXhx0hKM8WWRHDlydZFDrAaJmbgZMHiArdg6PZGSlHVdpjiGB/dDmIiM + oUGT+yWQyf6Akw0UUTRHHQ3yhCAJZELZjkLEh0Y5Jhmpk1NkX9eyks+VgBH4jv84kv1oRYtzlD5EadQj + LFimLHljfvEXkUxok1SJMlb5Rg75jIpIcKtEj0FJHFEpQutXQFWpaYrVdnY5at7COG3plm/JW0UZmPqS + k+OkZjvUlb6zlzzoHH4JSoD5dm8QmQ6oX0OJSoOimF5JS5q5h1P5mPnwmRVFLG+1grxnT2KZlwHpmNDj + mYNZJJAlDMuHml5Cm7VZQ6qJm49Al8HUlIy1fCiHmZmZg8GpKDH2S5hxis/Zk3P2HgBZk7dJDbq5mJxi + j8hQhCwXH7pITsTZnVBFQplmMSO5iP7lKZrI9ZUr8ksNV4eGt53u6Udv8pvt9j/SGUP+0J+RqJ+76CQD + SpIl+SP1KaDaZ3Tx2T6RgqBOWUqjsX0fh0Q5VaDrxSwT+p0qSTONshsN4aBOtaHYdyETSn0J5jGLMqIT + 548OGJcSOqBRoIseShI3OXZ2aJs+5jwnanfu0p+idnYD46IXyqMxyk4NaZ5dA53K9F53CaX0cqQ7mpC4 + +EzmWKEek17m44juUqUEoxolmo+coZ3g8qS9x0MHA6GsKJeiQnk9+nJLmDBpqqZeZy2D8yvipS1h+pc/ + Zz1VeDpdwyH4AIL8KHNUqqNSSWXDCVBUY6d6cnFJoYymGVk65f4c4YOkgApIwAepo4Nek7Z3E2dcbZqh + xcmoG6mkQOiks8OkR2JJ+2iq4vmmf3qlcipGOOpcoEpPLbeJW+mmqAqncbqqrIo0kcqhmVCZWiisw2qI + MtqpQAikuFWa3mmS05qgR7GpnHqeAmak1cobXCGbjZmeqXqrxeqtigqu1mqsumqlyrqtIteB+tei68qu + VYJzzEqf8eps6MoNIWqv9cli2EqhKfSuJUGmBlunAeufdNRp8yMcCOGuBfuoYMqwruawD3snxKNrCauw + 6nqx2VqRUlcTLzVI9zcZBMuxIUux8Eiya2qyqjqvj6eyB8uwPFKz6vixzpqkM6uXC8uyof4Isy87kDHb + r1g6ghMbnUErtEWrsSNLZvSghwOSs6h4s30IrSEoriMlteTKQyDLtB/aqOa2jFC7sjLrswgItmH7IEpr + rmrrjpL6U2GytkzbtrOao197LNzqqEmrrlXbjRBLgRfkCzRmoE74rWGrsxAyuE57DobrtYjrtgFnt49H + CI2LtW0AuXO7pk2aqYq7uOf6k76XuZRiKUnQKqjrequbKrIqe6wLu7Eru7NbKq8LK6qLKJdCu7uLKraL + KlNUDu6pF92wVIArsODatswxvHpZGcLLheVxnUQbst8hpdILo6MpF86btFPBdcoLumK7e95burkKFpM7 + kY8CM6V4pv6cC7oBYr5vW7Hw41Hvea04SIeee7hB677GC75o66lbBZf615BLyiC/up/fS7X8qxZMcooA + nL9LRIxEszHr66/TS6yX64PeI595x77YS1oGPFDTiqwdvLWk+68bzGMH/LyVei14q11sK7gZHL6wSklh + 2bkEKa9lq78rYrxVsVDz+74tm64aVr3JCsP7asIsZgeSasPwRnUsXMFXy8NBXE8nXFk+EcDw+sTFO7kj + nHwQm7MuEVYeRcX9m1qKxKT4S7ks6yNVK8YvPKUkjE9LgqnbWblvp7JDETsrkcW4x6dj2b6oAXLXi8Ip + /MAyBHRAcserqbVKXMjNFrkp2lMIDP4e+krIj/xwhwyfBYImlFzJgavBoYyxwBrFUOJt91qaIgqkJwFw + pqTDEqrIbNw5wZqosRx5KgwuYxzIAEq/lzx052uERpzLhOPFSFurmpzD0HK8eJm2cfLDuzzLuDxvVjzK + G1rMDkfDstwb0uxFtnzLyNyhIGy164o32juaROmTvfw3S3PNuLqokcxXHOTK6qw24dHOpdyswjwI4fET + 88zNhJoc93yqZNnHiezNLCnH9Xy2FhwdLkyt3UyvqMzM7kw1Aa246EPBVIGvGl2k4HwxHCPQtHpOHm0f + IYRL+hnSDmyrAQtBTTzDgHynzcylRivFY0HSSrlYEk22Ay05B/6T0tFK0Pps0HELTQpozPX8okeMyCg6 + thtpJcuMn926zvxKzsaU0J/2KK35iUyNNEm9yEst01aX0w2rgjyN1FSNvIgm1FhN1CL7zVz90V5NOY1s + 02sdI0sM1WUdqK4q12BJ13UN1zGN1v4GzxXd1wxt1YEdx3ur1Sod1gMTsRe9UV88zXDS2FtN0V1N0yw9 + 2Ufds8dw2RyMzx+92faqWygb0bh1nDj92EK60BdLQ+/LyizyAau92Jk906Vd1Wtx1X/MfLbt2H1LM/Ys + 2Ynt2Xwrf8YB3KJt1nE9Hz+9q4B93P6rT8v9rLgtpM+t1LxN2ZV9j1Uc2swt0oa9t18N1v6jLdjOGt7X + Ldz00iDQnbcPNt3UPWzWbcjY3aEPjdjGjd5HiwQYqdNl2t8HStvbLd8DLtYXat/33d7G8knwHaT83dze + bbILns74LcliAuF2zN0Y7t8KHuAIDdThjMlprVDzTd88C2MSi+KmfMX7LeHjLcrRG67fKbHLmTDPvMNK + 6OFinZUdZOEXPuH8yVA1HeMyDnF02kBBDslInt8vDtsn3uISRhCd7NYt19p9yWDmPdJZLtqTlT9M3uQj + HieEtdtHvtczrmZZm3tiPubRnaI03tamvS8em+QdLWdubkNOvskODcyprHzdXcsFyVV/bqkizuGmHGIb + nhYdrth4Dv450mEFev7W8U3gyMPo6MzLj37bWOZDlJ7JcJ6dk6zN6FfYn50yKwQ8b8zno67pdC7dgv7L + 5Kfq0MTqaS7Jr37mQd3bqA6Otf7nt07mzNGOmX7QjCzrGJo7Vh7sltvqxE7qMI5ZN93pM8fsVw4MQ96X + um7ivG7Xvl1j147tQ5zo2cnt1Yo3BR2/5AXstg63Up2Z5w7ouKHusw6OFklRRS265R7vMB3l3v7tTX2p + rSS7uMu7B596vovwC8/wDX+7Dt96Bp+7nKfwfTKd4yvvthHt/x6bp57iDCPuze6ylg6f/m7k79zr+y6Z + wmnjIZ7eUA4lJs/ZHZ/yCldkb+EJoP6O2XBcnjKvPxZN8zWf4C3pMH138Y3I0WV+7K762tBjzr6MwxNW + C/lukkkf50vfli5Dz8q+f1Ct81/K89Du892O8kJf7T1JEL3w9S8/1jGf8XxZ9smezCWW9pTi8r6ezcTe + 6Bwf95xe6dJV93af1xQU9hq/9zM/7dSOzZWokPousne7tG4/9oqp9fUO6dAa+Jvp1u++xtv+9uRpoZa/ + 88Ec8lU8yncO81r++XjYmaIv5HsezGZMoWey5SW/+oj4yR7f+AweXvCw9sit23N9+LCe+2Zv1ALeYvRA + 9Vqc91Bp9bt+zH6/0zfW7isduhhf3nr//Og+f8YPXbC/hAix/P7a2vnYwe8yCfBeLudGWP0qbui9VOL/ + eP5wH/py/1g2D2oN8fsCP+fmP/xkTwDwMXW5OVyUkyJRT4A4t+0uDoxC0Xy+kyrV1hXT12Tl2r7xhs7b + mL93El9lCChacMGE8rc4ApvR01N6YFaxWdtVi+q6uBkINVIkh0VcdFRTXX95bfhyXrev7hNy3kqUT81I + EP5awt5+9l4O+aYYARYdI6EkFRL53ghNMg3ILDEM8zxVICn1HElLU9NUxViRKESdHspi8UbualddXzbr + UHeBF361crswizlnaX9A7ZA/g1V65y7anqNVh7Ou3fx6Asui1EKxtF2nqbHVZ4C5pQ6Rwf5vm5rr3AXX + iSTN87PbdxfFU+YEAj98OnDdQ9hPiEJFDCEyMCgFHSN4xcwc0TBxnkRy3SIOPBWSpAGObFxdDEdQZKUA + Jz0enOMwZslBlGDa/JIzDquAVIZonMBTwThnNIvqvLlPKUSiOCre+anJg4SndGTCQYq1qRGmXfNdvbH1 + IYZa0/aIfbXQXjmlGsieUAs2Cbao6TicbVkzSz2tbm3GBUMX21wbgtmZ7ZQA7dCdVo+C7Pfnrh3DhAer + Q6xLH4y9fPtm/bL5sowNlDfLxRystIvU0PJSlQUZjt8ulcvugrubN268q1NqLgVJr0vHv0ETIx1sd7/W + wDk8lzY8tv5sxseRJ98GmFVzhtKh22L+WnznvD4SgX8kmhj3VL79hY/PnLrZRpWw+2K/XbKj3uR5UE8+ + tujDqbrzZttPC9va648RuDqISMABhRHuK288wy8//Tq6LbQHAXSPQossjCSg+5aiLQ8GsYBvFP/AmnDE + tQo00T4UI1RxRQUpEnGmED+ckUS7LtQjl0zSs7FD5RzUCsgghdyRSCVpEWiQJEfiEaUmmSRMxii/hKVI + gq75AMLyLtGyCRcTG+1MusIcMc6GqPwMECM8mZPFKpZz8kljopQymj8r9GKsWOZcb8kWEXuOTecClarE + IY1Lsz4CPeSSIkIXjNSySQVl7NEcEv41SU0Nv9GUjVHVKRU6V+3M7kpLYexj0ZVcU3VV4GBdrVdUaQX2 + 0/kw5e8dJ3n1VFbdsmQp2Eu149PHFpNV9jFQh01QUkkIMWq0afnkVFdrA1xHXFOdDbVWW4sNd1xEzhWH + XECxXTaZZ4kt9Nt344iXmXk7rbe2WK8FSEdj5UXWS4ChrHHb65o1+NYtj1UYTobB7Q7fezfONyk3M17T + 33IxTlgzToPw91euoqXY5C4vLpmeyQhNOWLWToUqZESqlZlUhv7cgdWf1/EW4Zkz9dVnkvMJWtQ6C8v5 + sD6PjnnpSSbjMEdKW5X6sJ3HCm/lpsYmGGlORlY0LK9Na7Tqhf6v3iIiIEsYmum1J16TX9PkK9smv7UN + 2CsDnWKbF7elFTtuuSEKMQS773ZOgMkpr9zyyzHPXHPNX9rc889BDz3zjV7qXPTTUU9d9dVZb93112GP + XfbVTZ8d9I1sj50ko6nd+zzvXl28BsCFBSltdHc3vAewG3mzZ+FfnPux49VOPu8cIN+whjGoPxt61aRf + MPvIQ+K9R98VGz/q78Fv/Lbuidee5U2Z9wN4xdlvE2iYCe/KfL3RRyf1rS9/sAmfu1IRPwPqq3cVa9sA + CVhANNFsU/BT2vUOFUAHOG9ACsTb3OKyEZ88j4Hnc6Brulc/CVbPfSKDlQc50zKoIG5rB/6S0wonmDV4 + sRBqF5ShzvqDETDhUH7mQgqEXAXD6P1wakE8UqCUiLPGQRBt7BoT/trVE8k8iopdI2IW7XLEDyRRSP/D + Hne4GKkoSmyKM6TRFTtoOPh08WNsomMEvzg/HbbtY/0bIhifhicbnk0Ud8RjHq24v29wkIdcgyIGefGh + OaZQcIhMJAU3+B88oaNUa2QcIPm4RdxQspKWbKQRNcK909ylk/My49cAo8mqeMqTHmvamXpTiAQy7ApX + MSS7cCmHFJCSXqas5SbVl6hj1gWUkXRPMHNJrmX2MCQKUabPeumyEwryatO8mSuhhbFXOnNaxOwYDr35 + SWoCLJs8K/7l4LBpylMq65pxa6cWfWROdX0xnTKo5+LuCcSG/dJ6luxnbr7ZTUjC4DUp06fW+FkyPeVv + nHd6J8d4aVCJ+hF6AYVlw2oITkQeVJdwFJ5HD0cem22UJAQt4iNN2tGFYgik8MxoHkm6REdKEKWpKmZI + pTnSmyaUp81EUCld+h2hijRiDx2hUW+EVJnl9Kf0LJJTn8pExfw0qUolIlWjE1N0zrQhKt3k0sCqQR+e + M6JQFRP2YnC/eH6VqcHCajSYcBIIynKe7KRrUIlqTLIa6VBDSCtCC3jYlw5MniXUo0+b6Fhx/tWqgW1s + T6XhkGkotn1FrexOG/tY5IUysn2ca0ViAcvW0I5WtJqgyWYV2hWXctat21ytZC+Z2RkaNrayVeFaH3Zb + QE4kHkgqAm3DitrP7lO4uO3rUV0LTa3ClKLLDS5DCgAAIfkEDRQAAAAh+QQNFAAAACwAAAAAWAJ0AYH/ + //9WtOnw5EIAAAAC/oSPqcvtGsSDoc6Lj8y8+w8iW0iWJhMc6bdV6/lYcJbKiKu6tf7awPubdUbCovEY + 8eCODyLzCV04o1QTDyTxUbUo4InbXQnA11tVek6rDZVpbKl2r+dYup0Gx+fP5JsX9kcBJOcARkV4l6iU + xKFDh6gYmQApObdiGAZAyaSFabSXM4lhE1i1WYnKxtgIepj6qnAK+wREeullI/tZWsXjy4VY9sMbpTtL + 19YhHHc8a9w8g/s77CiSSBzlq1pKKOPjCfUMvZVi3Go6/iqeToKNsf4FvkV9rtm1bfbIjlrOKv8Eb5+Q + gAIbzSAYop6zBtX82EFYEIQOXf/CRVQE8WKh/oOWKqr74A6gxjQyKIa0OPJhSiQnL2Q0mPJZyyMvVy6Y + qCdSTZvveEabOWHnhVsXZWL0WSTXKI8ikaYRqlEhC2QNBZo76jSehqFAUWYt9nURUw5QuXbVqezswLAJ + cZwa25RtXLmF4A65JvUjzERlIy7ZlPcp3bmz7A5FFylwCcUNrqIdbNbeBMNM+g623Jby5DOY/U2zoi0E + xUqdoSmtq5YwZI6FGe91Nc51AjJqR0sqfew0Q81LM+D++vtV6qnpqo7aXYcG6dU3X1DibSR4VumVoJMt + CBSbI4+yhhehjtf5ZO80mZc3H4qZQKYnlznongo81UFvYMn3ef8OeQ/5/kG2HGsBOCNgsh9rkDUEiXXR + ofcdg6rog91/YtHzRwvuBRHfgXAkWGCDDhqIXod3XRQaCvFI08MvIsLQHxQIbrbQhyx+uKJvPBnHxk8X + UljjjGxVkwUvCnoo4wktdgShT3v0GMSRyWX1Io4Y2lekjwwOeR2UtXiV2ExO6pjihViCWKVoRY7Z01dS + EtlllkjBMdEYLghA5xh13olnnnTCViYJXx4GCJNN9FlCN0bqmacviCL65hVwPorFopJOSmmlll6Kaaaa + bsppp55+qmcEoI5KaqmmnkppG6Di8aBLSqpYSw0qHPOnRrXyccetEcnBBZO2pLkSDjtOKaifhJqg/ms2 + xQ56rLGCzEZLiq4GK+w53tDarLM3hoSmm9nyl0l6u+QQUrJm7WDtJdh+S5xNeXXrLbs2hjtMtPkwG9W1 + MbSql7zxVueRPLJV5u+Iz/LLkrjv5TsTUVQWPK9wfxgCDrztQhzUbtLScu/CfjHWw7oYZ1wYuaUoZPHF + IzeGGsLjKoxGhIp5s6yZK+PbGjX46CxIzeDe7LHG9Ng7K87FgaxujECzDMu1pEx5sMhLx6zxsFrtzIC5 + PbOao9JTx9I0gUL6XOjXWW+2MRKzEaO1yRK6jErb+8itDDt0pwPYlpxMzHRsroXstdnWOJUymYIb8Fys + 0Sqentxr3tP1w4cP/v7m3JOLMp5De699iximyfb043PcPQ7pXFl1+VaAwixEHtVaoLXozXUtu2CpIw5l + QaZDk/faRLuNYbK1Q9DqDsvdLpm7hS+I/FvS/L4z7LnZlTTrKjW/ra3IJ5+55ix9g8+tw/veyfHYuzvS + 7rwrB+3enTgiPvWyVn/b9txHFZP93T3vPooDKyu/AHWML/pDX/oK+Jr/natnwsoR2aKWFr0tj2TbU98A + d2W/+9XHe0lx3V9g1ZHUPIp+16tgsFZiwWY4hoOt+waQtqHAdghwESaDWq4QmJIHEsyEdWvfLpI2Q16p + 4X8NgRRWzpdDm6QwcKdjoY4cIr3Z9YKIKMKQ/g6phsR8KTGDMsGFiwKkLyFOUUQCnGDQsvgxniyRiavD + WgeF0Q8pfnFIToshsrg4EjOCBYdp8d33XKfByC2uhX5MEg/TiJ8MBrJ7TgQg5PpnhfQY74Z4RGQiK9nH + m4RQjj/8QnOuCDZMrgeUqkndOk4GylYIamAl4uToFLlI00wHluKg2BXl9MlO+mNoyLEhZxSpPj3+UpSs + MNEacEkBXS6wkTAs4SHXE5Y1srE3yYwDxZJSLx9yboSoFCbugGlJp0hzmk3UJmeuGQ1fqvMzvIwcGI9J + ywixZZyS8081n9JAcgVKneHy4L1I+U1ifk4u9OyXRPhmTePYcVb/0IY//hnJJz7Ghi4FzdBivHjMZSy0 + Xu0x3jut5weyVdSi7AAoYsC5mEL+UqHkWRMoikgzhgRhgiONGzQJCstYcq1oJBlDOxc6Sc0hlHhwy+ZG + pyXQZph0mElVgkpNobeism9igNtXmEL6ynjuw5vw1GpKLzgPhVGGhL9CmzaParCmtmape0TpRZkJPcbR + cKj8ZGAzCejV4mQzmjmFyPus2THDkDVtMMKoM9U6PbbuMK8JuSc5CEs9QRKrK389rES3Os+c6pR9Tx0k + TyV7uvKBFqLVAGVNbUqizPb1ap39HgcpK9mYeqYM21neaVErT75q1q+PdJETwMc1w3KrozxDKxbd/jpK + 1a42kr3lxBSeNtWooikQFrtt/Uik2MUity29jNZzQfpJ4Y4NJLk8D2O3ml3zbrexMs3Gc6u6wajWtR30 + MtxlMavc89qzubv47mg1KSt+jakeaLLudbGb3/VKZCOLe69UOTdTWxQIjMQQ2H8xt1z86TbDF0UlxwLK + U24Bz43jcWGJQMgjEp9Rv/gFjmZB/FZX/gTGRoURhcBaF4TVFl1pi5UR+8ZhvyRYwdzVJCdobEXtXBAu + DgtFGYnn0F5RMMjYGTJi99taTyKZhETtrh4qph3advm4LC6pla/sVBmDRnXkq3COyVvOYgoyEAY+sIY3 + TGXmOlbLbM7HeL28/lc+f1WddX5MHnH6YqGgc8Z9dnJ7Aa1UXhTa0Ae1Q3rVm+dBj1nPSJ7po42JWWC8 + uNNLAeilmZfol0EYNBWa3cnefNNQpjozHk4YomeNTQg2ttUABrWRqyxrXLMarprG824/Ed4Yk9nTRqbq + g0tGOWF3GFcUHTWpi/xrLC97htCScqCPphtpv1Ft1bY2VIREX6M5EMDPC6rfvDBpSiuzdZex9mYXvE72 + rth6LG3lQBud6aNBJt5HpDd19Q1krJKvzc+mimMJjtfUDtze535puvfNs2zzN2cAL/O/623uP276NQkH + rzu4imWIR5yQvmKOyik57ixvcMomR5ykVIWq/pzrfOc87zmqVBWnU4nK50QvutGPjnROzQlPQ78Uziu1 + 8eDBOtId9/guv71P87zcsk8k9p4rbeRglFQ8FB/lqds6aswA8jhZJ2owzi7HrRty7Fq3971ZS9y2Q+vt + cFd3wKne97WUvRfgxTHCzSB2ut8djegNvH3/zmgwrwiViRf44m9nQeNKLe18QNfUAQHpz0702mhe68Tt + /pt8qpnTUKbrhXEbcuyyEylyn3s2QDu+Nw7V8S5EPcMcbyS7Xx70/HvIktDr9WfGGuSDJ8nabyhavUab + 8wg2fP58v4YlaP5nrqe33od/uczPnvbCB4+/Sx18G8oW23QMtrgbn3sM/jY/+/N9w34slPxSe3Gsy7Z6 + pLdvUO83RQt2VAOicG/leR+VSdMngMiHcicVe5ZwUB1igKLHXU/mZ73na6R3X2ZnNQeEfdmXHT1Sga/3 + ZZ1TXz8zf78HgAVHfUM0giQYYt6hLzAkgyHIgi24ci/ofP8RYEQCXxEEOD8WY7WXVUn0gdqDgzBof1x2 + RyHmH3zjbTMXd+WnPOeHQlZoaWHQfWUDhUL4dVJFYehWdf4nM8CXVjwogn72aennTn1EXa9mTjwye0bY + VYTzgJjWgAN4Yxv4hG9IcnPoNv02NHtgh+qhJeKkhfoRGFgyIEFoY2HIYBkXOhgWgblDfkvocHH2/ofa + J2flpX8m1k7gF34/ooOIuIKyJHjF9YntA1sMxGuaiId56IapqFSrWDxv02wtZIjCR4rhVBS+SDoi8ls1 + qGJ15YS7FmiHiIqmiIYYd2wtVotF8ysPlWxHVoZmeIUgKIvTY18oOEOEpWuElI1EpibPeDaLKH1WkoEc + xW0n90UMuIezqITdCG3sKEnv5FGKkAfMaDurQYs2Y49Ng4usQxSneC5uIYzmgZDadYmjh4935Y7uNh+F + p43ZE4wLaWYRWUNj+IP8gI6ZCJABqTIPeYsc+SBFZIFoEZJqFCItWY7mmApDkjjEsj71p3waApP++I+q + iJL6BIkWBZPXxxxY/khOkFcdBWlXDRdxQ5mRV0KS/zKPSfl4DGVYkuOU8icjUYlUtkiQVbkv68KV5VYl + Y1lyUykJxIhvMRJ/X8OMZtl/SJmWYEmFQmmCpUgoDakt6Gc2dEOB2EZSQcl4ZRJ4iYNiS+M4dPl55pN/ + ffkteqmCIeUJcFk66/iHaVZPkmmDWWlnzQKXxdiKI5OYPwlRsAdFrwOZLuYvp5YFTLl67NI2agl2AShW + 44gxPKlx4aFAbfkhsbkWZ1GYfth6lHmUeclWaJWaRJkbSslZtNmcxOmcj6kWsEKR2/SLUZctvkmakUhS + a3abKwMgJ+ZvVfES0GmawlGSHDiJ0Tmb/oKb/nUJiqFIZ4xmgcnJnnMZmfLYnOc5bQXzniW2Ne1piayn + evbZneiZnzG5nvw5bPLyn5GRcQ7JatTJm5d0j1J5nVjXmSfCmWg3NRWaoB2GhR26lwgaovBAnGVhoHbj + iyUKgysKcyZ6otxpkVx3Ig7aogI5HySahvygo+q5oIyJbLCZo0+yhhp6azPpogGRoi6Co0UaovPQZKuh + K8MxBUy6ebn2LQ9anO5ToyKppD+aoThpo6BHpFDao3y4kmd2DZd5nTDalarWLFyamfpRdzJqpBnapLe3 + pWiapsiAHn9yfwPKl3U6pNnppxgqgXdKlV6ooJK4oXLaJ3TapeQQqCBZ/oundJNzNKeJ+qdDxCBOoiBE + oKkq9Fid6qkRw4iX2ibsWEvAVxogOkupCix2yqp4QSS1VJkkQSiUaqgdFHpkaaurqKubSniTSqu1ujnC + yXxbiGrFaqqd16vJGqdHequbmKsRtKtqWiW+ep+PxaOKeqzPGpqVGijh+oTmiaqrGqqWxiRZYA7PmHrq + ylTUepY96CDyUSx2soDRCq706qH26n7e1zLtuqgAEZ5403myaqECG5fKVjXoqqzUhrCa0nRJh7GIQqEX + m7Ed67EfC7Ih+3QaG3Qha7KmwrE5N4IsOkcbA6cx6rCECqq9SX+HwB7oaBkKSFQSS3Mx+6jYBLB6/sin + xYA0LPtHtjR+qumzMnuqMhIcIgUyltM/Y+ORQRulMauvPPupkkow2YE6aiMmS5KET7m0P6ul+TqzrhC1 + UsuLOmuDXPiyzOmzWau1E+ukiBEwX3uunphksjO2Rlu2QMp2hcqolgqB+2msEyqZKlJiVguNWIurBjuu + EYW4/ro4SStTcTuNZZsfjrud59qTyoGzUjqK5aqVgTum3nmt0EO5oQW40ioWybitqNsfdduztlavOaGw + NRuFmJulS1u7mhu6uHu4pvurrDtbNCO8t+uwR7K8xQuszWi83yoxvbKx6eWtQsquVDq0w7tTs+s3EKpP + Lji3mHp6dyu9gfi7/t4oQ+QLuWEqrMSbu9NLvT7KWkfIuXhqbIeavoO7uw7ygNkbqfzYrFwLvW30vwA8 + YMwrsFUav9HbvW+qO4R5tukYuFVqu4JLQ/jbQ2x7JneYvxyntAbcutTkwWfyQAIsbzNpu33xQPShbQlc + liKFuqmrLCNMjoarwYJouYTpMyrsvvALpjkcVjtsfeZalCkDxDsYNoropRysvolrnEaZns1rmVv0xCDc + wSe8mopJq6PZsG0LxVsswwVTIEsMsyKMxchmMdxQbOBrxp/7xZbnkvLrvd9bxl28ue87Uc+bp6BLsam7 + kzdjHWhcpizsuQ+bGYfMiVK8moNKuxtZxzE3/sZXl8d67KghHL6TLMaVTMaOLC/QYci2t5xrzL9afHg9 + DDHkMcqe/JXKCcH9C2eXHMpuWr7SWI/kpstFU56jS8i2zMdXTLaxHFY14cvgCcxWjHywTLCofHGgXMvJ + TK27Q6IuTKZsorqqHMfSbECcLMm5TMl3nMrHyy6QHBYSG0zMTJ+yPM4Husp7bK/pzI2nLM7tzKDRnMnB + jMsTbMcHDLFIPMPwPM0SN8xEXM/PDNAfLNDJSs2cmbOkLGgJvZVynKimk8j6eb8HDZjkfCyjesHANs/0 + 7M+sV78BTdF+Ss3qnE6ffLUk7c6e6YgfDdIF3cwavdEv3dEr0so2LcSn/ivSYZkaD72+xonNyrx8Pl3B + Ix3RON0nBSbTM83Py8rTN33PZSm08UzQUY285NYZjvee8LLT80vHeou+Sp3RVa3ApYTVWc3FJCyhu8zU + ULmvTw3Vr9vPak3M2ruVyxLWZn2hbZ3UAXvXQSzXgr3WQobUIv2uzsfRSVzCh13XtLzSPHzNFjy5eg3A + fl3Rd0bWdgzWaYvWRanZKF19Wt3P7bG1bs3IIznaaCrPiV3TMoek97rVTHwlYg3ZimfacF1DKcjAHxba + 5+yaCz3HyUXTgX0cQEEdZvlyqtfaOTqMF23EmBl1H1mtl03YcsGwVVzc33zc67x61u133JrdzujK/p56 + N9JttjHMKl4yrCt8IKtN2mMNzj/dPe7trAOs3QDV11xykllY1rqL39ha3uco367t3fWN3DM34Eii39p9 + 4FDqOOGqdhtc2dM92QVu4Oe92R8H4FK9U8odufBNF/wNvBD54SAeZyLepg8u3BDd3aVsyoPdWw3uri6u + JhFepNo547xdsHeJ0Uyo4XgI46kaO+iqdg1zlb/dBCibsicL5aXy5FFO5VVu5T935VA+spOy5VPOKH/8 + xs48GKTU33jdqt6c15DGFAFhzGylcmR+4jLe4wsOQa5BEIpmUm9uWnHexGFM5wc4vnab2uyN2yXO4UsT + 03+d4n8ukYC+khBR/nE6fiNF/qF/KeeLzujO/aXrTdvte+iNQukIfukqvdSQCuSc3ukydEshIunqyMJD + DN6mPtuKLK4N+twnFOoSzr5oftYjJ+tMC+ax7d+Gnus7PuohbabwKdsDm8/zNuwQXuzQfewKruqPdnI2 + Tty9jmrxHe0tKjywTtXYOdwYPt6MftK4/unS/spzTuhB6uuP66I07sUYKeborejI3u7uTtm0Lqbynu30 + nu6ubr+8bsl4nJvw3uwqftWEY9sd3ueYbuFRfMTMPu/ZvPCVk8b2Pu27Td0Sv6aWffH2/e/o3u0DScDs + bsId/+tBfu5hLrcY3+om2dOwnfIqv+8UX9TA/v3WDJ/xDr/xkm1/4f7x/M7NaV7xnB3wJp8YpB6WCP3u + qX70Lt/yiB3zarjuNL+YNj/0RD/y2j71R13vok51320i1uFmtZ7z2LjzAF/yVn/vQG+bs3zwCafEjL32 + 3dzzui7Mdq3s+e6D0vG0zz7pQ670aTmU8Zrhy96Yae/jUa/beW/sCQ7HTe/SW+8H4JF6gk/ylCTe3r7P + k6/vEX/zayMfuFH3RE7ier/32tz3LG35wP7Yjf/1u074XvnwcL/yNFqj4Zb0Ql/0kV31ctmouD/6CFz8 + JVH7Uv/7YA/56i75Q92GzPpgDYXqLy/yy//8wV96My/Rs35hZ4/2t76W/iHP/M0v8CjO+q1fmsUP+1P9 + z9ZP9anv+bkFzaFv/OzP8u7v9PAPbnGtkcBPAPAxdblVnAtRzmYpgpl3tr3wwMQMLNF0IdX2ceFYnruT + vkd8trmAZXyKHyIY4ulMyMRQdlS6SMwnxTm1XmNVrKi49WgvKilg/PFSrV0c+AwkR9vo+JzeYNdXeMc9 + nxqXF/iwBMUAVQi9fBQXF/VeHCHbEPUM5yYNKt00vyIPLkPUbj7TFDsjRk1Ta1QlWAEuMzeFRFCRanue + bnFKXc16f1t0E2O9PomXmI5fVYUjlFc7Q4E9p6tprTFdYVukjptF05S+Cxuxqc3R7cyfr7bFZKFT/sfh + aeZLeMnSl/X5z63ZrbhDkcxbL3vIxNWRpu9gvy0NkQDMdY8bvSTawtmis5Chw34QdUhMCApKn2sGp4jc + M0dlJ5AeJ2JruQaUyB8cTwF7iRPGSyE80/mEqUPojJn1OuArNKtE0UMZiZ4BGnQoVZnMKCiFgUFrvF8+ + jyZwWq6qAadlXZyNEbaJM7Zv4KZQKxcqzStdh85Fi0JvRVNg3o6Q2JdvypGk9vpLjFFm4GCtUFrb6bjo + VH6EF3PAPFDeBct0Np909k7jXcd4Qmde2fhvhcimxvBhd7ry6TqpVfv6Z7spZMbYJpe+uxh37ke7W4f5 + bW6n8LplixvXsI63/miTWF1Jae78yWfm0juvc+kbe3bt3Q8/rxpdOvsM3tuRD99RCXwjW+xXc597f9bx + FsGLDz3u6qtOkgAh6W+0BJVD8MD60jNsLwWJS8dAzRp0sJjuKMMvMQo/tPBCOZjS8MGIIoxoxIdMvE2f + /Oz6qcUTQ0oRxQlntIQfGJGSMcczIKJtuBB/BLKfFQPxsUgWVSRwl8xAxHFH1BBacsMCnaQBySutnCLK + BXUUrEsan4wKQtW+zMuhLafLYUwjz4yxRjTfjGlK0Nysk8s55byBTSb17BOdP/fJJ9BiBEhU0UUZbdRR + RwN4VNJJKa3UUgEiVeTSTTnt1NNPQQ1V1FFJ/i3V1FMfjRRVUFVd1dVGDwVTUG7IqjDWHu98kNDCbs0Q + HKMm4FGyXnfwiE0IhI0jTVaElIER45b9CKYtkUUn2lSSzclZvKQk9jFjJcmWTG9LnPWeYHcdhNxv1wQy + 3d7Wla/YrWqFMl66jB1R3HHvJaJDKLjttl9OpsViXzgHBrAnet8FNGESwU3Jh2sLfbhKcz04eFiLIW7X + MIopnkbj455p2GGOdVvTtiBARtnXeeMiCcGQgRtqZQuupbmaZmNOSkOddZr2NF5adhmIf3vGxUGgvyq4 + ScWmYVrkkfIz+WSjzXLaTxZytriSkcXChBirr8ZaakOBTXLje4vIpNlY/sDWD+vjPCYHr2jP/odqt2fM + O7l8s2IkiHrVlntut/Y2hOw9zRYap1J4CTjstQ+XFynBLQfP7//y7QJzdqOu/L232x6cq8XLRnnzZ3EN + WvT37Iz8875F31zsX0N/HfYI41ZzbtttZAX4q+zMc8zhXSR2WeSRSxF1PZgPs9c0o9e7eLSPP7z6LAzX + PSnbbOjdo+1Tr5N672V2Xnz6XCY/re7R74G3I56XXvXp4Y9/dC9XqJ/fhN33FNfp73sBuc6PpLa++8Tq + SwGkDv/KVSQHBi97AyRgASEopi5NMEsbzN0Fa5LBbFSQYxxc4GsOCEJ/iVCB1mofAy2YQhXeLoMtnPzO + /QIVJROKaH5v8J/9BrZDDDVthn6YSSgkh8ASHkqHmSviChlWDiF2rF9T1NZynjiQlizEiuqwWBdTVp4s + koZedHsTGPGlJxCh8UVbHAIbJxfEHBJxjLRyVuHO+DA4tkl4dVzLtn6wx6yh5UKCrNh8/FgShuHRSsCz + 4SBJKMZE2vFcUIxjJNdlSAoZ8khaLF0Yl8RJKkoQhQ4pAAAh+QQNFAAAACH5BA0UAAAALAAAAABYAnQB + gf////DkQla06QAAAAL+hI+py+0XHhBUWhuv3rx7lH3iSDrVJHwRdZZW625sqrDIbMxwC0+xG1oEf8Ri + bLiwGRnIpfMJaEKnJZwoQKPeLr1Y15TFZm9WsvYiNaTP7OPru1y35xi6XVPG59vfMcoJRwYj1+B3B+FA + eLgoJKGjpch4GCl5RhOYdEJp1IO5pJSpQMljuLi2WWmnuPeEmnrm+spplnPpN7joSaWDk/Ilt1c6+RAr + S0XI6lRsrMycW8MbLZorzGeVrFZ40il76vy6Wm20/F1EXi4ivnFO4lvp+5jIQJqgTueNPvwACpnPyO4P + zw+AH7D5SxOvnjF8Adkgs2eu4R2CEvcNvKPrYMH+hcQqHnMEMaLHNhRH1hBpzeQ0DyFJdlQ5DkzLizD7 + 1fyRcR2dbTOZxeoJS95NN9qAlig5lEnSEQav2Elo8uc3hks9rDFKtGpMrTL4oXyac2oHrB+FctVwlSwJ + pGejtH1TlppaU2Pntnr51myoiXlpfrM7D7AEtgXDtvMBhIPhOXIIawysr29iY16JLHb6KlrldPA261SM + jqpkRJkEWx09mZnndqYHB2wKsvQIVK3j6B0t5TLcOqjX9t7isiHsvcRPy8jXuHfu2h0cn3X+lzleiUDV + XeOwSfrXRpKXS4JeFbxq7bdfj9WzeqVA5NPbNtG9/Xdz+YgZm+xptIKuIJj+yBMRzdV7/qFB32zywefb + fS3pxtNmGUhTz4BZKeUeZP8UiFlvElKoEi9geNEFP5ptOCF3Wnl3IYbG/UaiekNhU1svpUAoUXLh1Qcc + XSquqCFfXHmFYGziqdJeTWLc0mIDQ954YJIgtAXKhkuyhJWNLwbz3Y4qFOgkaVAOV2Jm8FkJEwsBHHkm + BWeuyWabbG6l5Wf+BKkQkXH+V8g4bu55pJl8/gnomwr+gcI2VgWKaKKKLspoo44+Cmmkkk6KqJqUXopp + pppu+qilmaJXy3zlvRaPEnSmdieB9HXpZaqo0lLnFPRgV2Q+HgLHagJTMnlgZK6+WoshG0bZE5nmAXn+ + SZa/qnpTTrlmsyywwUa4yxjpmcjhnJ1R++yT0dY60rWE+vrtloFZSyKScmaLjiZJ5KBsuUqOp5h1px4l + r4HnZnHvbgeERciuhbUaar/65ottKp1U44nBCSLMIzT/tsgNWuDK0gIStsQLsbcYCyJMeg4/3PG6somL + E7XMskuvGuqOHHHJbkVnKikhomyfzBbvox/OVajM27zl8KsxvBzrLHBsiPGLIzTduqbzzjL1bEmEEBmL + cRgSN+1j1EkrLZuFoUUtdVFMa3Ez1KNKwkPR45Ir89dQPL0y2WtbnaOswtqD9TsTD2Ho0XFrBbNtdqvN + M6x6bw1r34zwpHGygpf+LDcgDVXeHRdAL453sFrfjVGwkf/hc3yDL1W44YdfvPnbc+/dc8as72QLFip3 + livmRqJOd9mrs5xn60/0cd3MoM9hiwCj6+e6Q6vr7kLpk/+u63qKvx62Eo7TXovtdaJrp93Q/zzS+G9l + x/jrQE5MQ8B+F/reuKkj7nWzvYtKvdBcCGtJMLhDq79DxE557wpc18hmvnSoJIHPAU3n9BYi0qlpdmgT + HWT4xSoGekSD9Vpg/igYq2lVazM2uNW/UKA73AmIafM7HsI4eBwPfjCA/poY2tyxBRx6TjOYU6HYDBic + w8HQelGZIfAskr7hicgHsvMcEwn4FHhNcC8l7NL+EANyRc3BJIs3+Qn/qrW0E+IoLaHTAeBsFqqcCbEm + LYyLEat3HuF9Yn1GM948yojC9BUviOIr0/0y9EaPdeUk/UsWBgEoNjbgDoofgoca13ifpHCxiwoE2Qih + 8rngWWMG4XhikiY5No+00XmBdNEgH6g+OgIjSe6oQCelyMc+VmSUpCylIDuYRLDYMWyXnOIdjQYmvzxP + lH/Ely1vGcPiYEQX0mPJE3cZwjTGEoHEPNExkakHTT5OHWLoJSILxbB7UA+UeZPkNbGpRWUKUBwrmF8r + U8AfE34vKOOcZTGlVcplBIKWg8HEkZRotBDsIGT8hCY1qdPAc34Tl++qhPf+mNDM/SVLoNcgXovIWQ6M + FrSWCiUHCXvXTSVFVGmu3GHyzka1KWA0o8K5Z5iOyY4+pOKhQoBKFXrwoNjZEJjTPKi28rJSGbKGkFmq + Rp9aw4+c6lSa6sRT/sjpUqd21AtEvRA7bcoUXHhSh/tsYVCdAdW+fLWI0auqKa4aTJBgcK3Ja16h3PpS + n9pKrAolWCWvNxFuYpVKjtwBISP4VtXVc06Zq6tBNxJNARJjWzf9A02dJsLAqnSGoNyoOA172LrIcSeu + cWRWgSmOge7UjcMkFV0xS5C0Pa6fkh1YGKcWWXo+VThwHcpYyVpWs+oyEYwtDA6ZiSMn3ZYj1IkqPm3+ + WZK9bVNtCApcRkTL0d8F1bKyNSxFZkRd9k2HLFR7LltrK8zBzrJCmM1sHJt6Q76N9pSSU2tFe2s6SBaX + vKjFCcNYBU/mXqa7901cFZkzXOK21Lgks27KtME9Mu33t41NbIGlGy4CH6y+VP0Q8swLwNLxhGvgFZ7D + AtyNap6vvBh2oDb7h+F4DnJjh4FsXGVpzxGXN7mJu7D7YmuRvTJ0s/j74FglPGEDgwiJhSwxRUMiI6xU + 8cR/BeHpRCnjGVsmtBRDp8ecVTP3sq8MizRpa12ItEjSl8KWsfAurOwlHZqNqcFD13tZzNazHVG+4Rqz + kKcczqrZFY5fLs5zW9v+i6a9kxXsfONwgWwuEhMGDvwcw437fD0kG6Q/puIxiEM8qIQq2nKJnKOj9Rta + Hut21GY+JJphDGU733kWnS5CKR69GnXV8a5UmvVCxZtqTW96jggGBE6Zy+G3ZdcENJwtZ0Kn6lW7mtic + NqV6PHML1bju0gKuC36BSuI9V5iX9hUGrGVaToUlzNi+ZfKBk11X51iUOWo+tfHa/bbHitvZuM5qtD9x + 2myXmNZmMM1+oFYZvw6byPuu35ArmO9d89rctaafiZAFAXi/o4mGxh6rsa1v6FA5t0ETWrt5AE7KfDqQ + GpcOoh9MZlaHjOMOXwnEvZw1bdebtglXOCckHmz+E7eczyJqX6AVG0JqYzrXGM/43PoMGIABXNDfHHhD + bz3znxbW6EoMuF1mcuP1jS4zMoewqz27bNzou+s3xe5QTcYdYkXBTZ7ilNvfDve4yz1Ryjsqp+o+97zr + fe987/vd/cQmvDuq7ZuCZUBzSQ2oR93a8D04aoRevvSKutc9plCUFnpPd+VzwL+B/AYVee9sApJDIIem + 07fm+ZnG+PFjV/zCbe0IlPN8CwISy+bHm/OlpL5GyDN1OkefdqZtnesFlyvna25zPXfYibK/8t9IvU7X + e331yE/+CCE9ed89/AZuE5P0S0v9oo/9ayUkuDHNYi2a+hUcMI0wjXTf+u/+cxq7I52ztpcI+91G4eSf + J+bpJxt/csM82ZdoxbZemYdX5IZ7Uzd+0Qc+zQAuIbV8F0Z2dDZf6wV/ASgXGBhffAYCD0g+LVaBqFZc + 8pSBrZdCJlgvhVYr6pd/u3EqfrB702MrKmhOGrhaSbcaj/aBcsZXlnReI2h8A/Z/d4GDifdZ4MWDEddW + teZZYLc/Hlhxg1KEgkV1q2Vv6tWCPngeKSVGl6dMM0iD2mKDWxR/xQdQP6h99PZQ3JVlTmMUYpgiHVKG + QoWCSKhZWOdw7fSC/hVn4WVEh/Z+tnWGaPh1i7Fka2hKDzKBggBaXKhZhvhk7qdjdtiAy6VlYlQ37ML+ + iDPRcwsjE5okhzqiIAPEfx13hc+wZtBnf9/EhwuyMMolMdDmbhbIRmnFHkeIhTbUH7TSHivQh1Yja9GE + JCMycrfHO1V4fpfINn/IbIp4S8CYe+HGZiY1UP+TVO33I7zCjM3YiN9oZNUzgLGHXkQ1K3kwinBzJSfY + jc3oiXo4HTk1jdWIfXDoZuh4TTNYf+yni2IGjR4jj8w0I/MYbliVjuqYjLvTj3WGdiYij/Nodjr4a9r4 + Fvs4h+3IkA3JZw8JgprYb9GDjxRZkadIb9YXfqjokLy4Zb6HSiAphEP4JZaYihHmi2bBHxI0gF11iC9p + cKOhjBopZWVSeSl5QtL+0F5PZ1+1SIJ58ZP/qGxEt4kroWKkw0TgCJKZRHIa0pQomW0BBhSKEAFTWZS4 + WHY4cJDhIxkWiZYYuYBOmQ3x9IeWNSvIpZW4dYdCWZPycEZ95YXLJJJpSZLyd06CGDPTsJeld3oSOIU9 + 0n8LiVCFOW4hR5BBEZhY1CQkeZYs1SEFWB7lN5n9sJWUxCJkiZBB6Y95aYClwo+VmYujeYqZqZkZiZrA + w2X3w4hZiSFqSVpsaR6QKYXPmCKhaYY7Ipw8+Zc055tK+ZkAqJuuAputNnSOSVicGYLBaZX58pznYntd + wZpgdZpDyRQOlUbd6RO/ElXhMCIK+JjUGZ6CU5z+FZGdoRidIGMdizdXwNeeF6ld4PSe1ZYqzQksiEie + +omcyRmE6ughdbgs8fkCqxmM8tmT68merkWgweVi2Fkuf3RUbjiga9mb+Olg5dhT9QmgAZIv/9ecpKkl + XzUXNDaGidShECgvzaUZD8pJU7aU9wmiiFWhB5oqDMqd3JkQ75cQyRWjl1WgO6pzpJiEvwKkO6adHfQL + YceBJaqQSTqhkcik9ragOmN1QQIHSHGNNdOf1TWdzbekB1R2zkk2ZAqAOLpINRonGgUYqSWeIFKmZioz + KgqeZQkjd6JRL5amHsoaR7qMhQhmqWSofeoMguEKZtejnLGoQYaorZhekwr+lJQBiBRamvm5opXKlZJ3 + nezYLlLlqZ3KbyrypPCJR6N6gzVoqqlKqNW5I6vKe7TTkZ33oYIahS/Ko58Kqk52cyEqdu1SG+dQhYuG + qQYarAm0rFH5MR1IRKh6qhhiq5dDfAWSRdLhUUWoboAarMJ6ZtZaqnDScL4qq/RxrZY5cao6NDLqTKrn + a8/qlqBqPvQaqmwDBfrEj54GrOFqqcqnrY36plC6pTtJrgBrgFHkrppasMl0p7KSsAobmfhGeQMbrQ8r + ehF7dBhLsSV5cUjpse+zm73Ksb42sR+rnGnYsPNWsmBzsq8nH+vKrnKBrzvHWXoKs+h6dhibp7XarkD+ + 6406a348K6ktq7LG6a9Cu4tEy3DUWqjLSapJW3Jq9a9A11PAGbN4ZqU1m7SCqYZTc7OJyrLRBQF8Inh+ + x3fGmLZq67ZvC7dxyyhtqymEtydmJLd523d2C7fQebB42lZd651fq7Qhi7S9p6ZFa7Qrlic/m6UKWzlQ + eLh8ALUcGKmS+lGD+KqEG7mOu69Yi6QN6p9XyWj/xaeDS7iS2G0/imyz+rR/m4U3E4uCG7pf20Nsyj2J + q7iLyzOJmEP0N452absbeLWUW7ke2a+Faign1TC067SQS6USVbyKBLuve7ywtZIKynzCS7XbNLbimpTX + K7XPq7yVyC3dSbOPgYf+KSuq4otz4hukKkqe6RtK6zuyN8S776u7Mgsq43u54To+30u2V5m/TbkkDCKn + 6ju87ijAIMu/rmtm8gpGjGe6Eka/sem97Ft1W7uzvIursGOK/3fB2zm06iqw/+u31Ttx9nKNKgzAMWfC + CMfB5DifItektauyHNTAhRuvMxzBEkywDfZI3WvDyoFiQDytSDySOPyxMLTDB1zDNDy6S1xmA3yGQ9TA + UMywvynFUUzFLmnFd9moAjwkyigVqIsaBTXC5Vmu1We4KCyyyZvGJLLGU+yw4jc8oAu21OjDTGkTC6yj + 6Iaj+le4xgWkbVTHXnzHgux4ubuyyKvIgEkeiSz+x0NDr+AhuS78S2jMJZr7uM3aUlFmOWZ8rnZMnHWa + uoHKyGWloenqwT55XC+MpZuLbwXFTa4Mx6vCq5WqyiZqcZWcxEp8J/dCyX0cc847xIf4LIbAr5zsKqgM + yGToueC7gsWkT+eZobFsr205tQgrzNJrylpyKsX8ynpMyzdnzSIYycR5qBQ7Xb5ctsZMRuHMzmi6zScp + mr+MrsDAxtFiF+Scyxl7zsMqw3kDlrurybnZopwrm4Qosaoof6tEzypCJwCd0Ivs0PGcy/y8zhS90NEs + oVeax8kKrZAc0E1iz3iZ0dw8nOoDzBVrufA7xylNhwMtdfmszxvdxSfNIu3+DL3fKZNvjMJhudMXrcs0 + XYi3daTikc6usQodzSU+DbBKbdNV/M3V89QvfcpSLcsihtPNZswzgwxQ3StcDcpe/dUPTK0h8BBaTdHa + zMsNLdIoe9VektVh3dNwjag/1s1fx6lwzdaii9c+aTAWvb+BPNdgPdQjSNL/2RqGDcHvutIdG0em8WiR + YJvPLK1xLdfcq9aRDUCYXdejudl7vZlpTddwHASvVM5VATOQzcS7GtSpbbzfNwSiPdgxaa7urNKz/dlZ + G40ma9RnMckgzdKNOcGafNvBHNuA+blEnGm+TdDKzcWbPNyu7R+wncwXKN3Ru9bVLaLkq9tG2MRshNr+ + im3S8EpD6MPTSYHI0A3UyP3QrOi/AYsEo/A08Skh2m22x82qJ5zeVhiZ7C3TzfKy9xzdnp3Hcay1s8mG + p3TYfqyxXd3Z/42/F2u9FNQEtNHe5n3gnE2Tib3gpcHCZLGEe+yqu/wi9LjbU53g3W3VmKukt/ao1+1+ + 9c2oIM7dIo7e5ZjJbrnhPgrc2M1P/C3eGM3j0/3Dv/vJUFfjEZ6QRy6dkl3Vft1iVYKzTw7a9tPcph3K + 3JjTK/igC2tlZ9zl7m1FORzSkz3iYYvlF2Pm2004aV7es5zk3r1jb343cT7kaH7mV/zlYN7mYj7mZC5z + fN7fc/7nU47k522xpWz+4lleyn2+4nKu423c148OpZHOOl605R5O6YzufdZ04Vpa6DBNdsWQQWm56GKM + 6Zku1FbLxzib6n/9xxXZ6rwJw6Se3P076xpODJHCt3pL7I1Ct8WO7Mmu7HJ37MuO7MMeKHzb7JdCzb8u + 4D8iXGqO2LAevr5OrMBe7SxO3rge6q4+xroW5ti7Zcx60MeW6K5t6V4eHavcyB2MY0Be0m9Ax85d7hDz + Ya8u6LFO4gSVZ6gOtjH17u6d6wjz71QOz4NeFC84JrTuwPp+68S98CaZrbyu0Rfa4E6JCgAxSqNI5z99 + 7uiu5Bku7uBerxb/3FCS8SnXMg+f8irvqidO8RD+e+2oE/NPuesBf272jnj5WrjXld0SHu/m3uhsTrrA + KWlNXgxGX9ww3/NT5fBA7+46b/OtuAxiOu6E8+ka77IcL8Qbi9A53/VW3uK8U/WDCfBMb+u/d/Ysz6wG + q+IVPuFJ/faObvdy//FEj+IVP+l3798frvQCze3CLeQMnu+BL/imTvhrLuViH7RYr/WDyviADxCLtvO9 + nfQzKW2Wz9yXP/RoH/l+r9eFb/igX8RVjvqL/+2zQxFs8drbCOWs3/p8L+s3bN0ODt45jsszDpX9LvN/ + 4fpzT/qx70IlQfsApuhhX/xBrPtLHvw4nmKl3cOb6ke3T/k/D+PnG+OZD/j+qhvuf4/Usv35pnmmLS1R + MYL8nfnIjf+rp3/1bY+M66/g7w/7p64QOG/W1U8A8DEvtP1hlFFMexPDm3f/QUkLSUuoypQbr1M90Mfd + XNaxVZyMX/39HTPgxTc0HpG35I+3BBZlwGZjOqlFoKGsp6p1JoVfBQPVFZ/Rk20aYmZv1gp3J0ylV7Zx + j771fL/mnPj+CMUGC+sKMQ4BEkHmArEkkRgpIuEUHy8pMzsLK/82PQ0YHT8gW5rylkCjfloVRTlHaQ1r + KW7V6AAlNuuyYC2C5fxyrTqHjZUzlu2amXdN2kxhMH4nk5IRqD+002SPvJ9zxZ3AFSu5q9t6vbCzpYr+ + xxPOh8rnR+/B6v/S+WEC/QMAzBYTefgMqPuiDyG6ho0QpisR0B0Ehg3ECVSC8ITGFBcfvgF5xOPCUzso + giB4plxJBCOZuPwYkuYYmjLh3enjbJpKEWhaHswlBGcJmDVZ3Zznb0c7n+9M8hLqyQXRohWR0jw65Kq9 + k017Pn2w9WXMqYg6pk1bi2xWrw8VIjulEZXYsSIBFW3bq+O4vW57hIybiSnYICRWssn4NlPfpYC1Cn4c + zTAxrBvxqhi8qNNmT38hG5X8rHAIahoTZ9Z8VozarjlD4wNdWVnpR+wu2yS0mLW5GK9nxZ7cEHhgyqZd + 2cXcL29vMG5nC+8Q/Xb+M4kTZaCGqjqFXjaejVGXzhkuaS7dk3f7SVjqKzTFWY73O3rZIfC4LeeGxl6z + 9y+OoZPPvPKsSwWnKu7DaDvmmjPOt9DEE3A94uDTT44EreABQOUU/Mwg9/bBMDwJa6NvREuQ6EvEDu/K + 50MHSVqRHBJnNLHGICpsRMb9WnRxNRD3ES5CGnUjsMT0GkrNw/6c6y7H+IikZcjjboFiw4gW5I+nnWA0 + Yke2opRSqSNxjMyiUXiwkgacRvpSzDCXNPLGLZPMUkv0gCRJuinD5JMGMg8LaZUT8eySqycLgtMhG99E + UjY7YxmovRwehFDROzkCNL+HlEQTDybz9BJRQS7+XVROMB0dbjlCsQtVVEtL3e2mUYnAj1NI42zV0ENh + jZU74uakp6ZBC3SyyUID9PXXTKtMVVUWi0V2piVohU1ZKAWr1k5tKT3zWU1clYJbI/yksdw1G6VnXMRw + RVVa0VJc99hrw6XQR3WR6jRa2uDVM7ZzBQSYA3nLwnfYdps1dtcf/6UXW6TcZNfgg73FkuFuudrT4USz + IlhSgADTd8CJ2PRXyI1JBcxjFjyWuMc6L+43Ho1RthZiuRKCTOT5FMZ40oZrDq5jLVt2edUkA0ha6aWZ + btppAZyOWuqpqa76hACghrrqrbnu2uuvwQ5b7LHJLtvss9F+Ou2ztV7b7bf+s9LGP5Kv1DlooW/+JGe7 + K86352mxq5vvu+cdJ+I9dBz8aDN19VmTw90lfGFG4ytaZmjj/vvyuSBPV/LN8xapc1n7Dvldo7moYPRc + P0d9aNGBfrlX5OpNJfGAWwdc5WpXZ1D22MGd3ATBgc9dvdho7d13zE9uXPeBlWfd+OmEQ7QjgREvnWZ+ + XbfG8nCm5/D1/z5WnPnxhoF8BPC+Bz/87EPLcQbsV0DY/POAlKV9ct+Hf3dq51c8HhEpGOoDmTUI2L/6 + QYZ4DSLF7IrUJ+fBi31Rop/fGFica9xvgBZEiR88E717KVAXGYzRFC5YK+1J0FaBMo4o9sc/EgoDea/+ + iiAGf6coHZSBLyC8hAhHOMMV1sQlasmhoIaoQ9q5Jy5ADKIQzzergLimKg0sWLIWVypYXIUMComh+6B4 + xGxxYwaqS4hnUlhCMV5qi15xTZlYGMYsjtEqRgTdrZIYq1Zw8YxnVF0ZvghGOV4ReXYs3L5uuDFQjE4D + jqGiFgeZyBrKMHNrvNYiKWlFOKXRYgrkJKQ+qZivCCWQD4tk+foXyjk+sHWYZAxEFHnKBZBQlauspSip + 5CAnjuyUt9RbJVcZtFJ0hWWljIosfbk8xkXxc6UQpCYT2EtaApOZzcTfVIyZFGmmkprVtObABLk3XyUz + ctMjJyolGT77vMYG2cTvG1xWxk0cetN4g+hdO+l1Tum1cp7p9OSfnpnPbZqznx2Eoj2D4853ClGfHMMj + 8xRazmNkMqKvDGNDU7bMRFbUcz2U4S41NUOMZvSh9BSp94gJzWheVJ0UCyZLEWiaJqjUg3Icqc0e9TuO + hhRFnFsLKx12U1zmLplFEGrCvPc4f7LRpgRFoiUHyqXUmXSlDK2nRg0qy6xmR6ZUJdFRgUJUrBJSq1Dd + hkAcAVbqWVWsT/WqVvkgo7QGtXoOvZsvjVpWFUr1Diik6yRJSrhbQkGtvPSo7Q641U2yVXKDzaNe3xrC + 25misHv95zdh9tZcFAAAIfkEDRQAAAAh+QQNFAAAACwAAAAAWAJ0AYH////w5EJWtOkAAAAC/oSPqcvt + sYR0tMKKs96c3Q6GYjcBZQdJwkiuLKsy8aG69Wycpku//iP6/IbEl5CmKx6LzKZh6YwSa8GkFJmxDnlZ + bkB74+bEVxA0cy6rfWccM72OU+DyusyNCdvHEbH295dAdUBHQbY3F4S4qAE12FTIGBcpKWdzeDdB6ZQU + KPWooLW5g1UJpGia+pSJaaQqOfraxMVT0ukl6RkXRrUiWnEjKLsQm1A8rNSnO3KM7Ops58erp9AM2FpH + jVfdgCMNTYgKLteG/TyuZo0OYt7I6Kt6CUrcXdu5bq2+7h66zKK/DwPAgMCGDAwxj2A4Vof8wWKmEFKf + Mgcj0rM4y+Ce/m0YAVhz+FBcR4j9KI5MdnILkYob2in86NKUOpYvS5pM+YMmRpBoNvLB+XHfTJxmBPEU + SZRk0hYxN+jswjFiUKFKlyZCcBSpVRRbNSTM+S6rs2ZNZVbtaizUJLQhnqKLqjGXWFlka2pFu2QuV7ZF + kek1VPYuIrhMCO/lELiSPrd0ja5hjBEyO8Mj/jqVNc2yUWr/2Ek921UI5bh8OUienLjL2nWjASs759Xi + ULaiU0+8Wtp0bmGrA7a2eacz4sigiR6x3Xa3buU/H+/0DNjW8pbIGS3eerz6YeYWuGuerjAxyGCXh8sW + nrQ2Oe78lGvva1E8whwCHdfrONs41vfg/tk3OP3Kd9uFh1hqMXCW1jQRnJQfg/vVAeBnzPEHX3wILrgF + Hl/okBmFi1znIFYQ+tfThIhEuMZXJszSiyMX4oeebLR4WCKJp5i4B4qWWEHjRDqaVdw+3oxoI27u9Vjj + VkP2Ns53DRI0iIBJFumBf0jWxxd5zgn5HohQCrBhAF+ISWaZZorJBpU3giPlinb8yF0aVxJyZp1h3mBn + nnrumadvegTGZ6CCDkpooYYeimiiii66J5iMPgpppJJOyqgElJJJXS1BtvfWBAcSqWaV3n0YahRyYjLn + faVUyKozQ7bZXamiHkmqrBK9Zl+KtyS3aYAnwLOerWml5A+s/Qmb/mYmueq6Ga+CxfMrsEwiC2dhyxh7 + LLIx9jNjNGTY5qWrork5LbW+lnVtquVpC1Y9HKob3IMDtgrtByqayu5CqdyCqifYOpsvbLc1tyNv82a7 + r0c9/DtrvtU6YE8gcDFMb8AV73fJYMBxerFc9v7WbsAPR2dLtGBQDLDFzyLhKcjXqHXwutAqTArK3IiM + 2cI6uwtvrypPyfO9UfBbVrj7golFz8PiPLOqA0MzMnORPGLzxqvG6nM2K9hLSrBM46S0wD93jLG8BVu9 + JtnZ0FzzmypHPUXYYo8tsyFol3Hy02yvXDDXVSMANz5EyT033UA7fTWz3GKMy7aLuHCBpzuE/h34OJX7 + 8HeyhqudeNdnbyaPDkYPtnXSQq/0NtiEF7451nlgqDVDLevLtxqQ63x6yF/vtLrmrdddEMyxLxgx4I7H + /nHJW1p8+Xzn/Y4wxHdf8anwjwAU9e30aZrO2M23QBz00cdr9i5fzc4D9o+XzrK0N6X+XPjic/z69ENr + KaLye6e8yyos99A9+FkIRvOjX/3KtiP3CSN0CnSTJx6mvcltL4ACjEjvUFfAwwHjW5njwz1W9K4DZeY/ + Ptmb8pT2Pah15IKkyaDrYgM785HLg/Qx3hi0kTa80Y6BFGRe/AjowhfCcFm2k5Y9akg7xC0tRf7rmgjf + V0E/hSiIRqKO/v2G5rlViWFqrdBRBI/oMs6FKoWqmSIVSYiQhmwEWL6ghQ2DdxHbNbFZPSPjWCzIQpSc + MYde4eDqggEK0eWhi0zc3//CCDyHhSePetxjw8B3RU686ASU+AOA0jcwlNkRGZskX0o6iZ3K/KGDUDGk + u25GvTnWsI3wAmVjuLQUV8YSBtLzi6X6SI9UYdJgWXSCLFXxSyTqx5F8xKUnMYMuMqRgTtpLiM2CqRjf + hJKYaBQBNkhpxdhscYYqWQX+aOhLw0GTkeGk5iMheUxfZcp4xrrdrxaHL7oFE5tQNOcbrXlNqCVzi+18 + QpQ4KAVoRpM1obHnOdEZybCgK0E00sTk/jK2PURiSZ6dImc5DbpEUcpAhU3R34Y8BLk/aaqV4mSNReOJ + 0SRqVHjDSIExS/DRlz30nXrz3c9kedKApvSeL1CjPrPpzu+EFIfwxCBFm1QagQJlCgn9UGAgGlMYqGCZ + GQMorJQaEjYldac8pWVTSQdUf0q0fcKcXf7ahNWsuio3aR0JTQDqqqe20Z/cLNA2SgbRWx2VTTlFKVff + +i1oGKhrH0WO5ICjP716r6J8aatb4/bVaBSDPF+oax+RBs9ntg6nvZwlV1XqVSIebTJuqqxtPOUIctVx + s7DEy2dBG9rymWKq1qSrWO4VrSs49kRSLOhrTRlbBM72lmm0Lfgw/gu76r3hdwLtayM/+1aI5ZS2tfXI + XDPVCpGy0qh7NalrfwtcfEo3YeGFY+Tsmh2eESxr2honPXsI3cK4phIRhGTkOtpAOAqTveZqrW9/q5N2 + vFdE5Q0eZvH7rvl2TozCci9twKtKzOn3cRE25nmzYIJY7Op4N4XSgyEc4A3St8IwvO8gj5I3/jbYgt8F + b4AFrFDYDjLD+2UFVDiSXct2tcME+i+AWaTgaGQ0mxeWrsTwOgNezFSCVeyukFrsYkmOt4QyPuAySRac + iLXMrFpe74557GEf/5hF+aRyledb5I0eeUbXvWHNEhxH1vZ4miD+RHYvmAR1YFLA1xxlvw4L/kBUyjnM + dI7yJ6asq0NMRWG6QG5NvRwv7n05ik8W85ixqMRDH7SMabaJeAbLzd1aJz5QNvT9EJ1KRVcmHH32Vpw3 + p2czF/rSmO6G4l7dElZnuoh5Fh9ZsDlg+L72NGumHlxgQgg/a2zIJU0jqjixVQiTmKk2lqQuFu3Soq6N + 2YvFHIcyEm1pE/s+V2rNoq3LrfcKEnoHGesQPyxuvJkDVjxBNl1BRzqYzo8x/Qx3nXVoN2onEsNiZRw9 + cSDqUUu5CM69aLxT2dkaB3ei6Kxs+w6u733PGd4PT/WzBW7AIVo8B4UtZKATrvBK+/vfxsYxwxNzblpw + zdXTBrPKGyvt/jNnKMXeZjBi7wns+jL35RGfeKlZbux0Fpd/Q7SFmRx1qahLfepUh5SjakApS1V961zv + ute/znWsn0nriZoq2MdEJhuMi+Yor5Uot/zyhus05zW3lk9Rw7oDqp3Aw2s7b5sUbLfRvcBk5mU28w7H + vQf6bH7PkTSV03j5DQ/SQeZwGalL+XLBWopyX+7gR/btArUQOjtYu6sjL3gudf65SBeym0/co1iPwfTb + Rj2oTLp67nZ8jfCICbb0fImZl9D2XvMuWwdfd3mPJlX6GKoNFl/8oX9JyVYhvl3eIfEbqqv53nz+H4/o + 60UGvp67B2td3R3yd0v6c+MH4s1xjvzK/gEa+nNf9SqXnXwffkm2w/z80XKreeZhcYYlXjqnf37yIksV + f9CSgExhDgARUhN0edVlgLuDe7kjeTn3PfPXU/nFbbhkWvuUP4eXfxZYUbmnOxqYM4DwP01GAm+2TluG + X5PmZN7Vfg6nggGyc00BgQ5kRW0GQjRleNa3PNP3TZ+EfIT3Oc7GdHaVfTbGI0dBhMKmehhIEFNIFaOl + UeBif2YlYl1meTV4gkdoRjlIX1bYLDomRMPBgcoShM9HWkp4gEaIhlnofysIe27kc8TjgeXjBkcWL1io + WxYig561gOpkZB8XMzDUh6+3XjwCaY2jcSdBhhlohvHgafPWhAQH/kKJyHeLJw0KUoEmSIgoOD7DZksX + B2ObuEG9V0uGN1MhBEg02G2qkx5JKIeuhmJcWF2NCFe1lGTeR4uURom3mISdFEZzMRB9GIWtaDLXk0GR + V4d3dIxKUjtfqESN+IlLNozESCw3eI07hXrIsYxqGFiGpSHRyBbguIf2NI7haDfgV2PaiGWjqEhowY6L + SGuDw4u0FDpehn7NIYj11xX5OHCmlhTKKGGzaFkBiXDqmCWmWE13uBTV0YOzyHMrVYKkWJESuWkIOTgq + ZmtvSI9StUuTGJHPc4gVKZKR1oDeFgwD6VcFGZCpt5IhCY+q0gtJR3IuNIU1aZMUaYs5KTtt/mhnPpkb + BklxQkksYXhj4DQJHgkOgqiULlh+I2EZ7WaU6VCVdhiRXYlrl0iJ2rGMruh4UkmNpVGJnISLudgpTvmU + LJRt7DYhYBmWrYeVNoV3RTeIaNlSVmKX9mhQfscfIeY2gZmWViI41YiTcPmCh4mYf1kkEimTltOYjmke + I1KS7UUlQImDrUhMbUchhrke0jFonbl6hdAhfmmZYJOCEnZ7fHmPajKNwvaSsnmaK/SaPRWUErSWYyQs + +agemQmRxaiXvBmbbxiLnBmczjWApxWZKtSUx6mR5bJ+mWcjlcmJZ1ibZIWSujl6Rkd+d9adllYqgYd5 + JllACUcjLHFB/qOgh8DJLnohiv4yAxURnWyJle0JcgG4nUWinet0WVRzIfOAn6z5SuAZnvaXnCSYnSqT + LnKlIgcqWp5pjAq6mxTon6VEJQG6l4xTgB9JetqHZP31QwuqoUUYov7hofgkD+QnVbE4QrayW0jinr3p + gA/aOuWpj85WiQhKkCzGegy6oQ4qNW05kboIpEP6fih6QE84ky5KIi16hXKRn5/5eJ4Hm9FXnUeKpHep + fNjppRvHpCOqol0KeV8Kpqm2YOyBVQyjlTiaommqph9oZwDYoUKKpWZ6pkQ6pnW6kUS3jVO6SEG6dA06 + p7tBpQHRPEuqe28xiFtapI/ppoDajSYH/qD7Z6hxyKXiuXJ12qjy2aRauqKTKnqVaqmBepRqMk59mmuO + FzeOyoq4eDlXqlha5arv1qlvh6qpWquymqF4SIWvKqe8+qeA+quiGleIqqum6jyKmqqqmqht2qupyKz/ + 6ax8enSgiqkslaeCBauHeq1ouq1qGji2GqXkVaygGa6CenzR6pbWBqzBGhZ/x6njWqrwh650KheyQkbB + Vhf26q7vGq3nuq+kqq4CS6zrKqXzupTIqmnR4a/CqrDNmq3Y5bBraK73w2cWaon1qlaNAHVnJymrSbIn + i7Ipq7J6MrKTQnYsK3YrK7Mp27IzKygD5p7BuF3mubG5sGLDlQrH/oCzO9gQm1ml8Ap6uFmt6wNM94qv + A6pGt3m0Bbs+GeuklvAKQptyvIljMniwgnmV5mO19HprQEKc7eqi84AHv4kOi8qo2GeiFNa02rqrGEs0 + ysCjbuerMUajIza3lFqxdvWiy6le17e3/cmuyop/QfusgTugqvibbKufhwuyiktzf3u2DOuAkhuEEkK5 + TFsqoGeQv5ZH0bWzC+uVENuvoVu1kskUemstTqiGCWqp8jexvDe5sou2A3tjeTusSPqrY9uOMuW6CPW0 + +eqMXpu7qjtcwnuKhbe8p7q73Jluoui4wNs0mbptiWm8xytDRiZc3iuWfqujWCud4qq5Syi9/nXblv/q + vBoUsdFrpOx7uegLo19qR+/7sDzJvZkrvv71u+27ViyqvsULuNP7jd2UpNxqrXGyvT67ppWXvgMkqRHM + mA0Mrd87ldNKv/sZwLTKV8fKv+d7wAjMj/eLvSGcwd0KwXY6YSZ8wpuKv29JsPKGiRb8irBLk9tHtZBa + wyO8ui78whM8lnPitm1rfPBnw6bIfSH7lb4LtvsIrp8qr63JwRdrFU7SwzTMcYdml028tYqJeDeJVErs + cYtbTBb7v1lMnQKcxOUad4t5xbm6G5pxxFY8hs57Seyoap6KxdaImeMrWB6LuRzLxBVMxPg4xkypwnAc + q4fci4zktlm5/sUE5ciPjMeUSk6THMhhO8iXjLjy23ROzB5kWclvfKE2nMnI+8ds3JIgacnVZ76u563x + msOJrMhECcs+LMtlO1uC5scojCOzSsaxbIgAt8qs/MFJacrMS2jHzKYkjMit3JGdjMru98z9F6bSjJww + XMfNnJAZ21Zfi8PXgIKkucZZDM49S2rQHL/9283pzJLWjIonqoBylMzBLMPusciebMz3jMzc3IHXW8f9 + jJcAjIT9k8/6vKffbNC7zMXaHNDwHM8dvI5tXMz/DNCqLNAVTc0J/NBSPKqPpcFOW6YxisuqM5q1a88J + 7cu0y3DenMsYzcgjjc1A/JhXwm8yrSQe/nLHFB3RLl1EG7xwFu3KZEt3jjW2P9KVkPGeo/KobtzOEj3U + v3ypjfvReISwUj3VQq3QBsy7y3yZUX3BFOzVLMy47yzWY5muZd3VJP3AhQxuRu3BDV3T2XzTHJ21er3W + K8TDDMw7G43WYrrPoVzYQ2nXSZ2Xgo3PMTSSWw1kWa3RJ63YGArXsxxZkD3Xfd3SlC3IWVqGg620okXM + 8Aulmp2QkcrOWs3YE/1or92j6UfYZO2aqj3Dnf2xOA2iiUvPInrani2kqwXYmkrVfL1qK03To43U4qdZ + w6167mzcSjeCIW2Vg9rWfl01Pw3WvJzKLy3dC9MltE1/1807lOPM/pN91q5dgOF9teN9q9NJx5WN0MUN + cer52xpb2uY9z/H92RgM3fWdtu59kJyj3/xIONq91zad3gCOvuztClzE2dd82P6MTKC82eJamGBRSREe + 1LbN1bjKs6taqhmeJhvO4WXM3wftF11c1Uxo3c/LDxAuzG/t4SCM3q0t4ibt4OhRScKd2pJtTvPE4o39 + urAY2zWyCT4+1jXu1gNs4WHNoUYO4xNFKC9rs1deJjWL5VvO5V3+KFbu5WEuJmB+s2SOdjJrjyS13yee + Ujilv9KK0rpby0dOcUmu5jHM5hjFWUOe44+Lb6/8SPD51z+e4iKNiE+uwJd1Sr2Na4JO3jQ+/uE/g1aN + jOjTnIjkecvlvIYaxnxrPuNjM+mfbMa6DYWoVtr7G6//0ngHvtorzueRzdsBx+gfOFlGTOh57o6UPmun + hq2mPrxg+muorae4HuQgXunK7NgSTOf4bcv3PeU3ntgQnbAhnugzFuWnzuzNrtwDjtdMLt+ufuyCq1/J + RN2+re1XteTe3t9WHe5lVMKZju1pfNWZne2gTeyO5Epvru3gS7ePDejlfG7JLeGPbug33O6+jrpDvOzy + LsS7psvgDuRnlO+v/qFYrfDPzvDzTu8ZD+3RHl/G3svEO8dSjvEcH8XUuvAQH/FUlO/6S6EeDe8pb+4N + H/O/bvB03eaA/nfwG79R7v7wmn7yAi7zOpjSua7zIR/nMN/zs67xcP7iNs/uOK/nHa+SUlrt/v7vNA/M + 65v1017oOd/hoc31A/2kP6/1W++/8T4MT93kTk7fPn/1ya72M0/3WN/15Cv1Rh/2uT1f5baK5Q70aG9M + gA+0RU9Nrfr2nnjhS89hRcP0s1vyN5/3xW7veW3ti8/zJyfw1V32dy+3PA32Cj618yvyjG9fm8/5nT/3 + hQ/6U1/5VZ/wGSJiBTgQByF7qJ+9hwn5g0mmsK/Glk7yqlH77a3sUL9GYUzhKu/7cM+CFz/0gm/8yN1b + BP3xr2+4ac/Qnxb4dY/qvb76n0/9fzXs/p7bvUpP2hI8/OI9+4Qva62v99afuqRv+rD99L6e/uov6+wf + 1+5P+b3/tshOADDkdHPd2pPTBHqPxXtp7qJv8sTSnMJT7dbWfeE4k2ksrXF2vXf+8U+klVBG/AiAJWMu + lmTqnlHpVLGktpDXmpXjFHkhNC5n3CpTwGRtLx09r+FxyVt+ydaH2LYdvMfQKQBNBBX8AvGOEKEUGesI + Gw8MGR8j9+5AusReKD84L104oyI+FUMhT4NQTSRLsWT6tjalQlkfTGkSLkkRb1V9L3rxah1dhhk2jBfz + ZneKGJGgo6FPg3+tla9/kuFMt8P4NEGpPJ0Vo7MBqtGt1eG812jf/r3e02HaR1R2l+um1+/XUf27Qu8K + LVx2Yokr2CyGQGQEmQGUqGQiporxXjkheMuhrXzvOmo7JzFkxTgln0CM+PGVjXBmuDG0566BPnYmcR7K + icCkwZZoEsKEJ1OWFpULdyadsfPoE3IHUQQVOvSEzVRUrPpTuhUlk6Y5PBFMsrFozHzlpHwdt1Vp1xxZ + VVGCWzWqVBVusXXxVnKuVrY58eJQ+1LvUR99RXDE83SmqL+B/zZUOhgtH7WfRhK+y4tl47eI0UGOXBYn + 6FY2KCPIYnqQwsVEpwpmfXP0xaSziSGk+VUx57OSvUYWXXtf6dSktRGvgFyO3L0pRw9XTpHp/nHXIpX3 + Pl0oE3DZwqf7zYn7JOrszHNH0uu9Bnlf0sOrqQ6wjHUtpuDn7Y6+Cfj41/Irhj6XiNOuEbkqw8U+JgL8 + D5/bBgTqvNgOhK249hbEoUEHPYIwNAJrM7DC3/iDwb2AOHxvMvEkOJE2Ckdc5TmvMrQrxe2YYvGH6fD7 + hbHrMGRrwxvr2arGTiQssEQcv2AvSK6IhGRIC1FMMkQgq5TRSajaijLG2478w8rolpyERCybCDNBL8v7 + S80Hd+QRzSxLmPGtx9j0jS0XGWzxzT5hjKuzMs/sMs/09lQxOTnnpLNJz7iE8tDmavuzijjD61HHI+xM + 079JzYrM0qUq/nFQ0033a7RQQ0GlStRRi4QAVrBUFXTVq376tNW1KqXmGFNrtVVLQh/VddeVRPVVVg5P + JSmAZ6GNVtppBZjW2muxzTZbJALgVttvwQ1X3HHJLdfcc9FNV9112TW32nbh7TbeeelVFycEIf2IT0eP + dYq4UTWYFdALJ3qkU333VbZfN/6V8htmAyXpVlzZUHJhhiv9s1uBB94sKYMPlpHjiC/eMtFWRtYwWFRB + XBmFfq4smdaGzUnZRuqEpCvfJhPmV+ad9wyzZ5blM/Yhkx8a2uGfbz45DpghJljSOpFGzWaSmW5tOqUf + mhJZio1Gpmo0rsY668TCWzALr/01++Nh/ouyJD62LVbOumno7ljrTFcBDrSy3T5bzK2NiiBvlaWue73G + EAM8ccGR/Pe4Sw5vuuj/CAFJtUT4hvxxD6cgpfI1cQb2i+f+xtxzj3tNi4fRxx78RiKsAqlx01cvfbSm + bIId6Mij9CAzTMXpy/HAc7/UbgWH1y9m1r0ERHNYcE9+A9/rNF6afpqfI2rooz+9CKiJ79z66+0mn4E7 + uGcNe+S9n1R6Z6RpMcX3bZMc5u3pwR983fNEh55tLBf129z3zqeTrRlQbxP636EEqIn2dc98CYRTfNTi + P7ChbWER9A7X8mfB+IkwVhUEYKs8yJ7jIY6EzsudBk8IvA4u7oPy/muhA2AoLEY98Fhv6F+pIHhD5ZEw + h5eLYb/OMDThrVAzLSzi0kzIwbMlMSjqQ+ANn/glxR3xYkn8IXfYlEWfvXBu8EOh2DTDxN8lUIx6cuDe + PFcfsqgnfJOxVBsRtUUpkpFsUlHjGq2HR0rtEI7JG4PShBdAIZbQkFGU4fkOOcc/EiuOFhSkCw8xSS0u + ym+aNGPWLnkfR6rBk2bqowRLycNAspGQXGzkKTMSRCxCspV7nCUss1cIEBbslq/UIykXuRxcciozobQl + K1f5S/QFk1Qvq8rrZClCY07BmJyY5iZBIIldXHOZlqTl8wrJTEaWj1M4jCYy+QjOY4pznOt7RWaH6uhN + X4atm+zEJCu2eU43iTKd9JSdPe+pzXyGkWa8Wl0oKcFNH4HjaMsyZzy/WUl1PhKgAU1aTeAZPHlK1J/A + SEoBAAAh+QQNFAAAACH5BA0UAAAALAAAAABYAnQBgf////DkQla06QAAAAL+hI+py91hhHRUwYqz3hzc + DoaiNgElGEjnSArsa5quoiZqea8yosfwn/kADcKh8ai51H5FpHPUfEpZt1FvGmlJr45lZEbLLbhYqDNa + Tpu/Q7T6TYTLM1WOeO7lhadgSh3hVkE2F/QUSIh48JHHcpho+BiZtdMy4bjVRyn3N5apuLHiKVlxGVI6 + irU4yHGKCtPqOtR3gpO5AnskSpjDO8HleHewGvt5RoyoNLyBe8zaDGfbK8MZl6icxvs17Oalo/tcjcQM + LqLaRm6MjvXtjMgY6RvswA3GeB07jpGvXjh9zv8PoBN27fC8E2ihgTweBJvto/AQYcJJQCJKDHfxxz3+ + UrsaXty30ZVFBiMlJjtSEmHKiyEh4smozwrMlQloqoPQkiPMNTupeFz2UlNPQCJ+OoQ01NlBnkkLNq1k + NEnHpTOL9rSJ8ekDoRW1AvUqiOoLrHRykhsX9RhZD2BJUgzY1mVcBma/WhOrMkRatVLWjjppxO9ZYnX9 + 7EWBCq8RamP1Jl0r+BHOw3LnVoan2GqayKB6Fe4kjQkIysTIciaU4rNby5cxk+7yusPpF5kN041dzE5T + yHEnj2Y3uzRrPW+C0669RyHurBiW/+0L1jfK4a0tO5fK8nfYWoh1P+X9nWtX6lupX8cu8XDahTG9755i + 3JDq1eQXxA8K5z6MvWb+46Efdp4k4A2FUzr12WdegP1kxF9R8TD2iWedRAfdVeKJduBEwym4IIPZwLbY + O/Z4xmEkfun3yoUpZqghayXqpBVVJYohQRSh9QYfg2/BxWJuLqIWl4gvEociKiem58J8LfbI3FxKOgVW + HkPSJ9CTbCFVZZIGMtmkk3MUWQZ7ZYCp3XhYqpNDAGquyWabbr4JZ5xyzkmnmgKSY+WUVHKZikKb1amm + Z4AOSmih/Ii5YiKFLspoo44+6qgAkE5KaaWWXoqpmzVm6mZnsyS6JTiINsInUQkiU+pmytHlTjSNVSgq + hKDySWaYiqY6pnKi6HmbJ58diaeKr6Zaq4PN8Vr+Hq459kpDq8kxJU6syEHJZbEdKGalKcr2qasNyE7Y + LLTTPSNdtLgWu9Eq0565rbnMMnTXs93BWtq66BGb2CxciJWtuO3yGIa+j/QQG7Bq2dthqegKsxS/37b3 + r7u6ztDvteDOG6qRCCdcLWF1dCNkxaRGnHHASW6s0a7lcBuLrMPiOwrFFGnZLbkkl2zyqGH6irDBGot8 + 5bkxfyPjw9rePK4gmgB97G2ysTz0i9aaOBTTZiJ9NWyhGO2tn9QGJhLNEiucFNdHYw2w0123uusV7whW + bGpSbzv1aADVbdkpBJvNcM0M6wB3vi6vTHfVd6MNNgkXG6TLxwv5rKjOhCv+izcoAlWOoxbhWjPxxzVB + zTbK87SLuWF8T474rGGNMTA7YvvjI87F1dBv6XLYvqpJqafdBat3Nfx3JoH/viOGlLN0+si7q660vJsg + yl0fw6Mm+dnHp1fV8szb5jw0vvhJ+wnT30772DBnmb32yncWcOiDiJ2Nymxg7P3J5pONUPIvq2+95e1P + 5QMbTCIaVTiZhJ72pQcl7Xr52wnuKGS3xXlPPDILoKmmUUBh9G8zBlTQA4uDJAfyb3+aW1tHAiiw4rWi + JcahkQf/9cG+iXCE/ioL69x3QxW6xy7Y6OACGYgm/W2Phhzz3+YAWEFbLIl7PGTZ4DZ4PnRYTVVEhKL+ + ERkyxW75UIAXpAP9YOWfrAntUEI0XhURaKz/TUVMwtthEZEgKTZkK4Zq+GAZxXjGN5awe8dYAiye2EXo + aEl0CIJhELVCx/BYwXV33A4zNqIEQcoQj1F8RiPNmMd7OaZ3AKlRmdrzIin9cIzB8koiFZlGtZGxTB4p + lyxEeZ5Tgq4Zl8RkJvWoOBB1kjL2k4uC5GElWc7SYxC8ZRM/6btd/kYZBQKC/bbGO/xZspa2NGZ1lslJ + fqRGL60U1rXClwVCxq5w08ycNXFpB6KpRD2f2sp5wPm6IdIqVnMR5mNemUNttgSablFSAX1VzUq2LG/n + PCYV8nkTC5aQDJHcDzj+4UVCILaMmtEs6BIPykdwpGCTsEPQZ0iERdzYc1l9ZM1ILYTPjDqENPX4hivt + RjGQzeek7HIFRStq0UBqBKF4YmlMR/caS+yAOwEVqE1vWtScfi5EKiUMSAzoTp8C5qdJnScts4gqpcLI + mfJD00PK506rJEOcF5XoUcnKF61ekzYSnOZXe+lRbsbRH3NEGu6weju1rhWjTY1aSVzqTT8JgaqUNGpJ + 20JTlMrCb3305E7Dms65DhWtQYuYHc2p1z05VJcldcFIGKrQ5lT2n4GFmGUPidjMji4XTBxolyJIkpB4 + sm1wtSIp6Zla1Wp2P6sjzDg1E9uoODaZoTUoOXv+ilnd6nSzrR3ab5HZV29tM591SazsjlpP5e6Wrb21 + 6XOhC4hrqCAQKUQjyeyI1PVp97syEe1E2cu+4HqRvEr8Iuk6mdz1Vnax3XUNGP7KWcPYiBqNK+5rb1vK + Yur3wItsSCM9AeAHAEiy4VuCCz+03eNKMb/rXYu67iiKzzIyLIvwwT+fqY0KltWsouJwhzHR3F0Ukre5 + 68Jga/GHAxaPwdJEk4u1K5j3CTHEXFUIMG7sqva1c6l2rdKPlRsZgiRvKRFWJeuKwDPuqZjHPd5wbhcM + X2fGeGerpbGVo2tg30kPcXRMbw2BjI3+9hC0zB0DPWjSA+vWNJdvcPOb4Wz+Kz/gJ8MWo8tG7QzHPOj5 + ugEO9JOhHOeJzXkVVW4WGiS7GCY3GZs8NfOXwczlOufMVsxM2W0u/YQ2oi0iosw0QUEdZjEza0iAXC5H + w9AEpq0ZaxaZop/VC2rOeERkOam0AHMdyhIsmtGpfGx2YR1rZ2fT1fYFbxaQner/sjnRAfr1nwEdaDLM + CHV8FSCmKZucZTM7MSaFdrQ3K+6BfHuPGhxtniCq7vsd9tXung1UOy3qr9263kE79EBmkO/ESdHb84b0 + pBv3y9f8FaDVaKa893uzlNTajY8G986I1m2Rypo4cQgUp06O8pSr/E2bugGmJLXymMt85jSvuc3X5HL+ + lldqvDeXE8zZ9HM7WTzRGD+vTwhravIkPCPxOchHg1lkLkYIxkvHaesYHlEw60dEixxle0lugulevOqF + zZfS3f3ug0v9m/rm5tpfum7DDhTrttUvmPhZaK9/fX5sobVnd/fAjaev35Jo6XrQrWnuklzsRCd72bHb + brQX3SDaqARJA/7fKSE8dTHEa1YlX6vv/QRZK6nvAC+/6YXfCJVoR9eWvYX4Mkt7aaEkOK/JGHuRSD7U + PTSw59PeNOJofpKpT3DkQe/aLH+JtcLnA/CZhN61s57wE6XF7229dxPzefuOl+dZq/eR3U/+d6s/+k/w + 3DV17Ziz3fe+4ASfl93+Vy6eXK0N+vUgZRx78fnQx/31QSh/V8VUlYdOsBVOglZ+i9N+WddY9Dd90IY5 + EbcueLZknVMPlOANu7Ztu4Rh7xGAjeVQIsd864dFQoEcCwhsPQV+lyN+eDMf35OCHFWBrBNTpIGCDfd+ + 8JdQH/h9DUaCmsRXLTVrkxVfN0huKriCh8ODxOQpocCAsDWDfOeEfKRsnJc/FUZ3e6V1lnQsDVMw/GVB + PIN0ClVbb2GE1eZ/WZgsyMeFJjRsXzh7F+iG5WV4GHaGaOh/DwiBuJVi9yCCx6F9O4J3GGR9pMV7XeYh + eghrd8V3nhKDBiiHtpdmJvZTXnCH5rUTakhoC3b+VxtDSFiBA2tXNIVoiYDXFDqYVksYJO7nHq+nL1IW + UolXfFXzf1b3Yj/yhBhVXh1VFqq2gTGiiYeoWo63HGQRRibIH69ziQKXicE4flvoIn+YC1CVgam0jMbV + E7XIih4XJNLIfDAIUWVyjdiYjZo4jsKBi7koE2AFdunEf/3XFtr4iNBoHVW1jqjIfsuTcLk3TIu4IfbY + YHlSBedoWl7Bj6jXevUIkA6CbrVAkFtlkOYofsLYQAu5ff9GdFboJGr4kLrnJRa5f8GzBaaokPHXgh8J + ktYWGM5YR9FIdx1pJCi5jdknDixJRRt5kHrnj6v4eJ4WLTaZKy7JghO5dAH+4hdTMnSzaB3eBpPPEY9G + 6XyCBJQIGY3o0JR3Eo86CV1IyYtGlyHyWJAJmZUKF4c54oD3xSJgqYWgoVb7qJUGOImvAI4ZxyVquYmE + 2IHWlG8cUnrSlzR2eRR8kpMblJdHpJdR0nZuJ4kLhIVTOY/1AZg+sk+OGZMGmZjIxJXB00GUiYcHEpke + EImRdZiW+ZZst5g8EpqlxW+48mD4+DfGtGxzE3VBeZqECI/bApZo5ZqnFSN7xpA3KWi1eXy4yZAfImRC + lXSZFJu+KVfASW/UcZXpciPlxwkTB5u9yZwDRy/xVR9X2ZVqBBVXoHGGiUG39xRDUnqk15zdiTUhE1T+ + gDWblVeHSgkTmQmGVNmL7Ik2FjZF6YmXIEWXp4ifzbadjnh2qbObzFicbMSZPYlfBeoTtLmew+GdVMM5 + g2mS2SihPhl3jLWaqsg4DYqDxgehBNqhNfahIKoG/GlIGrqhEdqP3JmibPg8RKVhyOOcMDqgV/RsE/mM + mLCLcncoLVl/McqjHUePE+SXVqUjRJqcJcpxn3aS7Haj6OOkAXeiXjOcU1p4InqEqwSAT5qd29ejREml + VTqk+ZFSUOqOW6qiMoaWV7h8IzemljejYll4LepkQEKnWeqhCsal8KCnqMWnYlqadoqknHimLCaAtxKf + l5l3Uvqm09hoQupdFqr+hI+KSD5KkdoZjmjqW1iZqbO3qZz6o5HGm+UkqtpEbYAaqKEzqPuGqTuoqYr0 + mYy6CV4Jgh7JoWR5HF56qsHWpboaqrzaqw4anpI6qVjaVgi2qJXJrMjai7eaktz4Sm9IrZKxq/gQdT0H + KCQSdN4qruNKrjYXri93rizHc+XKru0KdO4ac34KGpWYrXW3h4JKrMMamKRqi9uRZUBZoasKDT+IiPFi + M6xqfgBVmKNqpmtEn+4wGPzar70TMngZfqaKIvXqlPp6sAi7oLD3ihp7l8LqLA87aKnoscs0IrSFodXq + cGwToPiqURnahP82Kgmqppzal02YqjLbsSnLs//+6TAii333SjyxCrFWSbMLii2qKbDLOmc9C0BKO5S/ + +p3TNrM6y7GguqJE+46ft6bb4bSF2rA+i6u9B7RU26pdmIRhWrZXB6yYmKsMS6uGajpYaKyverTOGrV0 + W7dTq5kJ+KI0mqdcG5VVi7gnxFjXF7DaCnmWmmq6I7klK5pXqreFW7CO5rdqq7gqCalJanaZywdZKEsn + hVWN66iy2iMtxJEX24wS26nDqKq32We0JHubK6c6OrJ212K0i7aTm7j1qSeoS7bbeiCsy3TJWzb2ebnv + lSEt1LszBrzlyKYki1zHq6RMuLsoS4t1qqg+hr19hlTAMXinyJdaS6jQKb7+Ywut02u+bbuGUHupBxpn + Xiu9S/uU6vi96eumI2m/Kxapg5u/I2qt0UuhXcu+kUuOUVq92Pml1Me/d8pt5Yu/Y/nARhtEOBuxH9eG + 27uv6WivoIuEBzxprqu8GyJx6AumJPxxrRutO0qaF2y9adq/2fa/suipAmzBIcy7VirBF2fCNJmjG0nA + unVKN8zDYRu8FTzASVzAXlamqJq0xFW0fwvCcgvBexrF6+BmujCeOUseKfy2D7rFh+u+QmykMdyZ+1uR + iSpmSBysnHvFCtrGBNKkbpwycJxYCyjGy+uB2YHHIXjGg7zDWIzBdWxKAxvEcJTGDrzGPQzIyjqSizz+ + gt7rxzIswsokyQpMyH36uWWjv0+8cIF8rHLMyDB8nqH8sj7sqlxMyQNoyYbzmJDMyomcvUtcyfKKyE5s + xHfcyqMLiJbLybGMPMU4xmT8y2actkBMzCE0k72Mo5s8yUHYyHY7sZGsytCMzaW6vkycy4dan9Kqzdgj + zTCGu9/sq46czbIbzskMzKobu577zLU8y7eYiLZMecs8zOC8y+ucWabrzu9sxdOsy42azodMztz8PPqc + bQ1Mz/P8zy6q0Io80OZc0MZ7zRGdifi80Fr6tOvg0Mh80DO8zXbcuQBHnp+sxBlNoizdlhL9xx3drGC7 + os1swPzMzvesiGR2ZmT+6rKKh9Mt7dJaNVINunVveKQQ/cL1TMMqndPOPNG1i4CjF3v3USIAHZf+/NLR + zNEUXWQvdLJD7VzMm8W4R8qeXKnhApVTPNJ5GNLj3NQB3dDPqdaxxDlO7THD27w33dVSzV9QR7lijbmo + LMoYLdf7HJCNqNX3Kc7OW82rDMVlzNO/GoVF7C/nq9OEDdlC3de/e3RLislpg9m+rNlPfb2Srbm6m9V0 + LNpgndlvrdHg+8PKTJNrLcCjDdWlHduRfdbW3KbtyNR4hNu5+9imPbuo7cpALZyP3NpB/bi6rVeXxcIy + PaHAbdkxWFftXNy7zdflbNGcltKhHRhxkq7wSnP+5W3e6a3e680om8Le7z0n7t0o69om6A3f4wfYpG3T + RC3bNQzSv+nRi90d3NDW/b3fShV49NvNKjsh13EaH0APgm22B25Rnai+YZ2fkvbTGBPhjT2/0P0vds2H + /k3Q03qczQOR20leEn7X2x3iIt7B0+3ZXUiwlPXgAKwk9qSeeGq7Cj7ZNO7TwZ2Ch5Dj+n3R52Q7cYvD + c21DDMzLQy5nT/6ssM3f3e3dKx2cMirghgwMSj3YIJ5TSe7jTE7XWsPiegQMxpzQLo7gnH3Yn+1eBDvT + Ui7Dab7lbA3mFe7mnZ3HJprlHm6vl6DmD33ktyTmMo7lSf3nXr7Gdi7kU07+4aMZ48jt578d5Nf9yIIO + h4SO12G+5ztd3ZWOtXcOhPeLoswN6ZF+nVbO56Lu5AFO6qVu6lRsyJOe50h+2pRu6eUWkhvO2u/Wx3HN + 5gXFiLO967we5Y8u3tG26QY+7Lie628efGg96sr+5KXQ7Lz97JL+6TNkfmuL4r6+wLOO0gWY6qqunMIO + 6k2OzrBu7ahexcsdlqze6cS+wq3O7u1e7nQO78we7Np+64Yu0jFtRLTW64De78z+7tStw8ZN7yccWX53 + 8EP0JPmA7f9u69su8ANv0qZJ27T+SZyxD9iO6XPrtrQ8ylGd78yc1h4fGQ9B8iWPwGDMxs6uWK8Ouyb+ + 5INxTOqCvvAznx9nudUcT8GXXqv7XkIvv43ZXqw0b8/3fvPHztjuHuvzXuugLevONac1b/MQH8BTT/Vi + S+7OPbKFUTqnQ7zozvBFv/JgP+cI6MHLbvXhnfUTLsyb3fWdPGbVjmZy/qc8//MALO8pfu4NP/Scfs7T + Hud8j/T8/uvj7vfx+9xOj/d5n/jJ3nUTL+7m/utMX/gBf0bCBMeCH+5LjfWBz/mdj/oTXLyVH8G4bPQ5 + 3PiOD/mP7PkGm7qFDfAM3falf/q/L/cyv5aRL/n4UUZpT/afn7VoDFyLfuaED5BmPzAoJETIX+C7X9Fl + 3vyMX/XD33C3P7o6lvv+rm/5G6yY1E73qw/9Dgr+QPrB5I/9pozzcAnymz/3PSn99bP88D/isK/5yk0A + 8EFwuR3Dk5NFeqedCjvdQUbgwtKEzlRd2RZ1YZCMaW+d3ZHC468+fD9DULQi1kZJYW/ZdD4BRyhLN6VJ + L9UYr8F1Yb9WcMLbGVM5ZSvlvHa/gfCcvNV2aGFqg15l74uzjJzw6MwKDwv9EBcIFzEUGX/0+P6eICsl + GkEuZRw3PUGdOB0pQ6NUSksmm0YN185SbYRiPVtNbxtsD2kdOZUkM1mhdEvGNF2RcNmUmQWbg58rQn6X + yo7DROFgMWl4e6PBkcMRvBHbqAdxksrFhYhNjNn+T7eum9/HzfEj9ePlTarqMckmZ1uKe3sCMjuoTxvD + A/4abqCzDtDAiBK5tYCYyGHHhW42ugGTsKM0Sxw3yFtIEtfHksNKhnyVieXLISdRqlHZTeYblzaFdew5 + ZeRQhTg56tyZx2hFoOB+Tqn5DdrTDEhRYjyxsilRq9GiSh1n7OtVi4fIGkzmMGzZOi+7utvh9kHbtp/m + qqXHlq6yu4PGau37IuiiglvX8ht862+TuD9GLl5wt/GjHUuZ8pVcC+5jgQ88g6Ic6jA8npo3G7YZGtud + 1HHOUq1quhvq11mFsmaBRbdsuaZKFzut+DZaoL0zkkNuPDZnwcL3Ei9Op3L+Onugi9v1e1lvZobVp0+2 + OlUk6OXMl4DH+zzEwfMw1Ie/OX67iPe4f7fkjjiPR/kXj7tvGUYEpK450gLp7oaS4pOvwWr0e6hAAw9E + MCUFUWHwP5/KmrAucv7T7png1ltQww2deoo8mB7aUMQRE6TNRP9Q9KpD4FoMsULGAujRxx99HAHIIYks + 0sgikwhAgCOZbNLJJ6GMUsopqazSyiuxzFLLILfs8sclvQxTzDGbDOxC/v6hiMYasVIRxwRc3LG+2drL + cEUL2SxsPA9RuNOqsB5Mzj4MZUDnuzzlFEo0PvGrIVBB90FzGkMPRTS/rxiNws+nXqyUzjpVoVQ6S6/+ + oGvT4XTU07Yu2LlEgVN9IxW+vjwUskZAOT1Txg5E9VTW1twq0FYUcc2VvRKzgNW5X4G9EQ4lHkXvUpuK + InQ/oKIdLNtZ5OBgWwqnxVZX6ErJ9C1mzzX1DS2+BdDRviJTiyRlRUN3N1qRo6ZdDtNbjLdWEYpRXHsh + jYleXnHYt7xwy4oXsXm/UthYTHvTRGIbGW6Ypj4gjphga1eDQtSLWczYLQu48EdJPsxN92NQg3XsGpIT + dea1lV0zKKGWXX7ZMnXpUVMWB/udTgqVA+L5Xp+RVXHedaBGqCaaVf0sO/OMqEdpm5m+gOoThL6DBC3C + /tnoqm/GjuOy96Dra3z+3g4VHagPJuxsk1M7OutXdUhja667liDuFKJuM228Dy9CkL4LdzvwASWrW3Ci + Eb/tCIgi6PXkx83ifGjLi87zcpVz3GxwsDz/8G7ISL18acmPSt0k2e1O/F1ZiVAWZdtpn6f3+UCvPNVI + 9YJ9zt5Pj/1q1u3NfWkyTP8deORXL5Xg3DGXULLkj6ed+4Kfb76L8P+e9ffv3wz+9peD0L10bRWNNXX0 + JbWafQLTLb9Zz+lfNm/hcYe/10WPegX8H/M45wP3wYmAsuufatSnEQU8sFHuM1765mfABs7Bd/xT3N42 + 6EHv8c58I1QOGkgYOAo2Cn7r0yD0EKacFXrNhBmJPGB/ZhirqTQuh51LoANTGD7ptS8Vhurh5GwowhDu + 73yDwkAjjvi5x0UxRS20nvTEQzyBTc+KU0yivxCIxSxqL4Zj7KIKvwivMIrRjDB8YsJu2JkqMo2Ksysh + G+0YsDfm0XFuwhgat7dGPNaOgRtzI2zOSEclqtGFg8xj0hjHx815kZJgvCI+CgAAIfkEDRQAAAAh+QQN + FAAAACwAAAAAWAJ0AYH///9WtOnw5EIAAAAC/oSPqcvNEYSbctqLs666+/9BhggKEAl2aMoeZ/CswAvP + dO3io263/s/5ZYLCojF1ShGPTM+yCfW9WLIoohrjMbWW5JW7myqw1uazDDij11LwRc1Gw+P0L9lBq+ce + iXvRb6c116VnVph2mIgBSKEo56gowhhoMBhV5bbm1XBnmYMzCWnhyUQqqhm6YHrascoq9bXXE4vgapRZ + eDNV09mVR/v6YQsUHJmqMFzckKysMqZ7g+x4jBYdhovIiYLZ3HrI3A1CXRsuBF4+gY1xTjWuafM7qv05 + hr7+bV+2KZyv1L9VhJ24ff8cwInXRx06gfwKHonAgmE3if/cMaC4yKI9/nAag2Ec4vCPwoshnZRs0VGa + npEnmbFcmOgjOgjMZL6yGS6lyjq8XvZzeVJVzKADaxK9dzSDGCM48SxNegAo1EpDpxIyapVk1iw+QSYi + ODVZ13JNDW6NgfVsgrKQwJZqq7OY2K1sl6n9Aq6uI70XxhJaw9dpXA0w/JoVdzbw2rsjspVgTG7a4Gdx + FKeDZnhBEoTEQqi1TPUuzYiQo55yizKzN3uoPZCZPEx1M9Cht46+rLW0Y7WyNxRs7Qt3Z9d3ae+Getuf + 7uNZJyP9PVadGL+2es9WZLwJRNLLs+uz7tVh15fWVjsrvndq8obdRYMPL961X0kjgzByrsy4dyHr/k0u + Z27Ve8+FNI5hm3G2GDR8QJbdflLk9R+AyAn4xlHlzfOQWwRhht912BGVkoNsiAgFhfI015qJ8NB3hoL/ + NXhSiBFKiBw+vHHRYQy1zdhIeuJt91iEJGqn4mHuXWFjUB3C+GMLQz4CWZF2lYbgiBZSyGQ/JwjAZZde + fglmmGKOSWaZtD25wx+FoPkZHt3Q95STPphJp5YyrklnnnruyWeffvIZwZ+CDkpooYYeiqgJgSaK6Ate + 0sSooHPaKeeMbPInpZE86qEGapkGl5A5kFxqR6UvRvnhpmsKphlcWgyWZU4dkQoFrTqCmqSqdRzEjWSv + xuUdrcBVaOmPuORo/p6udPAqA7Ln1TOpj2+qZutbxowEyLBWKrtrOjOEKgqOsgU7LYTFSgbuM5k46x+3 + lfmiA7uEgUHtqOWaempbn9C77qfwuQvlZaD425e40VZVTH/tCslKHpvEuaJcAL9bcE/yKoXjwQg3rHCy + +X7FyyyFsTrRxBTDe+Bp4lJnbzAde6ybd3fMTLByJgeM2zY1Y6iZReRyTOOAHzcJ0804C5zutTz7Jm24 + QNrMMIE7B2l0GaZgMvWtPWsjiCgObqnx0BXlU21WqxjsKtfqVvGzq+aeS3TRVVs979ZOuzHdhUFv62u9 + PJadNFlzHy0ctE4LZg0P+8msbY9/Q5c11IMb/vJsH0C7GS9BbYPs9+NahgS4VdXZnfbMsSju9bWdR53P + xZRPXmsIaPedosUybL6STqEzRSnosEcRW8+RJySJmyJ7sfghEC/M+kwt/Q48YsQPX2q2I19DAt708J5L + 45rCXY7rsUP/ugorH/5tq+ljrcuK7XPPk/ffi51TULuHhQQnKs9iefr+R4a9lKUJfnFYHsza0zr7ka98 + xCGdMRrjAmBwoTrgCUyVmLapsolvfAskoHwcGAl4LCiCO6lbQOhgQAx6LnzUG04HT4gEenHseusznGk8 + A8MC3imDrGmhC1/4ww+qS2Ujq1LXhCgqNqRQaM1TxgbpBsQcxjALRLzg/u0GIsXv7HCFTvRhFqPInXbg + zYvmI4FY5DelaqBRKLoi1ROhCMawSW9pFQHbQMYFQSL9j2pcTBgZkxhHfOXPW0rKDB73qKY0rA58Lvsj + IAMZxik6BUSpISE/OpS9WSnrUm8kHCSZh8VJxkg1hWEZItugyMzcz4OXE90nBXlHQo4yNZp0ThIUFck+ + vsKRX3ylCitJx4IoipTcAc/7+KjL/dHFl5Kjpf4UaKAVUGOYmLrgvxipTLMxM5eoVN/zohm4UayRa9sx + ZRsThp5tIvMHMiSKCYAZBt+MU3gV0Mgqe6mvNqmTPSIBoUPeCc8lImOe05MAQe+Jz2mkc58HhIU//v8B + 0IAeY5iG9MJBufUkXh4BofjTzkN759ABYuyUGCuiYTgaRLgslKG/xJQ3CcQQi7WChrKLAE1Bic206ZOl + LWXn7MQTU5OeZz4CJdY5/dhJwPC0oSENZ+ue5kySziM6W1Kluzip0ZQuNY0PCSYLX9bNdZSypjfFaU4b + lpitXtOlVHwqWJvalzzOy6aa3GT40qpWowJElDMZmUzII9KMuIip9NtlVuWY19x0tXB33dEtzCfXgiFC + b3pVlRsPC8vEsnGvjH0TAG/BknLOlQM9MWsTXbZTzXIVtJJtrGMTuYjJYus2mSQsApuRVKWqdn6w7awf + b7iF0NZzpMMNbGV5/lg/vO5WsRmKrWv3NshF1FM6tI1XT5NpWOUud7Oc9W0VP8va2BZXYAaVJmW4e9Tk + anO7zAWtdHCL3n6KN7Jc4dBmeHtW1C6TvfFtrnfzWcLHOre8AivlLjI51sVclTXa5S9wL2E9dPbXpxnJ + xrF68IvyTBBg1cIsNx1clwjvcrW9FaVBvaWz6YVMwQt23n4dDF4rYCO30yMxfyos26kCI1Qrfi1yn+tK + GLO4Grj6yomCO2D6RpAIM6YpSh/p2QYLWS/3aWGC23vjuFJFe664IodxqEQPN3PKKNSykY/sX1kSWDOx + 0cGTodxaJaZWyD6GMOJy1zibvDcqWIBB8B5s/lf5/JTCUiZzmclZs+ytlZ1mniybowvd24bSuHANMp1j + LGNW+Wuef53xWpoF1We9WasjzfScL82XSVzMnpf4C5958FakjZrUk2b0Si8daQG7ukRW9Shft4yXdtQZ + u8Iu8XpxPewSURpJpv4wobX26hy4pAazzqx+T01nC175pb62dqV3XIkUNzB91fb2aRiEbECjwoBS0h2v + vRrRUJ+n3M5GK2PonRRt187OiM0yt/m87Lrhe51YtGVpBu7O7v06vLSmglctHKmIS3zihqIJDRq1KIpr + fOMc77jHP96ni4cp4xWHFMj/RPJHjakwHPGzyaZd2mrGLN3q1mGfe0NQ/sch+d/hnkHLcz3zLkoa2Yx7 + VVgZuNjzfjrWwUG4acMVdJp/Ddbw5KAelV4Lpi/6x05Uckelbm9ZzDF6ze7fQM/h8pfLisa6BXs2x2lN + Vura7J/+udOfjr5b45pEFj1Gzvm5cxtGW9h3v252703zZCuviIThlD5GmHWBFH7rM4y77xIP9AJaUnh/ + H/PcmV33Yot5WV9lOxzdrl9++bApfW6VVKRK7Gzqfe/wRaTpa550cOPeuZlHt6x0f5TJXx6pOvtjWdo5 + 5M3zVfjHbSRlg4/53qMQM0SaKJF5zmTYg575zTes5UvCfYg2tkgC7H7ulb+j2hpP8fmt4ug9n20W/r77 + Gob/vJLt8/zNh1/nuC0q+KNvKyZSfrblb+jnGBmmaKAnfYjXV/n3f5gnLNbhf0zUbQYYCANjfly3dhNI + NgA4LcbkdYBXYlSnPwZGgKfVRQ44fKjnfDrRdwnVVLCmehjWWvuHXy3YeRIDgX0laPtQQa2GfgZjUVg3 + CzaIZSmogsLkgS6GMusCgyhBd7YXc/+zbShghBNWeu+XgTCmQaSDLU8IaZH1KyLVY8d0hVhYelBxhuGg + QTLIgdpXf8IGClHoP5mDYPGwhskHHWq4hAnEP7IDZ8ZGgpaUMTW0CXmIaSCVcH3YQxUViEBoXFNICeWB + iLvnVtDHiMvxg81m/l3QZnaaczNP9oY6uIMzsolyFoKhsA+VyH5PpUCZqBun+A7xRIRqY4mxV0daiIaG + FiGyeH0R41Q8w4oL2H/PA4tR4ouPR390KBzDSIzFuIIsGIsbxRPLqIC44ozVdnsER3u9SI2HZoKS9IzY + VkjRmG7h9x4W1BhlVVIiMIzlloOrcoyiYS1lxnihlHYTA4/biHdc6I31WIHrCIzt8I62oYuJiGr/+I3K + Rjw0+CCheBb8GIf+qIlWh4rfgnMQaZAHOY5qxXwmYhzsCGZftpESiWbSyBggGUK6w5GnFyAmyX+JJ3wq + eWbU0pJWcHcweYREN40WWY1wKE436ZMRKWbO/kiKKUl286cjNimUSHcjbBh9t5gURcJ6KDYn8Zhv/6GT + UjlEiVV4VKmMJYhKTbmQmphVlmBfHkklLslwfOA3W9ktPIKVvZSEcJmVqIKTMuaEnQMnZMmNsehITOYT + drmISJmX/NZWYXRghAmQcml8IlNr25STniRfzxRJPfaHvqcrf3QgVOWX+YGXh6mUSXlzjPmIvWhlgzGK + 0ON0n4ITc7mTA2Sa/WaKntk+fjAFQfWZHmGYbOlevmmZs7cpfndMx2SNHQl8n4Rw/lKVwOmJLwYw1kMN + zycRRteVv7OcfDOaTmmL5KgspVlsuwhZ1bMvrMkbpFd23Nmd0HkzL+ic/gVnX6uJiyVRM68pJWczm38Z + neKDEdTHc0aDb/Wpl6I5V965XdkRjlVDbzvTnEMJLwa6XEW3m+pJn46HmBS6cHzIk4sniRqpHha6nWVp + QseWkN2jfgoaIPIYonLHe5ZWoniWnBiVoiBafUk5bi4afybKjC12JbkSXCoyF+zJi1CHolO5MT9qo5Xz + dS9KpABqpKlydQ7aaEuao+dWpOUIpYHXmOOJo0OKLldKn6uXniyKY11KkU3qpLPUMgyJoUhjpiAWdmka + N2sapSIqaG/KXyIyoVvaQzcxoG06pYXJpH/6nPoYH7xpjiOJid34i5AHpkzop4nKpYvKqA80OYBz/lj3 + hHZ7apRNwzl7aqfQeJQ/8WzQl58HZ6WD02Ee9pqA+l8PuKG+cqmQ6iFsSqYjNaGdmqVa+nCGCmSguaK0 + KVinGpNe+ptNODfCshEXqgonBw0nB63RKq3TyiUplygmRyYiR63byq16gq3dCq5eop8FhmHEGmBVGkKw + wyan2qp8KliUIZS6eqTVaK40OmKkqoRkRXXfh6iximegKqXpiq8BCYZcMUT8egry6qPxQz4ZxZGrREE+ + KE3yaa/omjsNK2EDm69zJbG/QrHaOagwqq6NtLElWzGMZ0Ww6aqaRRGDWa/oGacdKKm26J/CIzj+yqGz + eq8mq7E9OCzbNqrG/iqyyTpDM3uzdyQ/rHqOefeonAOrPBuZGHKWS4umcvqlRguVpYo4H7uyXvldVgsy + r4i1ZVpgfZk6OKs0YDu0Twu1WjSJCFuwqsV3ANtwjWqMY5tm15mZ73mgJOuhykOp/8SwI0qZeSp0vnpm + You39ke2SSq0VRtoixe4bXu4BGqxOyujkju54qeIY3euZ/pbPLoSfmhjPcuD4hibEfp7mXuxd8m2DGa5 + oFu5lqW5m8u5deS4cCp/6fWTsFu6puu77speXUi78fN+jIBSq6SyrciypNt+zKpevyuzUpOOaDst8+lR + L/u5lOtWOaiwcdmnz6tH2quHgqsevRay0Tt0/rNIvghZdbFLSfXWt58jvnsFk13xVydTI/KruvSLgnoJ + qm8Gj/y7W6EDJ1EnZ/mJDQLcHAQst5BDt6kLEO1bvub7ofA3v/67vo9Hwe4bhoUbpg7stWPzvxDWwVx5 + o213weP6wL9RwtB7t+cHwhWKwQVMIIWlRhpqu0oiwnmlvDhstwqVocwrN+dbwy28hwisQyQsnqjLtzQs + goZ7w0p8kTt8dDM8pyfYvIeqmfTqulYsNUdMqzHMxMKpRbs5a/soxqsLxlHGgGtLxoq7v1EsxVkspKhA + pXL8pHQ8vDHSxZqXx3EcvyyMxFwMobYqqG3swj2slmH8xtOnw1+8x4Q8/sJJ/MhLLMmJbCHmZsOGbMZh + qcmhDMVr7MOjfMiIHJ4VK8qQI6yd7MmFhseKfLtYysmFjLuXjMm2BpS3uri7W8tbPMWfTKh6vMplzMhb + hVAR7MEAXMy97MatbMuLfMownLEVTMy3XLfA7Mh3PLjOPL3bnM2VbMqB3M0WjKe+fJr968ewDMmvm8nO + m86uPM6RDLiCLMt+G6oZPM/v3M7BGbQC+8uhm8/qvM/3DImOun76C2ABfW0DLc/BTKIK16tnm6oMjbm8 + rM12TM+5MMRK8cSHBs1d17VLxVHKjJzvO9EfFbdhFs6HJ7wPjc3cnMslGFrLi8KVcUh9CqTpG77T/kzN + Y5m72NEbbbjLfAzTPe3TwZrSELTTHpHTaRiw0TzG7FzFjbsgyPIkEXXMThvUBA3PSU2wbFXUWrwsT62+ + I81TBmzS1lzVPtWJL40Pi/TMUZ3RvyrMQUxLb+3QcR3STIvWLGXAG9y7bj2Ie90tJ2bRlgq/Xs3Gf8zR + ImGdcH3YYy3BskfXpfzVd/0dbWmBfW0la7bV9bzYR117VFzOUbWjiQ0liB3ajz3aUl3aqKrYVxxwqi2a + oE3JC33ZjXy6pj3YYvSfnt1245XbQvzadR3bsh22bYB8hg2zXfKt4coo1ird1W3d1x1y2K3dKBfdIdfd + 0L3dhwJcJ6XBf71P/qv6wjkM3LKE0TBrYeQdvLtN0vGt3BKNtEspICRCBKTV2q3b1ciNz77N0rF0Z5Lt + 3qFRV1Pd3kaTjAEu4Hh9stmyt8Fd2SBbG/Ct4CttMg3e0A8OyiUVghGEJZGqEqxG3wY+33aNy7Hcjkq6 + 4CrMYiau4i8O2Ojs4TXaeIqq4YWLf8WduP+N2deb3rzaoiCO4hb+WeY01+bNTBE45DJs1XHm3Eie5GMR + gDBO2jFb3wCsEJlTU0zepj3ej7ot3wylrE++3h9c5DT+0dln1H4N5q/kRvXrxDru0WX+0bvhDlee52l9 + 1o4t1lAIiHH+4m5O1rV73Mj855p9pwWY44S+/tJLgL+LfuRm3tiATtsOZ+fxfOD8Nw5zjuWwreWMTri6 + /OiV3uevNenJDeSKfumkHuWC7uI7nugB9ulL3up+buNg/aqafupTHuonSdknjcq5XuMnHtExJIApzOa1 + jl6rXs2prk7EC+sJHdYd3dLSDl63zup4LpmuWO2FyrjW3uzGHl/Q3uHOft7lnex3vmq/DuxY/D3c7uDq + Pu2de84FDuEIfasE8zadLb0/Lu+Wzu7kLOUfTu6yTuzZzlzoXtEDv+74zs8HP8zYPuhErO3P7hMZBb6i + 3u0GHYzdtWvMvcxUzjwOT+ZWI5LHXvAgH6Oczd4kj/H27ulvftoQ/+3S/mzwFC/yMY/q5n6S9A65ON/k + r+zyL2/qRdboFU70NT/mbR3sKa7zE8/z487vjecGDkIRgvn0s9jx4tzy7gzvgSru/oxETRz1krPxo970 + ylnQ5hy1Pn/1Zh/vNC80KC/anc7bltzMZK+1I//z3j4gQm/cei/1Ru/NFF7ncl/3gn/3Nq/eqnz4iM+9 + a570gB/4kM5VhO/fkj/5MZ34tVj1IS76ja/5q7X2rUs935v5Dw/3nuvojG/6rf/4XU/YtZ32BA/OoS94 + sZ/ws0/7g5/6ajRYKgr2oP/6Z29sdB/8nO5Ce75u/Xr8YQ+8s375zA/85c5PeJ8hGsX62j/0lY/5/oGO + /eBv/snC+T3PCt/v/B9f/WPv+4rf/hkPNdzP3HDJ/gx/0ck/qZX5+9lPAPAxVWX94WonhChvXtVY/UFo + CsnSPFFwTNnSa2FyNd+4yzjbmfWP7xOzmq83BLZ+R+VSl2TCjM9mKgrFSQFOrEF7XOVUxW2qOzafy2dQ + VV1KP9it+E36ZtptQplu3t75AdXwAjcIUQYpwIAUC+sMEWG++hhiGA0fIC81NTIvJzcRECssi+I+kQg7 + WfRCVBNIQQ9cY2m5ajVgb2U/Rs0YR09XHwG/9uSCh3WViZbhmv8ues+kpcdmhYkRcjGPn3e9wYPCX8e/ + IZAXq82uyQJZw1i2/mnZy63rO9Avu+Tvmd1TtaGbxQ8UvX5PDE7LB/AcwYMRErohFOCdPxQONUV82EPj + mIX/ImDcSIkhIAuSWnUD13FkpIMfs4VsaYKlRZAUjFEJV3PmoZflysDcyDMDUXj4UsYTuq7nvJdL0URr + etSPUaoABKp8ZnUqp4dQmTbs6vWmPnJJ460ca/anWplrL3DlVjAgWipgHcEtWQ8vln16Ie7NePYqjb53 + AJfl69ZZYmgxY6EsTIOx47D9DiOGk3mn4k0Vyd71JteyOcyjz5UmCdlpIrsnRHpWrflrMy2cO7NujXMy + idi6Z9P+ijuGk99NSa+uJQTZwNzBEc4k7nLD/vStgnfTseniOfQlyZcc3/LDOmrg2bEGc17Zu5ee5X3W + bW9LNvrmOtnPnyIdPk1t+k0TxLz/tguhvzwABAI8Jg60q0Hb6lvuFfUuGmdBwC5U4kF/xOsqwyx2EkDE + ESka0cQTUUxRRRGBWdHFF2GMUcYZaazRxhtxzFHHHXl8scQegUSxgiCJLNLII0+0kLDQ1lAHwgT346+1 + DZX58MMTJGOSFyefhJK69yLTLsEMr8Rywt5C6rAqL4ubikqI1PQwwi7FLMq3ONsoE7mu3sSkz1usfChL + LaPBU0A2sWnKUCj+BPQ8oAgssKFGzUQ0Pjc9oRS9y4aKlNBJ69FzJlFL/glkFFLZyrOnQe3ERdNKLfWP + T5NOQpTMPV1D88x7UO101jZy6BU7e6YqBp4+XoU11tekU6MaYR/1a60RYmtAnkVVXTan9zZUBNpoo4OL + 2j2uPehbSLl90MlzD2132lxVKLcfdrsbCVtXMRgT3FHh5UReXrVldqMDYaGX04PXooi3eE0RNGBJa2Mw + DoPHWzMxDib4TYCGzX3404EPA4bLULxckGKO6sTXgWQv9XguRT8RWWR8RDo5r6iCy1ggWFhW1uV8Yb72 + BWpGjkvfbHNGykBgFOhZ1p+BBlMdmTmzOVycvcvYBarT8xVq5fhk+ub5TAbQ2qw4mHkkqzcNu2L9/srW + N5+z5fxaHLtFOBrh9ug2xukv8QYx8KizRlruubvGdXC2q4TbcCitlQirYgenr/IAoQOP8fGO63vVyjeX + kGx3Ld0Y8cRbCj3VywUvHOtlI5f873YCV52u0V+HvfOF116cdcszJ13bjWWdveVmkrX9M76FD1g8rfnF + W/nVk9774ecn/9zu6ZMJ3nqPdzfeZ5e5H9YxnowoP8+FYo8eavUt9l5DsLdnX/ynf4b/8dKS0x/YfO41 + mPexzn8f+87vlCYWfPivgAcEneuOkD4E9mtlz1Ic+S7XQKMRa4JZ4Acj9KdB9/huNv3roCw+SL+ODbB2 + 8pPWCVF4BZJpD4MtTCzh9xD4wSHAT4QosyH/cDhBHd4tdU952/aq90IYMkBoNeBhxMbGQiBycIlBYEPa + dkjDgPVQCVwkohKryMQKWkCCRfSYF304RTCGowAAIfkEDRQAAAAh+QQNFAAAACwAAAAAWAJ0AYH///9W + tOnw5EIAAAAC/oSPqcutEZJw09mLs626+w8CkTGGAlSGHqS2D9rACMqKrHzUeUry7g8EcIK/IfGIBOkM + RknyeWlCpyucckmdabBJLgZrTdC8oqx5IT1T1OwjNs1sT+FyNu0zrvcYvPDT5xABSJcBqIdEqJd4yNiT + QrfYqBEp6bZXKEPZ5WNoR7bToGmT0lnpInqGapq1RKi6ivAKizdTctPHIwtUejiWdxv6lSc2S6Q7Vyz5 + tpYMctxsgevri9b42Ts8yhsXo8O1DR2V/ByOl8tcnkGeThy0fgVed5u9EWj7Hc+u8G6sb7YczJ84gT/y + YeDX4Q5BddEULjBIEKG7hX+coKNoEWMI/oj15PjRGFDFNZDcikkk2KojyQMnw3G8aGclwxYjSbYsInPj + uZAybyar6cFnjEs597kAClKoiaJVMlZjqtTUx1N66DEtufEqg6gfuM7ayXOl16pTgYx98dKfrrQRoZ1V + 9khlzreezNCthXThWq1b3fLlExemWKl/2Ha4i1ZemSd7/zo16bgdS8GDsRkOxAbxw2lldQpyOFFn5Mew + NKtJGbYn3Msv2pjektdetyOvYlceNxq1l9eI/rI+vBB0U9mhlYwmXTpy4NS3r9qmijFtPIVsa/8WyLsv + Xx2u+GZ3c32SRulVhIundRx5cufLn179TuQ5zvHGRX4GDupCeOzh/uDviiVXUf79V8eAsJlD0zydTcCZ + IfKp5ldR3AU413b7nQfSNPoV5oUfd1CTnnvNGFifEBRWqNWFGEpYlop41QBBGpyFSNl6JNHQnXe+HUJi + QfjUZSKNZpXTozAs5KhVkfYVeJwVLh7E3pNBRjieeeo1lyKT6VnlWpRUFKlkNygIQGaZZp6JZppqromm + HP49KFmXQlZCiJTxNZiERGzuuWZ099XIGJ+CDkpooYYeSmiMiC7KaKOOPgpppGwqKmmlZo55qaWaktlb + cFYC+FeYV/A4J532OAiLhxcqKWp+I7UalG92nliqnIA5OCtsgMCpHZX6zAMolunUxOt8tZJ6/ionuWKi + bLFXrtIqjLzAGqs/ndkgCbUoDqXsV0P1Q6S1k9EKIVkHEpftsY3UGYazSOBKWzphThisTdaQ0uEn7han + rpan4lUMGfuxOmx7Ir5nzQ4Cd7Ivv/3amqwjP8E7ZLjl0MucgJUM442qy+L3sL8NKfjxuQ+A259LBhsV + asKLjSCImCVXG7Kbun44szCbOUswNBhnXK48DFOccs0iR4Ntfqtccy25Nn618rPCspOzM0YfHXEtUJfC + a88BS60tyNZW3dXVNpusNdTo7tyrr0tHDWrLwekT9raYbLb1yGjtxs6bYEemLdlWm50ZeicHzDQOvxyM + W6pwx62jQA1n/lF30Hc/NLF+MyYNudsujwu05SoLvhThaqhCtOMbLnEDyxZv/DjokRdMUeWifwEY4q1/ + CwoXYfIGVtuzX4yR7VNrnrvjIGIO8+6djwj734BTrZHx9o6amPLO80EUDr9vLPWUw/tMOnSmpyLSzuXv + vdjI92TDsBglawZQ6Ld/Xf35py/JtvKcSwazW33IEQ36GP1ih5XxNWN9KrDe9bLCu7eRgHtJI4MRfhFA + LezPXM8L3/FSlRT9FS59FFRd+/7HOvuJCX0clB3jEHYxBjZQhBskYWu2pq8+CG84X2phAl8IlRg+kIY9 + TFDyENc+aR3Og7Oxi9CkNz3yfZCIKKPJ/q10FzMu/c+FK2ChJxAoPgW+TYbmoyIUyDGVyQWhgEfkYhed + CCQ3dhCGSLSbGfO0ixyS0T4/g4ca58ghQMoxiJmz4x3jRaC1ZQgGz2haCyowq/qpcIrYIOQhGZPIJrJo + HXaCJBXCgCTHGGiPFbskHn2EPKbsK4Xg+qPCBPnDJBVSY6Y8JSobwp74ECU0UpIkEOkIQmDW0mFGRFou + 1+hI/LgSBiNIhAOdVklhDtNYecQlVCb3R0iqiJmxhKUh4SLGac4QPFxL0nXaxZoTbNFHwfulJaVCSmKK + s4zIjGCFfoOPy5zgU6IpgTPT8514VnGe1LxTCa9ZT4Cdgp/m8B40/r/JCIHKk6Cl60Ibc9IwMBRrn8nU + XCYGMhr4SLSUFKWnLg+K0Xfhgp2rHEU3BynNiEaxpCY96RIlhBDWsWZ5fIzZP48j0pEWlKaDKwzeJBTG + RDL0CxzdKYyS6rqZwlOURB1qQm8okwicZHc71UaCgBFKqcLOlemq6iOnED+MatWouzQOMDzjU5CGdJbv + NGvZoFDOGzHyDJcJAIM6mpgjPRSi4JOlXStq0X/5SbD/OMpf12mkuA72foWN6WGhhNZUzm0xSumrX99a + nr1OlpLRtOxlR1siRf6KicXUyWOfQ42wUnViQh3nacWWWM2OzZuZpMVfAds7qLJ2iCY07G1x/muJy0lu + uKKBIEdPiLvWyXa2dTTtcSdpww2hhLnYq89vYWuDnwLUZ+G8LnYhqDPJgbGaJWoqRGAk3rmS17jmxSxe + 80FWlfqSrYb7bkJAu85n2vcn5a1vVAOJO9q506ZvZIIW97a5A4vVW/Q1cL2uqlr8LRjDJnttZGfUTvku + sMAW5i07dUvg8/KPh6/dBgaZGWLqjrjCJd4hWl1MPBVndwtO+BNmarDPl3E3fy4hcY2Fi1cUw/MaUQFv + 3IiFLQ60zp9CKlJtEXvkDb8rvVMdcGYbDDqmJa0JMXspjTVc1ywPubUZNtc2mmy4MI8EyDcVsJcTzFe5 + qVnLW8ZzZVFr/sWEuO5azTwqko0sv2Vd2bZ7XnOgf1y+B/P5KGAeF0MLXecqlwdzyUV0jd/CCwB/EbI6 + bm4h3NOZtXL60GdG234WzehGm7jTV8wZcGdNabRZemGqvqGd5YqgJOtZ1o5esTX/wbM8M+spVmIs3n4N + 7KOEB9ZFJTauGWzMxpL0xso1inlEy2loX/i/55ywtenSvGyzYqK5Pba3t3gHGWE6RD2idrWtbWZuz/k0 + A72vR4NBDxwdztn0nq+M8Z3vJPPzY+HhiouZXIaODZLg453xwRGObm4a+sYNPw2O15DB9tGh1wVnKbY9 + feS7pDq/pD6rsjGzgQxyZ1M0r3mlYoSj/kj51eY877nPfw70oDdqDGvauaUwJfSbG11NSy96Dk44cla3 + 2kgtD7aIEZ5wVqSRnJSLCcwpwM3Ykbzi/gMq1q/N8VVL24vIbvNkAih2qVtXpmY/e9bj+PS11/DlKH13 + xGF69zRP1d53tfubVsrmruP9pluxhSDHTnbdmfvcKZ7gSyR9xjbkFex/J0HUxT3u0g4b6wOSgY+XrQjN + qxsNT/U8ZkBf6sVPXdYkAoZBWB7tddvT29OIb+SxuFS92D3wT5ygzG7dKa/3vccRp7gGCW/VJeOeEbCn + bJeHBhnVf70aWZy3/KqOco9Av/CGF2K+Gqf95b+983CgsqYXiK/Z/tO+YDodKai3z31mtp/4hF1N8Gs3 + fPxHFhG2Cbd2f7vXY0SXPNVnY9KHfPISgHIXPQwnarmnbWrHfdgiMIAXfpr3gHQTgdGidS9CfsrHeLyn + RX30e2ozfakXgCI4ghtVfCeYgDBWZpzDgJM2gP/HHy/4K9v0gbFXEOq3a0cCce8XQ5gnfD6oYOBhfIik + exoUJ8w2Jnd2dbSlhEs4fEqShZHVVtv2ZXn3fSB3aQJIXFgYhOhXfuLiR2CASXz3hFKoHSGnUxIoeDjU + hX0TgXYYPR/GNSricDQ4LZanTaRghmeYhOOngymHErtyD4KWfJ+EgXEoIn7VfMOQgxJGf/1H/myBIw08 + KIb9ZlTxN4VRhTMOkYnFJnohFIIUoUR6J4oVIYgw8VvNx4HyZ3CIiHGL5VSrci9j2DaF6FWHyIqeooho + V2KpiH+xKGyhCF3uIWUSc4tzl4TFuIUh8yT0U4quQ2YquIKNaI1r2C/Z+IuvFBLdSGdzYj1pSH17qIwI + CIYeSIK9sn98yIk/qIjvSGTqQo6fM4zQuICl8kwtaEtMyI+Z9zk8FTcyMo136CnFs4f2eEwFyUFwpx3y + 1pC0lFXjp48QeZAI6TJwZwgTIG/OV3crwY5Yc3YdKYeR2AvGF3JOgJGQd5J6xZERyZJfCIUXSAwy1xd1 + wpICRpA7eY3H/jIrXoEr6TaSUneMLpdSWmiQc4J7wNM7nZAITRlrNtkW7miUcERhVqld6qhKKbl3RVkq + uVJ6lHiLWHlvG2lvObmVZ+mVwcQ3YUkjsDeUThmVNLIsaamWcpeXpqIcVwaXPSiVbDeCYTkIXFZyygGB + XHmYiBmFX5cWQYaEjkGWb8gsbBmXfFmWkwlz0nGD37gj0JMsGmJeHTk/HndqzzgTnLkiuRGYd6aEsymQ + cvmZ3LY6lbkHoAiAQmKb6ABcwXmXuCmZuqk3pUOA1JgipKROrtltZqWPM4OU01EdMKk0zLkdY/SBmUk4 + 75gz1clCzQKbyPiUlmGJeVSe2bclZ8NX/tNXj+spkWMJVxiUNfPZP3aVioFZnUfZmvcom/iFmtrgJMLx + DvI5C/upkv6meHZJWlsSasN5eqrYkq7pnTXpmO75ng3qbrpYK/nEFgtiUADzPgiKDE2CLPxWRIwZjtj4 + ihyKSgWkkCKUiYLTnyuanA96lkOZU8vpjDSKoimKbJ2kK9ZnYNoIfg/DgOUzFv6Jeh5qYabhm7eZoUIq + iUT6X0aamhH1oudTfevjcCwnCsTJjEeKntLopZgJprJHlH62j2qmcnWoP3gpmO8pJajAloX5NB6oQ3Nq + IaZwoyDJY1BqpsGUplkCqKMmqP/5pnBKYYeqSgnKmicKiS3KiIZq/jq/RqaayF+aOaiW+mnFlan0Kakb + uqjRCZWOujQ0NJASFaaUmqWgmoyYOqooWTSmSpG61pmqShisukiv03aeWmm7mmWvqkl+6iePqaOTaJh7 + FojLWKubpayECq1q0Yld5qsPqYdaCo/bOn9jZaJlmovAKqsd2oPh2qz+iKy7la6SmKu6aq3XOlZEBCs3 + qaIuSW4e+a0Maq7RSj2pipxtupn62mg34UhTKpar9ZvBagJKR3RJB7ERK7E913RHV7FpknMTq7Eb6yiU + wrEfaymlZnoI247yqgxmxIVNiZTCSnUK5a0FmzCbCoIqQ63TOrAKc6Hveqk7eEdWtqy5xrI5/kpAJJub + O+tD9EqzNWuz7vM+OOs5xVqOKCtFSru0x9e0LyJQegotqyG1Fleu7SpAGthsMsups0prTwqklUe15LpC + BPoRRAurvMql6CquL8mtL3sziRNPWpuoXIu0ZXe3VetRQLG3Jhu167pkDkmswxpYW7uvJ5utY6S4i4uq + 6iOzfFunfgup2AqgM9tdp+lSVgq1EoS4c9uBt5p2OJuH0We2q1q6dnu6T6tSV6ST+Gq0feivdIeLYNtn + lSuwoVpdV0OVsSu7Z6tkttu6jyq8uKudnqs2cXu7tBoyUoqudlZ7hlEKmLsuRba8kLtdFtioosq4GXla + 19u9q9i8zotm/r+bvMHbLwc0eeH7vOwbpUI0veq6XOBLsF7LbvU7LPeLvlQTD7+WsgNjuONaK3FKH1b4 + taQbj8DbhAn8kmQbtGt7L3CLn9L5g+87wdVLvN5bgqP7r8eScUkqv/o1QtLalhAcwQnrEbXbq1gmiykM + jjLMwjkmwUJDwacauOuLXDdMPBhMueu2w5UKaOqbvyvcvonowqpXxDprweIbm9HLvVT6wk+MvCc3lyr8 + w0uMw5dZF1hct0BLw1w8xUBsv2DMppPbW6xrnn/Wxf6rXk0sfvGLukLIvGfsxf+rxunnw8xKvn17xNLL + wHKcxI05g9ERekPYv4FMyPpbX2FDt4to/rzp+2gP/MbgpMSFasZ2TMThWje+970hzIY/+8ij58SgvL+U + fMqDHMNR7LqkaacXh8RlO8I0I8KdjMom+MGksgiVw5vOWiWI/MKejBu/vMCkbMg1jKF+vLuQgcyuGMxy + q16T7MhrZMyNI8oKu8mRLM19PKm97IJSVzfXKcyuCM64+sw2ss0tHMfejM7FGcB8JMjxSs7aasPLzK7N + XMzi7C/tnLRZqc+lfIWKQWukoy0cEM0Enc/wHM/8LI/+7J4LLcBufF3AbM0ZPKKWnLkArbYCzckPnc0M + e8gUqqH3vMEWfVzGY83ZIZ8JHT6isi/aO87JOtIkbcqZi9JprNK3/rWOBT3Pq2yzHu3APV2+tnrToJnT + ZXWLXEi/W5ohQJ3IGye4d0zR/FtTA13S6/xJEQqvZYy3O43AeknFW83RM3ysVW2aMc3TmAzVNk3LU41V + pgajVUvUINzIKx3VUt3PLOq7ULzW3uSzWfzW+BzXfT0btiHEMwG2d10Vf5nVDs3MSR2G/taXACvW2gPY + F22MxBzUaf0t8InZV524m63XoyzLa9yveCPalOvYdVzBkl3R8ozXuYWWnQlGfhnbhe3OlF3Z5PSIOPqy + uf3RT33a3OzZsAvcaQO9wErc7jvGR83QEG3Qy83cPIy6zz2/hM3ZKU3btX1i28jd7ImDkHy0/sYt3bec + 3HJ9S+KN3nvqfovszO99WDCYzhF9J7tS1zar3a0c2d2t3qmt2nRdoeNdqsz92vMd3fXt3d+Nv19FhHl9 + 4FKY4LxM3/qJ3A7+2ZsW4W6thmIIsodysSFO4iVu4oLisSeu4kOX4oyCdBg74ituc0dV4RYu4Zc1Lxlt + y+EM4Q5q4HsK4uZd3aaN4wG+3vjdU4l9p0OcjvJt4x6e3lNrxRvuPsiDpfa8ajUOhwv+MJPj1Dmsuw0V + fKDIEbBSJxyo2z/uohf+2GCu3OQWk9wi3Gr9hNMF3jeuwV9834nJ4ePL5tubSlqu1FxOVFam4zueurGa + Wtgd2DAn6O66/ts+HdB0zONGzEOM3uhN9OjNGOlFXsWUzpOXLupE7ritueloTep5PtbUzSH45d7/Nud3 + bE12/uZqXlWDDeoF2N6jnuo6nWCn3m62XuifvufhDYtx1tzFOxvA3rudjuGrzurSNm0hepzK/i3MzmHC + XlK4XuwEvut+TuiAjiDY3sbaTlHcruHsVcmfmuyZPqi0jti9TlOGPuUbrcWM2u7kbRzkTsaYzuB6Hu2f + u+5u6uyl7lyu3Oz+/uwA79urjc3IrvAGLxr8fskFP+xGvstwFbDsnu8Tnj4Uv2MWv+0N3vBUjer4HvES + f/BOzukpP+/TnfG8fvKr1/FAPvFCPujm/j5PMp3RsuB494ryLs/UjAzvQC/0I5/hvbzYX92txi1D/GCS + Jl3xR09Q9crXfs3nBK/uxHjSQwjyEC/y5z7Hh631OX9RHNYqOZVv8LvFx530bFytv+3j6pnJEPPwX2/p + iS7pZq2Ri571c7/1Gm33d4/w317zF7/PXD3XXQ3uOt/1hF/4iXf4L4/aZ13gM+92RcryontSRS/3k4/0 + ld+5ce+Eee9WkV+0kI/H/b7f/y76PdzhTQ+Mf52vm7+g9YT3x0v101TOip+fQR/7gBz2Jftlnt/yse76 + kw37Jm/vHI/8+i6LuU/zoF/1yTz6sn/swL/7tz+ixs91YJ38uizU/jJf7tNP/cSve9Iv/OcvTrYDm2gk + muYP2s/v8dym/nlXNTRN/3y81OvP+vJPAPAxdVH4YZTRTRuDqW9fD4LQEL9S6cxUXVkWbeEri2nzTef6 + yC1eX26/VlAI0kiIrNCSWYQknVFpCjpVkazRas/pw2QPWzBnTIKKS8sxA712a98xb9wFm9PujHyxHe/b + jyh+1OjCCg/B/hBH9hYtFBUalSRH1iAt3cwEdSgTHT9/LhE7QYFaSHFkMEtP4mbO8JocRVlraQtRawFu + QXI/On2HdBtcA5/kZoL5hpk9eN+wmo9Po4CVVZ6lstOM2eR0t6XdwsvEN1euuSbSqaTJPV6R/k7Znd7N + reyt6BFpo4X89YxzhyveNHTD8t2DoxABQIaiHA6SsO9DwhgW13UzhY6iEIwMdXzsAjLBH1n6vghsJhKC + iCoQO3okaY7lv5mGekSUAvDkKmY1HxQkg0PnIqA3bSCNqXJi0SmEnE45WmLqApfyTBACh3TgzKU+W37q + 6afrIqHeiP7kuvLm1zFVoq5NqlZsBlhp6cplVdWO2yxQtOqFwfcC4YaVdp375ZeGYcEbScbdioHxTceK + DyWzixleZWGPQV2+Ynki6ItsWW3mrCqv6UOiU5Hc4ll2WVBXDaahvQI26N66a5d2zRt1LdVDY08eXug3 + N5Czl2Mrnvo4/tqsu9tFp9P8V/Cw2qlON544t3Pl4N9yxR4yJXpn4qm/vLI+vPv06p+3tz+BO7Fm1SHL + CqH9PFGPvsH0IxC584YJ4a7kbFFQKrkkMypBCQOMUBwAW4FwLwwXWqvC11o6kKbW/gvgQeAYBJE9Ck2c + y6oYbdPQHA5L8rCU/rjikUUUd6Cxxh0ZcnC1jIB08TTBRnzjhib389FHPVaEBz4lEXxMyEcSgDLKK1Os + Up0BsXyRSSC3FEdKr8REkswyGwPNy7+6hLM8Itk88rsk7ZTxzPPSVJPPG1UUwNBDEU1UUUWZWNTRRyGN + VNJJKa3U0ksxzVTTTTnt9NFCPQ0VUlBF/i3V1FNRFVW9NvUIrMU+69MyUOtmBXMWEclbkLJa74S1Itd4 + 9W9OAnmcUgZWWw3WOl9jlfVDZd+00UBkIxm2QGb9/DM0a798ta1cly0R2gyx5dI0bgcZV1o8tQSX3BnV + zbHcX4GtFV37iq3XXXl3PXHewpab1ch/cfpwOBz9K/EeY/0FdhSEfc034H35DSreDgnWE1dcNCpX4oAh + PmKPiyvOOFxnocmBYQvXPThkB0ZWaOVBN86Eh5mZ89ZhisPQieSSTcaYyRhdxXm7lqPDjYOYFw5aVxht + FtpjnQ/uuMs8fk7YaaApLOMOo52k+lzEAAvqoa2l1raaPcBmKjQC/kXQxOKAZEab667THevdPrlrG4+C + Zwy8bruthtEaJmTRu1e+kd5P7rkjOZtwnkV0tdpkjGDES7+vfVvJx+H1Ieu7M+b8i8AQv/dkxg3GUmVx + U89vctPXQZzOeZujvQYskkhddbC21r32+7DNHVben/j9aLuFbz1i5+18PfnRnza5eXafxz566b2hvnqC + r/8kfDPFLxf5pb3f+9/xWc7ec/O1PkH5sIOf/Hssf2PfJsDlT5903O2XNjjlz2TnI4P/4le6AP7PRQQs + YAKJMT/iBU1/y4OVAwt4s2MgkH8NutUCO4g/7WUsGkkQgAQ7p0AQUq6B79uaD0zIwcIVb4UsyMRQbyqY + BRguDSk5lMkKfZitpyzOaRqE3EyCWIMkplCE5bhfESG4gx46bYkTYt0HF1jCoJiuilkKYBfN1T4Q7pAR + ZeQcGOuwQDRqTCJPJBwZe8E976xPjVfkRw3rVDB/nNF6dbQTbNaoQyP2goE0+6MfywRIPFZLa3CUHQC/ + OMDyLZKRehzkIyFJuECujn6UrKQxtIhErzCRipIUoyevZslCis2Dt9OkKe+ISrqJjJBRHNIFZwdLEsmy + VQ0Yi982CbBXNjGWSCkAACH5BA0UAAAAIfkEDRQAAAAsAAAAAFgCdAGB////VrTp8ORCAAAAAv6Ej6nL + nRGccLTaeybevG9ogB4AiWNnnuoRpUgZvXAIu2TM4vnK95XmCzZKwqLxpFMAj8Yl84mZjWxQVjRppFKI + MmyuxvBWx0qykGtOB7UGp7rjfpvRl5p4rMWy11cSI85xJwcFONhniFgnWJjYwNjId3Ml8ghlI4hHt7BX + +ZCCCenTGepJairpePqjeqQjQuTiMsoE+mYH1sJZYaewx3oye+r7W7VInHrsk3R7uxCcVZvWTBPNSOcV + nWzxbDqsfWb8nSG+kr1qqBkKwnxhjSP1Qs7DTWou76F7T39vL4EIf2+bAzBh+gVsc5BGwiz+9C38EGRf + OW8PAUjcURHDxf5/BjP2urNRTshvHf/IoZgxZMmEI096nIjM4cuCRVpCRDWzjAqUL22q4ZkTo7OAPoWl + mzeIYNBxO1eyTOi0IpuiZKg2AijE6qSlCS5GPai12FeoMeWFRTe2LNq0qrxyFXiQrTwtZ5/UHSgXqIe7 + iuTuamF359tzAfV6FMO3ycmj5cwk7stuDTO/Eg33JDuY5lCwSS1rrkqOcSAxovciyUyYn99kubo+nbna + pOqVmDzLRoE69Vw/uXEieJw1p20OwCPhs0Bw5b7YZqEyF7aZ88vn0flNQaGU+PXeDQsPJ+mluCjYIhca + dBqD5xKK1MWJ79H+aviF76G9qQ+/n20uvP4kTB7CnW4BklSdTIeVJ1V/A9FyVDozTDOgWhESYwN+SE2H + oHCiUYcLBIBENmF3IVIYj4UrmChZhks5GB9GKFb04oib5AJCjKZN1+JvqMWCiI1FfCegjOrcUIKP2gl3 + H3fZDWKkMvE1OaIUAQhAZZVWXollllmO8SKQOSIkJJNbzPUfE3VpiWaaaOIIy5SEqAlnnHLOSWedcU5p + Z5567slnn37+aaeHgA6aZpFWCkpoomuGiZyUUGoE25dMMaqGO3dI+pcesT0a4DWcBumcIZ++Zeln6jS4 + KaVrvSAAphGBt0uPqla6BRVAglPQaqNmFsuuIrJSmm8qzlpFJSz+cv4pZcT+hIWvEmYSzR7BFrtsGo9g + deuPySpWrVjNwphUFzPiBYmzSxn7SbbaAlhTt2IVSFS4RGKTh6vwusttra+o++MQcpnLpk4P1ZfcO5fw + eyK+1Da6DlbdkMYWwJuodm9ztqTHG2C5/iLxTLM0g7Ay/t7acTyhVZjSxRCb2pbChECULrK1fVeyUKxR + UfOkNyeTM7hbPUChL8P1LKzM8w0sTsjBuWzmaBMbXau+z1J8zFFE+2rvBkTTh9tHQc9Mr8NgPqR0foil + rE3Z4zEd2AekVS3tOl80XPFswFqN9s7abI202+zKnCmEZ2ek9hR05Q24e2y37fe4QSMnrNh8Z/6d69E+ + 323g4u1ix/LDdP9NDW+uHUb5R4P3jWy8mucbiL9GLwl0ep+PTnjpMkxtMeaZr7425zPa/jvGY/ohewqT + A0/kbagbJR3vrxoe/OuiR+3KNLV5gnzhDONOzqPIH+l878d1Xo/sf79T+YPUTDZtMcknwtjW3r8Wfg8b + bXu38E+bEM76DetvBfi1hiMg8QiUtMe6+l0IemF43PQe+IlfYYdys1tMARHXDfopcIHbcRyw3tdAoCmP + gatCoOlOt7zycW2D9uPBpW42wIxhg3uKICAIpUEB+anChEfg2+UEEz3p0YgxKDzNPzJ2MQlqEBI87CEL + W+jCen3vhAp6Gv7tmiLAGJIhHz9kogGfyEEsui4omhgJ7PAgwzn0r4sC/CIYVdASUDRRjUSwSfugcUb7 + 0LB7GXTjG0cQx0bxyk24soUktCe2saUQfh77IzCcJMjBeKhfAYRWa5iTSL7FaI5Nc+Qj8wO5QeoRgQNM + ZBQP58erNNKTgExR1ESprTue8n+tAEiNLnOqVbISDuC43o5iY8KC+SU7MdBkLnW5S63pkXw5aRVbHIYw + 6+Ulk7hsYzOTyctlei0zE3hm2IapFHWd0YcmmqL4sAkXbZqMm/yyVTT7k8fR4C2V6OCKDzF4BmYiSZ3z + wqPG+jmRfeGAnF48FzqVSYsxSpJBpoul+f7WB5PiFROZnTHoQRHaCn2S7gmxaGcvxIWE6oXAIhStaFDu + Sc9CfnShYYlgXrYZOhKKLgIElY9FL9oOjq7sLTS1hPk86gqQ+q6SPa2mDa+J05xyVKFkJKROg5pPkdqs + cQoJQU2ZaM6EJTWdGWXqgW75E0qWIqatu50fropVpG41h5aQGunqaEiV2kwvPLKqWtNa0rUKrJaZIpxC + xONND8qyqkRFK16Nqte6iSyS5klCcdKCqi84DSOTRKw185pYnXWVsXFxbFxB+RmeXCM997QRJxmX2RGK + NZTmueIWxxJBs8ryGiwobR8xm1pFbvYvZHPta+EjQsqiJGa6ZeNlU/6aW80y5BCd9e27XLhSonpjtMpd + pCpxm9u6iLazsnAJdINb1fZpTAqtuuuQsJvauww3qwtSLRqjGF2cDKNMFmHvjaCD3swmhj32taJi+QqT + sYZXaCCy7Q7Nm9zqMqgW/Y3vXufwXQcbTF+0JCmCC2rZBFtYGnJs8FSd+1wjwnSm12uTgpd4zAwnGLCc + 3eG0WAxE//IPf4csrnGvq2INw/iVLoZUEkUs4XV6rXg2ti6OkavhDeOwxbkcBmBLIq14ANCtBo7Ce/Ob + Xnnx9sA+DmsHQwjRbFDipFRl6IWT/J4OF82Cg33yl/1LvJFGEqXBsJVxsKxfk47sgYshrFI/W/5Wpl6y + hnSWKWztmeT/LhUvWuTw0Lw7VDAT758AAiueR3znS+uVYDdh1jl/K08eQ6iBlT1z1yJs6hXX08pe/vQW + I20q9aVPyTkuc4xTnVz8PLS9oHZ1JmytUFlTsaiafvVNEw3iXxO41b52H3Nj5b+3wQCltMYwrlVdT1NK + 6l963jJr50UvK1DbR6ddGLKTbUk+f9jMS+vzt6Edu/g6tdgnXOyxz11kOvL4qZ38MbzfPdJlOFZRBC/4 + lTw0bT/hyeAMb7jDHw7xiBOqBmhCVKISLvGHL1xNG5dTQ4Vcanonz0sehiO+0e3oF8YSNN0GHWsNBlUa + jPtUJf/kyfPdmf4ZutIxHPH2aSacg5mrkFQ3P3HPBSxGWqEF4BOspNFXWA914/PcB9QDcIcFaJeTcBlC + 9xyii17tqEvWcINtt7t5fWr+yaC81/Y3mcHOKYGep9xPd/bw6iDjtd/7sG8v+qfoph9SWGi+nYY5iUNe + 65ybUnV+Txv6GL34JDFy33fnj3zl1nea1xx8N9/VK8hFjHIyHcxql2Gjkbx0osM9aVMmK8eOrHXQPZ7I + Yb9x6v1sezSfbLQlR5EcWS3nSYeO2rVfS+R3h29zsY9Dx3dv1uGMdsO/j/jkrmLuEw2w1vv09Fy9vaRF + DXSNUd8odO/36snUa4BmE/YOfiV/aN/1h/6tGern3w205s9577cf9IdHQ/w913x7A3Z153X+hFpHFHug + N2GelXnkV3avN4DF12MAxhw7JmTghXczJSz/p3kByDMRKIEACFloUIFa5nQYKEjo83gc2IGbx1YRKDGW + MWrBl0AQtn/4RxPSd1Zf52JDNHXJFxeTMC0lCGkXaIT/JiU4R3+v44KKpmPNJVj2QIRL5kEouCByM0QT + tXf584NUFypdEE8JCEUcdoJvY2VYCG5KiGIkcn2611i4J1NmR4VWKHXkIlFjtoWJs4SdlyAklyryhz1D + pRQs+DVNqCMwSCzUoWvt1xFqZzx5CDeGqIZPOCtqU31Ix1w0MomMh/5+zVN/lKKIzCNl+oExXDB+UIh8 + J0d8IfUy+GUFd7RrAXSKQciJjVeJz2EkAndDnIWHDdiJufOJjBKKrpiGUjhjm5iKrFeLfKgqhdMks0dp + wyNVs+gdTbiKvigj7fGMRIWDJiNQyAiMdhOOzAiKXKI7szdZM0CIypiMXgiKT7Jq+xNAQMF1PPiFfISI + 5chyRThijwd8dgWJodGOyHaNnWaOqcONO0GNZLF5BSlyK2ItSbNuz/aQ5fOAYpKPYZIjWOOPb5Z44FFz + Dtl2vKJ0BEKD44ONztFgIlmRGBKREnmSk5WSbxh6IAiOEFmSbgdv5qCLAXmPLWOTLCmG5udpwP7nGeVH + lDgCgT+zVkL5fQd5di/nS78zkxt1CuhCXxfllDdobkXJagxmEpKoRJEyRW5gfZiITVtJh13plZAzXWHp + gccgkkh5iHBIecmklkcIlTpJYT6nIzO4jDwleJ+HD2I5jkoiKvrnl8zUTWlkZFxhOyZGdob5DXkZkzzX + cvn0QI05N3tIkmsRR3Q5GJaZNQSjNFNmlpepOAMyd9YDeTfJf6xEmrKSc/xmdIaplrOlIKOWHXZEmQIY + IZRjmttXl1V4mLlBYDxZQcUZYCfoemyTl8KZbT7FnGhZmUJyMDI4FZopWTD3m5LXKeWCgOwWgqKJUVHS + JsMIScsXhsuSm/7i6RI8dC2GaJlUuZdmc5aq2S1bCTxpdpGtdJcfuGltZJ41iZihsIgvGZvXOaBZ9J1s + +ZnwaUgbyWQC2pSr0o2MIpTf458UupgWulUdSnvuwpJlWZuY+W8MeqEWZFYk2hsmGp8tMgrWmFgdupaU + 4pAFCptOIqMZiI8rel4uKklZZZo9OnpLCaTWVi3XqKPVmX4Q+pRymWdiJ6Qr0l/+qaB3p6IhCoj4Qm1N + inLk2YoViqRJZVpMg1JgGqYAdp8LKqUNGqReGimrGZUHGKCsUJ+JcKYuMznH+WttqqVvmqTU6VX7WTsD + +ZE3agp5Spt/GqVLKhWeqHo1tKVmmmIKk/4zavqC3ARsZYpTXfKfAVIzmrqpTQWOpMoUD+qnz2eoqCip + NshQzxCSUyofqjqm9veYbdVWdRaqKDqo6/KhkGodXbhUz0FsDONhjNqoeISstupEv5irC7arc2IHGWet + 14qtg9JxF7etWUJx2Qqu4aooFieu5WquVRKC3dmrUKqVcYqpAtmSt8YQM+pSnvqpjISqi8qOidpZbOdW + /gOUcMpmmuN5PplQ29cJ1BWX7HpQg+esgCqKI0k1Cft+EqWvAlunfJo2BisVWKmD6qenNVqri/N3D5uu + HSs1/yNwdKmsGJlp24OmrGGPk6oZ+bmuY8ilIxuzDlSV/JqGE4OULf6LdSy6sw5Is0f7mm4KnjlrU0Vb + gDMLtSk6ZMtqqe5apRbJqbkhqxR2WkK7tA76rhGLtFGLdsHTnpuDsUfVqpqntZCpA0VBgiDyrGl7dGur + pFlrqgTYqe93q1U7dMJqtWNrlTuqtJgmh/c6gcSyp23rtk4qr4H6PL8auGGySSbrfLUzUMcVuUzLZbMC + qqLKUyZQTo24R7JZNYpLpZjRfWzytk0baA+GuHqooXzHuGTkG76HtpyrO7Prur3BpK17tyZHt2IrI7jr + V39mpY7Lj8IruR9EuVmUIOc5p8BLuzanuzw7Ig57IF2mIdNjWkDitVmqN9mLr5Z7uZirvMZXEv7h66vj + GyK6xn2C+1VrmpnIG7smSb6rlq+b+6QJxYAIuX5+Cyv5Ky/7W4fca2yOqrf1Cyppiavva3wR8ruwS4wI + 3K67sbBt6L/faQ5M6oTjKb0XvHvmO5ZoZMD8O6cUfFsh3LDDCsHhcrOrulohlr7V28B4WRgEnEQnjLN2 + d2X0C8IWjE4xSMIlrMC+y2xU27ks7MDeMSHaC7pPLLMBLMIuHMVBDMBl+8G0uMUMbMSmy8VX7MU5XKpq + RMNAHI9C3MRkPCCDJ8EmyE813Lv2W8UPXLv6yx2WOSr9kH3EerpirHh5/MJ/zMRsGK2EfMcnisQ7osIr + TMctrLqJvLyo8f6lP4vGk1zGdWzFeJvGi6wh4wQ393W/bEzJ7MfJ0ztPWVzIuzSqRSzHZ3zKrJvKzkvF + kOzEgqy5sTy4OIPIqwzGpCzJfDmaL9rFrLq6Q/yTpWzKzXmxjVu6GavGOBzJyjx5ntxUa9SltYzM06zL + wtwYzumy15zJNvzIaxzG3dyW6Ew2TkbLoqzJdjzMWOXKJ3vL45zL+bfNrRXMiszNr+yqzzyHADrK9RzP + l8qx6ozJ+GzO/dyzxuyz8gvN2izNvUXNk/vQZAvH1mvL+ozQ6dzQ++zNEs3Kx9vRAW2cMmzN1axVAw3M + GJ3QEzmUOanDKs2877zJLu3QMA2cQrJJzf72yxxd0MFrnacmvoNM0zW90f+M00n8r24jKRsK0Lrq047U + M/NMzwlMPaTYREIrehEjwFQD0i+dIl/C1QR6uAvNelZNbnHYXvKpKvDLbV8Nkyl9z2S6Px7Ku4q50jbd + yxU9x2yK18+r13ud1I7XxhXsUDp91kYd0hqdzwMMyHU9S8vQvsVbtyiM1n0d1o3dFDoHsYJ5vj881VQN + z5ud050NfUkZoY2M1aP9R87Cw65txrulqJi9UKENy2GU2bKLywYNSY+au8Qc1cu12D/tvr1Nzszcon0r + 3MU8wz282+0c2UcdUDvFsLft3Nxp28at2aZNhpIhCAgUnY4Qrt16rv7njd7prSXkqt7t/SeG8t7wvd7u + Td/zids+DN0TfdzILdlNJ7Vzy5rD/dy6PdL4+8a+XZj4Bwufzcj3vWjFTdqGzdiD7dTNyuCrzdq5jdSJ + uN2OfNjLLIRvuV3uHOAOfrAQjp0oLtTeLdpOrX1Au48hgs1MTeDcvcQfftkVnuAxPiHb2cn5bePZjOP8 + TJGve93NneFS3eGvvd/87dH/uOMXjpxf/OAq/kR7PNMm3alMydw9fkFiLdDRnbpDbkliRtk/V9kyTuW0 + LdsbhOUTLqasCGRSjuRJfuJW7uYbC+fAClpz3uVRIuD2hucK9OZSrFN87pF2mo1rTtyDTuhTfP7gtQRO + SUfnSvLlWt7m9fN3e97n2o2SlR6egf64S37lek7mOzfgBnnkXi7qow7kTN7kJQ1rcmXkq97jjP6ypJ7n + Eu7k8KXkta7owojrgh7cnoQ1p47a+A3ltj7Xvp7drv7qYATb053od67qzG7gqGbnnq7rj76vfi3nre2j + ac7Q1U64ft7t4aN8vU6pTRR4Mh2p3O7PnV7sEd7sEB04YM6Vqj3UN67tlwzt0V7q8CrrhSrud0rsV/3t + yj3vzg7gxn7TH23wR/zfqK7wC//NJs7wjs472VfEXoEp9IhJ3ZW8Cd/wGd9Dsf2jBL/UhfvrR2o2AA+S + v63x6F7v0t7SEv6rUY0+7uSOuYfW6tdeg29ExEFt7jzf8yFVCwV5K1xU5fw+8GAt8RPP5sGKG+wcuvK+ + wDbP8QRb7hoMuUnPaETt8EEP6Sa/9Ww99Dh/zqi35WEf08D95y5p8TIP7Dcf9VLv9kWO6MvO43mb62n/ + 6VDPQqM69Vrc92L/992r9YL/9l0PnRR90Tu/8XAP6kp9dTV/92tf+PG+95Q6+Kld8ZdP0IF/7ldopBAv + +X7s96aP+Iufwkh/8m4V2ETv+ayv+Gjv8nNP97Lv+GYbw+W860AN9qNP78bP+4ca57Nvn0Pb+atf/K/f + +HKf/Ldf9b/f77A//G2/hqHv+9Qf7EpJqP6av+/a7+1fj9J27frZX/3Qb+12D1FKnPc5/6pR/v7ST/oR + //0XL0LSqfroTwDwMXW5fcWTJoR5mb0V9xu9UBwTjuw0BgzT0z3WV55pMa7xLN+lW2x5AKBjGFT4jElF + kcc0ICdO5XFatTqgV5JJi8tipDQusYv4lsXh2pjqYaOfcHnwPJeo7b3TO6jmW+vyfrSkAkvwAAUVTwwX + Ef4csX4gmx4olRojLRHTGjIpOKc+NRVHHUM1Gysu+4pWUXNMSQ+7ClFYr2Rn53TzYBcNV+2EQUt3t35f + ID9xc4+fzaAbkgUDqZuIq6XdmnNswa53ererxufCee/QyUnMNbu9nf4y4UXZd93h1uHOXu278BdlK7Ps + liOA/mocrIUwziaGiR5m0IfMU0FgEY0xnFjGGkZMHpf4qojCIEg7Cgk97GiSB8phGymqsKiN5b6H9C46 + rBlrJ8w9I8Hl3KnF5RWfEMkMTdgzoLyZeYoqlaQR4UqpMqLmOwV0w9ERWa+2QYgT6p2wM8AujMSEmdev + Z+vd9McP7ou0hNz+lEkyY106GPO2tOSXUc3AesV27UuYZ0SycugytsHy8ZQ/zIRKpnFXSWWOSTV34Gzl + sAu2bjKHtmvSszOJqkVTLr3nNJjUsNtRlgaltd/RnWeb3rvhNu7JrIMXDmkcw28vj5LThsB3Mf7z4yB7 + J/GR3bfKR+RqRylpPbfue7TIT3C+9AD3KnxURX+wfid9I/I93MAf0T7W7+zgs6249PQwb5YY9vOuqv/s + KUKAByGMMMJVJKzQwgsxzFDDDTns0MMPQQxRxBFJLBHDAExM0UMUVWzRxRdhjHHE9hIUbrpNahyOwA+Y + OpCCHdVjCEG5biTCPbSAbG6oHCU5sru5oLvJQXWYTCzJqQwsqUooFyzGMR1fG+/K+ZZMxckn7RnSo/Ak + 2jKaMbGUbS032enPBQTplK7IBQSiCU4wkVOkAjv549JL7Lg6JM+G/rQySzk4IFRIQ4VYVBlAo4xE0kmX + ZDLSRjF9Rk3D2P5ET1NQHWXtHBhQTWDTEPBUSh4mLGW01Vd3SHAMXMnhVUkar3KCjzORbNVWOQcCwtfd + 0iwhrMuG9dFYAJY1jVgqXZ2WWkqFOGtWPqU1tlpra5ly2nHj7NZbYXUgBd1wAyXNKXGbZXDdMJ1199xO + LQvjXX17NRWuP96o9dg//90i11dYSVjM3YC4dhZ28wX41p66YZhhUOhx+GFoBOBC4okptvfUi0mtVKdu + U+jnOlA9ZtWEkXcRNhuDDx4z5lsE0jivnU+qsxiaj7FZGJy3RRVoFlxGqtGdV2g6NEg0FlXpgeVb2qZt + 8ET6PZu5RlnbdOGEOlPmCvGaVZjHJpPtsP6vpIToYp9um+wrY9YaL9CsrtvuUHfMG1Sq1U7a77/fPLzv + RtNWW+9/EM9W8WMeTxaLwit3OvLMy4G7VUpCBnlyxDmPa3Fj5WaW5KAjX1tn1cdOW3SEWzf89dljl2Lu + 1cquvXTtYG879dOT/L2s3tHgxPhzwCY+cN+RT57H2ql2ePnGNr+d8trbm8b66O2+HvvzuFf5u0+dT0/8 + z/DWavryzefYdXifJ117+ssfY9f0rVsf8uL5xz39pSBh/qPb2Azon+3BbwktaEEB2xe+CJKPgcs5lO1S + MUEEajCDFWzXBf+1s90l0HQECqEHp+HABy5QGrMh4Ufqhz8UZqppJxgE0gv/ckMWzpBPGhCIDU3YNhzC + aocYKQAAIfkEDRQAAAAh+QQNFAAAACwAAAAAWAJ0AYH///9WtOnw5EIAAAAC/oSPqcu9kYSbtC5ps942 + QOBxhheKYmmmCoSuLUh+cCwf7wur+m5i/C/yXWbAotHUEh57y2aGlMI5bc/aUkqBIjzKLc1qA0/HlS55 + aT5IsOc2spZ2D+Xn2IYWd2LBbKC4wfKX10FXOGdYlLf2h9johTBoGOkYNVKFMnmEw1in5cAJkBlWA0rZ + JGo6oZiT2orZGgHrF0Z7A4ZaVEoX8sU7Ahr55SLbhkuspsp6XJh0bLy84tVLc8is69Y7mhFn9/sAPfW8 + vKoMTtZMLG4O8qOu4wnLm22RRyp1vc7hLkvel8/zytm/O0D2vfE3sJqLbg/wJaRgEFa/h1eQCaSYpaA1 + /ocYQwHk2FFhSI8O1oz8aCAimpMNNcoBOdIgTJYpaVpsIAChTQYyVBrxmQreDqAVPug8ue/ozlg7Vyld + aolkuqVCeRAtWhWqVCRaN1x15LRr0ZrjaDJM1Cjr0qRiNXxFNCjnzJEh3g5lqbado7w03T0Va1eSqrkh + IQTWcXjYj79BTJ2tw86J37ZeocYljNEwtMTa/GCmF2/a5wRQqB2ZTHmbVkWMCwfg3Bhba56jIf7jWwVQ + 7ZsnUrtdXXL3shKvwcG+IrxkwscaSiXfStA3aMvJnhMrvvmkdQbHZ/XO0g2zuO0hu5+57Nt85Y6zY1Oc + yVEYk+/Sp1PXTd6xetWF/uXsB0jfd3/5gBsV9fF3H3ep5ZRdf/65xgFhWsiH0wwURnMggmslA5g5/+3Q + 3nyuMYehJmpVZcc8Gdq3oXLAGUcXHR82QWJkeoSHXUMXrshiixX6WFaMD4p1z0sfzNgVkqdwaJOSLjro + hpM3bgFWaiGu9+KPfXmIl4y+7eglZVdimaCCLAmAZppqrslmm2ietheIQ/LYyCD50RiIaeH452affv4J + 6JtI/RRooYYeimiibb6maKOOPgpppJJO2iejlF5aKQlrcoFpp4fOaWZ560h5wp0i0QnqQoBAc8+dpP7E + JEavKjBrdGGiKhh+tA2X1ZixAnnqP7UydZ1zcOF6/uwnKJr6Bm35DWvVrwNBy5srffjqHrK3rsoHs83u + umSHTybEIIxt6JRXgZJpm6uytpjDBra0thUJtaE22MkjirVUJbvb6qovOJyQZ68KcT2UI77ndEbaHt6O + 6+95HUworx6fhJuktAIXrB6ODP9SscER/4tfniEbEa91BYus20AJBwkZO0bZ2PDDGo5MhijZnJwLIzWm + sLKI4MK7MmytisHzXThH2Vw5SS8Giro9Assvqy9fxKrCS4+ByrICI4Rt0EJfYHOE0GF9TNm/bS1x01Xz + GrVzfYidLdlqT1x01uayzfUdfzz9kdxIg1ltmWSnXdeoVnPJd9+2lvg1eJ4I/sMI3foMBrjfXNy9dtqK + N76n36uug65oVAbbJESZN6dpPrNK3S/oGLM+9OJYlZND5ZQdzPlCV6MdVO+dy75SgA2TLk9G0uBeONW0 + rj4WF67LAn20xM/++PECy8yXL0TQDMmC1QkP8u9TxUPu9djTriO8pekyswxnWX65i8LjMT366asPZyU6 + kq+syODDe6NIHvNIoyqYVah6LZHe51zxEPo5Lze1Q9zMRseKlFHOKKIhXCouA7uetS5/QaGIBCdIiJZF + Lirf8AYL72UheXAQcvxQHQMfoZkHlnB//Ouf/97GK9x163RaUkEImRacI4JIHnmzVgR7WLwo+Ax538Og + /oGKaEQAziuJB8QTL4ImpRtaD4poeccU81EaIhYJi1IEnt0Y6IkmUkKMeiFjGc3oLC2WzBIeBF/4FqPA + N0IvjsJyjB7rZ8c6LhFgXzPdxWDYxvNxkVmEJCEi6OiSRI7RjAM7pIle4JM+kiwCerrRkQo5x0FpcpNG + vJ2VtHAVTJoJC3JRIu1OaUlDyJKVqwQa1Fz5pRyiTI8YoGUaLTYDMMZJlb1EjHeUJ53EmYiIhSgmd95n + HRkqc5kxaabSUAKeAzlwmlUMkzFlOExWbPOSnqybNxEJzgnschfkKWU1QTYvdOYid+XSIT239E5fihCa + 0cyc8IopBbm4EGqlWac1/lIX0LH98pEH6ucwN0HJUNjTI/LbTS8caiSIRlSiE21hRbfjMFNNI5/yAyT+ + cvmSpoxUoBXhyYosms4EjoFyz+voIl/qT9nIdKbufOa+6pMfjNqSdSmyQheuRA3zufFcKCQqxHpmxWDu + tFt30hMOlADVSgYVG1W1KiRRZlNxJsYWXeXNLWgYIVhOi51lNesWvQjEtuByCi34GYDIslA12KONJRDb + f+Z5R7tOLadH1Stg+TrDLgISOrcY7EF6gkpdIlaRii3DVrPaFSgYra9J3esLNaq9uGI2s5cUaWdtA1mK + aoUaM0pqtUBpWc39Eab/PNNrF4tVd822Gx8q7W3h/mAFmLCgeYHULEB/qzG0hpMqLCwuX3eLz+NqbrW8 + DelzoctGTUyMusRixpQKhw5aUDAyhp1jO0kKXuzSaL1dumtvL1rehYLVIaCcq3u/G1/UGXW6eHlra8kp + X/3mlqDjHKt3fRvgq4qXvkJKsFAnnF9lWPQo/fUvN5kZYQFP9gk2MTBdg5vhJHQUfk718Ie7GeKzMhaY + mclKcZOT0KptmMXc7e4uXBtjCyN4LOzhxI1nnGAVq9ddPXbwjwEc5Md+lsbLiS5V93lWTKDAHwxp7w5B + HGXm4pXAVZbwhUd8qp5sOW6F5WEqIRxmIceWoLcpRW2xnGU1L/l/Yp6qLqEc/ub9sLjOOqltbeaWVo5e + kc9n25tjAB3lw453hcAl618ljNxFR6PNLn6xqOIs551SmHqBNfOV5aQx4mxYnn2WJJ2lC2dQN/rUr9bf + 8B6KR9giEAQKPS2G6Kazeg5V1rOOGas3W0DGIOkz1zADB/uZMikzjsqSdVusZX1k4SKbODBZNqp1fbrN + tTStljPGli99bVDfWZ4E1KyvDJ1rcHtDU+NuCbBLBet0qzst7KOncLwdSc9uWtylDkO5F9nKYRO72Auz + 9pkzeWLV3poIgdA0FQ6eRcy8l6YLXzfYzBvFA8eVTPjcnMVzcO8vQzrQe6k4q++bWOfqduITgnZyhcla + /n4rvOOp9OvdVPZo0cHTQC73I859HNOdE3vZx8wrZLejpL/MpB6vqbcNMF6qMW2c4zx3b9weHnKRp7Co + VPBpBDyFdkdVXVOP4lTa3w73uMt97nSP1Bf8ZClPxaDufN9U3gH1d0oxipoNRnr7/Dhywy09NPFCzg2d + pJS5gFUaVi+8k/OVpYUznJ2DQ/EocU3tSo8A2lTCesSVjm3b7Tqe9wweicl+dWpu3s8x3TrsWa76k3Ol + TrautegtDwPTpwXZnO167pcaw4P2/uV1S66zZ19DQ9p+6It3X9mbRczly3bipMEpO4Svc9TvG3nLRTzz + JaJ90Pbo5psAv7v9mvPq/lOx4DWDf7JcH3p5l99C0nD/RqbPfeOHRpF1eJcHckRGcly1Yv73ZOIngAPo + a/SnNW+GgLemgBdnQoYke7KieaFmQaRFfKL3ZxV4M2w1Q/QTdaIUf/LnMiazUY4XIq8zdmRiguWHgtJn + fwYYaewRgedgQLcnc+dngfVngxnodQB4M8b3HmCXg+FFgdtXguwnV27WctXWaUqIMCGFfBmmgUIYhTVj + Iwz4f1tICSdUUTVWT2QobxDkhevHflzoaEeohrzXgdI2f3jSgzHXgKuXaAkoha1Ge/7WhBPIggM4h8mm + e3q4h3sGV27oO0dneEYyiM1ViMshIRvFLADXiIn4/itKZVoryHmT6GodaIb8pYLmp4hJt4mcaGoFZIfT + Rj2H2Hp1CH16Y1JWeIvrY2kVxIdDWH+vGIeM92m0aIaltlJm4zhByAdQuH499YmROHzDWIfF6ELykjma + uIqo2Ik9BYijeB3SSIpmIYuyKGP411hJyI21iH7ug4T2FY5sk4ls2Ius2IrqdYPkZ4TEyDfxSGkbiI6K + cY8QSIWaR43IlIy2WAvdNl0BeYegmHrwWAzwMnDKFk5SRYi5B4vTuI8RuT1geETBMEID2Y8Z+Y5LUz32 + AoJNNzVOFZJXOJLBSJAQyZEdyUI/KHBJJEGWE4L1GGcFOWQHGUQvdEEiaAk5/mmJ7eiT6bE1NrMylSeB + wQIH6tgKOtmOUhliSYlnbfOELWR2SuFsyMWQdeaQDzkyj6dyBagMDvFUYJmPLTiWD8guYiQ2pMWImOYF + YUloOoh7EaM2xUgK6Oh8bUloO+mOJekvfVlh2giHW2CU70GYhRmTZdkuS1iXeeaBlOiWF1mJuMI5pfiX + NxkwVvlBBYaZm0knvZOCiZeHcBiVgsmDgQiXnEmHVYiMqylkn/lEBdZOXfOY4nOYsxmNtamYl1mV3ZiZ + U8lujtRZWJlw9xectuKVvgeTdEF8++VzxQlj2qJ8Xpd4aik5Vcmc9DiTIdSbineasTN8yhVCIEmO6xJa + /h80lEJnVeFpPLOYnvhGcgjEbdD4mum5VO2JM/QpnJP5nDnTMiuml1Dibww1n9ppCpB3kgF0fSQJFSBh + OtciWgxKVALqcMDJeTOZVwDIoZWZR5NjT/NTUjM1oiTooSOIRLlomw9aUMJ1CTY2YEZXnpr5JesYJw/D + DU6HnOL0h/gpYv1Wcq6oPivahs7pae7pdLanpAkEOEDhCx0EoPSCKiEYdbhYfPN4pbxUUKZCFMrpj3wT + pX0ooz3nLfUApGnaoHT1pUCGVN4odkA5j1xKoCNlaHG6co5Fp1r4oh3Koxt6YjkapOIEm5DBlAM6qCr6 + Z2bXOGf6lOjZWouaPY2q/qf/V6YjI6nDyaSP6qOMeqiECnqTyi6SOn1Mx0DmpqPNFEbY+XkVmqCmFKqX + Opp2FUayE6VIqKqpwqK3ala5CjpKaqjAeC5maatu+qb/Nax6VazGeqy+SmajSqpBF6lEUpxbGqu8qKzV + SpvXWqGwCqHSKqHRt6zMCq47AavQGq2BOoPUmqnG1qacqq7ryq7iYqTA6q3XpX5bk5T2apyZ96766qjo + 2qykmZ03JapliKs4qKsIC2b1wao1BLD8OWUHCyF9SmtaOWmYGq8tV7EgSplyeoDumpzmeq4YRqMYO7Ik + W3vbqlMEW7CO950ha6diWVdbVTZpsCh713c/C7RB/rsoaed2eOezQou0SXspRau0Teu0ktJA1alY2ko8 + VImvBcqxK8unRNlL1vWsMvuSDuibkoOILfqxG8E/dGOzPHmxJussyYaaU4u1D2uIu0MnwcZBeWu2AbVu + SYqzWMojmYAjK3Y3nZqnkui3aDS2CosVKlJObsu3nte419OUSnm344WJhduwIEu5DXm1GYILJLK1RbpK + qVm1jSQdhnuZv4imWTuzp5euxbK2oAm6RHo8lhqs1sqywiixqPIMKTW691q6wTO7utiFvRu4u/e2o6u6 + 9sm5Ziq7jCu9KOa4ELevcxugpHa5yauy2QV0uRsa0Bu+3Du9Kdq633S9Bkuv/umXutsruefLMil7lhFD + Kl8LK+7romAauZ6zNK/qu/+LvcwovIkELcXbpeFXX1ybMd/6qwNsRwVswM5kjuRbu7obv+nLvhTMwOWL + vOoLX+9UMBH8wYuYwLTbwR5MfRHVlCKcn2hbYhzRvKJ5Xlx3thipwUFYYi1suU50wTVswxXco/Z7vxws + h0A4vAIJwNEoxEMMxIiTwiDsMsgCcEucij54uNobgN40lyyswMi0xLVhXVecwU4IxUh8w5LIxV2csxu8 + hircgqIYsbVnwDCMvwhpwm48mGlcjoqqx228wzSpxmS0xUkMqn3Mtt0Ls/NrZVpcZmcsVFRsvRubyMcb + /sg9pJN1XKqYLK/OS7qilsWuijCGDJkw58h268eqWMlp27InjMCk07GHnLNUm8qJ28hniMIlDMs1Ra6L + uYuz3Lmr/Md1Wsqb7Lp7TMyL3LWZQcRPJsqjvLi5jByfrMhvacfP/H6aHMxk3K6+vM25CcymDLLNzMuA + e8qSjMxH7Ji23KTq3MQKgo13XMbKzMr5O8yf685bCc+g3J/ZXLL1vMDJ8M75nMw1xs6w287tC1t9+4/6 + HMoHnckObc3P48CIXM7oXMsIjc8FjdFakm3SrEknJM4yTNGsl6gCewiHpZDyq7gajcMQDc4cbdACPdAN + Pc8tbVSeFMP1ErBIxs10/vvN9mzTG13TEi3S36bDjEzQQs3GEc3UpLTTN7rQM/3TJn2fOXzOVE1KTYZ5 + RkzAiUnOPKzU/OzUT41wI2zRU73GYPfSQw0JrdnLXP3A2iHWAfzPLJ1f3XElMVzMF13X0wzUTV0teC0e + Ks3X5rnU2SiSaw1Dgi3BryvPXz3B3LqklDrXCXYcn6HXBurVWE3XJOqagA1YWm2QNBzPSQ3Zfu3Z8jnJ + hr1boj1fje3Dhc3arTyt+Qq5it19V3TZ+ivVNI3bhz0MrfGCmu3SN+HaaDUamR066VzZQR3NnupDdt3a + ZJ11vH3Wfwva9Gzbj0RHzavT1dUJyY3BgNzcDz1q/irU3ctMLAExZ+i7v7L9152dlYhZ3FJ23FBt1h8N + 3/Ed01iFm7fN3/ZN3ckK14Icxerd3wxFl7sc4JQ14Ntd4FA0l/5MwiKENKsttgI+0bbbw+/tygju3IED + v07K1tpV1IKa311txiUe4mWN2EzM4mfzjLrs3qVN3jFOyp7xN7gr3ej14K9n3fq90iBu3iQdmsQd48+3 + 4Qsb4ao85PWt3SIu2cZ72pB53+ZL2gwtkRT+YDperntd5VxYWHIXeE9r5meutEyL5msueGoOKWyHd2wu + 55dCbsfc5LQctuXd5Ut0DTwe1qz546/c4VpezTiu1lKEoTEaydn9o0vO5Ect/uR5rufdjOgTE7yODo6o + 49ajPehZuuhjnN3mvF0chqfiqc2c3Web/tpBjqgHDOq/3c/bZer7J7KM/uWHETaO/Y2EnODJORdyCeLB + sLpZ5OrXPb7YLBvwoXE7C+XCHugNfOc+PRy8XuQDq5q1DuuA2GL8yuoSvuVc/twBdxAMjur3uu2c3unG + Lo9E/knx8eInS+6zbe7nTuM13ttYzO4aauQEvtx/HrD0/pPpruLTjuw8TezvIMblro4AP9LRvrv4DuUu + juWPTuV93cm4Exj/hscED+7VHfAUH3bZPtEMj99ZPvBO3PHXnpXKG+8ZbpUmlm/d7uQ/HOrfUu/1Cebl + /m5uJI9mMo/n/BvxHG7w532zDf67zozwVRzX327oqr3qOI/koO19LPoWyaHc0V3oYV7pDcfyAF5XUz+t + dmH1Hk7zFi/uXA/yIa/1gtX1Jy7AJm/gT17z0I6Haa/2AQ72VP/0Pn+6K97gzKc2jBG3/s72Nv/sMGrv + Jy/pLu/rUS6dUT/iLhk+EoL0P/TpSy/3Zu/0b23tPC2pOt0eHRbzfC/t1ifytU3p+efl4+zy1mT5mN6v + sK3uHP/3X47KQG5KlZ/hBNKch3+nchLSFb/ra6/63I7iAf/5uhb6MI9ul+/t+61vm9+2nY/tmu9WlM/6 + /C7wM4/d8k79e//9qtVs/oT/WCHyVSvv/Jbs296P+jN8/JfV0285eUk/7OEP9+qfhdb//o8fs0S/9VdN + APAxdbn9lXgSBQhtovdm/o0NHMnSPCNUNQNvfWHxbN2vfm4bNuXdX3upQ2tF1Phyr+CP2VQtnTBjlMqA + gqbR7ChZPVy9YQBYtmUJpU6wmK1u77rv3boTjuPkxzx7XU6jVczm9giZ6Aob7hBJDnEUi84KGxdPyBQe + OW4mHTB5KD8rQblEUTYTOxceUSsQTUkh+hIEWWpcKyxWR2xfJXnrfHXhvHIBiH92gfUc/JAAuYiMP5CT + +agTrTmmWauIo2OwnyZkvVOdbWhmB8F9tffIQdsN/t4xVtPF4oFjt5E0S+yP17ELuG+gOVp2RrUqGGzZ + pSb9nr3BtxAIxXmU4l3EgAUjxWywxj2EeE6ix44LNSp8kfIUR5UmxTWUpcXgKZYgYb4MeHNPu39/dOjM + ucDSLS21OPKMOTTPRDZK5fiESnDjIqek9A3hVvPSVJlMo6L0em+lmE5jL1zFulQrlS2N0BIF29TiUG1x + i2HC+3XuF5xttyrj1KtvNbE5kdFoo+qTWnhs89pBWrVnYcMoEftT/EbRT7KWQ0DGO9kRIcegBQ/c6+bc + 6pCpNltFPeZvZLNc5XmOcnp2aMwwD+ketjn2Y9RFh+wl3dJ0byq83br2QUf4/uLioqAT5lt95XLY2p0b + sihdHZ7w4kEjl5fHe1eh55V4JP/N0XyP2cHLTc7egwUw3AGCbzr5TFrjOgFDSU80QvqjjRP78LMsQpHu + +wXBihTcbr4sDITwQvp+W4i6D8PJcDtE2nOoORJLDLGgEVn0xEQrjCqEQ3pWjFHGukS0UEcQJgzrxEVS + nCnHH4E0yb5ScEQySQnZApBCv0qrzMknx+vRvCvTOi5KUFyAkS4uP1JSy2vI7BLKpZZ8zbcHj0yTRpja + ZGRLORsIsg3kpHQLATGFxDNPOuvEkoFCA9JzTzZfufHOkgQdNCdE1Tw0UkkL45PS/d5kbsxLU5Nv0zkP + /h0VG0U/w9TU9agczEpQ/wRr1VA5hZXWzL7qU7JW0fzUVgeZmpVXqn4Ftq+idL2tU0vjBBXVo6jpIdkf + n/UCWWum+C8/WKt9KFoVi70VuJimVdbY7179tVsmyn3OyHDFLZDcdTzQttlL12U3GRGEBSffJq6lNwMB + CC7YYBoMTljhhRlu2OGHIY5Y4okprtjiizHOOOIANO64Yo49DlnkkUku2WSPbaN32Fs8VLewWTfo99Q1 + JZXZvWWTa9nludoFOGV4Yz2WXJtvhuLARXfmmZ2edfwXvUGZlqPeUnXm9uVRBYg6RqcHlIloZnHO7T1B + ueYHq6+/FdprtMtZ+ed0/vG1TGsU5max7PjWHirMm7clG7Q6EQZav7muiDnYqfm+V8674VjSCMYpgpxJ + r5VeuW47rZbbRsQFd1vevGV14YY6JX+l9EAY3LtzzyNntK8saricobg1l/qt1cP+nFTZbawRsL7TPP0g + 23FL2q4hryaW9MxD50wQ4WcGi8/ZptiiUOhle906TDvHvkxV2SYhA1xEb8zZ2rm5w/t8pP/SOfJbiPl6 + 2l+/CR3P1heIqcL7C1+z5AxnvkjlLxOeuV9eqnc0yISLgHyJgGJ4RwrR9U+AfqsfLuCUm/Ep8HtAayCp + aIQOBE1wfMbB0wfrQ5z7RRCFJ8FVzYpxoQSKsIIn/kTNAZEmuBbGiwIc7A0JIzi7xb0vUPDaYdB2F0Rg + wA5rFsRd8Zw4Lu4pMRmxM10Un8g6+ukOhEhi4hVtmEUkFuuIWizjlMS2liGKUYtYbB33yAS7u53RZ2zM + 3QCPB8c0xW5TdHxaFv2YwwrpcY9WxE4YxRjIVA2SkIV8Vw2vpMixbfGNXYzUFw8pCio2UocMfOHgbCXH + TJJJkopz40AKBzRRmjCSbCzlbqRoyV9NsGyvTBAgyfgJY0DBlrsaQi1J6UrjoagEqVxdAoHJpV5ehnln + AmXnqncu4NkNl7baoTGziMGBsZJa1Wxm6jAny2PGhmvLFGInv4lKTkKTnNxsaNoTzQmiFzlQjDSUpikv + FM8q6LNF81wn7uxZTifxE5aUTBQ97YhAzk3yQwT94yn99c96ttOFvlCiQwOEx0pCkY0UzV4Vw4DRrmnU + n+JMaM7ayMytdc+gEZXoST3KUAGJVJ5rLClHqVEAACH5BA0UAAAAIfkEDRQAAAAsAAAAAFgCdAGB//// + 8ORCVrTpAAAAAv6Ej6nL7eGifLPaO4URGm/eeR4nlhEYImCCkkC7qunryuaN5wak9/7BE/Fqv6KxEjw2 + ksqmbGYhOg9QhvR4lcSoWS6qUZ2KLcyxeWeCdM/sS9n8bue+FVi82Z2tf+GFpnt30ScnF0hoZEixd8iI + RpjYWPc3+NQBaSRFKUYHFnHpZRPZ+CkqdKOmWQp3SKqqkOJCkjnT6pPKJgvz8uGppcvi+hh8VIuAOsxY + rKMcrAfzm8B8sygHvTVxd11Fjfwj3a3APHQL3vOdVh61THjtmtvi1ukFxZ2Oc24PIL6RP4Vf8o8RuV5t + OPXDkA2evIPEGAI8RcNhkYAeKB4aSOFMO/6JSOZg5CjBYjdpakCuY2VShTlcH02ea5mSgciRp+rFXDCz + Y0qbIXHxuknQBE+gS4gGNTUUaE5sJg3mWGplo1EgOGBOpXpVJkSrIKEeZSj13kWu/b6RvepVFcmkLkdJ + ZKuTHdyy085OTau2pl17eIuO2TuXaaOwTpx6m5b1aWKc9/am68u4cGBgTiD7eub4wyTDioUuhvg52tbQ + +txOmfyzcj7CgvqgFl0i813SxmomJmE5nEPZWvux9nViomfapog7Avh6WG7YB5NnBAszlUKuzHgTXZ6s + cVbstZtb17079gjOcUcYL27c7HeU2b2veiuCa4ehSeqtV3r+uJD7bf64Y13N33+7fTRXDNAsgZlrAcbk + nzDoXBdJgxgsqN9bCgWHSVgbffFMfg/lJ40AEp7UXnNnjGjLHvdNp0EcmHkoFojToPigab5RSGMRWVCY + Wo5owRiijwhFOOB7txHBY2SkOUcGkKBxJKGQwI0hJR/knUgck+WlF6NDAXwJZphijgkmiWYEhiOMNlrR + 1GYX+sMKmXLOSWeddtop0Td37slnn37yycGfgg5KaKGGHoronYEmyuieKIwpYqOSIlrihweNWOVCVKpZ + 6StrJDleVGJkqtqT+URZJJacOhhVGFpamUeApCqh56Wi0LjIq8+t2t8JO4LamqsRlephrafeWv4KYbp+ + xauRrdID7ISD8DcrrV2Wg+lpmmi4LLPNjqrFLixEO6ED3Zbm5Ix8ISsZF364Si6636rqKyzn9qAinOnW + CA6qp2kGraidzqvvZaCshqG1+yKHLbvarhBLO79tSrCz5hp4pTsKNlGtwmnE622vhWlGA7wgd1cxxZLA + c68O005cEad6ntzbmlhss41yKVvs67CpgUMNzPEszLDORGps9M4FZ7AhgNIdpubMSds8GM3gKb30lOM6 + TcnEv3XckHauZOsOTVhnHe67TjNt8pVgI/JUy00enazZZxOrjtpr1ysuwLLsKuNWVqOIq9VX3+1x3n64 + x/aLVPhF9H6DO/4skNyWIh52a5qmY9MknvZ9eLFi0Ux4JJbzi7lw5m0ONMTbOuO5kpFXdHrNA1dzbOqZ + lysw565v2/cf/NgeuOC3F2I6XbrDHZ/JXMeOISdOvc28UCWxR7dcuS+vevPv1h4bxLzDLv7wCR/M0DnH + sHq8RspzD7V4rQL4uKYhvNxhxAm6nufo0ZY+mPfBbyVCmdbeXpYaatRHF1u4guHmphdgAXAsAhxgZ4bD + JvqBznzuUknIxvPAnjQGfBPUXgUtaCrv9Y5zJUtbKCDnshB+kAxCI2D2CiJDGKLwWuFjXTkM5EGfvVB2 + Lktf3E5XQhwacYdmKuCzbpSLkilrEBQBX/4KRxCAGvIQe0pcIhO32MP5QdFxYOiDRax4uYdYLolngtIX + L1gVFaGRJVcQyYGmpsaWsfEvORThG1GHwfMtiQ450aKD4IIKapUCO3304x/RE0emwcgFS5mjThDZQo7l + pSBdeeQVA3mxSbZoZJRZ5M8QkjEwIq+L/fNkGusiSVF6pQaWjAwmDUlDU3Kyk66EpEdi6aGWcSgY42BL + FnUlok1qpJGO7CUE8RU0TuEyjGMjWcymaa4s6nKZKaHeYmaSK2ZWZkWcQWOL7ogEbAKufTfrpjNfGUNz + rUqb7RIjHTs0JHW+Ql5UI6U73xmzdmYwagGKVbR+8ZFEQpNGlhGnYP4AOjQslHFVC/qVPptHh6QcEzDJ + 3OZfbuLNz1RSnmqy3I42+DCJXRM1gVLmR0EK0SHhwYe0aemZ6IFSf/JTiOl8TUcptwmYxjSiAv1cMHeq + LRucrgZlSOhFK9RPJTw1qkMlno42dh5KsiSBPhEQT9nWRHZi4qterGozx0rTxWj1nkNMKlSHksqH3pCP + /zTrWXUUypp+AVfuQ1kHe0qWHDGyrnZdJ14v5tC6xICvN/XrKQ1mPZd2lZeFNSwfJKHW+iGVHY117GNJ + 2hKbepSblK2sDtEKzKlUAUUVRekbOnc9aTHUhKU1LRFRm1qirLZum9itp8gBPUkIlrZutO1pr/6qOdVC + gbE69axmtXBM2VYTd4Q1LnNmKois+NZ0/DHjCrPJExDMlrPVta5XJZpco2y3avW87We/17nNcnGyxTVv + 6KQqLaBwpnB4oOL36hBdtg2XvLW1L1RvBtzECvK+FMSvZe0DM/Eazj8KtqqBIdO5Cg/0uATGrXvf+4oA + I3bAHW6lgZ3b31toeHEz3Cp6LZtT+PqCnkDdZYEvXA3prLitH87xi2FsHxq3isQl9tKJr9tXrT1Prsnz + MIdjHOKuibbG9DXykVEcVLDaQ6OqeNUtsrEyAxKZujfGMXF75juyWvgiyGXyC6cl5H2OecMpKu+RuTOQ + xCa0bHV+ZinxV/5GHyViqqUss5l93LNawteYSMOXTFms5g3E+XFz/m8QqWlo+1LYYIoOxVxy5Jg9s5g1 + ItqRoNNLlh0j+cryfSliOSgXQoOao4/eWsZK7YdTR4HWdr6zQHjX4PiJgqVc1hupHfhTKisuPkJl9XmT + jNki25C3sPTlPCL91WQrO7fAbouzn53kp0l72tyttrUBButx6aHS0M60ptkbNHKtx0dWUaeLgFhGWOh6 + 3Fb+dqvbeOtfJ27Y0QlMQkAsRG3Ptd319beEhjlRVu4uWaGFI0lXuO9gyQc//j4wDl9HR3A1g9kWp3OI + gTCplM+p1OIdVKRUDvOYy3zmNK85o+yw8v6Xq/xRNu+5onTuKJsvSk4dVThV1YYmVff4xLP+1HfiWj0+ + Z7fkKO2apImJaI53XEoaytDRgx3tT0I6g0YXq1SVzuArZ+qkVlr4sFcndqNmUEh47rQqfd06uf/S7eWe + etz3me+Mf7zZDk/z41INdZEjAyN2aareoiJ4FzOo4x5v9C7g8rfpLp7xVH/8uyJP2slTHmxRrHi/gJZe + QAorp6PUfI7fZCvK/3vkz30WoQdueW7Xmh+zyHbZ57tMuwPS2dSLxavL2gzOXxFevge9q0U/+iLFquHD + UL7qheXA2Yss68Lf/bdDmvlrUz/5fn+lRTdC97EkHhkhLR50EhT8i/7OKs9bPH870h/r229/6yAxfqwz + CU9SlwElx3wGgX+vh3aVh3ccASqzgBrVAlwEWHXCAzrOd1PdF1DR13+IxiQQqGMEiDMRA27Ad0/6xzPE + 13/kZIJrRnsLZm3nx1Wul38YuCXfZyHdVXu4J3BjZ3IvGIL3Mx9YVznrJ4Qa6B0rKD0LQm/fxYO+xC1A + mG5fl1I0WIMomIJxBHtQ1j3UBngXd335loOj9XFEKFk22CYa5zVp0mVpFYbexzcIR4L5Z2L8txMRB4ee + hzc7yIZaWIVt81cyWDU71n7nMYhtRUZwhza0lTN5tXxg2IZSWGUnZIUxQUuhJjegxog96H0KYv4veNR3 + sSd7hahuTLKCS1d9jvh3v1Vo21Y5yFd4iMMjVbKITRiAdhiFZvd/22OEZxOL0KGJGRh2txiHBCeJk8iL + 9OIbbKJPrUCGyEh+ukiHd9OLvrhPzTiCT2Q3mweNr8iL02giSIdNzFiKYdWCDSN72scrSQJ+o1g+58aJ + p/dDDiWKxDGP7aUyjGM+Inhu8tRI8yeP54iO0rR/38hB91OLygiPefcYAFmP2MUG4GeQmsVoPRhcZZh8 + /3iODfljzvh20QMLf+hnIMkLOeSB65KRWINGQqJjenBpIflZ4QeIi2eSoag0c1SIOCWSdxWF7WiR1UeF + 17iAFRMvGglrov5Gi1LkiZv3kwFpXkRpC7iIj9hmivbUkxeZkCeZMkN5FSzphrc4jsOnkEWIlQQDMk65 + QUbZhXonhluWlNz4LSejkvW2im6Wk5cnljdyl7vYLHDpk6CEllsjY1UZjzFJlYVllogBiZJHcsL4ZKE0 + YXW4lpWATjF1mPKTmBeImIzJgo4pmFvWaUwwmY/oTJW5mJfJR3KpmZuZiXwXlawCV3ZFmogIlZgZPtNU + HYSZKqwQhCA0VLFZfqbZW/JhFZAwi6wIFkM4Tda4PL5ZB7gJdquEiqI5kDvRgFNWm5T5ls6JgGaXfZ0Z + HtLCQJxoCfEEUcypZKy5ncM4DxEZmSm4kv5JaBDTU0TYmY552WTcGYPteYbYKEmAMJ8tCYDcY55eqJ+c + pZVoJi5f6ZK6BTsY1Zi7pm7Bo6DbUZ/22ZHssxBQiJ6U+A462EP7k4WIM6BMuKGcZJMDmI+ko1f3UUWH + KJ07M6JpqZ24c6IomqAq+kd1J5XzEqMA6p38do/yoI/AeTYUNqFalx/9SHtlaaPzgaNvtBwYkzo9mppE + 2l98mIjguKOK90W5kVEJeIKhgZFryKTNmaDGuZyDV5cV06OJtYSW9AkG+aRdqqYv2iwxupRYJofq+WdY + yqVMxFqYM6J5qqfpiaHK6KR8+UiBKqJZUmH0VkvESYFbmoeAeqF3Y/6ehLpqgQiJ4adoVKpJ94mpg9Rv + daOowQGEZZqjl1qkn6GpU6mYfIpuAQqdUMqqWFOZr6qaZzadi2anobqqotqqWwl9uVerTWqluOpWJAqj + ykV4bLpr7HmoKIQXWCWo6gUhSnMJnpqszRpAuqORukqXdxqtv+qhA/Rw4jqbg2kUoKqTluantKKuV8lm + U3oTYAqrkXis+VaRD+lJ6QqulJgYKommI0mrHLlDI3Wew7qBAztyp5poBxumFlRI73mtDeuwGgOxA8hz + PuexH0tzQHdzIksmHQuyJ4uyMjd0KcuyLeuyYOKiE4uuwjqq3xkaBFuih5eovUqtbIavCMuuN/6rrJil + P+r4r3sasARJGpBasDrrN0BLsc95sRpEG+76rosjgkcKlGnKq42ajFzireqgj1rLlF6bi/ZKtVWrreB5 + IVprtVs4B+CZtIZHj0MLoW17iUerfnP7Q+4HrZrjFHm7qEPItz75s0T1t3fLdlkata2Itko5O99SC9KK + Puc6s986tYYbueQKbD84b3qLnGZrlZvLK5O7mxG6LG8Lt2drt102r8JGMMqAQFJ0e6oLu1KbMjg7T2tb + mno3pJ13ucTIsBTHublrmUd5h1XYuGvYurdKujJzvDKqlgcpoKfIu8RbvInbbb1LvVxbjrHrujx6vRLn + gmVbs8+ovTR7r/7ACL71aqOburzoK77Cm73pa2PdW7jGWrrYW7/ti7sLGrzaOL/qq18DYbv52lxdGcAC + 3L9Zp15/OcCOu4/xK5OS+4lbiREHnHbki7gJ6zuHC5Z99bpR57/cZUgaDLzhu7/fOsKra8HWC8Dw0zEg + jL9XSqlCa8I/SmbjusDdQMMT/FItnBkjEkKy2ME9y5YrjLQvbLwVrLw9rI1kO6Mz1cLl22LPq4dXW71c + EzW/JsUL2cQMrMXey0K767NV7MKhV6CYO8b568M/fMQXiMY+8HBtyYVtnLll3MVs3MD62q1Z9sRbjJdY + /DARXMJ9GchkjDCEDMhKa8Xwq8Q+HMOKnP7EonPB2pXIfsyzzMvDgvy1lizBfQykUHvHMCbDNgu2LAzH + Cgy9eozHmkyvlZzKoSvKrdy3mbzDxXjLs0y4tbzHu/zKovvJdXvJZmy/MBzM53ucvDzKfsvEqDfJbizL + S0u/vszIWXzFj9uaOMxez3zITtzJlEy3xEzAoHzM35vNeTzNalvNtnzOKozL6rzO3NzNGeKmYfvGrCzO + rszOzmvOhozI0azNg0zOxQxNa/rHGRuW8SzMw0zN/OvOAI3Oydy8Dk3PORzR3ozMAt3QFv1No6ta4XzN + DszRHe2ZBc3J/6zRAhjHp8yAKA3RhIjP8tvSnozKH73RMv3O7VzSyv580wrN0jr9zUHd08NLjRfN08jr + biN9v/oszfNMoTT9iwQ6xc5M1Azt08uM1OX8BLMRxuDs1APtyDitv3iYmbKq0jX8mzW9z1D9I1L9hg66 + rjBt1pAMSmFt0uMsUgGdaGwRoqT8y3fHbNRhq7n50GV9dlUKrEMNxLwZwm2dz8zsz7oHWgfK2GoNWZhd + 0cBM1/UcKn5Xo5fd2Kk32vIMzUINz73lo0FqzWxN2uxLwUEr2Z59dpmA1qidwvmVimId2VZN2/Zs29Nq + zOSIaaVt2hPdzyld20pdqZEMEVUk2JCt3LMdygjG3JYb2M99WbvN2znd2dXtZOZ6u63NFC0a3f7djdiH + ndpX5RrCndEPAt3cnddXrd4x3XZ7iN1pjR7x/dhPvd7Ujc3Q9Cnund01wt+aPb6SXOAG7RFWt6/ObeCS + QrIvS+EVXnMTbuEZ3igrmygtVycYruEhzrJbu714ndVw/d3uK+DLJrNMDUMHbtxG7d0ATtJYKEeKTcdf + nULm3d/ozeApzsHXGWaggsIK2MEwbuIYTNxJTeMMh1GJ168uhOB7TY5InuQPvORcndx8DEKUy48Ert+w + beRrfeUzjdxAfpq1KZxgHuYtHRBnUeRibt+43bXBWNwt7ttybr5Urec+/tt0HquyeeesPdx/9w+TEed9 + zuWA3kaRhIVs3v7kifzmuT3fix7psPKac+nYm+ziuXYCh07pJ17KjF5U5HnWnN7mAg3q5y3qk13fNtxn + VTHXVB7qv1fiit7qWk7rsH7fsn7bW140n27qPZ7rAY7miuWQpw7Yee7aVxe3oS7jo37sTuRgvg7p047H + 1qlCrL7Z0v7qsV7td73sl+4JwIUPjefBvU3qjs7r2/7gnY7Au/AS5Cbdf77Ve/cvyj7u2P4AeWbrZgrt + Zj7jZL3iz8e9+w7s+1Eu8x7wAk/fQP3sTs7iqE7uirDwEc/tDv/wb/2fakzm/rrStDMeDN/wOz3nEN+5 + Kv7xeM7v/c5sZkHv/j3dBN/l/yvl7z697f66DhUH8zF/3Gfu1dRe54/c64Va8UURWq0XvfKt8emt80I/ + 9LaYYvFO8x8SHXvOY1Me8gP/9IPe6IKOX8sl0QF19Vgv3gha797e9e4e6ABfyHZ99L1RIGZ/wxS99VyP + pGz/9bdO8QlP9nJZHY6R6CL930Ev7vl+8Mhe1ChfHGt+mznu0gQd1fqO+Lr9lPVwwPgwDrL++D5f6UBf + rEu/8oU58Q3+ZXc/N2eBG6LP9KIN1msP9aN/3fhN6Kn+UHah9Jaf5d2+0LDv9W2W+H1/7zLlU2M+1bje + 9ArO8ZQP/GCP8+seF7RWDFoy+Kbc+8/6++Au+whf9Y0fasav6Rnv+v7Kn/exr/vHz+fXvuuWkhmrL7Yk + 7OfqHvrM/5Ss//wtb0uykfv18irV/6DyTwDwMXW5/U+A0wh6l7C4bv4hCRzJ8hFN0TMRDUAdTV5ZA67x + XH/3PqN9QcWtBPQZIUhhg7h0gpoclLLIS1JZ0ee2p+WCXN+lF4PNmTNiB1mtZk9U6I+LHRa+2/mQvijn + X/CSuOwo/J4C/4IQGaaELOoOEyUxFicNJ5lqCJc2BScrMXFAE+IcbWI6u0JXF0b/LlkRXFtgRy5rFWO/ + Zk8rnB5jAHApdXV584ZZj4WTy8qadZaL91I6fq0YoCmkp3O4v7Q/NcGdQ7+7h2pUnugawuHQMf7Pt1Lj + 003eJ+rT5O1zq5nRw6Yg3wl/ieYJPJiJhAw1cgoCXOgtiy96wPhtSThxG0dhHkmBcdgGzb48G+MdKzVo + YAsxKEEy8hixDaKRfG7SyikuZgmVFgdhTECTYU+NM422dEdUpB2TCJOS4NVIjFBau6JG4sgU64OnOHfG + gtnt58eHAqJwvZf138Sv6CCx1TN22s+3PaweUBtSbtuFe52QCdtXK2GDAAH/aHJXlOEddI8YrZPYMWRj + FRnjVWqWi+WennVkFqvPcefSh6UCRYb2R9fTFZHGfEPZMGhzmGkrznj0tUS3uaNd6T1m+NoR6ySxJkjZ + NsfmZ2R7Kq5qev4EzJiUE3RdXQpI4BS9cn8sfnP379kWMydPbOZ539nWg+c+VXWi7EMTP1+of5xz6fHf + G84uVu7TKz8A4YnJvdTCQ9An8ugTjZ20tnPQuNgOEszCB+e7LpYCreFtw1aMkpAPDUeEQrwI64JPxBRl + ScrEk1CB8QP+TqxmwROMUM9G62TcsaNshJRsxSyKXGO3wH4EMsiUWmuSveqmmrHCEF+EEccdklTyKim7 + 69CnLr0c6soRt+QSLjPBDHO6Ksks6svCfkwTOrLYbHNIKlOIs0yXTGvSThysfNHPz8SU6lAmAmjUUQ0c + jVTSSSmt1NJLMc1U00057dTTT0ENlVO0RP4t9VNSTU1V1VVZbdXVV1UtlEadzrRwUEIXxSZXkG7N8sZd + 5Qwo0DrlylUCWW3s1VdKkJ3VQB+T7WvRAJrVks8xZVuh2j1TVJaFbaMB1iNvicMWUQNfElRaP8Ud980+ + 20VN2GG7JQxcfEDUk5riZjk2quzu3RdNw5JsR98pe+uXs6RgyI1cSR7uw74NIo6OX3jlmsLhaO21z8mD + E0xYx3X1qsnajvUgpGJ3L04t4ORWqhXAlcFImQaaJ8JZnQdfTk454HSWub3VgAjaHqM5PK6+Yj0Aul62 + eq6RRJAFLi3CeG1BLt2ns4p6uT+plknkrOd1DNKy6XUQaeF+eWrtFv7HVnrh0s52muuu8ZrhrbeL4Rvh + XwcjGC2vxd7QbyIh0nuGDiQ8fBXHQ4Zi8elY+w5y+boO/MubJlcx7MKt5hlrXDW/424ZmdFWca4uhzhu + FQkvpvOtbTVbbzc+nzp0BkfnMnbQZ37td75y/7gy3nv3/bnWdy4+2NyZB37K5PHSL/qknSfe+esvdNPC + s50NPvvuP+c+RgZTBB/32sc/P3vzjf97RPVpF7/9XrY/zRX4cV1e7fvjFzb+7U9P+aJTfPhnsvwdD31S + op/QWna/BB4wYw0E0wPTlrIcAXCC5aqNBduEQQoeSYILJAwBwyZCJtlvfB30SwXllsK8LOtdJa+Eni6g + MQoXBkGFHlzPDlcoQNkFCBDZ66HpEGhDIZ4QhDI0oA8T9b7yfTCGznOIbYCoOxOCzFs5rKIVLTDDIJJQ + ikuE4Y0AGJAnIpGMxctiY/qCQgDOAItJ3OLBrifHNNJxfW2cItW4p8M04ueIPngj/m4IyDh+cZCpWyN1 + CDRCPCryjN5rZMkeCclQ7OWQmNNTHhl5SRdkcjxRNOMnF+m5S36NlJ6M4CnbFD1BgqQAACH5BA0UAAAA + IfkEDRQAAAAsAAAAAFgCdAGB////8ORCVrTpAAAAAv6Ej6nL3eFihLLa64QRGm/uhZ9IZgC4cB2iome7 + Hu6oxOWN5wel9/7zQwRawaJRwgsmj0ViaMbcWKBG25RKlcGstKhXt/yKkcdhdoz2hH3rtEh1gbWPWej5 + x21ozvO4+3/RB/gleGOWN5hoUFjCqJiyd7Xi6GOn6GTiQPkyg/j4t/nZE4pxKPpJGniKsYIC0gmVenMH + +LoV+TIRcVvjuUr4iyZbYRoMyjScGHO7pZBMQvvXrOUrpNfJUG1ctu31rAnXPfYNJJ6dQ84aXfsBU6rH + Eh5vnpZO70xXfG9kj7/Pgs4Npn+qsrmDR9BbQjb55C3E0S9BRDHryFB0+JBYjv6KGUVM/PdxEcaO75At + 5KiLIkk1G1cWCXkPJgAzLkPAlNkEpSY0HXQ+fOazpkWhLMuMJLrgJsGjJHDGY0oUKFKGU0vyy1U1aRSn + G6F6lBY0YbKwWf2VTWlUm0uZXHGQRStQbcaxZwPWhfvy7T62UfR2UaLM75sTW0sIPtu2G9vDik1WOSzX + pihmkStQrmxhGOOyibcpxQyyMB3Q8xxv86rO4EvDd+22Lpe2qgC+5khn3oc6g6/Ni1i/NvQbNj/eqESL + Iy5xKTRJPSEuD94IOoPFSHF2fgLsH2if074Olu4dvLW+toPR7lb+tnLss/5qdH9NfHj5M7ciP2b6dPr3 + 6/5TG3Z10AOUxUdfUQXWh8x+j1h3nIJ4adcdQjnVgQUcvBxoIH0MkrQhemJcN9odDl4TDgdtMINhUyl2 + uBCLp304VR1x9ZaicQfKNNtcNuqXnWzLKAJiLffxd6N9LSpEz4jCxTgQIEGCpaRVRe5ITwBWXollllpu + yWWXXn7ZpYlbShClVjUiKeFDtkQI44JgvglnnHLGSZCLTnop5px67slnn37+CWiceQZKqKAqaDlooYou + +mRyVDb26C9DOnpmfgl4VWYQZ0xqFoY4NirlVQ2OU2mk7ajW4KaZmrmiN6tSZSlYBPZYqqgkQlKbqpyO + 16qpp9jJk4ivdlorYCbYsf6rDruRWqN1wzqHpqZk5pEspcUaS6IN1SqrW5u9+rpgtHi0YgWFz7J67Q+F + YLRtV5mIO2WCkMbaQ0/sVjgIqNIx4kRuq+z2rL6/OHuuZPBWcqFD/nKT7mqWudDkcbvQGq+85h3MLSca + 91LwTg1jO6077c7iScSwfhvbKk59hO+lHQ/18Shx7LHMyyQ/XKbAKhNiM8y2KrNzzCeHXANuHBGnc9AJ + 9rzkz0L+KrS6/hVtdDX++pu0KCszPR3FM0IdtcysoHrP1Uxd2HSBW3NNrMNAKx02tGPjCqHVA/HiS9Za + K8Q2r/TydHHcrl0xa9lqXYZN2mrz3DeN4IZojN6vkf4iYkIo2dILYYprCEzjKz8dueBgfHdO3TRbxjFW + XVe6diKfSzOv6NGRnjlunOR2+qmar35m6056rVLsss83tcuNq+MK4RvfboXkxbnK9etpjJzh8AbT/tTx + hL/iAebZv8KDNhVqPzrfv2PclznOt6YZIgs/UmLJ5MrQ7TTkIu79Sp9TL32w4qzPvva8K0mtmNjy1JIE + vCXuUkLZnxv6Nwbybc56RMIeA6smhQuWRgsVJJkEZ1eYdnHlOtSrHgVD9QT3LSVAaaKfz9zFoQ+JEHjk + qdIJVeSWAWJwgZt6YUv017mCjXB6H5zgDY04hWyZDhds0iDv8ABExnnrb6OJyf4RiQcNYRVxF4gj04Ng + 2JH9nQuC6dvLFa/nFoBBx2QsY6EZkRSwKdbwjWcsyA+5CJ4AweR9SnsVBDhFRiZs0WN1VM8dDSgfFOCk + hAHh4zsmNcTg0bGQHXzOtAqkSC9gQX3wYYMj7fg4ZQ0SiZTcQb0ON8oIaoAr9+NkJ8HwyUq6TZNiKaUh + wYjIROboIrF8YDsy1csvzlKQqXyiLUk5M7sdKJhvKKYpmZcXpMmxirU8pjBvlkv5DIGX1GJkaQ7BzFtJ + jYbjOpI1r5lGHSbyIrrxJjVQpKlwWouK9dLROQnZhMLRp2NaPB48R4S5EUWyjOa8pzGhSLZ9vkxX7mRe + /P5OKc95Moyg1TQouuLZQvHsUpXncGcTHeRGuaGvnva0aNsQSjddkpALuGCH317ZvRbYY6CCLKlJJVrO + 0mn0mdNzmeq+xlMOptNEGQThSEXpzIPeFEHUTKl0JgE6iLHNBmEQDOb+KFJ61jOpF10qU+nQradmUkja + mipVaydAoqaHphQNjVdfmk911uUgkjMrTplpLwrYpi1taSga3/rVKhDtLt3Rm13hClPUSQGrODxqTt0K + WMeB9WGEdaFkP8G1LKwhmORKBl85WtHILnJmc1Xq24KlWYOQZn7D+Cw7QwvY0ZK2LHkwrM2YMgeyJG+j + JpzoF7h60qUuMjJ+bSpiL/5BRHz69DuRoAkKfTvHOkX2uChVnmxMO4h25U2c3TsVY0GpVWnBNra/Zc91 + u3qJbVUjt9uhxh/l4toIFnS6TuEOcHHGh2Co14e6809zK0LUabbVitO9rHEV65J11LVgCubu3ODw3Qxs + k5yTlW6BAxvdSyZYlsgtL4d/6gesOPca8ZUkZAvcmYUVN4cfBt2AsVvU1CgyGrx1bHUnSV9ZIbgjCNTv + s+CLR/ZMYjclNjGORetSDa/wfc4blk4E0V6JCKvIHrbwhZ8klxUn8a+TeVVloNzM5LiPylU+cY6TTFnD + LY+/8Dvwh6W6ZSGMmVly9Y2Vr3zaHdemsf96DBadmP5lKbM0MVAG6E8uHFSBUFbLxjNZi11cCT6nYIPZ + nMmg6Vy4t9yXul5t1DostEUAAccYZSJLH1oZZxNxgdDK061NUdzhdsY4MBE1cJcx+mfLOhqtq9QWq9Ms + wPGeObvdTe+qmgzQt5zaXiBGCAgmLAMyK7l4ZoZ1noGtY+ieItlZfUoujhYDaNta29gO8XzxfFoAX3uY + 21aQYJYNsRA3J9qYNnK1h03sZqMVdqFEczMPw144L1okie43SQ+N6HH7DzWNAyR6ytPSbi931jqEar1p + ifCEYxhKtKh1TMf4cDuXz9zT7oC4Dd7fYmc84TpjOPU8js70inzk5R7gsxkVqP7ZHGpPs8G5z38O9KAL + feiKkgOehi5Toiu9T4kS1NK31PM3Rf1KGyc3rsLCaC5bu8sd9zLMn/uvKA/Nsk70Iv1+rcms9xbf7e5h + Tp4X8hSOc7Y7DrCAK7xyRANQ31HS8t4Tm9FRz03PnUlMxO+s91xRLdJg27N5aR5nJdcY5V3ZNKff+vfd + SSE9TXRd2SwocfcFuuDhfey50Z0q+tlm10BS8+MHV/M0of21eUe94jW3naRmXt9hFVvZJy6/86mS9YHT + eNVJ/SMuhtQzrqe24AGieaFiSvi//frd2X776Bvv1R56/fOFWrrD//76b+e+7V0v+hh+3vtGBf/VtQ99 + X/6CFv7/M77CH64w68t//YOHPUxBHXz7V33EV3wat3uZMyBEFFEHSH919mda9EuBR3lppH8TeE8MSDUN + FwnvBiEqB3kUVxo0Qy0COIDmt3UnwTTIsoD9EXvtt3mqtTsyUg9xYXn3R148FlU5s0Ik94G8NwLzs3gX + l3YECDcslxEV+E4vg4ENGIQ9CIGoRmkUFiJqp1yJh4LVB3hz12cS2IT+x4QsJINCSEzLJzxWuESlhgk2 + A0Dd1IKStmYcUzOTJgw0SIVVeH6WU3kmo4YvwoVRGHoAoy1yKIZjSIR7Y39L2IXKR4Q902SVJog9iF9+ + uIdkdV+IODkrISx+qGdSqP5oZueILuiDPzhxoQgyUHJvJ3iE5YI27GeBxBR/r9iHWERjhydwgzh/NnSI + QgEgSoKEwRVrsciED6iI2/dttihfBJaLuvh1hQiJBCRrYxeJ2zcyAtOLzYh9tcI0f6dCwKh1OHN1kwg/ + dUh6d4iN+KEmbFiKyQQJ1YhTkBY69nd8Z5KNPDaCbwiK3lgupJiO2eVMlniJHzOPqRh+K/hv5jKD7VZ/ + 8OiPPUWCeLiOt+OFi8ZSMxR2CZmM6VJCC6l9CeOEy0IhB4mQZWiGxcJIGhl9caiPbGZAEwmSIfmOF0mS + +YKJyadrEWl2LNkxtpVKJokYDdM3JkmTReUXp+Zsqv4YjNAYGBZpfDzpijLJhzcZiFl4TZl4lJwIVAVo + gBjZek85jJSmF+x1K9qzYCJJjilyPEwJfyjphrC4XGfpY6OEllURl+LleWdRVvcIgkkYLpLCjt2IijXi + V3PZhMrmQZ6jH1skmNURk3tpl+MHXo5JDVvJI0WYlaVSXIkpiXgZiszIbvpFmUZomYaIfIeUl2/mkWyz + exKEmQ0UmqLpY6RZlTA2i33pixUJd8pnUqs5c3U5mixGdn7pjbG5j1zplOu4isekm6BXnHy5HwuUa5JQ + mq1oirwJTfpEScnJissZds35m8AZnAHZgU6pE+LImvI4MC/SnJyJXkJmjtrxNv6YQZvggZ3955rbmZ7W + qIlC2ZIsOHyfpJ5RM5+R13iveZ7TpkHgaDkL9WweVEoBuom3aZ8FaqC6poT0iDwi000uABQ1eGQaNUjr + Q4bUdywKw5alF3eKKFV3gxFS0aBmyXzEWZ8S4pwVShIQiF/5FWzwEZ814aAOyJieWUSOEJWqsy1MqYJy + h0yZdhD/yTmYpJSkJqFBFmNBKZ3MaY/4uT0O1XnX0qM69ZJA+kGUoJZUaqIYZHUp1HnkGaV55EpQymib + QJNk6jQxAyIi2DBdCpkDCqVranNkJ0SCU6dMGhx42p1fuoWIOXiiFp1ImS4pxmx3uk7IWJGISncFtKi+ + B/6gqOV+tUKoanp5+RakKpc8l4qlpWJ4zsmpbHqKbZZ1lONCo2pjrOM/Jdo7a2R5ILqjKuml8/ancQMq + HDqHv+GptUlrobpl8YZ74qeFQvOrkPoaw0qs/EipaTY/j1ql4tGsjfqswIqr06ph1TpvZVqr/OiscwWs + 8Qg0H0payReuZ6qt+fautHWuNrhuMdpO98M914qtSRmv5xVFk/mZ8ZGiueOuXMqvBusj5QmwempuIqOv + 8tmUTlUsggmtt8SsxVYzgmqxdPpihWqqSDGvMDaxMfVTIVqqsuqOI6uMWUGo3/et3/Ow0IFluSps58gZ + vvpxJ6mxuhCyDTmr/WqhN/4Lo/ZaP412bKIzsz0bqxJTF2v4outqtAWrsqYHg+V6hAHkpoZ6SUYprs1S + fveqtFLLtHfRrVprXRD5dGmrtjyHc02HKEm3tnErt0HntnNrt3eLt3Oyc1aic0PSshJnb1PLn2Q7tgE7 + MbDgt0iraBUrmeH5G3+rmahyl2L7sQqYqYOLtQSKlcfqbZkCuZE7IZdrNBCLs3IXlUdbugx5saNLuqJL + srCQkt6ZqjS4uvy3L6n7uoF4H5/7nB44WFY7Kq3ruv51QcjBu70LOR+TmmEru5WLpHdpvIqbbUD7lk0a + Npoxa7DKqNRLe9zbdouDu9gxudIEqPDqvZjFuHOqvP7tMb68cbzN+xjpu5+2Cb7Xy6AhuLPteL7d67xt + x7wuC7xoipJrEk7vC3a32L+TgbLDa7rxF4drVb4yJ7gKPK4MLL5euqlrt78/W8HbtsC1yxr1uG8ajLCY + NbsuiTIcy2KVsVcRTMEdHI4JvL4Hd7YYTK8yfLAp3GZZQRoGvLEiJz6e+Kk4nMMVI8EwrMIZQ6ph4cM/ + fMRGXMSe4sKHdDhrucEpu68vzMOY0cS6al6jR8InzJdSHI7/m59e/MFKnGVcPMVbWL9RDLKg0cUx97zO + R8dEXMZv/DTyu7Q6/EMsvDBzfMdYPKgxzMcx+7hxtVpOfMX1WsgddshdSx7FZP4P+brIj4bHJmy9oDqv + OujBbeougloRgmyHn6xNyGXG2yvGELV6jDzBY0yzjQs7kfygmOy18bubIpvJ6EvLVixfvUy5fnxKubye + JTy0iZyuwNyZ/AbKdKmc0ZrGmnu7SanMy+rIfDrM/2HLtxy80wzHZKzJzYwwvlnKxnyij/zE3AzCVJud + Q4zEx9y0t3YSvlvOrzzOxKy/9rynMou+wvqY4by592xJ9bzK3cfPO7zL/ma4uNTO7qzOhfuPkBzNjfzN + +XyMkgrRmVusE23O0pykNdWh8MyyXMfR+uzGBJ3QphzR16zHAeyZaPzOBq3R5hvTJq3SHw3Otku4CF3S + Bf790oP80N0804S8yUks0zgNxQs71NMrzB09xjAd1CI90v1c0zYN0ECd046HzDHsZuJM0eTqyimtxUut + 0C391TSN0lX91CudztWle/ar1VCd1XG901Td1D5Nv3Kd1Occz98712fNzNv81xkttH7Nw2Hd0zmKz8Vs + 1Wvd15Iy2I090Fl0wJJ90j3p0cI7w1LN2GJ92VPt2Fls1Pv8z05N16D92ZoN2J1Y2Z5906gtz1I6FaTc + 2TyN2GpN2oWNwtZZywvt2oF921F92nKZ2RIbFXB91IK914Q927mdUAytnS6d2li93JzNo849oSQLodJt + wxjX2okd2rod21urW/l7sv53zdXfjdu7jdmQnVzCKclFvZ3Iu968vNXTXcPf6pbrXNx6Ld/Wfdzhbcdh + FZgWnNeljdcC3t7s7d2xG8zVfdUI/ttMTda/WENqKaKrrbphXN8sLd5jHb+bRJ3cvcw+mtbC/doV7uFI + xVKyrOG+zNv+/d8MXtf4jTAi3J6bbZWJKOOnnNxsbdcRy+PkN+Gg+4jqjd4Wft80DlHc+OBmPYE9bOAg + DuRB/rVHPr+mLclMPOURXuVezuImjsg1TuTd3eOqbeMLzuT3K+bxLdrjwLZ5K+dzzihTR+d33rZ2Tihw + e3R47ud//ifoaubUPeNWvuSGToFg7LOWXT6pIMf8nf7iX17RYTaLpKq+Ce42jk7fKD7pjz3ehZlMJdnl + IOOqm16j+4FsPk7lAvw+BEufpg7hy0o5j26uNrniaq7kH6e9XvSTkK5tpc7hSV7Wkv7eBZlOI67lStA8 + DY3UaJ7e3kxr2gzdWV7kTbHs9BzcsX6VB93p2Y2kGc7oERkKUj7aq67iaTftaIrs4W4ItcXsuhzZtw7b + 3OR97tZQtD2Ow4HT5E7iaH3oY8jOzxys/e5JJ+6xyv3m5k7myXtji13m8a7sWG1q5W7b6MzwzqzYOc7u + jRANcMrvLw7Szp7NeJfxiw7eo7Ber47khQ7W0H7lcXXs637yKL/NhEnwFH7u2P4U8iVv8pyuLqOs8tnO + 8v6+8DS88w6/41CeFxKep2f+72CO65XHv+/exwlvEkAmoMGu9BXv6XkIODxP7R3uHJEhpgAs9sWe83T3 + 9ZMd3TPfSFoP39A89Ln+4ZQN3Niu8W4/9nBfHvgu6PK+FsF2WFRf9SIPGGzc20Jv+FCvmP/hUUj/8FLZ + +J1j6hAM8oFL3I5P997uZ7W99VLz8W3e7BYP4Opn94Df9OPi7pevChOf+AhP+qVvgvm94UEPVqu/8SrS + 96/P+RDP+Nct7UT9iRef78LeSLsvxDCu7W09+aeP9raf9z7vSZY//Ez/+Qof+OS89oSPPHC/+NNv65Zu + 8P7fj/2mD/m4JvAhTPasfxsKsi6onuzunflgz/sjPOAU6P3cDj2YOujWP/flTwDwMXW5/UGAU4i57D1Z + I97BTgrJ0jyPEYWkD1Ubl4TX2q7pWzfk3Z9ypMoP07sYiazkkmkI+gLD29OzojaxpmtWg+TutsestOT9 + Os/pUhhHtm3da/VcRBfaobU4cd/FK9j+0gJfzORi3gQVEQj/+hZBGmMMHygpERclIZc0Zx5fJi8fOjd/ + SOdESwFtUk1aqyBPVaewol6BGIZuV2ftZNN2VX83sD4rN4d7T5IhjEETKqITldWYx6jr9K5DnAexvZui + ODHAvs+si81xtbc7gpPQ1f5Ha9/XYWnls+KX6mPZ28Ugy6cvXD8l0PIMZLIvSTdzyQweaRVRB0OFjIpR + dABDWsWL49Rp9KVHJCZ3pSx+jFCQILGSKS/C9FFyDkSa5NzdXKbSFL2WPIjIHChUh85z/5pMFMYzIROj + vAA4DEE0H1WSTFeieApN1NYZWMst9Jpiw02rD+WNXXiiI5euS8FOcwouatC4cs2phSdE6g9Ls85+E9oX + X92ed63k02tXImE+RqItzoZ4p1PJWXUGpqZZK9NAji2TAV2NcmVOlzGbLW3622h/lVBTaLt5tZakqFVk + rv01ZGy8uXbTDX5hsO8Rrg8OJ66YJxzkyiNBX255ZP5U1dKT520O2zdizr2K4zm+F/tGxd2fHStPfv2C + 8OKJHW7v/vzHMM/nM/gOOKmi4zT3g6s3+5rJrykDyeIHPTSAkg/BrNIiUL0HcaCQQX4yKctBBAMsY0He + HPgQqw5fa0hECK+jkERuYprQQtY47K9E/PR7cUUWh3LxxUNUpE6gBsPqUaETpzNpRx4flInIC2mkT8iB + mvwCjiNhzE/JJZnc0EqVsGzgii5bfNIvMHN7yUYuwUyAiijFjNFE8O7xqE0o00xQATbnnE/JG2sEUs4k + mcKTMYSoTM/Nx2jjAcA8ocSGBkEt5LO6hiTt07AgDazUw0TjK9TQLd90tNM/D/7lktNLPbWNUVY0tXRR + QANNM7dUE4OVj1b1C8AWXXnt1ddfgQ1W2GGJLdbYY5FNVtllmUVWgGahbbaCaKmt1tprsc1W222xnVae + /7RcD1duyPSTViT15GdcL60LV1ywIE2kzu1snWleJ+Nd96dAAbtXJX1rUbfFeCEENVZVCI603pkANo/g + hkHCKmFXzq3VYD48e7jUgxeZeFXoYPKXBY0zvcvjLp6tuMryQhZ5lIQhHhReRzKIWSGbD/TrLltkbg9n + HdXg4Gd1hiZ1h9kCFadnlk2OzY2iBSs51LgiY89nqlGLA+pT34XHZT90uxhNVGTYWhmzP63oZFSUdlc5 + tP4VBcYIuAXsGtHVkMaUaYm/yNtOlTWgG0RTvmbRKMGjmzmjeQCfbO+g1sbD79+wE5ymyBxC3D+x1S6c + r5SXBhnevqrGXFHQNBck9SKhmJwy1yu0m19nRKsdudXhk711z10B3e3g6LZgNsw9xp0O4xknnPfefc9Z + dMSIP6pxeyr3OnJIhkgJeXZLu/7v6S2t3i7vsbdAe93Bhyp9J8U/bHltzn98ffXnx0h+vefL3urn67e/ + /+/ftj8D6S90u9melP7nP/45D0EEZCDwEnih/x2QfoXZUc0KWBsKBiyCGwQg5V5kPgEaMIIF658HTWi0 + C4rwd6VB4QjT90KLvBBHM85EBWkSSMMWeieDF5SgCkk4wRy2D3+pwuAO46LDIoLPgzZsnBQYgkIlWnB9 + +tJIFNPnwCW6UIgnpAZFnAg+LQKRi14043DCmMUfgnA1U4zd/JqIRCMecYs8rJ8bLYYwKrJxelCUo2fu + GMgAPjCLLKzjzgRZxQXusX5j5CMi4ZjIIB6ykCl84ySZGEk0/rGPhiQjJGOoSUwysoR0JOUZJoZHdAGO + gvtQpYIsmUc6HE6RoYQgIUvpLVyOqJaZHOUjS2id5gGTl76c3gFdeZECAAAh+QQNFAAAACH5BA0UAAAA + LAAAAABYAnQBgf////DkQla06QAAAAL+hI+py+3hIoy02iWMyBfs3YUaJ5bMRypfgpItyKYefMjmjefN + pPd+yftVICih8dgJhpTIXLGzYSJtGKqQBsXOpKNWtQkOc8Nk01j8LKt/Z8kat6p42z6tJka2N0BWAD2i + 9yY4NFho8Yc0EWjImIDI8MjI0VcT57emRZlnuUcRmabZ2BgpSkZaF5BWunqK0CroMjKDYPdaEvrG95Ix + Gdq2i7cqbGA7zMaYymlcaFusJrOreuCcZfxCu6gwpmqTvbxG/X0TDiQtrtZ8zpJDTqG8qut1cZYi7a0u + hj/YvmSuf1SM3xR2mN79O+Tg2omD+xiik5TsnkMRAf/hcrPp4kT+RzokbtQh8CNHQwIiiuxRUZ/GB5tO + LnHiskzImDPlmIxpBkfNHh4xhumF06eJlUFfFvWx05PBozt0qltKsYw8piOHEqXqCSvIUVC1Xhonzl/O + glcnFivrtWnasYZurp3mdFlXtgXX2ur5lmVeoyTd2iV4Be0dgCTxdpwL+NberYuTNCppWGRKnpGxNUkK + KJrgKrzEMlbcOG5oQsgQ0xRdR3Bl0t9MZ96zGdKN2I0xSxaV7C9YuWBsz149CzbhoaN3F8/KlbY4Z74v + KFeLDy2uJ8CJET9OF7vs5FiZ8+59sOzVqUCua+d7fkFz2M+FTRbWfrtK0Ncj8/BYvfj6jfv+teU39h48 + 8Wnj0HhwrKBQU5oJl15UDapXSm5BeTfMf0JZRN4JA3ZBhTlFAPMgeiHChduGDaEGjyk4QWUiNghGwV6G + IyI0Y1V9tfgQiqVYqNeKdvBoAQz9pTckQ0XSkopLAQqYD1NY4MjaXkCWV6MrEUIJno47QnlkEwm2FdqU + DlZJoiRiyhRAmmquyWabbr4JZ5xqRuFmQk2SiRQgPs7wJTh4WseOnIImaVZi+7xJ56CKLspoo44+Cmmk + kZYkaaWWotAmpZZuymmnnn4qJ0hYCkGhNTL9mSd7nagUyJk94tnlNKOmahx8WMa6GD2tzvrbIrwCiiqu + hP5Tal0anor+KkqZdfirVaq+gas+0Q6LT7FS6eEqhMl+ttCPzTrLYI5/TvvtmLU6Qcmu0G7L7RfdlEvf + seKOywq88xh6WBfBWLYuu/hyFoO9IXjDa7TS1iswcufCxOe+lZzo78KcuZDwwK8hm6yw2bZrbmq6NFwJ + vAbnhQh1rjG5qorbkquOtTDxArKLo0SspYYgMqSJZ8pmjPByHP/m8GAz0yzxsTRsbIREJ4sIa70+1/xT + xSOTnAU0BZrm6tQt9wzgz1GzQnR27nQ4EdYXmab1OQZTC/a/ebgXNpVQfHH12b72SSC75FZsJdRe8p12 + Wqdgy3c1cvDhYhy+6A020ve6DYbjNMb+zfTYC23Uk2acaBL4N2svfRnkUxQOLOWPD2wF6UGuFI8KQsvH + c4TBDe13YMt0rtUrqatuOVDu0J0N7re7B7oR1PgmuWOmV364vDjzibUHIdfwauy4zc6M10nz/tXyp4uw + O/cxTuIc9RS/I/zwCNt7/DNPez95vCGLbzP5hr/7YUmvJ8Qs/doLQgTaiW0g74OfwuQ3vbrJwk7UW2D9 + FHI+zb1IcI0T2f9+IL70dYdhdMNZLBiIvYsoARibI5tXPpc8Gw1wewU04IXAF67w+I4WKshE/Cjjv6I1 + pHi1i1Lk1ObCG8LQec9D3MXWcUAM5nCF++ChDr/3NyAGMYng60P+CgPTGRo6MGiww2DuiOfEjsktilKc + 4gurWD/MKY5DLFrcEa7op/XFsYcHqpYZqXiLdC1xYtGwXPWUuEE5zouJ+bLjHf+Yx2UVR0bdeyMj+QNG + ybUvckvUYCA5qCftTAUzYVSf9EojyQvW0ZCHhA4cVvcgIT1jj6TppE50JkofAvJgpTQl0OQQIhIgrxuQ + 3GIupIe0SRKQlrXUVkdQmcoMNOdJrBwJHM0Hs9DFMpHEKmYXb+nHBsEoFwj6yH1cibqPJWKaCGyhNct0 + mOmMCJzULBQbYQEDE4VjJs8kZC0Fco9mouNXnmGnF4kRjyuCgAgbmufojHTOvDkShMnk5rL+VCdBgSpz + fzuj4xARmtC+DbOGM9KfQ59ljT5ij4VdUITxKnoFh1jyi16KoTb7czd/4hCCOFIcB2YiTNthNKPoTBpD + 07NNeHainnzEFiXlERKDvtGdPC3dUi+nzYkWYlekswETsvUlgShVpzttalLUBVRdSoKjRHWdCn2Zmph9 + RTlb5Wo1m9pTknYQOynoUjyPVqGzUjSdal0rORHJ14OslKVkhCpdxfoYb8FHoTLTqRZMKjooupWUcOUk + /46zyacsVq995SAnFLGZtj71rXBt5EYn1pgE4a5wVnUpJh+7V8mOUa6UrezbmielGa52S9d8WB0cltMn + HlOwpY2rT5H++ZY+dE5gYtGVcuoBW4ueMa3ELa5pR4vbtSj3HMwNHkhPCU2Nzla4oyRtaS1ruLQEYrn2 + cqNr0TgYGQRQjONNaXWti965Jbe3tpqqe2023E/Kd6SyrO8/zXvelqTXK1ZYbblEyD/aUOyTJCKKaLFb + W9veVr9UeeR1+zsICF8WXeG1koVRetqtWffD22OdPrML2BQJtcCNBa+AOdITcuQ3wxq+lkbKimFbhhQW + yhsxNtFHYTzS174ITjBZyncUEYelWSv5g4QTaGJcsM2eASYmfkNst6J4RHj8XLIWy9tgiVw4yGX8MpiR + WzYPM7Y1s7JPNmejlFB4NLK/bbKTQ+z+nBfHlsab3XCRf9pO2XhDx1K574qLlDlBz1CIplKwmRuIaQ7v + YNEoRiImeezVx2g6PORN7Ne4nOTKcM67nfatjf0c6rHiEshjk/N081pYA3sarXdWzyLW7OokQxnWsZZ1 + hAkM4vykr6axoQN0xWNWgDaYVgwyUFfdbOxjQ1Smxq1QTfmcalhydNfrpTYRLXbt4saKKLTWlzQ161Nl + Z1OcC5avHoB97l6DutgkuaiZVPaU+PjzF+JU9QNqYe4jBkmlKxavf3kd7cJgDN6UIdVD69HOTLS21Uwm + Nr8lrjRRhJJVODxphKFLn3dx9tI8YWrDo9WZbLR7VJb8D7dZHDT+6RgZ58w7sKMfLSAj5vvJg5wyiYfj + 7wXvi9GrY7fLX24rPT8YjjX/tMXhm3R++QFUccJUozTF9bCLfexkL7vZvx4FsLspUWP3+tnfzim1fx3u + ipJ73eV004STFXW9bLhTt5SzqNF6pdVp0TasiGdI5J3jFX860Oncqlxfz4OJRzrfywnQv6O68unGttEj + Tt1hDFbYoz6GedDta573vPGdVzfJuWh12V0NXCZPdKCbwvSjMtzvmv+O+dLZbmM+7/RXH3fKUE+g3Eve + y1BnVSyAI3Rzzof4psc68jmi/IO23vUyjKbOf05q2+ud9MYn/1ytlH1HinvyvFf9kDM9vuD+yzY6tC++ + p3eH5Uz6J/1YbOboqTZ7g9ZZfTd8mAc5+UQ+Z7MH/Odz4Pd4AQhWOPF/5vc7lqd11UaBu8YCDEhd8hdj + f6ZA0HBzyPARBmeBwQYwwARnDiddeTSCJ/iAcQY9tjY660doFHd940cwLyJu08Z4HuOBH9hjJQh//hVz + P4iDw2Z/GpiCMRd4wteCLrh77TeBKGgsiVN9mJN1jGc/TXiBoNdtLAd82weCRChxA/hX77eCWfiFwNOG + Z7ZyqweEe1SFFCQSLxgwz1SHeIEjUjAXH1Jj5QeDLRaE/MV9cVZnk1Z0lXZ8+jeIUhd9yAZx46dENihA + fvd/eDNTHwT+QBbxXufHhpOIByKIf1lyVHgYijFohgeiieWybI64c0tYhEYjiFYoi4SIimloTXUoikWl + gBDDXbCIaJSISsyCAbVYah6zb4d4EnfzhrgEjGoojIZ1ixk4PcYIhtX4NznEiycUFN5yM1sIcLyBcccI + jY84HdEUMIE4iJS0jGXoEnc1ILk4Z62hb+aIjs0TPg/Th1P1jkPoI2diicRYgGnUjk1nRb2QOgSpfdKn + in/CPgUJe7aYilWjKr7CkA3pSVToLxH5jbFYe1ahRyySkSkGN+3Xe1XikXtyOSPoDJoITDT3b56DkilZ + IysZExhJg3LYO5FnjUjojjRZk914hdH+GI/Vxm0veYTdMo4Pt5G8R5TuQ4Ji5osCaGYh10a3InLcE5VU + 0ZWnBiZiZjX8AiTUwInIGJJO2TVDuS0J85XCxku9OH8clpA/GYW01TZsiSqD12Fw+DrP4Wz6py5cInJC + qZcQKXvTd44i+IyXtoNdGJYzKXo1aZNRlZgBF2iK5ZdPhIBW2ZRvtpaHqZKAw2DnZyEEp0h2+W6SmZco + +ZbHdZlSko0sB4mSuIjc5IGvWRS62YBTmVpoeWinVFYwpzq8eRp4UpxhApxzOYs1NJzedpKuiZiT+Zuz + GZygiFrZw4iXiInI+ZSQx3rNeZ3LSUP1pDXtZpxKQiZciSF9tpn+YqiaS9kv0qidx3ZO6flq0YmZLceE + 8Nl0npmWIBaZeQiTLoSf1Nean8efFMmT/wmgFclb9TmDn2hAB2qA3Elnoccj7XA0v+Jg2hlppWSh4sh+ + +7mJEGoeHkp/gKaa+WegN9lmwdgeYvIJT2ib2ohrqzSQ0GNGI1p6+sldhViPIElut0mfNeh+31WhHaVi + 0UGPLaiO+HijJbmVmZk/AFaZCrekueQ/GrSjnXh7HtKfARqkFyePliANZ3FHPnqODnmkhrlwKDiWd9Ke + KXhxhtimpPekR8Gm0xiaASekLAiLjPmeOAqeLnqPWbpz3eRuK5NKHvemf9prc7pX7TGBrUP+ptUQUYEK + p5rkgHKxp5sHf08ypigKqKspkowkaANKV2S4WJyqqBpYjrMImE2DCWj4IH0qpcyXhJ3apqT6nqdpq2Sx + qnOEWY5HjpUULx0arGxFJst0V/TiqVNYpspqfXhFq85aJbsUrcM6GrCKp0xirdeaaQupi3vBrYWaq61K + gGEhlxgapwuEreKpa+eRrvRKJItUrF46pSV6efI6qoaKHUdSrEbKYAXLr+A6OAFLYd53B7Shq5Qmlc8a + JgWbpIVJhxYJl1HarS0qZOvab96aXBZ7sYmVsemFcvNaqhLbIJBGsnSqXS/rpeAaq2SJRB2rriybr2q5 + rXlBszoroP/+yEeJc5amqh0uK60HyxSEN64WyUwOu6sNehxIK7JR9rJDeqhNynkTVIr1aq8tNXQjwps/ + 65+MUx+kuBTAEbFAy3krC7JOohvwozuKOAuEc5foyrMUC7dx6z13AZmy8A7VsbZKJnhXi6o5CYBy2yt6 + Sh5RShGGm6mWprcs+RZVB6kYSKBxKaqjMSShehsrUhvhx6tQ1j8/crd4O1nOGSygG7r097N3EVs+ubmh + wQ9/+KW5kpOQe4NBd7LldY0cRXfBC3d2Jylst3ZuJ7zJq7xkZ7zL67zPC71n1wJsAhkfkCmvMLiE+0PW + I4P6IbpCy0AqZ7qz27ruQ7b+KkMDG0T+Z0G3BiEY2Xtr6me2ZXO0nvipw8ZLJuS19ftR3Fun6vuio6S5 + 5CmEAFyUSfu9UxvAAqy6BPyxLQuaq0t5X7ulAqy/jam9FIxNtea/K6rBfdt4ZINx71u1kju5ism/FczA + zvl8yei9M4bAU6a7LuyohVS6blvABnzAPQuoM0y+MQw0N5yz8fvBOzwjZHa+n2k65BCJHILDDwzBRljC + USe26+tFQoyvRKzDMFwjgeO59xs2HOq4MWlTaAG/UGzCVQyqJwzCaZW/JuOxYVjEXKzGkbqziptS4RNP + 7xqHKZxtIZI2PkylHfwyxrjHDyqoUVyYR7zGbLzEx3XBDpzId7z+yIBsx4rcxgvltumCtZRsapa8naW5 + v/6yEwMctZt5xmjcv578yVMcxts7xHiRyuG6yn5cpUBMOaVsnVncx1t8y3P8x+r1w47ccZ3JnLYcocgs + xTFLwiqMXSF3zL68I6yct0o7yqS8YWHGtgrcyNLMokkMpnj8E7zsxFrMzd38wp8MzvOZyUFpbTmczr4X + zyH7xdTqbS+my/FFonKszDJ2zrK2zqd8robmqjb2pf9Vx/LMuVsZ0OHczqdofbQ8z9BZz/B6qw2dg9GM + zT62ORUIz7QbpBVt0eaL0QZLM/sBOgj9tvb4z/4o0gVNZJ97q/2axbPcyZW80CZb0hPnz+3+GpT67KeT + DMyFBtLTTMii5k2rTLcTyc/eTNS4C3gS/NCCNz96Zs4THcqo29Na+KMfLdUzTc6cQ8xZXblB67NSW80x + 2mgXWrJF3atlvdU8rKCjS9UZ3ctYTdZwbWo7fbi5XBisk8GarNYsXb7/xtfj5MzEqoQSnbqSOteJa7Ku + TDTr9oteDdUoDNlnKNknnczDeNc5/XpazZpyPdVpjcM2LdTQedlIvdkbLZFQCMqnutqjzcjinMCwvdKP + rdetTNqPXCCB3dKEPdua3dt+/dvADdpvbYdGvY0yvTyjp2XFLdyZTdux/dz0i9xubaLUHcwdF8e+ed3H + fdXardyExdD+Yz3Z2D3ehV3el4QytV3a7d3UeD3dy23WWpFjtk3QEc3Y5L3d9n3f/ZzeYI2guE3Nwcjd + nT3UA/7aqkzf7rrbOYrJvt3g/T3cHgzgT73gnC3e2c3eGO6NCk2hfJrYIG7Zoo3Z5q3hYRvUvho30K3R + yZ3i7r3i2OmVJS7fqR3cZRrh702kvhubxk2d1HjiCV7fKl7jP56Zjv3ibM2ZMe7fuo3kCn5ZYbSTJj2/ + Qy7JbX3h6My3AU7VuanfCYrBN73jISXIBo7TVeR0fKzEDM7kND3fUZ7XIX7JiQpC8ofaNGysZf7ZHy7i + X+7jBF44ez7MMMugau7UVN7jcb2NzET+5q/s4ojM5UbO3IB+6adoyqza5JPusYa+WzKe5FhE5EbZ6ZO5 + DeN54JmO4qNeiaXu0BQON4cH5ZjO6pbe3WxGzqYY3qju2Rbe6q4+5Yze2Lve13B+kqle68Hu6I1O7LME + 6+ws5MSTklXWxQhO57cOhL/e56dO7TiX3/B958P+yy3m0eA97U6zdXBCvNHr7u/O7vAu72VnvaCCvPE+ + 7/mu79G7eNFu5g+e687O29ser5wu6aKHWDau6GfO2tle3ay4g5R+kFmu7japEaDu5V3+8C74Y7c7yK0N + QAPm7//e4ddM4A7PouhSoK6zGtra642zctYeZeAW0wBf871StA/+hb7IfiUbt+UYL+EoT3Qc32XofvAw + 38kyb93ajutGvNj5afARozUSEvOqvugRLPRpvM9KF/WuDUb8dWJLX+62PrFALpJBzvMzs10C7eBZf/Ia + r+n/auz2OdI1jPCUwAVKn9trDveC7Z6x1/UUfz2stssL7/Zlf/hmX/RQb/QcDjcqHceoPTVp7uHiF3qA + L6FpT4L34Idozez+yPCBBbaLH/h2j/RndBWSr9qiDu2jj/mxrvlgImVDTPJ9T8eff3TjvKA77/WyM2Zs + 3/a4D/qJf3tr/fqwL/Vdo/cSX+kZzvcCv8Fg2bZ1j8ubv/wSr/qB7vw4/0uM3/iCr/ZilPr+Yv/sNO79 + 0u/k3Z78Jzn+T/zn0B/w5l9/3V/gpV/9st/+fl77TT/88P8aZUUAEjB19/hhlDNMe3HWW1f+r8rhPGXM + SlBd2SdtYeSM6fjdDKPG1XknM7rfkJi4FSkAIbDBRD5hR6jFN7UipMHqdcm7KreA7JfMGpMDXafscy6X + 3W+l3BqXhK34u36Xg9jpAiMAn0TMmtYE6Qi/+BRVGBkciyYfKmMOtiIfBTeH0i7/EDXUOL88oUJNQ1hK + 81QTYFf8XFZtRR9Bo0Y7btF8wYBbUGPlZOdWiYWRlDFd23hRlqeaKachW45nt4doe6+TH59BUmSrwQeF + tYWb10GOx1v+kb/RFc+zd8ph7+sX+H/c3WrHjVS8CQEheMPwrx85cQgVlIPWMN8ygxSrXUzIQRtEGgwp + 0gukcY25kB+nkUSX0eMegqZAnmQlyEBMiYlkYrOYk0FGLi9h8vw1UkBMMbFMCtVpseUiGCrl9fBlVKk/ + RTWZyUhaFaevpk5brZsE7+shrlCoXsCaNdjEsyLVcfU5Bd7Ut4VoFsWrcEPaaX6zlYXzNI9UgXeLAD54 + tBBfuIglKJ4leGhYurCgXpEsdLMlvWgz94Q8k2nVuXQ/UF7ROSfrJopDWx2d5JpqzYRfcQTmOiRvpJJj + R5xtwXcQ04G5hAqOdzjKkYwvD2ueLuX+ccuFvRyeLp3o5uVGtteqrrSd7WIFd4c3S+dA54DFA8FXax4t + vp+k2KlfTRR6nmbywdqJs6iSwy89/dwypj//uENwQa/oY8uwRozLz8G++GNtrf0cBJCKCInYJAcQTZjP + wgsfK5C3zzhE0EMqeCLEsTKeGZFEDFGUhr32FFTmxcFqixGD7wDyhshTctTRGBZpZNKhDsG5sSIYgRmx + oR9PbPLBRv67EMuEpHTOpSR/+FK7N/wobsOl1DPTktYOmpFMNufEBc01jekSyiBlckPOOrsCFIsMr3Iy + 0ObcbCDMXagUdD1HhVtySzT11C/RaPqJY1HILuXENx08xPPQ2Tr+ReokTSF9NFU1J82zwTbR2bTFO1Kd + dVX2BjXlyFI/iVXWJxerNcFaP81V13V4LbOeX4HdSNhhIWX1y11d7IfZUed5NkVBi22VP1u3S5aNK4PV + dltAV+SxylfDtfZaJZ01F95ocfU2L1WnE9fUlWiVd15677T3KnwRDenIOiI4mFttVzR2XYKH03ffv8D0 + 99w5u+3UUBxhNfhd6hS1+GIyGxZYHIhJlUnhxEIWeeQcM44VZU5z+li881z+F11JxUW22pNW7rXEnBd6 + tmR9fe4Y6GVuIpo0gGl0OMqiAqja6quxzlrrrbnu2uuvwQ5b7LHJLtvrmsxOW22q1W7b7bf+4Y5b7rnp + rvtttCUmUuKZozzR5rv2RhhNqX0FN2Ke/s418bMCF5wMUIFOut2aEzfEaZ0xVtDkKiXPF/G/dbm8aKgf + J7yhjV+WS6ign1qccWJ7XB310Sen/FjRMU+y4cYl2dzOglfnRFTcf6/z09A/9zE83of+lnlwng9xyTS4 + UpfO0aLPdnDwiI+M9Eb0cj01328GvuYdT8ieaUePb6sqyK+n+fOAZeu+fOMl1V4p+JtNWWUpXaG+A+1M + c+LbhvLM5zEt3c9+3MOfq1h3O2II0HvnKxDIGujAB2opgqvgH7QQ8zzz/Ml09qMguy5oQNxMMIFLK5KV + iJPBSBHwcZn+6KAthMDCw1HOETYCgx98yDEZnpBvRNABCc/yQWyR53NIHIGRvkNET9HwccjbjhKFKL/I + wfCHXJSeDMnXwuSosEglpJ0Wm4hEZYFRiv37CRm74QBUtHGG+7sRHeOzQTTcsHBhrGMIiYdHOQgydcri + o8z8+EfABXKIekTSnHJoONXhjpCVgdkgBRVJN76Okhms5NNu46gRzNF/l/uk4y4JJEiNMn7WMaUnSfaG + U3JEjpJk4itNmDlVpkqTIHQl0WbJnFRaslas3KQRiSmyYErIS7L0lzF9OSCnLfOLwwylvJZASkACM5fW + RCU2oZnFSeaMmkLj05Qe6bJeLvFU3GSbJCLReU111vKYQiJn98ppRpZdbp3ivKUy8Yki1uSTBmmqJ5xc + RlAbwLMGnVFoQbF4xl/666EoXF4ycTc8if7TYhW15Q7T2UDrsTNT98TlnuSZwZEWsqQAPamlMCrSRM40 + S/Ly6EGxF1ORrjR3SLjhTUHp0p99E4xa8UTJ1kjRl140pEX9DU4x0tGleq6pTn1qNHsjVXfCNKX9KAAA + IfkEDRQAAAAh+QQNFAAAACwAAAAAWAJ0AYH////w5EJWtOkAAAAC/oSPqcvtF1x8tFZhBLZAbw564Ehh + GiMm3tmdKcIer/yR9o2TU873PrP79SarmPCItAUVy2RoVhI0j7WGMXm9XKGwYpXmDIsR07FZWD5LMiu1 + O5kGxN+076I972U7KrvQj9ICpAdIZ7h2mKijuOayxwiZEJdH1+ZgKXdmVDiGicJJWVfDGZkYWmqKKinI + pco4d6opw8YHRqZG6ubV5gj6sKvw6GoYO6xW7BbRaxw56Tq624psk4tbJMpR5mknzJzsrTptpnwNfuj8 + jCP+VK3LVm6RBs1t/lpfui5G7nk/hq7abkE+Ld36DfrEr4tBOgMXqvO2r5VDH7DSPRQjcWKD/oEZNR5p + 6BEESDgtEoa8UREgj5F3Anps6PKkEpnHwEWMSXPVRoA4b2GklVMgj4JBLxYNw/JjhpJHR/yD1DFeJ5NB + OTYledVJUjSsiGZNqYiqU2s97+XzmlVkWiRbucJby+RB2ydKyaY9C5dr3h9zKXbd63OnnhtopVYqPNSE + PxyIAR90nKMvRRaNTz6lVnkp20TRygaLhpQx5JWjSUNcmlnjZcIxUyPi6RnoZ6wkYpeWfBV35L95wR6y + LdRYVCuFXD+uXdp08pk2RRiv59vQ8+DecOayFFsc8NG6m3Zn7Hxt9EqhwbUe4cUo+uXK2as153z7sNVv + plOvjlx0rfeC/rS4V/+fYac5kptcYcmnk3kueRbfWwJ1RlyAKEk4VnMueGdgWOXd4+AdYbSSUGfDUXgf + iRla2F9O45GnlUcZIfhZg5m0lJ6JE9pIwXfqXKjiiZxt6GIW9lkQg44kGlkUkjrwKNOK9QEZ0ib2QDai + PjhWoKRTBFrm44+00dQhQ6NVCeWVxzETXkgBrMlmm26+CWecb2oQZyAtmrnbJWCaAMw5eL6GhpyCCsrk + RE5qNacUgy7KaKOOPgpppJJOuiidlF6KKZsrzJlpp55+CmqooLJV6EKH4mLlnwD2oWc9Eg2ZjaqCmRNA + qf2cagasCcq6CHF+6IrFizB2ySsE0NkK/h2xSDwCbGDF8odQjK4KQ6Zfz+4KUbPjKPvHHtoaey20Hn7x + 7bK/DAvotVlqiW6q6dYGiJDtOhtujueSO6+5l+SLrbpm8bvZu/ltge8Z6zqWxwzVQsUJwODWOyOtlN3K + bQhM2aKQwRDHeu8HC0N17jcbHxzrljZVzA4vMXy86sYl+rpBmGg2LPLI/8acrMAWKyYvMS5jyQEw5S5b + nFjW2pxszA4zpzORVWyydL8/x+V0ilbDVw3LAtZLcjYTn9b0H4p03Rs7wSxU5bdkc5n0LMzgSsjYU6M8 + m4doe4VWlWurebPb89HtQ9RSz01vCZ/c3Y6wMhfub99X4wP4UFMS/n5mFIcjTpDC6ZGyN99taxaOvRgJ + PjjlEVdtp0MBiShl2Lx2LgFlpLsu2dCim/6y4VZMhJjJMIBeebiwb7Ry6JFj1gzuwevekurxEdn846UX + OzwQHs+eO+OBYz895dMUjTif1yn2jt/LP1v9g0qjAjdh7Cuffcg0co/c89CzIood6ZtKse9yH78eyMGP + avCa393whx6c9UFlO0hctCCzP0nYTlwEpAL9tKe8dcRrgj9IQUGggTGE1GhlrFPZBd8QQTIgy2cAtNj7 + BojBC/zCeeaz28WAly7QaC51e0mhCqUnJtexxngwNIBVdndAHO4nY7/bWgc5mLybrbAmQqQG/hGLeDrk + 8bAfNZrh2ZzYLcD40IhdZGEVE3jFIsKkVbz7GuhelYu+QHFy07qhGc83RFeMsUeDeWD4NNOnLeJRcmK8 + VRlrNqvt/Q2LD8uB4trIOsudUYtl46IdUdhCSeqRkY0ET8NO+BuJ4CaQR9kjb4I4Sf8skpMgyRooOQOP + 72jNLDV8Bp/8lMl9vY2TRgwc6iRUJF28MmCznMolNZZK5m2Sl1nMoyYD9AEj0aNJISzF+oBYpgomZpfM + HIkrTXQCJEGNj8XUF52O6a5BBtAYpuRj3FRJIQxkiRfuNFp9NiWbbeUSiexkZi+feB1wltORwzTK4u4p + AnIgMn4F5GY3/ommTArV6jCPVBAEQBOJFBDBYe2DZz8f6oRuFNSagouKPRlGp82RdAMN5FceWjnS7uGu + dhGykRSkI9KBjg6jS5RFF4KJTb7s04YO5SVNLwfOeVLroIwQUTWncr0a6OilHaSVP5spNn7GE6vW2N0c + g0bKp34IQjHUSyIdmTOQfkir0JRnU38VVC9pU4ljLckeukNVX57sqqP8VUx/00mczuarHg1sXJ9Yvseg + K6/b3Ks/+1pT9xihayS8nnCyZzsT+qGBdzqrJx2r1pAWp63RXClRUXFXpNY1sQQEFmPfWVSjdkJ+pVnG + P81z2fjpdIvC4GxdPEvIj/J1trSlkid8/hjTzfrqJ0xs7W+BCx6wDZe59xpTPpFrS0DI41v4Uu6X1OnC + 2Mp2dL/MyyOwu9Le7qtZTxNlZ8ELVulOd7WFTYt2XYXagsxht00EQ2oDlkwvine89H3mWtRrUYaBsW5Z + ddt5a8k0+AYNtKFda3z3cl+sKRhoxdWrg73b0whL+H4DZmR3FvRXKkCXJyBb8AIt2EQEP+e1Hl7lfMl7 + 4assDrn0Q8x+dbUFuv7TODSu8TKvylWITljHceRQUyu0Xhg7uBGeKXIfhXvjXH2zKdUYI2HzyWEDB9eu + VC5LR8OL5cceprx74liCpSNitjaWtcFJjZXHfGQkKwlvKbaim3EL/uc4C3LOcd2HoGWanzSrWbBiDp+P + OVTSnoQCWC4xNJRXrJ8Ss1Ku1W1jy3Lrjk9/MYxqqcyd0arpTXNawAc0tSXtImoVjNp9pW6Mk8ry5TAj + Ocm5yrFBXLPHCU5n0u0laK0DYmXX9LmdBYKl7nLtNKYONdDEHUJhi/noRyureL62sZ6fLL8+k9DaTu71 + 0Vh9S1TP2ljkux2mFUhiRWeZRVGG9vyGFWx+2WfSP50lsx4UYnXGwToUnje94/3WfJmyXSf9c2Tt50ww + X9Qrp24uq+VdYWojfNXZnJloEUQJGR22w1F2N3gLs+xdl1XLQpb1hvX56m7hO3OtU3fLa0WU/orTOtWq + fmvA1x1KKnJRPg3v1Xp3aGwIk1G/Jjeyt7+tYJNac6Ea7mO7TiGkK0fBF9OWc553vbY0qRanUWvnQF2K + 553LpRs6R+eg0wj2/DZaE4RlNnAAdhbb5K0QmSqCoxQlqsALfvCEL7zh/+6BQVnK8Js6vOMHD3hKRf7x + kJr8pCwvJwQ3TdoSfzrU03txotnbsFXPdDpPy2DTxy7DAdalVVVO+oTDVbSer6PN30vJ21vvwV1Hfe0X + 7XGgK/L38Ek7gFWvduL9t/Uk/3rcAc0qKRP/zX4+fe6Tr/wvtL2h8lU5emehd87jUiMMQrvXhY/GHPFj + ++nnOYGrUzxl/vO34+VG/vEjjn31XYH9aMa4wYWjQD3RZwyFX/j3Xf3VYeehflDAf9E2f+cGews3CjQ3 + ekZHfp9lfbZQNFHVfjvxAufUe9LSfd6XRDk1gC4Wc/lnVqnnenyggGVGAw0oQ68He7c1dC1XgSvIO7r3 + XNGnSem2ZDAYeysXQDk4V8/naP12gpfmaSooVGMnQqiBYvYyWU2XGA/4hDXIa/DnVKFUdLq2g/angxYX + hbVQdDlnNTK4dUZ4hJ8XhqB0IbDCbOg3g/S3d+vDeWhYhSH4YgWHhE0YdErYgxfIfbiXMZ/kMT81d7ew + h8xXcu7Xc4BIdp2XhVHyghnodiJYbBEl/hSNiGmsgYXkpoVzSImil2uk6INBiIkjgh19yEYeKFVWeIVs + OITA92scxG13BH1vd36DWIq/40Es6HurEIuy6EmhmCdauIXDIH7w8oHYs3AtWIeruDrwVgehpz4ZQAlt + 8YWYpIzLCH+EcEgtB3PFh429OIZKdzncQDMLqI3GSFDIGGsZR0MpkzbQmILo6HKLsT3tlor/iDE49458 + WIZw94cuIo2pwT3fx4n6CIEI2DE/9yqGI5Ag6IgEMX3vZ4kx0ozDiEzUFy/9d4DqGD1+1V5E4VZ8oobr + ZJBueBLjJnrjZ44NyYuVuI/+sVSVRY69pJLw6HRRNIpF0ZEOKJM5/oGStuNNRvOM7ZgJJrCNWlZQqIgh + xUI/pLhBNDmSyIOImQh+ZNQBT8lyLfl/V1KVTCaN/Bg3NCNtUuWUPklqAhSUVElHQSFSdJaVBeSPdoM3 + E3dTBLmIqBSXvFKWXDZaZEZ/ZiN1I6dCbuWXWAmYNSiVazaXRul6Q4mCiPlBO5mNK2mARRmBcgkJkfl2 + OrRYr2g4Umdq4eSWbzmZJCgrFSiagnSSv3gjHkYKmYFzYNlVQBmYfwJKsRk9tTSB92dzn6SZP6WbdAeX + vWkmrwScp0UuZNgeDrlEOXWcdZCc5sabkPmaL5SPApZ1YjWdwkgjtCkanNmZuviZvumcaJNA/j0jnckI + heV5nciBnteXCt/4nCHlfIQpm8RJnpq4VvfpjNu5ns3Zn45RMOl4kyXHcMsoTvIIhgdKlgkKGNNkk2l5 + dRMalv+jn3gyUvuZaPF5aA16dOjSl43Zbd74oWQZopKFoaJ4lrqEotl5T/nZojgSU2aHIDE6nsE5g5Rm + o0/imRRKIn/FoypGhxZomiEzf03mc+opgmpUof4HgEpqovOIGcP5k214o4+ZP90oPDo6guEoffV5mVua + iFW1mh0qdIuzhC9BppCYXz0qnvLJmtsBpRlVduapmGNqU2XKhTCGhXKUpSP6iUSKKr0Tp/wDTn6IHzCC + jMiQNRDphEQY/mpTIZBmYzoianxiCYCNWotT+orPQXG2tFPgSKpz46k8aKHMKKEAOkPGSaL1RYAad6L+ + k1gaJKq0tFVpNS2xyqCt0iHhmZ6Y+qUwIztLWYz4+TOtWn00aHsOQakgBHTl16aSGaALpD/RJZy0CKm1 + RTE32Kvfc63R6axeyqeKyGajWqo8IqbLAa0sKa3fCaxsZqzqCD7ZGnT8lXd2RVaqMq8rKqho8qfLqYpK + hK4deJF0ByMcEVY/ZyMDa6sFe1nguk8LK5xNSpLIOpVQibHemRy9qqoqQa3JF2SHCkTtQLENC1Yhi7DW + dbKWBLOJylbjZKni2WXucWLXhCMty7H3/mpRJMur1no1V+mRiHYXUOmnyQG0QOqokCaxFjuN1amyEpmm + cNFXXDqxy0Gy7jp1B2ugiMq1GluTHltKynmnPDuybEOz5ap1KcK1O4kWT3urwXIldtu0VJsONXu3DEYw + wNNuibiJHFpIuHokxkUTZje1fDul6IqzVmO0httDgJW3Cvq16gqrX/s9bqSBOdtflcYe82QmT+u3Dld8 + nJtHGGpZ/IRsbIu4EmVemTtiLzezVsQPXVSpqAtBlvuzcEG7Nouqt1s/YGY/+/q6o8tov8tkweuywkS0 + DZZYUwSwFNS7Spa0/9Gqp4unA3REj9MgIVktequ56cq9OEqXlWti/o3lLUoTkgdLvko7fKV7FM6btax6 + hUJmWzaUvE47iZebvoeLRRBrjUqYsgKovNrKvDJxvg85k8SrRSZJFTgRv2ibv/TLwLehOnKadBI8kUzK + HVjqRwuMkBr8aqpLSEt1jioateJ4ogAcJP47dA1swRw7jiRJeTl8eZ+yeHHidzoMxEF8eD0sxEVsxEeM + xD7ceG4iBUvMxIIivF9xcDCcRPK6waoxfO37wUwYwsppv2h5i9qrkc4EV/8GwtfLtAIbhrBrr+M6Z2Uc + WdYrwG6KwTcYIBVcpJTko9v6vFi8m3/CuBKCx2DqrQHXEa6WwA4LyGEsyJH4xr34MYNcslC7/lx4Eo2y + u76kZsbRGROSLE00TMig1siZjFj6a0fUW7tpK0yLrCBfPKydKn1lDJ9yPMdqS8Wb68oODD/cqL8m0cls + nKkkvLld68jvtEHeUqKVhFC3DBvCDEPcmJf5k72pXBWBSMzZVccDzJ+GzDNym8xaa80mMjygHMoZtM3T + pLvjm8gKjMksZsnFjFgbyKx1u86xC8xh+86krGTHLLnVy8IGQTK5LKP4nM3PzFzvq6z8+rEcV8+2y8y7 + jCpJu6yz5skO3dAtBrxair8+taQAWQWDTDYC3b3Opsb6TF1XC5Dlu7TresdyV9LaHNEoDbryu9DgJsYE + DbySBs+0J9Nc/oww7nzRy3tgVbbT2zzTtWnCJHXTUYphI23Oq7y2fDzJquzSVtxi5FzO3qNxKKZ5Sa3U + QU2kWM2iBq2tCBzFVI1a98xoYk11zey2xvRGlwrSwyvDGiK2BnuYGP3W1aarG1fD7vTVde2FIm2IEE12 + KEnJYNtssMHW3zxbjZ2wPv3Uhw0Fa0qHc51dhP3P0COs1GTSh42of724sGrVP9LZe22ygG251cJ6Xp3W + gk3ZspI+An0wChPVrd3FzAjb4ZzPoozayfpG/8V3pU3XP83SrEylBzIPvXBLG3XWSYIfua3XaxzZm524 + Fj0xeKCOeLw/mt3HSUclkl3cEMzb3MoH/r71tzUN1LXM0M58pRyccF5HBM8N3Xht3FeN3GTNp5W9fzfH + 0aA63eCMUpANxt7L2POgE7ht1ABu0+o74Plt4O8dQvNNzao93uKB0wVt2KHqgto9tdz9wAIe4A89U60M + DBRe4Z4d3Q7e4L0d4cHq4cO92+st4kzt4hsOaRr14cR94Rh+3Dc+2bfIUjs+46/N3iQN5CXehMrw3S2s + 2/dt0azpx/ptKkMu467d41Js5CQOy4bCbk3u5BbB4iMuvXAL07fL5GDuxr7t44Ht3kqO5o0L4rvY5m4u + zp/tq16p5nkefDW+3xdKy4QT0CI2UXsutKTt53Y+ylRuz11S6PRt/uFsrt4/3s4v7uSPnuK//eR1XtXX + zehrLgdch+WSjtadXuk4DtASpNCRvumcHuWJreWfzuehvuqjXYCJTuYdTZ2vutHkzTlFLuaunuspHeuW + DuqaOed0XuwZPp/gzeDP6uW6nuwrLuwt3q7vaaW9HtofedQ2iMZ9Xu12XTXGYZkFDudhXmg8nuWTbu2K + DK6SXI6pLtXTjs1jTukMW4e0CO/mPuvmWcHd/e2KThfpp+/JTd6H9e/UrsymHtNoyu9afbuTm+nwHez2 + /urBkpftafDyXp2/PuoXv+z3/nH52ppdHrVPU+sqTuMLL/AY3+xZre3jmrKGHq4HIt1b/hMI/l3yEO+o + Mw/ptp7aUN7y2DvN3I7qvhq4NF/zviv0Ik/0RR/v5y7vJJ/e9R30Rw7y83u2Qnf0aUX1Ks3u4t70zA5Q + TLnzMZ/nszzxU47zFp/1GLjCYx3kbpwFtZLEd4/3mIf3ew8qiScqTpx5es/3g0/4hQ/Fx4TpVV/NK8/y + Th+PqzO2PD/1yGzdjtvwY2/jinSUDn+XUzOHG7VZoh7w7d74mf/4dAGbsv56dVn5Cy7e7Iz1TP/4rK01 + 27HvmAg2h5zypE+5jR7uvu+ABXyaMSv5Mk+rP6/pwB/ySO6MevfsEMNsoO+Y3u72sF/91n/t0Rqaqp8t + J+Xxo9/epQ/c/trv7GfvMp/fcCmK/BQv9uAfzMeK7cSP9hKT/t+P+VN8/2O1MGYL99tv7MdCADIwdSX2 + 3ZOTVntxjZl3ILxQHLmN5I6TAVWEbWETnuk6k207MHgUh3LBmLDzIh5Fv1yqZlQ5kRZllFpdTK0lHrTS + uGCzVDCVG86On+WWOsQOo83xGVx+3Xq80vp77+rzhXoCadzO/g7nEDE2Ch/yNBSR6IiYIoUm8RpJNDE4 + ozAtLUHrIiozQMBGQxcPPVc7VDtd8QgVY1/3bg392gDGdHGB+kyDVYAliJdmkW2LnRWOq0qXP3z1nlui + 07CNlauoGZq5i7UlE8BRv8ZJyp/Wk5oE/qPAzyPb32vuL13Qra/xPegTkQzgBG0EKa2xV1AUt1LuUjGE + pYjes4Nx6FXMIVAiPIv1TqT71xESIoQk/Q0EaaZfQ5R9OOrgFRJBxJcUYrbRGCzWHTktxZ3aeTNBThrT + FKbESdRgpKGvbp2ct4mlGqNMm1qUB1Ed1itOn4bqGVYn1TAIr3r9qvUpC5tqa1qSWnDsHqBWQFiFayVt + trlF4nYhC1Wu17o/735Du1fas7+ZAi9l3Fco1qiDT5l1ydhcMJ823HaFSzkzU12Pm9AM8nki5yOkBz4C + XXSk4VWYYW47q9rbLNiWncmeHTnr3t8XcJNKOsLVVsiBUNN2/bqY/shBSourPW4hujNgzlHQ4r1w+j7P + 1ldLlzz6VXeeMNzHdie2vPnbB4yGrm0aV3Izx/xToKIA2akviO2Q0++IF97Srj+UACSwGs3oMzCf/hRc + UL31bHuQpO8yKo05wiy88L4MEyIuO+A87AhAMsYjr8RE7tuQEgb34689CT+Bj0B0eAwBwQ9bvEqeX4zD + kMg1JKQmSCFnpDEUJtJyokEW21tyvqlUIjHKbm6zUUNoRMMyTBfhw6sXXIaUqM0JqMTLyhxvehNOLTcJ + cpYnofzyBDsdEROJOUtycEc0dZtnTzb9BFMuHLMgtFAzH0U0JD2fWwVQfDYVkMxIJV1RxzMZ/vouUvG8 + bLTPSlX8Zq1JR52Sz42WI4OTWQNSdYROZ8LO1VdFrdMzNy9lKbz3dM1VVkFtBVYCXk1skdPYcJ0QOe+S + VRasTzFy9ln2pH1nEvCqgpO1VLMt0yQjtjPlSqKgXWlaWcBiIj7l0r2hxlZ345ZDeKsrlbtqZbk3l3z1 + ZZVfUL1tGMKA6eIO4WwmVvePI1txmNmHlQQIC3IrTjjkbx+FdJhQSaZ0yogFG9kjlzWuI06TYvb1pXjP + IdhRCnQ2FGZ/W5k5aKBTjpXUdcboWWWYea1kU5SFWXpbca/9WWSrbR6G6JO37hrPLKmWGGuLmV55Y5lr + xnlnsJGuemxY/stWGFqn6fz6aGzAUFrqkJv2WuuzF7Z02HHyfpvskTule9/AGRc4OL1LENvwf13uG/C/ + G1d77UPxlnzyqK1OnN3z/M5acIix5RlyYcd+evTqTA7WbtJTR2b1m1tX2HSnStd813UM5svczylHXG5s + Xi9+dtoZDZR45StOvHTeM+9wnOB7FPB2o42fuvHCqufeMWTlfR70uCmaHvzd2fcYH+ypK9/8mvN1Xf31 + 310e9Qo/2F786NfXvn0FgIAFNOABEZhABS6QgQ104AMhGEEJTjCBBqDgBTFYwAZkkIMd9OAHQRhCEY6Q + hCV0oAUNCJDYFQ1374DfgeQ3v/upSnqX/usY+3y3KuBpqlcypF+27Pc92IUPYC70nwP8t7f6BTCHkssf + sd7nvxd2D300E+LjANfE1hgxgD48HwCpJ0DkrfCLUIziurTouMqxygRJLELyWKg/LHItjSxbI/Xa6MY3 + ZrGIKuSaGIlXR3ylLzJTvFjv+uhCu5DRi4D8kuUYoccuoSeOanwfYmY4OUHKQXQpMeS6JoSFTcKNG7hy + VyPLmK5OPkSSVEmBKFkHPFNyYZQOuWP6pvFJ3uGnbvOSJcNkN79a7oIiIgEZSvJCxNONUU6klOEwG7Ot + XO7lAChKpS93OKhCQJMcVBzaNBmTF2tmsptnBM0WGsFN8iHMfrls/mUtGGnDzpkzQegUxLlYgUpHWqid + /TsmU3zyxLAZUSopkAc+I6dPdcbPijtAKFwC2kvCRXEr9vTPQnk4Mek59J9qwRj02sYQewLCixi1j0k4 + 2lGPCq2S2CyILvNZUjAWs5owzSbjFmpSYvpQp9GiqT8bFU95ljN3jezpUSqkUtew9JohxdpRc8POpNr0 + pULdJ7qqKEypukSp9YFjU235VKNuVRwPjZLighlWsT6TrIhgRMW+CtaPrFWrSyTPOw95Nm5ClaHm4+uf + uOoytLY0TWKgq19VyVW8Dk2vZszq5/5aoKAsFpSNtaQ3A5nYslK2mF6DZmRlUtdSXvSunPUeoCwvO9Pn + CZK0zaDqUq06TND6VJNAtEdX4Rrb1GoUsckCFEfnh07UulS1tb1eX2Fi2jFaEKS149tqfRsUfTK3uess + 7ttmm9BDZHeRwx3odYvaqN/q0xHC+SFWNQtZGkqXvDmbQi25C1jjitet7TXXe5sVWvD+LL7O/I99eebd + FNHWrobrb3WjCWBkCFitbT1slOx0YLngl7i2NTB9t9uRAgAAIfkEDRQAAAAh+QQNFAAAACwAAAAAWAJ0 + AYH////w5EJWtOkAAAAC/oSPqcvtG56cSwBhKc604w5OG5ds5WiM5skqZAjH8mxE9I3nna33jP1JoXzE + Io1ndKxEAmQvqHw9pZKlEOA8qKippPdbA4vHYXIuAr1YzexedryumALvHJWULnJdlvyh7rHXNugASHhI + YYj4c6UVtwjZoJj0ITiE5ZUmSPmI4Jcw6akZSaoQWgp5Wgp08okaqerDkXGZR5e5KbaFQpuruMX3uipM + jBALe9GaW0x2/OS4S+UM4moGLLT8x1Arx7w47Q0GjhiQdxlOOE6TbfpV3dZ3vbMteod+qH5flN+Gxveu + zwi/GOzaGTkXUFIDecESmhno8EhENHgQRtxHCKBC/j0aL+brePFMSHIT1dQDORIExBAoQa10lPLBx5ji + aA56OYYitJY2N7LpNAFnl2Q9ja0rWHRe0pweTaqJt1SG0ChIXR60SHMcz6gSpnIFVZJova9K4Ww1yCmq + uqpkC7VN4vWLzp1vZVpjixYX3mJa99Y1+pdIXC9zn561CY7n4bzu/AZa3HWG48CYKLsJWbiR5cosq07W + dneXDhMqBMqAbHlwW9VwxWLbzJlaQdRgIaF2RZuxB9gzWH/1jdFc7oDAP4MmBTSKEsGneUt0fgO44DXD + 7xU3jkW6Bhi5hkBODF1q+OghEVb3Vpz5K8+dk9vljj2w9qXzp2iKz8w3/lvC/pDupQUDEB2dJ9945DVl + BYHC6LdfMf5JVklphUSzh4IFGigeZk7B9BsZDTLDUAUccREHLyFiWBaKIdSnQ2YWIgMHRvoAhd9OEcZ2 + ElYqJrJjgCm5yNV16iVEXY3bcMAidEkWtSQO5UDxIklmDenQKOkEFmWKPfI40pMVJSXdeU3eIOFNlGWp + 5ZaRjXQOms3QAWeccs4ZZxN0ZvGhmlwulBJpol2p555w3UlooXea09NgctppaKOOPgpppJJOSmmlcGJg + aaaaXjrCnIxuCmqooo5Kaql01mRlTEJSGeh7clSITiduQtCqoAiWkJWHMta65pF3zHqajsACxqurCOKh + /ioRnyg4ZqJUdRNONToSVmyvmA0rxktFtlatWwuVaKSym2DbLGLJYkstfNCKwm23jDzQRyszWhKuT+7q + 5tCTzqp7Xwum3UsrvMIFBFC97wJcW5cbDpUvQQsPnC7CxC4XhHvrVcFGubn+uLBr+iRWGpRuapysCESV + GavAD0mccJcQE8ddMm3OSnLJTIRs8BQCj8xyy8fiCnPMHGqWbc8Tw8tw0tEuY/FzRuPoEaJBy5Lx02WY + LAW6wbJTb80cn/tCzpdRvbLVUH9LD8EDgtT02RJ7vaLHHfOlbD9mu512Q/M+9u2J+L6d1cvoySK2zywf + g1vho7FdiTIVB2U23Cv6/qF4b3VXHXlnfFYpG4VhW2u05LLpTffiZmbO0nJEPgiu0gFbLfoOgi/4DKCw + O3zk6jcy8Y/rfyMceyCkvwKR1ngDj3ve90DVdrzQEP367TH163sqdlRueM/TJI49mSbuhs0snQQf1o9Q + ekK7HVKiLvQ/3UNokme7a2FYPAKC37tz5Ae1bPpkrs8+zeWOYCcbF7voR5U/icxzOFNS4JyHwGGoDx93 + u1r71hWr8ynnKeizVTRkhiwR6c8m8yPGQIxnwaetpULvg9/cfvW5NOFgWmTZXxWgUj0ABusbFZzJAAlI + wwgeEHJXgY0NVbYCCFpvhjzsofc2VyU/dZCDGPRW/hE3c0S01Y94T2zi3fjBQhQSxDvhS05HBtNCL/ap + jDksmwvVKL0uvioiDGSaLxqDRRJSJI32Sp4O43gUlcFmWqr53luyuI37oeIjfDzOFycoSOeg7DqNbMbQ + 1IaFxklwhzByIhNNhiEohKmSTKHi6jLZtlI2p5Oe/B/vQpkB7fQPTNADEfoERMrj3ZAUiPyY6UAJyxTq + Qny5HNvciNGLWMqMl+vY5CN/GUkDfaA+IaOPjbxxDUXCMXXMrKAwA4kxFaXyitZko4POsccljtGZz9QZ + 0nr0PpQND5tj8VskEKJNCq6TnQF0p/KCCY/uBBE59hNNMfN3HDFqhYve1KVk/rQoThYVbJyL8NwlB5E1 + i+TTbvvsZkO9wsIdYeoQ77AnKhh40YAu8GB/xJ9HvQlS1aHIAksyoxhvZk8UAoOQ6hQgPwGpByhKU5mI + gNVN3/k34/kpiE1a6CIb+k1/Ak2aR8MotI4q1OwdEwwLXAYPugcyhn4Uj1XkTRqatdJanpSlU/VQEpuG + BOyB7KC9nBo557mZsxJ0lueMnrzuMhZrVW6FP+3n5SBqGXns76Au6ONJdPVXV2lSLq5kJUzdcUPGcnWS + y6MnWyPL1bJGr3CMLCxQDxvNt4ivqsg85x5+4abEEXGK/+KkZS+bCeH95bWdPSkOHasMsuYIdHLzAWFf + /jrW3OpWtcDtz3rOmFnMNraN3wyXD5HbSkr4lCyCIB9WU/rZOaZlql4VYm07ett2apebbenu8nKJklAM + 9KHkna3BwGja04pru1ypxmLhG7forneK2dioceXY0+RKlxr9lSdr+0NKnsg3SlLbam0ed+DKple9nJhN + VEBiwwj7CGvK7SCInZIn+m6Yw7hYbk/YEeJGnkUVLxoYjE2Z4WZiF7dmycZ3rydDZMo4Q9sZ7/N4NF+V + QDLBCnZrkUl44xmRdC+xoDBeFRIv7IAxl3UtnzU0oNnHjPOISj3Qkw9CHiU6acnb5DE8XLw3y0k5oGZ+ + JUecxDyRfHLFhoUsmDln/mErpuwnk6ly1mrXm8Z9xgns2bGbCc1gItV5aYDV85nVil4fxaPQ/vqzo7P7 + 5l3++FVJbq6DnNyiSAd2hn4pB3U92Atg8rnPfn5WmKmYmywqrjpVxlV1LCGTycqZBT7OL4u/HN0fO9jS + 752SMcNJv1Jv8J+myLLThgjtWdM6RuwtKpp0bTBpz3aXzxsOXycUPyJTW4SfBvVPLpgR0gL6KsziG66x + sxhFq/vKbWUyVJsU62xnxJKnvHO7Mksdwk13Z63es7b1C+kB2caNcV5clk4RovPEEGOLOeFToarVd9Pw + qIOlI9Uu3p6Fs5nBVGb1x0HuyCkLm9+blSsdjUMz/mgCOWZ4MYTEjX1sjGpEaxRlNgFXHjFwIpoari5u + IQ61gUZ9ylRUr7rVr451U6nAUJjCeqeyDnavT71SXQ/7psauqbJLqoRbE6hYYR7VeJe0XuI+eME1TFmB + i1bHk5t5aN8Od7gJ667txuZnFFc8/LDFS1YFPMxjRyJxhbnLgb500vHu8r7Hc9SU93JrVY70wkcr8zXR + eeiD7Xe9AD3opbjPbZYtesMjOO9ZleloYuClYXEe7iFvfcXU3Llb9763fC/9zpeeCNgTvs0gj3G6/Wid + 6TkG8dMmN23hzT/lSx6rnfe87DFto6L7e962pf263H5k6Gdf+7nZPe9jTmmn/r9mY2vE/HlpTrrfdjv5 + JpX/6F7+foiEYfiXEN3nf5Z3f50mYCCkYkhWd+v0XQZYgDfnMeI3ODQxfaq0dyKiQf8RN9pnH8UkgXal + NhQidxboV+Vhf7uyge6DQHVXFXsUWyjIKo/HJgBSUVnGayRUfJcHejvzgjgmaw74gP+3ehA3Z0LnODV4 + EYeRczIlUBoEXoi1fkVobw+3bcRHZ+BndDeofj6YfjdjXqkkYR+kF9z3fvA3L2IDgmDYhGxRcr4iZrXU + PEiRe1YIZmiYhg4lZM6GQmSmd4Fod9iGNIakgFQYGZuWJW1YNHsogIwIH6lyOkn4Qwg4iPPXOU7XPH0X + /j7rFolctod8CCLTl1MtdWqCWInGx258E1LWx3+duIoQQoOp5ojT0x5JxkeAiIqemIDeA3yEGIvz9Hu4 + YR9YiIQV12kWmItauIs/6IavFlz0Qi9nFiGyonDj928YGDZmuEq2833mdX2p9YwHOEfSSGoudYfEKFX6 + lIYj+Hvb542jZ2dDOI7y84uPFVgxWI2/glrsGIBFgYe+0kIjeIguqIHqc4/4KIS2VwPE1IKZxlG1yCuN + 1GXTiFQUB2RMg2IeRgJNh2mKp1ChKIrjQZFfUTCTaDoaCUIeloz8uF/++I8TyXzauEGzaCu+eDKg1BKC + QzlGEpKhSJAtZoo0uTmQ/nhtTKSIOkmKXUA5JYaSMdkqNxWU/fZXRol7J4eJqvN6wEh3aTSV6PCVQTWT + GCiQDTSO5DhdTaN/5Sc3XQmTvBeW1ziURBmOInOWfqSRh+cPSkNhXimScXl7xviGVOkaXSOW0JhEELKX + BmlwTwmXURl79QeOhWldnpZtQzcLioli6EN3b/mYehKBJqdqbbmNl+hreTiFHMFoqWl6BAeUgSKCohl8 + ZVWZ4tg34ZgWcTWZLxmREglPdIUlJJJRvUiA6bdrNGViPeaYnwlPjmdWxTliF4lw0Hh7uomWrPY+gJkf + asJY2ulSrLlv7kQuyelsmOObImVCVAWdSjaPybZr/pyRekKJkcyJnv4DHZHHhA/ZO++pm90znq/ZnOlZ + gv24m0eJiORmkwwXhrXWiOcJUPbZbGTjjJPGkEWWoFEQV0QXh3KYhc9ZOphEoNfJnmgmiXeGSy30hO4T + kCjinfvnnKOIZgW5ZiT6JfTWBFm5hbS3bKOmMOJ0gSAql1GCRtRzOTcqok7ZGmsTOvX5ocioMxeagodJ + ndxkpFiVMwm5nmrSot8JoSnjk2KzPVwzoTr2jhPXYSgBpUY0U2DJOcI3blconUf6Sol5T0XkDGmaGmsa + DgJYeT+acoEYHysFX1F4IksQpoAzVGyqO25qLJEGe+cmR4zXegm0j8TUkV9Y/i1bGqdNGqE9Cm/WOKbq + AouTilACGaWXCVo7oqkVyqmDxqiCZoS46ZI4Oaq+t6AHCh7XtJAYsqq82KWd2hRfOKu4SawtyaNXkGsP + VUevupxnwqxxd2p4Op+WmVKQCpFueqF9kXHPap6DxK0jSVB9up3dWJf2UH2xKK3jmlvHOpft5X2U+K5w + 1pShWnnbuKqFlK4a4qETeHTsGmRcWmHFyoUVaKR/ERdSxKL7yq9rKKcvCqcPc2jnSpXTdCEjMrB5mlf6 + 2q9fg3klSo7AxgKaClJ2yasZq7Fz5q9v2oCaEbAF+oMUa7BGNqWHlFgcuzcpS1zkKkQbJ7BciZwxW57j + /rGq33qqMIqzjWqEfPU5qxVtwykiWxomKrKlR6uylEa0vwOEvlOmsJhwwHhLQMttJataV1u00Up/twiO + JHuxIcQnUItsBtKiVPuvrmUzHWWuSTN0Xqu35RS2QtteZAurGXS2DoMVvNCz9KoGLRq1YttfQXJzgAut + OEWHpOGyHDIuP7saqAa3DdYhUQS54Gp5hoSZWNoFiiuXMqqmSyG34QmVrvQIUjRRA4W5NSShqJu6AEmz + Igm6P8Q9hiFImGm6uqCqSfG5N9m6sligS2WRaFmwtDtMxftstlgXvXqEAhZGhTqziYuDfCu8CUuXuUt+ + J4u88seNwSgwHum4Qeu3/tJbsZJWt+AkLf03G9ubvg6nn5TRfdAbYEA0uG9kjs1YX85Lq6a6uV6IsQP6 + voFJamakajRldmGHdpQSwZyidg9swRdsdRWMwRvMwR3swWm3dZ5CByFMJxpMKHYCs2rBoOsbRSMkm556 + fNcbv/gzu7SEWfqbY0B6u38ZpMIZaGhKP3GJrzgcvcyYR3dns/brwydpoUTFvctXwE66wwDqT7DSnkXp + xE8spd4Lr7xBvZGZtMKJfr+rhubSGETchTDKwlRcjG10uSopFkK8sgfqQF3sxbq7u3YGsrN0uRwixzUn + tXZ8x7o7FWobDNvSHQf0x2ccyIaHxhR6vDonw/hp/ntI0rmb1ciu9cgGGsmINsm111aWXL9/x7hCtsmc + TJ8vCWyyYkBEE5aUVMrPdcqoHHhCKY2gCkWGOsqAHMW+N8u0XMu2nDs34rHkJUq7LFxrfE+/DMmdLJ4D + 9CfIen7HjMwLFh41s7rNGsx4RKgJgrAsG8eXrLkuTKpaisesMYD0sGmn6R2ZKcoqHGp1HK568sWCSa4g + y3Bbq8vV3L3kbBvMPKM8DGm+GkH6TM3wnKNTXFF10XKE3HjmW4iipFcIHc8KHW+1Us/YiKSHy5iZ8cpF + 5c/ehtHn/NC2O8zaMNFa/G4WXdLuyrqpvMLi2hVW8NELfcQ5OLYN59BKaNLJ/ucaNS3SBzxlu6XTAs3T + lWt7khq5MHzR+Gum2RyPzsygHvgHNC3OTd2+AyfTIS3VQWsc+jJ84qvVWb2FUK3N4UrE1ERbixYHQA3S + Tv3W+RrTRfxcKo3JZcTWa+DWJCXUQgfQtMjGMgfEjKDX/Pxmcg3GQWXWOhudDnqCbFeYkrCWey3Y0+tt + iL0vgf3PKOhqtmDYKw22fr3YZ23TFF2nOMp/UkDZfB3aos0rojPLGjOvF1sZqn3VQ23ZOP3atmTal61y + FmMIq43VAhzUrZLRnilzjqOI86MIwj3WxP3WKuiiOWuDdb2Kyw0an+DcLf3Z48zQMSjI8VrclBrOvrPd + /hV929xtzkYs1pvdyq/jB+eN3t3dvX89bI5tq8vS1uGIE6SEzbl92fb90tWtyT1p2+DY35XkNQCNVqPt + mvjdV/n3VQdu19Gd3qAdKMeN3JpcQCiFte1tphf+thm+04u6rNpN3/NtwxZOz0b9hhb1CPI90CLu3Vui + 4aT9XnVUtkyt29D93OsN4S9epTGe4jVe4ZXW4ppti+kkDUU+10yCHKrH49tMvN/8YAnc405uzTbu4gBp + 5WWM5ePd28PNmw07lk3m5QH34cG6Vj5O5sOr5KqyVOEV5mK+4ssM5O2oFtEc1mxezmNu5x9WEDferSEe + HXx+5Ukc5Vquvr0M0yye/mjrTOd1Huj9e9qZ3NUuI+k7DuKGDuXOBed6TtHuBeientltjumPbummNuWX + fufzbJuMrj2lPumtbupmjOqxvql7GueKXj1fKTmnvOB2RNYE/ukTCuyneOSsnbUK7LBojuuEmce8/nnL + /uNiOL7P/miY6pmuIOMz/up47mlOuKIsSOXHrrffbuTR/ud+qFmE/uDoruZ9Lt5+7eZZzl/A5H6irtL+ + ResqHu74nu/Qtu+Z7ue3Cua2rt4BX9oj/mPwHu/sXquJ3ukAz/CQfqY1as+z3u/3mOyLnrkX87yzrdHb + 3r+Uy+n1juE0fu30RtDT2ny9jfJrrvLrfvG4zcgv/n+Q5y7xX77UNd+3917pp4u4O2/sp+67xaXuGy3r + dy2fOt+gqv6+ZJTyDXPr//7mRF/0Uc/zg8sNVb+wGI/1LX89TFzyrMfUEoLi1t7PIW/dkkePUR3z3FuN + k/nBdz8qE4z3ex8qJnx2USd1es/3g0/4hV917LIETc72pOz2tko4O7nxiLri+wheHy/2i4/kGYl+/s3v + 8m5tuGn5WT/2mX8UO1nuzWzydQsgPEvxlx+4Ky/0C3+L47SWo4n67jb1OMoFsD3gbQ++Vz+bclr7OH6M + GjvnMjqVAFfsKiWLkxGbBp8vTPuLu4/5jfn7OA+RjL3huP817Xy39E6C4N74/vaudKWf2IdTTu2cigl/ + 8LDP8sk8x2P0/F1vPvNHI7Xe/iM+/j3WaByN7ZFPAPAxdbn9YZQrTHuxq0B0YTrnY7bMPKMSNcfVfR8V + bryZa1HcPuXd/4GIXpBoKNVAuoTyMCwSnU/mk5qI2pBY2LRK6X7BmjD0kOWWSePglRhSd9mu7M4tf3vv + +Wdcb9nMz0Aa+PpS3gILXQgz6n4aTx7vFhMpDSt5kjguuCYvFTpnED0xQCcitV5E4UZZL0pZjzQtzl49 + a+1aX25FVHNSKXdz9YITj+YkOIUniFl6lfHonCF/i5+tra5jMqUFB7PF1E6/vaOrxE0rmcf31qE9uGXT + /tqx7+Cf1W/OfezRgOdz8eWJxS/ZvyZ5+AlTl3AaJIY+Ahq0EfHNn2OzwBmkuEkitBX6goAUcWljxxUl + wRhLeA5lSoQPbfm6Ec4eTIgm05n8E6+hPI16RI579c4mo5okZxXF6fOfxaAPaHVsiWypEYdKMTxVgJUq + uap9plYJQDRVQYlhoXId5vCl0TAXD35d2zGEVghRz/axq6zW3nKM3sK1Klcg3Q9+RzJAHFPv0r5q0bEI + jJdwxX8eLGKh3FQvZDW3Fss5yrjyGLSOyHZDxXTeaag4d4WWCRiIYAiuSwtphyQzHW0/C3kOE1s4jZ77 + ZpLKbXr3iFj7NrfD/Trv/sfZpgi2sZ1x+apxdXoj98o5eHHvVyVzPO6v+5fpW3CMlU19vHRK8wsFw49s + 5aj3uf/LoZEK9kuMtXUCVKy664roz7/23PvmEQKLCyTBGS7cCjgBzVkvJwipyDCrAfNp8Dfy7kORLQaN + S+9BENm55hj5zOPpkwUTqZEMXKTwkD0Yd7QmEhqpsBDHzlorq0gfqwFyDQk/KTACIzcsL0lqeswKICef + lFGJsb4AScSTLtERCGLMtHHKLbn8YczIhJCyq/oQrCRNN3lcEqNW3pQqmyHvTI7Ob/pUMxv9wlQPljbx + lDHKQA3VTUUk7fvITGkg9YPRm4T8MlN9Cs0g1Exh/tDv0qTY3BRDR5dIkMorc4SVydr25FPVVTu9sZ7o + hCqz0llr64XUZW4tlVV66jmxTjuHRQG0QFVpVoJQZc1lSEoPJNTXXkckFRE5uyzW2U6/DI67Ze+TVlTs + wDWKiXfuEZfMZ04ZE9RJsT10SnXLQGI70uQ1gVrFyo11UH3tRJdgVuDVNmCB6b2oUF4RTpfbFh9WJON1 + lWk4LouzvYZafl3hhWTHNlau42u3DdmaUS9eOGVMZp6WXGSZPfjlMk+2mb6aSwb6togL9sQshXPseeif + hfa5aZ1z1tXoox1uOV6mn1Y2a5xbYWLgfjyKOWmR79raabM/FsZra6muOGGy/g1E2+Wsv9aQ61Hahptn + vRWUG+qn60ZgbbWnCHzpva/G2G+p/TYcbEnV/jtVxBXCevHBFndc0LTZnrtyhpUO2+7L7zZb88Ej9nxy + yhdVnHTOTV+5aCFVt7Xz1hdo91bNbWd7dnolx73r3pcI3c/MgS+949pfJLx5wY0/vvHkIYeS8aqtFX7z + 16tH+/TfvRR955Wfj5R73rVn+HrrleeLdoCj1+lyx1meB3Xss0cqE+6Z3/j09dfxpQAMkIAFNOABEZhA + BS6QgQ104AMh6MAORJCCFUSgACyYQQ1ukIMd9OAHQRhCEY5QgxM8oGEAmLjIfch8/EOf/lbYPfvdj28x + /syPavgnvqbRTwcvvAv4xkc+YMQPNtNbXvuak8LPpa4YRJSf3P4nQxQikXjOM1cOg5exKMLOJPUSmxUR + 4sNfbW2LAHCCE/mjw9WBcQyYwWIWA/Y9Lv4rfFT0zwuH1QIx4g9wQsQc9NAIJykukYmB4SIW9zgXMPag + LktphHO+mD8wkOiNdnyYHP+4jUCiSjU+xKMhB5nDREqCeozcX1VwAEk+gm6SNERk7PyoAjfozmDJ8WSu + zJE3F8LydhiEXr9K0wI33LKQ2jnXK+lWyiUAM5jCPCQseEfLJLyqkqP8zCJTOQJpRi0eL0SfnIgiCmsS + EmiG481h0MnM5cxSlS+L/mZQwukvjxGrmmS0IY3MsMktMNOb5NLHLONBx2OeL5m3M+Mptqk+QfUTePlM + zZkqacY+WlE+udNnNCipQn+maZzpSxn9jCCOhHZtnuhL5J06Wr6PEk2kFw1JKG2R0hC9UaYzlR1CXRqS + +NRwpcgsJ9neNdI6ZpJPNQ3SLoXGOwrl7mE9DOLMjHrDn14tqE3d6T2iClGkTtV9Vc2YUzXqP1EmdWeR + EKr9LClVqI61ZkrF4Vu/ClaFZHUHdLVMW6mqhJy2UYmbEI5dcUXQtbpvey0MmFwBAlhjvU6xi62cWfd6 + iLQqUqyMxSth9RrZXcG0GI2dF+n2aCbHGWMmZ/0KpWKh2VPQBlAshEXDPM2W0SrKy7Otrezqwkk68PCl + thCb32BxC9vFDdO1l1ythGo02uKZFkRuTOxtjahFcjKXSxMkp7h6e1TaXlezfzLcAKHLS+OukbqM+m52 + NRXdOBJSmxFVTODAO14ohheGNSjvpnwpHl2g92zixW6q6tDd3UREKfy1xHzXSzzhuleN+THw4ewp3+al + k8EHVqmqHqwLCZPmodkoAAAh+QQNFAAAACH5BA0UAAAALAAAAABYAnQBgf////DkQla06QAAAAL+hI+p + y+0XnnwCiCovnlPzn1kb4pEa5pWmORoXCMfy/ET0jee5rfcy3xJZREGf8QjjIV2vTEWZKyaaR2lDxQRA + Dyfq1LoMI7fisllBPo+z3xdWDe+lfe82Zj7zulZLMEnIgBcSR4gjWIhIc5gYY1NU0aTHONmweHNyRWUJ + M+JXVcfnYInJRmkaeJraqLozpOAGKcnKuJmXRfpWyyEL19U1BJow57vgORune0yZrKzl+gpJZNwcxgyy + 4VtnTTHdRyr9QfYt201dbY7unM4R8RgLvI5sVm6w7cAbB5sCIo5dhx9PjL2AAgnWIJcimEEdAwcl+QSQ + YJpfVxbCaWjRB0b+VQEkZVOY8cc8kXQiGrQHMiRDlak2nmoX5KNJljVGkuxBbx1KmmZc8lz1U11MAR0p + Bn0YZuYCn26OblN6FGlUQj5NwZziyujUmklz1kPyjaY1qFvZlZXnFJAwaWR/VmXSFsFbtWJpeD1bCe/F + tHRvpdw6N+7arm7z3NWLBvGZuZMctbhQVLDKTUolyy3zF0e0czEsK778uQxjWnuKadW7CKrnr2c+6nC9 + pnPoVrM58y0S+fDCUdNWq0vkmZfupTJ8hx5dG3miq9CM6wQ7nDWjzK/uHWEWPXlt20FzL9139q1x5bs4 + +cFlSPb29OtjHz1dzzk18dl/UypHNqzUa+3+b5D//F8h8BGBV1XOBehQB3b1JYFju9Q3G4KISXiRflpQ + txtYcrCiml36pCRTJv35N+J1gJUiVyR8GXHgMQNyASFcpg0VYomK2GgEhWo4wgCG8QS2oTnBxMgCLPYV + aSGO/CgZ5FQ8mrYii02i4xGRUErHZEFZ0uYkPG1018eUVHay3Gfy3bgliSduJgw2kyW1EkEvLqaYj9yl + eVNUA565XAB+/glooH9CJqifXIiJ52A9svShnTkmiuZFhU5KaaWCajCplYVU5Sehln4KaqiijkpqqaaC + StSpqq56KaaAespqrLLOSmuttspKFYHVvakhopBCIGJFY7pT5q95RsX+3K4Z0eersUeyMOOwUvA5gY6K + WUuncCENpId82LKExz+asigctQ06e2xavHyrpmFfPIouaBUNFQ8Y5ooS737IMohlQLxBA61G+cq76GP3 + fnLPuKgMbFZZySZ20oOAeEEtu9tyY7CcFOTKcMNrTqvwErxRQbHIHT/bHIwhIxzsjidXGx6KEKwMbweY + RGKuxRc7gUKSzQBEM8EvExfekBLZbKSMd+Y7ckIBAe1oukMr2mW5P5Z3qMzuDfwvxUG/5knUS06dl8P8 + lob2Mdz29DJlHj1dmWhkl222ts95yPbJbl9Zr0nUYaiz2TFb8ZgyKNEcuEW1gAx3b1DPKfTckTv+ZXXW + s+yUt978LSqn42zCVYIxiZ9YNOFfS/1B0KNnmHrL9V4jU7fnSk60w/iUzMpYX68eceqEG5RfLPQ+Qzft + VDtp+nzuuty2enyvE7rjKRO/sPHH63n76WM7T2fz5gn7OjFOEB89V9ZP/l7GrGk/Oycca859wNA3Rf3G + SoNe/fn9Ik8msPU3VpzT8a5332sO+zykogLK7heQsdz4oqWkAWoEIFA44PUUhBbvxS8U83Mg51B0nho9 + I3auORgBy5LA41nQfwXcy9DGkjC4ebAYKvtDOJAUvU5MK4J6wVkQRoed98EvgK5LRwpt+C6s3BA6K8xd + D1Ewwic4sYXM02D+cYoorZmQY3vQsZEEcdIzfzzLgskwYe2GSMQPdg6KDrzdEuFUoi+CTWVsCpwuzAix + F2omE3gsCc7YEpFpIKeP5pBjFIiyBzaOcVNUdKEeL5G9JgaQhBg0H2FGZEhI8gg3VoFdsR6JQG6sx2co + g8g7InSWF7SDQey64wEzebcFVXKUWgkQKWOmNZWoEjwXdKTNPmnF5YkSR5ogBCGnKDZleOAqnCRN64CJ + RmHaj5gs7MUjCpTLpynRGRbC1uLIODeMSI+YdwCOP47JyGwa8Zz++1w1MzhLIQZTmtZhkhTNyUvSCQGd + hxTeCGDSTHlOExGwTMdG/iJJF/HzeYITX+P+cnE/9Gnpl9CcJySHac/p3DKZ07GDQ+e3Ll31cqIJSufU + mAU+e1pLixxFhJGykbZ1hlRrEqIMAMMZph4lVKHYCuQtfxY7GM3CHT4DQkC798CKRhMnWCzRPc2ZMMgN + NahC5dDnfiqIANn0pmQLzO/s+VSoRnWnPMvGRMgKU7ZYMn8kHahJuwpHGiqpCRaLJFlLir6FXimtMMNX + 5pJKUNoxxm42+mcqiHW2ofoVYKYgmTvbx8q/uvWtoOwiQ2kpUQGxU52KZSsS8elDslQwj0trahXhesnL + 1sYLo0uSXj3p2Rpq1GD0UMIP5eY7Z+I0rmqcjT7eKaQOxlZ+xoTgG2P+eiQILY6rqM1pVH1bS22uc7HG + La5qLXlbk20usIIVwzjrVNX9UeOuOvWDIH7KsupCNn/jgS13JTeabrxWQMWjElATC1wD5oOool1vdr6p + 2906l6I9rG9wlQmVQ6CXqXLFL2nP+D99YZSyJ8VMI7dihYI6WKwew5gadshZ0h41ThJTqkXpcOGpgEHD + 872ugcv74eFtWFEjZs8zTbxUcqX4PdQdk1WBwrMYN7gtRoVwu7D2XvjaJLcqviWLyXuX1LSUwJ+tbXiF + FuUN+lLAqUVyUJTyZFVIZmRCTmJcHHTGLLsPxzm2LJVpkmCNHTZSXvYulLziGElg5I4B5vI85Mv+4+NO + t7GHcWVriDqDVeqZSzemcIX3W2I4l0PDyKWvjetsZ8auQpEEy0kZ+9xca0YaeFJ9sBHvQ2JMd7kV9Btp + X9fs6Edb982vo7NwXfpfLbt5Q6eksYTxumU/l5nWPp6xq3/GYUbHs9KaidEq/1fkJQKazW1e8rKLneiF + sG/KmW0wB8GYo6R1+o29AbWwP/zLFmNswT2+NbpNtN0kSklgnM5v++qtrFhX1phhE7dVxXhp6fZia8vu + 9bzreS58l5K6G2Wukjvq4Qjjmtumht6sa1ZwcOh4soHoWe1E921vC/TcA4/3JPBI6RAf0ti/5iMdWc5k + kR9khr/xhDg4ftr+7kK80cnGbef+rLBv/pHmK59jhNH8Yns5/OHAIfo2d45UOXsDcb47jbkIm24pbOLT + 1D6xkLXYWHjK0JRUfxB8xvU2T850vdcONsnzofGUNt3t7n4NzG2toGvyVpYZfjXPRx5q0Er87n4EfN33 + KPZmr/qKEj/EFoC2dKaf3G8HpDgXSV0SfTPeG4pfMbNblapM3Wr0pC+96U8/qy5YKvSnPwHqXw/7V9EK + VrGfvelZvyraByqXtoV85N+uWahhRt3iHbvdDR9yFxddEQaXV41j+PvAn8JnaCfvwvvG4MQjfu+NKOpa + ga194KNa5sufoi6zwz4DKWw43jFyt5UvWZ3+I5j8278cT9CveVssPgnC+/ix4d9WxiNHXuMbpWZu2mZ0 + dPd0gFUFhuBPLQAE/6dp+bdvCuVxutFqyiNpxxd+eMN95vFRC8d1Xed1P5aBsBZLjDIc/HRenRETCfgD + sFF81zcjC5VyR2NxTodDxHd5IbEalud33mYM3dJSnpEbYTEHrrRCN+gv2MdsssUrGxgFyEd4jvWEf8cP + MiiCKJhkAvhzZwOE0YeAU9iBKjeBCseFD8FXpfRpesWEKQhS1MNuV/MTBYh8doIFaJiG0tZ/k6OES6g/ + NDh/xLBQaxhwjEKGCmiGRZI1BgiA+BKCZPCHByh9tTZ4X0d4L+aDGKj+PedFD+MgVIJhhIBUTBX3XJQo + a5iHawbkbHpyCfl3RGN1ZYu4gPxXI5LogqiYisCjUREFb192FywYcVX3Wb7YduzAQCWAiyD4SoEoiAi2 + Mo5IcPfnFc14imYXi8YIfsj4DqSwjLBjg86YcmHIN4DIiziHjj73iIeCHuq1jTBzgXRlirLYhV74UNVn + hSToIu+oU/UIheD4hD6iG0URivL4fvrlj5L3hc12dmKIbAwIkVE3gcQ4eKoxkI7ljRJoB/rYMW94d4bY + j7q4j8codzkHRnqojfkGfZomPlCgO9aoPx5ZkTq0eRx5H/iha+qokth4hSJlWiXZKMqokdNDhRX+qIo7 + iIEOKWZyiHCqFn/JR1EhhBBVyIow5ZKyRIEl6ISZeI1ZySFY2JSKKIonWF404iahRIpH8hQ2yTXUGIZz + +ItNZnYJuUfslod4yDigs0wH+ZOlJX+JklAyeR5OKZF+VBm4IIr1Q4SYwAPc0onO+IwjEph4QXkiaRh/ + A0VwGZC0tZczOGqFaY+QMpmU6RDkqIn9BAzjFDXTUkG/0JiKV4aVmCWjmUr2EkbHJB77ZGybBTYRSAyv + WX+gqZBpom4ySZIipZl4N4W3WWJn0kDQgin2ZnJPOZxbslPG2XY10keeyHhz2HyH9HjCA5yvGJtGCVYv + gRhpJz+qs3eARiT+0UmT0RmZE0ad4udULQFetciU9Rmc8nWWK/ds7KhK87mSwmmf/XFX2PlmejeL01iS + YXmYOuhJ/RALESBO5WmehZWgGZETALeAZpQal/glEvpnKJMQFsqBBnqgo2R+C1l1Uylv2rUx+CE7vZhc + oYOiiaiisllYLVonX6WfAkNsXdlEGzBaZylOuwOZCrprnZRRE4lxBYo0HrdzrYmkYMOe4ogn1sek2Rek + qTZ1XBmXGhdWF2WSoTmb9vekUCqkxwlj81VOjCgCTHGmfzlXajObICajETk+r2WQoUgEBrKju9ijeKpt + V9dbUSqlN/ZYJbqf4tmA/MmjmGWopKYpeur+oCGZi3EXY2WamdQCon3pLF2aoj7aN5eaqG3aFTVqTXHq + F6Z5MBSanDy0pmq6RosXMuQRFsf0Dpv0qfsXJ3tSbSxqOByKdlCpqsMXo97VqzH1nShmMj7VkbVqq0eJ + MKY5lKUqoon4nLqCrT3pLkPIg01ITRqIgPioiPSJV2YURtFGi/pXEh0Rc+hCqljZDG/YqIqDlqoWMhg5 + Q9EIIQNKkaN6p4VkEf62M0Q0bTuZeXzwgtZWg/qhAnwWL/VKT5W6RuN6iM8UgsXYoOCWIv9DM+WSEDlk + WNMJKRabk6a6lTyxlliBqV8KSTr0retqV+7XlOqDIyq7hxirMdZ3ZCn+BqNsCpswIq83+bEMO4K66ZOY + dJ9waK1RWJMeG5B8ql6QoW6zypcwS0leJJlAO1ynVrPpqq78AqQwiKyapWzY+AYaq5S1Sa5j6LbZRp4M + e7YPSn7yCSZTB7YYimEndKiFUbQNinWiWmkCu7dM1Ldki0KAW2tzS7fBqTUxq6lhmQX1ilKQ67euyDo/ + p7lANrgys0VWS3R/yrDooH5U2h48a7l0+IWL23Jp9G0M2rp2a7oye68QQaLY5FsJ+7Of24N1y0HqibtE + e7tUi7rpta24ZCZS+1CJW35X9rCni7eAQKrKAbuD+mXgcrBju7nPM7QP66FZgWjC0qW66rTpmb3+QXiq + UeKC/aMsC+QmMpaSNjQMjtsrq6u+Ltu96xu8L1q647uby8o594uDzJq+cMu/5+q+sot1rOpWh2nAcQus + AKLAghu1dYGlZnsz8NuzUDIR+Ltx+vu3+2Ks0Duz2tjBScuSJRbCB1zBE9Jk/gu6Gey7yos/auE5+cpY + L0zBHki914I9zAuZ7Fu3Q+I0LMWp9uPDriu5YrrAdYgaRSxoKcxZoUVgGCJFOuvE+UvC9yfDVGzE+2qb + DwhYOPkwwIuzJ9kfTErDGyvGa/y+KJmMo7u8M3KEz2quMRzG52fBHGrCbIxfIpSqU0qQavXDutvGiHgc + m9jA9VfGHVu8ajT+vV08tcS1HYKpHXL7yMLbbwuLgoQowvO6kV8cuKjUv50MstGCXokJQqpUe7nHKro3 + KK4Sy7eMy6NHy7nMy73sy7+sy1iLe7JXFMW8eqYSeoQCKzDsxabcsqgMyCi8yo8DItVYVWp8mnXptS66 + yXH8fTBomzNmzWzgvZmKmnF0js5sfBh8cOqEsJWLZP46yqGrzuP1xn7pzVtLRclDykmlhYnspYtsiQKd + z9lsple4YFpMJr/VuYpM0Nj20AWdrSDIwirnnWLE0PNcvWkrxDmIzhItx+UXNtmEkk+HSBnNzCNczwq1 + syAd0oM70haSjZWLSHp5zwS6Y41szzetky7+jdP7PJgNR2U1/SEaTc/dPFXY/L1LemgSejO1e4ZoVs7J + 2syZDFQ83dMurav/yUe+d8ZIp6/Dh9XNQmhbwrpGbXRSSUrfRT7Oy3krPVt4ctYpHVdKt099CK6loCJj + 7ZmrbNVfmShzDdBvbdepmYH5lG8nzcOW3KQ6vZSB7dMT7YEs9VEUQbyKfce529R/fVh8rb1ijCBcPS++ + SD+W3QnM5Nm2tB6Jo9RvS8US4sGFzMrlU5BQ7KTvBs1h9yuCDbUXF8QtrLp33bR0nWmOrdukqZwSzS7h + vCBty7Q37Kh/fJOe/dmvPX7wzIz/1H+t/dI4zLtIu9uRrc8DNsn1BIH+0aDHvQ2x3z15Pxq54l1XlCsH + 6M3d3d3Y+mSjlDmQ4i2dkPbbzGfYbj1s7D1x+fnekR04tGuv8YHI0D3ggtOL9U2XBZ3gELzgFxJG3LuK + U3xy78rZ8C1mhROmw43W5I3fLuXhSC0kEv6/Ay7i17EZWoufPdclNsriBEzVDwnhPdcUmhIZObws+U3E + xUXdjGvdSY2XDaICi21QHT7VXqkhN/7BHebTvANTD2xzzirgrVrkBm1nUl6UoJ1FQvriYT13BA53Tx7k + 9sXh9/WPdNvl/d0aba62YG7kUDfkIa7gRJbXxP3ggbzhxpJJcd5unb3n/fXNTd7eOx7oKcvfP93+qWZp + skMn532t2R3O6Gc+hiib6BQO0Sq53RDodExYV3mutqHhadzMzjqONFnha2FrsNdd40IO2VKnyno+hPf2 + NjdY6pluXXYuqWIuQ0iMD9yJOWG+3qte54Ruzt48jpLsfS537Ev9gRo8ecze7HFsnKZTOI9XQ7w+Z7OO + 53LN39iJmIAEDkEZDeA+fdgO6Q0b3iDulklMQiFC6u0u7ppe6wg+w/Wul4H67suA74BO42Zd7rXZwbDh + epbus40uzafu6PKu351JF5BwtOy+6ARf8EzC28nr3qVE8RiP6Rrv8OSS2ge/Wov5VCJP68qO4hHP76tV + 8a5w8Q3d8lE88rz+ddMdv8eofpd34KqDbWkkD/FpwvOX3shsMrFBz9glb+3TTe4xj0pLrglGavPj/vRQ + X2Atru3jxRkxbqSl6OdD7/IZT6tV7vUy6m8ByvI5j/MDz/ES79j6ccgBb5klV/Y3n8Ba/eF9cZUljttv + X9ZZcvTFquLEYfWAP+cP7/aGK/jKffiIX+kN3/hbjvX0x4+U7+m5nRcnK/Qvn/f67vhZD9KF73h0kXKt + detOT7RAzBFyL92d7/lNL/qWv/GLuqksm88uQcOnTzxtf/tm3tm5lUzSWKfO3veIP/u079ukD9781ud3 + HoiFv0iXIeqKP+KMX/kDy7HkRf3VGvuocP3+Y//nzm/27+s84/r9um/qaPB8sb79Gh7ijb6hUh/+kj+P + SM/65n/5fFve1U0A8DF1uf1hlFMFenHG9lmxOE0Uw1H8zFQF1xVtG0GWkxfOylvf+SnvgZRfhVYJ3obH + g03ZBCSdNeWMaahGEVDslmvscrWfwMum/TbMweu5lY4WgdTFeutm33t2vCo5e5Kz9iT0dugENQiP4OJi + 9hIPITcig/poyMomHR5bDDMHDxcLQxFGwTxP+VB1huQuEza/YFU6VdEgSzlxAXSjZGtPfX8DFfwExqw+ + MIWDR2iFXyOdNeQa75ifD6+X51D8dpOHf7UzpLGfbssvvB3S88zfWeD+ceaWiiyzAvL19/n7/f8BBhQ4 + kGBBfsYMJlS4kGFDh/1kPAxIZWBEiRcxZtS4kWNHjx8BWvRW7MU4JSbVyesAql0Eai6tqVSJElWOkfbs + hatFU0JLcSxvWKJ1jw1PmSePCiFGJgQcZT+38JoJKpfUGutiJTVnNNMPJk0B6cTSjis7rQzKTrDqksra + ej6ttDn7LG02egfA2ngaVdLYuV7YwCVFrR3WrH93IrY1uEw3Jl+38VV8LrDgl80cTQamOV69QI6liN08 + VrCqug/cMkgNoTSM05znwcbLGA6Hy3FnR3ayGttr1a13uQCeSnYk3zHfQkNWBTLUN5qPD54lfHj+iujF + IVw/vBxTslLNE/uF/sYwzKsugiPHnhl7CcNN0xNTHn4359e8WXMSpH092vXwF3EPF/BME2+yuvDLTz/2 + +lMPNvfiMyCvanKjr4kEnROFBwzvwoO/BkUbb4kIKSOKm/kKfO7ADTk0bzoGQeziQywE9AIc1FCsibQV + NWRkluqIi1HG9kjpzKoqZlTKwL+MatFFE4AMUsg6iEQGMBIplFC3C6O0K6guO4TSyylprBI3FKVBMkMu + FUPJSbVehJHMJpJ0Aqwry1HTQhXnGqe8HoAD04Q6+yP0CAjxpIBAHSXrE70lp4HE0OImpcQzwFbTM8VG + tbrmTXIwk3TOXsz+vOJORa8cLSpBt8MgLE5dFXVUOykd0ciWNGV0VUfJ+fPCUPdTh9VaZbPNP1tTytGT + D4c1ZZpmFewVVmVn5aHSPHyl7BtpQ5yEWWhJ5fYLy1al41r7isu2RHKp9XZccOk84QzL4L3K3GqR4kzd + dYH95txju6j30BMEli9S0nT5t03NKMrOSoJT7Wregt2BeFpUjcPX0r+8o8EM+MRsN+NxkwqG4jNBFQUu + hRFjmeCSHN4WylyXDazkftl8dkOZL3CZ17kCXAllnLVVlWSZfOEQ19KGve0Tja1FLJSPH06B5ponRnrm + gzHmemSoV+F4URY+RbZCowM+2bWtp2Aaa7D+kdDKaap5jvPst+edKmRF9v4abrmO+jMND7ocxWct71B7 + BWbKxlFevP+2Tu5SqN435W5lTVwek5l2xm2JIwdcJsEdblw6zMesDB7GpyA62NAXT4r0DizXGfXXVX+H + dUXYdRd2yWVfzJZmp94z7dWthjdB0+P+fVDZ1xgcyy9Fxt1m3a2uL1bIne9rdOH9Yz7MornnQnHgXWdx + e9C7RyTw6LMT/8TbPcRD/oH7VqOw8yM4XOvAwUe2egVNV9fbCtv4lqzyta9/7wsgEQRGwAIe7YDNGOD6 + 2MdAJankXrTj1OEIdb+NPa51iuJfAzW4QXkY4mNqq82mDEiX9AGqawv+TCHAVvhAIgSMfg56VwXFpb0n + ZfCGQlthB9HAP5hN8IcyFJbi0mS8IuLQHNmiWxNBKIgTeo81IlTLGtoixSlWrxYJQ02dipBF+wExBluk + zaWcOEYdCsOKRswa+XyXODeqcHws8WLF5DjHMvpKevZDgc8mtUcfOC6QEWvk3Z7hNMQJ0nyTtOGOtrQU + Rf7skT30hCTxSEZMIlKLceTGJs/iP+QdEX6aiIYl86jHTPaxkarEHiup6EjVqXGNswxNJ2HZSVv+Jpe6 + vB4p9/DHtZkFmMF85DCXQslQGnKa1tPcmgzWTGj6ko6u9OYkDsnEJsKQloHcJjYjKU2XeUycFGz+p9mE + 2UxnprOYniQZMktJzmwC85z6jGQrv5kJdqLtmgT9JT/lWc0yqnOh+EwmKjtTTjn206D0jOhFP6lQHz60 + otOrpTwpSkg7oiIi77xjLE+nzYSGFIn1FKhGi5JRlMIzniDloEvneQpjdFSWfqNpTRF6U4yKMhoORYdP + lUkmil5SFS0dalNdtk6IIiqhOZ3iUgGKU5Nu9BZ+gyiTbAoPXFzxlkQ86pi+CtagilWrS30CSOAa14Qg + RK4MoWtd8ZpXve6Vr3316xjuqpCjRJWkXkqrWp8pVGNa1ZSZE+gmPVBVoraPpU+F5OYO67OkDuKwiDWn + Ysno1lek9XCbjZ/+ZO3pPKxalrG6I21T3dhZTk6Ug1ebLBsd+1ibiVaMN1xtaE1bppmC83wDRS1Mu+dW + 275FtiRgajKPh9zPfjSH1TPRwswajZNJULK85SodxxaXnXo0ldl9JXlue1XqsrVbMwAZuobb1d0sd63q + PSK1jFu7/+VWu/Nl7XrH+FtI+uEY32iulFLX37ZJk7YNFuteqnYqYvn0rHFgIWq9e4bKDrgkjjmw6BKs + 4B4FNKz2rSJ3I+yKBv1Ls0BqizMyHF/KPlg5OZEQToTEYpJ67sU4wU+M+cvAfk6tx3jxcY5l/FBeHNnA + ggFyiIXMXiObS8VIprAfnfJiQJY4hSFlTBL+QTOnc6kyjLTicperWzcjeHhWY7ZovM4cZVbygnBVG5Wb + //bk+vl2dOqqs5rFfOVq6fm7v+Nt5eA4aEG3Oc6q7ZQrcQw2PEu60Ya+2fDCDLdrERp9QJ3xYL35qjwH + mdGe/rTejhXpyG161KZ29H7D143kkjrQrrY0rG1kZ9jBQn6cdq6tQydaLdhG1nKWk6ITa+xVpjrTp96z + xnwt3Fmj2ki6dnahrQxgbARXujbMC7dnG1NoA/sXBXPrsJnr4GcjW923XnZE9btra95Z28GmNp7ALaJ1 + 03u676AYRdGdnPqKm90mlvfmAvjh3sxbqf0+eFnhrfCFH3tK0c7Xw3FOmyOJZ7xVDW+3phEuPFCSW9r8 + LqLFEdzYcIx84JcbAcpReHJ3c3yS18Vw9jrtcZljXOXDYHmlqVRqPtsb4pjKd62x/R+Dg7zoKz/6CAoA + ACH5BA0UAAAAIfkEDRQAAAAsAAAAAFgCdAGB////8ORCVrTpAAAAAv6Ej6nL7eFiEjTSKiXO3AmwIdc0 + glcpkp+4du4Lxxwk1/aNL3TO9wYdYhlap6DviJTscEYSYGlrMaQ8qoZagQ6LVlPyC05ow+QyY2xOQ1BO + DCXwaabnMHRMbsLYX1YpXvZ3ENf1U0NIh5ixl8iIs9jos3a4ElIRCNn42BE3taHJsXF4xKYQ+HkiKIqJ + +bnqGtH6WufVubWFKusaazEE4puHsMuLaMnlS6pgx9WXmyvcLPsMDfs7JXg7OJ1ZlWos1nOZVNTdoYVL + K6S9Kq2+3Z4D55HdK/k+xz7xgq/SODg+syAUMlX2wuwraOZgwT//KCFDGImbvioPEaL5FxBiIv6FGsFw + bAdnUsM8BDvOklguR0WN7MKZ5PHxZUSZLkISMraMpiNwE5mUtNfyp04bMYfeKKquXik3OYUa/ebz5I15 + NKW5fCoDKdYYWqEBYVZt2dWtB1c24HhOptWtHtmuc3u215VxTp/uMxsXXF2vgPbCVfIXUle+ckrkDHxm + qt9CPsbyheEYMTXJiAYTvukQleVmewJFPqD1MyjRgCFT7rH5dDLVT2zJwxXv9EWCpAeLVXwY5p3FrIP1 + VtP7q4VxqXU18My79RzSTUivNv2baPSEwV13QlFc8FTpxBzjSf7cBfjo2X+Xd1VsuKfx2u5yZ+RUFS7e + z9hXn07m/Cpvx/5D6KcexVGQCOUSRj2Jh997CX7xn2AGBuQfXPiA1+A1oNwhV0royLNgVh22ZR4wr/nG + 1oQUYkLgbv6YZRN/TnzIFYxJVOgOclLEZpSJAu6XVimNGdGjWD3KCBCRM91XzXVQDeWegq885Nx1/iin + woNGanilbiFmeFx4aim2IzRBRHkFY1kyeKaWIVrSnxU07hSgk82EUtlpeAGYJpzmsclhMPbVuV0Nb2Zg + ZX52kqlnnnLKVmgqXkIUQKSSTjqpAJROmmSMeXamU3qNljEoZRVeSmqppp566QmoWkqqSXeximqsss5K + a6223oprpLDmymuvkqpK6a6+DktsscYei/5sspJqJyKEOnT0aphpKjPJOyv9WZOi8OAnXH/PQhrFidpS + 2wWiXwzpKKDaSstat10+CpJ4WCR6ZmdAmnuuSPgWue6islmXbUGtoIBoqPG2iQW2+Q5zT7/stgswlgdb + k0K6D2dpb6b7giGfwpM57OF07h6YFMLWmWvwxEqSs5B8dKQsGcwN49WFzN9C6JDFF2M81y0QIdcwyIJy + G/FS8HL2Gir72jzNI4ahO41nQQutqcg016wyC/NtzDTShOL0s3oeH021Igkq5S3ZxlH8y8ZUKnoKl26L + 89PcoJUdMnkbsv3N2P7yjVq/cYNlz50Wzoh31XoDrTazoyG+7inl+v6NhOGWj9W1W5kbWhIhITmDIBKb + g35hRggZ7jPOny6ZOL+Ld5wY5VJpgGbkoZt+eoF8kmSY662bjd+dTcg8sN+jvxJLtRqNJeSYwP/ue3A2 + xo7845DbvonyufMxZTolHY8V+At7kOnd1RNqkMO7aN8yU6VrzWVe0D8/XTiHGKyJ3W+Py0fa7a+IPiI8 + rTTzo99vBlI+LoUqf7IT39pux4/TAeMqOfPDShyYowXdy3/72wj60ic4DOHsZ9nwDiWWQpdCME9K9dKg + c4DgDoZdD3vcW1n7iuajk5XpMAJpHk5k96UEEewkQEwM7UAYQhECzlpEOGIlSHabZu1NZ0TC4P6PMjM7 + dXFwhvxTotFIWLTJ5SNgo0AdxILXxHl9TIvvApH6+lKL5UmRfDmMnl6uZEW9fKWHgCki6+LoRhp6cYwd + 6V3F5ohDI45PRnlUyRtswYlw/MdpQGxkDAHBQhKOoBguehEBz4VHNCqHE4l8jh876MlACnI3bTKJD2nz + PTLoz1WihKFf9JMxUAktWn06IIvKoLRTNi14jDkhyXRJR0PtMlAyrF+PymPGv+xglrJYjzGPiURnIRNk + TWqmC0mUBmoCpZRssSYpsVm7Nirzjczs5Ydu1J0lSpOKRulDC2x5Szxpc53sjNMRZaQH+FhQmI4T53IG + 2rdzklGVdeRnEv7D9TUjraBCKVTNNFeXuxVRwZZ5SyfuttnPcNFGotHMF0FZ0Y2SRq2TKlQpKgO3RYau + EqLJlGg/oJa6l4yJkzjNqChGhk41fdShMwUTIIn0yETYr6ft8FRTTlrGP0wzgZ88gjKmxs3KqROpLwUm + LA1Kt+YdUhuYYSmJXNoVTgGHakgRyZUmOqCOMXWlPkwHXTWGOoVo5apYDSlKvghQuMaVF2CliEYtddRc + RHGTEuuoUBtK1Ic2JrHfNNNNvQVVf94MsNVkilnXOLQjcTayXazcTQD6x36MsLBMeIA70TNQ0Zgjizsj + p1XL1pXCZFaxG+0sy2w7J9dS9qZDnKsi4/5nR8emMptZFUdNRQlO2DZnt4NMLfyki8LFQCGfjyUkSJur + 1ZiqxkUOZC1Nj6u6/WRScVQVbnsNCFnm+pUnI+pNJ8u7vJ/2DEWtdCx3a4tcjy7TtBFlTROtS9aMVnWE + l+0vbaum3eGsla2LlPB43Vs4Jk5xsyZTKsJku633YnioMpXsj7JnJ9A2talmlFxm3QpcDofsv8PlInjL + KC/KSBWMZK1L8aCKmbEuFMTK9S5pi/rXMul4xBoWE42TRgzA0YeeyYWvkUts4slCMDD65XFw2Vvf5Rx1 + yjldqJlJLOAbhxfFbvmsZQtH3RovuMPhPO3hIBxhESNYyFgubVi3XP5PoWDQvP98cJdOaucAa6g2ipZx + fNOsZrqxGStOsWKcRxtU8YZBjBtetHEb5+grQ3q+kn5foM/cZNgCWM6lrtKJMIpeFaNZdL+DpvVO3Vg4 + q5pepjaDbuF0zYnE0sJHzjLH6kYTWIM6aujp7gfpUMm2FTnWj7ZxpGU5aS+DWdeDdTax65y+A/dEFfnT + J27jeWsJdlrWqe4OtuojT4q0xQ0eIvd7T2nJ80Eb0NbidYaV6jF475PAaMrZLPTLkAnj7T+dizFxP81k + bh/U2oW+bqtvK+5Mq5CqBs23vsWs5Ev7r2CuRLTxoJMCha7Zm0oQ4LbNVxF81xo+X1M5j1w65/5/75vi + zz0GIu/4bEX4ISueSyRYPf4WD+d41/JdiK+7R2vuIXTdjuy50DOeLazhUOYzB3j/UMT1QhYR4i+HcrNm + ifNeRthNduXzqK/t6xhfWpiWBOLRpT6ksVs95GTes9uj3nWlX4LQon57u/WSdo2rbiB2L5chgk3bcpt7 + 4ZelWbMVLnatFtYqhQFmeF/o9zs3fcAC3d3A3f2yZO+L0KEZO7YgP7slNAfzlI8r41DPxszT14M49vwd + oxSbSr0hVcoqvvGPj/zkC/8Cpxp+8oGl/OhLX1i+or70lWX9ZDn/WNvHlWA3TPf5GaynsiN7n1u2+9xv + 9bWgRI2yz/D99f6f39i2j3dUvNapP2W29XF3P1Wk4jR9VXtz4ni99xhDoX+MkFtP53+g11VtN3qk92WF + 93glg2utxXsEh226AUAxwkCTN4AEqDXg4WYPhIBJRnv2p2knBhM85RgQIHnflTiZM0DJYXoWeIHtlIKO + 5Ef6JyQTEYPFBne+dYPZJjBbwR6EF4CQkWgq0YAl+CyUJE5IZ4LqMHRzYX4fd4I+AVVL2GijlYXyR3Qu + CIRKJoPnJnFyZRdImH47CIGjcYU+yIFRhGoUCHitIz7uw2BrSGlJ2IVmKC9xmIDb8oOKF4aGJoFMpHKH + iINPQSb7922bsCEG54Qh9jQ+hoUgSGFgVP6I7pZ4yyZHGKh+yxVAgsiIDjcZdIGJ6uGGQ2iFX3hQUOdv + nSKKqReJNUcnvXCKKIMNUGg+7Dd/SMZiDTaCt9Vm52WLapc9T4RpRigoYvUTlNSKrviKpVdmxlhOvLFb + UsiEzBhBTNiCqphXmSiEpDaMXvWJoZWNhnBJ6RWIhpRdrAQPnMQ7iKeJm3hDXiV6Aqhze1dx/GiHFDMf + DrZ0jiAQ2GBY95iIVniKSYN1yRiKwPiPrWhzywh7KQWO8yhA9MiDCkmNK8WFUENdeYRsNaSAE7mMsBgZ + f/I5cvF+YuOR5thveIc6I+lKkvh1J3lsF/mNgEhYZ5EwvphuwSiMM/45cDhnk9vDbyw3jdoIjwQpkRPZ + kodlLh1XQPm2U7lRXQDJbGqkgl8ZgVTHdzWHWdoYR1Q5iOVIf0oplt3Yjk6Hk0t5hn9HlnrWi9n1kI+3 + kS+JktiIh4E2N+k4bUhYN4JZdq1VhGaHkVvZdqoIdETpZ2kSZ0g3UkGnkyZllym3kXHCaa5WldEmftpC + eL+IGIN3aZbBWKHDU+wIjHSog3f4l4pymofyT4ZZhwlJic+WeKJwL1qpWTy3kG+VdJJhFp5lXqh5DGS3 + mX9mIY5ZiZAJN6I5nMQJk/U4jRCVGfFBZRQxBgRjH6AJPVTIMVXIZWXFH+HXl3y3Qm0JUd0plP6WCZsz + mCejGV3ESTh2dXeb5pWlqJ8fsAYv0pCoeJgfKURaWJr3OVZWuWnVZkOZuXT/2QYVmZGGR6DOZKAHKmo7 + FZN0mVgU5I1ANxvpUYvxKZ9nInJvFpFxCX7NSKIZsRfOM4EhypM5CZzB+U4n+oDniHfy50cu5pYcim6o + tDtJGJY2qkH4d0BWN4XOSI6wCG335KIuZ1Q1WqH2haRcdXotOmsSpofVRJp3KaCstmpVOl44iqIwEmRF + CnS2KVoplZcmSaVrWaAHaFNZ2qa3CIdhqp9fOkF6aqchFp7COUxZwj5auofgSJ+AtV30xp7w6W34iKaN + GDZ+U6h+WWCYpP6LNzcEi9qc3zk24jmd7ySpCuZcW/qoYmphASpSfJpGn2ltbBozWNoeOkU5TRin3KCh + D/dmvWObXOOZZpo1RzqqcFZ+LApTcUcK1GVMUxUWfoqq4zZ7RZmkw0qs47mdhmpa9kRzv8CsQrB678YQ + wDqoohqsTler7zmLGwikpeoFslcJbqN/OLKCjBSp79BIiZmQEMmYLIdo3eCuxsqaIblf01Kv5WquErKq + NHqtGpgH3RqQmKqXObqwHwKqAWuwGpao2Eo7HvqsVedJp6Uw+hIknjCUoVRZ9kqrsBqq0OGbbzixHhuP + YCmPVUISvyWxzmpRHSKu1CZxmvOaPqeCrv6Hl0BGiotZnyNncUQzp0eoUw4KLj/bad9Rfr05mlIaU8mz + mCr7tPXDEvnns1NKgd/Ra3VJAi2Znn1BZHAoVkpLTFtbSD9XFTDrsvdWYQD7sHA0mFICoyKztBYhEzMa + RCO6j1+YIiqqAgMzqzyRsaO4ZNDitSUib80otmO7dyUQN+Oar0hipbR0k43qtoK7ojILt1saUI5KnhW4 + uPqaYi9BkvjKJPZIip1XskEbf9awszdLlqnLlX+hu4rXY07KuY9JT7bqjwxquWeLUjB7u9BZT3HbuVrr + OG1IRQVoqsVLC16Iuee1vBRKmDpRd577uXLbmAi6rn9qHUgXGnqzuv7eS6vg67cjKrthJDdqpFuwdKbh + i4Kisr7s27Tbq44R+3cHOUZD15k22yfYe6XSq7/2yYcl5795m5KDe3baarjgW7sfpbsLuCW8+8C5JkEd + jIgTOrnyW8HMkwUylMHtp7mECcJVdnhkMVkiGo+LCLWttAjLebrPeUblNE+qh7CKa7U0myQmXL6HdMMG + HL3Cm7Pd28Mp+8N76iMC7LQVxWZHjLMa25p864gtPKAFFMIWK7Xus0J8KRe5NLqMO7a9u6FwGatefKyw + q5LGOWnmd8JTxCbQ+8X7ihjiqca36sYujLYSDD/vt7fyskdtcMaqy4Ub7MP/8senikmM6pA1u/5P42EJ + 9RBMOJy8K7fEybbCb9vEiPembqpsljwCZnueqct/jNy5O9y0oaxlTtqJ1ht08ZvI1ymG7ptBf6u+zwvL + 6VeYdWHJIxhMSZvETHqNC6x7rKxJXOzBDLtaEmq3hZaVEXR93Jd9NnHN28zNxpLN3QzO4SzO46x8zMd8 + pQIrb3DOq9Ir2zd83Sd8ZvuWOuzKbKzFnvzEF/dVt+wcCZPMkDSbQHzP9jzQj/w3cgs0NYmMYoxCwKum + gci2/RjRy/y1dQs7DsocFmS0L4vLBcnMd9UhFQu5snSFHWvMc2yc9iTNu4tyvayjCyLSMNyfQKqcL/pE + l+gsIhcTeEytE/4Y0gYNqKCk0ci70ZfqklhESDotlxxd0dUIIzHdwDMtyIc0wsJMvx04t5eZuZ/MW1UE + 1GPakVPdqdPl0MPrrecgyccMuo7sZM780F8tPyT9sC1btDElpU1xxZA8s1ytqUYC1bscTutKxbl8elL8 + IIubvi79JH28snD9zIvUcHMVH1gge9U7z4vM191mso6dx1cky3RdxBGDWIN7u7nl1geNezzD2Z3NgiIm + xrlZ1pNocC1s2h+9rZuy2qwNuy4DSX06yBXnWfeWwhenzDwSnbl9m8cm1qQ8slszVKOdmr96oZHL1up1 + 3MgNyCpcIF4AJcaEEWPSLSod3ZvMrsWt2f4Ei93ZXd4lCdFoHZS0wAzo+tYWu8dMh9vpbWVeR8ucdU7V + HNzXIN/MO6H1fXmlCdb4nTIXHSjIEA/j3YsrzdL0/MtBet34HdfWPa8paQQNnpz+vNxrXMPhY9zSauEy + w5uRWzORlNcdvdYizl+0+b8WHmrEyKARwViMzbPl3dT6jaEHjt02Y8vztpr7DeItHtVPemE+jtxMQ7w/ + 2+BYzbT6GBgUteLmLeOhZ413y28cTsnv238T3n84TjpXPuMY/uEG2TY8balQnM87J+bR8D/VDXYQ2KOk + ZCWlvXNtHti3LNFrnmCdPOJu6rTPmNI1rtbWqufISqa5vTmgTdSgwf4GED7mT6fmikzSb67Avovgiigi + vxbaDhvb5I2Opx1xl47pcE7mZd7WWgvqg37oiD7SUXbq0+2lts1sxXis2jnpXx7rSD7rja1Yth5cxJu2 + pM6n6irTPE7iL17PDEnsKiVwZqofv/7YUr7sP+5Ti9dDDaF1XyftSpfsAoXPFaze2J5fwA1Aw/PhTwns + C9rrFL6/ye1kbZyiagvfN2OaVa7X0Py6NF7hBL3jcT67iiTNHk7r7h7ubm7sc0nmWInU2l7qMWtcPapa + CR+LC8/wV+5xrknMEZ9Kkh7qEAzrgA1wGK+W6Q3VLsMMF9HxfB7hKnzkE3ft5p6NA4mQZHjH3v4wQLue + 5ySP5DO/5AcqjrzzSrO8s1Tu4rf976l+v3BRVzr/Q7PeINSecwwYmUz/12KTyZ0owxeL8DEv80uf6lmv + tqU7R//n9SPf7xUv9g2PWscOplH+82Af9vzuuEx/tDc6e1SP9HQPcveN900/pxrqzH3v8+Cu44Uf+HDv + Qsmqy6Je9/x73qq9+GRfbxrj6u3ue4df8uhd+TwT6VSf91a/9mBn8o/O+DKeh8DBqKI/+rwu+YHu1YuP + u2aeTV0fvErvvPZNr7Rv+Yoji7mP+Lsv+73/+X5tvlqOxpsf+3O+2YH/+5rujnQ6/IFr+4Qd8G7//BaJ + 5wPi91FmuqiP6v7QT/nv2P3eX/rMHmZWrv3Ij6ggb+nglv6Tb9IDD/ntP/s1pCoJ3PPEf/0+SQDwMU9Y + /WGUJ0x7cdabd1A9RwjJ8uuYVADNlm2zEZ6zl9aaq8lR9SZtP+GQGAkWkUBOysA4JiFPJA/6k1YXWACT + qn1cvWGxAjwWH2UPqtPsKP+6bc8bGscwYzL7mC73E/v+AJfStkYCkRBbCgU5FIX2dBgtcvD8Hhsz5zT5 + NroaMIVCQyY5LUZpSosYVcNQTWGjYrUUJ0dWGl89W2fJBHlTbxOAsXR7e42PJ2qHb5NNnnWUT3+JS1Q+ + rZOipzO5uxMQP5u+N7W0lcs9k3xE/tTB2/7gwd/SbFdwBefd42X/0D1YUgBwUD+DXw5akWDpXoB877wQ + nLVP0hReEkUl1Ehh4wwweLKdoFjjXEeOfgTeSDkMosmDI499BDlQ2MNLJV3CnBDJxEoEGBW6NKhzYoRK + TZp9cJYLp0miC4e0UwOUxlOhLq6GkAJS2E8DDr8yxUKVk9WpkHhmkWM2q9a2HbbaS6lHRgC7d/Hm1buX + b1+/fwEHxrtCcGHDhxEnVszXyeK+KgI3djyZcmXLlzFn1ryZ890UniV7tpuDrZumHUsnnSGV0tq33VKL + bSY3Dl1ystkJja0Wxg5iR+W9TidcwxOGqg4V2n2SHdmyKHv7hIDNNf7xotYvGL9j6Oe8tMynZI3tHCn1 + 7d+nw1iOHSF7CVslOSxkEw66kehhyyEvFeAt8tDcM2W94GhCZy76zIDpP9wiwk8E6WLQJ0BNBiTwJwcN + sWXA+64qDcOBepNwQgZHBK8J1oxaCcEE6+hQDAil6enDISqcsMYzZsPBpxVxzM3Fc/ZbEMZiShSxSBNR + 3GkPHntcZUEjLfqwtkW2gPLIJq88wSspl9TyJh9zam41Ib3JkkUzveQOQ/mQY9ILDnVzUqUQrUSTSDNt + 0KM4ng6pE44f64OEzpbsfBPNPJHCoAI+07SQiBmvG/NJEKn0s9AibnTlQke4M2o9OMOcM6pBv/68tIpM + aVGtuCqh+lTMUMdcpVJCTd3m0E03AMEaN1N9FbVgwrtm0hJQta5YKF6A9AT0+qT1UVhl9DWgMmu1FU+v + OGV1p0bPBFMjY5IUlIRhia3W2ixZUFbX7ZZTkFwsezhtCQrNTeRa3lbttDVX63jX0HEbJIXeegu6Ml2g + 1mXXUnG/JeTEMKjyVwmCM0IXW06l5BbeYBN6xLyIph24IoqpsVjfXBONkN8qJEY23jEihvg9koM68mOM + JQLFWY5fchjmkMfi6di3hnbSuYTXaRfkjn2WGYUGhaa5qiuHzO7kPDTWdKyGm5Y3QiCBKRpQ93bIOl+y + mq1u656fXrptkf6lBhA730iTG21eTw14qIBaVoNvtKgSO865r9ZlUefSdrTfvYFe/O051Y0bK7J9KVdb + vpV2O55QlOVSYMARllxuwitXQlmWMvd6uL/XweFzAUW3nDifXjmcytSD7meU07FuHO7Ys30rXLNJ4h31 + UlVHBmCe54VF8F9fG5747LpaBG+XIe77BlSMb83334EnKfpIDL/6mumxdzo/1h9P73sSw1d0fF5qN1/Y + 3djqvtf3gW2f2vhRJryome5d1zuX5mIyLu3FzHkADKDwZlYuf7FBbQhUHikWCBTtucWB4mtLWuqnP38o + LnfT4F6LWtfADsoPgkYAkPbw96INqmd5Fv5JIexWaLUPhk2CMERe8lTov1G5LhbP49oHlyHB9HULiDh8 + GfO8F8QcunCHEXSLCJNYwRKu7omy6p0Up9ierBCjdljMIglZtj4hMixGRQyjFYVCRmjM0EQbSyMXmyet + bUXqjaW7ihyBYMaSoRGFCSQEHS8HlQv20Y8u+U4ZtcZEC4JxIVX7k5IMychwjBGExBKkDgmpR0pOBZEF + ImUpzaFJBBiREoDUCirr+K8X4fEs/zjO5lS5yjEm0jSvlGQk1cdHfmhCesLUJCsr2clA/hKYQMqk3xiJ + TFzGcUj1C2XefvbMHPVRmvT4I4wgeU1sZk+bqgpjN03IyQFyUIvNdP6mMVnCzVyG5Zs89OUP3dnEncXz + jeikZUeUyU58ypKcbjRKNOeJvni4Ei6wHGEnzOBQFrqvn/P0JzQfCpf/QRRmEgXlMM9pUSRSMSA1ik1q + PDpIkObwoot05Bk1Cj6CznKU+GJpQlvKTzGmcqP5nOQ+bbrCnNY0IQGN6XPEKUqgpmyKQ3XiS0nKU5ne + ST8p3alOb5pLp1ZzYkRdYhs+KTtzZlWVW+XlJgWKVGbKsKcPk2dZR3rV4Hn1gFUlUVhvBdddZvSBBl0r + W52F17wek5NRnatf7RhRK1lVOE6dalEN21d4UvUXUGLsaxwLP42s86jl3N8/jHRZzOo1jpHNl/4JO5Na + 1RJGtYdhbWthG1vZzpa2tbWtYkKzmWlytLJqEy3RSGsS+nXVm7y15U1+C1yE/tG0E91tYiNq1UXhlLDU + 5OtpdZdUvfFBsIXK7EA3e10Psg260QVrQhUau8yqAhU5Lc2Nupui7z42ft9l79diSV6fghWVOqNuRb/Z + SyVRwbHvNUV/89vUt1q3kbXslAHVuF/zsiwN811YfQuL1vSsYSltMTAxKaxLrQKYuQ1egIoSJx7jgraQ + CRYqiR05ibhsOLnbWzF/W+ziDlpYwgeRMSmngw9j/RWwzxLwcskKVRHTBCrxXaq9GtFdzsJ4xwHWMK6C + 7OQLYwrEgWrui/6TvJGVoOE3loQWZXsrrGLqGMNhLmocDuafAdcYyjNFSVqw0Y41mxjMVVayLvPMLC3T + l8tRhhFdEB06JDtwqHaQzyHpXNdxVuM4e+6sgv0sXFaYeTaR/uqkM2Hp0YU008LF8iHvZWdDf7rPbaam + fzjH6cb2OEA8Lq/U7PuZOch61rRmj61VLTpbj+LR3r31r6kMPB4Tm9dDDvaIgI1mZffaEc3GjlWiDdNS + T3u0DR10dp/tnmyzWnIWDoWuPN1OSZdo3HXmtoevmG7wFtpgmA6fuTfxbaa1kob1dnPc8B1TeWu2YEdq + d8GFrdxs6XsjTzk4n9V7b4UHkOHQk3at/6DdDYfOFxPofjeood3qfsCS4+aouFPC7WxGf/zM4jt5y91t + I5HT7LvnPvHKLy7ubYOD5PAO3svHtm5k47zcKv75wP8Zc50D8OFiRflRkZ7OnF+b6REf3MIXLXSVs5xk + me24WxdMbuI0vd8ADzoLgU71L0p26VwnWIEFHnX9tvGwQ3d7veC+cLnPXelbTziuz67DtGMc5Gq3Os2v + fra9A6AAACH5BA0UAAAAIfkEDRQAAAAsAAAAAFgCdAGB////8ORCVrTpAAAAAv6Ej6nL3eGWmG6KGCne + WSdvWBcgWt8HkiPHtu77QvBM13Yr3/qOySbjAY1WK57xCMuxUiglrKiA2qQVKMWpKkmQ3C4D6w2LOeCx + 2QH5AYnE0JB6js/K1fWIzrEimDT4iQ+AVydHmFR4eCaIGOaDESTRtiiJ9qJ2oKbouCdmiRKRaek3KZk5 + arpRerqTJqpyWSTilqrKWEmSdQEy29BqRFGSm/Vp13lLa7p7fJysnNRrHLIXLNuMmJwLDMXseabl9hwY + pUYFXt21bT6Jnv4JKO22Ke3OjnRNdjPP9RZ7z40bRa/QuoCEBhJUEOAZsFfRRBg8+MAWKnz5lhHzUw6i + jf6HGsVw1FhM3kINCz92DOcC3MCQ7LaxPMnDJMwjMg8mnBfrV7ZgNQna6zejYjWXMz0WbdYzoA84/HBl + i5a0ZQuhBlZSpeUy41EXUbfS6JquESR43xaqAIt0ajmDL80xu+qVa1ysc2O4WqLlxwW0dPPAfQgX2ROt + dScWFnzYMM4gOxPwRbwhMMfAo64RTkwJMynNPchCYmPWMeeqJ9bI5UE5MrSYEkdvdH3o8VDPHbzFk22N + oWkcSJ720Zn6S6XLsBHgLk4aOcJokX0v16wEEGW0wZkEfz5V+VftcY5bFFa76QLviZbY7ZZROnHRKbnP + cV8e/l2q4m8fTkX4eLlWJv6C71rPHXnFCahKaOENMxd+hsgBToP1AZWHfOdJ6AWBp9z0IBCrCRdXKZd5 + 16AtVy2lGoW8mVghhUsJlaFxHfo1IYPNDVeWKDuRc517Frq2I2JtycNLckV5+CEiLTJH0Wco3IjiaU1y + 0aM6us3Y2UwKxrgIHwCK099en9n2JIRhsqZiPCVW2RF++RVoxZYVHBAlZ3FChyKJvRzpYprmOXnKI2bM + 2VuOq4wJZZ3GOPgmShDNsuYxeNKk2Y9/ElpPnQbyotKiAWzK6U2dcirAp6KOSmqppp56KmRbgAQcmHIA + Sqc6qM5Kq6kl0BpqrTbhhWVstf4KrK25BktssaPe2v7pBMYuy2yzzj4LbbTSbgqZpCP6xCufEpbBkpte + dOttr5TeAOsiObB4olRUaisft1qGG6g7gi44Lpkmrrgumm4limS6ZWIqxbzfYiQwu/W+Zih4RpTL3lh3 + iavjm22ywx+8Yh6M8L3fVLqvmSStx3BsEvtTzWIFYWzvv5LSq0x0OtFmMHx4hFJwGPydjLIOIYv8sCYX + q+IyNv1CHHEVbAR056s56/wkvvlm1vKSL9ewM85GY7OyJPlYrO/S2yV8VUYMnyvMvFVbfXV/9CyWNdVe + k9u0woP8LOUlDXl7ttKOTAOzMvTVPN7bGWu84dwdwEoH3mGCUjjX+uxXi+BfN/7Jyp5057bb4P/u7XA6 + K2fddt51iV5e2HjNmfiglFv+ztr7yesc1JKzXObfU6GuIdNxR7iq6w7y7RRJhs1OO4Vt/3Vh5ppv7nPv + FKd3oxDDEx8zfKDDFaqqU8K9+5kAIa3V1J5URPqLTf+tVY9g1Fz+pNl17rleIYpjN4LUE83d8Y2a6zz3 + q7/fv5KpDV2wgEYv2ucVBHKCKYX7XkT450DddY93XEJa2SBXllewRIFH4aDNcOQ9DvGsdaqbIAWB5DpX + EKZLXNJLOKBHjHp5cGCOuwSBsMC1GZ6jNUsC3xsyQMIGSs0bsIjeUwBXGB0+zkw7yN4It+e//7UnSL7r + W/5p5CY2keSkZ9I5mBKPwBjHkQeHkFrcYJQXv6GpsWdrfCAYkZigJ42DjUK8XIpIJkEpTpF+PvwcOfz1 + Rkp9ETVOPFQPg3IcMi6MUETJ3UFcWD+5XbFrYBRkk0wgliHQEX8cY2IJTQjAQ/aRObELoAiXOKZBNtFL + KgwiImsYOFdGUY80QuPzjMg5SgYylZeE0906OQaXAZOWKbERLM3hqjzRUHztQpEHMjnMO0ZykbzsQy7z + V5/HPGpAUCwOJiBZRqN0c5bEDCUVJaQLBh1zURvDpmM+Fs1h1lCV1LRm89C5Av38UTkk4ox1tDGfQkXO + iuQknD074Mw7FEIIbUsgQf7jkoJsklKgO/TkJ0FZzBDKR6GHKCWPNgbHUXQpQ5WDZVSiU9Fq1qAi64TI + NscQUnUF7zAe9eUtQpoUYcYzYVO4WZhaehFjApUTFaxpUZL5nJgqqp51XB5PdSCvnw6Vj3trqKOwFjzh + 1eWlZJsnRY9JT6YmCX7GKyQhWPpSz2WVZgQRqtrsZ1U7vmeaYsXoQalqIlZ2tGJI7SOTxtkMV/XVjQP9 + pEnHZZKoJnSpC93aJm8509Td0jaX0uVO59rGPJrRF7Z0jwZ6BDulfst+ePXbx1o1OXFKMKZhretYI2g9 + ZWptN6LVh2UfawrpCW15YjTsYS25y9JqB6C5BY0s1/5GWtj2qSlYc5Miw+k2wDq1nD09JzaLAKgMTZWz + sqsgLR6U1uR6NYq/BS53O+tPMJVvu6tMbgvZBDDnKhduAHJCeVV6Xjsgx0DrZdVt21lco5FzvKltaoE3 + W8lrppeu/W2rUBQRXhrWpqCVIo59CcxI2z4tMaIgXW2TlDVQxDW4LRyxbBlh4Um6lrpTyFakuqvW+CGv + OR/mF/xy9JibYAmnXtTwhgvT4Ueyt5j7o3GWMKVilrGWdvfFb37vyWEYI7PGTzgwwI7sSLoqucliwnCG + ffzjuQTZwUM+ISdFeVbr4jZdwEvZxbzsZNTsUcx4Wi+V1RJdGpf5oXogr0mzaP7Ri8Z5lRiE6Fpcumcg + 5lnPRrKuwM4F1kMnWbNf7oLtIArI5111uoruKG3htSIev5mi5h2YmY+a6TTCl8KGU+dFyITVyzYs0Kx+ + qqkVPJMZP3K5bj51HHBCzUj0ZnqZXXSpbQajjlTWvRTr04oRaqTtpkHLgo4lrTnN4mGHecrGTuEkchiU + LEl7NfNsxfpkne0EbzuwD5Vys8UN7ipn2dLS9pO2gfDcZ6db3RqNsZXfvdeU4pmsqAymAcut5jX/2670 + 9tmdhzNYuQZ2z0p9y5UXOKkCkhqPcK50N3KZ6AkrXOLsXmhhWWe3NlvanDgo4sbhFNGXe9wMd/oFm0zM + bP7kmlyaLL+pJAve7x5ID8wwx2O1EfzrgWutthzcbsQprYkiwhOmPv3K0O9tnD5DF7E7T3a04+NfqtfY + Mqc9Gs1bypiVi0br+t73vRUyW7CDhOp6U0tlnW7MlZp94/nu9bHPPvKHz1fgiKY3zotX1Rbhfd5nLHYU + z41utw/7RyF3fNtVneAho0PxMhqt5TMG+a3/HT0qP+7Z2TvDwxO8Ow3/NSyFXdHKUbvWDBc7tNVZZh0i + sfJJeXhMtfotCHgqWdMqvvGPj3xohcoCtko+qJjv/OhLP1nDelb1px/96ztf+9OCfvGzp+PZ017yy0Sy + 4Stv01xbjPc9N3/SoQQctf733e8zhzfjoYp+7Kj/yXUPVJrh/3QDRnhct2qTpndpsRXrB0Fq53oAWHqu + xWWjF3cGGBT5d0r710QLCHQ0Vyio1Ruhd3nkhx4opHeqd3K5JmeYE3S3x4EAmFW+gEMdJ4FLl3LrYXMy + dRQK+ETx4mrx8leCJmoYszM3SBwWyAL0FC6Cl36dllH3hw8O2Fy1ZYL6J0PcJn4aFIDf4RVJGHIQpnFe + VyNYFxO49EEyV3/f9UMXNyRiloI7uHp+8YWO41VROIU2FoIGJUBtVIeVQWcZqILuB3GlIYe95XNZaE0y + OGhXRTNKeIKoBlUaiF5R12c1RIi7FWFEZoaJqIg/6P56l5hzMJGEkPiGkqhxy1ZLwUaEShWEQuhgn1eG + sQZ1jthifxiJ4RGH/1BdHNMqhqh0d4iHAPd/WiR6ObgljCgk7hc+oaBfK7VEu3iDvoCImug3X/dzvihk + zCiK3gVxX4hm8kYT8TdTb0SIKCM6exhfidZaIweIAlFVg8FcauiNC3NaF8Q1q9hjmkZ3BtaI/saE7cd6 + LGgelCVg4VYPYRSGhBSNSGda5oiF3Ig2uwaQYMiO8VWCmjSQ8UhIUoOLhJaJ0ugoFIFU7Dd3K9hqDzmK + EWKR/ehi0CiIvGhkkWdr+IgXWWiMjGVBJGmHJvk4KSkxMIRnFfMHRlWBHVl7Jf53Y0XYhRDpjznZf04I + h8B3NSuJkSQUDCPBksM4g1bYkJ54bQbXVuRmI1PZlCe5Lr9DMO0mkRp0N43Bf+MnggW4e8aIQD65lF5Z + knbniuE4RFf4G1InlARpjdsCigy5kTq5VWZZN6PFTIwmjL+Ba2tVjzAZk3mVmCexNfPDhwu0W7wSRm4C + lSQ4RFzplAvnkZ5VmZiBLtqzk/q4Krv4hCIXmqJJlmf2lrCBfukoXHwkm9jGkZ95JrvJl8qyBWz5iFh5 + hsZzmhyWNHo5lpn3S3NWY8wXD2aRGiAUmM0kVckZZSLnkkcnZ2XHQ1N1BTGElvcHOLg5gMipnTR1jlVZ + nv7G2ZVU8ox7QmU/4C5R2F70l5XutJ5Atk8ko3mAF5+t2YCkETBHw4XXiZ2LlZmuYR3zhnotOKDayJp9 + 6UvWOZ8HqJ+lqRxGiJ5kxUCmR5SDp5KBoYwSdox7WaFQ5paTaT0eCorx+C5Gx3NAdBmdUJP5kjryU5wb + qpDoBDQx6o5nSaMjmnIVyHamdWIMcXXY6KNF6U1GmKLedJdj14t255AfuaQBNaGP2W0EqJ5BOiZMMVSM + gpQPI6X9sz71gZmzmWr7SaV9kZ1uypv+957JU2Iux6IiSpu1yZ5a+FO1+KQU+JI5CpAx+I5wx5SYRY6U + CahylHBGyqfymaauhKhI8v6AhKqOxHaPG4WArHJMGOE+UumNwGmntxCD9fNSy9miLhqnUaNsqhipkild + Lmaq0IhdVLUPvqapR0ihfsqGn4po6xSiqvVxD7pc6USCu5qfg2OKC5o/HTOsREWi8GlbxWCEaago2jp1 + fvga2Aql/iStYceAdxqLmnmgIhVJZNOaOpiLdPpRnjobyrai7liNNRqMXep5ZBE0fimG7QGUv9ihYWGZ + mcqRhnmlKMeX1PoPOtWNPbqNEVk00Uqwllmv7FSRYrmpp7ox7AqvCgsjXlipbviq8+pfhpqeGWWi63h6 + SlJsPPmuWiR1U2pKAWKaOChkhKmatUScoyh4sKNwrP6qsGyJCTjJTcOlFAU7soO6pwYLbD0YmwFnRRLV + PHoKGx86mnI6d0t7rgl7hVVne3mKZUA7a+eUEygrd7aJLRiYRN6am+2WHodoGuHHq0haZGnzrG27X1xL + hbumsw06iz67qLh6OE2YkX1qIHxrrVuFsfS6sY37mjXbVOFziu/1HxYIGI97Elirr3g6mJjxEeoxmnQJ + smpJsyxLsvYqJyWbtGGHtpJatzOatQ+rkkFkpjursorbqjmoJ1t7sZCLf9YposlYl8rqcLg7k5qrEZyr + vMirarpLmo6Zm8Vat6NbtEbbnEoHvV8KZDDRdAA2OuWaZFoyuNULYB6itY33u/7A659WEqOvS6uGW1r/ + KbnrRhsclFiri5rbS1jXCL+LK5GKRW0wi6xsc0KAcWf5Gys0xb/924oN3KfteG0MNZx/0FlW9Uzmi7Aa + az7t20FKC8HVE4i0xlZFWpLVuYR2KJdXCboM7FAWG8JvKr0va3QrlK4icroqtsJt2MJ92MHkmhg1ITTg + YnMR5S0ozFFM+Lf/Vbn3YWh6+7lB7IOmCxDglJdBdKO5ek9L/Ikc/MNRDMWxGsMk16yNOQ7JuEXx6IWT + uo+POcYy3IpSfD/4el5twQ/dyjvdaSZrTMUbnJP/C7tGKcdznLI9ZbUX153+2nhiUVTgm71e/MJCusCE + HP6/2ZGl7+UUpLq+8OA0rcOsExm8kzyS+kvJlTyTsNeeg3XJ9uQlrslGJ2qXbuvEsXq1sjjIPFieZLin + ffnJ/6DIfiy/s+xSyKF7pAx0CpEX9HG4X/vL1VqnNQvIAPxd/CSkb8ypLLyiIwYvB3pE3Jy6d3mvkQw+ + 1AzCooxxE7aY4MxDPwdebWF83HcqynIs8ox99WzPxELP96zP+8zP/ezPosJ83ncsz4chtZLPxnJ99Lx8 + 8bx8DvEphQzJW1GO1sy9SinMZbiw9NimTuoZdgyeQDUZ0SzN3yYzpRzIMxx42oq9IWSQZAoaXGyTQzka + eUPRz5yH5kx0+ojHXrrORv78LjOboUzL0+E7ZTVd0SYdvctsedUpKD5dIzgCnuYaweocR1o5sUjtneI4 + oXGFc0Z8U71cxSV80qhL1CXDPFi9u8x4yFSNyeobAqywD8UqHut0JYIqztN81mh91CSWzbWKyqTqRFGN + ZmdMx6qL0yJl1Gmt1xeomWxMSuCS0dN7YSNFlY8NVjzcwzfnqovtq53Yq2uZmsH81qbrymb31wpq1x+s + 2ZvN2dcMU12aFytNo4XEUMmkVaKlwIe9V4md1a3NxK3X16vq1tQAWHyF24Sb2Yj9o77d2We100HFUsON + qgaIVi2VWLxtbUuH3b3N3A48grn8Q/NowusonFxKZP4wndu3TI0c2t19S3oLa1x3rJGh/Qr4Ut0Iat18 + XdU0eJzt7W4CWq+6/NSnTUfCaYmmAY7pPNKlK9HqCqf+XbbOHdnPCdkHJ9Z2A9cDTJ01SNc5fdeNBaYQ + 7tofp69I6coFfigqzeHUeaveHbll3WghLuJd7Gm7zNLz8U9pyKZ0KN5tHLj7HeOoudcznsLKLbHY2C2+ + 7NI8Gs5CLdoNvt79TeRbStJHbqFdZJEh8U+FOdaavIZB/uBEXi5C662iGt5hM8SxzG8f/t2RAjJT/ttS + O7vwZ0gY3BBqvuaqLeFubtMzHjIC/CrTAIuDsNamXJfLK+f7O+RijnmfDZgIIf7olxigyPbFgCfSngvn + 2T1x9fvj75TiMK3YT765IH7pzgvnNB0wNf7SOOvho/5/pQ64Rb3d/x1tSbrJs/jS1Hukadvqvdt5sG7j + XVsg2jHmbZLGzt2Zug5So7qvek56s27ozO1heSvbIvEOaDxVYKHH6fvawP7iiJfpObyQ4PG0jt0wyt6T + vC6ONa0fTS6w4S7uMtbiUIPuQUJl1MHmyAbqX45MVz3M1p5SRfi20X7oa/vs0I7a70fsvmue8nXFVr7g + d+W+e16F/EjMoBqpu7kSkXTvAD7xFB/mIj6X2uUcfzUPG4/j//jazt55juvltH7qbMuyqPUS/WSre6ZN + UP4O8gsmwkoarwVrt2jqRthj7hEv8a6eryHvbD8vxis7IZvJeDWZ8/z+6zIO7zEN9FwemiP+JZtA307O + 0UiPewgv7IxuaJStX89gpi739dyN2Yi+21YP78ybNFuO9RvC4kJUpgov9nyv9O1N9wIZhs5IFjy+qyo+ + 4Yv+9rvSdXIf7sy7lfPojEYUPSS6937PvhLq+JkO+a9G+fLD4gZLixjtvSBe8Vdf5KYZ+pU/nUsrG+ye + 6OwN4Z1/ytfLzlDP7c3e920u5VNO+8EsCAoupiv/8UmPzb6O+nc/ppAN7NpE0QLi7aM/9znjmyoEva9P + 9VCLdSH8+waPMekMsyZL/P67X6Cy79/db3Uqh/viP/5wH+XA2tro/x44uu9lf/yML26jkT7Jn/rAyHpT + RwAyMHW5/aELkdYlbNabTf6hAxzJsvLMVF3ZDW1hRYyh18BmGn51GetpPOAjNzSShEflUpVkPkc2xA1a + cup+1ahWxvU2rl8xNDweO4uV7PRZhq3NFLcRHifb8e18fh655dKG+lbq9jq8AhkSDUEGGR9dIM9K/gDv + lgolHWkyLzpDJBU2Q0nBSrlGPSunPnVSSVoNX1liARZPI2ZxQ3V3t2APqGxrd5iI8XpTam8/jpeSfWWj + mXqpKpmDjH2hKTmw/b6pp8cl3px5Tf6GhW2VuDPOzf7eR8KDwxVX4+bJxfb5y4HNUMfmiL8Q8SYhQkjP + nh2D/6o8hJjgyrI6ltwduYdMzMJ1G7JsFDSRn8SJ1QphLKhxmkkLIj2B/MHui0uSRmyW7NZAoMcPOdtF + A+pHW5eEN4UiLcbQwRqfP+k89TIUVNSgCaSuoKq0xdZtwHg6zZoh51gtXnkOuRazH9evbpswTetjaFmz + lxCppWm0JtxTaHcNUokPq626Vlt+gSmz010kfksBxjVnIEF8IQ0cVktOMlbHc5sehQypc2Q1AxMByvxM + 77jSw4Dc+txoNLrav8DhmElELAbNsV13nO25at/bj15rosBOd+guP373GJ6xI/6nvWynHkeuHepBsVcv + hIdOXfr0lYpnXweNiru09hrKqFZfBAeCAPfx59e/n39///8BBDCzAAks0MADEUzQwAEV/O8GAhlsUMIJ + KazQwgsxzFDDDTn070H8/ugvwswEmCA664JDrwX1iDDuPYdeJIs3OJpzjo3VADgxBvNwqo4WFn2w7KwY + YSQyF+/CI6qwEikiD8UUtVgsLGfyYc/Itq6soTiQnnsBmlpM4vG8KqS65p4am9EqSxfXXCAMKUMSMkdl + TpBOpygpQU2DYLBsMyI/D5lyoTjTAMolMUcic1Ag4ZEH0D8fbXJKepasQ0daOFMUFhUQtSC5Kz91TxVG + vf6byVIn37gTk6fGknKpSFEFVIjKQFAnEUPtzBSTdLIiNVZYewhVVFbqAwtNN3/ltNNgNfI1yCTzXFYO + YJPNctaPApIT2R6x0BULVxXhtEhqE42UB1PTaSeATy4V11tzVnTXUXKBEJaPcMFj6FhTuN1R1R/9lbdP + erOB9dp8a/WNGVyfTOzH4cySdlqCXQH23NnWnbjfVKEkpFtlJD6S4oIfnTU9MMeE12FCzOt13JG7Mhg7 + FjKuc2OVk1IWuHT1gfnVkp/d4RiGOekYrNjKfNnnFOxVergJhk454LeipWOnnpdW09yguzqH6B1D1npT + JVjlKOu4gOYrZq+lxvmvPP6LqtXss01oel5WsmH75qkn86awuP2em27cZCUuCJi+Ljowb5zlOE3BwRk8 + 0MLxzru7cj/um3FNHzeGXckfA7RKyy9ndjPNuSQz4ScYtfs219ETE+qFElfctMBZHxSKYgECvXQjH1wJ + ofEwz/z2PcP2KPlbYIes+VVhmzNRn2rn2zaZPKf0Xt85eH7nfHAFt3q3lWtGWuUhbnxy7mV8j1b7CgIX + /uKNL39zsrUHO/pI2IcvxkxyMru6tc129sPdAZfjqpZJyXtuaWDDtiUI+UmqXs063v32hL38Qa5/WmrP + IgK4Pyvs7VukmMUEEzi27XVQY6MZ3foqhsL5VZAl1/7DYP1St4cHImWHympFCBEWOhrWkDRHw2EGh8XC + B/QQZC10hfo8RcIjrvCGOdySBnWoRJG5kFRA/AwQLVjEDVoPiUnUYgQhw7sl9kiGopDiFJVmRf11Lotn + 7F0aoziSp72RjFSsIvlesh078iuNKJseyUxHREboAlHDE+Qg0QgXYoSwjTCMAVXC9rsylgeBHBwkE6+2 + xYoFUWyJtJoY6ZgreGSyfZCkoF++QUke2QSTBsSiKgP5SFdKD5aTPOQQTYk0VP6xj1f0IyRBKTebVbCS + dxylIuuozJ29hJWt3GUyiUlIZnWKltDT5SY52ahvftKF1swbN/noODOehmzEqP6mOcnZyzwykzXAPOU6 + Z8Q6dg4Tmb30JTOl1U1vRhNJUcrE+/CpRWxm8J/b1IM9T0fQpryTWJhBnSsX2ihDbjNkAsXfIo0ZO4rS + 5pqS5JMTL0lKiKa0nSBtEfsyuji3vFCbT8ykR8N4TM+M9CS75KVSaGrJYrASp9DE2kRh6tOYJjCWEszO + SsPpSbVJbqlvm6mvuvnOot5TqtqiW1VN6M9lPnFgLB1oHKc6OLDaEKjw7NpItxpRtKb1bGu1JVIaStay + mrWlXVXp0uzKT7zOU697/VlOj4ov3wXWpZIc6+ESi8iPzvWvPmNsQiey0cKKhq+7oixPIXJZieJVs5cE + 7f4rJTtZzkKLqhiF5WNNq1OaGfRuigWdaGX7DzWuMVindWMws7dar9a1nzOt7Awhm9tS5k64zSQSbimb + WZSuqHkuKY1zNYndGEE3sm0VZWf9ijbaPtVwSY2nYz2IBe9ZV0VW+lv/uFtboP4QqtFlmo/ce1zAnte4 + 3z0sZu+rEPL6tqd2jG9l2cuLDi24QSVi8IEc/GAJT5jCFbbwhTFM4QhnGD8XBO/u3Evg0PLXu7zlBChN + 8qlqQk2hBpZnej8s2Ji19w4iHvEZ40tf9VIttbsjqo3/ceD8cuVzwPXwf32suhYvGb01FZrRZkzjvipR + yEMyqYlvKQEg+++ZAm5plf7x0sEDd2ITa6nBlrncZS5ody5gfigLcwzAWzIPzWmOMYgR81PzirmQzpxL + GkBYZ/71OMnCRC333FzPJkdSUC/tgKC7Z2Q84xK5iIZzn4XK2pfOYF2QjjShg1tCRt/20q918k73KQIW + KyXFUgaknhdb6v5mWoQHqVyO2GzY5Rb61ZUmNXxfPOpbp5DTuRburpkbLxjHGthEDkRFqIStVftFIsmZ + YFBpnbVE0y+zt0J1rXOjanBzpdrCCTdqoLjt+mp71o82k0gGIsDatFohqUHXOhCibkkTd75a7lW89UuS + cot0p1AkbGst7eyLoBB8Ab/JwIVj8E8zm+JEnlm0xv5j7MYiec3pHJm+7wwRWzGJZQeQ93sgPu+E/9qk + wXuY9Dyt5tkeB+Qc3y/NV2TycWsn5aOp+cwR/rqHrUbjYQU1qyv+VZwP/eSgOjrSg670pfuQ5DGv1giF + HnV+q1xlVr861n3OcqmHPVVNb9ND3PzzAI+d7D8yu5/QAHbnaf3mbaeFB7weZqDPne1153vOhy2zkAtc + rYW3O8sCb7HBE37r0Vhx1uMl8e0+vcDsHsfjD0/1vLNp7w7sO8yE/BCEEswgVVY74UDP9bduXr7ihcvp + Ser4IZPbtEWn9uKDbHnLZj7ArLdv7F+v+9T/fba2Jz6yHy78jx+/Cb4HMPBpv0J76QdfaMaHfOd56HeK + xbf0kqfXm+JxYNjbmfTMH6D1ea6kQUd/+cP3fPWdL+MBvr/99Yf6W4uL/eTb//u3X/0pCgAAIfkEDRQA + AAAh+QQNFAAAACwAAAAAWAJ0AYH////w5EJWtOkAAAAC/oSPqcvtwYRcUkAXBd6uKn9UGiBKlzGGaci1 + 7gvHyinX9o2/dM738DnprEiJIFFl2PmWTJkS+dE8N8bisHZtVEnSqIjSDItn47L5Nj2rdaisNbWFr1Lp + tb2W3nK7sqqc54bwxVCXcXcYU4i4uKTIeHihRzHnBtKW9JjJkXdl5Dh5GWb5gaFoKamZ+ZnK2rLaKgaB + GiX4NuoJC5u3p1H1WnRWUrJXOjkIlauavJzIvBgQSIvMFVoN8OvcGNF2fG0z6zNMvGnLYpWNiI3eqr6O + By4oR0lq2e6Op1WMFb3UK05eS0Wne3bsEWRk8CAHePH+oTDnMKFCfWAowhjlTIlD/mATy0jsqOYjyBkY + jQmDI3CjyJGYtll0UTJjjJgsc6ys2eQmTlkMxY2YMCzIEJ0Td71swTAXNn448TVlRpRlpGj+/gA9ae5A + VIJTmHqbecTdUq9P2ZRNthUkkA4BH548tSLtuidJ29Fc9ivpWRdy9zbziybrC6y8BH8F/ADUBoN6NeUl + i/ho5GeTnVjLMM/D1cSVE9D1mrCxMpiQOy/oa5pzaoDUhFCqehcBanYDXeUQTQW3ZLarLfeG9Js17i/d + 2mo1rQeySGH7NgYmHfxH9DuzFa4dTLxx9UydyG7VHad0g1e6g2+ffv4ekMZXY5+urNF7GffTjNsgP116 + /pD7/scLFU8NP1ekV5A0rImRFFWb+bZQf3w5eAaB7rQnHlAMnkXXg2Z4xSF978EE4YEh5jSibLwM18uF + T2mk4YYNghjWJu6Vh16Jsdh4HDelObfYXvHZpgZTomlWnC1Ftobjh0kyIeFcDc3UExkrGtjjGkc+hENy + t7xFY41LMrnkDgB6qKRUFYloZXI9vHVYSmTa2KR5X4oJ5X01fQYkI0MAuBAdX+IQp5xJ0nAlKHy2pNaZ + u9lhxKFm7dWlD4H+Nmk21w2ZoJQd4YkmIoVqA2mkPVS6GqkZEYZUl6bqAI0FAbwKDayyzkprrbbeimut + jxhF0GY88vcnmGHCVmGuxq6a/mc8yVJ3bLPO5mrCs9JOa6wItLpKbbbabsttt95+C2644npbgbOiIlvl + OZ129lkWoiJYiaPPBSvpn2LuaNNBPy5rWldayivKXe/+Re+owa6HL6BcQaFcdJxQCcssb9ZbMMVhPkmd + eqGUhi6wXrzmjIAAE1xxvnNiXOBcP2HZYm/+7jnyGOAM/GjJCttb3xodGxnjuvAJgTIzAgJns8kn50zF + zdlkpx+lbP2BjsgZF6300UimKu/OKV3t88+unbj00ClTbefB3Fw0stbMkewyBszRjKDbE5dNNt0XX+Z2 + zypGTMShWnuUW4wxy9zh4OPVPe/RfB4aF1QsN+103ntG/q0X3GUiDvndc8fc8VROCQo0KZQLWbl2mNut + +Zj7mKjU45mX+iJHYZMlMKqqnf76oFznxrifrdP4N+CxK7tO6Sm6KVTXuN8+LHict653y20Pb1/IkHF5 + i/LLE0JvqxV2iQttjgYvfNKKho3d7keAtj3bzQ+m/t4IRS/99Oafv8wglXuBt6bt85ukucVPfumIFPlu + lCqXoA82DZpDWJhyQMREUBOxOd79aja/rOUHP/yLGjHYszUdHe5/9XufAqlXQuoYcIPw6+ACLUgafxhp + M5FooQvNRi8B3oZ1u9IgC2F0Q6GtT2zVgAf2soI9wlguMhPkjh8MpwXfIQRgTRQW/nROKLT/5M0a4iGU + EuOAxbsFCy5LTFcBqxY5G6qLcq6LHka6GDAoAqaKesqMYkj0DCruZymGKN6vZAdIMzKhjBjKoQmQAEYo + Ns5TevyhGgM5uqvJo4/a+4Yc/ULHO1gLiW65pGfOmDjQXQQzE9LfiSqYwjXh8EtBqOHjCLlIT97xcw5b + nTF6lUQUco9wOPuT71BCtDQZrZZ9UFBvPtUXpo0ok4z6pWE8FqRhEhMsW/zN2nIUDEKaqX/5GYX32gjN + +aRtj7bkTTeH0kw4nS1EGIHGA9NhJR4w02BYCNx+fKHJSnhJm+iD2FeAGUxeolGUo5Sbg8KXz6BNj59Z + hJkk/ngCzggFQ579sUeUDjoCCQXlh0RCDpGu5EpZCnKQ4yTnDYzIzkM6UaRO0hFDW8GmEfaNpTIVBUVN + elJjspNA17xlU7pDIR0qpKcjFOpNmzCwedIzS4Gg6UFeSkreQXVDQVViZ/74SRY49XLhkIhSl5olSvZH + pYwk3VSzmUuk+dE1RFUNDMfWj+fhdIezvGebDtETrJYyrWqN5L/KYyqiWECa06Qr/qIzgUDNaIB+5NJd + iXcPx4oQsOxA6lEdadg1nhNRj5CYUSk40r4mg4wMJOz8unpZLwHCXVu1Hg+508ezDtJnss0pMGQI1mdK + NBypLext9NnNrKaiUdkDCQTN/mm97OG2t/Qzw3LkOtffivWY+ITpkWrL20WNo6GstRyL4Lla0xI0rPmg + 7nYfuzTjHldurS1oFOGWIU0uh7njPenXPFqcJra3H9r7rEAxY7j4BvQb9LWfKg161frodyIecsSnGNmn + ALPiXe/6am4zG8UE15SNpTyvdt0EU/Y+OJV4DU2BDQyIBEYGHBPEbjF184kRB4mI3HTfIgZryRPDLhzX + mwyLn7rfYtKSd8OliuhS698hP1LJvk2xihETDf0GGW2oEzEFm1obJE+Zs+4NpWqzixQfMy+SWfQye6+M + XMaS7K06e4d460veMJ+lra9tbMje/DE0l7d6iUtyH9QB/t2KIrXHZTHdU107ULbq+XzeFYiesOFOPO84 + YH0qNAaLV2ZJT9dT761x2ei8W76U1EFp8dCWB31pDkdscHa5Mpb9nNWfuBi9hxu1oOdT6Zrgpoqz3rSZ + c+3ENGvDgXil9Wlsfev/hg7IMhZur/gGqjoNN4N8DucDkI1ZmT05solWNWzxSM2VUoa4nvpEpLsN59nK + ObJVIWA/O0tIu8SLUdTWrYvqkFFsZ1vbukQ0kycEb5HKO8PxhOc8SsyWVml60i6S3Kml6l9mPpymre50 + wadGbPCC4dxV3je/O91riyfVuHV0bj1pAet1AxEfk9O4FWSx8NRsh3QRxWuzc9fh/huHeskB6ls6ef6g + lmsSvVKo8DLpvfIbv1Ti7W3PzkHkUNGiupqAeiKnM8Txf3+54SqH8NMPnab2ApqMkBVm2KVuU7rAHN3p + tmnN7T3jNqsXrQPGmmYOS9ULWlLWD39C1rXedlRfVOlyJznhXDx2OrtYYjyGe+GPo2+P47qCE2+tUrUp + a5dDifGcjqbjw7n2X2+d7q9Wuth1fcmQc1ndXse1pz1mIbYHHl4K2u/NLzzU1KdCLrOGqhb11BJXYWtc + xC++8Y8/qxLgavjFtxbynw99W0ULXMyPvvVfVf3oZ//45bo+9mGFAoXLPo1lFTaPVb/6jlju4djs97KL + 7VwK/nX+BH93d5NtDty4st9/I1ni/pN5ak71TSlHMPVnY5Jnc3iXY2jxFOvnGBNFeB5xd6MReqJ3fxFY + beUEPT/FX6MhTsAHOP+BXRnlDZGHgJ0nQntHgNGGE4r0gNsGdBAogXw3gQ0HARUIeBdoepfQO+hXSezW + gaclTlv2Ukm0gokhfhY4exAWe1S2MJa2JuwXY7YVRkFIe3zFbzdodEeXPxmIPPt3gIYXXh6YZjvyV7JE + cdkBah2ohTpGfqvmeEdYdywBN/9HZAvIMGhockYog9cQaKSGaPEChm44VGAmhAS3dxyBeSxVQzQ4gn+Y + bPnTDbfXUoU2OHaIYH3gc20h/lKM2EkhpDMjx4XJFVP5RIkfxmCGSBmZWCdg5FJxJTxO52HxZ4KjN1or + A28zJWGQMoa7coeb54o+B2sMtRZqeIqJAImReGcoCGIsCIX29YLv9z3FFUQamBMiKH/NJSnJGF1C5HVy + 2H6WSIVkGFXNkXHVqIlD2HNgI4BbOIoNRVXgGFotKC+DaAo0Ulo1d4yQRFJ810nyWHY5uIQll3dqNgZ0 + RDsEtnv2RE3/UHv1mIaapVfSFXMMt2pyOIm+qH4M2WUaCWC/BVAfCY3KloL7eEXj94beqIIxIYUb6X5U + 55GISGAhaX4nCS+iYzuUVpH9AoQxJGMhh5CE1pGHqI5v/lcLzpOOHUIPash1SpiSyzhL5dGSzzaULwlX + VYg2jWJ32HGJFrc+p8RmrNdx3ZheMxQpfcdsXqiNNTk179ccr9cQOuWAIudSa3hgTvmU/USAADlmmBaD + bHmVdQWMRjlDAHaOgxYekvVxY3mC3NWPp2ZhHGllC9lwTciVQDUwtKMmQVGEO8mT7BSNYgiY/BiThxeW + gUNa2SUynFCKloWSKGZX5AhlSqkLM2aZNuSId8leLxNUiymQeYlYobliNLdOpRk3uLiWlGSSRwY0XfFB + s6iQn/eDFhmbxgkYgzeR5cNLuRlucNmPd+WIsjiSpJlqZIlYmKhh9xUgkJlND6RD/gdnisY2iaKSf78J + nNZEmen5MdfEnnonZClYUHzpU/iGjXqIl/e5Gj4YmcAGSXCxiu1JnkATgH4yb2fjSeeCIws6nrI5nP4k + SVNWHWoymNIZhRRKcMkzdYxpi8ExiMZ2nUKnWQZpRV1nk975BhEKi+G4n2jXnfZJnSzaovO0OAH5TNi1 + CqcZYTHql3V2W37gmgf6o+ZVWerXg6ggCbV1pMnplSRqXfynLMGoivangx61gfgpkzxqMQyalU6KS166 + McwZha8ZpanRojoKmoJ5kOmzOuTWps6mVSWBKawopgMJZQwYQHv2dXQHnfpiEoCqp2eKc+aJHIZ6qL6G + QEn3/mI2OmHotKNaaYb+WZ6SWhk+6KclYmSPp6aZKqNFxqnnkHlu8aiIGoaNuWJ40X8sdarWJqjReZu3 + iBKcwjK3xyFQOqdiZqtz55s46oxWuXLLGY+LxJzykDC7Kj2kap36WZvImqya6pmrBah1Wg526qCb+KQE + k51MxKIyQaU0xVptmU7fKonWcClCh3n3sSUrOqrquq4fiKbL2kztmgtQE3xN5WjlGqtqia7p6jgkx675 + GJjMiLA/t11e9Feuhx3+MqaFqq+pWIRA6WQn56E6F0JetKUG+4t46jUJig5CKqDC+WKMI6sE+SSEQq1h + 2pxu+Zl0Cq5uym4te62jhJSQ/hqfPkWYyGmFr7hOBEqoHLiyt+qzRAmyORmy/ZqihpKQNMqRHzWxoylB + KluJDLazlzqORwmTCugigrhcoHUZ7WROAjtHdKoxhhe2M7qhEWpEU3Yl5WKt64k/SvtBe0u3GisWLcgu + cRqzRKqsiaueioGPcURiYPm0c+gXc8tVVAm4YfBcQvt6tqeUFVe189iMhDkSGnq4G1uIq7pNH6uAKFWV + WBuX6cesuhpmlEusLvmEdJizvaiknzeN6bilnsuhNToltWodcku7aaq6u8tYvdujswS8P2tQxzuoulYU + yCq9hJiVeOpZ0vaX05AXopuoRHa5cgq2m2K9uZujHkqw/q2Ls+EKu6ULtbk2vrULdtUrt1qauiabM1Za + tr67uN+brU6Iv7c7Z9e7S1SKuqNLkkRan1MrvETrooMbZ8NbwPmbe5H7oBTZV1ZXETBzJiLDHtCavtr5 + n2VBugl8rOtqwOR7Zl7IwYrovnBasD3KQVManSZcwXfitDJ3fjB6o0jTuA4MkzVMtcjrvxRMj00hpCic + KCO8lh4sw1h7lkdAxNxqxM27Ez+1wqC7VjxsWeKZZ2lrxe0Lde/LaLMmEVsMQKeLw3Q4v/66Q8RFsCAA + pgcLPiKsdxhsxq5rwbmHSainxtPbeGAwruDLP70aq1mqvOErq2+sou/mIyQktuVK/nlMKUBVxVR2CsHO + 6qOuE8jTCW1dK8mYS3uJS1pj8hoA00pxmDxijKpYrMPlm7CjHLjnF7HjYJfaK10I41PZKLkP3MddPMu0 + fMUlSpPv9VEzo7gBWoKYTK4AasiPHLvFC2SFS73o+50kyocw6K2tlJgbwcmzmqpZTJXWjLvYTFK3jIU1 + W7eDB4qWKs37+8moGGJe7JLzLM4aPMCFUcJhmlZXinjCG8427EHFamfozK9WtiCYmsnKe12uzBfUsn21 + Mn2w4nzeh9EZTdETrdEd7dEfDdIe3X0VvdHYZwLd1ywkzS0kjdIWwNEWHS0urdK40slmq8CQbM/9l9MJ + varJ/gzMIAtZD2ZKHTXJAlxI/gabxMzCeOidv/fT/VxEKGoSW4OkS4245KySCOptKduU2lzETHymb1Qo + b7SeEF3TixzMRUarSh2qiKmsZ5mZ31yXryatcbmLUI3EoZyxbN3W2azNQkVh3fGJi0o8YnyuoCzE5tuF + a83XiG1fUDzNdt3QgjAVdS1Whj3GG7a6+NyX38bYjU3PtnzLgqPMXOprOEbHY52YZGvamn2web1o+Ara + a3x4y4yNXukoVvojPj3DQ/SnnMwYnO3aO6iMsx2pC9xj53rHEUCxFuoT8AlMdGzVo82orAohJzzMCWXa + G8XHkhkCJGvX24slDtpIN9zG/uJ23cYdzzoZze12tXgdfmitmfpzzH19skqs1iGC3aKMgcZTg/3L0GTF + yj75Sj7E1PgdcCWy32+bi039qiKIst6dWG/KVJwJx91rvxj4jupt3zw9rIiEy3k2wO3qOajrkE4nR2ks + 3KUqsRvO4bRtdvs810WCKuL9crD6dlqEW3dX1YLMzhkOsfr94vlckNE82LUTrODsLv/0ToZpSlpF2GeN + lYrdego+5Md9ce2d26l9r/SA480VnsdA1BcOy0A+dLpz5Y8rswAOg8tFE60M5Sj3t3Kcp7qZ1n3Ii+ud + 5hHcWd0NjWN95F9TyAPNs/BN5S1u5Xvu2FnOtfW00HJe/taaW6CkPMixfOZoruihLbJsPtlRdjxOHaBm + 3a2N/rWMHip6nubBIyRqnXmADRFFPcFNfHYvOt3qreo0BoIrI6xFWkY6seLn4cj6TOR7HkG5uq0BEZ5A + fdWoPs7VHU/BDr2Zzueb2sBuRwhuTuhf3dl1S83PvuKwLu2anNXUTWmpfKFkbo3d3p7QHr/wuLTavb/T + hiR2OccRPuzsK8Gex+5Tjr3yvtdrPlkyHkeeiuSkVMf0G9kprKhiFO6FTop+dsdiLfCI5MO1ng/7zuID + b6zM/uKZFFOsi9b6wHkNWfEI38JmbprfDu4Nb2GtCSwjD7QHb/JknO9opfKUXtCf/g2V7xyLI9Ndy7zo + oErAQ3jz4Lbzsj06WGbvf9GJMs/xzV7zRY7pZanzAQvyrzvqJwSfrc3F3B63MZ6hDX/AYFs7PaWY8LAS + 5yiiuJe8zm7qAIfvYy/24p6W3j1EWitT+AjZ8HzvZd60iE68HW71Ws1tOeXUUbbsZXi3xdz2X+95DN+T + Bo1L72k3Rmt+M5LicXPoEFj06E7stM7PEioaYwFDYIyOMy/0fx92nc/4mb7gR4TMhsaVKDc0jab56m6b + kC/2C07qEI1Q/sTjEAHCUFRqgQzsrO/5qQ6kDinZBTpY0g25k+S2IsmNdh71Uh/2c0/3V8UmqR39yWyE + LCm+/kYu92Lp+I8/9XPP+y+7UVX1RFihTF4v5Qxd6tif6No/7edZ445F49oexU9PAPARRbL9YZQxTHvB + wpt376tPHMnS5MJTXc/F1Yw0cx2NNpnMlFmY/RM8YCI3NB4PQuSS2QQondFWA0q0FXG3UrWElYq4QN9K + +92a0Wmwmp0dN2BelXw9pLclYTGej9D3AZv+AgEFKt4UDO4CBz0QCYO+FknGJgkbITNVMDXTaB5zHi+P + LEelRDuXOFNZUVo7A2xqFF9XN1AhbbtwX1d0e4GpgkfLFF+MSjd+L5L7lkeKhyOak6StO57VqI1CfIqi + e3yReAGzoa9/zNE11dG2h4Ti/t4/5imW6tHaHfHXHfT7ywFUE88YPwzkXJHq9Y8DQoF5HkZ8IvFLFYcP + 5NC5eIEhnFraDEbsSNHMSJIP9DE4RqRGSGHjFnqysNGayZNObN70M+cFIo0uI8H86G7mPKBRcupEklRp + uytlfNKckPQoE6YYS0kddlUpEK4nnX66EU0rRKGtvnqUUBarqa5b3x4JG2rGSivVdtyLKfOWQXBs0sbN + +4NtsJQqQ/W0UkQd1b1Ei9alZ5dPYMEkLD88DJWsjhgnchaWkpmWkziMLgMjDTDMNlQ+PU8EjayqVZCT + XScOmHoo79ktXmeMLfuMHcO39737Vhuzb7TOf+NYC6dM/mNkxz0xn4ZFex3o7L4X37Xd4xjrYrrLZZNe + AWXRm8KDj++d0qLOXs4TZg9v/TjKpdtYbT4IBFzHHFxAGY645oxTrT9SRNlPmQFRoxCEDoTbzgu6Psuv + Bwm90sa/O0DkyEJnTsSmrzcsKQaxajwko0QWVnuPvLYCTBGPAg08yL0WhfOhgnY6snE05NCbZEazdByo + SROZEcuYtWAT8rPBCIMLyQ+V3PFJJ79kkkrupoQAlBeJi3EOLUXUD0EvwywpTnsm+HGGaTA6IIcU1JwC + u+zcrBPOOZEiFKU6o/oLQJZK4zOARyGNVNJJKa3U0ksjNQTTTTnt1NNPQfV0gVAx/n2BU01JTVXVVVlt + 1dVXYY1V1llpldQFWw0Z9VJUbX1UVz6jC+dPM4zU86JiP+AxRWVrGpO6O/F8NjYZ+uxCmhpl5EVKMA0V + pNugNFQrMkY946FaSq7laxdqPsnxW1Xe3elGaFjU80p5BaWTjHSJXfc/DfGpilkKB2YTR3QTmVKJQSxh + aElx+hVBMQWne5jAeJfCeMHygKrEXorvHaFIfqMoS9GDKtOYG40tOrmvhHWI5VAsgSO5CbaOsvhilUOM + F4qejGzX2CrOnczme/xyY1CeIX5XiX/XjU0DLop25GiF6FXaXabhwzieiXmCNuZJqsawWQg3yhBdnWfm + Othu/p8uU8bhGNDDnH/YpvnDmq1F0e23DSVIbp4q+aPslw0mfE3pdvubQafFTa8SQ6B83M9h+Q6b8ZQd + tzzwWRadW0+ZLbhb2MTp7a7jvNvu/EKfpS2Z9KkAzxp1iSXfnHPXX4f8rpIpx8B00R3M/PRzGuc9oW+/ + luSdw2+5fR/a+vZb+eXh/v2UVYbXvHjbr0PY+uuF9x3mU3oXeY/vcdML+fHJL938wU3Dp/vFH7P65vfh + j1/f7M9XMpDRTjz7yl9DloQzt/hPTITiAetc1jr17e2AVAqd+8y2QAbuDIAXFCB9QHi55/gIWcygRy4Q + 57qCjbCEKDDI/Qw4Qh9FLIPo/vvfBiUYJrC5Y3bJ0pvxYIFAGjbEeWTD4Q3jlCsvhQSG+GMFJ3RmMkkM + MGRHBJcOp4aHXPFjTz/UXSqgaLGAEQsXK/SNGfkgtI2l4RBeVNH6noihBI4RhVb0x4kSYxdltbGAIQRi + JmyRQInZIYI5tOMav7NDfAGmkAT0XAyDKEQmcJGQYpvQIa84H1TskYpvfKQT5ZPC6ImSiIS0HyYXqUkj + LlFgfTweIJNTSpSdEJaorGIiy5iyRsrPlZCsoxwhNMha2hKNAnQZJ0uYDZuwrnw1bBAtf4nKYt6skDw6 + RDLd+MfkzTB8+humNMNTTV22UJlniSYJoWkmYYbykNOc/qRDrOnBbDaTet+UJRzveU4runNEzYhnJyf4 + SV9WyJlZ8qY995nIS+aohXgJ6DP1aUKs5VODCYXONv65nyYSr6ISreco2WlHfk6Ul4CxZM8eik+CUtSg + IEXoEUdaycqBCUTlJGlH8xVMboYUphfFKJxKZNNu4tSCN50JGMHpnJ+6q6EvSWlLiToviB4VqZiMqX4W + SlNv9dJ7K3XpVKdT1XYqFXtslCdK/TjQ/uVUp1SN5Fh9s1STApRGXO3qNhG1v3G9VaS8UUlWzUrXugr0 + rrtz1gfDKlaLpmaXiDzSSeFFWFAaFitsA4ciX8rAqxKOGhmV01OxGlVmFsRY0vPf/mb91Fmmsk2oQ13r + WYvY1IzBVTB/Ve1c89ZameKVfipDrWYYK4uSOkm2jkyrWudKndECt6/BbWSBusGt4052acZarkB+yxq/ + PpeVyfUhBl8r2Dlltx/kTZ0/mbq16WpTuuTimXnRAV+j0dOs13UsfV2rXvf6lra1Bexn7atbsHp3v17r + b1zkWt8A2xW5gQXde5vL2P9WRLxbXS91HVxgli32Mrclrn1v6UlzEjiAG+6pX/ErJxA79LuTfO2K48th + BHs4H5DVb/raSmLYdnCD8p3ecGsMYxbjeMQ1fjCEcejjUqL3w5lNsX90XNzLKLmCSuGQcUsiZdCWFbxG + LrGJ/nsc12RAV8iZFDE121vma1C5Nx0eMyPVPOQz69XLFXbgiSWM5SzLsMX1y3CczxZmFOt5NFqeJ5DR + bGRAB/q0ZCU0Uhadyjm7WNEqTHJcEV1o1dSK05DiVact9WlQj5rUpTb1qVGdalSLWtWnwtykkQZgSwva + zY/GSaTveOHdFgrXr1Yem79qyFv32sxcpjOkeQdsvvq3gRUhtlP7DLwpzrrRg+ZgPp6da12rlNKdU7aT + rdxsSGdb20Q2jQC/feNkO1rYknQhudud6WMHM906pnaey41ANZYP3vGWd7c/Wu/23ru2q9S39jhiaJxI + 1qhQFXiG173da4f1sheJRb+R/jjheVNQzki+3sPV6e/2nAyedmYfrLv8yvsa+ONinvjB8voxYSj8s9F+ + 50clzd+WWxvalXXpI66pk2cEpqGiAPljfy3xfMdup0Y3+dU0DmWOFhvMBEfwy9vzY6fTfOBRz3F9xM3y + iM94EVyQomRmjnGU//vr+ibH0Rc+9hnrayUmQwwdgj7lLUu9soqBGtZhJ/eulBFomCUh0HdMkmVYBmry + IO3aeew4uJcWJUWHWt5Ts3gyyuPv2w7T5JE+d+WqDrOY543m3dFYyN/Z6oOnzkiAlvbw/EJAUgb9ylpv + ZbEEL0nFiG58aN8Upt3ews6lwTJ939sz7h27w/f2gEKT/nyuK3b1Mfa424gv8vpUx8bfCf5Nsp8OyUMf + beZJ/PJtLpLrOx/4aBvO73X0fcWvn/6nT7Rspn9yYze/6vW3P8BNL/48z7TG62/Cj+ocrvtOhI/2T7vE + jv2g4yqwAP7iRP4k4gAP7XNmj866Qe0oLP0ccH50LgI5UPk+DwTL6wGtIf96LvMSTTdE0Ousj3kAYrQw + MMTWp/MKEAVnMPJU0AWpSQdZz9xSkAYh8P+CkAXnjwh7xAjRwQa9D3iUECx4kNGGsP/0btyerwqh7gRH + EAiRLffYrgu/5AYZTPhMwwxnq/p8rQy/MAvRzAOp78l6cAd/8C2+4griJwUSLATtMDAG4yIPFdAAKW8M + CXBZsBAPpVAO20wGD9FC1HAA+S8J8awByRARAw8MkWYKR6AAAAAh+QQNFAAAACH5BA0UAAAALAAAAABY + AnQBgf///1a06fDkQgAAAAL+hI+py+0XgopBPBSvxjR1Q0lAmEEieKLbyrYua73yTNdubOf6Hn9PaVqk + UiAFbodM8ogjyfHHbNKADl/pSRIqt9zDswsOv77isq1HrRLTI87EaI6HfU0nC1hit6JBPlktF7jyJ1jY + RWiYCNe2ksZnwsSEqEi5IEB1tSfyKEPn1oAYolJZOUl6CoOqamDBObEWSQJruVoLcCmaYurBJZvLSZbF + axu4S3xsfAzWuvfmcRIblawMJiHMqtlrpbeIkvdKbTYdjjpOvpTt7ezsiX1eCJzeW9dOiwG59h5mrp/I + 3z9Fk7V2Q/pw+wfQRbw73ChhEaUloRKEEsVVLFNPiC/+a/fwyQJ1kcslB8kylhIYkkdKYhRXPsDlyuOm + mfQ64AHpMsdInBoakhoXM+eFlkInFk2C5sLAITR9SYHA86hCkgyDFgIqdQbRrDq56khaZRjUjRBHdfOq + tCFQn4qmsUV7Fm4xuTXAdnJKT2xcup+i9rQqyC1gulv53jA8JsjfZ0sHPt1QOCFbfoPllKwsNzJiyJsP + mwXEIQPeFpqpFaT64m1PRmfudB762mJszlBT/2K7EO0QRBQ/Vi1L4/Jsv8ONFoddW6BNk8h1Q+CNZLAj + zAlKHmdQ+jqC7FJxqH5W57FWvpOjq47ynXgD6pm1H3IPKg/78FZzey2f5C2fXJ7+V8P38p9xATJ2TVWs + 1aWbK9y5oh9z9qQ14C0RIsHdUa34lk16L90H3RYMNlKEBhdCMWGF8JlYlHcOMlBgcFzhp8SHGyzX0EYa + TSghjl3p6I46tqVnX04wxpjRfOGFRiCGEaKoHZNCPXSXhhsWpSBG09mwXI/eAIejk9d56RKUnSAllE9g + hvgZliKc2R6PrbmZI30ZGrlXRVXG8c17K0kpIJzjweldcga6pp5kQVrJ5yAurbiPnwj6CZNomDGaikRr + ViBApppuymmnnn4K6qZzrWNaY5T26WhigJpK3ZqhvvppSHeWAWuttoaK6a267gprCJxGwGuwwg5LbLHG + Hov+bLLKLrurr7oCWxqbMU5p4Y0RnVIknaqmKoO0KYnZzBbe6jBkTn/okag2NQbG7Z+QQpKaSP2IRm2K + LF6pCjeOWdZut6kecSqt+lgzybgCa8GUttOup3Cl/fbnJsDpyktOiw/ai3Bf+YIWh8GxeVyRig2rVCoF + BWdFyDYjmxcWvw9DHLHG4ZJZahsnd8fxxHNwojPML4v4L5IK9XyxLaLcjDPDjREj48E/O/zukUNTbPQH + SGOsdJa1+MSluE+Txi0akwYM9SpWN4f1vQeuvMN5RKP2taKOBnpXDtIckwnc1YaVT9Uzsr1d3GXHLDVD + ehoNoN5pWyszKisy2nWhghf+HfPERHNUHdOJS/6tf41j+51Jo9U7ueKEz/f2gZs7fsLVi7N4rd9pAeeU + VSB/3C7Zn5O8sZbYcWUKuqY1QpYjQJeOtp+6+2g35YoA4fqTM8KOdzME7Us68s7ziEu8qXMeCPTJS++5 + XmZrrZRGmxyvvek8Lp+m16Tokj356TN+vqRBYW8F++3/nioHrQ9EX5kf/dxnrr+9AnBtk5MC87IlBP7P + d6viWbwKWIkDSrBzBBRa1fJEPOxtySZeANJ+4IeY29npe1jaHp4yt0EOTm+BeIPGD/qCG1YNcITFQ1+J + cmc8Q9zteYGrXwI7SKrzCepamACbTPTHFLV1CYgJY6D+uwRBhei9rmXgYBpNzFc41Y3PbixEWQCB1ZET + skuIMARfSLASO8RBjnq08ZAVjwinDgAMTbW5oxjjFD4NuvEia8GfF3fImmzJbR4/zKMe0ziWMg4OI20E + IPCmskA/qilPo0tiDGsgSfu5SXwhgoUmlwjIUIJndZZMmjxWqYwe7q+OdmykIxMnn1VIiwhaFCXxGCaX + yLGSSEoajgoHdsCbqIJNvByjL2e4HsNYDEwoNGP83OOJspzSZ11ophHx+EuOSdObZlBlyMKITTbABJUn + oWQlXRgm29xvM+S0UhwNY5fX6GuINtRlOd8Jz5X8IybblB0FxYAHc4ZDbLFhg8X+sAHCZSK0ngEV6Jhu + qM/WweOhfGFoNQ01E47mCJHlQChA6/TMEHKxM498XkFZIhPEFG9KkrIFiiTxTXBeUIoNBWQ5RYpOS2XS + RuQpJmo+ejgPoXSYewsIHTM6rscJc15LqQlEXmrAqV5MhD/p5lKZusVXKqanBmuQQsNn1QKddWez44/D + tGqICuH0kzJ0ahf1edCfQgGu4ZClQ7Gan4h6xEULZSRYi+iVragxo3n9qQXX2k0aHQ2YAJlpBHV2TP+R + 66s+tWYL7ypTjVLiEXytoTPFcw6VdfJR1MgORSta1ymgB7AGPClarQVZpZ4WtX3NR1VpBsZ2kuu1nLUo + GZ/+Spe5jhYamKBtA3fr3B/RwVSo4uMpNKPcVl7yuPdMEHE3qi87aZYxvc1WKL+Q20U2D7GDjO0MSBvd + QIYxs/Ok6nhpaFo1nLe7bOxs3dgLW/e+V7/3mWbF4gvKoAQvvfLcq/yC65DNAjjAb3yuOKk01sP2Dpnf + 2UVpseg2SdKXekRJgylGnFRQlg/DdM3gO/SnXv0yeDEy/nCMt9ZYJObYv01dL4mOEhMUI7eGfLLOjH+8 + Ut6ytnoltu2EXammB5ZpVrFEcDi39Rcr7w6VIiavP9/7XQ2ndMA0nnKLa1tlwv7tyDw15B/flOGSsjPJ + JyZM2wCjZd1qN83VW3KWQXf+4Tf7GXNf3umOeRxWMq94hVoVMmUNesW25hk3nsRgBB2HaCRn+tDxZNmi + DXXj/G5NYYXMs6Ctq0oVIW7TyK1zmzytaVCH2oua29HU5pezO4qM0HKe2Y4dTTVYJ7myTjzwqi3ta5fy + zMaqCmktKPNkJyc6yrFGZrErpkQK/RfN0WzU2noHRzGzutOGHXaVmc1pTLOuujoebTv7JlFCHRrYD9Yz + Rnvr574Cmt3QzCCbMwdvXI9bUK6Gi5P2Z2qMpoveQwaxFRGyrtu2RTwJZ4RwxMxw4Hr10zjO9/ASgdQz + gxaWL5z42hKegYuzOuPankP6/l1jorGc5BJPsbzVh8X+CM+i0OIsuMFNSuCKfyB1M98yW8UwUNiFHJPJ + Hk8knl0+n6PFSwyi13KXXtyOw8NpTZeCYwCbKG0xA8JbP7Qg97xdl0vZ4d6elxxgjPQxmdLZ8uU4mGnu + 7k2TUuQCXliZ6952ayMKqwNVGd4RxfY45z3TZ6dw3xemn43Kxr4TvUqUSDhyPM3yzsxFxkqlnli9Urrs + XB9YNdCN7N8IM75cI1JHYPpU0If+n8yJ7kuLnvkGwrw3SrZuzf+p+HiTSvZpnyivD396wq/Q3v44uhCx + ehrPX4v4ntVroCM7Y9zn/rMRVjvIX5rQUTO1dcwqv/nP3yyTgSpX5ncW+t8P//X+sx9Z84+//TtV//tn + Clr615T6+y9/ogJL1Adlmkda6qJl2udmKiZc/bZ2pEcr8lFxrIFe0WaBBfh2whNYwmcpbANz4uZjINcx + twFT0bdy+LRclXZ3PNeBwhZX7kREFoF5sDdWBIiBOUd2t8aCQnVnDRhZixd3jABUb8dee9deOiV58HJ5 + H8h3tTZcPnhvOpiEAsNcq1VyWtJ4WYeEzzcWdTOBWlgzFtZ8xgeEOwNFRvWCBLdbPZaCVtd1NCgrPdh9 + 9fUj3VYNI3gbQ3iHq5OF0saGKeh7SYJ1pSdew2VlxtBcYmVVpycOfsV6osVHNjhtpAdfX3htF+GBc1ht + KPH+egqVWxdyhoMoD4QgiWP2fYHYe/2ggI9GbSa3iYOSRppUUD1QSno4eX6YbuTGOtMlimO4Jw2TZwum + Yg41Z3LYdvyDesEmbqvocf5GFhmYjE3YZyHoi0oTENkUUxsYhG2wL9HIbqVoioD4iL+VenFIjWlIYGCG + jUVAjk+4jTSSVghGBuC4hdgCePjAby2YYF2laWOzjjjnjvuQSxyRBR84j2v4h+pmgNfUckJiJEwobh/F + VZUIjAUlWTEljxXFjGqWL+Zki8qYEjqTcAuGOjVRjF4XkGZ4aSRYjcuIguK3h6cWePpmd3Toiqw4J/3j + YK0okF7GQy05bhvpLx0pitf+sHtuByGGpomZREbKxDfaAn7RIIEyOZO7IJRYlm1LqIHoiG0O2G5AuX3K + wZBh+YDYtw6scpMn+JJOmGWlFV8KiGeKtpR3mEttuW2YVB/ooQLwyJVq2VF8BlphB5bHdnOFOZivJ1tD + 9xuKyICsOEA28pa4eJVYCZNPVJJ9WT0Bx182iZk+uY+oeC8NMpZyCZBCOFP/9gT0qIu0NpqcuEapJR2t + cl2cOTR1GULmNV2ONXcfcZQXmIureUgeiJoJcpuz6U41NTV/NYixOVsF2YuKsib3NXt4dZhdeX0LmJYq + mS50B0HRcZJ1EAqW9ZpWmUINlZHO8Xf8OHhUaYemWZT+hpMyJumNrKWawEkecwlkBFWFUIh9hLadVQg4 + eZlXMAZ35dZG9fl4wYSfVEJQg5Wd2vAU7ViYz/lAWBBJQ1dGtuOSa0lPhwgXCNd5BmlPAMoeUfR90Rma + zcVCGjpv5UmdDwpkWYMh5xmFK4iSF0WhayZmGDqf7oKgFcZSCRhMeolfqbiNlZeDCnd1gQNfSOJcMUCe + HCpN6omeELZzr4mkiCmW32lH9LNsihFdFhClf0lPxvmhT3dPbBZuUhh8s5OkteSb9NF57DKmdhZaZmp6 + hoYusWB50/OQ+CJr0hZSJtgxfkmmU4qnL7aEONma9XZDf4qmgWqBfMmlXvOjQHr+n71WVNd3ZIKRmEFE + bNvjlFrqMtKIqUPKgdexT6NSlqpndLGEdtxYD9vZjHGakC+yg8dxgKUKeBCpcaEROSXKkUdon/eRq8XR + pIX6hpyYo4yIUsJQEMIaabFafB8Kdf9hQcpqOJvUqJAGVtrUBxc1lDl1g1lhiavYrNl6i60qrtwoeCFy + LiYYjUZSp69GnNfKYTG5mY6anrIFrAemTm2WUGGnSRLzcwpqU5V1Sou1rkS4ledmYqWJJscXbx95TtYK + hwALdMhncy80q2HoCXYBqj16CE00nQWWsRqrr0basdA4W9OIWvl0V81qV6QajkIifaYniwXKqmVoswLH + PKn+NKskqy7YaVzGmrMvRrHEBKNsuqy+SnJlITEU+UHBYInlyGJJq6hX+6uXZ6MqeIrggaKg+ar9ZbXV + GqPKgK5cVX1kVqJfmlVKs0dJaXvbMKBtm5+tpbA0m6jiyptJyaiJxzAjwq7mppVn03BHKxVca6tZaa9f + G641uq+0lzXrZGwZFp+mqbhpq7f2xbgN2ZiJ26aju56hGVRsKR6Zi4aqiKvkIJRQO5OQy7FkS7tG6xpV + BwI70a78yUN8e6Rm5rqhCrvLYIy226AgFk68l6rA2k+EZK7vsLYsW6ykmYPHy3RKmaIgGLjVKbEAMZmi + m7D6OHXaaLSjx5he2b3Kq6n+f3axZcK6ecqem3uOu2O+sLisHvSbYNunxdm+i/K+gve5vGMeDDu7rSKY + 7Ku9nwC7grG00Au8Diy8dgqnC6iu92u4BIKLZMm9qxTApoq6wRvBHVyrEkbB7Wm7Foy/A/em+0tjIux4 + Yfi/1ja8LSuGmRde1+m0jPq9CbzCKSu+May00iu//sqxgDoMfHqW+iklEeusv/uV57DDMzxJ+ObCI1yb + +puIEWE8NVKJsltI+IrCWiup3gtSh9qUmumZQyu73Tpsa1q2xIu9ELx8zktsUgyS3Eq6YrSnd/nGj8rD + StabcQzFc3yqQWzG3ul1XExCD8td/gqJD0i043q9QKz+qNNbXo/LeQMro19UqTh5OWCYJpFMmYVbWJRn + ySUjwdaHMCbKxjjnhkTMw3+1oIFJx7B5qxM0yogctOozlUJ8I1YohZ4qthuMarVMk7eMy5cYWKy8kybZ + YJfWinRjjbUYyNsqEUVnx7aWzMO6zISaNT95viOTN6drt92JpSqVENhcxcq8zdzknaO6V5LFNd7sadEp + z9/QnJEau+g7yPiGtvB7sD9Iz7z8jE9siNCjnBZjsV1Lyp0Lq+NbiJjsej9L0Dxbk9xH0cGFnLQ5rYaU + zdKpkCcbxOvMzcxXGfN5R3tqWfs0nIC7y3LsrXgLmyTd0Vkaz4mcw/MrOubly93+8in5h3/z938ASNTx + x39FjdRJrdRLzdSb4ixH/dOYon5DXStQTX+ectTAAtRYnStabdXEQqwZXcqOG9CSccjO19MXac26rDEf + lpu/QMM4DMJm46LtXNMTnMdgyiehJMsKXHUqujT82q/6IGQ0bcWiJtEb18NzmtM1q3irC82R5CPfYw6G + /cc2ncp27c4/uMKXs6KxoLuUmqJVJIhYK7mU7LOJrdkgXbRi/a912JRCQIs3IaDs+HRsK8kNPdb+1hk7 + rNrzcKX8HM8Koy8MNUI1utF6bdqo+NGs/Xtnvdq05Fg9LCiR18nXiUZSA1RDu8V9TK1yvdsx2NvRncvJ + N7v+STzPru3SHIBezsYltMPJiYyGCvbM6bykuEPe7IzZ8buXNtYzXDO18EJdqDaqEkhStavC3h2+Jzob + vg3RXJjXGGmYk8zejeOc6XhyR8weSde/gvsaDi7SgdS8a8ZsdFIkPmXdt6nJrZzBRYramlccIP7PGaje + vcvfUBlNFfiKMsplRcbHMA2NxyHjMt2rtR2h+6nBm5g3trlJM0jAzm3ChD2FMZ7fUxzkCK469OJWGNzT + gIyi8NyWpuSuqVgZEHfNU25MVT5r92jABS2I4cepduCGOdQU2rQ+rzy5LQ6+YgyDQq7m0h22WM4LBj7N + AMpb++EO/vmlA57hFg0O9E3+vf1MhE3y51AOfDV+3d+8iErIGLNNuoN64SuJcIAexmDc535e6eSa2lFO + 4Zy8evgcuY9eVUapOyvSEjS9S5xb3qmevzh40Z8FV3ce37xcOAO715D+4+GN1l/C62Ht6xxtiK35mNzZ + vZwO2Sfc6+dt6t7nHkOOzPa43hNNlTtE7TslWL+e4Hu+7Su7KPTa7N8d0m0mcHX+37F4vo172nwOoQ98 + 17w+cwJE10LozNas0hOu5xe84Mvuv4f957jXNBtLWaD+yfKO8Nme5Ou7cc3Nwu9+2S5F8YrdbVV0VqGD + kMK97rpl2XGd6nBJpOom8vYE7R2vv8cKef/BcqL84vv+ZrMTiEjAnNEHntfI7tgOLdAkXbDH/OGA6aQN + fKIvn97p2PKsDsrbm/DAPSDefrNEttA7zr8anmASOu6WjsBqa1IpL/VWvvKMFtiiefE0VcENxsj9br/6 + /s5mf8fN7uBElYatx4Bxn9uR7sP50eXQHe/jvfDMu0YrA7fUreq63beuZ/eCDe5pHod87+IkE5V5Tuq7 + S/cuSOkwm/SyUr/3MIgLoqVqXAX1usYnL+7dzvEHH5zLNho9FOGmv0Sovx6qD/g03/ofd2VoX+kgfiqL + 5ZxBFuF8o+3SrvucX/Xszu9rXpmEH9GfSo7G/9KGSSm4sfz1HfjMx+yVLKUh6Y3+YucG0jHN4X4kdtD4 + Br28Vu/6ry/ztmzOwIR6hffeYE/sXaT+Hqz5vLuBkU8A8DF1Zf1hlJNWe3FqmXcfwFCUQgC8NmxMypI0 + YWQMgPSxvYPOeQnvHS7gkIj5FZFJ5fC4dGZ2k9NpQTU0DVGWyGradSE0YVZ8wJqL2mfnTFSv4b12nF5n + 2vERrpXP9X73Glyi9lb+xAjfgg51qGga5mrc8lDiFCkxGTI3OSkiO9cKHUcRRVtMUcF0KmYavyQjPylU + QdHgLmspZXN5n3Z7n1L/Dv1c/QAdkbSSISd+9XBBnzlogeumrbNzsLWTUMm+i2USvcfJNua4q7olLdnx + 1N/+5SHi59MKEWwMt8CXABtt0ZvUrR6raPbuIFS4bWEtWrJGBRtjJZ2bg5wKslJWjV3Ghu88frw3Jggi + Ol0o+khDsM5FkRlCvgQWU2aPR17CrMoUpeJAbTQfcPwgYx7QmtKO5hqE69/OgAKHuNxktIrUpBGoXsWU + VSuKV1VxbuLpbOVPO0K7Qk1bk+taZ/uMWQWiKCXWstnaKkC7cK8Gt2xryoWzoY+rPG8EPXVAU7CdvHob + d33818lkJ5ErQ256WEHiKyrvzjyM+aplyklMn/7MwvDozn7tKsNLiXTS1KoT4qZzpq+URSVf5wMdmtft + GLo1IUdonLLRMiR1goWteLH+bGu399aWx1w5zO6DveGDHBTxdLVRZ3PWo2L59+3ufYUnpoZjGfOrz89N + j+di74/c4fMkwCUYW8EQ6FZR44iefBKNPxK0I6oXAAeMrcIiCuRjvvrAWHA49PZr6QL/NJvwwuuUIFEr + qpoSr8T78LvBOhT5c2kKzMRB6kQTdwTCuRyJWaS849rJzyazarTEpFwo7BFGJ71bT4WDEIRhyCex7EBF + x2ijRq6IamkSyhjHjHKkF4QMLkvhQAzxJBwFQybMMjsRs7SNpLhkCjXXJDOHCONTL5Rl5qRzKkM5YCxP + PbOYTsEP/wQ0M0FT3GdLJex0MlPb8IQmqEbZJLJIGfX+Y8m1Skm6FDVEt2LVzLn6Y+orWzqE9ANJCaQN + V83o0tFVLn+1ABtabKxmVlr5rA5WUyk9c506gwU2WrJGhKuvKo9d7UpSbdoV0y4rJQ/aaePY9KhnWjBn + 0d9qVYVBHlS9RtdwP8WI3HLvtXCWpaKDxlgy/HrIVi07mle+eg/NN1CFk9uXPoDQ/C0sP/sc9c+CwbVI + KG8TZXhSjys2hp+JxUWYSMKUNZJgZh+8J+JMzD0x5pc+QXAPCHPqV5BLBOjZ55+BDlrooYEOgOijkU5a + 6aWZbrpoo51GOgSloY7a6quxzlrrrbnu2uuvwQ4b7KmfFoHqo0H4ueqeSQ6VW3j+MU4S1t7i9RHkb+92 + uyRiS5nF5JOrtLjhi+NuSdIbPRUVnryRmPm/Relq7F+IJRHq3aEKP6lbq4BcnHEiHG8oEo6JZQ0NtFLg + +cjMb4m0cyFxzO1zHkIXPU+X9TK98otSTxlzlt3xchCD6rZ7djlmb2PPTiWMToDA9U52ZeAlgqJ4jjs+ + nvbk/cVeVJR22Nmly6kB6c3y4R5Xew9qV6gJUcpJRkKjQR045Jfd9Ic0QIuXfX0jPvc+uMgGcc3bWQXI + xx7zVW96Wuqf8f73KpAdoRUMfEP4oCc9DVZrgaiyAH0i9EAIRlBY3BtPBrvVthigrIQqUyD1Nre6WzGJ + hAD+ZBwF5VS9XnEjgSPqYFRwxT8a1rCFeaNgvyRywZsozn7ReyEMGyjD36mPiNQy4rOYSC/TLakS+kIf + FKc0oynaq4oCuuJ4HFIDLhbxbV9EErxIJ0UylrGJ5MKhQ5bIPi+6kUZwLAfhfEVHF97rByKEVUF6+EHv + gc6PfxxjwgTZRoYVcpHly0gbClLJEVrvMo+EZCQH57FC9oJ+KuziID8IxnX5w5MwA6UkFYYDQx6yfmyo + o0FUGQZNZtFvQ3zlBu2YO16kDVS1wWSp8tfLUERxjr90IiF1p5RZGfOW+3qjb0x5MB/yyJnUyZc+spEt + PaJSkckkzyyl9MRCYXN97Xv+D8CsUcAIJXKbfbzd+dTZuj2+0p3duJk2UIK8fXLSnjjDZz2VdJB+nmah + 4eTlMDUkUFjy0Zf3DF4+g/FQwfFTYWZ7z420E75qaqSguhQRRpM40Eg2lBMFpNhMwLRJYIbRQda8RWR2 + mb1ubrRHyCCJOz2DQjb6DpDF4eAyoeBBnXaTpWdZ4/3s1TcMqTSp3CRpRqtKQMw0NS1clRtRUQTSxlEV + pc206FXPmsrwqMqrK0LUXoBqJaGecqIUpaJN0Yo/tVr1l2296Uih9TqJgrWogcQr88r6yb46SayAPZRL + x0rWo65zr2JEqFF36te1WiWum1kVOWlK2cNaxK6G5Wj+T/0T1yDlSrKXNWta84rGxL5WkJrdiFw6+9TI + gnayd1WmZWNbUVDadhIkym1OeerNwtJWr8uarWJX2lMbmgqdoI0JchGYVcT+lq/R3VFjVIvdlyrXgcLl + LnHYWdPTngi8cRNvcslbWl1od7vpLGltvztdJL13vP2lL3NzpsX0qne47G0vs/gLXwX/15W9xd15Mbve + AV2qfb3zHG8rC+CSpSjD3aUjceVoRuomWMHXJTFh7QvcAN+3jCBOH137eGJ6MrhVHX5wc8374Qtt1b0N + riszazxaDuM4xy2ukH2Gqt4Tl7i+810lUlNMYPxOeEsVplweZkxjLCfOcFWZq4/+Cxwg3To2yNWF8Uy9 + ZNorO7UwRVnshGtpxf2Y+cxo1rK0hCmWLxe5hi4uH5JFPGc1P3OGzKUzcvxsj0RPCdByrumh60zoVl54 + HEsGTJjhI1gU+9LSfSqQb+EZSwl/R9Oh5Cak9WvqFEIXicHEtHsG2Fofd7piQKH1+0T5aliryMpxBrWk + y8tqX0dr0T/MdKpPLWWoupbS0XT1lOEc6UKh2pYYdnCzmwdN70Y7u2+k9ab9C2Q8Z/vZOj6ytHVE7Wpb + m9nywqK2oZ1pwdSOheaM73LdnWd4m1vM6B6Xusf540iBudXE3na/k4zZb5M1KzJ+d7mrWOxUztvbxrbz + wLH+rVFWSdzeuBkzuP/tZnYTNN9rhnifd5zwaS/8lm0BuN5Ybjt+IzzQJnr5YFWt4oVp3FUcZ7FyOMuS + mDv64i/GV8FPHkGf2xjkjx16y/+6G6Qn/X9LD27TXfl0oi9b3Ky9uVuszmfkBH02X2eC2Ky2NrQLTe1r + d/vb4R53uc+d7nVPu93XzvOOL3jV+NK6+2Z+7K3P6e/dFrhzwVN4RRv5yFJx3AFpJutGDkbxIidi2InM + dS5VvuZFn7wvOP9OlJ978IENfenDjcxgYB48l085mTd/+s5rXr5AZP0abh9kbh++3VFqtEzOMBlNivRu + uXcy6UfOq+UxBCeyRz3fVY/+O+PjjYTTly3Wz3n9jpld6slPsyOhjyjrl1zM0fhFTHlVbecjm/Z3nuL4 + GVl99kp+tVzu4vol2P7QAlH/O4L/0anM2rYEDMYn1JrD+57rv/5Ppkxo93Ku0qxnGXjHAA8QAcupQYCt + 55Rux8zPoEhuGOyC+wjO84Kt7/pPZjYwAA+vbvpgAvXOrSwQlz6PBMdkAT+G1FDH/kgOroYNN4Iv6hgt + BycpBXFQoSDQ5I4q1thEBAct9Waw0o4htYawnWjuBlLhgUrBCLNJN44piXolLPYs/Gqw6spPBzcrgyBv + QLrwMpYiDGNQDclQ3vZml1ykCuqtQn4wobDHBtctgF7+zxzy4hSYgjDwj7WwD/Gm6pu0ZwGjMI+80HI+ + LkDyEPgU8Xj48GYsQ9OeZwslkf72jk74MBHHUHOwJQ2hZBIjj+qmcBT1sBrukBUfcPFUUdRgcVCUkBA3 + 7g2bEBQtsUwyUZy0pRAz7t4sTgNvyBcxQRFw8VfW8HGmJRRxzv8yBjaE8fhiUfSCBRq35xQNhhp/pS4O + 8RM1xQ/H8VS8sRLDUdkMRRsDrkeMQxkp8Bl1UdiQ8YzcsRtppRqbULPYcR717NfggznoQ3yKzx91T/wC + AyDdQyBd4Xn0McKuMZfKMdfuMRkBYRN7kffEEQUnaCJHo9QoMh3FziP5QiG7g0J2IGsRNfLnSHLf8BCP + Rk8kRYsXQ/JC7OQhsZEGR5IjV/ElxcIJ7TEiN7ITa5Iod+IRmPA7sKCt+lEnK9Im/9Ehy4j4hJIledIl + A7Kldmcq+8urmjID1/EqdUUqde0ED5Ib0REO9SwpoVImTdInsVIpW0oJ5aEAAAAh+QQNFAAAACH5BA0U + AAAALAAAAABYAnQBgf///1a06fDkQgAAAAL+hI+py80BDwzCmWgzmIlfPnkXgknaiabqWq3uC8cy0M72 + jSutaJVS8OgAFUNGLYdMzkqR46NockGfRcwxNB0pt0gn9wtmhcfjna93Pn86CzXCS44jMR44W7t5ZUmb + vT0oF2jxJ1jIRWiYONinorZH5JZnpEi5QmelMfTY6BZp8CeyWVk2WpqDaFpZIfoE2Ybl6EmTSkuCdYDK + iAMEG9LgdctXG5c7bIx7XCvACngnVJXl+5tcGjybISt1yXzdRydEDVYcTjtODpbd+tHZAJ1tfp7jh5pu + 6V1/9TPFHe8C36/oH0B5/J7d27NP371FA8k8olePlD52DW8IrCjoIsb+GDyw9YoAxcdHa9M2cvHj0dS4 + jibFtDSm8SULlg5g/ViXx6YkPA5iyiSyAKLKFAV/6jBaDmmYVdxApqmyLljCDD6RokxZamVRpZ+4ZvV6 + aA0aZyY+etspliFYFA89bg17IuLabnMLVa17VJcMsxOBUsWLbVKmt1uKyV17F/CLxIpryGUJwldkGIwr + to37dbBitZvlVAbsmO1TXgtpuux8Nm9cwjdnGEZdEjaZz3jzcZQmbezfzjT/kUSTezFm2UGJzzZOWZi2 + hcwtbjYdk1+aGLlYg6WNXHX2FFesa/qWBHuyyzDSRbNe3TpX8dvftOfU+jbPTCfY13Jzl9UjkCr+Xr+n + +18XAYp2kHx6CVgXfjdsIktwu/UwoH3vSXgdX3poAhdY+OVXE2bcMFWTel5RuB2JI/ZV3m84mJgIeXt1 + qJmDE9F0GGgDZnhjTwbdViNaOnql4II0XrhjVDoFyGJ2SSLlRI9FFgZkcUlMl6I0Tar435LGafkTMCL6 + qASX6GTBHhNf6iKmTGmitmZL3ZFmyXfiGBXkFhiGh5GTp+QYJp8aOAZVlXrUR6eUJ5lG3UZ6Oucnno3q + iJt3i6LQ5oJgCoBppppuymmnnS7llzEjTSrco3uaaoRkiAaGi6euvurpS1cVBmuttnJKwa267lprCLjy + Cmywwg5LbLHGHov+bLLKLtvpBMI6i+mcJs3akJdtVNPJmdyhuiK3gtmSIjGKUgsQHLGMIuN8oHrrGruG + prbccZaRW+4rT7a436qOupscv+6Be06l8Wo3kLkiaWuDKKT252+/DQO4sLgD1VmtOmmhyyDCDz58WsOA + arxuPJEI7DA4OJnSoMQcd+zvmy/Ke44nJJcKiZy0KAxybCtvy7HLgkoUs4sVv/Jdzi9bLO3OPD/88V5G + 6zzeJjP7E+KRGFf9NDJKL830yVKAmTQ1I5tECC+BYqsZjltv7HEUBu4iytTtQF1wiGRdTR+UaxO6cmjq + ZU33fT9WhEg095nX1GFy27gziEdbCnZXUQf+3k/hrqSir9c1p/vu3oP3fODAc3wuOOXxWB4q5onzoNOH + nlPaeObAZXSMzGSzejfag42qHOmvm86u7O0Ibw/wisR9O4Spo1yU2YZHnsDijSlNPDgRU3248eTQc+3h + TuVti82+/965v9UjHcjiyG9Unb03H8QMnCenIz3jK2d+J1GAy81K/bDjDjDVTSZvweEcgMhXvoaZJ1xq + q8T62Ac+hdzMbNBTx3lU9YnH5AtwTNra+QLRP5RxZmhYCZ/31EUWJgCnFzwZlVmuVxf/AcRBHGzECI83 + vnqlbXl4q+BORMIwI4HgQAxClQz70REDKqOHCdRhBOODuYuFDl4o1J7+Nmr4kiOSw1l3yFgqBBY3LbIN + RrmrBhXRV8VvTQmLyVNgEwCGECl+IYSUkIUYb0jGAJ4QLdCYG9+UAMPrPMxKbgtUIE/VIjw68YmaEyCG + WOjHP83xUXesXRFCo65DEsV3bJziv9q4Q5MNw4Xx+yMgO0m4QUIBkz5coiHoCEH9DU9Dq7LPLTQJyuCd + YQduC9grHxhLtihvLSoikRJlYwZv0VB+rUyKIGAZzOFEEi+7jAMub3fM9/SGmai0gZbe4abiTZOa0bPm + foiTTG16cRIhWaRDFOlORpaRmJd8Zkiu6csPAikWiHJcM51pTXhWTpxonAsm7ImlzTDFecZRldX+8vK9 + eE4yhxItofueA4E26dMoZkgoNVmIjxEw05fvpOhARSdK3nzTo82Z1uZKg0+xPXQ3G1WFQ8KYRQbyEDBA + WOnqYmrOs4xEjjxlqRrzR9IwQDOaBIWiYt5oz91181BChWQaZxg/3nGNPxUdnUlP9zinflRyUcVaTbFF + ystNCzzPOCtZmXrKr4KVIxd9qtYKsUCgzjEytwDFVOcwVCN5MojhnKgVtxdWotJyCBrFmV5PYsp5bjEU + gUVkLgEr16TqtJcJKqcDiXZGkUVWj0g0HEP1ttNklEmgJ32bWPfpWQe6g7SileQsRfYb5+HTDn9NVFwz + i9jEXpVOU5gZ53r+uwTX2S1opjGqb1N7DPEsFSNVicRj8dWRO153SqN9qUzdsr9miCq28mDtXOl6W6Xo + lrzjmVd3axaOerhVkcilGdyAG1z0pvcnKmRv7SYml/Rs94qruWYlu/fWhJlXs+WxqKwWjK6ghRa/2cRr + Vq2KoIas0quHDQeHAPhg/NZxsh9cyYRH7GAD56me9+2whxXsYJe6uI71Xc1zpfo+3dCWUXyoMfZgPGPV + AnmYIVajTH283JKBN8d55KxlFUsN1MnzroVdgjSL3MRRDtiG7dIfknsnXih7kw1bHrOVRRxlyIEYwEqs + 5HztdCZzOFcO2Yij2ir8WSo3OMhCTlhTxvX+v8mKSlvw4KoImzxYHp9Yy5/cs5Hh6tqCxoxr8WW0omXJ + vKo1sk8FKrMMfDJd6mKWyKWl9HdV9+RNotqsQCvalwM9KD5Hd406xi1ht7jqVKs6imtG7VTE1mj4yHoY + 0q111EpcajPu62sT/OJ8Xg1rLj8a0kOWdK5ZhusIozZOzR6Kj6Cdx4sAs8ocTjKjkT1D2WZNI57wtKcF + sw9wi1cg/Q02tas9zm7bd9L4Chm39xvUr5yn0nq+cnE5StVZQhvDP7a1hYHWVPiW1aZgkvcYWZVdhMPZ + bu9W68IO7OSbQlzaXXy3njTmz5Cn2YYZ79JeNV1fPN+6ts+EWcRFSpr+v24UYauALq8LTkYyaXzjU1Yq + B0E+XIIsOsP2iLeZ+n3lXVQ820CfmxqQDmEiFT3hYXO40QfMbsrG+3gdT6LFeWjiq3cQssOdKhuxrtc3 + Y7vAkgnzxEntZzOd/eIIzjIJIdsgt48ciYeSe8O9nNCOi/mf/1Y5g/NddVGjY9E6H7zXvdpxUCda8Uln + u+Mf33f/XnaNI31t4W0OYFpTfPKyffjn89uhag59TObeKyqxbnr9UsKYSHY3mAlu75JHj1nEL36xfOWp + XBUf+cZvvvNhpfxkRf/51If+9KuPq+tjP1PM336wtK882bvcnPkifX1xL0E1717YJMdhRjwgc/f+B//3 + kU8lCM8lpC+jP/coNYSJOP96YeJQewdP/bR2NZdSkbZ+LQFDAHhARJdnnpEaBMh3abR/0zYGT+FnAAVo + QjIKLPJlU5VOM/Vz8wc9F0gwINRjVeKAoqdhLbaAUcd+ZEc728BQ8kYvjoeCLihyIrUce7eDjLd1KmN0 + yuYZA8hwMAF5CUZuv2RowvRiMqEtDmhiToNodvJ+t2QhumOCaBaFNNh2JEhs/JV/q2dsbwEZc2aFEoiE + ahhwXThsSth60GN46UOGHhiDxqZ1yhF33QQiaXVtTGhb45dnCNGC+6YoMJgIhnEm+PdYfrgG3+CGAXF4 + TYhd93SISiZjZ5b+h8MjIqdVSFgEdlGgd5kYZEEIh3SmVV9Xh6gohFdIO6H0NUk0I9c0ipGoC/FHiaZm + iTTYW3x1aQyofruoh5xAi2WxdBdyeyvIV2L4gTOXUyVIe22la4mYXJmhY6yxTJ5YbmUAjDknFbPGi/eW + SAG3W1bxia8GEaSyjVSgMW53CT9kE6ZYf373d+oGZ3X4Xh0Ya9joid5RIK9Xerp3U+7gauAoh9HWi7+U + cH8Fcn/maM9YjARCEheGh0cocbWYkPtofzRWh1LhkC+Id1Doj96VXPUWe43YTTSSG0M0huMoeZmmjDLS + W0gHkY0nkbUXLmcTY3GykhSRE0mYk4NIiIf+JlX4E5LpNoRL6H/3x5NusVnM1jznxAgOtZFZd14ymTo9 + UpM0J4NfuYi9dkXxSJH9h29qpQUHKVRX6YVfGIhbSJJ2iGtjZ22w2JSadpFb4VzbgIWzQ4ptmGjEWIEx + 2W0NWGYPuWuJaYZ1KUwoSXftllsgtAwX5BTO2IltuXJaZphJCVt052wlFVFjSTSapJdDAlL62C0ceY+d + dZeWIZahV5JfF5hjwTqoiQeJ84DhU1neRpTRaFet2ZmvKZisOJvDZINGU5o9pXDNSI/F4IqCSEthSU/g + o4vbplRVKT7MFhV9uTvQiZ1cVZ0RmVnPmZtRIp2LpRuWiXoTJYmT4nT+n8VYKQQ/m1ZelWiPq0lMw8kV + F3aQ5xdQ8nhW94QxLNYKo5E1rJEL5EmeTLme6mVWObd4XcegmFaVL9OCubGOj2Sbn9abvmlQNbagCRhy + B3OePbhjjRmCPNBz+4VBzhZqo7efixmcpkeXsfiG9Ccav1ZzB1dK8wNuCaoUISqiNvqhklWjcqmYM8h/ + eImjGSh0UElZSWFHB2hQQ+mVcRk5+Iek9JGOR8qPPBiJx8ibcciW+4lkcDeTRQSblmd1TmNna4WBPoqW + VpqCC1koscmaS3iYSuqTVLKJdZoW5feZZPqS+YmnyLFORCiL3EaiwhinQrkwKIeVoEdcY9oeidr+oG+4 + oYcKP0C5h2ZGqK6kIZZ6qXbZQMLpZfSJVRgIUmS2hhbxlOVJmOqljjfSbkRqY3kXofElNDPSS6GpnYr2 + pLNnFRyIWweqphLIp7r3hMeqHLz1PNtJkF0WqsZ6p6RKYoblc9a5qK4Vnh6Zg5mkm8J1YxBFgTD5p5x6 + bNoqWacaUENSampnki1UnO/HTpuqrDFqrbzKQVS5pTuaLQ7HEul0Rpgob34VgLBXrPvKry93ov7mhIZ4 + ro36LwuEjAxLsbN6rdhaaf26XsCJYmvKZI30JgGLr+UqR+c6mNbIsN/lsT6WGJEKcCPbUj7zj2yZhjCa + rhzbsfbDI59oqmT+J7HxmbDJWKJVRI/QyIBnB3cUFEOQc3L6AW6r4itNGio/OqT12mf8BYQa9q1dJW27 + yZivWIQekXJLOaHUunl26priuKrTM4wXO5LbSmcV5BSTqbKBpjBpWTd36Lbx6rPkuqSIM6COtatORKB/ + qbXqOjFumXpPe5F2R7dku7iBYZGVm7b5am9wmZlYVqYEd7J0KrhLd5Oul6uyerqiazBspbAsu7Xxmrcc + 2o0+V7rtF6ys5p0Egq0CRqmN27rJNhe0AZmYKrndmqRUAKgUSqeMmLdB2Ly+S7n4eZa516NNN63IC6ap + K6MC9ryO+runFruye0qCOqdZC5X9eL6p2Az+pugE3Nu7EpaVtRW+KDtqGfmw0Yu/ESEj4ta16otUryuS + 8ctvoSuj3DWzazu3UemX6ltXxto++PuvStlasFsbZVtQyZq5uqvBDOxOcva+wNa3q5q0y7aB5vtsajpw + ffdT/QeCj9W+xyuq0Au2lgTBE6yrJqyB3eMIPmS4Coi6xVuSVei4l2fDzAW3cCOmoHWi7HjAN0dvTUyE + Hvy9pxbC6TbCnFa/SZfCkwuLcsdMT6zEJSrFQ0zF0surnbFalblCkqClSmcpG3ZzX5uaP2y1g0p1Glta + 86uJUpexrgB/0aqMJny8YEyNMTjGnTs5bNuwFXx/KTlbSwoh4KmIuVv+vC1YA1JWw4pqaR6KQKDqeaqq + kRMoKUKEMOJXYJsDs/XYR1NshGrSydWIxIKMIgGJUnKMlqx0s3xLwGohxGSsla78ysGIWTq6xp3qk0Ds + aE3DjaRotCGjFR8cskUZzPQ7zHWsm+B4TH38W5jAnLk4kFiyjBRgu4WaPUG6s4Ikm5Bci0Kpk+and6PZ + rL66gHKmsvWjxwopwZBrwZ23zs0sy5zYrlkLrKiaHGXzzwWsbevRtveMiBDIz+Pqw27cVloVeFQoqwdz + rtLD0Kq5roGrip6JnWZZn/Y7r/AFgBUAfZsCLd7H0suSUS0N0zEt0zNN09aXUSv9KsoHLTitK9r+J33N + cn0U4NOustI3zdPUR8dFi9AMGbznfCIffb/UOImYO86hI3MF1Gl6hdIbDMBg2NTTrLZOWr63pU8xRb5y + ukLtNBlAtdXa+7fRjBgrplAIGNB8OMrcaUKoDF5x9M6Hyzf+wcrk59FgPXf7zM8RY5vZsgx9gZRpyE+2 + fFeAHdhiPdiEja6nF9XyHMixDAl/iImJCYrj+maX7NZvjVdzbdl7fJ1eirbwLNFs0FHXHGPZadc8ZjBc + LLpQXdmp3aEFedC/arFKPZF5ENtClL6F3GOsTZLPPNmsd8S8rbQZOHW7ls2OqcB84CUfS5M7zFk2mBNQ + jCZcbdq+jcbQbZ/+TrrFMRLaPYmTQGGznWoNBtrdBvlasMTcvpzOqG3el23YU3lLVb2sJnAlqJxNUSpW + 1o29pI2l453f+r3fHD0mq7xJLrngIi0JA97aEy12db0QR3DfXU3ZbPLg/L3PyameHM7eFz7WuE3gKoc/ + s5C4w23H6L0lI97bpqu1fd3XLN7EB4XgVnaDsZrZMF6PKH6Zzo1ONr6ygl20dLleG0TbKc5ifzyWjx2U + WswMLyze5HydyCGkxCq0wn3N7LyFdaamnp2wVE7LoszGxqtnhdbckYtMSj6p0/jQZEbf6WWwU3SrMM5N + UgvfYCYnTosV5FJoGf2fXk7nmOnQZIvYkdL+jtcizt89uOs8QDgHymHMXr6B31mc5Isep79M0G6dnYjC + RZTOtxYEUwXkVgObvSI745/s1BA+4mI0ldItre3ASz8u1X+u1u5JL5wO4qqnJKAe6qLeztxFljAiPvoy + kHKLzVEJB75BgLzXHl8uzf8FlsTeTIT+yJyo5uj7gITM5Xi9tKoN6m5Wu+/TX5D9q2KeUtNu4Us9yXJN + zekOvBmMV7yEczVFzHndePJ+u7HO7XCK7otukwnMdTXhT7pVyjKeXov96mN7tMO80bCM8Gym71JHQGOO + SudTAosNx+1N8Pd1xZpr7EU+aMgMhk7nbs2j4qYMw7kNtRc/x5Nj8wf+j1apdXaT7vKyU736MeHLTskb + H8H1efJGXtg0K+JnDBSDPmi0eOkUHykN/KAtd3OM66YTkvLJS2InDuDGGLB3np7WNfTNyr/NWXg5D+8T + X+trxRfyZfQ/Umct1lyI979hV+5InPSanPLkybl3Wfccf/eNgLcHJ+48m3ds78mjVCILO9G7+DRS669s + cbZJDetHzvfX3l6PLyvOvkFfwO8IxfJt8Ad6v/f1/unaruifv+79jsWAJKKQmaOEwG6fq/qwge3AvLRK + tIqA6M+2VEa0vxqIcPupP9KdX+F1ztsLehjW1Z8tFRvXU3o1IjzKyeiZHPu/Bfn4TMNN76CLXzT+6twd + Zwny+ou60YH8cbv6/FbeZtrql0boy5/pmp5S2A826h/Dsq/9ivz2Y0UAyA90mRNDk1MJehs0MpmOnSii + kOWwMBTExtV9XRWevY++8TyX9d7/gcGUkFg0QUQlkMYG49E0k47yldxkooZnYztrGXVdIhVcBovNafWa + gma/Xd+459J0y0OP61HRXFrxpkYCVPAA3FYM4drU/BYfVxAhJylfJCsfkWw+NPtaNCMsqD5ByZi+HFlq + OE37EC/rMCdgc1JlKWlvdSFzd9dKBQcfgJFWiYuzpG6iUDf7TC56M3wXpL2oZa2xt4m0udNAazZKkE1L + 6YzRzeSc9xQPe2z+K73j3r/N6O/1afL3y4Y7eSJmzBAre0KaOXi2cFY8bv1YHPQnBOJEixIqXgQDjEse + W6zgoMKiTl6th780psmY0uJKlkZS0VJSEmYyT+LUjdnmkoNELzR3vhS6Y6jGYomEVSJzU8DSIj4f8eRQ + lCJVq5Gu+guVU8onbgmaAtUhFo7UaU+hTTSb9dZatj9m2iP1LZRTtNTc3nyLI+9eXn7vNWXYU+9XUXv+ + YeuLE3CMxmwXP54RNlVATO8s/4Na9o1doZsrSL4amQ3oqIUR21Sa4ug6xYtMvyUtuszsRoG78vElT5SI + 23hhx85qm3YR4sUxKhNIjTedg/mE4wuOPDn+9ZfHrYeOeDfW9miT4QIPmZ0BdvJEz/+9nUTuweZpv/uI + Xht2osbm0/PLfxrcORJI49ONEfnE68y+a9TaL0EF33ALoNYE/O8dHt4jcBfSSiJLI/wYxKrDNdYi54gm + PINmwrMCdOjCTP4IYr4zPsQtRpX6c6Yc93wbEDwLdZltsxJb9IXDGRvSLMa+ABoRQsJO1C+eF43AsB6u + qgCSPyILxLKbXzITCEgrdHSCxxXH45JKXLTMMk0gJNFwJKTaG6wj1FLEAcoop4OCLEHIXBOTIYtzUCx5 + pqjTsbHuNC5PPRF0Uzo//4S0qnVAw/FMeG7wxlE1MEw0yEuvlFQ9UX3+CPGnJeishi8V1URJMxJ7JHUS + QGkLEaovBzH0UJNeq28jmzwtVdZRh13VyCpRlbM8Y3lt9beaHAk2jGIXoVU0eqKtlFD4qnOyFmnZzATc + 5ZSLlNoGz2VWT9X2LFGkMHe0c1xhF+VuqmzSZcNayaxh4s0qPwoBXjG/DSqkeT+aN958H2V413WT4rae + gMnt1ls7DT64JlXMdZg+jz38CdYIky3ZLm00zbhMhLbtGGRFXx5i3Z4iBvBAibUrd2AEne1vjAzxjRlm + oYsEmIQu65AoEDzEeE6Ap6GOWuqpm6La6quxzlrrrbnW+oSus4bAa7DJLtvss9FOW+212W7b7bf+4Y57 + agSsPoFurr/GmhCp9576aBBS7lVjIKwkuVqit0Tc4ogqy7XSm3H2TmaMVTYTLiuHmUfxIPYFDBbVUoXB + XZ0h17WKk1b+dtDCadz8h879+rzG7lC0ufacoUC9NESXjGVTT2H/MHjZRFc4dGUfJx3TZYzvYbHosriV + 9dZdR6/6No9n+b/bEeN+8twrP1ZkVl2u/uLN25x+zMiXzo3gZXT3GXzyNTdfXfQZ7x0mvaJNK9uFTyU4 + 8c0PUW2x3/0U1zTQUQodimCHU2LTr/jtr1mqM+ABz4c4BeohOF4hjEf+9T4CCulXg7oX7y6IQREm8G+M + GZwDvQIs6/GsZwX+lA+UmgdAFQLOfFswCCQ8eMJxqI+H8JvgkwgXnljt0BLX256yOpMjnbEnhDo8Xfjk + pT361Y+JIWPhFJVCMYJU0Yql65MNEbK+8nVxcRp84j6SwsHIrRBZWAxgGrfIRTYW7YvK+wofFjgtIwow + izrJI5r2uLOYdWFTQIRPI79XPDvW8WeHnFUiFfmyJ0DSkYD8GKMISUNDVjBomJxTHwVmkYR8kF6DJCHz + FAbJHJYxkcOzyiZniUdxBIJzBashx1xTyCWacln489499ACsYPUrl3S03QBF90s22pIqFGqmLmkXLlKm + MFm5FM41H0bM5RGNQi9R2tBcyc387S6d6kz+Wg9dVwhwjjKb2qTcGT/ViNiAsyTUtI4/zam/iwAtccIc + Zj7Bcc/SPEecuHuZ3a6SsHFpg5PolNyzojkehjYUoKosQUfn0EIXOXSEaxSp/ESpz42KE6RfyVUxrdIy + PPnyoBdNTDvdWcthBSMZLS2Z+2a6TT0ilIIlJVwjfcqvnbqwjUNhh0IaplCT1rOoKU3ippL6mKxeRiJb + 9WP27CnVoRL1p2Q141Gx2tBxSgooXiXjS6MqVkRSMqR1NWpOu+hWcflEr6lMzSw1Nc9MArWScsUrE/u6 + HrIktjBxAZEaL2lVJeK0pntk7KtMw1hOHDOoNB2rTY9q2MPu8LIlzKD+U1dZUWfe9XCSBCVV7SpNDJb2 + KURca1Eqw5kblpKuI6XsaFVIW5Y56rL/060lj3vFwkoWuLNNU3RKq9qwCjVUsXWRaQTbRGIK17eZekt2 + BzulqcI2iczlrU61BF22SLeXkK1uWbWo3Ek6N73CiS54w3vW94K2u9Z9JXqJhNTvhvK36HJtVfVbWcSm + V5BZwW9+E2zgjCIYvv+1LJYgGd35ivez5L2cfDdsP+66N5wxDXGE9WXe3aL4vHnFcIMj+mDTqZhTB96I + fy08zRlJ0bvrlTGEzSrhd7oKmEdccIx4TMvP/JiPYxkvqKDVFfZ+8sIfkuNpUcvkJht0v1Dk0lz+WgLg + DsEVy0uWEYlTLEQg2ra58USyQCNpYn1AB78+PNeIFzRmEZU5oPvoR51pRi08+2PQECPugAn94bkaTlKF + nvObAwlkj+YZuTX+6pocfWY9H3q9YS4vsaAqq0x/Y9RG67GDL/Ln7DKyWKU+MXUEjOpU97e1nE2Tqwm8 + H/v6OCWqjqytb63jACMQtb2mtZDn6Cdc43PMxP4MSyqy6ksH28U7jiCvoY1NZHsZ08JGsrPNKZRoz9PO + w1q2gnV97YgWJSPkVnOjvc0gMpfYqeyubXK5Te0jN7t7XsStlmH86cf6lVTnbnN2Mitre9uLevnWN2lf + rOSBBtHY905zvwv+vu8dS3zSo9nYwDEuKoN3WEGgSSzAX3djkKN8Qxq3ssljyvJW0vNRMvd0cCOu3X/v + RW5h6TnV+vZzoQ+d6EU3+tGRnnS0BV3pSXe4uH/1WJtT+oAj93BTPT3lXKO5l1NPNMQ3vtqva33rXGeT + 179e9Zz7u+Uhh8xNGZguq3dZ12L3M1iHE/V1zN15OB82vfOM9oIuFyZ8D7gT/8720DaM4vfR+70ND243 + Brir10XGJzd7LWiWN/KSXySG+Xq5gpAdU6RPO8M/3Xk+f57yir8ZoSLtLcHHVdsrJqnI1d76OMNJfeyV + Z354Ii05qN7urH+z60/6WkZPzvSzpjAaVSX+aHjqfsZY4KQf3ISC5red8Hkkvs6NGfbds3KL2cc7dVyi + 2phIH/HHHz8ZPWt+KJMn/S+yxfeRr8mX0wQRU24GzOfvPOoPllYq49qv5PgPhJYPlrwkXmbv17pPScIh + /x6OnF4OYMgBaZAo9qpj+6oJWngpGDiOSPCvveTNJzxQGTKHYFLwA2vrQRKlBCWN/eTN7TjwBalIu0AC + S6SCzYrIAFGpBnPDNjJQLLTvXbTELCZK1NwM0pLkthZqFXSOFB5w0U4P3iaP8rLgODSwSERQ2bgPCy0Q + CCchB4toByEFpGQQ6xxmDU9przjwCBeQB51PDIXGDaNvzfZMZtAQ927+zg5BBg/zcK+STVW+0NzqMA3H + EBDDiId+iAavsAI9RhBpZaOoMF86ihIXEQx1wRKFoQobsfpki0EEcQQVBFA8sWIw8Q+7Tf8YkRIY6hDb + kBWT0Pha8RaaYwJd8e4UcefQbUZQ8YQoQwo3UdNqEbdyjA53YRNq5gbvjOpI0BaVcRlFUDBuogXTA6Dc + sBR/UBK5ij1GYd6KkdQ48dl+sUNgRxbFMQuNMRonsRxdSgau7ADJ0Rsh0R2RSR7BRMQiERhn8RZ34wv0 + ERuPpB+F5x+PkTkyrwFd7tUEECGnMSAjxAdlpUna8SAZpgTTsRoe0XXsgZrwjxtnEP1cqgIMAhQcPYcX + I7LV7PEbcwLO6OsiSXEVV7ITM8MZsaEAAAAh+QQNFAAAACH5BA0UAAAALAAAAABYAnQBgf///1a06fDk + QgAAAAL+hI+py60RAIxiQYflPVvfCVVGNJJlhqbqyhpiC8fyPL/0jeepOK0dYrI8GsGGTXHUKZetDSk5 + ShQzv0dn8wIVp8xuzQsO66DicplXpU7TnCERRXaZ590IluGM+riS/iIOxEc3KEdoaAh4qNhSwaZmldLz + lgGYuHhZcoenISMZaITnJIgZZkl6ymKKugog4PjoZqHl6IlRyYoKUih7M6sLyvF7gntGbJx6nNzWKSQb + RFsLLK086Bk3qiL5epCVB0TdpQqOKz5e3fkcvTzpsY1wa25WdJ1jp4707fEZn1POj+nvX5gAATPZu+cn + X6Z22N45KCgQxTwiDb10U1cxoi3+jdQgctSB0IEvXT+qaGEYkgG8j72CkHFXKlJGlgk80hRj8yYNYTJP + DuOEUlu6FYlysvzxcmY4iUp1tnJKzChUZECpGJRiQpSvn+vgbJwqs2aoRaZggt11FmDaOTzCKvw2kkQP + Lma5PVyLYeLYQ2WbQpWK90vgmFVx2EEZ7J7flYODOaSoyFLds4Abw6hsGV9hpmmEzhXV76tlpHkjS8z8 + BzUi1Uy67Vnzi+RmHEUzd5AMY7JKq6wf9zaD+bfrlp548lZRe/BhtKFSJtYtNq/fqcF/T7NOw8Z0rO2e + E94d2BqLhkMZwbJeHXtq9bQTz9Aql+1dvC6bCDIZA7f69Oz+o/dHl9V2VsRnH1XXQVVfE+wE4pxvC6L3 + 33cR5mbPbBQSCJxoCDrow17OICcde/xN+BSJl41kmFwCmjefU6QpuIl0Dbly34pOjTghjqhdBJ0zy8l3 + 4FEcZuMhZAjNAkl/Ov63pGVHNNjTik0ld9NtAMaSzRYEPeeTkiYu9eVl3KXYY3YafmSCVOWN9wEFDEK5 + Y5itycmiFCDZKGaLHKVZj4o7MUdniYG2NyiI7pU5DKKCBRmPlfXoQWijeMrQJJOF7qCQou79SdSZ//B5 + 56SAUgMnmJeaeSolSGq60Gp68nOYALLOSmuttt4q65x24tJml0CmuiiwKlVoXG5I4Ir+bLLKLpurQKCO + wWy0uIYgbbXW1goCttduy2233n4LbrjijktuueRm2y21tA5CZaN2KfNkZ5coJiqmwlJ676v6vKeWvso4 + ekwSndVrHy3s5psfwtOU+qCrjB6jSTICl0QwhT7SUamlCq+36Uft/vtswEMEWHGBRUq4sb0pc8iwyP4a + k21HH3K1SI2/ruwVzu+2ypIlGQPoJry80FyzSDfr/PLG2olasoHggfyEzAPuS8ooTXOMdNIKL41nsRh7 + ymsPP+c5tdeGvHK1ZlmDrfRVLZHycdhRC93cB6eg3XKdaz+8Nc8x/HhJ3KvoMjbZ3GV1N3ms8r33qCmj + 0edAM1L+AvGQ5FD0TC4VXV24l2ujMWnaTmM9eIISQ/YWJjCZVWrnIu7dyOKQMoGh1oKyYvrpJ4vOJmd1 + w+n6fo3HnmIZZgk+b+7GAGIS73twls5JxzfOdspmv7YK8kXvrHuMu2oOPYpdMT5843mP7LyF/pFPx4t0 + e5+66jNVeHhFwWN3P32s+pl99WdbfjmjYUl+bToNVuhnO+rlLy3nmxkqfJY4ALIiEXQpHZJKQzKiqY16 + T0Pa9fIhoPStj3SK0Mv74Oe35H0mEm7rTgc5uMGssa4XDnthCSXYvxAxyIKAU0MPEZMmpfChgb1ZIAOJ + eMOcJVAMJuwe6vaRuNolqSrY6FX+bLgUF5KIkCZGBIuv1JcLQ7FvIDjMYWkGqMLZJakkVBFfLQx2qS5O + JRofjAcES6i85bFwTODDzwG/p8RQFUqOLgraMrYhu2Is0QtNdNlxxlc1qjUsIYG80yA9KInhsIF/h6iL + 9piYRz0aEIoWpGLHAOk/fg2KkEf5RRYylUKpLXIJjRTlKE8ZRWJdsBmVtGSgWNlK3wRoandTmUI6F8qo + ZGlouMviI2fZu1/qLBpt0WBE7ti+ZAaQKSikSR1HpMUtmgOYGlFHNdXosVTSrowPXObJdLJL7jEykdSx + ZqGKZTdIcgSbxtPmBIn0xCOOEAz0/IskU3WkN96IcnOopS3+n4lGLw6UoBWEEBjVg8hRNCJ+6YQmpxy3 + zVvykj7sVALFCvoP0JkII9805ULVWTx5OpKbk/RiyBoaT9aoFIkIukJO18NJnXwSJCU9hT/QNpoL3A+l + AgFdHW3jTEzZTZyK9KixZPpQgI5UObfrZx15OjgLuCIoTHXWT3MG1qzGkHb+NOPzpqicLRGCdU8dx1z6 + cJDYUBVmXxSjH/aKsrXSsqj9uioq9ddVeawurZrLIsXmGD7ZGC6fQmUoIwkbOGZE9CwRq0YVzworx7K0 + kAX0USLJuYShqhKkIR3PVtdy02z6ELB9smImA7qnqDLkoPgKDD9NilmyrNYx4QHY2az+dlFSGZOP5Xxj + XhlLQsrA1GSJnSmMSMlZh56jbLQ1zHKZa9YtRAG6jOqurqz6SNQK1i2H7elEj3vKsja0l+0Fx1YOydvz + 1vealo0cVpWJjte6N7gU3aR532M/GX3qen3VL0f3OV2tVletHWImaaugXuy6i74HPPBbRVJXVAnYvtF9 + r8X+C+C/4baVxsmwPu2akb542J0ySh8U5Gsa9MLPxSje4zv3BEkeU9IcrYuSfYVI3hKjab0E3vE4P9rN + 5urYs0Q+SKeiNOMfDwi0oYGsiXtM4wmn+MQrjgg2eIxjk56vHCHuJE01nFqJflnMFWbtP4db009Nmcqk + UlRAkkz+VB2C18F4NWiEFyRkOos0ys7aM58hhqejAtq7Z9ysEiYGlrghGcx31qyggTzGqmWZ0aObLTFW + Z2GLHK6eh8ZSoo2SkVG/JiWJTvNOJiVpW5N5kiKMl67JyE6PGFeWAYbokf0KMkh3uUO/du2n83veSf9v + zopGtB0fVekNf1fZp66XsGEGC2lzTHqG1nFb3XrrbMMY2ckO26WL3czPtvkGr2zhTVTrvURX+8Opbve2 + uQ2+OHva3cbGiRqbXQcmc9rV1wauAJPRYEfPtXSmMuypXbaGcod6HfquzmchLiB9JxenqsZzY0WZcVAH + 29n7budgnx3WvIncw+LOCXK3p8z+lJdT4XYGZMfXWXD5BevYeOSdTTLaXYSDqHlLnjObF+7yl9etsTwV + +ZBlW9VdExOPAYSNxm3Ijp8DfSw0B83Q7cr1rFP3E+L2scW7XNHKTje2Jwz0XgAb8d7CKu0GHzjbOZF0 + KcU57o3m+b7pbl27q9urYLD61Qvcdmq/ATZaSV6dE65zM0/htzESOX9i/eiShxanSm/5xew9clDOGCNo + 4gLnx+T5yz7+wXVwnuN1/cOjzbq0g+4k6OepJemmEvEUru3NSd53PQO/9E02CIPDuHhaBl/4tpvbk5d/ + n+0GtsqyZz7UQZxR6M/L0lzsrxtiD/zZNzvypu82W42K/Aj+4hydX1dyH9Bf4DJLv9e5HXthjUdxNbMm + TWd4L+EC5oKACXgr6LKACciACgiBEdiA5UIQEmiB1VKBF7gsGaiByjIBHYiAHHgtnccPTXIk+ydc/edw + cLN2YRZJZOEZsnZd1GaA7ceC8Ud7bOJhjtd7fpeCioU7gaNX3pd8CzMM+Ddf+8VvmSUkvvR/ABiAfLEv + MvhuYGN919c+5MdeN9h6iseEOPiCUggUXOZvNHh+JQhfsYRlnUaANAR/l6d145dj0dMdVKhlv9VZ4IBM + KuIXlMWGKkdpT6h6UXhcn6FbGoGH3/eG8JV7D5d4mudfgqh/S9iDsud7dRgXaAd26zP+bMQ2cfT3JkR4 + Zd4UiV94HqAIfqYlQt0VO/BBhmG1iSyjiFyYhjaTUvDkhTn2Zgg2fakXiKtRQOEkinC4cseEhgL4eMOo + d6SIbZLoQPyic1tEhJDjU3mHhQtzheOQP8Iwb3/Yhb/4gzCnID+EOFkohn8VPcpIb0pEfI/oWeKjeozF + g1o2g+EIYjTEes6HY9PoGAjUjcUnTLNIi1y3V4dxWhvihgOJObdmHJljZbWni4UmjNboRE/TjgCpfUzU + Yd7mZSYXkff4YrMlXgspfZFRebpUHHaoTlCAhHLYT/YkYvBkI1mmCmD1RVaTZNMoFFR0QSqZQCx5jGm0 + f6U3j5P+6HamiDlSEk/ugEAxhQgpeQVjiIoVGV0tmYYl6YtjsHeLJmHOCFcFskubk5WnOFeUt5GzV3ck + ZHVLxVhdsle3R5YuaI9CkEg8IZb0FHib4FyNmJaks5byVzCjRQgz15Vy+ZF5ZizluIUIhoy8xId3FZSv + 8pfFFFkfN5hbyZVHiZSKpZgspCg2OZXPCEJ8iHp6aH6TKWrMBB3MJ2TTsR2jJhlMw406+JppszmPhY62 + hZZUGUOomZpY1COA1ZpDVkUqFnVGWTAwaVo01Xa36VPOFxRjuYjX4ZthKDvsJ3kBt5iaOZdfyQxRGZgh + kVO05TXSY54+GYvyVJ2iJptESVL+WaKOAqlKkPk3jUiRPmhqzdAr0BmZHbSeHXmZOyeO/aaQjLebj2CX + zRmSB4QbjtWfT/OfCFlDNrWdBSo53uBpoCFtrqlUNWaI/9idahOhLnKYAPpE8WmDxIEhM2knaYZk2Tgm + K+RC01ZqInqLsEVbRVmh3wOihAZsedCjB4eiPPMkcOGWCIdrljWiVSKcXOVDJ6CMP7OiQSqk8YZD44md + B/pvvrGkwXSOOJqUbumVShhNuzWfQ5pCsRmVfmiaotGlKvilYBpRzxmikjNiAEWF5mSZ3qGl/aNRPTdm + EhqnsDViAxigobeg0EOmXrV5Ytkx6Cl5FeB4OuqIEyqnxDX+QPxYj2UKZ/CphQYqeVq0Q9p4UZJ6oxRa + p//ydkPUi4dqQEo5MKhqeH+1GWi6RKb6oEw6pgBHm7aYg9s3ecRxp83FBxRUeZUYqByXorsKicwqZyvm + fbnGkH5USHxDp8PaWhs3nbhoodjBqpY6oG9lqN4kCNdwXwT6dj5qfxgpoM6qGt/qqpeohmlhruf6qdxZ + ha22rczYrd5Kj6JHjECjnGZVXmY6kkyDE8M0q9nahP1qHdl3MC2YbgMrKeX6O5gqlW+DMq7XVILqrqUE + bNiqrgrmhXxZZWz0X/ISiuBYcdq6r4DosHylkSI7suG6a/cJcghBD6hEpb8aKTabrDD++7GEmHA0K3Dj + pxi5pbOnh7FNqYfy1nBVwrA5C4XICrA3VJ7NaiH1pkHpmKtG+7LtepzcF7IU27LIyKqQyrPjtosmG7To + +rZmNrUQ16eM2bNnJ3SkdnF/5CAyCglZmq9BN7fK540kxjuA67LIia+hCYtc0rfOgbODu6hjK7bohnZq + u2zTyqKKS0C8EDKTgbiZG33sSmRxC3LSiYiW9Jl72m3yJldmOzuYa3qyS6l1G68wFrolWp/AeZuZ2bnc + RCPpynIRi0a027CSK7OZgRnZ56ijqzoH6ie5u5l6ibpf04aF22e22zNq5rwYi5iFiHRB5SSeKb0cpm2m + m72DERz+TBmX9/qvYPlmBYW5NRm54CopvGm4tnq2Gvu+vfu7PSGfeou9xKSSOoqePChF9Fq03/t7xgll + Htp83umOJDvAJNaXZOtb80SScOu9lLipSbmw7Uu6HJyqquqJFqy9HbXA9MiUIbQ/HgwY+puezTHC4HbC + fea29SdIWsa+V4KfIJmd8CO7E5a2NdxMpLpgjCt3FLXBSqgpSgmfaXB0Qxxcd1uzlYPEW1m+t7vCEoxI + IsyYsxbCJDzBekmFVjfEt+e0a2GCODmsioOV2LOu1OfBQxuGWXy/Mry/D6ycmecGhAdIsdZAjlA4Odx4 + wmvHz/u1yUbFMUkmfvyVSDUbOYz+k4tDyD/cpsNLuae7yHTbyI78yGRKR9AwsWRsmN/GuYPquyVMtHhc + unq8x/w7sHQxRAkpwQF2bnm2xfqawhmSvh2bxHFCUFDawkBKy0ysuhGctj75Z+h7x8AcXuM7zFB5jynp + vqlotTD8w1Z8tausu4DJX8QqzVdJlyfVqURSWhUjxQ7Mt/gbC2eMxSoMQ+soD6MaInSKRK7IVBh2IeXM + zHukv+T0yXM8z1saKq0KfukIxR32fjtDV+CJV7B8VEZsjuVX0PQcj5PLn6/YxBpdpjxSzZlSv1wMxJar + yPd20RitkSiLZbZFHtlsd7cRg/6oPvTp0Yd8y7bKSrCsN4X+1xiV4oegK1p9uIq+Erxb5rdnyZukXME0 + usRyO86gqsS8C23dK3XXjIpmF7DdzEc63bgvlcQDnTAVnahMG8ZVu5FRlRIPWcY8ibxgiNKaJ9aGI6+K + io67i9btfLEgLNEqISvqoi4gKNjWIoKDbdiHjdiJrdjY8oEfuIEZ6NiOfS2FbS6UTSO2EgKW7YGAXYEP + uNi1IsCq/Il07NPqW9ewO4X/iHu4pdoKZbA5apiJHMeZltKgDIQw3SqD7DxM/aiCzHQ7yZqxPb0ZSdta + +9NuBrbXGoezjUtYFD5mnEEdHLhW/c0viRe1G9Vlec11uY8GdtSY+NBX12BTJV9PR9H+3HvdtY23nHnL + y8mLbPWtG0WcvTwUfLkck8Zmdug6c81u6t3fnInQiyuS6px91Liyu0jMEIvao4hC+n3aCuzfdH0OXje8 + UDKSpTgEKuXc+WnW+IXV1I3bxEvcEB7hNUp6kHwcFGnNGJ7hHzKEBkbhNFONeQXiY+ngiMrGJd7TZRnj + YTFVnFrKm+BrbxLRYrp1k3zgYBRjQB626ZfdOs7LDV3WaW3IN22zHQpnwWjh1GpNmaODAgnPWPfkUJ64 + 8O2z/kzfTtgMmCbgHpqgPf6kgBriuofMykvmBh16uoEiTVEvX1xd8zOTvlIjoOsCqymDbczfY33nUQ6R + 0u0hO1n+mguuf7dFNaLzXP4Ix53CpqlsvTOrU4tufkI51cTp0qBokKN+zo7yI6vbV1cE0UAbHaUS5mUr + zKBe5k6O6mxniOoHjyOHN9yAobaLz2xd6bok3JoRYl7t6aqB3aZ9xI6OoCRTyV0hqu1tJU25WIAn6NMX + jGX6p7ktuKKt5rVu6wSN46550I/ZPJXcFhf+cA5K6jzJoWcGF1p66MvO7OV+69pdmB4pvmsdAuO1D26s + 7caMH3iJllzT76zMx4S74/ou55S5owt8n3LFSb7d7RpG7O/dQXre1EGe7xAfxBKP4GR0rCBJmvOq13RZ + 73d7ySE+pDiS6Lat72i88Bp85rT++hM5ac+yiTXzBpu0btwMLvLLmrc1/oIKy82po7C2zD02Det0zuKj + t4xFj8CZ/i/npO4gX8mB3kRQj/RFeNVSpuhFb/QkD7b+lxdab6/NWNJaN1Yq/70inszCYfYBHEVzP8yR + QDzAKYAuzKN5g6Lpsel2fvdnr51W7nvyveGWd1V8QtNbbb+cMvNVL7OVL+GcXF9q6yZa0vZ6f9dR/8cB + b+Q3T9J/wtO5/t9BiD/3y/KAd2QNOYUl38QK/jy65fFNftYWZfbYnYlqP63J2JlO+OtgSRBNr+fq6HG7 + zLImbuvNfp5N77wVw7WV6pR+Hp5N+6IxG5jCc/fNrorMj+z+zRvT2G/8tbpp3N/9vL+33s9Z7t0vtqY4 + kqxiNALn4S71wc/+vOI5G9LCHU0A8DF1TywCk5NOGCWuLDquNwAMyRLwzApK2dY10VfO5tp+41tPr5H7 + RKsdIjd8KHzB5EFoupwykKLFmJrWmlWt7br1fsGJbtjYWzLNPUQ6vc5Wxjdf8hllrcaXeOJMhlb7/H5I + Ahf2BBETYRTJ3lSWmswe6jZQCp0cle4yKTDipEouvw43GYdEiUydVBVJWV04N9WC3EgsUTcyZzFxj/5+ + AlxFXoVDX02LTXuPZ5KZQ9pkliliMGI7OylDr4dHPKk6jFWdc2mfycjP1XXS1x+tdx/+laYbZtgWhOKh + faOyvi3CEWLVDiA3dzUIHlS4aOEpNtr6RTAoIaEkfPkmIjFHxyKtTwH3jdOSsSGLhCVRMjiZMlcveFTE + qChobVitSXdu6tIQ6ReQYvRurEQClCXFokebIfXy0OakWXWYevCH5uEbNVZJrpnnLd7Onhe/ykQGiKjS + VGbR2kr7pepOjCvatok7F6LGFrtA6Nt568fPgYDW4gg8WCVhP3G7vYULsW3NrfzCzJl6kzIfkCHHlimL + VqjhZ509Q1scbWvV0kDQIJJslyfYsDAzOwytdjZh0LV5MI1J9VqkrDq8DXXa1AAKYZuTAsZNbXng2815 + TPiJURX+aT68KxevJ1AkWRt1Dz6H7kf8+Bcd5Zk7FsttLOPbuis3v3t+0fL1o0MxmJel4iXvxWHkPuSY + KHCh+/AzAsEERVsMGwP7K06f7V6DrZUtfrONwZQW3LCSfGAjUJBwJPqPQtFi8y7BDj1MrkUB54koQ7YC + 0U2BGPxKUbO1emHxRRd8PKwkqfhzY8bIWkJPu7MIEdEkGvEL8kcrQjtSkCK0sRLJSjR5I4dknKSSrSin + DK/MRKZoL0zZ4OhyhC/zu3DM+qQ8M4Q6z/xoJLHSY87PEzFDE4w1D7RTHTzL9JEm8K57h0vivgJTR/kG + 0dBQZhBNNDLT7JCpECyzcEADMAn+vXPQBwN1J9NLb2QVnU0lOk24cj4dCgRRmeRO0Dk7HWxVVwEFtooO + n/CPq0vgatOuJW+NExFi+9Ayu0mFvbLaLVgs0a3TJsQHssL8bHYVOXnN5q5Sxbx215HQTUvKt3hT0rVa + /8w1VWvLBeI3eddVF19/d1D0HlsZtYle6Qxx9tlT2f2WXIBfhZide3NDpeDUHDOq3mDNhRFK+EKSFiGJ + ySM5KFjH7fhgjemjuOSPm4xZvYdNxrbmkWGWGSAIwd2YYxqoZZPSdh+92WajBcs3ST4zTtjnnyuleU+H + /CFaWaQVxBrIQXG5mOdA9ujiuPiWotoqsrU+Oe10Gwa545n+nUa453KCPsXsWaVeW4ZfWzyJkwy71Yrn + uQm3F9W8dwTu77r1frJx2s7tdprAv76a5VZ17hfDNc+wWu7HXQT988hLtCw6r/nrI+zL+0TcbsWBdl10 + yGcvvElK8pocbm+pGt12qHn3OGd7Ome8dsuPb/l2rHoPkGlNfjdc+cM1x1AORkXeOnnHt58+Scm2zZx6 + h4Ff0uGxjb/+O248j7571t8nVUavTaeYk9WnPUGA/fnv338BgvE/AQ6QgAU04AERSEApJNCAeijgAhkY + QQlOkIIVtOAFMZhBDW6Qgx30YAZ7MEA9OJCBEDxgAP2HwgpiTHqxkx3spJGR9mHufbT+q6ErKLeRprWE + h8uiIcsygcMZuk995ymdHYbYwhoSUXTHuZjIUBc1JZ7IRLp64XeMKIpkVW+J8Nse+rhWIymWrydFMt/b + rkg80k0kh2NsAd9YBccVuW14jcLbFM84mTOOb2HWkwX5LpJE73Xxh/GjW/bEJ7g7Ds4QXvGdhbhYxOXd + BW2EjJsh30G/HUACEm5MhSO96BrhJS6RzoukJcn4uDxoS5MwbE3wahI26jwSNek7F05gIUg8ElKOZPpA + G8vmGxeSEYBbfBos05ibUkTOlkvs5Xy68BRl6BGZJwBbl4rGx3+tT4t2xIkud+nMLkYTHuA0WLQK2chi + map1yWz+p8JS1kxM3jBqrfTjDr25xxsBc5A+dOfOziMNYqCSiaqs53qOOExZrpOdzztlKeEZz39+UZwH + RWiNvLJQY2azV6NUJhYEWkmCVmh2V0CkIvIiSx3acJgPdSgsQirP7j1zPCY1J0h3WcwjHeKkbwyoHH4q + U4rS01Zm8RI1aOJTugmVhThdpkhRSdPmpOmmWBAXwmKlPTS6tJZAxeVfRhrOtYGKR1dVSVbxydGWbrNB + r4soV4k6U38qxaxnhYpSlzrRUtGjqqmcZ/LSFJgmaDSp3NsqWw/rVYl6dKRSxQ2WCCOEOEiFkSXAoS03 + Woa39jGsJAVdDvoKO/wpEq8vjdj+TMq2WMZ21aCYtCdK8FCv1xYUkGHgqdVc0j5uOJZBvPWMdQxDPwBW + 1rCmBcNtlZZYzaius55NW2ZnY5BqZE+Iq52rW112t1COc3az8K0k5zbb7VbztABVkRU3d83OfrcoxXrT + eHYLqb1BdBQoolR24TpUkxnLB+zFIlabGjrj1jevm9ws6Yob1Zu95JiGGe6yQBsmMCKWtYpFrxrp4d+a + Ik0UGt4bc40UMFOW17wF7ih+mZlgXi64w/DlZISHkCPOZqObJrYxUz+7X5J4GAdZsldP/Zq/49KXkgfO + 7/F4XB1tMWQ5wzUjjLM24iGj+KtSxnFrr8XPdHoGV6SFcpT+LzzlHv7XylduXJKnOQ00m6Qul6ktzog8 + rDjXz5OQPMaauewvLffTV9BLZ7skReG15lK1YFVwlnfX0NqI6n50ljMdbTvnMtfZzGnDs2qS1mQh4ynQ + L6MypLUJ1b8CiyiXhlwVZ3zjo30a1IMWtVwRrdVFb9q6JxbzgIus6kprzdSNKLWmaV1rSj9a17nG9USx + 7Cot9bpojvjVdAQtyvWxOtUVJfV8gY3PZxsZzMoNaqhfDVhhSYvZsr2kXpN4WQMXW9jivnamZ81IOHY6 + 0tSWdGjPbW1WlaXcvuvvnTERbfla9djI1lu/NcvvbGenl/Ij8SLXbWeAH/pSaC1taKb+W1ccD5GcXAuk + mShuqISyDeOW0ThT0y3tpUAF3w12t8gLS/I8E4emzuA4xMPYcpfXDuGbZKiK+5xPqdKbwAO/VM/ts2/3 + XtzBjnaszT09nGohnSVUv5549dl00jq33eTVAlmnbkmrc3Onj3U6yAvdbeLaaexDUvae+ewuoaO91cQO + cBxXrHSgtD0s76V7mO2+9jzlfd/wnvng2EuO9gU27NxVtuG1Pi3/2nzx1zUU3xWC+RjKOvIMd3uVVy14 + TTn+8UB3ztwbkg7PMR5YmlcVqTMc7wB7WPGrt/zgSV9xzlsK8RwitBcg2/i46t70awFt3M+heqIFX1iu + P1Th07r+c7McX6yYMiLw84n34dsp5iwNuuSP0g4gK0/nr98+8Znc+abhmSDjp2L51+H8z1RrGW2fLn3g + P177gjn/zz+/yGXu+5xNKSri60QP92Dt3SxrNqphy1CiIkrFEvxF/iZOAb3P+O6u1wrw0frP/xKw9C5Q + 7uTNXTRIhT4IgE4wBVVwBVmwBV3wBWEQBk0wBmkwgkyIfzBw87KmA5Pv/86kRxgwA7/v90SMB3vwA9FP + 0Ybw34aQCNnBCOcPCQEwBDmjspDOb9bkwdSFAsPtR3DB6vgC+cLPqYADYLhw16ADFcBw67iOAMkQpM4Q + 8nJs3KiQ4MrrbMzOHsowDndvDi3+kJay6CpmKAwbAArl8KNwig+Lb6zGrcW46ZeKbodcz2+mLeu0j+ca + Ua10BXXgLv2YEDooUQ+D7EUUMeoq7hIorxOxznKOCprUKKYs8fJe7hQ10dtKadlmb46uDxbb8EdKsd7e + rhY/7hVvr9n8zpd20dhG0UN+MRKTUP/uLhmbh3sGsLd0UBmX0RpLCvaE0eic0M/SpRo3ZAMRUQxJERNP + ERXHrAxDjBo/kRmv8XsAEQH98Acz4v5yh2qwQ6nE8RylMV6WDHmObhun8EPoYk/4hZ360R+z6DpGow59 + kSC5D1lu6ojKLn+a0RwjIkYOcfTqsUwKphN9Dl7C8ZLcL+n+iIdAMlL6TGYlPUmy0swp1AwjHQ0e37Aj + p8QlReztWO4fGIFTFnB3viwij/ASD47+OgKOBiYoF/Ik3bAoBzLZIEaORuMLg03IGNL6XEUn1UZiqHIp + uSSIvDErK1AWz6wlX8EirFLbso/toNItz9IrLyoawSUJhtIoBwovkYYrIRKlaKMpDbELBa5vjlIu3cER + xZIuo1IrzdLSSIa31DDR7i8Yqw8Y6RFr+FIg1+MvTTIwo7AsL9NoMpMlEwEx3zHRruWZMnM0ma75DkId + hXIf0ZIxPZKuaDM1D5MOTO4dV7E2Dc03j6LlWDPfmAErwqdnejM00fDwRHMqFQJ38mGlDG7BKenkNoly + L81wIdyrWKRTNjHTOgnTqEDTNRuiJ7tzGh1zPMOzObcQKWIrvKhzHMHTJtkTN4PTs6azieZTG+uTPMvT + AfMoPtfzNwe0ZoYzG1GKKy4nOdszL3OyP1uvJLLkDDLucU6z68zjQDWzMbUT58pIQBnkQg0uCG9GQ3uR + FaoGiEBUOY9sqkpU+MqTweDTM5sQQ0HxRf2zQxPyQ2kUAAoAACH5BA0UAAAAIfkEDRQAAAAsAAAAAFgC + dAGB////VrTp8ORCAAAAAv6Ej6nLnQGNONEtGGg2GOA8eVzlbdaJpuoaru4Lx7LVzvaNy+Hnko9lQvge + wVPNdcwpl69KLVhsDDWmTYsnZGpxya33O+uCx+TFBLvqKKaUCzDqEKPk5Xoz8szo4e4Lm15iJ5gAOGio + VXioGHPGh8ImkoLGAMmQaLmYKYX347i5xtdVUam5dFmKmnKayoogQPpGufkxSQRLGNaa2XF060cbaCaE + 5qv7smqcjJxc+mrD56hH9OkprMM86PQDowa7E1FUjY00Xt6wbJ4t7uADLAs0rMZynQ5m0iuz5z1SArVe + fw6gQHQCyRSj1IEWtCjhwLkjx6ggk3vTynyb8k8iLv6N5Qhy9CIvjUIsDEF1G5lxY8SPzyTEqwMoJEsa + M5l5rGlKpiSFw6hw6EcsHL2VONO4zALzREqWN4t6aerUxjejQEFp8KlvA8alB25CLajtalJ2XDl+jark + LFoYUyVZXQOUZ7+ffY7lWsvuqFgyMcuaxYtKLWAVV7ZIkzsC3Du2dwf3TOLXLlnHKikfEmyZJt0ekE56 + TrzFa2YRkCNDRDhab2o7mFcruMJV51ytPPbwbTwYxGKlfukcLNradRzhYGArQfxwJ9HleHX/eiNbsxTX + wYljsh4a6Q2UVExLZo7W+fTxmwnnpY7dYvrsoLdnbXMZd1QIhTr3nPcJ/fri+/4n+vMPXwymiRZeAImw + 0VAxvnmnUXX9qfbgMw7NlQMJDA4F3kwGugXXc0acp1+EiIiYwyvc4XDSIk05aAh9j9TlRjXO7LYai/3Z + SFwe0d2RUCYE4rThix2iphNi/ORI4lNJ3tDLjjz+RuNpjNUU5CNDZGShi3E5SRmONy4p1VsV1mLIijUt + AwVnvMQD5Vpe7vdmiNqNGViYH6EzioBdLRnnen2m1qRtM3RTp3wAVdlDJIbq0iYXYI74aGNZjtkojN9N + KZFHlbpizqaLRoohqOS44ymbhYaajgCqrspqq66u6uicu5yonqgl2sqIbWTqacarvv4KbLDCClvQisMe + q/4qfcguy6yJBrL6bLPSTktttdZei2222m7L7bYfXKusqyraWc+f1hwpax1FXjgHrrG6i58tKBpjZjqI + xnffXnZEx+6H8H76b0AvzatLveaY+1pF6AqCYKmqBAwwxAkPDJjB4yBcWTALM5wffxJj+vFwFONlsU3N + iOlwPh1/gbF1LWcWqGNQvdyuJqVtnA2ILId8Kc/XtVchveQmc2+ZfuDMMXk7+2we0wID7V7KaQ0ttM1H + 76puNLc5XTPXE1dFZ9WoskIzAKIY2eIsS3stHdt7Qq2y1JCOfeq4MQbYojhyc+q2yH2/vbeiBsVLt9WG + iyl43kqx9/e5jV/EbuCmUP5dt91Dlpd3NbdwyXfjjvfdSL+Jf6EV4Rn6eDKNonOjd2do/+x5xm63heLq + vDUdMb6oH52u4tD5Q5K/sX/dONY8dkT57odv07s6VqKUZtvDv+055ztJvjjuhRu9PPN4K1JMcsGIUzaS + sVsfi8bYlGy58pdjfkhCrcs7OvHTQ8i28azbPvf2rKUeJf6pSX8iqIKFhHc//OXvIKUbFAD9V6vueY9C + i9DVOmiTpUqUTzgbpIwvpCZAKZ3ufw98H/pI1yMVKMYWKTSRcjxkqw7mBns5EyHIdNc+S6kPfA1cDKHI + MpLNQI87J/TT+dYlkLKwTxDli4kOfecJDH5POkGkYP79dvgoGTZHJgQ8E5NyqAgnKqyCgprilUwnoRBG + RYsFEs/4NKfGMcwsjJXTYRyvBwuMoNE9omJjUbDwBH0hhYbc6NkNxyLB910xfiuki2wUZJg7etFt7ggk + uqSIkzkOoolCGhkZFVPFJ34ubJHyI5CKUBicFTFpe1yk/baWSMQhjZHQS5/0jiNJpvRtCjtoHlo0ScJY + jlGQGtFfdWpDyL8sMAq9nCLJvhhM960sX1Qik41WORrafWxXjcTiM5OnpBJGyZcsYaZBclksK0LMeNIg + p1OAKcdUHEhnTvHBm6CRntCBihROOsMEK/Yujwnzn+78SBDi1I5kHmyW/XmkPv5oMimYQVOgA6UmQf9I + vTKE0mWzUahESLJRgeUpmwFlXEV9ic7MmY2HKVVGYrroGiKmpJnYVGbuwMm9Fw5zLW4cw+s8adBf8KSm + MxRf02D6zpJOro7wUGR4VrqvfyC1HD3KCqlaOo6QEm5ClvmKgzjJmZ3Op6fn5I1HozrEM/JUqltqJ8i4 + 2tWJMmGDaJLlWBXoUzhOlRlpJdNZGfZDoe7NlIi86SHpmCixYhSveYXHXyPpkIeI4bHnrGV3aLNU7MDz + VkzNnkX/SAKMVWKvjNLeZ4sZEmAYda5GlKtSERvWghZTdqx8CVFLkRE5UBYkeoxsBJ3qptdCMJoqbEiB + aP4LWJ8Qsx65pWcS0WbVXE6WpK417G+pclqDDqFs3MQqKW8JVHvpr4ywvGhwqzvc6+pUtuKVCWEZmtXm + AtG7g7ogeSlq3tnCboQ2BGMnFZtEdUIVG/Tl48OgAxap3ra/8AMoeg0J28TyjiOjMGdWE/ybAy0YrSL5 + 63uXEArhthKH2J3wR/3GV+Zi0rSz2O0dnvfT/jnGEV7F6SYFpLmgPo2vBS4uUU9BWudZya4ynvF++YvA + k44zv1RFMdF6vN7DApHAQyZykQtI3Qd3TZwccu6hnPzkJttYqCn2LJMzu9zBfCUydFWZLcECZmO4uMTp + 7U6ZmwpgGcO1SyIGb4QlPP7N+BrvwwJmRcqQEWR1/Ze9Sk20mF8pZT+TWCR47tQ/CO1KTUgN0fdNxeYY + gk4dzXCUkd6xkicT6DsnWdWtkJumeHw7+IZzqFAurHUzempUL5lR8qVqra2MZF3z2qwbxpQB5zzpUkP6 + z27etaFnaq9hs7bZcmYrvvT41GVD+Mj+LWSqcUtaTCPbxFOjdrUvpkpA9Rm5yfa20jzdmy+jgoY3GXes + 14fFX2sBDjXecq7NTG7cFjrOrKbl2njlbI3qGxNb4Smplc3YnG4H4Jpms7xZWt7YIqTH9tYMHBZ+HG5v + u3OddffdZuXoiJeWh7ams0kqbrL6dZy4/uugYKLR6f6sYfbWAme5elVIpJmXSoD+FOU3bSzDm6utpSl/ + OKwZ2XKgXy0QUB76iPCZbW0zeMAlN/m77UH05wK22CzGIwuVOytAQzbgVBL5yG0+kUWTDr++RmtLCfLQ + l+aZw/BueNa1Xnauc9mBrpRkHDHNaAfSF+9DRQ28pQ4SF6I9y8mDu39Gq2i61523ZA/2xmOc6eRWGoXA + 5bNSk75vrOXy8B8V4M7bbRR+ttrQwJYZZ3H97+vJPI6dN7WKI9l1EIN85jsEORNvL/jcF/fbtZMk4ktP + +MGnXtqaPnM5aXz7bmkfW996VbS0hYHti3/8wAoX+MmPfml9P/3DWj/7hdX99/6z3/zix700hY/15sPe + 0nEPvtHfPG+15ix2dlxudxqoB3YlYWDMdiiro28IZXyhxxeq1XSZEjQqd2ODY33CxoAXd4HSZxhydjLB + w0GcpUVeolY45n/xBWLyJHrPZjgZ1Hvg5nvXgIAa1QaxUYHlpmMf+G/eQXwbuDQyWBVByDoEZxc3WFZY + 5mPG93wJ1wQriEvGB2UuFFlp5WBfpIRl5VZy54LXh0tSmDL8xHTNYFVttYPgI2nksIUauEha9YVg+F3d + Jktl4VBpGGVGQ4FBZIRqB3jm0YaNtXsRaIAeOHEgmF0vpjCP1XGNgIZx0YOFuHX7BxLw04erpl8+SId7 + 5/5jQ1KGuzNSLzWDBYNmiAhZx0aISCh2mtiBnPgiReJMYKc8ryeKasaDcTh2oEcpmwYkIbeCxZZ32gGH + wjeLFkSAR6dlrehTDVaJOTdycEYwpjhwHYZtP/Eea9c+7YRMw3gnyCeF++aGtbhuDbiAStYOOAaLahOC + PjIpEyIXlzhmgaeMyyiI2POEAKhx0kh2nRZFo8iMrJEiglNFqeh5/qZ8cxg1KXWPHOiH92cSQAiJsZgF + klOF8gBXD9VNk/RLKkWMEniLF3ZvUUg2ZtUSEfmPEyk6jdgwoLZaNhV9uKhwwAhSx8dcXthlweeM+1MF + brE3HTdak1AbSXVe8aOT1f4YdUSTh1UGk1AYezu5fAipDlrjSNxogUOZNjCWRxnYKZDXkJvYjE4JdJ6y + jxK5Cbp1JKDkj/PokkLGPFByd4/GlS7nkK6IlbQIY/nAezuBD1OJlj00EwtpkC/YViJJc6UlFMznZV7p + TXgJltT4PHCzjsQmjNtIgcBhlVC3YWlZgyIolxQ3l4n4JLL2eU4CXWnnOvITlAT5jGtpcFFTmKfUhK3w + J5glljmnixKik9NxGBWmmZRYlYtFkwnmmUwpcTqXkxySWnioNApGVjGChRppmfVUnHcVkiMZlSd5k7yp + UHa4JpOhWiapS2s0H9NZT/Ojd9KIfz00dMBzRzpof/6DFFjHuS88lyrjqZVr5Vm3+XP2MJXTeJOQCW4U + 4T1XaJFztjqAqYrCeZ8Oh2D80IjJJYMQCZqfJKDe2VtYdaAbCZzB2Rwthhw9dgkp2RMMYkA8Zk9YmYPy + WS7iCZvkWZ5PVKCfyZ/Qh5ypWAtFx4Ez+ZceuVDVpJYaIkoJpZiRmXifR5d5xUseCTxpNhAsCqQ/KofN + A2pQWqRWVpsKGKCSCInJ6UXwuJq/R6XzhnDe5HcuKgskWqZbtJltmW/QuaNtN6S0d4Q/yXYZ51iuSaPX + h3225FBv6nj1+aRx2qJ/OqHh9JT1lY74uaYURKfhmUkaUoUR4jpmSqjoqD5eWv47qhhdiDmmdtqN5YSe + oyGVHAp1TGp6o8lOKamQQhmJvhlTnGpS/4moKzZWexp0oeigqlpDZIlureqqqxFFlApD+reYkGqrL/cf + 9yGiC6qaCQqSB1lBPOp1QviRSvldGaldQspYiQoaDiiseRqmKwetGDd3lbqfDHmIx6inkOAbltKSnXqU + X7eUNfmNAUiP/3dwRMkvxhodk4VE8IGpLJAShIig0qp5JiqIR1qKadNdoLpclgSZZxSw8tikFDavBLad + CjttAboQqHVR2kRPXfipfgqN9SpwvOdbgpp5xDl79ENyoHeF0UmyAXaxKbadxHcWY4iuGMtCqGQqv9Os + I/6GryorpzWLlEG7sLlZkvL6ZB0bWlU6sV/Kq0Rrr9ZZk71Jipm6KZ9maXrlRu6JnYDqqIYYqgGItbJJ + So1HkvjYauEDAkSlsyWHtMkHl0Z7bjXiiyfHtuCqhnlkQVH7mrL6q57mUvI2t+MYl3XKXoRIQCQxIw9S + b5FKs1m7ihIFlWf2QS9JJwpGAY+bt795hDJ6t2gbYGdrtazIiRf0bGBLt/U1toRJtbtQuIZ7uPEIu4pb + rIWamNM6X0/bkazZYaLbsmJTuXE1fRu3s1UaXrf7O3+Yjw2iud9KuDFHr4BbraibiJuDqNGYlJhhvc4K + q/G0lfhGjt+LuJZqrqZqsP61J7h72xQRNbK79qCbR73iFbasylvqSKNiWY7Exm+4ib/PK73V16vVa762 + m651Gqw22b936byjN7OUJrwEXMBXW7sIvLTpi3nVebkN+sDqZm4DrIY9+nsHjMFJ6bcA1phpBr9Ai5da + OncgV28THK1ia78XfMKPub/a+g4fl7s/3HnsmsGPGsKk2rYr2oAmnMP+y2RcdJoNrLuHSnK8G8V2C8FG + /HhI/GU4TJ9S/MOW2LEJ7LKbO8XMu7zkS8XxSkbpVLyW+5XBOJqRgCAJG4YHNcQ/CxCvFrszysYK6sYh + WKA5RgxDq8NV3L13rK423JVqfJWgq2JcXJDHe6sWdf4hxri+1oqBu2u6sdqZjBxV8ZtAk9iCiSxYmJSZ + GPSurlvGnXg3B8x4NByOfRzKUptGxmV2ogiELOl6dqy+x5gmynmuV4zFjQy9swxxzXeYt7wljMm0mUo9 + jduFqCiyyBO64UqkxWzMohxy59iElMm1yru0oQVSH7qYw0iwu3vJ3kiUEUyvlCeLyYpHQ5TGnIcGA1jK + OamfxGte40YzkMxudXuqlUWtaOhon4i7zlZhRRzM4Wuo6+ym0ZbO2IyDA32eYkzHPSvPAIqSJownBdYy + SgzDbQvSkZy/8fxGL7yyD+nCzcvRrCN/L/0r9AfTM03TNW3TN90q3xJ/5Qctz/6y08si09vnfqsSfj39 + CtOy08pCCzgNfrD8u0R8YiDMllNLP6nM0BZNTFYtWNtwVQ84z5560Q+dzZi4hIbcwopY1g/guUCDJX4F + NrgauyBKzDI7ue6c0lV81mgti8PKJgzETlaUnKH21eL7yRo61hQb1n49hUi61XY2VfLzkPaRsmAtzIF7 + zXR92GStcIR8WXh6eVrjiImjoiZWOsHKm5Rd2Z4chpeZ2eALfFMqwNSIPXQKOX3d1lcje4ZcZxS9sbEc + wK29qMtolFyJPsm82rIAG+xZ3KS5r2TKP41ib/fkz5oN3O+paFiKXVrNwx38E/6KyuJ4dogzx7hcQKrr + xf5JadmUYnvV7dqcx9kjqtXsG9s/UBoJspvJ8XFc5K5AmWOIfdWcLMlZyN5OJ5jry4eDvchtcDO4DZ5T + Rsn2Ac5WpMfWrCYBPeD/zHf365zYOpzoixpnI8GMCV3/OkDW3eELDcWGfeEYnuFuyYdL4YAL7K+dPEAp + iLyEKXnzjeLMbLwrzuItPrDJGsj/7cFvkdxUzUfRldd8bR6Q3b6qDa+26OM/Xtii+T2EQoLIiuS1J6BB + UcvdNVIHdN5ds1dyfdlSPuUmXqoafs/mTCuiSZp70phBXqK5miBiYZeYLDzxzeYAzr0WPuVaZONRSIR8 + 2tfOjWeOuN0WWoQ7ldByrP6CYasjKyzf+crdKp7mbITdNE7oeWJUce4cIhs+lzWQVlHoSis9K6Q3e5za + rO3jiOeWANIhV8LcWiLq8pnQe1gLe7bNtzTNzYzaCg3QB5bmmZzF6F2uFQ0ENIXXnkHrpj6KXLLgTx7s + 1fzHmU6OnA6OAZk9p63suvmKvww26u17j03heyvg2F7X6O7eW06LqAh8aPfcx5rPfZ60iGy/tJzZ9+i2 + NBtRwPxP0fPUUxyUyH6wKN3GQsveC2k9tft6qDyGxm2k5E7wVKftfo7wCe/frY2g2iu7L9SOfK7XyTvy + ZnNAbbJ4LTjSJJ3NBRvnH19l9g3wPK7K+ZJCF4/xhf608se875CavnzVTLZNfbxix6DEaHOmdDuv763J + Ue1lpUkU9Lj868DelpzrZjzgT900sIN7O15qj8+qWdkOF+4I9bCITAav0qZqGgT65gzE9UVu1ytesLat + mRTZkmKOjf5Zm7kqSH79lhS/7trM8aB138f25F//xYm/P5NX6b0r8YoP+deLjtPN84c990A78+U26pWY + g61eo7aJJW8/X3IyvK3VoY39hWfFnP2Nm/p00Ly9xC1G+tP7JU/1zUxuqFTIJZHTumfMt70NwHiLlLVf + npu/4aw3n8DFOVfanOHNwdUe4nF/4Zdfypi/68+p0cHdfxe1/FsbFqNP7Q395/5imrhrWN3Uz+4/rzG0 + lmG9PKfqX8iwq2Ghv6BYHfjmf+yzz6BT+BlbznXRTgDBEWOz/Zd5s8kjqDos6/7BBgtBjjzRVL3WtrXc + WF7H2b6TKJphu942PZTQoXPtPgah6TdhIDtE3KMZe06x02qW2/Witl9xkqOTOpVGVzhlNOXK0DaQ/Kaz + i8HSOIFXyfkCqQQJC7H8DPnMFkMW7cB41NAsHknK9CDMKlga0wDO6AIRhyoTx0ZNU1U5V1vh2iRAP4VG + Zd2UiihL92ZxJ4N0AVBniW0JhxtdBZGVm72Ynb8cYd5ugYEZMeR0p33hduwAh3oBGXPOh8FLZLWm2KNl + oP7h5+Ppm7uR1HyniwXibvEVk0Rh1zoo4cRRE3aO4JMraI7heGdPhTyKF0lYxDgmDTh1+chp+saPG0hT + RBIqCPADlEdbE29ozLQxJk2bPm7ac+hIJT6X4lRWgMkFJcocLDPkMxZRYs4YMp3ahBo1UEARQoG+Ctpq + CURMWie9ZHqjIFUKU81SRJu2agZ5SoeK4elV4NawScaSjYRxLVt4ff0mEtnpGr2CTDx1Kvspr424aQEH + VhZZctuFWcEyZmvB38CkmO2ewrKYVyhnlCurQp1abhy8oalyJqf43eM1o21HXc3a0G7ezy4lhR1bgjZi + hEuLzkKare/fop7f1AbaHP7FiQCHXm/smLmzoc6jiwEvWHqvzLM3xtUEk/2yLrnLh9f9G36iLdvqG+p+ + QV9t7dCJyo8v+eYj8KL7RroJNAemi8W/ZABcTsADDcxpvApvi2LCKNaxpDuZutsQhN1EtOdCDHFCcZ4T + PeiothO8+SCMEk37gsTP/GJRxQx3bEbHkKqjaw+YZizFNhrdeu+MEOn5sccUnHzyrEI8AlLI14j8BYI/ + IsStoRylNDFMV3R0I6iE9oslIyeEm4MP31qyAkkox1yxzlXK9MxBTzzD8UMur+LwTS+ue2w/LqK8M0lC + FV2Uyn9GChJHzUZMsc1BA/RTvQXFa9RHT+3Tb65cBv4TlFIZLSXIvUy9PLU3UMmEtZB0uNuUNBOynAGR + Oad8D8b/Dm1HVtWGXVUQTnNBztVeU92yS3fUs+SrWYtNJdFG81yBPUpCAMwPXieAkyiGXq02VHM7repI + Jj1AVYbiTFVuXGipAbeDa4vF984y/2Cumm55YIXNZ6GVqJxz0d0uYWE5WhfGTSp9V2BnMWW11jwQXlhe + jQ8hK85+bxUK4Hcx+NbYeS/GmFqON2a5WW0lnfbXkMl114qSNSTYHYMHXtnlZ37GAS1rRIaZZg0Wm2oB + nONN1+J3pbDX0aCz0HdMqAYL54U+Kcbm3khGMFnnprjrWWGqX0a7oq1T6qnfcf4SnJpHsSt+mu0r61a7 + Jr15hKWSgww11OxBrFhoYpVbbvWIw8rle2/H1/b7s5jrgDtZZreuQYDNOe9886U9D1300Ukv3fTTQwcd + ddJVH7311WGPXfbZaa/d9ttxz1333Xnv3XfTdWB9pc6Gn7341V/n/PjfP18JgV3H9njxF8+GPHLrIZlZ + LMbgy05Vuf3+ge7EyTa6pRjzxp4G9U+Ahuvh2Ka+awahbmJ8p5czukOpw2W/b//B9xpCcOpj/ZMTUvDA + vz74ym8EPI606gHA60kQc8pSFzsKSD+oCSWB1SscKdRUucZRcE0krOCXkCWhpp2nZlsz4OBspEIPHckU + Vv7zlA17lI5SDfBS84PY9F7owxgWDIKAGqEJbYbEBWpoVPoJTQYpNbRSdPBke3kYzDKmxAAi8VvvE9UD + wYi4QMnpDGwI1v/k5Ka3ZVGLhGvj4V6RGK5obVIimBBmqBg9EAqwRjOs4Ru3SMIE7kmBv2rXlzQINVCY + 0YMWNKQR2QjI50nSjCXxDvx+OMY1lIWRVYTFC45gLUm68Y2dlJkrHJKcSUaCHaZMXxGxqC1RjlKTbXTl + slDpr02ghXhJzCT5OvRBSB5xlDhUUR4r0wMD8JI0lfQkhISpxkgC0pgoQmZgHrGWzoxMiECTJihlOUta + wtGEzkxNNnWVQnO+MmcBG/6mz8ZZTQzdp5CPqmULtlnCbnaBGSI6Yz2DSEt5GmhGz7EDM+NyzSE6Mpqw + JCYlqTkT+iRyk4+55UL56Jh3wrOYERXjOWHgPgalcIkw9GZGNWq5P47TcLb8KEhlo1L+2EahJ4XInNLU + ioHuaKfhqQJATwKvdOKzhxjNxBnJcEViqRJ7PY1ODUi6GXJKyzjr+x47MelOaBJqkSxtqQkpFx4GgIg/ + TymqTSWaP4fajaIQRaIcd4RUlVSVqIjEn0lTulUldTWeFNSEUxtWOPRN8KWIaicR9SohWQCWoNgzSUl7 + JNfCRBBvhj2sXpS6VIGq7R87/GpcySjZVV7VqHgNZf5mFUlYj1LNQRGL7JIMIqL78TOp5UtsKIPFWALp + 9iLM4S0/8xNVXxa2Y5dd4eXWSkbVuhRtf5KSP477DYaltbTIPSt1mbrSjgYtqr8NUFcUM13sWja6a0zu + NJXo3TmaJ3s5RJ/3+ojGX5L3uuFErTjdmjDPuta94A1mce2KVtOSQqb4XS26vPi1JzVovNYVL3GF9l+U + ZnXAHNWielWRYAX3F6n5rNqEH1zh85IWT9vVbxjb91wNn8Ve0LtrZT854odyUWP5wXCE48tN2tZxxyCO + cXa1W8oam3XBh0zxiyGctn1+s77oFeSQ5dvYHPNXwPP9sI9/XN4Zl3Nhor2xpf7OeCIXVznJBRZxIwH4 + ZXtGWcoopnJ1W0hfGG90yVumoJp5SGSexvnNcKawkq1sXy3bWYJ4toyej8nC4frZyFcetJnLjGb/GVoR + usphpO+J5EDjuMnmJXGJDzwsAVG6ro1etKb5HGJFL+7RkmYfqRk16iKf4ztOnjKg3SyxTtt60tUaLJ32 + jBV9WtjBAF512YQdDVhbyNe5HvY8SfVsNEvtp/xTipiELGpTS7tC1eb2M4smZ1x+F6jAZi6srlCfZbf3 + z5kG96abVW4KZRvdYe3zbosdSD2ektPsxRa9673iE+Ib01N9d6of5+xZX7hY+9UxtMN9b2JH3Ni3DjbD + Rf4t8IB2u+CfNfCZS73thafX1za+OMJJCepWh3zcI6dxw02eaHi3VeU8Fq9oU7NumuhcrVa1Zr4H/nGQ + q1be2CZ5s1ne5nZDNla1dbTFZf5ypPsc4semuU4ZGu8bYnzqy/Up0DfedCz/r+hN4nrDk05wq7sb67e1 + NMqjzmVzwYfni6612d2O6JZfWur13vuGOV5wwCIDSU0ou536Dipuef2pHR88pPt2+L8cfe6Mf463v/0p + DzFM8pNPvLbNHfil81vZBMZx50v/eVnRNO5/v7rnZRw51J+G8l3P/G8Mf/cBQV72sKo74ivPbqUfyrv9 + bMfsaS/34B9Z9FBn+4qM9/675TGP+tW3/vWxn33tb9930+f+93mXvNMxm/dQQr7mn7x85qtd4SnfuemH + 6nvlo1348kHK+uPzyPhvPf22lzhvWCKhzMJ9NgTnAHD+6O/hvg7uXk8qssyF5O/OTuz2co7iAG8AmYxL + fk/vXm0C/w+xMsZI3A8Dy48XNjDtmsoDTy20iOaIooYWKhD+wukEUdBxaFB6PrCBGqLcDK/+miMDleoG + Q099hNCKVjA5CKgj8kYAD7AEe6gIKVBtoLChgi62hIv0jG0/TrCfuofp6mQKJ85TfMvTWG3O2E0L7U// + ZNDjwgQMXS1MmmmPcLDBQg8N01ANk8sN9U0KEUwBA/5sDqWLstqvAWMw9kxKD/eQahARD6vQApHNEa+H + +Kou72BsEUeQbyxRhI5w7ajwCt1IEn/uvrTkEl3OBjMuV7ChXvYqbvQMFFvPuELC38KuFDER9LqFEfhB + GlLx7Qbx+RbQj5BG4zLRC2tx9QpFGRLDEwMlt55rj5RxGImRD43xfJRxNI5D43qFGV3v8iSHzV5Rb6DR + 5rbChvrDy0QuG88vDHctB5XOFGEOOwzOnswkQ0DRACGD0CaxGEuuVKopF63KFdOR18SN79xREeeBkP7R + orAwFNWx+cBRGu/BH49MG+0xMJwkHMMR1xKmH5VwGweBIgOy5vatHdEmI6kul/7+hU600SO/EdUcsiRh + srcUkiVHqyIL8eBeMmhMcggNA9hAMl/w8Q4fUicxghl/Utsusg0LkmV0yyhnkiab8Q25cShdpil90txs + 8hdHUisNsirTI3sAMiSNbiun0imy0huBsig/DRtrUizHEqtIkiaQbyf98CCXoBqcJyF/5kcskS4tb1i8 + Cz+4RSNG4CzzEZjYjyg5Rr34xBoI8xw3UipZ48vmkimjAi6ECivd0gFxsvFiUmNIDQksAqo2kzM7E/c+ + c2GWLTN9sjTzDy65cjEt0yxnMWIMUylPswn3UjbN8i5HcyG7kixvcjZVszfvUi8dKx5VTSiJE10o8zgj + 0S81aZMNySw2i/M6exMS3eU2/y03K8Mv6zICjXOukFMChfM7dzMys9PeFIw7uaAAAAAh+QQNFAAAACH5 + BA0UAAAALAAAAABYAnQBgf///1a06fDkQgAAAAL+hI+py50BgQgORXOh1gJQf3nVSJYm2Z3qyrauk77y + TNfdtmrM5/BPFTrFaoch8Yg0cT7Bhe+gA0kwUWryqjJit9yVtgsOM25NZVnaOIuArS/NLY6flpTqTmE3 + wNdy8L4PmPQXSPimVqJ2eKdolbU1WAjIgTZid2YU9RR5BLnpadL5KdqjqXJYCrWhikrFOPY4uglBhrh6 + mRrEGuu12yvkC1xJw6pb91CMwxLKGywWMaF7XKdLZpza3IatnbC8XTgr06SaFk0Jksx81e2dAz13zpoy + zePKjrBuD4if7xywj9sqzw880uYJ/IXlH78dtJDIy1NuocKFfij6OkjCoC3+c40sJLOFEaE6izP8hXTx + px6/iSQTtux1Esgqjx6ZzMyFJ2IFlg14SuTjsMfLnkNj+Sz6BoMppQJz0QOZ4YxOorCQInIniJTVe1s/ + He2KkiMbgk4CbjyndMfUVy7BwhA7Y4/Kn24Lfa3rCO4weONqWisbtyreezGzqa17dzAoxYHkucD4MXLU + tcq4JAbmOOthxIz1de4Tg3JAJ+jGTQNtWXHoSmvlDr78mWrsMKFFy0THt4Vtbqnx1kaFe6dWzrPFwC6u + YDURkLjmjmzrFlMpeovvvEZOG3vFVjUmR/Xau6uWMj50wnFOV3t49Vectv8eLqlgpF/E+RWeRjX79fv+ + j9xEz9o1ohw3BX3WQZFTNOcxRiB7DaoHzVndhbDbc/O1VN8xpMUjVYXsPAhhf4L1NaEOHmoGHYYHppWT + WCR25JuIKcpIhHQA3nbjimFdmF6LCMoEEF+FDQViiDSiCGOJOfIYlEUp/cjaJGbFVqR2VWKXYXu+NHgl + J8IAlVGBDh6JJJnyAbQkTUmCx583g/wlUixppmOmDXV62dGcBSFxoh5tagPJkMnBpGecd8rQJXIRZtLn + fb1waY8Akk5KaaWWXoqppf5kymmnnfr14oyHvpAocqeFGl9Pnq7KaquutvphF5joMykHtW76aq667spr + r77+Cmywwg5LLKcbBDv+S6ZsMrmlrBoKGEZT240aGLXV1uQfoM5qyx+FhWYk1bTW7jguudxliw2k6W4L + rV7vbfhnuYbKm1eQVLKLGb5ouYsFcI3KRi+dARsqqFXq5quvt334G+/A+DkcZ8EGi7vLwQJ++w5gzEIM + MMcjSJcExhvbiTCPEUjc3WaietwxywAHFw7Knln2b5NtniwyIiqX6XLLPS/wUM45r2yzUfqOVrMS5CRd + xM8fO42fzPmB2YzFA1J8LtNhDocn1Gx5DfSae0ki2oOlvvVnFVoHyDXJYA/6NtwwvzB0w24vyyROZLet + VkRnYxk30FKPFQd1AlvoidkasygHIwdJ6HPcfyv+KjTVhZeNtV1HM255tNGcDCqcXwfeNOnN8dl51Zs3 + ljmYa4MbJXOch2166bXPrdu+hNimeOKtP/E62ziWx8TTtft5/OA+1t1615qvbl8gJn4uzey8HY+86af5 + x3zzNW7SO1kWSD+TUE8Vjzb2k8eGu8Z9dm8u0cY1D3zwpJgYZmmHrF8c/+xPlTT4xQ9xqFmd6+x3P0Hh + LHR8mIDO4GUt/3WmfRapUPhm1rD67Q59pLmYVsp3PqiYBoFFkaBi5kbCLljQe3a7m/igtDAOLs9wKGjO + 9IjXQWqZcDDHAhXgDNjCMy2OX1xYYLt0lzq4DUOARLrdBYZAQ3KIh4UElJ/+675BQfJUZzkpJMkOwYKO + 2sBwIETc3QCrCEQXvjCJnvvLU3JoPC6O6otbIZFyGGcTJkbiglQU4hCVVxL8lW+IkXtMF51Euibc0XKA + bJxhdHRGK6rRR0eMIVT4RjvuzTFwt9DbD4P4vTRKayEnuQwO9BipuKnhBmRUVB/9KMlwVRBmx6Eg4FA5 + wceJ7pDNeiWiqAicoihShbx0UyNpdJLtWe9eaYQlGls5PmFyhZiEvBcuW+K4cjgwmlbKDiivNbU1kiQE + RSJeMStWxv3oEok98eQnv/lIUAYTKTyoEuT6d08ZSWaQwoGPkZoZyaJJUZzjfAbZzonOfPbnkujJjOj+ + +udNnj2zmghVoZiKiCpsDWU6IqxoM2RXGXiICESXIakZnkXPi2I0Irb0hiCF5E998jOkaPDo1Xw5r4lS + cpkVzB4YXNFSdnQ0emBU2kbmJEY26genJTCp0qCJzQ9cKZtB/ehQNXHNy2VgaVXd4pGcGkqAjlGpQq1n + DHE0S5z1xQ1ZJaYIfZjOen01os7U6Rrb2i8fJOoUcb1IU3cWVafcUI90vClT0wdPztkUXbZbGLzwmrIa + AnaWZJlHAXcK0cOOLrEHfMkwN2gvsgLDPEJJa3CK19W6LtZ3dA2o82AH1XzkYXIopGwcIciPmdIkq2xd + LfhaG8+RUdS0TygsT7H+oZKUHHNv4OLtQN2iIOAeTpIEhWzMZhsM69JtKm/Srm50ktpJipY4mp2mWCsp + NqvOzrjjHYXEArXcNpoivn/VDjWk61XOFkO2iN2Fb2GHsk5k1L8sveT87Ntf4SaYurFFb3YXLIr/Do+m + sUMueLF6SPY6o5ACza+CCergi9x3tNtI0zLC61jYojRzD82sZou0Duq5NB7qzW6fTkxfLQmvwSaT8B77 + dT25fhjEY7Uxhz3hXcKRar4+XnE4eXwhI/6TsyodMpTbS75S1tivde1bkidbTSzDEsUUoTF+jxzWjD2Z + UPUdbZNDLOQAvRnOa2orFL/syM1aucoMhiQ3uSz+WTeLOM1zmPNxoZXjLfYFz8/zJYwNuWY5kXbL7k3a + PwydXgYSIjOjmfI3q6QQYgi6zaP+RKL5XAtKl/Z5GGaMmc9s3vP6OdMHdY6G+/rTPsORxNvg9J/fCcpH + 023VstjNrcUMZF2HOcKMRtt0Johm8caaykTG9RYsm1P/Ftt+oVayGbn1bFdDWKLT3vOsi3xWCj8Yi+U9 + dJKb/QqOijvaXUa1XbeG28YNONAfZXe7qYpkTCNP3p5umLBT1aJzxnS6MPnGgVmQCKaYuiSpifiY8Avq + sSW8H/Q9NrIj++/DgG61jXwdK5ddx3FLNOMUJ/a1tebxj3/31PQuC4a9RXL+9HTxcdCuOTgbS22UyzzV + 92Y2x4u5D2yLVE0BfzPM4H3thx2N5RS3eNSVLYtcVzTp/zk3+dR8bayEtuAXOnjVwcxYcg86rzTnN5P3 + 3WygXk7oLsYX1ase7iKaOxLMs0mjH8MveDc57yONQwzuft1Ws33vxQ6Zb8vpdAmLQ+CsOzDir7trLiIw + 5nSGuGFzzeYIO3nePv9lsU6PqWNpali2Qr3rX08pXAlL9rCvfatob/tVJSv3uWo9739fqd0DH1P2Vjuk + q20GpOeWaf+N8XcBnTi1tR36mXx4u+935R3LgfNM1/hv+8Hr6O+z8FcvN+MfiG6iV162Afw86Al8NdD+ + DR0sV6p/+Q+Nye2XOe0/nnvD2YRzZFZWUnd9caZJ7BQ7i8V9v4Zw34d+xydpAGhOSEN583VbsvZLGIWA + XOV+AzghePNTUDd/NqBWQgJTs3F55/cOBdNkC8iAMweCz7Vd3rZhvqMRMLVvueV2JRSCPKVbDkhKcsRa + 2mcbuiSAgAceI8QcFXhSF8iDoMdRAueCL4iEQLg0H/hCxdR8UnATTCGCz+eETdSDiqc6PbUcMZhvw4ZV + nccnj9cI5WGCKEh/HDd2wTCFbIhvVoh2S/FQb5RiDuh3msZMWwF5CrVEy3WH6bcUaIhZuTNKJ0hNQ7hA + gsWEHfYSU4V/Z6cniZj+iXnYf0ASSI8oAnmkgUM4igaBg9NnNBNTOC/nKD8XhDHTgbu2G6iCDH3nW9Ln + hSKlMNfBijX4HspEaKTkIYzWXYUijO5Gc18mGUAhO1/4Wpfof4fYRZxIa18yi3uihrhRDvLXhqamiwrz + HdA4jCriOXKESrcGXlXIiN2XO7mhiKfDPY/XITeHP774jeu3UsWoNoZXYthogaMgFzmmPwAWQLnIV9x4 + jzHyi9HydpPnj8ilYoW2ivkHeBQSkIcIjqKGIBqhiu1IEZiYgBZZdHy3jp4nkJJACZRxhHi4NUWoCG80 + fgyZbPo3jRcDQDb5f2DHk3o4eoYUGQ8JlBZVCxr+lBYd1YmIZCB/CIkPWIBRBzwk6XI+6Y6hGI9eVmCk + +H4Vhmj7dEqV6Fr5UCqBCIawNnFPtYjZ6JIjaW02dIunlXOQ4ZXGAJZhmUq1tl3VWEcA9JEG6IpcyI8t + Fod5NXP+kB/TswY5+IRiGIvWpw3ZhJYVqVXJmAOoaENbyZcGJQyDpZjmyJg6GJFWUQ8iuFdbJYt50pJO + WWhSdRu54ZHkJY37F5r01I3no5Zsx0F6Uj+oJBpV8CQUaAVQ9y/WaH7/qJO0iY2daZbfOI66qY2EoldZ + mEeW4F3ctpSgOZvSFCWX+YnnaE7OWZWVFgTHyHPaZZ2faQ/O1RXEoIRXCVD+GOMejaKVbvZZXAmYSdkj + Ssl+GCSahGcv2lWadPeSFlYGYieDnUaOv1SX1SdU+iiaYWaUDnqOyFeUUSmepbBNE6mL0UGUGCh6/Nmf + P9lZm5YDp9mIqymgWqVnHAgRCyoEgukmyyeh1OeUDCOiviRDENcULoqSK5pDdHmi6Bkyywl/M7qTQjlr + W5d8GkmhnrU/zXUuQRqbU/ko6elRxAmQEIpQOPY+T8dDBJggVOie+RmS6dmd2MGRlzWRxxeh0AWmP4CY + UsmORiqWZvp3aHqgRFqK17hUXPWDY5qWJOqZximo7MGeILqmeTmfYBRdUhSUarI2JHejveRSZ4qnkXb+ + WEKzcP3ZqI8FVaZ5gJZal5yngP8YPPulpkWZj8G5l216HuSxm22ZpYUaqJa6bndKn/fXpJaofYH0nBul + ZZg6ecsIknLqmLeKq2unq2spba0IGcIkZUr0q2NEluv5jqbYb1QpaQhEcKkqPUs3qTMWnmISq3dFmddZ + poSarNCpd+OqpyF4CjxKraiwSFl6rouZrhKJrbn6ckpHpw6HqeraadMWpyKXoPXWawJLqw8mQH0Zhtfa + gFKarXAFdAqUmglbosX6ofvqV/KqboX5PjRoYY5qVsy6gVNUq+sagRo7cQ7LsToqq513sFHKgbOSsfhZ + p/mKrNq6rTMLi2V5VIn+6nXMxpdTkCbtVzIpKqbGd5a3WWmD2HIdxFKqSWBAdRoREkH6GX4si2QxuxJC + SKXhCqh4iVYnayaJqGEt6IF9ukSgaKzzF6kwWj00y39CGiulxrVd67I8C7NX+LaDByB2kBg+65cYS6N8 + 6158arcRK3QXxrjDtpqC63hzSKaJi05ri4+hGqZ5qrR9A3IVyqBtS7k5e7iIe5aEm4FDKpVyp4afC6Wh + 66uje5dHmpISKbeE2K/+YqNhS5EmuqSwe7Neuy5u67TfVqWPmaOwWZOZt7TCO4JYNmA8gbp2SalykrTr + tre2qrqcG5NUe4aVuUqim7l3+7TXK2jTS72xy73+f7t44Ft6F0e64FiGI4u+weV9dAar4dSt0pl8JxK+ + Xfu8QWe6rTi/6uWxDAeUa0i8gVdnt0tEF+tg0tsZU2hCFehx9yq7SoJ8LXqo6su8URtkkPu2wzu7Acct + jxnAhruq7rm/2Se0JjugQAexaaizKuxvJzyyn0EgflcYpiE2Dfs6MiTBnnvAMkzCABujmEuTOuYeH8Qo + nYt9Ytu3ITynFOtF8futJUygE3zDNid9bXqR2xPEGOq7c4uvNsyUSYw9Hra8ZqtpjNKlZjF9mhBqz4rB + WozDaYzGa/ymjqfAoCvHHjyw7xJrmYmRHZm9KriwBIzFfNzHbUhUgNyU7jv+tB78G7UZyaeyuHb4dV/r + yKTWrhZaoV8ZVH+sb9BSDXJsCcf1pzirsmProeLbyPrKIEfnwqEDUinbRmEUEkvInhDstBI2llqrsMob + icw6VFXskGMAk9gHSMJMvoxcuSRWvx+7p7A8yI/boRtyVXWYIImsyN66zdMsYtWMwDc5YZvau9I8rdw8 + mursyQ4xfMWCe/Nsz/eMz/nMe6rne8YSe8nSz64ifLA30P+Me5tSz7c30ACtevp8z1gnwldsp7Xcycjs + HbV4SPFqjxitRfDoxgOct2Vcw5/8vrK8ljg3g+DHEDfXvAXR0Y9KmtHcrlOKvFCbZ7uKmoI805vrzmv+ + 0cqWOcjgbMTmS8g0TdIlXSI47bxm3K9EHELZPDxR2MteCFnc9yBFXJxHndXwKrHfLJ/dk0wFUq2nOKfT + WVqTgahH3MYSrdVIvRdkqMuRi4ta8RAHlFqJsKiYBc4L2CBYvdVtTVtUcyPlaq9FbR1B850s2MNTrRdM + tKB9jbtt7aO2fMtkpJxNrLl38Kpm7dHfnHkd4pb3+cILrNaZvcmA3Xhd/aPKKcUoygbjwcF0CTm6a8pH + xE+se87VO48oK9nSapKV7ZbJ64kmXRb1wTCknJniFNbuKsk+tcfEfdpaLUGRvIIL2ZM6rSG9Fdfgm09G + OJTRicdYGNm9TcW/bbL+b7XdEHjYAcu5CdyiZTvFEoC6dyHU78rHO4TZGupP7aOpw/EbMBzGrolDqqqg + oMrJdduQ5O3c29bSDLhVpeGo2Axn5NSRzN2/uPMRMNKbJyJGFow6xkzeX7TK7q1WcjnJKuE4TWPg0IvS + RwmrfgjPvapowBzOSh3PCr7gJtzgUxOAO5bYjY0MpZOjKD6JBfvDZCncTZiUd+ZOxbvOGazgdNTRlQnJ + D/50KU4BjgGRKqaEj7pb3xmKrfEsSa69M8zbOF58RXrdKV1Zu/k5UrJL0Xog3kHVgu2vqus3G0fUyly6 + DyvZ3LfhKsmdleBQAz7KrMrUwTnHyQXFaV2WHIr+5jluZE++YXB8FSzyxRdG5FF5g368g1y45/EN5SGO + ncMtXy5pmM741IT5ivbjCkxO40wbmTlcuKi9n96LXL626jud03+5WYsW6pSOt7Uu3cQ4tbml64Es3iy8 + jP+LyGQO0iOs49b857bFuzeNfokd652baBiRoadIeRJszqBM6ml17ewMisPK2vp2kCvSyk6+mX6tckdN + nHwlW76m6NAIn2N0cnGu244o7269Ut00Y/6543JS17gcuGrmHMjIHaypyRa+yJ7nY2tTWAFvv6qGyDW1 + fF6a4UquM1vO3r2LlCIvmY5I0WiOpXXuwOqteTB6yAMP1a2d7gaevz0K0XD+Wqnpe9+c2ul9FeQWkpMy + D657yGTnYLOJjuvNmj8YP9nFjhcGduDjRUJgLrJsCs9Ss3mJx7ZNS3YP6s7Hm8JL3842jo2LEsVrXo5H + P74ADL8+b+reHB6Y1lIiU7KbGbwlefXjvbFfH1izPj7bLvBm7oPvnNSSThA6F8uqbdTl3qqLLfWpCJfU + zuvpNyTHJLnN1fDnCcJ8B/iPDPU8FOjPBUIBBuAA1t6uzeaI79lqj7CfT8vkvrJyeEJaU/qG3mZtp9Fd + Kp/lbR0Sw/nanOC0y8W1v+7SLmRjnfccyPVNP0QCltfn/rMl6vS+3dsrz/bHz5nTD7JAPiWQu+k3n+b+ + M0T23K/6kI7j2M/dgwW6jXQU7/7FpxlFie+lrL/aDhz8Q7nEjk8mg32NBUoA8BEjGeKXM1FRZ1tOEU59 + qe54DOFrRBJDz/Y03XON6dq24Vvf+d7/ATngkAiEHDGkUUcpAiEXMKdkAkVSFaAqY7rjXDfgSjZoO15i + M6KQpy6+d2z4nF7Xye15vXWR8qv40K6snvj6Drs03GqglrjOuMiEFpc4qNwoffBulPQ8NTY/RUeBQklP + ixABVaosVxMNASv9UFlQOsm2Jl1SsBTtTBlrR4OHjY/LkJWJXhtbY5nEbsMyRdVwcz12W6Yyq3mK05aB + x8uPw83TeQ0b2KQzcBP+kVewxyqnZSA/vuOG6tV7oAM4UBNBg14oCazQ5N+yQPsW+kKTT16kOgoh9mi4 + DONBjy06fhS5sCK8EBvTlRyxoRUnlSsv+ht5Z2ZNmjZx7otg4uUWmDkVWXAmDOXPOSHxtTHKEWhTUE6h + PvMpw15UlgcEyDKjbym/m0astgsbFelYcwzzOTKrNojWrfAsHk3ldWTZtUzv5sx6SCdXkUWpBeDZ02Tc + bG/sPvrLL3FeY40H0h032PAToJIL8X1b9XARyJzDfnZMSvRZzMg2dTtdDnCGvZ1ag/4l981qg6VHf8Kd + W09qak5jMxh8crMHuHRw2ya4mze55h/DBf/BTzL+4QSlhc6mzewu8+fbvy8f1sSyODMSXYRSjilmqqB6 + wx/0Hn/NeGjc6LLC8YsS+8LgwfovLXPmo68UAwcqsC++CBGQBkv2M6k/7WyBI7lrlHsMQYAU3LAfVIaS + wK/yiPpKsQEru8pCOPzTQboVPSQwRhlB9OsLWd7hZioaEnvROBjdQzGNDAOasZwCffSwQ4paIqnBdSCs + YckKEWNRp4mgJPJDI5WZkkuQ7HvykRBRlEzBa5BjUUtH1rzByy8/eBNO14Rhxkf9hlwqvVravM7KPHVM + 8sA5NSR0GDlnQYiRECIEsT07H6zmC1QQNRQrS2upVFA9r2RrTz4f5a42Tnv+w5RSU0/RVCPpkmh0VKrS + fNUIJzYFB1XSbiWmRoTyUzEG77wJ1R8tuerz01w9qRRTOa1LClBSn5oDG3eElWnWE3VFtlRt89gNpfWa + pcfVufz01TNph6VSN267Zde56cjsbKvgxJWSjhXkMLYEdK9NcVt3AQS4vlmjcZYTLczLgrF7hfN3CG8z + lEffFwQOuOIfGhsKm4gR5mXMX+uYgdpYZW3jn4njvLhKlQfm9eTfvHCRHsLkdGdi5mrt2Nx/Wca454dX + lTie05JcpBqco5V30NpsKwllOn/2OeqCeF0wx2frdBBqpkUWwOuvBfta7LHJLtvss9FO+4G01Q7b7LX+ + 2Y5b7rnprtvuu/HOW++9+e7b778Bt/sItCF4zW3BD5878bEXD5xwuMVORmmpma4a1nWnLjJzW+ctiqFa + 7+w0Za4blvxHICF1Ecsw0Ht3czdf3zJSlZodMrYJKVYTgxxsJlnUeSl6WqzYxyUezIPD/Ab30UlHQIhJ + UE6uc29Ypdz4Y68/vrgaJV1+6+b3dX7nlvu1/XS4hC89e+3XZx6/HfkM9vLj1Nx5ZNThNX/RVNtnv//h + s5SzdGXkPQSsHFbwJRvy+YA6McPV/5IGQfVJ6CHHOIlQvHe6+eAiKxNsHdDKpyOZ8U+CHiyh6W4xImWg + ZXKeMuHv4Be+850rfw/+kln6XihBZc3JFExYHWs2JikDlqyDAPwhDU0mwhmu41QnFJ8TL1VAFToENsqL + 4J9iGMUlgnCEyDtPE6GIwhOqhyQEyU7CcmihjWzDd5Fy4BfB6MQdfqmH4zNNFulXLoYhMHcf5KIb3wjH + B0JxjlyqYwvHMcU8UmGDFNhLH/1oPSYqRXVxHGMYxejCvNSrkQhMCCKpZkNKenGQcsTkIXOjBi8VsY8C + vKISAylKEhLylBJqjirXdTRQcg6NsexltkxJS4ONBpfJik0OXPm9+Y1SlrO8pDBZ9516nKkEwWEj/grI + QFKWsoSFnBEecAhEI9avLV5BZvQ8FsJ0WlKHYQT+Z3ymtSpYUYZHu5Sd1uTZTG62E5p4JCYH8zmbkECv + jSzpUwML9UyFQiuVFkDSTmSHTlsGaZ2ZqujUvKmke2xICdhJQhROc7+VLVKd2ZTWIjK6oZTCM14G6gB2 + QCGoayJRXSXFJ7le+b+VSlMzXyocTleSGIJazJ++pNBJ3bBT+ij1n51g6goP2oegWu9mQ5yOPsmZ0/Y9 + NSq00KNPk8mmJ4byiH+MprV+uc/+cbUmVWwpW40R1kRdqlYipSm2roo1k/kIrrnp62J05j4uec4lvviM + Xc3qsEqmtbBmCmbPpPNXUOHUka5EbGIVqNiianZRjl3oxV4k2VRZcZKVJZ/+XLV4UzsytKbO1CnLapfJ + GeHJnoGB6F31FQwB9uocn0WWKkwEVvQQbXd9GupISbpNWFq0m+6iLex42BDijhW3xtItuLDKzq06N7Zf + NSTtvAJQAOV2mUetbTj9t11u9TS4RhoOUKWAP9TKVpOCXC5zISjaRLIXunDiSSQXO598YZOz72OsWrOn + XyoujY6s1VwbyWvVwl4Uv6/VlmV5WF8Gj9e6QjJqa12r3t9iVqNb3PB4CbxaQJa3wiLOFZEULIpzEhW5 + ZSUriO2bXO1eL8YWhHGGNXxjYXVYdMw0b4vX12P7kFiltbUX5oLMy2Eu9sg7Np6SJ3viEkf5nq4zsZT+ + cZy1Koc4wSNmsoEGXON2ZRbMBZ7kmMl8ZTNL8ptufrKM7XxnvAY0zAgmHpZJIVUtNzkSa0JU7+7K5Rw7 + ec1rvZWg6bzliAy60Q4uHoAVVUa8ONpUbnmwe8ekJWUheoEo8+qR8osqRkUaQakR9aHyDDJGu2S+Z94c + oD/Bigzh2mJh3eE7aYpeDlnYUoMQMqH3/OkQG3ejaCZ2sX2obEnPWqt4jjX7ai0SXtdk23u4mp5jBE5D + oybZyhY2jVxsqJaCG9kqvjSZ23TZ53Rb248WIL1JPO4ulfue50Z3mR9N6aVOub2wvjYkMZ0XfHtk4Xb4 + Mag/JnC1+trdjmn4bV7+vGtDErzgBq+4nv2N6iTPucutVm1/N/1xWVu6O+mG9rGd3Wd2k1vmK//yaC6e + oBezeuD8RvlkTu6qkKdczvaGeXx8Y2uPn/XTQ9/3yDt98/TG/ODKFDnH66lohUMdU6vueM+ZLm2gwznr + Cd86wHdecrCrHHvpQCUvnf50Hl+4zVRns5D62kONm73laA+42sMj7gWqQ+9UizvN507ydwe+5jbXuYSf + fHjE/5nuX2c829v++KDvSfK9TXzaf273zc6cQ2rrW+Mcl3rVr571rXf962EfONTHnvawnz3e6sJiKXU+ + oZRXfNlNjvmpY9yksOP90l+X85BZft5hF7t8PIz+g+MjOXPK3+Pimy98hNe7yMpFetFBD3zR25j5xCe7 + DKzv+OpXnvTZvzv2oaN7XqQ/8xhdL/wPOPYWmpMs8qcK/YevZwCwZAIQXpzh+PLFaMQPKK6rkgaw2ljm + AQmm/fZqQTzv/SiQ2/xPoKYtaiTQABewOKxj3XiG/ELPKXTLiz4wjVRmBbUpBG1HkfDD39JM4uCj+GDJ + BanLA39rYboodXTM3PSt77COSnQwtXgw42AwKIzFaYhs9Jaw/3BwiI6Qvi6mCr0PAp0PqGDmtOLNryCP + pKoQC6tF3Xzwze5lBroLkuTqAd8O8o6QDAtqTmoHHbJtZ9bQfdrwO94w4lj+EOfWr+siKyI+ag984dvg + 7gsvz2DE5A/PLgmLjdag4Q4tomCQaA+/jwlnATB0UA5TbLCoQzBSYiLycGtQKw6thi5QERLVDcAQcTxI + sRSHB7WmL860bpyawxMTrRUFRKn0QQYbJao6UPuQMBdZURDPQB+eKhqeKxE9oxapT+nMQhelERTfga0G + 4eFM0E0okfto7BEj8BjviEQ4hxahEfl2ERAF8Gfgih005xS7cSYEbBFbkB0jAxGkLnfg8RwvUM3AMBwB + EiCKpSD20VC8YwWp8ei4pcdsI77OJR5xYh7d7wrXcSZWQwqMCyJv8BOJsGISsu4MoiG3kRv58er8ERz+ + BeYjAU8gi2QfS9Ik07EjAUYlTzAky7FKNBIqDnIiZ7IeLfJD9jAnpfAkZdIjhHL7FtImMqgQcPIoUXAO + i9Io9a8n2wpDPuogZTH4ODI0KNIjcaJYusEKW/IlzS8mp9ErUzInshESOkounHIsmMMN22oq2aXbaMUJ + 4jKw3CUveYMm1Q9ZlA8v3fItz3IrrcIv6y9XrM+hjiIrG8wwdTItqRI4BOthHNO/vvEwJzMpoeJkRFGN + CFMdiVIz93Iz1RJDBjN2dmMAEbMyb4XeMGQ1RxItR3MotaU1tXAkgkhfLtNU+BIlFbM0O9OtcCY06bEa + GbAulXM4RWRwdKcmCgAAIfkEDRQAAAAh+QQNFAAAACwAAAAAWAJ0AYH///9WtOnw5EIAAAAC/oSPqcut + EYx4EFQYMRC32uiE4kiGU4mm6sqKZwvH8rxM2uoxoJMnvQ570UjCofGYyhQNu4OnYrt9kFRT9YplLbPc + riPaTP6cYQpQNEZtuWuvW4VJN6USXfk9bOP3eb6/y5GGImiBMzVyR+Sn99dYyLHQcyekkeiownip6bLZ + KUNIQucTElcqSgHKyZfpyQUBGWmqcBLHZNlqhav7tdtLeltyC5xhxlMbtOj7htFWWvNBzKSsOK3MWt0Z + cG0859yQaotgCqy6t43NAvV9nBAFHY7ecB7/Nk/PF2HvcyO7HokKol8MfTMI3vNncAO0OQdnNWyV8CGW + U4PGORsjx9u4/ncF/0SU+AhZLHLVPoKkYfIkEnZwNpLZ52ShN2kP+iRTCUdhi2Y4dfa8+XOTjZwyY40i + U4sdRXDUVgVFlE9kTZwpn2KyqsndoDNTLR6TYonpiKpXsX7zuWKN2JJm8ZBtW3YtjkoCw13gYdMpXHHa + pMKkutfN28AlaJG0E5ZfB1s5KFYZXJiwhYRqD2ODLLldZrcx0wmaWTSgx0aYW2Vsyvdn6c11WHt5ITcY + 6KQtYssjvRcjU7VBV7P27RoB7JUZWBa3nAX4bbiwOpPjrTr4FeXSYds2xrgxLuoMuDtleGh5sZ7eA5ff + LAm5mB3q8aLEbXVoZ47d/z09z1x6lw7H/qlI2oXfAQFiQct88DxjX3T6UTEgYV61hwZ42znSIIOFHPjS + LBjFt6CFHRKIlGMwXNRLgxUeUSBN+6QHFoTTnHjfh2ysWAVoNLjoEHwnGWbgX4fUpaCM7wk53XhH2AgR + hTuKoyJifWWHozVE5jUlilwR96KSDxURzS8w1lNlR2EiQQldN16IJoCXfJmWj+U0cl2bYw40p5UYxrmO + iCNSqdc9S6wFI54psNlbnUaAQVeUTmapIzoCPApppJJOSumj2lSKaaaZQqmnmIZq8ekQF7E0g6KcDaRp + qoSORWeGbARyqaWqzkprrbbeimuuuu7Ka6++/gpspXEE+0qwxh77/tGqueyUWo/EhSHom6GqMa2nfJl6 + lKNrautXY9jmmSCZ1co5LrM0Humnloyam2G0EaJSZLnUyssuYx+eqCyC9SrmilGP0RsZwOTa2yG+6+4b + 0Lek+OuhwMs6HDDB927rS0RcFudFIgprBvHDHUvbqWf0GFxxqy+5G8qVh37MC8ushvjsxoAoKTOfZV2L + MiIq2+xyaz23jGSpNc9M4dDWDiyT0VPBa+fPwjmdS8hJhDcyxROaTLDSzdqxMtRPe10f1UbkLDKo6npi + 8XhaI+XekGCj9baA2a0kEcloy/Ank/sRAorUcDudb35kL42HhINmlSTWTa7tKtcA7RZ34G1p/nXk4LXV + C5RQiodnOXZ5skeix1BLbhapQnd+aqNWY55m6xMN45WzOb5NOlZ+B7OQJnHCyGbahDO+9ecwPRf338Xf + /i6GW66uOtKLL3NX2/AQH3nxOPuHep/Na292tq5f4dJIbH//dfXWj59ykyMCv7k56oPZPprZj2T6US1a + Ujtg56OPBpZSbss+fbEuTfMTH0kqgbPokY9w/BtT/oJSPwjGL3WZc576AvgjrjwhMf0A3YOSgsGDPLAn + SCrgHkxlN+5ZsHUYXIx9tEONjdDhDiZc0v6GtaIacqtoFVxhN6DHQjdZxiTI+80NPVAm5TluclkJoc8G + +Dzo9Q1aEftE/p1GCBJ2UKJxXXEiUfwyGvdN0HAZU2DCyiCWqnhxh2ADDY8MdMY1hvFsr8Gb9HR4veM4 + hiRkkSNbjleGFCmRPuhAYf+SQ8HuGWmBr7PIWaQVAzyKEJAIIuPEmDejMaIRG3p6C5AWhMWDOIZyjAwO + 7+AHRu/Jrhf1g0wR90LKjwVNge+7JB1BpMlwFTIMpZHkZV5ZpwhK4z9VOiXRxrgzTnKsRrrMTCyDCbux + ULGYmstkKvXmpnj0wDfe8iPNvMnJjAizHcSkJibFZcdHZlOb5QPfJyUDq3Eu6H7vrA/oHFjNeF0zeLXc + ZVTcAEzyJA2cu4idbbTSJSJ9aTUmycQm/rNovMqJKKCmoV/sqhQ+s8kTlPlE5wR75Ev/AQccQdPmXfSo + EYKapp6Hm16YFqpPKAoRok+sEewo6okPikKl/oOKI91lnX4WDHEN26cqeTqXmrqTGzi9hE5PEdIyutCi + qAvlOVV4tBUyEKlikFsZ8RLVGyXqGM3gaiQ/mMD+eDRUMG2aUb0XVqG1s1+LEiVq1tkQ4yympEVla0ez + qtXgmTV9c6XrtcSmzLvi9R5QHWZYeTKltrrtrYId7C+WCVAP8jOxkNysSW0kmo2uFZsK7URVGhqKH34W + s1JkGDtfBi5RjpOvuFykjCSbTsqSFrGsJJWyLHtZ2ArPpKltqiIX/lu6zmI1sFX0nGdxgaRVxXV9zUUM + PdYi2tHu9ramBezNFtZM6IqGtbq7rlxYkV3dxSa9k/1QKnB73PiqU5W6uMVvq8GflkbIuK44zIMSOU/l + Lre6zN3uIHPaMgQrg72FPQt/l+pT2yKSSNS7qmLlG95VbgIU9/UFTufxYGZCZYl1tB8+/zqvj9LXwNnA + X32BC9T1wHjEri3xc7mbMdER+LvgTWaLxZNTy6IMxCGuHI0ZaGPnzAm+O9avzua74XHma7rOVTFACupf + H1vTLsDNAoe7y2MMk3jFcDrMlM1KNiLzVr1PRu6ECRmcL6NYwE5uM5IdYeaCirdrhsBy8uB8/ipZULlk + c06wbiVcysLl+cVBdmtX/bzfIsfFg4NWU6HDltutZNgPQ9RzlPs6td7iTks0lA4wetfkFIf6zlI8r6ed + arSEdDnRd/verLfXQyDLtMesznGYf4xnpcnaw5WmVqlNbehbYtrKWpbjVIW70jJrTdZhKa+25IDsZOOa + vAWGMov31u0/rFHSs0tHlcV96zqcxjWnBrO2xXzIUbSQtu/OBj6AFxFhFLvYqtDYiS+t1HAnk8GeGa/A + OX3vYya1K7TeT6kQ+Zklu1uAh/b2FLRG8GXXN+Fb/qK8MQZOlE074nHW8RzLXfEa3/gTMqsd+/Kr8JxA + 637qVU8A68fv/hO2e+Lc/vWotXxWUFd0byGk9gZ/kHNyi3XdrAEHqim+6/5h2z9CH/rrcl1cM22a08h5 + eSDOJXGeB/zgV+51JKveaOwpHdoynihXmTLvrZcWxSnJN2KzN7QHog5jWF/Pua1t9W9HttZezfRcNiTR + f02jcwSlTs5XznEuhr2jdZermxeOduga2cJ0Y7SCJc9utusIWboalqRitSvTk371pEe9r1zP+tjXCvay + n1Wxal/6QOB+97aiPe9zVXhmH1nDxU3ygjemUn1A6PGCv3c3mb8M0c+x8mIl8/BjfnxRNT6zkBZKSteu + v+hjmvrVJ/7fO559URHV13vubvTSvX6i/p4WXeYHem05y/L49/fVRGUR+Ltfb6NBfuoHaJ+zRlalMMm3 + aubmef3XDfzxbE+RRnczgOUnFv8nfaJ2Jpz3LA24Jt+HVraEOBW4dHCnf/hHXRzYfKnFa9znfSjFKfRG + UxnoFCRoeRqTcZnHSuWnbCrXHkshg533gl8xVhhYZqnmPjb4cLphVlYlVB53cueHeaTlREjlDmYCgdCn + fUg4YHW2hTNnaddFgD2IaC2RIFGVc2/EEImCY4QnfIc3N2FIXA+nggVYEYB2T4rmbgnzOPCHfmToc6cT + hDJmeChYG9u3X0HXWDEIbvm0Vw+ohV0oiVx4dkqjdVG3g1Z0guKz/j6ms4YSY1MTFw1E6EimlDiFSH9j + A4moiF+Kwm/opVptZ3Y5eH3SljU/MhOR+Ifb5oWpuIVrBm8LloKbyDSV+FCxhT0tlocz10HV4YYpN4UF + xzhOCHqERYzXc4h6tIK0NDZB9kP/wQ9PmB8xonb5V0OBc0CXI3Yqd4d1cUDk9nifAVUZ5UyNaHzahyNf + gX2fZ3F2xoF8x3JgkXUyw296oo0wo4tvFiTJOJDTpJCB14/BBXD1txWWJJGWV3N3xIh+6GjhJ2IGKD2K + 54EhaY11mHgH5mCmEmLs4Rl6sIyjaIS64B06xE1LA3fT2H4/p2kTCYyyKI4WlY0OV1xcojck/qKPRlQo + XkZp2LWPeBZEEUmSvIiScNiTIJmIU+mLkYZNHQSBWMkhSamUVekPD8mPF1mSgOiVWUeRVHVTiwhrwPh9 + hUAMHMkzIOF4cWKE1Ch32MiT3ZhBnUg+LDWGLaEOQDBWIUKX7XVC2rVxTQmRe7mWAKaUT2COM0SLC2gZ + 0YNeAxU69biQmbiLjPWOMqlolBl0ByKYG1hwwWdAtJGaXylQi3ePeUUO3dSX3WiaYhlvcSiUfseaNjmK + J9NllqOXujaSMSURnbKU10h18pM7Zwd2L8ZLvxNH9PRpjtmbdVmW9zeDyDiIyOllnHOZIDVrvhVpEbdv + ggEnHdmY2CmG/k5yUmnJnWO2J4hJhzF5VmNwDbkIQptRnFCneeqJE1MHdlR2HgRan+nWSqNZdgmJTuPG + ZwAYmnbFag45iUJofRVxjPYmCM3xZxLjoOxpWCJqbwJKQmC4SNNlD65In76Zoc7nYmoJZyG6MgnVEKTj + Sy7XZ4OERnK0DQa3mmUIQTuXPLPkn4upg06JSvwnG3DJju7Jl9IImSfRKbCoWU+KFZt5MI85oVmUGPYH + ntyQn4gHF073CxYJeWBpQ+1pok3Xol1qdsWXHoFhpv5wiW/Kg8xZNWzapugBlWGaWVc6VOBCjy96mrfZ + nIpZopLpIGPZpywoiKBYOhVWEweJePMT/o9Cmqes+JZiFHp/ypgfGpCSKoF1akDZtEGh+Iw/eZ/e5VR9 + x2YfOaXaKaZ+aRdWQSqB5Kj09Z1QqKf+aIZvKH4Xim7gA6qhKqr5Z58/QW9lpTKvqY6rGqxSiXCw2qmy + uoLIClB2SKMNaV9AuVUASRgeuqPUiqTWeoQTgaWAGn0R1K27KSJvVI0PlZicGg8dRqzFaqxpKpKwJo/1 + yk+EIK/AaqPmoRL46qkSmnj4CaBKCqbEVoyYlZp7ZYripqjrGYWah3GVpkbYMgwP0aOmUyYX2KufuZPR + Co3Zma8IB7C9eHgquZvh9KXTGZmXx0QMWDb2ig9oGWy6aZcEiCc3/ulPPgUCWzSFLUt2pAlsGeuN74qJ + PydDEZas0nmHGxAtluOHDlWf84mx5qqvBquaZsCgMcto6YiLSGuShAZ4Xst1Dfezg/mwQttbN3l0HfOf + Y7ezaZuuN7upmsqqbvuwSZWZtrmvsFStOuuCPHuEThuM04qna4lm1yEKroS2qjaswqquv7q4lUtnOPun + F6iJcHueutpThrs8a6u4r2q6m/e4uumKZGNz8cqQYHujqJu6ecu4jeu562qCe5KAhGmcdDiudWO7TAts + nNu5nYiDXyqFVXuoGhq8jpu7T/u3S3q4mouxyGtytsqJcQq4gUu25xm9j+Ya/3kiViiMPku8/iP6pB8L + rKoopRqHskd6um0rrU2rveMLv+fXN2eJj0Eqv/Jivl27jk1Lu6Irlj3aNjRUbdUIrocYgEhKlwN8vQWs + jPmrvy+rqZa5wC80tVEqvA27gOVbv3p4NXM7vBK1od3rwDmTCkYTo9BplrGZLpF3inqGwRkclNnqOnvk + sfo2NNwYUSPMwiZ7GTZ8w8dpFqvBh/IUOiQXlsn4A0QkpjmMt/9zuUqbfuMYiiyyMEqhwKezrhAcwL6a + QFlau4lbIq14wCbMNZZpob7Ld5iaCPkGxFy8p+yntvsTwdxrhzlEuCJXnf+XBnZcbWqlpve6rX/Ex328 + dN4bpdA6wyXr/qKF13XGwSSUzMh5HJ6b3MhlbGTlNJCMuMPgO786IYMIRIUXZ8V6qRzderfkSFdxfKaj + EoQrDEQYAiuIKa5AypZR6cnH+qizu6WgiceNRMu1/F+722pI58MyBMQMe6Hoy75YnL6ra4/yyctdycx6 + PKuXV7cynMTBjKHkPHRWjHJRzMOAjMD7Z4A61UDwic5DvMadzEZYNr2BqMZaiYvDuMh1pczvmKqwuQq/ + pyq3Z9AJrdALzdC1Z3rMcNCxAtGqdysI7dCZYtGWog2+N3sWfXul0NAhrSu6e8rmzKdojMTrpRhBG0J3 + /HH56ImcEs/1rMiqysmfLMJX57d/0VQh/sU3tuYtbVdqqjzQ1lzNSauTNb3Fx/zPhlpZyvpV1iXPl0xb + BwkzM72yiEq+N43TPUd0kOzAADyZiPF1UMKbRPvMBkkT0qzD2Oqy4szVXf2b2xrGsuHCBVSwzSIfLCSu + vhpa7hvOxlvMUF3Dcp3OdF3XJyuNdCwMcgNaJSuPZ11jbH3YJl3SSm3Yc03X30yemenU0ZgghsGM7LVR + fFXUO/2LcQ3XhZ3ZV9xfZOq8t5zMhP1IlVGdMv3AqOpv28zKir3V9/y8adzarv3anL3WVt2kpVvbERsa + nImmz8lizpyrWUa9Jzyqbzvc9JzLNcvbLhLEZvsnM1uKMmpgBomi/gFJuqwd3MI93F8yQyJDG2Z83eq0 + BbYBu8sMwmE9yg1m2b/N3q3NJi1CmKMi36FL361r3KML28O1tRJA2Yhbi/+d2YQi4M4rnlc9xqB9WK3x + 3hLsWH0tF0UWT9V7u8J8xNmt3aXJr509TJxjlSx9kQUS1CUoTBpxJ95tE6o82P5dwgC+Us/trUnzzjvl + X9EkIKdt34TLykzYLDCUs+zSmTR92RJu2L8127hjnWcKR0TYutt0IUhXtdyc2K4CQ+4yp82l4+o7zES8 + vtk9ZagN5ylDT/P4whciH+dtZwhUirpx4/d9UEzDkuPM4z0+4a/F5ut93MxNPwrhy6e9REdH/plpLpzA + 48vvFoGCfuiq+9Y4HUr2fb3fGRWBrs24felLIdlq12kZrrcJbtRV/p6+7WszrjN7PedYXuRgLpfjeZXK + Jen3m9QHi+JOaHNcd+X/sNeLg4HSDeT76zHjrcXlGqCb3sjUSLIgy+jZouv+G4s63ew2LoeDfq3Szsd6 + Cbp5de2Tnu2bdet4LWeZnJvWDe6aLu77858ktWFwIEgXVxRHPcP/622ILOVTg8GxTMO02YIWWxH57tzE + 9t1QFt+tjuWJ7OpeCsyyeey8vXg1I+qOHVqsDqcOJvHBNs+OnHbIBbChHrIPD+saGe/kq0W93cPfDr0E + 7KoV7Jnh9MYg/nfyJWSpLQ/QXpmAkf5f8/jsM2/EXU3wMWhCltjrW3Nzz/fBZMwvMx2JyqeLLpL0wH6i + cwnGK0/ictJ1UX3qHk+ozGB9D568i370nJ4bzk5oTKnHogXDZxTWeb3qWE3oCO+MbcFBuqjw3szPBz+Y + I16rmL7rBf+1FSuBruvSgdaKcouh54D2JG/KwG3z9Fuqnp2SOXr5jHQ7g/PyFfl4BpHPlF88WQ/ItYnf + Sv/YWN/5fW/X/k7c7GzB79vUJj771oP6yGjhBQqCYL82QrziOvO7Xs3g2Fv5eUuJOof5ZfrdpDj85QN+ + U/RgK1nZ6pSGDe6RS5vCba/Jqr4v3B24/t9fdiyIg8Z/hpOP/oWv9e3NbpAe4ll4sYvd1+ND/ltJiLpk + 9fo9m8WH+BNPAPAxdbn9YQyTBlCjqXbmJzyJ6xzqMMPGutbrGbGENMCUbcnW3pN6n3lB4WdYNB6RQl+S + 2fQAQyvoQodYlkQ5DVWHGuI6UxnQq2ldMzFT1dlAP9vxyFtet9fpd/13wxojNlC8AlFAyroICRVgRrjY + eKQCFyUnZQ7ySgYf9wAwXzj1PEFHSR1ES1EzFQUHXVxWGSNjExNvxBg2f/pO2CgXLWkAo8Bci0ODclOH + TpWb95ido3FtGbdYaXuxG812b1Nzy4QBLa6SJyP9SKGppJHW2+GN/t7j6XNqebWvw3/HzEvBb0EhByyN + QFTzxNELglBhwwwMHSrUxmCJLxUzYkjEBRDRpn0qbJWCmC5iiJElUV5KubIgBIaa/DmjBYGMlnExuX08 + hgySt4MsgaY4GbSkxSy8iHIT8SujLp13RuJcOTRpPKpV6116+gcp1mH9ttK88ROZVH5m8XhVq3JtW1uG + fJ4Y5zZNjzBo+5Ek2OYkXodX6YoM7JaVWDODaeoQIEtIXL8m+bgFjJjTZMoHd22EoTbuOQqLm5ZlZ2do + 528eLF8mffmxNLhc8ZlO2VqRXhtTZC8zkvuvapapo/G2qvlmYOE9XnURfVvekdbtgPvmKz0p/p0qYYke + txJSbs/r5p5vLxI+WnTqTMyfj8OMPHM4The2Mfip+fi16dXXz58Sv4TDoelLIYz4QEoCvCOo8gio/vbj + gcEG9fsnn6Xcaw2TbQIsUEPd7BstQ2UehBAyESMK0REpqNlKO1csVCUmf2CMkCcufiMROht7QwUDRLgD + S5ctHPwwEyH54TCySm5rzwYTcTSlSYWYtGQfWfrILAqldpgsvMVknPGiJ5QU6slm0luxySg3wgese8Ds + Lkvo2ruKI5wAXG3MVNC800llZtLMKMOAXJKUXLgsQk4kBgQlTz07YdS1K5nALk3eNHlTmgAKNXS3F8HD + cCdHFQXVmUV7/vxRQOUEhUfJBDkVS1J3RA01Vjx1bA+vmixtZ1XnEHUTqlmfAZasQcc7rpdc7aAzTl6L + xaEyYX+FdpRFzRzLvYRGvAOnTJVgtrFKP5V2OnGfHTQ87XBDtg7TuCWwWD6uC5bccee1M9IDm6W0SDH1 + iAuEdoP0tqd97a0XVoPTQvRPX8t6NVCGUdvD306WFdjUucJFWFON11O4MCQbSw5ScdAK0Z9/q2Xr3eX2 + SpjjjV9ugtWmjt3N2veE4c3Ek2mo2GaWsXU5ZneHPrhhMQRKmbYTpSJVgUIBVjdk7zwsuOhUr0YQ3oBw + 9fIHIinqdw6tugT6KxqjzRprtY2Ez0Ur/pP0Gm2X+p24Z0wFyFvvvfnu2++/Ae97gsAB/+zvwQlPXPHF + GW/c8cchj1zyySmv3PLLMc987woIN9xwyRGHHO/CR9c88sFL/1sl8gAz1rG02Y449rbBxM4eYwb+esix + kw1riajX/jZJjzjIePY9jw/41LAcHkZfsJ+u2ydugee3w9pdND75BZwG9aXgHI6R997NaXfX6xNTMfxu + tyeifetPBZ9O/8Zfd3ooqs926vQfdkT791UGwPol5jCXehH9oNcE9VWNaLl7gVlSBj8BBnCCyMtC87Ql + vgRCLA5PAd75zDYNAZWrghQsIfcIyKbgFIeDDHzYzpLBtbK1CYE0/oRdCbvnKE8sTFeMCdqGwiYxgGBh + hjXc4DnkdcJGKTGIF1lDmDqYrpYQUWLEAWIDCxLDHz5QVifMoZ4uBIYI1g1jFGoiGf33JZjZsC4jSyIO + mXjGfdWpHqiaohy/8boizu2ObSShF+MYPRF2ZSW3Y6Mg0eiZF1BlHX65VRcBGUjx8BF3KKGjGsXBJK7B + yGcEvBbO3ljBLz4pjCR6xAo0SbwD7nGLRnSl1SY4yjPtrkHTM2Cr1kjFT75SaKKUpAkJWUtCuSY3INTl + CN34v/fJEkfWgWJ23HDLJzDSk5BIpjK3x0wbvWGMXhEDmh7xGlBiEWS68+MfY/nLYBAMQsME/sU3m4cp + Vp5LKs98iBK1KSJujumbFhMSaNAyxlIeCVDoFGA+IYSGbnIGf86pJwqtWTYMXnGQkDyoOsthT6w0dBTh + 7J8Z2ZeXnxXUoLC5GkIbVIOJUgcI5gGHIB/TyTIS9JgKs+BFmVgbUWGgTCOKqUxbGDeSeiyacFTiXcT1 + GTkgDZH7C2nL5EbRTSUDpZepKmUyclVVyTOKD2NDgqhZzqhW1EC29GXyPoYcaa30bFR16AwjOD/BnLVo + GNGpWqE1OPvdDKboI+dHdylV5wVvmVm7S9OSytUjqtGtvcplMM252AceR6uBqSxQhHPZFe61kmwZI1AL + KFjAktVt+ius/mEJCywI3godEFVSBPPgE3zx8obt02xELllUaXHppfCyzTojVcTnPHSuODXYYR9zWzIV + z4WlXQRwYCvaoUq3l9nUWG4HqFpv2MobLhXuWElb0uMp14CdleCsANqphunWCazDJEVlo1HZGTexbAVm + rNK7VHea9wuPbSVtoSre8dbLU8qDVn71i0f0uJe6aZqugGNH3mZ0U8LF5S8sFejfoFazwXKocHUIbExg + +WCh520vg5s7zhSH0rrzCtOHp7Xh6spHwxfm8IqxyTYY/8NoI54piztY42qpl1YA3HFHRYzeH+c4uLT7 + L4BHC+TZHZkTC6XyDUt8zypv6b3IrKlF/pN3ZbH1WMlLxrCHUczOawYYwmoTs7aS8GYPq3nGnP2rjbnY + 4Tmfdq1xPjCOnYCm/GU3tA6kc5tP2mcoyplec5FvU7fs5M/quWN8Vi2e5+tjRZ4ZKlw2s6H5auEwKzrJ + 3vNTbSPdwGc+8Ua2zSuKWDkmZz56kiLxNKadOypL77QaNQajgzkdimqRmNbwYDQ9jp1hpDpZh12uNJ48 + neUctVi72CV0s8Mb6FENG7KqSXarq23f+/4a2HWe1nMqop5vP+rV4gYufin9VBBxu9DednW7taZpQJN5 + 3k8tNrtH3ed8w7vczy4PrpsobShRO68DF1Vs/73ER5kp3dRZt66T/hrrWVLS4AdvkYwlc++G+5qUztb2 + cCj+5JAzXLsk3zjHT47y5Kp85QMWOLPJvW+Nz/XjCPfKxcmUWJdv88sy682KiG1xlu80ylomOMzRU6J6 + O93nVQE6iEZO76cf2s/T1o5KI47xKbtY3oyCOKqNDXLXhj3oNs/4nUsO9cji1et4Uam6A06unmNb5/Jg + e0gpW3WsXH1Yb5fanazDZIAL/u7nIbw6XDzzrXe70SVJupj+jvWx6x3uzcy20X+zudQtbvSmM/3pUZ96 + 1a+e9a0XnethH3vGhW71Qam4STJf5AiT3cA5/zTobU95J+W+8Fl7vD+pbva+D33hwncD8UWd/mi9++X4 + pm161K3++88jpvqKZxT1Tb18nNdI7YB4fPfRPiu7P1zuXVfL5dNwfPSbO1brR/K0tX/9a4N46iA5v46P + y8Q8hhKgj27Eavv2j//6j0b+z82mzyyiA7usraTCjtFuzzAIb/72bK10ZmWwxD8mcMYqkDLgjz4aUPoM + L/mWB26WR/fyz+EGg8T8KAMdUOgyLX7uZbZi7gM30KoWcC9oEAVfzfr458Ri6NEyKuKurgTJagmNj/OI + 0OTuxYkqT+EUjPtArgqcUAiFBQLPxs5EagetEKIcT8a+SumKRgOvpGQOaalOpNHGENLQcJPI0AfTsAsz + y0dMSr++w90s/ojt5g/sYqO7pEMN3a/+nGJHVCiDlGIMK2IE9akrWLDWSPAOW+4L46G1Qs3h4pDuUion + ZAPoDBEGQUUCQ9BcSOIUs6UT/WAUic0L7S1mRrENCQmlMmINgI8VXWAWJc7nRFEWH/CJWsohhFEVx0cX + 9QrxOu/9gDHy4KayJMGewO7f/NCyys4aX4YX+U0ixOjFfvBetHHcEpAZs7EGcasYz0cXv5Hoeg8bOSYc + mY9PNkP/IkYdf8v3BLAt4DG1NAYaw0Gg6NGhCpA/ljH73vEJq6Ji1LEafWMkvm0fo9BgdmxZ7NEef64g + FVAiuRCz3KsiLfIi27Hm6gUiQ7KQNubv9D6SHA/vPvrREpOCItkuJVmyJFVyXkiSH2eDyzxSJmsyIkFy + NhbvIDdqunjICAdy8DAy+IDy4JpxozgiL1KJIRMqKcnPJoeGyqyEZsRRPqQyEmkSKa2yKZ0yHQjwDDrq + HkfyKw3SkphSKI3DrsogKo+SLhjCAtOyHFlKC9+pK18OJ9dSXG5SBbFKMd4JNABQLZWSXALTAAeDZyTG + MHdvJcESMN2SLmQoKvMuHzPyz1ryLS8CM5dOMCeTMzWyMZ0IhuYSDf2SKBbTExVzMLngQSZx81YzMYWl + NdmLMA5hIDKIL28TMavyN0vTNJGLN+3HN/WgAAAAIfkEDRQAAAAh+QQNFAAAACwAAAAAWAJ0AYH///9W + tOnw5EIAAAAC/oSPqcudEUwEkFKI7d2u+w8iQkiW5ok6Y8q27suM1XRWDe3Yi56/K+wDCoet2QQ3Mwgy + EqIz8XtKp54o9YoFLZko7gPH4D1A4pM12zmj191jhOY9l9kmNf3esuP3w+1r3lTzBtaTxxdzmBgGxyH2 + gwGo2KAnWQlliZkSSeL11QEJCukh6kKJZ5p5xRNKuGVDmHoZO6tEa3sDBHuwaSHWqRAalIl6K4QEuuDn + VizLbEnsrAgB/bmKnKMLDMYKQ43mHS0IRSpynT0LHk6Vrs4Wwa5tdH2jS0jKDQQ/pd9O35x8gZE6fv3y + FYz1q8QgVhnmOJzHLaGhYQf/gDEl51ws/oIVS3VMRa5NsF3bXi0cKQEWLzOpOB68mEZbO5cfWdakuFJm + r4djSCIjJ1GDwZY3FcKcpDMczaIkljIVpnGHSlwBGZo0ia0P0aejjiLyNJPrN7GKVuQs0hAfyQ0ao9rE + 5JSZ169rw5LFEveuzbOLIt2DyCXovo16wdZSAaxg3sL/GLN55LavyoYIzHFItFgYYyQxDSt1PBg0nSiR + a1StjFKckMya715F7PmzaCesZ9MVakyetZCSarPwLQnOEqSJ+wFnfNy2CJ9DmEC8lbyO3ld+bgcyrlxr + 9ixe+ArSUZoMkejSyR6RoUvOQfJk2SuXF/BJ92LuQ9TnfhlWxvXb/lf3R2NVeCHMBx0t91ExCGTjxCbb + f605KAVkvMEQjIB7HFjFU+ehBkdgFsIF4YMhjhePFKkZQyJhRR2xQ0pVebfViL/JGKFUU0xoYI43vdGX + WYI5gyFTQYKmBowmGHnIkLB9tEkASqZIYwpPFmaFKEiGgduHfEwJUEfTdLbGlfZFKSWZT5DGmRNJmAhl + jC9p5N6PE5lZHp3+jSTnd1puqeN6AvwJaKCCLjFooYYeGuiLYmZoZwlcUjlISotShV0fiF5qaEUY1XUm + BoA6iWmooo5KaqmmnopqqqquymqrrpYKyat/eiprrbZiql2lxOWnZkm0NVonsCKe1pymtjza/hSYWDVX + xp67CqsFtN2UqGZHyC5n17PLEOHLpF1K+8G17cXj7F3iHnDuknQtW2xSQ4HLKLwzcljuuH0CGa8R8tmY + q7zP+hssjiOmCwDBCmy6lrdYFucfwOo6nCyHJtab5LENrhvpvgy/C/HBHQec55ECM0OwDCSD+SKbG0/7 + cWMt53sZtxRjZvHM66A8D7dS2Wxwti+H65PNgQhd8b1Gf9uIyvx69DO6TY8Zs8zSlGtwzwi7iJvUCzP9 + dM9P+aiwu9ZaXKC6AskHiF85eX3x04iFvfUeaZZ5NEUPn91rVl+MfJjbbBeF3r5Eu0B12ejgjHfekklK + 2cM//11TzrmE/hxNyXX/Ax6C51i1C8pNQ84k5QMSW8mkVR9+d2UIdrVK1h673TfsfTHLKeCGg+h5hzfq + G3dajj8uOy5wjzF4Jafb/a9Qw5OrNnNwBg96RZ5ywmIuA91e/FvWsYs23258nx70westXrVtu3ndKfFe + tzzzXcWMz0rNtm/7+O6DxvPtZXmepebp1/UKelQoaAHKGJmiVxDJYU1DHFNRb9aXvuwlbDK8AlpEMie2 + gdmPXFVSoIys1pM7XI1T9ENN/0zYOaCxQHRE2qDEYqe79ynneCkUIf8wuLvmqQ6CbTigC0lXMBJurobF + CBsNi+a4ueVQA/AJ4e9MEyUEhiNnj9gh/tb45hgQ0ux3x1BFAVvEwy74cINz8JEV9yY9ln2CT0hMXpYk + SK8T1Q5paIkiGcv4PzjeRIsX4l/U9KiJSCxFLf2RolwAEbgz0omPNvSjPWgxobhgkUgsFJbA1qTIRdIn + k6Hh4soQ8rp2QWiS4MKik3wBLUY+xpGPvAUPMjMV21QHWrzI0yyjpkn9jcWRGQSl09DGHFmWUEMP8WAy + WictPgLyl2503TBFGcSJkZIrrsCljP5CyAzFMJWbXKUf/+iMDCTnmcfK5jUZYk1tsmiZNfEae0a4MnZa + rzbGjE8C7eEpdJJJn3Sb5ge7uctmRlCef4id1gRITv+lBZ0JbYc5/lGgINflkmzLRAUllOjKCdCzLZXE + RAE7QVB3lIah6XQUAMEFwoTCc2MhXaFGvYjQhvbqo/jkyj2wUc85OcxqHY3YExcoUV9Gc3UIVYeVUGIH + mXLniwTc1q865k5ArtSJSnUpDY6TNh5NEWq97EdIfpLTNu2UPnq06BqJOItXAqimVaUQV9HopWa5qKc6 + /aSZeuakm32TiC0Vmct2x7g5uvKtDIpGNsHXVmY6sVHu1KtA+ZrRv+awpoYlbGEPqdVFlPQKSe2rri6n + xsdmzbMfkNyUSNvDaOEUtaoprQG9CcbtnKWxZ9orWhPr2k6clrVG8eniDDtSunLNrnc92VN//grU/wUn + uacNJ4xQ4c9DVDK6DYxSZGjbL+vYFbfkC2UieFsNe/o2ppHN7UMda6brGje73o0bJ/mQDS6Bt6gQJYNw + scCX+Y0GWG7BbnXbG9vFfle07kir6QZ0X6LKsKvobQJ3Pwva+iIXrRSWLoHDNN/LjrcaDy6tazXbSBSi + VG4bnteEg4piPMTXEh0GcV1ZZ+APBxi2VxzxeoerXeKmeK0SkW+LGWxSBCcYmAsWcEATNqL+3tjEF3bI + 1MIIX4/mj3o7jrKHgYzeITNlJWxziVmvrOGlqjA4Gd5ssKgsVPJpmW6KMvM/lyzhCyvXzQq2LR1+LNgX + 29fAUTnvGsxC/i8b6/LMdOxuhdc65tI9WaycsMVZ8BzNWDqIy/hico4p9d7Jqtej382ePsrs3k06OZmV + jrOcK9xSCyGLtcP8NKjDTJhRjzIqXWbzqedc1eolWtEqfqarC2Hhylnz1XKjdakJLVl/6FhjJR7wnVUa + SJxKl9jEqQe17wxl9FkWwGeFqzQrea1Us/PTHJZGpa0t6EFnW7FgDhpgq3zpYGM4C/BIm4MXXQS8oPja + 2kZds7HVaE8Uj7rcNrdI6S1GLOmLtwora1ZDpORjG9vOM86zVUPLYvwuBOFixCd48GwkgmLSyNnZNEB3 + Xeh2Zzq1GC8dIAluaeo5B6QZXrPMeAJx/tXCmcDs+AXRhHauZ3K33hWqh5QDjt9bSkpef6PGl43SSuv9 + l9fMsvm/WVdPSCc31DBdNrBqjfKCc9hXk2sYQgb3Whp3fHOgvnZeYW2npoc92asl+XfYy+Kf70/jmdB6 + ZdQz1mPHm91otrhf8c5pFG0RvyAhNtmtq/OTJ+NWn5pGoECVKlpRfvOuwnyrPM/50MNK9KgCPelLr/nT + qx71q189xfmByrt3MsZu3TuCWZ73vmcWiP+ZrbBPTBBkFr7BZ6cQeKPj95Wfwhww/8+TIs5zwikfy2aH + pM2OH6Y0P/Cmgd854cWOdHgb/riONr7t+a573O2m+TvaNmifvsKl/mNd7Wmt/eJVfvijPwOo2Ex7YcIj + d4NnUD0kJ1Y3dyAhdW3UdX0HF8xHUxMleQB3a9LWFn10SBZxfsB2cZiWfc+gG4h1EvwGTQfYbwMIflQ2 + PwZ4dQxIONhXZHTWS3KkCiCCJ0UHg3EVZN43VBPYA5R1f4NVUD/oYmgRdYkFauixcQu3cY7xXL+XcnSn + EKOVYX8zMy4YXhZRhHeQfGb0Rn4GIQF4giYoEoFlPMDVghm4NPHnc4c2g/s3NB6ngnt0PjsogCITVjLn + LFQYhEJILfEnXuwjgwf1QHP1WktYXE4ogXXYWz/HO9pTXn7Ih94WSLzBGSfhP254b8TCVCEC/jlqAH/2 + J33uZmtFVEdo6C57IjlsB0d+5yHrBILb5CCd+ISJeIbmZ0RThIpTCGMtCFJ1R2Rk9hpSiBIiSH9184ml + KBISBDqoiIm/pQkpM347wWwu10WtM3Nzth1gSItheHvRpows2G3DF4nReGXD2Gc32I25dz+qYyVvdnCE + Rgw0QXDcR34Zp4HpaIpzlRvC14NoV2aCYYkEhI56IYvbyI3ht1oYhXjw1WcW4nemMDy6Fh7Lk3wAuUMk + xYltc4yhKBnoVluJNwpQlI83UkGj4y02p2t2eFEANHNxeD1WRlgbmW8oJD+zN20IWT4juXWTGBhQ5ywu + aXc7UyUsuVA9/vmFGrluz8g4OQFHzdVFXBeSg6hskwOL5hUZLYloQrYNTbWUR5WRiEiHs+hSA+mSjzKR + R1KGhmZV3KOVAClHNWeIe3ON7UiMRyZ5MsmLdlgjCaSVaSlmbPGT/teVC6gnegAfDgiUYEl1/xCPIPmR + 2kd9A6lvItWICUdziQlZMieGifGAdclZDdKY9riXXuUWxMYea1IvT9lEl5iMm0mUSsh+9VNqeKlin/kS + MhSbU/dt7FOLnaNUWhIHUckWC5SbHViPhkObWkh8RsV2g6mARIUVJ9mHfIYDgPea3ZF8koljBkcXyYlt + NulQY0eIz0mSylOcPkidYbiaxMOKIbaY/qHkncY5mnzZkUBBnl7XW0g2k3+YngcJGI3gmeBJNmF5kOgn + oLhYcR7CRvOGn1GZnc4YlCIWaNgoGon0nr8Umtx5oFtVWI+3XwVWcXYYdRnnF+JIIIW0XNGSoc62nMxJ + ch5ajPcokhGaWyE6bZtADdgkiTOUkjmyogw5meC4Z6iGnn+2Z6lJc6JBaTK2nmzYQiyaIfGJH0Gqjnjo + kTT6mOJJhCM6HUt6hfJnoxU6OjQjpW1IpUyiltq5nWnqk/zYpSQITuGYHdFTpnXWomJxpUaKj2P4cfgD + fWDkO1+qNCU4oDxoPhzHhFNpl5QJpl+pcIpSgXaKOylKcQT6nWf6/n+KiqhDioVx6RpeujOaSFl69KAS + sB/KmZSu+ZeY+qZQuaGzQ5U7SUwTF6pSqBOkym9FUpsU+qOouqnUqDhhOp81Ck2CGTqxZ5D8SWGBOqiE + ipa5IZbfJ5+s2mkDlw0tlQ7t83GYqYVYdFFGF0ekqm4zep/Tapv6d6hYymiUiXM7UplP6EFkV6rmmnBS + uat6mncSREEfSmLpNK/5t1lV9EKf9K5z+jXytqhTkz0wiq83CqtvsmxcOKbsGKCvCmGXmrADpq+eGqP3 + KqxyUave5ZVZMXKxyIJIgiF9FW5qSqwLioyQmIZGxTytMKHmJX5ZxJGg6Igg2rEMWbGj2Jpj/imjRaQ2 + uiWh4miy+5lv9XIgnrWy/9pylgmc8lOxpEQOEQWwNysWhqSI05ix1fqzO1uvEbGLgmp93tGnOZuALymn + uJelPNuzQIocOmtCDZmT5XeVVwS1F2ssHtuwJDq3dIufj+ZoVtuSXOtv7eS3f4uu9oKBbDp9FMqptHOz + rUhPKHqhOQi3cUti3OqyvTmEH+ukxTa1czGCsuRyemam7mmPYYtsMOuqkhu5wim4Y1cGsOS61Tc2m8uv + jUclgghkTAm6amuzXZu1qCuHvMu5qJq7mru2MXu0sVu8e9iXxpuf2Zi8ysu4T9a87tepDwt3SEoxSCIY + 8viU2LunzTil/p9LZlrLt6c7sNOHpLWbkCv2uBqkuPTau7zmueqzutC7WXn7bnpiqKHrfNlroBaYfnur + upSrqZIrwN0zhifWfZBZwPXKvu3LwDFHvG7GsFa0r2k4ked5Dqsmu+NKqan6vAp8dN0bed8La9agNxRU + mvMHrRcMd8i7u4SZwebmwi8Mw8qnXwYcbQ9sftY7tAC8tfnLmuNYrb8brKOrXBIRNhw1Ma5jvmULxX37 + v+UKpeZSnrqRkEwErjwMrY5Av0v3w96rmMDrxE8Mxle8G4WgoDlsX5LmxtL6rPX5pPWnwkKrvo27xL3m + D9i5lW7FO7iKw2bWv35pwQXaWoH8Q8k6/oIFCBjf05v89ItQqMWcybJs+8icDLuOPMminJfqCkSBiLTQ + eMWhJCA5s5V3yMShTMlKO6mlbMpbisrQ6IUyJr0rLCGlWbJpUrCD7MeVGsmSjMuWqjOj1ZZFmSdy1a9R + 4wqvSCAcFVZrrKq7nMZ6DMjIQ8sIPFm7TFNX8mCHFRT6VEuyLJu0u76LzIG3HM4fQR7dYqVFWcS++stG + DBZD5plcuxgiGHS7Z8wJfMI7IzSe1STl3IriUZxtLJpIfLfOCsdxLLfFy5bHy3j0hXWPtlB97EurZ3qt + R9IlbdInXSux4gqhYnkrXc2q0tKqN9KVVyiWN9OkotI0PSuggNI9/k3SoALP3Oy/kLTF70iOE8rOkenA + IRtHa1mEl6wYXNzN9rrM3tzK3ByMo2zG7MjUIRevZAigPqPPYquUKNxpgYuxUkxV4qu9jTqzr5zNASmK + wSTPCEjBvlyoVb3N0kTOEem56TwN66fGbZpVORVAD72QYy27WRyBVd20toqHxkdOblkLibMTgckwBUic + D0m0d+3Oee3YnfvBL6gnQhepQZSKSU3XhmHJ0/nGmWvVE9vYuJyyzoTByhpqGyucYCNw0xXN3mN43LXB + JXy/s13KKduLIinL2LnJlNJZiOWcCJ2nuA0/NshC41uXxP2yxj3JQbKGftXLRDy8zi2XAudg/pq8bz43 + 3ZBqx+4r0RSN19z9Q8+nkFYZQOS6wvySEdcagr2gl9v1I0W6pfpBz9st3y5E35Ztko2zx/u420wt2536 + UCNTxQwe2zoY3we+Qbt11HIZ3qLrtrFlmMks2V9tlXSrdGK9ymaN4FUKI3Nc3Trk4AL0S0BBWhmThPYc + 2ePxF6AchSq+zD5GzrfKyzReldc7hIAmw1SZdfb5h2LSPry9wbWcxCy+4Y1bLh+V3uwdveCbhrN0yFA3 + sGJc3iTU4ZBbJ+gN2hEueKFdpQdNxx3S2nzV40qsSIGj43ccH/T4XmmbNFgo1GGZihGG5mt+3EIqq6TN + i9uKIwGuVSbj/kxnyZXqvK/dQpF0VSROlau3PYeHDrINXnaxBYfzB+kl0aNDCILnTdATJHKn/k0lS+jx + PM1s3OLhpNHrq9rvENZn7pzMutoX2cjgJt6xDuKJq9ds45AKbUBoi9oSGl2w3o89EYLLxEKGaazgzOYQ + 7emfnu1LFebiAem3xa2Wfr4aVxod9OE6KeuzDqe17lzdbuvhDojBLsKtTlg/AedePOxGTevu7lw1fJvy + TsaIzSD5RfDSdkOaqOGB3qztfuUOdY6w3QMCzzkAQuI315zs+bPZOuWQLDtSZJHtG4UCfxqNvJZ8HQbo + Du3EvqPa3t3Sc623WTD6pdoVXawAcd8h/mzsnezy86bNK5i6DNa9LwWH7Qjqd/sh2irnarUtOu9Aet7W + r8vvYsrtnJmEEJsQ/f3ipZvnhS6iqs45WU+M3mDy67rtaYTv5dk9lK3WM+7W/IyM13hZZa/WZK91H4K4 + Ug3zVyHn6dvlDcPsWfnrcK/LotBBwmPoXu7jQf6pao46gW/xc/3Zxernil/XZrv4aT0beb/uNf+h59ym + Ew28yy3cDh+/ma+/IB051y7EQ5fvCuvRdgoOB5/Ydo7h76zD7kq4VEH7f+y1K/fs1qpWhL2/SNzxHu83 + szpJYe/h6I3pMBlm/mSAvNFznt/AVN6gilflyN81/0e+X1qDHYW1/nKM+Sd/w7nc28s7+6927o6J1q6x + 9lmd6EuSmOt86WgXrVvTv2+HzLyO7V9MAPAxdbn9oRKRVntd0Bs33a0JCYwPTEhqM0+Uu9J0YQ8RHt+2 + shs+ynVBkE9YNB6RBmKSGWStaBAO9LhsUQGymQwr5GK6Cq3yyh03AVaE2nNGM9lv+dwYp9/F0M+qQo22 + 7Cym3Fy0gHRMnggP9A5LxgLbcBjR7CIn8ZIuMzk71zxBwRYfvqR6VH74skq2XIwUY6SAVBm1NvMSEysh + bldDhXp/heGGi9v4opIHHw0bZQRofZmd92aylltfa8O2Sf4oUT5PaL/r0iJuR40fgtfdh97j/nGoYWNe + qK+x6ff3vLkz1ImKJm2eI3AjxLGCQaPaQR0TAqWTF2JiRSTtLHryh2wKs2kbB+bDx7BLuWIm8zFQRgbh + QkXXNJ3jtTAju5o3T2DECaqfs4L8QBrEtK3mKJRnUvgIiAvp0gsiLIHZuUDn1IlVrQrbd6rb0lko3xEC + q8ykUEn+LiadSTMry7ZvE2CFq3VpuxxmKzYimKEQ2kIuQz6ssVaQ06G/5M4VllhxWD0uiTbG6wrFhMAC + YVYZbFPqW8aNPX0GfXIw2MN7R6to+q9DLMMUbETtfAM1J9Gp6dzGzXODCNMKPe6mvaafF2weKLp10Ov3 + VeE7dT/n/ehH/i3pbGvYew0Q1Y7NnLFbjX5dM3nF0PweS4m7ed8P6C+DOIqBh2xR7pyONw/s+nZ5lpty + Tzr/3LuHwGxweSouwmabSr/9BHuuvYqWiGYyxSbs4THqEMlwuQXBaxA6CJ0jsa0Kx4gPtAtnKo7DDhH0 + LiGuWjvRxHgevJGY6jQSsbADZ0TDDQJ9sO8+8XR0J8cky6NLIdYkka82BfkSkj4QQywsD4uWZBI2L2/q + EiA/oNxSyimTQ649w/wrEp1xzEQuFDHB/LBOLodRJShvSAHSFz+V22JNNqkMkio4xcDzTsQWpZCujn76 + psw+gcvJlPCq/FICBoc77dI76GzUUFGL/gmVqT/MqCYoRDOzNAkP39w0S0G4kyUTU0nVD9A7cY1yvUg3 + xA7WUR2V1c7WhrxQxYtI7aTXZml8NFhB9ep02EB/qevQWWktA82YoMXj2XCN7Q4JFo/xbxZAdtJgCSN9 + jNOaawslV45x7f0ulGVtRbYleBzclltzfbWm1TfwrTPhfPGl19NUKOtg4TSxjBbT2XaNNV+EN15MK+Ng + RYrd6SiumAGdgLwr44E7LmLicBN2mF+VEnVVo+1sgITTTiFzqImXkwS62XHRHVM+kW3uhE8ZK4WXZy3/ + 3aXln6cOrQnTVp6U5poBJlnTpneG+siod6yaWbNvPcInOZ2YORyu/iXO9jUebAm727F9Lhtt/vYGVW09 + k8361z4MJjLbeutmmWCx8wa37yCEzrWIaVF9RWuDwykaW05wlibxY/3Fu1KqH4e89DmwgnK1tr09td6a + fFvlc4vj7TNAjk8fOXfSyxCqoRePRuTTrzlvE26nn+4Xbr13f715c8ZRdu3o/RyrvV7dxpYFAbjv3vvv + wQ9ffGjGH9/d8M8vX/312W/f/ffhj1/++emv3/778c9f//dXUL83+AKAv/TJb4DiC+D+ENg9dx3QfZhD + 3t1UkynmPY94FHTZ0aRnnayljEcVxEP2ZPK2zZkseema170sWLIURug+WFuZSjT3LbKBrnjX/nPI7E52 + hT4YxWF2W2G5fqi7EvImQ04xzLOylzOyPbCDYypLcw4UOQhJcVEY6eG5tmNEpikNXXQTYQhpRzjbfSuG + Vwqi4s6osQiWcQ5F0yI6XogZ2JTCZ3GwizrWlJs0hnGPHnQiG+nwGyPmJ44940VZSAjECEpweFLrYyIf + 6cNJTC8sBXkY5r44wjugayzE8iQjY0QpFEYSkqTM4RivuEl7LI8UarxZQJalMzSyMpS1GqUpwYhLGjIF + eBkJyYRc6CTb4bGU+lIe116Tyln+kIpgikMulPnBZAzxk5uUhbKKmUtbtlKMqNOlNr9ZzBQB8nCXZBsf + 43E5We6yluds/qQjTdlML7FhnG8xkOgUqbRUYLOa4KRlwd7JO1LKk0n0/CdOQGidiMVsn15ZJzp7GVB3 + wjOSBA0aKOskFk1mApZue+gpMRrSrXkTlxbVET0LCRewmDQlb6ymHbIIQdzFM5zsjCiYVorQ9DSSiQdb + nEgdV9GagjRipBoFS2XXOFbacZuLlOgE94jUKcIwXCZZWE5hIsiPCkxe3eSmHmk61HxGczQouSoe79lE + f3ryQC4Fq1DFmsiUlvUbt2nrMG+KyY3681peSdtA40rCuabGEXat0YfaulVF0gtrfwVsYAM1WPacYWLq + UMrTmFrUwwI1qO0snVTJkzOy9geHbyCm/obMOVJjcnV0tZuhE2waRNAKp1pmU4WY/AQNVhBIsYIV3lct + B9EVzpY9JSDuOjiA20WYdVeUnRWgOopF4abwuHOJRnWN4S6O0jGvaxWR06qnVtZNl4LYvUla82lb7UpT + qUT97Uu7KlPVvrWP5nVMV8xiX7l591U9+Vpze2soDj51nyo8o36RuxEDoy2AXoXTKl0J22wSYVh+ffCC + mfnDDCF4vxz9k7Y+/N7VylWkFsag82S7QsPtrsHUNAV3uRILCY+YxPN97UEpemAKJnSvU/udXjsE4WWK + LrOaFS+QSVrf0/UESBzeV2vbGz0ejSfAq/WQicUF175dTpJV6yQW/o84WOeys4iwtJqSH8flITNsZlfs + ohyqrD2jIDmTfnukk1VJThqjDYDbzU+dRcxfcKrryLeM6pZ92rXT9ZlzfjzXhG1MYCgnOY14DuQLLW2b + Gw9jSXEeND4BTWkd702ZmXasDOd0aUjHV9KSja0FTW3aJn02yoyyZj8rtFk6G3rUDJ513+jm6qTBOb0j + 5m1T7VxpUscx1vQdrek8DF9WizLSos6wen8N7NSCIlQ0AO+xJ0rfFNv2bLQ2sscaLe1QAxfHMx23l8v9 + uFyvA1eepvCZds3r4fo623zOt7N4supNS1TY5F20epl98FYUvMumLa3J+jokbh/ax0u7oLm3/sTwNTPh + 4ViSWTM0zlrqwhvVGG6ZFXjc2eKpO2PHmXivOwbjYfsbhiE3uKz3vJkX6vniMLcXMnqubapyOk8d17lw + mk30mAMd2vIG6JnzJO1no/vd+fID34Q+dFsXXepIV3bLpjXzqhmU6qTJeQhtLu6Rg13NGx/a0wGe4LPL + JO1qL6+XU5n0HA88y/hh+W70/nIfQy/r/7a7MPmrRNwEHuqDx/re1DB1kz/57LFbvM9jHnSzobTs+HkG + eOqu7+cxfnKaHzuyNT2Rz3Mm9O6GNYMzRvp+1/rw2a18d210bZI3ffOoP7U8TFDk1u99d7IfrxB7H+7U + W2T1MR4+VItP/vJdGd/0fLe26veq+NFQv/bNkjmKO/bMzudFLXZ6vspHT2oWJr/afddp4icNF+6LfmP0 + mj/yt80qt0c9s+dHf/TVT+w2JvL8T7fahQSYyv/i7e4CMG4gT/l+D6HgTwFnL3fuT//AbwC1LtXaAgHZ + QfIEjwH5zQHZr926z5cYyH8SaAVZsAVd8AVhMAZlcH1ScAZt8Abnp4BwkHusK/EosAKdrgHN6PQ8KwKz + wgN9T/7WbgQz0F5QTukwpMVQC/BeTwgnD1qeEAoxhL9+kPDSzwodzQnbz/1WxLtAMAQBkAm3KPzGMNno + ygzx7AIXsOKasI26cGCgSKAICwlnwNLk/tALye0K22Zt7jCM8uj/yjDyBA1JvhD26jDIrqkQja0ASYuv + eowR0xDv5qb05uFHeO7/KJE83mNrnOwPHw/vBHGYUq4T6a0I3bA/Nqf8UsMU12/3whBiOM561O4Ta7ES + tan5QIMWezHzUtGShCS6RI0X8U8U+dAhSrF5hPGnXk1QLm25lJGGzvAWJSSysilgMpHtijH+clE9eC0b + I2w/gm+GOCwaSbD+YmgTzPHGrhF04nH/3pDuxiwYv/HnPCTYLE6h8gzk5pGo6nEazQOa3GAdLdDxAGMQ + KCnaMiMbg61U7sQhCQHB2PERG6XMzotDVpFpBlLRvKR/7PE/FC7z/lxovcgPcEIyIQryMIRxFG8uIzIy + HCvSGmVxJUGu5GzmJQGSHXOy2DCx8NiOJfvpJBDyH8vNJxWqJnMOIzEO4bgBqfRi6kRrX4ISZkryHZyy + 4YLwALsCXJgyOLryKbfvK6vwAJmMrHzj+ZKLCN3LM9BSBM9LO3DPAcfSOspSKPVrL0UOGqeCGwoJQB7F + L/myMQxTKImyB6Hn/D5SYbayFR8wLSVDM/KSGRLzMM9jMRdyRTAt0WooM/9y7mBnMumSMfnG/1rypAyS + Jk0TMD3THC5zcDozLofy5ChzC/ljNrPqNI9SUXzJGEQzMivpqcJOI+DDN3+zWJhPOHPTup4ovVkuMZDS + gDcvbyZxhOb2UTIsZCCAUW4sQ/dGEycyczhtMwrXw7+Ap7LCs+oUEzjzwjlhk7QE0tMujTAxjzSZkw23 + E0L+4KyS8+vOM0zg8iR15D+jjjbdsxv3k2HmExbPceWsk0TYoLr80jzfMwqtcRHbCDQpbjxLEzcNdEB4 + iEPhbEJZc0BDVANHdBuP4awkcaqwUzJZNCp9cUuQSMGGqkLlskY5k7YOIR2JaDW1M0NN0kdfE0J9Ikcf + 0xgKAAAh+QQNFAAAACH5BA0UAAAALAAAAABYAnQBgf///1a06fDkQgAAAAL+hI+py60BowSBVuiy3lnw + D4bi2JHmiaafN5GYU20x82qz6ql6ufe+jolNBBHLr5c7KpeaJPMJDbFqLmrCusAibhktyRlFgcPkXdAQ + rCS9Zce4DTe94/QlO3TngoT43bzuBij4kWZEATB1OBi42MjoCGlyt5dnI3FZZJmJE8nT6Yg5E0BU+Gnw + ZwqImsoKsboHo/dguCX7cIbEqvCqy5TGNTE5yNsbRlzcqAYEjNllm8V86XPcSI2s8nuLm2p9rdTtHaeM + /RJqSQNd3vwDXtceLsKWKSz4Dp9ifx8VYR/qj0ZDljk0zVqwC5dPX6wGTuipUhgnIURfm6qsO2Bl06/+ + gQTRfUM40cezhs+qhWwj8eQRFi4IGqx15YY5aS4blBQDUiUKLyR7pdTZBGikRPE8ZnHpb55SZx9zCsUz + covPp1B+UsVJi2KhC1i22mBiNUpYeGwaFht79QDatCNy3NRUsgVHgxUjwltbrCxMXXjT9mW7oqOkuhiL + yJTLtdPflYBt2uo5tfE0yQ8FH9kYc9vgpk4pW5AFma/nXKPhmL288fBn0XdHv1Qr9WxpHYtnJwjdowZN + RchqH6S8GzbG3rbxFS+T8e1OKsqLcvbme5DmU7EjH5dzPUw2wrmZt/7O1vDtK8SzfzG/L6kd752hAy5H + frhs9G3pP1kTXORq3u7+wVNVJ8Q810QnFIHZgfGaSPnltoSBflxVUWIJcmOfCA4eN4ZDg3FXnn86JeeW + hotcqBKJts3R3AkcznePiUp05SJWFYIQ42gIGpYiBxcUplCN2H3IwF8i0jijFEU2uBdAL06oH2P6+LjM + AkIOyQGUTx4J1jorLreldR4WKECYo4RJZplmnokmKQsah+UGVlJGhCFMYlPifWneiWeaflm2zJhE5Alo + oIIOSmihhh6KaKKKLspoo41K4GiZ/ERKaaWNtskDfOTINBmmQXnaaWY5EgLUm/SFmNWG8dEG6qetspqZ + HQW+aoxgozoWE2m0SrkrJ6K+auqBHVFpU64P9rr+C7IyFkbsicpyNmc8zBz7LHXV/ljTrsEWh2qzR63q + 67XbNnbjE7eydi2s0TpXXbjVjgsYSd4602V/E50LCX7zzgIum+Kme95n+8aCL4UnFTwiUgjzW8vC1qYL + L1v6XpaqThFLpq/DSRp7wsUdAkxkxT9o3J27IFvII8l8bhwwxCcbaYTKHD/lcby2KggNrp64/HJgAzO1 + CKcm9+xqgE3mLOpNNbNIdAk/oyNzyf42XbSSUmsToHiP/Es1vU+nY3PXnmh6NdZ0bc212AF9HVu9dZC8 + 9KxWRy0ys1IpfXLcQLkNFY/kqh1kdVFr/e2wO6cNOLNsk0e3KXrXaevgayr+tSNDLz9+sCt9WA3ERJjL + YDBvdK85HOWB55042IQ0znmLabHecdujT4e14pVPIhDsPab+a3FRf767fPxFKZB8tgyUdVKl2Ae8QpPr + nsxviSMovBmVM052IAXpdsuMzesDadLQ0/yeScI3frbfrZ8+At8Y846UcHMrt3jwr5s/N2paZOSmiuMP + yLvX4Kd6havfPkKlNuqtr098qNhbEvK/j4ktP6iqHoAi2B6qQcaAArtIu9gnCeYFEDStO577WiGzY2Cw + VByD3T8KZ7mdiDBxPMkKB8MmtnItEA4rkogHZ/O9vOgFGO/K4cxW6LVk9elAN7wOkzRHxGcFUUd2+SD+ + EkE3Hutl54StWtco+CdFI1qxE1QIS1ds1EShCMNtLPlgr6b4CR2uLHry02K23pdGlXCII02IYhjLh5J+ + XZGKdbTeugqEo0Eigy4vXAH3EIe6I5riBVMqzRRIZx6ubO88RlMk5C4HQ09+BRH68wIXQXGULzayQqvE + ziFbBcd8FVCUCyHlyG7ySjIGo4NywVIiYSUnSP4ngigiICRmgJY8nBKVymMOLdezun88bYB1g2Vj8vgw + wT0zINk8WjqwqaBmJmeY6nAMJqcGyvD8r5g7lA4yobk2cG5qlW+QZ3qUJ779OIlosdTZfYyyze4VEmep + DCgWXTUziARHGj8US9P++lmsfyJteEHLoi+0Uc1IpOgP9lyPHjrZUQRwtIjhqQo320kHK9RGFLox6CgR + mtBw8FERDSXDSP94P4kyjKKAqItvCBPSKlSJYOCL1vKqKFBlQXSi+9xpQAUonUVuNIne0NA5dZpU9ORo + qTHVlSCDBtWeurSW/SPYWM+ho2VSa6fI4mq/vPrVqFI0RmetXWCo2otT5lJ6r2qOW924VkHSsoZiTUU2 + Qua1ujYsra2s1a6m+jrWoWhaPY3h2+p6VcvidZKrY6pNkeVXdTb1rTxFjmbFgVmEUWOvPGyOKRWZoYyC + 6q9zHJoxS0uGqIh1rPtarVrTI4PjVYZlSj0mQeH++tagAtaWhTUuOjVhWEJm1TTGUiwAI4tA0ipyTjVS + 7kmXBZfoHrSrn+3dkZRDW5SizJ+3hYIwumvQaVJCtpcdr93ccV9PoVdbXWCrdmCa0qeqrB3WXWNLnxmi + xNAXU+nNrn+vuF93ghW50v0EPWpKXRv+Fj0NDiwM1XvLsgrCu7UFb2cNmyKDusWz9onwbF/a3lvSA0ok + NiCBrQviOC4QxxI8Ei8+Oj4R0diTNlYRCnkcuNy1ycVt+vGHKeaQIaNWskZmb0pdJ1xfirjJ9l2w/xAr + YeQ08R24eyaJ62NCLW+5SMSIRilH9aYV5pHMuDyzl03yDDtDpMOxs++GuUn+JSvZc50hzNmfzUAnh+YZ + yazgc8uAVjpDFizOcnZo+7IsoTDL8J959mVor7leGKtvOc9tLjQPveZoRoOl2yQWEq9H3kze1Xuk8m9L + bFtfj67wxhoZZzL0bM79MRq1Q2VzNEnLrlJXdklIhcpMYxzgze1DTbECmKNhFtxYwwLXy+4OqrEtLQzf + +b9ddu8opsuzGTJ2ucnu8zEHN24PhzsuvG1FPXt27WKvG9pplbdcOzdcc53128fld1srZA1n+m/AnI1S + wM1lYcV+tK+zNo+hXCEpRE3KUhxflJ8Y9fGOi/xQIR95oUpuckVBKuUs7zjGWw7zQWFr3zle7GhBQTL+ + BLf7xBpNrTOBHfGKn+Qd3WBPv5E0SY2dOTpAR3Y9aJJZazYc3FSXrlVNmnRy1MO0FtYxLpoekqW248Y1 + j3d9xLvph0M86EPh07O3COZPxh0WBp6zLpQ+jG1vRpeKcbvpFGybIYn97O2TLcEPR8ZEq92jU3eEmi6Y + yKifSm5VVzUMAolCUm+93OG+vDgUkxqFNVYygab83DsL5JBezGGHJzxZy27zfLbhrJekHD4Df6vBh7rw + h/Hk6rW+eHRbxKk87PsvS6HJYY/M9UNnfh9YunkUp0DnaJ0+RR8p5rZH7m6HBZbphe7sEpfBY6zPO6SN + DGvOQXisp+mKuH38/VT+O5u138QX+a0ffXNaH6gNa/138UdTgKcw/BV/iFcUOUd/A5V4XxZ81bZwZ2Q8 + +qQ/fWc4AiN672dx5HN60lZod7R7WSdU+cde+LIgdeZCusRq8cNLqoElXGUNEDR9Auh8jceB+AVd+zdx + ZvUiKJg1JfRCYKd9FlN589V5DgaCfWN+Ooh+L/EWtAN876ZwUagpQChLLLSBR9c3dENjolZhDThqt7ZQ + wVU/VGhCQFUQDDZh3AZC4Wd5jRNnr9eFNhhPkiYK/bY4YKc5xfIavcRlVgh+NVh/7OZuI8Z5ViaHhoh+ + gshiqgKFqCA0yXdUtOaH8geIimMUFPZ5XKiJzab+HS01fzHYJAiDAY7oN1Dnf0KoUSZ2WpcmO/3FV8QW + h5uYYYhoEdinagVzik9GVAokJ8GQabiVgQW4hrfWQa74isUnNIvoeUn4f5sifmZFPymYW58oOBZ4CL74 + jNfhgn84b0RohMUXi8sogsJXiwYXT1syU00Xif1XTgwFjMIijLzyhGJ4c3cXjcBGICDFJTz1dgXXjRyl + ScXIS324SJQoj+B4jBVFi05HBwaCjZsWIQnYge9oV222gmcIf5NogAdUj3lVfQB4TzJYeOcjeWlXjt2E + NFAXM7noOfFoUQj5jXcHaSzJjUuSPXiXMlxXhAq4KoiRMspnjqrYkgA2jR3+aY/LWJLP4V75g2pudpRc + EFt7wUcSCVyH2Ao1KVLRZpRXSVQC2ZC5BWtJGVHZyExKxBR7JJIKaZVoR5RmOXtIJ1PnaIprSY7EGDNa + R5PeRkKM5Yk7QoXMKHerWJVbKX0PBn1fmX225hzKxyRxkm1mQ5ZAZHaZuJEvWZRKeQ056FSwNXvFE4Oa + 2XNlkSP8w4IIx5ZXmJVvCRZFpV29x4myGI6TSVwUOWUl4VsAUpcY0kBhZ5CyApdqWWH7k5u/6XkLkyB/ + yWyVyTBn4JmSmIqPNozmtpqoRI3CN0ht9jPcAZT7qJz5JYHaxi1612jdGWLTeS+IqHrH9oAQeE1Mpjr+ + BoecdDmUgnlRWAUhymieH7kZPwcc7jkLzNmEEaR824g2S2mf/3GJjjVl3slh/aUecJicXkKDbcmTvpmf + 94mfhKmLG2I0pDdj0LgU/IJNw3Zuw3mZWMlcHHmgT9Fp5eWNzhiZIcFG+udrUhlkA5qgb8OQKGmZa7ei + WulNOxqTCzmR17idlkdcAJll7Pg/QDkWurMlq8B0CqppDLKhxPmYZSOWUlUvpJijySed12Wl8smjFvqj + sBikQelvYPmdasql9FVPTySiR6qiADeOFbp8lpaGeQqeCcl1aPkhpXk6qfeladmgplcDU6qne6ql1/lr + r0WnMYU3tJlcsGcjGij+PIqKdb/GbHlJn7l2pZn5nm6JgcEUn4DZeJPqNz/lohXFOp5aoCGIf80Yl7L3 + knu1S2ioeBQjdEXAqlQaVZHam0jKgGNZVbhFOPLjLbC6Z3bKIHB2FL+6qCNmqLyZaPNiYFXlNgZxGnZJ + qZdagHnoo9O6W6c6c1UmepR6YSQ6JLeTnWbarIXorZjomOO6qVVKFSnxWuoam+/Gr71oroEpsCkKr/dK + rd/6JUUaql9orBG3rbYHPwQ7sCs1fl13FT+xRvKqiOeHM6PpHUFmmlx5eothT5TGrLM4jxlacz43fKkZ + oZNXmCNroK0qYQE7gya5sP+Krog2f1jQFzZLs83+55a8WrELmK/lSat9irAqu3PhFZ1LFLIaWaY8W7QK + CbQfSLWjqrTGubTiSKxDWzYwK7VC8pq5JqwUyiWLRqSWilG7Sgm2aUcMC4/i6Tg9GrbASohdK6Yv64BC + Wn4pK4Y9ZEie4lZg8LOIGT0ni3n1SYuVoJ9I27Ofyoq6+n14oVwme7bkCYoQilL0oxWMKLkaBD5osxbe + hbl7crcZq211GGsKx5dKB7cWm7lgW5CnVbpkGmCzG6scurARWUtARpsBOoaxC7gZqZHJ5HuhKTHhBJpa + W01PgzvwdJCb+7ieQaB4qrBVm7ioK2NCuj6ASr3Oq0V7Gb6AhiGYKrFui7L+jIq+IYYZ0BiAOYoaFFEx + +kpvVCm0lPekqMq+qNiprlmcnqi09Giie/e00gK/53sPxGtGCaO8RwukhsafG0tFyAelxGvAczi3tco+ + VhFQ+ebAM+uBwXZgIzy5o+eP2EvAHlGtf7PAj4Cxjhex6du93muJtmOc7uepWkBNtzhG1ugsL2xZMQyS + 0wNcRve6F1is8ku0yso3yWpDq6G70CmqQ+xwIcw7v+pHgeuLmcWeV+aBj6fEriu8Lcy2PWaMedvBznqn + wOmSemnDOPygSJi7ArQiD1pm62hJdKujMaSvVWi07StwAyzHYDq5YNywdKx/spmzOkY+fyzDqXi1qAn+ + uWe8pYnMpiQsTgAMF4pLgULMKz4UhDg3ySg6mIG7fRmskzRQr4mVYqYTngscFY+CcjFny7eMy7lMcpOy + cXnycrzcyydXyyP3cmhSzBn3J7Rccr98CbrszM8MKMMcJjTMx/zrxlLbiYSsglQZVGUWiOupmR7kyVjq + v7IayRF7IcKGhH82SMqUO677tntUEx3KyOdMR2qosYjrXBeLyHGsfjkMYV15jvHWjz+ZHHWBv3h7rLub + pYAMPybCfzwHtfdkTqTAjgMYz4Za0DcDxI58mjtKZqGTxToKvPE80TaJS9RRTthTvqJDX6xrpHWrUJrL + xFicOhCdKsu0L6WqeWP+2S1mcy7yII0c26b2/MKENZIePdIk3cihdHUU3LLLmGCrplevdFWHmbSdKaNI + rcijfNPlqpijFHW+O4EvNVmshtZCfcclzVTIE5BdDbqjG7pZXcSAQ1fCOW+XzEEO8U791z18MMede5yG + +GwikkIHM9dM64Wiy75BrZJJncJGkSH0Voxm/E3W2SXu92YHPLCwadNGDFbJmNd6S9o3KI5xOq+fGdh+ + vTZwTL7ci4Uy/dCkLLeuLJEu1IQuq821PU8l6FoJrYvjnKa6Xb1e/dWPytvfFaIqqNgILNAT46a8mhpv + ndzBliUaEZePUc2fPNvIDdU+qMTASDii+I5lVIH+MXqLRpU+Od3Tv5GrnV3Txm3XPffd9TcTIIrQfB2g + WQnT6N23UihslEUL2amFOFza8o3JSn3cOOfPc8raAk3VRf3SN0AUzXuDoYfXEyXAbPPFVQfFB467YY3g + YrTP1U3XIdRLNVUvlbNiNRrbm7zSAnXQ6APccUrPpbxaaJxAmTkqNA5QqVfGtpR+vYiFkFc6eoybCHku + Zw3in+21q4y2jF27Eq2awzKaQu53l4YYQy7hF7SgN1vPI77bIf5QC03lf4rVwdVGHkh/ls19IjqQYLnk + vzufRC3bS13F/WpuW6zmGvbgYfrn3Sx4QC3cmCjiIhzlZS5TrrXVRGEZl7z+sxsj6FsFmbvpOvlcsDSd + Toue2+e5YsbD04dc35DeEp8mO2meQfE9yKbMT86T0gzeB59uOKRuzuq5500YlYXupwVc1yQuyy16z7Cw + 5rYj4UmXl1y+BTfy3nXOuXcO2gq1pKw57HJcVFCKbBWO7KWswmGuva01xcPqrxuauTEw7ReI7J79fyR4 + gsQuUo+kzldS3MONtVDuwlIll+du78dpyFSyrN+p3zZp5TC+r5fe7M4+33q00cVLh+It2nL+5wX/mfml + w2tLmQzNoPSu6SADURBrwk8+m+5diat+w/HOQNYoR62dsH2LLgtOTglPgT3eWhet51nLDxf/nxab2ED+ + i9N7nFNAPRVndislKaBA/sou5Z/N7eR1ar0Iuq4CXUVHKvQCSrtfMck/5qT9DCcs6j5x0dFBW+WH7uYf + 39t2CzrAvbgeL9IHr0ZefHuF/EMbRlcJnpNvu4M+y6E6P/M4e+jEvePv4WqUbeBeCTPg5ISxN7jzO73h + h/ckr/QWf6Kw3fPMW8JiPzZ5VHezs9ecnca6nmNOtrd9jEPqROsN/miorsogKvnODfhkP14f/vWJDzU6 + 3jUgvB+hbjejz/p338IlDG/+ze7yC0GczN2LLKFqXxozcUIMxXAde/mGT70NDzUYZvfc6XYODfHWb/ys + hIvmyNXXj9HZ452tJ43+63rQ0xX8k9/k273t6a/Qvl4kqz3jAJvW3OrvTIr8hF434l/I907YFK7aQ00A + 8DF1uVncCZFWW+HVm3f/mwwcyfIK0DQFVrZ1UUOdVTi2V1qPp37WJiaEbhhU0BxGiVLk8rycrIRSOIw0 + G9Tq1oDlfsFhhFdcNidxPp7sxsvVjruWkhg9g24M+EKbx+Y39tq0wgAXyOLuShAVGx0PHyMd33aK5JDS + CIviNCUjOtk+jw7+PvY2PRUYp1I3VlthuV5jaUsuO5swKQBPa0X1QEMtA1ahToJ8fGdlfK+an6uWoaeB + grtMX4yp+eROOCEM2ay535QtwrPGwaS328fc4bn+dKtR4yt6PwmJbbbKFYPZqYPFzh41ggURsiKlLZ3C + hF+01RGSDJ2kgECYOTr4sNZGjghVgKs4qt7HfuTsmKjRY9cdaSPNmSzoUWbBOePoCKx5TJURmE90SjET + MGgkmjsfHUXqTsCPfE6Xlgz0oynUfj+LgiCaSp3SqEO/SkAqMtGwrCBVSvzJgaG4RgTXDgw7zSu1s8/I + nGo79+4hNzmr7E0aiOlcaHUNd+TDqa/NuBZEQnl8ruJkEwcbn0GcOBrnnS8zm+rQF5+HzRgXayTc7rRn + Eq1dG63lU5zllGwzvm75T7U3h7RgxzYt/GNwoLcE2iYZGsAsN6tR28IQXWz+lsHEUxnHDjbWzUzWlDtk + 7rx0kqDhSVV3xlNqK+3bp8Of2d3fEn7k0Ocef++s5fzNXYFOmHu4k683A+F5DyN8fFrpuf/y+C89MSQM + UAPMgMmnQARdopA5BBUcLUJjkLtrxEW+OghDTp7akMMyQnwRRVoueUoieuwbIUY8OlBxqieEEmNHGYeU + 8YMVIYJwDRF/G26nGDbaCJROyhOiyBevNPLC2QSjDBvAtEqxRwFJ0uO2LbIEUcvDaPwwP0MkTBPGMalb + 7UNI1hQyz2bkTI2EKndrz0IadeMAyWqQuTOBPuFjdE88YakQUA2naMzRMo8UVJUfp6JtnUc/BTWWS2H+ + sAVCbnT0pcv1KsUFN05zk0VUWWd1rxCcJrLqHDNTVbWvvILclEz+mrSy1s6O9QS2ShpKa1I/izW0mf+A + dXXYXahQdMJkC+X2uly9Q3Wi+65tw8nZem1VEynPyzYMUmODV9TT5gmnwk2ehVasVSFFN9NgnbC2Tmyj + vczbdA9WBDFdc1yCOUkbykpeYwGWQmD2+MtW22sSPrdjzUzdSzJJQwOvqIlDe+ViL1kuuNuPt4QZZDzi + qnEEfn+h9AKUkfm3WVUECFrooYkWGoWikQ766KKXTtrpp6GOWuqpqa7a6quxzlrrrbnu2uuvrw4J6hSU + rurrprUmRmq1wW476qP+0b460EXZUmekjSfmLO89j8rXjmTSunnXmOmjdm66r0Wp1VBlhqxxFxFdC+cv + s0qO8Ej97leTiqQkVnFaH6dg7zz7hiZz9Q5nFXOWPKYyhMQd3lzyk0OPr/Yv+t74T9t00inv09/RdOXU + K63YLcZvfyB5NDmd/JHJe99Z9+P6w9TlrYABT8/llefe4Midf/6x5ARqytf+ou/ec3F1Bt374N9HOB2b + 7VpcU/aL3Tt8t2p+fXDrCIa8+AFogGGy0ZncMYg+wE5YXGpX5kDxkpyZZ3sFHJ2RVLake02CIUWJi/mm + 1TtM4Ep9FCwTTqZHQAsW0IAZqo1JRlY32/mKJ8T+4J0DVEYg4iFrhSz0mPWAR0MrjGaGHPnBeXA4QQDu + kGIDvCCR0HA/e5yIiKrjEvg8OLwhMtFl33OiD39YrBT+I4io2+IF/ROwKpawi1I0o/vi90Q1RRFUldmW + EDP2HAYywnIBfBcL5WigHIrKGoE8hh5h1a8tcnGRuAMkGAeFvz39xJDsQU8EebU+OgrQe5XcDiI2mBhK + PsmG1lNiAxt5Sn058ouQ3Jkk6zgSOVoGHEG6of/aWDxVMq+VrizigGYFELuQLyU9+58iEbjJTP6xl760 + YqyC2Zb3ZIZ8EekjLoGpyVXCkXuexI4XxvgVhkxTcK90Ycs0Z7xdvpGV7/P+JnFK0bFwBNJ329QhLsMT + jHCq0J7eeqdrRLA/LRmiTyT8Zalehc3KTWlcbOymM/FTxjztoaC8tKU624fKfCqTZth8KETxtY/lhcQT + kjNnWRJawsqtM5GIcydIycXP25GtpHTop0sDozrl6DNwDk3eP404CJ8+jqaS4EULT5JEdrIUoxb9aPJG + dCOczlSmkxCKQFWoKGE27Jg3NaHjXjrSREVypiLt6p9seZZpbhWajERf+eIYP+UAFR5mjUQ2JJYaaupU + H8v06vxO+lSoqvV9dh2YiKh4uersValcbetjc+lFwRIVPXStK+uWKI+0SqsMbE3mX/dZ1dtZllAIDSP+ + VZuaQucBYkeebWouQ0ta1sgMkT7jnkk9dBc+5oqvvsnsnDpJW6xOdbQQ1GpledNYyC6Qo8ycrLcA97Kf + MoyMhM2I7lw7PoZ2KLgfi678ivvdu54rnNn1LSyd+1OYKUq2dHGjexthXnSaMr2jXa9T7bvUwsTXs5O5 + m8K6K0/81i4XD5GTfM+q33aqV8BNZPDx5hNaBXMsm82FLCdD197x8vDBpo0Ho/pLTL9WsMPJCiWFS3zi + md0Vk+/Vr4Q1jJeEaSvGfEJpgrhiRRHTt74ZnjE3HwdKe1wKJvGc74UXTOAfDzjIIzZIpHRarrc8l5Cf + PW3jQCleG2OusTvlcY/+sQxdJNMpv2ZSMZM33L18ggnAJQ7mmDlb5s/Bl8uvM9GSDiTnN8M5sEoG7JP9 + pbzGDBe8YT7WShzs46/SmT44PHOb9RzLHEhW0b+V8bSS+OgV+/nQ1CUzp50cE1VdQdObbrKJPR3nSp+T + TaZTqoTR/LEanyHVZDW0pbf8DFnyudWgrhWhUXlqXIta15nmyKzlAt07IdtWP+u16awFaw7fmlvLjrQu + Ge1qOx/bzdGkNLVZlG1o+0/a35YZs82wn2u72CJ1JTe3fX1oc8uakc1ux67LPe+Oobuz+k5YBgHtbjUb + eN2ETFnBed3ueOAb3sKW92vB6vBQjwok67JywMH+vWeIiy7eX062TbadEH5/62CZGXme0UvxhHBu45eW + eLUt1XHHgiGvD7F4vmf0chMj9dyLljHOO+qXhmd857bt+bCBA0NBE3zVYjY6zPgI9IOCXOhMJ/rDr3yw + Ymwjxugwm9vAHnaxj53sZTf72YfGNrSvne1ij1vbpfakB0id5/v2bt3/7WyX12RzQ6d3g7POrd1inO+E + AKHIdY51W+d94kmPSt+tDvW7f/rvf81OWNBRauBKXp4153zKVY55fVj25KZ2+uKr6/eZWxjDS+kr6Y/e + eVXfqhKab33LJzxt0ccB9rFXdlBC9CyJkpzdsvHM6yPP+JLTzlSW+NHwIZf+cOO7hrm9tzvg+4zYWh/y + 2cUnPmfgFAS6lp7Ep88+jmhuUO46X9zHd5do93v9kqP+gJ012ZTt1/7jO2T8nzf/1P+M1mAC2MjK9qRL + OHjBCPpP/mCO/hovSajEAOGnwnINPo7qjnCMAaNprtAvvjIE1nKB7jiOQ4RqAjNQ62DO83Dgxu6gF+Zh + 86Rv+kjQw+CP8ASv6OrmiLqhpBwmBl9GAvHOAvEBqMgvyWJpKt5prF5o04Dw6RBk1+YDBTttdooqgaJr + +yRLBNujCGVoqPRvXpaM1bxJL/CsgprwnjBwoJQr/pKFCwPDKXohCRWoDBnnDP0IxaTww5Tv9xiGroj+ + wAAzgADBhQl8jw2PxQ2/b+EaRBDVTAvZDw81kOvykMqs8C8YERLsMGPSsPIMcVYQEeUuC8I0jSx0TQER + rgIPMcAcg0R0p5ZK8QY+EQZn6wYpUelkJRM1sQb9bxZTsRY/gsZ8UAChJKw6EVRi0fRkAm9wj4Mm4Bgh + jRc9URUL7xangaSaSRLbcHnQTRkdkUWcEf+KkW+0EfPQBBcJRMuk8QvrzN5kzhbRUF3MkWCgz59OsNg+ + rh1/cQA7yBSrMVG60TM86RvPrxBdj0Fc0ASFqCp8KSB7senESRDUQCpmaSEgiiG1jR2vji9GRhtmSQkr + Mhy1RCBjjThYrhRXz5VzKkkkR9AhhRCZGo0GPxIaH0Ulcw4BFau0WIAmQ88G10QnC02UpoQf7TEexREb + jZElDUMw/KAaLy4meRKDkJIvAuiJ0BGmEBIVQzIqk1J2mlGI5vEa9450MnIrw08oV2cGfLL7wjIrCXL/ + AsYpeIYqoqIAAAAh+QQNFAAAACH5BA0UAAAALAAAAABYAnQBgf///1a06fDkQgAAAAL+hI+py60Bowyu + 2osE3rz7n2jgSJbmJUCAOrKMW8EPdcmneOYfvvD6D/xMVhRbcOM7KpeGJPMJ3UhMxkMVEWlcF7SfMwr8 + NsFk4BSg2ZbR6/ZI7I4H1dIul6SiJ/QcuNwD5/c3eJbCFyU4+Jeo2FiXk6Vl9zJRyTfk5WgSqKl5htnI + 2EkmOmpqAFEas2pRNEn0ygWaedrhp1r7k1WpiZsb5PtLSBE88wAbu5f8MuN62CeM5FAcLbSb11stR61d + RsNtxWJZoyXrMrR8013Buf4k7prtXgY+zxTB7WwZaVQ1jjruzJJ6jtrZm0MMoLyDUAgyVCKwxT5lyrrk + 2WfnSrr+HA4H3Xqoiw2RTh1B9jCZy5AQK8iY7cEy5WIkWA42bkI5ZhpOiQmfNdyppCTQmzZlubwDEOO5 + mTZ9AtppcOgjEUVJSQV2teDIKOj+wRxJpyoJoYt0Zm2VcMUoskDZnrWFispMcxYvhmM6tyzOj28piXTK + xC3Uvh4V4sl7dy4vtVtPCW7Dl7BdqmLBPEZ5mbDZxkdkTopZWdKTzFY3vy0Ul6Tmm6vd8AjN4ZpifdpI + l2ZgW85Mqmtbj/Xt+mvnungP5kZk+qoLyr2B73DuLcBr2NYyQvzZlt3Z5alVQ3/6natMmvdgUF+4V7vU + SDjOBw4PDT4YpeWtMzyOPLlJfrz+m8tH8V9+yACGwWLuaTVUVCjJxlkoAWKAH3Q+RATRLJ2NJlVk++mD + mCIRGvcghsa8QyGICaq3n0IdFhYiii0e8QWBHcjoX3b6zSPOLx+a+CKMFWFjBmPdgbTjezd2w50OB57U + YwNFAtdeRkvWBCQUU7o42JHadNERjQo8OQ+YrRnS1ZWSeOndiVp2I4Ahbb4JZ5xyvulVCWKy2eRAzgy4 + hJk1NjRnoIIOSuicRArJU5vSFcpoo44+Cmmkkk5KaaWWXoopphJkGqd0i3IKaqiiwkkPlu6kUQRPLKmT + J26t+tiMnxRddSdWawqTRoN12Gfnq676SgtMsh5zVq3B/hr+Jlh4CNcrsCE4q0MSJUJr7LFMntoSCJ9d + WW003fYl7YrAfsuqk8lOK8Wsv0F7ALnFVsTutWreagqqS35WLrvuZhWulW/tu66569hbAr6sxQtwhj/2 + ia5JCYPQ35cDZ6utwQEjHC9HSQ3bzL/vDtkunuIWuG2zGT+sZsPL6korv6bWYu+9Rr2RsUg1N4smWqfk + HHLLL9dLccVIPVczyikjitBqRoMnMK5qTdmPX/Q2uTRUI0MyCq/5zotsSsoWHIsMFj5b9M2b8FwOx7rI + WnV8TcPM2JVhw7PL2xibXfHVBbP8sc9291blYZRgkk7bCOLtgcp7660I233/nQ0Ncif+I1CqkDtrOEho + M7s5ni5PHVzccnW4FNIZmJ35QXYx3Hltj3cdeTxgky554GSXjXjiqcyIxRxZfn7Ht7maXp0/NK2YOou5 + z+iT2uH87jduztP89ORbzMYUlfD+l7w9iq/mfPf0Vosq38ybLjnIG+c44ETTT7z8rv28b0r4HoNuWWo5 + y9776tNgtKrecS9+8rNZ+3InvvEFMA79MZPlhHQOC/iCcfcjYAx2I0DzqatFCbxVewrjv9kNjXi3S5x8 + OigMCkXpeeVgoeqCUkHYbUN/SuJHg2xSDPp5y4JnkgFzFgjB1kVPYT9bQwMdCMAMyjA2J+Sh1CSGNMpR + EEmwKlD+svA3kFXJqk4ulJcJ4YPCWiCPM0KUUAyXWKqt6HBmXmQe/8bkRGEtY3hdRFwY21hCyARwjXTJ + Y94kVMbwjA0gKlEiAsElwZfkrzF8bGHPqACd78VLcZ6y2PLuCEUshmFIjTxKTiCpyH8Fcj1NqUohgXjI + M2bSiHvs5Ai7dBfCnPJVtNsThMzjSkSqcpXqsxUEG3e6tU3xIVxsEV6KqZ26OBGTvGwmdrqTy44ZsIbR + hMxiesSha0BMjRrE3evwaCT9VfMYXULXKK/zoyQaE5ngsR0BmenHeIZTdI37xtqoNMx6Pq19NsTmeDRm + mHEOcaB+LON0etkGe97zTDhSimL+tlMV+pCQaNy0IDyDqR/7abERLBCKPwa5M4fm5Zxx+EQP8wmXODqT + a21U24QQGp1HhmRwAiWZZzA4IpyINDEMyqJK5Wmj5LTuNahcQ5KSFqtoiMUJNRXmttR5m59+cpcYLerF + 4iZQGLjlFSEUozRyqjkb1A6l0XJk/C4qU9gN66UTFQ9Q5ZKUOu4MQmb13jXFSVaAjvCSskwks/LFvpLa + 4TEUIiko/WoO1YF0Y3rZayp1+Tc/sbWt9RlsSZVqSnw2VXc2FSgcNutVt1G1qpQV7S8TmpcIGVZwdMUn + jmKzWjR282Sa0RBMTVu6mGr1srkYph8k6YhhAreKNXsGWtP+6kVuhfK2FwKnv7Jmy69qFrTaq8FEQme2 + yhx3qmrdmpSMKtt3QJdAiRiuYB+xwajeTLu1xZKXJvRdMiRjR9QlD0XREtuVWJeNrCRWfTHTXhe9d7ml + DZJzSQTaAXf2F0Ux3gzT+87eWouXB5IWgZ+7UisleEqlyKtbdQZWPQrnvw5TGmJnG9kLV8gI9N1szkRh + XqM2OGzKex6JQwugvrp3m8SyqhkKp5um8qzDKOZtK0Is4qAB6xDb5e6BpWtIHaqhxcMo6xdDul/DsEib + RaaWiYtoWpBJGcwa/gPagnFjudIlvwLDJZshq+PLhZmT9JuymYO8SWswWCxv/hXlnLX+1C9rcqXxRQgd + ilTNoQptz1f8Mw+bPM0nF9GSNWytbtwgxBzuOc1mcbSv+ADpSGf4xARW2xvDyxUZa1S/nrw0tkjI6axB + ebTInXUdOcZkQsTUp5wVjT49J0VA2/qbb9WSlPw0XDA1UodovqCLY022ZfSZ2MCTs7GFdYK6DRu8H+b1 + lRX5QF0f1kjShvarAzzoz2L7MOdR9nzoh+Y/Y+PZ2caQRoS9bYKGgL11vZd7xPS+xVrZhFwtDkdh40p3 + apmWc642qotNad5d1ciG5mO8lyI26npYPB/Ft6XRbe23PnTR1BP3j105QV4EuxPP6GQlpRnHUAtCFJ8t + 9Lfva+b+Lcb4YG5cLIkbjOm5SVXUDpe0k7dX4LoyDZiQOPUzW6DBnzOYvzH3zcxzzNAuQ3jpVa43A+eD + 5bn2+KehJjppJZ3b85ns4NkeJ2nSPO0Lbv3T/BZ0yBmVCjo9Ch+j6ruj8m6pT/l98H8nfKUEb/i9y2lT + iW884RHv+MgbnsyMjOjmqiW3xpJMz2JfS0R2/p3QlP3qUwus3PPsCahpvjwS9jzhQD+udSyJ9CHfKIhR + H1zVPzjVOJaHSYc+elIXW4ClhKGsWfv1d/f+cG6GvWZgU3az1/rozLieQTsP9d3fnvP1++8H5chYrUOU + 63GWM4zNN8pv6T75Goa798cjUuf+Byj4RYTxipgddpJjt7rsrsl5SXJTPMVOwNFuVid802cUx7ZG6gc2 + q/dEzPWAAohagPN6Kud0zkFeBlh/u/JXT+cJ45ZkWSdCyxVN3hdQe2IX8qdTBQhHG4he4sdzH7g37Oda + kFRwPnYP/gEP/TOAmKOBR6IKO9hf0DWD+zc4Nog+hqR86KFM6WRuTtOCLxOEAqdZ5Md22UeDvrYsiEEc + KmhTacJND7Vx8wclBziF/uYU5HIgnpVl7CZW/RNX9QGG1cMn/ESFLxJ9tHd2p3dlZKWGEuGAMHceY5MO + XqiFudeFYDFW/DOGP2h3SxSEPPFvvUUdcUd967Y4XOVsDDP+XsRxQ15hief2iHjUYZXRiAjIUaymfX0k + OJ+HX84TikllY/iSPUn3IHlohkzERJJlcq1GDjUWgQQHCnpwgQ3oejR1B6BxNyy3an9TijNWjDiHaf4n + cYHIEjzjiuTQOrGIdMlYWFzmZVGYHLhQiLWoVxTnWHy4iukoNE24eQuVetczYhxii2QojnZDjqyohBO3 + a9SYLsDYfmrmf2hyitAkOOoWh0ByhyECMGtFavmoItI2YWBnRbpojTjYcxahOzRSkKzAgZMVRLLxez7o + iLADkQLnOEG3jxCoYkNIdSMIgwtJHh25fdYlNgI4VnXIjdWAi1hCjoxzeXd2ZP8IkB3+2IoYeVLWR4jM + GHUVGBMseYtl6JPcp44xmH81WJTo1FWc9VGG6JF5kxYusYNduJM8qTkpZRqXkZKpqHRIto6VBYOzMlI0 + +ZWhgRr7FX/1GB49iSKEtZYpVJMXORzpM27KRJe+2HOoGFcqpyJ6+R18uRmEhXtTV12HiZbtR5hxmV7R + 6DvVMXxkqWUyiX3zNIqZJJkTeZX+5ZU89lxjSZAwR4lIY2HzeFerORyH81pWeDuC0TkosxH8YJlY15oS + WIQLR4k2UF53xYOcRl2pQx20x5u+lEJz8w99Vl6Vtphep5moxWLpMhvH84QeIpWRyYmTGZsXBpxGWGZj + l33hqWT+AumWFFOWXuOe7HmAZBOd0gmYKmZziyRfiLmRJVM/6Kd2mLid90iZa2cu+Wme51lUx+aSv4iF + c8eB9nlwW/CMnhGfxgSVJZZIW8Ux7kaUupJxEdpCaPiSp4FDL5gqntYqvnmOC9onxIWOr4iYKLdgbsiO + ynFoXxiHAMpBN3dFOsEWzYgkEmmhpImVYKmJ4PNxiWWUSRqk40l52mJ8QCF06sV/qoJLrZFZA9lTW0oi + Q4qgD2elNLogQIqm8tWf9pg2LREWbEqmVFRyg1aRa3qWKXqldzo6Ofl8RfFbGtpLGrmEVMRUcKegZqqK + DZqnUoqnhzg6xpkVjFNzmSmp/bT+nnOKlP+3qYp5iSuzpyo5Uxuqn4FpjI3Jo28ocg4GL6tVn8N3phz3 + pIpajY9aqFizo7aqp4AIfqSkOL+ldMpZnvZQpHBTo6gpp6PakqEKXvc3FD1IdCB1gwcKPmQRa6qlpDKG + VCvpbQn1ntTKlLHUNAW3cl8xn15Dpf/ZraKqrG+mbOJyrrEKnzaDcMkYjiVJkcw6gT9mX2kUXP6oWLJI + YXc4lsuYm5JKq0oiIneGa3FXD/sjpu5AnYgBXy0nmm6Kq5l6mfmqr81KRDpanLnKaKLhQ1Hqo/piYBXi + mHsoXtkaHcGZhe2JfJA6ncR4lwj7gh36mM5xHPiXczCrnrH+ClU0q6bM2DzfgI3T86r55qigKiAc27HJ + ylITCm4S+pVTZ7MnuLRBVabotLDntbV2WrRhEVE1a7M2FLZcW5peu66cmh5Nd7VF26lE23Y6e0zd1iNt + M3u3GrX/CbQhCFciKLc6y6buMRd+6StVo2AY5rLeQLg7pKxjy6dUC4I2qUJj+irRJ30K+7Q5N7WBC6XB + KLJtqJ3yM1+Y+6I8y3se6K0rC4UpK7qbqnpI5JkJS5VUo7qM27jKl7a190exO1tQA7G/a7tXG69/8o48 + wrZfq5K9W7ywFbE4O7cAy6uwpTLlRFu5O6P+eWl/a6KdGbvySLrbGqBiC7x5ormbG7L+zDuNx8uPsBu6 + 3Jp0AbeGdjZ0wpki91m3Wuqt7lunoGuyt1aID1puAZxO++u7vOW/W9Oo5juU3Nu9H9t2NLak6GepNma1 + yMivCTy599q1AMy67Kq2s3OTVWnB2Dm4lMuy8hq9O5uunMu/3CnBKCy9Snh/tHuEKms6sKQzzjtwH+y0 + EOy20BMkYUpT8cCqrFeer8DDSRmV2pux/joMPgyrVnq32mNwBuxGpHqqRpe8R8yQWAqo8CjFnjvCfEsR + 2LOswiiEwzpq0FvBGLsh+Lu+QmxRHAuUw0g3+wutCFzFmziQNYyvxDTGUfy9EYZgAmq5ckSQGee9ukJU + GVlqdTj+QFhKxypsx4gsXl1quuvjJeKrsQYEXNqmRKtDxQzcwBwct2X8aG5lHtZbJpKkqpy6W7ITEPGl + Bl3xwHDWwTJYpRnMyq52xoPZptMlUb0mWLNAJuVWnaV0seXXy/9KapUomK1LxEosv2smktVrzedrqiNC + k86bvuDAhql4yp5Kw48bfoYstUecl+KqjbZ5KM+qv18MuEF2zp+KtzaqRv42jVVouVP0CQsczIQ8zU3Q + KJAneQvN0A3t0MtMJgn9KXzHeJMCeI6n0HTCd52iKJlS0Rqt0R/90CNN0pKS0YSyKNFc0Mf6EKqlyDn6 + zPO6vXQb07FCwQcEz8PMy7Uas63+vK9aDM6v+dNckAL6SCDCildBJMiaenyMqtIxPNRvy21cTILCm3DM + XI7gaLpx2q/rszCusx6/PLqdu0x4RqGwOcHvphEh5JQIN4BIHUqLCNYSu8ro3JZBq8mqNta9mtZyqD0R + U6LDG9coRqjfCjTKocpNC9V8FXRiVYlWfU5cTRnh5sm1y0ayTJ2Qi9ipFcRvmdceq9itJtDZ3MUtFCXk + CnqjTIXu6M39SEoNomm4WdbJPK3VuJAjd5u/KAbHRJZZvdZo3YHN3NX2DJP0/Lzg+sOzncx7ncZwXdcg + TI3h4tj0NLS+XdtIdl05DcxWadx/fNaH/NkivLLVuaiR62v+0o3F80ZWJdKVTbGrfTpHZnS71fxY+Eza + aUPKFnlyEhojg2hqDqXBOexULDPOLJyV4d3Y9+2EMa20xXeJR53Ig8RnNW3Cw70TTKx/4ilVtfLKcJyQ + Ctjalv2Ak601YLuI/wTUAh4Yw6hTiNJsc6jcvza900reR1jYGb5XvMHJToWSLN7VjbywWv25233gjJ17 + Cp6UjOnOXGh57p0BEZTi8fud0/KNLoQ2gXTaLapvuyzbPp16SC6WII6VT9XG3w0y5TPL6CWSF9hxVl47 + +73GT/qUoa0jBq7hKoV5VB3iu8jbtXRkHUVPUV7KdaNObe7IDX6K/d1F4jzfd1511eD+FA17oqj9ij2h + PmW+paAZF3C9x/83iVJD0Bs7ojk4q3e8Jcg81Ti9X+VDRo9dOQpn4Vj1yAGum0tNrOXtIGRHpx7ObWlX + IBHTrzEG6yfV3KpeuCzoa6f84shr6qeu33oN5qgA7K3OZo694+I9q+4j1TyNzWLtTVvCZ/sx7Rj3Zkgq + 06hra0ruujD+1GTs7dkre8Qo7mLmyQ3+3jZ91bbIVOvsw8uuuw6cuAH73P8MWz/UmBRexyfLcQ2277F+ + H9Qr6Ctd3xILymxZ8JcOGlsrz2/61we87saK6ujh5QLP3F417fXeu94bcU/+5hMV6mJ7vPgx657dfTdN + 5xJ28nb+uO6DGOctDMPKwsSF3ea3juPs3HDdXnQO+tXDDu5kkoDmyOtsbObn3n+bHn/RBdxzLaRd3uyE + 3McJT00q0+HcKebja2iJIVcjM/PjlkN8VHePviFr/qNcPvWs0TwJztfffHL0OE1k+/Jv7PP0jTcXdcxm + KX6J5vHtvsH8fgkf37pt7xipvtMX7s5QGIuu3nKS79UFpFQrrPeCb97URkyEzcx68fc2HfXors9gKopb + n+tQS2t2dQhIuvZ23bKSG+lSViKxzZnsDlRplr5kHfd6A+CMzE/dWOuO681Mr+IVd9yLGeqJgJChb+vB + H8Ji7NaZrscZaOtw6+DOP9NenOz+5ib9dKvD70792z6pDavHdZ9JG3/vlDzg4Q/4AFv7/1j+KXzP6pr0 + z+rcBUoA8DF1UzJOgIxSWZXUmDN9u8wAvWlxwsUcrzV9YcSl0IyM8bDO+d7/UzvgkFgyfWaVDbIIEA6Z + gJvt+GlKI8kOUss6QV2bq+/JKHvHvXOa3eat3XEOF2INMafk67IrE7P6ckjCtupa8iK+gOwAZeQw4BDW + EB9pKi8xzTI3cSjnJjwdNe/u7ECNHgI7q0BCs6YYXxvA/hhV3QIiDyY5IXt/5XSBf7mkwo6LjVnpdpUf + /PDwVJRbtVwFX6NUmEumJWlrry91HXiHFYTP1V/S13vpkqn+Ew/hnQ1Bi+Hr6WM/07gTGen3TMQ3UYL+ + eMlzi4gAVeUsuDMokWKMdhXV7bOCj2MLakn0bVwWDuO2T30WrhDCUOCKar8cznFigeW4kjc5XMS5rppI + lyGTAYxIZWdBmjKNzjyIkJI4NsJQmJOos+g5qlUpAu2yIx6GhAOxdhGXEIsGOGRh4DMGM2czDxWvYu0V + Vy5GcXRtoa37UVshKrmwbKspgg9bXwYmqXI6hO5em44hl+qb4obeyNAGN51p+YfPuYFHKX079fLNxqXt + SuJsMgvqfyCFEjm0lhM5t6O9gnZz2nUa3r15fnCwmiAa4E20OFQ7xjOphm0RK6H4+/j+8+rAxYytch15 + npiNXneyflg0bnXUuetJ71o5cXuLL8P/u6E92O5brkCdyFrONfTrcfjPncEwGm6GlNzDrohotmPOlQRh + sG0/b9YREEB2uJOvQMGOudC8hrqC8AURi5Dwtg+HsdDDDlRc8ZEyYCGxN/veWCtGB8UikEXoTuTPKhcx + aRHI3UoBRkcNU0GyAiH9QZExHqNTQsenhqyEySrHuDKtIwDRUMmAprTEqzB9IDM0GlQa0w/DsCSyzaK0 + 3FKrEc0MrM5Z1KQtLWxK3HFCCvUsro04sST0TfUyyu6erropM6DxpJTRuD0hFfNPQXXLxNAhNz00h04j + nW3NybL+MZPLPvHjQdIvFVmy1UZHSDU/T6mktSRQpRvoJ3r4KpOVJyu5E1FLL8U00KRQtbUJIVm1FddC + lpmvHlVdqtRDE03QBRmahEVH2WW/hSsrffyJbcRUgA1r2NCyRYqyZokNd115UxTvtWaXoJYQIJ69JE3y + 2s0TWVlmpfeHfg32dkBJfVzF2E+rNDEwba15C16FE64x43oT7fbYLW3gl1M/Y41SunMzFXljiFdmc5iL + u+wBpHSzKtjVg7Sls+RkW46w59oGBMfRgVmuCOYeM11pgpwlm1TlnzGEOshEZcPXyQBLqoNnG55Yusmv + U55X6pvHfhEXxTxmlLKrLcLp6LP+ACNIGIYqA7dsku92szu1l1qEVOeIxvqmt6XsGoK5127N2rwxZrzW + BaNoyuOyPga8uDARtvxgr75zZG66H1bD8XhHtxscWAAFQx57Cfsyc1lVzrEgxGEPW/TSG8d9a30lJ0r1 + zqwRtW0ga0hu55JpH7Pa3XF/PWPq/lYIGr+h0DyIrG0m3YvkpQy8aN1NBn9xOW8JyW9hy9fQecGOv51s + EQSIX/7555eA/vuVu99+/Pnv3///ARhAAQ6QgAU04AERmEAFLpCBDXRgfQBolvjlIhcP3N8CL/i/Cj6Q + gweU4AY7yL+IfE55qXOf+NZnsMZED13zSFudWKK+1BiCZmf+gl/tfEewGjZPfKZzmHb6Q6PcWA9KEmGh + zzAVicPhcE05fBr4UkivFWaNYTUhUBSTZLvh9U2J4WObrh4UtR5i8VsrnBzkjoQyMRqtfd+T26NuOET2 + NWxzY+zh+I7iNKNlRo2JswvDvOc1pHTRid7TGArvuEPlCTE4fiTiks6IRhgGIh2CHIohK3dC3ZFRWZ9b + FCOplg1MBvJVe8SXK1AQiAvAjW1wVKTjOEkrT9LQMYo6UGZqEst5qGp1liifF/sWzFFucZOJrGOk7BTJ + R9jnSAzp3OCaecRUahF5lwSTu/DIOF2+SYkjQQ1ZpsSSbQozVRTU4jPzBKOTrZN5sDT+piaRBcqd3Mhh + eLtOYShBFUuSs43DJCYP3+nGeCpzE4MgkzOLEk6PnBM++9RjE/PYTm0GVKDGIign5BlRQY0TPHvKF5qs + 6FDFYDObZeNoxOTYMrEUq2Yx4JVelONSL4YxpSUd20lH1r2eIXQ9kdOerFZCUn8isZgU/WcLd3oLnFJL + KcbjU3mo2U9+im2iRl0jRH/mnwuZRTN4CZhUsTpUogLUqjpoZcKIs1TXneIVp/nqWNgp0bstdUUwumiG + 7AnNH2bKa8sDXPF+aU0fjo6u1zJhUj0RJ/StIqbGC9O/ourK0B2zdIW9UNccZxktwQxz5JGswFJJt5Vm + CYplNev+ZKEGU7lM6SxQfepmYijYdh6trqblESDphZbMLYa13cCsTN0S27My0bVVtW2Sjpg3Rjjvrlyp + 1m9BFiXhHpZOSbDsho47qri90wrMBd1Rc6ekNMWwYjLLZ1GPG4vrrnaV50AddT1byqFFxymeOOh5ycrd + l8j3jmbp2FTHakNffaO+srXpz9a7x1LRKMFVceg7aJNRgPF3vk19ZGSzmNe5im+/16Noe/sIOdBcTGLV + I/CFccnTyvb3ilZdYkZGfKczgDiswG3GQkgZ3SIaF3dKarCDzbigQDVrxi8GsOVCa9G4DjZvP/5vRVkM + 1s/u7SfwzJ1s8DRSAx+4ZU7GaEf+odzDVtSUDRIWZiSYlWWhHtnKJlUuLakqZnQOF8vCKjGGNWegNUv5 + iU1+M553nMiPFuler0QactSclNE+zp1jS+5pjcq3gpIYN8Vz0ERUuWjSrtjRmQSvoB+NiTph6x+JXvKU + ubwxL/uLyYnkCnfQHESDXKO8jPZzp+VaWlRH5s6lnjXYdt3nDeM61Y32NK/j2wYXTHPPzSVs2Sa3atPo + kD1tuasrma1T1Ar7po6OtlGde+3H/LTM/wrstil766xmz5hKOw6axb2UJJMZ0IdUt0rPKG3s1hgyvcaF + qTX60Fx3ObWbfueMexPrTNwg29oOdrrdvG5237HIqPF3HJb+jecDxUHfU9tpvSHd7qHQdtwCDtZ4HQly + wd17Y1prNSK7EW+DmzxYJyb0sQ3ds46XmuQ7r1Co+h3ok6umuiQnt87xzedPoxcVjlE4MYiuY44bO2M0 + 7JbPf+5wuVx86A8HBtaDge9QaxjmW4ZTsr+suFvxGK2SXnp+6bxvmi+8ymtnedvN/D6KC6wuT3dv1OXe + bbHjFk8iP3VV/P6ybBl94M9DbOPvLlZ3cL2ggBdX5A1GW7B/fc87SfzfdyHzlUf848UWfMCx8nnQI0b0 + b1d1aq9+cL6nHu2rd0LrAwy1zSM651SH1dZrv/rh2J30pec23OE77eArPvTKP73xIc7+9LiTRu8t3Qzx + n78ymO1+E9yjffWNaHnqF7/qAs898pMf+CuzkfW493D20er15fs+/eov/ODEP/lhFzzOz6Y3TlQvNVgP + +3TP2/qP7ejo3w5QrZaG8XpPhe6GTLhPU2YP8aSKrhaPABEM2trM/8zO+ebujwbQ/giO2EZP137v+45O + AHHOZTbQBF1v/xLQ8+ZPBG8vhHAwB3VwB3mwB32wgEDoB4VwCH8wCImQByFjzDRwZSZQyOwN/dQO+MBP + XZTuM+BP+zoQ81rw8lZwnhpwCV9Palyn7OqPBA+tLk6FC19QDMNMC1XuR6YQDZdDDUtQDHWkCcMO9Wgw + DvfiCHT+CQ+jDwtjEOMcsOSQKuUokA9rKVZiCRAPMP7OD0e4oRDzcPrYbFAUsZZA4Q8L0AAjEY2ghRJn + Dt3ocP2+iRHBEAJhr8WoR5R0Ju+AxhKzrguT8BQasRNhbxAXCRYFAgBT8OwyMT5c7haRzg518Rf3hrim + rpAskBZLg5Y4yRHbMPOOMcMI0S8ScXr2Ag6acBjNUF6kkZc+UQ+VLRR4cV5E0dZM8Z7EgBiZkA3HcQbL + ESXSsZTqcRTXEa++Sv/qsOUk5SLuEb7gzEoOUQqdETsYrhSl6PGIadCi0F/Aaex8KCAnjqUAJCGisR8h + 0aXygVyMpIko8kRCUq7CcVIy8h3+tY9AjCyh4GggK5HwXDAftyrjpgMlW64FmYABnaFLRA+w3MapDjI9 + poCMSvL9VMrhMBCcKIcgzc+9tiIYPWQGiNImB48PhlIOo+UNi2Yk5YTCgAkca9LxvE1trksjzAbMxsU7 + oPJQplIs9y4ydiUd5w2arnIt2TIsE6Yo1TEsrBImoYMrOVIq7dJT2lIV7UgTO0oU9Syh6jIEDfM83JIM + 2QstLqrh6BKyvDIMZ3EhJVNBqAQwA3MfZTIy4fAxofAUfaMKO+bB7u8KY7KTDvOePpMvSYAbPRAyORMF + j4OgFpMxQcA2OQ03c/M042M2HawdB1MzSzNc9PLlnjGS2kPmXeZwNF0zFmGM83RzN0MMuUBzrzTrLYXT + 9qyTOIXRHPXiDwqrJ54SPJcTNsnTNUhlMgSTL/ntK6XvNQnzPtlxJ22EJFpznvLvDLMTP9POCoMTSGKB + bzCwPouLPbGzjN4TQfGLMRm0Oc+yPWUpQhE0KKGO2qhTP8czQw90Q6+KirIAOE0rhSzUPquzpzJNQMcl + AlDUttZnRVl0DYfkQX5ztVhgDWw0Gx9URBFwRdDmRmN0Jf+TRsMzP+lPQvNomwyKxjLTqmoUQoeUSClz + R6mIGWY0u2DUELmpSaNSLbhBlzzSR1GjAAAAIfkEDRQAAAAh+QQNFAAAACwAAAAAWAJ0AYH///9WtOnw + 5EIAAAAC/oSPqcudAWNwtDZhs968H+yF4kh2gkRC1JSxjdqWDCjXtkGb985zEty7BIfBHPGI1JyAooiD + +XItoBXpzZjM4kRYrdfHoia73/KCbE7vxCG2wW1RwRnWGlq9u1P0eLN8XtQnuDVYWAKo4fTS8tOICPAX + aMjD51A5OfT3eIWpdtkJCvFZVfcQN1GquOJUagfKyfX6harqNSorc4vbB6M7BeVIukHFWku5W+JLiEzU + aKbMzAEd7eUyfYAC6Sw8Rafq2GpzzQw9Tv20mXdOZL6eqXJNC67YavwWfO8sl9UuO93v7kM6cQElFQxl + r8O8B3W+ySvGxE04dQcz/KuYbKAr/owEOYI60SaMPG8KpIDTVishtjEeK1xsqXAiO5jJaE5a4oHNRJHz + skH6eY/bEYCvXtq0APLZ0RFEl4bAIHONtqnbEPx4E4ef0wRGtypIWqZpRbFeN0CNSgrOVZS0sPn0WYgs + pq5lAeBUWldJ3jQgNDKUyMrqWpHI5M5lWnfC3bB79Tb+QgPtCE3AitXwq6PuNcOC4Ek+9thlaMgr3z2M + OHIdZ0N0aXr2NHpPbC2RMQtdOxXj6riIj0ZYTHq2EOFHKid5+1mh1r2tOYoCypj4GenFU9tOFNHjbt69 + Wz5PTpE6gu3Ce1Y32ZK8oM3eRV3vLv5D/CG14fLYBt7f4+YB/nFHn28XgPT9lV9M9vVQoAfqrQdfQf4F + J+CCs2HxHiMqFSQhHuxVdCBtAsr3IWgMZVFhJxnC1uA6CcISYYg95HDVik9AR6N2oW0YkDIlnliYiyKi + 1kyHmbC0X4rRQFMhjz36eAV+JaLz5E03kqDkUwEIgGWWWm6ZZVVPuVjlfm2xJWMVZZ3IZZpqrslmm26m + qVp+rLxJZ5123olnnnruyWeffv4JqASAcvnboIYeiuibKMZCzRLJAVFmmPoxyaJgUZak2Wg4FnZhSZAa + OZ+kzHla5ip5ieohqCZ26qlbqlKH6qmkUmqRplSSw6oprjIaYqyZ/kUrUra+GleuumLF/muvwXbkVqnx + +UoksetphF6yH0LrlRHGpuDskkVKy8tA2X3JJLZbwbhtSOkeZO5MyEqDC3Ax7Kogpe0u1ZeQNqw7Vmww + ZoaQnIJZ2+KyG6EUBGGN3TsguM/waxzAYBq80aVRyGJxgFPe2gm/udFrlr0U55JPtyRtjDK5N6ES04jA + Ducjw0t5nFMoA1e6cE0rU9uQSRfKzODIh2RsqcnNhPetw1qwXDOwXnIlstBN6HsZ0Uf6y3GxNTJCajbh + AK2h1FNbDRTNfoiYNMFqMK3cLzzBHLPYU4vlM3Fgo13vICAV2CFhX9N6N0Z/GGY2TIHjnHe4fh2oydbL + lCu3gRon/lLaDWSHPeyMlkzr+ClieF3K4XxFbuAoRv+C74SUT6eh2Srtw1bZZFhReL+kD/NbfGSLfrDa + 1dAM+0rBNxsYmcGcfvXtnufu8mO7C7dpWGyDUVkYe8SocOVpKx+FE+hSLTTvJDc9eRngd//up5tjh7y3 + 3HsjRW0gowO46uSjOT31zcvkS/u7iB+NB+XLKiu4GYfchbWs2SJ/uNvHuOC2upy9r2t16MuxPla7BGrQ + d+wYHvUeNJH++W9SE2we1IDkthHi4XkRtJECx2C9sdnDDSJMWQk/9pUaqRB6PHwhEpKyQzaI8HwuvGGn + 5LVD+21QZTAMynmgNjbmXG40+nIP/qZuCMDxTYY2MTwOFJuwFyIGC3xjIuANy2fDxA0FBknUHhrbZkab + yMtHc9gEWN6FxR768EXZQ0L8ZOCCDBZlih5JSOOUQLszPi5zsVAhVPDoR2tUTZCvgIiLHIIPRAayjUpc + IhNfVLbfgahqW8kkgE7zoJD5TZFv3J4ajxGJaixSXZ/j5CFmdRIB5fJWYoxcFnW2R1d0kUQsMAdgCAnI + kSwEmSo65PjYyMpfBhNenUNMGUk0y5DAz5bc6gmkuLm0z5inmpmBpiKlOU3HnM6C4OzFvrYJzpx4k3bx + jKQ54Xk5dJ5Dn5/80qXOQs77SJKUbsMYRGpBoXomzJtFY+MO/vmZPD0y6knstCUQiJIKZsqzVlcUnDGw + 58FosfKLnZxoxQJquT+m1FIoXRtHW+XRbvykl3ibH/cg+kpyJSkoFiXpZfLhxklIZnYKHdrTrEdJ3xX1 + VxI1KceGGaTxLDSRlUQLGjSaUqql0hZ0iKZ0zDHA3lxzqio9zlLpJ6xtqgg7OPxPR+mYU0aqTEYDnKJ9 + yHPWi720oOcQJ01r6sQ8fvWZYg2qVJignrzOyjFqRcZf/4o4oeUHpxKbaIIiY9h9hW5phnBmWqGE1Y0u + 72mpitxkYUXYvG3yaDnk7CC2Kpu0KFavaYGpW+UGHspWVqenTZ8KNxvO167oEpB1rVBM/shVXc02dYNN + bcjSF9XWErMzdLXQcpF7Mtvetq1nBNsIwQrJtFYrYawL7gqBWVubZQV1i4KuV5v71ORgNrPdBC4xl/qe + TxTXi+vV7nb3W57nwrewjF3tGkIoyrWVSr9jLQQiMrrU+uBWwHbTImOhkzEEJ9gPztJFaFuIPqD2IV+g + e2+FLfxZDCNofeY1X7f6V1W0kBYvPkuqslCLXtHEEXk0NB+HI2smg4IYcxmlmB3F045PaIu+BtKwLGex + TvJVMkfcbancdBvX3UIwkASN7YbNirRh4OLDJKuHZCnc1H7O4ILdYqBPsXlfwJ6CtmkgMy/NbGQ0l5SD + Uo2jlYPs/uUnPxGUUl6sgt0xx8COUc97znKfdywjMWYoifkULfyoq5pqXleOz+pdeUtTuJCu+WzVQaCY + ZepmHwOSHxIZKZa1DOtZOpRvAzkRpU19akw5ENOrXiOdaZWOV1Mz14+WrvZo7ejikNWR8qze23jtg1nc + 8YKLZrQn1SxrP88r1n5EkI0haF2e0NPBdg43ew2W21CheJQGBA9meHS6VBP6g7HE7grdzdmPltuVjY5r + Fxwa7WR3e5LcHCJs/wxnQIfz3yN9c793++97DnmvLk5mlRvWhotrvM5jZnjD2T3gBkUcqqu4LC96DaF3 + dGzT2KDQx4sd8mQRVdGmwragp4YX/mWvHCFvlWy6O63FNYkCS1dyU6EShXRC+anoSW/6m5judDxBPep9 + EhTVr471oWN961zvE8h3VcedhisFoyM2WzsW4xqz3LHcTqPKrhpeewsczFvMeXTRvnLQfXtiBzFakr8O + arSum9RgtLvKd26i2CH8dsIeNsfuQHJtp9O4lk45a/F+GByaEq5t5/eXIF9lABv7vHXf7iJwjnkp6ZAe + Dlz7vefueR1AfoYWE1WZFLqbvXe5s8o83ubF1njHI0YPM5z32LVp+K5yS/BfJjeZiLcQ3Q1X3SQjfo0N + cvzKl5b5i0cYBdvJckexXh+i9830gV6T2RsY+6QvvOWzG8X9/lX8MAC3DGVOqTSmDv5mU7T9isjMB4Jk + SEw2JJkHcNB3cOFDfZ7WKoTkf+73fv7VNsTAZaqmehjWMwk4MsF3YZP3fOwjX50FgcnFfRMIDA3VRvs2 + armRGiXjehiygDl2bmIWbCKofdsHf832UQTkWd6WeMJzGi74ewbDgR3IZ3GnOfyCKshWdiHWfS5IbS+z + UJiASTwlbpr3gv8DIH9XQDTYW84XcE14afVFVU4oUFToEDS3S0+IZFvIgHIHh0Z4cmGYfFJYM/4RFeWX + g8IFJH2oPirILm4YSZ4jgwO3hyVIgoe4OniYFRm2duHQN4qXhfHiWJyUezJRPPn3Tqe3/m1iaApP8hYx + 4IhC9RyLAEL0AHyCaIgEQnOwJxWa04l1KHlgNF5zplmbxjzK50SU0WDBUoQUV4AsZUBHuGKw2F+eGCTr + J4qlYjGRZyGtVDmsVzZ6+HBTxn7B2IsddnOceIyyiIRNVoENFGmc5G7w0G6bFBiDkYrop3NCoo0tBokT + l4hxKDkbB09cI2L8BYJLJoRvMxiTWBSqOGjcSIyv2IXdaHqtSEsE2D1adVSk6H0pBE2N44z1E4N3p4jC + 52CyhTkDV2/aVA8zdmCT4T0XI43oqHujYhPn91r7l3ASGIXeKFAfuVFwoYGWw5CGRlxAtUwKeJHtp4kt + posdaU/f/nh2GHSTKLeQ2eQ0McJTbHhi7Ph6hShcsJiSKZaMXVQh9IRVCWIMAQh9gZWUYxaBacZxLpl9 + MDWWYTaF9beVrLgL9uBy/HdUV7lSrLGSQUleaAmUi0WTIqVyKPkePcMMB1IJ99cNdvlTF+gdelmMVNmS + 32cZZWlTyIcwzNgshdkhDJYSYwKImSaQdfZiQiZ56jOPGJmTXfiZcxaP+Ng1lRk3UKlernh5kAlt4fVN + lHkfQ7mUs0hdF1KOcKmQsdkfxkd4fDmHQTVuOHiQhQab7CNTpDgHnDlrhJlnsmk4yWmbtXmQEfOcxql8 + 41hkYWRVLcQyeEaEDgKes8AszQda/jNolHL2ifUVnWVhLIeJGjuxgc6ZHn3pgVUJn9ipkRlpbjE5M0NV + cgZKjwUjlezZnsUJk9dIoISIQomBoCZ5njLWTrbToEK5nWxXn0PxY99ZjfOkcIMYiM7xhi+JnHE5oSv6 + otaVj16xLXAXhKGXmrvXV9C4mif6n48JowHEmxhHiJM0nK5Ro2rlnZkpoEcJg0NaVT0nh6sYpFO4mFIq + oWY4NDwIkL2pkETVmk1JeU96eFD2hdvYoiN5pQrKljWno9SIhkR0VSGpa4q5oO7jg41ynFWap2uaoz96 + hobUpQ1kj9kEWw1BorpEOIhmgQ9qVkaDqMtxNq8zqLZ4pPJR/j0EiSyVipehqY+OSndrilVVImoR2XfL + uTnUckWc2qkdqnNAVmqaZaqAeWhQ2lcQxmIoAAj1d2UwgarA+KqwejSQCoBbekuauqPft4I0pausypib + 6KCOOYJ8umLOuoJeeoNsalCQuJl/amhSQzdwZjKJtZ72ZK2j1zS2savNJBlwMV8j2KPkwKAo2qbnEa8F + 2Z1r+Gu2mnfl+GzHGoxOYTpBNGJjCqpUqhvGqmuW2pwYU6gseIUvp2M/GbDC2pb9CbAv+mCTSET/WIoS + G2ht+KkWi5opunzGiKwhCkeBSqjNshrnmpBrRa1KSbLeZqe0inpjmLJY+pvqgq536YvO/jGuLHqwpQaz + MEd2DXunAspj4GhffWqRFLubWRqqHKqjwqixtxdv9MZiUBs1njq15cpaR4u0GRugiTqYTXqpOnutZ7gs + vzil0Cq2gYmxB8atGmtUfgqdXXuyiQq2DJud3FmvynavNqew3+qbfqu0lhlu/AO04DqvQCqfw0q2TCm3 + MKkWrmmlTRayfQu5f6u3g5uVRbSX+xpQGlqye8u3INu2TvEZctF/k1q50JhxdqiyrRZ3gDGMJbeVUXEv + Fclp9vm6FTu5w1q3ecuz85O53FWqCwqnJNoPhQuaUkuzxWsax2tUZci2s8qkh6uyl/uzjAsl1xK54Gu9 + 5DW7tJuz/vGZu2HquYiLk44TvaibvjXrdmY7t6lLpofVgxQ0U7VUtWr6tEk7vtJbsOWLv/mbjKSLk1WI + oQeorS27tC2zutPqv+RroXFbuz9UqxwhIZnbmdpLdrF0OXBgTHlowNxhn9YmvkTaq8FqLE7yryTZj0H0 + N/Q5I33kqnmpwSsroqTDGfbxKPkpgBR4s2IgP1yrbTcKukjaw3T4w77UbQ/ENeImenUUwJPTSyE1LhJH + vb7KwhSMs/tptLUoW0wjktiFX8poF3q3hl4skYVav0/Mr4iHlaXHwf5JZUWZuBI5TmLMYQLUKcsUdmkc + c7E4ZiGYvHV8voK7x/S6tgTSrOpa/lR5SMA1t3fpC7fA6sNR7GOzux3EoIPxO38NOU8hTDlrGXu+wclQ + 7MlmysBQBoK7qLV7+pqNK44zusMreaHauiVT13XBLMzDHCiFcnRtAnVDZ3V6onVZh8zN3CXR/CfL3CVM + 5wjEjM3Z7HTAfCfcrCURLLoju7/Ttbu8C4XZirC2ixWUtFWCmZ/ZgsF4PMZkHE7W6ZoZVE8gnELlPFo6 + cc5IKbDN9MqdnMcj6sGN2se21bvgN76mDDyGvKm0Z8TOCreAEA8xSzGTJsrPmFX3xa1XQsT+qINVBNEq + pnh6WkiA+2n8WdAvzJ6RCoJtZlenW0wQu6rOkgrEMy+YVKmb/uy4l8ycPvnSv+qktFTClkwIXFzSfMXU + 21JLnOrTuqy+iDzP6TmpEdqw6SLCj8uJJDZuqvzPZwxoYWfHztOK8VBPm0y1owvOHZWUnbm5BwmmVoyA + oPXRWN1W+NC/8vi+eeFkG6ybVu1i9nx2S43X6yvXwukqE6mv5NTOiPh7HtM+av2N02BnlN3IZcq+krnZ + 31u92ZVQaOU1D3vLcnc+AJyVN9zEx3Wan9vBnV2nzbu4yNucEWfBycRQcaylBNeLmF3BRR3UQv3aPNPY + CHm19Tlz6HyLQzjEz2tvjkJFrWt2rS3cwz3EwsjTpuu9/kViCe1ajD3DkdyQrDY8c5yY/mUF2IH9tnzo + 3aUZCaONPuGo3EEFUNdntxDNiLNaIshUH72of90YYYxHbmYMBsaTiX6sbxqK1OMh37D9rXB90kWzP2zc + TQjklCmswLMtqS59m7L5kadtmueM2kp7F4SNj9WZjXdLLxDc0W3duc3q2QdNhwEOxLy3yIg4wjwt0UEm + SQ2mqjqNSml4bs5mr0Pb1C4+vfPd0uuYyAS93aDGlQpe0wwkjZb6Td/Ak2MIiHA8oCJm3uCGO5IL5vTc + 5GF+lsZzao+U17SGHKkGnOusguU3e/dL1dSd0ZpZ4KJ55WF+RyEsLg4O56sqhHrOkiH25eFb58F950LK + 14/a3roy/m2rF1pPXTeKE1cngeEzy8jyLN1kXomaC6FIFJa2rIZ55TEjl9/Mddt93emLTg2PQLZTTpdg + beY3rqyBPLyolhLnkueA3uhlW92Fydp6HGRqboWGrabNhusqvamkLeMaroK+XbTbiuOkXuwZiJjuQOtb + ZMkJpasShNgYvd79oeIOUkxFtu1xOqYIdoA7cehofcB8HLxlbtpHaw3oPoSJrnCUTGl1w0CLQeGKm+RK + /utjHrZHITM6cZIxFYn/SPD0o2+1Tla0fMoRrs7P3sLqHbXmnu+kbLOyrXkKFuWqu8Al4xa2naB9h+ig + HrqtLtinmqFCru/MZOwFP1WKPeym/sHE2vJgaqvC4a7xX8vLHa8fAnPmYW3csVoyEiaKKT3VzG7nHo/w + M2PK8qpYXvlYBl3X0ZbpBDkO0S7ONAFR/h2HNysb9v5Y+bzyrIm96S2TLd/2HLIJ+mnxGy6a2g2ED4/b + VADvZB9RNEyUrl1IN2miKPjG+dXh3l1cR3xxX0/0WvjZrsyQ0p6m5q7kV77wjaRRXI61M2nDv60/Zr/W + 0y31K630ce+r/lMVFapazLSxZOPcdfz1F2+Nliv5US/mCUuj6X62aNPgrO7Qy1Z4ZO3yoD6ZhdkO+0b5 + lS+0ghn6vG/6e/+XWHv8sireJOGQxd/rUh2Qx63oL+/Xvjf3/pM87T4bw5l68FuN/R3fCgBhk7v+gxbX + Xkw+H+r6sD0G9RfM+eif7CW2PKVNAHDQFGT94UNzzaBu1Jt33DwvC8kSLNFUXVnobOFYlqwrqcajzihs + 7xmWiuNXzGEANV0EOEPqdhrj5kZ8vGJR39HpxLa4Xc9XXDbHyGf1GmocCZNJnjtRn9tt9B4eTgo7f4j+ + 5JSoIKoMsAb9mgiXcNg6BBZLECNdLjM1HdI2PcWKCG2gloS0cOgOUPssP1UoSQ1pOK1gCn0eXaVgn6R0 + FTp/hVWCh41f80K39CiUZQV5jyU6Wg8PR76iOfpmpYG7tM+Kvclpy8+zUiNeTrcRudGp/qmiG0WL4VNu + 7M7HK4f740kDGJAgk2gDaVTBV3DXlEpc6oAYVA8FHkfkEFKbGI4Yw4IZPYY0eOshKpErFroz2IBkGTjV + frH098wVyJOXbN4UiWgSTIOQdHqq5vDMHDkYXRriaCIo0qZP501g6VMQUKia/uxZ+tBUnJllcs6LedVY + WLIFFfJKexZrmElbIlEMsXWMGboyzLKFkVcvOovukvXVaCtQz5ZrRomIxPeaGkqMBTMVfLec4W6rIisG + ZWotG7lV2UCepkt05rp9KTuFdoSq6SHi2h113FpT6dc1XWeyndsTGYifeYsyM1U23KLAgc/YrYp08NDO + gwKkHXdr/uo2w49Rnb5XRhjrLJZDTyT+ZngWb5IlZ9KduZh+2z2vAUnvzSbz0O+TB0uOGfxcYP7Day6j + UALjOw3uqw+0/fRzr8GQ8qtIK1EOayyLXrxgRL1dDFQjQVx0e7CLCEVEwxslLOFjI/98aS9DP7q7i0XJ + igJxvRdLNDHHgEgc8LC0mlHROiBHdOVABnVcsDgluduxyaScbKHHfID8TQ/CblMuym8EtCYWaIrcsiMx + VTuRqIaceYXJJ5s6kgEtvQQsTDJppLOsfBDbUCWvUEpxzgePgCyN3xLC0c7TDv2nnJSoTGdN8MQszTeI + pplxnURDmBLTS6XRkxEsH11B04/+/rRRlgNHFSzVTRdY9UZAPH21li49chMTQ7MciU82Wb21109clZUw + S2ctlleCbL1C2EyX7YZYc371NdraOnUz1p/iTJKhxLAbTJJmF/wuWLbGxTRBtWyN7atQx9wp2fE0Q/BN + cG0Ud1pO78XJpUBomkFdGC3UNqRnOZBukQY6gUXBY/MtN9HdCvGJ4PXyOK9Fgh3GU5wBd2113mwDnhje + fLkk+TlAhDMVQ1hTVpNijG8SGd+OC711UEpysNfkkXfeOJ2UWrl2T/Z0pSxjgXLt94SEo1pZ1J4/hhpJ + A5FrQmhs/Z0L0lrf9ZhWpjlUuV2Tj6aTrw3V+RllESwtW06a/ml9UoC56a47gLrx7gnvu/Pu2++/AQ9c + 8MEJL9zwwxFPXPHFGW/c8cf/tkBwqea+GwHIK+f7cc0nx9xzzynn/HPIS77M9CXHJtntSM9jVMmKwfku + nLYHjkNmZeMGu+YvtyZbap+R0fN2ja52UZ4UVo+q+A0GRQEL3ZlcvnTVf5+6IrRcbxFg590NMO6kC8Z9 + NDBNohda36svlSvsq7se+ZN4sB7kSwNtth6Zkxcp/x0z0qfrfTkSwKX8zy7cYlm/ZuY1Y6FObKm71/5y + 1L9/+QU+LFrKW9w1PO85cHrGg5vTnoa+9MFJJWfCHmYWeLxmQfAnR8pepv7gm/HNL4TU/hshCdGkQSOh + h1AS4h78GIinCiFvENk4nVWk1DMWPugeLyHgJYDWp5LELDUqMlERX+fBBnLwV0tsUDAUEsSgwENG2vAi + 1pChg7ekBoPyAuEH4fg+Ed4wiWh8YfdSuL1vAeoo+qhj+N44EVxN64ziAeMRrzIhADFLJyJrhhZNwIsT + ZAWBvXsgHRkmtifq4o7b0B7P8Ng6R2BsOpNEYx652KtCOgeMm4yMIDs4MMr47w6iOsgb4XikVVYGk5ZE + 5Ka2s8vYXSSOe2QkLGnoy2gJMzcJ02FwNsTMA5qyhsfMCjIFtsxeVhOJ9yqliCjQk0qKjwTEoZebpKmo + bcqRXb1K/k46N0jE+LUTlMcM2wyzqcp1shN805IkVAiWAMN4B59vumAcKTnILu6zTrj8leumlKxZXs6P + 3oolsxYxFAc1jKHlLKjJPhNRKGWSe1sR5zjRacOOGhOSIK0GPFvqUU+ylIgz/agyY8q/lZ5GeolqxeoC + mE/jMC+nCMIZQV1GzoXuNCFDrB43gAqsbhbToGW0aT8tqkBCMhUSAl0pHIA6O6N1yWg4S2ZWL7opmFKx + EWuF3wWS1whsprKhovykQ8UiraViEggH22k4z2FAqnKTsODJqPnoeii3ZoeHE6znNm8Q1772VFp0Ec1J + k0kfWCzWPk8lUF3X6VX3IWZJz2SM/qQOe9OAEXWrI7QsV+8WD9jFE6dY9djt2tgxpLJtsxz93bM4O7Cz + FbC0KR0nLdCJnn4mK7j6gpr0mruteV6VOpNVHz+9MFe8JtZsIKWtTP863btCUXpYFKqjVrtd7LIquuQV + 4w//Olj5guK9f+ydrXKbwne110MkqwMOOxoYH3pGsN8r7AHb4x3mXtKfnQQkUx07DMoq1bZe61p+wbfg + 1kZrtiSFrO1caVeF/vDCHwxat/b6UOPulB0hRtp5szte025YxdddJzv0wxcSYXZNGk6xOzfK4gqrysCw + kTGK2evNIK+0xS5WZx03iWGV7ZfGwMQvUxXxzHjoeBMSU619/tXKYfnd+JdE5o6LpexBKv8YUz7u6KSC + w+XOznXN+nzomLfZvGYWOTQbQSWYHybmJe/TmXv2sIdSq971KhbIOuQvOlpZVJ3I+RNmVTR8kwxMSYO2 + l/eob3RgHJ+8ajlq5mLVZ/mMySaSeiyHRkwT57toOz16bbGmaZ6JF5m8jIs2E05goNucnhHTcRysbjWg + hXIMWg97SxXDLZPRehZKc9LJv2Z0sB+Z6hsWu9qLCXUmuq3Xa2O7wAfedrz0Mm1hhPt8wCb3sxn6Hl27 + Git3yrSVV0zmoZHr222xt6ndmW9c71va9O7yv919ahuP8D3sBl5tf+HwtLIu4MyuHrcl/o5nTq8b4eNW + uLbT1/C+7BrSGV82yMWEqjejmyzqPtGTE65plEtNOiM3eE1MHuYa9xtqNef3zY0Ec48fah9An+NxJ230 + Skv85DwvkXKRfW4VFjzq3kgztQC+c4hfXGs/r/rLhdH0r9sJZvomeLItfuuSC51MYgfH2GkebahQE9PI + YjvF/Qn3nk+95UqP+N3xfuetx/3sc/f738OedcGb+3fFtrneMSK60U2e8pW3/OUx/znJZ57znfe83Tb/ + edEHrpGAd5Lbszb4vd+T6qqXbeJjLnPGr368VzELPK/u3Fk32PVHp2d5Dt8p00dQybPfGay9bnz2Hbu7 + HH6tqvPa/nrlb2tcqN840aefp4wvfNNfZr6sGxnb70fJ+kSr+2wcYmysn1KPL85+rao/dCuDP3bo8rVU + WW/74FMw/s3XOnjR6zpKwqkgLf8MD/Leqv8CD8jOL3gIUEK2j5EQC/h6L/yCpfwQ5dQOqkMIDF1gr8xA + rQLDT/xwo+2cj/6ahrw8sDl2R/pQkCwu5wPJ7wQbsPA68G1KcKr0DwHbJAZZcAF9agPbry0ySv0e7Lua + 4vacwwYu0ATxjbt0sN5a6PuMEP/eD6Ck4ge3BAOniJ9+xOHwIUiocN5EEAZFywpnsM36BEVMiJPKpwoT + CA7XDwonwwdz8PTmrySEyX9wgd1a/owMr5AtzrA3nBD7ek0IdkkMkeD+AFAOY+QxeLAOS20OdUoDo++x + AqIlsq2zLq1ajvAFeSMDXIULxY3oogAfmEkr9oAQO7Fa/CoQDY0V01DF/iWdrMgRPwYXH9GN6NCQtJD4 + pA6gVqEKJykCITCGIpGVflFESLG/sNANnEsXH9EtkhE/7hAYQw4LeYcYPy0TYSIsmjEDKZEZg3GMwjDK + utEbf6oMmega25HhcgMdjXEN6wcWv8gd35HrXOOJzMkcm0AJ2Uz3SiQcBw01+FEaYeUf2REbOXEg4dE0 + +NHWAksh7ZEhQ6QSG28fn2MeHVCratDOGpIc9TEzWM0yngJ27ICL9sZRKByOINNOGNelqRhxh/qIWFxy + /yqy1vBRpUgyOYAmB9yqShbS/1bSFzMSmr7wfiiMiryPtY4yJHNsJONR2ErBarggKEHQKaVSIINu/HhS + PDQxJdaqh0DRt4pSGQkv5agCnlKEBD9SJS/yHuEy5XiRKVGoF80yLuXy+HLEpHoQEsCR0GQxKpXo6VqD + J2CSOXLiJk/mLGPR98BSYaoAppRrMYXMMR8zL/XD/jBxJxQzJzXT2/byKxtEOyLrrYZgMkEzNBvTKCGT + PM4RGzLokVQTL7MRM02DMcsSIo2CXyYxEymkOCyzKQoAACH5BA0UAAAAIfkEDRQAAAAsAAAAAFgCdAGB + ////VrTp8ORCAAAAAv6Ej6nLnQGDcJTOirPeHNwOhuIYRgEJUae2NilLVl9M15adzPjOV5FuA/aGIiHx + iMSYYi9GU9VaPJVRnjGJbVxJ26w38yN2v9kx+YybitQP1KoKPprR4jr97oLMQXv8ru8XCFUToUJlgrgE + dsIWJEgGuBH5yKNnR1mGqblhSTj4CQdQeMiINLnZcYqhilrS2cPaKiNLq5ASazCKwKib1wGX2DuEW7tA + zHBcnCdxqezoTLtCrBgc+mAt6qRbqJiUDO3RDE7IPDxe832e9gqSUo2YGyp8ELxb352pziWu78rfzyEd + QBrzflW7ZquJu3dVGmX7ItBZRAMTazmkUbFWxv6BIQRgMxRPVCM1DZcs3FaQ3sc/HDvKacmpHCyYqWhS + 8ljChYM3DLv5XCkSok1J/4Y+qLiRVlKjMi5WCnqy4MKgPiAxzYD0qpSMS1F11YrsoZuL8OLxsofS6Z2v + mriCVfnyrRa5aCaoheIQXpREuUJCY9s2rta7RejONSyUKpGoJaeS8wI4cFGYMq0gNnY5MWFXvPCdBBgZ + U9arlS1nRhCa7oWUBFuUVcwx9SO3RjfzOY0aN5Yntkf06s0BKEvd4Sb3A65B9mziSMoiN7h3qHJBtCkL + L8x8Oth3zadc/8u8uHForDGG1w529eshnd8YRY+nOsDnWMOLtz8T7fc1fP6T7I8BX3yC6UNffdnhN6Bf + 3eFjU4B0bOSgQQniFuF7UvznG4bgnWeKPhDiV6F0+pXylEIaKhPiGR+eY8aJKVqF4CW8ncjCWV7QeJt9 + 8klEhUs6xrhYf+W1VmAxLyY2niYSCMBkk056ZMKTUk5JZZVWXnkldUAuJhJPRVZlmHZYjklmmWaaSZ4P + JAYUyJluvglnnHLOSWedUP5g55N45slnn37CqeWErTj1AoZHIrnlcPodgSOLCK5o0UcK1QRiovmp9OVO + jY5zKGQdRgrKf53mY6miZm265ahYQIrKkK5R+mOppnaJKpCqevPpoCtNymalsuIww5C/OnBrrknSof7W + q736Oqx59IjFaGbFGnupkkApS9SjzaKDaa3LZMqjts/O+kiy2CYn7rYA0uqtL6dNy0+795V7LVzZMqvu + COrJu0tfusF7rL7WKmHPvbHmKzC4alpkTroBZ3HXXt8B/DDCYbnDKL/gUNxwxQsubG/IOcTIsTrCtjZo + G9VySO0dETfUbVgOW9yOwk5Ay/DKB7aMxskzthdKyabRDJ3G/drsoa08n0EYMHphRjLRNRv9EIPRdIwv + 1j03nVBnMs8s9SE9SAz2zoJ+0TRJtEJddtjfUt2l0lEvvVvaJUHFdtZu49VHdE+lJzeYOW69CEn9HSD0 + 0HtT0bd/byVOruAGMv59ndWj6GWExHDftDgpm4/zOeTA4kp55bytPSJjB8klejRR2kJc6KmSTsZmv2GM + zOpkP965mreM2HveerdDbO12+1voYT3yHvyFTXzg2ndIMz83CsWjLf2MCirQOPXNnzqyYoSKPJDsgZ89 + tu0mnRs+DN43v1442o+LOtGtP4N+JfvVQz/3wbH+PfIhDmfYONlx6Haz92ktSMFhkDUAMT3JBDAlUCpY + AHMzOwTawIBia1+NOLixCZIFZhfE4PkWmD55TWESIARHBHUTP0zBroQDzGAa/JcxjUVBFZ9D1gszY7Vr + AIOGNbShx36Bk79RZA0qi80PreO7OFiQiPManv7idhBEJphQQnFrSQVLlZLPuK9/RLwft7hUxQ0mUYmx + iOFxHAOktPCvRgIsoRnPqME1rBGL0kAZTeaIH6AdLhU8wZkdLbWUibSQE2n8oOGuJkR2LXIwgNRXFg+J + yFVVYo98bOQiliGLz+gujmJ0VvKouMREbYQd5DDaC9qojR7ypyf9son6DqIw9fgLlXd0VpAE8sM+Ws95 + siwad2ppnVPG8pK+RCUOVdkcQ/qGkxsUZoaIaa3VpbKO5+iJ5i63uV6GC5qOq6YOWzCNrhVTirNoIoGE + oRduqMiZXzMiA4k0ti36BiHrJNgqLjQftWVjkvhzJw3FuS7/oIqgmtLnPv672E9/3iAhJhtk1br4oARS + EaH7qBsTpve8dZCQEnfJXETHUh4brUWjZZTVUorE0GUWkT0ndVc7nUce08FmngBVl4tcuqpGrYlIO4wm + Jq6zhZjWzpE13SZCeFmqrlCTke0aalKaGsnJYTNS/2FmHvOlIY521BQ0wp0fHYrFQLhRecvE6id8V0lP + 9S6sQPUo8aSZk2eyxw9eFd5WN5G2nvJ0rrAipzfCqlItenCvLntOi574UJA9tS6wg2zbLtvJ/+G1Znql + qQ+xA1fACmckApoiPeEly64Axz2PQWtmKScwUgCWnZOlbC0ti9mDyUFUrB1LZ9NHuNiGVkm0RWZGC/6G + W6aI6leqbeBOOetX/cF2rHhxq2B3cl3b9nVYvRErdfPHvd7yp573vBGqINiq5WFUQNwoJFSZS6qm7JKJ + 5GWseZtZXHpdy6IZ/Zl1wwRfTf5TvNCNrhIVWtBPpje/7GUpWJdbVwHfgMAxwUZzITY6zbbqvzWxBocB + GGDaFY/CCmZrtHYTOckd9cOSIC3RIBzhPNplexU28YkzdkX1ztBl6vjiji0G4xiDd8abVfFv0ejZHOu4 + tsEFj4dZnNNlRTW+OExs4W5aTuDqTKI4xQOUZ1HALzPFu99Fn12sPFwbl/fAKW7oDJX6UYKUIS+nbZZU + ZebeDmK5O0hWMkgqW/4Kt2YqdJKSWpCnTF+t1jDPb/0nxFS43cE5UoheUiuGIkrnF0s6k1ROJYmzO9FH + i/SrlPbS7iwt5phR9MWGsnOndVlkbqq5z74VceHkKQWSdhV73klu9YScIFiPVsp2zRCcHV3htbI4Yk02 + Lj09ecJmQA/NuTYYhq2XXB4+l4xqhaRB6+xqUk071jTeM4oj2+nX0itl3342mctsh2DNVxvEvnai072O + gS3Y2YZudbg16SQ9eMRKAv+Tn5YEJ4QbfOEEZ3icFO5wOkUp4hSvuJQKbvGMa3zjTroPtddrbVHnFVFG + lqyuN+zfsNH13/EdqmkLe9+Ry3XNJEU5OI+dr/77GQ0w8vYwvM99V5Lnc7abuJMyn+1UYCfI5eWut71/ + MVhal8sr24urrBy7LbboAJ5Fkk1Zo45dfxC36POmBsZ8DbqfZn3mZkFLQnt2b3ybU7R0by9ftNm7d7/d + 1t7B43SdK/Rqj1cnfz+5c7yZai/TSO8/LzbOvS52ttOb33ghZj/RjhUh3SPSl4kp40E7XXlBXuYStung + p3j5L99poHGbCucR0/W1fxZpow+63NvuBsGnnuxiOR3eg/d5H21tel7XUES7UCA40g/z5B5spUud+IEE + f9O8Hi1haq9hya/aH/DsFs7dLJpxlZJdmBxW8T+IbLhzMfAvb6ADjwZy6f5KEHeHZ0jnpk/9pxP++nyF + Otiz2nzqNFJdpmUrJkPktzbz4zb4B3M3QjD7MR27ZluxhFI/pk72ZYB9QWDHtG0Ww4BOh2AUmH/Yw0gT + SIBQtx67wnRnlYHeh1y8En0bwnIiJ4INOHQOBn4wMnl39RrmAlJi9mRSkYAxiCIuVFORMRIMdWGCV3L4 + 9nHJxj5tlVbZ5AsOtD6L84EhB3QHuHhbaIFhZ4JfmBPRU4KtlE0FpDKCtIIeqC6hoTmUp2gYyIRgqIMf + M29VAVM2E4UVdgW7g2trlXMBdXtcYjmgd4N0iIjaB4fuxyuTxhn6B1fytnxX6BN7k4XowjTx14V8dv6H + nTiHith0kdcbgDhZaHdpv5E6Gsg/RKgRgWg8TyZ8N0Z4TWhr7cdZjMZUI1SIBpgXXgMVZ9eBrih7JLiD + IJiJlReGQ6d8EhKE35eIjOhJ7gE03seKrfgW59WCNiiLtshtdRgkZsV9t+OMfxaAqvZYkhRP5chpM9h/ + hthYz8h+fPRpdKQgvphlnIFOCyMk6LiAbXhUwsVXYRZ/pUdTyrQpMGOKj+ha9vKHZMh8cjiIv9Zt7vhZ + CfR6fqeM0qiODnaRw1cFW/dUeNeRFSlBpIGRigeQXuZmI5mSfxM9SuU0ymA1YyBPaDiOhxh+23GSPEaR + PJk6R0eQTCaKa1iGN/6ZQmwwB/aIN7iIMJeIiRMZi1BJY4WyTi81RMP0kLc4i40GPJ64dtUYd1GJLI2n + ftzmNxEpZ2IIjdwYkKwhgfC3iOxIILVYlmKJkmbJlm2mlgwWU/OQakOyB/XXNYbWjdFWlyPIZrPYa3mZ + YYaAI34JlnFmbjvYHqDmjxzRQ9qxKUsYRdvnlXp5gArZbspVUnqWUpGZk/53GZq5dzX3ibiVlI/5fnTB + f6DEmJ8ZYnK5VGRJdKMJmoVJj6d2jUiFXetjfbspfcI4lq2ZM0LpZ98YmpiFS8OGNl6kXFtWnbzZm7fJ + nFtpbLg3nMLRh9rkc7ipbiaTdODpQkd0Q9o5dv57mWA5+J3BaEulKYJ3s33rlJXPiZpNt5k+2ZJJNkzw + uZPFqFgh0Z+3JpTjWZ7Ql50w8VKotomHaZcFiG7A2ZgmJ5ngMxT8dWShaEhWJ3Wg4YVJs5zuyYJhuZEV + Gi1h1KHLGF3Ktmr7WT7Q5gnWSaEsmm8pCpuZGEQ0qm5OsRqeKZQw2pTK+aAouqEDmm2KF4SYeZVzsVrV + lqCcc5nH2J0Wamy+hh5oWKOD+TVXGCoruo7X6XaIaVRZqj+1gnltdJDw6Azy4EbTNoq4ZokjSowFmqZK + uqSOMktCRY45FWbzMG6ieacQmWUag4R6Ko9VaqP6eCLJknamE1LmyZWO6v4HTvmUDohf3+iosHQq28Vs + MtlCJAIukIWpWhioeFpanNqpAmqip9cG1EmL/8g1VGGUh3qlkNiTa0qiA4qDRBqsK+YzZgekiLarJdqr + WhpCuQenGCprXJZZ++N7ypqbf4RCNBeg+XSsy0qPBkqgINpYZbVCnMiGHZqtiOqtG0Sf1nigwwqt8bqq + 75qLH1pN9oOke8qnaRmrfZqXkjqfNwqFs9ZaNKOpcciq2uiSvyqwlimulqop3oIc5ZER3dpjR2qtOppv + n+qrJ8iYB8mms3Q9DduuSjdGAJaxaLqx/aBIAvmJzlmGzgqFH/ENFhsbGHuPaloiVVoRkiKnzxqXKf6a + bCMrtFJzsOmXsCp7QxwLq2DKlpWDYyJLtEg3mbTpb/qqs/LIsgUbrTuVadL0tSXrgv66WPqWqgp7jUpL + r69akFuLTzCrnr3YifPYtfVzrwS7fliIs0mrtlzrpx/VfbYZndy5ZMLKrnirmhpqT+Znrowqf/3Ko9La + gYPms3BDYcnwMjZLdXubmFk7hW6bVuNneQPFBj30RED5qN8qU2cLXoaFk2yrrTK4tMKZa2ZnuFPjsEU7 + UzLbVqzLnlBkjGsLu03brDRYuz/jm/8DR5vjENOwX5orCwy4cq87vK7LZsKieUwJXb/HrOmJu2GnlIsL + e32buBmqm29bt9Hpof6A15WNu02rNZvix5IoexrAoUjpar2NmrylFqrJRxbGKx6ch7pk017XOr5oe6Hx + abLsejpMRbqkiJd3CRtG17/Kh7oCKLa+S77h6m2qKrye27njVJC0G7G0RHqlgw+r9za2W11iyzK2100V + qnpY+rdRK6/UGBUq6qrwWmLgN44a7L0GHL1LxbPFBrGUdrjNZnmId6aeA728FzvBW5J1U8RKXMJ+4b8n + WoNwZRvGKsSwd2g3jAwcR8ZlbMZTEiV7ciUIhycT9yYYZ3EQpydwzCRsbCduHHBsjAhnzMd9TMZy/HBy + gr/qWoQxl76qNr8PqYLHu1BuZGriCMSIm79DnP6vNnzIWJyHVmyLnhGpylZpZPiwNzsf3qgUxgO61ro/ + hCufRny7FWx865uGkFm6T7ypMDQxsnu+2po9VeVrl5SCxjqxYrrEAFs189uq6HqyoVbIw2jIl2y3AQud + DXVm5aa9ebt8LgzKpFvDzCGenFLJOYSf2YePqFovxQGOFRx5ghVps5ygmqqRBkbJyeo4MSnOHDSAjxt2 + +3I3ECyFTiw45qIr7hxo9eWuzPxoUfqt/Oy1sVttJkWVcqSLI+S02XV3CJp8bWsf3Vy8Bk3Frbx/4dvD + O+pPQCDLyWN/QevIq4yO9Fy+CszNyrzMHN3MK3oPJ5zEn0DSlUt+T1jCP/77V/BoWaR4tEhrJJzLa0FL + byYBw3MnOEJAHy/ExDIVsZ7qiUNdtfEs0+aVzbcmzDEr0mBoUjosUlbXxQqtwyocSFMb04zrpM48P3IE + tIZ6XfuC1Jxq0nbn0WkWVD0YyVIEBwBj1ZIcgkccohrZiIO5hzGhYtP8ho0quhg8iXDLviLW1VZUq3SJ + rBJMpjgsSStshVcWqGuE0O4HgA/djKVIwtCMNZuXW60Q2ARdeJutii9ZL+xzeOA6h1/E0sHJGP7pslXn + zI5Y10Q9hC+rQMkcj5NMoZ28pibiyADbR2g2pZzNgUlIPmb9p6JnegpIvxvN1rrS0mSLPE6TuScwY/7k + HcpV98iFpNRdlquKTdiwjXt9jcBaDM/K7ZpenaSwnGtEtpjG9NCe6JazLQjGHMTBDTjb/N0bJs4k6Nwx + 4WOQfGkuDBcCtd5O2ig0ecGIAdhGvZ2XnUP72999tyimfIHDrVAT+pN0C2LvKditXeDIHcM+Nl8GnsBT + yWEE5dSdLcYNwuAw/cV0B+LFYN7QYtrvPbmMSKMX6dSmhuI+TjyuBBSvfd8fbtz2HQdEZtH8vY2k7UOB + ZZEUrhWBOcVBjnJxnaQwQOPgY+MY7qMEk9NPo1veLM9E7qVv5AFy+tjvpJ/7O81YPK8JfrHRLMrgfbup + Kg2Gw4Hh3cNZzMrtjf4aDUyf9K3WAErcN13oP37i59xNIP2LVFlg4bjbQw64Dol43NvELa7gC2znInq3 + Ixxrkj58SIx+xvsTTV7btSHf7Qjkmd3pdveSMq7KCcPoHV3iqpvivZ2eXEPLzynCZl5RqF7Ko6iS/DTZ + eUorwaI+st2cqVvK1MuwlNHPrZjj2d3gO0yNU9PsS+3tWN2eUF6joyq4lHW22J3e4I4LLJ7pgx7C4c7n + 0lOFSP7iWPuxA6m4nvpAcebp+77qvv7vPvh7pw6AG5ywz/vKyfWEzrvnyZnfcUnl9vpGr+zD2duFAm/t + yAjrg73rNWby/2flC/nq/g68jh3sTx4+LZ/ebf7+LawM8sms8/YtNBHK8C3h6sWeoYkt1r2L8A8F0AMv + n5A+l4nz8TD/R0feVcru0lsK6joR7BFkItfkVY0ATOh9ymXP6i8aT2W98Rp7i8eT6u8OG9kzhIVW5epO + 6/F9zGbv8LHzdRlsYQw2ushjegb/riwsW/w78Qee3d+E4JkIOVO/uxktkr22vM49R2hd40xcuvWThFRD + 24C46Ife8+pO+fwu83sfI9xxc6Y929P56V5z6sBY9FdOVLs4zLtioCTdSvS8+S6u92WKMIJU3BDNvZrP + +F/f6XrmnTS2dWz62YT/j0afjGe/LcAOSLG/3vt14uh58KIf+c7vlutO9f7PDu1u403Kw+Uvh/MET7hS + UQga3shjW9C/D/w0VJvfq55Ef9L6jTd/7rGiTgBBDHS5/WGUTUx7X8K4bv/BUGS60TzRVFWQVvNaBlnp + mo3BGTIq1858uJ+qJ3oNPSXkkklpPqHLl/CiWxyjWZq1EaQOdTOulvPEHs4jJZmtbr/hEldA8JV303H9 + JB+z//xYDnKg1sCeDPcUnRYb38LyumQiHRvHrjT+AC8/OG0SazxrQCv1SEtRbeYs5jRTUURhWhPqWskM + KCWzTldiYSJ4X7WChWWKOTixVo8BN70yfXujBXNHm3CbiJmZtI+rjxO/XLdPptXExM1HfFC7y7PJ4f7c + 4+kXwvHG63Py3WzxrvmpWzFvHSJ9ww4mnEBMoBQjKth9chTtGw2CrHYYVKhxY0d7EzPd4JcxRYKKH7qd + NLOroCxBQy56RCnTY0wws3B2UhnB5M4LKXE11PUuis0QJoeiMErTwlKme5xuwQEpSBWhJAf9ABq0nM9/ + HFdm1foUJtmEUSF6+brMAVuiYq1tuArEK6ZCWXpmUGpWIt96aEsGTYbJT+GIJqyMnNlmLhvAVq+0ravg + sd/KaPxyQ0XlD05/iKeMzUxES96vbkanuJx6yequnll5njymMTCatSW45ilnMgDdTH+zjisXYO8bL9fR + Ns5IOGTmUKZE7x28Zv5zcCBxTwp8mrT1ENQlG9NuAvzG8t5RK8oeviv7gehBnLe7e7L8g/bhJ7EUSvEd + vRb1WW4D/OD6p7789EOwEgJ5EhCN9dJwkLIAWcJKlQYLXEzBpjZ0hEHJJOzPv//eqwcbsGJLrw+uRPiQ + HBc7dOA3cyQUScS2divxoPU4lKsuJSJEqsUYeyQyjsty4k0VtwixcK+EeFxIpyEjAwK5+IzMLcsjl5zK + kyiNOaxJEo2DEZa7OqmyDDXX+nHLB8w08rHPrpyPvwdno+9GGRWqEQIgvxFDw2RCovJNEg5tIyo6x5sE + zEeVzFDDRH1Lirg16zwu0wEp/ajTCl+LRVDCBP4EU1Ir0yPHVClBlTSxVBONk0inFJOtl1MfwmDPCenx + UjPofBNA2DqGLRYBY4tNVtllmW3W2WehjVbaaamt1tprsc1W2225ddYFaL+t5dhuhx2XXDqmRZfcddlV + tgVhzW1XXmkrtdNer2QVJt8ObWKywUL93NU957DsdZBV+UQTSPcE3redT1vVqVaEdxB40xELjofRvpw8 + oYSFk2oYYocR7NdP/ixWCd8Aw/i1Y/IQrZOzM6oheUGI0TyKYqm82mllli/uDqP2PC1QOVjftBm+eSDZ + Zk+ffToZOhZvquLJmKMbeNJDlUaP6Y1facjnXE0UUxqpE2YkMZphprRr7/4YEgzssPFRZmyMYy7bYt52 + pgCLEkLTOkG3cYaHj8I2WpvtozKmMMqe9nYp4cC52zrpwl2u+MS+p9akLrHRjoJHdMzWKo0ekKL5QMIx + R+IUxTnHK53kLDcxrcjqCJqIPGoRz9LGL2+9rBxJvU2ZtzDtkEU6NIUpktwb9d1QroUXzcnY2RACN3Xe + 9vFs5EL3jRLo2Swf+C27Z+11HM3ydx/ieYVydLl1Vw1Xyo5YHOks009t/ervd4T+pagk1Eid6+4nvt/V + r0jBA6COUCW8kwxQdJiBRmt0xb4FDs6BD7RfxR7IvSzhAHBoA8oCp9MpCvIlHOEbjTlWODV7VCOFl/6S + HgMbiD4PCi16AJxGDCP1nkJJYnU2NF+ZWLdDjwlOgt8AIoa2U4Q+vAxHTFvDJZBIPSUucYNN9IV9drac + GYgLhze0TScMcTwudnCL36mcB0tXNBk2A0DXIAgW83c1NraRg9izjiaeCEUe4u18sUljFzlYxtEEUiao + cyGCOKG0qNXxcJ/r2SERKThGGo6PunJfJ230nIlwyYyKjKBOrphH74lSTqC0Gho22St2dA10EETCbDBp + viDmjX+u1BwXYqm3+GEnf5EQUHmMwgNLnSSSsXKlr/7ky0rWazNGeyR4lnKs3y0nmMMLITTmNkxpavBt + VEMHBkv5QcRcUYOCjP7mHlsHudqNUyTU/IUZqPYgdHIyOexMZw/T1kslXqWbsrRnKYRkL47BjxBoYd4Q + m6c5VgkUjj+jZ0ZoJYV8YsZ6hPyFQ+kAUVOeUYc+bExBe9WBQGUvnxTD5hYAlcnktRJnVFnjRdui0ley + NIEZnOg+CwgyXbqxpBA7px5xKgPy8SEOcaSkQ6Qi1KHOU0EoBUhPZ5pUG0XtkYThJwJDoUCOTpWqJTOq + U8tKz3AuInI5bCdqasS88h0TnlvaaNu0GqaxFmNnL8UqDGKq0OnN6qzDyeswu1oMvy5Jqn9164asClVb + 5rWE/EJRKAI7UpIS9lOmiuw2KgvZy27Bnqq8Kf5nKeXZw8qxreYxHNrkGlG6UjRRfvrsdbxq1q82Q6qz + pWltbbtacfoxFdTR6S1jCxce3RavhzoZc/UFoqWNFhD+1Ow7UevcjlKWioukbnUb5dvs2nW7SSVFYj20 + WylYd7m0HaFjObXa84qUhd/l7VDEa1ntBle+SiIuKYGKz1Tutbn6fdNdT2veSqJXHuplgjId9VTRapfA + CcYpL1qL2wADK40Sgu5gYySoKH24FMHIsGId/ODkgjVGJDaCWtSpVRMz+A2LLc1By6tbu641kRcmoHcz + V5oV5zg/Ln7xJwtJzxmrL8XQMe54jcTj+HKXqf5rspOvbB0jH1nCF2UIk/6DnD0cG3bCFJ6skneameDI + asgLrWqnPHzYGdOYDE/eQ5vJrGPnOmjLilgykDf8CDsb2MxIRXNs6BwxIj8iy8Lp84sHeejDAZrF6lkz + lEeYX0nv0iyXBkmjrQznSI8zbmoGdWk8XeYdXzegXiZYp8OsnvA9+qfvrXCSXamNRCs6z2w9tak7a2hp + 6hrYgbZ0rL1W2AKT+tVwkFqqq4lsLde0iK6etGUAKmxLzJrQot6fL01M6UXvx9hwq+mywf3j+pZ7lOx2 + 9Lm/DcpwF9ubfJ3XvfGdb33vm9/u6ve/AR5wb6lL4AXHt6qk/W6jojvXnCYLtL0ROlpjN7VusjZDYf5d + aaclHMzBBnHD3ZlxjTODcxNvdW0/3kkM7zpn9dYYt/VccaIy26M0gXhK3S3u1M7c2Sxnd55QPHJZ/sbk + vPR2j5GbpP/atzY+/0nOSX7z5hT9fWkNzDSQDNqQP0XqASL6mzu7E8AUE2p4cjrP3/pwqDsNz6NWuMeR + LjEp++jsVF16ndeuqrbH2NxwFjtoXDgxU0gU20LvCITHrfMD45pviaWR01sY6sT36evThfuUPclSSqC1 + 5RFdt8uZok3DSx7lVpdp0u8AeSZyPe872ru2FR/iPbnj7l0cVYNzS28380X0k/98pn1SQrPVPjKqQ3DE + iI930Pul97vvuK33sf4KW905wvCtdPIRsvzMhHT0hd+xyl6PUDsdVVGCFbnv1a792G+I82aPYdOKn/zQ + uj6rZ36789cv+12+X0zYIP78geax3G7quu/3DmwZ7OCJtKcqHMP8Xm58CvD+ek339gxsGIl0WqYB9Ul+ + YkE3qO7k7M/7tiiYyG7pUOfwxsEDfwv/RHCHYkn6sk4isI+0REEF3avLKPCBNokqLqgorC9sACkCLY8F + DVAHOZBQ7qLu0uIPXOMDBRD2zs+DSKyrekcm/KUJVUgIG6mNprAQlHAJ/0YLYy4EoxCAPgx7qtAjrlD9 + bnAA088Fmc8LQ09MsLBw6vD5zDAO4eELC2gM7v7QDtkQOJSoC1VsDjnqxFgJZ1aDQBLNCaEQBdOk8RDx + zvKi/dAOc/4QWDTQCLePIlzBD59COlxKCgNxC0mRNTbGX5rJeFbvEUcG/TrCERmOLDDQLg7DEyIrGRaR + C2HxVpQvD+GDScLJqvBoF/nIGPMvCw/weaxQOcLvEuGQCG2OEw9QSyDRURAPB6NxAgURGPNjLgpKjcbM + Fb1RG7tReJzQExMxADUFGdNNGmOxHNHDE1+AGOfDHYcNHuMRHRUkUDQgF5vnMmTx1zCvDF+R/YzJCi6Q + C0xjHC3sHbmxOvgRIfFIgFiGKwRDjsgQ5MzRFDGR/WxxFjSS7WwBFCPyFQIKAAAh+QQNFAAAACH5BA0U + AAAALAAAAABYAnQBgf///1a06fDkQgAAAAL+hI+py50BoXB00ouz3nb7D4biEwCQeFJlljYtO2ZdTNfi + bGN4zvdaBNhphL6izIhMhiIr1EvxZABdzZ8yeM3SiEqu9rtheivgsmFsTo+mMfaiujREMXAfWl2+F/X4 + snjE13cjSNgWEEhV98DC1Nj4UzLXg1i4p0ZZ6XNyqHiUafkZqlKCCdV5IEliInVquplVKrp1KWu2cjhY + axOr+3XCi/rk2CqXyurqCNsLBpy7rJQS2/w8/Wy0Ms1U/HiReqq9za1VbU2WRl6uiuWc7oHebhPBO0x/ + y9pJHzxsEmn2Do/g3xCA8bABIugO4Sc3S/IhiMJmUzJwxRwQA6WQh0D+TxlBGGTX0cHGkO6MuUDFTxJE + EkAkumEIxR/JXXhG1op2cGYDmzp1rPrwzWK4ei0omqzIrGcMniKVjjqT02kCplIXTLiYQyK/lDC3psCK + 1U7VEFQZlC30kezYgGvzbF3T9SG4fUObUJR11lreqW0r8tpbs+8XC2ETfWvJsuWtwpkA93J8ALIvUksF + S5ZKmLHHcIkjaVbhVvDAwGPTgricVLQyOUimiPMatx1qUZJnt4YKcqztnh2ONtT3wrds1RzPSf0Vte9u + khLkZrn72UP0ysR9ku5JOXnb5SEluJ4eJnhV7pUuk2+zLrfu6leIJoE+nv0F1Od//yVev2Pmu5r+uIFf + lp8g5s3UnHrryZfEDvz199p7MiG4k4DdCRehagEqJASFTizIG4RN9XEhHQL8F+IkHiJBxH/SqUjNiRVe + R9CI2innIkac/cSDZ8FsV6MCs5X4IlLWWdijWDui1JpWYLCYUJFsgYiQghxUB2SMdGnoUWw6VWkclO0c + IkCYYYohZplmnolmmmqueSaMTtYgo2JaGkLlm5FtwWaeXJowA4dmXaJnoIIOSmihhh6KaKJokqnoohI0 + Cmmkkk5KaaWUzlKOMP0MSaSdNCFzW52epufmTbjsKNyecI76qVxMnsSeqqGVKsupSIYlK6asUufqrgbW + +OMyBVaUaqy+8qr+z7GnsRpsL7ayhuN8xiqrFnDUfpDrYIQEOCy0uE57LbbqvPcqPNmOs62ppC5WnGjn + ltPnnHDJ69S7q0GbmijZ3dquu+Eu2yCDCNp7RYb5ZoLckd+C++9o9G72FoQEJ5huKPvi69vETTY8ZbRJ + PoNlx8xWXEnCSHr8J8Mc+/TKNeVmpDGKJKNFasRVzBGzyCvP9zBcusDxMl+72rabyfji2FXOo+3Mc9Ax + Oe2gEUrbSAvNNd/sWRRTc8r0PSGHEbGLW2s0Mx5GH/1IHWOb07Vh12wDD9R3Dl3IbKaF/ZXaA7dt0dfd + OOfk2jk0a/bFQsKmt3yC9/FHknLDfCzRjOP+lixwWivOt9eI2FXE458s3iodVC9peEquMgR6ypm7Eojf + VtAY+RqhL0l55XBzxWdMRyqVuhoBn+j5k3SXrQVOvQ51+ipEBV/16pYryPzP6MYuoS213477G8lEG/2s + znN18fbfz+3rP5/tZbxz7HaChuu69O7HC73ZBVb3vCtrvri01yykkkL/fb/VNSgzDwHN4TrivqWVr26T + uR6xvqI6A3YocwEjzCIU1rORUa96z3Eg+DjnI0YEUIDswxs+MgiQ6G1ub8Tr3N2QdzLhPWWCfIvNiIA2 + PqtQS3LteWHfQkgHPwEEfuQyhowumEMZDo+DH+NfN6qwOftBQ4rH8ZP+/46WRA+OiikX4Un6wEY+GDAn + gcDT0hVRlkQiIotWWfGh6ML4RizGjYqZukjP6kBHie2wPE0sRRMwwS6FkFEpcaGLGHeXRTgusYM6dJkT + DwlIIYLsd/KZSz2AQr9EAhF/fOyPFoP4SBEKkpLscY/rjtgyTX7STrsRyNmAEsq+aUpfLPlgHvVlyKVI + Mo3hamUPvriiVcLKFRbTRj4GiUDx6QqCqlSkBm0BxV+68Y1+1N4tZXnJAwoSErbc1KqQck3MXcsx8vul + MH8YS6GAqmTLw9oYz3g6FG6smRHcIOlwRA5ggjEWEEGmIRxyPX+moZ3xzBrF6Bkke0LznNzk5zT+44i9 + yXEtnP/EWtZIKTOE1lOh92ToEz2qO5C+IXmEWBgiv4THB16TCxTFTy8F8cospZMKzgyP6dBoPWmF1Bq5 + /MlF2YjTHKpxjQMtHSZnKgUlyrSAJeWaNn+WSmsKVH+mQOhQiRo/pKKTEmxwZUszdo9JinCq80Siskj0 + L7tplaZc7aonYWrSWgqrMLvswjHoedUZDXStxORqtMwXzoexVJ6T0UxdM0rBar0Urg591utqip699swL + h4Vm/QDqvbaBJ6+/Ip0fjSpByMoufigcA2GnyAg83pKzb1tWWkvq2NQCcpNtXKhrZVlMUFa1efyyasPs + 1i3ZQky0TsjqbXH+uxDd7vRBgNOovehom+CCsq3/y5EU0frEljZXnbvlLdKcyzHgRjG2o4DDRshK087e + iJ0QZaqb4Hmt6LBWsZNrnXTRWd0cNVCvT9NuDIe53S7dtGvy/W1jwrPCRkqzeCqy70LsSD/t7uc7vjVw + J4OY4PzWtoe6Ui57y1tZuwYnxG2bL32ZKBTDKuK8HP7mYxEWFv9CBR87O9/KlnOHO+IsVFFz8SGTO0Sc + ytgyNz7wE/WQipEEr1x+zW2QaVxjqi6WgeWFRAlb60ImwzKpvhuyDFTCNBuH18gnoWtCzSkwstn0rkUd + jpC9/CUpT7mFx8PmmfW7YCO9mJhdTocF2az+ShOfGMUkddtG0WxdPYtyEafNCg3QG0JvgLfIF4bCEdP7 + IUciWs17JtaA2xxZirUCzuko8Jjj0eGHXFp7Tk10DTCq3sQUsCgUDRkVvdndf31N0MelMycwnWksPxrS + fPXPS75KasuxemW73hmOrcldtgm7uAe1MmJyXTgwFu+GQGu0s79NZlSserl3dnVDiC1SWwJYoqHdL7kr + TGkqzxrY5TY3JtGdbpQcBmHSG6lGlTrnshUyrjze8r3yjJZkKyLZnTp1pQfer2lz8+CaeHCtUlpDU8db + 3pxwlKUUBaZChfzjJD/TyEseqEeh3FAn53bLVw7zmI/p5TKvuc1vrij+fWNb2j2WjrZ+DPSm0gY63nbR + dHg9aC99Oqj13rS2C9Zzq4XC5RHGt6fWxjzuzG9cCiTXcKFecKl/ziv//TfSe129G5q1601cM8URnnDa + HA6zxzol08gzAbVHNOISb69dAXhUII/dhN/JG6vsfvex6z1sbG/70/+eZYsN3ZLttDoLwc3HS292f4+v + 9rqD+fn2TB58dbkow2GK1YBLyCWx3rDbIQ9oDcFEmaKf+geRpxXLp5BFZ5fz6nGN9rAvGvbLprZ7dS/H + dOVNR4Yveml4n/hiJvAs0bGfaVW0kuRHneP/NajzF2nhB0OfwQYHO6BhmX2mu9D2GFNt9niJ+fL+xEZe + 1A/82wNs01nWZYpe3rpPu/19z+Rw8jdqJoE+Pvdz5xceDFEUiON4D+cthUd3JRZ9jREUc3KAEzc9bPYZ + /OENkIZ8qWUtSmJIIQg7G1c3h4EVGRh0xFdnWaJ/UrV+4hdhjJdNpxdkFRh3XNdqXudh97d3ViAOxhBV + jiZ97iQMt1OEXdN7vsdu+MdzRuhvgJeAOydGQ5hdQWOCLbheBaV+r0UQW6hgYvd+fPdqXEaFGzhr2BcR + EBaAT2U2uVNmHqgYq9OEZYV6qOKEZ4iG+FWFaxcHIMSFMCh9lAU47pE5d6gzQucae/hooTeFaugygig6 + CSRQlLgioNV+6wP+QxQ4RgKWcOKBh48YbaVofu+WiYZnbRvCSFa2LpmEe1jIN4rYeIWDQ4tYEGUXY5l1 + UucGh4ZRP7ZTe9YWL/pGedkjhpjBhBYHhcGGZ5DoXn/Yi/dmD9RIhLQ3ZKznNRDkEksYfwModM3YdNv3 + gpJoTtcGgyoBa8M2LzEVgYtBa28ILNXxMiEiZsKnffnogtKkIyiwd97YOdEISn8EA8a0DzjoZ8vYb7hY + PPQmjdYFXy/WfFbHhuU0QxNBdsk4QigoeaPYirojjzr1NqnkPiP2hVKYibSFhpakbMyhdBzJb46IWlVF + YqmGZ+tTknwGVSiDA/qXSzX5hHKnGk7DLcH+95G9ApStF4hV9x/dNkk79lGFtHQLiRfEQZRUaYbDaDno + eIo8+HUA+TohOYlXloXioYoK+Y0wJpMziUVnuY/PKJBbhpBdCIgO+X4auSV4mVOzE5Me2ZC6WHZS44N1 + uYCoiHpECHrCqJckMTVSlB8at1fdB4ueZ4rDN40iaJi2SAx8YGwASGDVGH7M6JekiE5JeJmcxmXTQYei + AVaHZA8L54k6AV20ZJR8WGU8mHW36YuESUitqZtCNJcA8hvz2JFreZQHhG/tAx4NEpyhJpJhdZqBCYY6 + WDJJR4aMp2gK6Iq0JhiFYYimIy9b2Jw9qHp5WJtwlZk+xpZiCTllhjv+c3Jr4/mcVRE85HF0WKmP6qmd + qfiLsrmCVWYUUxifLulB7NlRlBmOo2mecWki2fVqgfR8/5kIbel++Ql3M5EiBJqeDBmH1vmgo8WbfAlt + tkl2vRmDoiWVshaC8pmVcBmKNhmUHPqh/rihqWeFS0WXE0J/7RaXP+VuNMSWQJqgCgqiNMqgqMl/YEYg + tKeSLUluEMps+fZ1GzmkMkonznmSNupJXbGYMxqEwqNaJ6QKXcqYsVmlteilcdCfItpDc2Cg5OeVT2Jr + IJmIZhqjVjovFaVCd2qhzjKiY2iQZZml48SaxaeUWmmcgciO5qiBamqoKIUMUJmjAPo9NiFjj0P+TjV6 + aKgmn5+Vk9AoPSrIk+L4UZVKjn85qB7qB4d6b+ZSXF9jEmQaRDEGDn3iM0dantPJpy2ap242XBg5Q34I + VYb1f0yCbywKozw6mLUQXfyVpvBifOqThn14E9iZmt34b3jKSWeKpo/YqUV6o9EpnaEoHEYhq1tkpzGy + rHpxq9QaiaA6rbXFGC+RqkYamscBhMd5nv/kqu0arn3qZY2GOkEKjoSUr9A6kv0KrnE6rrg6iI6af5ez + rvdasL6qaQm5qP96FE3pTx0oRJZ6ruqKliIbkCxaDaNmlyH6N+VSfUY0sRQLs5y3r72KsQWxcOoorPbn + r4U5jghIqts6nB7+ghrYFXkWi2r7SQzYd7Sp2AroELJlOrI5WLLj6UqViZjx6qIL2LT2VqdRq7AMQrUz + qIAoi7UPupwGmK2J2p2sKpRZFrZXSqqmmZqPGo0Uso6l2rN5iKxsWkpsy35FW7OsGKLHBiv99IWxKpYu + m4vjQ4va+j6O87XndovQKYw/a5kMS6JNurApy0qzGCVFFLmCa6GG+65BS7c3qbmma2gcVbHs+oCue7Ta + 6DWs4aZLRmzMBHCqCyp7y1zUGbhii7Ccyp001Yaa6qCYm7FjCLfbyLu8CCF+ky1e9K3PcYEm6bBgQ4IE + m7vlN7u5Wkl+W2k9wmKVK1Ww6HzLd7c7S1z+jepvBsW6CLJ5JFskgGW9WbiVy+ukr1uM/CmQ8Pi0zNoj + 8Su14juSN7OK+xetxou/8WK3wMc97tu8B+MhAhy6J6Jk3GNtBllX6QdqYXMVEhioCgNi6xjBfIu33QG+ + dJa1wjmJKltQE/iDpHUXLodNxgZi1iqAiYnCv5JsXPS2F9unW8mkl+sLFcCGeJu48ZGuLeIgPwy89VqG + WPqj5Vt5FpVaSXl5ATyzbdvCv9tis9qPJZlHSatjIUZ5JXywpQSZCnwaOOfGbzwpYiAPeTJyj8IoIkdz + JZfHLrcoYrLHgnLHfhxywwDHhWzIh9zHlfLHjaKqKMnEiCp76NuykTn+of3FIkPMlCOGxo77vvpKnnr0 + xeLaXJbYwW8wbl0Iq6QEj0jjljxCIECFqN26tMELDaWLaZZogtdYgEM8wr7hv5G6Tu35JpohK01IfRgX + wxvSPcB5RZ1payHMvBAGTm/KqE5BrJz8twTMYE55xZdMzcrzFASEnVCqu99VrlCKxfI2zLL8uIFTxNz8 + eumIbvBJOUvYU0S8O2ZMufLrJJxzCtHbuduMvH14Ry6cwFw2P7OUvvGUwVS4safnjjXymnlblW9Sf8j8 + WCRcvxcKK4MlyfkbqfumsWFqrlMZzxB5eLwKwBZ9oKI8prycs2YrRtDTT42YTQ1Leul5QkzqN/X+WXfz + 6cViY1s4HdIO/LDqu2wZUoCc0Y9Me7pRDImWB9NSGtADrM2kY8Dox5WdtrgSlCKqKTdVvI266bZNnbq6 + arTESVou/cI4XJnPioaDBbGOw8sem87JPKlFspkYwtJFNZknPLxQzdY6bKgJfb1F/BbbU7vt6Nf0qsU4 + dS69Jxmi6HfcmNg/9Nc6C2gEZMX8KLvMezIMyLJUlNCg2clHjaAWzDhZLc+st2891cAnfBWASYh1Jie1 + e6KB3UbdU9qNCH4VLLSrbblzWHXH+8DQ/K9Y9MFyhCUUZsPhqskYBLlsHIVzsZ+igr/VDModethP7Y9t + +DvhuSkWRLp7NhH+APWB2nTXDZ2dikndysjX7oxLPut6SKTQYLwODkxhgO2/DWhM6fXNGvgqlIWJ8yss + zijUtULYiH17VvBnJ9rNy6d98wfSXRaA17dA8S3fxYnPohePCGYzmtzcbj2Hu9XftfZ911fgCf65fU2b + qP26Krbc/Rvgcfoaslp0NP3f/0toTrap2z3ffjdHfxZD622vuHmp7qPU/03ULrWTCK7aw1q2mZLfF3TP + 9d3dnYHiJH5omeROVw0xj7PXG/7k8CqzDt6Wpec7NNvYtJqhea3WQt7jwS1WZs7gYDPjyWPkqy2GZt3R + KmraLq7hYO4sQTFKWHCzU41St7ahi9eAMY3+3YMu0y0ufjfavAZR08DKvfQNxXJ1lC2zYqytfjwuwYIX + hVIM3OhJk5526ByCrVw+Ukqr39dMvY9exbdN1uIkzIT+lIqe3Z496qIuw7LmioUlrX4R6/bbFv8MMkBN + 54uuPMf4sJYnzlwNp4XW4XRNuxZJvsewyY1MyyyeEYiIsM19TQA4p32WPIaNvd+ehhOTTyExMTtN6nOj + XWcrT4FF76lc49x91ml95JSeQrDOdP2eMhG80IMdkD/OTfWOWLtOmpIO7XL+jrN5nYftvguepMx+pX6+ + Fhoj2aO0weQei8yp5NV53dZS2w2puHq654/84uMa8ks6pVyn2Fjsf9T+O7rzbPASOmyffSBUzvAHHe7j + 7jRXAuFL0+++/PLd68kaNtdNf50g/8RBjRBXjqMPz8qODMaek/ACesJD32nI7ZIxc3ZYJ8nz2o1X6dnk + 7Ok5/VYEj9nwubVxr/JbgvcGvhYHWcYRmcITes7RLWxyG5VyAul8dcB3H8QrDbW8To9gvab6iGQFibs7 + /fb25k0NjNuJrrw2e2yUHWeI/xhk/rywje7gLcRuwG1mVXnWanq/+KYWhVEaTMbuKvpdrymbbPakL9HL + c/ebYnqGD8G3zvfBr2IbX95FbUe235OjXdNPhZDkJfDi7ivHxOQgHO3yoPxpU9y6HTeYGdMSq/D+I2zi + Dm/71g7Luq5rJ/5pxH/iy6+TVz+rcv4EPQmR82f+nQ/x1K9ZJE9bW00A8DEidfFhlJNWC9xU17TYNqEC + uWvDwKxc2VVs4TGG3tm+8anO+d6fT5Ydi4QK/pClFOnIaXYWoeehmNtEsapkcrh1amFd77gnJp/RvGUs + 6Em/NSg2mGoQpN54Nxwnoq/++OwECUvMChEJj/ZMtAITIUemjJYefTKuJiN1NqkshTo7D0NJf0j8PusY + SlklHt0Yx5igUj8IR1tBc293e5FONB/aan0VJxeDf5OVBHG9iFmci32kp60pMhvxrtWgsSs914y9MRKr + Wf/OuWfUc8lb757+6KrW1bbWqpZNYzWiENsvbQFYzwXBVQYRiKEnB2G3M/GMQOB3byK8hhIGXqSQUSMr + hRIrdlQSMgeqifqskAxnTuQDji0PvIQZqRpKMu8Y4lj4Q+azRpB6WsBpI6jIojN5kcLkYFsLmzJyIjk3 + 9AzVG0GtquqDlCjXekdTVgIHKKuqp9FGQtHZo2wMsGs7dPUaZi63tzeKZNLzha0nL1Ob2jjbL2mntncb + Iq4rMJQeR1lCBhac4C+RS4M/tEXb2BHdxQU/F1MMY6ywcMD0qkzrl0skzYU3QdQKOvQFsJhrb3SHbJ5Y + cYI7t84tXNQwz8N1I7dYyvcyD0yyPmbs9TX+xlJDVNNQnnw7KYDVQZZ9bjUW7gqjZ9JBTzqu2hbr7Xa/ + zjz7arxgwAOAX3c/ID8rN5MvIQFD6Y+vX8ICSSoCr2IOu3ICZNBABrlzDbydnHKFOITy42BCE7Ab7MNe + RqRQO87YwjDDzBa8qEPboMrjsbNKzKVGE2MyzLzM2tIEvBv72tEt0l6Uzhsg58PxH1lquVCvyTTkqaX6 + yiCyNSMjlFDJQu4SS5IkfmPPleqQvKwZIoXUDkvaKCxTy31gCSRNWyiBMkoIGxRpzizJmo2dqLJhk0A3 + Bw1ood7AZIpKOjVclBM9X7SOMiL82QrP9o7EkVABsZKMNQb2dK+vfrD+sHRLQ0yz87jgMjVxU/k6JekK + UHu80L4hGwr1Pe8UnbTVNk89U6cmm0vRFLKGehVNpuB49Q4oBIj2DmkDkNbaa7HNVtttue3W22/BDVfc + cckt19xz0U0X3Aa+ZTceBdS91t14pxW3Wnrxzdfbee/V199/o3XgWa2gUZalYJsFDqU9mFVm1Fv5XKdS + XXURZVJMnzJ4SYTTeEnF8GR0NFVA5OKwHJH/xKZZFVj+FEZXOe4YOF88ZcYyXHNF7Q1cKN6I1aVGlvTN + mMnwuGdlhiInWT1FfYhkMPVrotemXx6a6MoopcUalJXGKdKQo2LyaYHw++9iDzW9eozvwizmrHf+cPs6 + 5KOFoZuusi/Nu+pC1Z5OKMhq7mXGeayMQ2gXPw7L7qzxRibi7TTOTRroNBoGUTF37SgLBClZHNl5zKZ6 + b1j79ptUCD1P4+Ok35YbDpS/6Tx1bTSQzc/RSS9dythpmR3soDFHNb19/BrY9fOOiRp43LuLPDSe69Y7 + ZwVnFjTYzTF4wXdO5Iy65cz51p0alZfX3Di4hJ/SSWC0p8nHBQa+vWJOxd/9TvkhhV0i8gdUvzrUgOG+ + YMAvONZrXv2qRBgEtud++kEKxTCRk0rxwhIELN/8crfAPI1Jg7+K2eaqhb+dfUJg33sccpz3mUNsjytU + SqFSMrCD41knFRb+PFv6MqjBlFFPhzZ5oWHwFL+/VaaGTXvHD9GARK4oZIZ1qY8Ss8aYCJ6OC8Qo4Q3R + ZjUdgg+LCyxYC/8nMNTxjkU265/NTHhCyW1xh11EYOIGoYiqXKaEU3MKVVBhMyEeUYtsxCED/VinRwni + a3QDkgrepcc0GhCFgcxSE4cTEihGsUVOWNsdRYWTBzXSkcLTn9oq8sKkmU5lrwlCHp8WP+doYZKk7GTd + 2vZKWrHSbd7Zn+EcEkdMXoqEYGhlJWW5ihAEUxJuQCJmenZIMQLBDlP80hlz+MqF/DJ/utzFTgb4I4sx + k4E19GX4thinQRKTiscMGwsdGJv7AFKT4Cz+neUCZ01yljGdNCuVWra3yWbsqGGAjN7hIPdGrTFynqwZ + CDr7OdAkFmedeJLTI6g5vjfysaDkU2KgXHbJnzxMnkCY4PvGGdD64SaiTCuK6zCa0Q2R0QouyaUz1fg8 + 8emvpOZDpVAgIRnPEepZ0enn0qJ5PYXirKKuuCn/EjErjoZ0SXNiSg3aST+OpbSNRQWZJTcBR2ASMo61 + kmBVOYkwpZrKqiDzGiQ7t7NtmimE0sviAaf6SZeWNTxy5YNWE4hUKRKvrW7FYFhPhb2S0LWu6Myl02ji + V27CNKaLqanY7EdYa6I1PuqEWvb8SVCZinWrhIUqZa/hptEEMLN/HM7+Y2XRWbp+NmaiTS1DgCpSoUZW + sp8FrWgs2yHSxla2SkqmZHN0kFO59iYdaB9RAYuj/KAWIV0wLG4TW9qXSpd5tWEu52i7WnrCLLpzRB1v + Tzvb7JbVDM/dBXG9S9rjKOe6AVGtVVeYtu6ioWHgDa9vFYtc7XKQupsFyuvqYJ72NhY5E8yrZ6Fi3rVu + DMCCXO99TURVsu6XVAqeL4NlJDrNOla5CR0scJ1h18RcOA/NxCNcKTSLA1OYiijG8OvgN+E1RphyH67t + EIMKm7t2lIszpnE8CSzLyd3WsgcrxDA3mFwBlSbJ5N1ob1/M1Xrq17q+BfKGiTk5qRoZEUguGYT+fyxR + BOM0x3xw0zLB6t8Oi5nFuGQvibs8ZSqrULwyLmqILcxlLjVGzg+ucmBXfGfaQVnHOe1zkGcy4KU2uaJD + JnKUz/RoYfRE0dVlkGYq7YuauHjPkqaMTDL91xQHuqCbJrSZWwEvO3M4sIcZM5mVLCx0HBrLSAn1Ynlw + 6+WY4NQJ2w2o34zf/pp2nlPptVqvSelgt3rVWT4QmPcsOGDHmsaMLvaT+Vy0/9rT2qzm7Jcbzetla1ij + NJu2j693YifDGtqyNne3+RNXcF+b3e1G9dasousI6Bsv8yYnno8tM270C2AFN/jBEZ5wbhFc4Q13+MO3 + xXCIT5zi2ZLYudX+DOg0O5ul6C70NPrqZ28ze85CrrfH702QfNtbuRs3ecf/DGl8w3uJHyz5K3nm6ZRH + m0Mrj3m6Rf5yvf7c3Rx6Cb+hqXFEM0nnK72lR7+i51wdHeVbIoeBikXui4xCSHnu8c4rh/GRW52iz8jO + lUML84yDPew0hwnS5xD0FQGIcXi10dDX7uv0UJ3owl76mGLpUa+XfPBs1/sD+U5nsV69ejdZmM7LW3jD + C5w6If+6V+A+91pflb6PXzDdWb7QxVj+8rb+9t9FTKkKpl7Gkp885Z2Y+HgDHfVHllV+kS3ccb8e8f42 + vZXLjm05chDy/wy4tiMpe8yTnajP4aEc5SH+YR27vui5T77v3+531UPHS1kFldbBTv3Djz/0lm5J5gc9 + kl/qLMCSlmHTq2/93f+dIOj/mze9jO979u7RMoTJomrE/vYN+4yC9ngk6dwGm/avMMSv34hN9ProAbOv + 1fLiCaipAifGyOCvG1IhAJWEI/RNAEci8GrKSxSMtf5Pq0pEBCuk9M6PjR5LaiLi3hpwnZLBA7dE+RIN + BhFnPOxufGqw326Q53LQ5TqCBdmsHgAIaBImCO9jCONPvuTuCLeoBDGEhULngQJnBa8GBOcCCXNt9FZm + A+loIriwCwlw63RI32YoC7UwlD4uWLxw+TSIDUeIDMtQPeIQYeaw5hb+SNfyCQ/z8ER4jw+NcMT+0Inu + 0IkWMLjIr2/6cAcRiA1RShBHxXJGBAyb7TxUpxA5ht+U5v5+0CAAyMHkr34i0Sc8UQ4/Q6tWpwlAEZZU + bRWJJhULEBUjyVNiKR1GrzcyMZBskQrFB/1SYyXoQRMA8Q9ID7GA8eYWDfl0RxMV8GOSkUU+RBOd7q1e + cBg/CArfEGSuMZiCUQ25capErXLwAwt+URwPMerKccnakRTxAwGhkR2n0CCwkf7SQx9gcS6kg8fK7d+c + 0R1LRxqJZa7A6FPCUdDukSDVRhpvpRqjYkLyEfY2L+0Kstq+IYaqyS8YYSHhayDXoSLNLxenIBYdUIty + qAok180F6y8jL01RAOcImGsmG5HWXOkaCgAAIfkEDRQAAAAh+QQNFAAAACwAAAAAWAJ0AYH///9WtOnw + 5EIAAAAC/oSPqcutAWMQjrqLs752+w+G4iIFowFdZpY67faenEzXttLdcq73vhcBRHgJ4u+IMCKXzISE + FmzEGFEpaHpUNrcnLXfh/Yo/K5Q3PB6h02wyVlQlyVplcnPdzhvwYr6e/TJR8XfjR3gYd5L4wFLiuChV + cndIiVN5YHiJVBWWqbn3GYqQ4klSZ4qR8vZGFXSKVCraE7tEKzsSd3brYbvr09IrNPWowhr54AqZ5ZsX + PMv8xTkIPUONiFnzJCxZbNUaqGpi/ONszftZbo5cpqvOkO5+Raq4/fi0ymp/YC+uzAQfrwHAGgPNxegU + sEhCPf6A6BtVR5uweg9RvBrVpuBC/mzoNs5JUs2jRo8cLmoo08/kxH0R9XGrp4LNyI0z1ZAMcaqdyJsy + x7lo5Y2fI5bgGqWpuRApCKWfDk4jyZQnNpU/7iXDkmxlTJlSyYWKWqkOQqhdx1CgCqOhxKtEYzSkBFZd + XA1zGYJ8urPsl7NoU/kb2pbOCp+i6lozHFIvRI4CeSImK6RJuFdWdRD28ZhZ5saKMTIGI3VzUhRLoki0 + uC1vZ4KFV5P+bMmx6y0WLsNBubavO9G7eCvs/GLsTd/qIPDQnc2tZK6zd8gi3oNdYtXNfw19m9yJXuit + u3cFNp16devEmChXzL3j87LiAOgcPr5WYPPakMdLr/7r9yHh/mnGh+UEdnMAtoV9hfxnk3cknQZaaAgu + E6BkL233YAj4uceTcf35V+EzjHBh22gdnrPecFRdmOCIB7allWWRobYaippcKONJwsmmog0dxGGgPAJG + d1SOG9DokU81LiWkjuWFiBODFCaZAZEBSSBAlVZeiWWWWm7JJZZmQUmDAClRVNp/R8KFWZdqbjmlkXut + CWeccs5JZ5123onnllTmyeUEE/AJaKCCDkpooYbi6aFBTt7V1ZnQGPEjHAg6egiKlE7YoINghhkgkzhN + uikGUlKD6W+NhuocRJ6iGhurmSq4S1acneqqhZ32WCujuYJyy5lDoEXpkLt+kEOkw5p6/qylzLiyIYfH + 0qVqgQ8GS4iyvjCLF47PRsniJou6Ru0fROAqX6zhZKvtttOUal2F4YpLBZqy3NOsiOpW8y0UMLp7r7Wi + UAnsk/euS6481xYM7bYypqeKeyeiN/AMDXsr5Lt6+HuJJGLu0yqtEX9TIML0aQeguhiH1d5Zqemq6ccg + lylyGjHXy+rCmjArJqYW06wuuy7OnO6zJxMSDl8M7oyuy/nquzKp5ZrsC290YHguy0G7bJEgvxAFJtIZ + RY3yymNaDR/WHM/jLdAeKww20YNpfXRnXqOM9kkcb93c3EHa0Yfbb9d2mt6vmh0EH2ofk/fAwRw+OCBv + 40ZmsSzZ/ms2TIIzTVvENudhmiC5+SkU5UprHOGDjPNcc9ttCPa4KbK+GNDlDD1R7NKVy76Xeaw5/je2 + ZE+eEO68MypYWoprXianjrOkMhZhnP7l6IkADrw3LW4E/axQ9zZ81hMjK0fs0jvf4nkwYS185qpHg5tp + HaMi/sfGqFz9ratl33gqSW7OfvsovY+M+EXMHxvzTOVQl7r1SQh8OfHLqio1QJ8M44Ci+liNmJKLAMIG + KO544IjY5bu7UVB7/ZIZkkIGvtfwqhvF8aDp3tIPko0wacnSTMga+CEMGUWFB0sSYUI0wRnScFgXROHv + pGM3Y/3BhRnKx9hO0hIhDpGIS+TW/siOuMJGMHEMBEJQfSoChPpJEYBsU2C7fvciQ2yRiz5rDj+ux7fv + jTGFZTSjZXAoBz8kYo1QaElKbAecLu5AiQdMX+7saAPyocJwFyFkdGLokgqxRUcwwp+rDKk+SrxBI1PQ + wgr0uA6/vZGHHURO6PjIq6nNMX91XCIrBqLID6nRfrMLnQhLWTXXAbILq0yYBTWZyyzeoJMcnGWnVgfG + 2uFylN572z96acVf3uwVAKEm/DJxCkdmI5qkPJhbJtPGkkFzijWcJh0VgUcZYjNaq6ugDKGBlWZa0p05 + hCYmucAdYg4zndXDZgxhZ8LwzPOODBpM05hTunHqUJpNCc4+/smIRIPdUgyEGRcq0/aXXYpzMQpdKEPN + KUx0plAafVwePdn5L90Ec2/13FXM7pnJpqCRb1Zz6DZNSkNtggiKOt1dQscJ00nM65PZqalNBySzyyhB + o2w0EFMxQ0GEBVWooTgqLvgJUI/igqIHHeJTjViM8iCUcCly2YXA8xEGiiWR/SNRJAbqhh2iNHoHLNhU + nzlUE9hCnwYMqaTAKqywhkWuHB1rZC5aTvTl1a8wAOBai3pFYoUVrlD0C/wMm9WOzo2y5HQlYwmrVR46 + A7EcPKELSHsbFsSrGSRDba7u+rSqRjSuLOMrUktjVwdyloVb+SlLUePa6pALtrGV6Wd7/itM26aVYiJA + gxztor9jsvZ8WBtuIanhTwaS8a+b4KXdENEXcOy2MbIKbgLNdqZ1Iku5Iu2ud1ULTN2a9xx+nC+qiLvR + Xl1Bu+f81BG2CMqwwReCjRyvVB6IXwjZ0HjEiyXmHqm87w7WHDkLX0dDi7xHhbHBrOTuHX06YPDKxSQG + /o6trqthCa9wky4iKIhD/M5ojLi097IuihdsWeJ12MMlpSSDL0vREndBJfYFzolvh93KcgQS8DgcYvVI + ZCFntldRvnCC86vf6E7llR9mqw4CvJj24DS1tKmylSmY3hyDYn5AGuaXHbKO9gh5jZQ1hpQX1Fw0V0XB + NK4wCR98/puebjde9c0aMvcbjQICuWd51nOKrUe1ziIandCDMusK2z3ZTrnI92v0jXGswT2Mo5rthWpa + 6NXSMSNXQsMQdIY/jcgWKfodePMR/iz9rTuL0cLsg9SFB/3qWK/1YWe0gyU9IWZec+5fvv51f4+XZF7P + esdXnTSWb+q2pozL2cAuYbQT6mdaVwVXAy2IrjEd3xjLL7cjdJRFmXeoNf1pTvOOt73FdG861Tvf9M7S + nvgN8IBryTgCL7jBD45wLeWwov/tEVzx4PAJT/ObnDayp2HNvdZqTdJNoum1IVvFhlYhnHOE6XjdXTq9 + nrTNjcVrrbM9o++dO0dX/jis6ICG/pE49eENl3gl+KIqkm+KiTXnM6j/tnKWq9joylbyNWZUvpG7z1VE + FyLKz6ZyBPJYy0x/qCZl2jmhfLWVGM8yaYiqdf86vet9pe1qd2pObrBF6JKMsKMfvbKcJ2/tXvnJrt8a + 593OHAcvcck/hz6zorNdQVYV93/hXFzfun1fgkfHpavWOlQBTfF9x/tjOd7xlkce3ZNXYeWhHoigT6aX + nE/U0TdI7VLDuPOh/FSr97XAS9Rm12IdY+vffBjQsNm9fKe95BsbRIrMs+IkmhqP6G7WGVLKCEZz/LhF + P3rcO2SPGHkihKF+9j8+jpllj37wGTF84vM2+1pxOPdf9n1g/rYPuOOPerulT2HXgX7rb3d57W2tbt3S + ZfIHOddTEcyXOPj3bRahd3u3ah/nSH/UdhFyOgioRVH0TU3jTHfHgQqkIWn3gFOWaov3QOP3P6eFWBbo + F5CyKBKogjGyEC8IgvDCNUlHD8cXgMbnPZR2gijIOIPHNZ5EXc0ER+Z3f+fHHzbIfyI4gSSIVD24fpSW + MZGxVBFxdmQChGVzhNEmDg3oZSOYg6a2Z8WTRCJzUVDoBlnHa5dHhOWXEDM3faPghcvVdGAohmHIU2jY + DQXDae6nhgDlP5A0ch2IZOdnBkooUZTBddk3M52zfSp1adLyiJITGCY4NlkoHoX4bR+4/n8h2E126Hp/ + d2p6KF9RhilZuHpA4YjMkmyaSIgZJwxzqH7SFVMPtVLGgw9jB3mBhnbhI2efU4TB5kU6CIsb14lqNlFN + yH59dHiI9nx9qIxvNVvHIHYTgYnBI0VxKARrgBT5QFeP9Fw0VTyuFoVp+Hkgcx3iJ4Nr84r6xYl/1nMB + RI6IOCAG9YnYd1h1FmjdNn8baI3XuFUXk43594fWh1tyoIuSNYYGpVOtBpBB9z7ZZIkU95CLlh//MU9x + WJCx94UUOI/wuE2BGJCiSDcX4VyCNDnruGGwGB8ZSZAY9mwtpnrhGIqkt4s0KXoqeYEmAXGn0TDNaITt + uB4b2W1e/sdDZLh4PRaN8FWREEkFPfkNSGlWTSmJNZlx3ChjE0WKK7JnoKhbeLg8dgZltKR9wnhgX5N/ + WAl3WZV6NreUkEaSDuSVSdUXPRl2lEGVpEI/brgeaoltHJRNb5kqq0Uui5CXzMhNfneFJOaKZzldSSaL + dAh/uGdeXqBNhhlIyHGSfnRa6EVm95WW9Ph4P1WZ5ZiHgakXIWKZydeZimV1uyGaa5mMXEljjxhFqWkf + QviPl2GBh3lkW2iIIMlFc1lWDVeAKuJJ4ARIBuabpjUbuxUsfgldNml3iMOLZXkTPyKEEoidWxmPeAaT + Ohl/tQhqwslVYFmctRl6wYg9tlGF/vZIem0JIs2pkHX4hupZneVpkLK3krP5YvgpUdbYRKyJRSSGl7c4 + i1fjgBnzkdGZmPyJj0w4mJ44eQkpcgKimxbJnbLZMoAlN2WRDh6kiMS4kHhZJAjqWPkyouKJPceldOAC + okYZoBI6oTCzCu1JnSBxoOqpSp45kB2qlJPmkv1TYG2Cgzo6o69Bn7Hmmgpabbw4pMPZf6RyoMSmfHKJ + kx8lXEXqY076mT5CVR5nbUc6L7rEZTs4ijTqbQn6dP43nfkJoRd5aiNpnylVZSzGnqDVmC+3bPdIotiY + SB+ZlNRIbmjBonIpX3fBRARqlnvqLMxIlaXAOiFkkcRZS04F/juoNF9LapWtGWT556XrWSJqN1dTaqpT + yJuXeKiX9KNaGJIsKaZg+UN2mqqpR5TcZp5a+qgdqR9f6pXh9aTfZx88QoXLoauKYWDEITIhuqr7uYuh + Vqf+iUx8iKff2aip+Y27+hF5uVeKGa3YGaE3aJvVen1BCZzaelujGqylmqN+qqd0moczOKfmKpSwyVbN + ypGLSJ0SJIV/Ga/H+GPH6qhE85uICavXCa1xqaYoGKTzmquxiq/2uq5Qkk+4wqwRG5OxCq5UYYaNWKhL + w6yv2aroulUYO1OkKnl2NnsyGldWCnJ8Sa8CFKiRyqcpC5en+rLbF5u4erJ1V6OAOrM0/suf48CoImSi + lwVEFqqwZ+Wus/F76LmzeGew6tokEgl4ouiPd2OoW0tabhKoI6uAJLuPZoew0rpHBtqwZCquzgqvnvpa + JQcZM3uwokqjt/etS6e2ImWSLBuViSWyouOvvRqS3hdnL4IVA2Vet1gOEkSprOp7mRi44De4NYgKjgi1 + iHq5dJuxAWumnCqQmvdSt6CZxQYr5YqQ4tWuZbgSy+eyE6tLawomiSe6uoFfpEa5UXl5WzSpSvuuMJmG + W0G4jjt0cCpg8iq2YyuttEgmEAp9rutRH0ugJui3UAJgkAujBGWF/9p7OouzNbsjGtWjt7R6Jiu4sUu8 + oDoesNR+/qN4FdgxojjVSZ9TGcATXmB0t9VBC54brvUJtDJZvvtkPqW4vXhLpNOjFg/xQ69DRc5bJP8p + mNUymqUro8NKDJd5aN6quUjbtR/6uP17r2T7oh/Lq1kpjWLnk0nbvDRXKy60M9VEvr5Luj6opAijghI0 + bT7IJF/0wrpHdQvLtsnbBwknxENcJUOQM3Ayb0ZsxHVCcALXxAP3xFaSxILyb1dCcI9AxFmsxVusJvtm + KF6ccA+7hPJykArLTilsxi9aqcFbtZAwkezqtHA7hW6VvvRhtUrWkMzJsbl4m7amsr4TdnVsYhA0x4Gl + xpLLpqZ0nL4aWfpXwhGIkh/iJCC0/sOGTHU25sFxzGqXe4YVl1Ggo3ptaI5AOZP1q7W8S8jjUZgFK7H4 + e0OZi8aO/HhES1RSOcM5a7h5qnH/U8nGO4x0LLOurDt33J9+bEkwtGStKE/U2ppMlYvHa75XCLBymoB2 + nLfv9COoSR5aBji3F8vLm6i8lcA99LTR9RZeU7uvnLmmt5x9PIC99Z7SK084jLYJm2rXUUmLas3HYiDo + DCoeqsseOXauZRvT2FXLq44FNVnfaqAoacFhOiyjC80C46E7JwmrHMPW826Ad9EB/br2jKbIeLu4hR3l + 3KnoK8jzmb1h9M3Z475k40IEbcKmyLWIa7n5Cm0TzY6b3LSB/oeiN/u1yJWhYzpuAwyuj2ysffsstBu3 + whxki+y2kXjQaVx6/6dDz/d0u5t5qfuVvIPVmueuc0NccxHAbru650PTVI2QUQh0qEseqYi7PXi2AMxS + XxSzKPtb1cxGQEzPHR3Xc9276KZoRctTtNi+H11Ybu1i+FSJPy28Og2k7PPAhFZoDHuUdl2pvuVnR8u9 + ylmWdsaZlHfMNwp89uNE5zXChxQfdUHMnFuP4tWCswoepLwqEmkVS2JmhyuoJcx2Pmmp/2y9MOhzKxun + hlulXd08tn3UpGmJWKfMHLXbpYZKq5m1b1scOB2qSVXMspnCtVw/JQgYU6e8KYfKAHw4/s/Ty9Scydc7 + 3BR6kEXBYINNkeTm0d3XSDNc3q/dpVeb3hC8LA/K3u0N1DzN17KkzSE9n2a6zgSensqnwI8tuso41pqm + r9bwSQf+zYCGbs0qaL7GipPdIcFypikNUhhsEKK2y/mNn54SySaEYPDjffqbrX/FWTxpJhFu4u1EU9Om + nDIYM9Ftm8azVOG3Pdv9cze+WN0rpSt5w+TXQkBuWaYEG0tCdpCd3SJ2v//in0aNS4DAySttyqEiO73Q + 375B2r9d4jfs4M9t5DC2qAjozUwon7rc3zMeK1Gb4yDsWegHSVMyhCk5iPtlhgdtLMyXG8t8SrYD5YBr + 5a46uy2O/svmfcAgXtRkWXz7LIB1A8eF25K+fJ7ROOHw9IuBTNzL/WUsLmW67Yd06XxOcc301zU7HeCK + Yr+9gep9GmZEvdcQ+b23LuORO+aSqZ9Oo+C2Png0/FU66UQWmuEd5OkS3OZ67k1hPplHUefF/qxe/sNx + tD+yrrHSbi5SroqLPs2H3NNsHNjGSUBeVt2rLRcAzsEWTnLVGMrb2+FtOpctTe58/uzzoeIoDU8S7u4x + WKjWeaXgjCS9yeabHrSCx9R0fVjT8u7+OVpSW0pvLdWmTjCnh8N2PF4PH7j/blybi8hiXOolv0zkyGnf + q/HZPlmbyru2nNk9G67zi6wuCu00/h/ZBC/Phd3sJj+udN6PzFXfP9HO/c6j+57KwbntFJ2d9J6opNVk + cG3ZCK50hF25h23wRVm2Vu/DFj/sJH/l7FGY8GnWm1vQmN3QDA9oyWbRql5gNl7Uz1jWzo7z/4vdTa3K + YOSQhyd1fE+spezkzt3uhkZ8gy/4wIqz5iZISv+YGiadmvxBUK/DDJnoqzt3M906kK7kyeHQNL2cA65M + kv5/Z66XoYnneh+7Few+f9++77jmclfKlH4z/5rn5Nq1kwzVfq7h8hH5s77CE0n3M73MFe74C0poBNxN + xwGOB/zrOs/DMHz3Yx/8tuR4nD9XIo/rAFrt4deLSh3Uuxnc/vi+QpEp3FFlyY8ogAtiwkkK6w6T1rZ4 + 0+ttduYf79DE5et3/OAloioravtPAHAwDq39YZST1iiU1SBv/4QmrMbPPFGzTNnWfd1ukS3GoeFc35tE + SoA+XqWTsQ2Rk1WSV1pemFHXU1q1soIAzLH24F7BUpzX+K0GjZzWOEwNn5wa97tNt98pQnPkKMT/X/wg + ZATBCtcA5+jYQETkAOkUISejsogYDinF9lDQhLYs8RQY8zQlNR1TD6BQq05be2DhzGiBZA0rswQ5N3n5 + 1CZfcUkaiW+ThFt9j4vJaDKZk5ZzMA+hpa+jkymXTrejN77Bx1VvnKfJ17JzQDlw1nlC/vPQr8QTm5XS + 2fX5LV7pxWDZYSuKPUOkeiB8YxARi27++k2JOBECQyR9ZgAcpMOGQokbPALSyMTiRikPIVKEo5KlFk2e + 0AD7MLLUqoIeOtIcFBIkz5v6aLwqyW9oyz9FYRB0585Tz4GxfmqImVTnD5/I+OHwZtQDUq6RKBH8Ui2b + PHVQSZqoOgGe03vpVmTY+vURXX1eYzAd08dWX7NnZ6SFtFYWXlc3FMy1S8Hr1cUrYflRihjm3xO7oj7G + Y/gkYpfGNLMKzYxzjMpSKzveSUbwaJlWSmdmoNh1udqtvqnG2bZGNdPvdKe8PYRN7NYLaN82PrzFcrWT + AwX3zBqJ/nPmDqw3iYVA6PXs1z987y2NKnCs4A/fZZ3ctXj0wkVe5F3zV/Wv0ne4f/EkAfvR+t/LJ6yB + oEuBE/wkADCXYLrgZqMA/AtNwQArGpBABNEySTu6RnnLQAy72glC+GqbkELsFhzvQqYa+sG+xeYbwiLC + IFulPxLbO9FDjpqi78IYNaxvQ7to/OjDIsMxh0XQhjNRR8Om4gVJL2zEj5Qi9oERxBSG4mLLCqHqkEnl + dNyMx6UI2evLMIEM8sEpnWRiShT4+9CmF8UcJULN4qSwqKlWcyaeeK70bb8yZXSzxSzRZGrPx/oM8M8C + PUtzyzXvVLG5+zClUz2bRhGTMe8Q/rWjS3pS43FNn9pEkSvJ7og0RELQFMDWW3HNVdddee3V11+BDVbY + YYkt1thjkU1WWWGBALY/W5tdFtdnpb0VQmKvrVbbbY+lNltuwQ0X2dcwWWpU5mRFjyHL+MDoNWouvYqw + dAMBZk4V1PNSjWnoTa9UMNaltN1OraLRMfz6RSRUgsd0kcFMO+SX1H8BxoJheFvN0C0uOcUSrAYhKYHW + UEVOEF2KKz4SHIFBnim4hOvNNOWZwuhgBKX0eNQumEt8LjBy2tQpuIvt8OHecA6ONaPpEmv4P5Rhe47d + W4DUbWgtM1aZnLgC5Q5HCaH2d55UgXrGGtWWYYRndbKWuu2D/pSk7ACd6Vr76bFDbUkyNobWzW4DF5Cz + DJaVobXrz84lM+zMRLSX6CvYJUzo0N5mK6PKzzB3HuS+5nNxxqmbOqICrXTsb9PISyjwd2EJwePQm068 + 58/PE3JpDs3LC1/ardJ8xNVviYuRjhAXcHbeh1T08Tv2TqpGLQXPWePWHWcrDbq/On1ny6mknHCXfTRA + e62JS8hr1lt31+HZOl9s/OytR56I+fEhkmCM+EL/4TLoi132u+XHqEAF0HZJIqDqjCay5Tmke/EDhiTe + Z6QDbqp3E6ROiCy4JPHFjXrTqYlc2re9DHJsgCOc3v8O6AcMXMZUF3QgCFHoORM+74Qj/uRNBO3kCsNZ + boGu4uAHN+g0982Qhpojov5M5pqjqU58hgpfAXdjvMuICXtGwaFK6nRE83nESQvs1Cf0ULoX1XB9QZQi + ALU4piWW6XsmWmMJa2chMP3wEg8MIfzSWBcj5vFnSRzNG32IkxaexWZM6uFC+AgRzPGOE+OzUmcECcg9 + Fg94IDFXFm0jw0RebpHyM8v7DllEJI6SKnMkpBmZiEqwbRJNMGQl3jJ5jLVIMmFmQIqolsCFK3qKjwXa + 5atsAMpMKIRh42sMFV1ISU1aME+k+KXePgEU1knyjqY4UyFjOERPFqFHZ3ylw1QZDf5tJ5S2KaceySgV + mdysOMdj/uQ4w/PN3rhSLUVLQzLrsTVFuewIrmtnjlJIQnnO74pOrOTMNCUfP14zFXt4Zjy3ycCBEpQj + cKvFIbdxMbXtE3x2FGLdkNe2hxrFa6yahEE1KDbS4HOK6/woHlFGlkNNdB7+tGRY8jYoA2oDjp3AZTVZ + MlJskBKDNC0YzVCB0joow5STtBM2valNin2vqEYdGFEdaE9qRrWDQ4UqV2FaKqpC1Koi6uQbzkrWJy5E + oy59qRVj6lSJlvUcW93Ex7ShURW+Fa7/WqJQg0pH5GkvOz/la2Cnmii64uOciOWpYKMjAwgC1K+KXWw5 + GotFcOTyi4bNJlcA+5TkXVZ4BySs/szkI9nDalasmAotRYSX2X6czj2CmCwaddSp10aEP7Ilymb7GL1Y + 1k+EiNLtZWOZVkiNQz+2XS1sxTpG0nKPdrQtp2fB2lc2Snexc7Ara0lzXV0+l7fGxerukKuInKCMtqLo + J3lna17XIjec3fsuXIDLvPfC97e5letcp4s333b1GK7TbyBFs1z/opaCAb7EgHGT3z/s97Mt2a1P9ZKf + 9KIGwqho72C+muDiUihvc7owfhNaqr+lK8RNHfF7dKGDE+szxWX68ElbTNywBghQM+0uatj72JcMl8gW + Nu5Yd0rXf3TYmitNKj0X+mIer2nGEqbfv2485PoiGKTm1fCP/tVJsRXLIpj8RbGXBWjVJTP5YQWmWpGV + CVq/bqnKQh4blu0cmS3DGbzbTbNRhXFfKxcmlUOuYnxb+2eaBprNOyI0gwezZ0n3ObcgqrOTayypPL/5 + tgo+MgwuHbwoImrMK5t0lUN9UwylmsAtO5HdHOm/KO+Yx+ms6qJH/aRNy1LWIpZzYn0MaEGSGtNAizOX + fz1nCeIayG9GaKvH8bvsUhrNAhV2mG3MUaVlRdqz1q6yATxRRqu42EDpdJfjGu6BBhrPbp5It3397eiq + W55LJre73/0tce2b3/32d7X0/W+BD5zgxgp4wRGe8HCxBN4ulrefrS3uTL8H1iQ9d7Ir/hvxemM726J+ + lZkHzUa/qZnjry63SpZxYlbXU+OvPIWgT95kToE85gsWJStffu9HE+niRoaaavqkXA9PHKnUljmMFKHy + n5vuIN2E+bOh2AmfQ1vKOjb6idpkHar22LHg1LXHcevwq0+Z6dQQlM9EF/IGfn3nf+z52El8c7chmcPQ + XSvFwV6bhiMb7jCW+8aEe1MHXZXYbb/N3vn8qYyjl59wA7yjg8v2oavLmeiu9q2JHnhYttmDhae6ciqP + cZH/vaeQS9t5o8ZSP+VdXTT/PHhaldH4xI/JnA3y6082bcVjfeRbzJ1+1ZRTzqO+SYZfve7PHHef6uI0 + J5Xbf/F6/lDJH336Ykc07+V1bGZw0xxPT7D3aw55k1d492Qnpg9waLQ0pXTb0Gd42SN8e2+XN9FH5TvV + SFeuo3TefqQfJNSSTvSwzy/GoKDCSA88BPxMDyASZuVaLvGYK6a66f5WZmGIZ//Yj0gyMN7ET8xcj/oI + SKjMhu6+rNEUKiQacLDIL/lC8P3UL+3sQwFrxv0m7f94JwCnzrRQjpvWD5FksOkUIgVbEPnU7gZ3kFJg + zsAOT3T6xQFlbAWL0Ai9pw5+EAh5oQkz6O36Swf/iAqZg+so0Aa5cP7KT35CDaOq0Ar/CQTHkAPLUAo1 + Q9BW6AsFBguJCAftbgjj0AvpEBro/sUJQScMozBsztCL0nAYvKTXOnCE5iA27AoQl+0xRmIaJnAJA6NZ + Ji+P8FCnVKq6lpASr+EQnHAsyuUPN2kTr88M+3CY/mINLdEqTBHnoBDfVHA4XpD7MqzQrG4PLSddIHGp + yHBRjgMOYQw6KnEXoaddtC/6XI4IWe9zfnE3EILVoAH92PAUZ9H4Ficacy0YgalgoAwDJc4Zca/dbI6X + /khNBBHqNo4c488TK80jbOkVC80XwcwNB9Ecya7uIJCkdqgG88nBrC8fPW/KutEB12sdU08gBzL89JH3 + HkwhuQ12GpIdSc4dr/EhSYwVx8t+fCMhJRKS6Ev7fokbkwzrEC4xxvoRaCwwjCoyIFWiAAAAIfkEDRQA + AAAh+QQNFAAAACwAAAAAWAJ0AYH///9WtOnw5EIAAAAC/oSPqcvdASMUwdmL8xG6+w+GBwSQovl01YNm + q6hx8EzXsY07cvnm/g+SGCoUoHFnTCoXQljE0YL2FFPXcnPNZpFa2K7aDc+iBq74Yz6rPc8aGfHWmMAY + +i+9zmfw+gbS3hc4RMYnqFBoGDjhFjfiIgHZVAephZgYaHn5dcnJM5Wp2XlpAmrRODjJQwWYEBlWKioG + i4ka2ycJMEtrq/iiuzoVyeqpUiWEe/XLq6ScJzO8bESJFU1dvdbTPNImnMoANk1McgqkfZ1jLut4njWe + zZ4Lf/akXSHcHdcGrO/pOu4sDyC7Z9AChgCTTp1BMfxOdGsVjNuKe1EakWO2UE3C/leqMuYgJG+jRzkH + 4RBjYgziE3ctkFFZI3LkHnhFZNqoErOSzS412dABNJFiuI5ETcHcqZPmRaQsDoVkmqwgI1UsGw6aY+Uo + 1CU5o279AJLm1yQcpLIgN+1hvzlWRXUdWyak2a84n8ItVzRI26v2VLKtZfeuj7dc5zKNQpir4DtDllSN + WCLvGMM1Eo+1THZxCgSYj2ge3DjJyqFVZXbeetpHgNSd6gb+XBmwahThlr6GPYM1OtzrrA3kPfkPZbD8 + bJfUCtxLQN2GPhlkPnKCxCsNh1eDbhM7De153i1PPvme45ZwuXs0r1zzxLjfwad3JTptefe52wuOhF5E + /ud+/qnDp44cfWjwd58E+4FwoH3btDPUVwneds6D0pAgYQcVRoiSFnsxdeE1HWLwIWgEChiCcO4A0Vdv + 85FY4kIhgsXAizqw2KJs1j2yoTQa0Yigizu9IaMfPKLxkHEHueTgkB4EGaNM+qwgQJRSTklllVZamYyS + FtrzmBI3+qjlTMxcSWaZV0bXA5Rjmslmm26+CWeccs5JZ5UG1llmBHjuyWeffv4JaKCCsqlYRiupwmST + YYoJR440fAnmohckugClq/TDnoKSztiokTAmZ6lbkcozGoUZhdoJF0huyiirQo7KTmnxwOqqU53W2iOu + io4Ya1Bq0qprppgGuySxtvJ6/g1LvkFIrKqQ1uEeqpxIK2w1bPlyqrEJmPjsWZ7uRG0iZnS7Ra9cYput + tlg0iCK5yBrLh7uZJTtUuOGKe5WOkgF3ryH20nvussw2u+8P384j77Hqzgpsa8NWO3CwZUUWH439CnKv + jGoxrKm6jk4VSzCFLgzxb8v8x3HH2h4sR4rJjkxyxic/nHLEtbL7EcsrxnweL2rJTPKqj+Yba5Ykl2yy + KOd617Cui8y2TcKmHY00hkr/1+/F2BgYn853ab1LupygDLTHppIUGtSagR02G/62RnbPQROBtpewsd2H + SFJPCvdoJWxScCx4M8Q1jXvvenTWo6Ql1OGMmU0PROA5/q5w4nI3R1ptVhs7zRdCUy3wwqkdnmCDaXit + ELH8eC6bFKKDXrO+eAlyzLYZehis6YCdkiblYaBeLOiK044MHsAnhSu7ZaXZCl+wD67H8Lf8w9k3m99s + x8QLonS8Lb5X73aY0nd3aOhpRwN9136IDDvfz0+tR4pMA4N+8jlW1L7771+uRhPofvO9ybgKZycySf4s + kD6BdCc22KCYAxERQIdE0CCfiwz+Dsip/fHvd08yXy0m6BP3oMU2LQGhgBKowKY5xoEUswSXQmbCRLRF + WXU7HwYRR7UKGQY6L6yFC7vXrsCNRSLiKcb2bvgqDYqtC8Whmzeu9rHDrAVne1gP/guRaLv8XUw3VnGi + t47IkE5trEAo0w/1sJhEJarQYBeEYERi+EJ8wGaMyvkLGiuXw5MNg4uQcaFK+icUFZ2DhFPsYWzseEfw + te9FSxldGy/wRhA2DowAM+Q+gFipROpvkT57QfYYxL5MlDCCFFEkJsdTyqiVCiOazCAnrdWIzlTkV5CM + GhP3aMBoNLFUp9xkK3GYR3qlcULNi531aLZCBBZTj+wL2I6Y8MuqvW6QdLBMcTz4kgK2w5cxbBky1hPF + 2b0kmihMISxdQ8xcloI2v+NmNyFJRQu+83TvBE85A3ROPOLgSaQ4wS2V2Z+xQaOCrByn/eqDQUsBaUKe + /F8I/hnky9Y1B0fzvN0v74lPYSoyZw2l5adQCSLuLU4qBPUM7G6E0WfCoyFdcdn8jNi1RgKwl0eCZxFT + RzWUIhFViJkN87AJBS+F05gnmd4TKYk80FknpSo110bd4EAUNMNxnirEUEVj00udYVxC3OkNedrTm5AH + qE1Jp4WkUM+u5gOfNMUV3tJKVhhmEao/JSo8ZXdWtN7irgbdajHhCiqvkgqdY6CYPqYqtYNZ9aooqqVW + m0oVwC5kOEz1a0AIK0EV1SOIuZppWodhjLaGtKhHo6xgs/MoRNrVsTmrEWu3ZoqO5k0cQYnmanmGWgHa + ELEG009W4seKMu6od4wN5lfB/hUezTpBba41Si+ghbEr2jB3lKmsZXNb07xsdp86/S1wB/IT294Wt/DT + ixXjGlSxIhS6RsVdeBdm2tOW1yeWHG96U7udGuZSQxh6r8eae0C2KQMrcz2OE4C3zp9MULSgUTB8ARxg + 5BKnvuYAXrfWWdZ/1s8ODBYfGgU84bD4U7f5PWpjXMbEwkaFw+K17nXnS1F9hu/ADGSvKkkL0eUyg8OS + pSCEI4xVjngTIUM7UvdAsUtfIQym7ehJX1UXXyyCeMgynjF9dzOJazUKtn1zsNl+rEUOeTOTRX4olm3q + kg67zrt2I0Nx1ZhQMWeZyGWO8ZnRPMP4vTbHkhPvU+Ms/mE0V9nKWX4clR/bP6VZ1M/2nWag9TpoFTBZ + ROr97igQzWgXvxjGM420pPWLg5yoObZjwzR8oyxlOZ+lUn6agJtWM6hBuTrWr6Y1nWBNJT3Zete8fjWu + ew3sYAt72LwmNZmhyuY7b8bEiV4cC0u6qaUmEm9uBOaIbUzpSutZE4x7s/BwE0Nqr/nYdXauOPf5XHz5 + j9F/BvSjTS3Njxr73DdJ99uKQkdWfUnTm+Y0UuNN6Ptm+5if3iu+rui/6SwKdfzu9wb3W+ByC1zZIDM4 + 5mjbOG+7VZPiJrinCz7vgS/TzCMXqrO7fQxoAwfBHFf1k9t97ZBTHIwkDa3GW8Zt/pTHsb6GY/m0XX4D + bZvb0PA2sWrNijEtF1DJYTpew3Hq74jGfOgi/zezz5vMe3vSL85M9c+R8gu9FYR0AAxCXra+zYM39JKj + ps/ThfzuPsPcwDKfeVetd8EpIn0XBB5l293ecqBvOeIq3nPV78499lkQx0KfrSO6VMh4OtrrYO804Wlc + d7sT2M6CtKVqZEgbv13Lkn//zNuTil25z10vhtf8wXBhEUyWPraht9FNZ7+Y06N+JLMQdeZDbfkhjxXv + rcVcCfHtzM2/8o4dDzrdp1tyokPcCoyjvVh7LF2+gIMS2I87Bbt/+SWO9vnZn77IUUxftH+x4tNbTVC/ + mXIg/jNf8AAlf3BhZv5HGFb/+DV+vP5aSOU3eZSXelIHagIIfXaXXAj4R0ZWbwmYVf+3PToXZnQRCvRn + bckGgRtYY/k3ZxK1aqyXdYX2B7nEfbXDgQTzdZXXKuGjeB5Hb4gXgmZBUAo3HsXwNOcDH6mEe18TeCw4 + fsQBTcs2L4NnXiDoLbHXIIBFQ4n3F/EHfrz3g96XgZjXgAVVb9pkRNunckJoZB71V7XVUTfnYSziOINT + CukAGS8Xg4yAfjiXZADSeWjlUJuRcW84gAQYdeTWeCnYgdfnhxa1dWRIdem3ehhXPv8QhWu0fAU4TH2o + hdLnhqHBMuShZpRhFRCkSqTX/oU+0zYfBhWZ8BZuhkwKWBJY4W1vJFeYtYZj1InkUz8C8j1oGITodimE + +IiFNYYx14Ocd4iRxWK4KIfLoHuzGIq1KHT+sDfG4xA3dhzCyEZ7IUq1kXyLqDLHhYHhR2K9I4MDwlxz + mAq96ItwgGRcyE7CY43zgIWOyIe2+GzgWGIfUXSC5oGJZhGwkBIvSF53AVe0aIBlVlc0pYkBx4AhWI+E + Qw7lSET0U1rPMH/Z+IsTZ0C1h4TpkSGGUR3paIWudF9Ls2h5uBWS1Xy5CHIMuTsJEy+vR4pQEUU/JFsZ + to/y5ir+SJLuaCOSaIQ4qI9OIhWLxY2/p4JTyI4RKY8H/tlZH6l/FIkUxiGBq2R9HHSMrUSTVYhXBemN + ZiWO9wZNHnkRs5eVJsUb4RaVNVmVp1RtDtiNvYKMYiQJ21eRe2cooQONzgZZewhwn2eUV1l2mZWW+fSP + 3KB6E7hgGulbMPgjXtaGD6eN2IZtKAmUdXNGhlId7eh5bOg3GoYaUNlJvTSVlMl/JemYhShvr9hluLSX + Q8iWkrQzfMYbnbmYfAWaOMldXUSYenUR9LQXKfGWyXOXfXg3mUmVsFlDoYlVefZ9OUlmoUWE6/CVECl/ + VNhoSMlaUuNIbrlSaygk36KbtZk0Kwid9YCRpPmPjYWag7QPSRR/xoZ1cAZupwl8/tkIniKYmONGkIE4 + UZe0K12Igs9ZlaXGE94DZtE5j+ZEj/XZl1vDY5LBOmjJn+RJO3l5eOJHlMGnlSThKbyjkVEUDoAzddx5 + HRc1lh9nkBWaFf5An9JpfJLGdBL3jb9Jcpr5LlLomQf4iYzJeNHHhg+6FEomniAqlcD5msJJohq4gSMk + UBrKT+7Hbi0IiiGKXhLpeDKJnDhKpa2HXzXHPEpqNzGpHgSqaM43oVs5LVNXmTkKof7BoE8qnyB5H16q + mJvVfdtVnlUKj1a6pnO2UBVjOT4KhGFqmFF6pxWJoWlKpgU6o6nlobyge3DnfeAZp4WXo4Nqds8SnqeQ + GM05/pTyNTPIWGFWyaiEyni8s5HkV2gcOaqYKqOjKimJYhtc0KmPimzwlqCk+qJ4Vn/916BNCnQVhqpq + KpqSkQ+gBZcfaKo6lqt6WIC8CquxamosdqKTeIS3uqTFqiUXBqS9OaLR9XyxN6Vpo5zliaWQkpCe6KmX + MUDW6qS8OqaEChQ/OU75eH90WHxkaaB7yqfvpq4XyK4wuS8W9qzMeqj1GpibsqifCmP5enAbGa//hjo8 + tjfrKaC/GlAbd6+pp4apQlddd548V65eSJ6YBamJ17EkUrC7V14JsazLpZS3eHTi6mYPS62BynWJqq3R + 5nSXVX8ou679+Xgr27CRZZ8e/iuiQnqe8DJA77lSOXutdXY/CVdbzRh5Jje0kGaHN7ooJbucFlk0GQQ9 + YueuVCt5RNujn+kblZp3lDi2rXmuNtC1voo711dX8hqAE5a1bFRg0FY+EBcwvfqh+oa0QNi26HaOeLY0 + XTmwfNYCyzOGl/lBoJVvdIobnVogbAukOpuwcFunqfm4/+of9SI0POi4kTiTJDZE5DKQJrMR2NdSX0uH + Timww2p1ZDuDvUSzwVOxqIWyquugQZu2I/uASXiHt0JRc5l7uROPlZe7+iq1tLdz2YWZIounNEhEteum + TQcpfiQWxKa9gWIgukYmuKZr3gsns9Zrv2Yn4hslrma+/nVyJ7kGvvixvfErv/MLKOsba/ZLv4RikzVa + lJl7Y2GLojzbrWuBqMY5t0QTubalMXrpnKc6ditaq8vLBE5WppUYTzzqecRLjHDBt9i6QLbLotGzpRC6 + dlDLmhPrhCoJwIZFmy0MnZKiM4G7tHabl92jwSLVaX5XuOYlupoLmzucqitXqEwaxDM8r7vpjHzZWIPq + kNPVw0LbGxx7TOzUwUdpvAycqVmMqANct8P7sGjBHksoXLIrdyr3stQ7tUPCusEZo33KWbELrjsKuaA6 + Tp4DGSuMn8PLV11ZxZeCtTP2MTKcJEK1kx1ZQWcLiI6Vkr4Sep8zxiAIxqnJwghM/quz+WAg/MJ2Ca1w + LDmKGMGkm17jkpHyo33fxLzgIJo3xcV2aoo3k1cNrJi7W65y9LpQvJei3K7iUIp4iqIl9QY37FnQ8Mf4 + p8VFrKdBK0/FlTAfU4eUPGkcNUnQS7UMdXRBWoGwLKHHLL3cV8u2bFASKLM+NcYXischi8IrQ8Sx7MY3 + iMQ6+LS7fKCPqV00I1lPu4OzFB69SAFaiMYNxICu6aTs7IejpHcC2JZK7J7xgHU0lUrAG8WIDMrIIx/H + OsQGa8Ta/IUmGsyw98DBhZ3YaYiVyUvm+Fgrm8hJxc2+e7UXjc3JeIq7CLZsWTCGuy3Kh8wnAXm/PKuU + /M7R/vitf+uMOz26sgx1g5xiZ+q/OglOSOIoZ7TP0qWdMxt5JXw7ZxxA5YzJwitR/VyXmlzMaEqjtErV + zsO8ZRCZjUu2o3eOeatVwCyfpjtvXD2kXk3Xw2ijWYfVUKJaFuy0Cbgham18QPRD7GnMLA2jrKwjJk1q + ThaHbhPVv4y2vTs0R1aqffy2cdluAN1sdy3BI0shuql9hOOEc8xB15vCccSmWxs6mg1InN1JuXB8ob3Z + mMa3ZIibKX3TJBvQERuLKQqluhQXP7W57LfKKfxcikVwphyUyFZPacDasNjF7RQ+2oMKwz2CdAtcV+VF + yyTFElPJ/MvbGyxQ0X3Un/bU/jLt1qDUixBLcM6ydMa1zh582XRppt6j1xcp2b0AR/Wdk4PLr6t60b9g + 2eF9xJBMKhvwsgSsM9YB0t48wguChzfJyQOOsfBpdrawHyR91rC0y0CsnT87QzVX2iV8hyfIx3L9nxbe + 0oD0yLjq0wh4TeRzxziIkJ1sS6djlfk9WWup2h703MQjKzKYy4phJOI4ynPRg/LBUld4VxQ+1+r846Wp + 40SO5Nu2ZUj+WZHkRcoc4UIcsNcYsRqpUKON4fHcWxndzZ29iTeC1VIkrXY5C2JeSayc3jOC4m3enICQ + urltervttnKuS3KcAlPO42FE3rL9yYScI3sOtDwiyGnc/reB3tQNXcobc3MZ/tsyjd0p5ihe2+Jq65xR + 3jeJ3sjTG1+lt+Em2S6oXhAxsZAs8uMDtohgBc0mzTIEQUqhy2CEjthuy6+8Tq6Q3ttsfOjVu5m46Dsl + yOfF3h+H0+aoOVDCzF346eRnHut+fp2bOGbP/ub5bNPZZEsMHbc1VYOscKlWDerx7aeR7hH4EE4p5y6u + 3oRPWab9e3afBu9DTuxfWLRIbTNtvO7iPbmfwscxS8IHbdCq+MZFVeQh7vD7zsNJNu7REfACT6//vpSu + qOVaVumN7c4Z168PE6zOrrkeHeTRnaernmbVDtRePZJzFM0HrYiBpHMlzs2Fi5Go/rTyrcvMUOos4myd + Mx2XLw/x1yOLeoeCpr7D7k3zxGVILB/A5zynU/rzreXCVmsorl6zBg/wJPIYmWPzB/zfwC7d9C6xrLjM + 3e3MXy0W49n11kvpx8K4MlfnZZ/QZt+zYCjN2sbx6h7sxC7qMNzq/L72aOLu4Uw95+1ZUGPi2M6IBF7m + N2Td7gn1Wcjgs7rPdU/mmv8KyyzChf72l1zvJ1r5oOewk3/mHVH6oB/68j3s+UMJmc9mq++flsf5YgS0 + X9JjgU/0GGSD40b740356z2Xu7+pYNrt2Sz55a6xnyF7aqHKCzQcUdj7u+X4tb8cCc51IqToJ2/kF7rs + RQig/q/s9mDuMMCSkV6f66V4+4iu/O8v7BaPrAjX/vY9apkf4gjz7n0c+JAvOEJJAPAtArn9YQRLPlqx + 0phD0cGwUjhSPMUPXZmLZVQufunamO1c31GcF10UjSlEpF1cP4APklTajE8Q8yitUB9Y61O79X4xXXBi + WDaDoi/kVnwwbWrOo3zcaNdZgfthj+/5AQNvBBuGyMgM0woVV9as+jYYTyRRKPH6CDMwMTOvOj8fQcsm + kt4MHUahHKUwLSfh4ugAOUGzQmhr7XJ3c3B/SE5bEEZNSWWBhl1ZfHmOeW+fVzaj/+aoO5mlYI2dzLyd + S4zAX7Kva8tzp82h19s9dr+3/i0WvqtaxqXdofzQ09n1PQEUuASZNmUjhMzphu9Ev4HN6DgExUkitocC + K6qRl4ehBEUdp1wEmDETFVkkBaEUqUQlEJAZXqJKczDFSnct+TV5ZxMBTp42fHaIGSFYHp0/guKh+SUp + GCwnf/KJeq0pwhxFOVpgOXWYvwztnu6MWpXrP0EbOQ5F1URtBLJgElq0Jlemralvy8ow+HVHpKWFiG7N + 66Ztr1iFgbK1O3bwroz1Avc904goYgd4x/wVrFEzj6cRuWJuLFbVKUmdPSIqfGwVDdFfLNdwGCV2SMCS + XiMdPfEqvW0ff/lGiyYw1nyNUe9gsjrumBiOGOX2vPsT/rrJixbVJtWscnNy1Ol25c4m2b3FP6WDt268 + fJDk5sfDlF32ve67wspfDg2+pMJwkA/rq4jC0pOMCO0a2k8WtARo0MEHIYxQwgkprNDCCzHMUMMNOezQ + ww9BjHCICzVwcMQQISwRxRQ71GPFF2GE8UQBXIzRxhtxrHC7efS7j7+UGmFPJugg0uElAulLwBhCCjRs + uOj2+3GWIIW8B8HuVpvkO64SqW9LvqgSD7seGZMyp0quNPC9mJCk70AgS1hnho+A0aVMM+tgxsstqhxB + y2UGezMQX9IsAgYl37DyPJ6abKwVIQoNjs1XpImUEL8GVcvSanacCao78XQKjevW/hlOMZcqRa7PJ1bV + B4fToAQ1VC/aAMYbgGhDayhLPg20VTX3vHQBHxaMFb1ZnUPIN5tg0VXToRodL9jIuDFVHwWI7W7RlaIt + qwtipg0klbWyKmg3a+cCUCAkjjSWUWSZqoywcDvZCLHOug1uL8JuaG0gGgFjy11u4aWVWtWmAs4eswo2 + akdSnts0FPFMHS7f4xrejFx+3WTXspguNlLiVPQQ8yEa1+CVHjLfzVjjgE3m8tdwDpbqXHrh4+Y5ZnP1 + aFk7W3bZvrqE/vOonsBDV42usOVX4q169nkClm0KOegxizaU4axHXVKcp7ngUWrQjuXasCHN7tq2tAd0 + 4dWL/sJyJlGgq2Z7PqztBlOvvIWamo9dvSJ67G3h5hvjmA0XuAOri4y3lMF5O3psORhfO3HLD7k8NcxH + UzqtQWyVz8+FJVgvc6TL1nxxmFWfx/PcwHaDVSJQRpwyUbUSyjub6259b459F9gS2DOLvXK/3TqV5od5 + 7z345IF/XnHo+cOZ8DjP6U12XaxPVvrkPf8et2uZi9fQ7l0njfXl62xepOPbUfd7mNKA33ZelhsdrvFF + lp12WZ8XF/slLBgDXFKQyBM/5NFNFQhzX+ECiBUDEvACBhQSOND3wJPpC1Goc57h4HCMCUYFFhP8WX76 + czUjbe9QKhTagW6lvvmpbRDr/jogomK3rRyeTXIDOp0G/5U2SIFkhCSs4O38MLdk7LCFH9wYqn5YQ4LZ + DWQzLFcRIaWoQfkQLmGwQjGa+D62oaaIRpQi6byQRbx5T3eZ8WLNoFi/1L3wPWX8SdNowkTFeepMTmSa + PRRhRyCayVaIESTPPnAQPU5OCUR0IQrLRblH4ql9rrEilbSWi9Cl0Bwi3JxGonhGCMKrkl+6pEvCt5ZF + ziuDb5xiGncnyg0WbGYBOSUqU/mMWr6sh5rcn5IYOEtk7bJ0t3zFCZkFp5Xk0F+yDOIwEXTIoK3SR6+E + TSwJ4kdCKseYCQLm96T5LcmEMptiJCU3u/kPagIQI/rT/t4CB+kqUkYznaubl/TC+U1YkvOQ0kQiD+tZ + zHs+r5/iYqEHR0nJK/kzoTdsXUEPCs9xMs+ZI4HmdAJqyyX6DqKAaGY5G/ojnDFUmDm7XEfX18hmonSb + 6Mwo9VLKN5beLz6SNKdC6flSmGqxlZO8yRP3qc+KypOSEjWlToOJn55as6RngeRMk0bRoyIVoUNa6k1D + GtEvBiGMz2xpTqla1fTlTZCNelw8wULIlU2LpBZVFlm1KQq3MTVpmLpbWNFKzqyVtZNHxGr1SAUovOZV + r0Lj6zWMcFgpBfZweL3DOs2hWMSK1a1qzeVOw/pYuP41Gv/jLGBr01aiutNskp0s/mGjIdq+AdSx2GOb + HS2I2tQOk7WZpd9r6XraocrpookZ7GOv6lXhusOvTW3pXW1727TBNqbw2C1vaYtcqu4BsrP9a3AdBtJ2 + RteSv11taT9L3OeGqbdT1Sl1q4u/8CpwvNRQrVW89F7yurZozF1me62r1sL+Lrl6q+96iUuBMsr3u5zq + L2kNm9WBCFjBi20LgfMrNd2ycbs8aVqDFyvY6Rb4vyZ1b8K0O9pzNvalwF0uhh9SMuOG6sGt9W+Hh2th + Fce4qCTOaK3S6xgUX6RGOfLxj4EMZGwFmchFNrKMjpxkJS85Q8gZcMPUAmEdS5hrT+5cEaVsFW9u+JNV + XrG3/nZMHTJyucswrvCVv3zcrdWzViemcaCwDOUqIlUM2P3pm52MZwfXJBOXPXPulhalyi52hFlGsEa3 + CiA7Uxio//Tph2cFsD+z+CU4+RVjUbzotE5aSoWWM5/n4sCujSvNUnWZpwsmaRHPqtIKIbWrMazpyOq5 + 05xWM39RySdF5riifubPBA3tylXXeM0+C+6us4c28No60swGLKhFV4dV+Tpsa9yrs5s9aBZD+9DXhJWs + dcjrKQ/71Nj21Zzp61GdgJtq7Ibund0Mbweju1rWduNCXs0k/OCW3Gbe9J5x6Rf5edQ9WtU3JJct73j/ + G+Crje3pNslJU/t71oYzYLBZ/qksBgf4h/me0n7NuGWGy7Tf1ZMXZTuLFbse3Kh5GbPCLV7yuppGjrgK + YfuqqwJ37+8vA8R4befL6hgmtVTCUeIWHdq5pAt05CeV+bVFUgqPG6zl56aJz/H59ATzuEtTJ8/O3Thx + qkE6601fuM0HCnIugL14Yu8q2ctu9oSviz2LTiSlkXk99c7Qfj+3MQkvwXZpex2/4Zlf32OudOeIm+du + R/wtH283AttZ8IPvE/z8br6KS17xYce7qTDPZph7OVB5qnzxrBV60b+b3776JasjagLVB7Qfm8o857hk + NOERk4AcG8Xxbn+JOCTw7B1zRZ8CKXQrLQv4B44w6Wfuuqy6y/DZPGq+858PdTEX0mPc8DDKxby562Of + UtUuvkiNg2nwd65YhVemi4Oufa616udP8izcvRt/imdtHBhvf3GzD/7wb/9urdhURXBkC+kGa/0iB/qU + L9oS8I4W4u3GbQEZ0PC2rryMjQLDD+FCLHAskAOTTf62rY0u0OXYhegaMARVsDrmbp7eKgJtTur4Sf9Y + UAaFzwGhiRHkQb66JHMGpgJvUARdUAdhz/uGzv3Ip1puTu+K8CcKAAAh+QQNFAAAACH5BA0UAAAALAAA + AABYAnQBgf////DkQla06QAAAAL+hI+py+0XnpwU1ouzxkKEvhlgM04lc0pCmEXsC8ebK9cYvdCpzfe3 + /8IBh8POjnMUrUxJJYeoEEKnVIC0yrtanNhuTetNgMNkVPNyBixDozUaOy7LL/E53aGz6x/1cH/fBfLn + kOZGaISYmIaQCAf4SDEImYPHNbkn6XgpZ2SQuWCosKi2cjSq1Nn1uUm2ehnnEsrq9zpLVuJ6kKqrqHLK + K9q5W5VrS1UMORYrazyF7PPc/LTFlqrInNDEjMh4TSu9GY1ZSQpOHG5elep63V66berN6w2CDSWe/pVP + zhC7P4TPRsB/JH4V7JXNELdy9IaVQyFnIMEQEsvAejhRRsX+GBszMtJQ4h08UQmFiTyx0IxFj3M6fmvw + wR7LCi4pziQiUyUoEvPc7Uo5yqDAmytvKnNIlCa6pD5y1mjELeU8hk6dAmTqpWZWPFaxUpuk1WPMF1KD + /awXUirSpV7PGeXTFWtYDXMzRogLai0pYd0WtplYt21gZ4TGtoU5a/C/u1DQ7oiK94FQjYc1veVXOQor + xYvVFGmj9uTlzPeYHiUtZjNqGMuApB02WRpnuaYxk549Abc0QcCmAI08rdVqIrqh8Vld3PbwCo4tfXYD + 3FzymdOHKqedePkGnzg99xasHUh164grj9ccni4qvTGaY/R63i72fuazp1ffszFC30X+75MnehF8tsQ3 + YEK+NZIZgYDNR19t9vl3B0lUsJeUggRZGMRxABYI4Q/5RSeZdyKghmFnDFIykRsllljLXt81VRZ/wnWo + z4noEbTGijQi4VdszMUI3o6U2ZjaPyMEgGSSSi7JZJNI9sAiWO+s91l6UaYTmJNabslll0ka+RVHXo5J + ZplmnolmmmYioiaXRrQJZ5xyzklnnXbeCacqGqZzpDFXJmMWiJIJKp+QQxKJwJ+W6GhoJCV1d5+i0gl4 + 3Sw5+tmoo/lleiinNlFaXjO4YOppqFSWmiGqMwRpqi2XcqjqjS7GyoKk4Niq1J6WvvogrV9R2B6hhfoa + IaJhXnL+Aou46qEDsCwgGN6yzUgh7DiVPqIiqcRCAK1rPm64raZ5DdvgJslqG+5d34YoYofSoluhrpNk + C6+v6k4oarXyhnutWBIoeC6s6c7qraHvCuxgq4Dsoiy/qMhobjaEOfzvYQFCslCUB3OiL0Qd41saxRWz + Wu7CoyJMa7c8TNnoxr0mXLIeDE/L75tNPcznxCL36+++HPP6csorDLSGs1buPDKoMf+8hMbbJtKR0Ucj + zTO5S99yMsqqdjJI0TcP53LQb2idqMwz17s1b0w0tlzYqq38yMVMD+3dxzUSy43b7elJddUL+oyFSfKA + hXcjOKzrkd2A9+1JfX4/tx7LhPv+iuAyQDJeJOaZB26ZwuoE7BwgeutHb1pr7zz65IHw7fmEoL8neqwq + 36sLId0QpfjijKe+OYpeDCNE7qyljRRjLxaNeMua+6701aTrEnyLqDbxwe15Je8q62PTynvvsrreRvDC + 15r2IR8tr/vujj9uQ9Hij7+qpxSmAD+n3QO6vvM4lXIF9jL4z5TL1SN66GOfyM6juDoMhk07MVn99nG5 + EdGvgOnr2/2O9T3+0M1AD6QAAHcjk1NMkIKtW94FG2fAYHnADB30xXDW4p7TjYiEJdRclASlwMCpzSx7 + UJlXrNGODCCPhjXE3AlRWMT2dQAMH3xWBG9ykv0I0QktNBj+ETEYrwr+b4OPCp1r+iLFHw7Oie26ovco + eEQraBEGXBvXi57jjjIGMIw2AY0ZM1hAXBlEblXSAnRayB3Y7YoJDaGMHe9YtivaSmpITCJZdiixqZBu + cE30FlpY+ETyITKFB8yZ15Kmvy2uECI4s2S3mmWMQEbOi3fbJPNo+C5n5dCSaiSlIJWImSqC5CyCqyQn + 0XjHg42Cj0ocJSkZCRJd6ZJHEouh9mrnyjTGLiMUmiXcuLiTekDKVMskpFr2gsxOQTOaiHTZ5axZzFrq + xJfjfCU7q6EXHx6jgeQM5kzYQ0w2QpJdBVPYO4WYk0u+JJJ4G54974kNdOpznwWpknL+/okEQvbHepuU + 5jQRGkp1qlCj/FxZGvoHUYl6c0aMw2FFcXcEhZKRow29Zk5AGlLzDWqMbimpJg8KxR2odDt9MkEPpObH + mOrkEArppkXV8aly4k6OLD3jLhvZ0WDl6nqccGEXO1c3V0JVkUvVKSh52jTm4HKqPCxDCGXRTY4K1VP3 + S+sawbGWfEa0qUPdW7HKGoZCuHEr0Fyr8pSK0ozS1YM9lSEbPcRCs6qAnnylolsxih/AQlGwxSisT7eI + 2GwqNqq3nCfBkOajo1rrNl/9UVjFKtXM2jKvgyqlcBDkVyGJllnIKS1h+fej/7XgslibaTiHgpLfWrCe + JHorByX+Ua3Y9OGxnaXoStDK3MTF76TFNe7DjMnbakzXdhyTjSm0ulWuVjeF6wgOT7fLXbNGNxLfBW1k + JUta4wojE4L61h/QyrlpbYNqwJntaBNk25Zi16pPTapMDeQ6/dbVYf0F71HlStUBL3Y7qZpwMHToJ2zE + lkb+pW1ttRgV+rKhwgeWoF/rWxoNO3jFH/bblD4RHcQtlySlYCqMnkWcJGw4sLtlsX48zLMQz9W0hFpu + cJcg3POi1jfVWy2DDQxfAKevxoPlCTNJfBAkmy4QO84ydN2LXpyOt4Y1lrCFCStOTDpkw794oMqSrD4f + x/da2jQzZw+SZjXjl7V39ha11uv+LvBWGWb6E8kqugJnp3psr6vDGKMF3WEgj9l5ZT60B7OA2d4u7MKC + TqRWRbtTbbLj0q18ZFU3TdC+hbbToC6todPkgS7FGk9xmjWt3XTrM9kaSWzKta9/PaYlAnvYxC62sY89 + JxqrYdRn5kizW3oLbFH5VDsDUaQlPWd/7oXZfYbySqMtOthmEpb+YW6r5WU4Cj8by9/m8zj80mlPf7pt + XzX0iFv7H1Ord5qvGTenisxq7aDzxfcusUGtjOZ9W+uPoDFJ+W46b3orsxy5CCimn/LYLl+44ZChownj + fe5cWta8Tj64hNCw3x/3MIqRC6L8hHVtbEtZ5KdNZrfD3M7+qtDP39rFhLh7IdB/Vyvmdgg5N4G2vfTm + ubklPmQ/mWVHhzszU9gjekskLnIsrvvkS5/Mmmfo0KJzASXgTDSxrB4RrB89vKQ2uMnfONLe1E/jntZy + UeWJPrRPNNuhQnrSS/52Vvr2fGW/MZAvuXOz2wvkAk+a35eM8FIL3suEL7PdFO/s2tl98y7/eMDVXq7H + t33BmUcwomGT2EzbgZcmplJw88540L+S7dllbJ5/+5vUp3b11sgqGHPveUg33mcV13ACqUrkkOBZ9XP4 + 5gR/AnYbxh5stu0a11MteabTuEdE3T3vMZlNvsA+KXRX7cwVJmLCXz/NwoW+7ZK7Xpv+eSw0Dg++8Kn/ + VeSuf/IQb+cbtFx7BcZ7dtYuSFZ22mR/csZ3MaN/2Kd+2QdP0dd9uyQsnwRQ2ERQDVc3PLctaQRos3d+ + DAh5/gd3pUeC3mSAIoVy8BMXbWQJHDclCGhjqDN9LdYq1leAgGeC2idTIgQsQAQx3nQ4PQGDLFN+xmJG + s6VQOOiAElhqsQEZyWd83zSAS6QSQAhvH5hF94d/toEMoYB5IJhMQUdkgcJOIJIxx+QZPxeGf0V1ntWF + pgJjDjg+ASF+08BLLGiBKjhoVOET0xZnXGiDofIMYHgVGAeISwaDRQBP9JJYQOd6CUhcg1guhVgSlYQP + vTeDHSX+OV9zZfJ2clBRhPf0XxEnezfyhQrxWUs3RVkFhVclbV7lf0V4d1qIb2RzH36lhEnzhRvXROJg + hO3XhGYji+bDHiKxG7Lxhli1gKiobwe4ie91gryVZHaHLEBiZLlHZUcILp8Xh5V4WGAng6xoc9M4Yba4 + KbYHbb9njg7TZI0SU7uoIdEAgDNkN5moihQ4jL8TQS2oin8kfcthi/J4HPQYffXIigYBhpGBFIAGLPfV + IwuJOaOEjpQYgvTRgBIyRDxIVmC0gvuIIy/VdqKxf530QqpjkZqRkbAIHRAYTl/HYxXEeuuINJVFNf6V + Q8CYah3DRHhRFhWpZAHmWovAjdT+EW99iISg+BQP2H/OtTZbxhKnwETXRZTdBJSBN4kpiUd25YTetntF + +UwfIRpEyY/NEx7mFi25wYjtaH5MeVv8xyfDhGdAQU/LBJZ2FVRXyXx714xbyZXReFecdoEcCUJOkZcS + +Bh/gWFm6Zbkp2I6o5VK6XaRx5OTmXBrSE2wIQuHqY5RmF+MqXL58k4EaUBt1pjSiGACyIHzgneS2ZWC + RJJIZTF5pZcDNWl/eWaV+VMxUptzKZKXmHLnc5cpQntf5Ibf+IzUCIGH1ZAQhDwyYTxOyZRkOFxHiZNw + g1of4xIw1JtO+VGAmZp9JYmmiJxksYLaCTIgOS/KVh6e6Zv+4OmOhmJ84pGWY2VY5CiYf8eWqPZ7zGA5 + /jiOARmalkJSyYiVOCZ2t8WQpIcx2pCIKPQtw9mNbONo+3mIpxiBVydWCjmf5hIUZ0OYj9adt3KUSElo + jxRdDUhT4ZmfDoRyJQhQFFqfQwZuoxGZMZqgo6d5SqeOq8eDh9SGJKR3GoqhAph2+vmaSQqXXFaVvUeA + JeqaWXmbCHqkSJqkZ+B1l/egy7eGWjGiuLga6yUt1oaIRGqlOmYP5dd+KbCdgZiLMteXRlqgI9iYZ6Vu + 4SiFfrlQ1WmdM4qbtplbsAijSmqZJOcL1BN2NQml17k3KVpww5imQdlzpvVLl6moJbr+MZEBjOVXfBLZ + oqd5i3f6kY6koxJ6IfpEg9SEmvpopnLqRY/ZipOqoPaAj0KKqVODojn6qN4ZnAyanGVIqvcpoN5YpKNa + pbLqnTo4qJJqrIIFpSYKjxdXrJTaqqUaeTaWgtKJER+aaN/JCtnqH0NqqTs4pTh6rNQ6ja+nkexJk4Jq + npX6qcNKrDc6roD6lumqrixKo/r6q4q2r1y6eLc6fP3aWOa6iUXVo3QqSbi0mXt5hQMjsNNarwU7hgLE + F4lpeB4lSDo5U/BpRRErscIaljyCkNtXsh5LepV0BhzrZV8aNwwGQHojlX9KsboVfhtJqIOnmLvprAQG + sBAbLvf+GJPW9TZ4iqURuYqB2nkaq6cKGiLI2IFPlm/SpZYsUYj5yqWtGarUxrObw5ChcTtaaz8wO7Xl + mg/0SHaDB40Gq5542kg8F6DvUY8uW4qUI60hSzMLtYctW3g8irKZdi4R6Z4PEVCDq6x+yqyZ8YuIK6r2 + ClYW+oc+aZdSFBMO2hBnJbZshaovJLQ3ZyLvypffxq1LK7LblAModqiuZbMkU4Pl+aLnCro5u7CJuz9E + FbmaiWh9e3ZgdqAX+a8ji3E6e7Kla5zgh4IAao27KzL+M2NbKAbIBr1MwibCpiWzJmxvomvEtmtLgr1K + cr1z0mvea72KEL3la77neyfb62v+6ou+d2KlNdU+2lpWqxmibotX7OhEQPKc9IerfQomXoklXbuswLCm + iwkK79gX8utb8bRKOBOkeUsatTmmTfm7zPinhTvA7fp092uGUOhxkcSbIWyqqyq1AOy7AZyxOZs8Dxwo + j8hwjuHBWruigrl5RrkjqGvCs2m1KQye9OuuupWmG4SzjkWz+5udL9wzqkbBJ3y2MAKQOpqnuxmptfRm + H9yxdcVI8UC3PZsyCVy1A2s1QNy2OUeWoEq7kdQsCJu5Zph8BFaVICSuz2g0HRY2FQGTpyPDaRu8E9aT + nEeEQXyMiTnF/bmBqmuoHrXF2UPCTIzCAmyh9hi3hXrGaNz+wvgbRbxpu3t2rX8cD41Ln+iDF3Rsw2sp + uy33t1rKW+/jm38Rw192PVahxZ8zbnE8p/SqjJBTyib2kojcUX8WY3AUR8Y7gcDMdLTsuIw8KbW7pC2H + TIpjcVgUY25GuhkMnNJsu8sTF4y6w6H5oXL3nL46yZ9lOWb8OYQLtQ1ZXz6MiHdcM+DKxRMaxlIMuQlM + kiOxt4FKk/fyxMU0w388Ts3psDXFfUlYvNKzzcr8t8yMd6TbzQb3jvnIqkNZw5VMUVi7UawDiQkNtK77 + uQgNHJLzg3soiq6czzv7yNaziJ2se6i3zBToqWULb+CsvAX9sjaaqD4JxP2GziH0EIz+sXOxCk5rGMwO + qrprrLd1CLCPcalgnMRlCcW0O8RBfc1q9KBOF6r7+0l3SMNaqHzL+YJ51L9N/TsKS8pG7R3GY9Gz+s3w + 0KFQS4wfVAcjPMp4e8uatnVfBJU+FZ24K7kJ3YniubbNV7+PA4RGVBkNC89jHYAIncsjEp0HycJXjL8n + DT4HWkhyvQ8nhNg2TZt3/a1UnYHqbL+82qAAd7MmnchswdEdrXCbnEqgTcBW7H3U3J/xN9i0Z8QKHLVM + C5SjUx2DXKNo9tgwHNmL3axYw6FT2Xpgvask6rw/c7hBeFmGQYRJG5fFvViwXHMfMrxuasuNbDYJ+9lW + 8GVmnUr+bFaSYpCvGJyqdC3JwHsg+0e3TYOxoujJ+Hzb/JqoVGFj1J2DW8svpEmlcCqbjxLJu6K//K3R + iDN1g11F0MJ5t8u1wrzR3w3eKyfbzS1K/ZjX/Ph6kju5SAwMIAWfW1pu4hJAwZrMpR2bQaHBWcCh6lWL + bCvLiPc6La15qa2rFr7irtLPySAUGbdx5djaVJLGX5vfEeyfjEvkBF6hwLkZR4iGPmzbekZGmN1oRHvQ + A+7kPRSNltsKWL7ANO7UYmhzYl7T7u231epAz3yzNVvm8XqJ4WxKiAq4OB4pTO6vRXuN8xPMnNwtiVYc + wN1Q0WyX2meHHafjcGjLuHIlzdz+oWsr2rSTYIUAUaJ932aeodi95WYbpekN5x66zhpI2+jB6dRs3heo + S3IZv3OeHrTK1Fz8gX+S4cZ9N1ZNsJm8P2aH6zJdnE3uemhOygKu4nVbmA18vHCNyPWne7r7U7qd7D6r + 6Zvr6uGq501r0Pnwh04bs+lkNPy7wS2ZW5dsp8VOshRNzpwdp3ue7UNLam/srNpd2COh394X08A62T8M + rS6deCP0Q5/Ouua+444ZRkeGtAqtIiyN8FAxf71e6kQ+zbUN7wm7nXSE6fGMzGpkKxYVRP3WeuQeFS6i + 6LdbZ4E9sfz8k5n87a6tVs6sv6QO6jlD7JTg6BDCciE/K0D+x0ASb9+cTNkN6rQAbsjiI8U7/fBgIhES + rJY1LyTEHegkH+HSbt05k7rEGwpEz7NNuu6gqd77buzwqEo3Uuuhc+qf2exq20wj98qOXPIZD1coTh8Y + CMGUY5hg9c0EX0hkLn7+je53DvMBn/GMsfETmerOIewqNOUdWrld9nMJMj4VmUNyjzYUw3Cvi+dNb7k/ + rsx/n5SdL/hNXFJ544PQvjVXXPZWzhCj3eWAnxqSD6bLu0INneSYH+lTL8vPjpJvn8MW4Ppio2p/HWGH + b59H/RtjDz6//PqdD9uDr8jartRQfuLAHJuzj/hThNl6tMSJtN11LeqZzcGnf94Y9vL+yC38cL/1VPzr + 7e7dcnTxOdVClXtLjA/pvTnzRbL9cy+v0V3gQI2iHUTr70sA8DF1uTdclDMJehmMWliNwVD6xNI8UZFM + U8vogE52Q7p92fGC8z6yfblVEBgsDRUfj5GJQDahUdNTyphdZ7Fa0eTiQalW7xdF7nGrl3Ca/VoblIB3 + mzKn38H4huwAw/InzE5oBIPs+q58ABXR9BIOHRXn4uQiVSwxoyCjEs38svZAb/qkNnGYFnMKMytZ2d5I + XEwtZ11tH1z/FgizehNZyFINb0+JmWqN1XQQW5NxBxud05A5v0QR/rJbgKJTqKXBncKNYEmXxsXR1eGI + s4V3P+P+oRVWWb7X4Wnx7ZdJ7+/+7auyqdu2goE+lRF08IhAfNECriuHrZm6iA6bXDTIkEI9DAs5gtCI + 0dHIcBO1dDCpiaS0lSI8dgkppkjMKS1xvkw2iV7FcTpx3sxl5FqJRjOVBQ3lUmlSB0jOWWxKDOgOpA6K + Gt2TcaoVpgiDoqRY1QfZrnUyvVN4ddfWY2d7aqF6xqa+DRS1mBUCl9XLumx//NLqlhxfeIDfqqobSSwh + vfwM26WL5QcqwTCxco2MDXFiYFldNe7z2NtmxkRA1VsMYszqtoQ7pzMdI3ZZop5C/4g1eh/p2T4H0Q7G + pXa+yzUyg7702/XAfNteFEexglv+LC/AwfmefY/yc87SozPCyqO49t/98DYBL5LelyFjzDc834b7cc5y + o0tvHugjZL776ZsPOxve400iAV9Z6yB39AMws486i6+Ka9YT6jwI6nnPiwA47NDDD0EMUcQRSSzRxBNR + TFHFFVls0UUQZzhRBg5jfDHEGW38UAAWd8zRxx+BhBFHGoMs0sgji1RJxPbcwEdCw5CxTwxmKqTtDORO + eLIaudTSQ0s6OHgHKgOlQrAUmbqswEGj0uQPSwvh8kO4KkOAhM4AK3hkyhi+dMpMzTALR8qOAoUzTmvu + xMDOnJg84Alr+pwg0qlqaTMXSwnrL8vZeOmrjGS4iCOVVQD+2dHJP1myKrx1MI3rzUINKzXRHT4tkxkc + AjgKvgNRBRShQZ1p9dZXif0P2DSU46tAWQLbkNdeC5NAnmSD5eYdtmKCiNOE9OguMhioYHY8Z5+Ftoc3 + +FjTlkWuBczBSTkRjg3ydDFNpT3Rdaxcc/2jiVucBu0MwFwFVFdTd/677y5prTTVVn732nPOs4SJbWAE + DQYrPYKLURa/PO0gA96nID43U3m7qvizOksmIj9ElJgVEw2plNa9fVuW77VhKaZXFZbny7gjUaKSmRZP + LBA2JUdxzhnonUn5VmmGH5SNOaGpzs/hjxM+imObCWzaaT/VHJu1yvQMGuvxqNw6JaP+AeoYm681Zudh + sxVdCu+6yd6btdbyUhguWEJK2urs/GZP4sRpUpzxLcywDsq7rgP7cMQfl7TRzPXum/PKgKC7WGfKqdzm + tH/6fGHBVW+Po5GRhfsRbtyUfbrVC/8Y9mda5z3q3l1Fy8y12XaUPFqHVuTpBioVWezWCwTedYa0JJ5Q + KRbJFVHUZh4B29Dvlp466UOxqXrbrYwbo5DWwBBA59HZXaDdyB+X5D+t17yL8JNQaPb468e0/I0tQwIR + GvqwE5j0OcJw6HmGu7LHv8dpI4C/EoT80HYqqJ0MD5gSC5tuBsDeJU1cFbRKBB2SsQFmoCUNvN8LoRHC + 1GXuOBj+3AwKDaiWv4DpN+37mQxPsrdSwdCEQ+OBDZcCkrlsx4HzuNxOSoYob/muiHxDoluGg7JMRK8r + PpQbTOA3Q3P5LG9VhFAJR0cHMn4nN6ZBicUiJ8IoXuWK37Lb+kyHCASy8G+RQIoXGXGdK9YRWYYyI9Uu + gkB5uE4yEPLj8nxXnOPVkZBQmBrqDgkWDGlqXf/SYyMnR7lVreWJxqgkXbSos0zyZ5PXM4YnibKczXiR + eC5M4BIxZktDrnIrM9lj8la4S1Y1sX+j/EzYxKg2rqmSl8nRZR/TIqc2znJ1qFjaLW9xymOWp5lgoxar + LpkqN+2jIEAJI+aUKR1t9iyVSgn+ZhntWE3LIDOIBRtGN6v5SzcykYjzLCUuz0O8dXYxPVUcqOcwucxj + /tMWB2WTbfAJQ31Sk6LMK5tlGNpQjEE0onx8mUEriga9xLGeAQWPQ5VinYkObp/9jBc9vxLQaHW0mJ80 + IUodCL48WRKmMeXUTGn6xHCaDacuTeiEzkm6oAE1qHcMHvCKalSm7XRLU0XnT+/ZVKtuDqoVtShVedpT + KP50PVHFSBisAT2vUhFuqUCiWcd1Uq1mdAxqjQwgOyhWU15tgaWZq1O98k6P3TWnatQrQGOVR7/ONV+C + ZSlhpTqvw2ZzW+3cFGOTpzq4HrWmGr1qYo8Fz6aGbKUO2Wz+RmH31m2FVnhaJa1m19pZyn4WtEOVLU1f + +7nTbpWKs/XpDb/Z2tFmlnO7BextPUvbxHI0qLnNnHGxeVzfKlWmJnMtcR8HXbyO9bf2su5wf1VcyH5V + udO1FzevG97nhpK85U0ucyIGXstld7w7HWRJq3u79I6TccYNl3S5S938Xla+Wesvez2azABXdrG4VdWB + Edxb93pKphmDbner5jf/ylPBe4VvX2XZUTuVVo5n2W6JPWxPAovYkRA2MYdRjFi+CpOXh3CsYk4z2PY+ + b5oqDnFEbbzep5oWxjE274Ah2c0g0/exO9aggH38YyVjV8M6TvD8JhxPKTczZEJ+cWT+44ckMY+ZzC7q + UZnRnGY1/+jMa3bzm+Gs5rBk2VjMnLKBq9zkK5NEfhfmIEIzOQcSG5lRYH7ygpEM6EPmi8lfdnJL+owq + OrL4dC6mVJEhjWGsOu7OGcwzQQ19Vk17N8l3sC2PjRmc+qYU06xGdKKJeRsKghjUGa6VlZsSBj9HOpel + DqQFb4ynzn06160uNpSv9kdgqAkp8Qi2OL1DbFc/GtfvXSqnwThFBWX6z0St9Z5j22NYG7t42FvMs4XL + RktPW8ItlfGmFd24Npx70AA+NYLgqus/7c7PXE13uQ1bkOAKm3WJyze5I2xteP+727HrxjNBSWtpc5va + F3q1sfb+s+RHJtG86J7zsSs+n9QmW5bp8repC5Guevtk5YQmcsgFNPKFA9vZ2t74Rz2OnpxT/OPgRpXM + z5u76LaDEPepd8xgy+52//ziPcsWICq5SBzcG6I796O6onpifo2s3wX3OiFhaTiry2bsDERM1kO97xQn + W1ahImfbubTF36ntYkrnbMu4PjybA1hQNf8iHsI0PMsi3OVDN1fe8YZSaw38LWW/+iWLqnWnId7beFQ5 + azPi+KunOu0dzije156zgUrR669oOcpdE/nOQwxeXd+yOqS0c81bol6rH7XhJ/9u1muZPrN/fHBxqm+7 + KrxkF0af6PAHS+T2hvBja33lY4X+cn7t/fOe523SiX94qZkaYtTnO49dD225O3+5hp3+N1Eq/ABOKvzx + bqH5p88zqBfa513dgmeKf8P7N+sK7ZeYrOQi/WBu+M6GqbYOuP6iTVbB/06uF76v8BjQObKvV7pu7yxw + ABkMX3hu+dZvAplutSbmZYrCIyKw9PDCodQv0GDlu3Yv+doltEpw7jbnoFJwlSIlBpcOWgauBNMEh14u + B4voBkVPiBhu5oyOBmjQ9sTHA/FtjBpMmTboAScMBwGPCUVOB8+t/s4r2nCv6bowCMUNWmJQWIQBB5GG + A63vC0GKwg6wVwpHp9ywU+7O5agw4koi/86vWeYwZZRI4tQt0APr0A69BA+xMOXEJOjqKn0WUNQwsNO6 + pw3jUARr7/ooZuq4pYB+EA3VoQAAACH5BA0UAAAAIfkEDRQAAAAsAAAAAFgCdAGB////8ORCVrTpAAAA + Av6Ej6nL7eGifLPai7MRnOstON40NmUVfhmktu4LG2xM0/N6pPXOW3fP+AGHsY5O0zEdlcvECUVMCKPU + qtSKvX5Yz6z3Mq2Gv2TQ2NJFpNGpdaQJPJfnW7pYxYXb6fJhf0/U8SfiBlCYY5SoiJJoNQgIufAYCdbC + RWk3WaOJ+TLCqaCHKOGRdqjWiAXamcm6aWko6upXtjp7UWIbu6Qou4vRZbTry6N7m2V8DGCbp0yVXOcM + pGOcNCz8JqqHDbL4BS1NGx6tcTlePAd+Prr8EdK7uGbt1Itaz/29zqruqgtxqq8CPwwD9QlqAY+XwhGl + 4s37xYAYkYIBXVDE5M9QRf6L6TbukBgKET6RTuglaThvZMhaHiFdxGgJYEsFLyXUPAey5AJZbRKmGsbu + TceZe24CyiiTaDuWSj3lRCgs6sNusaqS4tMUa1ZJMZ+2NNoAbLh/UAv9PFni7NR+W4e2ReAvqUexQd7W + 8Wpy289uaEFUpGv3AGCtW+QGHKwlMEGNQ1AqvFYDbwzEgSnni6l4KRnLs8zxsLYXpVLObUkjw1yZcGaB + fj/rUPvW9FbZjlCXVr2akGbDGfBJBsY0953cGW+7FU4oANrfjI7wHot8+GpdAmjvMG090r3GT5g7yz5a + uDHwMEiTd8nXu1CpqaM/Q16cKHb3Nu2pJ7U3yn1y9P7jwIc103z9UWCPfioZN2AP503E0VytJBjWSlQ8 + p8+CX/0H4GFFQViXSO/spwZjGxDHoYLRjffXgyUmlhaIOx2o32YrooMhf+Moh9uM1/TkYigwzqbjKzXa + +F0ARh6JZJJKGllekIJ9CGWPOp3opA21LIllllpuySWX54zXZZhijklmmWaeiaQRaGopyJpuvglnnHLO + SWeddh5Xzo0bVqmZhz1QeCGfL1jIYIbHVKdilT+sRYOUego6KJWGzoJookEuyiikrGk66XQN3lJpjjNi + 6uiKhAboHoqg4ijqqAVySiSsPqQaKaWynbpna9wNiGugQ+bpCgcCCjpDpjDkJ/6erHj42N6yrAibK5/K + /XhsqY8qi4MJsX1KCbSWXkrVR7om2KuDtHa6h7etugooI85YKxi2sSqWDHgHfQvuO9PAu0655krqLCTq + rruisdVSOqU48lZyLrpk3EtwiQZDJeK77y3MMMAB2+HBrYJSWxa/GmKc8a/ZcjwwnjOC7A5Q44jcJ8n1 + NbxxGR1HGyTEB4+ro78b+Xwdtw+HQBvQWHwYcxHt0ivzrPTVS8fN+Er8CRQjfgQzJUaPrELWNDpchdRT + Uy0DCfx6HcnWFU5zDNRDa4R2h06qWbAXavfbn9te1KMy1UncsHRFcSfddIR5C20F38HpiE0eLBdOOORc + 2f4c8QSDVT04TTk/4RlAgfMqueVzZA5XrUcTffXiHKo0bYja8rzR506HTuDTpk+Ygmcy+t0FWUEx9jis + d+N9OOK7NqM6hGu0Dnu4b8XNiewaTw+sgWVXfBnZETlH+8zdG2678Z/Fa9XuyrvR3fe1q6958WBHdn35 + WUgvOKOlAM4++PmXHuzF7xcRP9JNTDE/olsO9jc5BPIvfP/zRPzg9oVQbeUQnnMO6UCnwAXSrGbi6tMA + sfa8YHgDP67LIPlMGDlKuUhvrokZ/cz2QZwwBB7AaR4Ch7c2DIrPgS6MYPDCkRD54WJEF9QhCnF4u3k5 + EHANYVt6YgjEEYYMhYk5Iv65mgRC/DkvMkEs4p+kuCyGUPGEJkQiRBaTxGM9kEdf5NsLuYife+znH20Y + 4wMziMQfVlGJ7kCd66DIhl4grxPs8RGysGjHPeIxdvpKnejSiJA79gRrexmkdoL4RCFaKZGKVKAZ6VEy + PgLDj6MA5FXA58UXtYiGteGkBsuYFShCAxy508kLZVEsTKTvkIVKGCzH+MkXPXKHuCAlSaSEywMCQor6 + MiUkU7nBX05wYrPkoRCa2ChRMDFdMNLjZJgFzEQG05C+qCbFUtijQjAxlRR05jOxdZ9xQscup2AhEowJ + ymyuz53wy8Ybvfc7aVJRnttbHweHiM5sJjOfb4Ph4P4ISrkGsg+iJtHfQd11hv0gzaBnnJ8vWNlKyKmH + osogqZ/kJtGd3BEVTiHGFPh5TiUwVDqFa5dJb3HTqiwPkcVMIfb6OMyZJi4b4Awp8MTJyZweNYHEjMhK + S9i12QkVd7qZahS2mVR64pSAxjInQsewtJyAdXAfVandSgnNaFqRqxytHkarCtRNGdKjQrFqL3WaVoNc + dJFsbevJSPBUZcZVrhWdX10DOhyYrmyvniyRV0koB+88JbJ7g6tiw4iNf0JKqZ3hEDgGUUuZDjaoZj0d + IbxpgxOgtnCcZYtneSoCn/4UDWiM7d6I4UVW2VVTFGrtPhz7TaJS9p61fV1lcf4Kh7yabKCmgq1ZhzvK + vzr1tshNrsx+49vfvhaSJYksXnjzhybATLmSMMV1RdnY7XLXL9Blg1unu1uldcYU5H0ZY9Or3vfhs7Tu + ei9/EdvCfWgDqa7Mrl+lG6I+eAW7JPTQeH8jMt1KiLmulG2y1ivBgrrXvxOGoGZZ2jIFyYNkgDIwTAyr + 3WdmWJgwvG9KZhi2nIxXwiBemHdMrLXmOlcjCm7OfSHy4sQpVyUfzsyNK2zhCxtvxf/V8I/BGDfPGWgq + l5UZjnMMXOcyucOqlCiyolxW3F0TyUm+oY6TuGUuFxW9JPHlhAQ2ZiRfOW2u4mma3YxnBPeGuulSsx3n + jP6eM3PrEWFO6WGPtkw/y6vEZC6zpxApJmFlqTp2MhOlK42lS2O6S5o2UnUkvelQi3pLoB61qU+N6lSr + etVbIiNcm8xhqBoX0dxcZZEJaOj9AbqT1QPtoX8MWD5HLbOlKHCCbk3aK0LaarMG9inpmglu1Fetf65z + rQj9amf/eqitUC0YebteCme5SdhuNh9l/LANLYRHG61S4HZ9lJ59s9zwzbVooR21X/jk292DN84g9FlH + 82THs7Wtop1Sa2JHiZerI3i1BQ0LesNaz2kxm32shewI0BE0DtFkwebYaEdnJuCgHbiKoytYjKeSjvpG + mmj4BCJ//9uI4ZZ1fKUK4P5XT/KLD3rNxVcrL5mPjdpsLrgjOyWXdi+V51qBcV4yDvCQC10dEj94KD3O + hNewG5krVyaULs5XMk99k8FmcRqTnpIDKt0FVf6Uy6XiE/UJvXLLjfXEjY5gMcbR52ZnOztnuHWgtEju + Upe3w/0su2uinXtdRviwtX50kEJdyXI2fM1tfnSkyyRKNmwk22sNdrU7fdq+qry1A4F5vBfXhirN7Gn9 + zk1VJrcRpP+XUiYfXIg3RrB5fi9vOJ512I8uZaJ/CO0J3+i5g4XxN7/6d5d+b+IOf7+OrGPH+1340++e + 96m3ezHruJ7vhpX1VQ0D5CHjMtq1tvauVjbqMd+jRf6Nsi/+XDDGAxlAdtDeG+znmti1/yciYl1kh3VE + pXptJlpFJmN/k3Iug0n9l0PJZ3lOxH2ZZyiGARqBJA+hMXy78FKpsB2492gSCIAx8iq51zLF9n3iBXTZ + poGRY3065WAQSDwwpwoTSIHYIyXQcBI15G2axXxx1H7MshxFqH4hJ3Ijd1wV2FTNgYH6V4CR1EdHkFGO + YX38RjJzR3eUFzb2QYBTCDzPh4DjM3+8ljrEhlZEAU1a2Dc092bFh4JIQETetBCX1ARapH/M1HZdWFLu + lj3jxm3pEYd7FngIRX4+BAfe1VEhsocm2DZ+eFYl+H6CF4e/5xdiKIL1h1LbY/58X5eJdsGGyRN1tDZJ + Med4TBh+3eJ5ThBes1dxoUNjjHODOGiCPvc5ySBevaFaKIM+VecbNCgNODZtWggY4IdN4oNuvceJyhhj + 5eRQnHeC14UowKiEkqhGJaF379Z6+JdzUZRsRdVMfdc0BsZ+yrd9J8h36LJ4zHgoAOFdWqcN1NiHUXWE + 1piD6XhRT+EbjERYhWWBzScroSiKbohiBwhQ3SdM5xcQMmF+godbZLUtSGiOo4OKV3dOn2g+T4eFFZmD + TeFvaTWR6caR/diNTBCFyuCOWYeG+TR5GJmDHyiPXZNXxBhR/2iRJ6lhMemPfkV/TOh0MQaK9RYYZmFU + gP7YKM9mkBrnZDUEQTLEC0wVjT55jG8YlPj2Li34je7XTwaXlDwJYSclDQw3hFjHgli5Z80iZDpJU0a5 + M1wZT1yUPlEEMopnP+Dkkrc3lh1Ji6MIR4f1lnCZi1dZku3Agkt5NWr5iNlnj6M1XSDnGnUIKk9JAQu2 + Eoi5VRK5l8J3Wo4ZgFbXZzupBYWUgDY5jrK4jArDlqfogkX3hGumS+SkB46jjyqIfJOIklv4LDsYYLPo + T0zJjkOjF5pkSd+XP0ZRe0E4kAQZU0WpLQtobry4d/wDKJIpOQKZkam5nGv5OhuJPkOWFMDHQ3pZd1zZ + UFlBk1vJm9tGlM8JnLjVGv6NWJxImITVqE+nUXa9xxPQxDKuR33yOZ+6Bi59yZzRl3PruWEHAxIv1p8A + xFoNF29qeHi6CD09ZVeFdlvitwQvYZmdAG8zGaBKM6GGmHoWymxS6IS9sy8bimWKqXufZ58HCmDoI330 + 6IQWVZ+QY51/2KKM6T+05ZoFiKEuyo1QeaMNipkTZG+reVcwCjsDposy+aQ2GmKDqSy4qKIripfa1mDp + SaE1hoqSIVkr6Aa0dKWdJZ/n2ZYDWqIBZV7kGZ7EKaUz+j05qqP5pZlqanGuOYDseU9BemBnSmKOgqaq + qZ0652Rt+hgTJhFYqU65SZokgjGlMqh32qN5KpXwF/55BpOfINKohIp9gJqZcviiPiaV8Pij/XV3U0qk + qqqkxOKfk5qdVyWqNkmdCLltW3SNd5imwVelr+oktBSJhHggUSFEjvJG4PdKPFpRZRqsLLqjUYqnqehx + IGhBUAqQIto+lKqRQSeNQYNrNwmthaqs7baLYKh3ApqtygqavUpiX0NPk+V/Z7mIYNeT0aU46JqsZShT + X8eukequWoVz89SntqqgELZu+1JF9teJLCWWv9qtQhKqiQmGjwpkDXuqFGutAfQ4Peil/MqsXApPJhKx + lzmFyKqS99phYBYUGzeDC3uAIMWnROej7iGpHyqk4gqn7RR3M9uMDzEt3cl/H/61ka56s8hRs/fJNG9a + qar6kHDnm9YTBMxxChyHTEkLqiOLqks7q0mpWGizqfvWiQk6tIoiOSvksJ6KmvL1eufKpAjLiYtqsWAJ + n1b7sBFqq+GxAqxWJ4JQakoiaX/bt1wSuHvbaWkSuH8LJ2qSJKCmCHrruI8LuZtWuKY2uZFruZ4Jsac4 + tY7RpbY5V0/nd8P6RBZ0l21YYeNkil9SpJs7r0i5KxERix31e/wGeAKokJC6GsCIuoO4tVrLqqr3ivr6 + uo0ne6g1tlZBZPZTupkrUpcns66ltocYVh+WKfWqcLM7lRo5tV5nloFWNyaqpbh7LS11t0A3t7jaXWcY + Ev6B06Zwk6BBsXYRGDojZbPj+3nVirQnupvPJYg/J6fgGEP0tbzOG7KMGLB8qbpFyrVeWm9cV1fF0h3H + S4Riu59Uer4tRKczuop/6j4JDKJ3e4aaipzaKiEwWYhDy3AilJ/bunOXdTYX7KB6hsD2q5oVhH6WSr6H + RSpEOIcoaxbJu5owS6Ux+4XdgxdseDcUMcLFu8G3SqMGt8MFdXzY277khMNjGAhxm8Gj+qwSK6Dopkfp + JLTt507/BLbxODEw7GCPusUga6cCC5cYuyNdSccGOGsNGa5thLIjCZu39sMD/DzgqpzzuJuLmodYzMdt + 66WOM8S1eIVstK5iOn3y8/6xHMPHsArHIESx1cp5evGTnftfZOFtlDS2HNik+DqLIEhg5xiMP+O2dbxv + b/uLV9xhulWrcOo8Rih7DDXKlBSsNATI9NnFhFzIwAF4K1x94HlzGcq2OMmS7NY83dmxO6fHF6t59fqb + /eq5JCu/HZTIh/iMo/u5ToU5P9WafOG+irOBiNW9+usfxJt5wVx62NnKtOa648ozaWwNomyXWQuPFUes + jafG0Bp/ryfHVla/HgyUWzqJccsYvtPLYnp+nrydDo078PmOa7WYXsyHdox6gwcFvnNGFi2DxlyYVri8 + 8ftkID2n9LFQ8drRRKzA+kiY04x7AnzLsbdjDxifNP7LwRy90DItMDUNvwPNpxGsijtNrDltpBsN1EEt + lP0j0mFI0qD8zf7Li8zxUmqngy3ttvKIRJxhckuYpxJWbFXNoBM7fbP5VLYozwjyxPPczaezDSLZXxG8 + x3J5QU18xz/XzBOV0DVYniBsyRaY1+tg1E0mtjUGt7AY2Ooqq2mJZzRIDWV52PfMs3VszUy3xvEIVaxb + nY/du248vOhMmyo0r5zrzNfanCL0tFmcdjtyxjdskjgq2pncnu3cyBLt2VdNynmBy5K9xuFClzUKiVkZ + yEppe2vtgA9pmNeRdDZj2Sh3oU20FpjSU28t2G8818t02UUR3TXZv9jqQ6C7FP5lzNc589PjOdrRSpHm + nTala7DOpJ+ezKgqrTwkqZVKS9rSbaDjXBuWidYprdw8pN3fcdvyWqeT7MT8irMx7ZkObtUXTU1qS82c + gsndvdZorIc7u9vpGkFuasV9GmXOrA77d+AcmuC4LTDOmZPU+hwsB5RNm8WaHatxWrLoS7ZYq+D9/Zkt + VbsfTj6JvblGrdtrut6ZnX4D8tLD3N6+690urDCffOPBBy8SXFWgfZBFK4gpHuKBNcgKrUKFSEJojeMS + is3YeEwqJ+RMPMYFztle6NRc6MphieJNi9/eZ68VBJmdmalDtH8evaoK5YqBST37XectYX+b/NNwC57B + Gf6V6Clt8zfd8GyG1ZIfI1HJ5BmS5P2gM3GvP7hRBRsa5Tq614eNyhzJR3nqXyvh4sjAeYnpyevlPv68 + NAzqO8ufzdRFcLdws12EGPjC3/bHFcye8veYAtyNmz4inS7XIXTnYXiJNLROcWdr5VPrIr7LTuxxyA5C + QKzjgXwRiClPwojSpB7Lc3yr2Y7ZsB7VTOjtpKyz7M1AEz5z/eHhkyPBYQuhgm7Q22phR87YkDyCbXHE + /+u96o3c/y7wUY7qioxXMlDsPIfidD7Dyw0rWI6Aid3i/GSgP+uSME4cflzPPU5n8ES6WWvj53OyZn6N + yMvudkvv253xf/NBiWpjdv7M8bt8zPyNpdyN5J9uY1RudjEfLNKMyBfq5yruEWb7u0IfqSDz3SFE6Gqh + 8RcNvtwM9Ik+1GMRDCOO79wR7W3+2/Za8oJTxEqe8Ilmv1TG7Aifokse7hT+9vka5tw+dMLjSw1vEByf + 1yH/Qzsv8xaP8dyK94Fo8jKZ2D7znTFpIZlDUW185gVJ5tQdnjBDaIipuxAOvR7Z1I8HtpZ/+VDOYo14 + 5cR8bP+ZqguOLbQRZJjUm6y+8oLcx5q8v0zfcJH/+f6dvVaokjeK+Yn/wbafYvTM9RgjG3/f2ccsPau0 + pDo989G/8Kyfv/Ue5WDp11NPqgdddPhl/LRP/Xrf8f5C7Obdi9Rp69P33sFJGtlZ6OkKhemr/e/gHL7t + muTiy/7P3/rjj8oDm816TgDwMXW5/WGUUwZ6cdbN7iQ6T0zC0TzRqEwvQWANd3RfRYaBFd/53tF9QQ9Q + AxJOiEclL7mspWhPj/Szay55N+zluvUeuhPjdxEmnyvoGFUUPbEPcJNZvdHWGXSAHD/SP8bw/voE1e5M + Dqf4+EQGCSVqGNEcHWge094orS45f3AsASUzohJbKjc7YUAfNRlWU8tOLFphaGGPbBFIX21EMXbbTnFy + b+N8t4g/3IrBZHMIk5mHUYD35Epn1rAhGZ+OVaQRv5eilanGkcU8y/3COYlflv7XFtC5rbfVG+J5N9hT + 8ckQqVcp0kAhAul5ClTHn7tGbUi5YsNPEQtJlgAicbgRXMIgBlEp26PRQEMNJjlioBVR3yuKo0Dqo5Cx + Y8oIMXHZrCWT5LM+KHViKvJS1y55EHF6tPcwKME7SVkAddeBJgcwAbBm1bqVa1evX8GGFTuWbFmzZ9Gm + 1RpFLI2sIFyo9epWblcQZu/W1buXb9u4b/sGFjyY8Nm/asFAddY04FCiRb1ZU6U4himmjF2NvMcK8xxj + mrkgkEphdGcSjmk+tqgaQr2kpcns2/zzl2nR9NCtgF3Tds5flD8drW15SG9zuqAN752kqs81ux9At02p + +f4X4TN/Xzb+uTLtbMz4hLghHBsQ6Z62B9EzHngP1kqx22nfCeP8isGCAnkaKQ+98/3T82E9lqSpTjLl + RvlvCwLPuC5A9GwALTpXFIzlwZBauofBYhKhyKCLJrxwM/tm2lBE7q6gKYkKFWDRphTrC0qLlz6MycUj + CiIxM22qOVEkGHn74MaSfNwpw4KacrC7oYoYUon33sixRxHPWag4fZx0rkjPJOJRxwUljOO+DLLE8clz + EotsSyJBDBFL79ZsZ0ceO+MnKQObidPM2WIoAU/MBEJzSSIBcbLMcJgTybZV/oxQpTUbRW1GP/W0oEMk + w2vNyjMOZSbRKowzsQhALP4sEkpEIHtBPD1HAoi/FiExlFXtipoVP2Fu2zLS7MSMC9Qv3zlwx1LM2LQx + W0/qEtlRH102ixytWQHYTv6Qo1gtJ3E2NNy05ZW0bncQTtppL6lWTEJjhRNcN7lbN75v3YUiTGGZfBHB + GtbDltN4IWyX39bm7VdXcvM45BgZdlWDulxnkvXfUs99GOBt40y4xCcsfXUpSMK1kUvshuy0GGkl5qaq + Gwl29KP9pLB4zuTeZbgFh0vOc9CaQ8kIZeuOZcwgc++gjmacxUvZRyVthtTlZqfIb7HajBa45IyjHlhq + 8N74QhPZ+ogH3pjRbcHXQh42CmdFKBJ54pQQuqlqp/6+vhImfbUum2u1Qz0Kb4LESWfRb3JpJZ6Q471u + 77ylOFwibFKLWnEBPx5lJMKRBYWRx017BfMIS1naSFYDz4Rsq73EZ3PMDjm9Vpf2eVtq1+v2lm5TjPVC + dVTpDfJstJMmLjaNIeNs1oV7h0nV0SFlenfcZw8H4Yk8j7zErvuR3o49KCdd+eWbDhsiL56H49QetqY+ + 2eubbxJ5KkG63Wd8x4Gd79z53Hd438eGIvv0wpebe/wCED/6PO8j56sU1GSWtRu5b3qv+R+qavcyTvRP + eJmLG3aO94n95S1gFHugfBDWNPkFb4QQW1PoPpE+JTDQZFBhoU7Mhrrx+YZjdf6yBUoiSI4Hec16HxRb + 60IFs4rd0D0b/BsKXui0efiQXSfsITVyuMIdIpGJcivhhZLovwR9ZIFTfFoVmXbFB2XRgHYYTRRpGMQv + gvFrM9wdGcm0xO1loYvbiR4cN+Kn6HULj3P0Ywrr2Jv29HEqimJj8Xykg9x0UBWBXFRUDulBbURShQEi + 4pMcacEUEBJRymIjJ3UXxz2+SWF23CQle6KyKoIylNtKGRoPgjgqorKVfBIj20AnJ6PBEnKCZGQcadlE + R42ySKwU5h+5yBBfes6YsAASMRN5wIe4zkWERNITg4lIc9wyj7nUot/slzlRITOblaTf2ZppFVqBM5wy + HP7nBcuZQE9yL50A+iY7YydOpMEznuaE5onqCat12k6Zf3OjCftpzl8+LKACvSdBs2VQlzVUiKT6H0Xl + Kcl25lOfa0zotS4ap0uuD6K+xGY2QUpPkQ50oyU1KUvLGYaDIguj3gOmujh6RDkl1Ka44WYnnQjTng31 + kTv9qBh+Ko2apk8UnapmgBzIU4WeU2I1TREERMYiY0aVp/l640ofWtCW1gknSx0rT9AZ1LCKNad1omoq + 4+nVtG6JFnvTqinfWktUypVoai1jsCLKv7VSkq9T8+tfAUtUQbZPqnT4ZwoDG83BkhSfaiQnYfMxV0Mu + R6gVdakdB2LWtqK1r8XsrP5nK2tZjQazWEm9hVVPi1ospPNnXa2hZgEaW2gUhre99S1W8vJb4Q6XuHUJ + bnGRm1zlLhcxDrmrF1dLS5mqVLLV40iFaBvao66ttNW9aTfPqsnoYpa7NaNoXXXyXKhe9pM3+ap3v4tL + xS6Wvassr2FzO1mlhpes48WRayFpUeZZ0rTWBRR/ZcjPyRjlmtsBUtawCF//XhfB75swUtw2U2qF4r0i + Qu90KiyjRX7HGOioj4Ypi5wOj1G34B2tOBWM1CmhDcBCkWBVJRxjxiiomQaizrRO9VPm1DgVAW1FOnkM + XRtnmGDNEbJPl2dk/TYFu+vVcS+wsE8NofaxBI7wlP6pPN/+XlnFWX4MD3G60H/V88gF/qw765vXAsqk + yx5E8f2+jNg8z1aWzcKIKs18KQLilMiv3XOcOftmn/3GDQyus6ZqdTO2Pto4SAZzohUt4m/IAHPsQQ6l + awJqTKenzd5MbZJUs4zHDXoed56lqLuWMEsb2NR8Bm2GMjpBrvVKzr6BdaxbLF89g/XU71sGPzZ37BCq + OZbMBm2jZh1fW50nu+M83YnHo8xfU0/LCAXxsGutw2UxsErd3sS2Y73rJY8a0Tlu9rRTEpEYIgPdwO71 + aUh9aTeLm6Yc8cZ+tFZvYPvYy9LmY6bp6m8HbTuAy2q0igrebmnaGs/0nW2hz/70zlzvmNb8ova48eoE + jP9X4z09cMc9jnB3JwlMzpq3OiuN8jWr3MMczLK2Xu7tkxucocVeOQxb7vL62fPbPMcxxSeuUyEI/BL/ + Ps5UnSvz7s7vpIeGse8WRwrRYnmSGsKXg8Ft3tsaldiLbVw3rOVy6GUb6oUMu9iRfljELXzhV6vYRb7O + bjLDnd9yt7k82FOlY1ZsYpzUxNY/hyuyJ1xpvMi5znXFYZMrUeL4lWLS1X6yWRFFb3pft33j/vPN+2Lr + 2/izNtMrdSZCR7SlD7bF4bNxYVcet+9mvJ4aB/kTeUj3s9+7D1lfdqVl2KGj3yzqfQ9X1vZ935E3Gb5t + BTzw4nPc6OS9/O1Z5arUHa1z/oL+zi98yOBjH/ceQjb7YrTEbfSREoineYDJn7wRyXv6eHW0HHsf9erf + ogAAIfkEDRQAAAAh+QQNFAAAACwAAAAAWAJ0AYH////w5EJWtOkAAAAC/oSPqcvd4WKEstqLs9gin+2A + ldiQVuelAKW27gs7bEzXzGxTps33k78CCmEc1w5xXBRLKdTwgHtKpw+qtRKl6a5cVVbbDRuWRqcieQGh + I2veVwwHx7tvGKQ9pwvreR6Iz9ZmVsJRaIiH1EH2BNjnKNH4KOdzNyh5FZmSedmEsnlmmSihpoQ4Zsj1 + ySmpuurRalHpirk36+dZlnAYKopxVAgATGtLrABbLFMbjDx0DMlMhHAsvDvKey0cXK0HXezcnfCdbAp+ + IV5VriLSutuuzYC2fVqdzZ3uel6evyB777JvzJ+6Dc7c9fpAQk27HWt4UQEosAZEaBOhvIuYoaJF/owe + BHxycqiULjPuUM1zOAaORo5eWL5qtswlFmUyT3QM5RDkwmw8UX5QWbPPSmIr+wXlR/NoICkLtf1SeJFN + nKFKn1X9AeTOVWkwt94gV0oQtZAndYKd6jUM1VlDtW5tm/ZGzE7xipBEZdenrbVxw/UNuOesvq5/ueod + 6HSQwkUvBEss/BAy18CH7xWVbNHxiMUmFrvkKxk0PspK4WIOojkQCpNRa4ou/JpT29R7CRcmiOTJosot + ePeI/Rc4q2a+kZmWTFAE7c0HgwqP+/zR7M+MTieuZ4NxcXDRvXYXOsTj9tFJQ5cFoijv1e9vrQcJzPH4 + 6RmMb2EXMj4G+/Xu/t9nzS9dddZFsZw19TnXn4DzhbdfC1Q1iNZIuhXIDISl9TeUR5YpOCBCUNWgCEJp + WXgUiWJkaOJM5WHGQkIALkWhLy86mCCHC67ojY2YkXVgDPddWCOOkD3YTQBGHolkkkouyWSTTj4J5ZJC + pUfljPCYF6SQmETJZZdefukkRTrSAWaZYBZippMEpclmm26+CWeccs5JJ5jg2VYbnjcmYqUSLGapJWxj + yjbokHz2ecaegLpRI5FEFSoon4vaMSkljUJ6Z6DBjYRolimWeClxbEnxqT0/VopBqa6FqmeArf4pIn6K + oqpfkI6uciuGJ/nAWqS0TpKboaISimlflfRI/kSM/qi6KhPQkYprscae0sNqCTIrE7ZWPNgpsFnZ2lq1 + xXQr16+PsYoeiblieGpj5C5r7rnoWuqIhtLGhayPrigGbbzedngvU2tpS4Wyib4ra8D+YnVtv3Pg9upt + 7ZaBsEAEs3TxFNzmYW/Ef03cxDzQGIzOwi9k7HC6D3esKb4d7KPTpChHNLPH/14Bsc1poSluxRjVbLGn + KXORc8teFREJSH5sajKljVGncHYsf9sf0iOEx3TT/yTM3dAFk1yudcAADWIqWp8M6MBdcKC22Eu06PMs + cSN1No1CR+0j2HSfJowOvdadDOAtxTH3S3i72/aOJmxB7VJnkw0v4YWn/grt5E5pjBx2boUbbOMRWb6R + 4IaDq5to+d589H0BkNT56f5CvmHaXqOn994f5xQzKLVzDLp/aYgOO72H31R48HTBw7roKiqf0aKJ4+e6 + 030h21nvszK/POk6u8u5H8afcKAa9GFvFfmxjGv27GXPRfv0DbHdufm2yx+47MPbtHrcu6+Nkuud0V8y + ANZPe9sL2Qr2FwzjPQVkseqeAL83GH8gjC8aeZkD84bAKZDBIMy5IAAh2DXnYe4WB9Rf9GxRkvGkh30C + DF0Lw3a3+zEhfx78XVkyyJS/He+F8+PhZESoPsSsznMUC4n17HPCcazQhwYAYQhdkkQYGs2GQ1RW/kku + oZedWEkWOCQgE3/IEQYyrIDMoWGMDHLEEHyIU1E83xcB80YwYsRaRDTHCKNxwDoSjwyM45088DLBOPpF + kC48Sht9N8VRoKaGiixXGjnlIXmQkX5OLNJWDgkaceBCjIRw5CObUyXQEeiTviIkIpUSRQpGw28zckiL + 4NCrEB3SbvHjYSUt6TJTZDIXW2hl2LoYliRw0lvAbJgpm+g+cqiyN8jUo4xgWMxa6q53BPLXFo/ZzFy6 + UYYW/ElvXNmcr6lGlKB44y1xebvyDe8PDbxJABlJQgNtS3QzOqeYJKaXZXbEd/lpFw5miRhCkCWI1kQb + Nk+ZOhbC8XDdTAnx/sZ4OQ32TzGWs6cVXmRR40BmjT2kmozoo0KfZAGYE5VQZH5CSmFhM6NXUuggCeqn + 8bkTos6sFu4SddKavtCiKd3m9Gq4S1/wc6YDDCev+lfOnHLUhyzN0UYPo8/NgHSf6vRQDkOA05wuI5os + AVBTH/XU7JGxofA0akdDxBSsmrUWAK1Rar6ap0oFdQT/1ABU1aqbTkYUEybhKsAOCtfBwfQDdRWqWNca + z2BydXOJMedBC2k/UmWxsOCzI/IK5rhU4ERrb31sNmU2TzZQ9mo+zepVZbNZx3o2sJrQKjxGKxXLtvS0 + nBDm2fLDWvKgaq7vJAdY+GCJivm1g7q4rWAB/msu3p4BtnotrUmluT5WCLOn5cCtZz8L2jv28DCCqUNw + 90ddaWBDtav9lWjeUM1Gyna2W9WfASlxjTjmVre7dS1kTVEc796lraSlamKLy9njIjcM4T0sjtIr0Pyq + 0ar8zWxs0xXfAAt4wPW17yl94hj9eqas3/SjSCTc2usiNLI6GumCR6fYu9DWWUdlyHDdM1/6yjW0kHWp + yJqnRu0UThAT+meBS/nYGOM4ZSO9KYqb206uiWFqL9aViIVMuZwWmb1D9u+ECPdcQkKZWLQ6L3a96acQ + q0OcsMzyba0r4hGTuDpN8siS3FynJ8E5zkiaM53brCS23XnPfFbTmvoM/uhAC3rQhC40oEccYTGblspY + g+UGG8w3Wl53y84dVKKPrIGLSm4JOrRl1Vxl3vQtGsyYNqwGp0KNlaZZzTHUrllpUxBNA8VFnZ5UgSg9 + nOQOY9QOVTRioYsetOx3NeqxdT1XjWsDexTAvK50GkD3yQ9pcZhNS7YjrE1TIeHEq2G2Rrez4+jr3LDW + bqsVsuPl5W8nOcq9wDBF9fbJ/HHaiEsMEqRZbUpsv5PAH/Z1WR/d6+jSQTmhfMe9a6IsfedB4R3FWWon + zBuAIyzeDqX1QD+4anzPi3/qrvK//2fjp52o4t+lttYYHqFQY7nj7NYpJL1JbrsCJSbEPtSPEXRu/l2v + 3Mwtd7mkYN5Yd1Hc4OLWovxQPnOdL5nl671IFl2kO+4RmNZFLzaH0Z1xpL+U3zzv+Qk3GBap84/gROTg + zWmW9dftnNS+xu9Ywp6Lqav4f5z2ebXTjnWisT3kpa1MXwXa4SVPLehsrDfzbtlkgyr9onQE9nrPYvWo + B5Ro7DyYjpcKPLwvHrMBv7rtIN/4y3ZC8GQlNbGNaD6tq0Xteu/8NQOPYb7Dfcyyh7uJG0cKcWMPrmeX + 4oxxVsvXdz7Hhg/ms20KPlzMheB2IXzvY5dzlWs69LUfI+jRSvwT1863Vlt+0AFp94WpfvV557zrFc/h + yCd427uRe+VFkRfU/j8f+mke/5fJHP6iCnWY2I9kt0K6DmHGfKd3cBsHKEdkfxq3NFFBIQXRf4r0aPC2 + d8hDAsB1HVd0eBmngMa0No7XczLygLGlHJ6nXiBoBm8Qf1BxcYKTgLsmfa13Y5JmV7LkG/uFfM9mCSgo + IjVncPNnQ3PQgjT2gsC3K1sTMgRoaiSIfDnYTpzRE4lXWU61KEO3ebKmexNmE6eXafk3IaGgX1t1JVBY + gnF1gEk3hLK2gl73TGBoQ2JIeFvnJxLXXrungS0oHNZicnIkcxPoLNT1I6WXVIXHhbTig32wWOLHbyoo + g1vIhxTogeHRI4DYbzGohEC0UaPCenpHR9zW/myLVoP8InfZxkaUuFeAoyGFqFJnGGwoVXEy+HXJAw66 + 5DhVEogseIlgVYWr6DnU53Xc94irED0oSHWil3mTd3SZCIO82HTwxBPVVRlFpmInVoyap4oON3zL6HcA + 1w3KFIdp2HVKli0auIFOVmbX6Gxr6IbL5n+Yx2wrFo4J8mMJ+B1K429Xp37jcldR93Y4BW2oaGrQ6DKX + YIc7h2bf2EnpmHwG1nxGNYLmh3OdaEhI5YLVCG6zVZC/1lIF2IVmNWW1KDIkxR+U54xdNJCQyGIX+YtZ + pZG04zodaWbeeFQhaY1dhogmaZFYuEcY6UeI4GPhY1IIeQ/KZ4U0iYy8/qJWnCh0oLgvufMA78Zoylg3 + QSiEFEkDDVGJ46gaHlkv0diUawh0dCiO8nhljriIcZeSHfhzcgEMYkEt/ohO9mZkMpQ17UOMOHmWwweU + ClVrxxJxuZd6pzYymfI5cjmGjJKVxHWXOYQNSWAUIEhJgFlbsLhwNUmXwpNg/WWQDvd0i1N9VOaWuEiN + VJksLYOE4zWJoXg1xPYNPvOZv2FlgtceRbmA6jiJkYhXpAcjiyGVFjZplGmURvNwiBVtpzMWQhl9oUmU + umiZLAZsOcGI3MNdzHd/owk4yXZz9kQuGbI9T8F0nSk1RFVjYled8HidvikuUxScjVgcBdKXqnOD/rYY + luY5m64ZhesWcuv5Iu0JTv8VleKIleR4nsv5YOsWD3s4egm5b9QJn3WYUOb2mwLqYOFSoF75nJuBEpqU + mbIJnuTDUoiyEj6jCt/VjonpnRlqc/q3oRnonyX5oPRZoa1hW3Upcjh4oQrKof75n38VoC6ahE3YnWck + GKezm7y5MCAqnwJnmN7mTJLJigzJg9l3oAkabiUKKqZopBoqhQ62bQQKo+8DeHgkpcf3mCt6pFmaYxNY + PSZ6mvYZpQ0npodZfgyKpWTYX86ZZI4xXZ3il3pooAdZpr35pzJmod3TfAwBIv8XgjmamTCZXfEZqNEy + g0vqdEz6poMYoXCY/qIn+qjmkqjS4z52KagpWm8JQRdoRS5rMA3u1pqgVje7k1ud9ZamVhfqcUgEuJJo + kKpIxY6/Z6W0uTOgCqmRao43FnOnmYdK+kOf2H65Uaytdma+WmH39FCyN29RNKH8yUrR+YBzB5WNaoqJ + BKAadYTDeh7kBnJpRUTyNm4wSq5VV5iwYgTucaVxaqaOSa5GZxOKWQ/Usw14IEm52KcSg54cWK9eqaqM + 2p0VyWj1qVe3KpOOOqdcFqXaSns2mWL4WopY1axeRE9JSq90apZht6syuqOjaCCvKJ0f26s58IPXox+G + BiVs82d5diTJMbMxu2d2Vmc3uzpGorNnomc7/luzhgCzRWu0R8tnPxtoSou0TZsm0Gqwqpqx0qicL6ep + A+GTN5SWcymnhsSjoGmM7ja1AxqTcThNbEp8E7qQk7qq6Per0hoU73Ix56CUH7YdCDSr6xekCEtyJbdA + bet7ypNwJjO3eeOBtLGSVqU7NFSuJsdB00ScPHisEutWYOq2oimQycKUZCmsVclji+R6xfeavSa6dmsW + eVlqzNMnLFoh0bC5zJl8p2pkXFR4IdVcnLSYPyNA/KJgERusIctdGEmpgTdbrAR/tSpGfAt1lwqMg2c+ + SvNbhPtEFIO2sdIupOq5AzpKtqq1FOilVttxf0QlM8qSL4RR0hurxFt7/k7IsOpLjCD1brn3uHynQ58L + ufWBuK4GQCiJuZkbXdq6p2TLTJk1VZeFF1RahCMaSfmqldDDQENKpN4qrtnbmbTIwOL5bT72XlKDsYJ4 + pl3YkIH7ZOgLt9SJCPMLu+6bZaOUqYf6r42ot+4IvruburxawlLnr5KrhQ3cwuEib/RYjjVXrTwcu8Np + eKgrQTDMpzZ8w2YZezu4ln6rxGsaTlX0uklZrKyRstUbsKH1dxQGPfGRDhARwhb6wheYpsx7p6YHgKCE + hJJ3EMvLwaKWQvm2qb9blVOclvwaelFMxXu3VPjZln7MwxFovayJv3ILuReExGLskGMMyfOZjUVk/qsi + eplNtK3raXOhtI+B6GIkNbnKpmMQuaAAC7YtmsJd/KSkeLZ5RFHht7w88pFkiZDYizoxCLiRo7IFy58J + qy/noaRDxIB7W5yEapXtFV4bu4wz/EWs28Ql68uae8UtJcxdCnmeJ7ryq8yQaDCAoI07ZW9V1bqQubBz + rMcOVc3WzHjGR6Ib6anraKpMZG35RH9hnMqP4AmwuM15bKw314DduLbtOo2mzMvvScoPg8nBwrcqTKUL + LVGwymyypMB/2WgI7L+R/MhcPJ/qxa2hPMBYuzJBilADmMv1XLEPO70yfJUbzNGjmLgP/WKd2m09mWry + dceharEaDZsJdL8l/j226HqWchydGOe7IGsf4dTIlEoPJ92j+clV8SvTknnCPo2JuzzB9sxgL224ifx9 + PZya3Fmp+grF0xbF/qPVLsvE6fs1+0y1GMSv54xEh9LFinm13be1UkHVQH2OAals40x5G3bCJHuoYS1R + EoKfafR3jKHB+5fXuUbQV+1obI1/yEqEUPyiHHei2epOjQyMomiJJs11cr2V5bhHgrwy3rscDo0cH5jW + Kf3XcXnXjNC2ki2GNWq4Fr1myQnajPfExeXRy0zOE+3b/XRECJsPZHfWKK3bGE16s3pxHQxQz2GnUDqD + 1lO6mPpNKXhyN13VvNO+YNZXs8S4Vya1Dtw7/txozmzI3eEKzR572lhcduNxLGNJ3S1m3Xs9um8or579 + 2aj8tZsGUK6Ke/xMo4jcYLbc1iJsjAvM2aStqPCqy5IwgJX120tc3SNrzbszzTLHQELqwOzc39EaNM1b + 1ie70hb+TGZdPcKF1IZV1r2t4NLst8EFY0UN2chwzR7UBl9o4k43e5Zaqd9sxooF4tjtuX+D5B+zUMud + 3/awjeK7ybgsScs6biiMzKsc2wSOxger3wnLCxmShhX+jo/t10G5E8RaqEaHGylI1i8OetyM5BO10Me8 + UNv3h3J80En84KkY4VBEb6ZayeIGN2e+4kLODG5n1oJdwEg0XYqr5Hv+/q59vtsy4YRPOG3di2RALuGD + ipkTvehzPNWNXY+tTaEj91RWvhEbu+JhpMacG+X4Jub9tsVcezRlWerkJzb43co/nQ6XztKWreOxbtgl + zudMPunySrQU2uBlg7gSeYVjN8SwYTk+jaGCmSU2iJjLjkXOrdrvOesjYuNlfu3RPqDa3tna12T9KtM9 + itMh3qamToinmEU6bWxxmdwI2t4XDUUQ2uSiFu+RK+yHrqdm1+0wHa9qLcEjjtDE8Au7nk7m/dy47cIq + JND63lX8ftlOvtOgOcp8A21dfuKU/CxWze64vnjx6zbTzo73nrb2ivDuLumkrulIWvJYOzkX8+YR/oRC + kznm/Wux3OvVW3jzLRuLL5/vN452JA/THUzZeIRDmTBv31m1Rn3t0xnzCa+Z9Ih68qTlxWOCYKPV5q56 + xunIZA7noXuBqC1wXn/rLly2pyzzx+6smpi1VVfpFMzKLItFOmrsCk/0I2+Iw9bTZ7yhcwPB4Mr3uqv0 + a034ktL4f49AlBaP4f7MMB/N2a25J87VULu/IkX5lT/30D7YNgrXNXxM9ndLqP/eUk+9RHy5Qbb4zC3i + oX3kVnKt/x23n6n6D9n361z7Wq6TwHrx4t7qyl32vV/Ybv/L5fzOqFTxQNhiUKO/iI/WISvY1Muet6n3 + 2tTdyn/8hAncln/h/vkC9pIt3M9v+rlP9W6d1+k2/VhfqlhO7y7OX98r8Ute691vUzRu9PfM37hPAPAx + dbn9YXxBOnExukvUurHNU7qmy8aGStnWNctXnhhxPmz73lXLbFc8R1BYNLKIqZAOF2s6Z9DoI8N0JY9Z + 7TaCNVi3Uu7I+0Xtysf0mM1bQ5YwgPMsA7/E8tm7zb33K/gABz3e8q76BAkXaVrqYJYeXSTtPCgLGQFD + NDKHOj8x50S5AkpNT1FTVVdZW11fYWNlZ2lrA0JeMUpxbVcvelkFaoWBi42PaXl3kZmbnZ+hUX+jSwEU + b65BO7Of/jRiSg4dvUfEa2S4tZW+zMwZ09UH/olA3FNW4IHi9RPg4+Dqb1TBwwJgj31GQMy59CldwYP5 + ajiEEAQfkocHG0rUtMkRQXQXi5wht6gfyCyGNDIgUtGeSXX9UvZZCIdgTAMsXZJogpGHzU/m5uFQKGYk + P6NtcObE9iGczzYzf3icpDSgiKKDrtKkSuacFHBcj45JuhWRhEhUoeqU2pEsHn/aOLaV58PpzQVjJeCV + G+jf0Lg5mfw1w9aHyr3jBDOKVPewHmtm99xN1HgyJIWNReaxmVWBXqVNF4FbzJhyxMf/nJbx7Km0WEj0 + KL9NwJkEbXatldi203Q07krfOqw2KBmpby1pROs+mLiubuFosaodfNv4/lKAPtc8J169SBkoadESDWiR + +0OrOoLvLP8xqvRRjYa7Xu+Gw2zS6jLvSKndpXK3cYXhZD5E7sghnJbgI2VANDj4rjzZdissrAXt868m + 4NKjjsJyLovgK74mKm7DF7wb8QhypODPJAvXuu0XAVk0boV6RAslQQVNJK+2HIXYj8dOzjtwnvtwq0gi + RVREIMnSvIjxxyfAejI0SZIgsjUjZ2OtCxGlzMu+LvU7EkxCTuiMMSd5Imy67bZkY0nKqrTySfDsAhNN + Er36YE0ZpwjRRhzH1FLDQMeJUko6w3SCgg/1LEfOLJdyE0H5CGXzvUoRA+hNrULbyEE6HlXPJXwQ/oVn + 0033CgrTKNJCVUIyQXE1OhIJG8lULldVcs9cJyFH1uVC9bLP8k5dp1heD7jlTl4X+rWqMLfptUPzLgVR + zRshOxbTs5ANKTFn9SvyHLOCZdVHSXM7DVBCE1K3W291APfZeQmRV6Zq21yXQ227FMzeQ2349z/NrstE + 4Iv45dDd435EQZyDczwD4o7AWFaNdxc+KVJK50suMV0xRkjR2E5Ar+RyaYU00KRsjSLhB3fFNmR6sQTF + qgZRLgvZsdxhOeOLN6Rt4ohLGLrQinOGKF1gN96C5wDRHdA2o00suqekGxzKNH1ItThc9r62FGynF1SO + 6qCDcwjrpSXxOuWd/qf6srPuovaNHpvODtoatVc8cAz/8o417p6NeDPwC1ObOYsyG+07Zq4pPPc3MJ4z + vLp2dVa8R8w9Whs1ROvt1nKg9SU5xsM7hrA10OeyJOjRSSfb7mkz1xxa1rdye+xtYS+87tLQRH3AGT0n + VHiSfqebY+AZtF354o2HO6S5ZS8ds+adp4/27JVeVbgUl4+deey5Bxv38n+OHl/trfcdt/uOJxZK9A3F + tPfqGX6fffq7153X+AGBBTRlKHniOwz8+Pe2+SVQUJW6H/7yN76mMfBPAqKgYXK1JKjhSmOrQ+AFKygq + ECZLemFoXfvIcj6xjTA+ctse/wDIwZMUb0kx/uwK+VjYQLX470c2DJ/7ThjB6znJh1eigtYuWEQITg9c + NRwfY5QIJ9SMMIoGBGLoUAgdFU4ohxikAvTmU0UrKg95P8xdFRLXRR1mLYkZLGBlltgWbtVOjVzcGgXF + SEYhljGOcvxYCOtIwr600XtmDKAhw7PFOgWSel8EYR7310GGIDKRE2Rk+twDQzdm8ZB99KMlGakIMMqv + kJ7EoilTGJlLguyLo6wOJHE4Rj7uETNpXOUiLcBDE8ESlHoUHCdzp8pbilKXFOKlMF81qZdQMpUKvCQx + GXjM3Y2re8tEZTPpGMhruNI30nTmFePhxPdh55a4dKQmHcjMdwDzMy+0/tYqs8FNI6bzmgZjJ2AeJyx4 + MgWd9KRlONUZzGpq03X08+ZAwbmPJB3zfAd9yDblIk9Wruye9qwodJQZSnIlsEk9DGi06plCjTg0TZwy + qD8laZKFwiyjdRQlR+13UZD+MzY60qiHYKo+mj6UGj31aSym8VOhDpWowyBGUZGaVKUulanV2MpKL9dS + NQpCokzSaUqpoiJpTm2f5zzpVROqFKgaR2hdzWVOxzTWtqhVf/XrIlX7CSa2rlWm+AQkC/lQ1caQVJ9Y + TVVIsZkvMhVzkkcMW474Ktiw/nWn13vniUYDmjB6dVi7pGhj6QrYzziEP+BRnRQdg77EykwIx9Tq/uU4 + gxOTSeRuhM2iXg8zWtLGcp5+laBiHfXZmrjWtkKJ65NOu57g2o2zFwrDVXjb12+gVUrDFS5mP/nYKf7t + OrA1ZzuYC1zoWnW7AlXuWWUClT+u04W/5ZFzJ9vddt41k2wYryisu7Dkpre5mgVtb0UqJpwqhi7WHRIh + tateceH3jCNtR2BG2TbYQM630ZSrgLsJYWpZIg6R/QmoGgzQfHJPtiuk7YbQG1HkEtBxGiqZht1Zvg7b + sbRd4k8eT/ya6zItMEj85Xz1oUhBBliWI3oxWe84431AqEw4Jo6R8UPE+hLYskwusMPEcDyOCGR9WIzv + YC204on68sFOzu/H/mLYWr9NEsnx4A1CjSnh4amZu3KskI7xdGUsp9hP52UzfRe7IB9WWLfulXOn6LzG + NHvZo4Tmk0gPvECs/HmwgW4hiO886Dyv+clIA/S20ChdSPcYrJHcNFnByOgp9bmRTZ40Srms5/VAT9Sj + fu+WJX1qVHs61rOb1aoWg9ta01p0hh4wqGGVq1zX2ce+7vSH8dxWTTDrZLqmtKxLmOpkjzO8zBahjTFJ + Smj3ur1uVTV3bEOjSGjZQx4bjAi0XDnzVpm92kZtUcZLCXJTthvTWrF25t1iTh86daobtgU93C93jKzY + +1acuk296pMZyC/feZiwB5lt7iAcj/X55rQjm8ccUgv5UBGXOL/1/UiD/7pSr+Y40cTxlw5TXOTbri2u + 65Hv5eoBCisfefZY/uyG2VLghziEbHNOxZvfl0cjDnjRiZIHoA9dxUxn7M7JBb6S58mLOuc1Xl1O9KpR + uOYwn3mprd7LHAbd3XMyxyPITYkaPbrsyB670zPbc4JJfURTZpSvdi32qWY9tnZKdG9gnTp2zBHveZ8m + VQoAACH5BA0UAAAAIfkEDRQAAAAsAAAAAFgCdAGB////8ORCVrTpAAAAAv6Ej6nL7eEijLTaW4UAGp/O + gNTmiBnppcaktu4Le2xM1+lsU5CZ976FwwR/xIgGleIhlIpjCZkpLobSqlV3zb6o1R1UC1ZxseFsZ2z8 + ftSWDnOkRZfnOTk9bP957/zHtk901uIUwrZ0hJj41pQYB/hYB9mX57MnOfl3SSNCmbDIYWjg9kU44hSq + p6l6szrXGYnaSvSKQCu7dmAL6qn4FHvIO1p6pXsLWGzM6rqbbFWMLItkiwja+xRSKNL7OdvsXfvdRWcZ + 3oMMvUpIu6G4rTa81hjfSD1e7o1+z5DfQq4Pc+7fCQG62iHhUU+YQWDY7vAT2A1iJHvcJDYIaPFJJ/4S + 8hh5OnSKXb1qoX5FzKjpoUWVMpihBJLppccLTNigMGiNg05Rv0ymkimJJUShF/wB3RfzKK4i9BR6HBXF + odJHRAVWrWB06oqkWitmMyQvJMeO8Fpd1VoUrbJlXldy7eoz2FcTYcf+O6uWTF6YUttaBbh3hw+nwETa + 8Gturz3FfCmqxZg3AOKBJA+KjHsLL2Okm/WWyfoS8mOXm0CQxYyvMx7VEviAdutCMyBBpHuUmuwBtQ3Z + rLf2vui6NuzYeZsyPaiV92/l35grEBwa8N6FtunqTv2bWHbODnHLEh055+FqotA6V32+WfpcwvWBH83T + u6mOTBdvd3b/Oabrl/6grbffXmllAfXfZgV+N4l8kPhnIC9SKNhcfvhJmMCBkv31FnzU8LcAO0slR6E4 + IfrmGofBEdegSxDOBYaJ/YxYxIEIlujiZ9IxVleNwayoHownwWihjnEEQGSRRh6JZJJKLslkk0Te0RSP + TXQmI2NVroKOk1oKqV2GxGgJZphKIiKmk0eUiWaaaq7JZptuvglnnHLOSSecMUjGpRQMUglSnlKWc2Vg + PpLYHXYoWgnSD3kaOuhEgwa5aCU3IhpPo2tZulujMl5ozJ4pxoepEKE6CuQxf/74Ip/kjZoWqzQEiqWp + mU2qGAsDbtIbrJFZuumpknppXnx+jvSpqxlGev7XfsjSeqmVxB7mK6DG3mnEdr0uC2xjBt46SHnWTkut + pscEKBWz4S2LbQzRTgGuuSFem5K7j3lYXX667srruOseyq9i3MKQrgpQBHwvvuKaGnCr2U61Lr3G7AtO + uwvbi3DCWMmrFH0CUliwwY/qa3FrGB915nirJkOwxCPfVyWeIYfgqb8b5HPTyz2q3K+Pm5KbBac5M6wO + tDbfjLMYobb8bxUEhTsdCXZwlAPEqnQMn7rBKksHQSZSrajTcChKadHNgi0R0lJnkyWOTnBdHxhsg4ip + 2S+TuTJK8kxwtiY2vz0V3+MqGzJtE9sdNElic3e4qJAMrTCNFruRdnFQQP6XdN5K+X1UoIxr213SNXhd + N0TPAoAnTw3ULNHeiY/9ccVWQM50xgNqs4SwOGOe+ahyv05oqnAV8mGiMqmeW+K4n5hg3uxEDjTwH6zO + LvSKH02V5y/QHfo93C5tuvQRe3+x7tXvFIgG0HAP1OhukP48+Oy57xnKyDte/szXo0/4IiV7Cz/7/fvB + qt11zX8uMJ/2wBILA/IPfscjUAAXRL56ne94ZdFYIfC2uWL9L3oWSRnIwHY+60mCENSBw2uk10CZpBBA + wVmU4AYhwkfgZDKE6d8KUXJDG1Gla/hrw2VGFw3xJMFyHNsgAB84G6HsDwMz9IYQxbC+/+UQh2iJof7I + /hY1BTJxG31AxQ+jeL8Fum+KGSHj6ax4xfkJaB2KKB2UwNgnX5kxHHMcSlcWyKEqaU1oG7kbzx7UjnkY + hlRGrCOGZMafK/lMXYhhAnTCcJsSomqDhkzWZtD4PUyskYlIYRxddEJEAorRe5W0ZGcwqcjP0TB6cyPW + D7vUPhsaMX6XjGGgaNZINWBQC+rDpO9GScpZpvGUVkwlIzfCwVDqz2EiiuWgXFRK92SnmBAEWC6T+bg0 + WGwGocxONO/xzdyY5JbWpMQbbBWwyhExnA/KnizvI0JjFtAkt+Lm2Zb5xF9Na2vCHGZvBnlELArsaYuw + J7pKYpkJgSuP/Qzob/6gRksWbtGHDpXaGxCSMFtFkIENBQ48nYk4TQ7xBBW16OmmpNBusqyKGWxJfoBY + oaBslKRf82ilBtihgWXUdCpdTkdD+lCfyLN4pnDoH6930o/AEqY+SuRPgfrPxu2HqNcwqkkbEjw9+fKj + v3zq+4xFzrhUJBZDQNcZu0eMulDSq/oBFzk5mQZ/AlOVZ9wqFPu0VrZm0lVv/cUicxrRmWaxBJDskKvk + w05pteutNHWeUUFarxGiNK967R1fZdqGagX2nv0hhbEQW9m9InGHWEFo+GYy13mO0LOHvU5iFetWzMbV + sY8VY7Ra6qDcjso7r4XttBh7EQRyLqu3xS1kU/67ut7SUWKwQsNfa3fayRrONuKshE0oG1pR/la27ALL + cNGazzBSla7SDZVrsyvaFh2StFOoSVuooA0LWq2m1XmHcb/hVPRadrTsfY5NxllXZuzLrtZ8x2fPq1/t + gpW74LCvVAWJOpwmdTAYva+gEqzcn1QzpqSIC3xdaVasUhgHPf0Whm/HYPYpwS9owGjbytBDC4cNvRnW + cH9VXN7AEvY4c8BfiU18Yub2J2Ks/S59yVZY6C4UwUEWsmyLRBAjRblOUqYylK3MpCkTSWtaxrKXvwxl + 84F5zGQus5nPjOY0q+l9A3NpjpUciB7H98ei+1lla6xP9hoFM9NQmpzFQv5n9Lw0XiprLnuKbGTNvtht + G5JxrRK838tiFm+6TfSOF+2IORO4ae4UJp4TM2RKwzm6x2UIpnsWQRKGZEQr+jTRnAxBUZfaphNtJyQN + M0OmFhrSCt6uTPfs5lkTl0tDI0yuKSQlVydD2Zn69Uz57KBl4rU0n4mSUwKtt2TzuteSjvVGJ0PixsLR + mtX+IglPBk8dMbtTKI5Xm4PtFdoJFoY2Mk0cN906SK87dhB89/SOehvkVnc1ptGprnfN6313ekL+blwC + Ay7fgbvNWwCdbjAT3m6ZNlxbY1U1TzmEb2XQq9E4Md62FT64iW88uuPeEVpfPtIWFRzX5s4qwvWd8f5+ + m9rhPbkJI/jTU1VXPJAC73aTYb1D5KxFnQX/eQFh/Mn4rgqiYkN5rHI+m1QbDeZT2lA2BFbsHqJbWC1H + +kuw/aqiwYqZusFgzysuPIlfYW1dHwY9TI5xrMvQ5qelJygvXWtevhCPHy/7Yk+udlUoPdg+ZKbTG9+t + eZ+11xGO4sH5qxZH6xjzey86Z+INlQA3Flc03SXF3WHvqiNe73wI+NLp6fjHA/ao4/WF/2YOaOOoPu83 + X9yoGwP7P1qQPq1cIoR34XXNr1e/VrczlPi++ZxefuwRT8IQQRAEu+QI7dHB1Oaav3XJep6DNBHhaYgt + 7JtGujy5jn1sV9/7rP7TnvwU9Tvypx+VLZrgw5XxkDB2z3tm10Wgwjq2535YdYBPB3kxZViVoSIh93wC + dXSHJ36+9ApiQRPqd2tKYHqFB2LKt3Mz0lQiJYCtR4CMV1Rjd2ktNSBcEHp1Fw2MwmokSIG+h3+ZZH/m + x3WCd06+MGegBIK+NYHvJ0P/h4IpKHkwmDWzw21cp1Y4w30PI1G+tnf+V4CA5xORJHMX1YQgxXZBGCGs + AYZfVYJZ83eoEW6KNn+ftIW1JUjUF4X/YD9j6FOsZ4ZWCG8P93vpQFaKdhmoVYZVJIM1KH8JSGsdt4eK + 14dfd4KVRohyd3F22GPsdykd53MP41fSl4jQZ/50Q0iEi2OIiGOJO5htpMZ+L0hbfpY78Bd/hXiFcRWH + aScXRCdigHQ5yEZokmiGSUh/vIgLsTh5/uR/54ZSj0OHGRhpENgMQQh+4ed7vsiAm/gUKJOJsxiCAjZ3 + x+iMb9Y8wThxujiJ0LhXfjFzrWB3uiQXObZqSqON25iN+lB9efaIrvhv4ydgwPiGwmhg9zZ3cCNznfiJ + nQdtMLRys3F5BrWPS9GO6bB+cbZg4Ahj4phejbd4oMiJtlUTxQiArBiIk4iG95NQFnmRzwV4yLeRAdiR + UPeRAMONERl3bXUKBhiKACkhCLRNJ9lFbTdhamiPqpiPDGh+N0g9vBMOcf4YTd1ERi4Yby0peF+hH7ih + jCtFlHwojcuQeGVje1WlVEuIUPs3f1vZk6WybQ3JeeBEWPLFhX9GUwSGLAtJSBTVem7pfDQphGDpftcV + kV5Ec2LnVc04NThpljsJTP+1gV05FvaTXX6Zi60YmKmYkEx5jdX1cD6HmFGTkpd0dZITI1hZkiuWijxW + fl+gEvi4XDVpFoBZmoL5bJ+pmuVHkegILYzpiVQoTUfmYpAZmZlFGbRWYLLJfKg5iA04ahm5gNa3m1BF + b75JY8QEaqY0WzD3mEjomsXZVgp4kXFDbWOkGnmSQ+ZUaZ6JjLVXVwVFbng3ll1YlmGom8GDaGBpnf4D + YQghlFznSZbis3w8qXXuWZWjNx9u+FOKaZyTFJB1qVsdBllDN1l66R2fcCWoqCpQiC0AWo8EunMGWhsI + ipeaiFS8CYlXeZ4SOqHqyYjPFmHpJ5z6CXYcGnhamS/0CaIPFpzC+Zg6JZ5fqVmiKV7jaZ8fejgrZE69 + hIcmyp/zxIE5qolyOYWzSZup2Z8rRoxheaE1Qp6qNRdIapVFM5Nd9U8MVZsxJzzypn87oSNT6qUjuqNQ + qCcvxaWNqZvu9X/XFF6RV53iVBJAeKYqE6GmOZezMp2SJ3RiZRm+UqQSSXyFEZX+CKFp6qEUyog2+UVw + iZu153Y99221E5NDif6lzaScfDqdhhleFemQ+/enhcqLtNiaD7qhQaWoEJmZneqocbqfBTYMbiR9uueU + pHmajDRNebqeYsmk4empOmhrJ9qnjYp+fUOf9Xmnrwas2hSgErYj7aeB43moyAo96/KilparVOp0hjd7 + SCZ71Ap7h4mph1OtP5pvrlBmZyJmSBJl5nMmW9JlcTKvW9auVyYZbUImUjZlbaRm/wqwAYtl95pm9Sqw + B6tmWtqsASas4OqIFnd9FXR80+oxY5lhy9JABVGiT0GOp2ZzWqh/t0Ku5GqjnKk2bJp5m8mo9CVcElmy + 4ZmOtUpD8Xh/TmqzVjqn1yok2WqKy5aqfqobDf5jX1w2D7YTsgFiqghotHYEI1LabIsqomGKXGgEgduz + FXZhqSBXZHDXENaBqzC6OuoGnOwGdpdYktr0J/pztY4Hq9+KWkGpofd5rdF2hEsatYHHDRsrXVJap2sb + qEJJs2RXU3n7tYfAsyzJU3X7kCgrtaW6tAXqInlLhgQ4EtUXcTbrjf2HtWzJjoVrNwunM875rHoJsZlb + plhlUC6nEM/yqkzppkAkHztlRKA1tpyanJ+QtKcKV8FoT8ATk1nqcg/7uK1ZrVUafaF1uHLFrDH3dm0R + uX3bO1BJYU0ks84KSE/aizhXuyJIpQo6fc8LeNl3ulmUuy7bf69jmLPrjv7zeLfGibugUo7Cu6KV5jJm + e2v3SHKAGLGdg6BzS4o5e5nce7sr+KgdlnrF6ogXInWqVL5kZ7a3yUiMg07Y25dmgLM9G6O1Nq65W0KE + 25nOhBrnWHkVBA8L/LL96QgQ5qD9lLwq2r7Mm1nx+7ZF66SdOXRZ2HQJYaGAyIYnfJyxeoS2qr8olGQq + xLSI63lAN6oGd1IooMDyi4C/Sx0XhbU/eRzFu34l3J5EDLUr+57EKp5VXLrT9sQMQan8Exbw6zxYTKdC + qq2ux8Lba7smY7qfU7Rfwykm/JoKGbe5FbjZKEco/J9yLMDkpbss2XQpWKJ/fIqcBJ6HycbwKbaC7P65 + DtQo1Si6dFyLsenGB5xqkfyxJXwJ2iazlhfHz4TJmWzIkfqP+TnGw+qIsbhp8OWABRmJm+qz5bPJA0h4 + DWykbjyxb2S+kxtLQQql7Etdx5zLcqvJQIzEg3tvoJybP6ySjdSEkHzBzPysgnbEPMTKz+yHqlvJ0eqR + 9qdgRJfN2kyXv+qww+yTBizN9eOSQEyrYMqiXMyqZDtYxKU3BypJvbq7PqyCsJy4LWtb0onPuLzMlpko + 8ezIN5vIkDpSWjy/1zvC7UdyoKedXcy49RNyQvKpoIq+BgeoG0i3oFJW5DjOnQe22+FhZQTIUXK2Av0A + WdiG0ybRPGhvxJJ9mP4BvHY7oF2q0w5dWjDbj8Fr1FBHzhMcwj+Ni/6Znl7czkKpB55EkNcUl1WqtUQN + jy/N0R1dH94VrgSNiVCJW6HAD55MyC1qsoBMvAPdnGZwyMOb0zGN1iZjhArN1m090lScE8d2nS7ssQLH + yDh91NzwEICNzOss1bqM0N2TI2Vriwrq0YEDYOQLNemsRkEt1EVcthHtzi4Dmj54xa2Ewclp2IN2vNgJ + 01y5oKmg1nIqyZVdnqOovKgdRzQtiBPJ2I3NjnTNsaQMkqD9ETVTvHorMK88xADMyUidrgGcwVvYto3G + bynqOSIsYQjx0L78v8p61bUKxqzRwsjZ2aXYpv73zNvQqMPzBsH7fIK5BNFmGo3TS8KifErMDdTJTYOK + SKoODF60WLnRzMHT5dfg+s/kfN1inb0MDKSabWPQvbxBNMU7rbkZ7QXmdmyrK1alzbrB2hO627v15aYU + C8xy6N17zdcHlL9/eGxMvRB/a8/L2LyP3YhkKLRjHEkOrt94oeOCXd4CoeGaluHxWMPaU9esCUwhLuK2 + XYd6feQpDDTcfeGISOL4RboUaVilIAfHnVBcq0HMmXJPjmqcttrqx9UcTt3jSx5OjLvVutMkmytfrc6S + gz3i1uOAFbvSJriubdwP5dmtnZ2bjZmBfdDmhU/cbYuQfeeKG9WqrDbELf5iKy1+xppBae7lar6tEC7m + sLSrpOPB3d1U+sPUcRliEX52CmXHgr6lbf6HdC40xIfo6mUiODve+D3n7bxa7lnYGYEtgUTRpB60yiyB + 6cOryZykZM1dvw7m6OuAxc3nX57f4LwaRcSeZw6KxtjqUNzXgErrct7NQOa2rVyj343qmFjRL2yOf7mK + FBOBYkrVwq6R5Y7eTgTWg33rP97khanYQ6qAltNHNf6zg1HvluLEt0jtKvmLd0fjcurvIRuVFiXp6PlM + xAzo7K7vpLG61Jrq8K6t4c7g3hzdy1rxUpmXEiu4HvfRgbqqIgnui32l2bPoC37TOI7RuurMCou83v6u + Q9XtTcDethW+aTv84FG1mJxdLjyf7zMdwTY/60U+9BtUEbWe3i8Putb6Z2PKIyb/9Dnv5FBe9Qav1MZO + pOFdA1LP6UZ/9F+/7vcrNDb/za946r793De2p9BuwR8/X8stiykr9xxvyUO29yQ/825fnmSP9MTu92NO + 31cD+IfPzc091xELIdAb101Dh1fx7uwcHPwAfrhE5EsOckrv+LKz0PQd8SEqFZz/LgIixtMceZn/vzEe + 5oRT+vKMon3/9hfzEM0XQq5k+PQG+8KW7aNPMsfIfxRG6IV8+yUePqovIcWAlgbczHl/pJOspMW2sius + Yc5v8ZLvuy/JrRu/8P6MTvua39u6rTDcL/iNK67BD/7S/pw4PzyVC4ZmTyLW/j0Iq/9qtq9LEq/9TwDx + MfVE9iFycU16cdabw2aDphvJ0jzR1BPVEXiDV57puo7tXN/53v9/OCDg0+gZXwKicsj7NHXMoRQKq16x + WZkS+dR+dULwmFwO04xIM08szrrXcTkA7iweqfNivsk/auvmBJ2WltQGqwIJERkBd7ga6WgUmygjL3cs + aw4xH++u/OzeOkk/C0l7NHNCUVs1vQbhVH1mWyNrt1htDUF7sXB3v9Q4g2WAF4uFaWeo0liJr+qOc6aT + zWa7dINhp6q02b6ttbygi8u9xREpITeZxwKrJ/7TbVX3wnfPV32j7+e999KZ8jfQ2B8isc6AiUcwmidD + Agly4rYFlDZWCxmuApjMXr+Mg9hJApLviyKMBT8yUmQv5aZsfkg++tWSDJOYcoZx2UjT1hNcE8tQOmmF + p5yVkG76g+gOC1AfSYvi8TgmZ8epUfcxMzL0HZuuWNfUeXk1IFCyWhOBBXM2C7FmUtiqnXlwpNFUCuUG + tfEW6kC3cZOkzcvTpkSRSQAPBvIqSruGd/EqduSYomJYfWVC4VoUM9WdB4V0lpzIKeJcNvUuKzl6lEum + kj+PQzZjM2HRsk8jwXGbdd1TP+AmPgx5cm/BaIyDnI0yuSfhU/IUFtOlOf6Z3f2afVW9uvrivc+75zoe + 3tzLwNN5k6c97jmuobXVwkmvHk1n+PTbAnUzX/1Jt5or0Q6/G+ob0DMADcSHLuSowm8omAKMsLgE1xOP + QvY8us828HBDqy7+WoKPrWneu1CeykxsCsELSxNkohAs7AYKDpfjrphqSkxxOBoHXIoac3rCZKKQTFMO + LIxAjCfHFEPj0UAfT1QQFRBtJK89ZYocT8IJL9xNR89I0nDDYLhyciAxtQSOKC4pDMFME/NB00Xw3hxi + ocJaInLFtqpM08/wOvoyjtjWjKrOTgLx6NAy9LTTGiSXpE+nQgU14zM5QaKTngRR+xNRYSLtbilMv/40 + hVQ9WsRu00q9u1EYByIz7olzTk3RVLkm3StEVoNIZrNQ1RqrxeF4ZTRKrJyJLleC5Cv22FcfUyixWhFx + xlFnLVUjnkWfwtMlbufC9kdjPS23Vdj2FHct5oL1Vitwo+2DSlRTI/OaaUcji1pbmdhsXnkRg+lfAWeE + V0Xr9Li23nDzEm1ffiVRVKlkv5vn4bwe1CccDYGlSaezLoYzYhknXtZIhtVl9+AFt1w4Xs5YNjflPmI2 + iCGKMwo5SJTZi9Eru/r0eD6dOZ1VRYOlqtnimSu0d46TiMaQTaYrIhTXYV2lmVNiUcEUamSxJo5qqcMG + a2CEqVYiapXDipUwgv7HDhdpQdfmqW5K4/jaUOHudjDLuINWF9OYTu34I74B5+5spvtOafDtEJr6cLcT + P67syhNiHMVPG9EbZsoxP/fy0J9N+e59PfcYbtLFHp11rsVNNOHSI2/tbdBfz+Tb3MU2PetbcL95dd5t + kJ34zGfWmYqLU08JvMbDW+n4cZNvRYqQmz/8yumRrw8u7qFndhuds785Se67d8z16qmum+jyI/qNZ/Tx + bmdxE8M/sxTagbfd+cACh75XrI99BXTFLuBXMv7kLzn1uF+X2ue0A0pOgUpTGP3YVrHpMTAdp5Pg/Pxi + tXNhsH4a5B0HO/jBCfpPewTk3wbVdDwUPup3CP6kYAiHRsIM6kqGmrOhrwIYEXzpEHYmzN0MgfjDJIJQ + eDckXi3mVh0kqpAU4Utg/Jx4ROA80EBTVKIropi+dDkPMF6UCza46DcDdi2MYryg6lhIPzS2cTRmXKHN + ruGPK2LxZXLc4gnXmJm26TGLSikk66AISN+tipCHFEd67HikkdBRMpHkHCMbycT4jYiIP3mdJS/ZtZw5 + 0hqdGiP4SBY6UGJibUjcoxD7CEPfkG6V/cOk/uIoNJkhcpKfo6Hgvii+XOqyZaiMIS95yCQq4lKTkyum + LJ+ixdgFkyEYqSUAn/nEPyJzmrcc5TDJeEptRvOTwPRmzlqQTnVGAATrdP7nO+EJz3bGk571tOc98ZlP + CkTFmu3KpiLxqMpu3tFu4PzfP8sZUMxdUx3n3JVBnTlCaDqEm8Vq5RlJOY+pMFSYoqgoqy6KsYw+MkN+ + VGjiOPo0h/ITohnpy8XSSM1kdqiL2IpaSpu2S1j2CidWCVgD8dCgNjnrpr3pp9lKmq1viFCSghQoUVca + n5FyBCp3KhB0HkLJIFoQcDjNI0Hr2NKd8lReLHmVVg2KVpHyqqhSFKtf3tgtVN0jptl0IVuhKsrovVWj + CL3qnLb5S+9JE6RgBSpfAxJXI2bKIncFmocIS7eosmYhtUxqjRgrE7WqrK79sahh3dpMjWKGMZ04h/7J + PujYzxZWrwOqLGc2GjA+zA21vOgsWbGZUNaG0rWI3QZ07mCVNlblbzW87V53y0r8+RYfSelXE1mWBsEe + F7mSbe1QRftI+XnverA8BFOVm9uiba9S5PvSaw2lkRduA7XgteVmp0Te815XmbFs4aygMcNP7Pd38C0F + lCS63Cri1b5khNIU8Usdp1F3tLwocIKwt9oHK8aO0XEwG/37349NWI28tS6HMZqnBANYHRmeks8UC2H6 + Jteva9WebFF8CQZ7V1/lHbA5ddpUlxJqxlylkE8DjN3wLjLHLLVMFE3cE7PiFoIetilzaeJVBifZeglm + cpOHHMggVxI2tHVWoP4gh+VLeLVz2dXx1YRE5SobLcwqdrKWr8zlwUz5yx/b2Hyz3FUzG3nO8OqxS2PM + DTKD+KuqtE9zyNyZpXZk0Ac6jXi0Vd8xl7PGhz3yTQBcjkavZbbk6K6kbUnLPRe0N2B+11J0seme4VHV + WxZEq9/cZgrLqjA5ySqD3CiyoO7Qs3n+ZKWNqh4eu7eILFp0Tt0c6nGKM8Q6IjGvn5QPiMC6dw0V4Kgf + Wqp7UPuY6q0Zt3OtUpMW2XFP2qqkdHERASvbmMyWKrrpSj1nh0LdQi5zJwkdZfxcTj+s+ku4Q8tuDOIo + 2JLC6nqLBlkC2dvaRCxhtV2870XnAdyDTeawKi2+cIGTkOCUjbZTRtUjT6OIcMm+t8OR7WqsZNxCnmZz + yqtDneB+72c13XhKCgAAIfkEDRQAAAAh+QQNFAAAACwAAAAAWAJ0AYH////w5EJWtOkAAAAC/oSPqcvt + F1x8tNqLhBbY6PZR4bJdY4cCU8q27tut8EzTcu1GHM738J0A+oaek8l4QCqUxc6OiBBCp1SLtIplXbOK + AJMLbm23YdSGDHouWaEvCIsuy2vxub3O9art/Me47xKCl/TlBrCBmFgikggH+EgHKWkwCGc4GUZWKSmY + Uri3xIF0WfQBCrWJiZmq6sM6pdcK+Cf7MLJppOiwWJFb0pj1WtsnPPyzenhqTEW7HAph9qu7q3yKSHhN + ylPsnNldxt2jo/y9LVGecIshqphtPTpd2mg6F47OfB+sqpM/pNlfKlW7DCeuHUrWriA5clXsAfT3ENa+ + ZBFn/KsoAM8O/mDp9qhJyNEgA4aoKrZyaDLISYoptZzDSDIdiZHyQG5cRComxJaSUPKkNJHXzwrNImqL + NlBoTZa77gx95HNoVItNnvq5alIniU84Q4pUOtEqMbFUwx5NeTGrVoJK4iE0BffeVLIY5ra0+2Lc2opp + +Z5l9LYjxxd7ceClS+EwX1njEENroBiMFxzSeLntF9nxgswPOceoSrfo4r9pbnb96VlzFNViVjK12hfg + hwmFLXytbVtOatZAeaPYfYE27m6xZZ/mYXl4LeCsmaNzntgDbKxqL8MQqny5b2/b62oHuxgy6rfZQ7mT + 2j1Peu+uwQMsHlE4aUYih5Rvvb5h/uCM/kuhpf4fIT4MxhN0mhn4DYIvuVcOfPHJNOB8xO2nH4XR9cfg + hC8ViI2Eazzh4TIKIjaiMyVuhlBnAP43wn3mudgLjOxZWBKNK04i3Hs3wnQechk+aCMRJ4r4XYh3BIBk + kkouyWSTTj7JJBjuyCidY0OSdaV220DJpZMpPrejP12OSSaTiJTJ5Rlorslmm26+CWeccs5JZ5123okn + nOa8ZmKYQMpDmWpZThfkhiv9iIyhAfoXqKCFCvmoojiCRqSkJsmAaKS9aWoYpyguV98wDv75pafimRoJ + qpueRKBrloaXqaeDEqqqCqKyU+mp41FaA5V91noMsLNuamSFunJY/uoMrWIJbLAQPjqsrYy6ykC0OYSq + rK+5NotfUzZGK5+Wx96VbCBV+mbtrsKKig211T4VSw/a0jCvStzm1ay1KxS707h3iUJZvb/e222t4Lab + qL/VycvJs5ASXLCqBws46atG8ZvEQbUI/BjEKaSbcH8UQzJqP9gGgrGKHn9878S88oEGyOtoEA5cHGeL + z8q/tWwMpjfP+C5PZ1w3cn4yk8utvg475ec919gTq5U6s5x0zwTN0nQ+nXir8XU/Yz31Z/Q6ym4GfWSU + tdM7bJFyxiSGLfYUX0tm9dVc2BxzS0+rNnfHcBNFsNJm351Iyeg0si9dfa/6d9qRCl603Ivk/p2SQXot + Hlrj/DU8sCxoD06FEYZ/o1S8hmCuo+ZWcN45tVGba6/Ch5feRjWRd9P2harrnm/PHoW+B+XGweM2S69b + eLS6vdd9O3JdOG4MEyCCcvzG6jkRdvIVg7o0w6tBv7HtxWe/O+CBb8tno0mMPox7LaKeefngF5ruZKD7 + mAHbn6sND83jky8/i7UPKujL3bmSoT/tTUsmHKCN6hSINJ4x72VeMxvbhiU9N/jvgHCD4KKq5ruOOI8Q + CWyFUpbVkRxpzoOX+sni6vcRX01PWiMxIL1qh8IlNOaBAZwf/UQUQ/UdRH/ws40uCsOOIr6th7KTWOuo + NEMgJLF6WMgh/n3kx8LwQAyG9yMMiBhHHht67WRH4CAAmdhEF+aOi11swUdo2CEy2mchSUGZGaeWxRYi + Ro4RY1UbPRFFwZxBjFsJlXVcEsA8apEsG7FbDoDoSDd+8QbAsB/w4tGjsmARjQJkJBW/N8GuudGCbeTH + JWvCx0cmkpNpVFyx6idCSeave6aUXMZw9bD/nZGVsVvPJ9O1vzuWsQiY2gwhyXPLT67ujzpT5CLTk8pP + hTI7byymSo5pSGUuk4LN5GXQ8mPFb4qLm4BZXySBQsgMHhOOoqSQi5xJKnCSBmSUZANBrPm9dJaGY5RU + IrO8+bwgnYWescSeOW+nQh8xRJu809R9/uCpMhu9jqDMpIa9wBOugNUwnPgy1UMBGlCJClOaZdOlCNKR + UFAydA01bJ4NalUeiKZOpOkT5zjb2YuLKmNfMqxGEPuFyxWCNKQWqt02S1rTN8wSp6taKTMVUqOk4lEs + /qSaSGNFUZfOJJ/Hapv0urenRvJwqL0s6kA1NNJnrOYLPIViS7WqyWj6so9DlWmvCpPVg+gkeCP1mVu3 + Ss6XrlNvdAWpXeuB1kzxla0FVVZLneqHuAx2O4fFzC6RutfF+it3Pp3s+yaLLrIS1WN5vYRmN+u9rTSE + epxSTmUtO9Vf5SQIbpCivKqai/K9Nh+7pZtsY3KCWpLUpIQ5G0sd/lpYw3ZQQ8ClLUOE8Eai3YG1rU0u + QHvr20o195xlPSC/QFst6lU1etb1Jnavp92TQoAk0OWuPethjd2dN0F/k5lwAUsJ9qo1qMU1Af6O27j5 + 0vey37FFFGoLWLnmxr82iG91ESlaUM5hvKkyEUl+ulmbSdUJF5aXJeG6H9dGeLQrs68tZmipI8oIskb8 + 8IbdWd7r1nfANCGuhDsEYg5z7YYKoTCtRgxG0tI4wTGBbnJGCOBe9XOVQPZbbNH3LENcoSCprUIwmRrg + Jt+4xEO22yU0ctssBBO86RFwg2aM1ig31MD/tTJYIyViLQdZyGkuXkbsdOc75TlPS9qzHvzM/udAC7rP + gB60oQ+N6EQretGMbjSUErxmnw5IzF0hs9ZUKWczO6LOxhNeOZF8SZtZujngDMtyOQ0iT7O5yrDIBhM1 + zWkuo9rGTl41qCWCQxYLzVlahnXO6nyThhYiQvqYnqhf7JhXynnOdO5cG1Rt0TBbGVcqVrCpfA3lbqY5 + 1bzrcEVnVsUpotLaVoERtkP55G1xG0BiPS65a7zaKanYl+ZeNjvTPcF1b+h0brtP32IhWYDp+tIvXfa5 + o6puYupOg18s1r811qIwntrgWY71lb+50Ii76OHBZsvA13NwpOIb3RcPKcOD/W73QoQePfbxB3tdcWCX + PHYnr1JcAKkP/r0GxiaypjiagX1vk3OFgxKaW6X1OsX3NTvTMX9i0Gme8XYv0Ijh7ngMQ7J0mDd9mk/P + Z9QBJphoVB3HyWzCqJHl858nvOuPGfYvVGvQab+IgRzllEzBHtGJJzwOO7Ro/3R8yfZiRxpZb3LI+zWw + BpoPuHhP8omr3l6bH7HwQD68K84sHWj7PQ1UNwOWN3pvFMt7i5px+ebUnivFY+XCOczJxmPUmy+GERim + B5O92X6+Aa/tQoz/fLmqgrHMqt7YojZI7TFvb8uLA/O7X/2JM4St24T64vPgee6TL1TdM7vWGz2dL4x0 + Fst9SNwSvz6cEbv1CfLdiKY1/ndpvcAp/s9ewxLEfvbRuv4YtZ8iKXf887c8fwFYf2mHelajep10NY2n + VL/nCcMEgKZhdR9XRWNxe8q3fPR1gK10SwzobphTOuNTfJ91fMhGgYUyXha4JxOSgTZVGhwIOpYGFlN2 + MvwFCSNIYkUFNgXILiv4Kds1WxK4T8MlSALSBuZHgAS2g7inhHaWU6gDFhv0Vh4XWMj1YLpxf30yc921 + gMI3hTzGWmjgEUoHQrxhgzfYc8SRhRJGR/AHGl+TIURkGo2FKg1UhvuBghWGhvmngI50dp/Ggi/4hHV4 + U3vUZUgIKsLDcN8mBz8iBUcGd8vTgEyWfrfiaVHHhmHwZeahiIIo/jIVOFakU4nU0HGsIylJtGGepTxH + aIgbo3l+x4ksCBI7Nkep2B02eId46Aw6gU+c14fRlmGmmD5SN4tGsWVAqAq9uGYjh24k1XvIWEg38naR + U4RQ4IyIp4hCk3FWeIWtI057NXV24IjF6GDtsk6vaFXhxj9kdosFV4jMCHvGyGFSplbnVHewgx6EY445 + qIPxpH85JncIRnZLI4yeogaekY8k84kRdATRBY6jaExsgV/8R3q3t4QDqEeA14XUyJCPaGvScZAho4qr + CFued43UKIdrRQ+8uIeQaFYtuGnb+EzwF4aLeHVKoBf6B49SIzflYHrYVUR2ZWQd6XtE0BYx/jiUmniG + 9uE5JckdMMmPLohTMMgVBXmUSfaRCEmRFcmSF2k2rTKO09Z7JAhvQqSTDkiTZDOJM+UwoxCRGpmN9FdX + WamV66KQkeQLbRkhU9kE65hdnuiUaimQ/ueNkhSWFOETV1mCc+Uue/Q1ECV/bfSV0taPAMgGiJmYtViG + fKlJMfk/v4OXnymUhYQEDlGNciGXmslrTwmCGOaPpCF8O8VjY+iXf8lbsuiZTOmanSeElWmRIck3uaSa + fLiRaaVyC/h/f7hglxgk3FCaYhFyAgNPcYBhuZVT4EYf5PAKzQmY9kebtteRwyk+vMl+Gsh5lMd0CZl3 + xskUt/lmsDee/sjJSajJYMC5j6apVNTZTo1HnXoZd2Z4N8T5Y/eyTvKJacEZcV7GQF35mcqEnbKUlNzZ + ne1IMTPJJ3sRmWK3m/NZno8jl3O5lSNZY9T1GkchXuURKtnJetppahRJoAUKokEIkdhhR14kOg76jJaZ + c1nZojGWbfs1hAeqm2K5oVoYpIKEoy8JMSvJjjTCL4pUCd8HfDMTjf3ln48HetemMz9zh07lpAvWP+T3 + jvUYmgLhdlBpNFn6a0y6mS9anpJmpsIZfHxVlYACgsjEoSszoPLFmXDXWYHhh8pZnW23f+xJbUeapgSj + pXoanGHXWYfUNWI0in+WdEF1c90HfYba/lH2iJkSgZ612Y/qxFE2FA9/JpqZVKqYeqg4B003A2Z0yaau + aKmIUi9uug5WClmomqHn2anIF6h0ZKHENhM2kRzN1X9oOTU2tKMQ5qkk+SJKepLShZSi6HpGdafHiqy1 + ajAmUidnYiZIQjM00yXguq1OoiZJcmeFRibcaq55pgiO5q7vCq+HJq7viq7xaq/3+ibkCSGgKqusdjvF + 6pVxZGzGyqLb0Zjp+WkLIZbaUpTRGn7LAoETqqL0qTjLyhoHu53q9XkDGYU39IzNSqKOanYnlE0Te45w + 0zbJerL2ia1Y9hcpE4jDGrHsR0YDwTUz+6qlBq1rWp+x5ou+upBj/kQTO/Q7HiKiNEhkdGqxjSMjKhs3 + GSuKgaUVxapynVAfYspNn+WeYZez1pqgT9uzPvuz3uI+gNqxsXSTAiulr+ltL2ayIuS0keiRO7Or3umA + C/WNUaqpaiVFxbcUpXq2UvV97vemsnhbuGo9qal3XbuhU2laM6pUfiWFSOcWvsqWgTt789ifFLs72RG3 + pwe1Gmu5+zdK5ekzj/V2SBSIovmnGTlGmfK5TRmh3Eh1GiSRofmegLVkLZstwgq4LjlHOOFDMqaoi9qm + 0vq4NnpcfWudCnVIFoq179V9aIQbsXtUoft4GTSyv0dNV2orloGJIzslmhuPSkR4/ggssmc+/nVrt9bp + pscmXkhnlpHEDyhGo3DZrHZGoTQKDmSHuMbbZksEwLx4nV6JSdk4ltMIoFzbhjgbkOtpv7GZowkhpOz7 + oIxrqycVh3yqts/6GvbDmlHrt8TziFAFqW1xgR6HtOg7kVIiwAMchW27tuWnVXjHX9oggr5bU9T6wMFL + SI04eP4Xti0Mw63LlN1zw/ypgArcuH+rYe8AjA1ptsmIMHOaltq2p3ILmtKbSkYlhjQbh1AcolTrhVRC + BjkpK8WbxZvbnvbEw/c5MtbmrME6kxDYi2RcpX76ts4JU0BTxBorxMo7mNOZk19anPi4pOMGcbyksnvh + mHc1lhPmXT1M/pQcWcFE2aTjd74LrIydvLRetMVi1oZ/C8mB/LuS7CHMmyL7u0nAM8UYzKs408Y76y2W + FIuhQ5gT9jpbE2VoXK2gTCOPHMBWrMVkW5N4XHXwM8f0q8JMzMgWzLJkSWEDKbImBIOmbJccS76z25t/ + 3LjDWQYRPH9IhKGcbMkaKULaDIVUZqW6Bc3RLMjRS2wka3zNiz30rKFueaDCarNy5cvdYb3Du4y9C34E + TauLM3ghi9At50j9hMOXbLB0W4V+vMYoY4q268HKO6ToPLlFCpYhSFQv67quesWwbNC4lVminIBsTDhD + iE5UpM1UiIBGWNFjQ8noSGlIEX58wK8m/orMjAS2i1vT/LvN5ciJWOuM+uVYEK0pAS3QIieZjhfFKYjL + kTx3GJnM8rjUlHvBWCy2lOmFp5rDV1sbnKGwm1e+okwKpDl6NO3JnTjTFRSauTbVRJFOcyyBKSl313u/ + eetE3Lw9cU3LCwmXeMXUWzu9efmffL23fqqmVNzVg5irzkvOqeKQxYy8eRkib4y5k43VcXTYhAjW5gnV + eTzPP3JsLlq+MS2zPcXCqhVNa43JrJvGgB3Y8KnPfFTN64tz7Xd1VcaeGlwZCCzYOk3bR/zCQt2joy0l + KY238EmsYvUOGS3IEAe9XyrG+gpIBDIY/8u73OfVsoxwuI2JXqG2/pXmFfbru6xFuNHaK83suG86bORt + 0Qa8x5cpkhORf5MQi64mcPwsqfwsb2I6q9bxdYqlnmqo2X0quKLtoX89IfsdPuOLS9U3GwI7Dx1MzFJ8 + nUacVLsYMNGHQ9AE3mSZ3EQi4csQgmOdFFYUv6SD2L74ZiB+V1284QH61rl8eUqYR7f8PKEawrjTzh1u + pE9wxnkteveNXvKUyBKcgq1IcILtfkfa37jRsF983CM0vmda0qYG5ZVzJkGq5KNUdM9NyuV9dKsavv90 + a52yfW+OEVU8pN6tUJYa4GdpPGPOqV2eMF9eHXU9j3puXFFbuD7sxTb91UQ8zJqU4uVGhwgs/uhn8wlt + xdP6lOiElaP+yui87UnxcqqeVOPpLc+zbaImLZvb4udbLemN9dMqjsk+rnO6DNPmDJJUNTeH4Ss3kOqD + zTQLFOnibUszWESj7s2ogutUzeOktpq//rpgucN9GL3/bI05DpK7XpezPGnM2tepupT2DM+5WNo3Ze0v + N4GSVz0wctk7HqiH88luxsdd1ujv3tw67NFcbCzH6VUCY5lOPT7Jo+uczuaU5sU2S+jQirE4yVn6fpX8 + fkD+btpmthum6renTKUHH+OhDqwSStorWuIdf49q/YSg/d8/rbXjzdPBbNv66PFK+L/QIYJGKoCQe+MS + ravKDdcrr2nM/gHrN7rbQx7ajH2xixnZQj/uXJngQpvLm32XnCs/sj3Etw3nOR/OTuVwIqruNU/tUL+E + EF/eGmXR24yLhsfnWp/sB7LmBA3M2KzaLtTuG1/rOE+w5b7tMo/cQc327Xvx36LxRV/saU/UVKr2PPoQ + zizZGB/3hV/2ZQnsoSylP3/WV+9Kr4jrzM6ziM/3CKvTcgRFxL6x9WJmkT75rT7QQh/1yk6YnD3STRja + 8z3z2g0TtKvYgR/LpbvnD2/6DRjEhyx2ZHzWLPb55gjEs536o1+SFm/7Zr/dDXvT5SzXb4UxDA/5dW/i + Gk+EVTU6XJ/8ie3X383rnW33u4b3Q6/7/vfu2Q+OvcAbq8jMYtedqY7OzjePxdK+skGAr/XPJuraJGqC + /3Ayr3FSr+RKAPExdbn9YZRIVEFn1pt3/0HPCkkGONEUCNR2deFYnunaTtkbsKq5PwW7oE5mIcKGt98R + lWM+odHhdBm1zpxX7ZYLzQJ3wu716yq3zmN1NB3j+ZJrcPUYr9GPbfm+GPQb+cie7AILu/TmDGkQTxgZ + FRUfUwghkQDrmCh1JCvXLsM6iTgnNUNNsWz8TptsHFdDR8VeW94wbb1mK5dKc1+68HqveFW+4lSBUT7V + OF2DCyV7kHOV7zKlnAuNpHu3b7ErEf+QVIatRhFjv/PueMpPqYsG/q/V99rdO2vp9RdTwU5jm+071Mde + t1d08iWTFy9GOoE0tN1TVPChQDqxDMoByK/iljYROyZLgkwiuZJoQmqhcvIXKSEJU2Izkk4VrHWoYrKx + FI3lQZgKocCD6DCnC6GBdhXMWNTTTl8dHQZkKsroyp7c8FwV+YTo1K2hsroE6jUXi55auaaV0bXoGWNL + 1VFD6+8m2ZgryT2VZXcVNB9GB6pdy7cV4K9eAR1V0pMt4rlB203S+5gwG8V7w/ygjJOJ1MoNaRkj/DMo + Q5SfU12W8zba082oiVzAvPjwGraeYeMwnHvMMEqNp8L9ZYfKZCCvecNwwpI4n8a4k7tFzls4/qvk9BJr + biT2unMu00/rHNzdOnfyUqrrPR+MdLH1Gr+7ETR//Hn3762kB45/S+vQ38FLab+xdhPMHM7IyyI9/kwq + acDgFlyNkJOKY7A8NZB7ELrcFLRwnk08FClAiC7axZqFIBlRvX005Mg+AkOMTbXtpjkILIRwnEjFTh6M + sDAu0HlvuRjRM+jBD2905si7xujRPPo8crG7HHYkjzRiiJzRkAGrrGjJPYCrIsgXfSTSJARDQq7LHyGj + i8nHlhzxyxXDg80eMwEUak5D1gRHPh367A0U8by0TcrPxKETzyIvYkpLdmbZM6UpDoTKkzERbXTR3j6R + FKmjJAoUtE0J/n1I0g0npVQ5UvOMw1OkZoPRVFZxsRRMNDuy6qhXQySE13r+IC7RWfOi9VAAgQwEVX1U + reFXCztF0afjqhLVQGPZbCpKZXHNFURsVdKNLM0mLHNL9Jg0tNBnun2oumehTcJJU8jVxNxb0U0TvmzQ + +nXZuFiCN95GSrI2tWCr0kfg6FqS76pnMbUoVmfB7Y9gQPcBaSIoK24XxQwh+XeaR7HsOL8dRjG4DoRt + 7VWLPZurNRKP2SO5ZJMH0eYalXey+R+caVaSx2Nl8vlCoGWMLNN72Y1t0x4Wvrbp+rAzmkakMbnA6oqY + xhdryRT9JuqIseP46xuoPDtZtcUlduig/mcxN2oL02bb7LMXZuxnqssu1W6OeMZzbtTyrssmuG30++/x + tv578MqGVPgVsr+Bc3GKXwo8xMcJ4zxbUyiX6e7Lb56Y9FEdH2djvg9n3RnLT0f9uK5N9twu2zGfHPF3 + Xo591f98l11t3MFuW/fdk6w0eOOfXP5qtomXlfjQsZoret4+Gklzhu2+npawW/89rkGlDj4capf3Pib1 + 64yU6JHldv7o0BoHl/2QcOfleuprtF7+53uWvtS5LRgio9dLZCY/RtCOVPdrGYvUwT+fXOl9sVvg9rA3 + QAhGEHn4oGAFSfcIBi7KgQSUHD0kuAqldeZ/4JNVCLtnQmykUIVb/ivh7aohQOgREIPMMwOzynRDr4hQ + h8Nb1wmFVzTFWRBSvhMiEqGIwg4esHynE+EIifREKQpEQT0s3Q8zlkDzscOLndshF4sltimCRYxMJKMb + 8QYoaz3RgIkznBOVgEcj5vFtRxQfs6p4OU6UkS9anKEMN5jEyj3MeYMk5BDPmMgHgrFqCzKkgDAGwz1G + 0Y+UBJjpXKfJHApyk5zsZPv69q0iQsSKpeRgW9aYPFXqcZSTeuXXSnjJ+X0xjLOEIxxaWSBW3VCXu/Rh + 1XwZTFaKEmu5hGQox4e2RvaDmUhz5jMVGU1pjrGWGrQmGslSAnF+4ALjNOc50ZlOBZRTne10/uc74RlP + ec6zmKjkZSo/R0oSKRNo1yxkLNm4zV/+SZ/NlCQOoVm5ZHqToIurZ1/ACTmABjR3/FRdQft5UDMm9HUS + eegWTeNQg5pyo9lcZD75UD+Nfs9iHvpo+NR4HT1ocSlzUkqFCAfMltJtpLfknkmVWFGVGGSF4fxLNSvm + wJei9JiLvAdRqiAcnqgUom54JFOWGrKVZpCjWGEqHIqas6t+FZQ9rR1Jf+rJXgp1nxhaCiHTQFXBZRSk + +Jkp1556sJTeA4uKk+tccca+rLKwqzUiK/o+5Zu+tnGsUxns1GLK08JOi60s5dM2alLAMw0UW/d7bCAB + GNTDWksawypL/vNEelafbm6y9HLQ7GKmo6z4R7O1QSqtBLupuyKTjBG5kyxlsVgDCVeySa2rmWj4DqKG + 1qt7aZb7EGtRY+W2gRNNrFV/oD6ekOKvhGpsikBm3NWSsLXKFaZ2YRLWvX1XR2sT7yE7W17X+tae8NMV + +arKXtnCzn7jHaZ856unjAULpxAlrr4Q2MbqRra/AD4ub2F74IZIOFdTVbBu/YtbBz/YqVPt7ib0qwvb + CnS6GS4xUDE5YBGNOBIh1oVpF0peBgd2wzPucLkMRuG70JfE/4UvLmssNMcAd1FK6fGChRzHINcWMR40 + FkUOGyPvfbaPasWqXUhL5f78trKATXIk/q0MSwg5mVZQ7nIWbezKe65vXGQuM8tAKOUfY7S+KR5ze5/c + vGhp+MtscxWKT1kU5pDIHlresojwsgRDK68Xi8ZHU5nL5nF9ELZW/ePTKFELMfGZybQMs535wmXuysW6 + 1HHHn33caW5eOief9fCK0zsMR5emlrMGbZVPh2pWgzo3PzEzoPlDVDvY+o7Ha2HYXkpsgkT5PYqBibJj + DLpjGzPSk4QWs8+jWBhD+8hVnTb4Pqrs+OEJs0vOqaqnvdsrd+etvyEVSUrB7Tj76dtrdmFEkzMjeMib + 0Jv9tEvRXW9kYzPfi/FVmVFLbQZNT+D/vjda7aTtOuebJAlXOH8YKt7wiT8U2urN3MR7nZ3DdIPf5t6W + xuvM8fXUK8L4fTii5sBlI8n4tHYpAAAh+QQNFAAAACH5BA0UAAAALAAAAABYAnQBgf///1a06fDkQgAA + AAL+hI+py+0Po5wo2EABZvv1ZU1hRhpCiabqip7sC8eLK9fVZ+f6zqNX9gNBRiCcp4egIZfMh7IJjT2j + JCL1is3eAtOh0WAVYcLeZVeLlqbXkTNbQX7L58CNm/PV5A+Xvj8ONwZYc0dnyFB4eJU4N6j42GhX1+AY + YhTk8AfFCGnI2WkGeiM694n1YWr1t4fpgdOn52hjSppGWzuLq6eLdhuFSgG7mvlVjOm3G+XLq8yMtawl + 65wD3UTEKbgKG1iEDDa83Tz9WD1OUn5q3oS+FEI7zPcRZKktnyetw65Ovc+kDxWuHyFSXCRs8DYqXjxN + 4QIm2NPjn0AYEiciYobPooT+ij0KRrjE4Vu9EdukQeTBUWMLlTtSInHIMoPLHSdLjGwVi96QLDNjbvTJ + D2NNoAl66hi65V5JbwhxliKqxahFqTwyEqVaw6rIS02XJiOFFeoMsWp4wSSbRJfWIwGFIT1CJSzaA3L3 + 1c26VuNdFgLeuspmL9a0vWQJjzPMwilaxCn6wiB5zC8kxkAp87KsIm8/zAYxuJDsBXIO0C84xzQNdpxm + c6hDH8RbQWBrvXMpqiZ9GJe2GKomzp5au7Q5xSp/O8nJ263v4OKYqzAuBjcu6A4+r8Zzlndc5825nxtO + fDMzJde7lT9EXbb3xuDPk3NGfrT09+tD1f/efr6i9A3+rGcPJhpw90U0IH7T/DcYfMm4txCDcG1SIEoR + UsCfa8sJ9UN4VWio4IQtefgTRg1uJkCJJp6IYooqpvgSPQ7qB0qF4oEIgVEr3ojjjQvRmESOPv5oYh9A + 5mjBkEYeiWSSSi7JZJNOPglllFJOSeWRBGrCIxLkvXhVlgN52d9g8ICZi0jadUmmcGmONV6GDq5J145r + ymgXnArQ+VBfgNlpm5lz8skeoCaI6SKMdvp3qKCBCopnURr4qSh+b4IBVaPqWPpUh3JGSqFgj3FYJ6cy + CUEmpoMmJWp0hipUaaqdZpKlqadutaqXesL42mKuTiDrG7I+geCukz7aCIG7tsH+aa/AgirqGJ/W1ut4 + yeaWVK0eMisCG68Ye+xx02o6YresJkYsHcPeKa63kSobyLnrCfkCtrSlqy6j1D4kL5kXoJONItaySW+Y + 34K71bHupBAgc9ESDCi77f7rXBD8QqzLwtIOzLCnnI5wRwe4UuxrwNWdqfC9qG4sCSUyuBuyyBe1U5nJ + W2Th7KP5astxTCC/7DK6okbbRbBH7aYbLNZptDPAPaeVqsPtXoGlWRIjxKfFlxmStIQyb8pE1tbg4NhX + RdBo9cVyeJ0Pa3Bo3A7aVTlFUkhig8Ky0kszjbHZT3d9GxkBFgpm2Vc3rbZ5bd829txsm7XOJIQ/niB2 + MB/+6LdHbvskeMWuLnyG0CvU3XYxNFx+2t12r1t4N2+r/ohDzn72s+k+i5jp1gUfxfohZ/1wAuiFye7o + 5pdS4q5ivmebOB6wxw58nLsCTTzFcRz/kSrBeqZ41c0Hj/Qiw0ueFfjRFAqqZ9S3ur3zkEee+2Pi05xT + zR/dSnrp6c+6voJclZtYb553RLXO1C9m9wNA5mwxvGLwLzNhiNopAiiGBdqrgAcMTdpStzYGtcKBo8GO + MBBGKebdr4LEYJnFOic/BuLLEm+r3M1Ol7fmkVBlC6wV51R2nsi4aGhMcZOanldAA9bnhTw7EApzKI+Z + 4eUgYyqL8IIoRO/8r16E4sb+fKyXENhQaoqvCiHqoDhDmxBRfYfxmxc3FBs+hC05RIBgnyTYMChGsUBc + xFtuGnhGx52RC9ZyXd1Gl7/0hdEHdcRf5ECiGSyC4VbJaZ8MtvQuvshxkIRczQnnlisgPKQCelrZ+x6Z + xhhuj5KfA80la5hHg2RRA52MFytMeK0VkDJGWbqZ1XqHr+zBalyDGuMqG+RLgU1IP7PsRDEJqcsiJgiP + cNyl4npnKKXwISjDnM8x6UMjj3WRWttKJjdSebRSkuobQUmhoq45GR61kVczCkwzx0mGcGZmnN58TirP + qTPNqXNxIwvVK+SlTe4hkZ4gg90A7TfJWubllnskZxn+nunQea6Nl6BEzoCkg05sZtOU7dSmOeUGR3mC + cKIRJcT5pLYSOc7xWGVDVL92AtFpfm5sf1SOCMFIL4bGT6bEuGd8xPkwmjDxpARMaLp0utN7pvELkCQX + PTv4SyniJqP7yal6QvnOXcThp079RTdvGkSq+mNGICVVHriqQiqAhI6kEWtVj3rVp25yq5tUqirVStL7 + aMat6LEqWb8phLNm8YpxWetFU6rSlXYLqXLdIlPrWk9X/KKx2kusYlka17zGRrBLLU9GVqVAsOLUr6Gi + 7EcV67EcIi+tWNUrYlWKmYOO9a+tdazddKKfSrAxl3RcFGxF1tK6KpCz4cot2uD+NkzfGpW0pdVq8rh3 + O/cMArTWky1L+OoJ4F6InFwhbnRdSVkfNPWJlr0sZv8KE8UELaBdpcl4A7lcuMZVEICFblklWpXRWReh + lsUut0r7ShhqdqRVqW1vS+Df7Gr3qtKcgY+K9CQuVOlEEi7RviaM4QxTuMIa7rCHPwziEIt4xCTGsFIB + Aaz64leoqd2vv5T72wVbpMGzI577AEg+8jLHxcJkrkCM4d37rjgfGRJXgulw5A91T8VkpGG8tNTGQrKE + mOU1pJFVYowi3oNkabPHnnhMMypXOclKnkiWBRxVAvMQMPWI45h7lrnpEZfGWZVsC+fR5rkYiswtk/E+ + ALH+B0Duz6JovPOXCU0WBvGZDYsuUz9YITBAv0Y6XnMMMuhL1Dc4qNEIdNksA23XuFEayvSlVaYFVF5O + V5QooJb0pNXcZUxKeUCqjgqcvSPSme1Jjx9yVnXBzL7+3po7uWbVUAstIV+7qYmBq3KTr0zsLSbOnREU + KjSVLZjU/snZ5j2vc5Y37TQ7c2gObXFDtu3sWr8xONCU3D8BBMBw7ZSF6H6zp6OtFHpzzc7uXeEKZ/3t + GQP7hwFzayvN88+3JO1g/zZ3nSekblvfO+ABDm31WIxaheS5VNzutrehVQYg/yUYduVtirO97IGLgpSn + JriPdfVK41UityMXYkBHUnL+iHc84pIsGUROy0+dzLSE2DM3m+OWJp4/Y9jsfqe+/w31nM+T4bSKX5Hr + nWqmg5zo0TuZTaJDRtymXOUrr6XE/TyXQnAIzzSvMyaOiHOyp5PbSpdlyUrIFkRrUoAdWK/Vl530nS8t + o2q/Og2DORScBK1gkGk5rLdD98E3vaca0naLwNbQMQVTPho97Brqbs+t27jyJcW4fbk7XJXL/fRDZLTk + QV7xk5QaxwLuoVZX/9Z0vz7tdpY99ZDrhu5m0ku4P9vZ0S4WtfMUD6Vf2fQ8LrYoB17PqdH675rJ3uTt + TEPBBzxFr2W+yFs/+bpEOhoc0f3bGRhExyy+MgvO+/L+D/+BEEHh96VOa2Qi/+UEzDf+491PSpRV7odk + grd75Id9Qjc+VHRpP7dwmZV1B4g+bEGAhrRx4fVktLVjfSWBaOKAjiduTQYO3VQ3IHhj5rV5tUCAoAdj + /Ud55ycLW5JCzFSCFchOQjZlsnd88KcrbsdPX5N9YWdG1UIT2/U1UpOCozJ+LrhLjhcsJ7dKbsRl3wMQ + NigHLPhaaFJzD7dm9Sdvy8dEZmdlHZEoS8hfePd/ztd8dEFtrTV7ttJxYyhfE/hQkRU+y8dbDyJt02eA + ZlgcJIeHZChu1zZdvlaGB8Z8ENKBZ/hz64c7Xxgn5fN0HCeIBEF2n9ZpdJhMSRT+OnuTBFphgsH2iFgD + WbUzcZooaaXIQ13Hhn7RG80Wh1iYhZjTcHmYhgjje4JwC5NihS73EWkQit2xf38IWYrkiE8GaS4iiwgW + h9D3cbRYil8ViLvlQYKxjAYifn6IamCoij74dR8oEv/Qizu4gbkXHPVDSlMgfYEIMZ+Fef0Di9wRjAGo + jRDYUOwIU6sVPWHADvNIS7FoOukIT5x4fyGIgZDCenUwjuQYgYs4L9Hohr4HiGhYY/oHhwDpWv91XU62 + Tse4hjjoiQnJb1xYH/wyjOeoJVoIWAQZWQpnIWjWU4eYjfXYXHmVfRa3dxYEk+PGhzN5imcIkffYjRen + kzv++Yx2UmkBqZIy9YpJZHkh5GoKB2pQc4tUyCfHc43YuJHfxIlOOU2GJYATKZJ6iHX2djeD5Hf8o4Ak + CZa89mx3FZMFkpX2cZZFJVzCFYROVpC/+I5VsIX3MZez5ZAaCExE+JEj6Zd9mZNPs5B0iZGDWZO65m95 + mYh2WJl2JJa1KJcbQ5IteFHWEkbYoGvz526d+VxviZhhuZmRgpXq9CahSYGTySxHx1qoSZFzZZnXpyit + 6ZpORIyJ2F0/aJMDxTSJd25fmYRGCCjJ2WM/+ZCqk2XX05ZilBbS+VW4FSGBmZR1CZS5BGQQRJlpFWVD + 1RVOx0FDaZcWWY5aA5lWSVP+CEd6zvd2MteA++iPpqietcGbcDlBz8l8cnY9d2iLdTht0aScPumc9mhW + l8mTQDVXN7GXyHmffZYq7hKY23SgDcpsTPZ4wlmYf/FSgCkspnmD+lhZZmZAQCIkKMJHK3ojHNYkMGph + EDajfaEkLlqj9EOjJcajPeqjVSKjPBqkP0qkReqjgPidslArZ+Z1qrJWUcOc5tiH6ymYCnp4qZeP7bVv + eOakTxoZh+meQNGYtikW6OifD4KlqekDjmRqfDdzQYcTAJeJBgOasnNA73BP7vgxD+Nw/7OhfxeT5Kk3 + GemgvniS8CEZYRiSNoaLodVJ/kMazOShPNV4Y3qhIMn+jNyZoXiXiiCKi3JzbYbZGcCJDyKnT+nybhyl + qbKRqKTJlBY3aqCqMee5j67RiGCam2rlEfTiP1p5qIjqOMn4fFW5lykjJ0sRlUyKkL90aagXq/IxpkVj + qPyHQaNafpOaSLeqX15GnlQTc+92mn+XcF/HniIjZu05qMiTb0q6pon4XsC0a9UzhFHXoLlaSaByqRr5 + q+l6V996q8gGWTJoogyEc0HFitBqfkYZXwkapqO6rrpFneOkjtXGRrTqinL6i7XqMpaklJuqSnLmXLIW + sXkYqiQ6dJO2QwOqKlATQNHaOuGpsEDksRcHq8gxrkgBaNWZMI0qhUlFLA20p5D+5xWjBRDRNrMhB6J+ + NLThukeZZBU6pHFwA7QR9SZRWiNt6qodi66DM1KNeGy81a3gqllviLOYxqVpNp5RawPp5WjFxag8SJXx + d7Qw9a9857M/KD8ziLOFSTQgK2tZ07N21z7zSq1zaKXkepBj+xXhMQ9qmbXj0q2OdVo7y7LTOItKNKG6 + SZNcC4+JC5drB5Uwy6dmEpxWhLGlNCmFR0Fae7iIi56J+YYLSrWz2Zmxa7ane6/rJj4umzH6IhmZUxFb + Bl5SN3wOR25NGoyKxqf1ybpwoqqt266vK4hdabUDVlLJex7q2Kwsua8yC70ja7kvQbVW9ywqa59hxrEk + FaL+9tqf4hu+0Pi94GuyGbtLa0SbBbYhssVFxhpKsdu8tekhwHu8uOq6clNdkwqM1Zt39LtSbvG4DGu4 + hHmC85uBu0q+dEM601mZHRmXhbtYZzp0i3tQimpq+ZKoBtnB+KtxJ8aSJgHB0Ba/evRBuhqnniKV3zi1 + RIljN3cTDCE0Cpx/WzsdO5ytBJuzxCpG43nDXfNrCaG9ZZu5L+arYpipMWzEa1lbL1ITx8WtFMvEY6eY + uYrFOta9QwyEQJzCTCug3JWZVRh1/gEakwgmQ5GvVNSwRbhvAOi+TurFXgWfV+S/EfK8L9y7a1s5/mbI + urO/1uWFFcy7HLi5Znx5T7X+vroLVdaLnABLxI3cuSSMT5EsyTu8vEbXEL+7x9JbR7jLlzUhjg78yJ8n + xLVwF2+Kl95nreEDjkvExSFCjap8d4TMr6dst2e7EeeSi+2IxtKLmSEMia2HLKBcfV71tKuCSxT8f4Gb + xJ5FwPggEUnKvolWkR4czEysdw2HUTwLdCIcpU9JndZ5tdBqOLGyqpEpzT2LzfQIIO68rF31ijRry5hK + pkYcz8rcg9BcduaCtCBpfxorx9H3L172vvTapM0c0OgMtDWsn0ZQx/jsSd6DNaWMtWHbYpTaw+acPVZL + yoX4z2r8Ti5BNBMdxAb9j/4ygiI9Ejraw2KHLdLDQSr+/cN6KVDIvDvr6LnqwL9lHM2WmHIoBw9wzBA7 + QrkI/ZL1qkv6hbB+i8BiKodri2vbqBaAWsIN+B/j2glbXKrCW2M8XcmL+stIvaakYzUvfSeBC7UEoaaf + dMHOCMRpm8xJjYiWjMuKaGYngQ0jrRYjqMmoF6G+PApi/co9B8yc6xN+kAhEbdTfzLiiSsOVKo/pUNCj + 2Disxs5l9djy6UEt2tcc+bVtDbcSjDRRXYylzdWsmNqnLRqgdapu/alVChVFArFRrGmStq0wCDKNiU4H + RRXnk1FjHcjg8SlQ+qfwQ1iiKM65PVkLiIeMXSxX7UDYmxcNLcv6CXmTk5KefXb+X6ozuzzU6Avc5a3b + Q1ZmogfR6X08PsShZ3yxj7zRMRverB2hazyw+budGNzGkq2C/W3FIIzHOQZvJ5s1n+CyLksYss3Lrr2U + hibXd52TD06xvChUhbybwJDgCg7Pt0erqhm9HA52w1KDBt4sIm7hF85ienu3MI24Kt7Hpp3I1h3B1Sq3 + 4otcYV11DorGqNHeSxfZoczMfk3O6hfW9zySSbPfvlndSi56oRPdTz7d/x16nQ3JVW7lP17UAqRC1xGn + BQU8GTHly+zjYk57hSq/1vzODdna9PzZegznCnnfkC1sSY7gAcc3rgTIAN3lUzbO3mvnd746qKulEe2Z + P3b+6EB9kTGuiR/euQDM5VVs6EjME6IM6JQu44lN0G6KG5BGTaJthVKRzpVuO26ez2P93GMUYG0rpr2Y + 3FDu1W3+zIkur2P8zWZl5hxJ5ZNt62c85pHulwy567wOK+jtkSQHcLFHzYlW7Cwt6JmO7ATM6cNe4XdM + dIOG7WQJ36M5rWEl6dft7Qlx5M7I0a3OdYPrWUua41P8Y9G65hWNwnOqhKCO4uaMeFULdo/+Z21hTD+5 + 6gXfAkZaYjiaIhDG8EmyozFqJEOq8D+KoxRf8Rmv8VRyYRufIwLv4hrLqKqsQQ1+uSj6s+u+1WQsbSo/ + lnPO7Dae7+gcvbes6VimbC7+vwwu73p0i/Agz+PnzrJEFMeFnoPcq2CirnMmn/RA/+d/OT6Rmuwn/9rh + juSNNNkYikrNvVkeLbiU/sBDv5gBbhAsl7AfrUUlucqSjtyADeJ5HdwFnqVA8Gm4Xs9uHfad7vbjfIFx + 38xST9UrP9hcT3/aHTELtPNy9w/BBZ0VSMwzv+cwT+zajsfOWttoUTOJf4mr1rA2BQnZQWnfTeEBr6vw + SvjZhEPs/vR87uOcrdSYbPMlivkPpLiODifgNvX6Xu48Pt+iEOQdKvnmuqzGevkIyMAMuu1av/vW3Yav + n9Ua3py9zcjeOiujD8uSeJfJ//Wc3/rPTtNccu7H7YT+k3kq1g+MxSaWLecSjEX5s1+v11T8zEpOTcXz + P1/qsF+uX1KT9Y/uyo+qjUcAQALEDJNhlJNWe3HWOy6un0+cvDErzVSt0CNc4VhuXq2d8VwfndpoETvh + cHaL+SDImBHHJA5Rwed0qLQ4qVntJqG0mr5bMWsXljan2PGqFF6/KV2OGp4915MTt6S7x2vpjqgCYQj/ + Thj8DtfuEBcZG+0iBUIiMyxB3hRNDB/J0jzZEkNJe2wON3NSZUyTKCMwhVZJKTpBZguzbGl/aHhDW69Q + 4WLXdn9TcDGOL17knphHokkXlJGrihWup7LFpmG3t749xysayw8prcPLwtC3urn+Hscf4n+fl2TXP95P + 2fl67PunIyCJgXkOLjP3QWAdfLkSGhQXscEBBv0orgjWK6IDVukyEqwIMeTFMRi5eYSAsiSYOyypFAQo + 7w/MliRL2hS2TYoSnTdvvfhJJEgke/OAUgM6tBavejIlJoXUIWTRGlbZ3WgoVcTQhzuYNqXVxx/XMSq1 + 8ViEFeBWImHNXgjrNqqxexvgxgXHsSpZWEfrTAP8iK6EvFDwHKZZVi+8B+8K00T7F5ngwcPenqWrmGqp + VJzjntkUGYbHyYlI52sMB6YZizJAryTsoutqMT0VpS7NNua+2KtZigZVc/as31yLGtLNqs9yNLYX45TF + J8f+cZOoLvOFzo22stMOoV6zbna89MBrs6fdnjJ8y42VRTin+PhmefV4vjNeT7S9VPmi9nuCvpbsu48Y + awqsb6QAyWFwuJxCKQ9BB6FZkELiLhTit/Q6a/CPCTMEy5cQzyOxOodUi3AtFRIkkIb/TJQtxiJQo6hF + 7YhhcUYaXYBxxxtDAnKOX8YDcUecODxySCUB1ANF/TzET0cmp0TNRxKFtNFFIj9sksraZvryRDHBvOaL + LA2cKgU0D2LiygzZHCjOM7c5Lj8oyVQojkryXLPPJQ8KIU47X+PkTzxrpO1QQBf9JMhw7LzTkUYd3VNS + SjvE1LC7JhVPSmXi/EeNSzX+xbHU6zIKNc3bFJXm1E2beXM7VevcMivw3kNUUzqSFJNWTx+VE79cO311 + 1TCNzdTYX2EVFldcmOUlEFmhi5YWa1F19sD0sFURA2pt6zZKLRe69kNukzVVD3AbExepYBOyDt10CWFX + L3cX6RZbCQ1NdtpemcQXw1TLha9LV+n9FuAjBR44IicWrhAzftI99i97pWo4sfjeJXjFMl+tF+OkNGZN + rXxtlRLkU0Wu2OJG9VUQu5VLVc7lkt+IWeZhV8H5JC5G3plleFPOcTCfvQG6YqQn8nip2RitmYOgi97V + 6acJU4RpQJQeKOIxQ75a6ImLtfqSpQvOU+eMPTlqa13+Mkl4WbGxhrpsTOtFe25yyWtb672/1XtovskT + wPDDEU9c8cUZb5zxAByPXPLJKa/c8ssxzzxxyDXv3PPPQQ9d9NFJL9300xUHzm+8wlZYcLMfrrZt1gdv + 5ubW450VGNqljlXu3mPXffa7F+WVaqLxJlz2rHXtk9fXKbX27brIrpQ/rp7/CM7atWWwwHgwCkilrx2O + Y4bjf4a9e+9X1/OIbPpr0wLytwd+ffbR2+MYZ3Jrjn6404a76AUvRN9r3rqINbX/PchJv4MZAbHEPPed + TRXxWCDCkOUv9d1qRgYkHmXacQmqaeWCDpqeiHL3IwnKJXD8+UIC04cQ6B2KWSf+pNjHJthAFy5khHu5 + 3QDlRyV52WNUkjBfCW84oh8+8H4MOxfrNoLEJBjFLw6TogmBKCq1PVFhphHfbSrRkyhdMUA2fI4Wtzis + FtpHjKMgo57euB8zwiaIzjuXF84goSj2CEPo0wzY/vSrOZpHEzpUFyROw5ucWYhCpEpiIJuYRp55sVl3 + fEobTVaoDMWPZr6KpCSxk58Wia8eNYnjPfxXJUiiMXmsBIYz+GgMPyIShh8M2CdXCSmnkNKR+pgRblQJ + SmAJcJjDi2WrHLMjTh5QhRwEXK08851TNmCQsfpi1MikqmpqyJXsmCbklETKR2azm88s5j98BM4jmaKX + 2fL+pDOXeE5vwmOb1qxlJd8JTZe5k0uBSmY4r8lME4WqnoOA5zy1gICCmqM5vCOnLveprH56jYwKZRL/ + 2iIUO0LUWHTSpz8VaE9TLHRPUwwjMklqy451lIUfpWg3EninlGbwRZg8ZDPlGVGJmisj4ryYNHeiTD/U + YKbWk5ZOW5pTivYImEz1oVFDNFSNPlSpLIWqUvwjzWXK6Jci3ClODYbUpE50Pe2cKalyVVSxhFWsYz0q + g/yQUvg9BZ9OrGpbvzou5BAyQJfy6JfYpNZMsjUpvcTEWTERC8HmdaV4zSFWzWJBS6iVikG9JWEd+1hv + 7TUodY0qRi1rV7JmVqAl0kszMb4zyDuBNrQdvCtp1/rW0+aHWGZshWhO6law8hS22NxsZGvKVFGWtZQ+ + ReZVI4jZkBQAACH5BA0UAAAAIfkEDRQAAAAsAAAAAFgCdAGB////8ORCVrTpAAAAAv6Ej6nL7ReenFRY + QYFl+PV1Vdm4ROSJpuqqmOwLx5kr19XX2vr+0nx28Tk2CmLDmEBKcD/h7wk9OaPU57QqUyKu2G7Pe9xw + i0yD1tMpe6hjsFvXfssp8fmtUbfrAXkoMR9CNnRBWLhkGNW3t/igyGjn+IhwZhApmbhoBMihdrBRRjmJ + yHZZSmJp2oX6GBC6mlrzGqN581HYqYGbxHQbCgcL7CAbzDO819ppTIyivEJbm0sYpgYaGP3p1bxMui2p + LYfM8N0tnPnR1muotX7rmW6tSr48Lp9C7xZeUg91jyIG1M4MjkDvpAnkgG9fsH4KZzTcEk3fw1iXMIyx + Be+gxv5rIQxeQwiG4cQVIkeKM8lnI0SULEqOsICuCAiBBd2l0aUhIUtWO7OhRJbR5cKKOEkU5CXNV06d + PY81xSKUW64EUU1VrQAoI00iiEZpXXT16UmxUifSUBKWUdolL7V6TYpBKU+ykOhi+rmVqt2xpYpOCEhz + Kgu/NtbuNWwScWGbevc2Jjr4kzXJhC8pJnv5YWYZJjymdAzBqlw0eQU33PwUtULVXzw9Plyx0lIYk3VU + 5gwaXO5iO88yYc1bkrosthLvZnqcIkvfr1ObAuzMyOihyX1WV75c1DOxwCt5VhEX28juva8vLm/zH/dU + nacf+j4rpHmo83Gjdx2CfEtYLv5uo3FPjH541ReDgMxol19P+p1VA4DUEcgPhDAYeGB66hnH3lb+JbGU + g8BQOJ6EEzblW1yyYWiVYBuCAF+D1onYBIwkkbhLgiGmos6KZHj4oYwx+mgPjRaaqFkARh6JZJJKLvlN + RzzKJCSQv0gphSpMXolllkoGIYCROqpVmJZiMhnEmGTCZGaaaq7JZptuvglnnHLOSWeddt75ZjwIWmRa + NwL299VLmFE5JaEjgFjlnh+RsyBjL3wZoKHYSUpHlOlx5GePERmK6I2UVkqjdO1AKh9/gRHaqaefSpCq + Q7P10qepsgYKY6uarQqqgmbs2V6ks5Lq2qC47jcsq87t2P6lOw+mSCtAT85T7IwzRfuZrjVOBmyE/LV4 + wrPb2HrrEMOCO4EQgHl7F3vohucYuatRW46lQwZbioHoKrtHtnjAq4K7GcqrIUYpwtLsHe3yGyTCORy7 + y6axgkWwvvqCx+GPCh96cXPZsejwxPY9t+69tlmRMcYlh8bwtVx5PGJfBb/H8rInxzuzvzQjy9VcLieb + QngxP6rtzI0IXa21nBD0c8IuFw0EvrvZXA/UAwOs6Gx17cy0USLLIzXXRGc94DQ3ObU02Lta7Q/VX68U + n4RdSyT22VdDZvbESc+9NtxR3D212hY+/OIj0ryNNsl58yU04WzHXXjg5vwBeD18a/58+IlEK744ix3N + AZw1QE1udOWU52uWsINs/gZrSLSiUsMiYv7tc6WbPgljaaTOyHeSTbu1H6BbLvroF8MOvOaoO25HRjmf + /fJ1xPt6Oe1H5/T7wvlW03rzwtEHUMnP6/H9GJ8TCVX17xXRWbHfa/r1822Mbz5Mj8sUQe+5rS9r+3SJ + PxX5T8ivB88QIn3qC57e9mG+Cq2nEdD5AQDn4JZ/JHBjBhTe8PZnLGzwzUZUYEcYUjLBsFUQZWsL39Aw + 5cAH7m0gzeKT/e43QguiJISZC91JNJhCnnXQZwWzyAthGEMS6g+D8RrbDoKAhXT8xWHjCqIQh7jActyE + ZYUQyv4o/vLDpzmxeNEj4r5WZoMqVuGKtaChqpyIv2kELYqIY2JkkNg2lWlvC+wq4Ba56BgyFoqNiJsj + zHT4RqR4K42GuyMhXceLPaZMb348XSOPBhduuQpeh/yXhCSpQD6WACPZ6ogsnKRHpVHyjniczyNvpkm9 + UOZRJurk3z5mxjMGsZJay9b63tc/YDkpkKWBZbRo2TcfhXKSqWyMEcGzO2QKEjtZhA0pzXbJYZbLmfvq + EKRE5QyOTSqWECQVMOslqVM+cZES8RnFnNatarCsP9T6pmVw9SX88c+aPTvHlyhhP3e6TpRb1Kc/eCRP + D9SvjrVEZ1twNjF/1q5fz4QmkP5udwpqVvOY3YOAjrAnt5YRCFIKhdinwBhRu4iPXQ7yHI+UgM0C7Yqb + 4XpmRwXVOmOJVKYENZh3VgSKhao0cpQiHkszaahVmmymUqTof0KDU6TQS6U1xdVLPfpRgB7shE09nUVx + CiWeVgiTeeSnIYcVT4mKIykVBSFWK6ZVKTRTcjp6KtlEl8b38XCJ58ho0zj0Q7i0s6Gl7CJRi9g8z6UV + JAgqzBR/ug+3vrVyhJxCB1i3KDWe6KI5HZlOryNVvjo0cVO9mVIE2zgsjhGtTdSsYtPlxWoaVDsoe1L1 + kLDWbWSWr6ddY2rbiAvy9aqkoxXFRoFKytratpiZy+0zIP560L3tE7Ne/WoFG3vC1TqsV4PNahMqa0fa + jhC60bXrSlvrRhGsITrLXZVwObdd0ODyso5i5yn9ck3rMjdRphVcZ/+q2liBVqhaIyx4ICvd3bRVs+M8 + HHc9m8jHXiqpOfRtfQZM4M1yVr0y1S/kAuNa//5TVIh9V4TPW0j88gW22zlet+RbTweP8sMxPLBqYbsU + 5oR2iUdkIb9AjN70UpiqLFTwtP5Z4wCbN8J9LSEQi8haaN7zZwMR0WwJjGOLiVUfTX7smdyEJjt16Uhl + wpOXv5zlL4t5zGQus5nPjOY0q9nMpgkEAZd64hof9rfAbWiUg3PfsUyxwDOmsW1A2f7hxD4YnC0+8kS/ + W8r47gAoff7UnZFjwEOud89KzuaiVybOkQySyBL2a56pvJE3w9koi34Vphu9k00T+dGKFDGoTeNYRYcR + 0DyM7X2gjEZDj/WY9RMEqn/coBzBai/3YjXygidpVhUHqUptZBY/xxFpsiTTfA5urncsjGXfFEr+87Nh + c6nBQPtOo7iepa43uVQAL9TZxUjmsHvK6U572tXWm02vEbmhpPWaxNQ+jrGPDddzH3DbDTOnTRfTSk46 + Nd7/ntSU633VGlHPPc0cqLAb6KOGc6/QAqdcPmwn5PLSJlmw8gqnGH5tbOfXojsytXhnfRBMG0Tcwayv + uTteQ/4L+280WZSOqVFHc0KvOuWfhrh3TcxzJpeox+KhkuJsXQWNf+zhGlP3pUI+alYyzeAfCfo7OS31 + nRYd4lY/FXu1Geyt42c4qEI50elN9umJXMVrgK+P127wflO9J16vsI5Vjlvj+RrtpP4gCGP+jl/PJ+xl + ea4Wu9u4r6C0qned3r0vbmIgMR61jsf5E9VJDX4jdxYc7HqOJLX54SL78ag0V6A4nG8sXniledf73ums + m5sDXm+xlmyG+7ydPZW87W7n+O7h5gRaJTzfdq9rwTcnbQKlPsSdP771ks8t/sJ0EBrbs8yDwc3pS7n6 + 1meb65UfU9L/Rm61Vjjpao57vP79fezmF0QoRg/z7leV8mDou3A7LH7NJT1wQw08ZXuCRzkeQVJ9B1Vg + 10+sp1rJ511m92eJ5FjXMoGXRCgsFYB1NoALg30ZuEvBllNX0GPp5zbJwYBGF2kQuC/3Fiz4hH+shAvY + p31Qh0CH54BvB3d68XEaEUKuABJcl4EQQksryIKr53mhUXbLk0RC6GuS53QpZmAP6IL60IQzOG4rhzRH + MIXxJm/zdnt0ZH8T5As+oFca5iIttYO6V36j022LlXjAlnZsaB7+Z4VLKBuhh4N0V28BkUiKl06SU0MH + SAwr2IEeSFwQwYcJ1CzMITDrFmSzg2Ji4Qvh51xviFQI0f6Hm6IFMgZn0dczKLJDbGWIueKGY7iHnBg/ + Z3h2TMdkIrRCC5eH9Gcwr/WIvZRRyQQjztdB2ZWKqsh91RUZKJhS7BWHMpKIrUZ+tngIWRdGAfZZVXZy + YLiMIaWH4yWIVBhefJB5ynKKH2hKhrdxwdiDldhkDlRYVNFDTUd86tgNnThNxxFotLQJ1nU3k4cWlSGP + dmhZfUFaYFKLzuiHVtNznQAPZScuKCh9YFhkjOVvzpKO0EheaqRC3mZpi6iGXtCP8md8BBmDyPhnkBQN + 1xiGPDh/IElPdkVFMlhHJmmSDveRKqltgbiR4mJcB/FJmgchDPhUZmSPL6dtRdhfR/5VbS+njBvlk9Z2 + hYQ1lMBXeSSZc9uXlA4Zk8REk8hlk3TohVaVhAdXKw55kmJ4jhUDUkU4HThBCavQkbFjlQ9VPUEplBtx + iaI1jF/JCVhnHq/Qlk35YHGZHHXghBPJlYWZZHhJeF/4lgOpkq+yiwH5jF6JmIZZlYuJkmWpU6O3lZF5 + l5O5V/ACdVeJiiBJPk1XmrWDkGmZDF2ghTYET78jmvOoh6a5c5E4an50Bo6AhDpjjUyZjaVJUEWxmUh5 + lDepl43JmCkpjDvHfmxxdrInQ5TZjYEplmM5YdnYMTN3GyeVkHHWcrsZddUZm36nib3UFaTBkAsZnZUY + WfWxef7JKJNU8kPA1AcK15rzAmTrKY19CX+vyXkbGDP0KQKw+Fko5J3FKXEywX9+uSqhCU/MiJn983xq + 6SiDyIiyV5Pt6TwKY2vjCXmk2W3vNnhE6Zx7eIkotXbbqJGUAjoeikpZCXrrQKJ3xWGYAkbGJUn8CXBU + WR0t6lIRCZ1y1JU0+AdnMCqpyVXlWaLzRX1LmjFyCTNCapw8OqPPCYS6JEttmJwROoNy4UoIdS4UmqTC + 2KA/46IvSqYsKU33ok6O9B9EWB0dCJ/EQqUII6AlkCQDxGWfgyVbhmV+ymWA2gqDuiZdhgxeUkVrpqiL + yqheJqiN+qiNKqmTSql0Yn84k/6XFemHY7qOMfgW4KmI5daTuAOkz5hTdampBtWFf3Sq2JKegpYboOqZ + oAGU1EljKKqWpIJRKlNGugCnuhOOjZcx+fSjpeqcSoWe3KgheaE9GBdthjdnmSIjXyp2WyqOQziimVqU + FQNZJ7itzJNWRrSgQic0CVWs2Blz0jmdybpQjPZKnOlgL8MOsmqdDaqg9HWZt0UaBfgw96me3IotY8pV + a2pUcxdAgEQ01IiN+XqtHDOvMqqikXN3iPd9CLhcryel2len6pc3tuSb6KoiFsue/8qt6ERW74akyIpi + Ivqq6kqnHctRH6ukeCWyBjukrgMoZSiKFZp17ZitFfgyZ/7KUJkIsojGq4kJr/QCitoYHXOIgXIHtOMq + tALYgsY6oMaTW9+qtJCprUTaIvzIqflZs18DYda6og6roKBkpeToNO76OxBlTh6UTh05glX6oHb7kBDJ + oHXHbRFxgsIZeixXsG3hrChkVCFjHdqpXf33OlbbNDgqQOeJtG0Gg6ppmxrLRD7XstAgFWxHr+SknBGK + tprjRrQJD0bqW4Q5PcPHtcfohBzLtdKyjjlZhXLwuXg2s5fqsrajgPNaoTw3JCUXuPqYNDuLr4fZr3rL + sGfLtBSJj22GpEbLi9p0WAsYeXD6hM47VGh3u7IYuqJLsng7hKganL3qtz9rTcGKof76chHde2sziZxd + K76kS7506aWB1SfiYbwuIjLocJYBN6yhCrppE7tl5avNSYHE8bTzm3+yG7x1C8AXsyJQWoxra1nLFrYH + qhI6Sm3nB30WfDJTO6sUBDQFyQNaaaCparf7S4IT/GNXpKNFW8IM7DfMS5wSM16clMGFR7j9N0cXkpnE + eJ1x5GiOm6o4vJA6BMG5o76caJdbJ1Tum6XNmKZI+VpmACg7zJp9qLJ3qbmdSZZUDL45/JTwqMQsG75e + zHyg02wzRpjTWLtmW8M8zMJNC2NLLL901cVpPGsgdRRHKq8xrK9iPMhey8O1hLo07CzIK5n/Q2IuVzzN + KsR3uP4h7xmze2vHlDecGry79cR0YOnIOaMVS3usUsw+5ljIxNHEI6u9g7HATlqKnWpxzBex8ddG39uw + tMGzJ7yFZRSV2Yu116TFAna8uGzDYhuKHkNzYduWODEMg7tiyzvHFYyMxDqJBayh7BrKSvHMt7PKMhzC + RqyfpCt8D7y5CKqszpvB35yiH+rJlGHKiwW/qTyVZSVf8Lyu6EsxONrCsyibRGq0v0S0wriTvvzF50PE + yNLHv/jPrvzKGkiexjzN9frQU0oH7phcjqTMmfa6eTxw58Srgkww4xzGzGsMmBswAkySMriscfQscwXG + Hz1yY8uT0uyat6xMXzvMuolJp/5rN09JGHPVQs58wpIXQY1r0++7cnUolXMXglIZhwGbBUlmuaBHzjLt + tcS7ycSG1coLjwIZ0S0srmk4bKv6x3jV0ecslIVrernq0RTNFg00zLk7xAQZASUhvK0UbZQBP0cBbvcr + 1pMHSQN7s4sTM8NUoxY9Q3lrZNl41z4MyO0HOWdtoH13v8Lp0QwStW2awAI2sX5QmSD52Lb7rHuNeRom + 0oV91Wz7nJrdx4Ecz1Mn0aRXy+dxQpmBxjd1orsMkKzdyC29WXPdmfjsnuGEuzn0U+sF17yMpgnKzoE9 + vU+cuizHOHUobA2Z1N57feA3QMma2jk9t0Nax6qMNLE9w/6Mu3ixDD4VZi8hd4w96pK57c8q8t2kisor + 6gL28r/7ZN4JvQsW9wZkPaeHDC33XdSYGF2IAhMsPcl0cX88I9wAfc0F3qM5Bsz2TTOdkn0RLjidhLJs + 7cO1rdbkSshnSwNsyZFvXN+6vNnu2tlb/F4N7g2UnHtbXOMrh+KJ+94mAXXEbcI79Nz96dVjFEvKzdhz + kdjT1uN6FORYW1Cnkd2k2Eap8tSgvbESqXq9bc+wqhBSXElGvtyQxtzRCsqFF1uC6b5eTtp7iclMQ+Ur + 5NcYScBnzrn2s0FcfjhlkGzk+ea+U73Rx6at7MBv+kJr1eSyvTZ67tgjLM+bTaCNqP6rgj60v0zecsYo + cqzULNgpIkFGOuy3HJ7ktv1+RhjlU5xzaLiUF648lI3MdyPCo1m15ekEfe7nIA7PL22zL1vhJB7rdt3V + vA7CiwxkL73H1So6o/HqYe417kzroezQnozNk85iBj7Ns37pvZyRyDzisL6482ziOG1JX61M2R7sxcx3 + eF7i1b7U+ZNCdkzukr6wTbHi3J60wIiZV7Dp2L5hzx7tVLvYMn7jyI3Uvg7uQl7m8G6RF6XYKq3kFL7N + A6+K+C6tG4axhkzA+jzoDg6qLgHidE2J637kDUi40Q3wacudTmnsGu/wQL7wUr6GM+7OIS/y66uqMz3X + qZnPWP6p8tCD8bR9nKbe86wc8F2d7yM/ov3m4QnfGtPe8v8zwIPnvmDO6Ott9C334gfPyW+t86nWva+u + mx7W3OgM1kEazBwtMmAbVmQBw6fc6xwe7gVfCZV6J3q6JGhiqGwSZliWJpEq95JK94Ta94Ev+IraJXw/ + +HUS8wZf0fEq4j9O6TG99anGPPNO0t7jxJSv0lLP7m7q2yP3e1gf1lw/cZgv9pOLeuJlypo/9R7Z9Ad+ + Vo9P71yvul+n7UVMal0f+qs/9FAb4B7iH5dsFzsO89EYq/FeOAl3tTM/wkX/QR2Gm1lPnJaY1sJx2O+Y + xGlcj7n/67zp5NfDj9Av59Lv9v5y1t8TP5fXDvLpT/sTeujwCh+xx8fKLlsk300dTy3fgQoDPvzqv/3c + D9zUTwACJG/R+OFRkbJQcdab9zUnT8TCxDDNUV3Z1qXS41rR195mLO/224d6EkXod6tFHKOYJ1l0FpdP + 0gdVbUqxWWUlFtR+dRqvGHwLDqNlJVHCYnPGajnjWn4TA836nN+f7Zn6ROIWCMMER3qS0hAz7loAMwwb + KZ8W2Qx23io5iyYfIum4EA0/KUw5FUU7NWI2mUJPWdUY7apENWd1f/JeIeocFncnUYF2KxSFj7lqt0aN + l7GatYhqMj+is0UE/nw5rrzniFuKKVW17aag0X+ms4CFAP40g2PZj3PC1UFZx8nt5UHV+wcp0UCDSC4F + k0En38FZ5QLxI+MCoqBzDqEItICRY4NNyTqiq/jNkUYbpU7+w2cy5IaGG1v+GwIjY0wpIzvUY8mi3wuc + 4rDZtOFundCcL9P9cobUKBw5O3lJ8vFTDr6mLpgCvPotq5E3eVY5owHVB9kVVO319KmyzVY3RAtR6tqO + z5EPYBnOmWsQLTOzTtSuZffHLVa4fSH9Hfqw8JosiJHsU+zv0NS0DRobjgXZIdwynBFkpihaa2XL7PaS + piJ14OSAnfrSi3kCMLVUrD1FqwK68K2iMq/Ggeq6k2cPvO9NzL2MdmnVL+wuPJj6F/7x0c9zBk0pOvDp + WWmQZ44Snto0k9TNYDdHGuXN4if2kO+NB6Pv12zVW2Sv/Il8R0Ka8W8rNgSUBsC8MBNJqfy+KLAN6wbB + zT1B4MOBQc3iUgHCxNoKCD0wHLwQJlr46K42RDQKsakmVHRCtuo2nPCtjmJEhjsJsWhxHwtF5FA6wyiE + DxDj/MCwPhDlqvG3JftD0SQdZwMhIl1SqOXDHHtUQz6BmmsSRyyfStCpLMeKx6VsqlSSJsHI1GLLsIAy + zU29QjuuTRoQQEXNdoTE784Ovfvijj2dk0XLp7qCMsqZymTFisv+lLGw9g6lJdFIYbFvUUIDzQ7TyH50 + y8THEP6FStFFe+EURW1OFS2JVpH8ssEwVYC1JcI+jTXXTreitCpEa92VBzGFlbRYyjhRctRZbQn2WNZU + 3dXWG4vz0kb9SHT2WUOJ3HZMb88CVKhldRU0XHChiQ5dntYtqDFfi0zK3XYzJJbeee/l775kz72WlGy1 + pXeeK7ed9t2DZY3T3H4Fri7fCB9OGJ0UJf5VXojv9YLgYw0W9Uh9IzDYwb06PmgMV6LNr+TghKoD3kZG + nmvlgQh5MWImb66314oVto2smf1EyN6cCyU6VG1MBRlmMBjFuN2auwUXaJumTk/OSmK+NOOSjB6xa52b + Ihfb8qKuWkESUlbP7Fsn5Xlssv6Tbpjrr9fuqG5kDR2GaXWVLvhMur/2Omy3/907q7uTayVwxB1iHN+Q + 4cTa0oDRnSTt5xynuW3CC9/7cakVBzzwosflvPOLeXy6lY3bzDzowcO4/PN3Zn/WctbJdB1SlmOX3Wmm + f/f2k6iL1f1ssaJ5OXGAv62cJKONZxXPbMSWaHI71zXFd4RF593f45sdVvW/c44++c2/B19QpMw/XZ+b + 218e9vTV9/nJ8Vcvf/T48+5/d+ZN9yc96W9xO7vaYOpCsexxZTp66978/Pc/WvVNWNojmnC2ZkD6SRB1 + G+QY+SLGP12I8AHK42AHIbfA0MGvgN6LoObq0jy/rTCED/4s3QFpFgAd7pCHPfThD4H4wwQEkYhFNOIR + kZhEJS6RiT7kRhOhGEUpTpGKVbTiFbGYRS1uMYlsS2DqZvgfAl5Qgy9sXB8EQsLP0PBhapQcBFMYE0Wl + 0XliZCEZXRhHOVKIgrmy3BgBSbUAnnB9fcTUH+8YyD3i0It6qceWtmesBUEnkrfB4w09KMgvMnINj8Ld + 2xw2lEq+MZGY1GMZr8dJroRCUzBcUynbCEecGUVHh9kGFTQipE/O6ZU1hGUjzZhHFJYwU8TDpSsn6Utl + LjKTqPQc5zYEl13ObpoMcmO8TDlL9IVPlUOjZP5IeUxFyk2TweReKps5TXcY80TaGf6nCstpznMOk5i9 + dJEv2LkcM10yXyQ0oWpU1BDhcOoVXVraPvlJTmCe0pro1EF0VJWGKllSXL+E50LrmTsAIsQKfJNCCZTx + xmpe6JoWYyZDRRSidR5tk5fwpsVG2tB+xhOlKbXUHpYAK4i+tFKjTFKNSrrGk9a0Ry0CBot+qgc0LM2n + SdKnQu3WTZI6cqkZDRII0sTULLWSYReNajM1StWPJOtRdbJITCemy+vgLySECCqvwlmJanikRE2Va1bx + Vse2DlKmjHFUR9Eayq26lF1s/ao8BehAuYozn40iE167KryhWtV2I3wPIwJ7lz/dgnhvBdNewepHy6bV + Up7dRv5HgxdGjrgVqnFFky1Me1o0sCS27VwtX++0MsSl7BqbRa349Hrb0BZvtGjiLTcw9VsZVha0iGUu + bFBDotoexSO09arJpKpa1x6jsS7p7WYRxBACBfeMw92Vy/w6sVuizTfTpS6AXDpe0B1Wm89Cr/VQQxSP + 0pWoFxqUK+obqfax1obraQ1Xyxq5AD/nJVdw73YwQuAWUlQmao2Huh4JXu9SlrjCda637kvh+kiUq/1V + D5dC/FzsmjeW0J3P/Xqk31o8OK98YXGLRTwg4DIoHJAVXAU9bGLo4bclk6Gxh9734SxFT8KjW7BQQ+IZ + QBwZRjDYjIptfOOEuo8j+fAolVOFtiMtTzXCY94yKD/m3RQPNrxKtmmZ3VxgNEeZlV/BTjOUasjWwTnO + csbmpjja584cAaSr0fOS+SxkJ/94ziOubnUNCja3CMMahD10URPN4YMUAAAh+QQNFAAAACH5BA0UAAAA + LAAAAABYAnQBgf////DkQla06QAAAAL+hI+py+3holyiQllpFC1jPoXLJZbmiaYmqbbuC7PwPHuoTOf6 + vTuVgGPYDkNF0XDs9BLBpfN5akKn1IO0+kyGrtjuqvsDcJGghFbIORunY69b137LefOpOhKvy/MwTzt5 + 9iM4+BH2xKeXuKXIqILYGHL3AMn42OI3AVhmlGa2SUHIRjkaRWraYHkK6qj6loqyOTYUyvm5ihAmSPXa + WsfbW/XbK8kgDCxiHFkmmzFoS2QbbUhIHHN8bZCMvaN9Wq3Qvc0EhnDlTP1pCK1Lhv58KA4cHm9Nv/U9 + bj8zvwHyR2tD1zmAz97B02eKH0I6Cx+wK6HwWEQfYigCeEgG17r+gevQdJnYkFVIXyMnXTSIquQXNxzM + eXo5kN00lPhegFQJEecenUyc5eSJ542FF+dObsp10uJHoHpuMi33NBsulOCiVhUaR91UD6EealXk1OoI + sbuskvgalGxYCv+KEPRJFSxZN2uj1iWJFJnYu2Yu0bpoNK7SsnOXFj74lEUnvXbn1NzqFWMvvnMpA7VM + dyNjppgBp+A6k17nxocRJ3656LLQbI9rZaQhmMbo06WdzMYi49vtHpZzxfZR5veo3aprLyEuqu/mkZh9 + qlDXupLxYNOPq0UtCXm9PZJNpOmOTTtO8QvJ24Z5x3yK0RCiQxYeCXd16vPhVEZPVf3KORf+3GvWpx9z + 9dl3HX4oBTgBe0TUAB8pCDb0oDgR7rNGM2mJlkgAf5WwmH9yDQjFhOEVhsN36dnDHlcugNdHg+uBGCKM + OYi4XUbfmSShHgK5CFl5Mp73Y41m1XKjEtsEgGSSSi7JZJJEOfdZSTQCGCSFrjSJZZZabskkEEBouCWP + /LnAZZlJ/mBmkxakyWabbr4JZ5xyzklnnXbeiWeeeto5ZoVJoeKhfE21c4lKU6JYpZBDetKMQWglNKhR + hRqaKDeV2kTiKo921Mps/YnJ06GIXtqCqKUi0demknaa4aogmhoPrJMd9imjgQRq2k6qGifrkaSemimq + 7xmkoSqe/jn+qZS/yrasSPehwaKGoMaIl38sjtosmRpki2OBRBY5zrRA1nGtMjr1OuIG3OYTrJ+LgYOr + pTqK+e5462p773LefotWe+ISSK64//plXb4vGpzas6Dc+Iy0lMxm7cCQIlwKxRKgW/Et3fnbyGhDJevF + UeNarC/J7CqsKbhWePahY/TGS9TIJl88czGlcYFOuBLjyxKaUe48cc0JCj0Wrf34BhXLJMkRxiMmMgJ0 + 0kRfOLVURh8tGceRCtWSd4SSVnVKYVt9tboq97d1yJicAPOsY9v8NsYZA2chVG3PDYY/QggLi4BvF11D + lXL/VAiyFSntRXN6r7Fi1H3+fTIUjkv+VFtWjdo9Oc1cL05P5lJD/nnYgxNeyBBou7K5VJ5LThjooVc9 + Oul0I3t64puDUO58sVNuyuq23ywC0lb7flXeImtxd6yuRw4J8YKWzbhmayNOLRZf4R6987AQv7s8oHc/ + dCbTrEx9rpJrdTlgu7a7PNlx8xq88LUnZ3062G8FDPcc1gz+cPArk775mS8L9msPqfrHqu/9D4AZEaDM + CLgGA14KgcZyHQXFFj/snSULh7PDLHymPSq1j3wICaGzgMehyzkQNl3zoP26ZkIMjdB9f7sg3FKIqg32 + oIU5OMI7MuCwCc6QhJCzIeDi10C+9ZCHDPqPBoIoxCF28CkxPCL+9MwFGB0ucR6N2pXKKmVEBy0vjMVD + Yg6V2KIptmhDGljfgMj4sPbB8XXeWeFzPrbEb7jxVVJUYw2n8wsYSsxneRRO3aLYxzkyqnUovKMd2QbE + vtlqj9Ao348UCQlMBkZ/gFxRrZ4EhO0FhJJlPGAfaViY4KAGYI0U5SMzGMoU7ih3GPyVJqXzI1ri7Yre + 8RIp9xbLDG5yWrfc5QiLCS15LdCVvyQSIizUTLhVMUen9GMuo2lFXrJNWu5JAx9mObBX8rGayCyduG4Z + yIp08yLfHOW/PonIRC6LjfupXOO4+RlvmpFT+EoeKYhZTWtWSZfdsuclitWaL6prlf1cVjn+09Ys9xQz + nfjspeH6wQlFWQVUD10atwhaSm2mEKHwuZ/4hoWpw4ipox7NFu5cNNEVieGXKorPVNDIkFSeUJ7rCk6D + YuqXitq0Gh98zanqBcaACvRSATEm+6KktUwYdaGvwVVUTYmTaQKrp66SXSulOhWhYtSSGV0QTnmA1KQG + lKXCPFgnG5fWvV3USGYla06wWcKcnpKtwdvqW7GIC7Eaiag3nev2jANTpS71fbrzGpE+MNO+buRfO7Kl + YvlKn78edH3++M0LAxcYyyoVs4xcZvTodgcYSlYjaayrWFpD2swMEZnGOOQqoIgBJ4jMoZeVYjlrS5XO + 7nMHu53LY2L+K9vZ1scYxaKIAWMzuVmo9KeKXewfG9vavTkMuktIh0r1Sk7fvjEGjgqlQuVKXIYmCrnJ + PeZ4s9sXfxGWrhZlLVZ7K97lklcI8p0vfVc71Y1St7rWDdlTTZvPgvSXu9uCpHd16lSeKle/5C1gaAG7 + xsIaF7zhzS+FyeQW+dr1tGdlYIDVWl32Vq86tcWteW2bW/tKssTrJXCBGYtdm5huQSXtoYxFm+K9jlPH + oetxE2ksOBvfeGwPTUZzI/vjGGdXq4k4rpJVvGIWg1YMS1pTmr5UJzBzc09kvpOXy4zmNKt5zWxus5vf + DOc4ywkTqnRshrv62sTaGMsDNCiR1dj+oEH6hsq+QmzQPJxjELNTOcMFMYzvG2Qhv5fIJbJzhdtB6Lzt + dLQd/nDMJGjYwWjLp0UBikSv3GlPlyqYJ6YqKGOC10URmM8P1Oyqn+wZz7Jw0FBSiYdo/TwJJ/rWTaWk + oLsITZ7EesnuTbWWyYvrp0G2ibDOdHcBimpn2/qO0vXvfnPdaxkBO9iIfnbMjnLeBu/3g/70257XOuQ/ + E4oYO8MnaNodknFnVtjmflIl063hCj+NI+JWMrOZDKNkjBLcY33SgqFk7ThmW9KTbty/Wx3lO2Ia0zVN + uMH1rUxVP8eJqWXhxtXHsEt+HN7xTlZkgAMbxbA7rv3Oa8RTSnH+kUeJn2oYWCR5fO9lh2rl2t42fG/V + RMVwnJ41x2/Oh31kjEuC5pWcIsMGrXKm4LvPzdY5XANedQCjZrsDF0jW381yr/sF3Yu09CKbC868eHzi + T2/62tu+Kso2TXqVPfusOd3yr2MHH8E1xAbhIvRzVYrKIA851G2K947UhOo2KFG1C070oiP47pM05NGI + OExk37xlaNe8n9cYDTy72jWgN9H4tg4yckfa9F9de0FCnc9wAR06sF896QcU8caz8vEJvv3OvpIbySQ+ + 9r+vT/ABX3FQLmzXIZVJUkbffKfX3e6HTf2xb2r5HvUeG9hvHkTLTXy24bTjnBdWENyJ8dP+b/Qawp8R + 5s8tDdy3tfq9Hv8wWJN5tCdS6gd7WvB+Jxd/tWdqhZZ2auc1q3MGyfdSZRV9kIdw0OeAssQ6tdRUt1CB + 2rd9mydKG3hDpUaBUUdNdBeC8sdtHkVwJOZvMmRoh7aCCjiCEFSC1JAqQFN+VGV5PUhcQAh66Md9kERA + xHJxSpQ+KMiAjEZFvvc7AjiAvZQ5HZg06ENqdyOE4UMF/qcDTMd1cnR/MhVdqqJFSrh8GZcuXbiFNEiE + RmeEI1Z8KYERx9OGVbAMeJgv9ccsc2dxchiHPxR2aOiFvGNwB3eBgXdYgGhngjgYVMeCf4eB6edYUeNT + I/Bo18eIBzb+HTRRiIiYiBkoWW2ThfDiiWlIKbpFfuU3R5/IhaIIeYIWefo3iH64Q71TXP4ziZS4Wj7n + Q0U1bZsoawFYgzbYiEz4b0wEczJlL2LXM5w4YYqofki2f/jzcwjDh1nGb7wYi9LnGtNjMNkYhmJoiyNX + YtCFPBP4CncoexB2Ch3FeGM4jXWWe8uIShZYhGTRhuKoUXA4VK6lhk5oK8yDj/4IgtuYjzFGj+oFg/xE + R8HIjVJoQX5XiQBZiw15kaBIiyhDjDBSiGy1jnzzQ55ojw/ZYK74jswYijLyiSy1ju/iiP/VIyHVAezY + Xh2JkAaZWwuJjrNDkx5BkSpYjFO4k67+xWA1eUPhiDC9x4/9KILxcYksE1f0lpTdtZEy2FOctIsJiTVV + lYtXeVbflGSHeI9v+JQnZVLq5nk/iV4nCI2z14CwSBET2JYl9QliuTA26XhCmZM62ZWAOHk7hmFORJRx + OZSFiVo0Bhr7w5ZuiYCImSiQ6JSROTkguXNmBy2B2Zhg9zVnSSpMmZWOY5mSFG4ohUMmiT8VgopNmJX0 + 81G8EZSxyCL3No1WkFpW6HrGGFGr05Q4J41S1kUeKIyuJVipKZJgyBkW4zu96ZtymT1/kZZGSJullomS + 4ijJyXzfpY2HyZEARk+gEhkvJDyT5JkQWRrL6XZEM5qW9p3MJxj+6ZiADZeCZMmcPPObohYIGjcsztFz + IJWKJuNP9elXHyhlF+aYBXkr/UmXb8lVollfsBObH3AmgoAlYsYmFoomZwImF3pmFjAIcgaiISqidGKh + IVqiI4qiKaqiKao04BEd+eeQpXNT/ImStVZ6IBKP8uid+Tljg7iYMrqDP1qje7mAWAl8LUWgBUp5O8eZ + yMlxHoGFbjGkEbaU9SaJ5QiVGamlJXlhvFY4BXEtKuKfSDofPmd/cJmkc8mZWwqUrGVSAKdu4EaS8Oc2 + UyMxArppXAlMAmmcJ6Uc4fmeMMpZrJdAdpoqHNaXkShV3uUW1NiknZWFcVEuYbqlU8oJeNr+osNZltF4 + n2qqEY26iY54FsFpoH3qozE5TDbyGP60mixpJVupp21Engwpk+43VZ3wgmAKqjAYbjQ1jsqJbbDqlzWJ + bo+ia2UFT7unetP3qCRJqwziRpj6qoYZkW1KmBaJlIw2quZJhS94rWv6akgmrZPZdZ3qqd8aqqnnPu+J + et2Bjq2KrY9ZNSuFps5JqKgynp5lP7YZnV+oieMZn3lpPC2ql/nDpptJjubqk7vHe5DoQ+Xwow7motZn + OBEjKDJRsNhpYEHikmTIL5N1Yg9LBE8WqC81gdcDjFbYfkDCEZZarQqEpQ+YMjP6pCEbWFGJlIjXrEa1 + oN54sF7Vdwf+qp7koqOxqgQwSqwG+ou4Q7LBxXc5gx4z+YXw2gTog5FCM65eZbSrJ6mqhLPW2LRkVVPW + 92gRi4cLmaedmbHuRq3DClY/20bwaV4BmzOfZSBqs3zm4LJbe10K+7bxOlbX+WLyeq/J9KmpqoeBgjMq + C7M1wyPrGTMBqRSCWzurKZ5wG4T2uXQdUq4A6lZ++7ea2lexZLLpxVAoGWs/iJkBOzNZmzBpGoeOao7Y + 46TyyYi1W0jGdIkPVkTkALiKWp7smZ1mZbJjGrrceoQ96UelyKmRu4dFSzCyW6tA9ynGe23jJ5lKNKrp + s7bKIqzAa46im6XVC68ra5WSG3aMK5z+EPq9umlR7OevixZ6BUlXmslB4sdfRll4fSuR3Tkp1gtAwaSD + tos1bFegQbiY1YZ4nLW3Gtu/+7JrygtLySe9Dhaj1nptUmt4s5iZv/K4JKO40Buu6sq668unR0dUxBN3 + dwmuwNS9hvjAw7hDAIy8vwsyxhZCUkpnzVSdi/e63LkXJAiv7aav3saGedlNcOp8iDpDHTURVou5UIi3 + EqyHtXSZL1xBbRu8+qm/7xS/J9yZfpq8BxKDPYuN7QuZLbh0oWfGVuy8AUlTBUiLwOWlFOO6mgO62dlt + WEfA3YfB5mu6eOyN5cugYyTCPvalbWzCPTqQqIeDVOOehKwPv3H+x5D8soD8rAmSvUILso5MmvtryUz6 + HmB5ntnUvJeMf7paE+30ncVLWTZMrAwsyMhYqigWw2BzthO7yjiUoFFsj18JpSbIyZvKbap8teCbsPZ6 + i3vakJXWwWlFpyoZGkAqtaaKmsWHslBcygg7kVWcxS4zPvOLuB14ecr6i6DlreLXn21JkHC1ITQsw4ma + xuczS9e3wAqswAdczNeTmYMap1LDg7p8wRWcV8SczKicy0VBcNxEcF3RPIVXckK7rYW0tL6sE3nozWMJ + uwFDoy27KcU6CqDMpdg60RE8dQ3cKlqcwUAYIcKMrjwrhOVlYp9aeQtrcheHxcO3eJlzF/D+/KuUQMZJ + S8pMo9CGJA0wWV5aSLuli9Dsm8f/tHdt2r3R9NHMO8W02YlahdIpXT8pWdCqgrYCNpIufcRe2dRT48QL + AbCMltPD+zWoKzw+XcKZhMa6hX1yk26KnGdosL1ETcTzWRvW1hy6GBLGKtcu82oYS6rzYi0IUckFxbcq + eW1adNhES9H9p9XY1MMwPINk6rsd89kHsXAl5DkeihZwLcmFCsTLDNqpSGpqvXVrvawuFJht/dhu7LZr + aNGMSb+w9NMBk57KQ9o+stHCvcyud6wj5zn/EA9Y3BltfabKzNkmTdaLjET41hZzrc83bdzLw8JPPd3Q + urkK6nI2+rH+3J25gA06313c6g2tvFfLhMvbPN1o7z3D3W2W7muksIFnkSp6LhegUAPd0S3PhbwZmXYT + 0czGAAwdBXOj+T3PkH1+l52gpSnGQ10yG+aGTRyzTLwT7GzB0ukiWEikYVMNt23KWzzLXI3AXBy7BP3D + B8nh7R3jng1fixjiux3KKt3N0i3hjzO1mHzhsFxPWYUtBQ7BmjvhWyax4Yu+VArb+328dgzeP/7h6X2D + OP7kRW7k4gvk1zvgDn7WVbnkQ77lsbyqIN6cpqaXTrHJyOy/PIAcTsN004K7YHw3NrTVOz61dx7EVT4W + c97k1OMh0hbcUkmuI7HnVj7DyKPff+j+PdagHazMuHZu6LyNH2uubG3+x1iO4RBy6KLm1fUg6AF8uusk + 2Yt0TnwJ4+frwGaj3ZGOc6UuPhUd6zoOxsf8ir72wijezlLs2K9K6zXMxlnu5COd4YX9cqrdvEqseNux + om2SoV3yJdPuJmcGJydaodGuohSqodwO7uEuoh4q7uVOAsMey9n65tkqyn28674mLKk9radsI+pDG76J + 7oZr3cXMyMj+7iUBTfKe6NPLLWK56AO/6/n+z2w4eaG+4gAvXcyO6UrZN2Fu0CVDHMzdM4S3lh6u7Lje + jm+s4Vrrfc5OvN+s5Bpp3igH3M7o79vN6/0K1I5j8a4JcxGt62X+zuUXH/I169e9TfDADvGV3ees1rnd + mG9OqfDIXWUg3cJqDrgXJNsc7edLST2BdPA7z8T5XvUuZLMPqrUXHcYbq6pE78EbTIY57WSMHoWSh30u + quWREEYCj14eTTRJzTm5zec8T25MPfO7CvY1rnVVdHuBReT80+r7LvGfS+Zf7vczn/NB3/h3//gsU9K9 + 6/C57uWwqencvG+I7g3qe5rJzuZ+7RXrKkcEBQgiGd4eP4RAHtYh7dPX6fnKjrqqTjY1/38i1geZjEsp + P/moA/KTLOoq3zmE/2DgGPtYe+bFn/WvD+XXbBiHD+9aLzQzEUBPz/zns/iuL/3BpvuD+fD+87opFIz5 + JCj52xn9v55c4V/fbO+4hpU87s/56F/8Np+28H+xiKUbgT16q08A8DFNlvVhlJNWe0/Aezr+Kw1ExK0c + 0UT00tblBJY639p+YvmOciXwYiDdZriTBI0QWpJZW36eoSZmNbWmckXfFYLkJrTNHvgHDifP32+0xkir + ty32DC7RvOvwLD0P8Nb/+kgECTuu5lx03AoH5UYQ1e4YJ/0C4yjVxiYhMfAwBTk/jUL5QEinLEUBw04Z + PSterVpxGlRRFndmhWLXXHQb+7IEfm3bNIGLaZMfu2B4l3FviJdNfB2DkaapsfaQtyuNN7+DD57txpm0 + DdQB2J1Z3NH+iY7jubqVYc2l5fkj6vvXWRN4JciQfwCP/DloRRg+dAsR9oo4EEU8iOXc3PM20Uigi2Jq + ISiYyhYNfRwjAQLHiJ1FVNGUoHy5EZYrB0OOLfsocxQ2cdde7PQjhScTD0KNhjRzUuIulCR7FoVCkWpH + olJ3eFEHVUzGIjlFaeM6jikVTGOjpjj4EW1ArDe8eCqbdSTOueneUkOK52ZTZrnQtHWbN9xQC3fpZvwi + eAJSwqYIgqHUMslCsP4e23ATCnHgSp1lZb4Fuh05h4eAAk5sVnQLr+YYM2w4znFrC7VLVrVx8DJm26Nn + P+2tahbp1kd/x1Q7hXds3BGFGXe17Xn+csmDrWdInVYzh+oRJWWfLJ7Qd0yUmdOtRn6qdPas38MxT8E9 + zfXps96Pf3vl/jrzyQPwiNC2wwsu7/zj77MEU2IQtQWyU6c23hB0sLEFLSQww8rik7DBNqba8IESYhNR + PxOdSKiYsjz88IUSS0MRGY1kXK7GFNlr0a8XK7xxCRhvHDHIoHhyTjf8CoNPxieAHFI7JysqKhYdXUyE + FwFp6wKJ+t7D8jcvUVEuyjzqGU7MGtm4icsAoRxTPCrlg6tEMPXigcY2z8RTSX5OgjNOEKcMco479VSh + 0BOt00bAMs28ZMkO1mTz0Avo/NPNPv4h1LdHVZw0T083jbDA/zT+01RIHyEF1VFVP7XNTzLlNBJN+li1 + r9YY3xwV1lJfqbQYSCIV9dZTcxUCV5bUoxRVQ4b1NS9nH7wU2QP33BDYYJODFittkYTsE8uqzfBabF0d + dtUvYTD024484fY8SMltzV2Z5uWQCHXXzU9ZThOK97F6USKmyWn/CguNfVHkZGBxzT33goVB0ZXg7hRM + +DBWAZ4o432kzVffq0TkzN9nG7b1X4l/6g6PjTG9GFSWAYL5SIR/za8tmS1l1lOc5eG5Y0QNPhhka13e + uWTs0LVRJ6PS8DlancnK7WinvS146aRKIbqml3ngWlirr2Y3a4a3Nnrqr6umDqQLLabV64b+qQ4R7Do9 + YzvksieNOxm9w+177wAAD1zwwQkvnPBhDE9c8cUZb9zxxyGP/HDJKa/c8ssxz1zzzTnv3PPPQce8H7bG + dlBhVfmWOum5s6w7VLIHfLtZtHscvSu7Ye9a9ltTH7p227E+R+vYzZ49W6XBW/t106E+tPd3V09bY+Vb + dW1kHHV3rUNzn8f9d45IF36E6EZCCJG7rh/P+HJZnz746g8Lw9Satdwd9eN/Bp9p74lvi/xv0nS/9YlG + UYS5yFgUFpxOQOxpZrBf8eSVP54ckH8KYCCG7FQIJqVPKt3TYPS+9xaINK1TPGoeqRwoQIyBEGgifF/1 + SDOcRnULQiv+rJUHHea3bbkOhuz6imEihpEb8o590iOg2Cp4wWZYcIZNIBEHXWjDI7YvM82ZwT2UyEQZ + lK885SCiFE9GxSkmCQfkayIWhAjEIGYxQThEYRUlGMFYLfFY9uhLA9i4njzux405M2Ac5cgrLSLNjkBU + YJygSIgz0sx5gZRbl4TmRZN5hgWH7EUiFQmaPu4oikbMkQ/v9J0x7OF6d8CkICz5yEJtso46LFZiLDGf + /6kxEnuUR12YwkoN/dGT29sVKiu5yBedEpipZKSeNjkNXbZwl3kwoy0zuJ+46GOZToSjGH3pRz2oiZuL + qWa/+hPCNvWRGN8UJw23aQloWtCc/Zr+H/yGRE5stvGXogjWOvsxS1cui2S9zB0nz0KQYThInxVDZhj9 + +U8ucGtNDGinO+eUN4Se825v/AQ+G/BQO70zh4KaKDPbVqWAMqSV8YnOPkO6w4TyC6CTwGcQNFo/pWBE + BzFFXgfnaSKHWtSenYDXHmyKDywqZpIpxakqobRTbZ5lfpqCSlBFoohu1PSg/UQqnqpTr5NG9U6sIOgb + qIpVq1IUSlndBi5rQaMzQFWSqcKXkzxYTlYptaXQAIsx32pS+hhErJ0E6SqXCp0mBrVRvWHrX2O2UsAG + VrC+s85YuJhXj6r0qipcaGNzShgZrrWvRZHr2URKFrDC8zeX4WxeWf2KUgg2ULRpAMthpVpBltJLsWBs + Jjr4EssE/QEthzUobSsLN8aKdqMdfYtpo+pYowastkMMLW5Nq1vbTBUIIvntbJkbXNBetrGk3GpRZaKm + z0RDML4tnfvIuowCAAAh+QQNFAAAACH5BA0UAAAALAAAAABYAnQBgf////DkQla06QAAAAL+hI+py93h + IhMURqFo05k7LIWMJZbmiaYqQK7uC8dIK9e2Ud0Hrff+qMtdQAhix4hDTpQ23u8JFTmj1OrMit0IpjBu + 9ivxpigYMcCTLIGYk58ZDO/G5743/caO2e/YvYgjhpa2QFZoOETmxrcox+iY4ve4IlgTKXljOWRgppTY + cZZAWVQYlXnJZ3pKl6oaIqrXmsX6ufnBcUiYN5hkqAsbC3wVPDw7nBDw+lJsHLF84BGI0ZubEerZ6yvj + zPy0zV33rZfs4h3OggfihY3La016tj7eZK5aTl95v4IMnk/eUyZhGrxnGuJ5oCRvXj9H9hb6c3iCnTaI + JxqCmrLGE8H+QQYzisqGj+IdiyJNkIxFImHFkiEaCiEUKia8eDN3waRykmVLnXNy1hP4i+cCiyq1rBtV + MA/IkEK/+Gw6FOqDUUylktwSEGGiQ7g0rpLqFKwsscfcTbT6JJvXmUSwDbz0lGwtuTjp7sDB9qzQk0Xd + aZQYsUpcuYPJFpbUQtrSME1J7kPhlu3iOIfFVgZ7mVFKxUFZ8p3McSvor3ZLlTZ9mkffZjqJnhuN9C0M + 2Cgyoz0NxTYqWo0oEgUccQ033Y1x5zaumrYC4pjSvoN8Szkc5jypt0ZOTTYkiCeRrf0DlJjx4+MV4XYS + nbb13j0srPYrvRrq8u3p8zt/8/nKfDn+3SvXL5599Qmow3rTtQHKdzvR098zL7y3iIGeEVjgeOhxBsp2 + 4TQIXFY2GSNhSSGKNGJYnySlQomsKXKLCgDGEN+CFCo0Y1WpUZMRJDGO5RyKYygIjIrc1Ugjfrm0CB0z + ASzJZJNOPglllN4VImWVyFhZ5W5E2rjlQz1hCWaYYjK5RQVXjrkkhJSRV1NwyqEJZ5xyzklnnXbeiWee + eu7JZ59PankihiYA+UiD7UDWj5BDdtmZkYFqB14whhJqS6KMNnqphhZqkZebKJFHaXGZKjMqqeWldESo + 2dUDqpoOKbpoqSnSt1mq76m65nGuxiprbb3OeupGtoKG1SmT/rf+EKyv/qrpppW++IGKHNIG7XDM+irf + tVHRagspfe3K5g+4LpGstvttYK4wzqLL2bcj9gehNL6lW4Kyy3JrlLzjgnufuMiCseNy9EoxsIzrLoGh + Si9FCMW41pBYMGMRO2CvYJqksVSxDDs3SRZtDTjxVCGLHOzFPg6xXk5q8vsgyCML/PK2JSMimisBY1qD + w1SJGLPMPd9l3xs1h8qyXkEs7AqkHt+s7s9zOf30zDSfzOlI/p7zx4e8Ol1xuUEPKq/S2eZ6NEBgM80Q + 1E1D3fV8NiNZaU8+AHLiGPe0bWnOjOLdjZuCokv20VjL5OLdagNNBdrm8N332X+vamLZgwf+ozjMhzPO + IIGWiOZL5QRLzkLRibvN9uFRS511Urp4LrHkU+Jruoqsk/a14zkCzqMNfykoOoimn+7I7HILGEg10X0Q + ec4HhV0EXoz0DsTvmGdOfJLH426x7su/pZjwrEr/++Swq7E79qTDGAoERuiMhfd2QO/o5RRm0hXy2StP + FfyGhz899dVDdxDzNQ5GaMiB95QUPvGprX8uc5yDhjK7dCivLRrwzv/A148DFml8ntKa8+YGPBchgQzq + 01wCGbihGaXiLwj6h9mSJKyYWLB2/EugAg8GQ7FlKAgh9NChqvEYGmJQKhr83AV/1DzI6c0UkelAEIUY + OxuisEId21n+bLR3w6xUCy/sg8oUv/FFa80PDzhaoggT0sXb1PCENfKGVkRXwR8pjHkcjGJ50qgPFZKR + N7Pp4QMJssX8mVCK4+mQeQaptyMQMIuABORkwrhBO+LmY1ak4hhlwLsdxTFfkjkXItc4o0B66ZOzeWN8 + XogjUZKMlJIMpf78iJ0JwkQ6m0zlrtzDylZuSZUmaSM6jIcsLnDuTTuE4hAZFZ486nGPZikcRtKjzCL6 + zoaMdOXjmpVLFzCBjmDL4vKIWUyISAeSYhwVL1t3SfwdI42oJJwOCfbK/VGTnFZgGT1xps1thjNrz6yk + J1niqntO81fnjN4yE+mX4PSTF+DkSUD+qQnLLsENWwfFpD6JpTHCTfSfAAXWPK9FQY+mE6FXVMNCM/RQ + PO4FotWUaEgpWtFFKhI8GNnILfeJugyCUVvdU2ZMB0WuZtrsQg8kJjdzCkqC8kug+MznOouS0SRyL48q + pRw22cjT+DCVPd1soYNAgrQ/3g6JUIHNViXF0pbGMoc3aWRAhPnV/xgyfoRk6VlNxUy3Rgt3VfVINo/5 + USIJDVEzQKNSpEpWnIpzNHcNUlrVSlcsxjCoStQmYuuIVbt26SqFvQBcERrP58E0sJrdEl/usrrDWvSP + Dh1tXUtr2qttQinJuNn6pPkFxj4WsqWLrbh28ApC2dafOCQtbH3+mRbgUrat7rTZZZGa2eMid27p2OY4 + VJu1yZYEQo117PNwq5m9NUyCM/XqB8n3XJHodrfd9a5go0C1H1a2g+90yHof295PbRa+kCLaCDsYWnmm + Nb+tILBryzZCNLJWDdo1pnGlO11/QYNofTzvX5MK4Z+6kATq6xwtx3phDGc4xLqbi1o+bGGHgsbA32Pv + peKCFTJhaQt0ovGU/IRjOJkpxzzusY9/DOQgC3nIRC5yjlGklgeprinc3W1EARvhhr0myfns6UjFAl4j + 4vfF9XxN0shRkPc6mcXG4nIVigVWZaguy6MT6YCdzNu1tjnNVGVoQa3q5hG/dr8WU3CVJXP+55WOGc5k + 5uhvKWzZjtgXr1smtJlHd8302u4oGRwnnOO8wEefWR6nPEqA22dpR4uaz/XktJpROlfCXLrQcNE0fCm1 + 1IQFujqrrrV4Sy3cLli5qhAbtYtvvelc+2PNTSwNqxFja2CPN9L19ZBBPGiYZP9a2T3SIbjWbOcUq9rX + jaa2hK395zZtpdlelHa3ST1eD15bYwWcNc/ycdTFmVvMr1a3XAf3HHf3etDcpne6xYZiVCUomXQ5dqHm + HWXZaoVdVUMVsT/tXvWymdHT9i1/P6SwoO7j4cKJrJ4fnHAQ7mJf5Cqht04u53NX3OLJDU28wfOSZ088 + vP1+s6tFzj3+Omu8kcNM+R1px29vs3VqqVsVDRR9I4R//IiJ4yVtiZAYpBv70pjO9M3/0byMLzcxndQ3 + 1nMX9LCz/LdxDfds4wrNpdH854ASu7+Dbfao6YfZZN8Y262m9Cs3Pe4KvEZ8t13zpTP935NYX9+vOHM6 + RPXuB8q73jlGrQLe8KUQLzAREeh4EmMx8j6z80vl0vHACx6zqmDD0eVb+Ra3FvOZd/ApXhF1jCce6F/u + mcGRffXXk2yj0MYM1W9/8NxfIg+4hFbvZn/g0Ys45DsFtD5lynrQq97tzB++QbmSxICl3rKIk29HLf/7 + USkL9gxlLd0DU84FA7Rzw2u96x+xUf/+WNHrzQ0Q4YeR6n5Rv/rfNb35kaJ9KVRv4kd1Vedx8Ed+XhFS + yOcxa/N1pQJ8aZMpivJ3aGZ4X+VzKrdyYycJIIYDn5UgGWhz4Sd8i+CB5Qcf0EUWtbV9T7ZnHJhXMPQd + LNiC00dSscCADohl4Cd0JSZCJRU6F1NcmGR96rd27kd6RPiDJfVELZSDYBCBRyh6j3eD6BUog1VFXlN7 + uQV4SKiC6JNYjhRWMDiCXjiEVfg2ZlFLJQhyG/h2MahYemVTa5hddmFgT9h5jBc46MZDXQU5kYCHfVAa + gVgWBRiFFNNykqZtbdJ9W9iFUwhRh7hKfdhgRsiILkhcllGABmj+dRNYd73HBpQAiIR4P2ZoFzWIiUlY + YZW4iKLoXORGa4UTM5KYiXXhiThniR/hij4kgmVoigcIhlRWWe/zhZG4iZw4dVIWN3zUiHx4KRBHi23n + jHqTdt5Xf8jobPNSKpUXjXjHhon2eYZlOfZzhr4IiYOHhpQUEOMoQKw4IYZ4jN1YiA8oVRljBMR4JJoI + j5soj/MIh9eYj5hoXai4h/ungWS4ijsDVkiAjwAYbbLyclxiTrPTjzoIhinoiFj4MI+YKe4DUqFVkc2o + hBjJi2o1g+e3bxN5PtvIOiGZiugnE99yBU8Xevm3NSo5QCR4i4Izf0A1W8G1Qx4RkSm5jSv+aZBUWEoY + iCgL2BUnaXyk6FNDt4JG6Yb851SKyEmhk2DjZiv6GIbSFy6O+DMuiY3LuIjkeJa5iJLtqF/7yI8QeGaE + JYZNmS9Q2Rzm8kpkmTw92DIbyWBy6EhGAYtayCxDGZV1yDVweTRPYmNgsmPeQSaPaSUkFJlTIplGhpmZ + qZmMuZky1pmfCZqhKZpxIgir0W6BqUW31UmXKG9vGUrSOI1JCZDLdZpxmG1zmCMEGUkS15oUgnxk6RLM + tYWlGUiGZGUoaI24Ry/Qo5dgx5c8+YqHwjndshYE5zzdY5dlKU4j2VQH+YYXWYt8hGSAWTVcJGxCyYMD + czPNKYg7+Y/+UCUTr9Mp5Sks15VgbamexpN8Valh6BNACxmf3+RhNGld0KabD8Oe66iUveSa7qk9/ymW + 5DUQfkecCJGJt/UOx4mYFrV46bIjCWqLDvqgs/lc5PVNzqd+c6dE4WGahzQx4AKiVNmfBNQJCppE8pd1 + NqmAW4mWvVdlCRGjOfmLwFhKNSqEziNw9DlpLwIkvJYq9RWkLjqkSedCRtqjGVIrV+o31Xli9Ddf8zky + 6hGPilmlLHQBfsl7fYRtpek3wSZ5+ZmW7HiO7+efGRqR/1WfGAUc+aYdrpJ6HZamULZ3sTmjE5Qe14Sn + ZxBEAxoal6iAjcp3FeJpbcifSGmoWbf+muFEQepoSxJBnHk6mIhAov90DWxZMLqRnbSHkGjoeR7od5Z4 + nc+2TyfjpSRpNKiXqC8TpVK6qty5kWGzcLIRaS1ipwDydwqHT6UqqJWqeX35ZR/BRT56cp/6MLUKcx+q + pLo0p6roq92iWPriV9maUBhok0UaI+pwPb0VpqP0nN1aNaGIUsnJVo+Ka+xKE6mqjet6mITKqoWDFeGa + kCMnTSp1euN2gWPZoO3al0wjDSaHR7VJnW46WsT6pghbau5YjpZaYaMBlP9arhvqra82R40oHAdKpHKZ + Li75GbZpXlnnH05aeJ9mmOH0shkaXdtajGqKPxYIs0qWiHEKDzj+emK2l7D8GoxKyLOqpHOT0bNj4y1L + gEuw6qMpW7S9aq4TVLOGCVU7aqPogCQdwRX+ha+9OaV2KLJneq0xOaLyCoS/ZFMxxHULObZzYFYRIzoq + K7IQy7E1pU5gulwIBq5KkKVJY7KxqJNG+6C2xbfc6XSb5pA/aZozSyAgsasN9J0iB0fbMEda12bwwXmF + i4P7qXwZK1lB+R+V4XQaNA6scILaUrl3+Y2rVVQ3BZ6tOJgBlmqsW7KgmzdlW3BwV35uAaTdGor7Elqq + Mgthy7v+g7Ok67ZihZ2mlmgBGan96o8xG63X8rq7aZXPeyTHGp5iiZwx6zkqUQyd0LSLZjD+R9msfTs2 + UiC5Uuu3csSxofe3eSiVKFcjguuWCgu446pl1BmsXsqp5FOc2eBGAzm37de8JythFboYQlMt2+OsB8su + 09mycvqjT/q+vWiMsXtxMXGf16vAITh/p+RWhgXBHIy/5Luj1TmILTy67opWd4By09CUu0tprSpUsgho + CKOhfjmbCZxM1nodh2u1uAa2OLzExcaM9AuxAAhrGWxiiTuQrLi8yqiduiqifHCv0wCoAmGzipda1/Wl + OMqhJ0meU/mSzuq/ORsHwrvEbZW+WXi/QmyJaEyjYsutN+u4Czx+wCGftJDFcbi5tipM8EPBdUy2zyij + VwPIzOB/CMP+ml7MxFYoSKCYvsRWyWbruxxpDKTAt4WclTDnhIycmgB7GhO3wO2pdtH3DRlBVCxbaQr8 + saClyp7cwFQaDjWTLa3sw0fQYUtDl5okgLvstRFnDmH2KGUFlC8LMPEEzAaXxcRBygZ1D5l0zeJqwOzg + xABDy1oKy96psZ8IfZvKDQxrCIMcql7LsUCLn5MkhXCQqpmhOEILzOEMxcEKatscouwbl/G8P58Xyqjs + y23bdLfiz/WCxJfbyIqzGHLVkqUHkwJGD/k8id2bfkd7TsgST5wQy8zLheUMx+P8o9/8xH/pOZyQy0sI + nc1nQ/wLwgNFo+a5RSplv9yrhtonzfn+vL0o28a8TJjm+p9O+S8rHSnu/NI0Tc7ta397fLBDo2/VKJEN + SKd+rNG1y6uy+8I77If689NcZY5ZzdRp3KRevaH3fIo2OMMOvNHyG7LopdCqqdMvGsBjXaiNXKRfmdRw + bWgfDNAl/dZXydfRObV/TamJjY69S8NaZDcdzK7qe8zM2seTDX1n89ijitjZjNGbg9E1jLiW7bOFLb69 + c0+ty9ZK/cYeDLuP/KUSfStUnGe8+dQPvNpufatCOjVWCkCxLZwUt11zC2O3DMp5XdetnZp96tEKnR3n + ymTCTcx37JVarNdbbd0sbMFLGS9twGtbtdAa3M5ntMa+V9F/Wd3+un3djyuwsHFtlKxVoseAny26+gnP + Q+3aVQ3A0rnd3GeW873M5/2CmFxurnzfwWWdourS/c3QwV2xqf2Ca/mQViCalOkkFUDhaHKZY9KYVbLh + oxlkVOKZHi7iI25kZULiJy4nW7zgcf2r9xbM4oxO24lq9Qzf8SrfkW0egxENxZvG5a3g62tf7fLdQe3X + suIHOS0qIarjaJvQTOuT/t3L5ZOePm4uK6TP/CHhFmm54Qs6hs3kmw1vBN1qlBjDB2ahgXrBg61/S15G + 0S2+0v3lEofaokXmBBgpfpbSU67bcfFMqIzgcQ7obx7kRoxgge20SR6WRJ5nKD2ArNmisu3+3eAbx8S9 + nDh1vleu5lvO5mJIxlqDUVdFES3dPvlD6BAJDVD9bv+s5cjNlWT8fH74B43l57wovDFTxiLp1Diu6M2C + nSbIplK5IpcXze+b3XY0XDeZ3nyefVn860Ad4yFzqFQxuMvXtdUO2fOsf+ANMgVsw+kaHGAe5JPuzU9z + 44ajM/BaTJ+96Rl9H2hOt33Vjnc163GOC1EbPmbTtOgL04kuw61d7tZuhPJOkNRaS2JuseFNxT5diuze + 7v8O49gcpieKpeN98NRd1um96jTi8D/O8C8KJLFH7fRoqlC48IgYohvP8RAf8d/qvTOt1dzsnBh/vSyC + 8imv7euHh7z+rdI1f98/q5z8bvKowfOy3e8MTs/8/C92HMck79DIDeTgMPTf+/SdO9LEPMJcLvIRnlyt + rOxQDgtRD8TBbtXgLIG+meUhjPUMjN7PXgdgz+JFH9xl//KhLdQyr/K4CHq6EMjWu5cyWPNIjt94r+fZ + vuJlWmjQUjFDv7jmvViYDu51T/iF77bHJhGJf+zeuL9F/vjJCPSSz6EZDxZeYfm1xfhqH/KsHfh3XXj7 + dHuCYPkAx/WATdJiDeraLQrUzJCSrKHePuVu//MNSIpdD9xyFPTGgQaA2OlKU+p2P4uKV2aqvq+ZffeD + CHWxfILznvpHytl9X9m0P9vOfvNgucX+4EXVaV+Q315p3P/umL/23//kHU8XvD/yw86kdhnWnm/OccNm + T1EOuovAAkIAwu10N/lhlBMKCy7VGzkeg08cydI8vxAVPWR9JxWO50UmM+2u+Z6yDLtIy4cCYojFmlDZ + dCKbzKcix6hOH9KeFsX9JSFe7JgDvH7OZOsFrE654fG3nL4Rw+6l/ONor//5zNIAWfoIdUYGDxeHFPYY + px5PJEUoO9oYLCF5BDE3NRQXNT9JrRxL60Yro048bVDpQlxhacNqb0dUcUl0OXppSkIzd8dkiY9tkZVf + UWe3sH6Bg+eWi2SdqyGjs+O2lbCXoCNNsL25Tw3PYc3Vx13aV9j+s8SnqeHjkcDv4eT3ffqrAWTmLlE5 + f/g6HNwkUOELLvroQJTGqhi5VQ15NRCGsSLHhR4vPmE4MFFIkIjWnJQzUqU9eBIBsGR5CofBligb3HQz + U6cEnnBgjvwZk5zNnslSvjv6b+lKnW1k8gtmtCnNQPmq8hiades6gmospZvIVYKgrOHOkulaBOY8kU4L + Uq36cGNaX3Y7nhUaa6qztaXo4nUo+K3dvXDj+jU8oS5hn44p6qWHuFDdv5+8NIY8bDPTtIf59vXzGVTn + XKafkS6cSvRosj9Qu4zdRfWMJJetFrxbu9FsnL4nLV79R5Nl4WXbCsbdcjkjhs0PjFIsmbH+5s7QQWIH + pGoWdundeVewvlk7x/Ksi7omJH33a+TJwwM/baQd6EPc1TcVM97xeYW64HPuq/taccU/ysqSDykF53NP + Cf+4M5C6LxgkqcL29BtQlAJ/WyqPAOe6sMEMnTiQKIs8MVEqUED0UETZjnoOsBWEURGsMkS0sb4JI8OM + Rkx0zKs6XFpM7cUOYxzORxopCFLDCl6Ugj/yHHyQFgCBrHKIIntykhsvS1SSlF6y1PKqC8FcJs0erbmF + zLG63IBLndZEpk7P2EQlgD357NPPP/u0ANBBCS3U0EMRTVTRRf0UlNFHIY1U0kkprdTSSzHNVNNNOcV0 + lzcfI3FINI/+RPImGYnBMlRReyO11FVdzLMWMqEKcdQK7/zUVllnfaHMWBN09VW3gLVSTV/hZA42YYe1 + 8FQxjwF1QV/nfDInZONslrMkeY0W22krMwMKXB6CoVpytXVW2W69/RFWNNoQ16stc0w3t2fD3NGIWuWk + wpNO9KSX2WZznUGggkFwN+EvxJJzysn4qNdehBEydh8Ak/X3R0zOxTAhibWlmDZ2v9z3XY3M5bjjDhuW + T+Qls22zIYxPVopaMFoecOV1Q+bW4v+YrJnLlnP+ameVXtbGZ5nN4xDOapMw4OGKp8YraQHpzDe7Vpo0 + BOoq2AgNg1KvJjBmPE8qDudOilY4g6P+gan6uFfLhtHgrNM7c6YEHJAabrfkji9KvH9G2mmUT5wi7EsC + z+jvTdrWg+CzjSR8qmujw8Isxh9H56nG1R1468Itr0nee5sQV3V+QD/m9IqPrDs/rXg0/YyfAG7dF913 + 4TtyU3HFl+ld0R4D7N8N7hxygEcmW/jiWa3ceLY7V355jYNznmfoiZde8Us+foJ3ZNhITnYEmya9drTI + eB0r8c8P932TRE+fe8HxOGR8PuKHl3n6g2e44REGINg5mgD65z+/6SOBahHgAAmoPjnsjwqJWwr1AKig + Bm7Le/2RIFB2JqizmAUcG7TWQfphwrtBcILis+BRymcdFZLsHin+dNkH3UDBsc2QMYjTyBV4yEIU4pBK + 92shjt4jryCK54fYa8ESaZc2IaLGhvprm/uwR6wLRq0PQASZ/To4myoy4n/5EMuvtugwDmpwdEYU4xTr + EEPfva5GVXGGFwPoEXlA0Y3Za8YZsajFnszidvXzxx6HhUhlBFKQJ/ldy/g4GD3CkY19pIVxbrKR8oHr + jZO05A0/qT8/tuSKTcrjzCh5SvbBQpML+9zaMmaaDSpyYqkkhCYLuUUipIhBDaSlvV6Yv1oQMpcXTErN + ZOnJKAIzc6G04nsa6Y+ceWAjkRzlEJ35xVVesmENS+DmchBO8IASaNkcXBhJMUczerMhfVsLJ9g8RkUw + rvAYBQAAIfkEDRQAAAAh+QQNFAAAACwAAAAAWAJ0AYH////w5EJWtOkAAAAC/oSPqcvt4ZiYUIo0rcqO + x89U4EiW5okiYsq27hut8Ex/VE0GHs73oDy6NXaAy4JYNHZ8ACDzCY1Fp9Rf9VoSYnVKrPfkjEwEYQMR + eRyDurjy9+1yw+dxuj351t33qhOnfMZmNkaoZmHII8e3qKDI+NgIiYV4pSeZ52cEyIZGiIA2SJl4SZrg + WMp4ivoC+kQmuMqkOmiwGYokiqFUmEszG+v1CzwnPFzCFdxq/PL7N8SLy6lrBA1VvGyNjXqt/QAbZdk9 + I+y8AU2J7nnLCy7Ox+2eHQ+DnPw9b5XZ9KzOoXbuT9C9NvjowCs4CmELLr1kDVQYKQWZI6E+Ubt4rqKu + /ikHIabo6JFeSBQilCV6OPLaBSddpAG8YAiUSZEjK9UkdvNYEnXgZkLkNtHEywOe7qEcl5MKyKRgmI6Q + 0bCNz4JAB4oqijWgnaVOH3Td8lWKxakLizCF9zBdwAw893ANGxFuO7kLSuIhy6JezYNHx3oo5GcuXYKD + n7ydB9UMR7zY0GZht7Pvl8OFKRc2dRkzUWrtJDde6JmtVlKWB5fOvA91LQ3WGANTOdHzZpiyNwhWXQc3 + YdxhXIPxXapq1A6ct+lmdny36t61fze/hLbtGn+rTtO1nhn7Z9bAP4RDDHq4OcDGk5c1j/Q4oNnPG+h1 + B6+Ca/Iu2j9Fnxe/L/XP/thLte9Wbs1JB51+JBlIk2623NVdXQBuJeBzDdqEoAnaZWfegrtI1c1BEBBI + nGKxXBgWiZeZOIwb1OFRw3cplsVWJhN+YliFTdl4Hn/9jTbOjMHURx8J4i2CYldFXoeeijARhYOPlQQA + ZZRSTklllIVUiSWUZGTJ5ZEHeHkWjrnpOASLZqnQZZdDEjkmXt2lCWeccs5JZ5123olnnnruyWeffv4J + aKCAUkABF1K2ECRpbcr24GRi6vToR0mKQRstrIAIiYeWCrldpPl4aiF+crDTKGSKnrdmPGCGCeqNySVm + TmQw0NaoPPmZedOqSela4qQ0ppEoChidCmOt1bXq/h2yofoqIrCYCqmJsT1oeuZjnSobArY5iArtP4hG + K61yJKV6y7XaaobBuehmSOmSorHwh5MJ5UXupsvwmtOo6uIbnA2VvivRl/K2GAdZS4rD717qfvrqdCvW + u1ktEN8WcGBVhJuwwguLxSxxAFdrrcThIvetUCODtfG6KcfF7nSz4crpagOPKVFtJ9vW7H4rr7ZzttwG + sctF+oj8zrezzLzGvCtn7BTTkqiClb1BCIy0pDWHdjPKPTvNascOs8hYvFW7KuMplU6i9NI9u6cfOeSF + DW7W29bsiNDgrc31rgYWE6PUlIosN8OPrQR04BRuvbbPP8u4YcjvOSqsJuky/mpM3j/VYDg+lqdydXFZ + AA5HVakxOfRriY8OReam7w0vg1gTjUnkhEsi9+YI2a7x4oxrNHUTE6dn8kpjs1Jj4rinhCBQYBsM+o+R + 89706agzonrsbbdu5lRKMOS8yeVuhPzpm1cP+fU2pJGz9s1X4faGLpFPkSzSHx8S/XeI/pdkMHHPfvBE + IUMrvYlPenVJHrzooz7fDY9lQItYS+C3BB+YTVn280gFDfItRCTQRbZq4CAe1zXjEZCBXmNc0JKmwP5B + i0YcDCHeRqiyEupDGmKAHRMk161QgNCFiIsHBBPEOiDtwCRicwXPXBaxFgpwfjDsQ4WWgo7z7WNsGVBS + /sQsArPoEfCClzPgrEBGxC/ljAY4RN9ObKPEJQ6QKT/kWBAvla4apmZmVfRYLw4mFy7Cp4lO9CIcwScB + MdLxiONpyLNyBUM93s5G2LGK5H53CCUpY4Hl2SIfxchIV1jFDPyblRYK2S4kWRI1kMzRG33gSMCVqo7N + CtY02ni/ESqSB67s4ClpuUkF+mgMJVnLfUQ5ysI07oryyyQqQRYrXV5KCBkRXK9kiZ9DkuyJN8Rj/BgC + oP3RQpox/MosO6Qfbt7KmD14ltiyWQT5nDFUsIQQNCskzmVRM3UR/FB3cCga2XwImMGEZzydqbtjlimd + pdTmP2qzzzw28ZtvMBXN/vyIyk2+AjhsSWgWxdLOL1rtnWIqJQnNV80QYVNYMhuWTihJrH5GakYMLV9E + 5djJFU6RmHPz4UY56ql/FlBMjfxbTHvHP4i19FdkU2lH7XZTiAq0TBOl3EzvIk+bHmihrcrfOMn50iXY + 01pbNQtjdqjFRCKrJVedpxHrSa5HikifKE1pNzI6VVCZNK5YxR5rNPDT/qTQq84xzSWHSged7pSnUZjk + FPuiVqgew6OLcA1gzbXSRj32cHbVK/ryes0znU2m+HDsXy852Lo+728WwOxG1LnOHMI1dKCdrKoiRSJH + DgmffjsfYxHWWtB+9JYRvNohxDM7zTJKPqvVKKT4/ujaPcL2Yt8gXCqJa9fiWo+quu0jYZnLtlyitmLI + FIc+dZtc5V4XuwVsRXDbE5S2UuG7ua2udXFUJFBY9LSkI2lttcFe5Lq3m0qdAhrma5EVoJem3mzvfgkJ + 3y/8t7mjO4MHuxtW/R4YwQn2AiwAnAQBCwSFY/RuVKnLB+mydrkWRgIHPznEB4u4PkUV64QpbNYS0+Jx + wb1oKG2MDYSC98UwjjHa8PCeT2avcDhWo4RfHF4VNnTG+YMVhCWwXYXumMdJVnKJ1aAXXNhXvQWaMpJb + xSvOhCMoRJXpil165C97KmHCq2+Ze/fkt3qmyi/i8fTGO4cq0qZKW5pTnwsl/qhAcwnQgi60oQ+N6EQr + etGMbrSjH22nLWkTZyHjcmHza2A1rznEeiAzgR12W9w65cx33i+dOcLpSb+5cKTWWqYnfGqK5RmzA6JV + qz9H18/aOda2DKwOWPKbdcQZFc/hdSU1vek9vALYwWumkdxr7Hshi2m5mM9QlgGcaPdr19NubDRM6NBY + QFLbboU1mImk5cBkJcftIXeXuQ0qp3m6w0nDiKUDBG0799jHdpj3sJlq72dW192rS3aIkymUM4Za2vnW + N8EJ1liE5wAw4UZkw+FtcGVTWkjYtHWRFfLwR4T82I+S98ZZnc+P5cvU+i51hTWOxcd01V3/BjnLHd7t + /oOv2l/QFXaEjXHvYmI84/2O4wqJu5ZbT+vmQycxzO/bH3U628i6bnrJI+5mJsGiHAcVrKgRonS24fzc + Ov+3QDhja2/xsOpUzrnGgRurTmck7BC/eNvJ/nZr+mt2XV/4iA488m3H29vmZQ3Su/7szGQ08IJ3OhkP + KFFA9nLqFrf73Qev7MKbscEA+fmrke34wOYSkHOMTADhQD7GF63lqn9oYP1HOo+nVpPupEtxW/80t/eb + UWw4/Fj8G8vB3L7lLhct6mFPyJh4HZxMtzqegb4hDb+M7l/E/eKJj/uy5nlwTILVQT0P9oI7/+VF5ywm + ff5xqVJ/7YDXPTD+S6Mo/lK9IOs///jJL+4LO/CB7B9oyrIvchSEbdmidjG3cu3HegIIdARIIDNCfQCI + QQnofrhVcdn0gF0RdDV1f8ZHCvAnKydkgbRjXX7nbeV2eURHbPrXN0EzIevnZBBhWCOGfRNYCn0jSCck + K4gifrg0DLUkdBKIefmngsO0fDuXeyHVXycYejW4YH+hdTfRBadRf8E3g3i3CnqXTkOmGFM4TQNHfPvG + gY9ggx+UTFgYPs03dlbYgVIjHUXIfHCRSpSVhkFYg2zYXBmIE00ibpxje2EHgbkmgtATh+DHYtRjhLUH + hHRIO5wwTPFTc5pjbl/4hy0mhoxoFirCXQwnRZPA/oWmNIcoSD2MiGUKEolVqIaV6BdlhBqTOF2fuIQK + dldap4pyVHlJoXSTKF2s+GEhtnVRCGe1mBO3+IVgyG8W5ogv817+B4xeZoqKCIsnBzNm04lJxYyJCIo/ + ZnQEJo39B2LRlIenaIzZmHXFt1bTSIkcti8I0k66qIFl92n6kngIKIkKWIKkR4zmqH3V6IpXZ4gSR4wC + ZyCGw474Bo7YaEi79Tz4SI64gVIDSYXOGI4xmIwGyI3daI3XeDH0tmqYuHk2V4rNCJFXgFTAYn8dCT2L + 9JEX+YrPyA8lCY1u2HiWt4/8iHpm+Gbw+Hv1YyMkiJDqSEkOCVAiCXcTSWA8/smH6ihrOGKU/PV8V4YS + vmhZW4iHSWkeAqksgQOUybJ9M+EBShQTUqmQXuFPvTaT+BeRHFZtTqhwFqSUVKmEK5mR9bZN/dBdwTKV + wOM9X2GVw7iQSSiSRIYr1ZCKOjlaGOiWyshE9MiSITKOO7dZMROTMlmWZvmXm2h6/dCLS4mISnkyWRmB + NBiXtJhFmKJyVLFSj3iOjGlUcOlfcNJnhvJrr5klgEYohABpt4mbuflruqklvOmbvwmcwYmbR8F/s/db + sqh8kOWF6DF8ihmOoulLskVWyXmXgNhZ2sCOzQma64WOQxQVIHJ6OWicqydX0uKZ31iQ6/WU/lFx7CGK + /p3gOpkifMYFRCCJkf6VFr9yMLPVOAfpS0dZVTozjOepOA2Vn7H3n7EoXFGpmZ6YUy6RmqDHmvipmgsq + niSJoRshE+3ESlcZf5hmnzRpoL0lItCVctMASOkmbKVJWp7kbzlVn5MZhqF5jGcyc33nOcjYYd7ZFgkk + Lh6aj285ocCHmI/0QD44e6JYpOGCpH2JUyopoiMaSL/SVVM6OOFmSMYSNQUqmUIapUtmpSWqkWO6d1dR + ppjTkgtTbHxJoFwKpseoFU5CcypnMA2KfqjJnJ8mdvPonAa6dUS1IqAWDdSRYqUjQR8Ylm8olDPKqOqp + d2S1TrK1PGqxf1DnL/JD/nHptzBt2j0heWWpBalaGCtpV5R285iyI443taXQqC1hxltfmmdv83s8EkdD + 4Z3ZIy8wGUPyp6d9uoHFWJN8FQiTenbxWRSTQ0mBSo2WUp2EKKGwmne28Qo4tm46CpaBo6sLsppeSpmZ + V5cEFZ6T4zFPqKvtAiDM0Yhq0zMTwqlMuXvfGhuWeqnf01YNomGkkqgktzHs6qsp2GaMZYnyOgNv8qFj + mK/vFqJNmX+6NB8UWUhyM4a/xKzW1KxnSKGNSSae6o5S2XHEg0QR5RPbU6ua2qpouqnYcjwb5lx2mqF6 + mBZQWQ0H+3d8mp51uLIZWDU09Aw997L/N6D9SmwZ/naZJGqliDUyR2qGzHSIJKuwz9q0/hobBeiPgWRV + RLtMxfESFDcc5UqKNKux29cuvYSn4zqe9jiwSLsp92pbeRqhDyqgX/tj6gMED5I/6wmy7kIEYltvMvuQ + MuqX2BgYc2tc0mQ4PEo1dTq2wocS7Wpl90legVuIdmSZSzWYM8S3j7eL3Nqo3Mm0l3hpXImtAwEbnStD + TtutEflVOuiYmnozSDq6XlWx2PmzNcuJKWeTLolrjclNSzkkwpFPjtulmxu37clJqIqikEdLEutbfAWt + Kdm8uye1ZvuxObm8mHMUjvFKpHS9swu3nJuqTPWL2Qt5rzNsMxEdoBS7/Yi7/qYLrE7pF0HpnqNaUAL7 + SoPopgfUsi3jt6/qp0cKv98DPvMrqr9FvA/BFQ1YbcuRsKcbrNTbXXYxHsw7sdHFouLrHw7srs0WCA6m + l/crj4sKiZWItyN8EQAkmOUSsFvWnifMqk92wFjKsoqque0rejGbtTcskbLDq6k4ekbYc1d7djjYwgoh + slDKwHeAw3Gjtcr6uKCkoBf1w0CMcDG8iOubvE9Lw4SHoyxcLVNpvzWqkVUKxJJ6Igt8aYkLoEK4wfFT + nXe4d/U7kVy7KYhXGY+iOqsSsZWDX6E1favVedO7Tf9zCCb7L+krg7/Kvz04irV6ZjolExeMn8p3uUKB + /scgJWPi9VZkGHN82wmUh4TxyU8znMjvZ5saerkbqkyOup+3m7s7yL7MNY2P1YasLGeXVbaadDKdaH0B + +K7KiV8bfGv3BBlcjDYD9nWIbMnlBy+oRcX466IOFXRed6p6rHgrljG6rL75QauQgDS1WaywbMhKYcSL + ObOLNFeLeLQIXLtYE5aMS5ZHLLv0i45W+zU/isQhc8yZ7JHdq4k6KHsVyikjowj1h4+VXLrCS80ZRMzf + u7dpU4alQrkJDVr6R7vxnEGwS5oSQqbLCseelFV1plsUzc8S7VvuM6g2k6N4GZUu2iTh/L/6iMUyrMP6 + mbVDQ4J4PMkcHbxZ7GoO/urMGnRtnIUxaOi8Md3TQQpumdmkGzcw2nZr7lw8wHvUy4rS+kPLEicvUA3Q + eyrKAbWZPi0jeWl+aMzVn/fBz9uKSD3WD8bWZO3BLobMB33IYI3POdTKG31c82COWn2oI924ag2ZgFnX + eK28UtXPa32yfi3OMWqo9XzXhP3SA+jWaY1LLm2CCP3XOg3GZO3Im22dem3ZfFxOV63AFW0TSyGNZmpC + gd2rbfvLrjzaS13Hpt0/qE1kOvs59fKnk/2Pr30sQunGZUyjIRwgXDHQX4mxNaTbFOFRVRbaCJmsdSvc + g83ar8UmTvrS6dDaiFndcwnYaxSmx1dgdZ3T7fiZ/rZNtsjoJhrdopmrzyR91tQ93gSJ3iu9DuyciU8c + 2YpctQibknncMOSpaIRmJU1FJwQuJ7KJJQounIZmm1rC4A0u4RPeaIRC4RfOaFbs3ic5lyhtX+1d2O6A + tc/d2xaJRec83Q9Z3xE8tc322CYZ4rWM4ryc3+dyNPKcO3274tJLRmkVvjEuZ6F6hDWOsv4cyp+p4XnN + 0Nbb3Z7tRp0lxPJ5xcLE0X/KxCiUrxnjBDsOwLQ3ufQsmlA+kqioh3495jCe3LA910ke43I8r2Du5EMQ + XsRbw+Wdz4Ft52LZt0RZVHTe0g5r1eHN594F4LEq22pqhiBB2qZJnj2Z126u/loc/ONaScQcTqNB3UTW + BEWkK9Po6eg1degtraKObQOnBulCjelqqtxsLtdTPejHFa6167BvDuRQrmAbRpF5/tvSouvYvdh6niNn + DsI4nuaijS0Bl0SzDtcJ9+JLLuV7buxTVcHADdlDHO227qeBeUS9vg2OvNtgtM9f/dawXu24zN5Ta+o4 + i7a0NdElxaRxruZoBuzjROLMvtl01sypajcCRuwl2+/2/e/PLu7jDin13uxlrS2SbCnSx3ZnfDfQjvDS + LrPkwtfHycfcPuTeC+LXDfERfyCnLBkVz9z6rbpDWuZNjuQpv9/JMsmpYmyG7G9hE/CreM/x3qnm/fEw + /qjkIYGHC7bd3G0xorfmo+zqlA4aHrEm8fVDS48LLnJvBv/O5cTpNK7yOB9sSC8eR8L0HK8blmYiwV3O + A7/yXw52JvHyInbAtM0bje7a84z18x6KA8v1FZPTKe3QhYXJnt72v3X2HriG4b60gg7avD32NE+Q3z3I + vi7ibZGytVKxDpmub8vTv07XFUpuooA75tTWlG3iRJ/Zn534r172vQe13x72Zu3VnA/6yCoIl0/6KZik + 05zx5e7v4u2Ch+96oZ/BMAiVk66e9Jbvlb+tzxmZqr/6S+turw/7afnbzuxDbXSeCXMYE+TxNdH7jZ06 + M37LHY/y0CfvvEj1et+F/kDP6kQs7NbOieMZ/Bs+/BFNWqsl/UuX3gSP9PQrYt93sbm/7EQa+HM/9IxN + ADBEbjf4YZSTViuTAm7q+8EoQ7zQPB8OXdkWLV1Ijd+OpufbzHWeSSo+3ZCWAZqOxI8xqew5oVHpRDi1 + EqvXQ9aVbUa4WjETJnYZzazwr5x230rr95xK30q9bYbcTiT3Y74AUwYLp+IME2UA+VC49PYUxQIgJS0/ + Gi81KTI38QY7dzoqDUI9MUlPVTdWWzFXUz/7TEMeLWhdZQRzVXF5E33H7IJjiG9tgn6LSWKVQZ2hWRGi + ZYe1vI6pHUe0L427J8Gr6b6zIXYJxV+51QvL26Py/nKbaxnNsJPh85n1Z/s33+kLeGJgHQwXCnrKQe+f + koQNu0CcpsbePWScJC5awDDjso6GHhriGMlfGnkYP97ZeGRkylcuK8I8QCokwjdV0JFM6QNITpmOfpIL + +lLoTQw+S8EUogDpUKJOw7VrKaGmOTc4U1W1xJMd1BVavaoMq7HoHKxZlR4d+3XtFbDO3oKxdpRmWhFT + 18b1qjcX33RlH6Ax+PFkWxB+gyJupThpybt1XeIz/HQylsqNh+F9onYw4YuXUYIewvjUw1gONN8oTDXy + Z9FyX2+uTJp0g1GhO66OrXN3xNmOn1GA7Jlzb9vGfU82hrf2cdd/c99GLnY6/kHQy9kCE447Y57UQ5t3 + P9OPtqQww8VLrx5eYrDvmsqbF16J/bXt1aXhr/cbsPb5ndv7bz39RFEOOEUeoW+nCt6Tqb5/HvTPLIC2 + gyTCce4akEDK8prLGwtyujAeBjXc0KoOPfyQQT1EhOK8UxoczUSbDOxvqwtYXPA+5HCakbqx4lMIxByj + 29G4FtVB0kaLesERtiIPmk7JbqaccEkVSSQrwOdiq5IaL01KsbQAyCzTTDMTOFPNNdls08034YxTTjkF + mNPOO/HMU889+ezTzz8BDVTQQQkt9M6+nNSyIVuk9JG7vcRcZY1dwPRIhBIdhQ7IK0vDsY1KW9Cty0yf + /tyU005BLHVRLkUD9RdXp2AMVueMpBVCVq8jVVNIrYxGjk8DiXHES1sQVlJdeePVKCoTTXZINJo6cKPx + dEQWM2WvEudXVbMMrCsJf8CU1FmHXRacSYmM0qc/wJ3JWCh1JdcJxeRlbUVFvY3W3XdDPUfcTOuVsdd2 + JuV2phW+nZbJlf71MWCBs71VwF1JYCEnfWWruOEZH1ZtYIGG5Pa7hPmJygB+4QU4LHq3rPXHiYoVhORy + MTasYwRNjbjl4pKNsQymwtR44w1vTs4klLHM8LGT3+uqp6Brbqtod3K2KGpfXWaG3SI06Drbq6t2eGVz + q1VaYdNOZhpsttbGVmyo/hCb+rD5SjgioafVRlqXjmbOzlG5/V7YwXvTfpnrJJi4pm1eFseXaLftc+o8 + wa71gyW8r2h8HsopUllyssFb8YuQ/tB8Cb0l6alvGt/+PGjI5z5kJdOFA5wupr6zHfTBdYadQyXIoL0D + 3aMUGqjWf/KL+MD3i0L1rlGvEybV++UY7t5RtE4KzlcvNr+Pgm9peZOTx15q5rUQ/pzxH0u8+ccTM/98 + 9NOHQgH2zxmhe4obDf31y2iBGPVNC3/5c9/v+le+/+XqeGkYoLu+B77gxQ5+vBPcawL4BqTd7yfPY0gB + y2XByB2JflbYXwjs1kGGsaEMIHRR/C7YG1MoJlqV9mCXC1eoNQiOzkQ4NByGSNhAN3COhfmzl0tkJpgW + VtAu5EtggehwwLzBQEHTi8USCeTDyllBixCD4hzY9bwcGgwizcCifrSoly5aRnsi+YIUydiQK55xaBCJ + yxodIkRNENFx/dgfyfBoNOKMEHnv20S0CpgKlsQRg00kZCEpmIipJHJd++CRCLlorRlaAinpksjMkBLI + Eq7KiePS4yA6KQgfysySQRykW6xlKwTaQZGqtOIYGQlAR8YqlrJkXer0kDDdoaNup6kjyEqpyVMWgo+A + lIoSPVC3X8qwbJnspbOmKRK1ac2W6ogmNxHXDFF+MT2w/EUBAAAh+QQNFAAAACH5BA0UAAAALAAAAABY + AnQBgf////DkQla06QAAAAL+hI+py+0XlhAgKopwmlfLBy5WSJbmiaaVyrbuS47wTKucXLM4l/e+iTPc + JB5exghAfnrBn/PZaEKn1Ie0ijVNrtnEztMNo5rD5QH8QV+Y4naN647D4HK3gB7+1vcKMsW/0TExONhA + yMaXGIKn2MjA6DiltCdTGOkGuLJ2tGGZpPbp+XZJClF6GoVqBxpXyarqE8QDSAg2eaZRe/sCCYvV61sH + HPyyi9lJ/CSL4VfbWXSEofsznOxUbd2FnY1i3KbHTUNmsKxrhOQcOn0dLrfdDvUODxLw+o08r8PATFTI + Y55OiTde+e4VVCTvoIhDfHYoPHHlTyBP/ygAtCjqk7L+h784NvQ4Y0TGY7hA0tt3Z1OSDOqcVSTCzmQ8 + ma1ouqi3riYnm14MQbooxN++mTxjFc1zVMUXe1PAFY2YUlA0jOsGxkw6CmtHrSXKMd3I8qmDqFKD5jr0 + tSlXcWupJKRpgYPctNR2wh2bNuDIB3THtA35l2hgB7KEuLNrkktehgw/Dm7x9rEIyYTx9UV05m6Ur3Mx + Oor8FzRlBKJBSrEKNmhiQxpJ+Luc+epoILMx1zaFUqdqjlBRl1z5+TZE4WyJ44ZJ0vBDxXtzAw9ufFH0 + OdOZ/97a+iAXnIsbI5wuHTxk8IqnVnGl3Ypvs7DDGhVfGb5S8VBxNbfd/hKcCOv+vX+XnwqAfpGHV2z3 + ZZVdOPspV8J6SAk4GYTDEWiINLmcF5uCVoTimkWklBaahBNS6NxLbvmXzH4HPpOfezmAuBaMt8noERz/ + XLcRir7YqCNKLaolYk9BdiUfj9k5yEI6KQbAZJNOMknIk1I6eceUVjapzZCkaUkkfSBYmGEfV45pZU7B + LJhggWOQyWabbr4JZ5xyzklnnXbeiWeeeu7JZ59+yrkFTlBWKSUMctWTpiporrhbKTRy9ehskS73JZiJ + GnrRj2Is2B8qk2L1qWShpsdXZ5cWQ5Wlim7I6JlcbvnqSUUGAtNrPpzlGSycagpdrKM+9us8TiGjZA1F + qOr+KD1IrhqrJs3GB59DuRWLqZDPJVtZX7y69ayz3UYYrRZUXYuqtcs+uFl3zDZb2LfekoiXZ6ZWC2uj + kfBI17mbPmukrwIyIg2D+qp03MDcqlnqthjy626As4YQEHvl1nuqMKU2qDBrgDHc8CMA/mTJObxOIlLG + L14MMTHB8rTyYC3DA3I09qZAMmKJWOfaDxcWx27HHn8s7k6tIkwOrf85lzAVGb+smc/WhiuuhyK7gAZ6 + R3dAx9BX++v001BH3ajWHXhtMkE+4lv2UDz33DXFX4N95I9KWE0Ja9alfXC3TLe1t4Y2zOXiCXMbfVhu + /abobt8xQviOXDZr0cfj+8L+VAm5GmOrNw14m8Y41RS1MHjgBo1dMuSnKM650qOhbk1C44pN+LsGU9fP + u23gzXqNbXv9Ns25wo6j7IU/U3EWuDece1LJq1wMh853Q/bm4Y0N/I6JXyL9zRK6bi/wVUu+sGUCFbQ8 + qY5kr33nKSOHTntgDJvFUkIgmhn6ZiCY+e68ewm6iTOvf5z/5e03aKneh5Cnv/3B62+5Ct6XIge+1ISN + fsWDwvH4sr0Euu1hnvMOkt6HD+xkqIGUQqAGi5bBGfjHQd+zT/zER0HedKx8R6Gh9TSXJhZGTxIoJKCH + VmPCdtivLiISzQpNRzEDNqiHcbOcQmxIvhMGEGjGEkj+viDowCruBh0VbAcUoyhF2/UOU7a4otuU+MAK + jIslQ9TN9WzSxgGlUHOTMGMSZ1ch9tjCiU/02Rdt8kdP9QAUqAldFifGHTSgcV1BPGEgT2c8zkBwjVrs + ER4F6ccwipGDqquUkCipQnMgLXWN/Msi51NE4+XsjJe0T4+6CLNMmpJa4ZtjJ1FWMFh26JVM1J0s23Kj + EMpGfTwspLl4GbUVPfImTlvm7U65oSCFCnC4RCEtfTcINMnEmX4TDjShlUql/RCDsBIKqragrG12jZty + QGYK2KmfLnAGhKnqoETUo85mwsdMZgsnFvLSEwvJzTMqiuPoZigffo5nSL8qpAf++FNPBt6TMAalGip/ + KR530oahkVylKSLaDYKyKp/6lFAr4XmvjkLsoRox4FzowM5loTQbM+WDRqPJ0X9ibEsg3WkZwKmK9tQU + cSZFlhylKc8lfvSaCfvpz4KBpKESFULQ0IeWguUbI0D0pmxEZ9KAuE4RcdGqOdWpR1dAwl06dSGA5EYr + a0lVdSy0rIYCIC7509JkkqVCFZ1cScV6SammT56ShIDjBFeIrL21Cg4SrKuGpDDHOqauHfIkOYza1L2O + 0heN3Z1k8/FZi6kwaCh7zRXXKoi+ouuvmuylP8Mwz0x5ErUTUW2W2hZaYb2qFxljVKaY4jgbQTQZfckt + Jlv+O8XXwnYg/GCqXYTLR/OFFbnJtaUYWhWXcSItawyC6kZxS93qWve6XxnuKzwB3eiWgi7GPS5125uc + OJRXNaxALznVi73vgje8myRmO2XlDYZwt7sy1B98uXHgg8rXHnGJl2HVZNsXGpi/rlXuguNz3lmod2dQ + Za8GcxfhRiR4tXXwBl59FDAIh9gG+p0uhUdM4hIbbav9mKiPCBzU4iYQxq1jWyIoooHhUk+NKiapZylc + YQvvoSLNtaI5fYJf0H4Yyf0db4nRUjQPemjAK4ari1/s40ac47KiCJiRFnvAHVO5yv8Kag/HnATFRpkU + Hp4ylXl821PwQzm5aFOVAvX+p0APStCELrShD43oRCt60YxutKMNHaiSUEXOaGZsi/eLZDxLGBU2/qGN + p9VlIJkk1FgEc5jXu9eQsVmuTZvwnTkWVLppdiHOjQRsNC3iNePay3Qmi+Nm3Qd5VfpWt3akrvMX67B4 + NV4KlbKxXw3rHLty1aYddg6EKsVd3/DUpzvLSihd6yVj+9mZRraisPzpGnPVDhdVM7S5nSyhpFsq62Ye + ucsN7zQ7Aw8hs3bd7m1qrt3wEDAtIFjd/e7dqkxeq05ks2MJcP5qW9S6moZwATLnqSIc3wKvuFyZwx25 + kvpkEQ/vxCnuqXSAnMnaBaOdE65w6wl4LGgVqL/jy9n+kc+V4x0XJMELROPnSXfjAe95yjWcR7yKso/Z + XvOq23wmS2QXGdld+tDdqnGex3zbTDzWSlL1zVyX3OTmPne92vd1jJfw5TDnEjtjeJohAGXtRC/61j3+ + 0bHV3LQF5kqIT66rsl/bNlO/TtXDTdOmOx3wggl8lvW+94d7UfHHFjwkHz9jw1jd0ig/8uK/9fbqahXs + Qh+8X49Casa71+iXF6NWzeJCnSmYJ6l3epKR+ljbIaF0T3Y529t+VXvL7kYigb3ODcX4Fat+9W639zIy + w/sUXx0exweq1pvPvOeXkzHVTxKOPf/5aAcefpqgZPeZeZDzP7Xy4hck/KY+1un+q431Egd99mNX8wTd + fPbgZ3++W49jW1VG3pdSlOd/9AeAHkMt+bF/ZAUS6rd8CXh3judADnchDDhyQSYzBdGAOwd8wSd8/xNy + wFFvYbI1GcdZ93V6H0hXFEhfpGEiLpVmxJZjYdcl4dd+q0cyO1OC3zdZg6R+g3WAE0hcc6NqX8eB4tU8 + 1WF7Twd1WFcEJ/YcHRhjroaDOZiCUWg0VJhnY0d29pcN0sdqEtN3tJdHXciCLehdQJZavjRa69UrWBGE + SqiGsOA/wMaFVUiA4iY6P5iGuFeEBHQaPthNXviFWMhpxDOISsVINKdSrTaE2EcMIpNNoNJaESiBkthh + 06b+bZjoRpEIgpvIiXYFcTIRhJ5ogqJleXD4XNWkW6Z4ik3ohE8obbHHZnk4QIb4Xm9khzZzOM4WRqgY + T2DYi4Hzi68YjMaBi6X2f7aGGBEhQIVYWZroTcODiM6II/VRhr8HiqEYiEq4jLzWf1fYjHrGUspDHA0o + jMO4irV4ezvFdbMxROtYgO3Iaed4P/I3jt3ojZO4QakYjiSXjLJIj2sziRo4f7A3eZpUkGJHjN9YHtO2 + kAPZhA1JO9/YX+0zhzGgjDdnkZViPx+JftaAkPkYkLZRGyEJWPPIi8QlXk62kbJSjY0XV51HhDl3WexD + htIoj+gjkn6IgG6mRmUUML3+l3jpaJN/qGR2aHN850oDGI/TCEdJeX03WYMCs4A2yH+WNZU0mUZ1F5R0 + loomyFUnaX3cyI91mIh6ZJQ7eZTgMWw/+W8PmYIzMxKIl4m30XIbA49WaI8IQSVN8mf1MCbZJChR8miJ + qZiHRiiLSZiOCZmRKZmTSZl3soUKeWOa55SYQ5HyeIJhmV98lla2yGqj6ZD5EJPMSBk6J5ftVpdT2BxH + RIneBpTTsVitaY3XiD0C1VKEVGZ7ITVm+Y+mSFl8WZGlJJRICEpmsJyaWXpbaZsGSY6giY1p15zdY5rX + opUOuE/EclS2h5sjgpPO+ZyYuYHKpgZ9RVtw6W3FJov+s0hF3gV9bKmRW7hHetQSZ9U/4dmH7/Se8MlJ + xWgY5qV2x1JVYZITxiSdAKIp/AmdasmKA6qdzhV/5TmhoXQgDiqQ4Imc9zifu5Avm1eeeGRw4GKA00md + YrYzUoh/IFlmzLYtt7CdWtEiGoqG5WhrlrKXiPU6tAmSOkNNKCgZcMaRBNmheuZDDpURqkakUklytoJp + j8iELSmgh7KjrfFrXveCuiRMGzMNwsky72mjMilt7Yko6al2F9qbQko8Y9liUNqiS2lWxjGmOFWmuBKk + kiZKXESJ9mScz4N2Vml3KWpTDcR9imSdiaqnNMim+xNMVJqWcppffGqam0epw9b+gy+ZmhPJoXR5j5d6 + KbE5NZn6Vf5ZO1wan9/CK3V6lqi2R3eQnbh0hEDabhi3qT3mLnjEqg4TDhZxpgx4mU5wLpWDZdEIiChK + jWEYZ2Xpo20IhJ2FnrD5l1rkppICqcmpeQ7HYq6IocDVSzaHURY1rVa2lvWjrU+glVfaKCVTrAh1nOPq + ZilBqqT1hoQYNvYKpkzXqbqZhUMZm+Q0Tzj0lBLQYNXaqHRqpPD6qf4KovbAhpuVJLbyW9XmYMlalf1Y + roLQYANlnpBHL6VZkiuirmuRH7saQaaqsDbFF9LiOx3bpecUnCAES/NKGSY7TIRqhywbUi4bpxODmSO4 + Uvn+KpbTE6nk6lbYkGEBJqyKVII0qxDjhqwYK0Qwwkv+xgpIi6q1YbNElLIuyIiW41sm41xYq6gBerEQ + 2mvqOgwHSpqZWVcmFrHzMkaDarFIiiLL9qMnW7Efy6shxZtzW39dK2460h9M6z6LxRSN06bAdINFS4t4 + x1dfubjJ5FNn2Lf0+pRCu2QmqpT+lXOv0Btq6j2xmloNa6cR66xa+678mqOgG7ltuiwcdl4cApyuC7Ms + QjCLs684mlJTk0tTMVbnwpsBBpOTO5w8+psvWhSgsLXvcV0Hl7OyBatg16daKjhsWbogmo90iDFZeavi + eIi8ixATS76WJFHNir3I0Z/+BWtPhhuN33u93HuJngpJFqgXLpGn6Pq623sL7Ns/K8Rkcni8ppeqgnpA + h9cSR5S14qq+/BshChNumvugyLU3bcmTmMSuBkos6tnApyqRm/RNoyrBeoiUIkReIzySFKiz30q6Syui + m3VYDQvBEYXCm+a4Ztt6cfdpYrgKi6E2TqtW1wlHTAO/Kwhb23hcOqxZLbybhouXS9ibRXyRnfu4ScxX + r9qrhtOBezqy+sl8gVuoUqxAM8gcqXawP1ZHEjGjbluvXkuy9ciHyKjCpZLBhYpNhwrE0NMiYty8G4qz + c1ll6CTEtwOzSpKH9cbDuTdLcaiynNqIBcfESUVHQGv+rNe2xjNIxarkyKtXcJVMXlW0pFTIrGIMoH5p + wHDccAZLittbqlMsY1+Lq0Lkhn+siu9oyzSHeJfRxeLJymL2ls9LHH1cyrmJB0ibph6bMm/VL7NTaTVM + tCfEvIJLzM/sUw8HG4nMnep2TkCYdRoUzax7gjAlUenbtmm0NCtFR2XjzK1KwdKMc7dszHCGvx/Esyir + ySFyw4DLjgN8yxcDZC9sueesi515yqcpv41DS8eMMCdFnPtMt8faiPDcsx3MGiGKvq4ZJOshzH8qtZx5 + 0P3Tl+isykWKlrsovkIov8OMqizEttkcpQ8tqaj80S0b0pJ7xmP8miEI00Yr0zP+TTPdi0QjTaZY1802 + Tb9oy8j8rNKFG7/9eWkk6cmfacnr3NNIbdBKzW+5m1levKpPm5qTksdhCs61KdEw6tQoxtUN6tVuTGxP + zDfuDJ3i7GAt7aJOymcu7VZfHUkyWrOSbGTHJbPsLHIcplawnJ/2TH16TdHPGtViAT3bCr2ArZqTjZn+ + w5WGnVeI/dJnPafoCDkXjc8u2ELs/M+NfbAOq9kYGZUmDdl9vW01c7o2I3kve9mLLdhMWaFVPb+cQMq5 + 2XpqcCeANmiG6WeN6SbGPSXIXZl9gphQstzPDd2QuQXKHd3VTZljKddlwUZCSs8qSM1Qbdm6zZC4rHnR + wU3+hUfZ/3iXcQtQ3v3dB9kZsdjaYy2aqvval0vZaaNRhdW4eQ3aKB3U9L0Gve3Hlwe3sb3AeevevYzf + YUjYSV2cjIvR3xfD7mOvCHbft6171mYVAYvZDh7J7DZIEG3O/M3gGJ7ht10OS7vgJ34BnzXbJwxsu/3T + Qt1WFDhfdurWNS507a3V/YzbCQ6kOx4rphkZYf3LBp7j0ILkeTQ+Ik3S84BZjIWnMe4z2gUag/zXBt7f + D3zJxouC/WFcX345v9UxqI2PHV2AGg1gTb633F1na+3XweNr7XzTl1NDA8fLk2TaocTZP75+gNWxCEnm + U8rjH/7nHo0tUQVgQh63Wev+G+0VjlZH6AQuLIhMSN2z5fr2nQ984UN+6BX4EIWeu0/mv96cZduZnrMM + ScN6ElSN56Iz5rj45K8nMJT3VvVl6ekNHSX76kUc5xldvSG76xdsQawebzUaTcCeFlv7SnQz0COO6BC+ + 5h44GVIc6a9yWC9OwFUsToiVl73bTwqY1+8t5Zo7axZ+54EBYqS8TKee2l4gxs3+gJOOpjbu4i2+XJ8Y + 09qjq+kE4onb2Zz3T6HMtITlMppc7Cn9EZGFT72aoQN/S4A8Gn3VUEPh7o7n8PouioEu52Qd6gXM09+h + zBx/kB7fyFBM8Y8N6yy2f0Ssj2JnMjqs0uezF1C08K7+t7OjTuYm++6Ozrm/kVvegfMxGmoiic0L6u3i + XuC2nn67l7aZvsoTvNlL3+soaUgcGNg2L6O3utGdbvUy/x7+Mes4/cpoR+rj3vLIDsxS/Ejw7qXf/PRK + je+V5MRfXNKEXNTVTkRyP/dAfmFpvJHbkPaSEGG7+vafvlB+n350n+90NKLrjNC7fvgequh83/eMj5rS + MGAL1pySb+dzDkDV9/Mvbwzwlb+PL04hzsApfKIEX/dXjfnXcOA8f4s6J7fh/hjqmPK2vfKzT/tX6xFE + DvTtG5Nf/9T6/B8diBMaHvDw6+ZcC+Um5fjBzCxt1PwNntjRL/HU3jBp7rnxxIX+McTroJXz3v9lYZ8+ + BpX9KK8d5y/7+5ixtczp8WO7prH2KP768+/bvV5R5E8A8ON0uf1hlC0JO3HWm3edvFAcyZIyBFNd2QVs + WTCFo+t56TwLrFn/gSFckFgsDY1JGlIpkfmMPAizmXtWsURqlpvcorojKOwbBsiq0ql5eeix4aJynE6a + 19n3Lrpqc+jxJnDGAgtdDBFHABMzCD0W08Cw1G4YHxccLekgNRM5Ox0yOT69JLH8TkB3MG1EVZtIXzdl + dVwREK+yUBliPRtmdmlhhYV7iRVxTSeDFYwNmVKYj7WmX50RbYWSpZO4z6pTWb3B28gtr80x0HX49rzX + Z0P+s9NX4OnL79m354ne/u63jMtnwt7AegatPFPmTlpBOAH5IezgUCKyigcVCuzGjWIYiBdbdAQ5aiRB + hQCA5eEIEELEkk5e7olpEYjLZihTmqmwhl7AmXZ+Rgo6cRuenf96PtA4NBxTak4/ZLRZpN2hpEqnMhUJ + 1SpXQSyyrglLTdTWSS3H/jTr9RvbCAXT8sJZqOrNq/Lcvs2rT0xcUGvloDzZ8O4vvyUBc3W2tFriR4zP + Cm4KrszhkY6dYj6mecPRwY44P1W6FynpGKYnb4Kcpe6tdJUtVww9czat2jBjA8nVldyc3BJvX0bNuw6P + 3z922+0t4bjB4CCfd4r+rzn+37nEG9cwVD3wcJPeDUynsFqmG7mvtYNvy4A8avG+6HK3Huz999Hq6+fL + f9Jo+/IL16OsBvnQU6878PYLj0DrJFNOwJbwM/DA4RI8Y0F2AsjQOA057NDDD0EMUcQRSSwxRAFMTFHF + FVls0cUXYYxRxhlprNHGG3HMscULGSSkQm3u8+7H5YSMbzM3fDTnCx6zk5AoBAPxzDYFdhnyScOgdJKk + IqNkUjcqz3swlAi1jIrL4vwzCkzsiPEpyzLVOXMWL0Vr0DUO0mQQEzGggzNOCqO0U8wqNejB0OLGFIHO + //zkyT0186RrTQfRYs8fjxKVs9HSSEtQSiWRDJM9FDL+MTRS+yYFdNNKHoXUuVDZxEmjSyPb881VRd1r + vwoWHQZAaGyilUoehzi1T1xTY2vX6xBKLrxR8SyVWFYMtHJK0/JrTT9YHfRPWFlFM1Y4ZCl1a1lxzzFP + 1LGE/RafXo8k9868lhUUOFLDiWsXd8kAUFV5AzQXUcngZY3ZYaNJ69ILprX3X3mtrfUhfNHV5FNZD+1L + EiZ5lTDivzod2OGLeIViBngYBuPCjqsFOGCvssVXLXBNQZlgfmMouAicLwH4YyViPpg2mX1A2Z+M2akY + D56vxPVnoOMZ+aUnUDGaYaSt0HlnrCdc9ekoola6TVLHgOvQC7XeGWOgyP26Tp3+uM1MrxZ8SLgWid5g + Gqa26Q1bYFbpNlVsUt2OVl0gne47jhcGn+YLhxKOHAYLCo/WbsS9/ntimRXn1ASsB0+hcssl74xvZRdP + tfNkJz9OdJAEz2r01FHf3N/aAf9B6Qtm3yB2m3rPQ3O4OcfW0Zrofnmg303PHGbab1891xx2f/2i2Jvf + NHiMhI/74elpcF355SN3aXtG5e6++FvBb32Fk0cymZBvz+ei/iNsj75V1t1Pz7CM78ecui3scvOCUwC7 + Zj9baelxW5OGuwhzvfllLEnaU0z+0hYvz9UEdFwrC+zmAZpGIRBzjMqg444XBMGpbGFzwxsGROgnEvYM + U965O2AKNyI/ps0QWgPiH/tmRrzDOe+HpxAID8k2oEwg8Uvpq+EQiVjEPmQDieNoxQZb5kQTuqyBXGhP + FbkxDiYiR4sKtGHicjdFCEnxGPyyxRj1FJPpDOKE28LiRtBSQYR8i4plguPeTFjHgWwhOLagnwSHBUiP + aUWIQnPZ+J4VhgfqsRoQTKQisxiU6DBOkM3CYRM8yIzzUbBuqksjEKfWyE7e645KKN/Z2qeKK2JvfafU + VCqf6EhEFAAAIfkEDRQAAAAh+QQNFAAAACwAAAAAWAJ0AYH///9WtOnw5EIAAAAC/oSPqcvtGKJI8QRV + bcb3eTR94kiW5hie6sq2ZurG8gxkMI0bN9Xl/u+JBG6bjcFoxNB2wKZT94xKRcypdVWpXlGO3vZrslEg + 3drD69KC1w81+52Gy7sX9xzaSN7hYrKFJxS4EIjGYrfHdoi4uKDIOCX0yKCmJwnZQQThFXlUWMO5ZLnn + KIpIWtpUKUnpifrTp/GJ1NpD2Lpy6vqTq5vY+6b6SPnr1ANjy/MXK2uGw0s88wxtJT3dErzIao0Da8tZ + JOh921K9fVJu7oSejjKeTcfukgV4USH+vbkbL7W+7+z/BJmoYQBP1PmD74gsQsz85OhXcFLEORAnKkiB + jWIe/ncWNRxTtpChPU8cz3X0UfHkC5XOvA3cyDIPADfiOoEC+TBmNJ1bUrLckdEXg6AWJQDSUG9kB6I7 + ecZxesXnSaA3R8GEWoMqUpuCemIl93WK1KmdPpllpKVkwYxduwZBGRZX3ChjOwIti3aoWn/uRFaNOldF + 3cB4CJMgsnQv4EFOsfmVM9hi5MCTIxJ8N0jxtnofGJbQ/KFyQdFzSftLC5pfstTQ/jJuBsf0Ptlface7 + bCqzSrd6OUM2vBI4ENvstC2L/fpkUM/IhXNxDhc6FXhIWTdNZne567f/pHsgjhW8OZq1eH9hwhTahJLb + vXr//j5nfAfklbWnmxzgehHp/p+IHz9fKAFKdEZix53HwWj3mWWdfAM28mAM/wF4xnENSghbhrct2FAY + F14UIYQhGjJiAofU4hCC4Xy4h3l63THhNjHyNOM0dmSABBvIsEiREAL8CGSQPw4hZJFF+lciCEmSuORM + nS2lSRtGTkkllfj0Z8l6fYFWZZdefglmmGKOSWaZZp6JZppqrslmm26+CaeRRAowJ511HkkDjjMphWVe + C/IoYJM1xjSoevwlVV4ULuHo4i9aVphbk4VJehilTj6JqEKKJnYTh1me5ailhao0KjGIXTXSpprMAmhP + fWpEaal2iYrdiwIVc1SU6r36W6yWmuRrirrd6oNrWpm6/lxewf5a6bIjKKVpsZVQ1aoUbPGqDq1KMEug + pI4weha2QXiCXrUBcSRuE7L2QhO3Sjo7brgGFtsAtb04Zu513rr7HLwFFlEdN62Uq0uyObC4Lrv8Tqft + oVceGEMw9pZy7acNL0zfr7kkkdAMEmeWb55DQCoDik9djHG3/sarq6eH1guyKPgCgTCzCUtms0H2gMrz + NbeUG7I8Rr34EsopqywoFoyWx6MqVbh8xdAxv4KhxkfDZ7UKD9tUMswcpEsv0EHru+/VGWetNJTCKo30 + Vi2OTHTRRpv97twe8gx2tCB+PfZnB5mxZaRoyzPizQoLDWrePR/wtOIR/80eZoOn/gKd4br0kylehIuo + mxzzRN3d5HTXbffd4LD4c2987Aw62SuPfmnOEWveIRZtu71GqjK6K2vfvcq+ec/ppj41GNDS7orlyUvi + +++lb0u0HuISX3zUmScVUOjPj648KpiDq6vtnH/9RSTEHg487Hunz4L5HGNLPT1bQDlv9oEOFWL3E+lf + SkUurU2CgZHMWpmjEPvUxzjeHcxFvIpfggiokOZlS4EIXN8BESc9rXktbsU4n434xb/8mAqE0lpcaj52 + lQ4yqDgkrKCJWkivQrzKgbWKIaLgtjsYunBSF5wdSUBDw4BJC1wSnCC3Qig+ZR2RZrQwyAblN8SQINGC + otvh/hRXwcQU8ueJq8rXlRwnFArukHQ9PFcAM8YqMOKFEFckYxVd2EZh5O4zXttEo9rHNKnlUIxzgZr2 + ymi/Z3GxOqhriwcNpUOsHM89fJxfAIPIHDwCzEcsXFgcEaehxUUnkarqj9NABja34IhOleQkcO54vyXO + D3sv69YXfZaPBJZSle/xo1xMqSi9sWxvbdHks2bBuCKqC2OXvIQaZYlLa9FRIvXzJaZSJMxhWjJEh2RS + MnN5RmbiBH52BCAirymdagqGmDrSjABNBjGHHYiUiOBSyoppPTXCU3LlC8MkEpXOJ4XPmegDZ4AANU/B + rfJuIGpmJseFTx7ewZ3klJQt/m/3RmXasxHoRB5C1/kIzQRUoCUC3y0bajwnXqSi/Oxcz3pXgo1apUmx + /Og0cwdEijbTkx616AdBuqQcWdOfKlymiWaano7hxICoOKY+KHVDsOA0T7/020i3yRRQoMGoCHqnpR4K + 0YhewqcOAeYzhRfNbDJsqTl1HS2Z+si0joF2ngKHNxfaLLKOEZkv5YZI1bkQrkTwonjDKj3rOtcXHm1G + WLphHiNp0qnaaZaADSxdG7vFBT7SHhipCXUyxDpGpEelK3WsGxu5OrWgIQTuu49bLcDOdHC2s55VKE+t + BywGZTY/Uz0oXMcqV8+uFlbtTA1pE3cL+kFgP8zrV24d/rtb570tON9wZlJRa9s5qCW5ym1t7KyqWY1y + rTN79UNYN4ld6z4WsgvtD2lFu8JYUHUxgxXvZ0Hb2+dENb2a+q4gQ0O3Qdn3r8eVLlMehVBRslKzxg2v + e6lb3exCL4GzZQxvGtzOAvd3rghuDsWmmoTF9iWvZVkve9vrXte+1nOneyFiu1gE4qo2vyF+L3wzqjsv + aOmOkRwwUQ0c4gq/gX+dAkE4HAzk27C4xSJ+8b2UlFCEPHW/kcWa2XT8zatdUsYtxR1qJRAnNmE5y1zu + spe/DOYwi3nMZC6zmc/8pS2fCnd5tMReoBzGFsN5DcXs5jYPispQrYWjB+ZePJJs/scfMvmPOO7zkNNR + 09P+NM9zjKuUiVxkIxMjuBYKZkgiLOFCi3fOdN6H2uyD5//d9NByht08a7xd2FiWxCk1NaSv+2i+6HRp + hPSwU1vtZ0hzGgwqFSVwa71cXJM6x67mS4d8rV5b4yfXRN51VT19vcRFya+sjXWzi70WPQFMB+K8HLZL + zWyAbA24oo4yiF/t7A+LG3xf7Hb/wn3tYRu7foc9sbfhDW55/9mjnCr3CPFNbIDvG9l1oLU1lKdsaaL7 + 2xHxTQQLvkhzn1vXDM/2GLJg2D0++dWRlvRmEJKPGTNabpPuZ7z1zY5EcYZP9r43yjddcU93GHCGhbDJ + J37y/o1PhDnYs1PLXa7zhQs85TzHhL//HZP9pnt5Q7drPKWKiZAk/KhNb+3S1S1rr/r85++OuaGrbg6t + S93WQbs6NTgOa2tn285JBePUO/7nBH/95YhW9IxtmkTV7EbuMPd6ylfFYHeTPOgU93vdveskPk3jb0mP + c84Jv+5lQI6+Em+N99BudrEUhVNIbu4vKKu+zFsM7NZwn4k9X/nPA/3xkB+4jUU+1Jvjb3u6RSBnq7wn + h0e364a3uu0bLqytv5WDjm99wHu/ePo8+NYWFrcSC4/8SeNe+IDjqiORSe3b8pf1OP+7sMyXan3ydvcF + G4d9RT94tcd9n9oubLUf5+aR/qcS+nRfPO4NZMtBC1Zk0kH/6OvfGlUGfrVTVC6mQd7hf1gUfSUHEkOg + Nm8HXgDoe6G3Zw1YWSWVfupHfxL4camWfXwnc8RnRByXgCMIfGwFgRGYd8EGgsqxesYna0ewZgfXNXww + fLyGdnDncd6HQ/VFgxSYgyWocJvHeLokE3I0QLgyK0H4ex0RCJwlhMORg2mngetWhLPRhJiXhTv3OSL0 + guu3fX0Uht1nbCKWgmblfWM4d6RXeuOFd7y3gMhVQTrWOKMWh4EVhVL4E7OXemToHPqXh1S3hBf3g/eV + NPMBiHO4hwvWh5qWb3dYiDcIh2woh1uIM6MhHL4TiDCi/oikojP/10eaOIWb6CCDGHt6ZokbSImRqEtn + uFOQOEakWIr7w4iu6FKrWIlAeIlrFX6TyIETqIu0uGAfiHViWHZIJUGyOH/68UAYqIaKNDbKuBHNI40y + QF3HwmFMd0rReFXU2IkheCDgJ3+cmIncOIVUWIUdGI70Q4xnV45DqIWpCG2PIURv2IKMaHF6OIrfuHZc + EWiyVyBOaI6GCEcFuXPNWH3c0XywSGEGWYY7AkWXV0vmUo075pAh+I9d9IWG0Y77R5DyCIMd6IB3EiRY + ZgtohpIpuSZqhpIkqZIvCZMxKZMzqZJGUUCAJ3XOWIwhGRj655EMyTztl0lSJVvk/sdI6iiR4cRnv+gK + A/gXDwZ1VraTfwhQ54iO6Vh698A3OEkG46iCJ9g+aMh9PBmAqRIM7ChDNKd0D8IjFVl8ZBmANEeA5EYS + UumO/7QawsaEIBl2Zik9MsQxJiRBV4iIXamX8RiM85h4t0KUreiPcqmQWtODeKlU+8iXiJZ7Y4dZetJV + AhaZtzgg2OKWnXaZYZeZl0Y+5DaMH4JKo/mKJMiPzqdip8g3nfKXkqRJrgmaQpeYZZha+QRKuKeRYZma + HRVbe9mbModVLAecXOkxDueTBWiEZ4OYyRl3eWYe4kibJmWNeRWdu7hV+XORzgdhfnla7Mh8GLJqI4aH + sUme/rrnj5zZYSsHRMIZV4f0nazYOgGim+NEhPCplozpG9TmlUijaDr5Hv2peaXZlxHXdlHpdtOJX9hh + i+DJm0BZfk+pO32lRn5FMBNmXQoaHJsHmfnUbo6DVXWIoPxpNmAjoodpcTYWkA1hLn1yDBB5VhhTMwza + lyXKXfZRo9pFSKoGSH1nnco5ciRVj4/zZt4VlbSHVhLaf+75nvl3WUwKKTfqo0WqVuSFlQPncwIDKI7R + eT/mpceHi5Y3kl7UNM1pk5+GkEnyokhypMqZjd5kc/uURAOoCSqmChUqZMiZpnHZKMG1bV7oIWh5DzcZ + p4VjmRh6LwfRJwbXqJ+4XRtw/oF0kJ+NBqPdSGhfamwYcWvboTgrkmH2+HBLMqcmCJf7JqrL1B7VcjpG + RxR5Ghclsarw2KpE9y3TeIT8h2KTBaieM6KwWafitg6mdTBZdYSbmpTGCqlIN0AYZn5N0x6n4JcPkqv6 + yJSBOq25ojpCMw4bU1oDsq2CuKtxRx529kuo42SjapSU8ajd2pf1oafi5zNtcFe9qBPTNa/pum+/6pwB + pk+URp1iBWxi+JOq6IemWI8R9xbz5RrYUA5/6awL+Yj0umLgukaK8YCaWqhBJKwRKaWLeKEay4BQEGgD + CqcsY6u1UxXGIq5pJIlpuLBoWk86gWAn+T9Fl00nhp9p/klFOgOVw0qOJwuw9reoHkRTjRmsXkguJYsp + 78N5+Giz5/qpDTuPLJdxJVQ9EDMt8fov79OcFaiDmFQiWMusW4tqYnuAlWqEUcua2Hmxy4a05QOgp8ES + TzqfSlhDHMsbE5OvslW3rEqZegcMeYuFe+uRMvoKgke1S0Etc+udRnuUYwmikVdZZ9hWQjuXYkqpe0sc + luuLeOuJPEFJ3RV/9FCgBFVTJsuwjkiEolq4AOQjZPcYF1K7N7uGrIaJjTE0ittbaXl3HdQqu2uA/aqA + LSKMwHte31VYOyJ4IsMayDs+mHumAklKFdogq5ZwBfqyy6uwz8ip3gqNbksvGES2/qnQunaIvTrCjGHR + srA1sxh2LkFFup3au7K7iCdUBnh1MuWbhACpes2btPErSNiZwN0pgv6Fitc3H2o7tE5BCkeHql25o7bS + vcdrvcmrPgI0qHrbrky7F/N7nLU5uM+5kS4Ewii7uFP7mHbZrFWjRbhZMh18lSEarRsLwDUHNQZ1wj0F + FRLMwC78eVHrVLM6jkparKBaeyH8wg4Ts9ObZP5Zhu+Hs/xLKJKoHaLFxPrLlrhanVq7xZP1o7uULkTs + wQ0JxSLcZJ+ZQmm8w2Sco7WBsFf6v9uJW0dGwE9sxFG8S3isReIyRTh8tjWrVTsIu4FcwwIrtfpqeStK + muyb/r/aeMCWkcePrFcD3CBThryT0b6lMcc8XJxim6S1tZtHXLoLxHXAocZuOMTT+MWgBMeO+672t8qP + +6fCYRuGXMRx0Tis5MUckpavEkeVDFHK5lWE8QzdS8GunFgXjL6A+VCvfJXR6cti6avSDMzQ3IymN8Dh + zM2wTDF9nItvGx9Q5g4fGsOCnMlwu7ZBeajky8YYXMdFISVFomZs5CUuaSVd4s80mSZPOCQCbdAHPZMj + idALzdBo4shDa5s6OV/uHM8ZVV/ITM5+/BrC5ahu/LfXKzyJCscffbDlF6BIuK+Zu1YY/XyMVbN3MbPi + jMiHPLwzPZWMzJ5BhoAIbLXX/luqgfPOkIzLmvxsUTq+QaxJD3hCJszTpNzTFtSRn6vHRJ0VWcnUq7Os + r4Mq7GF+ZOHRvDihUi2ZQf3UGNBG02tMk6nDYz3VYRFQuOFkoZzHOuXOSGzVpGvBo2PL/sPSb6mfZbs+ + VLWh8dqkIsm59SbX3KJ7fB3VTn1jNo0HjT2wXM0fdSbZCrm0V3MtMnbJ4lvWBHLZXOnFe5yV+7mOkN1e + XsTMX32v+BXa4fiRgxTGvRh149zZ6NvWuA2KGvfZMCO8Koy/pF2WT9eYr9pa7bvLjqmzrI3aKqvbRGt9 + RmjZ0UStzXBenhV1od1Ep2u+YL0StbvdGR2ppl2UhQHE/rrYoY2Myd3t3a0G3pkWmkwDKpnanjnr1ewN + 2N8B3kTRn3ekpfUNwfhqzn38Ib+pYLc8Ioqr1nik1YHUVCssrSQ9UauL4JuBzTD9s9m8lPCL3+7b3mxd + XGFNdNT9Q7mNqF3K4X6dyARujci7IKBsBSRe3RKeRasd41T91x6e37GdXSjEvuGJsRz5XbKxyxpe0c/a + 23dM4UfelJYLEUa+4VBqyUn+LN2zHTUSStFZDa97naIowE2d4zgekPrjIoUC5RMcUw332musqh0u5vAQ + QuahX8OTiIX53I6myFPe2paaw/LM5ml94lSuq/Wc05794dBN0+XF2RF2m0gO4IWO/tKBPrLiDWO8C1Mw + a8vVduaP3Wib3ucQnjd6UMiLLtNea7G7TejS5dg6buICnuja9+mmC1a1Kw1rTr+TnOcZuOOxPeqULunA + XQksveV9PeE4eGED7ujNHdRXNEqlbrwaGumpDgkiReyxnuyt7uqvflsLju2PK8kpncpUik2HHuGsbts4 + be09nsPYnOlRzpF2S6xk3dLmfufuzOzgC72JvaDnzKXX3u3Znu6LgNaJW+2J7unx7usdzen/DvBn3e5B + aeh6bemHuPBv/sZ/7maQnr1y6tLK3vBEl+tObNHz3ohj08IHd/BH++h8TM+6fu7pmfAyU/DIHmsz7+8s + 7rcT/p88Nq/n4k7xYf7txY7xcsTzudx7KZ+Mq87wBKXzEmnrZSztDd7zSy/0Mb+8RR/t4wkVrXJJcP3j + E/zAKY/rVnTUAUzvwnTy5iafEWLNJa2Uwk3gaG/XrDjY5srvZcPb5O7tYH9z+h4ed4/Pg/7ANF7jTZ+B + T7/eZH/POB9PfP+FWD9+Pp+2Sh/08Of4yQ7590jHbF/x9S6ul7/KmW+Rsbj4KwyoYZv3Ft/NpL/iLm+0 + c596Yo+4Wt/m9l2Z8AzkVk/ylW/HrC/lEa/6WW34wO/5sez7Uu/631kIcaSidn/8Py8wdPrr5K3tKj+w + 6az4v1/1s7jnX95GqMH5tM/0/r1v7s56qqn/8uTPo+i+3Ohft8uP/rz/zOKv8H34/qMV//Lf/pIf/qz+ + 3sNPAPAxdbkdhAuPVntxflF3/8Hw4sTSPDESXR0VCSb2hBNXvg37jfHeR3Q/4fATJB5xRqQnyFteaMCn + SQlwTrGj7DZb5X4pXvCieR0norlzpmr+urHi9bwjp4/t8+Z94czrJfjO9gQLWwwN/9Z00gwbFfECEbcg + J+8qLYUwuQgt/TJrJEGXNke/Sk1ZUOP64AQ/U40aU39WaZ9sb0NySVtN0wSChYeJi42PkZOVl4UDmJ+h + o6Wnqautr7Gztbe5u72/wan7aGFNZXU10UF51dloO0cf/mMbXNtL2O2T8nvNGeoRgb3z928fk4J88B1s + kHAII4KOpPTzpxAFQ4ogLF48kLEHPHLl1k3UKILjyBQmb5RMKVKdPCgPa7HUMEuhSpRhbqqSqIDmLZf0 + YASF6YMRiKG3bOZcqPRE0or0CoIch6bnERtHmW7Mym/rrp1oDv58YcWNUKxNeZ5l6rQrW3tu7w1UKNZA + 0Ad2cfHsqmVvw74GR52jeMUFTLxgO1L9i3Mx0cbuQsoMG+pAVcl11Z7E/HgDZxlw0YH26ksj4coZDmPO + bIHE6rWedcJm7EnwSNNkUTdK/bmubAaiUQKfF5m07dtqdVumYsU3mebLnzvPJACO/vJ9s2hYb8VjgusK + EbQ3Fj5yPPFJ1OXmTGM2c/butcKLj45xvoLymqcqjUKjVHf/3jeIb7H7DiLwPPMUy8o9NYzaT8AOHvQk + wtnqg6xCA79zBUCfDtsEL6GS2JCO3Uar0ML6MAwQqr5S89A9EmcQcQ6z4jLxxOhSbEFDGTmMqEG7eExw + MhBLtJHC+XJcKj3ZVtkPtxWcGezFIo085MLpRPHNFvaCnCDJEtZz7UukTByTsiWbQ4VGGD+AwUwRFiyi + yu+uPBAoFMFMDgUvS+OyjjmtxNPO4pC8gUc++6RRgzcRTNMSJYIkz9AYITBuSvwAtU9QRCCNVFIZZIyB + 0RD8/sQ0Ux+fG7VTQBOaUK5RSWXP1FMZTHVQQo1kKNRapVSUL1p5dZTTLOfUdUP+TArzCiJRpRVWVoa9 + 01lD/6mO2Wfb5O7DGMzAVhBvufpWAk+zMrYnEl0BN7e01tMU2GBhYxQ9NIHNyFdfmfvNuAq6fRdezuTd + 0V+tepD1v9MCncsCN9RdBEdONRy42YKTs67hhSmo6uJIhC0EvPd2kHjiI9gcuSXr2NwYDJUT87gyPUU2 + mQiCWM4vPThqpqRjhEJ+OeYzZ140LMseynkKo2MTdzOffwZaCKL1HbosmqfVMpGxmG7aaR+Ipglpqsyg + +tSv0VJ66d60lm6Iekgku+ezRJXM1G2SXM4637TVnnlqd3Vh04miq/bMTBVgxptvkrHzum8itbU74Vyt + NptxcjfVm0vFe2QOxL9/rXJu+swmi1vKbygAACH5BA0UAAAAIfkEDRQAAAAsAAAAAFgCdAGB////VrTp + 8ORCAAAAAv6Ej6nL3QGBMOFUdGnG2/npheJIlmYCnurKtm3qxvL8ZDCNizeadPkPdERAEUCnaPRRZrug + M9h8SqejKPVKg1SsWBkXhuyKVUONeaFlhFncsbvRfsuZ8zp5a/c6wMq8vJx0pqG1llSoEufnlqjYuOcI + qQDBGMkDx1HpBmhkwXFRmEaXWUc56lhqijWZqvNh0ceaU0REiNkzGBqDGivKG7vr63QYbPBlS4wzi5uB + xFxBOHwCjLwyTY1lfZ2ljWD8yh1zQVsbaPgMHY0I/pS9DuWuCRvsXQ5/gjdojh7RnNNuv+AfQBoCB5KA + pq1NCnkGewQYd44TOkMY/DXsdVFOwf6Ml/JRUyiIoyR8z5alIVeRoEgXG1eaaOnS0zmGmejRbIhvZC2E + KVXGrPZTDMygO3L58nZz4CpB+/glfRFUWtQuQ4k6NMoKJKegD1/N1PdU19SXY69U/bnQTLpIINcCHHYS + KxocZ+3VLdsNL8Z6YfO0jblUJk9seqsUZneY5ciQWR/11dZVp1wqd+FVLnx5JZfHdr64BVdSDUoPnDsm + Nn36R2aOm0trJP3Jtal0owmnRn3bZ26yQubBzjgZ15vV3IjjNX6xTZjgfpRzhMtcCvJr06dWN6h8w+BT + QmTPhlWb9N7dB65bJc+7e8Xor2s0FCDv8zv0lujrsU8iTrPY3v6BtB4IX3z9AYVfMQXed6ArIez3DXcP + mOcfdPKplqAEFUJ14SML9rSVgz4EBlo07EkyHn0QnpdhQCM402AjEGFwYha0DahOhTHGdKNlIvTToh9N + vZLjC5MIQGSRRD5kZJJKDhVkYykS+KQCjBSxXFJLXolllkkScqQWATaJCHQvaUlmmWaeiWaaaq7JZptu + vglnnHLOSWeddmaJ5JdF5qllEKGIsx8/YL4UHI1sXDhoRokmtCKVDI7RVEReeUkdXKRkuOh7UeLWHX9L + xDOpXOH9MuEYmda0qVSpSumQehSVKuNVh1BKTICo2rhqerkaeIxoasE6gxKjjgiJrZWcev7srvkpWx6J + v+2jSnBWjDoKfA90himzrWhr4T2edjhFOtOCy4qYlyLqLLe8akvJn7ExJow80xLrYx/AUpjttdwiiwwq + zHQCLxBrjXsvpMIaqli+6nKaaykT8UXvCgPXYO13+oaTMK4La8iuCYOtgfBiHKMR8RuzhnyowhuruO8d + V/UoC02bGRsJiDDf82nK6K7MAL/9SnyEdigHXB/J5DYSWavBZqwxz6yqO81JIZV8kMydDu0Crb2eq7LT + zULdAjlGFSyegr5SLYXNFC2NYdded9ty2O568sPEV5NdN9zmuPikzwBuLJCjSifDUHZo+5n0zXP4Xezb + T4Mtg+AcBv5b+ILUdlGGiFzvjHHTcUf+LsAxmy1aaHMA6mp7bgucG+O1Er527NuMHNDlV2ySN4Kre+36 + 67MHGnLlH2yHuda5i9W340V/DvrUh6sRgkJOmfy8UFEOinXjC7fkaNA0Wj287Yj/eWuKiWbvIOQH/VaP + 4hJH74qk0SZhLco09s638st3HCu8eE/OMjg4BX2SqZ5Zrqe//TELJnH50P+O9jj3iE9GXnrgXHSXLvLg + zy4rG0oDgxY5+HHMgCU4h882qAgUukOFvxgfKP4HvhFaEDbGK5/5EpiXDgojYHhzi1ZkJzAuOQmBkGGU + DuPVPtG9j3Q988gOa5gsIuJwXdtLm/7ptuYxEWpIfjGbyQk3xcJ1hHGIfkoi0VakxZ6Rr24D/CIYXUJA + nQEuXOBxTQxLN70uBsKNUpziGFNxmbWU5ib/CcQMG6S2KPYRh38EZB4448OcycSQsFsCHxeZwEaa4kaD + bIWwDDnB9ZnhkjcsDAnbNsdHuoyJgiEeC/ZDylKWxZW2OaIdOsnKUO0kHD6I5e4Ac8UzWsRpEKLSKmn3 + jYnAsAN+06TqbhNK5PHsRHn0mPCc+KpoXuxrm2wYek65rWnWQWregl9ceqJNo7lPe6lyZrwOqUD13ZIM + 5uzVi16pnWauyp1PeJhuxPlIXF5CaDmspjV74Mtf7uac/7TlOP4HWbgj5HBvxzTCdUrFz0VcKJ3hBGhA + lyhAgnLzeUfQ5z6jdMiMKvJ0somoPel20IlqYlnefBJHm/i2HJFNXNp5XDB3xMzT0fSkNv2ENImpiJbC + gmZrWAjVmipUw9Q0RSxCJVI/+srUkYsI6xSZMPNHVJtisQQqXelD8SlAAN5gQssx6WwciVJsQumqZSyh + HXsDM5pBkGRVJeMbUQpOvXm0XpAEzy2W95kqjVOqUy1qQwcrC6BVtEeFWOtNmhEjKymrrD9zXF3sWFih + JU0uTqVJoHjBWetNMYC8qwRo9cEHn7LntH7962ojSNeYIvEOxnSqbAXpjDiyL5fJuy1uc/4Liaf2EoDd + Et+/hFui4hpXpq39jnfAEEDbMaNiUSWudKdLxeqm4n9pYdnlRDvPNIYVvIIVr8V0BrLm/lR0gc1aR9cL + 3tSyhRd4o0V2U/cQ6B61sfnNpC+eV96nxQdIAmYafgusP/zdK8GW0BwFuNtdZNo2vZhhJDHQ5l/z+op+ + DYaeeh8MYeWpcFY4NWZeLCWcxZ64neyNp0M/7EAlTMDF3YAxEKvFvxqHN6eQWY4ZdxxjAx3MKy0MspD1 + u98ifyWJO/6RhUDB5CZvVsjUJfI64suD6SGhyof9sQ0JXGMos9MgQVUnko8Bz7DNmMZcHrKXcaLAUGAY + XF66E5qG5P7nQAt60IQutKEPjehEK3rRjGYToPGUp3Td9HgapnOd1bxmNncZYHoNbonlWMTm1NnO7sUz + qff4KDObFc3sxXT6LqKMa72Zz/WlJ2O3PGpXgxU44tAXdkP1h1vj+tJ+hOOpAWVUk8DVyU9erZqZ02vv + TZqXQ13gqNvr2Z/AeNYm+TRG5dnsYuOIx6iWVa2rRlZwp9nZaJHrTDx97vlY+9q63rVISluRAME7zvIe + NrHF7ZLYcnor0KotilvN7nYrMXOR4je+5p3rhOMIzqFp+KdVBfF/e1jhLSLJu6ddy4xzud4pRBF9IzNA + kIfc3yOXeMAlDTeExPvhNbv4gMMNcP7NiAxEVgYy81ru8ntfcBM9P/OuSK7ljb9851eO1LLLlXSNG5jj + KfF4wX3ObKArfemtsjotM330a58auUJfzFKKbnRWrzvnOh86RFS+8rcMR+zYvvPtNoeJ0erb4cP8udan + PnF1otyfaVc7wtledp1YFCxxRhnSp/B4g9ud613/OAnjqFKbczPiQU+82SkKQ8ibeu50jzy2qE6ihj+d + 5VIHPOX5Ckq+L42zNjf96iNscjRYa++yf2wsNH/f1uMe9SOBj7736qPF+/3vrm87xQLMj9tDvZulv62u + DSc26WfwQLanPuI9z1ceYT3rzB8+8SWjRLxqVN3lV3FUEpGLpP5ovpHAZy3nv88aoBpU/VTYwDiQ0Xtz + dX/4lxz6p2qDYyrpd2D8F3ft537nl3oHyFwNKFnJBXfpVn3Wl3vQw0UMqFrNkxjdN35b53y90YFJtWm2 + dhoiWHjZtoEcWH/Bx3oO6IIQmHoxOGeGd3idB341gIM5eA32EoApuHY8mH8GqH0lhDQ/iHQ/CISlVoJl + k4SiBCqS5Bd0V3c1GHg7gnwlx340OHlRuFcMwYQeyEbYgYVZqIViCA4s2Hdi54akZ4MfUUVYGIfrN4fb + B3bU4ISblxh9qIZh2INmaG9BuIdgKIhHCFTet3yICIWDOGIteHA4Z4SKQoWSaGnkEYN3mP6ALxiBjCiF + 3GcfQ/iEZMeGCIiJGwaHxkVy+gGIOPWFjghZr2dEU9F7nHiID5iHw3V6tigdaRiIj6iI25SKqkhv01Vv + +jGBvRiLlEiABSiFpFgjdWiHyPh+GyKBi3Njx8iK1lE2M4dBUSF7uLiIlGGN13gx0jiNY5E95IiEv9iN + 6Dhi4HhzXOEE7liO8KiBgDF2DbRqXIE1+OiF+2hsWRh99Ohg4niPwBiMpgiJENNTotYoSrGQwCiQ5uiJ + EPOP7iF3/caFJPiMmhKJ0VF728iN8ciPUYBeueiLdMGQFyl62lZ3K/lqehFnu/CKp2h+gBEFWxJg+tZo + QSmUZMInjf5WlEOJlEmplEvJlE1JlI+WJHTzFeoIi81ok4UIkryWOKXTbXj3e1GXGn0Ik/q4ElCkeFnW + PVSRGzM0ll6ZlbA2CWRIW/lAlRnlHffzkilWlqHEH9JWlwsVjidJkHs5JZ0AZmaEGGt5C33RltqIktp2 + WTQpEagYWeToaRiYho3pH7YohKFDcFV3dSZ2B5aZkIIZkiIZfh1CbpeJmAqoKwtVGpoph5VoiXikNJKD + TqA1DLJZbav4mFtIjOYWXGNlgDpmksLXfLSoh+bmmtnogQjpDrFpkee4izQkNgLyPdepmF9FhM74lrXZ + KKdVcfmoGOQUdmKQk6D4ndC4IVMmNf7RR55CEpqYNICn+TeWk31LMEB21ZwiRHhWWCDmkZ5RNpjKeYMf + Q3CPAXICR2uck4G0yZ4m6E8XmGyYeQYDCpb1mZw6yZyq2ZrW9BhFgaGoNZ0FaqBeRZdfx5+veaH0ySz9 + wZsumZEAepsnWIGMBS0jOoLa8kAx6nvDCFIVmjVhUVrw2YXo4aMH9JscinxCmmVDSkjJZDo6SqDhsoyt + Q53AeUFaRZx2tWB6UxJUiYZs04i6qKXL6aVDuk1VZp4u6p0bCqRoqlsqWEdvJoQOaprriZqRCKBO2qXY + +Cq3YKf2gqcaCqcRyqcn46dH2imxZ3ESkiBJipEQOqZcKkFLhv5WKfo10Maoo2ehq3KTS/qQV5p3hCo3 + /0lmVxOp1Wiio9qfhzUZ3zMpxZBYnSoSUfqg9gkQ7XAwmNo5wKZ/YqpKLCqLxwmehGOqv2pjRkOlzGio + ZnqiH0lrd3qqDHM20FkcrEqp91lpHvqkLwM00eAw/rgbkkqWesqtlZZqNCRn3cqRwpqhbwqtrkpqIhWf + WeSuW0pRZSlsyDmvcaqvVkgvIzJf4oKvswqvHOaH/rqG9Lou8ceXNCor6mR/K/qtZWGuiamrHBROEPuh + VSex89ma1jAatdGsP1qE6Jqu6qedtUpJsJdkiEmyHzM2ntqdemkyGCuPd/Nur7oeJhseh/55szwLrt6Y + q4eKqLWDdvIXfxO7fZX1sdYJriwGDzagrSrLseGTcrNTtJOjYzsFtHJFkWPHtQrlkEmrtIYZWWgqtLSq + VIWSsHiYp9QTtVkbreWxChf4tJ05SeF1ee+CrRKZIH/5UXHbiWf6OEg2NCJbZi+7lc6pHuTqsK3asABb + H2zaT24BMt/CRpILaxclilhVnXbbRHhguKjIuNQGSncrqpV7rKXbdEhDMnqFrJ6LM1OYpUl1ujG5i1WW + qoQlqAgZWFTafel5PicLag7ru3WrusGactKINsjbkNtKjazbdNDXf7zFEwFYMvO1o5xZpY4gvRjHumCw + ZzskZ2OTPf56W4zUW4V7yqRger5B9LaK9U6RKb0Z65H/+rr2N78U27g+WJr9F5m+E2qVirQIXJWB+J8+ + q58DvLsB/L3Zix/6S77xewPYF6tceF2XeqPKqp44ZJzuK0b3lR36QJlz0cF49FqUI3n6M8IbW8In1hpb + K7ZDZ1UpDKIgGMI7iLUrNGM13G3E4pkXjDij+8NlCr8V25CSkrrolLw62LrCiLYK5Irq61wOnK9fOZAM + e7ZLfFxXZqkXK3iuMZafYcFvuJMYzMQ67MDiZ8STmLv8W8WbpoyhOJLSSX4+vMaWG0/O0ahapcfTh7uU + S8UK/F83OyPSaqth7FrN6i/j21lJ3P6GWtRmwenGHDLI0zeilcG+iJuIYFwfl9xxUst/EwaAEbzAnSvJ + jknJ2Wo2pBw7piVIEiyD44WhgdTA5UrClRzLiLVGqkqMi2qt4zXB9JushwG6xzGjvAJVgsGoWQxTvcnF + G8m99tphIKWCY3F9/slaxlTLjLyvt2yMWmylRrvD3HkbrhYHFLZ5gkMbaATA3mWBLzzFl7iqoDxRMQyR + AnKv6jy9AQXHXeydRmqVu2rJAWEkgMYlWAKVDg3RTvkmfaYnEm3RF81ocYnRG83RSRkwDOpcl8WR9Jxc + CfqKaYyy+mlUrYyVdbypprGugYzJAM04O6HKQzvT54mvN30Uvf7bn77FW4QosY78yP9Sk0qYSunL0ofL + xkMdc5kqmgFbzJmAmwQdQqaUwyH7KQVj1Pq8st+8RW8b1VKte8HAULK7tuX8jfKHx5M7wyNTOQbkY2Ot + BhL2yVD6uDh7sMybzXfLoKX7QJ65yBJs1zZaPCrKM97LPY3MzV5NRVZjQdUUzqVY0nxdts+71CHSIQxk + 2Mrs2GCqA8MbkWOMUEGojsBz1uoil5udwKRrf4RUX8FM2jhN1ZjztO4sbliT2ZtZvrYMsy7MvLg6ipxb + Dv93z4BqsUINy0xqWeE5Ool1R2bdYBO6qbstRjdlYeRi3VGMyLj1FLQLOk/xIctqXaowSf69xtiqbXV1 + JacujdBMFBY4+Em0Xc+3I1HFTV8S13iz7d46At/xHYPCPdweEWuTacjn3Mz+TTsKekt2UyDU8tevXLb/ + 7BvM3d50/b5TDU0QlEgfLEszVU6T7Md+CCx5bTAkjcv1ZzMMbtkaVDOi/NX7A0mcRNmjELiK01dInVXD + 6sqHrOCcMuPAq+HtiuB0JFEgVDwhOFPbTc0wTuKDpFPiir5F/kynUZKQwoFO7toy/kpBIi2a7ZaTZbZ7 + /N7IdFdNsptnReQ9HlM8zTbCRU1MXuPLvcpcnRNCTt/95MukStaaDeeuW+ZAvuPH63+i6+EfCJhOHZjV + 29/NDVKEnv7n7zTPk66Wep3U/cvlN7ooYcBJQVvIoUzmW57pFXW8kY5EiuXmMiXnFY6CqT7AgV6xYGvq + 9j20wrV/kCu3B/4Hq65f7XzhyB3Q6Gm19ZJEN76OyV1kYa7EQGzmd0ne3eUvmWtmqT6z0ansFijJUPZD + 5qxVmUIl43LiWEHtln53t5vebN7dow7VZBtVJn7ulNPZV/3qdEzlik6HI95ekf3su37nvk3rxn7sGz6p + ydfWn16Lgi7vC6u7Azvdd01zvfzhWt4E2bnv1OPwyNrDlL5Rhf7Fb43wZMruLAXw697SG8PpPr7nuAFP + z/xWag3oMwjrx2U/FS9jbgrqhNy+1P5xYjNP8xqx6ogu4Wh9zMwO5PYjy0X9XRvn6h4f4+qeDESdQktv + 8Jd+0HQe67p99I0j9Rnv46teYqm17fa+5sH+GiPP9H0c6im/wL23XN7387wb9Jqmxk2/sHGU9a/29hob + 92Mro1ouWEPI8uWT2i4O8VfZ5D8e6+Wu8DUZ70pe+Pks8ZlcSSHvlWZvwHvPh3/e6P5+hrMO9JZ/+Wiv + 0+le90m++IW49VZ985kY896N5Z7fgKl/hZhvH2UV9sJ68iGc930v+lJs9a4P4qcvuHze170vx78fZl0l + 7cI/+7+uFyjdrzBv27w9UNzOOszf/MT//LRP+KT/zsCX+2kn+/7XTvXSr/bAn2HIopK7v+izOPrsDfQR + tLvh/4+gb8/l//6dH/+IRfCUX+XKTwDwMXW5/WE8QlZ7cdaabhS8UByVjjxJk1EDEPVcQH3TJqbxvJn1 + 3s95mtuPGAoWfUcECxlpTZqZ4zNa5Vix2YVS2x1xvR4wa+iNgb1KapgNbb97aPh8S685mPC1PMst26v4 + AAd3CA3rDjHGPv7M3ADVGhN1BCcJKy27MCcXDdb0zgb9Mos2SeFMT6NSLx/y7KhYiUbZPrVkVTVzIXfx + XA9s51xwf9R6gRiCj8OIl1+a6ToBJNtiRW2caaCzk7jZtt+klYUNwLVtqL0tzNWf23XVxf4nh6+T343u + o/Ot2Jl/PS09ETCQYEGDBxEmVLiQIcEADSFGlDiRYkWLFzFm1LiRY0ePH0GGFAnSUzpyMuopMLlvBctw + LpH0S/NvGilrdqbAVKRzJs9u3sStFAZC5h2VPiUURQpBqc+mWDqNO0QPZzKhPJ8uRaT1HFCaV+nc1KcS + LMysXJegdefVF7BeYrHxW1C2ZL6zau+yzDuLZs1joea2EBxobgapy/ZqTfxu8c+Wbp1RPQrsMA4edF02 + dqr2hGZkbadhhiW55BDBlVHMEK2Xc7HWIjxb7rsa1qPQ6GivS4B6aezMr/Flk3ab2x7IuHfnfgwQeNrm + sp/v5MaFTP67Gx1MBlO+lXfv6Gu/6xaO58b22uWIPxhMGXp37+G/wK/gO/Vs82FDCf203p17pPTvAXAX + AWFzJQb/TrnOvfLuSwtBrOQrMMK+ehkDBBcaHI2yq9Z4MCm/viMwngkpHJC8wTIE5InTLFiRv2dSnI7E + K2bc6hjqOoxxNIEuYPHFFHR0RkQZayxBSAM/8OlC9Fp00UP1svkxuCLno9K5Gx14qLyl1qvERylDeBI/ + 8KwErcwhaVwhRy6Na/K0FIO04s34yiyxRjSlODFJrT7Z5M0MxQwrtEBRqtPMIvGUTk1GmksFQzANS9Qw + J8Uw9NA7EaMwTlUcnXOEFiTFoMMpLf5NINSqMt2BwRAndfFTorxxdYNTSaF1DlvtnGDV8PxcUwRYY0Xx + QVw5sZLYQlRlVD5iCL3tWCf+zLPUKxHFMtk9lyVBOWCDpVS8aZmstkJNNz3y13ML7ZbFb8F9ticTkWVv + RmZzgyvKaKsEN9x5rV1UXkzD/JVbdRF0F1WAc8FRWSrphYG0ezdM7g+Dx+IXXn/rqrMZav7wNN3iDlxP + VmpLpViui0vYz9KNpfxRGZPRIYuKYGB+yeKEyVtY4xM89ViSmsmC4OV2xeVUz4xL5vlL/n62zgkbDQW6 + FJSNDFnfj5UO+TCpsY3ZyGm5ds1oZJcsd7MfILXtrcPSDhuqm45PUcKEda/Guod0pK4Mw3ijhjsT6jY0 + +z8d/MtbKpPcPjlCigEvTfD3aBhn6MiUqSxxwhbHOV666yZZ6cDKcNvlCC6PiUTGN0+7bpkkoVkdlZla + eULUl+O8c1N9sOVHisG0Ova+M48bNNVvV4pz120SGdurSucrW+FTfxw44wdF8euAHD8+3zODrzV6UgoA + ACH5BA0UAAAAIfkEDRQAAAAsAAAAAFgCdAGB////VrTp8ORCAAAAAv6Ej6nLrREMBFOeirBrYvsPhmLY + jeaJpqpSru4Lg1Ub1y4tavbOb5MQoVyCOkoQhespY8ml8/lpQqfKGfV6kPqK2K4sAozoIMfMSutNA9Dq + 9tkNT/3iSzaDTM//JhWyP4OXYpdXR2iIdJh4BzGoGIUS6Hi1J0bUlxCJKEnVuEnY6ZnGFUpyQgZKamoZ + OCbxp4KaahIrm0Zbu5SJ+2iiu/sSFNYnNmQ0KnL765CsDMXcXFMGzaH6PE2Jx+e3La05ffN9aB2uchxO + e0puusbdbmTxMn6unidP37t9v7a+r+/BmM2YO3hv/M0y6MYeQg80zCmLZWXhAzDtBrqKJ7FUxv4uCjcu + svgNnYGOocAAypapmzePy1heIekyywJfD3vJ9MjoXUWHK2Oy8DkFJtAk+UKOKCP0UE5tAlUyAcogKdSb + U58StDQvhAapehpqc0pQUNWfY3twdUm02DRU0s66MemqqBK3sugOLWsV0IWsXxDYFeWV5o6/oQijxZt3 + JthanXQYnqLrlYPFIB5vsrwRsz82PEk1KtKhc6oigm1oVnRaYmp6dkRf1rpgdbRupU0jpnq7hmx1rcvU + Rt2XbLgxv2Hs/pR7cHJw/zBJLvyBy3EXtDtT5nV7+ublBSdLq+QaziDpw6sHXa5dX3po432fhP7P6Xpk + Kq8b5z6fN/fu3v7N+PfUXlTNkBYeLOjtZxuCPTWggW/2xdECWGDlt8VEMvCXnYKJaYhMcO+oBWBcxAm4 + C4EPYpghh8yp2KGH35W0EybUMBaAADbeWOONOu5oI0YHsogikBs0BmJYUfCIZJJKLmnjNjoClGOOSdYy + YmVMXollllpuyWWXXn4JZphijklmmWaeiWaaYeAo5ZpaOkHMRew0+McoFCYQhoyc7HcnOX3+AgoGdMax + E3jfxTnhaC/uyaeQBjqq0RdHsEIHndwsYiRukhSoHH6QivUpdnt5t4oxcHBxqWKZjgRjQo2GehCsQ1pY + oamc8uCUXBbK58mtuiH4J1+ykqhnhSBh8f6ccAzGqWwitGERrBfRrjXsrJCUKoQXxbX2IZ6bHvqSgmlV + Gxu5M2o1qVrF7dBZb9l6q0iVjL6qqrn92AtvDliF5ascD3L7rl/xesURsPgydHC++kYiaLJV/Btft5pW + uig/sdKbcLkZTxydZPLCCXFzAXP8VkPSirsxsRvfYuKkJ5Zzorsj31spDi9fdLPABqes8cr+0ionyJH2 + B5oeNRZp0wnTnsxzswczQ6nEUuMacsTdyDbH1Oft3LTCGVvDsKW5xNxxU6wSenTQFl/saddeJzxO2A7m + rG9lfRW1mknr8rB0wW7rnLI9DANNtd1l83F2GzmtujXXf9P8tQ3DPP4wtuHRZRuRKJVQPq/jcgjZNy4d + TY40u5bHdwnkyGpNN6go5/IjzyR99V4Vp2+BeOLIwgVzkLmFTm3TMGErkO2ior65ZVn37rrnfwNfF65I + OwzM0LgLwfski7uq4XSti+727C5P9D2D1teKh2GnlH9f94awnwr00ecQcen9Tna7yH4Qlurnj7r/OJI9 + jV0Nq1c0zrcsEaUNMntzgvwaF0DVRY6AtCPfAfOXQBHZRVeQ8N3MpvLAmoSvByhBleQQ2LHtCW01IXRG + BAU4wIdRT2sdxGAK74eu7KmhhU/gIfhGCCe1FWsFZKsh/FAnQb9xCHpH3OHzoMAUAzLveCk0Av5X0gch + FvmQMY+jy+ak6D8qXk6IkktHFpf4QhjG8AlEMB91UKiYlCQFi+LRokSayLcuUqE2RyyiscImQ9lssRBp + TOIEoXgdHPqRVGrD4UcMCS07FnKQryHE/V4WGgnZqoBlXCD3VETJ+AVQO+VzTQk0yYqv4NFUgpTkVBrY + KSBakohwHAJ4mrJKVp4RlFCpINNkabQpIoxU+bACHs1YR1fGJHV6caEeK0XGuolRL5eagSN1uUs0JmeG + CXoixaLpoWGKyDmqpEgfVdiGUM5lOdz81TO/+UHYGG4YFbOAL/3lyXQCSZ2zuWbPgDnLnz2iFcSE5bJ2 + w89YKqh/7XtnQP7DyJBnMZJZ+GzlPlVUp1UmNBHpUWRlJFpQsKHzhDbEmIbaqbQIdhR+D/rYRxw5Uide + FFL+hOQhHypMDoDrcpfUnfSm6TyMGlRl3nwfMK4DBOdcaKh7SSrsgNo2R5Hufw4N5hvrNyrkDXV5xrPW + TKX6n+YV9X19xCrjpscppprFURvtKvzaKg5HlHVIO13YUfKpT6VIAq4/dSRfDXGWtCoykUrFlAVzaFHQ + hUqtTgMoWYlIGZCSoIGMpZ84lUnTDY2VhKXsrPkIZpMTxdR0l+VlId/mWAJCFp+HUqFBOfhIOvxVs5Os + ba+oswpkxuVwsD1sNjF72tki51p7vOQrgv7RTCT2trBspIxwG3pan1Z1Eyh1Y7NaWhGzflKx0VVj4HBR + 2X+Klp6LCa88W8LW7gLuhX2rKc1edgRh9AcyXuWuem0qu1/UFLRhNV95c2ndc9n3vs+V7YCaGKHWhYZB + Tv0tcKNbYAdTya/9pU993OtBAN4Xv9+FBoXPirALA/gOpX2wthATYQmD934RgoWI6Vvfr244xcksTwZ7 + Nj76gPGpAh4wgYNLD5rM8JRZnWxr6xEqGnMUwvdIyRfJkq4GNhicv4SUkuMK5CajpML9KNRHmVtjK2/Y + u/k1iC9Ucsov7m1QBv7UlbFs22U2NrnLiO+IDUtUH/+Yycu82nxFZv5FNSGpTYIutKEPjehEK3rRjG60 + ox8N6TAxYkuTvlLpuppnGc+4uxFuC6Dni2GqyuLOI3gzYDn9yvWSuH6kTmmSx0zmMgMFA71x7i3ZCFUN + j9nUMu0lcrVbruquNsbphTWHZd1L79rHUCo2MZ+zXJXq2ieTrY7nnJ0N7WxHO7JRELZAS6zpTaMaL/Il + DZfnFGo6o9fNxpYue1E8zsL+N92uZne7ed3rsSTY3Ehss72NjW9bwFvd1q5ds7UJcPWaelznJme1a6nr + XSs8Rf3N3Uv9LeZ7T3zgdOaJtx0oq4BjPM5lacLcrndwhMNa5EosuRSX/fCSam5+CR83uVcN4v7dpjzi + 4n62yw2YSHqzLeM197m+rRv0mOf6VJUsutFBiD8axjvMRF/5nn+O83kjGVYspzrJj25YrY+82E7XdlW0 + IKhlKX3po2m51TfehbW3KI5nNS90q/52m2O9XhISeqlD3m53v5vjdLe2R3306sB3PZKE53uubpbuEMod + tVd/OtQZ+a60H2Wt18h33i0PlQDRM+fh4nrgjy283/HUHZMnsQ9bv/jtmv3sS6Vd63ssV+AovvJ7z2A5 + 3yKB2IOb97MPfTiX6/Z47fX0wu8c2JGHy7EPMaplL/5dJIU9uyM+8Ron/uUlhbjyOh/vEve+8e9KDPFD + cNRb7z7ce19Fh/60GilUNmr7d/9++KP8v4y6PXFxvn7Vl0b4xhbMNBOll1OK83GiJoCD13gXFID4cH7M + Z34TCF6qljQW6H6gp4GAMizNl1d6p38/ZHqnh3qp94C7ID+o4nex9nXW5xMhlAz+N31VthEt6E75R3vB + szYwRnoRWH46uIPNAILrhn9C+H0N5wM2eGkwQIN5ZIJF2EOqxx4faIIniGwjSHPcd4Qi+HweWCLDVRY4 + OHQwGINVuGL314UceH0iVIJR2HM3R4RWeIVSCHJUCIZvyE47t1laCIBed4AmlRtkSGxmGBPQY4f/tIZs + eIZuyIWLaIiH4YgIQWqJmHyRyBIiJXB3VP6JV4iFWfiFXESHcBiHfriEIaiHkPiCQ5iBmwh4dRiEKQgf + r0iKFdiBnoETkfcphGiJ64SHopgRnUhTZNiLnEdxwHhHvjiMzmSLLvFrJMiJUAiLpZhqnyh9/nBnxYiA + zXiItMSEgehhI6aN48eI3diK3wiOByaNY6RSnyeHlsU5UziKtciNzggRsocTOUiPSNhLEPGEz+VebOGA + 9cgSgnUKkYaQj0ZojraQCemQDwmRESmRE1loB0lpxyKPtHgbT6iIXuhreHWKdbKNubd823RqsbhtBeIy + alZtNHZE4wiEqzhrAXEhQYN8d6dfECVWqiiTPsFQITkoLeiSK7KPHv45k/doKqMilNtmBpjkidbYYYgB + Sw5iS0qoClAZZHvhlJ4Ik/qIFxSlP8xiKKWhkqPljBlGkKnFijVpcblFQ99janDJlShpioGYOwRVlnZS + LV15h2npEf7ocPtSf+RDHvPIkwP5jtjncJmygDNDiG1Xhg04gMlRgHMTNb51LQY4a0VWiO5YjpKIfrkV + RXiGBDRJdoh0mkZ5i1qlExZ3Y5nZmHWpmogZitgnmtaRLn9XPDX4i5OAbe14jDmUSoNpcHM3VY+pgnNJ + jWtZe6O3DuFBMMiJhkWJiX8pgSz5PQViMxwJjYcJnLIYdcVwk2o3d7vFnbiYMQi2nMz5afb0ZP4SOE/F + ZFoJo55+mRl3xTmuCZ/D1D/n2XQUaJ+qcY5gyVjbgjOaF1Q/9YPg+Z2JWZPx2IT9Fogtpn3WeVVws56r + GZ5VtJ9DJAz6yXOe2ZNteF4lel65wg6rIp3dKZkNKpu8iT1/yI7PsQeM45+OwJfKOJuNCI87VVe2iUvZ + tWPB2aKj1JvsuCuShS7mGV9JiZmUGJm7CGA5SpQvqoTvuaAW9BwL5l83epIAyo88Co8HSCACBUhL6KU+ + aIQb+JkWunnTd2bCJGyxGYblyabVmREigXJW2Z6CRzkrGiLUSZvsaVZtZD90M2SHI3XmCKZt6qZvCg9U + SU74kCg3VKHT6f6dfUiogIagsSVNmfZIgLpkguqitfmgU/WaJkp56XipejV8GWqkRMqWBDep/kU4qwqh + P2lm1xagN2WleuKW+DNv5tGR2tWqopSpmqqh+jN1JGaoJ5EsvBKaxVlwftKojpqn/qNKRHNmDZNjuKp2 + 3pqbwwGqYcpAvyqgNbRJwuoxDlNPflpQ1JqudzqijJo0nRpHz7qbFfcTiBoZgsmZdQqv2AqKSfim/UIc + klWmlMpmx8p0LqiuqYmn83qvpXSrEnM1rTNDDiuGRVpcYHmfsjqr3hiwTioZgfF/93QPRYicuwGi2Sqy + Y8RSyNcg2YeyHYSR+pGsXUOA2hoDfESVdP5KTE4aZOozn6eSpiO5qTKrPYGZS1ghqszosWpJovcad0qF + YdVUrQEGZ1OrLVF7icvKrLsjI3lCQRc6qsmme676qKaqqtVjqWZTOZ9akvQ6qGJ7iiQlnMNJNdgFthAX + jGvrLG27tH16VKrgZBSUtFUKqw8Lsw4Kqf2EuJLaTzCHrF6LgpC7pHlrlf3yF8u2hVSCEFTKgHi7oX/K + b+RZb7S6OoHqmyF6t2J6joEJoWS6IK3Zg/9Xty9UqQS7EFBTUJTrrLe7r/iJtmnLu9Lqu6NbDhPFSba6 + umCGfri1u3QZu7IbuVqas01JN1KxuN0koqVqsJAqBRnVTvoKuK+Duf5Ria7FUr5ycwwAm75si4+9ukbt + +x9Tdmlkib4y52tsd73KWrXkS5qsG6nRq2f2iy8LR7IS1Hc3ljPaSLq0Jb4DTLcml6rJFcGb8p/WW8HY + O6YO/HjhqZ0cXL3AhqE7monNi4GGx7k3kx8vy4esJbEBvMI6aTKGF798Cq5W9aV9+704aq43rK4dsG9v + ucMlu6ZytbhXNJ4MSrUg7CFGXJXxOwo1WzXU1cQMNMJQjGmFC5r7ScUK1HeaVJX+C08/HKFOuJJeLKPZ + O76mG2AlkGYx+sZh5W0SfMevK8XCysOCKMc41wJ1TD3yN6S8irQnPMS18ohxfF6DLCeCQVgXi/7IbzE4 + ash7o1mwFvzIWdAkUVJpOxLKg5YkDUmRS7I/TXLKq8zKCFkjo9zKsSzLs8wkbXITznnINvqq0CS/9Tub + hgqyGgnG4UkDhBxZZkzJPayAuup5b2suSLm1sNvHNYkDRKaYtcunFMK318i593uVQdzBjixPSZBJm4vN + StzCbOulozMW7GNyKIqqPRrIv/tGTVDOOZSOMPrHCpilUKS3jZy3otXNRDzMSygFZmvODTfJWsyxCzPB + jJvQ4Cy4BT0ZWiBfdXOZt+pnDA22zMwzwTywmyfRHSvOOWDRt+Ixp1usetXQzFVOI42NYKkQmgzI06wV + aMBUl1zA0qvFPv7IejAtsNALsd7MybOLJwjbv/o81MDXXGC2QED9u/QG1ehoryz8Z/C50OWqtonbZVNt + EDMYsSrNGpo7C0HXO1m90s5CiP15Nn9bcrGZxCPj1To6z2KdzPjcnp4GI0p3cr821+qAXEJruItKsXUd + FS21RxAaLGQYlE2aeZNJnMa7x49L0XX2oLi2xO08erRmTxM7GyVNuKUZTnOLe2MoGAnm2RA42nPotqXm + GmtnDiJXyIIjzK3boXlo2Idt0sWV2d+iODZjtakITfTc2h0CXxvUmUwcc90a2eec0GrAnQ8NwMR9BuGh + QzJU2g2soGNDHPyFmvh7VX+Nk1WNCDkDkv7Ynda6S0K+/L9hG0TDS9253a+9wD/KqyioqJPkx7PFbWE2 + Ud/p/TDfRtWspg9JrVAnRt4JfhCIipU0nM6YzaIqWeAgDb4CHNoLzg+PkQnKg7DNLJXoPN6ZW9TGzeAN + DjOO/bX1MdhSW68pDNp2o7HPSLZL/bORocgf7DMvzgsxHtKc9eBNjcVbDOLsSyiEzdry7S0Wa+JTxBmV + k7Bd2+Ki8NWVTQ2eteQQpRk07daVvNP6xZHSnd0X/neHl+UuOGIqa+RKu9ol8uWjJt40rrNvwFJwfrjX + 3c+r5WQ3Cubzu93mPNc0Zg33zDxlPlpyZ5qkVbqxiuBKbRRILjBNhP7iccdVa+zjWw7g1ZiRaTzZ4RzG + mgDpMi7pZknpbNzSO4njRE3QYlFTkb47pU6pE23XQKLXFl7YrrZKmZPiln7Xrtg1sx7Ftb7gT9vj/ny0 + p77AOh5iiJ43v7nJ7IeeIw7jAIbr0P3mjAfZA3K5Cj7m6z3sQiPN+x3NhpnqKSXVoK451U6Ov24vKRbo + 4V7EaKNyip7L2O7ewK6b82fuJ6PrsE7r6+7orPJw+e43+w7l0xVtdC3mxt3UV84cBE/SBo/pFT7uwU7s + LCSe6H7gEH9SumnTA3WuDE9Vgj3lNkwuBdbujynw1m7HMdvsyZju9q7wid3tdO3wgAjuLR/f5P4+eSk/ + fhif8eq+l9Du8WRr8QYs9L6K9CHrYrfH8wHo8xJ/80Su9Ko+c0W/z1Pf7+KO9X2K0FcL8jv59BSM80GP + U4Rkolxa9V5X8x4u4kkP80bG1KnBcOBd26j+9t12nnau8s1N2Vkv3DzG3pMFTXL/pMju71If4DN81Yoz + 88Y46gnv4sNGmR1PV7NE+Ls+8Yh/lbED+WUTTKdRvmSd46Of+YJvVJfP05R/+KS/9bc9+L4c9mh57JrP + vAn4+vj9+Hc/+6zf90bdFTYf+6bO+6vf+Yys1qC/6cSO+7RP9qV/2QMDiGuv5mmewM+s7Z7/Lcifz6pf + 8syvHtotV9rv3P6d7v1/n/NHsdjib/St7/bNz/5rHv6rbMq0TP/1b//3j//5fyXnHf71G/wITADwMXW5 + /WGUswl6cdYbW/7BjguC0JxI77xUpFzhuJLp2kbaW9+pnP8XPtQLaAoIgT5SkRlBNqG/Z5S6mlZl18cR + u+FSld2qVlzekM3pmbqGZizZkhRYAY/z3Hf9Ib839/0cABOIAt8AkArb6jAUDQUfIxUGJZkoKw0uARwx + NxEJSThjckQdSjs1O5tSVW1YHzXtWje/DohkswhnTV53XX3TegNTTytLPEJtkxeVgTmEnWGgo5+p17yo + lyxwDbitXKxFwsumx3vMJ0eKMbU9F2S9Nf5U4tGD6sfui8rjNAXWO1/4awDvnwRkBevty2dwIZ6F/ejN + 0nbKzrIQ2xo+UJgREsdf94ghZFciYkWRGt15tKdyx0aVLsk9O8mu25YXFkH4mzkOJstMPkfl61NI571Q + JZfg/FAUKI6mzJ5eBEmBJJ+I0Y5eSbazAtdwPVmCFTr1zNVsxyAcNYsi6s+20t4uJSvPq6p2NmnVdaGX + ytoJYjkCRicYCkS+ND+ZSuoXL0DGEAg/jHsmoczDI90OVHv4sZqjOSfzCi1ucNnLAPmk/Qyis+e8ckdX + i/23Mt3Tu9CQVHphjl21smeTDo6ydNnJuVdji7ziltflxYcT52k5NP6ZrXXRtvpNOTrt7h2n246tZVnr + Zs+ZXxf+HTz7BOhbmg4+1GvAXZtPwremH7e5S0xnG4SruyTajAX3pEMws/1k6g6Q+hb0bTuGFGSAv1Yu + pOE/817ibUD77pvQiQotJDGxr+Rjjz4NCCwwuRFNdIrEDIMSD8EHM4CDRnWaAcWRHTGcMbwMALyxkTcc + SQ5IFpuDI6l0YkytwiVFI5IWIT3EBSdOqGwkyfJWirLLPcaEjUgO26JkteREKZOtLcKM0U1+ULRRTibx + u+kau1SDUkwF57TSttt8Cumm3aTUrjE/TQw0mDpFQHRKGCJy9B2k2ozyRBUZtFI3TSMMoRhLdYkxpaY4 + JzWSmg2vBDXUHAsida9S1pH1UVWd2VDSO1n7klFjuLnK1j9wzXVQQt9iJVhuhp211D0BLdYXSnRC00HW + kHzPl0LMarYLb1dZ9VhXoeVRGUUs3Y1bGFP9DlxUh0iJXHjx3OvXONa0BRzIGuU0GjU/nbdcPA2UcY/F + 8oKHwmjd/ZfJVh8pAAAh+QQNFAAAACH5BA0UAAAALAAAAABYAnQBgf///1a06fDkQgAAAAL+hI+py50B + oQmTHumYyLz7D2rhSJbmmWzoyrYhZqjuTB/yCcf1zjuRBLRcSLeekXhMKj3FpfMIaz6ntlUkRc2CfkJA + zluSapfisXlVPqs90fUz/bki4O4l13uvdD/0uqvvF4glSNhwBVgYxiJXleh0dyX0g+TIg1i5dok5BqG5 + 2eGpwNj4ycMFE/TFV/rHihnqahcAGzu3uAdAW7twSmHhOwqiu5tLTDhsXDObrIgSXMxc0ot3aoJcex3d + qq3WyS3srAr93dFbDdZMDqp+ls1Ocv6uMIxLKi9qLifOdO/g3r8K4JsL9d7RKzhOYD5GCDn8Y/VQoEOJ + jyY9Y6drX8L+fhIEmBuSjqI9kUYiklzQ5CI5Who3ylvYENxJlzNrmKxpC0GQexkz3PQDSSWlmT9x0jTa + QoWkXzxNtDyqzVueByFPFsV5tWZKnU3hxYTKjILHSdu0Iu2R1azOpV1ffE2bpRPZGXAL1SV5VyScr8ZC + PdVBTqpGviiN5tV7Fq0Pwrs8/a3wbRk1GocDVZZ4WSAdxthGMM6s7NfjEKAzJbZ0esfmPUIhepaZTDBn + foZTq7Ztk8OXqY3dBoytdPBQrLgpF6dbjjW12ZZfwCbG1njt42Wpo0nOlSBzN5pGA94VHTnS0gDJ9wPU + ZTexS96/u8LQnvZ460nps0CfPv/67Ib+Zpv3PZkhI/zXjn33GXgddiARtJ8e+/gXS3jVEYfgCQTKgwgq + +IC30IbPYdKJRwKMSGKJJp6IYooqrshiiyOaVqGFMcrIBoNUEeFijjqayAWPs4Qo4o4vfiLabe0IiWSS + Si7JZJNOPglllFJOSSWJQAI5IpY6KjEXOrk8MxWEm8Bn5FkXYjijNVsspZ8gMOnBCzCQfUgImWXOl+Zw + ef4WB3z61JlDPhn4SaebR5w5BqIG7amnl/1pFyBQ9Uyz2ASkORLfgKcpihGjmt44qGjAbAfFYr7oJief + hh66qaeXuqqqo5Uu19oTXYrARqryBWJnbq3Cuiuw/uDgJ1PdjJb+4ZzruLlMpsFOt6CwOUk7LICWXhup + Ft4li0esa0hG6rJm+kAtWOWaG2e0bca1bZ/KTiTpWIr9ei6u9RbmWZeo3MqlmAp+xusG3vk77r34GjxI + vqOoEq5TBIcarU91yNWwxKlx2inCCecb57qyfPovYQQ2W+PD0Go8EsosTZpfxW6ZTC628J4hl3OFqoVy + yhpnFImNkH58MwORiPxtt/PSmzO65V4zF8Muuxt0ut0KRR5vur2KdM4YZ2yFPrs56xXWuTqoUWm6onZx + 0joj/NC+vAD9bKinnr0xFTWXZNvWXKvdNqEPPI2q2DWi01Jm3sgqXtbwzKi3OialAmoS7Tn+duq7dVck + A+Dz4FaU5tw0vpIpcP4sueDJ9VztFGJt0Sieaiu9tClFaue5gFEL6LW9FcEus7cnJw36Nze5vRbYcZg+ + tqXiHLY6q3kDpdnra1tB+lpGMOdXsQXd1VESwTtxYe12Se/e4BBb7vMOMId8EfeSmY/878CTz/vL6Vsv + +u1C67f8x1l9Dz76AVAbP/Eay8TXO3FBjWy4gMvh4FcoBJZigNGgIDM69xEP0QB7t2if5JqHN87Rr37U + ygrkOrZBDnbtViYs350UNz8B9gt996Ne/AD0hat0z3vFsaAEAyjDftGNPy1QoVOUpwoMkrB1BSOfBS9o + qyHW8IggWxz+/qYVmveF8HkjfCIUH5FAItpQf/gAUwNlp8Wjpe0dPzxQF6P4FM0ZcWz8GsXw0og2Eb5x + j7sL3BjJODrLBSMiEUiLF7foxBEuEYxd+9RXRiWqv2GxiHh84RqDiElmLQIJcQTDvoCQrX8UUgmHVCNJ + aoXIRBbiaZnCj6hGpbzL4cALhjxOKcOGSlNKD2PGE6MC+2MR4mUnIh7hoS1P0qspWvJ1iPIbsaq4Pznt + JBgYeEgtj5kafi2Tb8ya3TM/ZDVaka14IHSjMXtoG236io+SiljYZMKQSb3NaAFChgWuiU7rqDNBitQb + K/3jtNNNJgf2XCQTm0ideNRHkQZl5B/+QVEQwuRuD/RoKCCJYh+LSKefleilMm0nij6FsycWRdzB8pnR + XF70Xv4E3ORYdjxvupB1cLllHmPkOZv2JREelSQTYMo6yw2joBbD5oxUOjOO8tRznJGnzZYzvV9KI6l6 + xKlMq5LJOm2QD7hgTlCqqaaHnrSqFUoPP5W61BkwJqDliOYO11RT+ujUoWFcKUtBxNTj+fSZb61RXIvW + nDSdkEYMLaleveJSic4zZjErZ+DwaVSr9nSmqsQrJVG1FRs+MDnZiMlct5nSCbHzeiu8xaA2Mlk/Jauz + RY0sWhnqwH+usKs/KMI+BToBeYXqr9b5bG8Ka1i7uUB7k7nBbVH+SKtw4oO3rn0tbGdpt9SGyT1IpV1y + lasTd3hWrsClbGXfU12pjdVZ0gxmSzabSpQW1re/hc5kdUfehUVSQNpNHXXY25nu2vS9m/Nl8vijW16I + sgH43eh6uxvcb0nQuBF9jQ0iWsmpEtg+BY5FhV2h0/AqkL8pgDAQe4vgBAPrsxq2L4f3ml0yGOjCrkEw + ezlsXLTQVq32vS/NYDhabpS4v3UtogbFKksuujjEIgbUrCasrpyyRrsIYbE59UtkFqvktsHxr4WUo2IK + R3nLAKEmLHGloeMelp7O03KInTxBiZAlUE2+Lnat1cYgkxW4aP5Ena0buUEMTULSkMSHQcz+5TNnsx59 + 6OlVnYFkMws60Inpn9zCQcsoaalKlK60pS+N6UxretOc7rSnP13pWSxp0kgyqcMSzV1GQxk3Z4Tga+I8 + SZ6a4c6boPUrjkPRMXulLrbG6oFVfRqCLhCxw20toBeN7OIIgT2QNi2qU53sVeN62bp2MCkr1GtHZDsR + 2xbpWhG9SWPbmMhFHnFZFQvdZtd43MCmM4LGcujetUe24m6uu8ndbXiq08/afje5y23uFZNzsbcWOL7/ + ne9YiePEurT3r9utXneSudplVnS0pW1xd2oIt1k2OMSf6+8f9xiYsI6qkC9+b4/neeKoYvizj43yh2f8 + fl51+ctVV/L+sw754CEXL8vllnOAL4rnH59z5OYtZtGyO+YgV7kGB/bla08s6HaNYdFPLl6JxrvhEd/5 + 1S+5P4lLzeZjhTnTnQttoVn5b8aSutO9fnajH72tYgctiAaC8H8LPagFf9TIk9zxmWM87mBHrqmvSHY5 + yz3lX8dx8WgIqtFULOG+kznhHU+6R3708NAcUxYoLwjQB/btyGWzWSH/96p34/N6F70fXF/vsNMzVYFy + O+kZf3nMS3JoA125MrxI9b27CvbciRGzp4Z8LFcceqNv/HcF7/c973iqEe463HOfGPZ0FapUUFTwpXr9 + 8Jsd6K+cPmFDWnjsM9P4Cptb0tcJfdz+i3/pdAxzg2+adufvkv19TibBDSxrBdJ6A4htDuNM/wdu0JB4 + 6SaAeUeAPfcy/KZ2RvJ9w7Z2dtd0RHd7V7NxCKh0/8UJ5hc3g6d+rhNu6IeBRxY9D6iB8WdFpeNdV4MY + LKh/CAVky5d/JchNBThcwUd8Nzd/8jd+3/Rnd+dzKYh2QWh9p4Z3fCdcWkBrFehrJDiEDHhOTng9EgiF + eheDGbiBL2h7Lmh5Oig/qeeBXFc7C3iFLUiGFOJjRZiDbagyjENjcFiFVIiH9JeAYbhKMIIUUrhuSriE + fWaHvAKIsSaHc8iDxRZ4YuiFNWiCjcSHcSiIj0iJ77SGjohMh9j+hZZ4h6eFgjiIYmV4FmpIVZAYiXuY + Xp8ohJWIdarIdQ7nijl2iWC4imGBhEk4i7r3VKIYGwj0g3UQjH4Igermi7KYh62oh0yYiaw4holoFZc1 + ic7oicmIjBYYi9f4jLvIi3Q3jWEhPsPod83Ijdl3guSIi/CHICI4gtY4iFh4i+kIgOtYcuLYgPqEiNaC + jr+ojmyIishkcq6WjcYQjlwYkNWojX70jXWHKf3oj9CIF+GQc4VWCwVJcTtjkMI3dBIWih+4jP+4g+to + UVTnZO9lj2pwkrOGUyPZhC8BOMe3fgaZkgRBUvMAajcpaaAmajjJkz3pkz8JlEEplFZCajv+UpT4p4ki + wYmKp4yD1le9uJBmsJRl94evl5EpGQksgTvz+BI654BcOJO1RV4klzilQCouM5OJcpX0SDEc41ZcyUYN + k5ZbKJP02FANIUXn12VcATBrWZfnxnkgVXou41h7GUuV544IqWyBOYFqh11rVX1spJcPmZiveJFI1HYX + SJWG2XkgqTVpopUgtROn02qLSIOeiTOvFnbCZCo5RId/eZpJ+TYexhqS1zI1MUdfqZvFuCa0eYS54n8c + wZD5WI4xaZqYuHuypzCMmYo9MJUtFpvUqILWgxDxhToJqYuV2Y3TiWeyBzDXaYaY8YRfuI0fiY2BBEyw + 0SvPSYy7iZr+0WiFmkkVRAMn7GmVsOmetaiQInc+SWWK7RWd2mmOVBRNIvVLoPSOjPI0czkFDLoypqKP + YKZQ6Qcrk8WgLUmejOWYESoCGsWcMxigTbl4AllGvSkxkBSeFNFCqDeiImqZJNqYIGgjSvFz26mhJQSW + r2mL+9mfAOah2JlVEAmiOwqK/7JcmcmiEZmjIZqg3Jlntsl9llJMiPOftYaf76mkyDmb8lmfMLFw9qmS + S5qf0hmjhlej6cJ7xfAgYMqIiLmScOmiLwqj6Il0vDGlZuqGYxqnNvqb8+l7oGhA6SmcsSegxpmhNzqO + Hxp5o9Sa6sAZF1qIezqghLifmUJoHGj+g0JaL3PJMwoynGy3mXx5puUhppTZpDI4nVB3qeRXpc2HpXd1 + nEQqdlCnO5XSqvepp+V5qkV6hvNWqzHKjsxHqLqqmHJ6mab2ILLiaP05oTrGY6ZarBQKlb5XOWWkfEx5 + dLeqlkxKi+YJj5hKW/IVqobXNBsJrd0KpIjqX1FnI/H0rC3HJltnluMaraVirC16rI75SddamqTJJudR + qpq6gjcoqPGKePMwG/pyVWzqqZAalei6q6hqi+ohVAnbNPLKCm3gnIzisMcYsbwKhl8TMXfqbXhaQdwq + C9WamrIJstZmUsSVEBpWJNq6j8HWoG4AnhgVqxxpgF86BL7AYF7+NVA0G4/1un87K6vLSXCDJZF5WZEa + 2ZHeqjp8SopJq1YtE6wzy7Bhda5BKrXfqj788097ZrXb2rXssrUee69gG7YMEqxJKrHCiJvctkppq7bS + WrZsO05vZoDnKbe5mp346rd5SzujSUmP8bZIqWZbuzV2O5B4O61E6K+fWrJfdLba4rgO+bVz6paVO6oR + 2KPHgLJHy5uUqoLVmZuh0bKhV5GZy7UCC7DS+JZ110pRawd0ayuHSrosu7oDR7upi6D5Greu+jrbA7iQ + G7nkpIWgSifvd0U8i6vkY7yX25ym61Zbp7LgZ53xWXzUa3W866TKu2+fi60u+znH+3xkOrz+KDS+igq1 + 5+u9n1m60FugUZodj+p591iciqi73nijF2G4pwiQAkysXpuuvTuKyJqi73uy8cu/+pm81DqB+Nu/IQm7 + aNKmiJqsKRo+4+PAGFnB6/t/G6yoHSy6gystHfu4k3qOiVqjyxuIUum+D9uzOnrB5kqwakqlTlXCdfu3 + YUu0AFqoeZrD8hKuT9eONGOfBcS3yJu+myujHWZGPJy99BqC0YtGQMXCufuxVWu+CDvFiyVm3rfEfSq7 + Qcy6hIvARAzFnPsl1CSYVfyuy8iJrpuLokq58yu4ehsDt0LCm8fAKGy2+/u8sDKTA+YTQ1Sd/EmcaIux + kTpaAWzB6iv+wnPQIyVSlDuJyUO5IoU0FpwMyqHMaT+iyaJsyqeMypRWyifyxmBSpiN3JpWDxgdpqOjH + FHacX+Crro1QTAeEgIUjKU3ciG7MsdaGy3YWwpUsAyTLyDxsxTj3yMNcyYZMPcfswbq8yzEbui87rNqS + x3cryJzZOhsczbYzy+15wJ46SXF0rZvHpsEZFz04fDiUr+eMksnsvyPxF+3MkAwrzM6JXgWcqPbcIBC8 + oynxSOU1wuULzTTbrBojx0XmtAbtxfEpBXzBEGbcifGcuKKZQdLrKG2TLficpVslS4gLw6iXth09wdVA + 0JGBqbQsvxRtvmIApYfXELwUZ7WZYgv+vKkzLLxOXL0tXAaRSZ0u3MiGuTCA8dI6q8aMfIZ7k84LlAYD + w3k5nVZQUK460NSbaKmLLEh7XNF7WNVGXchPmtQhuNPxSm3W7Kyt/EMelqlizZGbwWREpNP2ChLURjhu + /UUMh5d+fccra9LoYtZ622254yU0KtiWO55zLdTpthp3/auntA+Z09jJYDgWK9V0LWHogcjPfA9yXJhP + PdUZvCbwS8kOhh4iVjYdVYHllLA+7dl9NLCn7S6rJc+V3U5aPU+Wyr2PTZcCzcYmzWxMNr05HNw9qBwe + o9dDTVpA3dmRPUvdIdHLCouoDcmnNNxcvKUqutq+Yd19068+zHr+y420tVzbrP0ahCTaksih0kx3XQ1u + E3ljY13cW+UXADdI3m2lf/rKv/ifKrxQuD022SN0jOA+WkrD3E3bnbm76+0cWnlHfC1E25fNKwzCRlvS + bfugdyTTHcTP6BzhT0y17R0OIB7is+VnTZ05BswJD25hbXxEB8HE04NAwYue+mviq0eqBo4dBVVAKy7i + CTzI4WxZYRq4+F3dt3DjnZiGdbSUsEDf8Y2hSd7AEj7hPnbjlbTW2WLPBI4ChsOzjT2MOnTYudI5tBTV + V0u+X3xDMx1dbS48NL44opTm75RZH/TmV16K8i3Da5xmXZwvhIRBRk12/7zdGw7jTF7jocH+xAENzcQb + 4EfF0D9N6G7xOHmOWOzJnmKua6A+hdC9ScOTFpmt4Zje6Pl9WQVkQj8o6gdllm4N66XSOaee6cJyS35d + 6wANtZxuvSeu69I9z7nuV5Jz6qiuuQ+s3pBdbKf+P1V+5JMM4PJ43mvb5FxiSNJ+7SX+vVusDIHMwAKj + 7AXu7X9etE7t4Y/wP3Arnj1uFG3U66KTF9ek4+pO7UeVuqQOaXkB7EPhvNPN7N/u7KVuN+1ePfB57mrW + 7eAuz5Xx7yDD0hi26rAq7MdzGREvNtwO6AYT626q8KqbGcx8Jxxfs6qe76weboaD8N8s8GwD7yGfQuIu + YGto8umO8gT+7+i2O0w00/IynuUpD/OrcrMEmi7m8fN9/vIWr/MqD27mofEK5/Tn8vHgN/WESCBJf/OK + O/RCLzvXPPM0n8jLN/H/7fU5D4MnHO4bveg6t/WDTc0tDOR13rZi7xBxhtD4zujoffFLL9lp3HDlDuFM + P/BX75aKkvRKr9pyXvh6/4Z2n8RP5vIE1Owe3/eMhTFXcdGCr3p7UvUx7PjqlvnNyPkgn8JnD95hz/bd + vUxSCIifD4RoT9h/pDeJT+wFXe2ej/q3ncGNo/l07ji7P+wFz7Og8/tQjcGNT/WX73PBc/y5H/yMb/nE + D4bfo5OpjP3Zr/3bz/3dTyVaAp1I+fb+5t71ex/6zAj5Y76KpW/1saP8Q3qOFvT8gBw673/6/K6PT0Ty + ZQn0Qiz77k8A8DF1uf1hPEJWEBC1m3Pdpc/AwNI8DRFd2XZV3VieGZi+UfskU9yfDryWKiB8GH8zXZLZ + bCyd0ShUWqVyisBqLEApInMJMCO7HZrRzWuafVq3b28LTw53eEfjkkhvj9X9Ap8ECfcKmQAjygASD7t4 + vs6CDuMoLSEaL+EyNUO46DorIoP6Nj4WQ91SVzlXrVxdWskmSmFRLyBVcWF1eSllfX+Ag4fFSARug0mJ + SE00kpUjiqNlpqljr0Gsdxkvso3B85y5vzHL7bbPDdWlZUge2Uf+iN5rH5Drz9PjLfT3Pf0HfUoBLVuR + eeKc4SvXD6C9hlIYWmoFpgwefwbBEayA7KGCiB0TfASpZWSPDVmgHdP47cu8USVWxhNZcubImoLSqYxZ + sIuCLzuPlOwmFMfNjkbRudMJEqOxlx0UtgHajigNpACvbhLIaCrPngh+dvUZNc3TdVWroVUidFtFsw2z + uHwriiyasL3Ussgqk627HmJZmgQ7V0JTTWHrksz7YrEkkDkxeEm8cAEGwke+dkKsrbHezoxtbrWYV8dP + qEM1T+L8eRzrs0dFkyM91vTJyKksA1bs2hTv1bBdVJS9GEYk3bdxIya7N59vDzSDHxveGAr+4LiuNvNz + 3nv7xtDBTU7Givmk4FDGuzKn3P3fw7bSxTekQvY69rve2ZvL7/Bx9L/x5XPAOuRWyY6q/QJCsIb+WhDO + G/aqw8I8zXJLT8EFL/SIQRYcBHDDyqICpUBIjHhLvWtOpCZFNfwbysPvyKDIqd0ozKMMlJBYkZgMQ/pw + B+mm624+VF4CQ8fyBrsxRx4zYJJGvhoEQjfiIDCttjGOFIW8Hp1Ejcksi2oQlCmpqxI9HBcAU5Eq0+xS + zVTetErM8Lr0csvaNExOQCPd7DPAKF18Ua1GLosTxD2xdNLQSxbFBtBnBB0UpgQv6eMdDHls9Bf35uyG + TN4AqUdTG2eEuUPRU8fjEL5Iy6TLpzwPSyamUQmhFac/VxDu0+3quMUsW3Epkb8MgfWj2A6m0ZVV1nql + rckRwdLvwmPboPa5XIFcllkshLjF0LdIlFZBa9MgFz8UFpGsTnELW8TbQqxU7cFhx83Un2LSvWzdZ+dQ + jt9ALr1vXnr3M3cLgw80Id9dqygAACH5BA0UAAAAIfkEDRQAAAAsAAAAAFgCdAGB////VrTp8ORCAAAA + Av6Ej6nLnQEDgEe6JK7evHuQfeJIlmZopupaUgjKxrIGs25Tz/reRFHlyfGGFyHxiFwYk8zjz7BsSnGz + J3WKFbluN1pWGv2KSeGx2eMqn5Pqj5XRXid9v7dXvovj91C+n5P2h6W34VMkiEVnYXeIuELoKAYZKUYx + STly2cOIgYnkIyDBeeWZWYqoedoEkaraGGPo0Oq6AEoXRPsxmyuzy7vD+ttb1QUnnKIY2+GLerzG7GwD + /Ts92hmtlWyxjE3aPfi9phiuW8VNfpE8UY7+0g72PhZiHd8Hi1v/cFt89z6dbwyglH302jEr6E7ghH0i + /v1xqPAAxIhKavGr50sUvv5840xhpDhkIshrFW4p3HXx1TuTHj+O1CHypb1tW7bly9iynbKFG/3JhPmT + SA4uEVGSWYlQFsCYRYMK1YfA5k0VUs+hS+rNp9MYTGWGSYmuFdh+3xhVzap16yO1edKNDZfqrYMAXadg + RWuQ7Vq9M8qcTTvir1VndwNO5Zui7ku/xeTmiqtC8SfHePMiPnGZa6GqLKNpolzZldnBLjPnNJ1484OF + oDF9Fkw6V+uKAiUvRc2iTRcuhR193surN8nDuNkVxwzIZmNsl2YbFu08Ye3jxqkfTR51tWcFsLMDV3Wx + u8Sm1mOXN98jqlTxpWp0tPi9lHDpt89vsL0YjXLu2P60dfYeGXisCEBggQYeiGCCCi7IYIOS2McBfvl1 + sB9UhP1Xx25QNMihhC2wp1QWHY5IYokmnohiiiquyGKLLr4IY4wDEkjXgTPGiGMoNBp4IygIKlJgMKl5 + Eh199UGoEpIRusGbhY7490Moo9QERHyI0DXkdEomuSWXmy1iBYhj2EGQY0QFSEmR45HX5XNtcskeb2BG + ApY2qhkgZohPtuKhPG+6+SegZtJEwXyrdJchduugeWWegJYW6JqRokVZTe/hsZOeFJbEqB9CltDng5Ma + OSqpTIJJEx93QUJllp5iidxJ2v0ZKkWsaognoY4SMRurnMbqKZ8gGbHrZbWyyf5klXg6OWav2SgL6h+f + XofsqMdWS+FOu2U6kHOTtBptsOndZ2upppoLAgmX8qPmCtHd+mu4mMIqr6zopnvvcM/WsmiuX8z3rXrA + iiOERuSWi+612CbL3XrF2lBscwBSe8a0s3oJqbX5KjCLIYQ2/G/EgYF7WiUSCItwwhtzDLGc+jxswrvq + pspadSbTy9/BC0eq8M4ju6wezB82NDRP/2HcLb712qvyyufGfGbOh5ac3CJG51lrBLP0PAXXYTn9NNRz + gpy0zW74izZ6TFjSqZYtFOf1kTqQvGwiVCuqHNY3bz0SRELDBbakwOS67d/79vSswbv2eTK/ascTNzmR + E/43N6pBG3622aeGKaaHbEtNls+BTp6xOWmX1G7mmuunK2USat2222OWvrJIeTNgKBoU/4w6Tzqv/fnA + sldC+8YB33m6wJ/crbrvINoGO+ihM30v6ZDzStRfqReyO+u3+z79EKDEPry51l8vvqWbONF9tg0Xyp5i + 0V88PeauOX0+YMBkmNL2cy1NlUuFhhg4a5/cqhe4sMmgUOB7GQ+K9A/4FaQr43OV6HiWQME5gWa4s5/0 + Hle0fg0QFhZjHuXSRI0M2mNq1vDfB0GoO+fJJSYVFF75mpZB/GxhLh6E1uoC877wLbBx5DsgAlWotFXU + bVymI9qHWvi7uU2AbxPqj/5vkJjEQ4mnh0t0IsOOxhrYTMQShsvfU/CHxdeByIVd/GEHDUY4i3THbysE + IPWMl8Y0eRBmKIiTKN5glrE4JHg2vCEOc4iJHvKxjbhbVuGoxC0NuquOdjTkVXJnQUTSaY+VfCOqmuTI + OUoxiyY8oU4iyQQzoo9OJOzk+/gHSrLpSzNFNKJOfMhGpKFREHSDmgHhUzP4xStotOlLLW0ZEVQaE4uk + nNfYAiiyl/VPGR7jTAMpaaVSFi+ZuRwhHhvlQ1+agprTbGTNgHARnDTTi33TizIzqUk93mOc5syW5a45 + SyCu042mdIoAj7lLFC6QnsCs2sfwqUDu7RNxKWOLx/6WyUxV5vJd2ssG/6K4LzWIMSiqzAImH5VAiXLR + W9or1h/DybKYYVOb23ToMJi50D1wMXk0KKlKaZpSeL4woas0zTsZGs9NDo5h9GveDkEKVMch1ZIOtRpA + A8rKoS7jLGrqCBhRpoGN/qSjs8MpP6EaVWLop6CK8qQdJOYLrvJArf9SnivBxtWZilChzIJYOOG1C8/h + ga1tPWchQ2oXsYl1U0p1C2Gv6auYLmmrx/kpDGsHHUWusYCMdNdBV5oOxaIUsxd0KS1hqlm7WnaIWSUi + MQd7Oj0QMrNLZeohIzq1eVo2PHQYykelCaDWmFand4QraDkrzyF+8pzuyR3nnv6gDd3s9q3I/CZoO3Yz + AoZJg5g0CZT+OFnVerOfkP0tX19pg9Cl7qSEQ24dNEpZlnLXuTD97hvZUFeLsitvcFxfHATj3peqML+A + 60Y3i+nV5rkVdYhKLxNz6pU8/ja0p/gvghFaWQEP0yLaBXCC97tg4P7CwdSVK10pnJut8DeFGR7xJjxc + 3JBtIq8iVvCCTWxYoEx4IOuL4YOraDfGZpjBwbmtkTxciIIZuJ43bicSYdwNJJd2i1GkrxIbVuEiGxnD + O1byl04snj5W6Mnx/WVnj1hikAQyjqSokGMDyJ20ttjFLx5JLMjUiOv6uMYz9vKXX/vcoExJT+YdcOVg + MP7kr7o2X1bejk+3S+b9+TmrFr4wm9uMmpTcl8NTzJWJbpSjTGt605zutKc/DepQi3rUpCZ1jViktU0H + mMg8bS5YvdvYRse4cqtOqhmArCkqV5k6VSEEpReh5jU/GtaNlQq8Bqdb/Kql0K5g9jGcLb5WL5oryW7t + nfGc5/LYxNfYsx+01Yvt9tqnhoDo9mFlPeVhZxtJusWecnPtaHWv2z5SuuwLvR3oaUsSx0fe8b6pMw8w + nk6ywXbKt9vjbw2jBtDKxDWP4c1vXe8aSUI+sIyzme5+J/zgR6g4q98mZXZydN5hpngHTx5hHs5V4YsV + trzFbXKUd9l9iA3xskkO6f6YF7Z36grjtm3uco37m+Md/9/My31RD0LP4X/17ca3FIXGCI0lXCT6Ywmd + 8Ifz5Svreds9IWpwnBNb5xZ/GAMZeHGP7sHqlGC7KtzeFkZvdta9fOqguzt0qH94NpyrkrfZAvdmPF1J + 6J3YldNWX94Oa+wTJzudV87aeJ0Zo9JKJeMb39Vmc2/LH8bn328u9sufhzFR6zycMZ5xoeed8F/ioNzR + +XpbLz70tD+Ocjmvcp7vXNDEg0ftYcv6qk14NPqG/NX72oTAC0L5nmD+Z8uqob4Xv+mzh/ngHV/uc57d + qdMHohmZ/m/AZt35QLexMOtQWbleC/wtB/71IfQtXf45MozLy/e1sT5+vVuUXwJfa8X2mnOrF3ybczmT + V35z11PuJ4DYZ1AnpQ6WB3q/93IANzRotyiUFnLVZ30LCH/QVHdFJ1N+InoB2IHIYIHgtw0ZwH6dBw4S + qID05oH2hgQqOC+7538uOIFwQxXXtIJa14OnFRIjWHIMGF7JpwX6o3rvB4MP5HApKGHfQH5rl3XhZ3u8 + YoSAJ4QkuIRSNYNYmIVfWIUPdIWeQlZp94IcuIW0Bl8syD4tuBLNN4Ust3BW2IXZF20pV4c4mIRpOEog + GIEbqIR8WFRjlYcIaGOnEIVSGIeJaHcg54dBl4OAKIgDVYhhB4aSOHp0+IjiYP4GzIeB4CZxRDhJlfh/ + IqiHe5iJYkiKOnaKoTiJohWEesGIcjCLV6R/inZGXqhnZ1CLgjeAjnh0B2h4rpZMvBiHcmgatrOJI6eF + aJiKqhiLf4iJmFeCuBiNtDBTvWiMx6iNoPiEYCcgZniGzlgefsN02tiNpjiF6ShysnWNlniJ01iO1niD + utiKQSWKIfSO8HiP4neL7riP4ahfmfGJVBiPuBFBaxgc4sgXc6ZLBzmHqBWQDcaQiAF+7KiI5/FzTZSL + slF1Q7iIEOKEHDmR8gGO8giS1QiLHRmMcvCRKZl//whNq1hnqnKSH1cqGJmRvyhONBlv/eiPIql1OFmP + x/7gPzopIseIjJexXMC4jD2GejuFQUqJlEFWhLpQalmpIKcWalyplV8JlmEplmNJlmVZIj7yIl45Inam + gW62k+sokuSmj0+ZY7S4iwBIlXFJXsjge/6lePgYk+NWTT3pky55hNQXlHCpl1hSVT9YaEJTlV2jlEO5 + FavVc5JZFkAoRKhIjtaReIezPMymPsfHXoqpJHs5Mle5YuQAmTDZmdZhFJdpiAYpDNEEkZw5j6N4mCeW + gakXiShJgZO0K2ORKd0YmWNomjzZc9EhF99zSryHd8mZj/ZkdnmSKKyJh9JWmoH4ivs3MwTIj0wYhiHZ + JRnRLsnmkCR2m674jGhmgv7GhwHa8oN2uTYImZcyyZfu6QVHBZ9I+JvjmJujNVt3YIG+iZvNGKDv2Uqv + UJBt55rU2J3fOJfFVKBtKZSN+J/JKKAkyTL/dH8EGZXriRixqYY4YF0Rd6AiunW6WaJKgF3Z6Z+qOZ+a + x43lqZ+V4zBQ8KKsqE9vcpyigp+g2aL94qEfGm4ICpuqKUXLQXwNBaBIGpw76JT8QU0XOIjrlZivOZ75 + KZsnJ2ct+TUq6nTK2aW7uT7CBAK0ZZTQ6U4VCaVbelPf6RbaInN3F53cmaATKqHa8YGfuWGbmaUQ2p5T + aqa5J5eaiY2yFzg/+gWMam12WKZG9zR+GqOB+qBJuv6hqTmnIVek/QWcnxqRK0lUj0eFnZpkYvpqeSql + miqp+SQwDbqNoJqhxsKhh1inBvl1iQqoYxqYKsmio5pokPcVBDajQ0qZk+Kobuirqyqk9IdTGtV9vJCs + JSmrGkqJP0NfpUebDTRdzjCtRSmoqsql8qU8vYRelsJ9RPKod5oIxeqgQUqY3lNev1IM5zqazPGms0qr + tXpluep6/elAnLIciaSdYKalOsiv5rdlXWdQAgurHElH4oqqkPirPSpCJAManPCwLJmiLOSufPCt21qo + spmjxFWT5mSAttiQmFkxqPmTg6qkMzNfcUQv7WaqcAiU2ymx46qgs1JbgpWeSf5DQR97P+JAtH4Qskt5 + buJZXlN3NcKQtAMZrlF6rZrorDIrQbbaiROLPTwaoYRaomj6RJGqjvVwtIhWlyiKqQlrsbiVsrMWeW/Z + sXNrrWw7sq/ksjK7qUirEBurqLf2smtrt8DqSbW2ZGfrjebzJGpLtVV7ozz0TE8EG37bfvqaqoLruBIG + GhE0uctHkWF6sKE6uK1quILTg4grshVrj5cKpwCZfZzROa+6tFobq/kiab36tWDLWrBLGoVRJJQLcaVy + u3jauAsqr6vxPFL5Xs1atuyZsxSbqQ0bsLtaVuppuey6szzbgNP7kEaqMcTbujG7eUwaP2TYqM97pAhL + j/6vm6PlyxFZhr6KO53xSlfWBLBKW6m8yrr2eYdoEHB8SnkGuqi4m73MCgj/6x3u61Goe6yjQ8CYO7oP + gMAOS71WW7tw68Dgy7/QSCET7HcVfIdnO0hBaxmhmxnK6AZaBsDdOwdHO8LASwtRC64w67o1JYPpuq4b + 9Az787ZOyrXMyIUREktLJEiGecHSZYMWWp8nDK+qWwRA43dFXIpbC6ZyCmHeC6O5N6JkWsNPDCvsEqy9 + 2Vv3y8F2Or0M7K1cLL5K0a0TAxahAsPopr9t2yZJi8LnoK3c+hdwnMd9uYdiO8DzG6eLNSOYpiM8YpY0 + kmpqmciN7MiZRheG/MiTTP7JlUyWjOwg3Co9ewy4O5qUT1o3VoPGnpq7g6wzNcuwc8fHnvzJs9vEkjrK + abysEVxHOIMrNZk1/NnKkFrH0avG6tu/ZGFa23KlDVyEH6tOYlZI/RPKZjebZrzFbShetox7zHxrlLrE + Bly8pVW6bxHL5zvLfQgnSYR7xne2PeyBMoyYkRfHpxrOEvkoFoN+F7ORzbKxQHIveWvMyPvNOEvDZSxr + 8lyhEHYsgNyHEtTOxXgD1eBXBczEwIMxyzXQCGV/wONh6Np/2na4qYu94RvMnEpZ3DK8nFjG+zEP4idX + CU2j//zRrsoTKUZVOfynfuWEKu3DtMuGSZy/dZvNvf7ZlBrLyUabPuRV0/2MFMxJVf9q1FTM0gCNqz9d + UWmjMCTcRfNMg05T1Bd9q0AMwcsjx9kRZf0y1Rx2Owt9gUvtzt2EKLL4zi3Nck2pxS7dH1lr1lTN02Uj + jdsszXLNKWFdsD0W1DY9xj1dvVBYyuKcunBNqhy9kLALXYft1MiDr03t1pPGY+kkU6c7zDGE1p5rvlgc + uHMgxqvh14y9QUDGLieN0zlNY0xdrXkt2qPtHap1FnExUkxIXyo8GVytRIK9w5QN0HhFuGJBy8+nzLvM + ZVR606Lb2n+9Dsfm3OmjrHcLzNfrtRDN1ycH3fhLc6tNrSjb2QrFflkDvXdN2P7HWkJLFt2uDLLFrNMC + AqvqHKIrqnbZ/T/xN5JM691uShE4HHegvK92YWwm2Bz5zcOp/N7/fbmB3NVevd4lITGmfbylC4FzDJjM + ndz7jCcFLuETjs4y5tsJWIrhLYwYHtsPHp9yWjDC5WSu3dFTjKXRHFj2TZqzwhTy+dvC55Eu7rwBjtfc + LQvVCVz2gyHIfCoL2bxC5c56vddAHrybNxSKRsxA+uIOvpskjrbhmeEO8RoSjdsTtc4ZvMAJTsob/OMa + /tWG5R7dJtiMON6fTbrWa+Zb/t2Qa2D/9eH8jayvfd2ELRJd/oN23Y5kzpSynZMN3uQxAegmw+OB0mvW + Lf7A0o3iIDwX5Cfflcvgc37eTCEWWK7nUznTMczkkt7hbIo7znfpAfy5ou7RFozmlL68y33onj7Zmr7b + k17jZTjY33vhPr7pfmzFoN3UtM7ewP7QMy4RPbg1IY6cBpvp5m3lOmrsmUDsGGqjDXmOrd7S+ME31f6X + tFLodMnWAp7iLBsueb7Szj5ubKnl0Z6myO0Rgs63Okvv9B1byT6jVHTFZS6/L1GskalDHOOuWCXv7Y1/ + ljru994HA88ozM6xvP7svu7uUkLlFOPtg77nvb66t/4CRKvvDj/DEL/gG9/kaerxnXLxpg7ZYn7sphzX + 0n7E1QHyCn7oCG/ESU7du/5H8TEv88TYyzZf3uv77vRZLzN/k6Bu4SRP6viOl8Bi9FKb8RHfwv584h0v + t+z09MYd9SPv6r7I8VZ/9YiT9fN97drb8jJe9ck+7wOT8qoO7tp89vb+9Wq/9rsz9ta+8j8f95X9zfpO + 4dKq7oEP25FtPVj1zHK+9Qcv8foN9p4NQHfPXK+c+HLf9a8e8mbT9iwsyG+/+EGM6+KO6SuY7+k7+UoP + z3Svst0D+aqf+Tle77zt1k5u7iXT+jIN3Cyf8F2b5mEfG6ufuKOO9JQf2ZZfmBhV+7u/+Xov/EIv+yKS + I5hsydEv/dNP/dVv/Z4G/Wxl+PsOtf2u+KafuaiPiP7Cc/yG7tA+uvcJGwqPYUG+r/LajvuDT1pw4O3b + X/40fv7KL//hD/OA7/T3TwCwLHW5/WGUk1aHbNab9469UBwvMgou1FwzlQMN92Tpsr5xFs75Xtx9wRCw + JlMIAkbhKqm0wJyN6HJDpF57Vuw2qOV+D75kAzEFa5oekPk88rbhmXecLq/D56Mokn1/oMY+Evr8KvIK + EQ8RF8MYrxQ99gAIHWMAKckGMSsZIDnBPD/jQkWrxJzKSiVUAjcbA1UpSGOFZmkfb3FsLVAnXStZLzXK + fkt3c2+OkbOWdU47fZsZxvii5WClobPPlLdpurPBT3qLOcfOf1O9F8TXTd3b2v6b5aXIy80trZ/uP+nh + J/z9syNwYAhs0zIdXJemSTGF3gIStCERF0VDkfI5UIiB3yeGadBIjGgxwUiSmU5GMKmvZEaKSfg8nEFw + pcWaKRvhRMnDXkqYDVt0xAFyiM5vRnnc5LSyJ85LRCkEUBpU6NR/Vm0i1ZZjo0ufDWVqFDoUqCCtbs4m + S5uTrLawEtG9lYK1wtNydCGudabXZFeWSInJVYAC7wR0ZvW+SEyicJ2+vSYlDoyJMKJgihe/y6xm7WOU + gk/GBB258aqyBTdfTI057ciHHMdCPFcXQOlxh5+sVq0bNWCeO2Ovgx218iKwm2wjSx6u9e+twYUPjsr2 + zv5x5LwlLJ/XmSvk0UbXEKLm6Phu7BPPZ2/e1i10eOENFzcO1nz6I/YBnnUNOXL6NdNrYySu+vALsMAH + tOMiotcGKRC+cairLhgZoGrpwAgvxDA09tjR5MAHXSorQbEsaeUvAy8c8RYVl3ANOPcogsIFkJRgcQEj + yuLPwQy3Am8oG77LTMbydPSDjSLts9EYrQKSaTgeUfSFyJ2MhLDHJKG8z8cbGDwxxWkGvLI6CCT5MEsN + s+IyoSB586JCNM8I680osTxTSWbUhGZOHt9wsso/vKTTPzu3LAIVNgfVSCUjH2LjzkIeZSRSXbgk50wE + SWxQS0ZxdNRMKCetoUlLL2LFFMzBsLkTKk93BFWnURMqdVGEUJXhUVj6CBUPV181dE1ZIdACV1vjqBBX + 9fDT9Q5lTfDHSUT5/KMVYtsAakZNZ000Q2bRoqHRPYHtUCz6LARjNnL7y/Y8bnfFiR6ZwF2kAAAh+QQN + FAAAACH5BA0UAAAALAAAAABYAnQBgf///1a06fDkQgAAAAL+hI+py50BoxGOuouzvnb7D4Yi043miaYQ + Uqbua7YwIG3yjOdXtAL38dMJg8KiEXhMKhu9yfKJIqJ4Hin0ulutiFYsqOsNZ8DisqZJNkPTIKpNDUdI + tpX4iW0X4/NxyZ6v85fh9gYYNhfgw2H4Icio5PjoBREpeSfEk1hl+ZSZyMU5FspXOZoUUWq6qUOokarK + 4KnY8FpWC3uJ+xhwq0uL2VTo6yILOsxyrJfMx7s8BKzZ6DxSvLjcOy2areYZvR3DCv69kTn764w9vpCu + Lm0Q3L6K4x3CLjnndH4df2TPn4UI3r86M2qI8GcIkbl12RDGcziQoQKDEfURE+iuIg3+KlIgJvGoDqTG + fHISYRx562TGgVo+WUM3EodIlO80NaEXc+EUnAcj9qD0cl9OGDM1ygjG02jBF0WvaCEpcVrThkMhLbiZ + tOIrlV/+tdSZYGqgqkTJfsxiFmwIilHitWxGUGratnOLWOE6sBReD5rEGjEJNC7MuuII5+iyl5/ew+Pe + Bh1suF7ksRjgsW23mHG2r8aoTpb8eQYYnuUe7tQ8DTBci5BDC3OdYjRO1Vlbr61dOFnLjt/8eoYdmxw9 + b61+i0jccxlg3r2By3OeaxDx2ZhP4I7ua/lj29AFd09+hvhE0yWF2x3m2Dv37wp8a/0w/cF1Xy3e4kYO + Wpfq7UL+2av3/5x0ckw0n37dyMLEebjQJkCDDj4IYYQSTkghhGsA+B+GrsAXjUAFwtLNVTYNR0+FJlK4 + 4EbMfXRiiy6+CGOMMs5IY4023ohjjjruSCEvDlLyIJA8DikhJUIKcCSSqBSJypE+OigaiCry15+G7VmZ + n3AdIvUhHAeWVpqIIw74jCnaZXiMe9uoGdEfBrmBHzceUhFmZVuWaeZqJISE5Z59BliTgDX91GUZlx3w + pXmBUjZKYKzJ9WdYkQKKHFYjFnrIdTXEeROeoejpZ3OTIjGqNg/wRVudeahKpZ2IeppQTSuuWSqptaKJ + 6qBjAlIcBoLciVpCgKmFzDglxOn+GpttrkUDmRuVxwyyxA4CbZS7yNpqMj9gSpiyyx7n7LOIclvEoaZy + OC6j0b4zLVTGjeptXtSoSqK0rJDbLlqLWsurrLjF6wLA2t56LoetXIZvQfj+Gp9M/bI7K623CqyYdUmZ + VG2mCf8qn8PMjPtvdRMT7OtpInZs6MbzZhzwuirWRjFdI5OMq5bsvipfwiosbMKbOkfl5asRvwsvzTUb + vOVs9l6UWxvibbR0sV6OiGS2aZIcs8gvEIJw1CZneVu6CI7A5pZDQ0pw1nzm4PPJWEQdyZs3e53vEjdZ + oTbZNOdt7L0duv02z9bhnC52mWJ79DAcw8a3qPfuS/gkelv+DLm4k6f87Nlob11X4xJjomtJdFNzec82 + NWt56WY4+ujmMxsd6uNQ5/wzs6ofhzGXTUvOOtCOpw176zBYSuDo8O2OO1Kzg3c4qL5//jZ5wT+vsOhi + doJ88tbDfQjUzksqffRaT39lG+E1DPgROm+V881gd5KJ5usVTT71W8t9sfFnZI+qZYRyO5U54C18r6uf + 1Px2KSborzL8s1n7Tve+U8QvKLXLg+dgcUHoQSNVsajgDgxXvV4VzG50sNrVjJZBopWLNgr0YCxAOLyn + YGwlJKSB/OZHPwMeUIKF62C5YBhDlo2Qh1VLnOI44cIL6XCHSiCUAxZIICAOzn3mMqH+wlxixSOicIng + g8JP9MU2Kfbsel2Bn7vKNz6scZGJTXRfgsLRwPOJsIevUV8JjUgfZySxLGs8Iwnns0c3Ms9guqrNHGP3 + l75kUYtb7GPdgKGoIMaxgzMUovXquMK6pRBQwHNk46CYuvx86H/TOVQV7Ve9fG2SkwXkouf2+DMLjDJQ + /qPI6ZCDEDQsMo/8OKQRVqnCWKXydnayFJf+hjpMzkORu9QFMIsJSlbq8JXzkJl0FFKnU87HIzfEoR4j + F0pYrVFtwLqfGIsntgQOqoXNJGYX01gRXzLFkbZiBFaG+b6xneyY+4kiXhzSTW+65ZTzpOcjV4dMc4Lj + YCrhSjn+cfZPOGryH8+8SDTr2ccMwnJjDb0N8da5oWr68Z1rmwurrOlJVQSSo09MXsMIykbKjRSjJU2L + Qvho0FdG02uGnBedYIpGzuUjKxUdYlXkGUFXqnSl+DJkwiBYOaOSbqZUdZ1hoFjUKlniolF1Rf5qRyIa + FvQkWW1nPBdY1hM2KpO2i6IKLvkhbMhSeBokjBNRmlEpga6t49kZmE4a01wkJa10tWm43LlEjQYSnPtL + X66gechURGOAFHUN+hCbWBAtNpl8uQFQTXdYkoKrqhDZbEg/o85JGnAmP/us+eCzrS5JK6yoVBRlKxsa + pJ7WoAfl1U5l+z1Bsq2UiHQaSQb+Ky/YoJW3NFWfJJ+rr6Nw9ZJ0bG6ujlXbYKqRub1l2lKuSJpq0A6S + HuoYw7CIR7VOj7Dqzc5ijdlP6RqPa2H6EjPDpsr31I+97eXrJFzLF++Fqz7z3ZX3ZPFTG2oPu0ElYPD4 + y0jlPMW721mggQ+ctJ/uwQ8lS+5+uVtVA5n2eRY+ZC2bFVy0MFi08IQdhHnZmOn6DpT3yUo/bbbiwNb1 + wSDu7oJGzES8uBCQheIwY1/c4PX2GMkg/aVb7YCsOxZ2xy5esk9k7C4g444czbotblfbYx+jR8YEFia1 + QIUTJut4r1VRMwZHotsyVrcPstETT9wc4lYyF8+O9eFuT7z+uvOdisUtrnKY+UxGSiYmx+E8HEC8XLHM + HtqmGPlfh1NHSjHsBRWX/jKYJ23Stg2aIPbVpxmzAOlITzPMedZIFUPWw0ouD3spRlx6ByZpULMHZoR0 + So1RZt2aflrXuyZqr70YhCX96ElEaraznw3taEt72tSutrWvjW1oJ+lG26a2AuuTZAeTD9GmIPfwitvY + Uxcv1V58grnh8G5OxJsY2X1ju8XE7kLzmNXzpjehi3nvnB0rzTRRKr//FAyGXYHArBMIufutjIMj3Btu + Eh/Iat1qgTaS2FiaoH/bKLrVIFe/Buf4pOyl5b6CzBwj/1bJrTwxW97nhZ7iCGMzrtX+YcO8Vh24qb2F + O9xLoXfKVFYyq8XsHIY7FAtKWmcXEA3xiEu8VLFtqcWNfGtcv3znOQR2n99q9dnlW9/7nnrXve51nUGV + 5mLvtIdzbfI/EeEkJU7tqLFO9KKXPe5yf2J4C8xBleMd3eIe99GRnvQPPnkKKL7lDP82dMILFd4pPXrU + g/X1CiaYjj3vneT7llfLd9LvKh+c0PXh+Xpr1+hmP7ufb07IMZGVam7/ixku7wXcG0L3OAUjZ51GXEFu + QTVjF7bO+d4n2VhS0HQkXtWk/HnQb53rrn890JlfOQiGqPjShzvysUQG6nz893Ci00Sh7ORxHh7xEu0v + O2HPwMX+D2g/GMd5zj98eN73vqXKQ5f8Vy5AUmV8+Cd6owdNcxZ/1NVXHpd1Wud91Fd9ihZaCXhxrlJ/ + ZXMWoVeAeuZ3/dc+pfcqmmIS3Ic9/VB5+WeAkYRpN9ZoMCVLJKh3e9d6k7I4y/NFnWJ9flJrkRdoCqJ+ + 66d/LbNls2NpX8R2BPF0TiF10weBkXJeK/csjtcWc8eDqsaEIBaEwaE9bgNY0pCEJRgGWbgEYhgHZHhO + pKc7m3cJqZZyYXiCG8hzFrMptDQsa1h7nvaATeiEptd4wKI/MBiDhoaCKWg6srZHgCg77vaGM0iD91OH + v4dXhFNESrhw9GSGanCJmNU/j4j+VWPQhmjXaAWlgXBIdZzDFst1h18XdIGUiek3iBwYRkKYRVhmFYv4 + feAHcmB3FRn3iT74g68Yh7k4RQ3ofsd3i7h4Cv5GjBF2hdzVioPEZibYgwooir9IiqWYjLUYdtEojdtA + i7J4jRG4TNr4c0LVi+zXiEC4N02Ucub2jOJ0jBoiBZrXjhOogruXU+tnf99RWlrmjvmoj+8oVtyoLi43 + iuG4h8IIj2A4hnBGCvqIjsBRWhn4X5VoiRApkAMZi65IcgfJiOnoXN3YkdaIkAlpRyJpkDFxjqp3kdul + i6pYjfaocQNlCxAZkYzDjhw5knkYj/KYk764k6uGkeuYjUD+aU8x2YxYSJQhaZS+hZQ8qYcmCTpA9o8t + GZAbB0k6+XYkWZJSGXQouZVJ6YxYuUxUmRMZiXld2XcEWZC7UEFi+I03yXqECF0L+TBaOBkApolj6ZLD + RZFb9ZR29ZfqeHL/9jVaeZTgyJVquWuGyXiDeS2KKZZ8SZcUhpiQOI1nOJeEWZk7UY+7uCqSeYSw2JM+ + iU+XaYUeyZgYcl+TB5lIpJkyCIyj0prK+Jr3sD7p1plR2SepN4xEkW3OxmzRNpzBaZzHiZzJqZzLyZxD + Ej9E0m04kne/42p2gJa5VyrlkBJKFHDYmRMrOZ0AeXIMaJu3CZvQOJl7VisTpD/nqCb+nLKXmzmbCIdi + TfeSDakf6AmVvMma0CdT3KlZIbhbi/mRE4eZo0VCwHSDA5qevHWdg0ABHnSO9eeWSWWMq2maromfx1Ao + D7p/8ymOCMpW+3h/QnmVS0lvI2YQ7+ahgcmfyRdEQEYoRdUlLSqapYkhtTBh7ChrKRKKayafBeqVnulr + 4OmdbBkZNkqOpLkyXhRnDkigL2ol2HBRMMM1hSdSn6Gk5rmWp1mekjJhRrqk+0mZTDpV46iDcXl7VsmZ + Zjp+lgk+arqmtiikMHpuP3QOeulMVvKWQ9mX97mR7dGFq6dcfXqiu/latkcC5peaDUqnIAmoicgCwyKn + TCdRYir+b36KqI91kjjzfJi6ocbVpSAKqf+ZSGQyqIQapFKao9/lXKVkGVhKgKQ6qpEaRptiJE8zgCZK + q3aqoeSVKAhoVbyKoQCynTlZfqB4D9KUl2nJqq16pzyKg9SoqoJYrMZalyf5Ff+3VstYqjjqHzo6oYPi + WZX6m2aFjb3qq1/KlCNlrmNKrODKHinxifCwLbM2k2Qpr92RDptVZiyWqm/2qGWarq7qMTdXde9ql4bX + pgWbrYrpcDSnp5KDriHqoH8arVEyrdaVYQEKpNZap1OKpLGBq475UDDmqFG6rgYrGnKzZvd0fZawpfE5 + sCubscPTdNtaVT+1dmb2sShKsaH+MbPhBqcWBVEvi6ugqlpAu6/QYQ+HCCduhHHld4o+O7QWqp6bOkYt + a586u2n3pLDHE2xnmngN+60sS7L2iTq62kK0VW41a0ZKa51au7VEQV/LE6GJcXpvK5iKKCdhi49ueq5t + UbUep7cHpgpXK2fXyo+KOk9VGzrAN7GBk0vJ0gdaSrdN2jKRl2nm86SYCLds6rBZurlgAXke9YgUeKRk + +l9yu4Sj66ULZbpSiF8BVpO9FLir4rqva7G22hM9uk6TK6wyaZEpy7oZOrKSMYKKprbA14GU10u7O7aY + QxaKS6KJilJOdWH9EwrWq0xTYxbe6xAeBG7vtzSvBrg/m7n+xsuvRZm9sPaYMFm8kRmIoQutjvu+FISn + t7u/SWq2QxqohrMXnbdp2OuGRsNrjNu+7Wo4k4h6eosp6eu9xDvBeAm7pAtCEQV/3Ep6vHuhWRuMpxqJ + GvymklDBqXixghu/0XGyREt2IKuUKjy44JE03nqYXArDBAvAfikzNRyeSAS/x6uyyIu/l+PD0UedH5zC + FxzANAwEpwR1qgnCvfuronS6PzzDABqvOlyr/XsQ5QS86rvCq9vBVMy+Tms3UaCrqeuYS2Gk9Jq+mRqy + 98vA9eDDPSvGRQuvcli2TSuRaYwdNfB8WLwzZGxRccwIJ7y04fqTuSHILDi97afFjkj+GmnRFNL7kDKc + xSvxyF1VFG/MwaDVVUpRwrqJuSFcx1nSNmRFysvnxXh4TcMrsqhcxPk0Wdt7vSJqqWdMvMjIxBhsy088 + ZyAxh5PMsOlkv4wMyLfzyEGCnEtSnM0pzdPMI7wQndSMzdmszdvsItEcI+jkAxubyx6FrzjMtKjKLpjc + fWebvEPUyUBHzAF7sIJiswmozvnauAy5uCjjwAT3RzG7sKE8r4x3zyi7w6/8vTY4gSKBx2BZyuqgMqC5 + gKNMLQAdE9bLWgCkLzDby+NYqWClzIpSKTPXLbS8zMyq0Iw1ocILfIrMkkeIyCU6y76mkSHngZPlpN9o + apHS0HL+GYIF3b0mfdICeHGXNc7gUqVFHdMQ3aPiytLh+8udyqBi0nAT8ck7VUicpiG/ViJ+fMrd41Vy + ZNQ+bcCFHDlwAdRr8l5pDQiK6xdxVSDk6c/K0WTMtNSNymUPTdGyiq3UywHA1XBzrW4xVMxzNT3yrKxU + NGpffdD6vKibWL44XaTDRAjNSzC3PF35MxlX6xuLVmT1lFBXTdl1OFd3DXpYrUCbbcapHBYR3Jp3pkeO + 0QOyxNYyLcL+y86UWAHcItnhlFaH0nOrykO2y9cDzQ2LwNuvLdgcWl6OUNtzC9Zljc99nJkMQS69DYkB + pGVDN0umbcIuc9GrzdpO0FSv/dL+V4Sm6EzcnKrbBzzF9Rw4dfBUUMEWG8auhSg6nTeiZyk+zx2qvlzd + VzLf9J1wem3KTRm9u9ydp+Lf/ALfFmfdj/mvkZyVDn3g1C26Mx3gyNBatVngCnXhzqp4DS6xe9zIUN3Y + TpqnfiVdeay60GvRHb1VYSziQozhmkZqF1GuFM7eL17jLLHBN2rjfxw0vzBk3zPb6C2T/jiryUzkcrLi + Dt5DcNzCxry++krHhpLjBeFZPB5gnbvLJC6wRS7mkdjXCJWnrAg45VuIR2zlmjzUYXnmG04q/uo2VGo5 + CpsG3k3PhszLuH3coWLnoHmvY3RM8+sqeuXeQLzORIzjgr7+kHgnoXf75lGN0BV9oGOu4Voe5ZFe1ZRs + 1vuMsXGe6cV949GNRiNWdSwHXqB8VCYetNto2wtM50N1m1q92G3uwUI95IzN6VHB5FTtD089SWWO6l4+ + 6iHt16lunrh+235Lm+d95b5+7F30mTnY6HCu7YC+7NZ+7SLCZC79THye0LSuaQlczgtLocw47aHJ7spe + 7TvUhvNo7FPNc+Qu5/lc6zrxiVSI15aew/p+7qwhp/Ru6gCe2HQ9p5se6w3Wi3dR7yic28KNxmhO8Igu + qAfv6HUR7Bvf3g7vnr4S8RVb8c1q4eZekRev4ItK4+8u3rlFs9QO4UkGnrzxuXKc7Mf+POfxjlF6XjLE + nsntvhm7XvKOhkhiyhz4HvM7r8Sn/vEkBbiUNfLSDu9NbtwDr/JEP1RT38YIb/UCH98ED6orwvVd7/Gy + ifIz7/AwDunVevYB7/S6HOJZJrdkX79vj+V3yfZj3Odrv/fAfvdMT/E4ifUWcdd27/aCj/ZFr/ZQb0H6 + O6wpnvPDrek0LRjeTfZlT9bc/vWkjvMN7/ePHxdKL+qSP/cyH/eUHzt8flukj9J4n9dpz/iDvfqJDPmz + DvtCX72PfvkFHTGaj9G93jlGb/jfffmR7/WL/+RPH1Sk//vTDfbKb7kpP/q1PSuuT9S5D/CcX0O3b/xZ + 38QBneX+0i+0oA80z/38OYf9tt/0qD/e1s63hs/1wd/5hM/8zB7/R4/7ij/55W/5L0EAwTF1uf2hiCkY + eHHWTG7/wVDEutE80TQr1dZN2depSMSS8UPY+d7nAz/hkFg0HpFJ5ZLZdD6hUemUWrVesVktMpg80HLh + 2IIFDp91aPW6xna/NWP4XCRHmx+lG91kR5T5WvwCCUcGCxEFExcvDmXwHPT2GFcmbCYp4zI3Kzk96z4z + HR87IUMbDgFPG1dbAUZdP2FjxeBMOWxoIy0BbnVndeGAgxeHiWHmMHG/lF33UnMffBmNj9Gqremws0O2 + R5oVJLPxBvUuwKm5E73V19jbO9/+0NMuuc2gv9Tf4fv4Pff9oUo271U9dfcsEWwFMKAHhg2RQXTxUMO0 + PxT4IczTS+EpihJ5gST0ESLJc6wsdIxlwEK5fPpEqjEZc8NMfjZnzOvAUqWzCi039pRF8xpRPjjbIWWg + k1kviD/pRRI61CgOpVXDYe2WDCVLkFALSpvK6SrIslrDotVki6nTsbTAHnq76WzDuljv/mphselGt3N9 + ghnE11Xem2rdIY73zaC0hF5p/qQxGJ7hpIrPWF7I1a/bqpKDSNOsCLOh0jlGe2T7mLA/0H4qpObY7zQI + 2SVrC5TXVrJW0KEbtL4jXHduh8ZV3P63mxdY3zRiz5ANeiv+8rXWaWNPy6YtR8D2oANfEL0QddvaWaEH + pf1ud6el4wY3ML33B+W07ldGX5egudrxl9oukJTGym8z9c5jj7nOiItMsKXmS8S8mhAsrsLrkOOvuwYd + fHC8CCUMj8ILEzCQGxMROYsvVbC7QQ6gQqyvDRIvojE961R0j0OsYFTAQ0R+w5BEFIkhciTu+sMIwR6V + vC/IGWk0Ui8c3UgymiWZ7MvJCUO6UEr8qFyDsDK+M8rFD6MCUsYuK/yyMOyucs7CHRX78UonmdlDzjTb + tJHN0uK0si8bBbsBwEUIFBETN4vxs7PayhJ0NkdnEwCMSbak4NJlvKTUwtMCvZHO3ILLXBRRcExhdB1P + szIu1ObKhO83UyV0jIwoWS0xQzFFjZXUNWssr5lbVC2k2OVye1UqYHMtcU8B6ZjGl2OPahZaxSKNgFlr + a1QmNVQnbbXPZqmtRY3+RrXR0l0IucW9/awt1yoxdUrXTzMwVVPPd+GMF1J6tfX1QnyfOVVJdhGUd9V/ + hwuY2w3EI8fglx5VkFWFJzq3XoHVvbTggXwk8M9dL2Y4DMLsJRcqidni6SWFMJapZFAbzmndh7t58to7 + vKsP5oRnxgwpi7aNpQAAIfkEDRQAAAAh+QQNFAAAACwAAAAAWAJ0AYH///9WtOnw5EIAAAAC/oSPqcud + AeGRQLiLsz52+w+GItKN5ommAMWp7guX8MOK8oznWhQg0q1TAYNE4rCITK56LaVzdoTxTtGn9TOdMKtX + B7cL9obHr9qXjK4gs7a0e8E2bN+YM71rv99Zeb2zP8LD1OaXFreiVqgAqFjE2Dg2B5n2CCJoUjmJcgiR + iaeJ5gmq9DM6JrpzCIJqmlojl6jJ2joyS5vTeftZFIFiq6twqRUrC/z0a1xGnGzE2+vL7CIs14PsGJ1k + jW0iOLgNxfuifTtdOjr+TZLuVvK6Dh3knYI+KvFsfv6uQ6+fcana7wM9d/ACOnjmwwA/cAZjNNxFQ97D + DOgIUpnIIA4+/lALv3XEuCgiQpBicFgsSLJctVYft7UkqXDJMJkwS0qR6OLlm1cbOdbE9DNbMB84g44r + KiQlz2XFghJyGgRIDaQ/rZ1MOnGkTJ1YoQr0GhXDVZi/AIrDyDMXS7Bf2e67oBVqWarc1DVMG4DrPLce + 9JI8Q5estMBd+01Vu5avBr8gAeOtaWvsWcPeejEGqnhxZoZiJXZrrEJyTso0mDbdbBP1aH9wlojGNut1 + 4W+HTU+6bAw3xjxLtcjOHfrYu8orb+nWdfxhH3lplYcmPHkbiwjJQ1SndT3gcuZDnZf28Hu2scN5kauu + cz56qoTfDUrtMa1BeJTjiZc3nj51fvpw/qcGg55MNwLG9YAV2QVCgwAKLshggw4++OA1+y1woHaWsFfg + XZ/9x4RWBEEIYoggMkOcbUKIiGKKKq7IYosuvghjjDLOSGONNq6Y14KdNLjjjT6mmGOPCgopgCAg8lBk + jjpGGNZ4BVa4AZQ+TbgXFtM1R8uAAioUn0jUZPiHk8NIiR6VFJrJnyu+DQLgHu581mVnRAmHDWLYoRkS + nrW05o991LTpxlhaWskmoGlmWRx+ejax6CpwQHdPLwRCAikF8yEyAZ0B3qdoo2TqM0Sblm5JaZwXeOJf + mKYwl+idjZr46qkpXMlmqZeKUqISn/I5JjDtGOrVrus8Ah+GNLmm/sikZSI4p1D1sCqsfsfmF61HIqSa + abNuAhsTN7k6qwmrsEJSrSLlwhZIl6wqewW7FJ1QG7iTQAtcrOdGg2p8BHKrw6V2pduehJSWdm8CBd9x + cL3eZjSSvyY53O3C2jZT6lAJjzvhxeZtUtRjaLj7LrwBN9lIWhprzE6s1j3X4cR/fswvo+l+S3Gy/52s + Msobz6oRTiA7cxHHYJoVdCFv4pyzyk+xXKhnP8cTc8QSf0mqem4mqPCrOnd6U6EMh/F0A7FVBsuXDvlx + dDJbk7F2Yg97/V8kUUdmrNln7zSTHEhjkVnbpvAzqmcwFy30tGXfHSiGdrrKs1FKr0xE016C/k04vJZi + ijnihjyKst9heD4l1C8TBfGslW9StrhWk8Hd4m4n/Xhboo9OetR1nW654GGHjDZ8nVtReiGgn9avn4/a + fuGhM3sZ/L+bU/37E80jHDvkfKuZd9zAK3876YdX+TGmkkYPe/V9Re4fUtODxz2hPgcuntzPFJm1vebL + Xjz88q3PWvsbTCopu+Fue66hQAeQB5Hy3Y936LMH0fgHF/A1UCbNO5BlmDG8BC5QVk5w4FUgKB8Jog8W + 9vCf9CThq+plkHhJuFIEwyHC2WVvaaxbgs6khEBNbZCDwOsQVUCovQE+J29EO58hqINBFe6QgSf83qNg + KMTgHA95yZmf/trMt8LbUC5zX4tH/EJQtYPEsAvFuqEucri6JTLgMk9DY3dMeJBIFZGCMTuOAZMYuyyy + sIn/c2O24NhFp9EFPnVkXU+4pjQ9avFZJlkNoAKHl5PsLk9guOMVlajGZYHCj07cExfFkq036StT/mLj + IMyYjkmuJpPSGlgjx9gnhGyIdpibG9hQWL9NqfKLrJRZuDhZQTBOAZLk6Z8RT4FH6XSSk2fqpdh+OcMh + AtI31KQVNeMIKN1sTZG0fIsz1/hLuJUheO8xVe0iKcDS7A4328wKEA32zVbqQZYPg4e+BAXKbprtN1w5 + Jb5qMkcaxtN59cDFPD5YF1oZz3prIOjO/pSyS3kOtGDv/OQqBpk71SFLoF705UNBIik0cnORq3qn7egn + xoxCEpZSOFY7gxJQ/A3UofOqaOl+2Dwfuoyjr5RaCsGyvpGSK0tAYxbD0OgxT/aLkpf0SkSZOlOP1rSo + wgxhS2vXySh1lKaMg8rlprnEg1X0j2DcX9dUQsg2VaSZTfVqNB0VVXiSg5l1+18UIPabf7xmIf78J1Dr + KtO4+pSRW8XCXenaxbey1aCDRd0VhPrCpzY2rnpB4FgvhVBL8AtLPKwnxkLn1OlBdqjAkGx/rGQixFrV + e52VoiWT+VdezrSyXcMFgF47sjWIUpOubVVbMSlYrkaOsTMwy5ZC/lVCZxAyIxySKsd8+9MFjrYRbbus + QtPq0QAyzT7C2NAsP+s+8JL0ftM1l+mOiFjski27ENTfn4b5VR8utyyIgG50yRtcuaYyucpgIlml2bC0 + kqe7uDSdfRGJxfwKNxqmxQyYxllEggyzbLGhYNvKKy8Fi7e0qgXnG4sbGMmU0HVlJeSFd4hh82rIQMfL + Z09jyYoAri3FSKCxH4Q61sXq02gHTh6nYItfDTtXHzGNYY5BvOEQkvijCRbyZA1yZKZEuaW4qu+JSSEY + JyeZNg3Wz5T7m4nl/vi3QXayjTfqYs24rMuRC7OVrRVWLW+ZyIIq8g2cVrF8jZnMTTYzXwAo/t/AyKA3 + X3VTvuYsPDWe+caKYUNcJPMrLX33iKhCdKLjLGdLa0iSmsyChyzarky52W+LJpmWSw2wZwqzw+xjRIdQ + 6ldMyxnVy/OwZlm9nu3Y8Ee87rWvfw3sYAt72MQutrGP/Wsi2Yg6yBYR+5DokkzS+g3T7p5+q3rEVb+k + w9XmzKmrh5NDZ/vWpJZ2pjWdGXfg6ssv3IFrPNdtzQk53tZGt+HCuWQmS/fc9K53pfHminwjeN+Z7re3 + oH0tOlQKSXBWNL9Z6TBc/y+WDI+2uQvOyiTFK6XMnWc3yn3xWWd8Tff+cFaxXOcLWtzhGA/5e0W8k2Jh + 85C5JLjIXZ5b/pPLrTMqX7msv43zner8xe0+as/RxfKHJ/2JZgXstVrm7pkjHOk/v3nVg8ir2l5ztVOs + ONWv7ueg55yEIPYgu3D68YaDfd4jP23WleFAUvIX1C9HxFyQKXa25/3BQs9oOifp6T3XvMwtX3rTxw6w + psWMwCA3PNAdz/WTPx3q9zDmOfW21Me2XemQj3xOl0Izsr5vmPDefOHXznSnEyq3rasVh4yUDoPLNr+y + Z2nq03lrwQ1tTRKGb+n3ruDaT/NNIuv4OQPd++n4ha7CjyLtFf6O5XAxaurDaX2XGxEfNL7zGm6+87Gq + esuzdn+Bbu4Eto/64PdyO70pa2vwueOR/sA61txXv+kpzvc+PlFUopT5/Ftoaun3fPfHGhuXfcZXIPy3 + W0NWWN4mgMHlfQ52a1tHNQHWMZg1Mr8HfAO4gWkmR6njeofHPru3fN7UgYIVgUplVJVXQIeDUe4nevZW + dBmGYuf2ZH02eeAXd3HnWfvUY/pmc6f3gDy3Wh5kWy60YI6lKgQYdkwIHuoiYNjXSOJEDBIXgENIWc4U + YwRWgTJXPGSlgSeYhevHMtfHHbh3VWYQe1pogzKYMWU3LVZ4fUnYXwIjhlGVgirIM4VWcktFT1Rlh1iI + gmQIYZzQQXEIgPk3e3nUhjcIXNKAezk2aMo3g4UobxuUhzokiINh/mryF0evs4l4SIgdhFiTiFtvt0eY + 2IhuSC3twnzgF4b1131sSEA50A4UtoajaIOZyFAtVIqspRMatYiM2Ii8CFfSE4CnGH5GZYIBQlptaIyB + 1VDNKD535Vo0WIPFSIvISI0mlotO2IQbCEK/GBEHBIPUto27mI5YRo02JIc1to5CGIpSZIs3MyzxaHV3 + OE7JKHjEVTNEho7aiI9QhAND8BFTFo3S+Hjg2ICXGIuyaH+66ItXyIopM5DhqI/SVI9QBWRQhnfQ+E1W + 0R+veG19mA9o8ZHqeJEy5IAVaZESKY/zeF7UCDoJeUwqCZPTSJMAB1b2I5A5OUIBeB0IZJNa/vWTDAmH + /+iSoRBPRUmRMplqQvmNQImRGXlwgfiQUDlRIemLrCYDNcmVq7iU53GQS5gd5MQWR+aUSgmRGikwZ2l7 + ICWJYjmWqnGQElcCcNmTpPGU+Wg+EtER7GYBP+iKe+kpdLmWJleWumJ30GeYi5KY7aiVTxgmrvOOfXeT + VimKK7mHVjiYe3aZimWUlXiYYhmZrQVhLFaXKYmUepdJBVaHBtKP4cNT2biKp8kna/UJUOIwgEGMt+lM + hFlvYdJsKqIkyVacyamcy8mczemczylsRgJsymZsdHdfARGaHMl5C/QZR/E51jmTS+iRTGmaS+R7/shi + 7JY8CmmbR7lB/rDXXp+jnpI3dLylmbOlRtiVJDcBBoM5L73YlhH5nspIj5qXnSOIZhIVhCDZS+XhRwf6 + mf+JhtrZngwKcf55Vbswn+s5mq05i5zJjKoJnonTofe5lSCacP35X/Rnok0ZlsVFnya4oWw5mS/qoZpl + kk3CZjqJmjWKor+5j/N5QEVWQ+CJm6pmoVT5XKppTkBYOIpxpKukpLnDpALmcy06pTiYlKpidjGaipDI + F1E6jEBKdM4CJyM6Xlh6o48zEJc5pCP2dWoqp1RSEaH5phM6cBUak3paoFUqOR2JGlQEnD/KoZoSUjvK + mqohqO4ZoKgFEZIGqHy6kHOqiIxZgRQU/qndc6CMxqg+inUiOiBxOnF4IqZxqaWNo6Ivh6hsQ6hjuKbX + 86gtuKJd1aiuSqmVCi5ROKug6Km16pMwmkBVM6NppIqdWqzAqnkkF3ok6l9p6Ual+pikalvByoN4Clq+ + ip9Zim3J+jLr4kq2dqvHGq7W+o/YhXiRoGavupnqqn/cWl/MtanfR6Z7uqCD4abhR6R6AK2rOa/i2oOW + GqP5Sgf7uq8S2Kscl2FSOBTDKq+JNKjjWp/daJ0Ky6xIiq0nCrHn6oBnt2M8yYCPuJ0Hi7CBKBrydZLs + aqMXW6hsSRijsqsBibKt+qsNyY8h5rJoyo4lKbLn2Dcy+3QAq6rJ/meuz5ixbOqzKQqPx2cRkXIs8fpH + BVuwACqpyMqyh0p+JOS0H0Y3dpmkOzuy7RiqR4WZL6mytZW1ZOu1kQe2joZRAiuiMOGZ2Xa2lKCtfbq2 + G4VPbquJUyugaZtYV3ioC5ejlKObbFFFc4u2fEu1a2ulAYe4Ouuvk6q4GQq47sVzP3OvMTtBclG3dluQ + r5egfTKqe0si+upxYEGwh0ijg+Koagu0fmu0msuzn9t1cxdL8PqdqUQ9RsO5RYuAG9li2tVHj+uIsYs2 + vVu2SCuZ3Vqtt3t7bzu5g+i7z9uSyzi6uIqNz8OikluvBEm7lAmm7kq5yEuvIMuj3/uE1Xe9/qTbKEUR + tccIu39bveB5dreVuY/jvl0bud57iSNqs+sBvfvrmvH7u/1rWdQlu9NruLWIvmMrqt07wNE7vga8qbhW + qu/Lnv0KiBTspSXTo6dalYSnug0smmonwRhLwK77RavKqcmbwqhLRsBrfokYwBDMgS+MirzEwp9YwxH7 + huWrwfy7wnqLIHIYGQyrYn4pwEIMS036ha97lT0LxMbLjfPrxNMKxQe3w04KgQn8sySsqgwciGWosaAS + w2Tpxdt6iWFEwwmLVFQ4EZVAfelxwWTETKFihsS7OhKnx/OLTSUMmQqswgMUhXwsvjYcdSKMyMNlxczb + lR1sqgqEtdKL/sPUmybwYwbJtiPHCZ2d7Mkv0gmc/MmjTMqlbMq9Jso1wivwNZEICXzJ5YWV7DiVVL1k + Q7H5s8UUmsOtCKt9nKlUXJhSmj0yx8e3LMOkycsJ5cu0qshijDveirNDZMHFN55SC2pQF81vtMyHDMJ8 + dCiChGbpFcvx8G9oPIKvAX8LLMtfy1O6YzeqRcTDK6ZuZr0/fMJBabDRJEesFs+Xi8SlC2pH/M98Zr6V + ZEu7vFINxT/IN9B14omc2NB5GsTB3M5ii7e6BdECInyD9NAhPNFnbM2SVH45q4RNa474xUzb3MKLTNEK + aX0dOzB/GKHNnMiwmma7sc41XaLL+KcT/rldh7Of9+O2nCZAKp2oH03L8Iu9mZPLnyox2vV/KjMHuXyB + UszSIJ2ZLwuvhlyg2BehRn2SD8rDYZrTALzTWv1+cyVmp9TUVYHVbnGkZJJNg2x0Z/QhkGwmjGEoYK2H + BV2x9lnPCcjXCUEvyrsZeh2VJuzX2tuseA1+pEBXkgApgxss8+TWV71Fje3YhO3NqHp+0Qwsl8mwGKyg + WuPB6brLl7uyCLqkWnCL6OkdyBjRiQvMjonaSz2Sq83aYLwO70hbuAsZS0ybmp3NaU2KNHrTVt23tW3b + gE2uqv2kY33MkUUOm12b5+sUuPkp0FEFyHPFOh2s4A1NXvmhNM3Y/h9s3V8TPCVLjg8RgtO9rot93hK1 + Ps27ak7X3vKdsswdKNzNzolNpekdrVy73A7Lu4uhPhMcxcYcFoNNtOEz29lr2jZD3O3lM6sGx2MsyX/d + EJEp1/5N1yHqd5Tdv06dLNlJ2jpm4MdL3MVt1rg9RQ4szNJdMiheUtFn3sON3iR+32g9kjebtPqdeTgq + 4Lsr5Ld02zCe2NRnWsDi4W/t4/fYzfMNrqnt2S4e4+IJZeTtsSHOqxve30ke2LUm43/MvqVJyfxN5Squ + 5FG8j2de5O6ty0drzizu3FEe4GXal/sBmDe84ldT4ZC9vROe5mDO4VXuw4vLxdIqJtc5swoH/uJe/uaD + F8iNvuhowpuRLr8bLNF6EtV0jho4dNZjzokEXenxbeg6XtobGuHWfOqJzmF0i9R2LOakzp+OTujZqubo + WuvPTbN/M+spkcWvHnO9Hueee7KpDlPD7ul2fuc8DjUO/rF5HSuFtOsGbexY/jaXbs+6/uiHjuhl7tPM + TOxyedTNbtnGPretPurojsLfPjgVjrjsnu10iupoXuzqnu7k7u4u+ufgzuZ43kOdTu3enuvjptn0ru3k + Ce9pXNl6vr4K6ssKv+P2bvCnbboQL7q9TvELf+6Yfu/9vubhfuwY/eWM/u7lvnMcr9IdT/IFn/KdTfCh + 1u5G7fIBD/L+/o7tpg7l9A3WNw+5KD+cdX7wRcrxq8LvMD/0BF70K1/rQA/IGd/0LgzDYV7ziALsDV/W + U2n0Ty/tHq9BQt+5oZ7vXm/XWY/vY3/YVj/qXy/wsp72Dj/LhsSebu/rEV/i3a72yp3ZbQ/Q1wr1cC/3 + l63qzWr3ts6qUy/c+3G40hj4yLzSIk/15Nv3Yn74bS74Yj/5c+/0lo9BOpLKpyz6o0/6pW/6p1+c1Iki + sB46g82LUfv6I2+xd98UgR/7oP7wvJ7V0E5Sth/3i0/0O5/Vj887fH37gmzGXZ/kxK9mvi/5wE/2dD/8 + lx/Qkve4mZi6z+/MPcr8M6wOCW7kSr/1/jwv6Gfd/d7fBMav8lNOx4WPmuf/fn3u+tp/5HxP6+bPZfeG + odfK+Miv2D1PAPBPLDAYYZSTVnuhW1E8/MEQUsTSPFGTTNnWfa0VnulZrkHtWz0d/3MPH6ADBN6MSeVo + 2XSKkE+pbSoZXkgegLZq9A2v3VBUXIaa0Upymj1ZO8OVbK/9+2bqu/xe8ub/5QAB/Zq4YhboBF90wAwV + CRWrICMFJymdLEUcJ+LcDno2L4M+GTQCMtNQRY9WWw1UXWlgKUA/Ovs+SWNPvhx8Q/9md1+EhzGNu4pd + bnG3hICROR0dlKeqo8+w+a619cygmZxzu0cjqKWYscjV1uu42z2//sETdLfgMTrPn9ID73He/aEAGPCV + PBAyfhG0kO8UOl8qFMIYGPEgRRcTS8wrSOqhRSvTGqJzppGeRxYYTTZLeQKlLZJEGqyUNg3mvl8va8rM + pvNHy3Y+L/BDgBCnQpA54WwYw3MnU1lOK4p5SRRqBppIC3WMWrUfV2Jeu1YRunEcWHHmsGZNiAEoubYm + 32qLa6Xp2JVhNMxtcNObWQ5+U+g1Jnjv0piAy44jPPKsOsQlHzdFvBiR4cSIDelYfHMe5Vae74EWRdku + 1tI8Mz/YzNfxY9E/I6ddopUt2tiVrcqevfZQ7NfdfkdaLbkoU7xkHeJWDnny7b7Np5y+Udyp8KlSHkhf + t34leCXntSNvrksdakIupPcK+ev6e2vA4i0rbW+VN/Kk0ta/nx/WLGHa7k8DjDXm9qElP/32O9Av/3Di + gTy/6tMtiU3i6G6bBBUEC74clsOQlvOS+8gQC/cgcRcT3YnupQg9rGBEm+iqELoWJXRqQ3wCTDAMwf67 + BcU2fhyNvRBdojEE9QjcTQsfZ8QwSDQYPNJITbRLcrfDVOqPxifN4HHFBzGsxb6sLgtHyxa5FMPLI8Fs + sb63GpEvHg23XFAkNqdMwRQra3gISWjSTMbDQCWBMajr8tSTt7a06wgcQqWAtEQ74ZhnQGwKAAAh+QQN + FAAAACH5BA0UAAAALAAAAABYAnQBgf///1a06fDkQgAAAAL+hI+py60BQZDC2YtXzbz7DyJbSJbmmUzJ + iLbuq7AwA6mtvM76ntUShONxgsKii2hMJn0ipTOJ3NVsqGj0ie2pItcsoOsN58TkF/VbTofAZubNwVY/ + fdxzOi5/4vN8Q8Sw1ycWaDJlV2IlWDYlgSZIqKgDGUn2N0mpdPlheLhmoYkJMjE6ATpjGkqCmqrExaq4 + quVWBfe6RBcQ+2abpcsr5fgr52sxu8tALMyZCyus54xZCq2WTGN8rDHdsizQSVatfQAeTrJM3uv0J/l5 + Xm7Y3dy+Lt+3oU4vNI7gjZ2NL2sp3r8jA9MY+nGvIEEjCechU+iAUzA++shVhFgrRUP+jJ6KXHPoj6NG + VwJFgrhoMsYDRik78uAH4wrKPFNmdrDpDGfLCup6tjzpEeYLmSnfUdL5C6lJHFQ2/mT3UuhQqCJrRlLK + CytHpk2feqjmNF/GqkCuev2gdeuFsGdVwmCJJRFEUszMth1yN1MxtnknbuO7zW2DtAzrluw7FvEOMFLv + +mq8mOrAskcVS7Z8CoOxj08flyE6mfJhzGNIZ9ZsR2JbXZB5yJW3xfAj04Npn157iG5rfKzvXD4nerRt + v8NN4Em9jzPGWICNgIZNuHbxJtP77dX4wCvz3ZETh8vF3Un0V+OXe0iIXPuC8I2o/eZlQ/bs6uLoWy+W + YqX6lar+r/v2Do189dhXH4HGndeVfj8tw6ByB7B320PhCEBhhRZeiGGGFEZYXXlqnZfcek8xaE1sucGh + YYoqrsjihtro0mKMMs5IY4023ohjjjruyGOPPQJRIZAWCuljkTPm0g2GRFL4TorcXLikhc8AmFUoHqZy + JUSE3LMZhDQ1eJAfCPHDUkNeTkUleZhkaaWBJ0ziBlxnqvGRamF2sJl7aWLZpptsFhREcz88yISglDg4 + Zn94njEnLXuu2SeBfwK6HmQ9/YFoKIKWyR6XekpXJaR+uvkmDYv6gYuhdN6J1wlcNorIBZM+MOuswpF6 + 01+E+vQKXGih0JSqIIXEioADikn+n628hTBLsMnBKoSvv7qK3TfvVSZqiMUpuyyz8SWo7aHCClYCev+B + qmmtuHJLD5yKoietHJliAEqz0LokoSJU2MpuHv3Kc4k5hJoqyLj5lsvovdM+6m+kBv7bTr3ejFLtl7Ca + YqbCX127SGl2jYrrga52knEf89Kra36DcFwJddk+HLLII0dwaaUaI3yfKK9ay/Ai6q4bc6xtvJrayYXl + rLPKqBoMVM9Y7HszmqRCfM5j9hbN9AxZuzyzygKLxfJnfAIdNL5veUqwQRe70OyDAzsX9iBRLzR12aoE + 9baCi6xtxj6VQiErHyrwCyJiVFd9NKp6q+0o25jmNjfXxBr+BMjYhXRmt9lSmJhw5Hg27vgWyLYHuNMe + efxx3ZkvHO23nXveA9LlInsi2Ka/hPqtya7OelThPgs7fqCHXrTith987sunt8t77zoQ3YDRb9F9Ntai + uxb4MJYvwXzzG4vCgb0RBS+i7IVYb3x36M5Bbuoge99q68GSSb7Sw59f56VbMxydsod/Cj+UFeZxbJEe + sKSWMptRbHQxyR77VlA/zcEsgBlACSNYVbF0UK8VNCOF+pDnBf8F7X+Ie5pu/NMKBN4iNu1RWBe0IsKY + kdAiXqiZ8Li3wVtkR2PPCSErPBTB+1EQhOlg4fhSmMPngStRHJrclBymuiE6sIZGjF7+8O51Efrd7IUr + 214UpXg7YAwKhbhTIf4waMVhtU88P/xFEKcIRiKasDH704wZdUbAeP2tjgUKYxLnI8M4xi1x4Vue+XDj + Qf6gho99lOPxlPdFQa6xV9FqoMFclzFEGbBnNonhCCW5PlswsnwL4c7jlsafPLltk07MXRE8+Z1Rxg+U + rSyW7/64SKItcFfOYqAQJffKNpIDjXCjpSM11Tpc7oVmY1QUKlEjND9GE5LOuF7esGfMWupridVTphXn + h5Bn7mqR09RmA4UZGtjNMGLwcd3mckiiZXapUAXs4N0GWSov4oOV38umK6PxrTI6Slq7jAg0xVktfhLn + n3fU3T7+FSrNAM5wbqPsBv2oRTomjvOXwDynPhVCzHv6k6HFihy0hMJHPYKTo41Uo0P/gQtvgvJ/EMVN + YG44MznV9JgLLQdJKbKgnXbUnySU5d8wekS2uS2Dh6wGt9bp00NKkqZXnFMBM9q3xZkPFfd4alv06LyR + FpWDSCWl1rB2TZGGEnxDBeSIElnOkfa0V+Tb30WVGM8xhbNpEc1OW4/11qXGVayxRCKz5ppSU9JFr/3k + KV+huCC/qVWulSssITeB2Dc+y6+5wucs2VrMsyx2sHJVCqyESsZFISFrdcxkY80ZVve1BKyvpexc3WhU + zp4qCpq130YrCMfP/RWod2EkVAH+Foab5ZapKAzUchdFMshw8bAtpWbIjstOKr5zc5yJp3MLysHRanWV + w73tZ61LNttWFzg65OUJKzsSrAKLVbqJk50uOMmfAheddsNudsu6Ks91sKBn+O52x+jeZp5yUJxab3nN + yi7/ik29D54Gfs/aWeZm9RoDBi/F7Jm+6U4WvZFUr4S/mby0Vo+2CB1JIm0g4kLC96OBpLCDC4JaCT7X + t0m1aQvNC+RwRbh5J55QYLu4WR/jDbPS8GxGh8y7Ir/IKzmubZXFoI4eZpjGNbZxkHF85eDK18IkiSiU + VyflKeclzGvtrRhjbNAZc9lxS/HyjYO6Y2C6WYlyhu3ozoz+ZjvfmcqW4g5TUhkgIHchILZIcxgcPQ1I + ewulLEZdycis6POSOL12lrQ7omui+JkJlXtOGpz76kPveVoYq/60O3U7FjA1iK6ZFqCaiCzoQWOGxVKR + QZzky2alKu7UfiZulHPdZ7vxJWB51hWxkdWvVrMR2dIuopNdnIrBidkSRuq2t78N7nCLe9zkLre5z43u + GkWpSDVId7hJGW34VbvRUvSGxLJtrJ8SI2rzDq2g+/3A/J5KU/kebrxVjewvx2wjGBvzl04N46TIO+EA + N6F+7Vjq/Xon4vSeOLUlWeAD4vvZCgfgsT8OcqNcbuRT3FeoEI5yf9q1VzF2ecdhnuv+it/BV/OCScZ1 + zQKb3xrn/y4tL/eKU8HShCd7OjiuKW50F0vl55ph+lpLbvLM6RyyM02jkqMBhiD8a+sutTHZkXzUHhv2 + c8Qeu8djns0r8MVcGEZwIdsucaIXnbCp1fCK/dacJlPJ6U+HuzEZc0STfvhr0av1xRv29pxHfS1er2Qj + 2lao/ODdW3GRaMKxrndrNF5+C06yY3Hg9sjvne9fl6wY56eqsD8e8qH38tnR3neHn3F0NqSXUGTQcL2o + fvVxH7jr/4K+4zP197PX3vA7PfmD/m738V0+XH05udTX3vbRl77SL7cRkrk+r+vTfuENT8s9hP+mok+l + /kIquXH+uNDzn88S1YP5ufScT+2jtydgWGB+5yd5rBc7qoQzJZJLS9McIxCAJwd1BAgQvTQ7BENHzyJ7 + ybZpXYZ+XbcJXbJyezRpIgYWZddfnwd6AliAO4OAo2cqnZIpDChQDVU2t4ctENiBpjcw8VJPW7NsugZY + KEh8xbd/ChhqLSSBlcd5YyF/HgWE0Nd91PVMeZQ+UzcyULEK5EODMmh2lCUxaKU4p9RsKqYSEJOFMmVb + Zdh5XRNn4RRs7lcLXCV8z+eENohHSEdqDUZW/FABVsdfTch9T4gwOvWFIKYXYbGHeSeHf0iHnyYm15dR + YVggbNGAgWaCaPhEZ2VN6ZOGunf+gknHhH64hYA4X5mnfNNmd6U4hNiUiKEoivtHiJpoig6nMYzyiQ74 + gK24cvmDDt+3XveSY5bIUhQGjLGYBW8UdIcQKBl4XSbYibZYjLsIi2v4Uhq4genXMZvYhsQIisJ4htf4 + ROCVE0M0jM6Hizh0iacYg8Yljsw4jqWDZUHEFXUyXx+kDMrIhd3ojXHoXvqHWZyYT/RXf/j4jptIXv44 + jcvIjgKJhGdDkAwEjmnDM6vIiuXIEA0Ja33ojNVojS1jkUYGkAGpkDUEjWvXRMNEjiB5jxx5jktGj9vI + jSH5jB0ZaeuYkDBpcSupZh95ixTJkvpIQ3OBexrJgc/jfe7+uJA1iGNBKZSClBbGiFwU1I4nSVSUI5Ph + CJXMiIFDmVxOKS8yI5ETuYgk6ZMDSVpah5XNmJHhlWo/eZVYGZX+dpNViYg6uZNhKT+P9l90uZRMqV14 + WUJtWZMpGXBKWYxZA3Bh+JYpNpVx6ZdUKUFkETmJqZhCOAelRhhbo3OReZZoSSrIyJiNmY+xZZZnKZns + 54PTM2GO+VjbN4CCSVapaVaGtJouCZZ2OTRZh4p89pi8OEFu+ZI9CZvQUJqiGYS0xGiyiZvJNZu0+ZvZ + dJyWR3t7s5w8JimbOZwMWRH3h4HphiTe1p3uBp7hKZ7jSZ7laZ7n1iTktm7nKSVDB1P+k7mX8BMm8qed + WfmB+DcZ8NmaoHRBBZdA0UkntcWcJiZzRvFckCigYuSJ1/Y+gcmfH/YFbIagW0YTCTqavumcWQadxiY4 + Yth8DVqJtsUMFHWQIomOAleCpCmifKg1JRqTGveVtUmZCsqhJtMY16lp8QlGS+hWM0mTDmqbGDWhYsZq + UoSjIxmkB6ids9JrRqqiNjk0Q4pqGiSJToqhrsldVHdcrFGfERmiUMqQUpmTMUqgYNoGAHqRSClseXGk + cjlV7ZWcvClbabmfiwmcwTmmrDmHSZqKYuqjelmnM6qbNUqdamoZc9Km2iioLfqDscl1iIGoV8qT7tCj + jmqodLr+p3wKhYTqdy5Kedi3H1+KpajZqB4pXB0iqZp6g5Vqqnoqo4e3oWhqqXN6oSg5qZsqq2lKqykq + qrcKWrk6Xrs6g6m6qIwKrJ0qlo5VFLVYnLCKnPqJrJxKibZqpwfmp2mnmig6rL1arURZqkf5NLZGpr4K + qHQmrdh6qdNal8V6m8eKbY/Kq+vqrBV5rS6TjVLFaTr6o3e6lrF2r//oqmVKrhOIpyHhiC+qrPkaqPNK + rwUrGEXIOBVWYs26kebopYlRRd9aq/parjQKmhi7WPWZqFPKlwN7nx9LA8foQXtmByN7da85HC5bltba + r9GjsnZYr9tKrQybrDgJQb7WYXL+2rAyW2yjWrEaRJg/qyAPGa6nKY2KQbSq2K1wiqTIICD2da6fxDhS + OmdxhBNc64M8IX7/SqEYgYWrcqKOYbQNW7UPWyJg+7Jau7NHi7Q1mw2C54aU4xls2pW0EbXT+ayKmgPB + IXXuSo0U+6YI66ZoQLiF+7RSO6BF1KV2q5WDubhiK3dUaJTaILIFYxl/a6GBu7kP0bjompstqa4Lm7iF + Sbkq0W6IZLr4yblLGglwm7U7imWtSx3M1HpJK7c22hegW7Z167P2mikcBo8dK7DsarGCG38yNn1wGZp/ + yrEBG4POG4mlcCYRtG98O7erq7hj6RZ1EH6Uhr3V0QnCa4b++/qZ0usPruAUgIGgiZq+3wu+4Su70uED + FtV+/Ae5qZupPNu05xsM+7ugvnu4isi8Pfu/D6ttNxe5Aly5+PtIBltma0qCCfyqJUuW4mtpnOmtCdub + qsvBuUvAvgbCizuxG+y12Zq/TuSfnmof6ouvytu8FQzDIDy/47rAuCudo0suohN87luo2yKv96ucQOwx + sdFw6jSKn3vEJWzCRMw18XGFnoMxtsuqzSnB7Yu6S/wgV/zCk6bFObu2UmyiSlzFHGeaGdyBtVNnFIwZ + NEykA0zFjaShGEyPpxVQcYwgBBuzqnq9OLzEmEJ4BilylAJdp/u7dJvEd9xnhjyPkKz+sIXDwxFMs19c + xc2UxUxbw9UZImXsvT1MvA0MxkzgI0CwnuzJyq0cJBblyrEsy7NMy+K5yugGeM8ZiDsmvLxFO4gcr448 + xaZsvCE2innGBpMrw0bIvkhcCZopGX2cwgw2N8k8w65ovZd8WcwKxuLEVW3oLiA1YrJIO50itKsxtT9c + kh/8NjEcPp5chb86xwO3KQestqTMuuu8ydqCt7uMiaALJ9GrwVZaMDx0Ga9jn9ClMPA3HEx7hWk7ws4s + L1gER53jtJTXWkQoygFSUMyBsxEt0RMtU0FnM42wHULqTLuGH0KnwCH9JcHoFyfCxm28qqRTF8rMasqF + 0/aIyWn+PLNyBjksvbXxUTk7/XKWjNSP68cTvE0AOzkTk8f/ScbQBszoa0BhQdSMbDj4HKA/HdONp8t9 + Sl0swaKdKQ6VhqseOsoubTJeiTw+1x5i/IGJxHRGPTZGdVekQcciHLGA21JzN9NoC2JiG8wwq9dd3NS7 + +dd2dNErNL6FbdhFORB7XbR969fEobkJ3ZduEwgbvcVsa3z/QNkf6sIw+tbQO83nfFj2gFIQfc8vfRaj + LbGWHbqYjdpcGs9fGDuhfcMELMzNjEzEGcnvfGfhYVUBxdphKhI2kYlQzNYFfdlfbXyrpVhubGEqfKYt + iM7P3daXfWjTrdxaCJHOzcU+LEr+0f3dp1pyrW3dv3zeVT3ODByqaBzctZ3e4K3e38jYtObE5Q3cACXc + tp00WCe/+twOWa3JiK3N0yuubw0hYU1G/Li+0yHbDU7QlCTc972q6scrlLw7/m3DwFvbEcpN/UjgBAQ3 + ni2cFeraitzC8OHdwTpwZb1Maj3hgey5P1Hh/2JowdUogU1OLQ7TQl7aHqzgPa2SOVpdiVVZm4K1xByt + Ra7G0D3Z9B0NMV7EN0jj8hSN3AzSvb3f8A2vSD7Mpp3DKQMPCHJJAY6q+ZzlWmLltdvjALLQ2jtpU85e + Y1zm4/2XF55tAa7hXUPYao7nbW6mAFzfSh7Js9jPf0zFKk7+24294Ctcu4Cuq/hzb4RsG555xmTu5ooO + 1CQKS5X8254ux/wT5bMz6pSO4dQLmPhm6QJNZ4TTyPWYpyEe6WZuabBTup+dLJCu4y8O6yOOwkdD6whp + sl8u5xme6vN17Mje7NVkxpBd6cxu43U35oaezqZubcQu6y/x7KwuWr490Dlu31qdyb6u7YpRP3vNLeMi + YnAL7JVtGiPrJe7e6sO7z1uZ7Uac7NdsS9Yu5qdg1G2amQ67seIS66I876RN3lxN6uau79lLDQVf7n6e + zeoM6o7g2Q0v6Q9f6glP5edO5Jlg8RFv3pNuxxPf5CIurP4O8eJ+slFF8sCe5i+P4zH+z+L9PvM1zfIc + Pxs7faQV7vAfDuCW3vA3v8xQu+3U3qFYrsxbPu22QfSzne6tmtjM7vEknq4U3vTd3j2HothAfxRbj6OZ + DsoZz+8xvvWMG/UorwUgiuiwjfR8gtPXWfUfv+7dzfZ2PejqTvU6b/RZr/Vq8vYyr/I5ry/xXR92HYk4 + X+9HDu0un+Ft77qTi/eSD/cdXPihsr3tfdghP/l0792OPwZJ/+bBq/lyn+u1bfkSgvmIj6kXv+c///qw + 36WZz9Q6Kzj3bs/CFPvK/uoi39Vjb/qDwSTfWcvLz/zN7/zPD/3cqfyp7M53vfTbzd1p3/sze/soM+/D + SfR/eyX+mOm/Phr8AB/nsr/yotnrK/79wq/2e1/8ft39uXL+8o/rg7/z9H/877zllkkA8DF1uf1hlEpM + e3HWe1X+wVA0vFEMtnIJUNPd2EBoE/qV1Fvfn5z/gR9fkFgkGSc2zNDAQhpRM+WTwaReJ1bsdqflfi/e + 6zTbiIF1LSk6IWZz3W85bl6HxJFkullvx9Bm6vD8iAYJCQ0PsRKD+noOyBwVIc6aJK8YJ10yNdE4O4E+ + d5wyPEghL0EZKk/fRFVTYFVfZV9oXVotSqZSa2toep9uffeIEY3BhkdyyyxrlAlZg5GgkTus/aqxdeem + EXaVZLYjTsXntMcB0NNj2Y3WnS3+mCPAf90fSFng2+9D9vuLAeRRzcY8Php22RO4Ip85Of+MQVxYZWIX + OQbvoEKAcWE5iWEq8gtZ5KO7kuQQakR18mILfaO8HWAJambFmtZuroqpbmPDnGBY8Uyz86eioiZH2nrD + 0YGKGDGOfmko9MZTkEm5YQ2lVURUSCl7QuXK0Nk6q1nHNk1rcS1YNEwb5DjlFSgwqlUrBWzbZq/Svlfr + uv0q8288J/BQwP1WmC9jEHQ70d15pCdhx1MR56XnmDJnkZ6v1Z0sFxBou3dfPFUMmQ1rZK4PeZ2Mei5o + AFNR4zqbkTPsWr6PBS6lgBRwNi6j/FB9yfgi20ueh5Y6eoX+5ef5Og/dHbd3dLTes2NRTLGG9ejIw6fe + zp1xc5rgzY8ZL12l++Poc+vWTL49fN7wi5qPAuLU8M+w+NS7raAp7HvHQLUAnO4zBdMDTzUEdVMwsf3y + S6tBo/z7ScABK+vQwrz+KccJBvt7kL/oAuSANAz902yfeZj5MAgd7eBxi5w4bEYlE2ts5cZVSPzLx3Mi + 3GLExVApzUWGbMisuiT3WvKhJsWDIUoop0QSzAR/IUPLG870BLwYM7iwsTB1GhOX6swsLM1k1uTiSQ3Z + g1NMGkHYD6M7RyAUDu9EnGxQPx3YzaxWHDH0MUYlZUs8RSFklI/aYMKPvrUqFQZRJxVN7SNUOzYE9ASX + MgUVzlP9kk+DRTUlpxKCCmqiVQ9fhfHSWSOtVQIU9VtR113HgrWQ524SELcXhcWH01WXoxBZrZTdkVlZ + k1jRISxrKQAAIfkEDRQAAAAh+QQNFAAAACwAAAAAWAJ0AYH///9WtOnw5EIAAAAC/oSPqcutAYNwtLpp + s968G+yF4kg2kAKW6spaaWtFAYy8m03nenJK+/ULtnDCYvFUMyqXH+ZBNtMRXc4qpzcNZq3VLfe7QTbB + ZJJ3B92dGeuyMSKIMttuaf1+ldPx9T0rbSfix/c3E9dFiJi4uIA0yKjoJAMgR/M4BnlkaHWZydHpqeQY + yggqAhjoYUrqAMfJ+rMK+xMlOztkNakleAsDYdsB3Is5fFdb3CepGzsiDPtbueQ8PI08AiVmHbkUvcur + 3bH5Cl5STf6dfV5kbtLtHcKe6DquDl9PlrZ8r8adLtQZj5C4bftuFARjI8LBHAGfzHD3TtXCBYcITqTQ + 8CJF/h4P/Wm0d+QLwI8AMrIhWcEkypKU5CDxuDJDRphGRk70wUWlJ50kX2SDGJOKEKA1zVzkeQBpqaBF + OTpkGmwo0aYgDyolBjVp1ogMpm5NYE5hGZv3cNL7ihUtCy801WrV0RbNyW/1rrJ0excvrgpx1Yb1Ks2o + Ort5/eqFscZf35XVFgduNljkYcITE7tT6HhhY0JkrZk9i5by0QyKDehjOg2wRYPaCIvm81qzhnTRxKLO + kfkxXWoIDxf2rYJO7W6qrdLIrbvqLcqx7zQ3Prv2g+L7iFB/sAjU89mufW+vngdB6aw48hVHnjzq8t7e + gSMOL75RVmz0scXILpiVgP38/vv7/89fcO25t1cYPDRynTr1tROFbeJ5BWCEEk5IYYUWwqKdhRpuyGGH + Hn4IYogijkhiiSZS+At/Kfa34okufihBHDGyOKOKMqAoARQAtghgTvntRMZ3bgh5zyA/0ZbgIvUtaBoq + DLokXyLakdIdcETWdYoYyyQpD0wdveRkGMNJ+eNS7E1G4HvYkVaJWA4O8yaCS4bgIHpUKYffmXpdieV0 + 0TnUoJ18ZKZLnH/Gx1mZieq5Z5oFInooZqeFYp96KtC2KGRmSmalo2utoKVtXHIR5id/OAWbonhUSQma + ngrowUOQtvTgqMrYmtYpfq6qajKM4trnq73G0Gabu0Ji/qilJSCZKZ7OBeken8HG2sORHCVbBramgsos + r5oa89tqbkkb2TVhesmIoBtxe+yQ5TQLWqPCvktCsj2gioe2ytZ7GbBq7obPZz5GOy+s9bbTrjH+vsUu + vu4OK0m4TpDLaMESXfrSg3IOurDE5o7p67cPc9qpxRCH86ah+jKh7rqFrGlaSx1vCzCpHs9BIMXlFnKk + Yiv382kLKQM66Tr0jgVtziafbK7GXSkctNCYxtzkzBpMiXTSBC9ds9QuQdSyLx1vNiug4rJW8cSz3ca1 + s8eZfWC+Y+OmZVdWy3T0wGmvPVrbFwcRKJJh+xK12IHSSnW8+4qSq9pK+/03LXDX/nq3riuwc3irCf+T + NzeNpzcg5DRLPjnl2RZ+XNGB4yyy43ufao3OO5P+FINfWI15nIVW3oApV4kWD++si472FdGBbPft/8LV + b91K+B4x8J7Kfk5A+siKcC7Ln2pvz893fqfeWxNfPBqitvUzbttzS1ShTYYfOeCJk/w4+VeLImnR70e8 + Pv4N7s85pvXPdfWzn1D6ISv0Dc54A9QElDQnvM/dD3Rnwwv1qqe9J9yHcQ10IHYieLMJwq+CbwjFBclx + lfxRYIFs6qD6ylYqS4CPH1pL0wnBQZgHtgKEZTNYSHbIQozMkCEjK6ABUwKGjPGFh/O7XOroI6YACnCI + w5NH/siOiMQkpo+JmnsUv0IVw411UYZTbJ34jIjF3gUMPrRDHZ2UOB3H6M+HXfPiGceXRiD0AoSVwwCX + wKi7MJqOiGWM3x3xmMe53IKPd/MjnWqnskrV7n1BZJgZ3ag4T6TPiYnM4iLl58Ilpgwz15paE0N5QDK+ + Ll0yo2AnwQInwOHuYwn82qTmGCVOXpKOh0TW/yaZilcqUpNfo0UlQ7hC7yFOZsNRDS7L5zYqVrEYzywk + FmV3PmOuj0mibGUpS5c8b1rTZZgk4TOOCUthqpEVPwFl0M4lR75VDSi25KUhxxlMclRzdOpEATIYOQR9 + sfBelGsmIfG5zqzVQ5CL66cl/meBTpiBaoPs84gyVbnLe5oTTgS1p0OR6UsezgwwVoMi0YwmTYq+5oZs + CiJLMchRJnbMK5uMFHGYCD2PbtQzC3spCqmJv4kmk4/hpCFCu7hSjdQ0oR9NAkeDuqwtiFROxUSlJ8Mh + wWnuA47R/KhPuahBfq1QKtxkpllTirdYZfV7F6lqVx3q0zEOJao7lNobvblPptYxrQpdiLH2CldtgFWu + 4cjCUrUp0YZqNJVLNKpfz/rWfqaQZ2+w1UAQ1DTYxTGyfFUsAf26wLjiUJ8R3VwLDTtYvtjNTqvYwzGK + eBOdejUXlTssytg4Bexliya2ba2BQMpWYYl2tFUo7SkN/sdbk1onr8yrVvvoqdu1Mna6vURjU6W7SC7W + aRL6KE9H6RZIk85zd9x1hyz2EJvhavW6wKVoHZhLy+/K1buMdCvRvgRZMM0zrA/lbMzSazL1xu4mpGQe + NAGI2PDSSr73kpTTsHtVIcL2VQJGRoWBmFq9AtOYedXWlvgLYT22IsRcmR57yalU4x5YxYltbBSp9lqm + XXaViDxxexeaYX9uljT801WMTzZj+gnXxjpeiW0xGV0cO5VpzbnwCE/s5OPl2Dqx/XFGScyMABM5nfNh + MYqPq2Qsf/kJTZZLQaJcDDSjzMv9JWxZ9KDL+JTZYmruRZ3fSJ0klUeMpL2xhA8E/mAtb3nJevkZQ4sM + 4g2DQyG+HXN1bThoQh9Gf27aZArGg7gcP9HPIpa0kOd151mEellbsqhqLr2kVP8zyM6as6AjzemtMHQx + PsnmTTVtubCel8t9BTWs20w8CJEa16SOtSIFRmPrEnnUpJoKKOALNWOvq0Yvqra1r43tbGt729zutre/ + 7W0eWRsO4C73hkzjajr/WswFI4os2Ew3aRf52XYc8rqZrcVhHiy7yK5KuguGbyqp0yO2OLIWd93vT9v7 + 1wHHB6KLbee1JDyTFF63vJcWjYIDddf/BrjFG75baI84lhx/FtdAngmUy+1SG3dixxfO8C3LSHA8Huum + jPLy/op/XOb3FafNWywQlvTU5K+O+bLjuEliH2wCQ7+ix3d+9Oy5OLu2eI7KZQtlno986sU1V9W9VXRY + X93puaxr3AyM4PDsmujqhrqNzxAXeO93kDVf+4R97fasuxez2sWec5OMMLv3+un31vreHTZXCGJKVGvi + CQ/HjtbrQn7wUjcteCvdPOoO+OQWvzjxhENPTTTx0BpuTdsmDy/Js7GHyOVvNm/b44OGPdKor2HNz244 + qlo+7cv8KefzrvdDIR5jpgYb34lTpNN3vvbJNm1JO/K06IN4SRdm/mLfPmg/oEuzlS/o+b70i/fGmfCF + HxRjsIpplidTnvo1OJl+D3z2/mqf9zMdqjNLLXJIWN+zUe+/mEYpVCYAZgJ4XxW2f/wkdtmHZzeFMSMX + NvOQROWkc/GneguIPLq3ddGHK9XicONHfkbnf1lSLP3CTLe2fj2ldFZVMhTYVAU3gvWUadLRTQ0TgVgH + acungNy3O3O3THI0UxkmPAd4YDkYgh+DdE/hPHJ3Lb63NEJIeRVIfKpVNQtGW/mnVvnUdizYgpSlYCXI + e1CVgpGnbIZXhMNWJxrjYAOjhLI3e7TnhoRDUIBnLWcRhoBlYjhIhM0FfbinJ2DVSH7jhLYXfHqYaGuo + VzLFhh9YfmXoNZnDenQ4VYlmhzfYeZ73ebIEWQ/2K1gl/oJiuIJ4yIhdZ3sJEoaBqHlvGIqxd0a5UYem + GGGLiH1uYIgPN4tHZRiVaImi0xwp6BNudnNtmIB5WIMKp2LFYouhgYu5qIvitzfORTj11iWpB4KpqIqf + dV8LBHie+IlaOFuyyItR4oipony46IrBlYFmljYGJYWuBHPcGFjeKIjyUYt/1oTJWI5PlkEKR4BgV4/k + iIqn03yK9lvQSArzCGz/GIuyGI/dx0AEOYGVeI8opZABKZCPdof+KIy3840vdnd4h5FkqEUbKU9PuEc7 + NYgJiY5cR3FFtZAlaY2wSI1AQ5GSaJGOEpE1KVnvJZIjOZOhA5HBCJA96Yu5xn8X/vmTCNlsJLmPAViU + NpmMyriMEdiKnNiS7eiO75hvSil9QukqHwmStzKVDcmV8uKVMSlLdUhiBnmQVgmTKKkM4jiQDdiUghVB + N7mS3UhbcMmT+zaXPBWET2mXJSaTbNdCTDmEC5VlZTlwjiZ6ermXRHmYD3mUTdUNdoGWnnZ4kClC/WiP + 0ziYhHl7y+JfYwiUGUlWl7mWS8mXh4mavwiKpmk+rclrxDKWFvSUUNk2VoaJ+rd66reZnKmY16Wb7pQn + wieXv8mH2/iaNsZqbfR+0eEi1EYi0mlu1Wmd14md2amd24ltcECd2kZu3DmdaqleuBaYJnlE9mESssmY + fHaO/g75DDhplmlUXutpQhxpV50FnJMpnDryhfnJmy1FLT/3ilkYnP0EfT5QjGqJnLbzQvppoPxJmWLQ + EOzZnjuWOv+Zmk4JmJEGDQAFJMdjZnFxnrO5nCemoCCaclLGO8VRoibalidpPvfZQsV4imzpmW7pnMUp + oLU5Lh2KlCMaoPh5l0Z5ojKKdhYqZkRFj/t5lTkpegzapKGpPu4GOS9qjvNZUTwal0VKpSiBpfi4hf7j + mvoBiEAKm81VpgJHgz2Bpl+5m8+5HuN4oFDYmFyKIWfamUGKdmtKo/AnoToKF386p1CBK2EqkVoqViEa + cfNxjK+EqBL4jIxaqE4ao3aa/pJD2qjXMICysadw+jaEWqnr15VHiqmDKqqjGqGXOqZxqqmbaqmlKagZ + SqmwCox82qqItaIWpqeBKn8lVKsrN6VtBZ+Kmkgzkaqi1qummqszuquaVHoeyax4qat+yoyddqtpSq3V + Kqe8QafTCqUhoaS4qY+SyapYyUHdSpU++hWRmpizyq2gKZblaqTnGq6eo67zuqOYiaO4iq7p6phrpoph + 6q6OhaRSka//V5X16q//CrBkh37ZKKYMq60OC6z8uIBDOakbSoksM64Le6+f2ZFRZJCIWrAYBa+JJ6+3 + VWAqa7K+eqoPq5U1qoSVcAlSyq55dLKPyqkry0bm+a3F/rWHt2isoQqxIqhpaIZT+YazR7ut1ZizdLde + /Vq015SVI0sthticVwimHUiWKXunILtmUxa0svqrwyi2ebB9WCitIdeuFftDMzugqlmsViS3+Pq2oIq3 + acu1jyipHPqkkOq1fAt7FVm3HHO3HrsVOzuJKku4vTmxHQuP5AG3cRu13fd4ZVu5gju49OqbneqBiuut + 9qpOolGKhrmOiaiZfUO6wmS6iUuqNCm7oVto0Vq1BvQaDPpuFwh0tIsXMMG4vhuyynO5DEi3fyu5Deu6 + 1yqfj4SepWq2zUq8ntugzeuT0fu0SUm9ENqlNlhjm3us4LK9N5qp/Eqxt2s/u3i5/lYHqNhrsdr7vMNq + vV/rvsOLtlM7mn6rjfSrvJzLvPh7fVvZQU0rjXprv9P7knQyf31khEERvN7bSc8BtKDyCOj0bAQMwGcL + tlAbuTIxcbGLvPb3saqLvpcYbfHLBh9MoMKrsPpLXHt7vdJ7tQmMMjcrew8YjskHud3Lv9mrkV7aUv8m + PCOMgCBMxHm6wRwsRWYAgTwMwTHsxMsaszOcpYLwEEYisY27jb80xQd8vx28Qd9ZIdAgnmUsnmRsxmms + xmvMxm0sbm3MIuiWtZWEpYYFQRprwgfbuYnas5SAxccEd9C7jkesrHq8RlV8V3LMsqGEwU57H4QcrO87 + uXxM/pThN7aHO3xPdU+XAWN/NLtso8HRuMTNwLtrU1LrChXCoaHJycqUa8gTKZiqMBx/XAgvWsGtvKpe + LKwGCw9IUhFqS3wqbKjH9W69l60RXJB/GRw39cstfIWS5B7R5YLut7ivvMsqiBH9crOeLF6O+iTm28X+ + Syl/uMx2s83Oq3hMB3B308jJurwQNUvlLCeOl2lNAMmw+8nvKcBuGs7pMjO+BV02nLHHcM8BgxxrK4PK + qcvIEsIukFzSJiiBUwsFnUEzx84sSbQyTEwNLUTPBdGeHDMEjce2WUntA8Xv7JJPDARTsbUzSlBMR9Hz + C3E9jNLZpdIXQFPstqhJENNA/gygX6rDGl2QN30SNNXSztokrpW3LJPIQe3DQ82zJeFMOo2Nm5DTPc3R + Ydu1Qg3VV3Y/Uy1v6vITMpK6ZV2+lBzKCw2tPKvOtBkuYD23LeFIberUc4XVbCvOKZ2/K/1bCfGYWszQ + iHzWIQ3Kkkwp+1vUUdQJLvXX52fAaRRXh+pE1zGc+js3qvWxXEzCjrvUap0Jkv0upHjUI81JLP3Z1Cy/ + T62znsHWpN14IJzJARyfoOvVNV26q1bbVGAnJyBVXGXMgJ3RaZ3Xn5TbSDQqlW02xmWXD1zE4ftPxd3R + x71WaShDdy3Y/GPdfUk+X2UrAN00zSxGEbXc+RITzG27/ocN3Ti9gdPNgZu9yvB73Z693awN3GoELLyN + x5WGsphlfjR8wtMy3BCV3r1T1aTtJu5N0/s6ddmt08d82gO+EQsjXw4K1Oed4GfN4NodlbFU34k9UcI8 + hQg+27yclyv8wgHOTt0d2nYF3hSOza5szfMNVB1OEceE34W537T9WA9n2Ef0Ui0DPew82rgM4Up1oc59 + 2xxO42ARUUOO1idt20iu1xrOkOwiPef72ZsX5cms4l8kF1cOuALOq0lO3EuuifEG5jnTzqyL4mtt5u89 + UWlOmlJO5yO+141QoU4eyzSd4S7MjriryXe+hJUl5wq95VY75VTOESoB4qNs6EwB/lbmDaMb/ebITTeF + Lsje/OSAnujNTZuOd7rJ+ypAfuhuLuj7A+o7+b1tnr6dHplmpxRSWo4gR56lHthLDme5wBxhLt+aS+kd + LhaWqepQXuc+7urVG7s5hM/l3c8bnuLjlA05NOyZjszVbueyzd/kis7jm8pc7ewK3tSCHu279bjMrtpK + YqaWK5rQnutBKdOO3eNXCs/4ZLM6We5bHe9SbOri3u6w/O78nO8IW9e/fur1/t8ojO9kDt+zQ/D8Ds4l + /u8fccFU++1ZjtgGvypKZ4qm0Od7nscNj+0OIyQlO+ecDtnXfufjLiUav+onv9pdDeEZ58/c7sC97uD2 + vr8q/p8d87jxNp/LdquN6cAnbe3T5m7r+q4k/qLUk+4cB53V8M7qSC8QTfel5EL029DxRR6rFQ/0nugP + FEPWRZ/w1m7s+w7Y5iVwE0zsrY7oDw7BBKcfPP/oJk/3rPTEaK8fcQDHe8/3fe/3fw/43fbG3SnGoib3 + 1F72iZ/0LBziTK9/an/hMl73U4+8hsJSV5/Bhf3yk9/f3gu8aXb4thn1N7/H/vX5Fgb5P0r2H9/1uW35 + i/ZXYDz2bc/6rT+Jr69Pfv7ibO7ykr/4aIX7fSb2GiHpjEsuSu/WPM5TEX9mxe7rB4/tp4+YzD/wbF/7 + QXc0oXfkge7fNd/7XH/NVWFq/vq2UL8j+rQv9eT9I8a3/bhN/Qxv/fLuS+vPyeRfFuav+oqf/pNMFxZl + 4aRFAMIxdbndXJSTVmvh1Zt3f7NPHMkyLJsg6FYxUxmYOdG6Vmn70fm+yX1BIQc4NB4TRZHswLw4iYmW + YrpQIrEAXBZx5X6TYDHSOzZryuNqJwTVrrvnLw5+TMuHd/x+ouf/Afyy3DZe4AgPBAFZAgTqNBB3FsEU + J/kqLSkzIzGknCIxMy22RjhnRLFCUcVUV41agx5BqN5WQF19VBpJdGdxg2B/7YQXg3tkfRFseyWJbXRh + dZHDnHmMq62x966fpylovBO1u6OlK7ix0cdH1NfRLE2//hfixd15SZeWz+1d+PHa/fWZRE8CuHCBApbC + l+8gQGEOEwqMmGoRwYLz9k38AK2ENG8QXYHUeGpknooHL1IJJ9KZjGDmJJZMKXMYTR8sn6CMkCMezpYr + jHmcafMHUZNGbfisYHFnCnlIIQFFIbQpVAVKR2L1p1WCzqq0YlodVe8es2ZiuUZMu25tDK9nlX0Uu8Hl + VLNF55LNS6Kttr6e3pJUGXYvhbodazWB8ncMY7aF2fBh+tUTYcgTDvNKbMtKXsfjPv/6HBhv5aGXDbcI + 2qLX4r2hq8FeFZp0Z7CWUXdVPTWGbbS5PchG5Xgy3LtwgeuOc28eHOGvkkeJTvlMwnHBiZ9OT71c4eCr + nrV3Cn+9eimE2LOPV67XA5Tj560+xyV/EvHaimGKV2+Y+8bmdei7aT/q9hutu8gGXIo9RkzzDaoAM4Hw + D/vyCS7BUXZTaApEJNShw2IuhK+6+96o5MNfMmOoCeRoOnHCEBmzzhMTQ4xqwfZWLA0pF7e5MEYS38uo + RgxvfCKuN1iUicd/fJRDxhkRHJJIEelqLUcdbVpSDi25+Ku4T3aRTsqcikxNKGS4tHDINCkyw7rWFkqG + mAIAACH5BA0UAAAAIfkEDRQAAAAsAAAAAFgCdAGB////8ORCVrTpAAAAAv6Ej6nL3eFihLLaizOguvsP + SoKgcOGJpp+pYuPYOqw6x/Yt4zXOa3sPDBpgiJ/weDQKX8SgcoWMop5QqTVBvWozzc32qwMzSU5eFiw9 + +9BWNft9aLrh9MO8NSaXw/Xv3fLXlxEoeEVEWLiFeJKXZJbY9gh5szh5BFNpiZTp0SjEWaL5KSlKUzpJ + AnrKt/WSRrraoloUO1VbmHqbOHvBFMmqC8JrMGxZHNzpiwx3HNH1CryMcdy8K00H4Xrtp/UMHb09ARsu + UU3u7Kt8vmmlrTi+Hgoev2BOzzDjfj/fA6P3zi8etX0PCF5h4e+fQVlIvAEMSG7gQnkTkzS5WJHhJf6F + YCTe85iRWMhRCBRyHLlmYx2Q64rZK/QyI8J/J1EOWlKzI7xwLGXaBKLE4U9A/dRh6xEzSs+KSZmiG1oF + h9AoOZciszqxadYKOaHm4DH1DdZazbQe9UqJK0d9aO0UnVR221iDZhdSceiprZcbYZkhvTaXrl4bWbyR + Mep1WF+/O1fF/VnXbi+TCRBDlirq8S3NNiMLtvDMcFeffEtxPnUapWeCakIrWLx1wWgRsxk3hvsX6mrW + XCqv1VuDhCvYJVHnNn788mDCXGierG1weJ7pxImzSQ0pgPbt3Lt7/w4+vPjx5L9fX562d5znaKnndMc2 + zoXy9Ovbvz/eNFA0+P77+/8PYIACDkggdyMYKIB3BxbIYIAJavdgdwtKyMR4eQQwoYT0nZdcdvslhh5z + GnTBlnWiuEddSWPQdtFz0HF421kxOhWiRiOSCB85lg2xIgB53fhbZh962GFnNcaQD3Q4EmGiJfHJhiII + hulX5EpDDrXbZypOpoc2T95iYoU+NvmaSS/qVKVtM8Z2ZArBNcfjdGD+eJMKoZ350Jp5pgdim26m0CJG + sfQYFaC+4akFdmJ9SGZEfv4JZJfObXnKjinZWaYmivK3B4+qPQppBy1W5lsplnYACnvGdCojRKSBGkIg + chan4qls2HopCiUietCVi/qqHKzCSPnjk41Sxf7rV4CKtiqwaOrJprAeLDKVcKUm8mWhurrYLLSOOPup + tMMyUtOuyeJ0bkF4MJDut2n2Cu5IWUq27WGSQtkuWPlSZOeduMX7i7daiosqHkYZ62Mfxyrbb5CeZvuN + q+wAHNK8A9e7JL4K70uLDbvGSSe87yrFqm4Ea2swqexy3C+SUjmccJycUkzSyBWfjLLB90JZB8QF80WZ + xjPbXDKfDrD8L865vizza4IsjI++tPI8tMAiEs2uQEr/DISka/ncjssvdylf2b9iLfEJFsO49XxLrPc1 + 1KXZyPSYQ6z8rNV0p01j224H4ZyLcmMq9lt4wc0NzXyP6/FmftfZ9aENgP4NuNFA46XM4IzrbYviojr+ + +N/qgebv5Eh3YnndZQqaaNGuX43W2hdfTlPMeH9xuki0C3Uw5bBzvvni0YYuDuDw9eX73IV7PFuOd4sM + vKjmyF418Qx3Ld2pmqP+uyGs517B9BOj3bf1xSN7N/LgiyD82GUnRLLnnZM/vPlRt7OzM2Gn7v3t40cP + OfoRDib2K0cr7EUbKaxPKzAbU/JCJcBpvQ5LBTxfNzz1lIa0z1Do2F4AN7g0EO6DerNTIAYz+DYRdnBW + kwlYBD+oQszkrYL1EEPy1pc1/n1AHSlqod0muLflAZAeJOSNDeFkvBjC7TCmO5NwPGjBIV5PiVqjof66 + aoFDs4koXYEyFqGO9sCcdQ+CUqyiFWsIphRucYc7+xILtfhDKKJRftOoGSrkeMUz8mtQlVMindJhpvjU + 7n9l3CMVjYfHPOqxY2nEXgwbcbwvIg6JQjwkFuyIredpUod6LKL/EnmtSrrAdgmzV+BW54IwEgWIXHvh + rUC5l0VeslKjKkrukvRGMCYkboFSiylFOUYxBtNJsPTkCAc1yLe47I++s86duoKR09mDE+JDBq5gKMtY + 6iKLcFwWV2LAxEOJhpvaLOQ0pSFJYXbSmuQk5QD1B05LxY2VplAbJrfpDzJms5zIvEQ81bI7fVyTk0Hs + TTXR6UFjHjMYsHRay/5YpDpuRUyK59RRvhS60Dmhz05BcSdYTBc/ek6OnwTFZ7sw+hFrKpBlCYKnGsVJ + qUJG0QUVDQf81LlOlZpQVx3diHtqtUtpuiuVNd0G2XB6RpSCcachyEUT/8nGJ3ptX0Wt4z3RuR6kWlGp + S6UKI0g6yZ69R58g/AHSuNoLB2p1q63QWUPaRQYjDA6P7xlcVVdJR1qedJ9zRGg7fyiquLpUrE3cq0hL + ctdr2JWvhlTJ5XACJLdk7a/NCYsqGUnHll61LWhtSTey2FCQQZOFO0jnZ4OKwhxyJLGKlKkZGau7dYQ2 + lA7M3j9Km0/sSdJab0TtVG96v8OCdZh9gq1km/5K2VRSdpeA3WRsa+XYEy7RE4T6Hg8bW9LjCldexsUs + PUybMmw215FNkxyTrFUq3iLmGS+hAms5213tEmSgIaUtIsFLNV2yzqPvjUN/i9vdzm6rVTH16o2S8T7B + bta7rn2tcQXsTbZBN61tJZcm+6vZ7XI3vs8NyWXHiN6KsNcirW3wOSB8YqjQdx6zxcUP21vi7JqMw8P1 + cIv7mlWb3HaoDDZxche8TxSP7cfB+XHPejwPGB9JyI4KURjPlY+VGfmCNRblfwEcXybf15dkmkl+5+uK + uyp5yTTucI2y5aUHmuBwGJzyW808jitjOcDC6p1EwwdUFPXQpocY6pjJXP5mLZ+2eXgNq91+c+N+XGvM + fw6RoOWiR+hQ68O4UDBJGu3oMsPZfoupxIo1oQcYN2jUpC61qU+N6lSretWsbvV/MoTqF7h61qquckGX + 82jA7LMrqXIz05JyBsO2KdfSIPaJYoxgozqVkK58FY2NDeqaqCLE7LT1rS2Z0WfD1hvT9uhV6ptXI2ka + 2qZSSLf5bG2yYjvbHCa3XimdQ2Wne34aFnegNS3dplp03sgZNr753cn1humbjvGsn9ytC4SDDmRqpbBD + +5mNJvsb3wony+pW7OtfezsYFVf3g/8tV2eeY9k8eVTHC07x1A5WDIaC9snpre2Uq1zKD1dmvrln7P6X + 21Pm4wZoAvHHLDL1ueQmB7nRQcO+jUstZud9sqV1XXSe35t0K9dgHKd03YdH5pag0rmQpP7zeL/1iYYG + quigfvCj9zyVI91oIOG96YR3Xe1TZ7ts0EWisMot4+ON1dzBHnO7q0xfmPP2Yngn8YmvHfBhL3A8eVet + ct3cud/+++Iv73D7ejPyIJ2aaC8EacvXHfNIF/s7Oy/lL9pWOBZbmNeDF3g6JLoPd6B2N3Xlcx9ePU65 + fv1as+n7bo1SkI1bYWW7KOvQp53uo1cus05/974nPc8AJ9LyGZ/lqKqKg11lafLfIGzFk77dUmq442Fa + 9eh7X/pU/j0FmR97Yv4FkmqmhU1uwYn2648/+w8Vrd5zDIAQxTzgB3s1EnxJs387hH5dFIBOtD6zN3g7 + F3XYR2cNw0s5Zl3gx3ceh2v/Vn05tSyH5zUMhwYh00ccOBgHaH0UGFghk2YNB3f9kg0bWICZBn/xF4K9 + g4HndRYQeG0deIPkVxrhRHa05YMMQ4OtJH7Nx4S0Q3lHeHazxzEqGEJCGIQ6s1+TdzaU91EwB2hXWIG2 + xIOa1yo3dlQSJHoJGIaKVlv+Q3sR+GZK+IUs+HGyl4R7dIeFtoRNaIVwkIfeBYVoOIF0CFuyE4jXY3sr + uIc4yIglKAgIwX5vmIZ82IcEKIk1J0OROFMG6P6BHwiCfviIIPVpBOd3LkZglMh/R2YlqTeKk+WFc6iG + a6iBoah+AVg9i1iJsciFXXiJcNiGpbduRgSGsvhKtEhwSUiFVZiLqFhhqzg6iTOJjbiMjtiLujciKKiK + e8KMdZiNp5h71/iKNuiByWgNCmOMlNQ60SiNqeiHfxh3HaSNsKiLhbgx7uiJgYhiEEiOBNSJ9uCA5yh4 + LrQK+tiJnviJs1iNo5SO6jiN6/hZAKmQ0KN/hMiNoAiRmUcs4iWOw0iMR3SRwKhvGoke+/iRDulV9viO + M8djuNiQLYk/5cg9AsmS7MiRPoWSBql0zRYu41iQONkwwveMzDaTHbmNL/6liAGZbHqIUCb2OCRZkgYG + lEj5OVaFbsEYOk6ZkECnKRlZflRpU0zpN1jZfrOEO1SigFyplPI4j2d0EqtxiF45lWd5dhNJkRXZP1vJ + RiE5l0NJlEXphF8nlzGJZ6YXOz0pls44dhaXlEA2kobpgaH2kooZWLg3mLBymGpSZpC5P7EgK3snaW2X + go75mCRndZyZDA5hH7DWHxFCa63pmq8Jm7Epm7PZILLGmq4ma7SZahfSHVbpTxJZl2zZI0lxk5XpfGhW + T3wEnGspnLtEnBw3mbYYlMHFkC6ZTdMxg9FlmpH1i6CJidQ5iDUZaWSXCjEogAvHJdMVmMjWmAV5mf6n + hWTKg55cgkAfhkDgyZd2mZnlqZ3beZxtdixFiGP5SY+P6QV/9Zal+J/HI5j4SaB89Z4SFjnQqVy1NSkN + il2c2I+i2Z8o14I4ApZE5J4cClmayI8f+p3JWZ19aZ39V5zs+Y27CJIZupHBCaHoY54TdWC+OHwwGpob + OqIrlaAiSXU8qqI7Si88GaTI8qIDyn0yBl9AKqWJ6aH4V0ZNio0FOqVx2G9W6psiuqU2GmFVui4hanBK + Gqbk5Z9dSpd+yVgxgaU++pQjp6DieaNcKplsug/hJ6ay9BJDWoNRqaFoaqdfRaF5qpCAWm+LFKEzxIZy + N5+EuZN9yqilGalmGf6ebhpkloqoeqqWLfqmeLqmZPqgwLekSQSpnfqpNMmclHmpFumgVRmOrKqphvqq + gNmmoHqnJaqqTxOr7Vmopvqbt2qJclqYhEqpedmrmFqqfpqmihanZEmsPxqslWoIo4qtg5qsbHWXzJqt + NVqr1nqtnuqrTgquJhmqD+mtThKfQFitB8lUeHmoucqi+gmVgvqtwNqqznpAuHps0tqsrnquupqJCJiq + 9GqvBFuwMPmoZeqT5ROu8LqZR1l8FVt7G7atNOSWTVoN5NSoAJuY0bqSCqs6DLuwUMqu4dYyIsuY6UqN + FOulZpp4EcutL2uyQNOFiMCy7gdV1LqvS3eiNv4ns8r3s0mFkEFLeCnKs/ZmQzuLsvx6KzDbs54ngZCw + gVmiqI5Ksrw4p/0no4IYsEb7rifrjTgrnXWKLXy3Nk4LTPW6UV3rtcTlszY7qTRLtluopnL0se3qskXL + tYh5gnjUFE67tzq6tUBbtpxatRh6pnZbQa1nj38afUc6FFUxto9LWFlZsre3tPdguRlrP4bojnA6ubM6 + t4eLueYIuBOqkxCLugVEPaM7s9qKrsJqh5o7lmC7qlrquIgrofIJfQ+bpL1rPiT0h+aQXIVbuOD2ug17 + i2Y7su5KvNZjvIkbXt65uAObsNvrkb9bsdiLtlQbLNNLPEV0hx1bG9tTe/5Zq7Iae7kn+LxW+gSa8wc5 + Kq+1C7Wq671lOr9UpX0lxL27ujGYOTd3Yboxyrab+LfS27xCq7XhZcDzszD3SXTWOJ2n67b9ur/v9Ge5 + k8B8a4TUC7qs+8AOW2Uso7zrGZYj7MALybVBkYjKOLcCarv4m7suDL0bYCG5qZs9vJsYcps+LMRDTMRF + bMRAfMQCwpq21oogq68qI1UfjK+8a4rQmIkUAMOLdTQzRmFSjLS0mrk4XMDyJTSB+rX1k1ZeTMABLHvx + 6LAm0L8HbKT/GkLcQsERqcY/uKkn4oMd22HNM1cR6bptZ3/QhMFUnLLMW3wIkcXyh7Cox77TWsPRlv68 + jpQPcXyaGfYTMexpOZmpbPw0f+XHJIUh8JioTfxd+uBpqMzFYMzHi6oewYHJaYxf36VLICyurkzHMosJ + coon99lSeUwJpyPMity3WJRFo2xWs1CE5VnMbbvFF1y6g3zMyDy0pFkZEUyfMVPKTvZAiLdJzyy3ucxQ + X7olITfLx3gI4myrrCypJoqxGRxtT4s685vOSacNM8jO9uRBhszAiLxN9Hxg9jyAygDE2pvDUarLAylU + E3oXvDBi+5y9JByjjQvK5abHuFcYEE0TwRbPRlmkFl3N1Ua58ot02vw5ETdSEj1FN4zGe2xUGf1VrXEX + v9wl3Qy+bgi8sFy+Df7cjRONf61xoOnXfbmQL5EcvjLE0ro70uWcpfrmBkatknA5zzyNjsWx1C0N04pV + 0kHdHDWd1EorjAA9ycuQUJZ8jZAo1nuJ1fYYw09twq3c1PgE1wp4sVG2RjqtgTi0vEMbtlbb1YSzvuUk + eZ1rkeDT1+a8osopx1Bt19eSTEx9rBeduoo1hWiNc+kl03W71QKMVXWd0meMNzPhzliQ1XK4Up7sYJ1t + 1qA90MiFS6rN1nOmrtRMzq3d2F2ps9gMXGGthZEZvbdd1joF1N60yrEt28ZJhi7t12iZYpRd1b7NQavM + T9KR2zejuKSI1JIt3E5d3AOWCb2MStOn1XJN0f6ivdr5a9aXnbOCXcbfjQrN3VU5vQyJDc2MLd0arTO4 + Fdjjy9rqTdz5zZXnVmRBdNq3Z9/97b4xfd1TyczYfLaoLWLmKraeHeBm7MjC6zQHBRxkXeHr7dq+RMaU + yeGTXSn17eEMHeIr9HQpU+K0ncgHO9xYpODROeLTbdWpbOESa80rjnopiVwarsD+3d01S9LwjaQ37t7t + m1LT/NkbXNkXjuEV6sT/9OLv998f7t0CTuW4PNMt62ybTFkJ3uBp6+NijbwQft8frWNCaeRbzuWkSKNe + nePPLS3pQuZxfkdnLr5eDt51PrtazuMDWeMVreSYUQ1i+XpXu+P4rec/Pv7nA5joHZ7lC85Q7O3ckV4a + k07pAP7mjVTmTl7l2HPlTDvosIvbob7WQI7ogE60px66qY7kU33ogMPpJg7rxZvdFsbns7F1Qm6sABzl + J76s3xu83C3IFN4Qtw7jqO7ptFTo0Vzeb7UpbG7puR7f0a7Xo65AzI7l2I6q7KbivW5Axcjkdg7uatrk + PX7mneaH3k7kyf7XBCNkZxXk0w7c8j3Fcv7IPa1R2v5lv9oN1R7m1/7pprLm0h7soirQ6e3s6R7Gqh7h + fk4VBP/SsV7k2Q7wy03xb6vYpPrwBw9q4wzpyt69H7+uGC/o0e3jn5lJRJ2W1q7yIm+1XMe4mo473P7E + Advt6v3elI4u8cShUDrf7CIM8cW68ejN6iWYzLge8sO+y65tHShF9OY981BPTAm/6h2f80ns9V8P9mEv + 9mOPH6qJm2YvHtCu71989U+/51pfdvherih/v26v68QO9+ZX7uNO9wbb9nf/ynmvZqDe91L78wYf46Bt + IvlY9aYO+HYP2JtdXsrdT8lNpGP99/4e9de9YoIWzIXP9leJ+BoP14O/lK1beZB/+IFf102Saw2VjHlO + +aKP961/+QMZGOv++EaP8Co6GngCbQeC+vOq+bzP+lVrWbdP4y4R7yuc+ZVGN/482wiV+w7fNrI/5APs + +2Ol/HNS/SLt/Maf+P51ynlUTaffH+jX//wJLZWFUv7Tj27Mz9nqL/7GHqD2zrmWX+vxv/ZrvDXYTwDw + LXC5/WE0Qkh71KFu3+TBUByRKiOlE13ZVW3hWCbf2b5xLL8rWaV6iw6otjOGTEhP8di8MJ1RqW5atQKg + V8gQ9gMKg0vteJL0cCNZ8lG9do/ab/lzvg23Xr0v4E6vTzfiNNAeBP/wDhPFFBkhDNf6XBg2gAgtHhtR + eh4rLzNxMD/XQkXHSKv2ujgQS3cCkVILW31mP09rpW6lIiUnVXF5zM74eBF0gbGQE4+VQT8tUYqgiZpt + XkFiZatDmLdpvd+6jabhGsj9wGE2YbMXxGff0/5p5Mnicc5FpFnpW9ax293xSyPwij2Cnhjh48ahGMKD + moSd6aTtobGKuS5GMShDIbVVvTKKuPaP3MZGJkNSSZkDZb+G88y9HLhS5Ad2DVseyhlyZ8aeIjt6nCTT + Ec0RHUJNdPBTDtODTglClUhUKBiQRmHZxEaszB2pprDa+EpvbISgi4ZeDUsymZJKaMoWXBsjrre6D6gu + TBttLgkgAfJq6Ao35d1qhpsh9iXW3L6+7JLeIezzMQvFyC4TC4xu0GYGmWf9rSkkIM/KfE+X+wPQcomz + S1P7pYAJTR/QLGPny613NUczrHXvHk3baumLt0shF4XcM963M5TXGnlBspJt08IdYi966LVzARujA/vO + tkyD8HS1p0g/s0535+DXAx1Pntf5X/E/4zfPvfkq+PpJioyr/SqybxkAjZPDPYb+Q1Citv7hA7bjHNQK + wcwWjAnCbyqkbrYHJYTGQLX0G7GOyzIcaj7GOvxHkE4qKMZE1Rycsak5MqxtRehahMyCt5RKMKoKbXQD + xRVi7GpD9IApAAAh+QQNFAAAACH5BA0UAAAALAAAAABYAnQBgf////DkQla06QAAAAL+hI+py+3hIoy0 + 2osn3rz7LQiL9pXmiSpk2oUue63wM9c2J8f3vuX8/wupgMRixWc0uIRJA5L3bEqPn+h0Zr1qI8xDdgvG + hZVLUfJbQ4/PJfU6845zzU65XRwu041uVv+O1QboN1jY9VcYhjizBLDHd7WYWEU5KWhp9yKJKbWZojfl + 6SHKSbFIWoha+imiugo11hg5+2oj6WqHW/shpLsL44shSxv6S1hpbJqcV7YcF3zRtQUt4YzcQb2WbV3t + +MhNPCUNts1QfncLbq4u3jjMztY+Pq11LpcOn2CfX5fwwk9kHxklz+oBXHeNn0CF/kT8O7hD4Lc3C/tB + tIjtIoD+ivAg7GEyTyMKiYM4btS4ySQkkUBWSJvI8pKRkBS1CFBZBB9EnOBcfoQZc9RMoDUjEXWm8yDP + nnOCHuPRLJHJpTeSKnUKy8FDrAltbM1Dw2BHE1Rbcq1a4ehZZUFWTWWXUmRZa1nm0VyrL4jae+TUWb2K + NxAFu1ED54W6l69YujIvzkUa7ZGZd4Yx1rhbsi/kxjsrP03rryFmp9BGA1L5GE9XgKmXqXn5zXTM0olz + ad4Vl2XrZG5eKqite4HsprVw7mYrNLjnz2k/Cl9+8rdDIcMRAFe82C3Z2dBT9OkysfpFPeTLR/6F+lWA + 9ezbu38PP778+fTZZ+/O2QKdkNf+D5Yn+tBX1qF3Qn0GapdfTgYuyGCDDj4IYYQSTgjhTexZ6F4IFG7I + YXwaBvBhhh5qiOF8eoBYYnspdshii/AVWEpuyuG3HQf/CCgeJv/9Z11hWm3FX3/aKMKJjCjROBIv+wEJ + j4AHgOINZTaGRyA9lhh5JJI1htZcj5PlOImTwu1oAo64ETkJlo5pueWA+i05mSPq5LjEBGCO2VBxaKYC + I3dsrgYcSC9IWQp5CZYpnZ63ndZmln8mVyac+/3iI6QsxHbnouGgU6OQZz5qqTDg9ejlK4RmxAie6mmK + naWZIgiqalMO5CapnJyKKgz8KWolp4cCFmsPSlKGqZhxGLv+Wgk4etprPcxm9StDwco65TtOvjrUswjp + Gp62xbA6hpprTiusskBNx+UgyCZrLgPYftvskI06Si4VJ9xFmCHvbsutqkWG22qo9Nbbzb2CPtmttzvs + O8INy8J6354Cj0uwvawAuavCl2k8hFdUDrjupvACPC/FFRd88U9BctxvGg7bhbChBUkMLhyknWzxxukm + KgfDHXssmXNk+MzcyPHm6ifOYb28pLssX/p0dAv/5q6cAYtsNNLPwaU0clMPvXUmUVPDpNO+Ht1Jn9Ew + 1vXSC39JGNGXuqzXpN7UahvNaZdscts/QxWzdHJ/YgsRdlsdNsk1r8RuZ37z+3Kpgkf+rWzhQFSKcODy + os144yDE+HgD2cAG4OAeUC513QmDhzq1WOek9r2gh95wC+fZ2oDptltu+LkBtl7u4j94ctzwtNeOmMrE + bYE6bbhSRyrwOugdUOxJH+9F74JiFnJbaL2tVoCZC9+598RzVTxT2sPNvfRcRLTG77Ry3sQ+52OVPjcS + TTda917BHz/W3W2AeyMf3aIFLOxlTwo/GYz7eMa7WMDEIRELxQMto7WvXQ17FblR+C6IN8GII3F389/3 + DFg018lFgX9j4JO6lITWcUQ2uIKdIh4oivydkIUYjGGcQBNDaG3MPLOqYNYiOLEgGvF4Kqnhzi4nRBQU + hoiR+VL+AachvRyeRYdss0l/dEdCERrsh06jU5SuSD/vWO96PExdoR4IPDtFKmaEglJzwCg6bcgwSehr + IwK4SDUoAvBZAgTbmOwYwoPZkHpqXCMzcOjHHt6qd1FsAf9EQ51ifeyFR7TgDpPoRRMi8HGADOTl9miu + ZvwOc1ESEh4XSA7KafFYBOHkAf1YSt+cEoC8QJwhKag50YDAiXzrxNgcKTZZRlKS6mKd9ERpMy8hcg6Z + jNsq39S0TzpLjJ4LoDKXWcozzu9taJkmMce3Nmkuj4BIXCIoo2kJaKKsjeGEIOAi58DLjHNo1ozHDVOo + Qn3JE3mRrOcT78mIL6Auk7mbnD/+GZnBiCbinF7DZTIGuruE6gd8lWLlQ7HYyFHegaLzpOdFX5knXdXl + lYW0Jxq3iczg1WJfBjVGTdlZBLndZDA4RUzuUJrHzYm0oqvAKDMVeFNfDuVSVgDhPukIp/K50wKz3AVD + 38nBZTjVlrKLwlZ3NA5VklSmzBNXQHXEVbJa9KQjlKIbhcmIfQ3Kg6Zbyl+wOtG0wrOgzgCqKRH1BKPm + 1HfctMkpaonXvGI0qVVq68V8aLC3pjRSC/0Rx6hy2JjqCFuM/ZQ1BDvMdkkWd820rMbsmliimkpbneVV + E1oH2tsNcw8+iO0p+8cwzEpUrTdbJixfK8jbtg+RtYVez7b+98F8KvWo9Tsrb9kITn74lbStZN9hBLdc + pkmpmuasrjNlMRrd7jW1CfStKLZaRRByV6kTycFYxxjM6FWTjrj7bgOvC1GCDrW80YWIO/Sy2+nWlyaK + NG6e5vuwFqYRv90cWH818t5FwvW103TgXqY42d+ikLlUDUxrPcsS2xa2p5C1pGgRSwfxqna3M/Ith6WL + 3pK2UhjxaxltiyJj57bYvHgR8IpFzFYGWwkopPhwMXlo5FQyMsbqImBZPBLUI++Yx5UBskSZbAghGwQm + RSacTV38R+h41Hh/NcwjnhySLnsYzBoW8xfzQ2AfH/fFkGgvH9fM5tEux38Vrmic1/L+D91+Q814SfKq + HvU85Mo0SOOTMxgC/YxBh3QthobYn6YoJuCQAKycHs8hcNxm8jouz5UebMhqIwN0vZBKjjacKZ+sZRZD + l8ptHM55rQwIJsA61LKesotLnWvTkCLCRU1xpJ3gomQre9nMbraznw3taEvb2SGKdp2mje1sN8gMhC50 + nnnNwqO4otUlRjMGhQRsHZsUzETBBZZNrWd4dZvS36Yz7WjibmA2qRUzQ0W6n/tgdtt5iKMe0rzpXe9/ + x1PBsvOvvat38C3WO96RlJmuxvNws0QcfxOnOJut/O6ZZNx4G+9twjs+AmKZEYi8KUjJg6LwK6H8Z2K9 + zgRDfvH+k+A8zHf29sRj7lp+inLngvQI0T3eYcMAXSozj7UhN+pwpH90vwUnddN5/lMaZyJVUpeqqKvO + 5qVb2l/UDKNP0enWrkuY6mAHs9hnV3blXoGVZCziXF4O846//V9Qf192c0qruRpYVODupLp9/eurFz7D + ZHcsSJb7eKFB8DHe2rvbrK54tfePeZd8+nP6U2nLR/nbok9TaBvajrRaXLONxfPJM/+dc/mwbJ5nGLn9 + 3mAHhz3zaqcuYpN3cxILf8KM76LPf877P/zZp/jiXtbF+RtDl16/mFc8IpbvsaeiPYxhBav0PTP9mVn/ + dLJ3WDp/uvoZk6d4oAc/ylNz9AX+Vy27sMVmRuUXpe9XJvygvrryVX1QXsZTYIJIhpJk/Id1rwd75Ldd + UXNhdfc5mKRrfuF+esd7vSdNmzQ3yjU4zdAanoKAi8dXyYcoCYZ+iXFhehVZGpJrX8dfu0eCrIBdquJR + 3XNV+GR8rqeA49cyQic5iJMva/NM8ReAOdZHFhiDOUdf7DQMsGEju0RLubdCSLiA3LI6ttJSRBhfLbd/ + MxeCZwM1KCgp1ZVMxKZPbPeCMFiFVkh3yLU9wbZTtwdQHPd+FxgMq+eE4oRrgiGHPXd8yJeE/2NFAEhd + fVgwhoiGrOGFdpgtVlRmprd9wCWFfUN6jGhqo1J8fBJCktj+a7Pmdhc4cpbkDoyGCT5hE7+XdF1IhYF4 + dsiCiDmDiqk3XggHiJa4dTKXiUxXgbXIim/wiiW1h2Smiry4hmIDiSAzdrS4g8U4Z8dYS1p4ecq4jDw4 + UtDIcMNnfthIfRJXh6C4G78YjYFjhn13eK6WX7TWi1Goi2XEPw7ILF8YikwEihi4VM4YSMojVDo4jf5H + joOFi41HEK8Ij/Qoj96YZfYIRIg4kAMpf/voi/+YUQ2JeJ9okE2GkBGIKJNYYs3VjbZYjRBZRJWjkW2n + hh7ZM6U4R1OVdx1pksdijU5nf4Z3hKuYjhL0kglIfq/TjNXDkjX5P6Jyk/Hoe2sXbET+WYnzeBxBKZSb + aJTc2JPMeJIX+YQyaXI0CZW+qJQEWYSnMz3DaJXUeItSOZVpB4t/SIxX+Wh/B4YiyZFeeZZgiZVwx5ZT + J40O2XRzMY5U2Y88uYtfyY9YmZUwKVtN6ZR+eZfqmIwhmZErFk/f9JRwmZZBx4BkaYRh4piGuYjeJJk5 + 2XCMuXC39JYfBznM03opOZfhWJdH2XH4VmMg1pm9VJapqZoV+WiBuY2ceZqjp4+h+Zdzl5cbBkO5uY22 + 2U52eZi+SZy6CZt86Za8OXHGNnf6I0UaoxYMyZDA6WLQ6ViuMZ0KU51mN4WZyXu9cIo5yIDXAR8rsiDq + qW3t6Z7+7wmf8Smf88kgZRCf1Uaf7bl+DOKCLkSXs/mcULIQ4Mh6FjZjlRSWhFmSASp4A0qBShaJWqec + ZumcH3ci2hhX6nOe6oR7TImTu2mc7PaMGxGMZqOhoigpAyVuy3GdEllxW7EPBFqg1JRNKip8C9mbmdcL + X/Wg55lNByqEXAYdLaqTq+kEPHqis0VF0LeXglmVFYqZOGieVSR0QTOWt1mYUKqlZyidY7QsLGOdx0mb + SqSWcjks2OeHIFp9LQmFMtqJg/mDTbqU+UCkermlVoihIGmamERjQtqXd7qms5ecoymcVZqmLMc14smm + 8MadlESGI5mGC4qW2tOojlpCiRj+i5vxmDnqn1xojlsZm1kaolEKPpoaXHNIh5sqphtZqZspqgA6qeTU + pa75WZhKO3Waj1A4q656UbYaOriqOIDXo7QqmxQ5pqe6q7xaNW56qJIKmQiVpIc2fxOZeMeKrFNqphQa + qM96dsmqrE8Kq5yqq9iarcVarYsqq94qrUqnqLEqpa16kFhabM1qrD4JrfBKrDMJqPVqqeQ6UoSqr6Mq + sD3or4h5jam6r+dajwWLkn+6reIKRcxajuvIrqQ6sNnnqRmrpgrrrgD2Zaa6sejYsd5Tmp/ppJ7Isdy6 + sN8ar1pJp6oKs8KaryxLrSK7quU5s+uqrc4aszJLsy34oa/+mq5Diq6cqLMfW7EWy7PbWa6FIoI1G3AQ + G50/a5GaF6kp266cd7RIm7RLNagI2rNkyncMm6CgSUlfy0sqy7R6yrUhG7U3W5uJaSqhiLae+a5uG65e + JLc5u5IJO4IP2bQ425/SEko7q7QiF7hTC6kk+1KdKrSH67NsO0KV57BL67fdKrkuRLlRaaefirBSS5oN + GwuTZrhGC65h67gUG7rvAo/AqqB5G7eZW2I05bmZAblv25piKbZlGqo8Naywe7Gma7uRqYKz6B8TirW3 + u7LDq7ce2pUiwZqXi2RVq4mhO5TPW7p/C7rMoLuRS6+nm7zSW7tr6bh4h7K4q7zLS77+RusSg/uy4otU + +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 + /z/E2Hjz0uVBPwAAAABJRU5ErkJggg== + + + \ No newline at end of file diff --git a/client/Maestro/StringResources.Designer.cs b/client/Maestro/StringResources.Designer.cs new file mode 100644 index 00000000..d7519f7c --- /dev/null +++ b/client/Maestro/StringResources.Designer.cs @@ -0,0 +1,270 @@ +//------------------------------------------------------------------------------ +// +// 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 Maestro { + 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", "4.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class StringResources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal StringResources() { + } + + /// + /// 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("Maestro.StringResources", typeof(StringResources).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 string similar to Akciók. + /// + internal static string AKCIOK { + get { + return ResourceManager.GetString("AKCIOK", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Állapot. + /// + internal static string ALLAPOT { + get { + return ResourceManager.GetString("ALLAPOT", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Archív metaadatok módosítása. + /// + internal static string ARCHÍV_METAADATOK_MODOSITASA { + get { + return ResourceManager.GetString("ARCHÍV_METAADATOK_MODOSITASA", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Befejezés. + /// + internal static string BEFEJEZES { + get { + return ResourceManager.GetString("BEFEJEZES", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Bemenet. + /// + internal static string BEMENET { + get { + return ResourceManager.GetString("BEMENET", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Cél akció. + /// + internal static string CEL_AKCIO { + get { + return ResourceManager.GetString("CEL_AKCIO", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Felvétel dátuma. + /// + internal static string FELVETEL_DATUMA { + get { + return ResourceManager.GetString("FELVETEL_DATUMA", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Forrás fájl. + /// + internal static string FORRAS_FAJL { + get { + return ResourceManager.GetString("FORRAS_FAJL", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Kezdés. + /// + internal static string KEZDES { + get { + return ResourceManager.GetString("KEZDES", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Kimenet. + /// + internal static string KIMENET { + get { + return ResourceManager.GetString("KIMENET", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Kiválasztott forrás. + /// + internal static string KIVALASZTOTT_FORRAS { + get { + return ResourceManager.GetString("KIVALASZTOTT_FORRAS", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Kiválasztott metaadat. + /// + internal static string KIVALASZTOTT_METAADAT { + get { + return ResourceManager.GetString("KIVALASZTOTT_METAADAT", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Lejátszás. + /// + internal static string LEJATSZAS { + get { + return ResourceManager.GetString("LEJATSZAS", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Létrehozva. + /// + internal static string LETREHOZVA { + get { + return ResourceManager.GetString("LETREHOZVA", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Metaadat. + /// + internal static string METAADAT { + get { + return ResourceManager.GetString("METAADAT", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Módosítva. + /// + internal static string MODOSITVA { + get { + return ResourceManager.GetString("MODOSITVA", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Név. + /// + internal static string NEV { + get { + return ResourceManager.GetString("NEV", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Nincs találat. + /// + internal static string NINCS_TALALAT { + get { + return ResourceManager.GetString("NINCS_TALALAT", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Státusz. + /// + internal static string STATUSZ { + get { + return ResourceManager.GetString("STATUSZ", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Szegmens létrehozása. + /// + internal static string SZEGMENS_LETREHOZASA { + get { + return ResourceManager.GetString("SZEGMENS_LETREHOZASA", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Ügynökség. + /// + internal static string UGYNOKSEG { + get { + return ResourceManager.GetString("UGYNOKSEG", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Vége. + /// + internal static string VEGE { + get { + return ResourceManager.GetString("VEGE", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Végrehajt. + /// + internal static string VEGREHAJT { + get { + return ResourceManager.GetString("VEGREHAJT", resourceCulture); + } + } + } +} diff --git a/client/Maestro/StringResources.resx b/client/Maestro/StringResources.resx new file mode 100644 index 00000000..8b6ca6cc --- /dev/null +++ b/client/Maestro/StringResources.resx @@ -0,0 +1,189 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + + Akciók + + + Állapot + + + Archív metaadatok módosítása + + + Befejezés + + + Bemenet + + + Cél akció + + + Felvétel dátuma + + + Forrás fájl + + + Kezdés + + + Kimenet + + + Kiválasztott forrás + + + Kiválasztott metaadat + + + Lejátszás + + + Létrehozva + + + Metaadat + + + Módosítva + + + Név + + + Nincs találat + + + Státusz + + + Szegmens létrehozása + + + Ügynökség + + + Vége + + + Végrehajt + + \ No newline at end of file diff --git a/client/Maestro/TODO.txt b/client/Maestro/TODO.txt new file mode 100644 index 00000000..05c594dc --- /dev/null +++ b/client/Maestro/TODO.txt @@ -0,0 +1,3 @@ +-a file create azonnal jelenítsen meg állományt a listában, inaktívan +-Nexio filenevet lehessen beírni kézzel is +-Minden hiba azonnali log/email (munkaéllomás neve / user neve is kell) \ No newline at end of file diff --git a/client/Maestro/Targets/FTPTargetProcessor.cs b/client/Maestro/Targets/FTPTargetProcessor.cs new file mode 100644 index 00000000..d881d91f --- /dev/null +++ b/client/Maestro/Targets/FTPTargetProcessor.cs @@ -0,0 +1,160 @@ +using FluentFTP; +using Maestro.Configuration; +using NLog; +using System; +using System.IO; +using System.Net; +using System.Windows.Forms; +using System.Collections.Generic; +using TrafficClient; +using Model; + +namespace Maestro.Targets { + + public class FTPTargetProcessor : TargetProcessor { + private readonly Logger logger = LogManager.GetCurrentClassLogger(); + private const string SUCCESS = "Successfully completed."; + private const string PROCESSING = "Processing {0}"; + private const string PROCESSING_COMPLETED = "Finished processing {0}"; + private const string FILENAME = "{0}{1}"; + private const string VERSIONED_FILENAME = "{0}-{1}{2}"; + private const string ALREADY_EXISTS = "File {0} already exists, trying {1}"; + private const string STATUS_FOLDER = ".STATUS"; + private const string KILLDATE_FILE = "{0}.{1}.KILLDATE"; + protected FtpClient targetFTP; + protected FileInfo inputFile; + private string workingDir; + public WorkflowAction workFlowAction { get; set; } + + public FTPTargetProcessor(Control parent, Source sourceConfig, Target targetConfig, string inputFileName, string id, List segments) : base(parent, targetConfig, segments) { + FtpTrace.LogFunctions = false; + this.targetConfig = targetConfig; + Uri inputUri = new Uri(String.Format("{0}/{1}", sourceConfig.Local.Address.LocalPath, inputFileName)); + inputFile = new FileInfo(inputUri.LocalPath); + Input = inputFile.FullName; + ID = id; + workFlowAction = new WorkflowAction() { houseId = ID, tag = targetConfig.Tag, touched = DateTime.Now }; + } + + public override bool Execute() { + logger.Info(PROCESSING, inputFile.Name); + Started = DateTime.Now; + workFlowAction.started = Started; + bool result = false; + try { + SetSubFolder(targetConfig.Remote); + targetFTP = CreateClient(targetConfig.Remote); + EnsureDirectoryExistence(targetFTP); + Status = ProcessStatus.Progress; + Output = CreateOutputFileName(); + workFlowAction.destination = Path.Combine(workingDir, Output).Replace("\\", "/"); + workFlowAction.source = Input; + UploadFile(Output); + if (targetConfig.KillDateDays > 0) + UploadKillDateFile(targetConfig.Remote, Output); + ExecuteCompleted(); + Status = ProcessStatus.Completed; + Message = SUCCESS; + workFlowAction.successful = true; + } + catch (Exception e) { + Status = ProcessStatus.Error; + Message = e.Message; + workFlowAction.description = Message; + logger.Error(e); + } + finally { + TerminateClient(targetFTP); + Finished = DateTime.Now; + workFlowAction.finished = Finished; + } + logger.Info(PROCESSING_COMPLETED, inputFile.Name); + return result; + } + + private void SetSubFolder(Connection connection) { + Uri address = connection.Address; + if (targetConfig.CreateSubFolder) + workingDir = Path.Combine(address.PathAndQuery, ID).Replace("\\", "/"); + else + workingDir = address.PathAndQuery; + } + + private void UploadKillDateFile(Connection connection, string output) { + Uri address = connection.Address; + string statusWorkDir = Path.Combine(address.PathAndQuery, STATUS_FOLDER).Replace("\\", "/"); + EnsureDirectoryExistence(targetFTP); + DateTime date = DateTime.Now; + date = date.AddDays(targetConfig.KillDateDays); + string fileName = String.Format(KILLDATE_FILE, output, date.ToString("yyyyMMdd")); + logger.Debug("Creating KILLDATE status file {0}", fileName); + //fileName = Path.Combine(statusWorkDir, fileName).Replace("\\", "/"); + byte[] bytes = new byte[1]; + bytes[0] = 0; + using (Stream ostream = targetFTP.OpenWrite(fileName)) { + ostream.Write(bytes, 0, 0); + } + } + + private void CopyStream(Stream istream, long ilength, Stream ostream) { + byte[] buffer = new byte[32768]; + int read, overall = 0; + while ((read = istream.Read(buffer, 0, buffer.Length)) > 0) { + ostream.Write(buffer, 0, read); + overall += read; + Progress = (int)((double)overall / ilength * 100); + } + } + + protected virtual void UploadFile(string outputFileName) { + using (FileStream istream = File.OpenRead(inputFile.FullName)) { + using (Stream ostream = targetFTP.OpenWrite(outputFileName)) { + CopyStream(istream, inputFile.Length, ostream); + } + } + } + + protected virtual string CreateOutputFileName() { + string nameWithoutExtension = String.Format(targetConfig.OutputFormat, ID, Path.GetFileNameWithoutExtension(inputFile.Name)); + string result = String.Format(FILENAME, nameWithoutExtension, inputFile.Extension); + int version = 1; + if (targetFTP != null) + while (targetFTP.FileExists(result)) { + string versioned = String.Format(VERSIONED_FILENAME, nameWithoutExtension, version, inputFile.Extension); + logger.Debug(ALREADY_EXISTS, result, versioned); + result = versioned; + version++; + } + return result; + } + + + private void EnsureDirectoryExistence(FtpClient client) { + if (!client.DirectoryExists(workingDir)) + client.CreateDirectory(workingDir, true); + client.SetWorkingDirectory(workingDir); + } + + protected FtpClient CreateClient(Connection connection) { + Uri address = connection.Address; + FtpClient result = new FtpClient() { + Host = address.Host, + Port = address.Port, + InternetProtocolVersions = FtpIpVersion.IPv4, + UploadDataType = FtpDataType.Binary, + DownloadDataType = FtpDataType.Binary, + Credentials = new NetworkCredential(connection.UserName, connection.Password) + }; + result.Connect(); + return result; + } + + protected void TerminateClient(FtpClient ftpClient) { + if (ftpClient != null) { + ftpClient.Disconnect(); + ftpClient.Dispose(); + } + } + + } +} diff --git a/client/Maestro/Targets/FXPTargetProcessor.cs b/client/Maestro/Targets/FXPTargetProcessor.cs new file mode 100644 index 00000000..8702450c --- /dev/null +++ b/client/Maestro/Targets/FXPTargetProcessor.cs @@ -0,0 +1,81 @@ +using FluentFTP; +using Maestro.Commons; +using Maestro.Configuration; +using NLog; +using System; +using System.Text.RegularExpressions; +using System.Threading; +using System.Windows.Forms; +using System.Collections.Generic; +using TrafficClient; + +namespace Maestro.Targets { + + public class FXPTargetProcessor : FTPTargetProcessor { + private Logger logger = LogManager.GetCurrentClassLogger(); + private Source sourceConfig; + + public FXPTargetProcessor(Control parent, Source sourceConfig, Target targetConfig, string inputFileName, string id, List segments) : + base(parent, sourceConfig, targetConfig, inputFileName, id, segments) { + this.sourceConfig = sourceConfig; + } + + protected override void UploadFile(string outputFileName) { + FtpClient sourceFTP = null; + FtpClient monitorFTP = null; + + try { + sourceFTP = CreateClient(sourceConfig.Remote); + long ilength = sourceFTP.GetFileSize(inputFile.Name); + + FtpReply replyPASV = targetFTP.Execute("PASV"); + if (!replyPASV.Success) + throw new Exception(replyPASV.ErrorMessage); + + Regex regex = new Regex(Regex.Escape("(") + "(.*)" + Regex.Escape(")")); + var v = regex.Match(replyPASV.Message); + string port = v.Groups[1].ToString(); + + FtpReply replyPORT = sourceFTP.Execute("PORT " + port); + if (!replyPORT.Success) + throw new Exception(replyPORT.ErrorMessage); + + FtpReply replyTYPE = targetFTP.Execute("TYPE I"); + if (!replyTYPE.Success) + throw new Exception(replyTYPE.ErrorMessage); + + FtpReply replySTOR = targetFTP.Execute("STOR " + outputFileName); + if (!replySTOR.Success) + throw new Exception(replySTOR.ErrorMessage); + + replyTYPE = sourceFTP.Execute("TYPE I"); + if (!replyTYPE.Success) + throw new Exception(replyTYPE.ErrorMessage); + + FtpReply replyRETR = sourceFTP.Execute("RETR " + inputFile.Name); + if (!replyRETR.Success) + throw new Exception(replyRETR.ErrorMessage); + + monitorFTP = CreateClient(targetConfig.Remote); + + long overall = 0; + while (overall != ilength) { + overall = monitorFTP.GetFileSize(outputFileName); + Progress = (int)((double)overall / ilength * 100); + Thread.Sleep(100); + } + + } + catch (Exception e) { + throw e; + } + finally { + TerminateClient(monitorFTP); + TerminateClient(sourceFTP); + } + + logger.Debug("Done"); + } + + } +} diff --git a/client/Maestro/Targets/ITargetProcessor.cs b/client/Maestro/Targets/ITargetProcessor.cs new file mode 100644 index 00000000..0f8424de --- /dev/null +++ b/client/Maestro/Targets/ITargetProcessor.cs @@ -0,0 +1,25 @@ +using System; +using System.ComponentModel; + +namespace Maestro.Targets { + internal interface ITargetProcessor : INotifyPropertyChanged { + + DateTime Started { get; set; } + + DateTime Finished { get; set; } + + string Input { get; set; } + + string Output { get; set; } + + ProcessStatus Status { get; set; } + + string Message { get; set; } + + string ID { get; set; } + + int Progress { get; set; } + + bool Execute(); + } +} \ No newline at end of file diff --git a/client/Maestro/Targets/ProcessStatus.cs b/client/Maestro/Targets/ProcessStatus.cs new file mode 100644 index 00000000..d403aa15 --- /dev/null +++ b/client/Maestro/Targets/ProcessStatus.cs @@ -0,0 +1,5 @@ +namespace Maestro.Targets { + public enum ProcessStatus { + Idle, Progress, Completed, Error + } +} diff --git a/client/Maestro/Targets/SegmentConverter.cs b/client/Maestro/Targets/SegmentConverter.cs new file mode 100644 index 00000000..31bbd358 --- /dev/null +++ b/client/Maestro/Targets/SegmentConverter.cs @@ -0,0 +1,31 @@ +using DxPlay; +using TrafficClient; + +namespace Maestro.Targets { + class SegmentConverter { + + public MovieSegment ConvertToMovieSegment(Segment source) { + Timecode tcIn = new Timecode(); + Timecode tcOut = new Timecode(); + tcIn.Set((int)source.TCIn); + tcOut.Set((int)source.TCOut); + MovieSegment result = new MovieSegment() { + Comment = source.Comment, + Optional = source.Optional, + TCIn = tcIn, + TCOut = tcOut + }; + return result; + } + + public Segment ConvertToSegment(MovieSegment source) { + Segment result = new Segment() { + Comment = source.Comment, + Optional = source.Optional, + TCIn = source.TCIn.Frames, + TCOut = source.TCOut.Frames + }; + return result; + } + } +} diff --git a/client/Maestro/Targets/TargetProcessor.cs b/client/Maestro/Targets/TargetProcessor.cs new file mode 100644 index 00000000..14a08904 --- /dev/null +++ b/client/Maestro/Targets/TargetProcessor.cs @@ -0,0 +1,155 @@ +using Maestro.Commons; +using System; +using System.Linq; +using System.ComponentModel; +using System.Runtime.CompilerServices; +using System.Windows.Forms; +using System.Collections.Generic; +using Maestro.Configuration; +using TrafficClient; +using DxPlay; + +namespace Maestro.Targets { + public abstract class TargetProcessor : ITargetProcessor { + private ProcessStatus status; + private string message; + private string id; + private DateTime started; + private DateTime finished; + private string input; + private string output; + private Control parent; + private int progress; + protected Target targetConfig; + protected TrafficAPI client; + protected List segments; + public TargetProcessor(Control parent, Target targetConfig, List segments) { + this.parent = parent; + MaestroForm maestroForm = parent as MaestroForm; + TrafficMetadata metadata = maestroForm.Configuration.Metadatas.Where(m => { return m is TrafficMetadata; }).FirstOrDefault() as TrafficMetadata; + client = new TrafficAPI(metadata.Server.Address.OriginalString, metadata.Server.UserName, metadata.Server.Password, metadata.Server.Timeout); + this.segments = segments; + } + + public event PropertyChangedEventHandler PropertyChanged; + + protected void NotifyPropertyChanged([CallerMemberName] String propertyName = "") { + parent?.SafeCall(() => { + PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); + }); + } + + public abstract bool Execute(); + + protected void ExecuteCompleted() { + if (targetConfig.SaveSegments) + SaveSegments(); + } + + private void SaveSegments() { + MaestroForm maestroForm = parent as MaestroForm; + client.DeleteSegments(maestroForm.SelectedMetadata.VariantID); + if (segments != null) + foreach (Segment actual in segments) { + Segment segment = client.AddSegmentToCopia(maestroForm.SelectedMetadata.VariantID, actual.Comment, actual.TCIn, actual.TCOut, actual.Optional); + } + } + + public ProcessStatus Status { + get { + return status; + } + set { + if (status != value) { + status = value; + NotifyPropertyChanged(); + } + } + } + + public DateTime Started { + get { + return started; + } + set { + if (started != value) { + started = value; + NotifyPropertyChanged(); + } + } + } + + public DateTime Finished { + get { + return finished; + } + set { + if (finished != value) { + finished = value; + NotifyPropertyChanged(); + } + } + } + + public string Input { + get { + return input; + } + set { + if (input != value) { + input = value; + NotifyPropertyChanged(); + } + } + } + + public string Output { + get { + return output; + } + set { + if (output != value) { + output = value; + NotifyPropertyChanged(); + } + } + } + + public string Message { + get { + return message; + } + set { + if (message != value) { + message = value; + NotifyPropertyChanged(); + } + } + } + + public string ID { + get { + return id; + } + set { + if (id != value) { + id = value; + NotifyPropertyChanged(); + } + } + } + + public int Progress { + get { + return progress; + } + set { + if (progress != value) { + progress = value; + NotifyPropertyChanged(); + } + } + } + + } +} \ No newline at end of file diff --git a/client/Maestro/app.config b/client/Maestro/app.config new file mode 100644 index 00000000..d4050983 --- /dev/null +++ b/client/Maestro/app.config @@ -0,0 +1,3 @@ + + + diff --git a/client/Maestro/nlog.config b/client/Maestro/nlog.config new file mode 100644 index 00000000..65416377 --- /dev/null +++ b/client/Maestro/nlog.config @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/client/Maestro/packages.config b/client/Maestro/packages.config new file mode 100644 index 00000000..38048ef9 --- /dev/null +++ b/client/Maestro/packages.config @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/client/MediaCube.sln b/client/MediaCube.sln new file mode 100644 index 00000000..a6f1d99e --- /dev/null +++ b/client/MediaCube.sln @@ -0,0 +1,142 @@ +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 15 +VisualStudioVersion = 15.0.26430.14 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DxPlay", "DxPlay\DxPlay.csproj", "{0B44B3D7-52D7-4C0E-9B1C-F48CEEDA36FE}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Maestro", "Maestro\Maestro.csproj", "{BAF3E174-5D82-40FA-9E62-8C76ADBEA1E4}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MediaCubeClient", "MediaCubeClient\MediaCubeClient.csproj", "{CEFD0348-DED4-453E-BF3A-0B52F8890AB3}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OctopusClient", "OctopusClient\OctopusClient.csproj", "{8CC7C930-9DBF-487B-AED5-776937A649D5}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IntegrationTests", "IntegrationTests\IntegrationTests.csproj", "{4A61E975-F8DB-4BBF-BEFF-72FE67B2C08B}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AudioRecorder", "AudioRecorder\AudioRecorder.csproj", "{616D8912-16A4-493B-BC45-53BF2A5D9B92}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TrafficClient", "PlanAIRClient\TrafficClient.csproj", "{A7A21311-CB0E-465F-8AD6-829FAF093F00}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Debug|x64 = Debug|x64 + Debug|x86 = Debug|x86 + Release|Any CPU = Release|Any CPU + Release|x64 = Release|x64 + Release|x86 = Release|x86 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {0B44B3D7-52D7-4C0E-9B1C-F48CEEDA36FE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {0B44B3D7-52D7-4C0E-9B1C-F48CEEDA36FE}.Debug|Any CPU.Build.0 = Debug|Any CPU + {0B44B3D7-52D7-4C0E-9B1C-F48CEEDA36FE}.Debug|x64.ActiveCfg = Debug|x64 + {0B44B3D7-52D7-4C0E-9B1C-F48CEEDA36FE}.Debug|x64.Build.0 = Debug|x64 + {0B44B3D7-52D7-4C0E-9B1C-F48CEEDA36FE}.Debug|x86.ActiveCfg = Debug|Any CPU + {0B44B3D7-52D7-4C0E-9B1C-F48CEEDA36FE}.Debug|x86.Build.0 = Debug|Any CPU + {0B44B3D7-52D7-4C0E-9B1C-F48CEEDA36FE}.Release|Any CPU.ActiveCfg = Release|Any CPU + {0B44B3D7-52D7-4C0E-9B1C-F48CEEDA36FE}.Release|Any CPU.Build.0 = Release|Any CPU + {0B44B3D7-52D7-4C0E-9B1C-F48CEEDA36FE}.Release|x64.ActiveCfg = Release|x64 + {0B44B3D7-52D7-4C0E-9B1C-F48CEEDA36FE}.Release|x64.Build.0 = Release|x64 + {0B44B3D7-52D7-4C0E-9B1C-F48CEEDA36FE}.Release|x86.ActiveCfg = Release|Any CPU + {0B44B3D7-52D7-4C0E-9B1C-F48CEEDA36FE}.Release|x86.Build.0 = Release|Any CPU + {BAF3E174-5D82-40FA-9E62-8C76ADBEA1E4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {BAF3E174-5D82-40FA-9E62-8C76ADBEA1E4}.Debug|Any CPU.Build.0 = Debug|Any CPU + {BAF3E174-5D82-40FA-9E62-8C76ADBEA1E4}.Debug|x64.ActiveCfg = Debug|Any CPU + {BAF3E174-5D82-40FA-9E62-8C76ADBEA1E4}.Debug|x64.Build.0 = Debug|Any CPU + {BAF3E174-5D82-40FA-9E62-8C76ADBEA1E4}.Debug|x86.ActiveCfg = Debug|Any CPU + {BAF3E174-5D82-40FA-9E62-8C76ADBEA1E4}.Debug|x86.Build.0 = Debug|Any CPU + {BAF3E174-5D82-40FA-9E62-8C76ADBEA1E4}.Release|Any CPU.ActiveCfg = Release|Any CPU + {BAF3E174-5D82-40FA-9E62-8C76ADBEA1E4}.Release|Any CPU.Build.0 = Release|Any CPU + {BAF3E174-5D82-40FA-9E62-8C76ADBEA1E4}.Release|x64.ActiveCfg = Release|Any CPU + {BAF3E174-5D82-40FA-9E62-8C76ADBEA1E4}.Release|x64.Build.0 = Release|Any CPU + {BAF3E174-5D82-40FA-9E62-8C76ADBEA1E4}.Release|x86.ActiveCfg = Release|Any CPU + {BAF3E174-5D82-40FA-9E62-8C76ADBEA1E4}.Release|x86.Build.0 = Release|Any CPU + {CEFD0348-DED4-453E-BF3A-0B52F8890AB3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {CEFD0348-DED4-453E-BF3A-0B52F8890AB3}.Debug|Any CPU.Build.0 = Debug|Any CPU + {CEFD0348-DED4-453E-BF3A-0B52F8890AB3}.Debug|x64.ActiveCfg = Debug|Any CPU + {CEFD0348-DED4-453E-BF3A-0B52F8890AB3}.Debug|x64.Build.0 = Debug|Any CPU + {CEFD0348-DED4-453E-BF3A-0B52F8890AB3}.Debug|x86.ActiveCfg = Debug|Any CPU + {CEFD0348-DED4-453E-BF3A-0B52F8890AB3}.Debug|x86.Build.0 = Debug|Any CPU + {CEFD0348-DED4-453E-BF3A-0B52F8890AB3}.Release|Any CPU.ActiveCfg = Release|Any CPU + {CEFD0348-DED4-453E-BF3A-0B52F8890AB3}.Release|Any CPU.Build.0 = Release|Any CPU + {CEFD0348-DED4-453E-BF3A-0B52F8890AB3}.Release|x64.ActiveCfg = Release|Any CPU + {CEFD0348-DED4-453E-BF3A-0B52F8890AB3}.Release|x64.Build.0 = Release|Any CPU + {CEFD0348-DED4-453E-BF3A-0B52F8890AB3}.Release|x86.ActiveCfg = Release|Any CPU + {CEFD0348-DED4-453E-BF3A-0B52F8890AB3}.Release|x86.Build.0 = Release|Any CPU + {8CC7C930-9DBF-487B-AED5-776937A649D5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {8CC7C930-9DBF-487B-AED5-776937A649D5}.Debug|Any CPU.Build.0 = Debug|Any CPU + {8CC7C930-9DBF-487B-AED5-776937A649D5}.Debug|x64.ActiveCfg = Debug|Any CPU + {8CC7C930-9DBF-487B-AED5-776937A649D5}.Debug|x64.Build.0 = Debug|Any CPU + {8CC7C930-9DBF-487B-AED5-776937A649D5}.Debug|x86.ActiveCfg = Debug|Any CPU + {8CC7C930-9DBF-487B-AED5-776937A649D5}.Debug|x86.Build.0 = Debug|Any CPU + {8CC7C930-9DBF-487B-AED5-776937A649D5}.Release|Any CPU.ActiveCfg = Release|Any CPU + {8CC7C930-9DBF-487B-AED5-776937A649D5}.Release|Any CPU.Build.0 = Release|Any CPU + {8CC7C930-9DBF-487B-AED5-776937A649D5}.Release|x64.ActiveCfg = Release|Any CPU + {8CC7C930-9DBF-487B-AED5-776937A649D5}.Release|x64.Build.0 = Release|Any CPU + {8CC7C930-9DBF-487B-AED5-776937A649D5}.Release|x86.ActiveCfg = Release|Any CPU + {8CC7C930-9DBF-487B-AED5-776937A649D5}.Release|x86.Build.0 = Release|Any CPU + {4A61E975-F8DB-4BBF-BEFF-72FE67B2C08B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {4A61E975-F8DB-4BBF-BEFF-72FE67B2C08B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {4A61E975-F8DB-4BBF-BEFF-72FE67B2C08B}.Debug|x64.ActiveCfg = Debug|Any CPU + {4A61E975-F8DB-4BBF-BEFF-72FE67B2C08B}.Debug|x64.Build.0 = Debug|Any CPU + {4A61E975-F8DB-4BBF-BEFF-72FE67B2C08B}.Debug|x86.ActiveCfg = Debug|Any CPU + {4A61E975-F8DB-4BBF-BEFF-72FE67B2C08B}.Debug|x86.Build.0 = Debug|Any CPU + {4A61E975-F8DB-4BBF-BEFF-72FE67B2C08B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {4A61E975-F8DB-4BBF-BEFF-72FE67B2C08B}.Release|Any CPU.Build.0 = Release|Any CPU + {4A61E975-F8DB-4BBF-BEFF-72FE67B2C08B}.Release|x64.ActiveCfg = Release|Any CPU + {4A61E975-F8DB-4BBF-BEFF-72FE67B2C08B}.Release|x64.Build.0 = Release|Any CPU + {4A61E975-F8DB-4BBF-BEFF-72FE67B2C08B}.Release|x86.ActiveCfg = Release|Any CPU + {4A61E975-F8DB-4BBF-BEFF-72FE67B2C08B}.Release|x86.Build.0 = Release|Any CPU + {616D8912-16A4-493B-BC45-53BF2A5D9B92}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {616D8912-16A4-493B-BC45-53BF2A5D9B92}.Debug|Any CPU.Build.0 = Debug|Any CPU + {616D8912-16A4-493B-BC45-53BF2A5D9B92}.Debug|x64.ActiveCfg = Debug|Any CPU + {616D8912-16A4-493B-BC45-53BF2A5D9B92}.Debug|x86.ActiveCfg = Debug|x86 + {616D8912-16A4-493B-BC45-53BF2A5D9B92}.Debug|x86.Build.0 = Debug|x86 + {616D8912-16A4-493B-BC45-53BF2A5D9B92}.Release|Any CPU.ActiveCfg = Release|Any CPU + {616D8912-16A4-493B-BC45-53BF2A5D9B92}.Release|Any CPU.Build.0 = Release|Any CPU + {616D8912-16A4-493B-BC45-53BF2A5D9B92}.Release|x64.ActiveCfg = Release|Any CPU + {616D8912-16A4-493B-BC45-53BF2A5D9B92}.Release|x86.ActiveCfg = Release|x86 + {616D8912-16A4-493B-BC45-53BF2A5D9B92}.Release|x86.Build.0 = Release|x86 + {A7A21311-CB0E-465F-8AD6-829FAF093F00}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A7A21311-CB0E-465F-8AD6-829FAF093F00}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A7A21311-CB0E-465F-8AD6-829FAF093F00}.Debug|x64.ActiveCfg = Debug|Any CPU + {A7A21311-CB0E-465F-8AD6-829FAF093F00}.Debug|x64.Build.0 = Debug|Any CPU + {A7A21311-CB0E-465F-8AD6-829FAF093F00}.Debug|x86.ActiveCfg = Debug|Any CPU + {A7A21311-CB0E-465F-8AD6-829FAF093F00}.Debug|x86.Build.0 = Debug|Any CPU + {A7A21311-CB0E-465F-8AD6-829FAF093F00}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A7A21311-CB0E-465F-8AD6-829FAF093F00}.Release|Any CPU.Build.0 = Release|Any CPU + {A7A21311-CB0E-465F-8AD6-829FAF093F00}.Release|x64.ActiveCfg = Release|Any CPU + {A7A21311-CB0E-465F-8AD6-829FAF093F00}.Release|x64.Build.0 = Release|Any CPU + {A7A21311-CB0E-465F-8AD6-829FAF093F00}.Release|x86.ActiveCfg = Release|Any CPU + {A7A21311-CB0E-465F-8AD6-829FAF093F00}.Release|x86.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(TeamFoundationVersionControl) = preSolution + SccNumberOfProjects = 8 + SccEnterpriseProvider = {4CA58AB2-18FA-4F8D-95D4-32DDF27D184C} + SccTeamFoundationServer = https://elgekko.visualstudio.com/ + SccProjectUniqueName0 = MediaCubeClient\\MediaCubeClient.csproj + SccProjectName0 = MediaCubeClient + SccLocalPath0 = MediaCubeClient + SccProjectUniqueName1 = OctopusClient\\OctopusClient.csproj + SccProjectName1 = OctopusClient + SccLocalPath1 = OctopusClient + SccProjectUniqueName2 = PlanAIRClient\\TrafficClient.csproj + SccProjectName2 = PlanAIRClient + SccLocalPath2 = PlanAIRClient + SccLocalPath3 = . + SccProjectUniqueName4 = AudioRecorder\\AudioRecorder.csproj + SccProjectName4 = AudioRecorder + SccLocalPath4 = AudioRecorder + SccProjectUniqueName5 = DxPlay\\DxPlay.csproj + SccProjectName5 = DxPlay + SccLocalPath5 = DxPlay + SccProjectUniqueName6 = IntegrationTests\\IntegrationTests.csproj + SccProjectName6 = IntegrationTests + SccLocalPath6 = IntegrationTests + SccProjectUniqueName7 = Maestro\\Maestro.csproj + SccProjectName7 = Maestro + SccLocalPath7 = Maestro + EndGlobalSection +EndGlobal diff --git a/client/MediaCubeClient/IO/Swagger/Api/DefaultApi.cs b/client/MediaCubeClient/IO/Swagger/Api/DefaultApi.cs new file mode 100644 index 00000000..e30a3b6e --- /dev/null +++ b/client/MediaCubeClient/IO/Swagger/Api/DefaultApi.cs @@ -0,0 +1,2757 @@ +using System; +using System.Collections.Generic; +using RestSharp; +using IO.Swagger.Client; +using IO.Swagger.Model; + +namespace IO.Swagger.Api +{ + /// + /// Represents a collection of functions to interact with the API endpoints + /// + public interface IDefaultApi + { + /// + /// sessionId alapján elkér a managertõl egy UserInfo-t. + /// + /// + /// UserInfo + UserInfo LoginPost (LoginParameters username); + /// + /// A futó munkafolyamat leállításra kerül és kikerül a runQueue-ból. + /// + /// + /// + void MasCancelJobPost (long? jobId); + /// + /// A kliens felõl érkezõ új munkafolyamat indítása, amely a JobEngine submit metódusát hívja és jobStart paraméter alapján eldönti, hogy a munkafolyamat milyen módon kerüljön be a folyamatütemezõbe. + /// + /// + /// Job + Job MasCreateJobPost (CreateJobParameters createJobParameters); + /// + /// Név alapján kitörli a Sablont. + /// + /// + /// bool? + bool? MasDeleteTemplatePost (string name); + /// + /// Az ItemManager-tõl elkéri az adatbázisban eltárolt összes DomainCategory típusú entitást. + /// + /// List<DomainCategory> + List MasGetAllDomainCategoryGet (); + /// + /// Az ItemManager-tõl elkéri az adatbázisban eltárolt összes MetadataElement típusú entitást. + /// + /// List<MetadataElement> + List MasGetAllMetadataElementGet (); + /// + /// Az ItemManager-tõl elkéri az adatbázisban eltárolt összes MetadataType típusú entitást. + /// + /// List<MetadataType> + List MasGetAllMetadataTypeGet (); + /// + /// Fake hívás, így a webservice-en keresztül elérhetõ a Signal objektum. + /// + /// List<Signal> + List MasGetAllSignalGet (); + /// + /// Az ItemManager-tõl elkéri az adatbázisban eltárolt összes Store típusú entitást. + /// + /// List<Store> + List MasGetAllStoreGet (); + /// + /// Az ItemManager-tõl elkéri az adatbázisban eltárolt összes UserInfo típusú entitást. + /// + /// List<UserInfo> + List MasGetAllUserInfoGet (); + /// + /// Fake hívás. + /// + /// Domains + Domains MasGetDomainsGet (); + /// + /// Az ItemManager elkéri azokat a Domain-eket, melyek domainCategoryId-je és filtere egyenlõ filterId-val, illetve filter-el. + /// + /// + /// List<Domain> + List MasGetFilteredDomainByDisplayPost (GetFilteredDomainByDisplayParameters getFilteredDomainByDisplayParameters); + /// + /// Az ItemManager elkéri azokat a Domain-eket, melyek domainCategoryId-je egyenlõ filterId. + /// + /// + /// List<Domain> + List MasGetFilteredDomainPost (long? filterId); + /// + /// filterId alapján elkéri a Foldereket az ItemManager-tõl. + /// + /// + /// List<Folder> + List MasGetFilteredFolderPost (long? filterId); + /// + /// Elkéri az ItemManager-tõl az összes olyan Médiát, amelynek itemId-ja megegyezik a bemeneti paraméterként kapott filterId-val. + /// + /// + /// List<Media> + List MasGetFilteredMediaPost (long? filterId); + /// + /// ItemManager-tõl elkéri az összes olyan mentett vágólistát, amely name-el kezdõdik. + /// + /// + /// List<Scene> + List MasGetFilteredScenePost (GetFilteredParameters getFilteredParameters); + /// + /// ItemManager-tõl elkéri az összes olyan mentett keresést, amely filter-rel kezdõdik. + /// + /// + /// List<SearchDefinition> + List MasGetFilteredSearchDefinitionPost (GetFilteredParameters getFilteredParameters); + /// + /// ItemManager-tõl elkéri az összes olyan mappát, amely childId-ja filterId-vel egyenlõ. + /// + /// + /// List<Item> + List MasGetFoldersPost (long? filterId); + /// + /// ItemManager-tõl elkéri a bemeneti paraméterként kapott id-vel rendelkezõ Item-et. + /// + /// + /// Item + Item MasGetItemPost (long? id); + /// + /// ItemManager-tõl elkéri a bemeneti paraméterként kapott id-vel rendelkezõ ItemType-ot. + /// + /// + /// ItemType + ItemType MasGetItemTypePost (long? id); + /// + /// Típusleírók lekérdezése. Az adatmodell dinamikus, az anyag és verzió objektumok bõvítését szolgáló metaadatokat tartalmazza, kiegészítve az adatbázisban elõre definiált mezõk metaadat leíróival. + /// + /// List<ItemType> + List MasGetItemTypesGet (); + /// + /// ItemManager-tõl elkéri a bemeneti paraméterként kapott jobId-vel rendelkezõ Job-ot. + /// + /// + /// Job + Job MasGetJobPost (long? jobId); + /// + /// Visszaadja a rendszerben tárolt összes sablon-t és végrehajtó osztályok listáját egy JobTemplatesInfo osztályba csomagolva. + /// + /// JobTemplatesInfo + JobTemplatesInfo MasGetJobTemplatesInfoGet (); + /// + /// Naplózási szint alapján visszaad egy napló listát. + /// + /// + /// List<LogEvent> + List MasGetLogEventsPost (LogLevel logLevel); + /// + /// ItemManager-tõl elkéri a bemeneti paraméterként kapott id-vel rendelkezõ Media-t. + /// + /// + /// Media + Media MasGetMediaPost (long? id); + /// + /// Visszaadja a JobEngine getUserMessageQueues() lista méretét. + /// + /// int? + int? MasGetMessageCountGet (); + /// + /// Visszadja messageId alapján az a UserMessage-et, amely a JobEngine getUserMessageQueues() listájában van. + /// + /// + /// UserMessage + UserMessage MasGetMessagePost (long? messageId); + /// + /// Visszaadja a JobEngine getUserMessageQueues()-ban lévõ UserMessage-ek listáját. + /// + /// List<UserMessage> + List MasGetMessagesGet (); + /// + /// fake hívás. + /// + /// MdType + MdType MasGetMetadataTypeGet (); + /// + /// A bemeneti paraméterként kapott storeUri-tól elkéri a hozzá tartozó remote file-okat. + /// + /// + /// RemoteFileResponse + RemoteFileResponse MasGetRemoteFilesPost (StoreUri id); + /// + /// Az id azonosítóval rendelkezõ Scene objektumot kéri el az ItemManager-tõl. + /// + /// + /// Scene + Scene MasGetScenePost (long? id); + /// + /// Az ItemManager-tõl elkéri a bemeneti paraméterben kapott azonosítóval rendelkezõ Mentett keresési feltételt. + /// + /// + /// SearchDefinition + SearchDefinition MasGetSearchDefinitionsPost (long? id); + /// + /// ItemManager-tõl elkéri az összes olyan Szkript-et, amely mediaId-je megyezik a bemeneti paraméterként kapott mediaId-vel. + /// + /// + /// List<Shot> + List MasGetShotsPost (long? mediaId); + /// + /// Visszatér az illesztett transzkóder profil információkkal. + /// + /// List<TranscoderProfile> + List MasGetTranscodeProfilesGet (); + /// + /// fake hívás + /// + /// List<UserRight> + List MasGetUserRightGet (); + /// + /// nincs implementálva + /// + /// + void MasLogoutGet (); + /// + /// Szerializáláshoz beregisztrált objektum típusok, melyek object-ként mennének át a proxy-n. + /// + /// List<Object> + List MasRegisterGet (); + /// + /// Az osztály név és azonosító lista alapján az ItemManager-el eltávolítja az entitásokat az adatbázisból. + /// + /// + /// SystemResponse + SystemResponse MasRemoveAllPost (RemoveParameters removeParameters); + /// + /// Az osztály név és azonosító lista alapján az ItemManager-el eltávolítja az entitásokat az adatbázisból. + /// + /// + /// SystemResponse + SystemResponse MasRemovePost (RemoveParameters removeParameters); + /// + /// Elhelyez egy UserReplyMessage típusú üzenetet a motor rendszerüzenet várakozási sorába. + /// + /// + /// + void MasReplyMessagePost (ReplyMessageParameters replyMessageParameters); + /// + /// Munkafolyamat azonosító alapján egy új újraindítási kérelmet helyez el a motor rendszerüzenet várakozási sorába. + /// + /// + /// + void MasRestartJobPost (long? jobId); + /// + /// Munkafolyamat azonosító alapján egy új folytatási kérelmet helyez el a motor rendszerüzenet várakozási sorába. + /// + /// + /// + void MasResumeJobPost (long? jobId); + /// + /// Egy új/létezõ lista kategóriát ment el/módosít az adatbázisba. + /// + /// + /// DomainCategoryResponse + DomainCategoryResponse MasSaveDomainCategoryPost (DomainCategory domainCategory); + /// + /// Egy új/létezõ listát ment el/módosít az adatbázisba. + /// + /// + /// DomainResponse + DomainResponse MasSaveDomainPost (Domain domain); + /// + /// Egy új/létezõ mappát ment el/módosít az adatbázisba. + /// + /// + /// FolderResponse + FolderResponse MasSaveFolderPost (Folder folder); + /// + /// Egy új/létezõ Anyagot ment el/módosít az adatbázisba. + /// + /// + /// ItemResponse + ItemResponse MasSaveItemPost (Item item); + /// + /// Egy új/létezõ Anyag típust ment el/módosít az adatbázisba. + /// + /// + /// ItemTypeResponse + ItemTypeResponse MasSaveItemTypePost (ItemType itemType); + /// + /// Egy új/létezõ Kópiát ment el/módosít az adatbázisba. + /// + /// + /// MediaFileResponse + MediaFileResponse MasSaveMediaFilePost (MediaFile mediaFile); + /// + /// Egy új/létezõ Verziót ment el/módosít az adatbázisba. + /// + /// + /// MediaResponse + MediaResponse MasSaveMediaPost (Media media); + /// + /// Egy új/létezõ Meta adat elemet ment el/módosít az adatbázisba. + /// + /// + /// MetadataElementResponse + MetadataElementResponse MasSaveMetadataElementPost (MetadataElement metadataElement); + /// + /// Egy új/létezõ Meta adatot ment el/módosít az adatbázisba. + /// + /// + /// MetadataResponse + MetadataResponse MasSaveMetadataPost (Metadata metadata); + /// + /// Egy új/létezõ Meta adat típust ment el/módosít az adatbázisba. + /// + /// + /// MetadataTypeResponse + MetadataTypeResponse MasSaveMetadataTypePost (MetadataType metadataType); + /// + /// Egy új/létezõ Vágólista elemet ment el/módosít az adatbázisba. + /// + /// + /// SceneContentResponse + SceneContentResponse MasSaveSceneContentPost (SceneContent sceneContent); + /// + /// Egy új/létezõ Vágólistát ment el/módosít az adatbázisba. + /// + /// + /// SceneResponse + SceneResponse MasSaveScenePost (Scene scene); + /// + /// Egy új/létezõ Keresést ment el/módosít az adatbázisba. + /// + /// + /// SearchDefinitionResponse + SearchDefinitionResponse MasSaveSearchDefinitionPost (SearchDefinition searchDefinition); + /// + /// Egy új/létezõ Szkriptet ment el/módosít az adatbázisba. + /// + /// + /// ShotResponse + ShotResponse MasSaveShotPost (Shot shot); + /// + /// Egy új/létezõ Tárolót ment el/módosít az adatbázisba. + /// + /// + /// StoreResponse + StoreResponse MasSaveStorePost (Store store); + /// + /// Egy új/létezõ Tároló uri-t ment el/módosít az adatbázisba. + /// + /// + /// StoreUriResponse + StoreUriResponse MasSaveStoreUriPost (StoreUri storeUri); + /// + /// Egy új Sablont tölt be a folyamatkezelõ motor program betöltõjébe. + /// + /// + /// TemplateResponse + TemplateResponse MasSaveTemplatePost (Template template); + /// + /// Egy új/létezõ Felhasználót ment el/módosít az adatbázisba. + /// + /// + /// UserInfoResponse + UserInfoResponse MasSaveUserInfoPost (UserInfo userInfo); + /// + /// Anyagok keresése. A keresés elsõ futtatásakor csak az elsõ SearchResult tartalmaz anyagokat, a találati lista elsõ oldalát, cím szerint rendezetten. Újbóli futtatás esetén a paraméter megjelenítési információinak módosításával változtatható az anyagok listája. + /// + /// + /// List<SearchResult> + List MasSearchItemPost (QueryObject queryObject); + /// + /// Egy QueryObject paraméter alapján elkéri az ItemManager-tõl a paraméterben tárolt szûrési feltételeknek megfelelõ Job-ok listáját. + /// + /// + /// List<Job> + List MasSearchJobsPost (QueryObject parameter); + /// + /// Munkafolyamat motor leállítása. + /// + /// + void MasShutdownGet (); + /// + /// Munkafolyamat motor elindítása. + /// + /// + void MasStartupGet (); + /// + /// Munkafolyamat azonosító alapján egy új felfüggesztési kérelmet helyez el a motor rendszerüzenet várakozási sorába. + /// + /// + /// + void MasSuspendJobPost (long? jobId); + } + + /// + /// Represents a collection of functions to interact with the API endpoints + /// + public class DefaultApi : IDefaultApi + { + /// + /// Initializes a new instance of the class. + /// + /// an instance of ApiClient (optional) + /// + public DefaultApi(ApiClient apiClient = null) + { + if (apiClient == null) // use the default one in Configuration + this.ApiClient = Configuration.DefaultApiClient; + else + this.ApiClient = apiClient; + } + + /// + /// Initializes a new instance of the class. + /// + /// + public DefaultApi(String basePath) + { + this.ApiClient = new ApiClient(basePath); + } + + /// + /// Sets the base path of the API client. + /// + /// The base path + /// The base path + public void SetBasePath(String basePath) + { + this.ApiClient.BasePath = basePath; + } + + /// + /// Gets the base path of the API client. + /// + /// The base path + /// The base path + public String GetBasePath(String basePath) + { + return this.ApiClient.BasePath; + } + + /// + /// Gets or sets the API client. + /// + /// An instance of the ApiClient + public ApiClient ApiClient {get; set;} + + /// + /// sessionId alapján elkér a managertõl egy UserInfo-t. + /// + /// + /// UserInfo + public UserInfo LoginPost (LoginParameters username) + { + + // verify the required parameter 'username' is set + if (username == null) throw new ApiException(400, "Missing required parameter 'username' when calling LoginPost"); + + + var path = "/login"; + path = path.Replace("{format}", "json"); + + var queryParams = new Dictionary(); + var headerParams = new Dictionary(); + var formParams = new Dictionary(); + var fileParams = new Dictionary(); + String postBody = null; + + postBody = ApiClient.Serialize(username); // http body (model) parameter + + // authentication setting, if any + String[] authSettings = new String[] { "api_key" }; + + // make the HTTP request + IRestResponse response = (IRestResponse) ApiClient.CallApi(path, Method.POST, queryParams, postBody, headerParams, formParams, fileParams, authSettings); + + if (((int)response.StatusCode) >= 400) + throw new ApiException ((int)response.StatusCode, "Error calling LoginPost: " + response.Content, response.Content); + else if (((int)response.StatusCode) == 0) + throw new ApiException ((int)response.StatusCode, "Error calling LoginPost: " + response.ErrorMessage, response.ErrorMessage); + + return (UserInfo) ApiClient.Deserialize(response.Content, typeof(UserInfo), response.Headers); + } + + /// + /// A futó munkafolyamat leállításra kerül és kikerül a runQueue-ból. + /// + /// + /// + public void MasCancelJobPost (long? jobId) + { + + // verify the required parameter 'jobId' is set + if (jobId == null) throw new ApiException(400, "Missing required parameter 'jobId' when calling MasCancelJobPost"); + + + var path = "/mas/cancelJob"; + path = path.Replace("{format}", "json"); + + var queryParams = new Dictionary(); + var headerParams = new Dictionary(); + var formParams = new Dictionary(); + var fileParams = new Dictionary(); + String postBody = null; + + postBody = ApiClient.Serialize(jobId); // http body (model) parameter + + // authentication setting, if any + String[] authSettings = new String[] { "api_key" }; + + // make the HTTP request + IRestResponse response = (IRestResponse) ApiClient.CallApi(path, Method.POST, queryParams, postBody, headerParams, formParams, fileParams, authSettings); + + if (((int)response.StatusCode) >= 400) + throw new ApiException ((int)response.StatusCode, "Error calling MasCancelJobPost: " + response.Content, response.Content); + else if (((int)response.StatusCode) == 0) + throw new ApiException ((int)response.StatusCode, "Error calling MasCancelJobPost: " + response.ErrorMessage, response.ErrorMessage); + + return; + } + + /// + /// A kliens felõl érkezõ új munkafolyamat indítása, amely a JobEngine submit metódusát hívja és jobStart paraméter alapján eldönti, hogy a munkafolyamat milyen módon kerüljön be a folyamatütemezõbe. + /// + /// + /// Job + public Job MasCreateJobPost (CreateJobParameters createJobParameters) + { + + // verify the required parameter 'createJobParameters' is set + if (createJobParameters == null) throw new ApiException(400, "Missing required parameter 'createJobParameters' when calling MasCreateJobPost"); + + + var path = "/mas/createJob"; + path = path.Replace("{format}", "json"); + + var queryParams = new Dictionary(); + var headerParams = new Dictionary(); + var formParams = new Dictionary(); + var fileParams = new Dictionary(); + String postBody = null; + + postBody = ApiClient.Serialize(createJobParameters); // http body (model) parameter + + // authentication setting, if any + String[] authSettings = new String[] { "api_key" }; + + // make the HTTP request + IRestResponse response = (IRestResponse) ApiClient.CallApi(path, Method.POST, queryParams, postBody, headerParams, formParams, fileParams, authSettings); + + if (((int)response.StatusCode) >= 400) + throw new ApiException ((int)response.StatusCode, "Error calling MasCreateJobPost: " + response.Content, response.Content); + else if (((int)response.StatusCode) == 0) + throw new ApiException ((int)response.StatusCode, "Error calling MasCreateJobPost: " + response.ErrorMessage, response.ErrorMessage); + + return (Job) ApiClient.Deserialize(response.Content, typeof(Job), response.Headers); + } + + /// + /// Név alapján kitörli a Sablont. + /// + /// + /// bool? + public bool? MasDeleteTemplatePost (string name) + { + + // verify the required parameter 'name' is set + if (name == null) throw new ApiException(400, "Missing required parameter 'name' when calling MasDeleteTemplatePost"); + + + var path = "/mas/deleteTemplate"; + path = path.Replace("{format}", "json"); + + var queryParams = new Dictionary(); + var headerParams = new Dictionary(); + var formParams = new Dictionary(); + var fileParams = new Dictionary(); + String postBody = null; + + postBody = ApiClient.Serialize(name); // http body (model) parameter + + // authentication setting, if any + String[] authSettings = new String[] { "api_key" }; + + // make the HTTP request + IRestResponse response = (IRestResponse) ApiClient.CallApi(path, Method.POST, queryParams, postBody, headerParams, formParams, fileParams, authSettings); + + if (((int)response.StatusCode) >= 400) + throw new ApiException ((int)response.StatusCode, "Error calling MasDeleteTemplatePost: " + response.Content, response.Content); + else if (((int)response.StatusCode) == 0) + throw new ApiException ((int)response.StatusCode, "Error calling MasDeleteTemplatePost: " + response.ErrorMessage, response.ErrorMessage); + + return (bool?) ApiClient.Deserialize(response.Content, typeof(bool?), response.Headers); + } + + /// + /// Az ItemManager-tõl elkéri az adatbázisban eltárolt összes DomainCategory típusú entitást. + /// + /// List<DomainCategory> + public List MasGetAllDomainCategoryGet () + { + + + var path = "/mas/getAllDomainCategory"; + path = path.Replace("{format}", "json"); + + var queryParams = new Dictionary(); + var headerParams = new Dictionary(); + var formParams = new Dictionary(); + var fileParams = new Dictionary(); + String postBody = null; + + + // authentication setting, if any + String[] authSettings = new String[] { "api_key" }; + + // make the HTTP request + IRestResponse response = (IRestResponse) ApiClient.CallApi(path, Method.GET, queryParams, postBody, headerParams, formParams, fileParams, authSettings); + + if (((int)response.StatusCode) >= 400) + throw new ApiException ((int)response.StatusCode, "Error calling MasGetAllDomainCategoryGet: " + response.Content, response.Content); + else if (((int)response.StatusCode) == 0) + throw new ApiException ((int)response.StatusCode, "Error calling MasGetAllDomainCategoryGet: " + response.ErrorMessage, response.ErrorMessage); + + return (List) ApiClient.Deserialize(response.Content, typeof(List), response.Headers); + } + + /// + /// Az ItemManager-tõl elkéri az adatbázisban eltárolt összes MetadataElement típusú entitást. + /// + /// List<MetadataElement> + public List MasGetAllMetadataElementGet () + { + + + var path = "/mas/getAllMetadataElement"; + path = path.Replace("{format}", "json"); + + var queryParams = new Dictionary(); + var headerParams = new Dictionary(); + var formParams = new Dictionary(); + var fileParams = new Dictionary(); + String postBody = null; + + + // authentication setting, if any + String[] authSettings = new String[] { "api_key" }; + + // make the HTTP request + IRestResponse response = (IRestResponse) ApiClient.CallApi(path, Method.GET, queryParams, postBody, headerParams, formParams, fileParams, authSettings); + + if (((int)response.StatusCode) >= 400) + throw new ApiException ((int)response.StatusCode, "Error calling MasGetAllMetadataElementGet: " + response.Content, response.Content); + else if (((int)response.StatusCode) == 0) + throw new ApiException ((int)response.StatusCode, "Error calling MasGetAllMetadataElementGet: " + response.ErrorMessage, response.ErrorMessage); + + return (List) ApiClient.Deserialize(response.Content, typeof(List), response.Headers); + } + + /// + /// Az ItemManager-tõl elkéri az adatbázisban eltárolt összes MetadataType típusú entitást. + /// + /// List<MetadataType> + public List MasGetAllMetadataTypeGet () + { + + + var path = "/mas/getAllMetadataType"; + path = path.Replace("{format}", "json"); + + var queryParams = new Dictionary(); + var headerParams = new Dictionary(); + var formParams = new Dictionary(); + var fileParams = new Dictionary(); + String postBody = null; + + + // authentication setting, if any + String[] authSettings = new String[] { "api_key" }; + + // make the HTTP request + IRestResponse response = (IRestResponse) ApiClient.CallApi(path, Method.GET, queryParams, postBody, headerParams, formParams, fileParams, authSettings); + + if (((int)response.StatusCode) >= 400) + throw new ApiException ((int)response.StatusCode, "Error calling MasGetAllMetadataTypeGet: " + response.Content, response.Content); + else if (((int)response.StatusCode) == 0) + throw new ApiException ((int)response.StatusCode, "Error calling MasGetAllMetadataTypeGet: " + response.ErrorMessage, response.ErrorMessage); + + return (List) ApiClient.Deserialize(response.Content, typeof(List), response.Headers); + } + + /// + /// Fake hívás, így a webservice-en keresztül elérhetõ a Signal objektum. + /// + /// List<Signal> + public List MasGetAllSignalGet () + { + + + var path = "/mas/getAllSignal"; + path = path.Replace("{format}", "json"); + + var queryParams = new Dictionary(); + var headerParams = new Dictionary(); + var formParams = new Dictionary(); + var fileParams = new Dictionary(); + String postBody = null; + + + // authentication setting, if any + String[] authSettings = new String[] { "api_key" }; + + // make the HTTP request + IRestResponse response = (IRestResponse) ApiClient.CallApi(path, Method.GET, queryParams, postBody, headerParams, formParams, fileParams, authSettings); + + if (((int)response.StatusCode) >= 400) + throw new ApiException ((int)response.StatusCode, "Error calling MasGetAllSignalGet: " + response.Content, response.Content); + else if (((int)response.StatusCode) == 0) + throw new ApiException ((int)response.StatusCode, "Error calling MasGetAllSignalGet: " + response.ErrorMessage, response.ErrorMessage); + + return (List) ApiClient.Deserialize(response.Content, typeof(List), response.Headers); + } + + /// + /// Az ItemManager-tõl elkéri az adatbázisban eltárolt összes Store típusú entitást. + /// + /// List<Store> + public List MasGetAllStoreGet () + { + + + var path = "/mas/getAllStore"; + path = path.Replace("{format}", "json"); + + var queryParams = new Dictionary(); + var headerParams = new Dictionary(); + var formParams = new Dictionary(); + var fileParams = new Dictionary(); + String postBody = null; + + + // authentication setting, if any + String[] authSettings = new String[] { "api_key" }; + + // make the HTTP request + IRestResponse response = (IRestResponse) ApiClient.CallApi(path, Method.GET, queryParams, postBody, headerParams, formParams, fileParams, authSettings); + + if (((int)response.StatusCode) >= 400) + throw new ApiException ((int)response.StatusCode, "Error calling MasGetAllStoreGet: " + response.Content, response.Content); + else if (((int)response.StatusCode) == 0) + throw new ApiException ((int)response.StatusCode, "Error calling MasGetAllStoreGet: " + response.ErrorMessage, response.ErrorMessage); + + return (List) ApiClient.Deserialize(response.Content, typeof(List), response.Headers); + } + + /// + /// Az ItemManager-tõl elkéri az adatbázisban eltárolt összes UserInfo típusú entitást. + /// + /// List<UserInfo> + public List MasGetAllUserInfoGet () + { + + + var path = "/mas/getAllUserInfo"; + path = path.Replace("{format}", "json"); + + var queryParams = new Dictionary(); + var headerParams = new Dictionary(); + var formParams = new Dictionary(); + var fileParams = new Dictionary(); + String postBody = null; + + + // authentication setting, if any + String[] authSettings = new String[] { "api_key" }; + + // make the HTTP request + IRestResponse response = (IRestResponse) ApiClient.CallApi(path, Method.GET, queryParams, postBody, headerParams, formParams, fileParams, authSettings); + + if (((int)response.StatusCode) >= 400) + throw new ApiException ((int)response.StatusCode, "Error calling MasGetAllUserInfoGet: " + response.Content, response.Content); + else if (((int)response.StatusCode) == 0) + throw new ApiException ((int)response.StatusCode, "Error calling MasGetAllUserInfoGet: " + response.ErrorMessage, response.ErrorMessage); + + return (List) ApiClient.Deserialize(response.Content, typeof(List), response.Headers); + } + + /// + /// Fake hívás. + /// + /// Domains + public Domains MasGetDomainsGet () + { + + + var path = "/mas/getDomains"; + path = path.Replace("{format}", "json"); + + var queryParams = new Dictionary(); + var headerParams = new Dictionary(); + var formParams = new Dictionary(); + var fileParams = new Dictionary(); + String postBody = null; + + + // authentication setting, if any + String[] authSettings = new String[] { "api_key" }; + + // make the HTTP request + IRestResponse response = (IRestResponse) ApiClient.CallApi(path, Method.GET, queryParams, postBody, headerParams, formParams, fileParams, authSettings); + + if (((int)response.StatusCode) >= 400) + throw new ApiException ((int)response.StatusCode, "Error calling MasGetDomainsGet: " + response.Content, response.Content); + else if (((int)response.StatusCode) == 0) + throw new ApiException ((int)response.StatusCode, "Error calling MasGetDomainsGet: " + response.ErrorMessage, response.ErrorMessage); + + return (Domains) ApiClient.Deserialize(response.Content, typeof(Domains), response.Headers); + } + + /// + /// Az ItemManager elkéri azokat a Domain-eket, melyek domainCategoryId-je és filtere egyenlõ filterId-val, illetve filter-el. + /// + /// + /// List<Domain> + public List MasGetFilteredDomainByDisplayPost (GetFilteredDomainByDisplayParameters getFilteredDomainByDisplayParameters) + { + + // verify the required parameter 'getFilteredDomainByDisplayParameters' is set + if (getFilteredDomainByDisplayParameters == null) throw new ApiException(400, "Missing required parameter 'getFilteredDomainByDisplayParameters' when calling MasGetFilteredDomainByDisplayPost"); + + + var path = "/mas/getFilteredDomainByDisplay"; + path = path.Replace("{format}", "json"); + + var queryParams = new Dictionary(); + var headerParams = new Dictionary(); + var formParams = new Dictionary(); + var fileParams = new Dictionary(); + String postBody = null; + + postBody = ApiClient.Serialize(getFilteredDomainByDisplayParameters); // http body (model) parameter + + // authentication setting, if any + String[] authSettings = new String[] { "api_key" }; + + // make the HTTP request + IRestResponse response = (IRestResponse) ApiClient.CallApi(path, Method.POST, queryParams, postBody, headerParams, formParams, fileParams, authSettings); + + if (((int)response.StatusCode) >= 400) + throw new ApiException ((int)response.StatusCode, "Error calling MasGetFilteredDomainByDisplayPost: " + response.Content, response.Content); + else if (((int)response.StatusCode) == 0) + throw new ApiException ((int)response.StatusCode, "Error calling MasGetFilteredDomainByDisplayPost: " + response.ErrorMessage, response.ErrorMessage); + + return (List) ApiClient.Deserialize(response.Content, typeof(List), response.Headers); + } + + /// + /// Az ItemManager elkéri azokat a Domain-eket, melyek domainCategoryId-je egyenlõ filterId. + /// + /// + /// List<Domain> + public List MasGetFilteredDomainPost (long? filterId) + { + + // verify the required parameter 'filterId' is set + if (filterId == null) throw new ApiException(400, "Missing required parameter 'filterId' when calling MasGetFilteredDomainPost"); + + + var path = "/mas/getFilteredDomain"; + path = path.Replace("{format}", "json"); + + var queryParams = new Dictionary(); + var headerParams = new Dictionary(); + var formParams = new Dictionary(); + var fileParams = new Dictionary(); + String postBody = null; + + postBody = ApiClient.Serialize(filterId); // http body (model) parameter + + // authentication setting, if any + String[] authSettings = new String[] { "api_key" }; + + // make the HTTP request + IRestResponse response = (IRestResponse) ApiClient.CallApi(path, Method.POST, queryParams, postBody, headerParams, formParams, fileParams, authSettings); + + if (((int)response.StatusCode) >= 400) + throw new ApiException ((int)response.StatusCode, "Error calling MasGetFilteredDomainPost: " + response.Content, response.Content); + else if (((int)response.StatusCode) == 0) + throw new ApiException ((int)response.StatusCode, "Error calling MasGetFilteredDomainPost: " + response.ErrorMessage, response.ErrorMessage); + + return (List) ApiClient.Deserialize(response.Content, typeof(List), response.Headers); + } + + /// + /// filterId alapján elkéri a Foldereket az ItemManager-tõl. + /// + /// + /// List<Folder> + public List MasGetFilteredFolderPost (long? filterId) + { + + // verify the required parameter 'filterId' is set + if (filterId == null) throw new ApiException(400, "Missing required parameter 'filterId' when calling MasGetFilteredFolderPost"); + + + var path = "/mas/getFilteredFolder"; + path = path.Replace("{format}", "json"); + + var queryParams = new Dictionary(); + var headerParams = new Dictionary(); + var formParams = new Dictionary(); + var fileParams = new Dictionary(); + String postBody = null; + + postBody = ApiClient.Serialize(filterId); // http body (model) parameter + + // authentication setting, if any + String[] authSettings = new String[] { "api_key" }; + + // make the HTTP request + IRestResponse response = (IRestResponse) ApiClient.CallApi(path, Method.POST, queryParams, postBody, headerParams, formParams, fileParams, authSettings); + + if (((int)response.StatusCode) >= 400) + throw new ApiException ((int)response.StatusCode, "Error calling MasGetFilteredFolderPost: " + response.Content, response.Content); + else if (((int)response.StatusCode) == 0) + throw new ApiException ((int)response.StatusCode, "Error calling MasGetFilteredFolderPost: " + response.ErrorMessage, response.ErrorMessage); + + return (List) ApiClient.Deserialize(response.Content, typeof(List), response.Headers); + } + + /// + /// Elkéri az ItemManager-tõl az összes olyan Médiát, amelynek itemId-ja megegyezik a bemeneti paraméterként kapott filterId-val. + /// + /// + /// List<Media> + public List MasGetFilteredMediaPost (long? filterId) + { + + // verify the required parameter 'filterId' is set + if (filterId == null) throw new ApiException(400, "Missing required parameter 'filterId' when calling MasGetFilteredMediaPost"); + + + var path = "/mas/getFilteredMedia"; + path = path.Replace("{format}", "json"); + + var queryParams = new Dictionary(); + var headerParams = new Dictionary(); + var formParams = new Dictionary(); + var fileParams = new Dictionary(); + String postBody = null; + + postBody = ApiClient.Serialize(filterId); // http body (model) parameter + + // authentication setting, if any + String[] authSettings = new String[] { "api_key" }; + + // make the HTTP request + IRestResponse response = (IRestResponse) ApiClient.CallApi(path, Method.POST, queryParams, postBody, headerParams, formParams, fileParams, authSettings); + + if (((int)response.StatusCode) >= 400) + throw new ApiException ((int)response.StatusCode, "Error calling MasGetFilteredMediaPost: " + response.Content, response.Content); + else if (((int)response.StatusCode) == 0) + throw new ApiException ((int)response.StatusCode, "Error calling MasGetFilteredMediaPost: " + response.ErrorMessage, response.ErrorMessage); + + return (List) ApiClient.Deserialize(response.Content, typeof(List), response.Headers); + } + + /// + /// ItemManager-tõl elkéri az összes olyan mentett vágólistát, amely name-el kezdõdik. + /// + /// + /// List<Scene> + public List MasGetFilteredScenePost (GetFilteredParameters getFilteredParameters) + { + + // verify the required parameter 'getFilteredParameters' is set + if (getFilteredParameters == null) throw new ApiException(400, "Missing required parameter 'getFilteredParameters' when calling MasGetFilteredScenePost"); + + + var path = "/mas/getFilteredScene"; + path = path.Replace("{format}", "json"); + + var queryParams = new Dictionary(); + var headerParams = new Dictionary(); + var formParams = new Dictionary(); + var fileParams = new Dictionary(); + String postBody = null; + + postBody = ApiClient.Serialize(getFilteredParameters); // http body (model) parameter + + // authentication setting, if any + String[] authSettings = new String[] { "api_key" }; + + // make the HTTP request + IRestResponse response = (IRestResponse) ApiClient.CallApi(path, Method.POST, queryParams, postBody, headerParams, formParams, fileParams, authSettings); + + if (((int)response.StatusCode) >= 400) + throw new ApiException ((int)response.StatusCode, "Error calling MasGetFilteredScenePost: " + response.Content, response.Content); + else if (((int)response.StatusCode) == 0) + throw new ApiException ((int)response.StatusCode, "Error calling MasGetFilteredScenePost: " + response.ErrorMessage, response.ErrorMessage); + + return (List) ApiClient.Deserialize(response.Content, typeof(List), response.Headers); + } + + /// + /// ItemManager-tõl elkéri az összes olyan mentett keresést, amely filter-rel kezdõdik. + /// + /// + /// List<SearchDefinition> + public List MasGetFilteredSearchDefinitionPost (GetFilteredParameters getFilteredParameters) + { + + // verify the required parameter 'getFilteredParameters' is set + if (getFilteredParameters == null) throw new ApiException(400, "Missing required parameter 'getFilteredParameters' when calling MasGetFilteredSearchDefinitionPost"); + + + var path = "/mas/getFilteredSearchDefinition"; + path = path.Replace("{format}", "json"); + + var queryParams = new Dictionary(); + var headerParams = new Dictionary(); + var formParams = new Dictionary(); + var fileParams = new Dictionary(); + String postBody = null; + + postBody = ApiClient.Serialize(getFilteredParameters); // http body (model) parameter + + // authentication setting, if any + String[] authSettings = new String[] { "api_key" }; + + // make the HTTP request + IRestResponse response = (IRestResponse) ApiClient.CallApi(path, Method.POST, queryParams, postBody, headerParams, formParams, fileParams, authSettings); + + if (((int)response.StatusCode) >= 400) + throw new ApiException ((int)response.StatusCode, "Error calling MasGetFilteredSearchDefinitionPost: " + response.Content, response.Content); + else if (((int)response.StatusCode) == 0) + throw new ApiException ((int)response.StatusCode, "Error calling MasGetFilteredSearchDefinitionPost: " + response.ErrorMessage, response.ErrorMessage); + + return (List) ApiClient.Deserialize(response.Content, typeof(List), response.Headers); + } + + /// + /// ItemManager-tõl elkéri az összes olyan mappát, amely childId-ja filterId-vel egyenlõ. + /// + /// + /// List<Item> + public List MasGetFoldersPost (long? filterId) + { + + // verify the required parameter 'filterId' is set + if (filterId == null) throw new ApiException(400, "Missing required parameter 'filterId' when calling MasGetFoldersPost"); + + + var path = "/mas/getFolders"; + path = path.Replace("{format}", "json"); + + var queryParams = new Dictionary(); + var headerParams = new Dictionary(); + var formParams = new Dictionary(); + var fileParams = new Dictionary(); + String postBody = null; + + postBody = ApiClient.Serialize(filterId); // http body (model) parameter + + // authentication setting, if any + String[] authSettings = new String[] { "api_key" }; + + // make the HTTP request + IRestResponse response = (IRestResponse) ApiClient.CallApi(path, Method.POST, queryParams, postBody, headerParams, formParams, fileParams, authSettings); + + if (((int)response.StatusCode) >= 400) + throw new ApiException ((int)response.StatusCode, "Error calling MasGetFoldersPost: " + response.Content, response.Content); + else if (((int)response.StatusCode) == 0) + throw new ApiException ((int)response.StatusCode, "Error calling MasGetFoldersPost: " + response.ErrorMessage, response.ErrorMessage); + + return (List) ApiClient.Deserialize(response.Content, typeof(List), response.Headers); + } + + /// + /// ItemManager-tõl elkéri a bemeneti paraméterként kapott id-vel rendelkezõ Item-et. + /// + /// + /// Item + public Item MasGetItemPost (long? id) + { + + // verify the required parameter 'id' is set + if (id == null) throw new ApiException(400, "Missing required parameter 'id' when calling MasGetItemPost"); + + + var path = "/mas/getItem"; + path = path.Replace("{format}", "json"); + + var queryParams = new Dictionary(); + var headerParams = new Dictionary(); + var formParams = new Dictionary(); + var fileParams = new Dictionary(); + String postBody = null; + + postBody = ApiClient.Serialize(id); // http body (model) parameter + + // authentication setting, if any + String[] authSettings = new String[] { "api_key" }; + + // make the HTTP request + IRestResponse response = (IRestResponse) ApiClient.CallApi(path, Method.POST, queryParams, postBody, headerParams, formParams, fileParams, authSettings); + + if (((int)response.StatusCode) >= 400) + throw new ApiException ((int)response.StatusCode, "Error calling MasGetItemPost: " + response.Content, response.Content); + else if (((int)response.StatusCode) == 0) + throw new ApiException ((int)response.StatusCode, "Error calling MasGetItemPost: " + response.ErrorMessage, response.ErrorMessage); + + return (Item) ApiClient.Deserialize(response.Content, typeof(Item), response.Headers); + } + + /// + /// ItemManager-tõl elkéri a bemeneti paraméterként kapott id-vel rendelkezõ ItemType-ot. + /// + /// + /// ItemType + public ItemType MasGetItemTypePost (long? id) + { + + // verify the required parameter 'id' is set + if (id == null) throw new ApiException(400, "Missing required parameter 'id' when calling MasGetItemTypePost"); + + + var path = "/mas/getItemType"; + path = path.Replace("{format}", "json"); + + var queryParams = new Dictionary(); + var headerParams = new Dictionary(); + var formParams = new Dictionary(); + var fileParams = new Dictionary(); + String postBody = null; + + postBody = ApiClient.Serialize(id); // http body (model) parameter + + // authentication setting, if any + String[] authSettings = new String[] { "api_key" }; + + // make the HTTP request + IRestResponse response = (IRestResponse) ApiClient.CallApi(path, Method.POST, queryParams, postBody, headerParams, formParams, fileParams, authSettings); + + if (((int)response.StatusCode) >= 400) + throw new ApiException ((int)response.StatusCode, "Error calling MasGetItemTypePost: " + response.Content, response.Content); + else if (((int)response.StatusCode) == 0) + throw new ApiException ((int)response.StatusCode, "Error calling MasGetItemTypePost: " + response.ErrorMessage, response.ErrorMessage); + + return (ItemType) ApiClient.Deserialize(response.Content, typeof(ItemType), response.Headers); + } + + /// + /// Típusleírók lekérdezése. Az adatmodell dinamikus, az anyag és verzió objektumok bõvítését szolgáló metaadatokat tartalmazza, kiegészítve az adatbázisban elõre definiált mezõk metaadat leíróival. + /// + /// List<ItemType> + public List MasGetItemTypesGet () + { + + + var path = "/mas/getItemTypes"; + path = path.Replace("{format}", "json"); + + var queryParams = new Dictionary(); + var headerParams = new Dictionary(); + var formParams = new Dictionary(); + var fileParams = new Dictionary(); + String postBody = null; + + + // authentication setting, if any + String[] authSettings = new String[] { "api_key" }; + + // make the HTTP request + IRestResponse response = (IRestResponse) ApiClient.CallApi(path, Method.GET, queryParams, postBody, headerParams, formParams, fileParams, authSettings); + + if (((int)response.StatusCode) >= 400) + throw new ApiException ((int)response.StatusCode, "Error calling MasGetItemTypesGet: " + response.Content, response.Content); + else if (((int)response.StatusCode) == 0) + throw new ApiException ((int)response.StatusCode, "Error calling MasGetItemTypesGet: " + response.ErrorMessage, response.ErrorMessage); + + return (List) ApiClient.Deserialize(response.Content, typeof(List), response.Headers); + } + + /// + /// ItemManager-tõl elkéri a bemeneti paraméterként kapott jobId-vel rendelkezõ Job-ot. + /// + /// + /// Job + public Job MasGetJobPost (long? jobId) + { + + // verify the required parameter 'jobId' is set + if (jobId == null) throw new ApiException(400, "Missing required parameter 'jobId' when calling MasGetJobPost"); + + + var path = "/mas/getJob"; + path = path.Replace("{format}", "json"); + + var queryParams = new Dictionary(); + var headerParams = new Dictionary(); + var formParams = new Dictionary(); + var fileParams = new Dictionary(); + String postBody = null; + + postBody = ApiClient.Serialize(jobId); // http body (model) parameter + + // authentication setting, if any + String[] authSettings = new String[] { "api_key" }; + + // make the HTTP request + IRestResponse response = (IRestResponse) ApiClient.CallApi(path, Method.POST, queryParams, postBody, headerParams, formParams, fileParams, authSettings); + + if (((int)response.StatusCode) >= 400) + throw new ApiException ((int)response.StatusCode, "Error calling MasGetJobPost: " + response.Content, response.Content); + else if (((int)response.StatusCode) == 0) + throw new ApiException ((int)response.StatusCode, "Error calling MasGetJobPost: " + response.ErrorMessage, response.ErrorMessage); + + return (Job) ApiClient.Deserialize(response.Content, typeof(Job), response.Headers); + } + + /// + /// Visszaadja a rendszerben tárolt összes sablon-t és végrehajtó osztályok listáját egy JobTemplatesInfo osztályba csomagolva. + /// + /// JobTemplatesInfo + public JobTemplatesInfo MasGetJobTemplatesInfoGet () + { + + + var path = "/mas/getJobTemplatesInfo"; + path = path.Replace("{format}", "json"); + + var queryParams = new Dictionary(); + var headerParams = new Dictionary(); + var formParams = new Dictionary(); + var fileParams = new Dictionary(); + String postBody = null; + + + // authentication setting, if any + String[] authSettings = new String[] { "api_key" }; + + // make the HTTP request + IRestResponse response = (IRestResponse) ApiClient.CallApi(path, Method.GET, queryParams, postBody, headerParams, formParams, fileParams, authSettings); + + if (((int)response.StatusCode) >= 400) + throw new ApiException ((int)response.StatusCode, "Error calling MasGetJobTemplatesInfoGet: " + response.Content, response.Content); + else if (((int)response.StatusCode) == 0) + throw new ApiException ((int)response.StatusCode, "Error calling MasGetJobTemplatesInfoGet: " + response.ErrorMessage, response.ErrorMessage); + + return (JobTemplatesInfo) ApiClient.Deserialize(response.Content, typeof(JobTemplatesInfo), response.Headers); + } + + /// + /// Naplózási szint alapján visszaad egy napló listát. + /// + /// + /// List<LogEvent> + public List MasGetLogEventsPost (LogLevel logLevel) + { + + // verify the required parameter 'logLevel' is set + if (logLevel == null) throw new ApiException(400, "Missing required parameter 'logLevel' when calling MasGetLogEventsPost"); + + + var path = "/mas/getLogEvents"; + path = path.Replace("{format}", "json"); + + var queryParams = new Dictionary(); + var headerParams = new Dictionary(); + var formParams = new Dictionary(); + var fileParams = new Dictionary(); + String postBody = null; + + postBody = ApiClient.Serialize(logLevel); // http body (model) parameter + + // authentication setting, if any + String[] authSettings = new String[] { "api_key" }; + + // make the HTTP request + IRestResponse response = (IRestResponse) ApiClient.CallApi(path, Method.POST, queryParams, postBody, headerParams, formParams, fileParams, authSettings); + + if (((int)response.StatusCode) >= 400) + throw new ApiException ((int)response.StatusCode, "Error calling MasGetLogEventsPost: " + response.Content, response.Content); + else if (((int)response.StatusCode) == 0) + throw new ApiException ((int)response.StatusCode, "Error calling MasGetLogEventsPost: " + response.ErrorMessage, response.ErrorMessage); + + return (List) ApiClient.Deserialize(response.Content, typeof(List), response.Headers); + } + + /// + /// ItemManager-tõl elkéri a bemeneti paraméterként kapott id-vel rendelkezõ Media-t. + /// + /// + /// Media + public Media MasGetMediaPost (long? id) + { + + // verify the required parameter 'id' is set + if (id == null) throw new ApiException(400, "Missing required parameter 'id' when calling MasGetMediaPost"); + + + var path = "/mas/getMedia"; + path = path.Replace("{format}", "json"); + + var queryParams = new Dictionary(); + var headerParams = new Dictionary(); + var formParams = new Dictionary(); + var fileParams = new Dictionary(); + String postBody = null; + + postBody = ApiClient.Serialize(id); // http body (model) parameter + + // authentication setting, if any + String[] authSettings = new String[] { "api_key" }; + + // make the HTTP request + IRestResponse response = (IRestResponse) ApiClient.CallApi(path, Method.POST, queryParams, postBody, headerParams, formParams, fileParams, authSettings); + + if (((int)response.StatusCode) >= 400) + throw new ApiException ((int)response.StatusCode, "Error calling MasGetMediaPost: " + response.Content, response.Content); + else if (((int)response.StatusCode) == 0) + throw new ApiException ((int)response.StatusCode, "Error calling MasGetMediaPost: " + response.ErrorMessage, response.ErrorMessage); + + return (Media) ApiClient.Deserialize(response.Content, typeof(Media), response.Headers); + } + + /// + /// Visszaadja a JobEngine getUserMessageQueues() lista méretét. + /// + /// int? + public int? MasGetMessageCountGet () + { + + + var path = "/mas/getMessageCount"; + path = path.Replace("{format}", "json"); + + var queryParams = new Dictionary(); + var headerParams = new Dictionary(); + var formParams = new Dictionary(); + var fileParams = new Dictionary(); + String postBody = null; + + + // authentication setting, if any + String[] authSettings = new String[] { "api_key" }; + + // make the HTTP request + IRestResponse response = (IRestResponse) ApiClient.CallApi(path, Method.GET, queryParams, postBody, headerParams, formParams, fileParams, authSettings); + + if (((int)response.StatusCode) >= 400) + throw new ApiException ((int)response.StatusCode, "Error calling MasGetMessageCountGet: " + response.Content, response.Content); + else if (((int)response.StatusCode) == 0) + throw new ApiException ((int)response.StatusCode, "Error calling MasGetMessageCountGet: " + response.ErrorMessage, response.ErrorMessage); + + return (int?) ApiClient.Deserialize(response.Content, typeof(int?), response.Headers); + } + + /// + /// Visszadja messageId alapján az a UserMessage-et, amely a JobEngine getUserMessageQueues() listájában van. + /// + /// + /// UserMessage + public UserMessage MasGetMessagePost (long? messageId) + { + + // verify the required parameter 'messageId' is set + if (messageId == null) throw new ApiException(400, "Missing required parameter 'messageId' when calling MasGetMessagePost"); + + + var path = "/mas/getMessage"; + path = path.Replace("{format}", "json"); + + var queryParams = new Dictionary(); + var headerParams = new Dictionary(); + var formParams = new Dictionary(); + var fileParams = new Dictionary(); + String postBody = null; + + postBody = ApiClient.Serialize(messageId); // http body (model) parameter + + // authentication setting, if any + String[] authSettings = new String[] { "api_key" }; + + // make the HTTP request + IRestResponse response = (IRestResponse) ApiClient.CallApi(path, Method.POST, queryParams, postBody, headerParams, formParams, fileParams, authSettings); + + if (((int)response.StatusCode) >= 400) + throw new ApiException ((int)response.StatusCode, "Error calling MasGetMessagePost: " + response.Content, response.Content); + else if (((int)response.StatusCode) == 0) + throw new ApiException ((int)response.StatusCode, "Error calling MasGetMessagePost: " + response.ErrorMessage, response.ErrorMessage); + + return (UserMessage) ApiClient.Deserialize(response.Content, typeof(UserMessage), response.Headers); + } + + /// + /// Visszaadja a JobEngine getUserMessageQueues()-ban lévõ UserMessage-ek listáját. + /// + /// List<UserMessage> + public List MasGetMessagesGet () + { + + + var path = "/mas/getMessages"; + path = path.Replace("{format}", "json"); + + var queryParams = new Dictionary(); + var headerParams = new Dictionary(); + var formParams = new Dictionary(); + var fileParams = new Dictionary(); + String postBody = null; + + + // authentication setting, if any + String[] authSettings = new String[] { "api_key" }; + + // make the HTTP request + IRestResponse response = (IRestResponse) ApiClient.CallApi(path, Method.GET, queryParams, postBody, headerParams, formParams, fileParams, authSettings); + + if (((int)response.StatusCode) >= 400) + throw new ApiException ((int)response.StatusCode, "Error calling MasGetMessagesGet: " + response.Content, response.Content); + else if (((int)response.StatusCode) == 0) + throw new ApiException ((int)response.StatusCode, "Error calling MasGetMessagesGet: " + response.ErrorMessage, response.ErrorMessage); + + return (List) ApiClient.Deserialize(response.Content, typeof(List), response.Headers); + } + + /// + /// fake hívás. + /// + /// MdType + public MdType MasGetMetadataTypeGet () + { + + + var path = "/mas/getMetadataType"; + path = path.Replace("{format}", "json"); + + var queryParams = new Dictionary(); + var headerParams = new Dictionary(); + var formParams = new Dictionary(); + var fileParams = new Dictionary(); + String postBody = null; + + + // authentication setting, if any + String[] authSettings = new String[] { "api_key" }; + + // make the HTTP request + IRestResponse response = (IRestResponse) ApiClient.CallApi(path, Method.GET, queryParams, postBody, headerParams, formParams, fileParams, authSettings); + + if (((int)response.StatusCode) >= 400) + throw new ApiException ((int)response.StatusCode, "Error calling MasGetMetadataTypeGet: " + response.Content, response.Content); + else if (((int)response.StatusCode) == 0) + throw new ApiException ((int)response.StatusCode, "Error calling MasGetMetadataTypeGet: " + response.ErrorMessage, response.ErrorMessage); + + return (MdType) ApiClient.Deserialize(response.Content, typeof(MdType), response.Headers); + } + + /// + /// A bemeneti paraméterként kapott storeUri-tól elkéri a hozzá tartozó remote file-okat. + /// + /// + /// RemoteFileResponse + public RemoteFileResponse MasGetRemoteFilesPost (StoreUri id) + { + + // verify the required parameter 'id' is set + if (id == null) throw new ApiException(400, "Missing required parameter 'id' when calling MasGetRemoteFilesPost"); + + + var path = "/mas/getRemoteFiles"; + path = path.Replace("{format}", "json"); + + var queryParams = new Dictionary(); + var headerParams = new Dictionary(); + var formParams = new Dictionary(); + var fileParams = new Dictionary(); + String postBody = null; + + postBody = ApiClient.Serialize(id); // http body (model) parameter + + // authentication setting, if any + String[] authSettings = new String[] { "api_key" }; + + // make the HTTP request + IRestResponse response = (IRestResponse) ApiClient.CallApi(path, Method.POST, queryParams, postBody, headerParams, formParams, fileParams, authSettings); + + if (((int)response.StatusCode) >= 400) + throw new ApiException ((int)response.StatusCode, "Error calling MasGetRemoteFilesPost: " + response.Content, response.Content); + else if (((int)response.StatusCode) == 0) + throw new ApiException ((int)response.StatusCode, "Error calling MasGetRemoteFilesPost: " + response.ErrorMessage, response.ErrorMessage); + + return (RemoteFileResponse) ApiClient.Deserialize(response.Content, typeof(RemoteFileResponse), response.Headers); + } + + /// + /// Az id azonosítóval rendelkezõ Scene objektumot kéri el az ItemManager-tõl. + /// + /// + /// Scene + public Scene MasGetScenePost (long? id) + { + + // verify the required parameter 'id' is set + if (id == null) throw new ApiException(400, "Missing required parameter 'id' when calling MasGetScenePost"); + + + var path = "/mas/getScene"; + path = path.Replace("{format}", "json"); + + var queryParams = new Dictionary(); + var headerParams = new Dictionary(); + var formParams = new Dictionary(); + var fileParams = new Dictionary(); + String postBody = null; + + postBody = ApiClient.Serialize(id); // http body (model) parameter + + // authentication setting, if any + String[] authSettings = new String[] { "api_key" }; + + // make the HTTP request + IRestResponse response = (IRestResponse) ApiClient.CallApi(path, Method.POST, queryParams, postBody, headerParams, formParams, fileParams, authSettings); + + if (((int)response.StatusCode) >= 400) + throw new ApiException ((int)response.StatusCode, "Error calling MasGetScenePost: " + response.Content, response.Content); + else if (((int)response.StatusCode) == 0) + throw new ApiException ((int)response.StatusCode, "Error calling MasGetScenePost: " + response.ErrorMessage, response.ErrorMessage); + + return (Scene) ApiClient.Deserialize(response.Content, typeof(Scene), response.Headers); + } + + /// + /// Az ItemManager-tõl elkéri a bemeneti paraméterben kapott azonosítóval rendelkezõ Mentett keresési feltételt. + /// + /// + /// SearchDefinition + public SearchDefinition MasGetSearchDefinitionsPost (long? id) + { + + // verify the required parameter 'id' is set + if (id == null) throw new ApiException(400, "Missing required parameter 'id' when calling MasGetSearchDefinitionsPost"); + + + var path = "/mas/getSearchDefinitions"; + path = path.Replace("{format}", "json"); + + var queryParams = new Dictionary(); + var headerParams = new Dictionary(); + var formParams = new Dictionary(); + var fileParams = new Dictionary(); + String postBody = null; + + postBody = ApiClient.Serialize(id); // http body (model) parameter + + // authentication setting, if any + String[] authSettings = new String[] { "api_key" }; + + // make the HTTP request + IRestResponse response = (IRestResponse) ApiClient.CallApi(path, Method.POST, queryParams, postBody, headerParams, formParams, fileParams, authSettings); + + if (((int)response.StatusCode) >= 400) + throw new ApiException ((int)response.StatusCode, "Error calling MasGetSearchDefinitionsPost: " + response.Content, response.Content); + else if (((int)response.StatusCode) == 0) + throw new ApiException ((int)response.StatusCode, "Error calling MasGetSearchDefinitionsPost: " + response.ErrorMessage, response.ErrorMessage); + + return (SearchDefinition) ApiClient.Deserialize(response.Content, typeof(SearchDefinition), response.Headers); + } + + /// + /// ItemManager-tõl elkéri az összes olyan Szkript-et, amely mediaId-je megyezik a bemeneti paraméterként kapott mediaId-vel. + /// + /// + /// List<Shot> + public List MasGetShotsPost (long? mediaId) + { + + // verify the required parameter 'mediaId' is set + if (mediaId == null) throw new ApiException(400, "Missing required parameter 'mediaId' when calling MasGetShotsPost"); + + + var path = "/mas/getShots"; + path = path.Replace("{format}", "json"); + + var queryParams = new Dictionary(); + var headerParams = new Dictionary(); + var formParams = new Dictionary(); + var fileParams = new Dictionary(); + String postBody = null; + + postBody = ApiClient.Serialize(mediaId); // http body (model) parameter + + // authentication setting, if any + String[] authSettings = new String[] { "api_key" }; + + // make the HTTP request + IRestResponse response = (IRestResponse) ApiClient.CallApi(path, Method.POST, queryParams, postBody, headerParams, formParams, fileParams, authSettings); + + if (((int)response.StatusCode) >= 400) + throw new ApiException ((int)response.StatusCode, "Error calling MasGetShotsPost: " + response.Content, response.Content); + else if (((int)response.StatusCode) == 0) + throw new ApiException ((int)response.StatusCode, "Error calling MasGetShotsPost: " + response.ErrorMessage, response.ErrorMessage); + + return (List) ApiClient.Deserialize(response.Content, typeof(List), response.Headers); + } + + /// + /// Visszatér az illesztett transzkóder profil információkkal. + /// + /// List<TranscoderProfile> + public List MasGetTranscodeProfilesGet () + { + + + var path = "/mas/getTranscodeProfiles"; + path = path.Replace("{format}", "json"); + + var queryParams = new Dictionary(); + var headerParams = new Dictionary(); + var formParams = new Dictionary(); + var fileParams = new Dictionary(); + String postBody = null; + + + // authentication setting, if any + String[] authSettings = new String[] { "api_key" }; + + // make the HTTP request + IRestResponse response = (IRestResponse) ApiClient.CallApi(path, Method.GET, queryParams, postBody, headerParams, formParams, fileParams, authSettings); + + if (((int)response.StatusCode) >= 400) + throw new ApiException ((int)response.StatusCode, "Error calling MasGetTranscodeProfilesGet: " + response.Content, response.Content); + else if (((int)response.StatusCode) == 0) + throw new ApiException ((int)response.StatusCode, "Error calling MasGetTranscodeProfilesGet: " + response.ErrorMessage, response.ErrorMessage); + + return (List) ApiClient.Deserialize(response.Content, typeof(List), response.Headers); + } + + /// + /// fake hívás + /// + /// List<UserRight> + public List MasGetUserRightGet () + { + + + var path = "/mas/getUserRight"; + path = path.Replace("{format}", "json"); + + var queryParams = new Dictionary(); + var headerParams = new Dictionary(); + var formParams = new Dictionary(); + var fileParams = new Dictionary(); + String postBody = null; + + + // authentication setting, if any + String[] authSettings = new String[] { "api_key" }; + + // make the HTTP request + IRestResponse response = (IRestResponse) ApiClient.CallApi(path, Method.GET, queryParams, postBody, headerParams, formParams, fileParams, authSettings); + + if (((int)response.StatusCode) >= 400) + throw new ApiException ((int)response.StatusCode, "Error calling MasGetUserRightGet: " + response.Content, response.Content); + else if (((int)response.StatusCode) == 0) + throw new ApiException ((int)response.StatusCode, "Error calling MasGetUserRightGet: " + response.ErrorMessage, response.ErrorMessage); + + return (List) ApiClient.Deserialize(response.Content, typeof(List), response.Headers); + } + + /// + /// nincs implementálva + /// + /// + public void MasLogoutGet () + { + + + var path = "/mas/logout"; + path = path.Replace("{format}", "json"); + + var queryParams = new Dictionary(); + var headerParams = new Dictionary(); + var formParams = new Dictionary(); + var fileParams = new Dictionary(); + String postBody = null; + + + // authentication setting, if any + String[] authSettings = new String[] { "api_key" }; + + // make the HTTP request + IRestResponse response = (IRestResponse) ApiClient.CallApi(path, Method.GET, queryParams, postBody, headerParams, formParams, fileParams, authSettings); + + if (((int)response.StatusCode) >= 400) + throw new ApiException ((int)response.StatusCode, "Error calling MasLogoutGet: " + response.Content, response.Content); + else if (((int)response.StatusCode) == 0) + throw new ApiException ((int)response.StatusCode, "Error calling MasLogoutGet: " + response.ErrorMessage, response.ErrorMessage); + + return; + } + + /// + /// Szerializáláshoz beregisztrált objektum típusok, melyek object-ként mennének át a proxy-n. + /// + /// List<Object> + public List MasRegisterGet () + { + + + var path = "/mas/register"; + path = path.Replace("{format}", "json"); + + var queryParams = new Dictionary(); + var headerParams = new Dictionary(); + var formParams = new Dictionary(); + var fileParams = new Dictionary(); + String postBody = null; + + + // authentication setting, if any + String[] authSettings = new String[] { "api_key" }; + + // make the HTTP request + IRestResponse response = (IRestResponse) ApiClient.CallApi(path, Method.GET, queryParams, postBody, headerParams, formParams, fileParams, authSettings); + + if (((int)response.StatusCode) >= 400) + throw new ApiException ((int)response.StatusCode, "Error calling MasRegisterGet: " + response.Content, response.Content); + else if (((int)response.StatusCode) == 0) + throw new ApiException ((int)response.StatusCode, "Error calling MasRegisterGet: " + response.ErrorMessage, response.ErrorMessage); + + return (List) ApiClient.Deserialize(response.Content, typeof(List), response.Headers); + } + + /// + /// Az osztály név és azonosító lista alapján az ItemManager-el eltávolítja az entitásokat az adatbázisból. + /// + /// + /// SystemResponse + public SystemResponse MasRemoveAllPost (RemoveParameters removeParameters) + { + + // verify the required parameter 'removeParameters' is set + if (removeParameters == null) throw new ApiException(400, "Missing required parameter 'removeParameters' when calling MasRemoveAllPost"); + + + var path = "/mas/removeAll"; + path = path.Replace("{format}", "json"); + + var queryParams = new Dictionary(); + var headerParams = new Dictionary(); + var formParams = new Dictionary(); + var fileParams = new Dictionary(); + String postBody = null; + + postBody = ApiClient.Serialize(removeParameters); // http body (model) parameter + + // authentication setting, if any + String[] authSettings = new String[] { "api_key" }; + + // make the HTTP request + IRestResponse response = (IRestResponse) ApiClient.CallApi(path, Method.POST, queryParams, postBody, headerParams, formParams, fileParams, authSettings); + + if (((int)response.StatusCode) >= 400) + throw new ApiException ((int)response.StatusCode, "Error calling MasRemoveAllPost: " + response.Content, response.Content); + else if (((int)response.StatusCode) == 0) + throw new ApiException ((int)response.StatusCode, "Error calling MasRemoveAllPost: " + response.ErrorMessage, response.ErrorMessage); + + return (SystemResponse) ApiClient.Deserialize(response.Content, typeof(SystemResponse), response.Headers); + } + + /// + /// Az osztály név és azonosító lista alapján az ItemManager-el eltávolítja az entitásokat az adatbázisból. + /// + /// + /// SystemResponse + public SystemResponse MasRemovePost (RemoveParameters removeParameters) + { + + // verify the required parameter 'removeParameters' is set + if (removeParameters == null) throw new ApiException(400, "Missing required parameter 'removeParameters' when calling MasRemovePost"); + + + var path = "/mas/remove"; + path = path.Replace("{format}", "json"); + + var queryParams = new Dictionary(); + var headerParams = new Dictionary(); + var formParams = new Dictionary(); + var fileParams = new Dictionary(); + String postBody = null; + + postBody = ApiClient.Serialize(removeParameters); // http body (model) parameter + + // authentication setting, if any + String[] authSettings = new String[] { "api_key" }; + + // make the HTTP request + IRestResponse response = (IRestResponse) ApiClient.CallApi(path, Method.POST, queryParams, postBody, headerParams, formParams, fileParams, authSettings); + + if (((int)response.StatusCode) >= 400) + throw new ApiException ((int)response.StatusCode, "Error calling MasRemovePost: " + response.Content, response.Content); + else if (((int)response.StatusCode) == 0) + throw new ApiException ((int)response.StatusCode, "Error calling MasRemovePost: " + response.ErrorMessage, response.ErrorMessage); + + return (SystemResponse) ApiClient.Deserialize(response.Content, typeof(SystemResponse), response.Headers); + } + + /// + /// Elhelyez egy UserReplyMessage típusú üzenetet a motor rendszerüzenet várakozási sorába. + /// + /// + /// + public void MasReplyMessagePost (ReplyMessageParameters replyMessageParameters) + { + + // verify the required parameter 'replyMessageParameters' is set + if (replyMessageParameters == null) throw new ApiException(400, "Missing required parameter 'replyMessageParameters' when calling MasReplyMessagePost"); + + + var path = "/mas/replyMessage"; + path = path.Replace("{format}", "json"); + + var queryParams = new Dictionary(); + var headerParams = new Dictionary(); + var formParams = new Dictionary(); + var fileParams = new Dictionary(); + String postBody = null; + + postBody = ApiClient.Serialize(replyMessageParameters); // http body (model) parameter + + // authentication setting, if any + String[] authSettings = new String[] { "api_key" }; + + // make the HTTP request + IRestResponse response = (IRestResponse) ApiClient.CallApi(path, Method.POST, queryParams, postBody, headerParams, formParams, fileParams, authSettings); + + if (((int)response.StatusCode) >= 400) + throw new ApiException ((int)response.StatusCode, "Error calling MasReplyMessagePost: " + response.Content, response.Content); + else if (((int)response.StatusCode) == 0) + throw new ApiException ((int)response.StatusCode, "Error calling MasReplyMessagePost: " + response.ErrorMessage, response.ErrorMessage); + + return; + } + + /// + /// Munkafolyamat azonosító alapján egy új újraindítási kérelmet helyez el a motor rendszerüzenet várakozási sorába. + /// + /// + /// + public void MasRestartJobPost (long? jobId) + { + + // verify the required parameter 'jobId' is set + if (jobId == null) throw new ApiException(400, "Missing required parameter 'jobId' when calling MasRestartJobPost"); + + + var path = "/mas/restartJob"; + path = path.Replace("{format}", "json"); + + var queryParams = new Dictionary(); + var headerParams = new Dictionary(); + var formParams = new Dictionary(); + var fileParams = new Dictionary(); + String postBody = null; + + postBody = ApiClient.Serialize(jobId); // http body (model) parameter + + // authentication setting, if any + String[] authSettings = new String[] { "api_key" }; + + // make the HTTP request + IRestResponse response = (IRestResponse) ApiClient.CallApi(path, Method.POST, queryParams, postBody, headerParams, formParams, fileParams, authSettings); + + if (((int)response.StatusCode) >= 400) + throw new ApiException ((int)response.StatusCode, "Error calling MasRestartJobPost: " + response.Content, response.Content); + else if (((int)response.StatusCode) == 0) + throw new ApiException ((int)response.StatusCode, "Error calling MasRestartJobPost: " + response.ErrorMessage, response.ErrorMessage); + + return; + } + + /// + /// Munkafolyamat azonosító alapján egy új folytatási kérelmet helyez el a motor rendszerüzenet várakozási sorába. + /// + /// + /// + public void MasResumeJobPost (long? jobId) + { + + // verify the required parameter 'jobId' is set + if (jobId == null) throw new ApiException(400, "Missing required parameter 'jobId' when calling MasResumeJobPost"); + + + var path = "/mas/resumeJob"; + path = path.Replace("{format}", "json"); + + var queryParams = new Dictionary(); + var headerParams = new Dictionary(); + var formParams = new Dictionary(); + var fileParams = new Dictionary(); + String postBody = null; + + postBody = ApiClient.Serialize(jobId); // http body (model) parameter + + // authentication setting, if any + String[] authSettings = new String[] { "api_key" }; + + // make the HTTP request + IRestResponse response = (IRestResponse) ApiClient.CallApi(path, Method.POST, queryParams, postBody, headerParams, formParams, fileParams, authSettings); + + if (((int)response.StatusCode) >= 400) + throw new ApiException ((int)response.StatusCode, "Error calling MasResumeJobPost: " + response.Content, response.Content); + else if (((int)response.StatusCode) == 0) + throw new ApiException ((int)response.StatusCode, "Error calling MasResumeJobPost: " + response.ErrorMessage, response.ErrorMessage); + + return; + } + + /// + /// Egy új/létezõ lista kategóriát ment el/módosít az adatbázisba. + /// + /// + /// DomainCategoryResponse + public DomainCategoryResponse MasSaveDomainCategoryPost (DomainCategory domainCategory) + { + + // verify the required parameter 'domainCategory' is set + if (domainCategory == null) throw new ApiException(400, "Missing required parameter 'domainCategory' when calling MasSaveDomainCategoryPost"); + + + var path = "/mas/saveDomainCategory"; + path = path.Replace("{format}", "json"); + + var queryParams = new Dictionary(); + var headerParams = new Dictionary(); + var formParams = new Dictionary(); + var fileParams = new Dictionary(); + String postBody = null; + + postBody = ApiClient.Serialize(domainCategory); // http body (model) parameter + + // authentication setting, if any + String[] authSettings = new String[] { "api_key" }; + + // make the HTTP request + IRestResponse response = (IRestResponse) ApiClient.CallApi(path, Method.POST, queryParams, postBody, headerParams, formParams, fileParams, authSettings); + + if (((int)response.StatusCode) >= 400) + throw new ApiException ((int)response.StatusCode, "Error calling MasSaveDomainCategoryPost: " + response.Content, response.Content); + else if (((int)response.StatusCode) == 0) + throw new ApiException ((int)response.StatusCode, "Error calling MasSaveDomainCategoryPost: " + response.ErrorMessage, response.ErrorMessage); + + return (DomainCategoryResponse) ApiClient.Deserialize(response.Content, typeof(DomainCategoryResponse), response.Headers); + } + + /// + /// Egy új/létezõ listát ment el/módosít az adatbázisba. + /// + /// + /// DomainResponse + public DomainResponse MasSaveDomainPost (Domain domain) + { + + // verify the required parameter 'domain' is set + if (domain == null) throw new ApiException(400, "Missing required parameter 'domain' when calling MasSaveDomainPost"); + + + var path = "/mas/saveDomain"; + path = path.Replace("{format}", "json"); + + var queryParams = new Dictionary(); + var headerParams = new Dictionary(); + var formParams = new Dictionary(); + var fileParams = new Dictionary(); + String postBody = null; + + postBody = ApiClient.Serialize(domain); // http body (model) parameter + + // authentication setting, if any + String[] authSettings = new String[] { "api_key" }; + + // make the HTTP request + IRestResponse response = (IRestResponse) ApiClient.CallApi(path, Method.POST, queryParams, postBody, headerParams, formParams, fileParams, authSettings); + + if (((int)response.StatusCode) >= 400) + throw new ApiException ((int)response.StatusCode, "Error calling MasSaveDomainPost: " + response.Content, response.Content); + else if (((int)response.StatusCode) == 0) + throw new ApiException ((int)response.StatusCode, "Error calling MasSaveDomainPost: " + response.ErrorMessage, response.ErrorMessage); + + return (DomainResponse) ApiClient.Deserialize(response.Content, typeof(DomainResponse), response.Headers); + } + + /// + /// Egy új/létezõ mappát ment el/módosít az adatbázisba. + /// + /// + /// FolderResponse + public FolderResponse MasSaveFolderPost (Folder folder) + { + + // verify the required parameter 'folder' is set + if (folder == null) throw new ApiException(400, "Missing required parameter 'folder' when calling MasSaveFolderPost"); + + + var path = "/mas/saveFolder"; + path = path.Replace("{format}", "json"); + + var queryParams = new Dictionary(); + var headerParams = new Dictionary(); + var formParams = new Dictionary(); + var fileParams = new Dictionary(); + String postBody = null; + + postBody = ApiClient.Serialize(folder); // http body (model) parameter + + // authentication setting, if any + String[] authSettings = new String[] { "api_key" }; + + // make the HTTP request + IRestResponse response = (IRestResponse) ApiClient.CallApi(path, Method.POST, queryParams, postBody, headerParams, formParams, fileParams, authSettings); + + if (((int)response.StatusCode) >= 400) + throw new ApiException ((int)response.StatusCode, "Error calling MasSaveFolderPost: " + response.Content, response.Content); + else if (((int)response.StatusCode) == 0) + throw new ApiException ((int)response.StatusCode, "Error calling MasSaveFolderPost: " + response.ErrorMessage, response.ErrorMessage); + + return (FolderResponse) ApiClient.Deserialize(response.Content, typeof(FolderResponse), response.Headers); + } + + /// + /// Egy új/létezõ Anyagot ment el/módosít az adatbázisba. + /// + /// + /// ItemResponse + public ItemResponse MasSaveItemPost (Item item) + { + + // verify the required parameter 'item' is set + if (item == null) throw new ApiException(400, "Missing required parameter 'item' when calling MasSaveItemPost"); + + + var path = "/mas/saveItem"; + path = path.Replace("{format}", "json"); + + var queryParams = new Dictionary(); + var headerParams = new Dictionary(); + var formParams = new Dictionary(); + var fileParams = new Dictionary(); + String postBody = null; + + postBody = ApiClient.Serialize(item); // http body (model) parameter + + // authentication setting, if any + String[] authSettings = new String[] { "api_key" }; + + // make the HTTP request + IRestResponse response = (IRestResponse) ApiClient.CallApi(path, Method.POST, queryParams, postBody, headerParams, formParams, fileParams, authSettings); + + if (((int)response.StatusCode) >= 400) + throw new ApiException ((int)response.StatusCode, "Error calling MasSaveItemPost: " + response.Content, response.Content); + else if (((int)response.StatusCode) == 0) + throw new ApiException ((int)response.StatusCode, "Error calling MasSaveItemPost: " + response.ErrorMessage, response.ErrorMessage); + + return (ItemResponse) ApiClient.Deserialize(response.Content, typeof(ItemResponse), response.Headers); + } + + /// + /// Egy új/létezõ Anyag típust ment el/módosít az adatbázisba. + /// + /// + /// ItemTypeResponse + public ItemTypeResponse MasSaveItemTypePost (ItemType itemType) + { + + // verify the required parameter 'itemType' is set + if (itemType == null) throw new ApiException(400, "Missing required parameter 'itemType' when calling MasSaveItemTypePost"); + + + var path = "/mas/saveItemType"; + path = path.Replace("{format}", "json"); + + var queryParams = new Dictionary(); + var headerParams = new Dictionary(); + var formParams = new Dictionary(); + var fileParams = new Dictionary(); + String postBody = null; + + postBody = ApiClient.Serialize(itemType); // http body (model) parameter + + // authentication setting, if any + String[] authSettings = new String[] { "api_key" }; + + // make the HTTP request + IRestResponse response = (IRestResponse) ApiClient.CallApi(path, Method.POST, queryParams, postBody, headerParams, formParams, fileParams, authSettings); + + if (((int)response.StatusCode) >= 400) + throw new ApiException ((int)response.StatusCode, "Error calling MasSaveItemTypePost: " + response.Content, response.Content); + else if (((int)response.StatusCode) == 0) + throw new ApiException ((int)response.StatusCode, "Error calling MasSaveItemTypePost: " + response.ErrorMessage, response.ErrorMessage); + + return (ItemTypeResponse) ApiClient.Deserialize(response.Content, typeof(ItemTypeResponse), response.Headers); + } + + /// + /// Egy új/létezõ Kópiát ment el/módosít az adatbázisba. + /// + /// + /// MediaFileResponse + public MediaFileResponse MasSaveMediaFilePost (MediaFile mediaFile) + { + + // verify the required parameter 'mediaFile' is set + if (mediaFile == null) throw new ApiException(400, "Missing required parameter 'mediaFile' when calling MasSaveMediaFilePost"); + + + var path = "/mas/saveMediaFile"; + path = path.Replace("{format}", "json"); + + var queryParams = new Dictionary(); + var headerParams = new Dictionary(); + var formParams = new Dictionary(); + var fileParams = new Dictionary(); + String postBody = null; + + postBody = ApiClient.Serialize(mediaFile); // http body (model) parameter + + // authentication setting, if any + String[] authSettings = new String[] { "api_key" }; + + // make the HTTP request + IRestResponse response = (IRestResponse) ApiClient.CallApi(path, Method.POST, queryParams, postBody, headerParams, formParams, fileParams, authSettings); + + if (((int)response.StatusCode) >= 400) + throw new ApiException ((int)response.StatusCode, "Error calling MasSaveMediaFilePost: " + response.Content, response.Content); + else if (((int)response.StatusCode) == 0) + throw new ApiException ((int)response.StatusCode, "Error calling MasSaveMediaFilePost: " + response.ErrorMessage, response.ErrorMessage); + + return (MediaFileResponse) ApiClient.Deserialize(response.Content, typeof(MediaFileResponse), response.Headers); + } + + /// + /// Egy új/létezõ Verziót ment el/módosít az adatbázisba. + /// + /// + /// MediaResponse + public MediaResponse MasSaveMediaPost (Media media) + { + + // verify the required parameter 'media' is set + if (media == null) throw new ApiException(400, "Missing required parameter 'media' when calling MasSaveMediaPost"); + + + var path = "/mas/saveMedia"; + path = path.Replace("{format}", "json"); + + var queryParams = new Dictionary(); + var headerParams = new Dictionary(); + var formParams = new Dictionary(); + var fileParams = new Dictionary(); + String postBody = null; + + postBody = ApiClient.Serialize(media); // http body (model) parameter + + // authentication setting, if any + String[] authSettings = new String[] { "api_key" }; + + // make the HTTP request + IRestResponse response = (IRestResponse) ApiClient.CallApi(path, Method.POST, queryParams, postBody, headerParams, formParams, fileParams, authSettings); + + if (((int)response.StatusCode) >= 400) + throw new ApiException ((int)response.StatusCode, "Error calling MasSaveMediaPost: " + response.Content, response.Content); + else if (((int)response.StatusCode) == 0) + throw new ApiException ((int)response.StatusCode, "Error calling MasSaveMediaPost: " + response.ErrorMessage, response.ErrorMessage); + + return (MediaResponse) ApiClient.Deserialize(response.Content, typeof(MediaResponse), response.Headers); + } + + /// + /// Egy új/létezõ Meta adat elemet ment el/módosít az adatbázisba. + /// + /// + /// MetadataElementResponse + public MetadataElementResponse MasSaveMetadataElementPost (MetadataElement metadataElement) + { + + // verify the required parameter 'metadataElement' is set + if (metadataElement == null) throw new ApiException(400, "Missing required parameter 'metadataElement' when calling MasSaveMetadataElementPost"); + + + var path = "/mas/saveMetadataElement"; + path = path.Replace("{format}", "json"); + + var queryParams = new Dictionary(); + var headerParams = new Dictionary(); + var formParams = new Dictionary(); + var fileParams = new Dictionary(); + String postBody = null; + + postBody = ApiClient.Serialize(metadataElement); // http body (model) parameter + + // authentication setting, if any + String[] authSettings = new String[] { "api_key" }; + + // make the HTTP request + IRestResponse response = (IRestResponse) ApiClient.CallApi(path, Method.POST, queryParams, postBody, headerParams, formParams, fileParams, authSettings); + + if (((int)response.StatusCode) >= 400) + throw new ApiException ((int)response.StatusCode, "Error calling MasSaveMetadataElementPost: " + response.Content, response.Content); + else if (((int)response.StatusCode) == 0) + throw new ApiException ((int)response.StatusCode, "Error calling MasSaveMetadataElementPost: " + response.ErrorMessage, response.ErrorMessage); + + return (MetadataElementResponse) ApiClient.Deserialize(response.Content, typeof(MetadataElementResponse), response.Headers); + } + + /// + /// Egy új/létezõ Meta adatot ment el/módosít az adatbázisba. + /// + /// + /// MetadataResponse + public MetadataResponse MasSaveMetadataPost (Metadata metadata) + { + + // verify the required parameter 'metadata' is set + if (metadata == null) throw new ApiException(400, "Missing required parameter 'metadata' when calling MasSaveMetadataPost"); + + + var path = "/mas/saveMetadata"; + path = path.Replace("{format}", "json"); + + var queryParams = new Dictionary(); + var headerParams = new Dictionary(); + var formParams = new Dictionary(); + var fileParams = new Dictionary(); + String postBody = null; + + postBody = ApiClient.Serialize(metadata); // http body (model) parameter + + // authentication setting, if any + String[] authSettings = new String[] { "api_key" }; + + // make the HTTP request + IRestResponse response = (IRestResponse) ApiClient.CallApi(path, Method.POST, queryParams, postBody, headerParams, formParams, fileParams, authSettings); + + if (((int)response.StatusCode) >= 400) + throw new ApiException ((int)response.StatusCode, "Error calling MasSaveMetadataPost: " + response.Content, response.Content); + else if (((int)response.StatusCode) == 0) + throw new ApiException ((int)response.StatusCode, "Error calling MasSaveMetadataPost: " + response.ErrorMessage, response.ErrorMessage); + + return (MetadataResponse) ApiClient.Deserialize(response.Content, typeof(MetadataResponse), response.Headers); + } + + /// + /// Egy új/létezõ Meta adat típust ment el/módosít az adatbázisba. + /// + /// + /// MetadataTypeResponse + public MetadataTypeResponse MasSaveMetadataTypePost (MetadataType metadataType) + { + + // verify the required parameter 'metadataType' is set + if (metadataType == null) throw new ApiException(400, "Missing required parameter 'metadataType' when calling MasSaveMetadataTypePost"); + + + var path = "/mas/saveMetadataType"; + path = path.Replace("{format}", "json"); + + var queryParams = new Dictionary(); + var headerParams = new Dictionary(); + var formParams = new Dictionary(); + var fileParams = new Dictionary(); + String postBody = null; + + postBody = ApiClient.Serialize(metadataType); // http body (model) parameter + + // authentication setting, if any + String[] authSettings = new String[] { "api_key" }; + + // make the HTTP request + IRestResponse response = (IRestResponse) ApiClient.CallApi(path, Method.POST, queryParams, postBody, headerParams, formParams, fileParams, authSettings); + + if (((int)response.StatusCode) >= 400) + throw new ApiException ((int)response.StatusCode, "Error calling MasSaveMetadataTypePost: " + response.Content, response.Content); + else if (((int)response.StatusCode) == 0) + throw new ApiException ((int)response.StatusCode, "Error calling MasSaveMetadataTypePost: " + response.ErrorMessage, response.ErrorMessage); + + return (MetadataTypeResponse) ApiClient.Deserialize(response.Content, typeof(MetadataTypeResponse), response.Headers); + } + + /// + /// Egy új/létezõ Vágólista elemet ment el/módosít az adatbázisba. + /// + /// + /// SceneContentResponse + public SceneContentResponse MasSaveSceneContentPost (SceneContent sceneContent) + { + + // verify the required parameter 'sceneContent' is set + if (sceneContent == null) throw new ApiException(400, "Missing required parameter 'sceneContent' when calling MasSaveSceneContentPost"); + + + var path = "/mas/saveSceneContent"; + path = path.Replace("{format}", "json"); + + var queryParams = new Dictionary(); + var headerParams = new Dictionary(); + var formParams = new Dictionary(); + var fileParams = new Dictionary(); + String postBody = null; + + postBody = ApiClient.Serialize(sceneContent); // http body (model) parameter + + // authentication setting, if any + String[] authSettings = new String[] { "api_key" }; + + // make the HTTP request + IRestResponse response = (IRestResponse) ApiClient.CallApi(path, Method.POST, queryParams, postBody, headerParams, formParams, fileParams, authSettings); + + if (((int)response.StatusCode) >= 400) + throw new ApiException ((int)response.StatusCode, "Error calling MasSaveSceneContentPost: " + response.Content, response.Content); + else if (((int)response.StatusCode) == 0) + throw new ApiException ((int)response.StatusCode, "Error calling MasSaveSceneContentPost: " + response.ErrorMessage, response.ErrorMessage); + + return (SceneContentResponse) ApiClient.Deserialize(response.Content, typeof(SceneContentResponse), response.Headers); + } + + /// + /// Egy új/létezõ Vágólistát ment el/módosít az adatbázisba. + /// + /// + /// SceneResponse + public SceneResponse MasSaveScenePost (Scene scene) + { + + // verify the required parameter 'scene' is set + if (scene == null) throw new ApiException(400, "Missing required parameter 'scene' when calling MasSaveScenePost"); + + + var path = "/mas/saveScene"; + path = path.Replace("{format}", "json"); + + var queryParams = new Dictionary(); + var headerParams = new Dictionary(); + var formParams = new Dictionary(); + var fileParams = new Dictionary(); + String postBody = null; + + postBody = ApiClient.Serialize(scene); // http body (model) parameter + + // authentication setting, if any + String[] authSettings = new String[] { "api_key" }; + + // make the HTTP request + IRestResponse response = (IRestResponse) ApiClient.CallApi(path, Method.POST, queryParams, postBody, headerParams, formParams, fileParams, authSettings); + + if (((int)response.StatusCode) >= 400) + throw new ApiException ((int)response.StatusCode, "Error calling MasSaveScenePost: " + response.Content, response.Content); + else if (((int)response.StatusCode) == 0) + throw new ApiException ((int)response.StatusCode, "Error calling MasSaveScenePost: " + response.ErrorMessage, response.ErrorMessage); + + return (SceneResponse) ApiClient.Deserialize(response.Content, typeof(SceneResponse), response.Headers); + } + + /// + /// Egy új/létezõ Keresést ment el/módosít az adatbázisba. + /// + /// + /// SearchDefinitionResponse + public SearchDefinitionResponse MasSaveSearchDefinitionPost (SearchDefinition searchDefinition) + { + + // verify the required parameter 'searchDefinition' is set + if (searchDefinition == null) throw new ApiException(400, "Missing required parameter 'searchDefinition' when calling MasSaveSearchDefinitionPost"); + + + var path = "/mas/saveSearchDefinition"; + path = path.Replace("{format}", "json"); + + var queryParams = new Dictionary(); + var headerParams = new Dictionary(); + var formParams = new Dictionary(); + var fileParams = new Dictionary(); + String postBody = null; + + postBody = ApiClient.Serialize(searchDefinition); // http body (model) parameter + + // authentication setting, if any + String[] authSettings = new String[] { "api_key" }; + + // make the HTTP request + IRestResponse response = (IRestResponse) ApiClient.CallApi(path, Method.POST, queryParams, postBody, headerParams, formParams, fileParams, authSettings); + + if (((int)response.StatusCode) >= 400) + throw new ApiException ((int)response.StatusCode, "Error calling MasSaveSearchDefinitionPost: " + response.Content, response.Content); + else if (((int)response.StatusCode) == 0) + throw new ApiException ((int)response.StatusCode, "Error calling MasSaveSearchDefinitionPost: " + response.ErrorMessage, response.ErrorMessage); + + return (SearchDefinitionResponse) ApiClient.Deserialize(response.Content, typeof(SearchDefinitionResponse), response.Headers); + } + + /// + /// Egy új/létezõ Szkriptet ment el/módosít az adatbázisba. + /// + /// + /// ShotResponse + public ShotResponse MasSaveShotPost (Shot shot) + { + + // verify the required parameter 'shot' is set + if (shot == null) throw new ApiException(400, "Missing required parameter 'shot' when calling MasSaveShotPost"); + + + var path = "/mas/saveShot"; + path = path.Replace("{format}", "json"); + + var queryParams = new Dictionary(); + var headerParams = new Dictionary(); + var formParams = new Dictionary(); + var fileParams = new Dictionary(); + String postBody = null; + + postBody = ApiClient.Serialize(shot); // http body (model) parameter + + // authentication setting, if any + String[] authSettings = new String[] { "api_key" }; + + // make the HTTP request + IRestResponse response = (IRestResponse) ApiClient.CallApi(path, Method.POST, queryParams, postBody, headerParams, formParams, fileParams, authSettings); + + if (((int)response.StatusCode) >= 400) + throw new ApiException ((int)response.StatusCode, "Error calling MasSaveShotPost: " + response.Content, response.Content); + else if (((int)response.StatusCode) == 0) + throw new ApiException ((int)response.StatusCode, "Error calling MasSaveShotPost: " + response.ErrorMessage, response.ErrorMessage); + + return (ShotResponse) ApiClient.Deserialize(response.Content, typeof(ShotResponse), response.Headers); + } + + /// + /// Egy új/létezõ Tárolót ment el/módosít az adatbázisba. + /// + /// + /// StoreResponse + public StoreResponse MasSaveStorePost (Store store) + { + + // verify the required parameter 'store' is set + if (store == null) throw new ApiException(400, "Missing required parameter 'store' when calling MasSaveStorePost"); + + + var path = "/mas/saveStore"; + path = path.Replace("{format}", "json"); + + var queryParams = new Dictionary(); + var headerParams = new Dictionary(); + var formParams = new Dictionary(); + var fileParams = new Dictionary(); + String postBody = null; + + postBody = ApiClient.Serialize(store); // http body (model) parameter + + // authentication setting, if any + String[] authSettings = new String[] { "api_key" }; + + // make the HTTP request + IRestResponse response = (IRestResponse) ApiClient.CallApi(path, Method.POST, queryParams, postBody, headerParams, formParams, fileParams, authSettings); + + if (((int)response.StatusCode) >= 400) + throw new ApiException ((int)response.StatusCode, "Error calling MasSaveStorePost: " + response.Content, response.Content); + else if (((int)response.StatusCode) == 0) + throw new ApiException ((int)response.StatusCode, "Error calling MasSaveStorePost: " + response.ErrorMessage, response.ErrorMessage); + + return (StoreResponse) ApiClient.Deserialize(response.Content, typeof(StoreResponse), response.Headers); + } + + /// + /// Egy új/létezõ Tároló uri-t ment el/módosít az adatbázisba. + /// + /// + /// StoreUriResponse + public StoreUriResponse MasSaveStoreUriPost (StoreUri storeUri) + { + + // verify the required parameter 'storeUri' is set + if (storeUri == null) throw new ApiException(400, "Missing required parameter 'storeUri' when calling MasSaveStoreUriPost"); + + + var path = "/mas/saveStoreUri"; + path = path.Replace("{format}", "json"); + + var queryParams = new Dictionary(); + var headerParams = new Dictionary(); + var formParams = new Dictionary(); + var fileParams = new Dictionary(); + String postBody = null; + + postBody = ApiClient.Serialize(storeUri); // http body (model) parameter + + // authentication setting, if any + String[] authSettings = new String[] { "api_key" }; + + // make the HTTP request + IRestResponse response = (IRestResponse) ApiClient.CallApi(path, Method.POST, queryParams, postBody, headerParams, formParams, fileParams, authSettings); + + if (((int)response.StatusCode) >= 400) + throw new ApiException ((int)response.StatusCode, "Error calling MasSaveStoreUriPost: " + response.Content, response.Content); + else if (((int)response.StatusCode) == 0) + throw new ApiException ((int)response.StatusCode, "Error calling MasSaveStoreUriPost: " + response.ErrorMessage, response.ErrorMessage); + + return (StoreUriResponse) ApiClient.Deserialize(response.Content, typeof(StoreUriResponse), response.Headers); + } + + /// + /// Egy új Sablont tölt be a folyamatkezelõ motor program betöltõjébe. + /// + /// + /// TemplateResponse + public TemplateResponse MasSaveTemplatePost (Template template) + { + + // verify the required parameter 'template' is set + if (template == null) throw new ApiException(400, "Missing required parameter 'template' when calling MasSaveTemplatePost"); + + + var path = "/mas/saveTemplate"; + path = path.Replace("{format}", "json"); + + var queryParams = new Dictionary(); + var headerParams = new Dictionary(); + var formParams = new Dictionary(); + var fileParams = new Dictionary(); + String postBody = null; + + postBody = ApiClient.Serialize(template); // http body (model) parameter + + // authentication setting, if any + String[] authSettings = new String[] { "api_key" }; + + // make the HTTP request + IRestResponse response = (IRestResponse) ApiClient.CallApi(path, Method.POST, queryParams, postBody, headerParams, formParams, fileParams, authSettings); + + if (((int)response.StatusCode) >= 400) + throw new ApiException ((int)response.StatusCode, "Error calling MasSaveTemplatePost: " + response.Content, response.Content); + else if (((int)response.StatusCode) == 0) + throw new ApiException ((int)response.StatusCode, "Error calling MasSaveTemplatePost: " + response.ErrorMessage, response.ErrorMessage); + + return (TemplateResponse) ApiClient.Deserialize(response.Content, typeof(TemplateResponse), response.Headers); + } + + /// + /// Egy új/létezõ Felhasználót ment el/módosít az adatbázisba. + /// + /// + /// UserInfoResponse + public UserInfoResponse MasSaveUserInfoPost (UserInfo userInfo) + { + + // verify the required parameter 'userInfo' is set + if (userInfo == null) throw new ApiException(400, "Missing required parameter 'userInfo' when calling MasSaveUserInfoPost"); + + + var path = "/mas/saveUserInfo"; + path = path.Replace("{format}", "json"); + + var queryParams = new Dictionary(); + var headerParams = new Dictionary(); + var formParams = new Dictionary(); + var fileParams = new Dictionary(); + String postBody = null; + + postBody = ApiClient.Serialize(userInfo); // http body (model) parameter + + // authentication setting, if any + String[] authSettings = new String[] { "api_key" }; + + // make the HTTP request + IRestResponse response = (IRestResponse) ApiClient.CallApi(path, Method.POST, queryParams, postBody, headerParams, formParams, fileParams, authSettings); + + if (((int)response.StatusCode) >= 400) + throw new ApiException ((int)response.StatusCode, "Error calling MasSaveUserInfoPost: " + response.Content, response.Content); + else if (((int)response.StatusCode) == 0) + throw new ApiException ((int)response.StatusCode, "Error calling MasSaveUserInfoPost: " + response.ErrorMessage, response.ErrorMessage); + + return (UserInfoResponse) ApiClient.Deserialize(response.Content, typeof(UserInfoResponse), response.Headers); + } + + /// + /// Anyagok keresése. A keresés elsõ futtatásakor csak az elsõ SearchResult tartalmaz anyagokat, a találati lista elsõ oldalát, cím szerint rendezetten. Újbóli futtatás esetén a paraméter megjelenítési információinak módosításával változtatható az anyagok listája. + /// + /// + /// List<SearchResult> + public List MasSearchItemPost (QueryObject queryObject) + { + + // verify the required parameter 'queryObject' is set + if (queryObject == null) throw new ApiException(400, "Missing required parameter 'queryObject' when calling MasSearchItemPost"); + + + var path = "/mas/searchItem"; + path = path.Replace("{format}", "json"); + + var queryParams = new Dictionary(); + var headerParams = new Dictionary(); + var formParams = new Dictionary(); + var fileParams = new Dictionary(); + String postBody = null; + + postBody = ApiClient.Serialize(queryObject); // http body (model) parameter + + // authentication setting, if any + String[] authSettings = new String[] { "api_key" }; + + // make the HTTP request + IRestResponse response = (IRestResponse) ApiClient.CallApi(path, Method.POST, queryParams, postBody, headerParams, formParams, fileParams, authSettings); + + if (((int)response.StatusCode) >= 400) + throw new ApiException ((int)response.StatusCode, "Error calling MasSearchItemPost: " + response.Content, response.Content); + else if (((int)response.StatusCode) == 0) + throw new ApiException ((int)response.StatusCode, "Error calling MasSearchItemPost: " + response.ErrorMessage, response.ErrorMessage); + + return (List) ApiClient.Deserialize(response.Content, typeof(List), response.Headers); + } + + /// + /// Egy QueryObject paraméter alapján elkéri az ItemManager-tõl a paraméterben tárolt szûrési feltételeknek megfelelõ Job-ok listáját. + /// + /// + /// List<Job> + public List MasSearchJobsPost (QueryObject parameter) + { + + // verify the required parameter 'parameter' is set + if (parameter == null) throw new ApiException(400, "Missing required parameter 'parameter' when calling MasSearchJobsPost"); + + + var path = "/mas/searchJobs"; + path = path.Replace("{format}", "json"); + + var queryParams = new Dictionary(); + var headerParams = new Dictionary(); + var formParams = new Dictionary(); + var fileParams = new Dictionary(); + String postBody = null; + + postBody = ApiClient.Serialize(parameter); // http body (model) parameter + + // authentication setting, if any + String[] authSettings = new String[] { "api_key" }; + + // make the HTTP request + IRestResponse response = (IRestResponse) ApiClient.CallApi(path, Method.POST, queryParams, postBody, headerParams, formParams, fileParams, authSettings); + + if (((int)response.StatusCode) >= 400) + throw new ApiException ((int)response.StatusCode, "Error calling MasSearchJobsPost: " + response.Content, response.Content); + else if (((int)response.StatusCode) == 0) + throw new ApiException ((int)response.StatusCode, "Error calling MasSearchJobsPost: " + response.ErrorMessage, response.ErrorMessage); + + return (List) ApiClient.Deserialize(response.Content, typeof(List), response.Headers); + } + + /// + /// Munkafolyamat motor leállítása. + /// + /// + public void MasShutdownGet () + { + + + var path = "/mas/shutdown"; + path = path.Replace("{format}", "json"); + + var queryParams = new Dictionary(); + var headerParams = new Dictionary(); + var formParams = new Dictionary(); + var fileParams = new Dictionary(); + String postBody = null; + + + // authentication setting, if any + String[] authSettings = new String[] { "api_key" }; + + // make the HTTP request + IRestResponse response = (IRestResponse) ApiClient.CallApi(path, Method.GET, queryParams, postBody, headerParams, formParams, fileParams, authSettings); + + if (((int)response.StatusCode) >= 400) + throw new ApiException ((int)response.StatusCode, "Error calling MasShutdownGet: " + response.Content, response.Content); + else if (((int)response.StatusCode) == 0) + throw new ApiException ((int)response.StatusCode, "Error calling MasShutdownGet: " + response.ErrorMessage, response.ErrorMessage); + + return; + } + + /// + /// Munkafolyamat motor elindítása. + /// + /// + public void MasStartupGet () + { + + + var path = "/mas/startup"; + path = path.Replace("{format}", "json"); + + var queryParams = new Dictionary(); + var headerParams = new Dictionary(); + var formParams = new Dictionary(); + var fileParams = new Dictionary(); + String postBody = null; + + + // authentication setting, if any + String[] authSettings = new String[] { "api_key" }; + + // make the HTTP request + IRestResponse response = (IRestResponse) ApiClient.CallApi(path, Method.GET, queryParams, postBody, headerParams, formParams, fileParams, authSettings); + + if (((int)response.StatusCode) >= 400) + throw new ApiException ((int)response.StatusCode, "Error calling MasStartupGet: " + response.Content, response.Content); + else if (((int)response.StatusCode) == 0) + throw new ApiException ((int)response.StatusCode, "Error calling MasStartupGet: " + response.ErrorMessage, response.ErrorMessage); + + return; + } + + /// + /// Munkafolyamat azonosító alapján egy új felfüggesztési kérelmet helyez el a motor rendszerüzenet várakozási sorába. + /// + /// + /// + public void MasSuspendJobPost (long? jobId) + { + + // verify the required parameter 'jobId' is set + if (jobId == null) throw new ApiException(400, "Missing required parameter 'jobId' when calling MasSuspendJobPost"); + + + var path = "/mas/suspendJob"; + path = path.Replace("{format}", "json"); + + var queryParams = new Dictionary(); + var headerParams = new Dictionary(); + var formParams = new Dictionary(); + var fileParams = new Dictionary(); + String postBody = null; + + postBody = ApiClient.Serialize(jobId); // http body (model) parameter + + // authentication setting, if any + String[] authSettings = new String[] { "api_key" }; + + // make the HTTP request + IRestResponse response = (IRestResponse) ApiClient.CallApi(path, Method.POST, queryParams, postBody, headerParams, formParams, fileParams, authSettings); + + if (((int)response.StatusCode) >= 400) + throw new ApiException ((int)response.StatusCode, "Error calling MasSuspendJobPost: " + response.Content, response.Content); + else if (((int)response.StatusCode) == 0) + throw new ApiException ((int)response.StatusCode, "Error calling MasSuspendJobPost: " + response.ErrorMessage, response.ErrorMessage); + + return; + } + + } +} diff --git a/client/MediaCubeClient/IO/Swagger/Client/ApiClient.cs b/client/MediaCubeClient/IO/Swagger/Client/ApiClient.cs new file mode 100644 index 00000000..17c49327 --- /dev/null +++ b/client/MediaCubeClient/IO/Swagger/Client/ApiClient.cs @@ -0,0 +1,273 @@ +using System; +using System.Collections.Generic; +using System.Globalization; +using System.Text.RegularExpressions; +using System.IO; +using System.Web; +using System.Linq; +using System.Net; +using System.Text; +using Newtonsoft.Json; +using RestSharp; +using RestSharp.Extensions; +using RestSharp.Extensions.MonoHttp; + +namespace IO.Swagger.Client { + /// + /// API client is mainly responible for making the HTTP call to the API backend. + /// + public class ApiClient { + private readonly Dictionary _defaultHeaderMap = new Dictionary(); + + /// + /// Initializes a new instance of the class. + /// + /// The base path. + public ApiClient(String basePath = "https://virtserver.swaggerhub.com/laszlo.eros/petstoremas/1.0.0") { + BasePath = basePath; + RestClient = new RestClient(BasePath); + } + + /// + /// Gets or sets the base path. + /// + /// The base path + public string BasePath { get; set; } + + /// + /// Gets or sets the RestClient. + /// + /// An instance of the RestClient + public RestClient RestClient { get; set; } + + /// + /// Gets the default header. + /// + public Dictionary DefaultHeader { + get { return _defaultHeaderMap; } + } + + /// + /// Makes the HTTP request (Sync). + /// + /// URL path. + /// HTTP method. + /// Query parameters. + /// HTTP body (POST request). + /// Header parameters. + /// Form parameters. + /// File parameters. + /// Authentication settings. + /// Object + public Object CallApi(String path, RestSharp.Method method, Dictionary queryParams, String postBody, + Dictionary headerParams, Dictionary formParams, + Dictionary fileParams, String[] authSettings) { + + var request = new RestRequest(path, method); + + UpdateParamsForAuth(queryParams, headerParams, authSettings); + + // add default header, if any + foreach (var defaultHeader in _defaultHeaderMap) + request.AddHeader(defaultHeader.Key, defaultHeader.Value); + + // add header parameter, if any + foreach (var param in headerParams) + request.AddHeader(param.Key, param.Value); + + // add query parameter, if any + foreach (var param in queryParams) + request.AddParameter(param.Key, param.Value, ParameterType.GetOrPost); + + // add form parameter, if any + foreach (var param in formParams) + request.AddParameter(param.Key, param.Value, ParameterType.GetOrPost); + + // add file parameter, if any + foreach (var param in fileParams) + request.AddFile(param.Value.Name, param.Value.Writer, param.Value.FileName, param.Value.ContentType); + + if (postBody != null) // http body (model) parameter + request.AddParameter("application/json", postBody, ParameterType.RequestBody); + + return (Object)RestClient.Execute(request); + + } + + /// + /// Add default header. + /// + /// Header field name. + /// Header field value. + /// + public void AddDefaultHeader(string key, string value) { + _defaultHeaderMap.Add(key, value); + } + + /// + /// Escape string (url-encoded). + /// + /// String to be escaped. + /// Escaped string. + public string EscapeString(string str) { + return HttpUtility.UrlEncode(str); + } + + /// + /// Create FileParameter based on Stream. + /// + /// Parameter name. + /// Input stream. + /// FileParameter. + public FileParameter ParameterToFile(string name, Stream stream) { + if (stream is FileStream) + return FileParameter.Create(name, stream.ReadAsBytes(), Path.GetFileName(((FileStream)stream).Name)); + else + return FileParameter.Create(name, stream.ReadAsBytes(), "no_file_name_provided"); + } + + /// + /// If parameter is DateTime, output in a formatted string (default ISO 8601), customizable with Configuration.DateTime. + /// If parameter is a list of string, join the list with ",". + /// Otherwise just return the string. + /// + /// The parameter (header, path, query, form). + /// Formatted string. + public string ParameterToString(object obj) { + if (obj is DateTime) + // Return a formatted date string - Can be customized with Configuration.DateTimeFormat + // Defaults to an ISO 8601, using the known as a Round-trip date/time pattern ("o") + // https://msdn.microsoft.com/en-us/library/az4se3k1(v=vs.110).aspx#Anchor_8 + // For example: 2009-06-15T13:45:30.0000000 + return ((DateTime)obj).ToString(Configuration.DateTimeFormat); + else if (obj is List) + return String.Join(",", (obj as List).ToArray()); + else + return Convert.ToString(obj); + } + + /// + /// Deserialize the JSON string into a proper object. + /// + /// HTTP body (e.g. string, JSON). + /// Object type. + /// HTTP headers. + /// Object representation of the JSON string. + public object Deserialize(string content, Type type, IList headers = null) { + if (type == typeof(Object)) // return an object + { + return content; + } + + if (type == typeof(Stream)) { + var filePath = String.IsNullOrEmpty(Configuration.TempFolderPath) + ? Path.GetTempPath() + : Configuration.TempFolderPath; + + var fileName = filePath + Guid.NewGuid(); + if (headers != null) { + var regex = new Regex(@"Content-Disposition:.*filename=['""]?([^'""\s]+)['""]?$"); + var match = regex.Match(headers.ToString()); + if (match.Success) + fileName = filePath + match.Value.Replace("\"", "").Replace("'", ""); + } + File.WriteAllText(fileName, content); + return new FileStream(fileName, FileMode.Open); + + } + + if (type.Name.StartsWith("System.Nullable`1[[System.DateTime")) // return a datetime object + { + return DateTime.Parse(content, null, System.Globalization.DateTimeStyles.RoundtripKind); + } + + if (type == typeof(String) || type.Name.StartsWith("System.Nullable")) // return primitive type + { + return ConvertType(content, type); + } + + // at this point, it must be a model (json) + try { + return JsonConvert.DeserializeObject(content, type); + } + catch (IOException e) { + throw new ApiException(500, e.Message); + } + } + + /// + /// Serialize an object into JSON string. + /// + /// Object. + /// JSON string. + public string Serialize(object obj) { + try { + return obj != null ? JsonConvert.SerializeObject(obj) : null; + } + catch (Exception e) { + throw new ApiException(500, e.Message); + } + } + + /// + /// Get the API key with prefix. + /// + /// API key identifier (authentication scheme). + /// API key with prefix. + public string GetApiKeyWithPrefix(string apiKeyIdentifier) { + var apiKeyValue = ""; + Configuration.ApiKey.TryGetValue(apiKeyIdentifier, out apiKeyValue); + var apiKeyPrefix = ""; + if (Configuration.ApiKeyPrefix.TryGetValue(apiKeyIdentifier, out apiKeyPrefix)) + return apiKeyPrefix + " " + apiKeyValue; + else + return apiKeyValue; + } + + /// + /// Update parameters based on authentication. + /// + /// Query parameters. + /// Header parameters. + /// Authentication settings. + public void UpdateParamsForAuth(Dictionary queryParams, Dictionary headerParams, string[] authSettings) { + if (authSettings == null || authSettings.Length == 0) + return; + + foreach (string auth in authSettings) { + // determine which one to use + switch (auth) { + case "api_key": + headerParams["api_key"] = GetApiKeyWithPrefix("api_key"); + + break; + default: + //TODO show warning about security definition not found + break; + } + } + } + + /// + /// Encode string in base64 format. + /// + /// String to be encoded. + /// Encoded string. + public static string Base64Encode(string text) { + var textByte = System.Text.Encoding.UTF8.GetBytes(text); + return System.Convert.ToBase64String(textByte); + } + + /// + /// Dynamically cast the object into target type. + /// Ref: http://stackoverflow.com/questions/4925718/c-dynamic-runtime-cast + /// + /// Object to be casted + /// Target type + /// Casted object + public static Object ConvertType(Object source, Type dest) { + return Convert.ChangeType(source, dest); + } + + } +} \ No newline at end of file diff --git a/client/MediaCubeClient/IO/Swagger/Client/ApiException.cs b/client/MediaCubeClient/IO/Swagger/Client/ApiException.cs new file mode 100644 index 00000000..dfc5fd9f --- /dev/null +++ b/client/MediaCubeClient/IO/Swagger/Client/ApiException.cs @@ -0,0 +1,47 @@ +using System; + +namespace IO.Swagger.Client { + /// + /// API Exception + /// + public class ApiException : Exception { + /// + /// Gets or sets the error code (HTTP status code) + /// + /// The error code (HTTP status code). + public int ErrorCode { get; set; } + + /// + /// Gets or sets the error content (body json object) + /// + /// The error content (Http response body). + public Object ErrorContent { get; private set; } + + /// + /// Initializes a new instance of the class. + /// + public ApiException() {} + + /// + /// Initializes a new instance of the class. + /// + /// HTTP status code. + /// Error message. + public ApiException(int errorCode, string message) : base(message) { + this.ErrorCode = errorCode; + } + + /// + /// Initializes a new instance of the class. + /// + /// HTTP status code. + /// Error message. + /// Error content. + public ApiException(int errorCode, string message, Object errorContent = null) : base(message) { + this.ErrorCode = errorCode; + this.ErrorContent = errorContent; + } + + } + +} diff --git a/client/MediaCubeClient/IO/Swagger/Client/Configuration.cs b/client/MediaCubeClient/IO/Swagger/Client/Configuration.cs new file mode 100644 index 00000000..d5c58eef --- /dev/null +++ b/client/MediaCubeClient/IO/Swagger/Client/Configuration.cs @@ -0,0 +1,133 @@ +using System; +using System.Reflection; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; + +namespace IO.Swagger.Client +{ + /// + /// Represents a set of configuration settings + /// + public class Configuration + { + + /// + /// Version of the package. + /// + /// Version of the package. + public const string Version = "1.0.0"; + + /// + /// Gets or sets the default API client for making HTTP calls. + /// + /// The API client. + public static ApiClient DefaultApiClient = new ApiClient(); + + /// + /// Gets or sets the username (HTTP basic authentication). + /// + /// The username. + public static String Username { get; set; } + + public static string BasePath { get; set; } + + /// + /// Gets or sets the password (HTTP basic authentication). + /// + /// The password. + public static String Password { get; set; } + + /// + /// Gets or sets the API key based on the authentication name. + /// + /// The API key. + public static Dictionary ApiKey = new Dictionary(); + + /// + /// Gets or sets the prefix (e.g. Token) of the API key based on the authentication name. + /// + /// The prefix of the API key. + public static Dictionary ApiKeyPrefix = new Dictionary(); + + private static string _tempFolderPath = Path.GetTempPath(); + + /// + /// Gets or sets the temporary folder path to store the files downloaded from the server. + /// + /// Folder path. + public static String TempFolderPath + { + get { return _tempFolderPath; } + + set + { + if (String.IsNullOrEmpty(value)) + { + _tempFolderPath = value; + return; + } + + // create the directory if it does not exist + if (!Directory.Exists(value)) + Directory.CreateDirectory(value); + + // check if the path contains directory separator at the end + if (value[value.Length - 1] == Path.DirectorySeparatorChar) + _tempFolderPath = value; + else + _tempFolderPath = value + Path.DirectorySeparatorChar; + } + } + + private const string ISO8601_DATETIME_FORMAT = "o"; + private static string _dateTimeFormat = ISO8601_DATETIME_FORMAT; + + /// + /// Gets or sets the the date time format used when serializing in the ApiClient + /// By default, it's set to ISO 8601 - "o", for others see: + /// https://msdn.microsoft.com/en-us/library/az4se3k1(v=vs.110).aspx + /// and https://msdn.microsoft.com/en-us/library/8kb3ddd4(v=vs.110).aspx + /// No validation is done to ensure that the string you're providing is valid + /// + /// The DateTimeFormat string + public static String DateTimeFormat + { + get + { + return _dateTimeFormat; + } + set + { + if (string.IsNullOrEmpty(value)) + { + // Never allow a blank or null string, go back to the default + _dateTimeFormat = ISO8601_DATETIME_FORMAT; + return; + } + + // Caution, no validation when you choose date time format other than ISO 8601 + // Take a look at the above links + _dateTimeFormat = value; + } + } + + /// + /// Returns a string with essential information for debugging. + /// + public static String ToDebugReport() + { + String report = "C# SDK (IO.Swagger) Debug Report:\n"; + report += " OS: " + Environment.OSVersion + "\n"; + report += " .NET Framework Version: " + Assembly + .GetExecutingAssembly() + .GetReferencedAssemblies() + .Where(x => x.Name == "System.Core").First().Version.ToString() + "\n"; + report += " Version of the API: 1.0.0\n"; + report += " SDK Package Version: 1.0.0\n"; + + return report; + } + } +} diff --git a/client/MediaCubeClient/IO/Swagger/Model/AtomicLong.cs b/client/MediaCubeClient/IO/Swagger/Model/AtomicLong.cs new file mode 100644 index 00000000..08750568 --- /dev/null +++ b/client/MediaCubeClient/IO/Swagger/Model/AtomicLong.cs @@ -0,0 +1,36 @@ +using System; +using System.Text; +using System.Collections; +using System.Collections.Generic; +using System.Runtime.Serialization; +using Newtonsoft.Json; + +namespace IO.Swagger.Model { + + /// + /// + /// + [DataContract] + public class AtomicLong { + + /// + /// Get the string presentation of the object + /// + /// String presentation of the object + public override string ToString() { + var sb = new StringBuilder(); + sb.Append("class AtomicLong {\n"); + sb.Append("}\n"); + return sb.ToString(); + } + + /// + /// Get the JSON string presentation of the object + /// + /// JSON string presentation of the object + public string ToJson() { + return JsonConvert.SerializeObject(this, Formatting.Indented); + } + +} +} diff --git a/client/MediaCubeClient/IO/Swagger/Model/BaseType.cs b/client/MediaCubeClient/IO/Swagger/Model/BaseType.cs new file mode 100644 index 00000000..0db5deab --- /dev/null +++ b/client/MediaCubeClient/IO/Swagger/Model/BaseType.cs @@ -0,0 +1,36 @@ +using System; +using System.Text; +using System.Collections; +using System.Collections.Generic; +using System.Runtime.Serialization; +using Newtonsoft.Json; + +namespace IO.Swagger.Model { + + /// + /// + /// + [DataContract] + public class BaseType { + + /// + /// Get the string presentation of the object + /// + /// String presentation of the object + public override string ToString() { + var sb = new StringBuilder(); + sb.Append("class BaseType {\n"); + sb.Append("}\n"); + return sb.ToString(); + } + + /// + /// Get the JSON string presentation of the object + /// + /// JSON string presentation of the object + public string ToJson() { + return JsonConvert.SerializeObject(this, Formatting.Indented); + } + +} +} diff --git a/client/MediaCubeClient/IO/Swagger/Model/BreakType.cs b/client/MediaCubeClient/IO/Swagger/Model/BreakType.cs new file mode 100644 index 00000000..de893366 --- /dev/null +++ b/client/MediaCubeClient/IO/Swagger/Model/BreakType.cs @@ -0,0 +1,36 @@ +using System; +using System.Text; +using System.Collections; +using System.Collections.Generic; +using System.Runtime.Serialization; +using Newtonsoft.Json; + +namespace IO.Swagger.Model { + + /// + /// + /// + [DataContract] + public class BreakType { + + /// + /// Get the string presentation of the object + /// + /// String presentation of the object + public override string ToString() { + var sb = new StringBuilder(); + sb.Append("class BreakType {\n"); + sb.Append("}\n"); + return sb.ToString(); + } + + /// + /// Get the JSON string presentation of the object + /// + /// JSON string presentation of the object + public string ToJson() { + return JsonConvert.SerializeObject(this, Formatting.Indented); + } + +} +} diff --git a/client/MediaCubeClient/IO/Swagger/Model/CreateJobParameters.cs b/client/MediaCubeClient/IO/Swagger/Model/CreateJobParameters.cs new file mode 100644 index 00000000..afcef319 --- /dev/null +++ b/client/MediaCubeClient/IO/Swagger/Model/CreateJobParameters.cs @@ -0,0 +1,68 @@ +using System; +using System.Text; +using System.Collections; +using System.Collections.Generic; +using System.Runtime.Serialization; +using Newtonsoft.Json; + +namespace IO.Swagger.Model { + + /// + /// + /// + [DataContract] + public class CreateJobParameters { + /// + /// Gets or Sets JobTemplate + /// + [DataMember(Name="jobTemplate", EmitDefaultValue=false)] + [JsonProperty(PropertyName = "jobTemplate")] + public string JobTemplate { get; set; } + + /// + /// Gets or Sets JobName + /// + [DataMember(Name="jobName", EmitDefaultValue=false)] + [JsonProperty(PropertyName = "jobName")] + public string JobName { get; set; } + + /// + /// Gets or Sets Parameters + /// + [DataMember(Name="parameters", EmitDefaultValue=false)] + [JsonProperty(PropertyName = "parameters")] + public List Parameters { get; set; } + + /// + /// Gets or Sets JobStart + /// + [DataMember(Name="jobStart", EmitDefaultValue=false)] + [JsonProperty(PropertyName = "jobStart")] + public JobStart JobStart { get; set; } + + + /// + /// Get the string presentation of the object + /// + /// String presentation of the object + public override string ToString() { + var sb = new StringBuilder(); + sb.Append("class CreateJobParameters {\n"); + sb.Append(" JobTemplate: ").Append(JobTemplate).Append("\n"); + sb.Append(" JobName: ").Append(JobName).Append("\n"); + sb.Append(" Parameters: ").Append(Parameters).Append("\n"); + sb.Append(" JobStart: ").Append(JobStart).Append("\n"); + sb.Append("}\n"); + return sb.ToString(); + } + + /// + /// Get the JSON string presentation of the object + /// + /// JSON string presentation of the object + public string ToJson() { + return JsonConvert.SerializeObject(this, Formatting.Indented); + } + +} +} diff --git a/client/MediaCubeClient/IO/Swagger/Model/DeclarationType.cs b/client/MediaCubeClient/IO/Swagger/Model/DeclarationType.cs new file mode 100644 index 00000000..6d9d4ab7 --- /dev/null +++ b/client/MediaCubeClient/IO/Swagger/Model/DeclarationType.cs @@ -0,0 +1,36 @@ +using System; +using System.Text; +using System.Collections; +using System.Collections.Generic; +using System.Runtime.Serialization; +using Newtonsoft.Json; + +namespace IO.Swagger.Model { + + /// + /// + /// + [DataContract] + public class DeclarationType { + + /// + /// Get the string presentation of the object + /// + /// String presentation of the object + public override string ToString() { + var sb = new StringBuilder(); + sb.Append("class DeclarationType {\n"); + sb.Append("}\n"); + return sb.ToString(); + } + + /// + /// Get the JSON string presentation of the object + /// + /// JSON string presentation of the object + public string ToJson() { + return JsonConvert.SerializeObject(this, Formatting.Indented); + } + +} +} diff --git a/client/MediaCubeClient/IO/Swagger/Model/DeliveryMethod.cs b/client/MediaCubeClient/IO/Swagger/Model/DeliveryMethod.cs new file mode 100644 index 00000000..a7c0ef6a --- /dev/null +++ b/client/MediaCubeClient/IO/Swagger/Model/DeliveryMethod.cs @@ -0,0 +1,36 @@ +using System; +using System.Text; +using System.Collections; +using System.Collections.Generic; +using System.Runtime.Serialization; +using Newtonsoft.Json; + +namespace IO.Swagger.Model { + + /// + /// + /// + [DataContract] + public class DeliveryMethod { + + /// + /// Get the string presentation of the object + /// + /// String presentation of the object + public override string ToString() { + var sb = new StringBuilder(); + sb.Append("class DeliveryMethod {\n"); + sb.Append("}\n"); + return sb.ToString(); + } + + /// + /// Get the JSON string presentation of the object + /// + /// JSON string presentation of the object + public string ToJson() { + return JsonConvert.SerializeObject(this, Formatting.Indented); + } + +} +} diff --git a/client/MediaCubeClient/IO/Swagger/Model/Domain.cs b/client/MediaCubeClient/IO/Swagger/Model/Domain.cs new file mode 100644 index 00000000..41b07f1d --- /dev/null +++ b/client/MediaCubeClient/IO/Swagger/Model/Domain.cs @@ -0,0 +1,60 @@ +using System; +using System.Text; +using System.Collections; +using System.Collections.Generic; +using System.Runtime.Serialization; +using Newtonsoft.Json; + +namespace IO.Swagger.Model { + + /// + /// + /// + [DataContract] + public class Domain { + /// + /// Gets or Sets Name + /// + [DataMember(Name="name", EmitDefaultValue=false)] + [JsonProperty(PropertyName = "name")] + public string Name { get; set; } + + /// + /// Gets or Sets DomainCategoryId + /// + [DataMember(Name="domainCategoryId", EmitDefaultValue=false)] + [JsonProperty(PropertyName = "domainCategoryId")] + public long? DomainCategoryId { get; set; } + + /// + /// Gets or Sets Value + /// + [DataMember(Name="value", EmitDefaultValue=false)] + [JsonProperty(PropertyName = "value")] + public long? Value { get; set; } + + + /// + /// Get the string presentation of the object + /// + /// String presentation of the object + public override string ToString() { + var sb = new StringBuilder(); + sb.Append("class Domain {\n"); + sb.Append(" Name: ").Append(Name).Append("\n"); + sb.Append(" DomainCategoryId: ").Append(DomainCategoryId).Append("\n"); + sb.Append(" Value: ").Append(Value).Append("\n"); + sb.Append("}\n"); + return sb.ToString(); + } + + /// + /// Get the JSON string presentation of the object + /// + /// JSON string presentation of the object + public string ToJson() { + return JsonConvert.SerializeObject(this, Formatting.Indented); + } + +} +} diff --git a/client/MediaCubeClient/IO/Swagger/Model/DomainCategory.cs b/client/MediaCubeClient/IO/Swagger/Model/DomainCategory.cs new file mode 100644 index 00000000..dfd8faf6 --- /dev/null +++ b/client/MediaCubeClient/IO/Swagger/Model/DomainCategory.cs @@ -0,0 +1,52 @@ +using System; +using System.Text; +using System.Collections; +using System.Collections.Generic; +using System.Runtime.Serialization; +using Newtonsoft.Json; + +namespace IO.Swagger.Model { + + /// + /// + /// + [DataContract] + public class DomainCategory : EntityBase { + /// + /// Gets or Sets Id + /// + [DataMember(Name="id", EmitDefaultValue=false)] + [JsonProperty(PropertyName = "id")] + public long? Id { get; set; } + + /// + /// Gets or Sets Domains + /// + [DataMember(Name="domains", EmitDefaultValue=false)] + [JsonProperty(PropertyName = "domains")] + public List Domains { get; set; } + + + /// + /// Get the string presentation of the object + /// + /// String presentation of the object + public override string ToString() { + var sb = new StringBuilder(); + sb.Append("class DomainCategory {\n"); + sb.Append(" Id: ").Append(Id).Append("\n"); + sb.Append(" Domains: ").Append(Domains).Append("\n"); + sb.Append("}\n"); + return sb.ToString(); + } + + /// + /// Get the JSON string presentation of the object + /// + /// JSON string presentation of the object + public new string ToJson() { + return JsonConvert.SerializeObject(this, Formatting.Indented); + } + +} +} diff --git a/client/MediaCubeClient/IO/Swagger/Model/DomainCategoryResponse.cs b/client/MediaCubeClient/IO/Swagger/Model/DomainCategoryResponse.cs new file mode 100644 index 00000000..2449669b --- /dev/null +++ b/client/MediaCubeClient/IO/Swagger/Model/DomainCategoryResponse.cs @@ -0,0 +1,68 @@ +using System; +using System.Text; +using System.Collections; +using System.Collections.Generic; +using System.Runtime.Serialization; +using Newtonsoft.Json; + +namespace IO.Swagger.Model { + + /// + /// + /// + [DataContract] + public class DomainCategoryResponse : SystemResponse { + /// + /// Gets or Sets Id + /// + [DataMember(Name="id", EmitDefaultValue=false)] + [JsonProperty(PropertyName = "id")] + public long? Id { get; set; } + + /// + /// Gets or Sets Data + /// + [DataMember(Name="data", EmitDefaultValue=false)] + [JsonProperty(PropertyName = "data")] + public Object Data { get; set; } + + /// + /// Gets or Sets Message + /// + [DataMember(Name="message", EmitDefaultValue=false)] + [JsonProperty(PropertyName = "message")] + public string Message { get; set; } + + /// + /// Gets or Sets Success + /// + [DataMember(Name="success", EmitDefaultValue=false)] + [JsonProperty(PropertyName = "success")] + public bool? Success { get; set; } + + + /// + /// Get the string presentation of the object + /// + /// String presentation of the object + public override string ToString() { + var sb = new StringBuilder(); + sb.Append("class DomainCategoryResponse {\n"); + sb.Append(" Id: ").Append(Id).Append("\n"); + sb.Append(" Data: ").Append(Data).Append("\n"); + sb.Append(" Message: ").Append(Message).Append("\n"); + sb.Append(" Success: ").Append(Success).Append("\n"); + sb.Append("}\n"); + return sb.ToString(); + } + + /// + /// Get the JSON string presentation of the object + /// + /// JSON string presentation of the object + public new string ToJson() { + return JsonConvert.SerializeObject(this, Formatting.Indented); + } + +} +} diff --git a/client/MediaCubeClient/IO/Swagger/Model/DomainResponse.cs b/client/MediaCubeClient/IO/Swagger/Model/DomainResponse.cs new file mode 100644 index 00000000..e2c4ed54 --- /dev/null +++ b/client/MediaCubeClient/IO/Swagger/Model/DomainResponse.cs @@ -0,0 +1,68 @@ +using System; +using System.Text; +using System.Collections; +using System.Collections.Generic; +using System.Runtime.Serialization; +using Newtonsoft.Json; + +namespace IO.Swagger.Model { + + /// + /// + /// + [DataContract] + public class DomainResponse : SystemResponse { + /// + /// Gets or Sets Id + /// + [DataMember(Name="id", EmitDefaultValue=false)] + [JsonProperty(PropertyName = "id")] + public long? Id { get; set; } + + /// + /// Gets or Sets Data + /// + [DataMember(Name="data", EmitDefaultValue=false)] + [JsonProperty(PropertyName = "data")] + public Object Data { get; set; } + + /// + /// Gets or Sets Message + /// + [DataMember(Name="message", EmitDefaultValue=false)] + [JsonProperty(PropertyName = "message")] + public string Message { get; set; } + + /// + /// Gets or Sets Success + /// + [DataMember(Name="success", EmitDefaultValue=false)] + [JsonProperty(PropertyName = "success")] + public bool? Success { get; set; } + + + /// + /// Get the string presentation of the object + /// + /// String presentation of the object + public override string ToString() { + var sb = new StringBuilder(); + sb.Append("class DomainResponse {\n"); + sb.Append(" Id: ").Append(Id).Append("\n"); + sb.Append(" Data: ").Append(Data).Append("\n"); + sb.Append(" Message: ").Append(Message).Append("\n"); + sb.Append(" Success: ").Append(Success).Append("\n"); + sb.Append("}\n"); + return sb.ToString(); + } + + /// + /// Get the JSON string presentation of the object + /// + /// JSON string presentation of the object + public new string ToJson() { + return JsonConvert.SerializeObject(this, Formatting.Indented); + } + +} +} diff --git a/client/MediaCubeClient/IO/Swagger/Model/Domains.cs b/client/MediaCubeClient/IO/Swagger/Model/Domains.cs new file mode 100644 index 00000000..97890de1 --- /dev/null +++ b/client/MediaCubeClient/IO/Swagger/Model/Domains.cs @@ -0,0 +1,44 @@ +using System; +using System.Text; +using System.Collections; +using System.Collections.Generic; +using System.Runtime.Serialization; +using Newtonsoft.Json; + +namespace IO.Swagger.Model { + + /// + /// + /// + [DataContract] + public class Domains { + /// + /// Gets or Sets Values + /// + [DataMember(Name="values", EmitDefaultValue=false)] + [JsonProperty(PropertyName = "values")] + public List Values { get; set; } + + + /// + /// Get the string presentation of the object + /// + /// String presentation of the object + public override string ToString() { + var sb = new StringBuilder(); + sb.Append("class Domains {\n"); + sb.Append(" Values: ").Append(Values).Append("\n"); + sb.Append("}\n"); + return sb.ToString(); + } + + /// + /// Get the JSON string presentation of the object + /// + /// JSON string presentation of the object + public string ToJson() { + return JsonConvert.SerializeObject(this, Formatting.Indented); + } + +} +} diff --git a/client/MediaCubeClient/IO/Swagger/Model/DynamicAttributes.cs b/client/MediaCubeClient/IO/Swagger/Model/DynamicAttributes.cs new file mode 100644 index 00000000..f336387a --- /dev/null +++ b/client/MediaCubeClient/IO/Swagger/Model/DynamicAttributes.cs @@ -0,0 +1,76 @@ +using System; +using System.Text; +using System.Collections; +using System.Collections.Generic; +using System.Runtime.Serialization; +using Newtonsoft.Json; + +namespace IO.Swagger.Model { + + /// + /// + /// + [DataContract] + public class DynamicAttributes : EntityBase { + /// + /// Gets or Sets Id + /// + [DataMember(Name="id", EmitDefaultValue=false)] + [JsonProperty(PropertyName = "id")] + public long? Id { get; set; } + + /// + /// Gets or Sets ItemType + /// + [DataMember(Name="itemType", EmitDefaultValue=false)] + [JsonProperty(PropertyName = "itemType")] + public ItemType ItemType { get; set; } + + /// + /// Gets or Sets ItemTypeId + /// + [DataMember(Name="itemTypeId", EmitDefaultValue=false)] + [JsonProperty(PropertyName = "itemTypeId")] + public long? ItemTypeId { get; set; } + + /// + /// Gets or Sets Loaded + /// + [DataMember(Name="loaded", EmitDefaultValue=false)] + [JsonProperty(PropertyName = "loaded")] + public bool? Loaded { get; set; } + + /// + /// Gets or Sets Attributes + /// + [DataMember(Name="attributes", EmitDefaultValue=false)] + [JsonProperty(PropertyName = "attributes")] + public List Attributes { get; set; } + + + /// + /// Get the string presentation of the object + /// + /// String presentation of the object + public override string ToString() { + var sb = new StringBuilder(); + sb.Append("class DynamicAttributes {\n"); + sb.Append(" Id: ").Append(Id).Append("\n"); + sb.Append(" ItemType: ").Append(ItemType).Append("\n"); + sb.Append(" ItemTypeId: ").Append(ItemTypeId).Append("\n"); + sb.Append(" Loaded: ").Append(Loaded).Append("\n"); + sb.Append(" Attributes: ").Append(Attributes).Append("\n"); + sb.Append("}\n"); + return sb.ToString(); + } + + /// + /// Get the JSON string presentation of the object + /// + /// JSON string presentation of the object + public new string ToJson() { + return JsonConvert.SerializeObject(this, Formatting.Indented); + } + +} +} diff --git a/client/MediaCubeClient/IO/Swagger/Model/EntityBase.cs b/client/MediaCubeClient/IO/Swagger/Model/EntityBase.cs new file mode 100644 index 00000000..8a8df59f --- /dev/null +++ b/client/MediaCubeClient/IO/Swagger/Model/EntityBase.cs @@ -0,0 +1,44 @@ +using System; +using System.Text; +using System.Collections; +using System.Collections.Generic; +using System.Runtime.Serialization; +using Newtonsoft.Json; + +namespace IO.Swagger.Model { + + /// + /// + /// + [DataContract] + public class EntityBase { + /// + /// Gets or Sets Id + /// + [DataMember(Name="id", EmitDefaultValue=false)] + [JsonProperty(PropertyName = "id")] + public long? Id { get; set; } + + + /// + /// Get the string presentation of the object + /// + /// String presentation of the object + public override string ToString() { + var sb = new StringBuilder(); + sb.Append("class EntityBase {\n"); + sb.Append(" Id: ").Append(Id).Append("\n"); + sb.Append("}\n"); + return sb.ToString(); + } + + /// + /// Get the JSON string presentation of the object + /// + /// JSON string presentation of the object + public string ToJson() { + return JsonConvert.SerializeObject(this, Formatting.Indented); + } + +} +} diff --git a/client/MediaCubeClient/IO/Swagger/Model/FileType.cs b/client/MediaCubeClient/IO/Swagger/Model/FileType.cs new file mode 100644 index 00000000..395e60e7 --- /dev/null +++ b/client/MediaCubeClient/IO/Swagger/Model/FileType.cs @@ -0,0 +1,92 @@ +using System; +using System.Text; +using System.Collections; +using System.Collections.Generic; +using System.Runtime.Serialization; +using Newtonsoft.Json; + +namespace IO.Swagger.Model { + + /// + /// + /// + [DataContract] + public class FileType : EntityBase { + /// + /// Gets or Sets Id + /// + [DataMember(Name="id", EmitDefaultValue=false)] + [JsonProperty(PropertyName = "id")] + public long? Id { get; set; } + + /// + /// Gets or Sets AudioCodec + /// + [DataMember(Name="audioCodec", EmitDefaultValue=false)] + [JsonProperty(PropertyName = "audioCodec")] + public string AudioCodec { get; set; } + + /// + /// Gets or Sets Description + /// + [DataMember(Name="description", EmitDefaultValue=false)] + [JsonProperty(PropertyName = "description")] + public string Description { get; set; } + + /// + /// Gets or Sets Framerate + /// + [DataMember(Name="framerate", EmitDefaultValue=false)] + [JsonProperty(PropertyName = "framerate")] + public float? Framerate { get; set; } + + /// + /// Gets or Sets Name + /// + [DataMember(Name="name", EmitDefaultValue=false)] + [JsonProperty(PropertyName = "name")] + public string Name { get; set; } + + /// + /// Gets or Sets VideoCodec + /// + [DataMember(Name="videoCodec", EmitDefaultValue=false)] + [JsonProperty(PropertyName = "videoCodec")] + public string VideoCodec { get; set; } + + /// + /// Gets or Sets VideoTrack + /// + [DataMember(Name="videoTrack", EmitDefaultValue=false)] + [JsonProperty(PropertyName = "videoTrack")] + public int? VideoTrack { get; set; } + + + /// + /// Get the string presentation of the object + /// + /// String presentation of the object + public override string ToString() { + var sb = new StringBuilder(); + sb.Append("class FileType {\n"); + sb.Append(" Id: ").Append(Id).Append("\n"); + sb.Append(" AudioCodec: ").Append(AudioCodec).Append("\n"); + sb.Append(" Description: ").Append(Description).Append("\n"); + sb.Append(" Framerate: ").Append(Framerate).Append("\n"); + sb.Append(" Name: ").Append(Name).Append("\n"); + sb.Append(" VideoCodec: ").Append(VideoCodec).Append("\n"); + sb.Append(" VideoTrack: ").Append(VideoTrack).Append("\n"); + sb.Append("}\n"); + return sb.ToString(); + } + + /// + /// Get the JSON string presentation of the object + /// + /// JSON string presentation of the object + public new string ToJson() { + return JsonConvert.SerializeObject(this, Formatting.Indented); + } + +} +} diff --git a/client/MediaCubeClient/IO/Swagger/Model/FilterLogic.cs b/client/MediaCubeClient/IO/Swagger/Model/FilterLogic.cs new file mode 100644 index 00000000..fa284406 --- /dev/null +++ b/client/MediaCubeClient/IO/Swagger/Model/FilterLogic.cs @@ -0,0 +1,36 @@ +using System; +using System.Text; +using System.Collections; +using System.Collections.Generic; +using System.Runtime.Serialization; +using Newtonsoft.Json; + +namespace IO.Swagger.Model { + + /// + /// + /// + [DataContract] + public class FilterLogic { + + /// + /// Get the string presentation of the object + /// + /// String presentation of the object + public override string ToString() { + var sb = new StringBuilder(); + sb.Append("class FilterLogic {\n"); + sb.Append("}\n"); + return sb.ToString(); + } + + /// + /// Get the JSON string presentation of the object + /// + /// JSON string presentation of the object + public string ToJson() { + return JsonConvert.SerializeObject(this, Formatting.Indented); + } + +} +} diff --git a/client/MediaCubeClient/IO/Swagger/Model/FilterValueLogic.cs b/client/MediaCubeClient/IO/Swagger/Model/FilterValueLogic.cs new file mode 100644 index 00000000..9d51dfb2 --- /dev/null +++ b/client/MediaCubeClient/IO/Swagger/Model/FilterValueLogic.cs @@ -0,0 +1,36 @@ +using System; +using System.Text; +using System.Collections; +using System.Collections.Generic; +using System.Runtime.Serialization; +using Newtonsoft.Json; + +namespace IO.Swagger.Model { + + /// + /// + /// + [DataContract] + public class FilterValueLogic { + + /// + /// Get the string presentation of the object + /// + /// String presentation of the object + public override string ToString() { + var sb = new StringBuilder(); + sb.Append("class FilterValueLogic {\n"); + sb.Append("}\n"); + return sb.ToString(); + } + + /// + /// Get the JSON string presentation of the object + /// + /// JSON string presentation of the object + public string ToJson() { + return JsonConvert.SerializeObject(this, Formatting.Indented); + } + +} +} diff --git a/client/MediaCubeClient/IO/Swagger/Model/Folder.cs b/client/MediaCubeClient/IO/Swagger/Model/Folder.cs new file mode 100644 index 00000000..86241129 --- /dev/null +++ b/client/MediaCubeClient/IO/Swagger/Model/Folder.cs @@ -0,0 +1,76 @@ +using System; +using System.Text; +using System.Collections; +using System.Collections.Generic; +using System.Runtime.Serialization; +using Newtonsoft.Json; + +namespace IO.Swagger.Model { + + /// + /// + /// + [DataContract] + public class Folder : EntityBase { + /// + /// Gets or Sets Id + /// + [DataMember(Name="id", EmitDefaultValue=false)] + [JsonProperty(PropertyName = "id")] + public long? Id { get; set; } + + /// + /// Gets or Sets ParentId + /// + [DataMember(Name="parentId", EmitDefaultValue=false)] + [JsonProperty(PropertyName = "parentId")] + public long? ParentId { get; set; } + + /// + /// Gets or Sets ChildId + /// + [DataMember(Name="childId", EmitDefaultValue=false)] + [JsonProperty(PropertyName = "childId")] + public long? ChildId { get; set; } + + /// + /// Gets or Sets Parent + /// + [DataMember(Name="parent", EmitDefaultValue=false)] + [JsonProperty(PropertyName = "parent")] + public Item Parent { get; set; } + + /// + /// Gets or Sets Child + /// + [DataMember(Name="child", EmitDefaultValue=false)] + [JsonProperty(PropertyName = "child")] + public Item Child { get; set; } + + + /// + /// Get the string presentation of the object + /// + /// String presentation of the object + public override string ToString() { + var sb = new StringBuilder(); + sb.Append("class Folder {\n"); + sb.Append(" Id: ").Append(Id).Append("\n"); + sb.Append(" ParentId: ").Append(ParentId).Append("\n"); + sb.Append(" ChildId: ").Append(ChildId).Append("\n"); + sb.Append(" Parent: ").Append(Parent).Append("\n"); + sb.Append(" Child: ").Append(Child).Append("\n"); + sb.Append("}\n"); + return sb.ToString(); + } + + /// + /// Get the JSON string presentation of the object + /// + /// JSON string presentation of the object + public new string ToJson() { + return JsonConvert.SerializeObject(this, Formatting.Indented); + } + +} +} diff --git a/client/MediaCubeClient/IO/Swagger/Model/FolderResponse.cs b/client/MediaCubeClient/IO/Swagger/Model/FolderResponse.cs new file mode 100644 index 00000000..16b9b1b2 --- /dev/null +++ b/client/MediaCubeClient/IO/Swagger/Model/FolderResponse.cs @@ -0,0 +1,68 @@ +using System; +using System.Text; +using System.Collections; +using System.Collections.Generic; +using System.Runtime.Serialization; +using Newtonsoft.Json; + +namespace IO.Swagger.Model { + + /// + /// + /// + [DataContract] + public class FolderResponse : SystemResponse { + /// + /// Gets or Sets Id + /// + [DataMember(Name="id", EmitDefaultValue=false)] + [JsonProperty(PropertyName = "id")] + public long? Id { get; set; } + + /// + /// Gets or Sets Data + /// + [DataMember(Name="data", EmitDefaultValue=false)] + [JsonProperty(PropertyName = "data")] + public Object Data { get; set; } + + /// + /// Gets or Sets Message + /// + [DataMember(Name="message", EmitDefaultValue=false)] + [JsonProperty(PropertyName = "message")] + public string Message { get; set; } + + /// + /// Gets or Sets Success + /// + [DataMember(Name="success", EmitDefaultValue=false)] + [JsonProperty(PropertyName = "success")] + public bool? Success { get; set; } + + + /// + /// Get the string presentation of the object + /// + /// String presentation of the object + public override string ToString() { + var sb = new StringBuilder(); + sb.Append("class FolderResponse {\n"); + sb.Append(" Id: ").Append(Id).Append("\n"); + sb.Append(" Data: ").Append(Data).Append("\n"); + sb.Append(" Message: ").Append(Message).Append("\n"); + sb.Append(" Success: ").Append(Success).Append("\n"); + sb.Append("}\n"); + return sb.ToString(); + } + + /// + /// Get the JSON string presentation of the object + /// + /// JSON string presentation of the object + public new string ToJson() { + return JsonConvert.SerializeObject(this, Formatting.Indented); + } + +} +} diff --git a/client/MediaCubeClient/IO/Swagger/Model/GetFilteredDomainByDisplayParameters.cs b/client/MediaCubeClient/IO/Swagger/Model/GetFilteredDomainByDisplayParameters.cs new file mode 100644 index 00000000..e9464fad --- /dev/null +++ b/client/MediaCubeClient/IO/Swagger/Model/GetFilteredDomainByDisplayParameters.cs @@ -0,0 +1,52 @@ +using System; +using System.Text; +using System.Collections; +using System.Collections.Generic; +using System.Runtime.Serialization; +using Newtonsoft.Json; + +namespace IO.Swagger.Model { + + /// + /// + /// + [DataContract] + public class GetFilteredDomainByDisplayParameters { + /// + /// Gets or Sets FilterId + /// + [DataMember(Name="filterId", EmitDefaultValue=false)] + [JsonProperty(PropertyName = "filterId")] + public long? FilterId { get; set; } + + /// + /// Gets or Sets Filter + /// + [DataMember(Name="filter", EmitDefaultValue=false)] + [JsonProperty(PropertyName = "filter")] + public string Filter { get; set; } + + + /// + /// Get the string presentation of the object + /// + /// String presentation of the object + public override string ToString() { + var sb = new StringBuilder(); + sb.Append("class GetFilteredDomainByDisplayParameters {\n"); + sb.Append(" FilterId: ").Append(FilterId).Append("\n"); + sb.Append(" Filter: ").Append(Filter).Append("\n"); + sb.Append("}\n"); + return sb.ToString(); + } + + /// + /// Get the JSON string presentation of the object + /// + /// JSON string presentation of the object + public string ToJson() { + return JsonConvert.SerializeObject(this, Formatting.Indented); + } + +} +} diff --git a/client/MediaCubeClient/IO/Swagger/Model/GetFilteredParameters.cs b/client/MediaCubeClient/IO/Swagger/Model/GetFilteredParameters.cs new file mode 100644 index 00000000..e38ebd97 --- /dev/null +++ b/client/MediaCubeClient/IO/Swagger/Model/GetFilteredParameters.cs @@ -0,0 +1,52 @@ +using System; +using System.Text; +using System.Collections; +using System.Collections.Generic; +using System.Runtime.Serialization; +using Newtonsoft.Json; + +namespace IO.Swagger.Model { + + /// + /// + /// + [DataContract] + public class GetFilteredParameters { + /// + /// Gets or Sets Filter + /// + [DataMember(Name="filter", EmitDefaultValue=false)] + [JsonProperty(PropertyName = "filter")] + public string Filter { get; set; } + + /// + /// Gets or Sets IsChunked + /// + [DataMember(Name="isChunked", EmitDefaultValue=false)] + [JsonProperty(PropertyName = "isChunked")] + public bool? IsChunked { get; set; } + + + /// + /// Get the string presentation of the object + /// + /// String presentation of the object + public override string ToString() { + var sb = new StringBuilder(); + sb.Append("class GetFilteredParameters {\n"); + sb.Append(" Filter: ").Append(Filter).Append("\n"); + sb.Append(" IsChunked: ").Append(IsChunked).Append("\n"); + sb.Append("}\n"); + return sb.ToString(); + } + + /// + /// Get the JSON string presentation of the object + /// + /// JSON string presentation of the object + public string ToJson() { + return JsonConvert.SerializeObject(this, Formatting.Indented); + } + +} +} diff --git a/client/MediaCubeClient/IO/Swagger/Model/GuiType.cs b/client/MediaCubeClient/IO/Swagger/Model/GuiType.cs new file mode 100644 index 00000000..8ff81564 --- /dev/null +++ b/client/MediaCubeClient/IO/Swagger/Model/GuiType.cs @@ -0,0 +1,36 @@ +using System; +using System.Text; +using System.Collections; +using System.Collections.Generic; +using System.Runtime.Serialization; +using Newtonsoft.Json; + +namespace IO.Swagger.Model { + + /// + /// + /// + [DataContract] + public class GuiType { + + /// + /// Get the string presentation of the object + /// + /// String presentation of the object + public override string ToString() { + var sb = new StringBuilder(); + sb.Append("class GuiType {\n"); + sb.Append("}\n"); + return sb.ToString(); + } + + /// + /// Get the JSON string presentation of the object + /// + /// JSON string presentation of the object + public string ToJson() { + return JsonConvert.SerializeObject(this, Formatting.Indented); + } + +} +} diff --git a/client/MediaCubeClient/IO/Swagger/Model/Item.cs b/client/MediaCubeClient/IO/Swagger/Model/Item.cs new file mode 100644 index 00000000..4ead22b7 --- /dev/null +++ b/client/MediaCubeClient/IO/Swagger/Model/Item.cs @@ -0,0 +1,140 @@ +using System; +using System.Text; +using System.Collections; +using System.Collections.Generic; +using System.Runtime.Serialization; +using Newtonsoft.Json; + +namespace IO.Swagger.Model { + + /// + /// + /// + [DataContract] + public class Item : DynamicAttributes { + /// + /// Gets or Sets Id + /// + [DataMember(Name = "id", EmitDefaultValue = false)] + [JsonProperty(PropertyName = "id")] + public long? Id { get; set; } + + /// + /// Gets or Sets ItemType + /// + [DataMember(Name = "itemType", EmitDefaultValue = false)] + [JsonProperty(PropertyName = "itemType")] + public ItemType ItemType { get; set; } + + /// + /// Gets or Sets ItemTypeId + /// + [DataMember(Name = "itemTypeId", EmitDefaultValue = false)] + [JsonProperty(PropertyName = "itemTypeId")] + public long? ItemTypeId { get; set; } + + /// + /// Gets or Sets Loaded + /// + [DataMember(Name = "loaded", EmitDefaultValue = false)] + [JsonProperty(PropertyName = "loaded")] + public bool? Loaded { get; set; } + + /// + /// Gets or Sets Attributes + /// + [DataMember(Name = "attributes", EmitDefaultValue = false)] + [JsonIgnore] + public List Attributes { get; set; } + + /// + /// Gets or Sets Created + /// + [DataMember(Name = "created", EmitDefaultValue = false)] + [JsonProperty(PropertyName = "created")] + public DateTime? Created { get; set; } + + /// + /// Gets or Sets Modified + /// + [DataMember(Name = "modified", EmitDefaultValue = false)] + [JsonProperty(PropertyName = "modified")] + public DateTime? Modified { get; set; } + + /// + /// Gets or Sets Description + /// + [DataMember(Name = "description", EmitDefaultValue = false)] + [JsonProperty(PropertyName = "description")] + public string Description { get; set; } + + /// + /// Gets or Sets HouseId + /// + [DataMember(Name = "houseId", EmitDefaultValue = false)] + [JsonProperty(PropertyName = "houseId")] + public string HouseId { get; set; } + + /// + /// Gets or Sets Title + /// + [DataMember(Name = "title", EmitDefaultValue = false)] + [JsonProperty(PropertyName = "title")] + public string Title { get; set; } + + /// + /// Gets or Sets IsFolder + /// + [DataMember(Name = "isFolder", EmitDefaultValue = false)] + [JsonProperty(PropertyName = "isFolder")] + public string IsFolder { get; set; } + + /// + /// Gets or Sets FolderId + /// + [DataMember(Name = "folderId", EmitDefaultValue = false)] + [JsonProperty(PropertyName = "folderId")] + public long? FolderId { get; set; } + + /// + /// Gets or Sets Medias + /// + [DataMember(Name = "medias", EmitDefaultValue = false)] + [JsonProperty(PropertyName = "medias")] + public List Medias { get; set; } + + + /// + /// Get the string presentation of the object + /// + /// String presentation of the object + public override string ToString() { + var sb = new StringBuilder(); + sb.Append("class Item {\n"); + sb.Append(" Id: ").Append(Id).Append("\n"); + sb.Append(" ItemType: ").Append(ItemType).Append("\n"); + sb.Append(" ItemTypeId: ").Append(ItemTypeId).Append("\n"); + sb.Append(" Loaded: ").Append(Loaded).Append("\n"); + sb.Append(" Attributes: ").Append(Attributes).Append("\n"); + sb.Append(" Created: ").Append(Created).Append("\n"); + sb.Append(" Modified: ").Append(Modified).Append("\n"); + sb.Append(" Description: ").Append(Description).Append("\n"); + sb.Append(" HouseId: ").Append(HouseId).Append("\n"); + sb.Append(" Title: ").Append(Title).Append("\n"); + sb.Append(" IsFolder: ").Append(IsFolder).Append("\n"); + sb.Append(" FolderId: ").Append(FolderId).Append("\n"); + sb.Append(" Medias: ").Append(Medias).Append("\n"); + sb.Append("}\n"); + return sb.ToString(); + } + + /// + /// Get the JSON string presentation of the object + /// + /// JSON string presentation of the object + public new string ToJson() { + return JsonConvert.SerializeObject(this, Formatting.Indented); + } + + } +} diff --git a/client/MediaCubeClient/IO/Swagger/Model/ItemResponse.cs b/client/MediaCubeClient/IO/Swagger/Model/ItemResponse.cs new file mode 100644 index 00000000..e5cdb294 --- /dev/null +++ b/client/MediaCubeClient/IO/Swagger/Model/ItemResponse.cs @@ -0,0 +1,68 @@ +using System; +using System.Text; +using System.Collections; +using System.Collections.Generic; +using System.Runtime.Serialization; +using Newtonsoft.Json; + +namespace IO.Swagger.Model { + + /// + /// + /// + [DataContract] + public class ItemResponse : SystemResponse { + /// + /// Gets or Sets Id + /// + [DataMember(Name="id", EmitDefaultValue=false)] + [JsonProperty(PropertyName = "id")] + public long? Id { get; set; } + + /// + /// Gets or Sets Data + /// + [DataMember(Name="data", EmitDefaultValue=false)] + [JsonProperty(PropertyName = "data")] + public Object Data { get; set; } + + /// + /// Gets or Sets Message + /// + [DataMember(Name="message", EmitDefaultValue=false)] + [JsonProperty(PropertyName = "message")] + public string Message { get; set; } + + /// + /// Gets or Sets Success + /// + [DataMember(Name="success", EmitDefaultValue=false)] + [JsonProperty(PropertyName = "success")] + public bool? Success { get; set; } + + + /// + /// Get the string presentation of the object + /// + /// String presentation of the object + public override string ToString() { + var sb = new StringBuilder(); + sb.Append("class ItemResponse {\n"); + sb.Append(" Id: ").Append(Id).Append("\n"); + sb.Append(" Data: ").Append(Data).Append("\n"); + sb.Append(" Message: ").Append(Message).Append("\n"); + sb.Append(" Success: ").Append(Success).Append("\n"); + sb.Append("}\n"); + return sb.ToString(); + } + + /// + /// Get the JSON string presentation of the object + /// + /// JSON string presentation of the object + public new string ToJson() { + return JsonConvert.SerializeObject(this, Formatting.Indented); + } + +} +} diff --git a/client/MediaCubeClient/IO/Swagger/Model/ItemType.cs b/client/MediaCubeClient/IO/Swagger/Model/ItemType.cs new file mode 100644 index 00000000..59039eb4 --- /dev/null +++ b/client/MediaCubeClient/IO/Swagger/Model/ItemType.cs @@ -0,0 +1,84 @@ +using System; +using System.Text; +using System.Collections; +using System.Collections.Generic; +using System.Runtime.Serialization; +using Newtonsoft.Json; + +namespace IO.Swagger.Model { + + /// + /// + /// + [DataContract] + public class ItemType : EntityBase { + /// + /// Gets or Sets Id + /// + [DataMember(Name="id", EmitDefaultValue=false)] + [JsonProperty(PropertyName = "id")] + public long? Id { get; set; } + + /// + /// Gets or Sets Description + /// + [DataMember(Name="description", EmitDefaultValue=false)] + [JsonProperty(PropertyName = "description")] + public string Description { get; set; } + + /// + /// Gets or Sets Name + /// + [DataMember(Name="name", EmitDefaultValue=false)] + [JsonProperty(PropertyName = "name")] + public string Name { get; set; } + + /// + /// Gets or Sets Metadatas + /// + [DataMember(Name="metadatas", EmitDefaultValue=false)] + [JsonProperty(PropertyName = "metadatas")] + public List Metadatas { get; set; } + + /// + /// Gets or Sets TablePrefix + /// + [DataMember(Name="tablePrefix", EmitDefaultValue=false)] + [JsonProperty(PropertyName = "tablePrefix")] + public string TablePrefix { get; set; } + + /// + /// Gets or Sets IsStatic + /// + [DataMember(Name="isStatic", EmitDefaultValue=false)] + [JsonProperty(PropertyName = "isStatic")] + public bool? IsStatic { get; set; } + + + /// + /// Get the string presentation of the object + /// + /// String presentation of the object + public override string ToString() { + var sb = new StringBuilder(); + sb.Append("class ItemType {\n"); + sb.Append(" Id: ").Append(Id).Append("\n"); + sb.Append(" Description: ").Append(Description).Append("\n"); + sb.Append(" Name: ").Append(Name).Append("\n"); + sb.Append(" Metadatas: ").Append(Metadatas).Append("\n"); + sb.Append(" TablePrefix: ").Append(TablePrefix).Append("\n"); + sb.Append(" IsStatic: ").Append(IsStatic).Append("\n"); + sb.Append("}\n"); + return sb.ToString(); + } + + /// + /// Get the JSON string presentation of the object + /// + /// JSON string presentation of the object + public new string ToJson() { + return JsonConvert.SerializeObject(this, Formatting.Indented); + } + +} +} diff --git a/client/MediaCubeClient/IO/Swagger/Model/ItemTypeResponse.cs b/client/MediaCubeClient/IO/Swagger/Model/ItemTypeResponse.cs new file mode 100644 index 00000000..6d7073d7 --- /dev/null +++ b/client/MediaCubeClient/IO/Swagger/Model/ItemTypeResponse.cs @@ -0,0 +1,68 @@ +using System; +using System.Text; +using System.Collections; +using System.Collections.Generic; +using System.Runtime.Serialization; +using Newtonsoft.Json; + +namespace IO.Swagger.Model { + + /// + /// + /// + [DataContract] + public class ItemTypeResponse : SystemResponse { + /// + /// Gets or Sets Id + /// + [DataMember(Name="id", EmitDefaultValue=false)] + [JsonProperty(PropertyName = "id")] + public long? Id { get; set; } + + /// + /// Gets or Sets Data + /// + [DataMember(Name="data", EmitDefaultValue=false)] + [JsonProperty(PropertyName = "data")] + public Object Data { get; set; } + + /// + /// Gets or Sets Message + /// + [DataMember(Name="message", EmitDefaultValue=false)] + [JsonProperty(PropertyName = "message")] + public string Message { get; set; } + + /// + /// Gets or Sets Success + /// + [DataMember(Name="success", EmitDefaultValue=false)] + [JsonProperty(PropertyName = "success")] + public bool? Success { get; set; } + + + /// + /// Get the string presentation of the object + /// + /// String presentation of the object + public override string ToString() { + var sb = new StringBuilder(); + sb.Append("class ItemTypeResponse {\n"); + sb.Append(" Id: ").Append(Id).Append("\n"); + sb.Append(" Data: ").Append(Data).Append("\n"); + sb.Append(" Message: ").Append(Message).Append("\n"); + sb.Append(" Success: ").Append(Success).Append("\n"); + sb.Append("}\n"); + return sb.ToString(); + } + + /// + /// Get the JSON string presentation of the object + /// + /// JSON string presentation of the object + public new string ToJson() { + return JsonConvert.SerializeObject(this, Formatting.Indented); + } + +} +} diff --git a/client/MediaCubeClient/IO/Swagger/Model/Job.cs b/client/MediaCubeClient/IO/Swagger/Model/Job.cs new file mode 100644 index 00000000..13b832fc --- /dev/null +++ b/client/MediaCubeClient/IO/Swagger/Model/Job.cs @@ -0,0 +1,132 @@ +using System; +using System.Text; +using System.Collections; +using System.Collections.Generic; +using System.Runtime.Serialization; +using Newtonsoft.Json; + +namespace IO.Swagger.Model { + + /// + /// + /// + [DataContract] + public class Job : Syncable { + /// + /// Gets or Sets Id + /// + [DataMember(Name="id", EmitDefaultValue=false)] + [JsonProperty(PropertyName = "id")] + public long? Id { get; set; } + + /// + /// Gets or Sets Counter1 + /// + [DataMember(Name="counter1", EmitDefaultValue=false)] + [JsonProperty(PropertyName = "counter1")] + public AtomicLong Counter1 { get; set; } + + /// + /// Gets or Sets Priority + /// + [DataMember(Name="priority", EmitDefaultValue=false)] + [JsonProperty(PropertyName = "priority")] + public long? Priority { get; set; } + + /// + /// Gets or Sets Name + /// + [DataMember(Name="name", EmitDefaultValue=false)] + [JsonProperty(PropertyName = "name")] + public string Name { get; set; } + + /// + /// Gets or Sets Owner + /// + [DataMember(Name="owner", EmitDefaultValue=false)] + [JsonProperty(PropertyName = "owner")] + public string Owner { get; set; } + + /// + /// Gets or Sets Status + /// + [DataMember(Name="status", EmitDefaultValue=false)] + [JsonProperty(PropertyName = "status")] + public JobStatus Status { get; set; } + + /// + /// Gets or Sets Description + /// + [DataMember(Name="description", EmitDefaultValue=false)] + [JsonProperty(PropertyName = "description")] + public string Description { get; set; } + + /// + /// Gets or Sets Template + /// + [DataMember(Name="template", EmitDefaultValue=false)] + [JsonProperty(PropertyName = "template")] + public string Template { get; set; } + + /// + /// Gets or Sets Submitted + /// + [DataMember(Name="submitted", EmitDefaultValue=false)] + [JsonProperty(PropertyName = "submitted")] + public DateTime Submitted { get; set; } + + /// + /// Gets or Sets Finished + /// + [DataMember(Name="finished", EmitDefaultValue=false)] + [JsonProperty(PropertyName = "finished")] + public DateTime Finished { get; set; } + + /// + /// Gets or Sets Progress + /// + [DataMember(Name="progress", EmitDefaultValue=false)] + [JsonProperty(PropertyName = "progress")] + public int? Progress { get; set; } + + /// + /// Gets or Sets ScheduledTime + /// + [DataMember(Name="scheduledTime", EmitDefaultValue=false)] + [JsonProperty(PropertyName = "scheduledTime")] + public DateTime ScheduledTime { get; set; } + + + /// + /// Get the string presentation of the object + /// + /// String presentation of the object + public override string ToString() { + var sb = new StringBuilder(); + sb.Append("class Job {\n"); + sb.Append(" Id: ").Append(Id).Append("\n"); + sb.Append(" Counter1: ").Append(Counter1).Append("\n"); + sb.Append(" Priority: ").Append(Priority).Append("\n"); + sb.Append(" Name: ").Append(Name).Append("\n"); + sb.Append(" Owner: ").Append(Owner).Append("\n"); + sb.Append(" Status: ").Append(Status).Append("\n"); + sb.Append(" Description: ").Append(Description).Append("\n"); + sb.Append(" Template: ").Append(Template).Append("\n"); + sb.Append(" Submitted: ").Append(Submitted).Append("\n"); + sb.Append(" Finished: ").Append(Finished).Append("\n"); + sb.Append(" Progress: ").Append(Progress).Append("\n"); + sb.Append(" ScheduledTime: ").Append(ScheduledTime).Append("\n"); + sb.Append("}\n"); + return sb.ToString(); + } + + /// + /// Get the JSON string presentation of the object + /// + /// JSON string presentation of the object + public new string ToJson() { + return JsonConvert.SerializeObject(this, Formatting.Indented); + } + +} +} diff --git a/client/MediaCubeClient/IO/Swagger/Model/JobMessage.cs b/client/MediaCubeClient/IO/Swagger/Model/JobMessage.cs new file mode 100644 index 00000000..777e1e11 --- /dev/null +++ b/client/MediaCubeClient/IO/Swagger/Model/JobMessage.cs @@ -0,0 +1,44 @@ +using System; +using System.Text; +using System.Collections; +using System.Collections.Generic; +using System.Runtime.Serialization; +using Newtonsoft.Json; + +namespace IO.Swagger.Model { + + /// + /// + /// + [DataContract] + public class JobMessage { + /// + /// Gets or Sets JobId + /// + [DataMember(Name="jobId", EmitDefaultValue=false)] + [JsonProperty(PropertyName = "jobId")] + public long? JobId { get; set; } + + + /// + /// Get the string presentation of the object + /// + /// String presentation of the object + public override string ToString() { + var sb = new StringBuilder(); + sb.Append("class JobMessage {\n"); + sb.Append(" JobId: ").Append(JobId).Append("\n"); + sb.Append("}\n"); + return sb.ToString(); + } + + /// + /// Get the JSON string presentation of the object + /// + /// JSON string presentation of the object + public string ToJson() { + return JsonConvert.SerializeObject(this, Formatting.Indented); + } + +} +} diff --git a/client/MediaCubeClient/IO/Swagger/Model/JobStart.cs b/client/MediaCubeClient/IO/Swagger/Model/JobStart.cs new file mode 100644 index 00000000..26fb905b --- /dev/null +++ b/client/MediaCubeClient/IO/Swagger/Model/JobStart.cs @@ -0,0 +1,52 @@ +using System; +using System.Text; +using System.Collections; +using System.Collections.Generic; +using System.Runtime.Serialization; +using Newtonsoft.Json; + +namespace IO.Swagger.Model { + + /// + /// + /// + [DataContract] + public class JobStart { + /// + /// Gets or Sets Time + /// + [DataMember(Name="time", EmitDefaultValue=false)] + [JsonProperty(PropertyName = "time")] + public DateTime Time { get; set; } + + /// + /// Gets or Sets JobStartType + /// + [DataMember(Name="jobStartType", EmitDefaultValue=false)] + [JsonProperty(PropertyName = "jobStartType")] + public JobStartType JobStartType { get; set; } + + + /// + /// Get the string presentation of the object + /// + /// String presentation of the object + public override string ToString() { + var sb = new StringBuilder(); + sb.Append("class JobStart {\n"); + sb.Append(" Time: ").Append(Time).Append("\n"); + sb.Append(" JobStartType: ").Append(JobStartType).Append("\n"); + sb.Append("}\n"); + return sb.ToString(); + } + + /// + /// Get the JSON string presentation of the object + /// + /// JSON string presentation of the object + public string ToJson() { + return JsonConvert.SerializeObject(this, Formatting.Indented); + } + +} +} diff --git a/client/MediaCubeClient/IO/Swagger/Model/JobStartType.cs b/client/MediaCubeClient/IO/Swagger/Model/JobStartType.cs new file mode 100644 index 00000000..d5c2f6da --- /dev/null +++ b/client/MediaCubeClient/IO/Swagger/Model/JobStartType.cs @@ -0,0 +1,36 @@ +using System; +using System.Text; +using System.Collections; +using System.Collections.Generic; +using System.Runtime.Serialization; +using Newtonsoft.Json; + +namespace IO.Swagger.Model { + + /// + /// + /// + [DataContract] + public class JobStartType { + + /// + /// Get the string presentation of the object + /// + /// String presentation of the object + public override string ToString() { + var sb = new StringBuilder(); + sb.Append("class JobStartType {\n"); + sb.Append("}\n"); + return sb.ToString(); + } + + /// + /// Get the JSON string presentation of the object + /// + /// JSON string presentation of the object + public string ToJson() { + return JsonConvert.SerializeObject(this, Formatting.Indented); + } + +} +} diff --git a/client/MediaCubeClient/IO/Swagger/Model/JobStatus.cs b/client/MediaCubeClient/IO/Swagger/Model/JobStatus.cs new file mode 100644 index 00000000..02ca653a --- /dev/null +++ b/client/MediaCubeClient/IO/Swagger/Model/JobStatus.cs @@ -0,0 +1,36 @@ +using System; +using System.Text; +using System.Collections; +using System.Collections.Generic; +using System.Runtime.Serialization; +using Newtonsoft.Json; + +namespace IO.Swagger.Model { + + /// + /// + /// + [DataContract] + public class JobStatus { + + /// + /// Get the string presentation of the object + /// + /// String presentation of the object + public override string ToString() { + var sb = new StringBuilder(); + sb.Append("class JobStatus {\n"); + sb.Append("}\n"); + return sb.ToString(); + } + + /// + /// Get the JSON string presentation of the object + /// + /// JSON string presentation of the object + public string ToJson() { + return JsonConvert.SerializeObject(this, Formatting.Indented); + } + +} +} diff --git a/client/MediaCubeClient/IO/Swagger/Model/JobTemplatesInfo.cs b/client/MediaCubeClient/IO/Swagger/Model/JobTemplatesInfo.cs new file mode 100644 index 00000000..3d47f6e8 --- /dev/null +++ b/client/MediaCubeClient/IO/Swagger/Model/JobTemplatesInfo.cs @@ -0,0 +1,52 @@ +using System; +using System.Text; +using System.Collections; +using System.Collections.Generic; +using System.Runtime.Serialization; +using Newtonsoft.Json; + +namespace IO.Swagger.Model { + + /// + /// + /// + [DataContract] + public class JobTemplatesInfo { + /// + /// Gets or Sets Templates + /// + [DataMember(Name="templates", EmitDefaultValue=false)] + [JsonProperty(PropertyName = "templates")] + public List