<component id="43" name="Dynamics CRM Route" componentClassID="{2E42D45B-F83C-400F-8D77-61DDE6A7DF29}" description="Executes a custom script." localeId="1033" usesDispositions="false" validateExternalMetadata="True" version="4" pipelineVersion="0" contactInfo="Executes a custom script.;Microsoft Corporation;Microsoft SqlServer v9; © 2004 Microsoft Corporation; All Rights Reserved; http://www.microsoft.com/sql/support;0">
<properties>
<property id="47" name="SourceCode" dataType="System.String" state="cdata" isArray="true" description="Stores the source code of the component" typeConverter="NOTBROWSABLE" UITypeEditor="" containsID="false" expressionType="None"><arrayElements arrayElementCount="18"><arrayElement dataType="System.String"><![CDATA[\my project\settings.designer.vb]]></arrayElement><arrayElement dataType="System.String"><![CDATA['------------------------------------------------------------------------------
' <autogenerated>
'     This code was generated by a tool.
'
'     Changes to this file may cause incorrect behavior and will be lost if
'     the code is regenerated.
' </autogenerated>
'------------------------------------------------------------------------------

Option Strict Off
Option Explicit On



Partial Friend NotInheritable Class MySettings
    Inherits System.Configuration.ApplicationSettingsBase

    Private Shared m_Value As MySettings

    Private Shared m_SyncObject As Object = New Object

    <System.Diagnostics.DebuggerNonUserCode()> _
    Public Shared ReadOnly Property Value() As MySettings
        Get
            If (MySettings.m_Value Is Nothing) Then
                System.Threading.Monitor.Enter(MySettings.m_SyncObject)
                If (MySettings.m_Value Is Nothing) Then
                    Try
                        MySettings.m_Value = New MySettings
                    Finally
                        System.Threading.Monitor.Exit(MySettings.m_SyncObject)
                    End Try
                End If
            End If
            Return MySettings.m_Value
        End Get
    End Property
End Class
]]></arrayElement><arrayElement dataType="System.String"><![CDATA[\my project\assemblyinfo.vb]]></arrayElement><arrayElement dataType="System.String"><![CDATA[Imports System
Imports System.Reflection
Imports System.Runtime.InteropServices

' General Information about an assembly is controlled through the following 
' set of attributes. Change these attribute values to modify the information
' associated with an assembly.

' Review the values of the assembly attributes

<Assembly: AssemblyTitle("ScriptComponent_f848e9d47e064155a3b4a152096b0823.vbproj")> 
<Assembly: AssemblyDescription("")> 
<Assembly: AssemblyCompany("Microsoft")> 
<Assembly: AssemblyProduct("ScriptComponent_f848e9d47e064155a3b4a152096b0823.vbproj")> 
<Assembly: AssemblyCopyright("Copyright @ Microsoft 2012")> 
<Assembly: AssemblyTrademark("")> 
<Assembly: CLSCompliant(True)> 

<Assembly: ComVisible(False)> 

'The following GUID is for the ID of the typelib if this project is exposed to COM
<Assembly: Guid("b4c9e5ee-15a9-4b15-9510-89ab8889ef56")> 

' Version information for an assembly consists of the following four values:
'
'      Major Version
'      Minor Version 
'      Build Number
'      Revision
'
' You can specify all the values or you can default the Build and Revision Numbers 
' by using the '*' as shown below:
' <Assembly: AssemblyVersion("1.0.*")>

<Assembly: AssemblyVersion("1.0.0.0")> 
<Assembly: AssemblyFileVersion("1.0.0.0")> 
]]></arrayElement><arrayElement dataType="System.String"><![CDATA[\my project\settings.settings]]></arrayElement><arrayElement dataType="System.String"><![CDATA[<?xml version='1.0' encoding='iso-8859-1'?>
<SettingsFile xmlns="uri:settings" CurrentProfile="(Default)" GeneratedClassNamespace="" GeneratedClassName="MySettings">
  <Profiles>
    <Profile Name="(Default)" />
  </Profiles>
  <Settings />
</SettingsFile>]]></arrayElement><arrayElement dataType="System.String"><![CDATA[\bufferwrapper.vb]]></arrayElement><arrayElement dataType="System.String"><![CDATA[' THIS IS AUTO-GENERATED CODE THAT WILL BE OVERWRITTEN! DO NOT EDIT!
' This is CozyRoc Script Component Plus Extended Script
' Microsoft SQL Server Integration Services buffer wrappers
' This module defines classes for accessing data flow buffers
' THIS IS AUTO-GENERATED CODE THAT WILL BE OVERWRITTEN! DO NOT EDIT!


Option Strict Off   ' This allows usage of PipelineBuffer typed accessors.

Imports System
Imports System.Data
Imports Microsoft.SqlServer.Dts.Pipeline
Imports Microsoft.SqlServer.Dts.Pipeline.Wrapper
Imports CozyRoc.SqlServer.SSIS

<CLSCompliant(False)> _
Public Class InputBuffer
    Inherits ScriptBufferPlus

    Public Sub New(ByVal Component As ScriptComponent, ByVal ObjectID As Integer, ByVal IsInput As Boolean, ByVal Buffer As PipelineBuffer)
        MyBase.New(Component, ObjectID, IsInput, Buffer)
    End Sub

    Public Overrides ReadOnly Property StaticInputColumns() As String()
        Get
            Return New String() {}
        End Get
    End Property

    Public Overrides ReadOnly Property StaticOutputColumns() As String()
        Get
            Return New String() {}
        End Get
    End Property

    Public Overloads Function NextRow() As Boolean
        NextRow = MyBase.NextRow()
    End Function

    Public Overloads Function EndOfRowset() As Boolean
        EndOfRowset = MyBase.EndOfRowset
    End Function

End Class
]]></arrayElement><arrayElement dataType="System.String"><![CDATA[\scriptcomponent_f848e9d47e064155a3b4a152096b0823.vbproj]]></arrayElement><arrayElement dataType="System.String"><![CDATA[<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <!-- This section defines project-level properties.

       Configuration - Specifies whether the default configuration is Release or Debug.
       Platform - Specifies what CPU the output of this project can run on.
       OutputType - Must be "Library" for VSTA.
       NoStandardLibraries - Set to "false" for VSTA.
       RootNamespace - In C#, this specifies the namespace given to new files.
                       In Visual Basic, all objects are wrapped in this namespace at runtime.
       AssemblyName - Name of the output assembly.
  -->
  <PropertyGroup>
    <ProjectTypeGuids>{A860303F-1F3F-4691-B57E-529FC101A107};{F184B08F-C81C-45F6-A57F-5ABD9991F28F}</ProjectTypeGuids>
    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
    <OutputType>Library</OutputType>
    <RootNamespace>ScriptComponent_f848e9d47e064155a3b4a152096b0823.vbproj</RootNamespace>
    <AssemblyName>ScriptComponent_f848e9d47e064155a3b4a152096b0823.vbproj</AssemblyName>
    <StartupObject>
    </StartupObject>
    <OptionExplicit>On</OptionExplicit>
    <OptionCompare>Binary</OptionCompare>
    <OptionStrict>Off</OptionStrict>
    <OptionInfer>On</OptionInfer>
    <ProjectGuid>{9717137C-BBF2-4637-B948-5142182D7D9F}</ProjectGuid>
  </PropertyGroup>
  <!-- This section defines properties that are set when the "Debug" configuration is
       selected.

       DebugSymbols - If true, create symbols (.pdb). If false, do not create symbols.
       Optimize - If true, optimize the build output. If false, do not optimize.
       OutputPath - Output path of the project relative to the project file.
       EnableUnmanagedDebugging - If true, starting the debugger will attach both managed and unmanaged debuggers.
       DefineConstants - Constants defined for the preprocessor.
       Warning Level - Warning level for the compiler.
  -->
  <PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
    <DefineConstants>
    </DefineConstants>
    <DefineDebug>true</DefineDebug>
    <DefineTrace>true</DefineTrace>
    <DebugSymbols>true</DebugSymbols>
    <Optimize>false</Optimize>
    <OutputPath>bin\</OutputPath>
    <RegisterForComInterop>false</RegisterForComInterop>
    <RemoveIntegerChecks>false</RemoveIntegerChecks>
    <NoWarn>42016,42017,42018,42019,42032</NoWarn>
  </PropertyGroup>
  <!-- This section defines properties that are set when the "Release" configuration is
       selected.

       DebugSymbols - If true, create symbols (.pdb). If false, do not create symbols.
       Optimize - If true, optimize the build output. If false, do not optimize.
       OutputPath - Output path of the project relative to the project file.
       EnableUnmanagedDebugging - If true, starting the debugger will attach both managed and unmanaged debuggers.
       DefineConstants - Constants defined for the preprocessor.
       Warning Level - Warning level for the compiler.
  -->
  <PropertyGroup Condition=" '$(Configuration)' == 'Release' ">
    <DefineConstants>
    </DefineConstants>
    <DefineDebug>false</DefineDebug>
    <DefineTrace>true</DefineTrace>
    <DebugSymbols>false</DebugSymbols>
    <Optimize>true</Optimize>
    <OutputPath>bin\</OutputPath>
    <RegisterForComInterop>false</RegisterForComInterop>
    <RemoveIntegerChecks>false</RemoveIntegerChecks>
    <NoWarn>42016,42017,42018,42019,42032</NoWarn>
  </PropertyGroup>
  <!-- This section enables pre- and post-build steps. However,
       it is recommended that MSBuild tasks be used instead of these properties.
  -->
  <PropertyGroup>
    <PreBuildEvent>
    </PreBuildEvent>
    <PostBuildEvent>
    </PostBuildEvent>
  </PropertyGroup>
  <!-- This sections specifies references for the project. -->
  <ItemGroup>
    <Reference Include="CozyRoc.Dynamics, Version=1.0.0.0, Culture=neutral, PublicKeyToken=16cf490bb80c34ea, processorArchitecture=MSIL" />
    <Reference Include="CozyRoc.SSISPlus.2008, Version=1.0.0.0, Culture=neutral, PublicKeyToken=16cf490bb80c34ea, processorArchitecture=MSIL" />
    <Reference Include="Microsoft.SqlServer.ManagedDTS, Version=10.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91, processorArchitecture=MSIL" />
    <Reference Include="System" />
    <Reference Include="System.Data" />
    <Reference Include="System.Web.Services" />
    <Reference Include="System.Windows.Forms" />
    <Reference Include="System.Xml" />
    <Reference Include="Microsoft.SqlServer.TxScript, Version=10.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" />
    <Reference Include="Microsoft.SqlServer.DTSRuntimeWrap, Version=10.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" />
    <Reference Include="Microsoft.SqlServer.DTSPipelineWrap, Version=10.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" />
    <Reference Include="Microsoft.SqlServer.PipelineHost, Version=10.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" />
  </ItemGroup>
  <!-- Visual Basic supports Importing namespaces (equivalent to using statements in C#).-->
  <ItemGroup>
    <Import Include="Microsoft.VisualBasic" />
    <Import Include="System" />
    <Import Include="System.Collections" />
    <Import Include="System.Data" />
    <Import Include="System.Diagnostics" />
    <Import Include="System.Windows.Forms" />
  </ItemGroup>
  <!-- This section defines the user source files that are part of the
       project.

       Compile - Specifies a source file to compile.
       EmbeddedResource - Specifies a .resx file for embedded resources.
       None - Specifies a file that is not to be passed to the compiler (for instance,
              a text file or XML file).
       AppDesigner - Specifies the directory where the application properties files can
                     be found.
  -->
  <ItemGroup>
    <AppDesigner Include="My Project\" />
    <Compile Include="BufferWrapper.vb" />
    <Compile Include="ComponentWrapper.vb" />
    <Compile Include="main.vb" />
    <Compile Include="My Project\AssemblyInfo.vb">
      <SubType>Code</SubType>
    </Compile>
    <EmbeddedResource Include="My Project\Resources.resx">
      <Generator>VbMyResourcesResXFileCodeGenerator</Generator>
      <LastGenOutput>Resources.Designer.vb</LastGenOutput>
      <CustomToolNamespace>My.Resources</CustomToolNamespace>
    </EmbeddedResource>
    <Compile Include="My Project\Resources.Designer.vb">
      <AutoGen>True</AutoGen>
      <DesignTime>True</DesignTime>
      <DependentUpon>Resources.resx</DependentUpon>
      <SubType>Code</SubType>
    </Compile>
    <None Include="My Project\Settings.settings">
      <Generator>SettingsSingleFileGenerator</Generator>
      <LastGenOutput>Settings.Designer.vb</LastGenOutput>
    </None>
    <Compile Include="My Project\Settings.Designer.vb">
      <AutoGen>True</AutoGen>
      <DependentUpon>Settings.settings</DependentUpon>
      <SubType>Code</SubType>
    </Compile>
    <!-- Include the default configuration information and metadata files for the add-in.
         These files are copied to the build output directory when the project is
         built, and the path to the configuration file is passed to add-in on the command
         line when debugging.
    -->
  </ItemGroup>
  <!-- Include the build rules for a VB project.-->
  <Import Project="$(MSBuildBinPath)\Microsoft.VisualBasic.targets" />
  <!-- This section defines VSTA properties that describe the host-changable project properties. -->
  <ProjectExtensions>
    <VisualStudio>
      <FlavorProperties GUID="{A860303F-1F3F-4691-B57E-529FC101A107}">
        <ProjectProperties HostName="VSTAHostName" HostPackage="{C1B21C64-9E6F-4923-A89D-9F958503C1CE}" ApplicationType="usd" Language="vb" TemplatesPath="" />
        <Host Name="SSIS_ScriptComponent" />
        <ProjectClient>
          <HostIdentifier>SSIS_ScriptComponent</HostIdentifier>
        </ProjectClient>
      </FlavorProperties>
    </VisualStudio>
  </ProjectExtensions>
</Project>]]></arrayElement><arrayElement dataType="System.String"><![CDATA[\my project\resources.designer.vb]]></arrayElement><arrayElement dataType="System.String"><![CDATA['------------------------------------------------------------------------------
' <autogenerated>
'     This code was generated by a tool.
'
'     Changes to this file may cause incorrect behavior and will be lost if
'     the code is regenerated.
' </autogenerated>
'------------------------------------------------------------------------------

Option Strict Off
Option Explicit On


Namespace My.Resources
    
    '''<summary>
    '''   A strongly-typed resource class, for looking up localized strings, etc.
    '''</summary>
    'This class was auto-generated by the Strongly Typed Resource Builder
    'class via a tool like ResGen or Visual Studio.NET.
    'To add or remove a member, edit your .ResX file then rerun ResGen
    'with the /str option, or rebuild your VS project.
    Class MyResources
        
        Private Shared _resMgr As System.Resources.ResourceManager
        
        Private Shared _resCulture As System.Globalization.CultureInfo
        
        Friend Sub New()
            MyBase.New
        End Sub
        
        '''<summary>
        '''   Returns the cached ResourceManager instance used by this class.
        '''</summary>
        <System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)>  _
        Public Shared ReadOnly Property ResourceManager() As System.Resources.ResourceManager
            Get
                If (_resMgr Is Nothing) Then
                    Dim temp As System.Resources.ResourceManager = New System.Resources.ResourceManager("My.Resources.MyResources", GetType(MyResources).Assembly)
                    _resMgr = temp
                End If
                Return _resMgr
            End Get
        End Property
        
        '''<summary>
        '''   Overrides the current thread's CurrentUICulture property for all
        '''   resource lookups using this strongly typed resource class.
        '''</summary>
        <System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)>  _
        Public Shared Property Culture() As System.Globalization.CultureInfo
            Get
                Return _resCulture
            End Get
            Set
                _resCulture = value
            End Set
        End Property
    End Class
End Namespace
]]></arrayElement><arrayElement dataType="System.String"><![CDATA[\componentwrapper.vb]]></arrayElement><arrayElement dataType="System.String"><![CDATA[' THIS IS AUTO-GENERATED CODE THAT WILL BE OVERWRITTEN! DO NOT EDIT!
' This is CozyRoc Script Component Plus Extended Script
' Microsoft SQL Server Integration Services component wrapper
' This module defines the base class for your component
' THIS IS AUTO-GENERATED CODE THAT WILL BE OVERWRITTEN! DO NOT EDIT!

Imports System
Imports System.Data
Imports Microsoft.SqlServer.Dts.Pipeline
Imports Microsoft.SqlServer.Dts.Pipeline.Wrapper
Imports Microsoft.SqlServer.Dts.Runtime.Wrapper
Imports CozyRoc.SqlServer.SSIS

<CLSCompliant(False)> _
Public Class UserComponent
    Inherits ScriptComponentPlus

    Public Connections As New Connections(Me)
    Public Variables As New Variables(Me)

    Public Overrides Sub ProcessInput(ByVal InputID As Integer, ByVal Buffer As PipelineBuffer)

        If InputID = MyBase.ComponentMetaData.InputCollection("Input").ID Then
            Input_ProcessInput(New InputBuffer(Me, InputID, True, Buffer))
        End If

    End Sub

    Public Overridable Sub Input_ProcessInput(ByVal Buffer As InputBuffer)

        While Buffer.NextRow()
            Input_ProcessInputRow(Buffer)
        End While

    End Sub

    Public Overridable Sub Input_ProcessInputRow(ByVal Row As InputBuffer)

    End Sub

End Class

Public Class Connections

    Dim ParentComponent As ScriptComponent

    <CLSCompliant(False)> _
    Public Sub New(ByVal Component As ScriptComponent)
        ParentComponent = Component
    End Sub

    Public ReadOnly Property CrmConnection() As IDTSConnectionManager100
        Get
            Return ParentComponent.ComponentMetaData.RuntimeConnectionCollection("CrmConnection").ConnectionManager
        End Get
    End Property

End Class

Public Class Variables

    Dim ParentComponent As ScriptComponent

    <CLSCompliant(False)> _
    Public Sub New(ByVal Component As ScriptComponent)
        ParentComponent = Component
    End Sub

End Class
]]></arrayElement><arrayElement dataType="System.String"><![CDATA[\my project\resources.resx]]></arrayElement><arrayElement dataType="System.String"><![CDATA[<?xml version="1.0" encoding="utf-8"?>
<root>
  <!-- 
    Microsoft ResX Schema 
    
    Version 2.0
    
    The primary goals of this format is to allow a simple XML format 
    that is mostly human readable. The generation and parsing of the 
    various data types are done through the TypeConverter classes 
    associated with the data types.
    
    Example:
    
    ... ado.net/XML headers & schema ...
    <resheader name="resmimetype">text/microsoft-resx</resheader>
    <resheader name="version">2.0</resheader>
    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
        <value>[base64 mime encoded serialized .NET Framework object]</value>
    </data>
    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
        <comment>This is a comment</comment>
    </data>
                
    There are any number of "resheader" rows that contain simple 
    name/value pairs.
    
    Each data row contains a name, and value. The row also contains a 
    type or mimetype. Type corresponds to a .NET class that support 
    text/value conversion through the TypeConverter architecture. 
    Classes that don't support this are serialized and stored with the 
    mimetype set.
    
    The mimetype is used for serialized objects, and tells the 
    ResXResourceReader how to depersist the object. This is currently not 
    extensible. For a given mimetype the value must be set accordingly:
    
    Note - application/x-microsoft.net.object.binary.base64 is the format 
    that the ResXResourceWriter will generate, however the reader can 
    read any of the formats listed below.
    
    mimetype: application/x-microsoft.net.object.binary.base64
    value   : The object must be serialized with 
            : System.Serialization.Formatters.Binary.BinaryFormatter
            : and then encoded with base64 encoding.
    
    mimetype: application/x-microsoft.net.object.soap.base64
    value   : The object must be serialized with 
            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
            : and then encoded with base64 encoding.

    mimetype: application/x-microsoft.net.object.bytearray.base64
    value   : The object must be serialized into a byte array 
            : using a System.ComponentModel.TypeConverter
            : and then encoded with base64 encoding.
    -->
  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
    <xsd:element name="root" msdata:IsDataSet="true">
      <xsd:complexType>
        <xsd:choice maxOccurs="unbounded">
          <xsd:element name="metadata">
            <xsd:complexType>
              <xsd:sequence>
                <xsd:element name="value" type="xsd:string" minOccurs="0" />
              </xsd:sequence>
              <xsd:attribute name="name" type="xsd:string" />
              <xsd:attribute name="type" type="xsd:string" />
              <xsd:attribute name="mimetype" type="xsd:string" />
            </xsd:complexType>
          </xsd:element>
          <xsd:element name="assembly">
            <xsd:complexType>
              <xsd:attribute name="alias" type="xsd:string" />
              <xsd:attribute name="name" type="xsd:string" />
            </xsd:complexType>
          </xsd:element>
          <xsd:element name="data">
            <xsd:complexType>
              <xsd:sequence>
                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
              </xsd:sequence>
              <xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" />
              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
            </xsd:complexType>
          </xsd:element>
          <xsd:element name="resheader">
            <xsd:complexType>
              <xsd:sequence>
                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
              </xsd:sequence>
              <xsd:attribute name="name" type="xsd:string" use="required" />
            </xsd:complexType>
          </xsd:element>
        </xsd:choice>
      </xsd:complexType>
    </xsd:element>
  </xsd:schema>
  <resheader name="resmimetype">
    <value>text/microsoft-resx</value>
  </resheader>
  <resheader name="version">
    <value>2.0</value>
  </resheader>
  <resheader name="reader">
    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
  </resheader>
  <resheader name="writer">
    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
  </resheader>
</root>]]></arrayElement><arrayElement dataType="System.String"><![CDATA[\main.vb]]></arrayElement><arrayElement dataType="System.String"><![CDATA[' CozyRoc SQL Server Integration Services user script component
'
' Copyright (c) 2006-2012 COZYROC LLC
' 
' Permission is hereby granted, free of charge, to any person
' obtaining a copy of this software and associated documentation
' files (the "Software"), to deal in the Software without
' restriction, including without limitation the rights to use,
' copy, modify, merge, publish, distribute, sublicense, and/or sell
' copies of the Software, and to permit persons to whom the
' Software is furnished to do so, subject to the following
' conditions:
' 
' The above copyright notice and this permission notice shall be
' included in all copies or substantial portions of the Software.
' 
' THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
' EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
' OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
' NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
' HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
' WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
' FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
' OTHER DEALINGS IN THE SOFTWARE.

Imports System
Imports System.ComponentModel
Imports System.Web.Services.Protocols
Imports System.Collections
Imports System.Reflection

Imports Microsoft.SqlServer.Dts.Pipeline.Wrapper
Imports Microsoft.SqlServer.Dts.Runtime.Wrapper
Imports CozyRoc.SqlServer.SSIS
Imports CozyRoc.SqlServer.SSIS.Attributes
Imports CRM2011 = CozyRoc.Dynamics.Crm2011.OrganizationService
Imports CRM4 = CozyRoc.Dynamics.Crm.Service


'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
<ValidateProperties("Validate")> _
<FilterProperties("GetProperties")> _
<SortProperties(New String() { _
    "CrmConnection", "EntityNameColumn", "EntityIdColumn", _
    "SourceQueueId", "RouteType", "EndPointId"})> _
<Microsoft.SqlServer.Dts.Pipeline.SSISScriptComponentEntryPointAttribute> _
<CLSCompliant(False)> _
Public Class ScriptMain
    Inherits UserComponent


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Public Overrides Sub Input_ProcessInputRow(ByVal Row As InputBuffer)
        Try
            If Not m_service2011 Is Nothing Then
                ' CRM 2011
                ' RouteType parameter not used.
                Dim req As New CRM2011.OrganizationRequest
                req.RequestName = "AddToQueue"
                req("SourceQueueId") = New Guid(Me.SourceQueueId)
                req("DestinationQueueId") = New Guid(Me.EndPointId)

                ' Setup Target.
                Dim target As New CRM2011.EntityReference
                target.LogicalName = Row.Buffer(m_enIndex).ToString().ToLower()
                target.Id = New Guid(Row.Buffer(m_eiIndex).ToString())
                req("Target") = target

                Call m_service2011.Execute(req)
            Else
                ' CRM 4.0

                ' Setup route request.
                Dim routeReq As New CRM4.RouteRequest

                routeReq.Target = GetTarget4_(Row)
                routeReq.SourceQueueId = New Guid(Me.SourceQueueId)
                routeReq.RouteType = Me.RouteType
                If routeReq.RouteType <> CRM4.RouteType.Auto Then
                    routeReq.EndpointId = New Guid(Me.EndPointId)
                End If

                Call m_service4.Execute(routeReq)
            End If
        Catch ex As SoapException
            Call FireError_(ex.Detail.InnerXml)
        Catch ex As Exception
            Call FireError_(ex.Message)
        End Try
    End Sub ' Input_ProcessInputRow


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Public Overrides Sub PreExecute()
        Call MyBase.PreExecute()

        ' Setup CRM service.
        m_connection = CType( _
            Me.Connections.CrmConnection.AcquireConnection(Nothing), _
            ICrmConnection)
        Call m_connection.Connect()

        Dim service As Object = m_connection.GetService(0)   ' 0 - CRM Service
        m_service2011 = TryCast(service, CRM2011.OrganizationServiceClient)
        If m_service2011 Is Nothing Then
            m_service4 = TryCast(service, CRM4.CrmService)
            If m_service4 Is Nothing Then
                Throw New Exception("Unhandled service object.")
            End If
        End If

        Dim input As IDTSInput100 = MyBase.ComponentMetaData.InputCollection(0)

        ' Find entity name column index.
        m_enIndex = Me.HostComponent.BufferManager.FindColumnByLineageID( _
            Input.Buffer, _
            Input.InputColumnCollection(Me.EntityNameColumn).LineageID)

        ' Find entity id column index.
        m_eiIndex = Me.HostComponent.BufferManager.FindColumnByLineageID( _
            Input.Buffer, _
            Input.InputColumnCollection(Me.EntityIdColumn).LineageID)
    End Sub ' PreExecute


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Public Overrides Sub PostExecute()
        Call MyBase.PostExecute()

        Call m_connection.Close()
        m_enIndex = -1
        m_eiIndex = -1
    End Sub ' PostExecute


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Public Function Validate(ByRef errMessage As String) As Boolean
        Dim result As Boolean

        Try
            If String.IsNullOrEmpty(Me.CrmConnection) Then
                Throw New Exception("Select Dynamics CRM Connection.")
            End If

            If String.IsNullOrEmpty(Me.EntityNameColumn) Then
                Throw New Exception("Select entity name column.")
            End If

            If String.IsNullOrEmpty(Me.EntityIdColumn) Then
                Throw New Exception("Select entity id column.")
            End If

            If String.IsNullOrEmpty(Me.SourceQueueId) Then
                Throw New Exception("Specify source queue id.")
            End If

            If Me.RouteType <> CRM4.RouteType.Auto AndAlso _
                String.IsNullOrEmpty(Me.EndPointId) Then

                Throw New Exception("Specify end point id.")
            End If

            Dim managedComponent As CManagedComponentWrapper = Me.ComponentMetaData.Instantiate()
            Dim input As IDTSInput100 = Me.ComponentMetaData.InputCollection(0)
            Dim virtInput As IDTSVirtualInput100 = input.GetVirtualInput()

            Call input.InputColumnCollection.RemoveAll()

            ' Setup selected entity name column.
            Dim enColumn As IDTSInputColumn100 = managedComponent.SetUsageType( _
                input.ID, _
                virtInput, _
                virtInput.VirtualInputColumnCollection(Me.EntityNameColumn).LineageID, _
                DTSUsageType.UT_READONLY)

            ' Setup selected entity id column.
            Dim eiColumn As IDTSInputColumn100 = managedComponent.SetUsageType( _
                input.ID, _
                virtInput, _
                virtInput.VirtualInputColumnCollection(Me.EntityIdColumn).LineageID, _
                DTSUsageType.UT_READONLY)

            ' Store connection information in the runtime connection collection, too.
            ' Cannot directly use RuntimeConnectionCollection in the property get/set
            ' because of issues with multi-threading.
            Me.ComponentMetaData.RuntimeConnectionCollection("CrmConnection").ConnectionManagerID = Me.CrmConnection

            result = True
        Catch ex As Exception
            result = False
            errMessage = ex.Message
        End Try

        Validate = result
    End Function    'Validate


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    ' Returns list of current properties based on current state.
    Public Function GetProperties() As String()
        Dim result As New ArrayList

        ' Base properties.
        Call result.Add("CrmConnection")
        Call result.Add("EntityNameColumn")
        Call result.Add("EntityIdColumn")
        Call result.Add("SourceQueueId")
        Call result.Add("RouteType")

        If Me.RouteType <> CRM4.RouteType.Auto Then
            Call result.Add("EndPointId")
        End If

        Return CType(result.ToArray(GetType(String)), String())
    End Function    ' GetProperties


#Region "Properties"
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Description("Select Dynamics CRM Connection Manager.")> _
    <Connection("CrmConnectionType")> _
    Public Property CrmConnection() As String
        Get
            CrmConnection = m_crmConnection
        End Get
        Set(ByVal value As String)
            m_crmConnection = value
        End Set
    End Property    ' CrmConnection


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Description("Select column containing entity name.")> _
    <InputVirtualColumn()> _
    Public Property EntityNameColumn() As String
        Get
            EntityNameColumn = m_enColumn
        End Get
        Set(ByVal value As String)
            m_enColumn = value
        End Set
    End Property    ' EntityNameColumn


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Description("Select column containing entity identifier.")> _
    <InputVirtualColumn()> _
    Public Property EntityIdColumn() As String
        Get
            EntityIdColumn = m_eiColumn
        End Get
        Set(ByVal value As String)
            m_eiColumn = value
        End Set
    End Property    ' EntityIdColumn


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Description("Specify source queue identifier.")> _
    Public Property SourceQueueId() As String
        Get
            SourceQueueId = m_sourceQueueId
        End Get
        Set(ByVal value As String)
            m_sourceQueueId = value
        End Set
    End Property    ' SourceQueueId


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Description("Select route type.")> _
    <DefaultValue(CRM4.RouteType.Auto)> _
    <RefreshProperties(RefreshProperties.All)> _
    Public Property RouteType() As CRM4.RouteType
        Get
            RouteType = m_routeType
        End Get
        Set(ByVal value As CRM4.RouteType)
            m_routeType = value
        End Set
    End Property    ' RouteType


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Description("Specify end point identifier.")> _
    Public Property EndPointId() As String
        Get
            EndPointId = m_endPointId
        End Get
        Set(ByVal value As String)
            m_endPointId = value
        End Set
    End Property    ' EndPointId
#End Region ' Properties


#Region "Internals"
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Private ReadOnly Property CrmConnectionType() As String()
        Get
            CrmConnectionType = New String() {"DYNAMICS-CRM"}
        End Get
    End Property    ' CrmConnectionType


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Private Sub FireError_(ByVal message As String)
        Dim cancel As Boolean = False
        Call MyBase.ComponentMetaData.FireError( _
            0, _
            "Dynamics CRM Route", _
            message, _
            String.Empty, _
            0, _
            cancel)
    End Sub ' FireError_


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Private Function GetTarget4_(ByVal row As InputBuffer) As CRM4.TargetQueued
        Dim result As CRM4.TargetQueued
        Dim entityName As String = row.Buffer(m_enIndex).ToString().ToLower()
        Dim entityId As Guid = New Guid(row.Buffer(m_eiIndex).ToString())

        Select Case entityName
            Case "appointment"
                result = New CRM4.TargetQueuedAppointment

            Case "campaignactivity"
                result = New CRM4.TargetQueuedCampaignActivity

            Case "campaignresponse"
                result = New CRM4.TargetQueuedCampaignResponse

            Case "email"
                result = New CRM4.TargetQueuedEmail

            Case "fax"
                result = New CRM4.TargetQueuedFax

            Case "incident"
                result = New CRM4.TargetQueuedIncident

            Case "letter"
                result = New CRM4.TargetQueuedLetter

            Case "phonecall"
                result = New CRM4.TargetQueuedPhoneCall

            Case "serviceappointment"
                result = New CRM4.TargetQueuedServiceAppointment

            Case "task"
                result = New CRM4.TargetQueuedTask

            Case Else
                Throw New Exception(String.Format("Unhandled entity: {0}", entityName))
        End Select

        Call result.GetType().InvokeMember( _
            "EntityId", _
            BindingFlags.SetProperty Or BindingFlags.Public Or BindingFlags.Instance, _
            Nothing, _
            result, _
            New Object() {entityId})

        GetTarget4_ = result
    End Function    ' GetTarget4_
#End Region ' Internals


#Region "Attributes"
    Private m_crmConnection As String
    Private m_enColumn As String
    Private m_eiColumn As String
    Private m_sourceQueueId As String
    Private m_routeType As CRM4.RouteType
    Private m_endPointId As String

    Private m_connection As ICrmConnection
    Private m_service2011 As CRM2011.OrganizationServiceClient
    Private m_service4 As CRM4.CrmService
    Private m_enIndex As Integer
    Private m_eiIndex As Integer
#End Region ' Attributes
End Class   ' ScriptMain
]]></arrayElement></arrayElements></property>
<property id="48" name="BinaryCode" dataType="System.String" state="cdata" isArray="true" description="Stores the binary representation of the component" typeConverter="NOTBROWSABLE" UITypeEditor="" containsID="false" expressionType="None"><arrayElements arrayElementCount="2"><arrayElement dataType="System.String"><![CDATA[\bin\scriptcomponent_f848e9d47e064155a3b4a152096b0823.vbproj.dll]]></arrayElement><arrayElement dataType="System.String"><![CDATA[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
RAAAAJQnAACgBgAAI0Jsb2IAAAAAAAAAAgAAAVcVogkJDwAAAPoBMwAWAAABAAAAYwAAAA0AAAAY
AAAAOAAAABgAAACDAAAARwAAACAAAAAHAAAAEgAAABkAAAAKAAAAAQAAAAsAAAABAAAAAgAAAAMA
AAACAAAAAAAlFAEAAAAAAAoAqQF/AQoA3QG/AQYA7QHmAQoARQJ/AQYAwwLmAQoARQMbAw4AlwOA
AxIA5gPFAxYAFwTFAw4AsgSAAxoAYwU7BR4AjwZyBh4A/AZyBg4AaAeAAx4AsQeEBx4A2QdyBgYA
XwhOCAYAjAh3CCIA8wjeCCIAQAkqCSIAWQkqCSIAhgluCQYAsAmdCQoA7wnICQoABwoTACIAPAof
CgYAcQpRCgYAjwrmAQYAswrmAQoAzAoTAAYAEAvxCgYAJAvmARIAKwvFAwYAOAvmASYAmwtyCyYA
ygtyCyYA9QtyCyYAEgxyCyYAVQxyCx4AhAyEBx4AmAyEBx4AqAxyBioA5wzJDAYA9QzmAQYA/wzm
AR4ARw2EBx4Afg1yBh4Ahw1yBgoAjw3ICS4Atg2rDQYAGQ7mARYAHw7FAyYAQw5yCyYAag5yCyYA
oQ5yCyYA3g5yCyYA9w5yCyYAPw9yCyYAhA9yCyYAng9yCyYAuQ9yCwYA/g/rDwYADBDmAQoAKhDI
CR4AQhByBh4AWhByBh4AdxByBh4AlBByBh4AphByBh4AthByBh4AyxByBh4A3hByBh4A9BByBh4A
ExFyBgYAPRErEQYAShErERIAXhHFAw4ApxGFEQ4AvxGFEQ4A2RGFEQ4A9RGFESIAERIqCQ4AJhKF
ESIAOhIqCSIAVRIqCSIAZxIqCQYAfRIrEQYApBKTEgYAtxKdCQYAIBNRCgYAQBNRCgYAXhMrEQYA
exPxCgYAiRMrEQYApBMrEQYAvxMrEQYA2BMrEQYA8RMrEQYADhQrEQAAAAABAAAAAAABAAEAAAAA
ACkANwAFAAEAAQAAAAAAcgA3AAkAAQACAAABEAB9ADcADQABAAMABQEAAIcAAAANAAUACAAFAQAA
lQAAAA0ABQAPAAEAAACwALwAHQAGABEAAQAAAPQAvAApAAYAFgABAAAAAgG8AA0ACAAaAAEAAAAO
AbwADQAJABwAAQAAABgBvAAgAAoAHQAAAAAAIwEvAQ0AFQAyAAABEAB0AbwATQAXADYAMQAIAiAA
MQAxAi0AMQBTAjoAMQB4AkcAIQBUA5AABgACAccABgAOAcsAAQAIBdwAAQAIBdwAAQAZBw0BAQAp
Bw0BAQA0Bw0BAQA/Bw0BAQBPBxABAQBbBw0BAQB3BxQBAQDLBxgBAQDkBxwBAQDvByABAQD5ByAB
EQBvCCwBEQCYCDABEQALCU4BEQATCVIBCCEAAAAABhi5ARMAAQAQIQAAAAAGGLkBEwABABghAAAA
ABEY9AEXAAEARCEAAAAAEwj7ARsAAQBcIQAAAAATCCECKAABAHQhAAAAABMISgI1AAEAjCEAAAAA
EwhoAkIAAQCkIQAAAABGAq4CYwABAMAhAAAAAEYCtwJoAAIA1CEAAAAAgwDIAmwAAgDsIQAAAABG
AtACcQACAAAiAAAAABEA2QJ4AAIAHCIAAAAAAQD3AoAAAwA4IgAAAAAGGLkBEwAEAEAiAAAAAAMI
CwOLAAQAdCIAAAAABhi5ARMABACIIgAAAAAGGLkBrwAEAJgiAAAAAEYKSAS5AAgArCIAAAAARgpf
BLkACADAIgAAAACGAHcEvgAIANgiAAAAAIYAfwS+AAgA8CIAAAAABhi5ARMACAAQIwAAAABGAsYE
zwAIAEAjAAAAAEYD2wTWAAoAVCMAAAAARgPuBNYACwBYIwAAAAAGGLkB4AAMAGgjAAAAAAYIfAXm
AA0AlCMAAAAABhi5AeAADQCkIwAAAAAGGLkBEwAOAKwjAAAAAEYC7gTWAA4AUCUAAAAARgKcBRMA
DwBMJgAAAABGAqcFEwAPAHAmAAAAAAYAswXwAA8A6CcAAAAABgDHBbkAEABkKAAAAAAGCHwFcQAQ
AHwoAAAAAAYI1QX2ABAAiCgAAAAABgjtBXEAEQCgKAAAAAAGCAIG9gARAKwoAAAAAAYIFwZxABIA
xCgAAAAABggqBvYAEgDQKAAAAAAGCD0GcQATAOgoAAAAAAYITwb2ABMA9CgAAAAABgiZBvsAFAAM
KQAAAAAGCKcGAAEUABgpAAAAAAYItQZxABUAMCkAAAAABgjEBvYAFQA8KQAAAAABCNMGuQAWAFwp
AAAAAAEA6Qb2ABYAiCkAAAAAAQAJBwYBFwAQKwAAAAADGLkBEwAYABgrAAAAABYIpAg0ARgAVCsA
AAAAFgi4CDkBGABoKwAAAAAWCMQIPgEYAHArAAAAABEY9AEXABkAhCsAAAAABhi5ARMAGQCMKwAA
AAAWCCAJVQEZAAAAAQC1AgAAAQDuAgAAAQDuAgAAAQAmBAAAAgAwBAAAAwA5BAAABABBBAAAAQDT
BAAAAgBBBAAAAQBBBAAAAQAEBQAAAQAmBAAAAQAmBAAAAQAEBQAAAQC8BQAAAQDnBQAAAQDnBQAA
AQDnBQAAAQDnBQAAAQDnBQAAAQDnBQAAAQD0BgAAAQAVBwAAAQDQCAkAuQETAKEAuQFfAbEAuQFu
AREAuQETALkAuQETACQAuQETACwAuQETADQAuQETADwAuQETACQACwOLACwACwOLADQACwOLADwA
CwOLAMEAuQETAMkAuQETANEAuQH2ANkAgAoHAhkArgJjABkAtwJoACkAoQoUAhkA0AJxAOkAvQok
AhkAuQETAPEAuQE0AkQAVAOQAEwAIAmLAEwA5wqxAkwAuQETAPkAuQG+AjkAuQGvAAkBdwS+AAkB
fwS+ABEBuQG+AlEAuQETAEEAtAvOAhkB4QvUAiEBAgzaAikBCwxoABkBNQzhAjEBAgznAjkBbgzm
AEEBuQETAEEBBA32AGkBuQH2AEEBFA3zAkkBuQETADkAHQ35AkkAAgz+AgEBKA1xAEkBMA32AEkB
QA0DA3kAXA0KA1EBuQETAFEBZA0TA1EBTwYDA1EBpwYAAVEBmQb7AFEBbw0DA4EAXA0ZA4kBmw0i
A1kBvg0pA5EByQ1xAIkB1g0XAGEB6A1xAEEAnAUTAFkA9A1EA3EABg4TAHEADg7+AmEBuQH2AFEA
MQ5JA6EBWA5PAykBHQ1oACkBhw5VA7EBAgxbA7kBtA5oAKkBwg5iA0EApwUTAHEA2A4TAAEBCw9v
AxkBGQ90AykBJQ96A7EBNQ8TAMkBYw+AA9EBAgyGA9kBtA5oAOEBxg+NAzkB0w/2APEBuQETAPEB
CBCyA/EBEhC3AwEBGhANARkBIBDWAwECNBDhAwkCuQETABECuQETABkCuQETACECuQETACkCuQET
ADECuQETADkCuQETAEECuQETAEkCuQETAFECuQETAAEBJBHoAxkAyAJsACkAURHuA2kCuQETAHEC
uQEKBHkCuQH2AIECuQH2AIkCuQETAJECuQH2AJkCuQH2AKECuQFJBbECuQFQBSkAhhKhBYkAuQGn
BZkAuQETAMECrBLEBcECshLEBckCuQETANECuQFQBdkCuQETAOECuQH2AOkCuQH2APECuQH2APkC
uQH2AAEDuQH2AAkDuQH2ABEDuQH2ABkDuQH2ACkAgwDBAS4ACwSQBi4AAwRTBi4AGwRTBi4A+wMz
Bi4A2wPXBS4AEwTDAi4A4wP2BS4A0wPOBS4A6wMDBi4A6wDDAi4A8wPDAi4ACwEtBkAAKwCMAUAA
EwBlAUMAEwBlAUMAGwB0AUkAgwDfAWMAEwBlAWMAGwB0AWkAgwDSAYAAKwCMAYMAGwB0AYMAewCM
AYMAcwCMAYkAgwDzAaAAKwCMAaMAEwBlAaMAwwA8AsAAKwCMAcMA6wDDAsMAEwBlAeAAKwCMAeMA
CwHDAgABEwBlAQABKwCMAQMBCwHDAiABKwCMASABEwBlASkBgwMcBSkBiwMFBUABEwBlAUABKwCM
AUkBgwN2BUkBewOMAWABKwCMAWABEwBlAWMBCwHDAmMBawNqBGMBcwN9BGMBWwOMAWMBYwMQBGkB
gwOLBGkBewOMAYABKwCMAYkBgwO8BKABKwCMAakBmwNVBakBgwNeBakBkwNlAcABEwBlAcABKwCM
AckBgwPiBOABKwCMAQACEwBlAQACKwCMAQkCEwC7BSkCEwC7BUkCywOMAUADCwHDAoADCwHDAq0B
sgG3AbwBDAIQAhsCIAIvAi8CtwLJAskCDAIMAu4CLwNoA5sDwgMgAiACIAIgAsoDIALPAwwC/AOv
BbYFyQUEAAEABgAFAAcABgAJAAgACwAJAAwAEAANABIAAADdAU8AAACWAlQAAABFAlkAAACiAl4A
AABeA5gAAACLBMIAAACeBMIAAACOBesAAACOBSMBAAADCCMBAAAUCCMBAAAjCCMBAACPBicBAAAx
CCMBAAA8CMIAAABfCEQBAADWCEkBAADQCFoBAgAEAAMAAgAFAAUAAgAGAAcAAgAHAAkAAgAPAAsA
AgASAA0AAgATAA8AAgAbABEAAgAjABMAAQAkABMAAgAlABUAAQAmABUAAgAnABcAAQAoABcAAQAq
ABkAAgApABkAAgArABsAAQAsABsAAgAtAB0AAQAuAB0AAgAvAB8AAgAzACEAAgA0ACMAAQA1ACMA
AgA4ACUAdQB1AIgAkQGYAZ8BpgGeAqUCvwMEgAAAAQAAAAAAAAAAAAAAAAC8AAAAAgAAAAAAAAAA
AAAAAQAKAAAAAAAIAAAAAAAAAAAAAAAKABMAAAAAAAEAAAAAAAAAAAAAAJ0AagMAAAAACgAAAAAA
AAAAAAAApgCoAwAAAAAKAAAAAAAAAAAAAACmAPYDAAAAAAoAAAAAAAAAAAAAAKYAGAUAAAAAAQAA
AAAAAAAAAAAAnQBhBgAAAAACAAAAAAAAAAAAAAABAOYBAAAAAAoAAAAAAAAAAAAAAKYATgsAAAAA
AgAAAAAAAAAAAAAACgC1DAAAAAACAAAAAAAAAAAAAAABAKsNAAAAAAAAAAABAAAA1BIAAAUABAAG
AAQAAAAQAAwA7AIAABAAGQDsAgAAAAAbAOwCLQAqAi0ArAIAAAA8TW9kdWxlPgBtc2NvcmxpYgBN
aWNyb3NvZnQuVmlzdWFsQmFzaWMATXlBcHBsaWNhdGlvbgBTY3JpcHRDb21wb25lbnRfZjg0OGU5
ZDQ3ZTA2NDE1NWEzYjRhMTUyMDk2YjA4MjMudmJwcm9qLk15AE15Q29tcHV0ZXIATXlQcm9qZWN0
AE15V2ViU2VydmljZXMAVGhyZWFkU2FmZU9iamVjdFByb3ZpZGVyYDEASW5wdXRCdWZmZXIAU2Ny
aXB0Q29tcG9uZW50X2Y4NDhlOWQ0N2UwNjQxNTVhM2I0YTE1MjA5NmIwODIzLnZicHJvagBVc2Vy
Q29tcG9uZW50AENvbm5lY3Rpb25zAFZhcmlhYmxlcwBTY3JpcHRNYWluAE15UmVzb3VyY2VzAFNj
cmlwdENvbXBvbmVudF9mODQ4ZTlkNDdlMDY0MTU1YTNiNGExNTIwOTZiMDgyMy52YnByb2ouTXku
UmVzb3VyY2VzAE15U2V0dGluZ3MATWljcm9zb2Z0LlZpc3VhbEJhc2ljLkFwcGxpY2F0aW9uU2Vy
dmljZXMAQXBwbGljYXRpb25CYXNlAC5jdG9yAE1pY3Jvc29mdC5WaXN1YWxCYXNpYy5EZXZpY2Vz
AENvbXB1dGVyAFN5c3RlbQBPYmplY3QALmNjdG9yAGdldF9Db21wdXRlcgBtX0NvbXB1dGVyT2Jq
ZWN0UHJvdmlkZXIAZ2V0X0FwcGxpY2F0aW9uAG1fQXBwT2JqZWN0UHJvdmlkZXIAVXNlcgBnZXRf
VXNlcgBtX1VzZXJPYmplY3RQcm92aWRlcgBnZXRfV2ViU2VydmljZXMAbV9NeVdlYlNlcnZpY2Vz
T2JqZWN0UHJvdmlkZXIAQXBwbGljYXRpb24AV2ViU2VydmljZXMARXF1YWxzAG8AR2V0SGFzaENv
ZGUAVHlwZQBHZXRUeXBlAFRvU3RyaW5nAENyZWF0ZV9fSW5zdGFuY2VfXwBUAGluc3RhbmNlAERp
c3Bvc2VfX0luc3RhbmNlX18AZ2V0X0dldEluc3RhbmNlAE1pY3Jvc29mdC5WaXN1YWxCYXNpYy5N
eVNlcnZpY2VzLkludGVybmFsAENvbnRleHRWYWx1ZWAxAG1fQ29udGV4dABHZXRJbnN0YW5jZQBD
b3p5Um9jLlNTSVNQbHVzLjIwMDgAQ296eVJvYy5TcWxTZXJ2ZXIuU1NJUwBTY3JpcHRCdWZmZXJQ
bHVzAE1pY3Jvc29mdC5TcWxTZXJ2ZXIuVHhTY3JpcHQATWljcm9zb2Z0LlNxbFNlcnZlci5EdHMu
UGlwZWxpbmUAU2NyaXB0Q29tcG9uZW50AE1pY3Jvc29mdC5TcWxTZXJ2ZXIuUGlwZWxpbmVIb3N0
AFBpcGVsaW5lQnVmZmVyAENvbXBvbmVudABPYmplY3RJRABJc0lucHV0AEJ1ZmZlcgBnZXRfU3Rh
dGljSW5wdXRDb2x1bW5zAGdldF9TdGF0aWNPdXRwdXRDb2x1bW5zAE5leHRSb3cARW5kT2ZSb3dz
ZXQAU3RhdGljSW5wdXRDb2x1bW5zAFN0YXRpY091dHB1dENvbHVtbnMAU2NyaXB0Q29tcG9uZW50
UGx1cwBQcm9jZXNzSW5wdXQASW5wdXRJRABJbnB1dF9Qcm9jZXNzSW5wdXQASW5wdXRfUHJvY2Vz
c0lucHV0Um93AFJvdwBQYXJlbnRDb21wb25lbnQATWljcm9zb2Z0LlNxbFNlcnZlci5EVFNSdW50
aW1lV3JhcABNaWNyb3NvZnQuU3FsU2VydmVyLkR0cy5SdW50aW1lLldyYXBwZXIASURUU0Nvbm5l
Y3Rpb25NYW5hZ2VyMTAwAGdldF9Dcm1Db25uZWN0aW9uAENybUNvbm5lY3Rpb24AUHJlRXhlY3V0
ZQBQb3N0RXhlY3V0ZQBWYWxpZGF0ZQBlcnJNZXNzYWdlAEdldFByb3BlcnRpZXMAc2V0X0NybUNv
bm5lY3Rpb24AdmFsdWUAZ2V0X0VudGl0eU5hbWVDb2x1bW4Ac2V0X0VudGl0eU5hbWVDb2x1bW4A
Z2V0X0VudGl0eUlkQ29sdW1uAHNldF9FbnRpdHlJZENvbHVtbgBnZXRfU291cmNlUXVldWVJZABz
ZXRfU291cmNlUXVldWVJZABDb3p5Um9jLkR5bmFtaWNzAENvenlSb2MuRHluYW1pY3MuQ3JtLlNl
cnZpY2UAUm91dGVUeXBlAGdldF9Sb3V0ZVR5cGUAc2V0X1JvdXRlVHlwZQBnZXRfRW5kUG9pbnRJ
ZABzZXRfRW5kUG9pbnRJZABnZXRfQ3JtQ29ubmVjdGlvblR5cGUARmlyZUVycm9yXwBtZXNzYWdl
AFRhcmdldFF1ZXVlZABHZXRUYXJnZXQ0XwByb3cAbV9jcm1Db25uZWN0aW9uAG1fZW5Db2x1bW4A
bV9laUNvbHVtbgBtX3NvdXJjZVF1ZXVlSWQAbV9yb3V0ZVR5cGUAbV9lbmRQb2ludElkAElDcm1D
b25uZWN0aW9uAG1fY29ubmVjdGlvbgBDb3p5Um9jLkR5bmFtaWNzLkNybTIwMTEuT3JnYW5pemF0
aW9uU2VydmljZQBPcmdhbml6YXRpb25TZXJ2aWNlQ2xpZW50AG1fc2VydmljZTIwMTEAQ3JtU2Vy
dmljZQBtX3NlcnZpY2U0AG1fZW5JbmRleABtX2VpSW5kZXgARW50aXR5TmFtZUNvbHVtbgBFbnRp
dHlJZENvbHVtbgBTb3VyY2VRdWV1ZUlkAEVuZFBvaW50SWQAQ3JtQ29ubmVjdGlvblR5cGUAU3lz
dGVtLlJlc291cmNlcwBSZXNvdXJjZU1hbmFnZXIAX3Jlc01ncgBTeXN0ZW0uR2xvYmFsaXphdGlv
bgBDdWx0dXJlSW5mbwBfcmVzQ3VsdHVyZQBnZXRfUmVzb3VyY2VNYW5hZ2VyAGdldF9DdWx0dXJl
AHNldF9DdWx0dXJlAFZhbHVlAEN1bHR1cmUAU3lzdGVtLkNvbmZpZ3VyYXRpb24AQXBwbGljYXRp
b25TZXR0aW5nc0Jhc2UAbV9WYWx1ZQBtX1N5bmNPYmplY3QAZ2V0X1ZhbHVlAFN5c3RlbS5Db21w
b25lbnRNb2RlbABFZGl0b3JCcm93c2FibGVBdHRyaWJ1dGUARWRpdG9yQnJvd3NhYmxlU3RhdGUA
U3lzdGVtLkNvZGVEb20uQ29tcGlsZXIAR2VuZXJhdGVkQ29kZUF0dHJpYnV0ZQBTeXN0ZW0uRGlh
Z25vc3RpY3MARGVidWdnZXJIaWRkZW5BdHRyaWJ1dGUATWljcm9zb2Z0LlZpc3VhbEJhc2ljLkNv
bXBpbGVyU2VydmljZXMAU3RhbmRhcmRNb2R1bGVBdHRyaWJ1dGUASGlkZU1vZHVsZU5hbWVBdHRy
aWJ1dGUAU3lzdGVtLkNvbXBvbmVudE1vZGVsLkRlc2lnbgBIZWxwS2V5d29yZEF0dHJpYnV0ZQBT
eXN0ZW0uUnVudGltZS5Db21waWxlclNlcnZpY2VzAFJ1bnRpbWVIZWxwZXJzAEdldE9iamVjdFZh
bHVlAFJ1bnRpbWVUeXBlSGFuZGxlAEdldFR5cGVGcm9tSGFuZGxlAEFjdGl2YXRvcgBDcmVhdGVJ
bnN0YW5jZQBNeUdyb3VwQ29sbGVjdGlvbkF0dHJpYnV0ZQBzZXRfVmFsdWUAU3lzdGVtLlJ1bnRp
bWUuSW50ZXJvcFNlcnZpY2VzAENvbVZpc2libGVBdHRyaWJ1dGUAU3RyaW5nAFNjcmlwdEJ1ZmZl
cgBDTFNDb21wbGlhbnRBdHRyaWJ1dGUATWljcm9zb2Z0LlNxbFNlcnZlci5EVFNQaXBlbGluZVdy
YXAATWljcm9zb2Z0LlNxbFNlcnZlci5EdHMuUGlwZWxpbmUuV3JhcHBlcgBJRFRTQ29tcG9uZW50
TWV0YURhdGExMDAAZ2V0X0NvbXBvbmVudE1ldGFEYXRhAElEVFNJbnB1dENvbGxlY3Rpb24xMDAA
Z2V0X0lucHV0Q29sbGVjdGlvbgBJRFRTSW5wdXQxMDAAZ2V0X0l0ZW0AZ2V0X0lEAElEVFNSdW50
aW1lQ29ubmVjdGlvbkNvbGxlY3Rpb24xMDAAZ2V0X1J1bnRpbWVDb25uZWN0aW9uQ29sbGVjdGlv
bgBJRFRTUnVudGltZUNvbm5lY3Rpb24xMDAAZ2V0X0Nvbm5lY3Rpb25NYW5hZ2VyAE9yZ2FuaXph
dGlvblJlcXVlc3QARW50aXR5UmVmZXJlbmNlAFJvdXRlUmVxdWVzdABTeXN0ZW0uV2ViLlNlcnZp
Y2VzAFN5c3RlbS5XZWIuU2VydmljZXMuUHJvdG9jb2xzAFNvYXBFeGNlcHRpb24ARXhjZXB0aW9u
AEd1aWQAc2V0X1JlcXVlc3ROYW1lAHNldF9JdGVtAGdldF9CdWZmZXIAVG9Mb3dlcgBzZXRfTG9n
aWNhbE5hbWUAc2V0X0lkAE9yZ2FuaXphdGlvblJlc3BvbnNlAEV4ZWN1dGUAc2V0X1RhcmdldABz
ZXRfRW5kcG9pbnRJZABSZXNwb25zZQBSZXF1ZXN0AFByb2plY3REYXRhAFNldFByb2plY3RFcnJv
cgBTeXN0ZW0uWG1sAFhtbE5vZGUAZ2V0X0RldGFpbABnZXRfSW5uZXJYbWwAQ2xlYXJQcm9qZWN0
RXJyb3IAZ2V0X01lc3NhZ2UAQWNxdWlyZUNvbm5lY3Rpb24AQ29ubmVjdABHZXRTZXJ2aWNlAElu
dDMyAFBpcGVsaW5lQ29tcG9uZW50AGdldF9Ib3N0Q29tcG9uZW50AElEVFNCdWZmZXJNYW5hZ2Vy
MTAwAGdldF9CdWZmZXJNYW5hZ2VyAElEVFNJbnB1dENvbHVtbkNvbGxlY3Rpb24xMDAAZ2V0X0lu
cHV0Q29sdW1uQ29sbGVjdGlvbgBJRFRTSW5wdXRDb2x1bW4xMDAAZ2V0X0xpbmVhZ2VJRABGaW5k
Q29sdW1uQnlMaW5lYWdlSUQAQ2xvc2UAQ01hbmFnZWRDb21wb25lbnRXcmFwcGVyAElEVFNWaXJ0
dWFsSW5wdXQxMDAASXNOdWxsT3JFbXB0eQBJbnN0YW50aWF0ZQBHZXRWaXJ0dWFsSW5wdXQAUmVt
b3ZlQWxsAElEVFNWaXJ0dWFsSW5wdXRDb2x1bW5Db2xsZWN0aW9uMTAwAGdldF9WaXJ0dWFsSW5w
dXRDb2x1bW5Db2xsZWN0aW9uAElEVFNWaXJ0dWFsSW5wdXRDb2x1bW4xMDAASURUU0Rlc2lnbnRp
bWVDb21wb25lbnQxMDAARFRTVXNhZ2VUeXBlAFNldFVzYWdlVHlwZQBzZXRfQ29ubmVjdGlvbk1h
bmFnZXJJRABTeXN0ZW0uQ29sbGVjdGlvbnMAQXJyYXlMaXN0AEFkZABBcnJheQBUb0FycmF5AEVt
cHR5AEZpcmVFcnJvcgBPcGVyYXRvcnMAQ29tcGFyZVN0cmluZwBUYXJnZXRRdWV1ZWRBcHBvaW50
bWVudABUYXJnZXRRdWV1ZWRDYW1wYWlnbkFjdGl2aXR5AFRhcmdldFF1ZXVlZENhbXBhaWduUmVz
cG9uc2UAVGFyZ2V0UXVldWVkRW1haWwAVGFyZ2V0UXVldWVkRmF4AFRhcmdldFF1ZXVlZEluY2lk
ZW50AFRhcmdldFF1ZXVlZExldHRlcgBUYXJnZXRRdWV1ZWRQaG9uZUNhbGwAVGFyZ2V0UXVldWVk
U2VydmljZUFwcG9pbnRtZW50AFRhcmdldFF1ZXVlZFRhc2sARm9ybWF0AFN5c3RlbS5SZWZsZWN0
aW9uAEJpbmRpbmdGbGFncwBCaW5kZXIASW52b2tlTWVtYmVyAFNTSVNTY3JpcHRDb21wb25lbnRF
bnRyeVBvaW50QXR0cmlidXRlAENvenlSb2MuU3FsU2VydmVyLlNTSVMuQXR0cmlidXRlcwBTb3J0
UHJvcGVydGllc0F0dHJpYnV0ZQBGaWx0ZXJQcm9wZXJ0aWVzQXR0cmlidXRlAFZhbGlkYXRlUHJv
cGVydGllc0F0dHJpYnV0ZQBJbnB1dFZpcnR1YWxDb2x1bW5BdHRyaWJ1dGUARGVzY3JpcHRpb25B
dHRyaWJ1dGUAQ29ubmVjdGlvbkF0dHJpYnV0ZQBSZWZyZXNoUHJvcGVydGllc0F0dHJpYnV0ZQBS
ZWZyZXNoUHJvcGVydGllcwBEZWZhdWx0VmFsdWVBdHRyaWJ1dGUAQXNzZW1ibHkAZ2V0X0Fzc2Vt
Ymx5AFN5c3RlbS5UaHJlYWRpbmcATW9uaXRvcgBFbnRlcgBFeGl0AERlYnVnZ2VyTm9uVXNlckNv
ZGVBdHRyaWJ1dGUAU2NyaXB0Q29tcG9uZW50X2Y4NDhlOWQ0N2UwNjQxNTVhM2I0YTE1MjA5NmIw
ODIzLnZicHJvai5SZXNvdXJjZXMucmVzb3VyY2VzAENvbXBpbGF0aW9uUmVsYXhhdGlvbnNBdHRy
aWJ1dGUAUnVudGltZUNvbXBhdGliaWxpdHlBdHRyaWJ1dGUAQXNzZW1ibHlGaWxlVmVyc2lvbkF0
dHJpYnV0ZQBHdWlkQXR0cmlidXRlAEFzc2VtYmx5VHJhZGVtYXJrQXR0cmlidXRlAEFzc2VtYmx5
Q29weXJpZ2h0QXR0cmlidXRlAEFzc2VtYmx5UHJvZHVjdEF0dHJpYnV0ZQBBc3NlbWJseUNvbXBh
bnlBdHRyaWJ1dGUAQXNzZW1ibHlEZXNjcmlwdGlvbkF0dHJpYnV0ZQBBc3NlbWJseVRpdGxlQXR0
cmlidXRlAFNjcmlwdENvbXBvbmVudF9mODQ4ZTlkNDdlMDY0MTU1YTNiNGExNTIwOTZiMDgyMy52
YnByb2ouZGxsAAAAAAALSQBuAHAAdQB0AAAbQwByAG0AQwBvAG4AbgBlAGMAdABpAG8AbgAAFUEA
ZABkAFQAbwBRAHUAZQB1AGUAABtTAG8AdQByAGMAZQBRAHUAZQB1AGUASQBkAAAlRABlAHMAdABp
AG4AYQB0AGkAbwBuAFEAdQBlAHUAZQBJAGQAAA1UAGEAcgBnAGUAdAAAM1UAbgBoAGEAbgBkAGwA
ZQBkACAAcwBlAHIAdgBpAGMAZQAgAG8AYgBqAGUAYwB0AC4AAD9TAGUAbABlAGMAdAAgAEQAeQBu
AGEAbQBpAGMAcwAgAEMAUgBNACAAQwBvAG4AbgBlAGMAdABpAG8AbgAuAAA1UwBlAGwAZQBjAHQA
IABlAG4AdABpAHQAeQAgAG4AYQBtAGUAIABjAG8AbAB1AG0AbgAuAAAxUwBlAGwAZQBjAHQAIABl
AG4AdABpAHQAeQAgAGkAZAAgAGMAbwBsAHUAbQBuAC4AADFTAHAAZQBjAGkAZgB5ACAAcwBvAHUA
cgBjAGUAIABxAHUAZQB1AGUAIABpAGQALgAAK1MAcABlAGMAaQBmAHkAIABlAG4AZAAgAHAAbwBp
AG4AdAAgAGkAZAAuAAAhRQBuAHQAaQB0AHkATgBhAG0AZQBDAG8AbAB1AG0AbgAAHUUAbgB0AGkA
dAB5AEkAZABDAG8AbAB1AG0AbgAAE1IAbwB1AHQAZQBUAHkAcABlAAAVRQBuAGQAUABvAGkAbgB0
AEkAZAAAGUQAWQBOAEEATQBJAEMAUwAtAEMAUgBNAAElRAB5AG4AYQBtAGkAYwBzACAAQwBSAE0A
IABSAG8AdQB0AGUAABdhAHAAcABvAGkAbgB0AG0AZQBuAHQAACFjAGEAbQBwAGEAaQBnAG4AYQBj
AHQAaQB2AGkAdAB5AAAhYwBhAG0AcABhAGkAZwBuAHIAZQBzAHAAbwBuAHMAZQAAC2UAbQBhAGkA
bAAAB2YAYQB4AAARaQBuAGMAaQBkAGUAbgB0AAANbABlAHQAdABlAHIAABNwAGgAbwBuAGUAYwBh
AGwAbAAAJXMAZQByAHYAaQBjAGUAYQBwAHAAbwBpAG4AdABtAGUAbgB0AAAJdABhAHMAawAAK1UA
bgBoAGEAbgBkAGwAZQBkACAAZQBuAHQAaQB0AHkAOgAgAHsAMAB9AAARRQBuAHQAaQB0AHkASQBk
AAAxTQB5AC4AUgBlAHMAbwB1AHIAYwBlAHMALgBNAHkAUgBlAHMAbwB1AHIAYwBlAHMAAACt0izM
i1yQTLHSLKNaE7ZfAAi3elxWGTTgiQiwP19/EdUKOgMgAAEDAAABBAAAEgwHBhUSGAESDAQAABII
BwYVEhgBEggEAAASEQcGFRIYARIRBAAAEhQHBhUSGAESFAQIABIMBAgAEggECAASEQQIABIUBCAB
AhwDIAAIBCAAEhUDIAAOAh4ABxABAR4AHgAHMAEBARAeAAITAAQgABMABwYVEhkBEwAEKAATAAgW
z0kLuAw06giJhF3NgIDMkQkgBAESIQgCEiUEIAAdDgMgAAIEKAAdDgMGEiQDBhIoBiACAQgSJQUg
AQESHAMGEiEFIAEBEiEEIAASLQQoABItBSABAhAOBCABAQ4EIAARMQUgAQERMQYgARI1EhwCBg4D
BhExAwYSOQMGEj0DBhJBAgYIAygADgQoABExAwYSRQMGEkkEAAASRQQAABJJBQABARJJBAgAEkUE
CAASSQMGEjQCBhwEAAASNAQIABI0BSABARFVCAEAAQAAAAAABSACAQ4OFwEACk15VGVtcGxhdGUH
OC4wLjAuMAAABAEAAAAGFRIYARIMBhUSGAESCAYVEhgBEhEGFRIYARIUBAcBEgwEBwESCAQHARIR
BAcBEhQQAQALTXkuQ29tcHV0ZXIAAAwBAAdNeS5Vc2VyAAATAQAOTXkuQXBwbGljYXRpb24AABMB
AA5NeS5XZWJTZXJ2aWNlcwAABAABHBwDBwECAwcBCAYAARIVEXEEBwESFQMHAQ4FEAEAHgAECgEe
AAQHAR4AByAEAQ4ODg5hAQA0U3lzdGVtLldlYi5TZXJ2aWNlcy5Qcm90b2NvbHMuU29hcEh0dHBD
bGllbnRQcm90b2NvbBJDcmVhdGVfX0luc3RhbmNlX18TRGlzcG9zZV9fSW5zdGFuY2VfXwAAAAYV
EhgBEwAGFRIZARMABAoBEwAFIAEBEwAGBwITABMABCABAQIFAQAAAAAEBwEdDgUgABKAjQUgABKA
kQYgARKAlRwFIAASgJkGIAESgJ0cBAcBEi0FIAIBDhwEIAASJQQgARwIBiABARGAtQggARKAuRKA
oQUgAQESNQggARKAvRKAwQYAAQESgLEFIAASgMkUBwYSgKESgKUSgKkSgK0SgLERgLUEIAEcHAUg
ABKA0QUgABKA1QUgABKA2QYgARKA3RwFIAIICAgGBwISgJUcBAABAg4FIAASgOEFIAASgOUFIAAS
gOkGIAESgO0cDSAEEoDdCBKA5QgRgPUWBwgCAhKA3RKA3RKAlRKA4RKA5RKAsQQgAQgcByABEoD9
EhUCHQ4HBwIdDhKA+QQHARExBgcCHQ4dDgogBgEIDg4OCBACBgADCA4OAgUAAg4OHA0gBRwOEYEt
EoExHB0cDQcGEYC1DhI1EjUOHRwFIAEBHQ5ZAQAGAAAADUNybUNvbm5lY3Rpb24QRW50aXR5TmFt
ZUNvbHVtbg5FbnRpdHlJZENvbHVtbg1Tb3VyY2VRdWV1ZUlkCVJvdXRlVHlwZQpFbmRQb2ludElk
AAASAQANR2V0UHJvcGVydGllcwAADQEACFZhbGlkYXRlAAAwAQArU2VsZWN0IGNvbHVtbiBjb250
YWluaW5nIGVudGl0eSBpZGVudGlmaWVyLgAAJQEAIFNwZWNpZnkgc291cmNlIHF1ZXVlIGlkZW50
aWZpZXIuAAAiAQAdU3BlY2lmeSBlbmQgcG9pbnQgaWRlbnRpZmllci4AABYBABFDcm1Db25uZWN0
aW9uVHlwZQAALAEAJ1NlbGVjdCBEeW5hbWljcyBDUk0gQ29ubmVjdGlvbiBNYW5hZ2VyLgAABiAB
ARGBVQQgAQEICAEAAAAAAAAAFwEAElNlbGVjdCByb3V0ZSB0eXBlLgAAKgEAJVNlbGVjdCBjb2x1
bW4gY29udGFpbmluZyBlbnRpdHkgbmFtZS4AAAUgABKBXQcgAgEOEoFdBgcCEkUSRQQHARJJCAEA
AgAAAAAABAABARwEBwESNAgBAAgAAAAAAB4BAAEAVAIWV3JhcE5vbkV4Y2VwdGlvblRocm93cwEM
AQAHMS4wLjAuMAAAKQEAJGI0YzllNWVlLTE1YTktNGIxNS05NTEwLTg5YWI4ODg5ZWY1NgAABQEA
AQAAHwEAGkNvcHlyaWdodCBAIE1pY3Jvc29mdCAyMDEyAAA8AQA3U2NyaXB0Q29tcG9uZW50X2Y4
NDhlOWQ0N2UwNjQxNTVhM2I0YTE1MjA5NmIwODIzLnZicHJvagAADgEACU1pY3Jvc29mdAAAAERa
AAAAAAAAAAAAAF5aAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQWgAAAAAAAAAAAAAAAF9Db3JE
bGxNYWluAG1zY29yZWUuZGxsAAAAAAD/JQAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAwAAACgAAIAOAAAASAAA
gBAAAABgAACAAAAAAAAAAAAAAAAAAAACAAIAAAB4AACAAwAAAJAAAIAAAAAAAAAAAAAAAAAAAAEA
AH8AAKgAAIAAAAAAAAAAAAAAAAAAAAEAAQAAAMAAAIAAAAAAAAAAAAAAAAAAAAEAAAAAANgAAAAA
AAAAAAAAAAAAAAAAAAEAAAAAAOgAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAPgAAAAAAAAAAAAAAAAA
AAAAAAEAAAAAAAgBAACAZQAA6AIAAAAAAAAAAAAAaGgAACgBAAAAAAAAAAAAAJBpAAAiAAAAAAAA
AAAAAAAYYQAAaAQAAAAAAAAAAAAAaAQ0AAAAVgBTAF8AVgBFAFIAUwBJAE8ATgBfAEkATgBGAE8A
AAAAAL0E7/4AAAEAAAABAAAAAAAAAAEAAAAAAD8AAAAAAAAABAAAAAIAAAAAAAAAAAAAAAAAAABE
AAAAAQBWAGEAcgBGAGkAbABlAEkAbgBmAG8AAAAAACQABAAAAFQAcgBhAG4AcwBsAGEAdABpAG8A
bgAAAAAAAACwBMgDAAABAFMAdAByAGkAbgBnAEYAaQBsAGUASQBuAGYAbwAAAKQDAAABADAAMAAw
ADAAMAA0AGIAMAAAADQACgABAEMAbwBtAHAAYQBuAHkATgBhAG0AZQAAAAAATQBpAGMAcgBvAHMA
bwBmAHQAAACYADgAAQBGAGkAbABlAEQAZQBzAGMAcgBpAHAAdABpAG8AbgAAAAAAUwBjAHIAaQBw
AHQAQwBvAG0AcABvAG4AZQBuAHQAXwBmADgANAA4AGUAOQBkADQANwBlADAANgA0ADEANQA1AGEA
MwBiADQAYQAxADUAMgAwADkANgBiADAAOAAyADMALgB2AGIAcAByAG8AagAAADAACAABAEYAaQBs
AGUAVgBlAHIAcwBpAG8AbgAAAAAAMQAuADAALgAwAC4AMAAAAJgAPAABAEkAbgB0AGUAcgBuAGEA
bABOAGEAbQBlAAAAUwBjAHIAaQBwAHQAQwBvAG0AcABvAG4AZQBuAHQAXwBmADgANAA4AGUAOQBk
ADQANwBlADAANgA0ADEANQA1AGEAMwBiADQAYQAxADUAMgAwADkANgBiADAAOAAyADMALgB2AGIA
cAByAG8AagAuAGQAbABsAAAAXAAbAAEATABlAGcAYQBsAEMAbwBwAHkAcgBpAGcAaAB0AAAAQwBv
AHAAeQByAGkAZwBoAHQAIABAACAATQBpAGMAcgBvAHMAbwBmAHQAIAAyADAAMQAyAAAAAACgADwA
AQBPAHIAaQBnAGkAbgBhAGwARgBpAGwAZQBuAGEAbQBlAAAAUwBjAHIAaQBwAHQAQwBvAG0AcABv
AG4AZQBuAHQAXwBmADgANAA4AGUAOQBkADQANwBlADAANgA0ADEANQA1AGEAMwBiADQAYQAxADUA
MgAwADkANgBiADAAOAAyADMALgB2AGIAcAByAG8AagAuAGQAbABsAAAAkAA4AAEAUAByAG8AZAB1
AGMAdABOAGEAbQBlAAAAAABTAGMAcgBpAHAAdABDAG8AbQBwAG8AbgBlAG4AdABfAGYAOAA0ADgA
ZQA5AGQANAA3AGUAMAA2ADQAMQA1ADUAYQAzAGIANABhADEANQAyADAAOQA2AGIAMAA4ADIAMwAu
AHYAYgBwAHIAbwBqAAAANAAIAAEAUAByAG8AZAB1AGMAdABWAGUAcgBzAGkAbwBuAAAAMQAuADAA
LgAwAC4AMAAAADgACAABAEEAcwBzAGUAbQBiAGwAeQAgAFYAZQByAHMAaQBvAG4AAAAxAC4AMAAu
ADAALgAwAAAAKAAAACAAAABAAAAAAQAEAAAAAACAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA
AIAAAACAgACAAAAAgACAAICAAACAgIAAwMDAAAAA/wAA/wAAAP//AP8AAAD/AP8A//8AAP///wAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAHd3d3d3d3d3d3d3d3d3cARERERERERERERERERERHAE//////////////////RwBP//
///////////////0cAT/////////////////9HAE//////////////////RwBP//////////////
///0cAT/////////////////9HAE//////////////////RwBP/////////////////0cAT/////
////////////9HAE//////////////////RwBP/////////////////0cAT/////////////////
9HAE//////////////////RwBP/////////////////0cAT/////////////////9HAE////////
//////////RwBP/////////////////0cAT/////////////////9HAEiIiIiIiIiIiIiIiIiIRw
BEREREREREREREREREREcARMTExMTExMTExOzs5JdHAEzMzMzMzMzMzMzMzMzMQAAERERERERERE
RERERERAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//
///////////////////AAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAA
AYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAPAAAAH
////////////////KAAAABAAAAAgAAAAAQAEAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AIAAAIAAAACAgACAAAAAgACAAICAAACAgIAAwMDAAAAA/wAA/wAAAP//AP8AAAD/AP8A//8AAP//
/wAAAAAAAAAAAAd3d3d3d3d3REREREREREdP///////4R0////////hHT///////+EdP///////4
R0////////hHT///////+EdP///////4R0////////hHSIiIiIiIiEdMzMzMzMzMR8RERERERETA
AAAAAAAAAAAAAAAAAAAAAP//AACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAQAA//8AAP//AAAAAAEAAgAgIBAAAQAEAOgCAAACABAQEAABAAQAKAEAAAMA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAwAAABwOgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAA=]]></arrayElement></arrayElements></property>
<property id="55" name="UserComponentTypeName" dataType="System.String" state="default" isArray="false" description="" typeConverter="" UITypeEditor="" containsID="false" expressionType="None">CozyRoc.SqlServer.SSIS.ScriptComponentHostPlus, CozyRoc.SSISPlus.2008, Version=1.0.0.0, Culture=neutral, PublicKeyToken=16cf490bb80c34ea</property>
<property id="109" name="VSTAProjectName" dataType="System.String" state="default" isArray="false" description="Specifies the name of the Microsoft Visual Studio Tools for Applications project. Project names must be unique within a package." typeConverter="NOTBROWSABLE" UITypeEditor="" containsID="false" expressionType="None">ScriptComponent_f848e9d47e064155a3b4a152096b0823</property>
<property id="110" name="ScriptLanguage" dataType="System.String" state="default" isArray="false" description="Specifies the programming language used by the script." typeConverter="Microsoft.SqlServer.VSTAHosting.ScriptingLanguages, Microsoft.SqlServer.VSTAScriptingLib, Version=10.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" UITypeEditor="" containsID="false" expressionType="None">VisualBasic</property></properties>
<connections>
<connection id="69" name="CrmConnection" description="" connectionManagerID="{B7AC7DEF-08AC-4F40-86FF-DF27C9B310BE}" /></connections>
<inputs>
<input id="45" name="Input" description="" hasSideEffects="true" dangling="false" errorOrTruncationOperation="" errorRowDisposition="NotUsed" truncationRowDisposition="NotUsed"></input>
</inputs>
</component>