From 08faa60d5d8e4dad8260a23a03e1c5246e23f772 Mon Sep 17 00:00:00 2001 From: Simon Brooke Date: Tue, 16 Apr 2019 14:00:10 +0100 Subject: [PATCH] 5606b: Better still... --- .gitignore | 2 + Doxyfile | 2 +- README.md | 2 +- .../Dialogs/ManualSyncContactForm.Designer.cs | 139 ++++++ .../Dialogs/ManualSyncContactForm.cs | 270 ++++++++++++ .../Dialogs/ManualSyncContactForm.resx | 408 ++++++++++++++++++ .../Extensions/ContactItemExtensions.cs | 96 +++++ .../Extensions/TreeNodeExtensions.cs | 48 +++ .../Extensions/TreeViewExtensions.cs | 47 ++ SuiteCRMAddIn/Helpers/SearchHelper.cs | 85 ++++ SuiteCRMAddIn/Images/Cancel.png | Bin 2086 -> 2425 bytes SuiteCRMAddIn/Images/Cancel.svg | 78 ++++ SuiteCRMAddIn/Images/Cancel_old.png | Bin 0 -> 2086 bytes SuiteCRMAddIn/Images/Check.png | Bin 1383 -> 2198 bytes SuiteCRMAddIn/Images/Check.svg | 68 +++ SuiteCRMAddIn/Images/Check_old.png | Bin 0 -> 1383 bytes SuiteCRMAddIn/Images/Search.svg | 60 +++ SuiteCRMAddIn/Images/Search_Button.png | Bin 1786 -> 3316 bytes SuiteCRMAddIn/Images/Settings.png | Bin 3209 -> 11096 bytes SuiteCRMAddIn/Images/Settings.svg | 74 ++++ SuiteCRMAddIn/Images/Settings_old.png | Bin 0 -> 3209 bytes SuiteCRMAddIn/Images/manualSyncContact.png | Bin 0 -> 3647 bytes SuiteCRMAddIn/Images/manualSyncContact.xcf | Bin 0 -> 2332 bytes SuiteCRMAddIn/Menus/General.xml | 29 ++ SuiteCRMAddIn/Menus/General2007.xml | 15 + SuiteCRMAddIn/Menus/MailCompose.xml | 6 +- SuiteCRMAddIn/Menus/MailRead.xml | 11 +- SuiteCRMAddIn/Menus/MailRead2007.xml | 4 +- SuiteCRMAddIn/Menus/RibbonImageHelper.cs | 2 +- SuiteCRMAddIn/Menus/SuiteCRMRibbon.cs | 28 +- SuiteCRMAddIn/Properties/AssemblyInfo.cs | 2 +- .../Properties/Resources.Designer.cs | 10 + SuiteCRMAddIn/Properties/Resources.resx | 5 +- SuiteCRMAddIn/SuiteCRMAddIn.csproj | 14 + SuiteCRMAddIn/ThisAddIn.cs | 44 +- SuiteCRMAddInWixSetup/Product.wxs | 2 +- SuiteCRMClient/Properties/AssemblyInfo.cs | 2 +- 37 files changed, 1516 insertions(+), 37 deletions(-) create mode 100644 SuiteCRMAddIn/Dialogs/ManualSyncContactForm.Designer.cs create mode 100644 SuiteCRMAddIn/Dialogs/ManualSyncContactForm.cs create mode 100644 SuiteCRMAddIn/Dialogs/ManualSyncContactForm.resx create mode 100644 SuiteCRMAddIn/Extensions/TreeNodeExtensions.cs create mode 100644 SuiteCRMAddIn/Extensions/TreeViewExtensions.cs create mode 100644 SuiteCRMAddIn/Helpers/SearchHelper.cs create mode 100644 SuiteCRMAddIn/Images/Cancel.svg create mode 100644 SuiteCRMAddIn/Images/Cancel_old.png create mode 100644 SuiteCRMAddIn/Images/Check.svg create mode 100644 SuiteCRMAddIn/Images/Check_old.png create mode 100644 SuiteCRMAddIn/Images/Search.svg create mode 100644 SuiteCRMAddIn/Images/Settings.svg create mode 100644 SuiteCRMAddIn/Images/Settings_old.png create mode 100644 SuiteCRMAddIn/Images/manualSyncContact.png create mode 100644 SuiteCRMAddIn/Images/manualSyncContact.xcf create mode 100644 SuiteCRMAddIn/Menus/General.xml create mode 100644 SuiteCRMAddIn/Menus/General2007.xml diff --git a/.gitignore b/.gitignore index 55a2d688..d05d3c09 100755 --- a/.gitignore +++ b/.gitignore @@ -70,3 +70,5 @@ SuiteCRMAddIn/Documentation/latex/ *.psess *.vsp + +SuiteCRMAddIn/Images/*_old\.png diff --git a/Doxyfile b/Doxyfile index 1e5d478c..a411bdf8 100644 --- a/Doxyfile +++ b/Doxyfile @@ -38,7 +38,7 @@ PROJECT_NAME = "SuiteCRM Outlook Add-in" # could be handy for archiving the generated documentation or if some version # control system is used. -PROJECT_NUMBER = 3.0.19.48 +PROJECT_NUMBER = 3.0.19.75 # Using the PROJECT_BRIEF tag one can provide an optional one line description # for a project that appears at the top of each page and should give viewer a diff --git a/README.md b/README.md index 0199f155..25a89d2d 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ ### What's in this repository -SuiteCRM Outlook Plug-In v 3.0.19.48 +SuiteCRM Outlook Plug-In v 3.0.19.75 This repository has been created to allow community members to collaborate and contribute to the project. diff --git a/SuiteCRMAddIn/Dialogs/ManualSyncContactForm.Designer.cs b/SuiteCRMAddIn/Dialogs/ManualSyncContactForm.Designer.cs new file mode 100644 index 00000000..3e9e32f7 --- /dev/null +++ b/SuiteCRMAddIn/Dialogs/ManualSyncContactForm.Designer.cs @@ -0,0 +1,139 @@ +namespace SuiteCRMAddIn.Dialogs +{ + partial class ManualSyncContactForm + { + /// + /// 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(ManualSyncContactForm)); + this.useLabel = new System.Windows.Forms.Label(); + this.resultsTree = new System.Windows.Forms.TreeView(); + this.cancelButton = new System.Windows.Forms.Button(); + this.saveButton = new System.Windows.Forms.Button(); + this.searchText = new System.Windows.Forms.TextBox(); + this.searchButton = new System.Windows.Forms.Button(); + this.SuspendLayout(); + // + // useLabel + // + this.useLabel.AutoSize = true; + this.useLabel.Location = new System.Drawing.Point(12, 9); + this.useLabel.Name = "useLabel"; + this.useLabel.Size = new System.Drawing.Size(230, 13); + this.useLabel.TabIndex = 0; + this.useLabel.Text = "Use the form below to find records in SuiteCRM"; + // + // resultsTree + // + this.resultsTree.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.resultsTree.CheckBoxes = true; + this.resultsTree.Location = new System.Drawing.Point(15, 56); + this.resultsTree.Name = "resultsTree"; + this.resultsTree.Size = new System.Drawing.Size(257, 165); + this.resultsTree.TabIndex = 3; + this.resultsTree.NodeMouseClick += new System.Windows.Forms.TreeNodeMouseClickEventHandler(this.resultsTree_ItemClick); + // + // cancelButton + // + this.cancelButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.cancelButton.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.cancelButton.Location = new System.Drawing.Point(197, 227); + this.cancelButton.Name = "cancelButton"; + this.cancelButton.Size = new System.Drawing.Size(75, 23); + this.cancelButton.TabIndex = 5; + this.cancelButton.Text = "Cancel"; + this.cancelButton.UseVisualStyleBackColor = true; + this.cancelButton.Click += new System.EventHandler(this.cancelButton_click); + // + // saveButton + // + this.saveButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.saveButton.DialogResult = System.Windows.Forms.DialogResult.OK; + this.saveButton.Enabled = false; + this.saveButton.Location = new System.Drawing.Point(116, 227); + this.saveButton.Name = "saveButton"; + this.saveButton.Size = new System.Drawing.Size(75, 23); + this.saveButton.TabIndex = 4; + this.saveButton.Text = "Save"; + this.saveButton.UseVisualStyleBackColor = true; + this.saveButton.Click += new System.EventHandler(this.saveButton_click); + // + // searchText + // + this.searchText.Location = new System.Drawing.Point(15, 30); + this.searchText.Name = "searchText"; + this.searchText.Size = new System.Drawing.Size(176, 20); + this.searchText.TabIndex = 1; + this.searchText.Leave += new System.EventHandler(this.searchButton_click); + this.searchText.PreviewKeyDown += new System.Windows.Forms.PreviewKeyDownEventHandler(this.seachText_PreviewKeyDown); + // + // searchButton + // + this.searchButton.Location = new System.Drawing.Point(197, 30); + this.searchButton.Name = "searchButton"; + this.searchButton.Size = new System.Drawing.Size(75, 23); + this.searchButton.TabIndex = 2; + this.searchButton.Text = "Search"; + this.searchButton.UseVisualStyleBackColor = true; + this.searchButton.Click += new System.EventHandler(this.searchButton_click); + // + // ManualSyncContactForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.CancelButton = this.cancelButton; + this.ClientSize = new System.Drawing.Size(284, 262); + this.Controls.Add(this.searchButton); + this.Controls.Add(this.searchText); + this.Controls.Add(this.saveButton); + this.Controls.Add(this.cancelButton); + this.Controls.Add(this.resultsTree); + this.Controls.Add(this.useLabel); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.MaximizeBox = false; + this.MinimizeBox = false; + this.MinimumSize = new System.Drawing.Size(300, 300); + this.Name = "ManualSyncContactForm"; + this.Text = "Manually Sync a Contact"; + this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.FormClosingEvent); + this.Load += new System.EventHandler(this.manualSyncContactsForm_Load); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.Label useLabel; + private System.Windows.Forms.TreeView resultsTree; + private System.Windows.Forms.Button cancelButton; + private System.Windows.Forms.Button saveButton; + private System.Windows.Forms.TextBox searchText; + private System.Windows.Forms.Button searchButton; + } +} \ No newline at end of file diff --git a/SuiteCRMAddIn/Dialogs/ManualSyncContactForm.cs b/SuiteCRMAddIn/Dialogs/ManualSyncContactForm.cs new file mode 100644 index 00000000..ef90a0c0 --- /dev/null +++ b/SuiteCRMAddIn/Dialogs/ManualSyncContactForm.cs @@ -0,0 +1,270 @@ +/** + * Outlook integration for SuiteCRM. + * @package Outlook integration for SuiteCRM + * @copyright SalesAgility Ltd http://www.salesagility.com + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU LESSER GENERAL PUBLIC LICENCE as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program 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. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENCE + * along with this program; if not, see http://www.gnu.org/licenses + * or write to the Free Software Foundation,Inc., 51 Franklin Street, + * Fifth Floor, Boston, MA 02110-1301 USA + * + * @author SalesAgility + */ + +#region + +using System; +using System.Collections.Generic; +using System.Drawing; +using System.Linq; +using System.Windows.Forms; +using Microsoft.Office.Interop.Outlook; +using SuiteCRMAddIn.BusinessLogic; +using SuiteCRMAddIn.Extensions; +using SuiteCRMAddIn.Helpers; +using SuiteCRMAddIn.Properties; +using SuiteCRMClient.RESTObjects; +using System.Text; + +#endregion + +namespace SuiteCRMAddIn.Dialogs +{ + public partial class ManualSyncContactForm : Form + { + /// + /// The key for the create node. + /// + private static readonly string CreateNodeKey = "Create"; + + /// + /// The key for the contacts node. + /// + private static readonly string ContactsNodeKey = "Contacts"; + + private Dictionary searchResults = new Dictionary(); + + private bool dontClose = false; + + /// + /// The contact we're going to operate on. + /// + ContactItem contactItem = Globals.ThisAddIn.SelectedContacts.First(); + + public ManualSyncContactForm(string searchString) + { + if (contactItem != null) + { + InitializeComponent(); + this.Text = $"Manually sync {contactItem.FullName}"; + searchText.Text = searchString; + } + else + { + throw new System.Exception("No contact selected in ManualSyncContactForm"); + } + } + + private void ClearAndSearch(string target) + { + using (WaitCursor.For(this, true)) + { + searchResults = new Dictionary(); + + resultsTree.Nodes.Clear(); + resultsTree.Nodes.Add(CreateNodeKey, "Create a new Contact"); + + if (!string.IsNullOrWhiteSpace(target)) + { + var contactsNode = resultsTree.Nodes.Add(ContactsNodeKey, "Contacts"); + + SearchAddChildren(target, contactsNode); + + if (contactsNode.Nodes.Count == 0) + { + resultsTree.Nodes.Remove(contactsNode); + resultsTree.Nodes[CreateNodeKey].Checked = true; + saveButton.Enabled = true; + } + } + } + } + + private void SearchAddChildren(string target, TreeNode contactsNode) + { + var tokens = target.Split(" ;:,".ToCharArray()); + + foreach (var token in tokens.Where(x => !string.IsNullOrEmpty(x))) + foreach (var crmContact in SearchHelper.SearchContacts(token)) + searchResults[crmContact.id] = crmContact; + + foreach (var result in searchResults.Values.OrderBy( + x => $"{x.GetValueAsString("last_name")} {x.GetValueAsString("first_name")}")) + { + TreeNode node = contactsNode.Nodes.Add(result.id, CanonicalString(result)); + var contactItem = Globals.ThisAddIn.SelectedContacts.First(); + + if (IsProbablySameItem(result, contactItem)) + { + node.BackColor = ColorTranslator.FromHtml("#a9ea56"); + } + else if (IsPreviouslySyncedItem(result)) + { + node.BackColor = ColorTranslator.FromHtml("#ea6556"); + } + else if (SyncStateManager.Instance.GetExistingSyncState(result) != null) + { + node.BackColor = ColorTranslator.FromHtml("#ea6556"); + } + + contactsNode.Expand(); + } + } + + private bool IsPreviouslySyncedItem(string crmId) + { + return !string.IsNullOrEmpty(crmId) && + searchResults.ContainsKey(crmId) && + IsPreviouslySyncedItem(searchResults[crmId]); + } + + private bool IsPreviouslySyncedItem(EntryValue result) + { + return !string.IsNullOrEmpty(result.GetValueAsString("outlook_id")) || + !string.IsNullOrEmpty(result.GetValueAsString("sync_contact")) || + SyncStateManager.Instance.GetExistingSyncState(result) != null; + } + + private bool IsProbablySameItem(EntryValue result, ContactItem contactItem) + { + return result != null && + (result.id.Equals(contactItem.UserProperties[SyncStateManager.CrmIdPropertyName]?.Value) || + result.GetValueAsString("outlook_id")?.Equals(contactItem.EntryID)); + } + + private static string CanonicalString(EntryValue result) + { + return + $"{result.GetValueAsString("first_name")} {result.GetValueAsString("last_name")} ({result.GetValueAsString("email1")})"; + } + + private void searchButton_click(object sender, EventArgs e) + { + ClearAndSearch(searchText.Text); + } + + private void saveButton_click(object sender, EventArgs e) + { + var crmId = contactItem.GetCrmId().ToString(); + string selectedId = resultsTree.GetAllNodes().FirstOrDefault(x => x.Checked)?.Name; + EntryValue selectedItem = searchResults.ContainsKey(selectedId) ? searchResults[selectedId] : null; + List problems = new List(); + + if (contactItem.Sensitivity == OlSensitivity.olPrivate) + { + problems.Add($"Contact {contactItem.FullName} is marked 'private'. Are you sure?"); + } + + if (resultsTree.Nodes["create"].Checked && IsPreviouslySyncedItem(crmId)) + { + problems.Add($"A record for contact {contactItem.FullName} already exists in CRM. Are you sure you want to create a new record?"); + } + if (selectedItem != null && + !IsProbablySameItem(selectedItem, contactItem)) + { + problems.Add($"The record for {selectedItem.GetValueAsString("first_name")} {selectedItem.GetValueAsString("last_name")} will be overwritten with the details of {contactItem.FullName}."); + } + if (IsPreviouslySyncedItem(crmId) && selectedItem != null) + { + problems.Add($"Contact {selectedItem.GetValueAsString("first_name")} {selectedItem.GetValueAsString("last_name")} has previously been synced and will be overwritten."); + } + + if (resultsTree.Nodes["create"].Checked && + IsPreviouslySyncedItem(crmId) ) + { + problems.Add($"Contact {contactItem.FullName} has previously been synced. Are you sure you want to create another copy?"); + } + + if (problems.Count == 0 || MessageBox.Show( + string.Join("\n", problems.Select(p => $"• {p}\n").ToArray()), + "Problems found: are you sure?", + MessageBoxButtons.OKCancel, + MessageBoxIcon.Warning) == + DialogResult.OK) + { + if (resultsTree.Nodes["create"].Checked) + { + contactItem.ClearCrmId(); + contactItem.SetManualOverride(); + } + else + { + try + { + contactItem.ChangeCrmId(resultsTree.GetAllNodes().FirstOrDefault(x => x.Checked).Name); + } + finally + { + contactItem.SetManualOverride(); + } + } + } + else + { + dontClose = true; + } + } + + private void cancelButton_click(object sender, EventArgs e) + { + Close(); + } + + private void resultsTree_ItemClick(object sender, TreeNodeMouseClickEventArgs e) + { + var contactsNode = resultsTree.Nodes[ContactsNodeKey]; + var createNode = resultsTree.Nodes[CreateNodeKey]; + + if (e.Node == contactsNode) + { + e.Node.Checked = false; + // You can't check the 'Contacts' node. + } + else + { + foreach (var node in resultsTree.GetAllNodes().Where( n => n != e.Node)) + node.Checked = false; + } + + saveButton.Enabled = resultsTree.GetAllNodes().Any(x => x.Checked); + } + + private void manualSyncContactsForm_Load(object sender, EventArgs e) + { + if (Settings.Default.AutomaticSearch) + BeginInvoke((MethodInvoker) delegate { ClearAndSearch(searchText.Text); }); + } + + private void seachText_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e) + { + if (e.KeyCode == Keys.Enter && !string.IsNullOrWhiteSpace(searchText.Text)) + ClearAndSearch(searchText.Text); + } + + private void FormClosingEvent(object sender, FormClosingEventArgs e) + { + e.Cancel = dontClose; + dontClose = false; + } + } +} diff --git a/SuiteCRMAddIn/Dialogs/ManualSyncContactForm.resx b/SuiteCRMAddIn/Dialogs/ManualSyncContactForm.resx new file mode 100644 index 00000000..45f9e24c --- /dev/null +++ b/SuiteCRMAddIn/Dialogs/ManualSyncContactForm.resx @@ -0,0 +1,408 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + + + + AAABAAEAQEAAAAEAIAAoQgAAFgAAACgAAABAAAAAgAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA6lZo/+pW + aP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pW + aP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADqVmj/6lZo/+pW + aP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pW + aP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pW + aP/qVmj/6lZo/+pWaP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA6lZo/+pW + aP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pW + aP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pW + aP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/AAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pW + aP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pW + aP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pW + aP/qVmj/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pW + aP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pW + aP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pW + aP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOpWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pW + aP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pW + aP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pW + aP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/AAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADqVmj/6lZo/+pW + aP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pW + aP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pW + aP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/wAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pW + aP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pW + aP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pW + aP/qVmj/6lZo/+pWaP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAOpWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pW + aP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pW + aP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pW + aP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADqVmj/6lZo/+pWaP/qVmj/6lZo/+pW + aP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pW + aP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pW + aP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/wAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOpW + aP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pW + aP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pW + aP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pW + aP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAADqVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pW + aP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pW + aP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pW + aP/qVmj/6lZo/+pWaP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pW + aP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pW + aP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pW + aP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADqVmj/6lZo/+pW + aP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pW + aP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pW + aP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/wAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pW + aP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pW + aP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/wAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADqVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pW + aP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pW + aP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pW + aP/qVmj/6lZo/+lWaL0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA6lZo/+pWaP/qVmj/6lZo/+pW + aP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pW + aP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pW + aP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AADqVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pW + aP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pW + aP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAOpWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pW + aP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pW + aP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP9VAFUDAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADpVmib6lZo/+pWaP/qVmj/6lZo/+pW + aP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pW + aP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pW + aP/qVmj/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOpW + aP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pW + aP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pW + aP/qVmj/6lZo/+pWaP/qVmj/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pW + aP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pW + aP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAQEAE6lZo/+pWaP/qVmj/6lZo/+pW + aP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pW + aP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP/pVmi9AAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AADqVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pW + aP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP8AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAOpWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pW + aP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/4AA + gAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOpWaP/qVmj/6lZo/+pW + aP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pW + aP/qVmj/AAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAADqVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pWaP/qVmj/6lZo/+pW + aP/qVmj/6lZo/1UAVQMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACRhXf/kYV3/5GFd/+RhXf/AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABWZer/VmXq/1Zl6v9WZer/VmXq/1Zl6v9WZer/AAD/AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkYV3/5GF + d/+RhXf/kYV3/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAFZl6v9WZer/VmXq/1Zl6v9WZer/VmXq/1Zl6v9WZer/VmXq/1Zl6v9WZer/AAD/AgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAJGFd/+RhXf/kYV3/5GFd/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAD/AVZl6v9WZer/VmXq/1Zl6v9WZer/VmXq/1Zl6v9WZer/VmXq/1Zl + 6v9WZer/VmXq/1Zl6v9WZer/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACRhXf/kYV3/5GFd/+RhXf/AAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFZl6v9WZer/VmXq/1Zl6v9WZer/VmXq/1Zl + 6v9WZer/VmXq/1Zl6v9WZer/VmXq/1Zl6v9WZer/VmXq/1Zl6v8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkYV3/5GFd/+RhXf/kYV3/wAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFZl6v9WZer/VmXq/1Zl + 6v9WZer/VmXq/1Zl6v9WZer/VmXq/1Zl6v9WZer/VmXq/1Zl6v9WZer/VmXq/1Zl6v9WZer/AAD/AgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJGF + d/+RhXf/kYV3/5GFd/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFZl + 6v9WZer/VmXq/1Zl6v9WZer/VmXq/1Zl6v9WZer/VmXq/1Zl6v9WZer/VmXq/1Zl6v9WZer/VmXq/1Zl + 6v9WZer/VmXq/1Zl6v8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAACRhXf/kYV3/5GFd/+RhXf/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABWZer/VmXq/1Zl6v9WZer/VmXq/1Zl6v9WZer/VmXq/1Zl6v9WZer/VmXq/1Zl + 6v9WZer/VmXq/1Zl6v9WZer/VmXq/1Zl6v9WZer/AAD/AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkYV3/5GFd/+RhXf/kYV3/wAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVmXq/1Zl6v9WZer/VmXq/1Zl6v9WZer/VmXq/1Zl + 6v9WZer/VmXq/1Zl6v9WZer/VmXq/1Zl6v9WZer/VmXq/1Zl6v9WZer/VmXq/1Zl6v8AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAACRhXf/kYV3/5GFd/+RhXf/kYV3/5GFd/+RhXf/kYV3/5GFd/+RhXf/kYV3/5GF + d/+RhXf/kYV3/5GFd/+RhXf/kYV3/5GFd/+RhXf/kYV3/wAAAAAAAAAAVmXq/1Zl6v9WZer/VmXq/1Zl + 6v9WZer/VmXq/1Zl6v9WZer/VmXq/1Zl6v9WZer/VmXq/1Zl6v9WZer/VmXq/1Zl6v9WZer/VmXq/1Zl + 6v9WZer/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkYV3/5GFd/+RhXf/kYV3/5GFd/+RhXf/kYV3/5GF + d/+RhXf/kYV3/5GFd/+RhXf/kYV3/5GFd/+RhXf/kYV3/5GFd/+RhXf/kYV3/5GFd/8AAAAAAAAAAFZl + 6v9WZer/VmXq/1Zl6v9WZer/VmXq/1Zl6v9WZer/VmXq/1Zl6v9WZer/VmXq/1Zl6v9WZer/VmXq/1Zl + 6v9WZer/VmXq/1Zl6v9WZer/VmXq/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJGFd/+RhXf/kYV3/5GF + d/+RhXf/kYV3/5GFd/+RhXf/kYV3/5GFd/+RhXf/kYV3/5GFd/+RhXf/kYV3/5GFd/+RhXf/kYV3/5GF + d/+RhXf/AAAAAAAAAABWZer/VmXq/1Zl6v9WZer/VmXq/1Zl6v9WZer/VmXq/1Zl6v9WZer/VmXq/1Zl + 6v9WZer/VmXq/1Zl6v9WZer/VmXq/1Zl6v9WZer/VmXq/1Zl6v8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AACRhXf/kYV3/5GFd/+RhXf/kYV3/5GFd/+RhXf/kYV3/5GFd/+RhXf/kYV3/5GFd/+RhXf/kYV3/5GF + d/+RhXf/kYV3/5GFd/+RhXf/kYV3/wAAAAAAAAAAVmXq/1Zl6v9WZer/VmXq/1Zl6v9WZer/VmXq/1Zl + 6v9WZer/VmXq/1Zl6v9WZer/VmXq/1Zl6v9WZer/VmXq/1Zl6v9WZer/VmXq/1Zl6v9WZer/AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAkYV3/5GFd/+RhXf/kYV3/5GFd/+RhXf/kYV3/5GFd/+RhXf/kYV3/5GF + d/+RhXf/kYV3/5GFd/+RhXf/kYV3/5GFd/+RhXf/kYV3/5GFd/8AAAAAAAAAAFZl6v9WZer/VmXq/1Zl + 6v9WZer/VmXq/1Zl6v9WZer/VmXq/1Zl6v9WZer/VmXq/1Zl6v9WZer/VmXq/1Zl6v9WZer/VmXq/1Zl + 6v9WZer/VmXq/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAkYV3/5GFd/+RhXf/kYV3/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAVmXq/1Zl6v9WZer/VmXq/1Zl6v9WZer/VmXq/1Zl6v9WZer/VmXq/1Zl6v9WZer/VmXq/1Zl + 6v9WZer/VmXq/1Zl6v9WZer/VmXq/1Zl6v8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAJGFd/+RhXf/kYV3/5GFd/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAFZl6v9WZer/VmXq/1Zl6v9WZer/VmXq/1Zl6v9WZer/VmXq/1Zl + 6v9WZer/VmXq/1Zl6v9WZer/VmXq/1Zl6v9WZer/VmXq/1Zl6v8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACRhXf/kYV3/5GFd/+RhXf/AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABWZer/VmXq/1Zl6v9WZer/VmXq/1Zl + 6v9WZer/VmXq/1Zl6v9WZer/VmXq/1Zl6v9WZer/VmXq/1Zl6v9WZer/VmXq/1Zl6v9WZer/AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkYV3/5GF + d/+RhXf/kYV3/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFZl + 6v9WZer/VmXq/1Zl6v9WZer/VmXq/1Zl6v9WZer/VmXq/1Zl6v9WZer/VmXq/1Zl6v9WZer/VmXq/1Zl + 6v9WZer/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAJGFd/+RhXf/kYV3/5GFd/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAVmXq/1Zl6v9WZer/VmXq/1Zl6v9WZer/VmXq/1Zl6v9WZer/VmXq/1Zl + 6v9WZer/VmXq/1Zl6v9WZer/AAD/AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACRhXf/kYV3/5GFd/+RhXf/AAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABWZer/VmXq/1Zl6v9WZer/VmXq/1Zl + 6v9WZer/VmXq/1Zl6v9WZer/VmXq/1Zl6v9WZer/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkYV3/5GFd/+RhXf/kYV3/wAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFZl + 6v9WZer/VmXq/1Zl6v9WZer/VmXq/1Zl6v9WZer/VmXq/1Zl6v9WZer/AAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJGF + d/+RhXf/kYV3/5GFd/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABWZer/VmXq/1Zl6v9WZer/VmXq/wAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA/////////////////////////////////////////////////////////gAAAP/////AAAAA + A////gAAAAAAf//8AAAAAAAf//gAAAAAAA//+AAAAAAAD//4AAAAAAAP//gAAAAAAA//+AAAAAAAD//4 + AAAAAAAP//wAAAAAAA///AAAAAAAH//8AAAAAAAf//4AAAAAAB///gAAAAAAP///AAAAAAA///8AAAAA + AH///4AAAAAA////wAAAAAD////AAAAAAf///+AAAAAD////8AAAAAf////4AAAAD/////4AAAA///// + /wAAAH//////wAAB///////4AA////////////////D//4B/////8P/+AB/////w//gAD/////D/+AAH + ////8P/wAAP////w/+AAA/////D/4AAB////8P/gAAH///AAAMAAAf//8AAAwAAB///wAADAAAH///AA + AMAAAf//8AAAwAAB////8P/gAAH////w/+AAA/////D/4AAD////8P/wAAf////w//gAB/////D//AAf + ////8P/+AD/////w///B//////////////////////////////////////////////////////////// + //////////////////////////////////////////////////8= + + + \ No newline at end of file diff --git a/SuiteCRMAddIn/Extensions/ContactItemExtensions.cs b/SuiteCRMAddIn/Extensions/ContactItemExtensions.cs index a9cb919d..42178ca5 100644 --- a/SuiteCRMAddIn/Extensions/ContactItemExtensions.cs +++ b/SuiteCRMAddIn/Extensions/ContactItemExtensions.cs @@ -24,7 +24,10 @@ namespace SuiteCRMAddIn.Extensions { using BusinessLogic; using SuiteCRMClient; + using System; + using System.Globalization; using System.Runtime.InteropServices; + using System.Xml.Serialization; using Outlook = Microsoft.Office.Interop.Outlook; /// @@ -35,6 +38,16 @@ namespace SuiteCRMAddIn.Extensions /// public static class ContactItemExtensions { + /// + /// Name of the override property. + /// + private const string OverridePropertyName = "UserOverride"; + + /// + /// The duration of the override window in minutes. + /// + private const int OverrideWindowMinutes = 10; + /// /// Remove all the synchronisation properties from this item. /// @@ -70,6 +83,89 @@ public static CrmId GetCrmId(this Outlook.ContactItem olItem) return result; } + /// + /// True if the override window is open for this item. + /// + /// In order to allow manual sync, we need to be able to override the disablement of syncing - + /// but only briefly. + /// The item which we wish to sync. + /// True if the manual sync window is open for this item. + public static bool IsManualOverride(this Outlook.ContactItem olItem) + { + bool result = false; + if (olItem.UserProperties[OverridePropertyName] != null) + { + DateTime value = olItem.UserProperties[OverridePropertyName].Value; + + if ((DateTime.UtcNow - value).Minutes < OverrideWindowMinutes) + { + result = true; + } + else + { + /* no point holding on to a timed-out manual override property */ + olItem.ClearManualOverride(); + } + } + + return result; + } + + /// + /// Set this item as manually syncable, briefly. As a side effect of making the change triggers sync. + /// + /// In order to allow manual sync, we need to be able to override the disablement of syncing - + /// but only briefly. + /// The item which may be synced despite syncing being disabled + public static void SetManualOverride(this Outlook.ContactItem olItem) + { + var p = olItem.UserProperties.Add(OverridePropertyName, Outlook.OlUserPropertyType.olDateTime); + p.Value = DateTime.UtcNow; + olItem.Save(); + } + + /// + /// Clear the manually syncability of this item; does not break is manual sync was not set. + /// + /// In order to allow manual sync, we need to be able to override the disablement of syncing - + /// but only briefly. + /// The item which may be synced despite syncing being disabled + public static void ClearManualOverride(this Outlook.ContactItem olItem) + { + olItem.UserProperties[OverridePropertyName]?.Delete(); + } + + public static void ClearCrmId(this Outlook.ContactItem olItem) + { + var state = SyncStateManager.Instance.GetExistingSyncState(olItem); + + olItem.ClearUserProperty(SyncStateManager.CrmIdPropertyName); + + if (state != null) + { + state.CrmEntryId = null; + } + + olItem.Save(); + } + + public static void ChangeCrmId(this Outlook.ContactItem olItem, string text) + { + var crmId = new CrmId(text); + var state = SyncStateManager.Instance.GetExistingSyncState(olItem); + var userProperty = olItem.UserProperties.Find(SyncStateManager.CrmIdPropertyName) ?? + olItem.UserProperties.Add(SyncStateManager.CrmIdPropertyName, + Outlook.OlUserPropertyType.olText); + userProperty.Value = crmId.ToString(); + + if (state != null) + { + state.CrmEntryId = crmId; + } + + olItem.Save(); + } + /// /// Am I actually a valid Outlook item at all? diff --git a/SuiteCRMAddIn/Extensions/TreeNodeExtensions.cs b/SuiteCRMAddIn/Extensions/TreeNodeExtensions.cs new file mode 100644 index 00000000..1f081c33 --- /dev/null +++ b/SuiteCRMAddIn/Extensions/TreeNodeExtensions.cs @@ -0,0 +1,48 @@ +/** + * Outlook integration for SuiteCRM. + * @package Outlook integration for SuiteCRM + * @copyright SalesAgility Ltd http://www.salesagility.com + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU LESSER GENERAL PUBLIC LICENCE as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program 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. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENCE + * along with this program; if not, see http://www.gnu.org/licenses + * or write to the Free Software Foundation,Inc., 51 Franklin Street, + * Fifth Floor, Boston, MA 02110-1301 USA + * + * @author SalesAgility + */ + +#region + +using System.Collections.Generic; +using System.Windows.Forms; + +#endregion + +namespace SuiteCRMAddIn.Extensions +{ + /// + /// Stolen shamelessly from + /// https://stackoverflow.com/questions/4702051/get-a-list-of-all-tree-nodes-in-all-levels-in-treeview-controls + /// + public static class TreeNodeExtensions + { + public static List GetAllNodes(this TreeNode _self) + { + var result = new List(); + result.Add(_self); + foreach (TreeNode child in _self.Nodes) + result.AddRange(child.GetAllNodes()); + return result; + } + } +} \ No newline at end of file diff --git a/SuiteCRMAddIn/Extensions/TreeViewExtensions.cs b/SuiteCRMAddIn/Extensions/TreeViewExtensions.cs new file mode 100644 index 00000000..4d92a7ef --- /dev/null +++ b/SuiteCRMAddIn/Extensions/TreeViewExtensions.cs @@ -0,0 +1,47 @@ +/** + * Outlook integration for SuiteCRM. + * @package Outlook integration for SuiteCRM + * @copyright SalesAgility Ltd http://www.salesagility.com + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU LESSER GENERAL PUBLIC LICENCE as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program 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. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENCE + * along with this program; if not, see http://www.gnu.org/licenses + * or write to the Free Software Foundation,Inc., 51 Franklin Street, + * Fifth Floor, Boston, MA 02110-1301 USA + * + * @author SalesAgility + */ + +#region + +using System.Collections.Generic; +using System.Windows.Forms; + +#endregion + +namespace SuiteCRMAddIn.Extensions +{ + /// + /// Stolen shamelessly from + /// https://stackoverflow.com/questions/4702051/get-a-list-of-all-tree-nodes-in-all-levels-in-treeview-controls + /// + public static class TreeViewExtensions + { + public static List GetAllNodes(this TreeView _self) + { + var result = new List(); + foreach (TreeNode child in _self.Nodes) + result.AddRange(child.GetAllNodes()); + return result; + } + } +} \ No newline at end of file diff --git a/SuiteCRMAddIn/Helpers/SearchHelper.cs b/SuiteCRMAddIn/Helpers/SearchHelper.cs new file mode 100644 index 00000000..77b94a99 --- /dev/null +++ b/SuiteCRMAddIn/Helpers/SearchHelper.cs @@ -0,0 +1,85 @@ +/** + * Outlook integration for SuiteCRM. + * @package Outlook integration for SuiteCRM + * @copyright SalesAgility Ltd http://www.salesagility.com + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU LESSER GENERAL PUBLIC LICENCE as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program 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. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENCE + * along with this program; if not, see http://www.gnu.org/licenses + * or write to the Free Software Foundation,Inc., 51 Franklin Street, + * Fifth Floor, Boston, MA 02110-1301 USA + * + * @author SalesAgility + */ + +#region + +using System.Collections.Generic; +using System.Linq; +using System.Text; +using SuiteCRMAddIn.BusinessLogic; +using SuiteCRMAddIn.Exceptions; +using SuiteCRMClient; +using SuiteCRMClient.RESTObjects; + +#endregion + +namespace SuiteCRMAddIn.Helpers +{ + /// + /// We do search (differently) in too many places. This is an attempt to rationalise it. + /// + public class SearchHelper + { + public static IEnumerable SearchContacts(string token) + { + return Search(ContactSynchroniser.CrmModule, token, + new[] {"first_name", "last_name", "email1" , "sync_contact", "outlook_id" }); + } + + public static IEnumerable Search(string module, string token, IEnumerable fields, + string logicalOperator = "OR") + { + var bob = new StringBuilder("("); + var fieldsArray = fields.ToArray(); + + foreach (var field in fieldsArray) + { + switch (field) + { + case "first_name": + case "last_name": + case "name": + if (field != fieldsArray.First()) + bob.Append($"{logicalOperator} "); + bob.Append($"{module.ToLower()}.{field} ").Append(token.Length < 4 + ? $"= '{token}' " + : $"LIKE '%{token}%' "); + break; + case "email1": + if (field != fieldsArray.First()) + bob.Append($"{logicalOperator} "); + bob.Append( + $"({module.ToLower()}.id in (select eabr.bean_id from email_addr_bean_rel eabr INNER JOIN email_addresses ea on eabr.email_address_id = ea.id where eabr.bean_module = '{module}' and ea.email_address "); + bob.Append(token.Length < 4 ? $"= '{token}'))" : $"LIKE '%{token}%'))"); + break; + } + } + bob.Append(")"); + + var result = RestAPIWrapper.GetEntryList(module, bob.ToString(), 1000, "date_entered DESC", 0, false, fieldsArray) + .entry_list; + + return result; + } + } +} diff --git a/SuiteCRMAddIn/Images/Cancel.png b/SuiteCRMAddIn/Images/Cancel.png index 3d19d8a2f9b7180e290c37c993e48a430d187d53..1caee06866c238f7d42b6396caf156f4bd44109f 100644 GIT binary patch literal 2425 zcmV-<35NEGP)!~# zv{P}$s!W2&SPda@9Iw-{o%UO%-@LW9&a^_(fT&y&)Q+|~4()V6`=z2|RRTg2l_HSc z!~g-4Y|c4PKO~Ffa?YN;glzwx_U!xI{?EC+@B2JQm}GQqTvsO8Rf1HiumV^H%mzw< znImFnfm1*)a9ET>iXLz+dtdo;uO=olKA8-o-Sum)bPnxo=3PY7yU`VKUL(Ovdz0XvQ;$MDsPu8!!Gh4;L zSAaG)n&k2Jr%@iw)(L>47AM{L^f+boXpEFb8Pq5MQ5ht{Aag?r=9vU#<~Sj-b8&+z zPsf{Ee=eXw>>c!q#vgJxhjI5bC7DYG+ks zKP7TH8@DLD6qnLk*}QoulWfKWXmxcYSt_prtAhs6X)ouU!5itYSD<;mXbdh(!iTsa z@;4S)hqF=rYfMUS&y)n;=(MrXB)({WG3c2;<}BpRfi?WsUX)Fsf$@#dr>vgd#^s@- zf#elliZ`|1?RPtb{0uy>EdCpT`b>^eM0lgWn!og~<+M9HP;j~6jLzo$)DJkPB`mUz z5E92%USL)KHIa;+C6as>B^Yq<(Ke9I)wbSZ2SC_TC z+&Ok&+&n-V8x11c$Uy$U&{e#6?*9J=@&L0WWVY%ACwyE2y1!_z%QVU9w3o5F{~m0t zYy-&|f^y6Bwp_@kEmS2NYJNK2?gcnqS3PG?kLL(!7&b?0KMZ)|Zp9Dex1Kh7th=b`nNitwPH z_FMgTkaWv422vrTcUio%ZsK0p*KAk_YIpSJ3Brk1N~+V7fN0 zD;wFmo)90VuEouM<0vZ>nmi0Y3qBgU#!qC`iQ4Lz5$q~_7DY#F&)gIQlR-X>46%y| znJS}3zU3w1sKrrda@O`Rx#R(kI*W1Cd%A9nRvJ+}Z}5}u{J`5-*ye7)mhk_YH@=lKoKGcH=TyW#+ZO^;K^`FG&!J>;U+^QCD)K>K7;a9O5K$S-+rdDh|5XOae+fd(F0xrA+cEy8dpp3F<3n00j>yj z_?FpKrQNuey$_$_VTIKm$XT(G2dD`9#_l@C>@(%hy_!Jqyb4xD_G9pGzbQuY2A3i6@f;VCJutE*W{lbHXYBgO-zPRw zq~rl^h>3X)_=SOgpcD*Z6Cns(%2S1 zqc>0Ajf^}iiysHD%jX?wHb?07m@-cIghM7;X z)H;|^R#ocCo7+B}Xv}j@Fy7p@Ta~AS1XCh?tc-k+am`Q&7+kK4{)78xK2F@62%_?M zS@W(}yaxSSWkC}4H7^LP58~;#vw$}T*6_K#B#3y{SZEz#^|Y7$-}9rfE!Na}uV1UI zZ=c)n^Psdgsi#VTTQYf@A393iCBNlUr-F9|Zlc3pk#}X;;Ih;@$PLjw{?psBP+pIj z(v6wg=7Y7%H#CG3dTLA1DXkbG4Hvx>V&C@#bAG1ij?PBJak(-g|E=wZq|uUE~pgIr-WP z1f>Vz8B6rpv2*)uQLxU(I2u16G4T@A2%I+u#9}BdorA-$uY4bBV2}m}qy&BbZ zBdutw^6=vVABxBxRd;)O8>^6*^xoGKwbd~bGF8TCrR&NH!Ci(ib5wQI=kp?R3fKKo rF^5I;psKVx#_XHFd5351vJm(msOk+0Z*Yuo00000NkvXXu0mjf>8Gur literal 2086 zcmV+>2-)|EP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!~g&e!~vBn4jTXf02y>eSaefwW^{L9 za%BKPWN%_+AW3auXJt}lVPtu6$z?nM00)*yL_t(oN2OP5Y@1gZer$if#!lkIxj0SS zIBifuQW`bQ)|6%~8>n4DT!w%lT5gl}XK0K~0u9h4R0*U`R8Yhp{!FFNQs_F`jh1R< zX-O|?XhK`1X%p5YO`60`?8J`mpD!QJ`AibLI*AA8la((z=e*DJKIeVk^L`qI10Q0@ zN(xFa22COb$Z0@q*Xy7dC1lJJ%x24num)%fAwU?&4`-1coCJnEh>uMnI_^a(7=n^f zpfej`taiYZ4eKoT+( zWT1rvJuEOwc33JaVQ*`OWA`>_KhX^1ruCfFtVm=<0!f;dd+s7}<{y}P^IZf-M-ae6 zgfWX0iec~QfXP(@jb1`x#*aYX0HVQrq+#c570Rr2sNU6yiv7Ex+0z0`u`NFdaReV6 z@szAY&fHMO_P(ZEH$17F!+Pa7jLN02zo4V4My?PBZ7=U5R4s5%23S|cKnrA8&B=|d_aX<$X zieN=;c@r96`6jf_?}V+~o?}D%L5qp*LChRJN$@N1q7Rj?zKW;&&J_$U?7eNM-9E(r(1Qi9Z^`bG0`h$i0;m6u1^*~hEQI!+lLdRu zl7wEV9>u9R!L2Y8GDculDZWLZbGuNq>j~!16ednzK(c4(Q38pcdk9>=&E?am`0h(6 z*GL6~ zU}yo_TVn{%O>t`g?w@?GAaI$h?n@tqJ)Puv+ekp7)GXCBYohFFYXzQ~yU)r1)YrRV zsBPo?9K7Avp_%?K0tmzq>|@cvJT#7GI7@O-IfE6+&1T8%O-k__6{i&phH29>!|~wyusfy%*qKX%l6aDYTWI>q%YQ z7&?Nd5G$&{ChslO8FMeDs$JVfeMLAnkHo!+Wdg}r3bzoV2^pphu2l(S!CO#Fa1dNi z|L4>**E06gh*-+e;OT|i@@VO`HM-TTNH8{%;&NMzfpnC?B8x;!LuWCqNI(RfM`}V5 z11?QpHT2lew~Xp}20=?Hs;4fZ(OR0Ts~%tQ_8{kV>Z6p~RPZc;%3>Jo zB{XG%|I&LoMubckbyY}ZLd%onF)tHd#jIJC>6Iys!J;nY6cZoXL%x^@{yY_&*dBJ|U! z$~{fkAQeaue8OOWd-xo-t`qAE8`q!x7QMHl45bL|X@$$-TqYpi)^}||=!s@dmr`CU zG~tLE?Q#AmGB!*S0({zFLiHKPk)66m?8l^YMjl`esw$FvSaBstkf4F z{K8YHsccf4%nUsj?PiFJMBpW;!>rzdCkL-!YyF0T!QcJX)sWn^g zBmB+XyoK>UpT)qz!%$)#(zdI|SjIRqHFiLA^gG!5c-JH9t@vFq9`xb-FW$h0pPj`_ zViZ2+Lt3rk*-J|dQ71$}6%}3-6^W0IeE}%4MBi&rj_J>Iq5k0W*xB5c_vlvrGK#U$ zc<18Z5I*!4s?YWldX}ju^ib4CfG_^Ed=u}YDY278ps@*&m-k}NvtNLVb!Mfp=BJt1 zI2rKcQtvec-@FXV`5T1q#l)|6$?30nLF&MP>OI QB>(^b07*qoM6N<$f_%H%`~Uy| diff --git a/SuiteCRMAddIn/Images/Cancel.svg b/SuiteCRMAddIn/Images/Cancel.svg new file mode 100644 index 00000000..e421e0f1 --- /dev/null +++ b/SuiteCRMAddIn/Images/Cancel.svg @@ -0,0 +1,78 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + diff --git a/SuiteCRMAddIn/Images/Cancel_old.png b/SuiteCRMAddIn/Images/Cancel_old.png new file mode 100644 index 0000000000000000000000000000000000000000..3d19d8a2f9b7180e290c37c993e48a430d187d53 GIT binary patch literal 2086 zcmV+>2-)|EP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!~g&e!~vBn4jTXf02y>eSaefwW^{L9 za%BKPWN%_+AW3auXJt}lVPtu6$z?nM00)*yL_t(oN2OP5Y@1gZer$if#!lkIxj0SS zIBifuQW`bQ)|6%~8>n4DT!w%lT5gl}XK0K~0u9h4R0*U`R8Yhp{!FFNQs_F`jh1R< zX-O|?XhK`1X%p5YO`60`?8J`mpD!QJ`AibLI*AA8la((z=e*DJKIeVk^L`qI10Q0@ zN(xFa22COb$Z0@q*Xy7dC1lJJ%x24num)%fAwU?&4`-1coCJnEh>uMnI_^a(7=n^f zpfej`taiYZ4eKoT+( zWT1rvJuEOwc33JaVQ*`OWA`>_KhX^1ruCfFtVm=<0!f;dd+s7}<{y}P^IZf-M-ae6 zgfWX0iec~QfXP(@jb1`x#*aYX0HVQrq+#c570Rr2sNU6yiv7Ex+0z0`u`NFdaReV6 z@szAY&fHMO_P(ZEH$17F!+Pa7jLN02zo4V4My?PBZ7=U5R4s5%23S|cKnrA8&B=|d_aX<$X zieN=;c@r96`6jf_?}V+~o?}D%L5qp*LChRJN$@N1q7Rj?zKW;&&J_$U?7eNM-9E(r(1Qi9Z^`bG0`h$i0;m6u1^*~hEQI!+lLdRu zl7wEV9>u9R!L2Y8GDculDZWLZbGuNq>j~!16ednzK(c4(Q38pcdk9>=&E?am`0h(6 z*GL6~ zU}yo_TVn{%O>t`g?w@?GAaI$h?n@tqJ)Puv+ekp7)GXCBYohFFYXzQ~yU)r1)YrRV zsBPo?9K7Avp_%?K0tmzq>|@cvJT#7GI7@O-IfE6+&1T8%O-k__6{i&phH29>!|~wyusfy%*qKX%l6aDYTWI>q%YQ z7&?Nd5G$&{ChslO8FMeDs$JVfeMLAnkHo!+Wdg}r3bzoV2^pphu2l(S!CO#Fa1dNi z|L4>**E06gh*-+e;OT|i@@VO`HM-TTNH8{%;&NMzfpnC?B8x;!LuWCqNI(RfM`}V5 z11?QpHT2lew~Xp}20=?Hs;4fZ(OR0Ts~%tQ_8{kV>Z6p~RPZc;%3>Jo zB{XG%|I&LoMubckbyY}ZLd%onF)tHd#jIJC>6Iys!J;nY6cZoXL%x^@{yY_&*dBJ|U! z$~{fkAQeaue8OOWd-xo-t`qAE8`q!x7QMHl45bL|X@$$-TqYpi)^}||=!s@dmr`CU zG~tLE?Q#AmGB!*S0({zFLiHKPk)66m?8l^YMjl`esw$FvSaBstkf4F z{K8YHsccf4%nUsj?PiFJMBpW;!>rzdCkL-!YyF0T!QcJX)sWn^g zBmB+XyoK>UpT)qz!%$)#(zdI|SjIRqHFiLA^gG!5c-JH9t@vFq9`xb-FW$h0pPj`_ zViZ2+Lt3rk*-J|dQ71$}6%}3-6^W0IeE}%4MBi&rj_J>Iq5k0W*xB5c_vlvrGK#U$ zc<18Z5I*!4s?YWldX}ju^ib4CfG_^Ed=u}YDY278ps@*&m-k}NvtNLVb!Mfp=BJt1 zI2rKcQtvec-@FXV`5T1q#l)|6$?30nLF&MP>OI QB>(^b07*qoM6N<$f_%H%`~Uy| literal 0 HcmV?d00001 diff --git a/SuiteCRMAddIn/Images/Check.png b/SuiteCRMAddIn/Images/Check.png index 89bba903d2018be9a3cac344aa275e2d1e1c310f..10dd3ea9bf2d8404806f868e6ce00db717bb986e 100644 GIT binary patch literal 2198 zcmV;H2x<3;P)RN*Y^=SjuV3Iw5Fk; z%Fy%(YC&p6B}9l+991cYLa0S56$qtC5$U1QB2g+TC{k6_BY@f_)F}y&GwS~m_H++oa60+6F<{6?%xBr-$FnwEFRN>Qk!ib;dMf2c;?{bU)YQNwB_IqBc-CZJ7*+kac9 z={bxd3h1vomW+f#!oun8+#IkL!yPYMH9dzAWYea(>_=sEBc-D%+&{c%!GZjawY#IH0Zwgw3+U@ z4^|gXMVW=@wIe>p{$aYZC2fLL+k0QF=9b4$1cMq2Q*uIbGNUKm%;-NdDPOWCl#{JB zRaDz^1V*c1wa)0sYjdHGewJzZQZ)goqMClKBWjvqg@GJ!4wm|?u97b1iCRFJ*J@60s!P(bJ%JVuyV5b`7(u83nP-`q~zi3 zr$Vurg?uEjr6$ztZhNYdYTXa3TVij#yBN9hyL{!bWhR*D<_@#EeGqmu;1fZAFgEui zkcVcl!j_p}AlpwbjSU$x=?I!+!q>ost`E=P-GK~RLe7@LZ^q(q$E-D@Q$B`K{#BfyozQ*ox1mM zHl3l5pZupQdi9Tm$Y}*w6Es=IQB_jSkHBt}2uX$u#b@$98muK#6Hu$R_ld5mdq#{@ zdlzhw7XAJq9chK`43}dQZ@QVAmtb|Uq&<8w(mQrml1(pEQ9A}u1Oq84@vN7#-vct7 zvFXW1t3lOr2sSZR^tnCU^wY4qY}o8eKUDiT%rt+XY;}Gm+DoIYt0dD#X03ZgV%Y{$-1T)>T!$7v4Hc}lMzWi$Rq;*$H zPW%N$k_T7c`dFcw>iUX7)p!6lAs;_=Zl1aNdstmAC;$LRowo0BGu8PxO;nj+#1*Qh z9u!5-VhZYrH)^}Q`k6she-y_^9Hu@|iitsP>gOPj%j8VJ8ua~dHtKGBgixrV?*IY- z0IATMX=TMhLP2W;gmWYkJY%Lh@2b`AJpp^8#K$|{F2pJ^9Z0Qa&sXa-eXo;BxasVA zaAJTFQmm7}R239n33Y%XqMc>Zn=d-FfJ<^c;96+Ba@j0QAB)c}U#IbGVoF%>~7 zb(J_qL2aD_0DzyL_}gswV#X)Q`2+(1fQaZC1qepy%Pjj51TFgAMlr<+F6QGOq#JSz z#iwmH5_b;cn5tDvR6|dTbH&Tq-(@mA>@cWN?Ia@(?cmwg7i!SE+*+SF}OS+w< zq?@rFjtDMCK7-1#1j4*4tE)AIAZ>e(B|}jJAaiQm_)P^$KrM(iA{d+f#1Z`WAOJwh zM}4`H(H^6VxqjBgjGmF?R9=EI;?kc$kv2>+A>*Du9CuzQQ>eQ>t zP#naCTt_#X6suoQ#; Y1IVxb?V0=BQ2+n{07*qoM6N<$f`;@XW&i*H literal 1383 zcmV-t1(^DYP)961P;oLf zmAitvEH1k&%VjU$x7+)DhLcIPl#4$)GiT23`OZ1dbDsCS=Y5aB0rnlg zOszZLr#E4WJ|^XXfrB@{Hsx*9nRH}x6J2${k7o>UGR%st>QfCqBamD?MjfsiSTKKT z4r&Oz)7i}T8%++>UNvjA>eITO=G_$&tSB0t6s{UnoRpA@>KlawZiG-Ef`=90KzS`E zeePe)y@S9q-6Jv7sHy6UmY+NQPvA6u-oViNOO{N_LLb+64v9xgHtiJ=N@2`X@`+u-(#wJu53(?xy0M^YyBoyJA z(T)a#MN8nNUWH?Q*@;Z0qF-J@TqN3@$B>$s3x!l(rhackk0hx7C8a!MSMm!5sBA8R zrL!I^%kaBrSuqZts^+B6@hTr!tc{8f2@23W^LPY0oNX}K8c@|-f|OYrC<24a==*IX z=>PO!S?Fi!vvs)Cq(h6XhTM&Tn?k!pEWx3ZbzoR_zCQV)*((CXR6Xg@NVwb%*qwHA z85hZU9aT+4BJo`iSXolRFrEapPb;KBU#)tvh`@`9Y$bua;3nxMVt>>%cEDh=YD-co zy-F;20&b66zvtL_I<;bmg<@LF&F{$4ah*VlkUTR7K}2HF*2r0b{p8UGd0|LYrXZLTN%;9twWP!Qc20QCq_`Lw!-1EgZsqUG)NkTkpq&k zW3LA4X&O{F?}Wj679RJ_xnhxsR0_eqAL?MTw$Ck1t^cIg1h|x};M4Dy2gw2opNorv z&2G7kgd!jm{S~pe(SDN5W4Hy*6AVT&hWk zjiTMQkP;3qeY*1&6N#ZxgyHL>Rj}APXQ$77YIkqIxdgb!SU?Nqnr$6#?mb=wr8Jb3 z5c86AYIIkQk0L;hbJZ=NvH86Pze9nZ%B%SU)`uw-SyRV7h?aIrCg@Cb7g@hR_z9Hw z{P55F- + + + + + + + image/svg+xml + + + + + + + + + + + + + + diff --git a/SuiteCRMAddIn/Images/Check_old.png b/SuiteCRMAddIn/Images/Check_old.png new file mode 100644 index 0000000000000000000000000000000000000000..89bba903d2018be9a3cac344aa275e2d1e1c310f GIT binary patch literal 1383 zcmV-t1(^DYP)961P;oLf zmAitvEH1k&%VjU$x7+)DhLcIPl#4$)GiT23`OZ1dbDsCS=Y5aB0rnlg zOszZLr#E4WJ|^XXfrB@{Hsx*9nRH}x6J2${k7o>UGR%st>QfCqBamD?MjfsiSTKKT z4r&Oz)7i}T8%++>UNvjA>eITO=G_$&tSB0t6s{UnoRpA@>KlawZiG-Ef`=90KzS`E zeePe)y@S9q-6Jv7sHy6UmY+NQPvA6u-oViNOO{N_LLb+64v9xgHtiJ=N@2`X@`+u-(#wJu53(?xy0M^YyBoyJA z(T)a#MN8nNUWH?Q*@;Z0qF-J@TqN3@$B>$s3x!l(rhackk0hx7C8a!MSMm!5sBA8R zrL!I^%kaBrSuqZts^+B6@hTr!tc{8f2@23W^LPY0oNX}K8c@|-f|OYrC<24a==*IX z=>PO!S?Fi!vvs)Cq(h6XhTM&Tn?k!pEWx3ZbzoR_zCQV)*((CXR6Xg@NVwb%*qwHA z85hZU9aT+4BJo`iSXolRFrEapPb;KBU#)tvh`@`9Y$bua;3nxMVt>>%cEDh=YD-co zy-F;20&b66zvtL_I<;bmg<@LF&F{$4ah*VlkUTR7K}2HF*2r0b{p8UGd0|LYrXZLTN%;9twWP!Qc20QCq_`Lw!-1EgZsqUG)NkTkpq&k zW3LA4X&O{F?}Wj679RJ_xnhxsR0_eqAL?MTw$Ck1t^cIg1h|x};M4Dy2gw2opNorv z&2G7kgd!jm{S~pe(SDN5W4Hy*6AVT&hWk zjiTMQkP;3qeY*1&6N#ZxgyHL>Rj}APXQ$77YIkqIxdgb!SU?Nqnr$6#?mb=wr8Jb3 z5c86AYIIkQk0L;hbJZ=NvH86Pze9nZ%B%SU)`uw-SyRV7h?aIrCg@Cb7g@hR_z9Hw z{P55F- + + + + + image/svg+xml + + search + + + + + + search + + diff --git a/SuiteCRMAddIn/Images/Search_Button.png b/SuiteCRMAddIn/Images/Search_Button.png index 3b3f443c6dcfa28cfa4bef6713d325a3519efa10..1fb0b20e949d09ccf728acd94c9eb02de807a30e 100644 GIT binary patch literal 3316 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 diff --git a/SuiteCRMAddIn/Images/Settings.png b/SuiteCRMAddIn/Images/Settings.png index f36cc1de597d94031192e2bc1f88dddc0218e27d..98522261593789c6589e51143a925ebaa2234086 100644 GIT binary patch literal 11096 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 T)z6f}00000NkvXXu0mjfO?Nbj diff --git a/SuiteCRMAddIn/Images/Settings.svg b/SuiteCRMAddIn/Images/Settings.svg new file mode 100644 index 00000000..d19194fd --- /dev/null +++ b/SuiteCRMAddIn/Images/Settings.svg @@ -0,0 +1,74 @@ + + + + + + image/svg+xml + + + + + + + + + + + + diff --git a/SuiteCRMAddIn/Images/Settings_old.png b/SuiteCRMAddIn/Images/Settings_old.png new file mode 100644 index 0000000000000000000000000000000000000000..f36cc1de597d94031192e2bc1f88dddc0218e27d GIT binary patch literal 3209 zcmV;440iL0P)|!)s@G8r+a4fhzXJd0h`?fTbP8f32YIH3T%Z9v7ChpAt_?AVT%wF z%FYI?ksL`Q&Dcw0X+|2!SQ-g1_Cg?39#slUV4VWT*nvuAcOg~8&bpFN;0L=|!1#fT z0gW_|KKntB=^6FR^cc(e5dA;Ry?xF-kG}Wzx#!%0dCX%T^Y{yf{J8|L+OoyJ@U83u zGn-tHHEZ6jo;durWm)#=*5kA}pe;6ZwQ1|ORromYG2nwPWN!g4q5RP>^j~|z%`eQg zUZ=$YtzE-QOvC;oP*nljm`}48M%S%hRv_uGe+&2kfG9uj zT^GE*7=0)l#KjuY7O=|SoG2g zHRN8D51~CUW_}^GVfYp`v*!Yhf;0k`Anck**((RFmg8RSsb~gRmgP$Z>VDzaq)I`7 zpBf@}_k^4NP>CET+M)xOnrd{Z@I^25sytPj8NJ?XR9VpsNCxWqJsN*dY+2R2zG-JA zB=ftbPN676vSyj2RZ(Y-G%8lviGuX0eQ;ngz6{o|5a6A%R zB1U!@BHvMX0J!tug^Rv87sdm`BF%5sq(?t5NC(P8h;3?p5&0+GuUT?BF_%5l)w!1zr~rfQdE ztsbj%T+6bIaew_U6|T04 zMb3BxhAT1NvL3DuMF$_iG=B%&NNM9?Qu&(=gFl3#i9s*ZcpCldoAv`+9bM-o1Ml2g zil_V@Abi`=nh=ozuL`xthZiUPC!PaY4VW$@$AJUDJ1)t2CbGRJ+;n8R zGaMaQWMf{ds&^v%ZGo11Yf`=|E$fbVy~qwl6Hfp$N9inj$;L?Yf4k9^j00?y24~w) zxw5ruc*(}~YYvv;TRAdf23~&SC*&Ld4sd%s5*%^kiA7r80KSjv!|gpo-w@?~pcVk- zlSzN(QB-d%xAC@hC6)n~=jkoF6mWGw$t6&emY)m!&vaYiqdvoawxeg@{8D^N_r3lt z5&mJOL-a7&>}QG@p9c}`3kQE-V_(H&ifkHR3B`uKUW&D?E3wQlcotaf7;s;0s ztn62yqi0~LZJW;t`qz%`{Wa<8Pq}@rEbHOwG5!bMcPg{}z)`b`$LFY&oDdpHsxS^EZrF zO%z6B0E`7rtjtqFxc6j?2k46gcY!|Slv{Uf!Zl5%_C#ZW@dwKp4;~}I{`F1!5nW#( z@|YW~AkJ*hL?)H)@gk!bd}?$!WZ)}vl!xM3pz&VcQiH&V-?-kNCTLX2# znbU1WPipGVg7RxeYtfpap;;N`+T^iAz|0ZY5b+c{cy@rTQk&C9+yWPB0=_)28}NqL z@k>H@-Px)g({l<*rq2H}FGV$%hb#r}GeC3SUqM~@RMPp`TRk;7M?v$#VKZyb`U*@x za{Ts`5b>TBHf-mVcPndAJyCVY+1C7hg$CxZm3`e+_?dTc2+>O?WvJU8s4PRxe{WNffqx*&G z?6F_D(I33vylsg5enw&C=1?^8kLBdJp*@zk4fM;7t{3Csple*8Twp#8>~VC}sVzIo zIiaKj+T+8EZMB~w-}o2B@LyZ3UiZ_RZptcIXGT_lheFZeYfH&0M5sG)gD9JweTsG# zI}HvuHBDsF=|;&v_0_2@+dE@JXS?x083#xvdkxMVU)e2&zp=OTyQ8J}`ob+wC_L!s zss(#nM>Jts)|T3$j7+BBLfwfTgrDIksf*}PU!?h&QoQ$Atw%*SwKjiP z0_l$#wqBPs(%(X7MRB{TQ^&vOMQ%^H=}0Ix(%#@S;p>fBy%}RNxWdt6u1f;D@Q2>?*Idz^UZxUUIhWibsNObwCr1J%Su(E;LLbk0~d)Qmm_knsxB0jqiXP`W_iBSTEH|~ zHf^d2B+VCrnSe-CzuLR5`TaY?Z%V zSBAoUMA$20f7$CsSqZ|?#NTA$3810iQK24VV%VSbqC-XZ1KPWXnnl!0VdR9WcGhN& zKX58;f36%EF&kbvv{uo(ah~{!Kwx!mB)GL4-4tzQ=;%&7s=_TUk5bGod+iZrLv?2K z$&+z}Wm(3!ukJ=QjJr_1xZrUT7iTDJ?TZ9gdzDdf!eXK}yV{>LCj>qV>_K#AHf!z- z7@6^`m_J7K?;Yfqs_=NyU;k=HH1UJ+v_0shbl%Z(e?4|OI1b-b_$WGS8E;Fav)?pL z|Cv6+Zd7OlxfJx7+Vp61CH9=sOHwOGM$9EIA6g@#UBH4_1j_Dsr0KF!8`H{>5p(Ij zL%(x*;{c-q?Y-fqhfbz6?}jqS vYVeYp^25GR)Bl|={pK-`dCX%Te~I{iD_wPg)z6f}00000NkvXXu0mjf?EN-5 literal 0 HcmV?d00001 diff --git a/SuiteCRMAddIn/Images/manualSyncContact.png b/SuiteCRMAddIn/Images/manualSyncContact.png new file mode 100644 index 0000000000000000000000000000000000000000..4249f4e85d8853ce79cf11e3663dbff241b4b1e0 GIT binary patch literal 3647 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 R8~FeL002ovPDHLkV1mp@@T>p; literal 0 HcmV?d00001 diff --git a/SuiteCRMAddIn/Images/manualSyncContact.xcf b/SuiteCRMAddIn/Images/manualSyncContact.xcf new file mode 100644 index 0000000000000000000000000000000000000000..e823be4546dac22f0c4bbf14a6d93cc764a12da3 GIT binary patch literal 2332 zcma)*&vF_^5XKupSqTPP(h`ZtQoKg8gd&4boIiFILX=%eB~?DS>@Z1gS;N3?6)Y-P zxulcPJ?C6<$OGsZ@<5tb$f5JiFi1-Ru}Af7f0~`19)3IB33?~)S+niFtsEW_M%_yL z-=SqFk-)=&K6=J~SG3@BPzqXrR%8AXO#O-fa~*753VL2gmU=SsT3+N~ny^=*Sv@}M zb=|jeFbw+P(e7cnvg^vQ*>445=V-U_<9DSeyT`S3b&^<1yKXh|I&SFoWQ^Pg`L3bikue)IU?tEcZt`DK1e_27n=M!gjK1f4<9n&7A6Fgou_7iSGx zd+B1k)9iQq1Gi{GY0!D&xs`Ioj2Q-B%ZxpwzL}9adGF3QI`wRL;x+NT-NQ*OOrFo0 zv~#6XFm;2l>C2(c@3-4S8C@SxXa9Fv#*&&A`wD?T<%zqG2FCuXp*_dIT!O{6@^DW8RJV+cBSs`E1PJ zh1c~aV-ZHz*84xS9)Y&CXAH!xn2$F!rY9ryXyOp-R(fBI)c50Po^?F6FjBvofXBOq z-za&pOewWZ$%cdb-zGd z-}LX3>u*xQzen5tI>e1U?f7d{^jB%m&(Y`5zQ00`tV;e8m1k-hYaHa{Y0Gyh@4rjD zydfqnF=>fOOHAt1;+IIvOIltwIx@x!-td|mEiY*)P3<+Q0am6~ma?WcNSQN%lZ+@U z%H#+z5<9dm3?TtR0)zwz2@n#W(vAQh0X_nJpnU;8RwV&GGX*{Zd<6Ii@DWpdgykbF zAFMDp3e^oCVfo-B=3d$8p!)TFf;W8TM$1Q7K2v*vkEsDZCW4Qt4L;^f;3L3CnOmel zNSRxtz-Y9g_zIM8*9+<%@zs_BC#=LxQXr*PA-)1D-1vP3R#qhiRx<@w3ak`Zp||qt znpFec$6&=c7lRd}`}93$bRTm9lo-E6cOj$uba%v}!=Tkj@?ryB2k-FgxOj;*m--z@ zA>Xla1r^3K + + + + + + +