<component id="20" name="Salesforce Lookup" componentClassID="Microsoft.ManagedComponentHost" description="Executes a custom script." localeId="1033" version="10" 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="21" name="SourceCode" state="cdata" dataType="System.String" isArray="true" description="Stores the source code of the component" typeConverter="NOTBROWSABLE"><arrayElements arrayElementCount="15"><arrayElement dataType="System.String"><![CDATA[ScriptMain.vb]]></arrayElement><arrayElement dataType="System.String"><![CDATA[UTF8]]></arrayElement><arrayElement dataType="System.String"><![CDATA[' COZYROC SQL Server Integration Services user script component
'
' Copyright (c) 2006-2013 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.Collections
Imports System.Xml
Imports System.Web.Services.Protocols

Imports Microsoft.SqlServer.Dts.Pipeline.Wrapper
Imports Microsoft.SqlServer.Dts.Runtime.Wrapper
Imports CozyRoc.SqlServer.SSIS
Imports CozyRoc.SqlServer.SSIS.Attributes
Imports CozyRoc.Sforce.Service


'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
<ColumnMappings()> _
<SortProperties(New String() {"Connection", "SalesforceObject", "KeyField", "ValueField", "UseCache"})> _
<ValidateProperties("Validate")> _
<Microsoft.SqlServer.Dts.Pipeline.SSISScriptComponentEntryPointAttribute> _
<CLSCompliant(False)> _
Public Class ScriptMain
    Inherits UserComponent


    Private Const QueryTemplate_3P As String = "select {0} from {1} where {2}"
    Private Const ListDelimiter As String = "," + vbLf


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Public Overrides Sub Input_ProcessInputRow(ByVal Row As InputBuffer)
        Dim valueList() As String

        If m_cache Is Nothing Then
            valueList = GetLookupRow_(Row)
        Else
            ' Cache is enabled.
            Dim cacheKey As String = GetCacheKey_(Row)

            If m_cache.Contains(cacheKey) Then
                valueList = CType(m_cache(cacheKey), String())
            Else
                valueList = GetLookupRow_(Row)
                m_cache(cacheKey) = valueList
            End If
        End If

        If Not valueList Is Nothing Then
            Dim output As IDTSOutput100 = MyBase.ComponentMetaData.OutputCollection(0)

            ' Lookup row found.
            Dim colsCount As Integer = m_valueIdx.Length
            For colIndex As Integer = 0 To colsCount - 1
                Dim value As String = valueList(colIndex)
                Dim valueIndex As Integer = m_valueIdx(colIndex)

                If String.IsNullOrEmpty(value) Then
                    Call Row.Buffer.SetNull(valueIndex)
                    Continue For
                End If

                Try
                    Select Case m_valueType(colIndex)
                        Case DataType.DT_DBTIMESTAMP
                        Case DataType.DT_DATE
                        Case DataType.DT_FILETIME
                        Case DataType.DT_DBDATE
                            Row.Buffer(valueIndex) = Convert.ToDateTime(value)

                        Case DataType.DT_IMAGE
                            Row.Buffer(valueIndex) = Convert.FromBase64String(value)

                        Case Else
                            Row.Buffer(valueIndex) = value
                    End Select
                Catch ex As Exception
                    Call FireError_(String.Format( _
                        "Failed to process '{0}' for column '{1}'.", _
                        value, _
                        output.OutputColumnCollection(colIndex).Name))
                End Try
            Next
        End If
    End Sub ' Input_ProcessInputRow


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

        ' Setup connection.
        m_connection = CType( _
            Me.Connections.Connection.AcquireConnection(Nothing), _
            ISforceConnection)
        m_service = CType(m_connection.Connect(), SforceService)

        If Me.UseCache Then
            m_cache = New Hashtable()
        End If

        Dim input As IDTSInput100 = MyBase.ComponentMetaData.InputCollection(0)
        Dim colsCount As Integer = input.InputColumnCollection.Count

        ' Setup key index and where list.
        m_keyIdx = New Integer(colsCount - 1) {}
        For colIndex As Integer = 0 To colsCount - 1
            Dim inputCol As IDTSInputColumn100 = input.InputColumnCollection(colIndex)

            ' Set key index.
            m_keyIdx(colIndex) = Me.HostComponent.BufferManager.FindColumnByLineageID( _
                input.Buffer, _
                inputCol.LineageID)

            ' Set where list.
            Dim extCol As IDTSExternalMetadataColumn100 = input.ExternalMetadataColumnCollection.GetObjectByID( _
                inputCol.ExternalMetadataColumnID)

            If Not String.IsNullOrEmpty(m_whereTemplate_P) Then
                m_whereTemplate_P += " AND "
            End If

            m_whereTemplate_P += String.Format( _
                "{0} = {1}", _
                extCol.Name, _
                "{" + colIndex.ToString() + "}")
        Next

        Dim output As IDTSOutput100 = MyBase.ComponentMetaData.OutputCollection(0)
        colsCount = output.OutputColumnCollection.Count

        ' Setup value index and field list.
        m_valueIdx = New Integer(colsCount - 1) {}
        m_valueType = New DataType(colsCount - 1) {}
        Dim fieldList As String = String.Empty
        For colIndex As Integer = 0 To colsCount - 1
            Dim outputCol As IDTSOutputColumn100 = output.OutputColumnCollection(colIndex)

            ' Set value index and type.
            m_valueIdx(colIndex) = Me.HostComponent.BufferManager.FindColumnByLineageID( _
                input.Buffer, _
                outputCol.LineageID)
            m_valueType(colIndex) = outputCol.DataType

            ' Set field list.
            If Not String.IsNullOrEmpty(fieldList) Then
                fieldList += ", "
            End If

            fieldList += outputCol.Name
        Next

        ' Setup query template.
        m_queryTemplate_1P = String.Format( _
            QueryTemplate_3P, _
            fieldList, _
            Me.SalesforceObject, _
            "{0}")
    End Sub ' PreExecute


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

        Call m_connection.Close()
    End Sub ' PostExecute


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

        Try
            If String.IsNullOrEmpty(Me.Connection) Then
                Throw New ApplicationException("Select Salesforce connection.")
            End If

            If String.IsNullOrEmpty(Me.SalesforceObject) Then
                Throw New ApplicationException("Select object.")
            End If

            If String.IsNullOrEmpty(Me.KeyField) Then
                Throw New ApplicationException("Specify key field(s).")
            End If

            If String.IsNullOrEmpty(Me.ValueField) Then
                Throw New ApplicationException("Select value field.")
            End If

            Dim keyList() As String = Me.KeyField.Split( _
                New String() {ListDelimiter}, _
                StringSplitOptions.None)

            Dim input As IDTSInput100 = Me.ComponentMetaData.InputCollection(0)
            If input.IsAttached AndAlso input.InputColumnCollection.Count < keyList.Length Then
                Throw New Exception("Map input columns.")
            End If

            Dim output As IDTSOutput100 = MyBase.ComponentMetaData.OutputCollection(0)
            If output.OutputColumnCollection.Count = 0 Then
                ' Setup collection output columns.
                Call SetupOutputColumns_()
            End If

            ' 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("Connection").ConnectionManagerID = Me.Connection

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

        Validate = result
    End Function    'Validate


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

        If MyBase.ComponentMetaData.InputCollection.Count = 0 Then
            ' At least one input must exist.
            Throw New Exception("No inputs.")
        End If

        If String.IsNullOrEmpty(Me.KeyField) Then
            Throw New Exception("Key field(s) not selected.")
        End If

        ' Get object fields.
        Dim fieldList() As Field = GetFields_()

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

        ' Cleanup.
        input.ExternalMetadataColumnCollection.IsUsed = True
        Call input.InputColumnCollection.RemoveAll()
        Call input.ExternalMetadataColumnCollection.RemoveAll()

        ' Setup field metadata.
        Dim keyList() As String = Me.KeyField.Split( _
            New String() {ListDelimiter}, _
            StringSplitOptions.None)
        For Each key As String In keyList
            ' Find field.
            Dim field As Field = FindField_(fieldList, key)

            Dim dtsType As DataType
            Dim fieldLen, prec, scale, codePage As Integer
            Call GetDtsTypeFromField_(field, dtsType, fieldLen, prec, scale, codePage)

            ' Setup external column.
            Dim column As IDTSExternalMetadataColumn100 = input.ExternalMetadataColumnCollection.[New]()
            column.Name = field.name
            column.DataType = dtsType
            column.Length = fieldLen
            column.Precision = prec
            column.Scale = scale
            column.CodePage = codePage
        Next
    End Sub ' ReinitializeMetaData


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    ' Returns list of objects in the currently selected Salesforce connection.
    Public Function GetObjectList() As String()
        Dim result As New ArrayList

        Dim connection As ISforceConnection = CType( _
            Me.DesignConnections(Me.Connection).AcquireConnection(Nothing), _
            ISforceConnection)
        Dim service As SforceService = CType(connection.Connect(), SforceService)

        Try
            Dim dgr As DescribeGlobalResult = service.describeGlobal()

            For Each sobject As DescribeGlobalSObjectResult In dgr.sobjects
                If sobject.queryable Then
                    Call result.Add(sobject.name)
                End If
            Next

            Call result.Sort()
        Finally
            Call connection.Close()
        End Try

        GetObjectList = CType(result.ToArray(GetType(String)), String())
    End Function    ' GetObjectList


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    ' Returns list of fields in the currently selected object.
    Public Function GetFieldList() As String()
        Dim result As ArrayList = New ArrayList()

        Dim fieldList() As Field = GetFields_()
        For Each field As Field In fieldList
            Call result.Add(field.name)
        Next

        Call result.Sort()

        GetFieldList = CType(result.ToArray(GetType(String)), String())
    End Function    ' GetFieldList


#Region "Properties"
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Category("Settings")> _
    <Description("Select Salesforce Connection Manager.")> _
    <Connection("ConnectionType")> _
    Public Property Connection() As String
        Get
            Connection = m_sforceConnection
        End Get
        Set(ByVal value As String)
            m_sforceConnection = value
        End Set
    End Property    ' Connection


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Category("Settings")> _
    <Description("Select lookup object.")> _
    <List("GetObjectList")> _
    <RefreshProperties(RefreshProperties.All)> _
    Public Property SalesforceObject() As String
        Get
            SalesforceObject = m_object
        End Get
        Set(ByVal value As String)
            If m_object <> value Then
                m_object = value

                m_fields = Nothing
                Me.KeyField = String.Empty
                Me.ValueField = String.Empty
            End If
        End Set
    End Property    ' SalesforceObject


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Category("Settings")> _
    <Description("Specify one or more key fields.")> _
    <List("GetFieldList", True, False)> _
    Public Property KeyField() As String
        Get
            KeyField = m_keyField
        End Get
        Set(ByVal value As String)
            If m_keyField <> value Then
                If Not String.IsNullOrEmpty(m_keyField) Then
                    ' Force external columns to be reloaded.
                    If Me.ComponentMetaData.InputCollection.Count > 0 Then
                        Dim input As IDTSInput100 = Me.ComponentMetaData.InputCollection(0)
                        Call input.ExternalMetadataColumnCollection.RemoveAll()
                    End If
                End If

                m_keyField = value
            End If
        End Set
    End Property    ' KeyField


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Category("Settings")> _
    <Description("Specify one or more lookup fields.")> _
    <List("GetFieldList", True, False)> _
    Public Property ValueField() As String
        Get
            ValueField = m_valueField
        End Get
        Set(ByVal value As String)
            If m_valueField <> value Then
                If Not String.IsNullOrEmpty(m_valueField) Then
                    ' Force output columns to be reloaded.
                    If Me.ComponentMetaData.OutputCollection.Count > 0 Then
                        Dim output As IDTSOutput100 = Me.ComponentMetaData.OutputCollection(0)
                        Call output.OutputColumnCollection.RemoveAll()
                    End If
                End If

                m_valueField = value
            End If
        End Set
    End Property    ' ValueField


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Category("Settings")> _
    <Description("Select whether memory cache is used.")> _
    <DefaultValue(True)> _
    Public Property UseCache() As Boolean
        Get
            UseCache = m_useCache
        End Get
        Set(ByVal value As Boolean)
            m_useCache = value
        End Set
    End Property    ' UseCache
#End Region ' Properties


#Region "Internals"
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Private ReadOnly Property ConnectionType() As String()
        Get
            ConnectionType = New String() {"SFORCE"}
        End Get
    End Property    ' ConnectionType


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


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Private Function FindField_( _
        ByVal fieldList() As Field, _
        ByVal name As String) As Field

        Dim result As Field = Nothing

        For Each field As Field In fieldList
            If field.name.Equals(name, StringComparison.OrdinalIgnoreCase) Then
                ' Found.
                result = field
                Exit For
            End If
        Next

        If result Is Nothing Then
            Throw New Exception(String.Format("'{0}' field not found.", name))
        End If

        FindField_ = result
    End Function    ' FindField_


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    ' Setups cache key based on specified key attributes.
    Private Function GetCacheKey_(ByVal row As InputBuffer) As String
        Dim result As String = String.Empty

        For Each idx As Integer In m_keyIdx
            Dim key As String = String.Empty
            If Not row.Buffer.IsNull(idx) Then
                key = row.Buffer(idx).ToString() + "_"
            End If

            result += key
        Next

        GetCacheKey_ = result
    End Function    ' GetCacheKey_


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    ' Uses SOQL to retrieve required lookup row.
    Private Function GetLookupRow_(ByVal row As InputBuffer) As String()
        Dim result() As String = Nothing

        ' Setup fetch conditions.
        Dim colsCount As Integer = m_keyIdx.Length
        Dim whereList() As Object = New Object(colsCount - 1) {}
        For colIndex As Integer = 0 To colsCount - 1
            Dim keyIndex As Integer = m_keyIdx(colIndex)

            Dim key As String = String.Empty

            If row.Buffer.IsNull(keyIndex) Then
                key = "NULL"
            Else
                Dim keyObj As Object = row.Buffer(keyIndex)
                If TypeOf keyObj Is String Then
                    key = String.Format("'{0}'", keyObj)
                Else
                    key = keyObj.ToString()
                End If
            End If

            whereList(colIndex) = key
        Next

        ' Query data.
        Dim record As sObject = Nothing
        Dim query As String = String.Format( _
            m_queryTemplate_1P, _
            String.Format(m_whereTemplate_P, whereList))
        Try
            Dim qr As QueryResult = m_service.query(query)
            If Not qr.records Is Nothing AndAlso qr.records.Length > 0 Then
                record = qr.records(0)
            End If
        Catch ex As Exception
            Call FireError_(ex.Message)
        End Try

        If Not record Is Nothing Then
            Dim fieldsCount As Integer = m_valueIdx.Length
            result = New String(fieldsCount - 1) {}
            For fieldIndex As Integer = 0 To fieldsCount - 1
                Dim fieldNode As XmlElement = record.Any(fieldIndex)
                result(fieldIndex) = fieldNode.InnerText
            Next
        End If

        GetLookupRow_ = result
    End Function    ' GetLookupRow_


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Private Function GetFields_() As Field()
        Dim result() As Field = m_fields

        If result Is Nothing Then
            Dim connection As ISforceConnection = CType( _
                Me.DesignConnections(Me.Connection).AcquireConnection(Nothing), _
                ISforceConnection)
            Dim service As SforceService = CType(connection.Connect(), SforceService)

            Try
                result = service.describeSObject(Me.SalesforceObject).fields
            Finally
                Call connection.Close()
            End Try

            m_fields = result
        End If

        GetFields_ = result
    End Function    ' GetFields_


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Private Sub SetupOutputColumns_()
        ' Get entity attributes.
        Dim fieldList() As Field = GetFields_()

        Dim valueList() As String = Me.ValueField.Split( _
            New String() {ListDelimiter}, _
            StringSplitOptions.None)

        Dim output As IDTSOutput100 = Me.ComponentMetaData.OutputCollection(0)

        For Each value As String In valueList
            ' Find Salesforce field.
            Dim field As Field = FindField_(fieldList, value)

            Dim dtsType As DataType
            Dim fieldLen, prec, scale, codePage As Integer
            Call GetDtsTypeFromField_(field, dtsType, fieldLen, prec, scale, codePage)

            ' Setup output column.
            Dim column As IDTSOutputColumn100 = output.OutputColumnCollection.[New]()
            column.Name = field.name
            Call column.SetDataTypeProperties( _
                dtsType, _
                fieldLen, _
                prec, _
                scale, _
                codePage)
        Next
    End Sub ' SetupOutputColumns_


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Private Sub GetDtsTypeFromField_( _
        ByVal field As Field, _
        ByRef DtsType As DataType, _
        ByRef fieldLen As Integer, _
        ByRef Precision As Integer, _
        ByRef Scale As Integer, _
        ByRef CodePage As Integer)

        fieldLen = field.length
        Precision = field.precision
        Scale = field.scale
        CodePage = 0

        Select Case field.soapType
            Case soapType.tnsID
                DtsType = DataType.DT_WSTR
            Case soapType.xsdbase64Binary
                DtsType = DataType.DT_IMAGE
            Case soapType.xsdboolean
                DtsType = DataType.DT_BOOL
            Case soapType.xsddouble
                DtsType = DataType.DT_NUMERIC
            Case soapType.xsdint
                DtsType = DataType.DT_BYREF_I4
            Case soapType.xsddate
                DtsType = DataType.DT_DBDATE
            Case soapType.xsddateTime
                DtsType = DataType.DT_DBTIMESTAMP
            Case soapType.xsdtime
                DtsType = DataType.DT_DBTIME
            Case soapType.xsdanyType
                DtsType = DataType.DT_WSTR

            Case soapType.xsdstring
                DtsType = DataType.DT_WSTR
                If fieldLen >= 4000 Then
                    ' DT_WSTR is limited to 4000.
                    DtsType = DataType.DT_NTEXT
                    fieldLen = 0
                End If

            Case Else
                Throw New Exception("Unhandled soap type.")
        End Select
    End Sub ' GetDtsTypeFromField_
#End Region ' Internals


#Region "Attributes"
    Private m_sforceConnection As String
    Private m_object As String
    Private m_keyField As String
    Private m_valueField As String
    Private m_useCache As Boolean

    Private m_connection As ISforceConnection
    Private m_service As SforceService
    Private m_cache As Hashtable
    Private m_queryTemplate_1P As String
    Private m_whereTemplate_P As String
    Private m_keyIdx() As Integer
    Private m_valueIdx() As Integer
    Private m_fields() As Field
    Private m_valueType() As DataType
#End Region ' Attributes

End Class   ' ScriptMain
]]></arrayElement><arrayElement dataType="System.String"><![CDATA[BufferWrapper.vb]]></arrayElement><arrayElement dataType="System.String"><![CDATA[UTF8]]></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, ByVal OutputMap As OutputNameMap)
        MyBase.New(Component, ObjectID, IsInput, Buffer, OutputMap)
    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_7cc118c3a5214cd89c7935519574d29f.vbproj]]></arrayElement><arrayElement dataType="System.String"><![CDATA[UTF16LE]]></arrayElement><arrayElement dataType="System.String"><![CDATA[<?xml version="1.0" encoding="utf-16"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <ProjectTypeGuids>{30D016F9-3734-4E33-A861-5E7D899E18F3};{F184B08F-C81C-45F6-A57F-5ABD9991F28F}</ProjectTypeGuids>
    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
    <ProductVersion>8.0.30703</ProductVersion>
    <SchemaVersion>2.0</SchemaVersion>
    <ProjectGuid>{F6F0D1F9-DEC6-4F4D-AAAA-EB4652DAE09F}</ProjectGuid>
    <OutputType>Library</OutputType>
    <AppDesignerFolder>My Project</AppDesignerFolder>
    <RootNamespace>ScriptComponent_22b4f911b2584ff4bfeab0b76184dee6</RootNamespace>
    <AssemblyName>ScriptComponent_22b4f911b2584ff4bfeab0b76184dee6</AssemblyName>
    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
    <FileAlignment>512</FileAlignment>
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
    <DebugSymbols>true</DebugSymbols>
    <DebugType>full</DebugType>
    <Optimize>false</Optimize>
    <OutputPath>.\bin\Debug\</OutputPath>
    <EnableUnmanagedDebugging>false</EnableUnmanagedDebugging>
    <DefineDebug>true</DefineDebug>
    <DefineTrace>true</DefineTrace>
    <ErrorReport>prompt</ErrorReport>
    <WarningLevel>4</WarningLevel>
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)' == 'Release' ">
    <DebugSymbols>false</DebugSymbols>
    <Optimize>true</Optimize>
    <OutputPath>.\bin\Release\</OutputPath>
    <EnableUnmanagedDebugging>false</EnableUnmanagedDebugging>
    <DefineDebug>false</DefineDebug>
    <DefineTrace>true</DefineTrace>
    <ErrorReport>prompt</ErrorReport>
    <WarningLevel>4</WarningLevel>
  </PropertyGroup>
  <!-- This sections specifies references for the project. -->
  <ItemGroup>
    <Reference Include="CozyRoc.SSISPlus.2016, Version=1.0.0.0, Culture=neutral, PublicKeyToken=16cf490bb80c34ea, processorArchitecture=MSIL">
      <SpecificVersion>False</SpecificVersion>
      <HintPath>C:\Program Files (x86)\Microsoft SQL Server\130\SDK\Assemblies\CozyRoc.SSISPlus.2016.dll</HintPath>
    </Reference>
    <Reference Include="System" />
    <Reference Include="System.Data" />
    <Reference Include="System.Windows.Forms" />
    <Reference Include="System.Xml" />
    <Reference Include="Microsoft.SqlServer.TxScript, Version=13.0.0.0, Culture=Neutral, PublicKeyToken=89845dcd8080cc91" />
    <Reference Include="Microsoft.SqlServer.DTSRuntimeWrap, Version=13.0.0.0, Culture=Neutral, PublicKeyToken=89845dcd8080cc91" />
    <Reference Include="Microsoft.SqlServer.DTSPipelineWrap, Version=13.0.0.0, Culture=Neutral, PublicKeyToken=89845dcd8080cc91" />
    <Reference Include="Microsoft.SqlServer.PipelineHost, Version=13.0.0.0, Culture=Neutral, PublicKeyToken=89845dcd8080cc91" />
    <Reference Include="System" />
    <Reference Include="System.Data" />
    <Reference Include="Microsoft.SqlServer.ManagedDTS" />
    <Reference Include="CozyRoc.Sforce" />
    <Reference Include="System.Web.Services" />
    <Reference Include="System.Xml" />
  </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>
  <ItemGroup>
    <AppDesigner Include="My Project\" />
  </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="{30D016F9-3734-4E33-A861-5E7D899E18F3}">
        <ProjectProperties HostName="VSTAHostName" HostPackage="{B3A685AA-7EAF-4BC6-9940-57959FA5AC07}" ApplicationType="usd" Language="vb" TemplatesPath="" />
        <Host Name="SSIS_SC110" />
        <ProjectClient>
          <HostIdentifier>SSIS_SC130</HostIdentifier>
        </ProjectClient>
      </FlavorProperties>
    </VisualStudio>
  </ProjectExtensions>
  <ItemGroup>
    <Compile Include="ScriptMain.vb" />
    <Compile Include="BufferWrapper.vb" />
    <Compile Include="ComponentWrapper.vb" />
  </ItemGroup>
  <ItemGroup>
    <Folder Include="My Project\" />
  </ItemGroup>
  <PropertyGroup>
    <OptionCompare>Binary</OptionCompare>
  </PropertyGroup>
  <PropertyGroup>
    <OptionExplicit>On</OptionExplicit>
  </PropertyGroup>
  <PropertyGroup>
    <OptionStrict>On</OptionStrict>
  </PropertyGroup>
</Project>]]></arrayElement><arrayElement dataType="System.String"><![CDATA[ComponentWrapper.vb]]></arrayElement><arrayElement dataType="System.String"><![CDATA[UTF8]]></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 InputName As String, ByVal Buffer As PipelineBuffer, ByVal OutputMap As OutputNameMap)

        If InputID = MyBase.ComponentMetaData.InputCollection("Input").ID Then
            Input_ProcessInput(New InputBuffer(Me, InputID, True, Buffer, OutputMap))
        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 Connection() As IDTSConnectionManager100
        Get
            Return ParentComponent.ComponentMetaData.RuntimeConnectionCollection("Connection").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[Project]]></arrayElement><arrayElement dataType="System.String"><![CDATA[UTF16LE]]></arrayElement><arrayElement dataType="System.String"><![CDATA[<?xml version="1.0" encoding="UTF-16" standalone="yes"?>
<c:Project xmlns:c="http://schemas.microsoft.com/codeprojectml/2010/08/main" xmlns:msb="http://schemas.microsoft.com/developer/msbuild/2003" runtimeVersion="4.0" schemaVersion="1.0">
	<msb:PropertyGroup>
		<msb:NoContent>Reference;Import;Folder</msb:NoContent>
		<msb:ProjectId>{70C93B9B-224D-4F8C-9896-F921F279AD48}</msb:ProjectId>
		<msb:CodeName>ScriptComponent_7cc118c3a5214cd89c7935519574d29f</msb:CodeName>
		<msb:Language>msBuild</msb:Language>
		<msb:DisplayName>ScriptComponent_7cc118c3a5214cd89c7935519574d29f</msb:DisplayName>
	</msb:PropertyGroup>
	<msb:ItemGroup>
		<msb:Folder Include="My Project\"/>
		<msb:File Include="ComponentWrapper.vb"/>
		<msb:File Include="ScriptMain.vb"/>
		<msb:File Include="BufferWrapper.vb"/>
		<msb:Project Include="ScriptComponent_7cc118c3a5214cd89c7935519574d29f.vbproj"/>
	</msb:ItemGroup>
</c:Project>]]></arrayElement></arrayElements></property><property id="22" name="BinaryCode" state="cdata" dataType="System.String" isArray="true" description="Stores the binary representation of the component" typeConverter="NOTBROWSABLE"><arrayElements arrayElementCount="2"><arrayElement dataType="System.String"><![CDATA[ScriptComponent_22b4f911b2584ff4bfeab0b76184dee6.dll]]></arrayElement><arrayElement dataType="System.String"><![CDATA[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
VgwAAAUAeQsAAAEAXwIAAAIAZwUAAAMAVgwAAAQAeQsAAAEAVgwAAAEAihEAAAEAqxAAAAEAqxAA
AAEAaQsAAAEAiAQAAAEAiAQJAFMNAQARAFMNBgAZAFMNCgApAFMNEAAxAFMNBgA5AFMNFQBBAFMN
EABJAFMNBgBRAFMNGwDpAFMNEADxAFMNEAD5AFMNEAABAVMNEAARAVMNIAABAVMNJwAZAVMNGwBR
AVMNLgBhAVMNNAB5AVMNBgCBAVMNBgCJAVMNBgCZAVMNOwCpAVMNGwC5AVMNEABpAMkOUwBpALoJ
WABpAMMJYAApAYQDZgDBAcwKbADJAboJcgDZAfAReAAhASoMfQAxAacJAQDhAXoFgwAxAcMJigDh
AdQIkADxATkNlgCBAH0KnAD5AboJogCpAFUFqADZAY8PrADxAScNswApAXoIBgBJASQLWABZAOsP
zABpAFMNBgDBAbgK0AABAroJ1gCRAGMK3AAJArUQ4gAJAroJ5gBBAaMQ7AARAnMM8gCRACoM4gCZ
AP0B4gAZAgsC+ACRAD4K/gCZACEC4gAhAmcCBAHZAYgPCgGhAFUFqADRAfMIqADZAYgPEAH5AbUQ
4gDZAfgRFwGpAP0B4gCpAMYFGgHZAY8PHwEpAYUIBgBZACwGBgApAlMNEADZAf8PMgGRAMkDPAGJ
AFMNEADBAZgKQAE5AroJRgFBAj4CEACJALkEqABBAW8DBgABArUQ4gAhAtgDGwAJAmEJBgAhAmEJ
BgAhAmwRYQFxAHEFqAChAF4FEAChANMFZgGhAPwIAQChAAQKAQChAAUFAQChAKwEAQCxAFMNBgBB
ARQPfQFJAroJgwFRAiQLWABZAhIJigFhAlYPkAG5ACMFPAG5AHEFqACxAMUDlgGxAOQQBgChAUMF
mwGxANoRpAF5AuUIvgHJAbUQ4gD5AWEJBgDBAR0NzgHZAcIO5gHZAY8P7gExAaAJ/gExAboJAwLB
APMIqACJAqUIIwLZAY8PKAJhAOoRLwLRAIcNNQLJAOIROwLZAFQRqABZApYPTgKRAnwNVQL5AWwR
bwKpAF4FEACpAG4OdAJxAAcJ4gBxABIK4gBxAA8F4gBxAP8FgwIhAVMNiAKZAoYRPAGZAvMPPAFB
AVMNBgCRAPYB4gDBAFMNBgBBAl0MlwJpAVMNBgBxAVMNBgAUAHgEpAIcAHgEpAIkAHgEpAIsAHgE
pAIUAFMNBgAcAFMNBgAkAFMNBgAsAFMNBgDBAMIOUwDBAKAE4gChAmkExwI8AGIR3gJEAJEIpAJE
AJsI9wJEAFMNBgAOAAQAIQMOAAgAXAMpAFMApwUpAFsAtQUpAGMA4AUuAAsATwQuABMAWAQuABsA
dwQuACMAgARDACsAzgRDADMA3ARDADsAHgVDAEMAzgRDAEsAyARJAFMApwVJAFsA9AVJAGsADwZJ
AHMA0wRjAEsAyARpAFMApwVpAFsAIgZpAHsARwaDAEsAyASJAFMApwWJAFsAWwaJAHsARwapAFMA
pwWpAFsAgwapAIMArQbjAIsALAXjAJMA0wQDAYsALAUDAZMA0wQjAaMAzgQjAasAzgQjAYsALAVD
AZMA0wRDAbMARQVJAcMAswZjAZMA0wRjAbsAyARpAcMAxAaJAcMA2AapAcMA5QaABEsAyATABEsA
yAQABZsAzgQABZMA0wQgBZsAzgRABZsAzgRgBZsAzgSABZsAzgTABZMA0wTABZsAzgTgBZMA0wTg
BZsAzgQABpMA0wQABpsAzgQgBpMA0wQgBpsAzgRABpsAzgRgBpsAzgSABpsAzgSABpMA0wSgBpsA
zgTABpsAzgTABpMA0wRDALcAJwFNAWwBrQG6AcUByQHZAfQBCAJBAlsCfgK/AtICAgABAAMABwAF
AAkACQAKAAsADgAAACsLIgQAAL8PIgQAAB8EIgQAAPYDIgQAAOkEJgQAAPAFKgQAANYOKgQAAO0O
KgQAACsLLwQAABQNNQQAADIKOgQAAPIMPwQAAMMNRQQAAHwESgQCAAkAAwABAAoAAwACAAsABQAB
AAwABQACAA0ABwABAA4ABwACAA8ACQABABAACQACABEACwABABIACwACABMADQACABwADwACAB0A
EQACACUAEwACACkAFQACACoAFwACACsAGQACACwAGwACADUAHQBdAJ0CqQKwArgCxALXAucC7wIE
gAAAAAAAAAAAAAAAAAAAAAC8AQAABAAAAAAAAAAAAAAA/QKmAwAAAAABAAAAAAAAAAAAAAAGA6YB
AAAAAA0AAAAAAAAAAAAAAA8DvxAAAAAAAQAAAAAAAAAAAAAABgORBAAAAAANAAAAAAAAAAAAAAAP
A4MLAAAAAA0AAAAAAAAAAAAAAA8DpgsAAAAABAAAAAAAAAAAAAAA/QKvCQAAAAAEAAAAAAAAAAAA
AAD9AswJAAAAAA0AAAAAAAAAAAAAAA8DGBEAAAAACgAAAAAAAAAAAAAAGAOvAwAAAAANAAAAAAAA
AAAAAAAPA8ICAAAAAAoACQALAAkAAAAQABYA4QIAABAAZQDhAgAAAABnAOECJwHNAicB8gIAAABJ
RFRTQ29tcG9uZW50TWV0YURhdGExMDAASURUU0V4dGVybmFsTWV0YWRhdGFDb2x1bW4xMDAASURU
U0lucHV0Q29sdW1uMTAwAElEVFNPdXRwdXRDb2x1bW4xMDAASURUU0V4dGVybmFsTWV0YWRhdGFD
b2x1bW5Db2xsZWN0aW9uMTAwAElEVFNJbnB1dENvbHVtbkNvbGxlY3Rpb24xMDAASURUU091dHB1
dENvbHVtbkNvbGxlY3Rpb24xMDAASURUU1J1bnRpbWVDb25uZWN0aW9uQ29sbGVjdGlvbjEwMABJ
RFRTSW5wdXRDb2xsZWN0aW9uMTAwAElEVFNPdXRwdXRDb2xsZWN0aW9uMTAwAElEVFNSdW50aW1l
Q29ubmVjdGlvbjEwMABJRFRTQ29ubmVjdGlvbk1hbmFnZXIxMDAASURUU0J1ZmZlck1hbmFnZXIx
MDAASURUU0lucHV0MTAwAElEVFNPdXRwdXQxMDAAQ29udGV4dFZhbHVlYDEAVGhyZWFkU2FmZU9i
amVjdFByb3ZpZGVyYDEASW50MzIAQ296eVJvYy5TU0lTUGx1cy4yMDE2AFNjcmlwdENvbXBvbmVu
dF8yMmI0ZjkxMWIyNTg0ZmY0YmZlYWIwYjc2MTg0ZGVlNgA8TW9kdWxlPgBnZXRfSUQAZ2V0X0xp
bmVhZ2VJRABGaW5kQ29sdW1uQnlMaW5lYWdlSUQAZ2V0X0V4dGVybmFsTWV0YWRhdGFDb2x1bW5J
RABzZXRfQ29ubmVjdGlvbk1hbmFnZXJJRABPYmplY3RJRABJbnB1dElEAEdldE9iamVjdEJ5SUQA
bV9xdWVyeVRlbXBsYXRlXzFQAFF1ZXJ5VGVtcGxhdGVfM1AAbV93aGVyZVRlbXBsYXRlX1AAQ296
eVJvYy5TcWxTZXJ2ZXIuU1NJUwBNaWNyb3NvZnQuU3FsU2VydmVyLk1hbmFnZWREVFMAVABEaXNw
b3NlX19JbnN0YW5jZV9fAENyZWF0ZV9fSW5zdGFuY2VfXwBGaW5kRmllbGRfAEdldER0c1R5cGVG
cm9tRmllbGRfAEZpcmVFcnJvcl8AR2V0RmllbGRzXwBTZXR1cE91dHB1dENvbHVtbnNfAEdldExv
b2t1cFJvd18AR2V0Q2FjaGVLZXlfAFJlaW5pdGlhbGl6ZU1ldGFEYXRhAGdldF9Db21wb25lbnRN
ZXRhRGF0YQBQcm9qZWN0RGF0YQBtc2NvcmxpYgBNaWNyb3NvZnQuVmlzdWFsQmFzaWMAQWRkAGdl
dF9Jc0F0dGFjaGVkAHNldF9Jc1VzZWQAZ2V0X1ZhbHVlRmllbGQAc2V0X1ZhbHVlRmllbGQAbV92
YWx1ZUZpZWxkAGdldF9LZXlGaWVsZABzZXRfS2V5RmllbGQAbV9rZXlGaWVsZABmaWVsZABDb3p5
Um9jLlNmb3JjZS5TZXJ2aWNlAF9TZm9yY2VTZXJ2aWNlAG1fc2VydmljZQBDcmVhdGVJbnN0YW5j
ZQBnZXRfR2V0SW5zdGFuY2UAaW5zdGFuY2UAQ296eVJvYy5TZm9yY2UAR2V0SGFzaENvZGUAc2V0
X0NvZGVQYWdlAGdldF9NZXNzYWdlAGVyck1lc3NhZ2UAbWVzc2FnZQBnZXRfVXNlQ2FjaGUAc2V0
X1VzZUNhY2hlAG1fdXNlQ2FjaGUAbV9jYWNoZQBzZXRfU2NhbGUAZ2V0X3NjYWxlAEhhc2h0YWJs
ZQBnZXRfcXVlcnlhYmxlAFJ1bnRpbWVUeXBlSGFuZGxlAEdldFR5cGVGcm9tSGFuZGxlAGdldF9O
YW1lAHNldF9OYW1lAElucHV0TmFtZQBnZXRfbmFtZQBUb0RhdGVUaW1lAE1pY3Jvc29mdC5TcWxT
ZXJ2ZXIuRHRzLlJ1bnRpbWUATWljcm9zb2Z0LlNxbFNlcnZlci5EdHMuUGlwZWxpbmUAZ2V0X0Rh
dGFUeXBlAHNldF9EYXRhVHlwZQBtX3ZhbHVlVHlwZQBnZXRfQ29ubmVjdGlvblR5cGUAZ2V0X3Nv
YXBUeXBlAER0c1R5cGUAR2V0VHlwZQBBcHBsaWNhdGlvbkJhc2UAQ2xvc2UAVmFsaWRhdGUARWRp
dG9yQnJvd3NhYmxlU3RhdGUASGVscEtleXdvcmRBdHRyaWJ1dGUAR2VuZXJhdGVkQ29kZUF0dHJp
YnV0ZQBEZWJ1Z2dhYmxlQXR0cmlidXRlAEVkaXRvckJyb3dzYWJsZUF0dHJpYnV0ZQBDb21WaXNp
YmxlQXR0cmlidXRlAFN0YW5kYXJkTW9kdWxlQXR0cmlidXRlAEhpZGVNb2R1bGVOYW1lQXR0cmli
dXRlAERlZmF1bHRWYWx1ZUF0dHJpYnV0ZQBUYXJnZXRGcmFtZXdvcmtBdHRyaWJ1dGUARGVidWdn
ZXJIaWRkZW5BdHRyaWJ1dGUATXlHcm91cENvbGxlY3Rpb25BdHRyaWJ1dGUAQ29ubmVjdGlvbkF0
dHJpYnV0ZQBEZXNjcmlwdGlvbkF0dHJpYnV0ZQBWYWxpZGF0ZVByb3BlcnRpZXNBdHRyaWJ1dGUA
UmVmcmVzaFByb3BlcnRpZXNBdHRyaWJ1dGUAU29ydFByb3BlcnRpZXNBdHRyaWJ1dGUAQ29sdW1u
TWFwcGluZ3NBdHRyaWJ1dGUAQ29tcGlsYXRpb25SZWxheGF0aW9uc0F0dHJpYnV0ZQBDTFNDb21w
bGlhbnRBdHRyaWJ1dGUAU1NJU1NjcmlwdENvbXBvbmVudEVudHJ5UG9pbnRBdHRyaWJ1dGUATGlz
dEF0dHJpYnV0ZQBDYXRlZ29yeUF0dHJpYnV0ZQBSdW50aW1lQ29tcGF0aWJpbGl0eUF0dHJpYnV0
ZQBQcmVFeGVjdXRlAFBvc3RFeGVjdXRlAGdldF9WYWx1ZQBzZXRfVmFsdWUAR2V0T2JqZWN0VmFs
dWUAdmFsdWUAU3lzdGVtLlJ1bnRpbWUuVmVyc2lvbmluZwBGcm9tQmFzZTY0U3RyaW5nAENvbXBh
cmVTdHJpbmcAVG9TdHJpbmcAc2V0X0xlbmd0aABnZXRfbGVuZ3RoAGRlc2NyaWJlR2xvYmFsAE1p
Y3Jvc29mdC5WaXN1YWxCYXNpYy5NeVNlcnZpY2VzLkludGVybmFsAFN5c3RlbS5Db21wb25lbnRN
b2RlbABSZW1vdmVBbGwAU2NyaXB0Q29tcG9uZW50XzIyYjRmOTExYjI1ODRmZjRiZmVhYjBiNzYx
ODRkZWU2LmRsbABJc051bGwAU2V0TnVsbABTeXN0ZW0uWG1sAGdldF9JdGVtAHNldF9JdGVtAFN5
c3RlbQBmaWVsZExlbgBTeXN0ZW0uQ29tcG9uZW50TW9kZWwuRGVzaWduAFNjcmlwdE1haW4Ac2V0
X1ByZWNpc2lvbgBnZXRfcHJlY2lzaW9uAGdldF9BcHBsaWNhdGlvbgBNeUFwcGxpY2F0aW9uAGdl
dF9FeHRlcm5hbE1ldGFkYXRhQ29sdW1uQ29sbGVjdGlvbgBnZXRfSW5wdXRDb2x1bW5Db2xsZWN0
aW9uAGdldF9PdXRwdXRDb2x1bW5Db2xsZWN0aW9uAGdldF9SdW50aW1lQ29ubmVjdGlvbkNvbGxl
Y3Rpb24AZ2V0X0lucHV0Q29sbGVjdGlvbgBnZXRfT3V0cHV0Q29sbGVjdGlvbgBnZXRfQ29ubmVj
dGlvbgBzZXRfQ29ubmVjdGlvbgBJU2ZvcmNlQ29ubmVjdGlvbgBtX3Nmb3JjZUNvbm5lY3Rpb24A
QWNxdWlyZUNvbm5lY3Rpb24AbV9jb25uZWN0aW9uAEFwcGxpY2F0aW9uRXhjZXB0aW9uAFN0cmlu
Z0NvbXBhcmlzb24AbwBPdXRwdXROYW1lTWFwAE91dHB1dE1hcABNaWNyb3NvZnQuU3FsU2VydmVy
LkRUU1J1bnRpbWVXcmFwAE1pY3Jvc29mdC5TcWxTZXJ2ZXIuRFRTUGlwZWxpbmVXcmFwAG1fQXBw
T2JqZWN0UHJvdmlkZXIAbV9Vc2VyT2JqZWN0UHJvdmlkZXIAbV9Db21wdXRlck9iamVjdFByb3Zp
ZGVyAG1fTXlXZWJTZXJ2aWNlc09iamVjdFByb3ZpZGVyAGdldF9CdWZmZXIAUGlwZWxpbmVCdWZm
ZXIAU2NyaXB0QnVmZmVyAElucHV0QnVmZmVyAGdldF9Db25uZWN0aW9uTWFuYWdlcgBnZXRfQnVm
ZmVyTWFuYWdlcgBTeXN0ZW0uQ29kZURvbS5Db21waWxlcgBNaWNyb3NvZnQuU3FsU2VydmVyLkR0
cy5SdW50aW1lLldyYXBwZXIATWljcm9zb2Z0LlNxbFNlcnZlci5EdHMuUGlwZWxpbmUuV3JhcHBl
cgBnZXRfVXNlcgBMaXN0RGVsaW1pdGVyAGdldF9Db21wdXRlcgBNeUNvbXB1dGVyAEZpcmVFcnJv
cgBDbGVhclByb2plY3RFcnJvcgBTZXRQcm9qZWN0RXJyb3IAQWN0aXZhdG9yAC5jdG9yAC5jY3Rv
cgBTeXN0ZW0uRGlhZ25vc3RpY3MAbV9maWVsZHMAZ2V0X2ZpZWxkcwBnZXRfcmVjb3JkcwBNaWNy
b3NvZnQuVmlzdWFsQmFzaWMuRGV2aWNlcwBnZXRfV2ViU2VydmljZXMATXlXZWJTZXJ2aWNlcwBN
aWNyb3NvZnQuVmlzdWFsQmFzaWMuQXBwbGljYXRpb25TZXJ2aWNlcwBTeXN0ZW0uUnVudGltZS5J
bnRlcm9wU2VydmljZXMATWljcm9zb2Z0LlZpc3VhbEJhc2ljLkNvbXBpbGVyU2VydmljZXMAU3lz
dGVtLlJ1bnRpbWUuQ29tcGlsZXJTZXJ2aWNlcwBEZWJ1Z2dpbmdNb2RlcwBTZXREYXRhVHlwZVBy
b3BlcnRpZXMAUmVmcmVzaFByb3BlcnRpZXMAVmFyaWFibGVzAENvenlSb2MuU3FsU2VydmVyLlNT
SVMuQXR0cmlidXRlcwBFcXVhbHMAQ29udGFpbnMAZ2V0X1N0YXRpY0lucHV0Q29sdW1ucwBnZXRf
U3RhdGljT3V0cHV0Q29sdW1ucwBTeXN0ZW0uQ29sbGVjdGlvbnMAZ2V0X0Rlc2lnbkNvbm5lY3Rp
b25zAFN0cmluZ1NwbGl0T3B0aW9ucwBSdW50aW1lSGVscGVycwBPcGVyYXRvcnMAZ2V0X3NvYmpl
Y3RzAFNjcmlwdEJ1ZmZlclBsdXMAU2NyaXB0Q29tcG9uZW50UGx1cwBDb25jYXQARm9ybWF0AGRl
c2NyaWJlU09iamVjdABnZXRfU2FsZXNmb3JjZU9iamVjdABzZXRfU2FsZXNmb3JjZU9iamVjdABz
T2JqZWN0AG1fb2JqZWN0AE15UHJvamVjdABDb25uZWN0AEVuZE9mUm93c2V0AFNwbGl0AERlc2Ny
aWJlR2xvYmFsUmVzdWx0AERlc2NyaWJlU09iamVjdFJlc3VsdABEZXNjcmliZUdsb2JhbFNPYmpl
Y3RSZXN1bHQAUXVlcnlSZXN1bHQAWG1sRWxlbWVudABQaXBlbGluZUNvbXBvbmVudABVc2VyQ29t
cG9uZW50AFBhcmVudENvbXBvbmVudABTY3JpcHRDb21wb25lbnQAZ2V0X0hvc3RDb21wb25lbnQA
Z2V0X0NvdW50AE1pY3Jvc29mdC5TcWxTZXJ2ZXIuVHhTY3JpcHQAQ29udmVydABTb3J0AEdldEZp
ZWxkTGlzdABmaWVsZExpc3QAR2V0T2JqZWN0TGlzdABBcnJheUxpc3QATWljcm9zb2Z0LlNxbFNl
cnZlci5QaXBlbGluZUhvc3QASXNJbnB1dABJbnB1dF9Qcm9jZXNzSW5wdXQAZ2V0X0lubmVyVGV4
dABtX0NvbnRleHQATmV3AElucHV0X1Byb2Nlc3NJbnB1dFJvdwBOZXh0Um93AHJvdwBtX3ZhbHVl
SWR4AG1fa2V5SWR4AFNjcmlwdENvbXBvbmVudF8yMmI0ZjkxMWIyNTg0ZmY0YmZlYWIwYjc2MTg0
ZGVlNi5NeQBUb0FycmF5AGdldF9BbnkAcXVlcnkASXNOdWxsT3JFbXB0eQAAAABTRgBhAGkAbABl
AGQAIAB0AG8AIABwAHIAbwBjAGUAcwBzACAAJwB7ADAAfQAnACAAZgBvAHIAIABjAG8AbAB1AG0A
bgAgACcAewAxAH0AJwAuAAELIABBAE4ARAAgAAATewAwAH0AIAA9ACAAewAxAH0AAAN7AAADfQAA
BSwAIAAAO3MAZQBsAGUAYwB0ACAAewAwAH0AIABmAHIAbwBtACAAewAxAH0AIAB3AGgAZQByAGUA
IAB7ADIAfQAAB3sAMAB9AAA7UwBlAGwAZQBjAHQAIABTAGEAbABlAHMAZgBvAHIAYwBlACAAYwBv
AG4AbgBlAGMAdABpAG8AbgAuAAAdUwBlAGwAZQBjAHQAIABvAGIAagBlAGMAdAAuAAArUwBwAGUA
YwBpAGYAeQAgAGsAZQB5ACAAZgBpAGUAbABkACgAcwApAC4AACdTAGUAbABlAGMAdAAgAHYAYQBs
AHUAZQAgAGYAaQBlAGwAZAAuAAAFLAAKAAAlTQBhAHAAIABpAG4AcAB1AHQAIABjAG8AbAB1AG0A
bgBzAC4AABVDAG8AbgBuAGUAYwB0AGkAbwBuAAAVTgBvACAAaQBuAHAAdQB0AHMALgAANUsAZQB5
ACAAZgBpAGUAbABkACgAcwApACAAbgBvAHQAIABzAGUAbABlAGMAdABlAGQALgAADVMARgBPAFIA
QwBFAAAjUwBhAGwAZQBzAGYAbwByAGMAZQAgAEwAbwBvAGsAdQBwAAAtJwB7ADAAfQAnACAAZgBp
AGUAbABkACAAbgBvAHQAIABmAG8AdQBuAGQALgABA18AAAlOAFUATABMAAALJwB7ADAAfQAnAAEp
VQBuAGgAYQBuAGQAbABlAGQAIABzAG8AYQBwACAAdAB5AHAAZQAuAAALSQBuAHAAdQB0AAAAy+Ad
U4Z5SUe19cshuopSvgAEIAEBCAMgAAEFIAEBEREEIAEBDgUgAQEdDgQgAQECBiABARGAhQYgAwEO
AgIFIAIBDg4GIAEBEYCtByAEAQ4ODg4PBwkdDg4SQQgIDggRPRJFBCABAhwEIAEcHAIdDgUgAgEc
HAUgABKA4QUgABKA5QUgARJBHAQAAQIOBSAAEoCZBgABEYD1DgUgAgEIHAUAAR0FDgUAAQESRQUg
ABKA/QUgARJVHAMgAA4GAAMODhwcAwAAARQHDBJJCBJBDggIEk0SURAOCAgSVQMgABwFIAASgQEF
IAESSRwFIAASgQUDIAAIBSABEk0cBSAAEoEJBSAAEoENBSACCAgIBSAAEoERBSABElEIBQACDg4O
BgADDg4ODgIGDgQgABE9BwAEDg4cHBwKBwUCAh0OEkkSRQkgAh0OHQ4RgRkDIAACBSAAEoEdBiAB
EoEhHBMHCx0SORJJHQ4IDhI5ET0ICAgIBCAAElEFIAEBET0QBwcdDhJZEi0SMR0SXQgSXQUgABKB
JQYgARKBKRwFIAASgTEFIAAdEl0EIAEIHAgAARKA0RGBNQggARKBORKA0QwHBR0OElkdEjkIEjkD
BwEOBgADCA4OAgMHAQIEBwEdDgogBgEIDg4OCBACDAcFEjkSOR0SOQgSOQcgAgIOEYFBBQACDg4c
CQcGDg4dCAgIDgQgAQIIBCABHAgaBxEdDh0OCB0cEmUOCAgIDhwSaRJFCAgIEm0EAAEcHAYAAg4O
HRwFIAESaQ4FIAAdEmUFIAAdEm0MBwQdEjkdEjkSLRIxBiABEoFJDgUgAB0SORMHCx0SORJBHQ4I
DhI5ET0ICAgIBCAAElUJIAUBET0ICAgIBAcBEXEEIAARcQ4gBQESgJUIAhKAmRKAnQUgABKApQYV
EiwBEiAEIAATAAYVEiwBEhwHFRIsARKAyQYVEiwBEigEBwEeAAIeAAUQAQAeAAQKAR4ABAcBEwAG
FRIsARMACAYVEoDZARMABxUSgNkBEwACEwAECgETAAUgAQETAAi3elxWGTTgiQgWz0kLuAw06giJ
hF3NgIDMkQiwP19/EdUKOjpzAGUAbABlAGMAdAAgAHsAMAB9ACAAZgByAG8AbQAgAHsAMQB9ACAA
dwBoAGUAcgBlACAAewAyAH0ABCwACgACBgIDBhItAwYSMQMGEjUDBh0IBAYdEjkEBh0RPQMGEhQD
BhIYBAYSgJUHBhUSLAESIAcGFRIsARIcCAYVEiwBEoDJBwYVEiwBEigFIAEBEgwFIAECEA4EIAAd
DgggAhI5HRI5DgUgAQ4SDAYgAR0OEgwQIAYBEjkQET0QCBAIEAgQCAsgBAEIDhKAmRKAnQYgAQES
gJUEAAASIAQAABIcBQAAEoDJBAAAEigFIAASgNEHEAEBHgAeAAcwAQEBEB4AAygADgMoAAIEKAAd
DgUoABKApQQIABIgBAgAEhwFCAASgMkECAASKAQoABMACAEACAAAAAAAHgEAAQBUAhZXcmFwTm9u
RXhjZXB0aW9uVGhyb3dzAQgBAAIAAAAAAEcBABouTkVURnJhbWV3b3JrLFZlcnNpb249djQuMAEA
VA4URnJhbWV3b3JrRGlzcGxheU5hbWUQLk5FVCBGcmFtZXdvcmsgNAUBAAAAAAQBAAAACAEAAQAA
AAAAQQEABQAAAApDb25uZWN0aW9uEFNhbGVzZm9yY2VPYmplY3QIS2V5RmllbGQKVmFsdWVGaWVs
ZAhVc2VDYWNoZQAADQEACFZhbGlkYXRlAAAYAQAKTXlUZW1wbGF0ZQgxMS4wLjAuMAAAYQEANFN5
c3RlbS5XZWIuU2VydmljZXMuUHJvdG9jb2xzLlNvYXBIdHRwQ2xpZW50UHJvdG9jb2wSQ3JlYXRl
X19JbnN0YW5jZV9fE0Rpc3Bvc2VfX0luc3RhbmNlX18AAAANAQAIU2V0dGluZ3MAACoBACVTZWxl
Y3QgU2FsZXNmb3JjZSBDb25uZWN0aW9uIE1hbmFnZXIuAAATAQAOQ29ubmVjdGlvblR5cGUAABoB
ABVTZWxlY3QgbG9va3VwIG9iamVjdC4AABIBAA1HZXRPYmplY3RMaXN0AAAkAQAfU3BlY2lmeSBv
bmUgb3IgbW9yZSBrZXkgZmllbGRzLgAAEwEADEdldEZpZWxkTGlzdAEAAAAnAQAiU3BlY2lmeSBv
bmUgb3IgbW9yZSBsb29rdXAgZmllbGRzLgAAKQEAJFNlbGVjdCB3aGV0aGVyIG1lbW9yeSBjYWNo
ZSBpcyB1c2VkLgAABQEAAQAAEAEAC015LkNvbXB1dGVyAAATAQAOTXkuQXBwbGljYXRpb24AAAwB
AAdNeS5Vc2VyAAATAQAOTXkuV2ViU2VydmljZXMAAAAAAGhaAAAAAAAAAAAAAIJaAAAAIAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAB0WgAAAAAAAAAAAAAAAF9Db3JEbGxNYWluAG1zY29yZWUuZGxsAAAA
AAD/JQAgABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAEAAAABgAAIAAAAAAAAAA
AAAAAAAAAAEAAQAAADAAAIAAAAAAAAAAAAAAAAAAAAEAAAAAAEgAAABYYAAA7AIAAAAAAAAAAAAA
7AI0AAAAVgBTAF8AVgBFAFIAUwBJAE8ATgBfAEkATgBGAE8AAAAAAL0E7/4AAAEAAAAAAAAAAAAA
AAAAAAAAAD8AAAAAAAAABAAAAAIAAAAAAAAAAAAAAAAAAABEAAAAAQBWAGEAcgBGAGkAbABlAEkA
bgBmAG8AAAAAACQABAAAAFQAcgBhAG4AcwBsAGEAdABpAG8AbgAAAAAAAACwBEwCAAABAFMAdABy
AGkAbgBnAEYAaQBsAGUASQBuAGYAbwAAACgCAAABADAAMAAwADAAMAA0AGIAMAAAACwAAgABAEYA
aQBsAGUARABlAHMAYwByAGkAcAB0AGkAbwBuAAAAAAAgAAAAMAAIAAEARgBpAGwAZQBWAGUAcgBz
AGkAbwBuAAAAAAAwAC4AMAAuADAALgAwAAAAigA1AAEASQBuAHQAZQByAG4AYQBsAE4AYQBtAGUA
AABTAGMAcgBpAHAAdABDAG8AbQBwAG8AbgBlAG4AdABfADIAMgBiADQAZgA5ADEAMQBiADIANQA4
ADQAZgBmADQAYgBmAGUAYQBiADAAYgA3ADYAMQA4ADQAZABlAGUANgAuAGQAbABsAAAAAAAoAAIA
AQBMAGUAZwBhAGwAQwBvAHAAeQByAGkAZwBoAHQAAAAgAAAAkgA1AAEATwByAGkAZwBpAG4AYQBs
AEYAaQBsAGUAbgBhAG0AZQAAAFMAYwByAGkAcAB0AEMAbwBtAHAAbwBuAGUAbgB0AF8AMgAyAGIA
NABmADkAMQAxAGIAMgA1ADgANABmAGYANABiAGYAZQBhAGIAMABiADcANgAxADgANABkAGUAZQA2
AC4AZABsAGwAAAAAADQACAABAFAAcgBvAGQAdQBjAHQAVgBlAHIAcwBpAG8AbgAAADAALgAwAC4A
MAAuADAAAAA4AAgAAQBBAHMAcwBlAG0AYgBsAHkAIABWAGUAcgBzAGkAbwBuAAAAMAAuADAALgAw
AC4AMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAwAAACUOgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=]]></arrayElement></arrayElements></property><property id="27" name="UserComponentTypeName" dataType="System.String">CozyRoc.ScriptComponentHostPlus</property><property id="29" name="VSTAProjectName" dataType="System.String" description="Specifies the name of the Microsoft Visual Studio Tools for Applications project. Project names must be unique within a package." typeConverter="NOTBROWSABLE">ScriptComponent_7cc118c3a5214cd89c7935519574d29f</property><property id="30" name="ScriptLanguage" dataType="System.String" description="Specifies the programming language used by the script." typeConverter="Microsoft.SqlServer.VSTAHosting.ScriptingLanguages, Microsoft.SqlServer.VSTAScriptingLib, Version=12.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91">VisualBasic</property></properties><connections><connection id="33" name="Connection" connectionManagerID="{4b12e58d-880a-431c-8e51-3579b0be4cab}" /></connections><inputs><input id="34" name="Input" hasSideEffects="true"><externalMetadataColumns isUsed="True" /></input></inputs><outputs><output id="37" name="Output" synchronousInputId="34"><externalMetadataColumns /></output></outputs></component>