﻿<?xml version="1.0" encoding="utf-16"?>
<JiwaDocument xmlns:jiwa="http://www.jiwa.com.au/xml/schemas" Type="JiwaFinancials.Jiwa.JiwaApplication.Plugin.Plugin">
  <RecID>bfd04702-c142-4234-ac0a-fa1d27f6a007</RecID>
  <Name>Import Multiple Plugins</Name>
  <Description>Adds a new button "Import Multiple Plugins" to  the "Utilities" tab of the ribbon in Plugin Maintenance such that mutiple files can be selected at once for import.&amp;#13;&amp;#10;&amp;#13;&amp;#10;Plugins are imported in the order of execution order, then filename.&amp;#13;&amp;#10;&amp;#13;&amp;#10;Note that all successfully imported plugins are saved automatically.&amp;#13;&amp;#10;&amp;#13;&amp;#10;All plugins with .sql document attachments have those documents collated and saved into a single .sql script, which is saved to the ProgramData folder (fiull path is shown to the user via a messagebox at the conclusion of the import).  Scripts are ordered by the plugin execution order, and then the ItemNo of the document.&amp;#13;&amp;#10;&amp;#13;&amp;#10;A log of the import is also saved to the ProgramData folder.  Log will contain the exception text of any plugins that failed to import.</Description>
  <IsEnabled>true</IsEnabled>
  <IsIsolatedToOwnAppDomain>false</IsIsolatedToOwnAppDomain>
  <ExecutionOrder>0</ExecutionOrder>
  <Author>Jiwa Financials</Author>
  <Version>7.2.1.7</Version>
  <Code>using System;
using System.Windows.Forms;
using System.Text;
using System.Linq;
using System.Collections.Generic;

#region "FormPlugin"
public class FormPlugin : System.MarshalByRefObject, JiwaFinancials.Jiwa.JiwaApplication.IJiwaFormPlugin
{

    public override object InitializeLifetimeService()
    {
        // returning null here will prevent the lease manager
        // from deleting the Object.
        return null;
    }

    public void SetupBeforeHandlers(JiwaFinancials.Jiwa.JiwaApplication.IJiwaForm JiwaForm, JiwaFinancials.Jiwa.JiwaApplication.Plugin.Plugin Plugin)
    {
		var pluginForm = (JiwaFinancials.Jiwa.JiwaPluginMaintenanceUI.frmMain)JiwaForm;
		pluginForm.UltraToolbarsManager.ToolClick += UltraToolbarsManager1_ToolClick;		
    }

    public void Setup(JiwaFinancials.Jiwa.JiwaApplication.IJiwaForm JiwaForm, JiwaFinancials.Jiwa.JiwaApplication.Plugin.Plugin Plugin)
    {
		JiwaFinancials.Jiwa.JiwaPluginMaintenanceUI.frmMain pluginForm = (JiwaFinancials.Jiwa.JiwaPluginMaintenanceUI.frmMain)JiwaForm;
		Infragistics.Win.UltraWinToolbars.RibbonGroup group;
		Infragistics.Win.UltraWinToolbars.ButtonTool buttonTool;
	
		buttonTool = new Infragistics.Win.UltraWinToolbars.ButtonTool("ID_RecordUtilitiesImportMultiplePluginsFromXML");
		buttonTool.SharedProps.Caption = "Import Multiple Plugins";
        pluginForm.UltraToolbarsManager1.Tools.Add(buttonTool);
		
		group = pluginForm.UltraToolbarsManager1.Ribbon.Tabs["Utilities"].Groups.Cast&lt;Infragistics.Win.UltraWinToolbars.RibbonGroup&gt;().FirstOrDefault(x =&gt; x.Key == "XML");
		group.Tools.AddTool("ID_RecordUtilitiesImportMultiplePluginsFromXML");
    }
	
	public void UltraToolbarsManager1_ToolClick(object sender, Infragistics.Win.UltraWinToolbars.ToolClickEventArgs e)
	{
		if (e.Tool.Key == "ID_RecordUtilitiesImportMultiplePluginsFromXML")
		{
			System.Windows.Forms.OpenFileDialog dialogOpen = new System.Windows.Forms.OpenFileDialog();
		    dialogOpen.Title = "XML documents";
		    dialogOpen.Filter = "XML Files (*.xml)|*.xml" + "|All Files (*.*)|*.*";
		    dialogOpen.FileName = "";
		    dialogOpen.Multiselect = true;
			
		    if (dialogOpen.ShowDialog() == System.Windows.Forms.DialogResult.OK)
		    {				
				Infragistics.Win.UltraWinToolbars.UltraToolbarsManager toolbarManager = (Infragistics.Win.UltraWinToolbars.UltraToolbarsManager)sender;
				JiwaFinancials.Jiwa.JiwaPluginMaintenanceUI.frmMain pluginForm = (JiwaFinancials.Jiwa.JiwaPluginMaintenanceUI.frmMain)toolbarManager.DockWithinContainer;		
				string xmlString = "";
				
				// Phase 1: Read XML to get the Execution Order of the plugins
				List&lt;PluginFile&gt; pluginFiles = new List&lt;PluginFile&gt;();
				
				JiwaFinancials.Jiwa.JiwaApplication.LongRunningTask pluginImportTask = new JiwaFinancials.Jiwa.JiwaApplication.LongRunningTask(pluginForm.Manager.LongRunningTasks, "Importing Plugins", dialogOpen.FileNames.Length, false);
				pluginImportTask = new JiwaFinancials.Jiwa.JiwaApplication.LongRunningTask(pluginForm.Manager.LongRunningTasks, "Ordering Plugins by Execution Order", dialogOpen.FileNames.Length, false);
				pluginForm.Manager.LongRunningTasks.Add(pluginImportTask);
				
				try
				{
					pluginForm.Manager.CurrentLongRunningTask = pluginImportTask;
					pluginImportTask.Dialog.StartPosition = FormStartPosition.CenterParent;
					pluginImportTask.Dialog.Show();
					
					foreach(string fileName in dialogOpen.FileNames)
					{
						pluginForm.Manager.CurrentLongRunningTask.Progress(System.IO.Path.GetFileName(fileName));
						
						xmlString = System.IO.File.ReadAllText(fileName);	
						
						JiwaFinancials.Jiwa.JiwaApplication.XML.Plugin pluginPOCO = new JiwaFinancials.Jiwa.JiwaApplication.XML.Plugin();
						System.Xml.Serialization.XmlSerializer xmlSerializer = new System.Xml.Serialization.XmlSerializer(typeof(JiwaFinancials.Jiwa.JiwaApplication.XML.Plugin));
						System.IO.StringReader stringReader = new System.IO.StringReader(xmlString);
						pluginPOCO = (JiwaFinancials.Jiwa.JiwaApplication.XML.Plugin)xmlSerializer.Deserialize(stringReader);
						
						pluginFiles.Add( new PluginFile { FileName = fileName, ExecutionOrder = pluginPOCO.ExecutionOrder } );
						
						System.Windows.Forms.Application.DoEvents();
					}
				}
				finally
				{
					pluginForm.Manager.LongRunningTasks.Remove(pluginImportTask);
				}
				
				System.Collections.Generic.List&lt;PluginLogEntry&gt; pluginLog = new System.Collections.Generic.List&lt;PluginLogEntry&gt;();										
				JiwaFinancials.Jiwa.JiwaApplication.Plugin.Plugin plugin = pluginForm.Manager.BusinessLogicFactory.CreateBusinessLogic&lt;JiwaFinancials.Jiwa.JiwaApplication.Plugin.Plugin&gt;(null);
				StringBuilder sqlScriptsStringBuilder = new StringBuilder();
				
				// Phase 2: Import in order
				pluginImportTask = new JiwaFinancials.Jiwa.JiwaApplication.LongRunningTask(pluginForm.Manager.LongRunningTasks, "Importing Plugins", pluginFiles.Count, false);
				pluginImportTask = new JiwaFinancials.Jiwa.JiwaApplication.LongRunningTask(pluginForm.Manager.LongRunningTasks, "Importing Plugins", pluginFiles.Count, false);
				pluginForm.Manager.LongRunningTasks.Add(pluginImportTask);
				
				try
				{
					pluginForm.Manager.CurrentLongRunningTask = pluginImportTask;
					pluginImportTask.Dialog.StartPosition = FormStartPosition.CenterParent;
					pluginImportTask.Dialog.Show();							
					
					foreach(PluginFile pluginFile in pluginFiles.OrderBy(x =&gt; x.ExecutionOrder).ThenBy(x =&gt; x.FileName))
					{
						pluginForm.Manager.CurrentLongRunningTask.Progress(System.IO.Path.GetFileName(pluginFile.FileName));
						
						try
						{							
				            xmlString = System.IO.File.ReadAllText(pluginFile.FileName);							
							PluginLogEntry pluginLogEntry = new PluginLogEntry();							
				            plugin.Deserialise(xmlString);		
							
							pluginLogEntry.FileName = pluginFile.FileName;
							pluginLogEntry.PluginName = plugin.Name;
							pluginLogEntry.InsertFlag = plugin.InsertFlag;
							pluginLogEntry.IsEnabled = plugin.IsEnabled;							
							pluginLogEntry.ExecutionOrder = plugin.ExecutionOrder;
							
							try
							{								
								plugin.Save();
								pluginLogEntry.DidImport = true;								
								pluginLog.Add(pluginLogEntry);
							}
							catch(Exception saveEx)
							{
								// Try saving as disabled.																		
								if (plugin.IsEnabled)
								{
									plugin.IsEnabled = false;
									plugin.Save();
									pluginLogEntry.DidImport = true;
									pluginLogEntry.ForcedDisabled = true;
									pluginLogEntry.Exception = saveEx;
									pluginLogEntry.IsEnabled = plugin.IsEnabled;
									pluginLog.Add(pluginLogEntry);									
								}	
								else
								{
									throw;
								}
							}
							
							foreach(JiwaFinancials.Jiwa.JiwaApplication.Documents.Document attachment in plugin.Documents)
							{
								if (System.IO.Path.GetExtension(attachment.PhysicalFileName) == ".sql")
								{
									sqlScriptsStringBuilder.AppendLine("");
									sqlScriptsStringBuilder.AppendLine(String.Format("/*"));
									sqlScriptsStringBuilder.AppendLine(String.Format("Plugin : {0}", plugin.Name));
									sqlScriptsStringBuilder.AppendLine(String.Format("Plugin Execution Order : {0}", plugin.ExecutionOrder));
									sqlScriptsStringBuilder.AppendLine(String.Format("File Name : {0}", attachment.PhysicalFileName));	
									sqlScriptsStringBuilder.AppendLine(String.Format("Description: {0}", attachment.Description));
									sqlScriptsStringBuilder.AppendLine(String.Format("*/"));
									sqlScriptsStringBuilder.AppendLine("");					
									
									// Because each file might have the BOM of the encoding at the start (and it might not) and they potentially
									// will be different encodings, we convert everything to unicode (UTF-16) and strip out the BOM's
									// Failing to do this and the SQL script will contain funny invisible BOM characters which will cause errors such as :
									// Incorrect syntax near '?'.
									
									sqlScriptsStringBuilder.Append(GetEncodedStringWithoutBOM(attachment.FileBinary, Encoding.Unicode));																	
								}
							}
						}
						catch(Exception ex)
						{									
							pluginLog.Add(new PluginLogEntry() { FileName = pluginFile.FileName, PluginName = plugin.Name, Exception = ex, InsertFlag = plugin.InsertFlag, IsEnabled = plugin.IsEnabled, DidImport = false, ExecutionOrder = plugin.ExecutionOrder });								
						}
						
						System.Windows.Forms.Application.DoEvents();
					}
				}
				finally
				{
					pluginForm.Manager.LongRunningTasks.Remove(pluginImportTask);
				}				
				
				string logFileName =  System.IO.Path.Combine(plugin.Manager.PluginFolder, "Import Multiple Plugins.log");
				if(System.IO.File.Exists(logFileName))
				{
					System.IO.File.Delete(logFileName);
				}
				
				int newCount = pluginLog.Where(x =&gt; x.DidImport &amp;&amp; x.InsertFlag).Count();
				int updateCount = pluginLog.Where(x =&gt; x.DidImport &amp;&amp; !x.InsertFlag).Count();
				int failCount = pluginLog.Where(x =&gt; x.DidImport == false).Count();
				int problemCount = pluginLog.Where(x =&gt; x.DidImport == true &amp;&amp; x.ForcedDisabled).Count();
				
				StringBuilder logStringBuilder = new StringBuilder();
				logStringBuilder.AppendLine("Import Multiple Plugins Log");
				logStringBuilder.AppendLine(String.Format("Import DateTime                             : {0}", DateTime.Now.ToString()));
				logStringBuilder.AppendLine(String.Format("Number of plugins                           : {0}", pluginLog.Count));
				logStringBuilder.AppendLine(String.Format("Number successfully imported                : {0}", newCount + updateCount));			
				logStringBuilder.AppendLine(String.Format("                         New                : {0}", newCount));
				logStringBuilder.AppendLine(String.Format("                     Updated                : {0}", updateCount));
				logStringBuilder.AppendLine(String.Format("Number imported as DISABLED Due to problems : {0}", problemCount));
				logStringBuilder.AppendLine(String.Format("Number FAILED to import                     : {0}", failCount));
				
				foreach(PluginLogEntry logEntry in pluginLog)
				{
					logStringBuilder.AppendLine("=================================================================================================");
					logStringBuilder.AppendLine(String.Format("File Name : {0}", logEntry.FileName));
					logStringBuilder.AppendLine(String.Format("Plugin Name : {0}", logEntry.PluginName));
					
					if (logEntry.DidImport)
					{
						if (logEntry.ForcedDisabled)
						{
							logStringBuilder.AppendLine(String.Format("Status : Imported, but changed to DISABLED due to exception"));
						}
						else
						{
							logStringBuilder.AppendLine(String.Format("Status : Successfully imported"));
						}
						
						if (logEntry.InsertFlag)
						{
							logStringBuilder.AppendLine(String.Format("New/Update : NEW"));
						}
						else
						{
							logStringBuilder.AppendLine(String.Format("New/Update : UPDATE"));
						}
						
						if (! logEntry.IsEnabled)
						{
							logStringBuilder.AppendLine("WARNING: Plugin is NOT Enabled!");
						}
					}
					else
					{
						logStringBuilder.AppendLine(String.Format("Status : FAILED to import"));						
					}
					
					if (logEntry.Exception != null)
					{
						logStringBuilder.AppendLine("");
						logStringBuilder.AppendLine(String.Format("Exception : {0}", logEntry.Exception.ToString()));	
					}
					
					logStringBuilder.AppendLine("");					
				}
				
				System.IO.File.WriteAllText(logFileName, logStringBuilder.ToString(), Encoding.Unicode);
								
				string collatedScriptsFilename = System.IO.Path.Combine(plugin.Manager.PluginFolder, "Import Multiple Plugins.sql");
				if(System.IO.File.Exists(collatedScriptsFilename))
				{
					System.IO.File.Delete(collatedScriptsFilename);
				}
				
				if(sqlScriptsStringBuilder.Length &gt; 0)
				{										
					System.IO.File.WriteAllText(collatedScriptsFilename, sqlScriptsStringBuilder.ToString(), Encoding.Unicode);
				}
				
				string message = string.Format("{0} of {1} plugins successfully imported.{2}", updateCount + newCount, pluginLog.Count, Environment.NewLine);							
				
				if(failCount &gt; 0)
				{
					message += String.Format("{0} plugins failed to import{1}", failCount, Environment.NewLine);
				}
				
				if(problemCount &gt; 0)
				{
					message += String.Format("{0} plugins imported, but had to be disabled due to problems.{1}", problemCount, Environment.NewLine);
				}
				
				if(sqlScriptsStringBuilder.Length &gt; 0)
				{
					message += Environment.NewLine;
					message += String.Format("Collated SQL Scripts were saved to {0}{1}", collatedScriptsFilename, Environment.NewLine);
				}
				
				
				message += Environment.NewLine;
				message += String.Format("Log file saved to {0}{1}", logFileName, Environment.NewLine);
				
				MessageBox.Show(message, "Multiple Plugin Import", MessageBoxButtons.OK,MessageBoxIcon.Information,MessageBoxDefaultButton.Button1);
		    }				
		}
	}
	
	public static string GetEncodedStringWithoutBOM(byte[] text, Encoding desiredEncoding)
	{
		Encoding currentEncoding = null;
		
	    // Analyze the BOM
	    if (text[0] == 0x2b &amp;&amp; text[1] == 0x2f &amp;&amp; text[2] == 0x76) 
			currentEncoding = Encoding.UTF7;			
		else if (text[0] == 0xef &amp;&amp; text[1] == 0xbb &amp;&amp; text[2] == 0xbf) 
			currentEncoding = Encoding.UTF8;
	    else if (text[0] == 0xff &amp;&amp; text[1] == 0xfe &amp;&amp; text[2] == 0 &amp;&amp; text[3] == 0) 
			currentEncoding = Encoding.UTF32; //UTF-32LE
	    else if (text[0] == 0xff &amp;&amp; text[1] == 0xfe) 
			currentEncoding = Encoding.Unicode; //UTF-16LE
	    else if (text[0] == 0xfe &amp;&amp; text[1] == 0xff) 
			currentEncoding = Encoding.BigEndianUnicode; //UTF-16BE
	    else if (text[0] == 0 &amp;&amp; text[1] == 0 &amp;&amp; text[2] == 0xfe &amp;&amp; text[3] == 0xff) 
			currentEncoding = new UTF32Encoding(true, true);  //UTF-32BE
		else
	    	// We actually have no idea what the encoding is if we reach this point, so
	    	// you may wish to do something else instead of defaulting to ASCII
	    	currentEncoding = Encoding.ASCII;
		
		return desiredEncoding.GetString(Encoding.Convert(currentEncoding, desiredEncoding, text)).TrimStart(currentEncoding.GetChars(currentEncoding.GetPreamble()));
	}	
}

public class PluginFile
{
	public string FileName { get; set; }
	public int ExecutionOrder { get; set; }	
}

public class PluginLogEntry
{
	private List&lt;SQLScript&gt; _SQLScripts;
	
	public string FileName { get; set; }
	public string PluginName { get; set; }
	public Exception Exception { get; set; }
	public bool InsertFlag { get; set; }
	public bool IsEnabled { get; set; }	
	public bool DidImport { get; set; }
	public bool ForcedDisabled { get; set; }
	public int ExecutionOrder { get; set; }			
}

public class SQLScript
{
	public string PhysicalFileName { get; set; }
	public string Description { get; set; }
	public string ScriptText { get; set; }
}

#endregion
</Code>
  <ExceptionPolicy>Report</ExceptionPolicy>
  <Language>CSharp</Language>
  <PluginFormCollection>
    <PluginForm>
      <RecID>11395c89-677f-4f25-9aa0-85bd794ef864</RecID>
      <Description>Plugin Maintenance</Description>
      <ClassName>JiwaFinancials.Jiwa.JiwaPluginMaintenanceUI.frmMain</ClassName>
    </PluginForm>
  </PluginFormCollection>
  <ReferenceCollection>
    <Reference>
      <RecID>44799312-c569-461d-834d-5b5096781431</RecID>
      <AssemblyFullName>JiwaApplication, Version=7.2.1.0, Culture=neutral, PublicKeyToken=e30ce81e37f29c8c</AssemblyFullName>
      <AssemblyName>JiwaApplication.dll</AssemblyName>
      <AssemblyLocation>C:\VSTS\Jiwa 7\07.02.00\Built Files\JiwaApplication.dll</AssemblyLocation>
    </Reference>
    <Reference>
      <RecID>ef527d28-e68f-4175-b55a-9b55cca1eaba</RecID>
      <AssemblyFullName>mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</AssemblyFullName>
      <AssemblyName>mscorlib.dll</AssemblyName>
      <AssemblyLocation>C:\Windows\Microsoft.NET\Framework\v4.0.30319\mscorlib.dll</AssemblyLocation>
    </Reference>
    <Reference>
      <RecID>7771bc86-ab97-444f-b769-9d06f7b78197</RecID>
      <AssemblyFullName>System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</AssemblyFullName>
      <AssemblyName>System.dll</AssemblyName>
      <AssemblyLocation>C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System\v4.0_4.0.0.0__b77a5c561934e089\System.dll</AssemblyLocation>
    </Reference>
    <Reference>
      <RecID>8eafe0ea-aaa6-4d28-a905-fd032003a382</RecID>
      <AssemblyFullName>System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</AssemblyFullName>
      <AssemblyName>System.Data.dll</AssemblyName>
      <AssemblyLocation>C:\Windows\Microsoft.Net\assembly\GAC_32\System.Data\v4.0_4.0.0.0__b77a5c561934e089\System.Data.dll</AssemblyLocation>
    </Reference>
    <Reference>
      <RecID>ce7f60ff-4ae2-46ee-84a1-51644e36512f</RecID>
      <AssemblyFullName>System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</AssemblyFullName>
      <AssemblyName>System.Xml.dll</AssemblyName>
      <AssemblyLocation>C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Xml\v4.0_4.0.0.0__b77a5c561934e089\System.Xml.dll</AssemblyLocation>
    </Reference>
    <Reference>
      <RecID>48dbe040-764d-4d22-98bc-6a9ef8baa233</RecID>
      <AssemblyFullName>System.Runtime.Serialization, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</AssemblyFullName>
      <AssemblyName>System.Runtime.Serialization.dll</AssemblyName>
      <AssemblyLocation>C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Runtime.Serialization\v4.0_4.0.0.0__b77a5c561934e089\System.Runtime.Serialization.dll</AssemblyLocation>
    </Reference>
    <Reference>
      <RecID>fea3a5c2-0c66-40af-a066-e2cf59891162</RecID>
      <AssemblyFullName>System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</AssemblyFullName>
      <AssemblyName>System.Windows.Forms.dll</AssemblyName>
      <AssemblyLocation>C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Windows.Forms\v4.0_4.0.0.0__b77a5c561934e089\System.Windows.Forms.dll</AssemblyLocation>
    </Reference>
    <Reference>
      <RecID>07eca4d1-5b98-47e2-9aa5-e6bd1d93c052</RecID>
      <AssemblyFullName>Infragistics4.Win.Misc.v13.1, Version=13.1.20131.2060, Culture=neutral, PublicKeyToken=7dd5c3163f2cd0cb</AssemblyFullName>
      <AssemblyName>Infragistics4.Win.Misc.v13.1.dll</AssemblyName>
      <AssemblyLocation>C:\Windows\Microsoft.Net\assembly\GAC_MSIL\Infragistics4.Win.Misc.v13.1\v4.0_13.1.20131.2060__7dd5c3163f2cd0cb\Infragistics4.Win.Misc.v13.1.dll</AssemblyLocation>
    </Reference>
    <Reference>
      <RecID>9ff9beb0-f11d-447c-bae5-bdda2c385c1e</RecID>
      <AssemblyFullName>Infragistics4.Win.UltraWinEditors.v13.1, Version=13.1.20131.2060, Culture=neutral, PublicKeyToken=7dd5c3163f2cd0cb</AssemblyFullName>
      <AssemblyName>Infragistics4.Win.UltraWinEditors.v13.1.dll</AssemblyName>
      <AssemblyLocation>C:\Windows\Microsoft.Net\assembly\GAC_MSIL\Infragistics4.Win.UltraWinEditors.v13.1\v4.0_13.1.20131.2060__7dd5c3163f2cd0cb\Infragistics4.Win.UltraWinEditors.v13.1.dll</AssemblyLocation>
    </Reference>
    <Reference>
      <RecID>e9249e28-3347-483e-9808-fc05574124b8</RecID>
      <AssemblyFullName>Infragistics4.Win.v13.1, Version=13.1.20131.2060, Culture=neutral, PublicKeyToken=7dd5c3163f2cd0cb</AssemblyFullName>
      <AssemblyName>Infragistics4.Win.v13.1.dll</AssemblyName>
      <AssemblyLocation>C:\Windows\Microsoft.Net\assembly\GAC_MSIL\Infragistics4.Win.v13.1\v4.0_13.1.20131.2060__7dd5c3163f2cd0cb\Infragistics4.Win.v13.1.dll</AssemblyLocation>
    </Reference>
    <Reference>
      <RecID>dc37bf26-50e7-49c7-962b-5beace3a633c</RecID>
      <AssemblyFullName>Infragistics4.Win.UltraWinExplorerBar.v13.1, Version=13.1.20131.2060, Culture=neutral, PublicKeyToken=7dd5c3163f2cd0cb</AssemblyFullName>
      <AssemblyName>Infragistics4.Win.UltraWinExplorerBar.v13.1.dll</AssemblyName>
      <AssemblyLocation>C:\Windows\Microsoft.Net\assembly\GAC_MSIL\Infragistics4.Win.UltraWinExplorerBar.v13.1\v4.0_13.1.20131.2060__7dd5c3163f2cd0cb\Infragistics4.Win.UltraWinExplorerBar.v13.1.dll</AssemblyLocation>
    </Reference>
    <Reference>
      <RecID>551cffdb-05e7-42a0-8522-bdad40483c6c</RecID>
      <AssemblyFullName>Infragistics4.Win.UltraWinTree.v13.1, Version=13.1.20131.2060, Culture=neutral, PublicKeyToken=7dd5c3163f2cd0cb</AssemblyFullName>
      <AssemblyName>Infragistics4.Win.UltraWinTree.v13.1.dll</AssemblyName>
      <AssemblyLocation>C:\Windows\Microsoft.Net\assembly\GAC_MSIL\Infragistics4.Win.UltraWinTree.v13.1\v4.0_13.1.20131.2060__7dd5c3163f2cd0cb\Infragistics4.Win.UltraWinTree.v13.1.dll</AssemblyLocation>
    </Reference>
    <Reference>
      <RecID>de544ee8-c8ad-431c-acde-4e74e0504464</RecID>
      <AssemblyFullName>FarPoint.Win.Spread, Version=8.35.20151.0, Culture=neutral, PublicKeyToken=327c3516b1b18457</AssemblyFullName>
      <AssemblyName>FarPoint.Win.Spread.dll</AssemblyName>
      <AssemblyLocation>C:\Windows\assembly\GAC_MSIL\FarPoint.Win.Spread\8.35.20151.0__327c3516b1b18457\FarPoint.Win.Spread.dll</AssemblyLocation>
    </Reference>
    <Reference>
      <RecID>721316e9-378d-4cba-a2ee-771e3291e722</RecID>
      <AssemblyFullName>Infragistics4.Win.UltraWinTabControl.v13.1, Version=13.1.20131.2060, Culture=neutral, PublicKeyToken=7dd5c3163f2cd0cb</AssemblyFullName>
      <AssemblyName>Infragistics4.Win.UltraWinTabControl.v13.1.dll</AssemblyName>
      <AssemblyLocation>C:\Windows\Microsoft.Net\assembly\GAC_MSIL\Infragistics4.Win.UltraWinTabControl.v13.1\v4.0_13.1.20131.2060__7dd5c3163f2cd0cb\Infragistics4.Win.UltraWinTabControl.v13.1.dll</AssemblyLocation>
    </Reference>
    <Reference>
      <RecID>0b7d0fc9-fa87-4a3a-8d1c-313380dde439</RecID>
      <AssemblyFullName>Infragistics4.Shared.v13.1, Version=13.1.20131.2060, Culture=neutral, PublicKeyToken=7dd5c3163f2cd0cb</AssemblyFullName>
      <AssemblyName>Infragistics4.Shared.v13.1.dll</AssemblyName>
      <AssemblyLocation>C:\Windows\Microsoft.Net\assembly\GAC_MSIL\Infragistics4.Shared.v13.1\v4.0_13.1.20131.2060__7dd5c3163f2cd0cb\Infragistics4.Shared.v13.1.dll</AssemblyLocation>
    </Reference>
    <Reference>
      <RecID>ba16b3a5-6244-47e8-9987-c6e8f3ff3fe1</RecID>
      <AssemblyFullName>Infragistics4.Win.UltraWinToolbars.v13.1, Version=13.1.20131.2060, Culture=neutral, PublicKeyToken=7dd5c3163f2cd0cb</AssemblyFullName>
      <AssemblyName>Infragistics4.Win.UltraWinToolbars.v13.1.dll</AssemblyName>
      <AssemblyLocation>C:\Windows\Microsoft.Net\assembly\GAC_MSIL\Infragistics4.Win.UltraWinToolbars.v13.1\v4.0_13.1.20131.2060__7dd5c3163f2cd0cb\Infragistics4.Win.UltraWinToolbars.v13.1.dll</AssemblyLocation>
    </Reference>
    <Reference>
      <RecID>c1ab44a8-1a43-482c-adc6-da113bfdb779</RecID>
      <AssemblyFullName>Infragistics4.Win.UltraWinStatusBar.v13.1, Version=13.1.20131.2060, Culture=neutral, PublicKeyToken=7dd5c3163f2cd0cb</AssemblyFullName>
      <AssemblyName>Infragistics4.Win.UltraWinStatusBar.v13.1.dll</AssemblyName>
      <AssemblyLocation>C:\Windows\Microsoft.Net\assembly\GAC_MSIL\Infragistics4.Win.UltraWinStatusBar.v13.1\v4.0_13.1.20131.2060__7dd5c3163f2cd0cb\Infragistics4.Win.UltraWinStatusBar.v13.1.dll</AssemblyLocation>
    </Reference>
    <Reference>
      <RecID>c3f3727f-00d3-4be8-a234-adcba6db62d4</RecID>
      <AssemblyFullName>Infragistics4.Win.UltraWinSchedule.v13.1, Version=13.1.20131.2060, Culture=neutral, PublicKeyToken=7dd5c3163f2cd0cb</AssemblyFullName>
      <AssemblyName>Infragistics4.Win.UltraWinSchedule.v13.1.dll</AssemblyName>
      <AssemblyLocation>C:\Windows\Microsoft.Net\assembly\GAC_MSIL\Infragistics4.Win.UltraWinSchedule.v13.1\v4.0_13.1.20131.2060__7dd5c3163f2cd0cb\Infragistics4.Win.UltraWinSchedule.v13.1.dll</AssemblyLocation>
    </Reference>
    <Reference>
      <RecID>04e662c3-1689-429e-ba06-73b3f7d8774a</RecID>
      <AssemblyFullName>Infragistics4.Win.UltraWinListView.v13.1, Version=13.1.20131.2060, Culture=neutral, PublicKeyToken=7dd5c3163f2cd0cb</AssemblyFullName>
      <AssemblyName>Infragistics4.Win.UltraWinListView.v13.1.dll</AssemblyName>
      <AssemblyLocation>C:\Windows\Microsoft.Net\assembly\GAC_MSIL\Infragistics4.Win.UltraWinListView.v13.1\v4.0_13.1.20131.2060__7dd5c3163f2cd0cb\Infragistics4.Win.UltraWinListView.v13.1.dll</AssemblyLocation>
    </Reference>
    <Reference>
      <RecID>a262a7fb-aa08-4ec0-96da-c80582606ace</RecID>
      <AssemblyFullName>System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</AssemblyFullName>
      <AssemblyName>System.Core.dll</AssemblyName>
      <AssemblyLocation>C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Core\v4.0_4.0.0.0__b77a5c561934e089\System.Core.dll</AssemblyLocation>
    </Reference>
    <Reference>
      <RecID>bf69e1d4-4e3d-492d-bb7f-626cd24f3f13</RecID>
      <AssemblyFullName>ActiproSoftware.SyntaxEditor.WinForms, Version=16.1.330.0, Culture=neutral, PublicKeyToken=c27e062d3c1a4763</AssemblyFullName>
      <AssemblyName>ActiproSoftware.SyntaxEditor.WinForms.dll</AssemblyName>
      <AssemblyLocation>C:\Windows\assembly\GAC_MSIL\ActiproSoftware.SyntaxEditor.WinForms\16.1.330.0__c27e062d3c1a4763\ActiproSoftware.SyntaxEditor.WinForms.dll</AssemblyLocation>
    </Reference>
    <Reference>
      <RecID>f8c28b1a-28c7-4e96-86d0-b190a16dcd56</RecID>
      <AssemblyFullName>ActiproSoftware.SyntaxEditor.Addons.DotNet.WinForms, Version=16.1.330.0, Culture=neutral, PublicKeyToken=c27e062d3c1a4763</AssemblyFullName>
      <AssemblyName>ActiproSoftware.SyntaxEditor.Addons.DotNet.WinForms.dll</AssemblyName>
      <AssemblyLocation>C:\Windows\assembly\GAC_MSIL\ActiproSoftware.SyntaxEditor.Addons.DotNet.WinForms\16.1.330.0__c27e062d3c1a4763\ActiproSoftware.SyntaxEditor.Addons.DotNet.WinForms.dll</AssemblyLocation>
    </Reference>
    <Reference>
      <RecID>768e214e-e11e-48eb-987a-163fa03dde75</RecID>
      <AssemblyFullName>Infragistics4.Win.UltraWinGrid.v13.1, Version=13.1.20131.2060, Culture=neutral, PublicKeyToken=7dd5c3163f2cd0cb</AssemblyFullName>
      <AssemblyName>Infragistics4.Win.UltraWinGrid.v13.1.dll</AssemblyName>
      <AssemblyLocation>C:\Windows\Microsoft.Net\assembly\GAC_MSIL\Infragistics4.Win.UltraWinGrid.v13.1\v4.0_13.1.20131.2060__7dd5c3163f2cd0cb\Infragistics4.Win.UltraWinGrid.v13.1.dll</AssemblyLocation>
    </Reference>
    <Reference>
      <RecID>891a07c9-7485-40ba-bd5f-886c37848341</RecID>
      <AssemblyFullName>CrystalDecisions.CrystalReports.Engine, Version=13.0.3500.0, Culture=neutral, PublicKeyToken=692fbea5521e1304</AssemblyFullName>
      <AssemblyName>CrystalDecisions.CrystalReports.Engine.dll</AssemblyName>
      <AssemblyLocation>C:\Windows\assembly\GAC_MSIL\CrystalDecisions.CrystalReports.Engine\13.0.3500.0__692fbea5521e1304\CrystalDecisions.CrystalReports.Engine.dll</AssemblyLocation>
    </Reference>
    <Reference>
      <RecID>2326e2d6-2cd1-4c90-8124-4ee85adb9979</RecID>
      <AssemblyFullName>CrystalDecisions.Shared, Version=13.0.3500.0, Culture=neutral, PublicKeyToken=692fbea5521e1304</AssemblyFullName>
      <AssemblyName>CrystalDecisions.Shared.dll</AssemblyName>
      <AssemblyLocation>C:\Windows\assembly\GAC_MSIL\CrystalDecisions.Shared\13.0.3500.0__692fbea5521e1304\CrystalDecisions.Shared.dll</AssemblyLocation>
    </Reference>
    <Reference>
      <RecID>f543ba54-2600-48fc-a0b5-f4d45e336e69</RecID>
      <AssemblyFullName>CrystalDecisions.ReportAppServer.ClientDoc, Version=13.0.3500.0, Culture=neutral, PublicKeyToken=692fbea5521e1304</AssemblyFullName>
      <AssemblyName>CrystalDecisions.ReportAppServer.ClientDoc.dll</AssemblyName>
      <AssemblyLocation>C:\Windows\assembly\GAC_MSIL\CrystalDecisions.ReportAppServer.ClientDoc\13.0.3500.0__692fbea5521e1304\CrystalDecisions.ReportAppServer.ClientDoc.dll</AssemblyLocation>
    </Reference>
    <Reference>
      <RecID>3c1c43f5-6c15-478b-a408-be3fa9eb2c1f</RecID>
      <AssemblyFullName>CrystalDecisions.ReportAppServer.Controllers, Version=13.0.3500.0, Culture=neutral, PublicKeyToken=692fbea5521e1304</AssemblyFullName>
      <AssemblyName>CrystalDecisions.ReportAppServer.Controllers.dll</AssemblyName>
      <AssemblyLocation>C:\Windows\assembly\GAC_MSIL\CrystalDecisions.ReportAppServer.Controllers\13.0.3500.0__692fbea5521e1304\CrystalDecisions.ReportAppServer.Controllers.dll</AssemblyLocation>
    </Reference>
    <Reference>
      <RecID>4b61c981-1bac-4b8a-b719-cec579cec2c9</RecID>
      <AssemblyFullName>Infragistics4.Win.AppStylistSupport.v13.1, Version=13.1.20131.2060, Culture=neutral, PublicKeyToken=7dd5c3163f2cd0cb</AssemblyFullName>
      <AssemblyName>Infragistics4.Win.AppStylistSupport.v13.1.dll</AssemblyName>
      <AssemblyLocation>C:\Windows\Microsoft.Net\assembly\GAC_MSIL\Infragistics4.Win.AppStylistSupport.v13.1\v4.0_13.1.20131.2060__7dd5c3163f2cd0cb\Infragistics4.Win.AppStylistSupport.v13.1.dll</AssemblyLocation>
    </Reference>
    <Reference>
      <RecID>b1b9c52e-58b0-448c-aa14-c30b4ad5c582</RecID>
      <AssemblyFullName>JiwaLib, Version=7.2.1.0, Culture=neutral, PublicKeyToken=e30ce81e37f29c8c</AssemblyFullName>
      <AssemblyName>JiwaLib.dll</AssemblyName>
      <AssemblyLocation>C:\VSTS\Jiwa 7\07.02.00\Built Files\JiwaLib.dll</AssemblyLocation>
    </Reference>
    <Reference>
      <RecID>f9bcaee5-2935-4e8b-851f-98cc228413a6</RecID>
      <AssemblyFullName>Microsoft.ApplicationInsights, Version=2.4.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35</AssemblyFullName>
      <AssemblyName>Microsoft.ApplicationInsights.dll</AssemblyName>
      <AssemblyLocation>C:\VSTS\Jiwa 7\07.02.00\Built Files\Microsoft.ApplicationInsights.dll</AssemblyLocation>
    </Reference>
    <Reference>
      <RecID>466f934b-1567-4267-8e20-24f741b88f6b</RecID>
      <AssemblyFullName>CrystalDecisions.Windows.Forms, Version=13.0.3500.0, Culture=neutral, PublicKeyToken=692fbea5521e1304</AssemblyFullName>
      <AssemblyName>CrystalDecisions.Windows.Forms.dll</AssemblyName>
      <AssemblyLocation>C:\Windows\assembly\GAC_MSIL\CrystalDecisions.Windows.Forms\13.0.3500.0__692fbea5521e1304\CrystalDecisions.Windows.Forms.dll</AssemblyLocation>
    </Reference>
    <Reference>
      <RecID>f0bfd156-2dc6-4d01-8cde-f3c95800e912</RecID>
      <AssemblyFullName>ActiproSoftware.Shared.WinForms, Version=16.1.330.0, Culture=neutral, PublicKeyToken=c27e062d3c1a4763</AssemblyFullName>
      <AssemblyName>ActiproSoftware.Shared.WinForms.dll</AssemblyName>
      <AssemblyLocation>C:\Windows\assembly\GAC_MSIL\ActiproSoftware.Shared.WinForms\16.1.330.0__c27e062d3c1a4763\ActiproSoftware.Shared.WinForms.dll</AssemblyLocation>
    </Reference>
    <Reference>
      <RecID>8f09cc2b-fdf4-4a98-ac47-f6707f91e49a</RecID>
      <AssemblyFullName>FarPoint.Win, Version=8.35.20151.0, Culture=neutral, PublicKeyToken=327c3516b1b18457</AssemblyFullName>
      <AssemblyName>FarPoint.Win.dll</AssemblyName>
      <AssemblyLocation>C:\Windows\assembly\GAC_MSIL\FarPoint.Win\8.35.20151.0__327c3516b1b18457\FarPoint.Win.dll</AssemblyLocation>
    </Reference>
    <Reference>
      <RecID>95efd602-dc93-4256-8609-d670424c0b7a</RecID>
      <AssemblyFullName>JiwaPluginMaintenanceUI, Version=7.2.1.0, Culture=neutral, PublicKeyToken=e30ce81e37f29c8c</AssemblyFullName>
      <AssemblyName>JiwaPluginMaintenanceUI.dll</AssemblyName>
      <AssemblyLocation>C:\VSTS\Jiwa 7\07.02.00\Built Files\JiwaPluginMaintenanceUI.dll</AssemblyLocation>
    </Reference>
  </ReferenceCollection>
</JiwaDocument>