<component id="2" name="Script Component" 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="3" name="SourceCode" state="cdata" dataType="System.String" isArray="true" description="Stores the source code of the component" typeConverter="NOTBROWSABLE"><arrayElements arrayElementCount="30"><arrayElement dataType="System.String"><![CDATA[scriptcomponent_2e3d4c56d0694f9bbd032f1e0950bec1.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">
  <!-- 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>{30D016F9-3734-4E33-A861-5E7D899E18F3};{F184B08F-C81C-45F6-A57F-5ABD9991F28F}</ProjectTypeGuids>
    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
    <OutputType>Library</OutputType>
    <RootNamespace>ScriptComponent_2e3d4c56d0694f9bbd032f1e0950bec1.vbproj</RootNamespace>
    <AssemblyName>ScriptComponent_2e3d4c56d0694f9bbd032f1e0950bec1.vbproj</AssemblyName>
    <StartupObject>
    </StartupObject>
    <OptionExplicit>On</OptionExplicit>
    <OptionCompare>Binary</OptionCompare>
    <OptionStrict>Off</OptionStrict>
    <OptionInfer>On</OptionInfer>
    <ProjectGuid>{0241DA19-8516-41A1-9BA8-F82E3331FF03}</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,42353,42354,42355</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,42353,42354,42355</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="Microsoft.SqlServer.ManagedDTS, Version=13.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91, processorArchitecture=MSIL">
      <SpecificVersion>False</SpecificVersion>
      <HintPath>C:\Windows\Microsoft.NET\assembly\GAC_MSIL\Microsoft.SqlServer.ManagedDTS\v4.0_13.0.0.0__89845dcd8080cc91\Microsoft.SqlServer.ManagedDTS.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.PipelineHost, 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.DTSRuntimeWrap, Version=13.0.0.0, Culture=Neutral, PublicKeyToken=89845dcd8080cc91" />
    <Reference Include="CozyRoc.SSISPlus.2016, Version=1.0.0.0, Culture=neutral, PublicKeyToken=16cf490bb80c34ea" />
  </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="{30D016F9-3734-4E33-A861-5E7D899E18F3}">
        <ProjectProperties HostName="VSTAHostName" HostPackage="{B3A685AA-7EAF-4BC6-9940-57959FA5AC07}" ApplicationType="usd" Language="vb" TemplatesPath="" DebugInfoExeName="devenv.exe" DebugInfoCommandLine="/vstaHostDebugUri:&quot;vstadebugd41e1a24-676c-481c-b561-07976b192427/df7f7cf1-bb8f-4e01-b758-edab6e044b47&quot;" />
        <Host Name="SSIS_ScriptComponent" />
        <ProjectClient>
          <HostIdentifier>SSIS_SC130</HostIdentifier>
        </ProjectClient>
      </FlavorProperties>
    </VisualStudio>
  </ProjectExtensions>
  <PropertyGroup>
    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
  </PropertyGroup>
  <PropertyGroup>
    <TargetFrameworkProfile>
    </TargetFrameworkProfile>
  </PropertyGroup>
</Project>]]></arrayElement><arrayElement dataType="System.String"><![CDATA[My Project\AssemblyInfo.vb]]></arrayElement><arrayElement dataType="System.String"><![CDATA[UTF8]]></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_2e3d4c56d0694f9bbd032f1e0950bec1.vbproj")> 
<Assembly: AssemblyDescription("")> 
<Assembly: AssemblyCompany("Microsoft")> 
<Assembly: AssemblyProduct("ScriptComponent_2e3d4c56d0694f9bbd032f1e0950bec1.vbproj")> 
<Assembly: AssemblyCopyright("Copyright @ Microsoft 2016")> 
<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("948b84eb-be33-4bb7-b58e-b80a708b73c1")> 

' 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[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[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 WriteOnly Property [ErrorDescription]() As String
        Set
            Me(0) = Value
        End Set
    End Property
    Public WriteOnly Property [ErrorDescription_IsNull] As Boolean
        Set
            If (value)
                SetNull(0)
            Else
                Throw new InvalidOperationException("IsNull property cannot be set to False. Assign a value to the column instead.")
            End If
        End Set
    End Property

    Public Sub DirectRowToErrorOutput()
        MyBase.DirectRow("Error Output")
    End Sub

    Public Overrides ReadOnly Property StaticOutputColumns() As String()
        Get
            Return New String() {"ErrorDescription"}
        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[My Project\Settings.settings]]></arrayElement><arrayElement dataType="System.String"><![CDATA[UTF8]]></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[main.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-2016 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.Data
Imports System.Data.Common
Imports System.Data.SqlClient
Imports System.Collections
Imports System.Reflection
Imports System.Diagnostics

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


'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
<ColumnMappings()> _
<SortProperties(New String() { _
    "ConnectionType", "Connection", "Table", "Action", "PrimaryKeys", _
    "ErrorRowDisposition", _
    "InsertedVariable", "UpdatedVariable", "DeletedVariable"})> _
<FilterProperties("GetProperties")> _
<ValidateProperties("Validate")> _
<Microsoft.SqlServer.Dts.Pipeline.SSISScriptComponentEntryPointAttribute> _
<CLSCompliant(False)> _
Public Class ScriptMain
    Inherits UserComponent


    Private Const ColumnSeparator As String = "," + vbLf
    Private Const Parameter_1P As String = "p{0}"


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    ' Supported destination table actions.
    Public Enum ActionTypes
        Insert
        InsertUpdate    ' try an insert first, if it fails based on PK defined in the destination then update
        UpdateInsert    ' try an update first based on the PK, if it fails then insert
        Update
        Delete
    End Enum    ' ActionTypes


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Public Overrides Sub Input_ProcessInputRow(ByVal Row As InputBuffer)
        ' Setup command parameters.
        Dim colsCount As Integer = m_inputIndexes.Length
        For colIndex As Integer = 0 To colsCount - 1
            Dim bufIndex As Integer = m_inputIndexes(colIndex)
            Debug.Assert(bufIndex <> 0)
            Dim parameter As DbParameter = m_command.Parameters(colIndex)

            Dim value As Object = Row.Buffer(bufIndex)
            If TypeOf value Is BlobColumn Then
                If parameter.DbType = DbType.Binary Then
                    value = Row.Buffer.GetBlobData(bufIndex, 0, parameter.Size)
                Else
                    ' This is long string.
                    value = Row.Buffer.GetString(bufIndex)
                End If
            End If

            parameter.Value = value
        Next

        Try
            Select Case Me.Action
                Case ActionTypes.Insert
                    m_command.CommandText = m_insertSql
                    Call m_command.ExecuteNonQuery()
                    m_insertedCount += 1

                Case ActionTypes.InsertUpdate
                    Try
                        m_command.CommandText = m_insertSql
                        Call m_command.ExecuteNonQuery()
                        m_insertedCount += 1
                    Catch ex As Exception
                        ' Insert failed. Try update.
                        m_command.CommandText = m_updateSql
                        Call m_command.ExecuteNonQuery()
                        m_updatedCount += 1
                    End Try

                Case ActionTypes.UpdateInsert
                    m_command.CommandText = m_selectSql
                    Dim hasRow As Object = m_command.ExecuteScalar()
                    If hasRow Is Nothing Then
                        ' Row doesn't exist. Insert new one.
                        m_command.CommandText = m_insertSql
                        Call m_command.ExecuteNonQuery()
                        m_insertedCount += 1
                    Else
                        m_command.CommandText = m_updateSql
                        Call m_command.ExecuteNonQuery()
                        m_updatedCount += 1
                    End If

                Case ActionTypes.Update
                    m_command.CommandText = m_updateSql
                    Call m_command.ExecuteNonQuery()
                    m_updatedCount += 1

                Case ActionTypes.Delete
                    m_command.CommandText = m_selectSql
                    Dim hasRow As Object = m_command.ExecuteScalar()
                    If Not hasRow Is Nothing Then
                        ' Row exists. Delete it.
                        m_command.CommandText = m_deleteSql
                        Call m_command.ExecuteNonQuery()
                        m_deletedCount += 1
                    End If
            End Select
        Catch ex As Exception
            Select Case Me.ErrorRowDisposition
                Case DTSRowDisposition.RD_IgnoreFailure
                    ' Do nothing.

                Case DTSRowDisposition.RD_RedirectRow
                    Row.ErrorDescription = ex.Message
                    Call Row.DirectRowToErrorOutput()

                Case DTSRowDisposition.RD_FailComponent, DTSRowDisposition.RD_NotUsed
                    Call FireError_(ex.Message)
            End Select
        End Try
    End Sub ' Input_ProcessInputRow


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

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

        ' Initialize command.
        Dim conn As DbConnection = GetConnection_(False)
        m_command = conn.CreateCommand()

        Dim primaryKeys As ArrayList = New ArrayList()
        If Not String.IsNullOrEmpty(Me.PrimaryKeys) Then
            primaryKeys = New ArrayList(Me.PrimaryKeys.Split( _
                New String() {ColumnSeparator}, _
                StringSplitOptions.None))
        End If
        Dim colsList As ArrayList = New ArrayList(primaryKeys)

        ' Include update columns (other than key).
        For Each inputCol As IDTSInputColumn100 In input.InputColumnCollection
            If inputCol.ExternalMetadataColumnID = 0 Then
                ' Column not selected. Skip it.
                Continue For
            End If

            Dim extCol As IDTSExternalMetadataColumn100 = input.ExternalMetadataColumnCollection.GetObjectByID( _
                inputCol.ExternalMetadataColumnID)

            If Not primaryKeys.Contains(extCol.Name) Then
                ' Key columns will be at the end.
                Call colsList.Insert(0, extCol.Name)
            End If
        Next

        ' Setup buffer indexes and command parameters.
        Dim colsCount As Integer = colsList.Count
        m_inputIndexes = New Integer(colsCount - 1) {}
        Dim parameters() As DbParameter = New DbParameter(colsCount - 1) {}
        For Each inputCol As IDTSInputColumn100 In input.InputColumnCollection
            If inputCol.ExternalMetadataColumnID = 0 Then
                ' Column not selected. Skip it.
                Continue For
            End If

            Dim extCol As IDTSExternalMetadataColumn100 = input.ExternalMetadataColumnCollection.GetObjectByID( _
                inputCol.ExternalMetadataColumnID)

            Dim colName As String = extCol.Name
            Dim paramIndex As Integer = colsList.IndexOf(colName)
            Call Debug.Assert(paramIndex <> -1)

            ' Setup parameter index.
            m_inputIndexes(paramIndex) = Me.HostComponent.BufferManager.FindColumnByLineageID( _
                input.Buffer, _
                inputCol.LineageID)

            ' Setup command parameter.
            Dim parameter As DbParameter = m_command.CreateParameter()
            parameter.ParameterName = String.Format(Parameter_1P, 1 + paramIndex)
            Call SetupParameter_(inputCol, parameter)
            parameters(paramIndex) = parameter
        Next

        ' Include parameters to command.
        For paramIndex As Integer = 0 To colsCount - 1
            Call m_command.Parameters.Add(parameters(paramIndex))
        Next

        ' Setup SQL statements.
        Dim valueList As ArrayList = New ArrayList()
        Dim whereList As ArrayList = New ArrayList()
        Dim setList As ArrayList = New ArrayList()
        Dim selList As ArrayList = New ArrayList()
        For colIndex As Integer = 0 To colsCount - 1
            Dim colName As String = CStr(colsList(colIndex))
            Dim paramName As String = GetParameterName_( _
                conn, _
                parameters(colIndex).ParameterName)

            Call valueList.Add(paramName)

            Dim keyValue As String = String.Format("{0} = {1}", colName, paramName)

            If primaryKeys.Contains(colName) Then
                ' Key column.
                Call whereList.Add(keyValue)
            Else
                Call setList.Add(keyValue)
                Call selList.Add(paramName)
            End If
        Next

        Dim whereClause As String = String.Join( _
            " AND ", _
            CType(whereList.ToArray(GetType(String)), String()))

        m_selectSql = String.Format( _
            "SELECT {0} FROM {1} WHERE {2}", _
            String.Join(",", CType(primaryKeys.ToArray(GetType(String)), String())), _
            Me.Table, _
            whereClause)
        m_insertSql = String.Format( _
            "INSERT INTO {0} ({1}) VALUES({2})", _
            Me.Table, _
            String.Join(",", CType(colsList.ToArray(GetType(String)), String())), _
            String.Join(",", CType(valueList.ToArray(GetType(String)), String())))
        m_updateSql = String.Format( _
            "UPDATE {0} SET {1} WHERE {2}", _
            Me.Table, _
            String.Join(",", CType(setList.ToArray(GetType(String)), String())), _
            whereClause)
        m_deleteSql = String.Format( _
            "DELETE FROM {0} WHERE {1}", _
            Me.Table, _
            whereClause)
    End Sub ' PreExecute


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

        If Not m_command Is Nothing Then
            Dim conn As DbConnection = m_command.Connection
            Call m_command.Dispose()
            m_command = Nothing
            Call conn.Dispose()
        End If

        ' Store diagnostics.
        Call SetVariable_(Me.InsertedVariable, m_insertedCount)
        Call SetVariable_(Me.UpdatedVariable, m_updatedCount)
        Call SetVariable_(Me.DeletedVariable, m_deletedCount)
    End Sub ' PostExecute


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

        ' Setup base properties.
        Call result.Add("ConnectionType")
        Call result.Add("Connection")
        Call result.Add("Table")
        Call result.Add("Action")
        Call result.Add("ErrorRowDisposition")
        Call result.Add("InsertedVariable")
        Call result.Add("UpdatedVariable")
        Call result.Add("DeletedVariable")

        Select Case Me.Action
            Case ActionTypes.InsertUpdate, ActionTypes.UpdateInsert, ActionTypes.Update, ActionTypes.Delete
                Call result.Add("PrimaryKeys")
        End Select

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


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

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

            If String.IsNullOrEmpty(Me.Table) Then
                Throw New ApplicationException("Select destination table.")
            End If

            If Me.Action <> ActionTypes.Insert AndAlso _
                String.IsNullOrEmpty(Me.PrimaryKeys) Then
                Throw New ApplicationException("Specify table primary keys.")
            End If

            Dim primaryKeys As String() = Me.PrimaryKeys.Split( _
                New String() {ColumnSeparator}, _
                StringSplitOptions.None)

            Dim input As IDTSInput100 = Me.ComponentMetaData.InputCollection(0)
            If input.IsAttached AndAlso _
                (input.InputColumnCollection.Count = 0 OrElse _
                input.InputColumnCollection.Count < primaryKeys.Length) Then
                Throw New Exception("Map input columns.")
            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.Connection) Then
            Throw New Exception("Connection not selected.")
        End If

        If String.IsNullOrEmpty(Me.Table) Then
            Throw New Exception("Destination table not selected.")
        End If

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

        Dim tblCols As DataTable = GetColumns_()

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

        ' Setup column metadata.
        Dim colsCount As Integer = tblCols.Rows.Count
        For colIndex As Integer = 0 To colsCount - 1
            Dim columnRow As DataRow = tblCols.Rows(colIndex)

            If Me.Action = ActionTypes.Delete AndAlso _
                Not CBool(columnRow("IsKey")) Then
                ' Include only key columns for Delete action.
                Continue For
            End If

            Dim column As IDTSExternalMetadataColumn100 = input.ExternalMetadataColumnCollection.NewAt( _
                colIndex)
            column.Name = CStr(columnRow("ColumnName"))

            ' Get type.
            Dim rawType As Type = CType(columnRow("DataType"), Type)
            Dim columnType As DataType = DataRecordTypeToBufferType_(rawType)
            If CBool(columnRow("IsLong")) Then
                ' This is extended type. Have to modify the column type a bit.
                Select Case columnType
                    Case DataType.DT_WSTR
                        columnType = DataType.DT_NTEXT

                    Case DataType.DT_STR
                        columnType = DataType.DT_TEXT

                    Case DataType.DT_BYTES
                        columnType = DataType.DT_IMAGE
                End Select
            End If

            ' Get length.
            Dim length As Integer = 0
            Select Case columnType
                Case DataType.DT_WSTR, DataType.DT_STR, DataType.DT_BYTES, _
                    DataType.DT_IMAGE, DataType.DT_NTEXT, DataType.DT_TEXT
                    length = CInt(columnRow("ColumnSize"))
            End Select

            ' Get code page.
            Dim codepage As Integer = 0
            If columnType = DataType.DT_STR Then
                codepage = -1
            End If

            ' Get precision and scale.
            Dim precision As Integer = 0
            Dim scale As Integer = 0
            If columnType = DataType.DT_NUMERIC OrElse columnType = DataType.DT_BYREF_DECIMAL Then
                If columnRow.IsNull("NumericPrecision") Then
                    precision = 29
                Else
                    precision = CInt(columnRow("NumericPrecision"))
                End If

                If columnRow.IsNull("NumericScale") Then
                    scale = 0
                Else
                    scale = CInt(columnRow("NumericScale"))
                End If

                If scale = 255 Then
                    scale = 0
                End If
            End If

            column.DataType = columnType
            column.Length = length
            column.Precision = precision
            column.Scale = scale
            column.CodePage = codepage
        Next
    End Sub ' ReinitializeMetaData


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    ' Returns list of tables.
    Public Function GetTables() As Object()
        Dim result As ArrayList = New ArrayList()

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

            ' Get tables.
            Using conn As DbConnection = GetConnection_(True)
                Dim tableType As String = "TABLE"
                If TypeOf conn Is SqlConnection Then
                    ' SQL uses different table type identifier.
                    tableType = "BASE TABLE"
                End If

                Dim tblTables As DataTable = conn.GetSchema( _
                    "Tables", _
                    New String() {Nothing, Nothing, Nothing, tableType})

                ' Get table schema column name.
                Dim schemaCol As String = tblTables.Columns(1).ColumnName

                For Each tableRow As DataRow In tblTables.Rows
                    Dim tableSchema As String = CStr(tableRow(schemaCol))
                    Dim tableName As String = CStr(tableRow("table_name"))

                    Call result.Add(String.Format("[{0}].[{1}]", tableSchema, tableName))
                Next

                Call result.Sort()
            End Using
        Catch ex As Exception
            Call MsgBox(ex.Message, MsgBoxStyle.OkOnly Or MsgBoxStyle.Exclamation)
        End Try

        GetTables = result.ToArray()
    End Function    ' GetTables


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    ' Returns selected destination table columns.
    Public Function GetColumns() As Object()
        Dim result As ArrayList = New ArrayList

        Try
            Dim tblCols As DataTable = GetColumns_()
            For Each columnRow As DataRow In tblCols.Rows
                Call result.Add(columnRow("ColumnName"))
            Next

            Call result.Sort()
        Catch ex As Exception
            Call MsgBox(ex.Message, MsgBoxStyle.OkOnly Or MsgBoxStyle.Exclamation)
        End Try

        GetColumns = result.ToArray()
    End Function    ' GetColumns


#Region "Properties"
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Description("Select connection type.")> _
    <Category("Destination")> _
    <List(New Object() {"ADO.NET", "OLEDB"})> _
    <DefaultValue("ADO.NET")> _
    <RefreshProperties(RefreshProperties.All)> _
    Public Property ConnectionType() As String
        Get
            ConnectionType = m_connectionType
        End Get
        Set(ByVal value As String)
            If m_connectionType <> value Then
                m_connectionType = value
                Me.Connection = String.Empty
            End If
        End Set
    End Property    ' ConnectionType


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Description("Select Connection Manager.")> _
    <Category("Destination")> _
    <Connection("ConnectionType")> _
    <RefreshProperties(RefreshProperties.All)> _
    Public Property Connection() As String
        Get
            Connection = m_connection
        End Get
        Set(ByVal value As String)
            If m_connection <> value Then
                m_connection = value
                Me.Table = String.Empty
            End If
        End Set
    End Property    ' Connection


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Description("Select destination table.")> _
    <Category("Destination")> _
    <List("GetTables", False, True)> _
    <RefreshProperties(RefreshProperties.All)> _
    Public Property Table() As String
        Get
            Table = m_table
        End Get
        Set(ByVal value As String)
            If m_table <> value Then
                m_table = value

                Me.PrimaryKeys = String.Empty
                If Me.Action <> ActionTypes.Insert Then
                    ' Initialize primary keys.
                    Me.PrimaryKeys = GetPrimaryKeys_()
                End If
            End If
        End Set
    End Property    ' Table


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Description("Select destination table action.")> _
    <Category("Destination")> _
    <DefaultValue(ActionTypes.InsertUpdate)> _
    <RefreshProperties(RefreshProperties.All)> _
    Public Property Action() As ActionTypes
        Get
            Action = m_action
        End Get
        Set(ByVal value As ActionTypes)
            If m_action <> value Then
                m_action = value

                Me.PrimaryKeys = String.Empty
                If Me.Action <> ActionTypes.Insert Then
                    ' Initialize primary keys.
                    Me.PrimaryKeys = GetPrimaryKeys_()
                End If
            End If
        End Set
    End Property    ' Action


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Description("Specify table primary keys.")> _
    <Category("Destination")> _
    <List("GetColumns", True, False)> _
    Public Property PrimaryKeys() As String
        Get
            PrimaryKeys = m_primaryKeys
        End Get
        Set(ByVal value As String)
            m_primaryKeys = value
        End Set
    End Property    ' PrimaryKeys


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Description("Specify how to handle error rows.")> _
    <Category("Error")> _
    <DefaultValue(DTSRowDisposition.RD_FailComponent)> _
    Public Property ErrorRowDisposition() As DTSRowDisposition
        Get
            ErrorRowDisposition = m_errorRowDisposition
        End Get
        Set(ByVal value As DTSRowDisposition)
            m_errorRowDisposition = value
        End Set
    End Property    ' ErrorRowDisposition


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Description("Select variable to store number of rows inserted (optional).")> _
    <Category("Diagnostics")> _
    <Variable()> _
    Public Property InsertedVariable() As String
        Get
            InsertedVariable = m_insertedVar
        End Get
        Set(ByVal value As String)
            m_insertedVar = value
        End Set
    End Property    ' InsertedVariable


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Description("Select variable to store number of rows updated (optional).")> _
    <Category("Diagnostics")> _
    <Variable()> _
    Public Property UpdatedVariable() As String
        Get
            UpdatedVariable = m_updatedVar
        End Get
        Set(ByVal value As String)
            m_updatedVar = value
        End Set
    End Property    ' UpdatedVariable


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Description("Select variable to store number of rows deleted (optional).")> _
    <Category("Diagnostics")> _
    <Variable()> _
    Public Property DeletedVariable() As String
        Get
            DeletedVariable = m_deletedVar
        End Get
        Set(ByVal value As String)
            m_deletedVar = value
        End Set
    End Property    ' DeletedVariable
#End Region ' Properties


#Region "Internals"
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    ' Returns selected destination table primary keys.
    Private Function GetPrimaryKeys_() As String
        Dim result As ArrayList = New ArrayList

        Try
            Dim tblCols As DataTable = GetColumns_()
            For Each columnRow As DataRow In tblCols.Rows
                If CBool(columnRow("IsKey")) Then
                    ' Key column.
                    Call result.Add(columnRow("ColumnName"))
                End If
            Next
        Catch ex As Exception
            ' Silently catch the error.
        End Try

        GetPrimaryKeys_ = String.Join( _
            ColumnSeparator, _
            CType(result.ToArray(GetType(String)), String()))
    End Function    ' GetPrimaryKeys_


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Private Function GetColumns_() As DataTable
        Dim result As DataTable

        Using conn As DbConnection = GetConnection_(True)
            Using cmd As DbCommand = conn.CreateCommand()
                cmd.CommandText = String.Format("SELECT * FROM {0}", Me.Table)
                Dim reader As DbDataReader = cmd.ExecuteReader( _
                    CommandBehavior.SchemaOnly Or CommandBehavior.KeyInfo)
                result = reader.GetSchemaTable()
            End Using
        End Using

        GetColumns_ = result
    End Function    ' GetColumns_


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    ' Returns SSIS data type from .NET type. Uses private PipelineComponent method.
    Private Function DataRecordTypeToBufferType_(ByVal type As Type) As DataType
        DataRecordTypeToBufferType_ = CType( _
            GetType(PipelineComponent).InvokeMember( _
                "DataRecordTypeToBufferType", _
                BindingFlags.InvokeMethod Or BindingFlags.NonPublic Or BindingFlags.Static, _
                Nothing, _
                Nothing, _
                New Object() {type}), _
            DataType)
    End Function    ' DataRecordTypeToBufferType_


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    ' Setup parameter data type.
    Private Sub SetupParameter_( _
        ByVal inputCol As IDTSInputColumn100, _
        ByVal parameter As DbParameter)

        parameter.DbType = GetDbType_(inputCol.DataType)
        parameter.Size = inputCol.Length
        If parameter.Size = 0 AndAlso parameter.DbType = DbType.Binary Then
            parameter.Size = 8000
        End If

        ' Get precision.
        Dim precision As Byte = CByte(inputCol.Precision)
        If parameter.DbType = DbType.Decimal AndAlso precision = 0 Then
            ' Decimal type has precision 29.
            ' http://msdn.microsoft.com/en-us/library/ms141036.aspx
            precision = 29
        End If

        Dim scale As Byte = CByte(inputCol.Scale)
        If parameter.DbType = DbType.DateTime AndAlso scale = 0 Then
            ' DateTime has maximum scale of 3.
            ' http://msdn.microsoft.com/en-us/library/ms141036%28v=sql.100%29.aspx
            scale = 3
        End If

        ' Setup precision and scale.
        Dim iDbDataParameter As IDbDataParameter = parameter
        iDbDataParameter.Precision = precision
        iDbDataParameter.Scale = scale
    End Sub ' SetupParameter_


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    ' Return ADO.NET data type from SSIS data type.
    Private Function GetDbType_(ByVal dt As DataType) As DbType
        Select Case dt
            Case DataType.DT_BOOL
                Return DbType.Boolean
            Case DataType.DT_STR, DataType.DT_WSTR, DataType.DT_TEXT, DataType.DT_NTEXT
                Return DbType.String
            Case DataType.DT_I1
                Return DbType.SByte
            Case DataType.DT_UI1
                Return DbType.Byte
            Case DataType.DT_I2
                Return DbType.Int16
            Case DataType.DT_UI2
                Return DbType.UInt16
            Case DataType.DT_I4
                Return DbType.Int32
            Case DataType.DT_UI4
                Return DbType.UInt32
            Case DataType.DT_I8
                Return DbType.Int64
            Case DataType.DT_UI8
                Return DbType.UInt64
            Case DataType.DT_R4
                Return DbType.Single
            Case DataType.DT_R8
                Return DbType.Double
            Case DataType.DT_NUMERIC, DataType.DT_DECIMAL
                Return DbType.Decimal
            Case DataType.DT_CY
                Return DbType.Currency
            Case DataType.DT_DBTIMESTAMP
                Return DbType.DateTime
            Case DataType.DT_DBDATE
                Return DbType.Date
            Case DataType.DT_DBTIME
                Return DbType.Time
            Case DataType.DT_BYTES, DataType.DT_IMAGE
                Return DbType.Binary
        End Select

        Throw New ArgumentException(String.Format("Unhandled type. {0}", dt))
    End Function    ' GetDbType_


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    ' Returns parameter name for specified connection type.
    Private Function GetParameterName_(ByVal conn As DbConnection, ByVal parameter As String) As String
        Dim result As String = parameter

        If TypeOf conn Is SqlConnection Then
            result = "@" + parameter
        Else
            ' Most probably ODBC or OLEDB
            result = "?"
        End If

        GetParameterName_ = result
    End Function    ' GetParameterName_


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


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    ' Get connection object.
    Private Function GetConnection_(ByVal design As Boolean) As DbConnection
        Dim result As DbConnection

        If design Then
            If Me.ConnectionType = "OLEDB" Then
                Dim manager As ConnectionManager = MyBase.DesignConnections(Me.Connection)
                Dim managerParams As IDTSConnectionManagerDatabaseParameters100 = CType( _
                    manager.InnerObject, _
                    IDTSConnectionManagerDatabaseParameters100)
                result = CType(managerParams.GetConnectionForSchema(), DbConnection)
            Else
                result = CType( _
                    MyBase.DesignConnections(Me.Connection).AcquireConnection(Nothing), _
                    DbConnection)
            End If
        Else
            If Me.ConnectionType = "OLEDB" Then
                Dim host As IDTSObjectHost100 = CType(MyBase.Connections.Connection, IDTSObjectHost100)
                Dim managerParams As IDTSConnectionManagerDatabaseParameters100 = CType( _
                    host.InnerObject, _
                    IDTSConnectionManagerDatabaseParameters100)
                result = CType(managerParams.GetConnectionForSchema(), DbConnection)
            Else
                result = CType( _
                    MyBase.Connections.Connection.AcquireConnection(Nothing), _
                    DbConnection)
            End If
        End If

        GetConnection_ = result
    End Function    ' GetConnection_


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Private Sub SetVariable_(ByVal varName As String, ByVal value As Object)
        If String.IsNullOrEmpty(varName) Then
            ' Variable not set.
            Exit Sub
        End If

        Dim vars As IDTSVariables100 = Nothing
        Call MyBase.VariableDispenser.LockOneForWrite(varName, vars)
        Try
            vars(varName).Value = value
        Finally
            Call vars.Unlock()
        End Try
    End Sub ' SetVariable_
#End Region ' Internals


#Region "Attributes"
    Private m_connectionType As String
    Private m_connection As String
    Private m_table As String
    Private m_primaryKeys As String
    Private m_action As ActionTypes
    Private m_errorRowDisposition As DTSRowDisposition
    Private m_insertedVar As String
    Private m_updatedVar As String
    Private m_deletedVar As String

    Private m_command As DbCommand
    Private m_inputIndexes() As Integer
    Private m_selectSql As String
    Private m_insertSql As String
    Private m_updateSql As String
    Private m_deleteSql As String
    Private m_insertedCount As Integer
    Private m_updatedCount As Integer
    Private m_deletedCount As Integer
#End Region ' Attributes
End Class   ' ScriptMain
]]></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:CodeName>scriptcomponent_2e3d4c56d0694f9bbd032f1e0950bec1</msb:CodeName>
		<msb:Language>msBuild</msb:Language>
		<msb:ProjectId>{DDB85B03-781A-4AE2-A282-F5AF0F490BA9}</msb:ProjectId>
		<msb:NoContent>Reference;Import;Folder</msb:NoContent>
		<msb:DisplayName>scriptcomponent_2e3d4c56d0694f9bbd032f1e0950bec1</msb:DisplayName>
	</msb:PropertyGroup>
	<msb:ItemGroup>
		<msb:File Include="My Project\Settings.Designer.vb"/>
		<msb:File Include="main.vb"/>
		<msb:File Include="BufferWrapper.vb"/>
		<msb:File Include="My Project\Resources.resx"/>
		<msb:File Include="ComponentWrapper.vb"/>
		<msb:File Include="My Project\AssemblyInfo.vb"/>
		<msb:File Include="My Project\Resources.Designer.vb"/>
		<msb:File Include="My Project\Settings.settings"/>
		<msb:Project Include="scriptcomponent_2e3d4c56d0694f9bbd032f1e0950bec1.vbproj"/>
	</msb:ItemGroup>
</c:Project>]]></arrayElement><arrayElement dataType="System.String"><![CDATA[My Project\Settings.Designer.vb]]></arrayElement><arrayElement dataType="System.String"><![CDATA[UTF8]]></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\Resources.resx]]></arrayElement><arrayElement dataType="System.String"><![CDATA[UTF8]]></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[My Project\Resources.Designer.vb]]></arrayElement><arrayElement dataType="System.String"><![CDATA[UTF8]]></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></arrayElements></property><property id="4" 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_2e3d4c56d0694f9bbd032f1e0950bec1.vbproj.dll]]></arrayElement><arrayElement dataType="System.String"><![CDATA[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
AAAAALQrAAAkBgAAI1VTANgxAAAQAAAAI0dVSUQAAADoMQAA5AkAACNCbG9iAAAAAAAAAAIAAAFX
HaIJCQ8AAAD6ATMAFgAAAQAAAHMAAAAOAAAAJwAAAEoAAAAoAAAAvwAAAAcAAABfAAAAFQAAAAcA
AAAWAAAAIAAAAAkAAAABAAAACgAAAAEAAAADAAAAAwAAAAIAAAAAAKULAQAAAAAABgBwCf0SBgA6
Cv0SBgCKBz4SDwDLEwAABgDdB0QNBgDSCEQNBgAPCkQNBgCQCUQNBgCpCUQNBgA6CEQNBgDECVAM
BgDJB7cSBgAzB7cSBgCGCEQNBgBVCMsKCgBWB9QQCgAHB4ULCgCwB4ULDgDBBo0SDgCoEVESBgBu
CD4SDgD0B9YSDgAMCNwDBgCvFVAMDgBBEY0SDgCjCNwDBgCTBlAMDgCVAVsLCgBBB2YMBgCSEB0T
BgArDwQNEgApFXACFgAtFggGGgBmEAgGFgA3DwgGEgA6FXACHgDzAOwQEgBYCRoUEgBACRoUEgAm
CRoUEgDvCBoUFgDaCQgGIgBqDhQRJgAQBBgPJgBtERgPBgD5DlAMIgCIARQRJgAwDhgPBgDCFsUU
BgAFEsUUIgBIABQRIgAqABQRJgDJBIQDJgBCF4QDHgA6BuwQJgBSBoQDHgA6AewQBgBXDFAMCgDa
CIULCgAoCoULEgABChoUCgAkCIULCgDaE4ULCgALCYULEgC+CBoUEgCeBxoUCgDRBu8MBgBtBz4S
BgBhBVAMBgDAF0QNBgD/ClAMBgDXDlAMFgB1EAgGIgABABQRIgDDABQRIgCgABQRIgDaABQRJgDW
DRgPBgABFf0SGgClDAgGDgDHA9YSBgC/AVAMBgDuFFAMBgBWDcUUIgCDABQRIgBbABQRBgBNBVAM
GgD9FQgGIgAMARQRDgC5FNYSBgC2F1AMCgBFFoULBgDCDlAMJgAADoQDJgBPDucVJgBiDYQDJgCa
DIQDDgA4DdwDDgDaFdwDDgCFBdwDDgAfFdYSJgDZDxgPJgC5EYQDBgBLFEQNBgBUEEQNJgBcEYQD
BgDxDlAMKgDiFOgFKgCmEOgFHgBLAewQHgB2AewQHgAhAewQHgAaAOwQBgA2EroKBgAfElAMAAAA
ANsBAAAAAAEAAQAAAAAA4Qx5F00AAQABAAAAAACmEXkXUQABAAIAAAEQALYVeRdhAAEAAwAAAAAA
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
XgORA9UVXgPBAGMUlgHBAFoErwDBAPMKIQGZAzIEawM8ADgXggNEAHcKZABEAIEKmQNEACkSBgAO
ACwAwwMOADAAyAMIAIwA0QMIAJAA1gMIAJQA2wMIAJgA4AMIAJwA5QMpAKsAegcuAAsAKwUuABMA
NAUuABsAUwUuACMAXAUuACsAmQUuADMAnwUuADsAXAUuAEMArgUuAEsAmQUuAFMAzgUuAFsAmQUu
AGMA1AUuAGsA/gUuAHMACwZAAIsA1gNAAIMAUwZDAHsAXAZDAIMAUwZJAKsAiwdjAHsAXAZjAIMA
UwZpAKsAnweAAIsA1gODAJMA1gODAJsA1gODAHsAXAaJAKsArAegAIsA1gOpAIMAUwXAAIsA1gPD
AFMAmQXJAIMAUwXgAIsA1gPjAFMAmQVDAbMA1gNDAbsAdQZDAcMA9wZDAcsACgdDAdMA1gNDAVMA
mQWDAYMAUwaDAaMAGAeJAdsAwAeJAeMA3QeJAesA7geJAfMABwiJAfsAUwajAYMAUwajAVsAmQWp
AdsAFAipAeMA3QepAQMBNAipAfsAUwbJAdsASAjJAeMA3QfJAQsBZwjJAfsAUwbpAdsAeAjpAeMA
3QfpARMBUwbpAfsAUwYJAtsAnggJAuMA3QcJAgsBvwgpAtsA0QgpAuMA+AgpAhMBAwlJAtsADAlJ
AuMATglJAhsB1gNpAtsAXwlpAuMATglpAhsB1gOJAtsAoAmJAuMATgmJAhsB1gOpAiMB1gMAA1MA
mQVAA1MAmQVACIMAUwZACIsA1gNgCIMAUwZgCIsA1gOACIMAUwaACIsA1gOgCIMAUwagCIsA1gPA
CIsA1gPgCIsA1gMACYsA1gMACYMAUwYgCYsA1gNACYsA1gNACYMAUwaUAMYAJQHqAfIB/wFBAn8C
kwKhAqYCrAK/At0C8QIIAxEDJwNCA2MDdgMEAAEABQAFAAYABwAIAAsACgAMAAsAFQANABYAAACo
EeUEAADjDOoEAABBEe8EAACBEvQEAACSEPkEAAC5Bv4EAACOFAMFAAAHDwgFAADlCwwFAAClFAMF
AABSDhAFAABwBggFAABSDggFAADNBAgFAAAoDRYFAABrFQgFAACYDhsFAAA8BQgFAADrBAgFAAAT
BQgFAACUCiEFAABFBCYFAgAEAAMAAgAFAAUAAgAGAAcAAgAHAAkAAgAJAAsAAgAKAA0AAQALAA0A
AgANAA8AAQAOABEAAQAPABMAAgARABUAAgAZABcAAgAkABkAAQAlABkAAgAmABsAAQAnABsAAgAo
AB0AAQApAB0AAgAqAB8AAQArAB8AAgAsACEAAQAtACEAAgAuACMAAQAvACMAAgAwACUAAQAxACUA
AgAyACcAAQAzACcAAgA0ACkAAQA1ACkAAgBBACsAAgBJAC0ASABPAFYAXQDSAWgDewOKA5EDBIAA
AAEAAAAAAAAAAAAAAAAAHAsAAAQAAAAAAAAAAAAAAJ8D0wMAAAAABAAAAAAAAAAAAAAAnwNQDAAA
AAAKAAAAAAAAAAAAAACoA9wDAAAAAAEAAAAAAAAAAAAAALEDxQEAAAAADQAAAAAAAAAAAAAAugOT
FgAAAAANAAAAAAAAAAAAAAC6A8wWAAAAAA0AAAAAAAAAAAAAALoDTw8AAAAADQAAAAAAAAAAAAAA
ugNyDwAAAAAEAAAAAAAAAAAAAACfA4QDAAAAAA0AAAAAAAAAAAAAALoDhwIAAAAAAAAAAAEAAAB/
EwAADAAEAA0ABAAOAAoAAAAQABoApgIAABAAjQCmAgAAAACPAKYCdwFxA3cBlAMAAABJRFRTQ29t
cG9uZW50TWV0YURhdGExMDAASURUU1ZhcmlhYmxlMTAwAElEVFNFeHRlcm5hbE1ldGFkYXRhQ29s
dW1uMTAwAElEVFNJbnB1dENvbHVtbjEwMABJRFRTRXh0ZXJuYWxNZXRhZGF0YUNvbHVtbkNvbGxl
Y3Rpb24xMDAASURUU0lucHV0Q29sdW1uQ29sbGVjdGlvbjEwMABJRFRTUnVudGltZUNvbm5lY3Rp
b25Db2xsZWN0aW9uMTAwAElEVFNJbnB1dENvbGxlY3Rpb24xMDAASURUU1J1bnRpbWVDb25uZWN0
aW9uMTAwAElEVFNDb25uZWN0aW9uTWFuYWdlcjEwMABJRFRTQnVmZmVyTWFuYWdlcjEwMABJRFRT
VmFyaWFibGVEaXNwZW5zZXIxMDAASURUU1ZhcmlhYmxlczEwMABJRFRTQ29ubmVjdGlvbk1hbmFn
ZXJEYXRhYmFzZVBhcmFtZXRlcnMxMDAASURUU09iamVjdEhvc3QxMDAASURUU0lucHV0MTAwAENv
bnRleHRWYWx1ZWAxAFRocmVhZFNhZmVPYmplY3RQcm92aWRlcmAxAEludDMyAENvenlSb2MuU1NJ
U1BsdXMuMjAxNgA8TW9kdWxlPgBnZXRfSUQAZ2V0X0xpbmVhZ2VJRABGaW5kQ29sdW1uQnlMaW5l
YWdlSUQAZ2V0X0V4dGVybmFsTWV0YWRhdGFDb2x1bW5JRABzZXRfQ29ubmVjdGlvbk1hbmFnZXJJ
RABPYmplY3RJRABJbnB1dElEAEdldE9iamVjdEJ5SUQAUGFyYW1ldGVyXzFQAENvenlSb2MuU3Fs
U2VydmVyLlNTSVMATWljcm9zb2Z0LlNxbFNlcnZlci5NYW5hZ2VkRFRTAFQARGlzcG9zZV9fSW5z
dGFuY2VfXwBDcmVhdGVfX0luc3RhbmNlX18AdmFsdWVfXwBTZXRWYXJpYWJsZV8AR2V0UGFyYW1l
dGVyTmFtZV8AR2V0RGJUeXBlXwBEYXRhUmVjb3JkVHlwZVRvQnVmZmVyVHlwZV8AR2V0Q29ubmVj
dGlvbl8AU2V0dXBQYXJhbWV0ZXJfAEZpcmVFcnJvcl8AR2V0Q29sdW1uc18AR2V0UHJpbWFyeUtl
eXNfAEdldENvbm5lY3Rpb25Gb3JTY2hlbWEAR2V0U2NoZW1hAFN5c3RlbS5EYXRhAFJlaW5pdGlh
bGl6ZU1ldGFEYXRhAGdldF9Db21wb25lbnRNZXRhRGF0YQBHZXRCbG9iRGF0YQBQcm9qZWN0RGF0
YQBtc2NvcmxpYgBNaWNyb3NvZnQuVmlzdWFsQmFzaWMAQWRkAGdldF9Jc0F0dGFjaGVkAHNldF9J
c1VzZWQARGJDb21tYW5kAENyZWF0ZUNvbW1hbmQAbV9jb21tYW5kAENyZWF0ZUluc3RhbmNlAGdl
dF9HZXRJbnN0YW5jZQBpbnN0YW5jZQBHZXRIYXNoQ29kZQBzZXRfQ29kZVBhZ2UAZ2V0X01lc3Nh
Z2UAZXJyTWVzc2FnZQBtZXNzYWdlAGdldF9TY2FsZQBzZXRfU2NhbGUAZ2V0X1RhYmxlAHNldF9U
YWJsZQBHZXRTY2hlbWFUYWJsZQBEYXRhVGFibGUAZ2V0X1VwZGF0ZWRWYXJpYWJsZQBzZXRfVXBk
YXRlZFZhcmlhYmxlAGdldF9EZWxldGVkVmFyaWFibGUAc2V0X0RlbGV0ZWRWYXJpYWJsZQBnZXRf
SW5zZXJ0ZWRWYXJpYWJsZQBzZXRfSW5zZXJ0ZWRWYXJpYWJsZQBJRGlzcG9zYWJsZQBtX3RhYmxl
AFJ1bnRpbWVUeXBlSGFuZGxlAEdldFR5cGVGcm9tSGFuZGxlAE1zZ0JveFN0eWxlAGdldF9OYW1l
AHNldF9OYW1lAGdldF9Db2x1bW5OYW1lAHZhck5hbWUAZ2V0X1BhcmFtZXRlck5hbWUAc2V0X1Bh
cmFtZXRlck5hbWUASW5wdXROYW1lAE1pY3Jvc29mdC5TcWxTZXJ2ZXIuRHRzLlJ1bnRpbWUATWlj
cm9zb2Z0LlNxbFNlcnZlci5EdHMuUGlwZWxpbmUAZ2V0X0RhdGFUeXBlAHNldF9EYXRhVHlwZQBn
ZXRfRGJUeXBlAHNldF9EYlR5cGUAZ2V0X0Nvbm5lY3Rpb25UeXBlAHNldF9Db25uZWN0aW9uVHlw
ZQBtX2Nvbm5lY3Rpb25UeXBlAEdldFR5cGUAdHlwZQBnZXRfQ3VsdHVyZQBzZXRfQ3VsdHVyZQBf
cmVzQ3VsdHVyZQBBcHBsaWNhdGlvbkJhc2UAQXBwbGljYXRpb25TZXR0aW5nc0Jhc2UARGlzcG9z
ZQBWYWxpZGF0ZQBJbnNlcnRVcGRhdGUARWRpdG9yQnJvd3NhYmxlU3RhdGUARGVsZXRlAExvY2tP
bmVGb3JXcml0ZQBHdWlkQXR0cmlidXRlAEhlbHBLZXl3b3JkQXR0cmlidXRlAEdlbmVyYXRlZENv
ZGVBdHRyaWJ1dGUARGVidWdnZXJOb25Vc2VyQ29kZUF0dHJpYnV0ZQBEZWJ1Z2dhYmxlQXR0cmli
dXRlAFZhcmlhYmxlQXR0cmlidXRlAEVkaXRvckJyb3dzYWJsZUF0dHJpYnV0ZQBDb21WaXNpYmxl
QXR0cmlidXRlAEFzc2VtYmx5VGl0bGVBdHRyaWJ1dGUAU3RhbmRhcmRNb2R1bGVBdHRyaWJ1dGUA
SGlkZU1vZHVsZU5hbWVBdHRyaWJ1dGUARGVmYXVsdFZhbHVlQXR0cmlidXRlAEFzc2VtYmx5VHJh
ZGVtYXJrQXR0cmlidXRlAFRhcmdldEZyYW1ld29ya0F0dHJpYnV0ZQBEZWJ1Z2dlckhpZGRlbkF0
dHJpYnV0ZQBBc3NlbWJseUZpbGVWZXJzaW9uQXR0cmlidXRlAE15R3JvdXBDb2xsZWN0aW9uQXR0
cmlidXRlAENvbm5lY3Rpb25BdHRyaWJ1dGUAQXNzZW1ibHlEZXNjcmlwdGlvbkF0dHJpYnV0ZQBW
YWxpZGF0ZVByb3BlcnRpZXNBdHRyaWJ1dGUAUmVmcmVzaFByb3BlcnRpZXNBdHRyaWJ1dGUARmls
dGVyUHJvcGVydGllc0F0dHJpYnV0ZQBTb3J0UHJvcGVydGllc0F0dHJpYnV0ZQBDb2x1bW5NYXBw
aW5nc0F0dHJpYnV0ZQBDb21waWxhdGlvblJlbGF4YXRpb25zQXR0cmlidXRlAEFzc2VtYmx5UHJv
ZHVjdEF0dHJpYnV0ZQBBc3NlbWJseUNvcHlyaWdodEF0dHJpYnV0ZQBDTFNDb21wbGlhbnRBdHRy
aWJ1dGUAU1NJU1NjcmlwdENvbXBvbmVudEVudHJ5UG9pbnRBdHRyaWJ1dGUATGlzdEF0dHJpYnV0
ZQBBc3NlbWJseUNvbXBhbnlBdHRyaWJ1dGUAQ2F0ZWdvcnlBdHRyaWJ1dGUAUnVudGltZUNvbXBh
dGliaWxpdHlBdHRyaWJ1dGUAUHJlRXhlY3V0ZQBQb3N0RXhlY3V0ZQBtX1ZhbHVlAGdldF9WYWx1
ZQBzZXRfVmFsdWUAR2V0T2JqZWN0VmFsdWUAdmFsdWUAZ2V0X1NpemUAc2V0X1NpemUASW5kZXhP
ZgBTeXN0ZW0uVGhyZWFkaW5nAFN5c3RlbS5SdW50aW1lLlZlcnNpb25pbmcAQ29tcGFyZVN0cmlu
ZwBUb1N0cmluZwBHZXRTdHJpbmcAZ2V0X0xlbmd0aABzZXRfTGVuZ3RoAFNjcmlwdENvbXBvbmVu
dF8yZTNkNGM1NmQwNjk0ZjliYmQwMzJmMWUwOTUwYmVjMS52YnByb2oAVW5sb2NrAE1pY3Jvc29m
dC5WaXN1YWxCYXNpYy5NeVNlcnZpY2VzLkludGVybmFsAFN5c3RlbS5Db21wb25lbnRNb2RlbABS
ZW1vdmVBbGwAU2NyaXB0Q29tcG9uZW50XzJlM2Q0YzU2ZDA2OTRmOWJiZDAzMmYxZTA5NTBiZWMx
LnZicHJvai5kbGwAc2V0X0Vycm9yRGVzY3JpcHRpb25fSXNOdWxsAFNldE51bGwAaW5wdXRDb2wA
bV91cGRhdGVTcWwAbV9kZWxldGVTcWwAbV9zZWxlY3RTcWwAbV9pbnNlcnRTcWwAZ2V0X0l0ZW0A
c2V0X0l0ZW0AU3lzdGVtAEVudW0AVG9Cb29sZWFuAFN5c3RlbS5Db21wb25lbnRNb2RlbC5EZXNp
Z24AZGVzaWduAFNjcmlwdE1haW4ASm9pbgBEYXRhQ29sdW1uAEJsb2JDb2x1bW4AY29ubgBnZXRf
UHJlY2lzaW9uAHNldF9QcmVjaXNpb24AZ2V0X0FwcGxpY2F0aW9uAE15QXBwbGljYXRpb24AU3lz
dGVtLkNvbmZpZ3VyYXRpb24AU3lzdGVtLkdsb2JhbGl6YXRpb24AZ2V0X0FjdGlvbgBzZXRfQWN0
aW9uAG1fYWN0aW9uAEludGVyYWN0aW9uAFN5c3RlbS5SZWZsZWN0aW9uAElDb2xsZWN0aW9uAERh
dGFDb2x1bW5Db2xsZWN0aW9uAGdldF9FeHRlcm5hbE1ldGFkYXRhQ29sdW1uQ29sbGVjdGlvbgBn
ZXRfSW5wdXRDb2x1bW5Db2xsZWN0aW9uAGdldF9SdW50aW1lQ29ubmVjdGlvbkNvbGxlY3Rpb24A
RGJQYXJhbWV0ZXJDb2xsZWN0aW9uAGdldF9JbnB1dENvbGxlY3Rpb24ARGF0YVJvd0NvbGxlY3Rp
b24AZ2V0X0Nvbm5lY3Rpb24Ac2V0X0Nvbm5lY3Rpb24ARGJDb25uZWN0aW9uAEFjcXVpcmVDb25u
ZWN0aW9uAFNxbENvbm5lY3Rpb24AbV9jb25uZWN0aW9uAERUU1Jvd0Rpc3Bvc2l0aW9uAGdldF9F
cnJvclJvd0Rpc3Bvc2l0aW9uAHNldF9FcnJvclJvd0Rpc3Bvc2l0aW9uAG1fZXJyb3JSb3dEaXNw
b3NpdGlvbgBBcHBsaWNhdGlvbkV4Y2VwdGlvbgBJbnZhbGlkT3BlcmF0aW9uRXhjZXB0aW9uAEFy
Z3VtZW50RXhjZXB0aW9uAHNldF9FcnJvckRlc2NyaXB0aW9uAFN5c3RlbS5EYXRhLkNvbW1vbgBD
dWx0dXJlSW5mbwBPdXRwdXROYW1lTWFwAE91dHB1dE1hcABNaWNyb3NvZnQuU3FsU2VydmVyLkRU
U1J1bnRpbWVXcmFwAE1pY3Jvc29mdC5TcWxTZXJ2ZXIuRFRTUGlwZWxpbmVXcmFwAG1fdXBkYXRl
ZFZhcgBtX2RlbGV0ZWRWYXIAbV9pbnNlcnRlZFZhcgBFeGVjdXRlU2NhbGFyAEludm9rZU1lbWJl
cgBEYkRhdGFSZWFkZXIARXhlY3V0ZVJlYWRlcgBtX0FwcE9iamVjdFByb3ZpZGVyAG1fVXNlck9i
amVjdFByb3ZpZGVyAG1fQ29tcHV0ZXJPYmplY3RQcm92aWRlcgBtX015V2ViU2VydmljZXNPYmpl
Y3RQcm92aWRlcgBCaW5kZXIAZ2V0X0J1ZmZlcgBQaXBlbGluZUJ1ZmZlcgBTY3JpcHRCdWZmZXIA
SW5wdXRCdWZmZXIAZ2V0X1Jlc291cmNlTWFuYWdlcgBnZXRfQ29ubmVjdGlvbk1hbmFnZXIAZ2V0
X0J1ZmZlck1hbmFnZXIAVG9JbnRlZ2VyAFN5c3RlbS5Db2RlRG9tLkNvbXBpbGVyAE1pY3Jvc29m
dC5TcWxTZXJ2ZXIuRHRzLlJ1bnRpbWUuV3JhcHBlcgBNaWNyb3NvZnQuU3FsU2VydmVyLkR0cy5Q
aXBlbGluZS5XcmFwcGVyAGdldF9Vc2VyAGdldF9WYXJpYWJsZURpc3BlbnNlcgBJRGJEYXRhUGFy
YW1ldGVyAERiUGFyYW1ldGVyAENyZWF0ZVBhcmFtZXRlcgBwYXJhbWV0ZXIARW50ZXIAZ2V0X0Nv
bXB1dGVyAE15Q29tcHV0ZXIAX3Jlc01ncgBDb21tYW5kQmVoYXZpb3IARmlyZUVycm9yAENsZWFy
UHJvamVjdEVycm9yAFNldFByb2plY3RFcnJvcgBDb2x1bW5TZXBhcmF0b3IASUVudW1lcmF0b3IA
R2V0RW51bWVyYXRvcgBBY3RpdmF0b3IALmN0b3IALmNjdG9yAE1vbml0b3IAU3lzdGVtLkRpYWdu
b3N0aWNzAE1pY3Jvc29mdC5WaXN1YWxCYXNpYy5EZXZpY2VzAGdldF9XZWJTZXJ2aWNlcwBNeVdl
YlNlcnZpY2VzAE1pY3Jvc29mdC5WaXN1YWxCYXNpYy5BcHBsaWNhdGlvblNlcnZpY2VzAFN5c3Rl
bS5SdW50aW1lLkludGVyb3BTZXJ2aWNlcwBNaWNyb3NvZnQuVmlzdWFsQmFzaWMuQ29tcGlsZXJT
ZXJ2aWNlcwBTeXN0ZW0uUnVudGltZS5Db21waWxlclNlcnZpY2VzAFN5c3RlbS5SZXNvdXJjZXMA
U2NyaXB0Q29tcG9uZW50XzJlM2Q0YzU2ZDA2OTRmOWJiZDAzMmYxZTA5NTBiZWMxLnZicHJvai5N
eS5SZXNvdXJjZXMATXlSZXNvdXJjZXMAU2NyaXB0Q29tcG9uZW50XzJlM2Q0YzU2ZDA2OTRmOWJi
ZDAzMmYxZTA5NTBiZWMxLnZicHJvai5SZXNvdXJjZXMucmVzb3VyY2VzAERlYnVnZ2luZ01vZGVz
AFJlZnJlc2hQcm9wZXJ0aWVzAEdldFByb3BlcnRpZXMAR2V0VGFibGVzAFZhcmlhYmxlcwBBY3Rp
b25UeXBlcwBDb3p5Um9jLlNxbFNlcnZlci5TU0lTLkF0dHJpYnV0ZXMAbV9pbnB1dEluZGV4ZXMA
QmluZGluZ0ZsYWdzAE15U2V0dGluZ3MARXF1YWxzAENvbnRhaW5zAGdldF9Db2x1bW5zAEdldENv
bHVtbnMAZ2V0X1N0YXRpY0lucHV0Q29sdW1ucwBnZXRfU3RhdGljT3V0cHV0Q29sdW1ucwBDb252
ZXJzaW9ucwBTeXN0ZW0uQ29sbGVjdGlvbnMAZ2V0X0Rlc2lnbkNvbm5lY3Rpb25zAFN0cmluZ1Nw
bGl0T3B0aW9ucwBSdW50aW1lSGVscGVycwBnZXRfUGFyYW1ldGVycwBPcGVyYXRvcnMAU2NyaXB0
QnVmZmVyUGx1cwBTY3JpcHRDb21wb25lbnRQbHVzAGdldF9Sb3dzAGdldF9QcmltYXJ5S2V5cwBz
ZXRfUHJpbWFyeUtleXMAbV9wcmltYXJ5S2V5cwBOZXdBdABDb25jYXQARm9ybWF0AG1fU3luY09i
amVjdABnZXRfSW5uZXJPYmplY3QATXlQcm9qZWN0AGR0AEVuZE9mUm93c2V0AFNwbGl0AEV4aXQA
TXNnQm94UmVzdWx0AFN5c3RlbS5EYXRhLlNxbENsaWVudABQaXBlbGluZUNvbXBvbmVudABVc2Vy
Q29tcG9uZW50AFBhcmVudENvbXBvbmVudABTY3JpcHRDb21wb25lbnQAZ2V0X0hvc3RDb21wb25l
bnQAZ2V0X0N1cnJlbnQAZ2V0X0NvdW50AG1fdXBkYXRlZENvdW50AG1fZGVsZXRlZENvdW50AG1f
aW5zZXJ0ZWRDb3VudABNaWNyb3NvZnQuU3FsU2VydmVyLlR4U2NyaXB0AFVwZGF0ZUluc2VydABT
b3J0AEFycmF5TGlzdABNaWNyb3NvZnQuU3FsU2VydmVyLlBpcGVsaW5lSG9zdABJc0lucHV0AElu
cHV0X1Byb2Nlc3NJbnB1dABEaXJlY3RSb3dUb0Vycm9yT3V0cHV0AE1vdmVOZXh0AHNldF9Db21t
YW5kVGV4dABtX0NvbnRleHQARGF0YVJvdwBEaXJlY3RSb3cASW5wdXRfUHJvY2Vzc0lucHV0Um93
AE5leHRSb3cATXNnQm94AFNjcmlwdENvbXBvbmVudF8yZTNkNGM1NmQwNjk0ZjliYmQwMzJmMWUw
OTUwYmVjMS52YnByb2ouTXkAVG9BcnJheQBnZXRfQXNzZW1ibHkARXhlY3V0ZU5vblF1ZXJ5AElz
TnVsbE9yRW1wdHkAAAAxTQB5AC4AUgBlAHMAbwB1AHIAYwBlAHMALgBNAHkAUgBlAHMAbwB1AHIA
YwBlAHMAAICbSQBzAE4AdQBsAGwAIABwAHIAbwBwAGUAcgB0AHkAIABjAGEAbgBuAG8AdAAgAGIA
ZQAgAHMAZQB0ACAAdABvACAARgBhAGwAcwBlAC4AIABBAHMAcwBpAGcAbgAgAGEAIAB2AGEAbAB1
AGUAIAB0AG8AIAB0AGgAZQAgAGMAbwBsAHUAbQBuACAAaQBuAHMAdABlAGEAZAAuAAAZRQByAHIA
bwByACAATwB1AHQAcAB1AHQAACFFAHIAcgBvAHIARABlAHMAYwByAGkAcAB0AGkAbwBuAAALSQBu
AHAAdQB0AAAVQwBvAG4AbgBlAGMAdABpAG8AbgAABSwACgAACXAAewAwAH0AABN7ADAAfQAgAD0A
IAB7ADEAfQAACyAAQQBOAEQAIAAAO1MARQBMAEUAQwBUACAAewAwAH0AIABGAFIATwBNACAAewAx
AH0AIABXAEgARQBSAEUAIAB7ADIAfQAAAywAAENJAE4AUwBFAFIAVAAgAEkATgBUAE8AIAB7ADAA
fQAgACgAewAxAH0AKQAgAFYAQQBMAFUARQBTACgAewAyAH0AKQAAOVUAUABEAEEAVABFACAAewAw
AH0AIABTAEUAVAAgAHsAMQB9ACAAVwBIAEUAUgBFACAAewAyAH0AADNEAEUATABFAFQARQAgAEYA
UgBPAE0AIAB7ADAAfQAgAFcASABFAFIARQAgAHsAMQB9AAAdQwBvAG4AbgBlAGMAdABpAG8AbgBU
AHkAcABlAAALVABhAGIAbABlAAANQQBjAHQAaQBvAG4AACdFAHIAcgBvAHIAUgBvAHcARABpAHMA
cABvAHMAaQB0AGkAbwBuAAAhSQBuAHMAZQByAHQAZQBkAFYAYQByAGkAYQBiAGwAZQAAH1UAcABk
AGEAdABlAGQAVgBhAHIAaQBhAGIAbABlAAAfRABlAGwAZQB0AGUAZABWAGEAcgBpAGEAYgBsAGUA
ABdQAHIAaQBtAGEAcgB5AEsAZQB5AHMAACVTAGUAbABlAGMAdAAgAGMAbwBuAG4AZQBjAHQAaQBv
AG4ALgAAM1MAZQBsAGUAYwB0ACAAZABlAHMAdABpAG4AYQB0AGkAbwBuACAAdABhAGIAbABlAC4A
ADdTAHAAZQBjAGkAZgB5ACAAdABhAGIAbABlACAAcAByAGkAbQBhAHIAeQAgAGsAZQB5AHMALgAA
JU0AYQBwACAAaQBuAHAAdQB0ACAAYwBvAGwAdQBtAG4AcwAuAAAVTgBvACAAaQBuAHAAdQB0AHMA
LgAAMUMAbwBuAG4AZQBjAHQAaQBvAG4AIABuAG8AdAAgAHMAZQBsAGUAYwB0AGUAZAAuAAA/RABl
AHMAdABpAG4AYQB0AGkAbwBuACAAdABhAGIAbABlACAAbgBvAHQAIABzAGUAbABlAGMAdABlAGQA
LgAAC0kAcwBLAGUAeQAAFUMAbwBsAHUAbQBuAE4AYQBtAGUAABFEAGEAdABhAFQAeQBwAGUAAA1J
AHMATABvAG4AZwAAFUMAbwBsAHUAbQBuAFMAaQB6AGUAACFOAHUAbQBlAHIAaQBjAFAAcgBlAGMA
aQBzAGkAbwBuAAAZTgB1AG0AZQByAGkAYwBTAGMAYQBsAGUAAAtUAEEAQgBMAEUAABVCAEEAUwBF
ACAAVABBAEIATABFAAANVABhAGIAbABlAHMAABV0AGEAYgBsAGUAXwBuAGEAbQBlAAAXWwB7ADAA
fQBdAC4AWwB7ADEAfQBdAAAjUwBFAEwARQBDAFQAIAAqACAARgBSAE8ATQAgAHsAMAB9AAA1RABh
AHQAYQBSAGUAYwBvAHIAZABUAHkAcABlAFQAbwBCAHUAZgBmAGUAcgBUAHkAcABlAAAnVQBuAGgA
YQBuAGQAbABlAGQAIAB0AHkAcABlAC4AIAB7ADAAfQAAA0AAAAM/AAAxVABhAGIAbABlACAAVQBw
AGQAYQB0AGUAIABEAGUAcwB0AGkAbgBhAHQAaQBvAG4AAAtPAEwARQBEAEIAAAn27rJ4D41Lry0S
qk4RAj4ABCABAQgDIAABBSABARERBCABAQ4EIAEBAgUgAgEODgUgAQERRQcgBAEODg4OBSABAR0O
BSABAR0cBiABARGA/QYgAwEOAgIGFRI0ARIMBhUSNAESCAYVEjQBEmUGFRI0ARIwBCAAEwAHAAES
bRGBFQUgABKBGQcgAgEOEoEZDiAFARKAhQgCEoCJEoCNBSACAQgcAwcBAgMgAAIFIAASgSkFIAAS
gS0GIAESgL0cAyAACAUgABKBMQYgARKBNRwFIAASgJUWBwoICAgSgLUcETgQCBKAuRKAuRGArQUg
ABKBOQYgARKAtQgFIAASgIkEIAEcCAQAARwcBSAAEYDhByADHQUICAgEIAEOCAQgAQEcBgABARKA
uQMAAAEDIAAcAyAADjsHGhKAvRKAwRKAxRKAxQgdEoC1EoDFEoDFEoDFEoDFDhKAyRKAzRKA0RKA
yRKAzQ4IEoC1CAgICA4ODgUgABKAsQQAAQIOCSACHQ4dDhGBTQYgAQESgVEFIAASgVUFIAASgMkF
IAASgVkGIAESgNEIBCABAhwEIAEIHAUgABKBYQUgABKBZQUgAggICAUgABKAtQUAAg4OHAQAAQ4c
BgADDg4cHAcgARKBbRJtAh0OBgACDg4dDgcABA4OHBwcBSAAEoDBBwcCEoDFETgMBwUCAh0OEoC9
EoC5GQcMEoC9EoDVCAgSgNkSgNESbRGA3QgICAgFIAASgXkGIAESgNkIBCABHA4EAAECHAQAAQgc
BCABAg4GIAEBEYDdFwcKHRwSgMUSgMEOEoDVDhKAyQ4OEoC5CCACEoDVDh0OBSAAEoGBBiABEoGF
CAoAAxGBjRwRgZEcBCAAHRwTBwYdHBKAxRKA1RKAyRKA2RKAuQMHAQ4GAAMIDg4CAgYOBAcBETgF
BwERgK0SBwYOEoDFEoDVEoDJEoDZEoC5DgcEEoDVEoDVEoDBEoCxCCABEoGZEYGdBSAAEoDVBQcB
EYDdDSAFHA4RgaESgaUcHRwEBwIFBQUgABGA3QYgAQERgOEEIAEBBQgHAhGA4RGA3QQHAg4OBQAC
Dg4OCiAGAQgODg4IEAIIBwISgMESgMEFIAASgbEGIAESgbUcBCABHBwFBwESgOUFIAASgcEIIAIB
DhASgOUGIAESgcUcBAABARwEBwEeAAIeAAUQAQAeAAQKAR4ABAcBEwAGFRI0ARMABwYVEnEBEwAG
FRJxARMAAhMABAoBEwAFIAEBEwAIt3pcVhk04IkIsD9ffxHVCjoIFs9JC7gMNOoIiYRdzYCAzJEE
LAAKAAhwAHsAMAB9AAQAAAAABAEAAAAEAgAAAAQDAAAABAQAAAAHBhUSNAESDAcGFRI0ARIIBwYV
EjQBEmUHBhUSNAESMAMGEnkDBhJ9AwYSIAMGEiQEBhKAhQMGETgEBhGArQQGEoCxAwYdCAIGCAMG
EiwCBhwEAAASDAQAABIIBAAAEmUEAAASMAQAABJ5BAAAEn0FAAEBEn0EIAAdDgsgBAEIDhKAiRKA
jQUgAQESGAYgAQESgIUFIAECEA4EIAAROAUgAQEROAUgABGArQYgAQERgK0HIAERgN0SbQkgAgES
gM0SgLUIIAERgOERgN0HIAIOEoDBDgYgARKAwQIFIAIBDhwEAAASLAQgABJtBxABAR4AHgAHMAEB
ARAeAAQIABIMBAgAEggECAASZQQIABIwBAgAEnkECAASfQQoAB0OAygADgMoAAIFKAASgJUEKAAR
OAUoABGArQQIABIsBCgAEwAIAQAIAAAAAAAeAQABAFQCFldyYXBOb25FeGNlcHRpb25UaHJvd3MB
CAEAAgAAAAAAPAEAN1NjcmlwdENvbXBvbmVudF8yZTNkNGM1NmQwNjk0ZjliYmQwMzJmMWUwOTUw
YmVjMS52YnByb2oAAAUBAAAAAA4BAAlNaWNyb3NvZnQAAB8BABpDb3B5cmlnaHQgQCBNaWNyb3Nv
ZnQgMjAxNgAABQEAAQAAKQEAJDk0OGI4NGViLWJlMzMtNGJiNy1iNThlLWI4MGE3MDhiNzNjMQAA
DAEABzEuMC4wLjAAAEcBABouTkVURnJhbWV3b3JrLFZlcnNpb249djQuMAEAVA4URnJhbWV3b3Jr
RGlzcGxheU5hbWUQLk5FVCBGcmFtZXdvcmsgNAgBAAEAAAAAABgBAApNeVRlbXBsYXRlCDExLjAu
MC4wAACAgAEACQAAAA5Db25uZWN0aW9uVHlwZQpDb25uZWN0aW9uBVRhYmxlBkFjdGlvbgtQcmlt
YXJ5S2V5cxNFcnJvclJvd0Rpc3Bvc2l0aW9uEEluc2VydGVkVmFyaWFibGUPVXBkYXRlZFZhcmlh
YmxlD0RlbGV0ZWRWYXJpYWJsZQAAEgEADUdldFByb3BlcnRpZXMAAA0BAAhWYWxpZGF0ZQAAYQEA
NFN5c3RlbS5XZWIuU2VydmljZXMuUHJvdG9jb2xzLlNvYXBIdHRwQ2xpZW50UHJvdG9jb2wSQ3Jl
YXRlX19JbnN0YW5jZV9fE0Rpc3Bvc2VfX0luc3RhbmNlX18AAAAQAQALTXkuQ29tcHV0ZXIAABMB
AA5NeS5BcHBsaWNhdGlvbgAADAEAB015LlVzZXIAABMBAA5NeS5XZWJTZXJ2aWNlcwAAHAEAF1Nl
bGVjdCBjb25uZWN0aW9uIHR5cGUuAAAQAQALRGVzdGluYXRpb24AABgBAAIAAAAOB0FETy5ORVQO
BU9MRURCAAAMAQAHQURPLk5FVAAAHwEAGlNlbGVjdCBDb25uZWN0aW9uIE1hbmFnZXIuAAATAQAO
Q29ubmVjdGlvblR5cGUAAB4BABlTZWxlY3QgZGVzdGluYXRpb24gdGFibGUuAAAQAQAJR2V0VGFi
bGVzAAEAACUBACBTZWxlY3QgZGVzdGluYXRpb24gdGFibGUgYWN0aW9uLgAAIAEAG1NwZWNpZnkg
dGFibGUgcHJpbWFyeSBrZXlzLgAAEQEACkdldENvbHVtbnMBAAAAJgEAIVNwZWNpZnkgaG93IHRv
IGhhbmRsZSBlcnJvciByb3dzLgAACgEABUVycm9yAAAIAQAEAAAAAABBAQA8U2VsZWN0IHZhcmlh
YmxlIHRvIHN0b3JlIG51bWJlciBvZiByb3dzIGluc2VydGVkIChvcHRpb25hbCkuAAAQAQALRGlh
Z25vc3RpY3MAAEABADtTZWxlY3QgdmFyaWFibGUgdG8gc3RvcmUgbnVtYmVyIG9mIHJvd3MgdXBk
YXRlZCAob3B0aW9uYWwpLgAAQAEAO1NlbGVjdCB2YXJpYWJsZSB0byBzdG9yZSBudW1iZXIgb2Yg
cm93cyBkZWxldGVkIChvcHRpb25hbCkuAAAAAAC0AAAAzsrvvgEAAACRAAAAbFN5c3RlbS5SZXNv
dXJjZXMuUmVzb3VyY2VSZWFkZXIsIG1zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9
bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OSNTeXN0ZW0uUmVzb3VyY2Vz
LlJ1bnRpbWVSZXNvdXJjZVNldAIAAAAAAAAAAAAAAFBBRFBBRFC0AAAAYHMAAAAAAAAAAAAAenMA
AAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGxzAAAAAAAAAAAAAAAAX0NvckRsbE1haW4AbXNjb3Jl
ZS5kbGwAAAAAAP8lACAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAEAAAABgAAIAAAAAAAAAAAAAAAAAAAAEAAQAA
ADAAAIAAAAAAAAAAAAAAAAAAAAEAAAAAAEgAAABYgAAAsAQAAAAAAAAAAAAAsAQ0AAAAVgBTAF8A
VgBFAFIAUwBJAE8ATgBfAEkATgBGAE8AAAAAAL0E7/4AAAEAAAABAAAAAAAAAAEAAAAAAD8AAAAA
AAAABAAAAAIAAAAAAAAAAAAAAAAAAABEAAAAAQBWAGEAcgBGAGkAbABlAEkAbgBmAG8AAAAAACQA
BAAAAFQAcgBhAG4AcwBsAGEAdABpAG8AbgAAAAAAAACwBBAEAAABAFMAdAByAGkAbgBnAEYAaQBs
AGUASQBuAGYAbwAAAOwDAAABADAAMAAwADAAMAA0AGIAMAAAABoAAQABAEMAbwBtAG0AZQBuAHQA
cwAAAAAAAAA0AAoAAQBDAG8AbQBwAGEAbgB5AE4AYQBtAGUAAAAAAE0AaQBjAHIAbwBzAG8AZgB0
AAAAmAA4AAEARgBpAGwAZQBEAGUAcwBjAHIAaQBwAHQAaQBvAG4AAAAAAFMAYwByAGkAcAB0AEMA
bwBtAHAAbwBuAGUAbgB0AF8AMgBlADMAZAA0AGMANQA2AGQAMAA2ADkANABmADkAYgBiAGQAMAAz
ADIAZgAxAGUAMAA5ADUAMABiAGUAYwAxAC4AdgBiAHAAcgBvAGoAAAAwAAgAAQBGAGkAbABlAFYA
ZQByAHMAaQBvAG4AAAAAADEALgAwAC4AMAAuADAAAACYADwAAQBJAG4AdABlAHIAbgBhAGwATgBh
AG0AZQAAAFMAYwByAGkAcAB0AEMAbwBtAHAAbwBuAGUAbgB0AF8AMgBlADMAZAA0AGMANQA2AGQA
MAA2ADkANABmADkAYgBiAGQAMAAzADIAZgAxAGUAMAA5ADUAMABiAGUAYwAxAC4AdgBiAHAAcgBv
AGoALgBkAGwAbAAAAFoAGwABAEwAZQBnAGEAbABDAG8AcAB5AHIAaQBnAGgAdAAAAEMAbwBwAHkA
cgBpAGcAaAB0ACAAQAAgAE0AaQBjAHIAbwBzAG8AZgB0ACAAMgAwADEANgAAAAAAKgABAAEATABl
AGcAYQBsAFQAcgBhAGQAZQBtAGEAcgBrAHMAAAAAAAAAAACgADwAAQBPAHIAaQBnAGkAbgBhAGwA
RgBpAGwAZQBuAGEAbQBlAAAAUwBjAHIAaQBwAHQAQwBvAG0AcABvAG4AZQBuAHQAXwAyAGUAMwBk
ADQAYwA1ADYAZAAwADYAOQA0AGYAOQBiAGIAZAAwADMAMgBmADEAZQAwADkANQAwAGIAZQBjADEA
LgB2AGIAcAByAG8AagAuAGQAbABsAAAAkAA4AAEAUAByAG8AZAB1AGMAdABOAGEAbQBlAAAAAABT
AGMAcgBpAHAAdABDAG8AbQBwAG8AbgBlAG4AdABfADIAZQAzAGQANABjADUANgBkADAANgA5ADQA
ZgA5AGIAYgBkADAAMwAyAGYAMQBlADAAOQA1ADAAYgBlAGMAMQAuAHYAYgBwAHIAbwBqAAAANAAI
AAEAUAByAG8AZAB1AGMAdABWAGUAcgBzAGkAbwBuAAAAMQAuADAALgAwAC4AMAAAADgACAABAEEA
cwBzAGUAbQBiAGwAeQAgAFYAZQByAHMAaQBvAG4AAAAxAC4AMAAuADAALgAwAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAcAAADAAAAIwzAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAA==]]></arrayElement></arrayElements></property><property id="5" 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_2e3d4c56d0694f9bbd032f1e0950bec1</property><property id="6" 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><property id="12" name="UserComponentTypeName" dataType="System.String">CozyRoc.ScriptComponentHostPlus</property></properties><connections><connection id="15" name="Connection" connectionManagerID="{D6726B79-2008-4750-B35B-F29291001255}" /></connections><inputs><input id="16" name="Input" hasSideEffects="true"><externalMetadataColumns isUsed="True" /></input></inputs><outputs><output id="18" name="Error Output" exclusionGroup="1" synchronousInputId="16"><outputColumns><outputColumn id="19" name="ErrorDescription" lineageId="19" length="250" dataType="wstr" /></outputColumns><externalMetadataColumns /></output></outputs></component>