<component id="2" name="Null" componentClassID="{874F7595-FB5F-40FF-96AF-FBFF8250E3EF}" description="Executes a custom script." localeId="1033" version="7" 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[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\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_6f8c63a6cfd340e996bb7f81af484e88.vbproj")> 
<Assembly: AssemblyDescription("")> 
<Assembly: AssemblyCompany("Microsoft")> 
<Assembly: AssemblyProduct("ScriptComponent_6f8c63a6cfd340e996bb7f81af484e88.vbproj")> 
<Assembly: AssemblyCopyright("Copyright @ Microsoft 2013")> 
<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("88d350e6-d740-4088-8a8d-caa9442d71e6")> 

' 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

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[scriptcomponent_6f8c63a6cfd340e996bb7f81af484e88.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_6f8c63a6cfd340e996bb7f81af484e88.vbproj</RootNamespace>
    <AssemblyName>ScriptComponent_6f8c63a6cfd340e996bb7f81af484e88.vbproj</AssemblyName>
    <StartupObject>
    </StartupObject>
    <OptionExplicit>On</OptionExplicit>
    <OptionCompare>Binary</OptionCompare>
    <OptionStrict>Off</OptionStrict>
    <OptionInfer>On</OptionInfer>
    <ProjectGuid>{75913364-00BF-421A-BBF3-662D771EA390}</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="CozyRoc.SSISPlus.2012, Version=1.0.0.0, Culture=neutral, PublicKeyToken=16cf490bb80c34ea, processorArchitecture=MSIL">
      <SpecificVersion>False</SpecificVersion>
      <HintPath>C:\Program Files (x86)\Microsoft SQL Server\110\SDK\Assemblies\CozyRoc.SSISPlus.2012.dll</HintPath>
    </Reference>
    <Reference Include="Microsoft.SqlServer.ManagedDTS, Version=10.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_11.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=11.0.0.0, Culture=Neutral, PublicKeyToken=89845dcd8080cc91" />
    <Reference Include="Microsoft.SqlServer.PipelineHost, Version=11.0.0.0, Culture=Neutral, PublicKeyToken=89845dcd8080cc91" />
    <Reference Include="Microsoft.SqlServer.DTSPipelineWrap, Version=11.0.0.0, Culture=Neutral, PublicKeyToken=89845dcd8080cc91" />
    <Reference Include="Microsoft.SqlServer.DTSRuntimeWrap, Version=11.0.0.0, Culture=Neutral, PublicKeyToken=89845dcd8080cc91" />
  </ItemGroup>
  <!-- Visual Basic supports Importing namespaces (equivalent to using statements in C#).-->
  <ItemGroup>
    <Import Include="Microsoft.VisualBasic" />
    <Import Include="System" />
    <Import Include="System.Collections" />
    <Import Include="System.Data" />
    <Import Include="System.Diagnostics" />
    <Import Include="System.Windows.Forms" />
  </ItemGroup>
  <!-- This section defines the user source files that are part of the
       project.

       Compile - Specifies a source file to compile.
       EmbeddedResource - Specifies a .resx file for embedded resources.
       None - Specifies a file that is not to be passed to the compiler (for instance,
              a text file or XML file).
       AppDesigner - Specifies the directory where the application properties files can
                     be found.
  -->
  <ItemGroup>
    <AppDesigner Include="My Project\" />
    <Compile Include="BufferWrapper.vb" />
    <Compile Include="ComponentWrapper.vb" />
    <Compile Include="main.vb" />
    <Compile Include="My Project\AssemblyInfo.vb">
      <SubType>Code</SubType>
    </Compile>
    <EmbeddedResource Include="My Project\Resources.resx">
      <Generator>VbMyResourcesResXFileCodeGenerator</Generator>
      <LastGenOutput>Resources.Designer.vb</LastGenOutput>
      <CustomToolNamespace>My.Resources</CustomToolNamespace>
    </EmbeddedResource>
    <Compile Include="My Project\Resources.Designer.vb">
      <AutoGen>True</AutoGen>
      <DesignTime>True</DesignTime>
      <DependentUpon>Resources.resx</DependentUpon>
      <SubType>Code</SubType>
    </Compile>
    <None Include="My Project\Settings.settings">
      <Generator>SettingsSingleFileGenerator</Generator>
      <LastGenOutput>Settings.Designer.vb</LastGenOutput>
    </None>
    <Compile Include="My Project\Settings.Designer.vb">
      <AutoGen>True</AutoGen>
      <DependentUpon>Settings.settings</DependentUpon>
      <SubType>Code</SubType>
    </Compile>
    <!-- Include the default configuration information and metadata files for the add-in.
         These files are copied to the build output directory when the project is
         built, and the path to the configuration file is passed to add-in on the command
         line when debugging.
    -->
  </ItemGroup>
  <!-- Include the build rules for a VB project.-->
  <Import Project="$(MSBuildBinPath)\Microsoft.VisualBasic.targets" />
  <!-- This section defines VSTA properties that describe the host-changable project properties. -->
  <ProjectExtensions>
    <VisualStudio>
      <FlavorProperties GUID="{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;vstadebugeaab6751-c8b9-4ed9-922d-bfa67e5b0d32/c61bab2a-eaca-4864-bb4f-b636ca955813&quot;" />
        <Host Name="SSIS_ScriptComponent" />
        <ProjectClient>
          <HostIdentifier>SSIS_SC110</HostIdentifier>
        </ProjectClient>
      </FlavorProperties>
    </VisualStudio>
  </ProjectExtensions>
  <PropertyGroup>
    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
  </PropertyGroup>
  <PropertyGroup>
    <TargetFrameworkProfile>
    </TargetFrameworkProfile>
  </PropertyGroup>
</Project>]]></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[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-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.Text.RegularExpressions
Imports System.Collections

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


'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
<SortProperties(New String() { _
    "InputColumns", "Action", _
    "IsReplaceValueVariable", "ReplaceValue", "ReplaceValueVariable", _
    "IsMatchValueVariable", "MatchValue", "MatchValueVariable"})> _
<ValidateProperties("Validate")> _
<FilterProperties("GetProperties")> _
<Microsoft.SqlServer.Dts.Pipeline.SSISScriptComponentEntryPointAttribute> _
<CLSCompliant(False)> _
Public Class ScriptMain
    Inherits UserComponent


    Private Const ColumnSeparator As String = "," + vbLf


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Public Overrides Sub Input_ProcessInputRow(ByVal Row As InputBuffer)
        Try
            Dim colsCount As Integer = m_inputIdx.Length
            For colIndex As Integer = 0 To colsCount - 1
                Dim bufIndex As Integer = m_inputIdx(colIndex)
                Dim dt As DataType = m_inputTypes(colIndex)

                ' Get input value.
                Dim inputValue As String = Nothing
                If Not Row.Buffer.IsNull(bufIndex) Then
                    Select Case dt
                        Case DataType.DT_TEXT, DataType.DT_NTEXT
                            inputValue = Row.Buffer.GetString(bufIndex).Trim()

                        Case Else
                            inputValue = Row.Buffer(bufIndex).ToString().Trim()
                    End Select
                End If

                Dim outputValue As String = inputValue
                Select Case Me.Action
                    Case ActionTypes.IsNull
                        If inputValue Is Nothing Then
                            ' NULL value. Replace with value.
                            outputValue = m_replaceValue
                        End If

                    Case ActionTypes.SetNull
                        If Not inputValue Is Nothing AndAlso _
                            m_matchValue.Contains(inputValue) Then
                            ' Value match. Replace with NULL.
                            outputValue = Nothing
                        End If
                End Select

                If outputValue = inputValue Then
                    ' No need to replace.
                    Continue For
                End If

                ' Replace value.
                If outputValue Is Nothing Then
                    Call Row.Buffer.SetNull(bufIndex)
                Else
                    Select Case dt
                        Case DataType.DT_TEXT, DataType.DT_NTEXT
                            Call Row.Buffer.SetString(bufIndex, outputValue)

                        Case DataType.DT_DATE
                            Row.Buffer(bufIndex) = Convert.ToDateTime(outputValue)

                        Case DataType.DT_GUID
                            Row.Buffer(bufIndex) = New Guid(outputValue)

                        Case Else
                            Row.Buffer(bufIndex) = outputValue
                    End Select
                End If
            Next
        Catch ex As Exception
            Call FireError_(ex.Message)
        End Try
    End Sub ' Input_ProcessInputRow


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

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

        ' Setup dynamic input columns indexes.
        Dim colsCount As Integer = input.InputColumnCollection.Count
        m_inputIdx = New Integer(colsCount - 1) {}
        m_inputTypes = New DataType(colsCount - 1) {}
        For colIndex As Integer = 0 To colsCount - 1
            Dim inputCol As IDTSInputColumn100 = input.InputColumnCollection(colIndex)
            m_inputIdx(colIndex) = Me.HostComponent.BufferManager.FindColumnByLineageID( _
                input.Buffer, _
                inputCol.LineageID)
            m_inputTypes(colIndex) = inputCol.DataType
        Next

        Dim actionValue As String = m_value
        If m_isValueVar Then
            ' Action value is contained in variable.
            actionValue = GetVariable_(actionValue).ToString()
        End If

        If Me.Action = ActionTypes.IsNull Then
            ' Setup replace value.
            m_replaceValue = Regex.Unescape(actionValue)
        Else
            ' Setup match value.
            m_matchValue = New Hashtable()
            Dim valueList() As String = CStr(actionValue).Split( _
                New String() {vbLf}, _
                StringSplitOptions.None)
            For Each matchValue As String In valueList
                If Not String.IsNullOrEmpty(matchValue) Then
                    matchValue = Regex.Unescape(matchValue)
                End If

                m_matchValue(matchValue) = Nothing
            Next
        End If
    End Sub ' PreExecute


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

        Try
            Dim input As IDTSInput100 = Me.ComponentMetaData.InputCollection(0)

            ' Setup input columns based on selection.
            Dim selectedCols() As String = CStr(Me.InputColumns).Split( _
                New String() {ColumnSeparator}, _
                StringSplitOptions.RemoveEmptyEntries)
            Dim virtInput As IDTSVirtualInput100 = input.GetVirtualInput()

            Call input.InputColumnCollection.RemoveAll()

            For Each col As String In selectedCols
                Dim virtColumn As IDTSVirtualInputColumn100 = virtInput.VirtualInputColumnCollection(col)
                Call virtInput.SetUsageType(virtColumn.LineageID, DTSUsageType.UT_READWRITE)
            Next

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

        Validate = result
    End Function    'Validate


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

        ' Setup static.
        Call result.Add("InputColumns")
        Call result.Add("Action")

        ' Setup dynamic.
        Select Case Me.Action
            Case ActionTypes.IsNull
                Call result.Add("IsReplaceValueVariable")
                Call result.Add(IIf(Me.IsReplaceValueVariable, "ReplaceValueVariable", "ReplaceValue"))

            Case ActionTypes.SetNull
                Call result.Add("IsMatchValueVariable")
                Call result.Add(IIf(Me.IsMatchValueVariable, "MatchValueVariable", "MatchValue"))
        End Select

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


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Public Overrides Sub OnInputPathAttached(ByVal inputID As Integer)
        Call MyBase.OnInputPathAttached(inputID)

        ' Initialize with all string columns selected.
        Dim input As IDTSInput100 = MyBase.ComponentMetaData.InputCollection(0)
        Dim virtInput As IDTSVirtualInput100 = input.GetVirtualInput()
        For Each column As IDTSVirtualInputColumn100 In virtInput.VirtualInputColumnCollection
            If column.DataType <> DataType.DT_STR AndAlso _
                column.DataType <> DataType.DT_WSTR AndAlso _
                column.DataType <> DataType.DT_TEXT AndAlso _
                column.DataType <> DataType.DT_NTEXT Then

                Continue For
            End If

            ' String column.
            Call virtInput.SetUsageType(column.LineageID, DTSUsageType.UT_READWRITE)
        Next
    End Sub ' OnInputPathAttached


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Public Overrides Sub OnInputPathDetached(ByVal inputID As Integer)
        MyBase.OnInputPathDetached(inputID)

        Dim input As IDTSInput100 = MyBase.ComponentMetaData.InputCollection(0)
        Call input.InputColumnCollection.RemoveAll()
    End Sub


#Region "Properties"
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Description("Select input columns you want to process.")> _
    <InputVirtualColumn("", False)> _
    Public Property InputColumns() As String
        Get
            InputColumns = m_inputCols
        End Get
        Set(ByVal value As String)
            Dim input As IDTSInput100 = MyBase.ComponentMetaData.InputCollection(0)
            If input.IsAttached Then
                If String.IsNullOrEmpty(value) Then
                    ' Setup based on input columns collection.
                    value = GetInputCols_()
                End If
            Else
                ' Reset when no input is attached.
                value = String.Empty
            End If

            m_inputCols = value
        End Set
    End Property    ' InputColumns


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Description("Select action.")> _
    <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
                m_value = String.Empty
            End If
        End Set
    End Property    ' Action


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Description("Specifies if ReplaceValue property references package variable.")> _
    <RefreshProperties(RefreshProperties.All)> _
    <NonEssential()> _
    Public Property IsReplaceValueVariable() As Boolean
        Get
            IsReplaceValueVariable = m_isValueVar
        End Get
        Set(ByVal value As Boolean)
            If m_isValueVar <> value Then
                m_isValueVar = value
                m_value = String.Empty
            End If
        End Set
    End Property    ' IsReplaceValueVariable


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Description("Specify replace value when input is NULL.")> _
    Public Property ReplaceValue() As String
        Get
            ReplaceValue = m_value
        End Get
        Set(ByVal value As String)
            m_value = value
        End Set
    End Property    ' ReplaceValue


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Description("Specifies variable containing replace value.")> _
    <Variable()> _
    Public Property ReplaceValueVariable() As String
        Get
            ReplaceValueVariable = m_value
        End Get
        Set(ByVal value As String)
            m_value = value
        End Set
    End Property    ' ReplaceValueVariable


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Description("Specifies if MatchValue property references package variable.")> _
    <RefreshProperties(RefreshProperties.All)> _
    <NonEssential()> _
    Public Property IsMatchValueVariable() As Boolean
        Get
            IsMatchValueVariable = m_isValueVar
        End Get
        Set(ByVal value As Boolean)
            If m_isValueVar <> value Then
                m_isValueVar = value
                m_value = String.Empty
            End If
        End Set
    End Property    ' IsMatchValueVariable


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Description("Specify match value to replace with NULL. Multiple match values are separated with newline.")> _
    <TextDialog("Specify match value.")> _
    Public Property MatchValue() As String
        Get
            MatchValue = m_value
        End Get
        Set(ByVal value As String)
            m_value = value
        End Set
    End Property    ' MatchValue


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Description("Specifies variable containing match value.")> _
    <Variable()> _
    Public Property MatchValueVariable() As String
        Get
            MatchValueVariable = m_value
        End Get
        Set(ByVal value As String)
            m_value = value
        End Set
    End Property    ' MatchValueVariable
#End Region ' Properties


#Region "Internals"
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Private Sub FireError_(ByVal message As String)
        Dim cancel As Boolean
        Call Me.ComponentMetaData.FireError( _
            0, _
            "Null Transformation", _
            message, _
            String.Empty, _
            0, _
            cancel)
    End Sub ' FireError_


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Private Function GetVariable_(ByVal varName As String) As Object
        Dim result As Object
        Dim vars As IDTSVariables100 = Nothing

        Call Me.VariableDispenser.LockOneForRead(varName, vars)
        Try
            result = vars(varName).Value
        Finally
            Call vars.Unlock()
        End Try

        GetVariable_ = result
    End Function    ' GetVariable_


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Private Function GetInputCols_() As String
        Dim result As String = String.Empty

        Dim input As IDTSInput100 = MyBase.ComponentMetaData.InputCollection(0)
        For Each column As IDTSInputColumn100 In input.InputColumnCollection
            If Not String.IsNullOrEmpty(result) Then
                result += ColumnSeparator
            End If

            result += column.Name
        Next

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


#Region "Attributes"
    Public Enum ActionTypes
        IsNull
        SetNull
    End Enum    ' ActionTypes

    Private m_inputCols As String = String.Empty
    Private m_action As ActionTypes = ActionTypes.IsNull
    Private m_isValueVar As Boolean
    Private m_value As String
    Private m_inputIdx() As Integer
    Private m_inputTypes() As DataType
    Private m_replaceValue As String
    Private m_matchValue As Hashtable
#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:ProjectId>{EA16731A-39A6-4F8D-AFAD-B883ADE066D8}</msb:ProjectId>
		<msb:NoContent>Reference;Import;Folder</msb:NoContent>
		<msb:Language>msBuild</msb:Language>
		<msb:DisplayName>scriptcomponent_6f8c63a6cfd340e996bb7f81af484e88</msb:DisplayName>
		<msb:CodeName>scriptcomponent_6f8c63a6cfd340e996bb7f81af484e88</msb:CodeName>
	</msb:PropertyGroup>
	<msb:ItemGroup>
		<msb:File Include="ComponentWrapper.vb"/>
		<msb:File Include="BufferWrapper.vb"/>
		<msb:File Include="main.vb"/>
		<msb:File Include="My Project\Settings.Designer.vb"/>
		<msb:File Include="My Project\Resources.Designer.vb"/>
		<msb:File Include="My Project\AssemblyInfo.vb"/>
		<msb:File Include="My Project\Resources.resx"/>
		<msb:File Include="My Project\Settings.settings"/>
		<msb:Project Include="scriptcomponent_6f8c63a6cfd340e996bb7f81af484e88.vbproj"/>
	</msb:ItemGroup>
</c:Project>]]></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[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_6f8c63a6cfd340e996bb7f81af484e88.vbproj.dll]]></arrayElement><arrayElement dataType="System.String"><![CDATA[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
OSNTeXN0ZW0uUmVzb3VyY2VzLlJ1bnRpbWVSZXNvdXJjZVNldAIAAAAAAAAAAAAAAFBBRFBBRFC0
AAAAQlNKQgEAAQAAAAAADAAAAHY0LjAuMzAzMTkAAAAABQBsAAAACA8AACN+AAB0DwAARBMAACNT
dHJpbmdzAAAAALgiAAB0AQAAI1VTACwkAAAQAAAAI0dVSUQAAAA8JAAALAgAACNCbG9iAAAAAAAA
AAIAAAFXHaIJCQ8AAAD6JTMAFgAAAQAAAFUAAAAOAAAAGQAAADwAAAAfAAAAewAAAAMAAABOAAAA
JAAAAAYAAAASAAAAGwAAAAoAAAABAAAACAAAAAEAAAADAAAAAwAAAAIAAAAAAAUTAQAAAAAACgC1
AYsBCgDpAcsBBgD5AfIBCgBRAosBBgDPAvIBCgBRAycDDgCjA4wDEgDyA9EDFgAjBNEDEgAyBNED
DgDWBIwDGgCvB4cHBgDnB9QHBgB+CPIBBgCrCJoIBgDYCMMIHgA/CSoJHgCMCXYJHgClCXYJHgDS
CboJBgD8CekJCgA7ChQKCgBTChMAHgCICmsKBgC9Cp0KBgDbCvIBBgD/CvIBCgAYCxMABgBcCz0L
BgBwC/IBEgB3C9EDBgCEC/IBIgDnC74LIgAWDL4LIgBBDL4LBgBkDPIBBgBuDPIBCgCWDBQKBgC4
DPIBBgDADPIBCgDdDBQKIgAXDb4LBgAqDfIBIgAwDb4LFgBxDdEDIgCVDb4LHgAMDu0NBgAbDvIB
IgBCDr4LIgBWDr4LIgCKDr4LIgDPDr4LBgDpDtQHCgD3DhMABgAHD/IBBgAVD9QHBgBED/IBGgBx
D4cHGgCCD4cHGgDAD4cHEgDnD9EDDgAwEA4QDgBKEA4QDgBmEA4QDgB+EA4QHgCaEHYJHgCvEHYJ
HgDKEHYJDgDcEA4QDgDyEA4QDgAGEQ4QBgAqERgRBgBREUARBgBkEekJBgDNEZ0KBgDtEZ0KBgAl
EgsSBgA+EhgRBgBbEj0LBgBpEhgRBgCEEhgRBgCfEhgRBgC4EhgRBgDREhgRBgDuEhgRAAAAAAEA
AAAAAAEAAQAAAAAAKQA3AAUAAQABAAAAAAByADcACQABAAIAAAEQAH0ANwANAAEAAwAFAQAAhwAA
AA0ABQAIAAUBAACVAAAADQAFAA8AAQAAALAAvAAdAAYAEQABAAAA9AC8AC0ABgAWAAEAAAACAbwA
DQAIABoAAQAAAA4BvAANAAkAGwABAAAAGAG8ACAACgAcAAIBAAAjAQAAOQATADYAAAAAAC8BOwEN
ABYANgAAARAAgAG8AEUAGAA6ADEAFAIgADEAPQItADEAXwI6ADEAhAJHACEAYAOQAAYAAgHJAAYA
DgHNAAEANgXhAAEANgXhAFGARgXrAAEALwfrAAEAOwcYAQEARAccAQEAUQfrAAEAWQcfAQEAuAcj
AQEAxQfrAAEA8QcoAQYGgwg5AVaAiwgYAVaAkggYAREAuwhGAREA5AhKAREAVwloAREAXwlsAVAg
AAAAAAYYxQETAAEAWCAAAAAABhjFARMAAQBgIAAAAAARGAACFwABAIwgAAAAABMIBwIbAAEApCAA
AAAAEwgtAigAAQC8IAAAAAATCFYCNQABANQgAAAAABMIdAJCAAEA7CAAAAAARgK6AmMAAQAIIQAA
AABGAsMCaAACABwhAAAAAIMA1AJsAAIANCEAAAAARgLcAnEAAgBIIQAAAAARAOUCeAACAGQhAAAA
AAEAAwOAAAMAgCEAAAAABhjFARMABACIIQAAAAADCBcDiwAEALwhAAAAAAYYxQETAAQA0CEAAAAA
BhjFAa8ABADgIQAAAABGCmwEuwAJAPQhAAAAAEYKgwS7AAkACCIAAAAAhgCbBMAACQAgIgAAAACG
AKMEwAAJADgiAAAAAAYYxQETAAkAWCIAAAAARgLqBNEACQCIIgAAAABGAwkF2wANAJwiAAAAAEYD
HAXbAA4AoCIAAAAABhjFAeUADwCwIgAAAAAGGMUB5QAQAMAiAAAAAAYYxQETABEA3CIAAAAARgIc
BdsAEQCEJAAAAABGAlYFEwASAMwlAAAAAAYAYQXzABIAlCYAAAAABgB1BbsAEwBIJwAAAABGAoMF
+QATAAQoAAAAAEYCnwX5ABQAPCgAAAAABgizBXEAFQBUKAAAAAAGCMQF/gAVAKAoAAAAAAYI2wUD
ARYAuCgAAAAABgjmBQgBFgDYKAAAAAAGCPEFwAAXAPAoAAAAAAYIDAYOARcAECkAAAAABggnBnEA
GAAoKQAAAAAGCDgG/gAYADQpAAAAAAYISQZxABkATCkAAAAABghiBv4AGQBYKQAAAAAGCHsGwAAa
AHApAAAAAAYIlAYOARoAkCkAAAAABgitBnEAGwCoKQAAAAAGCLwG/gAbALQpAAAAAAYIywZxABwA
zCkAAAAABgjiBv4AHADYKQAAAAABAPkG/gAdAAAqAAAAAAEADAcTAR4AUCoAAAAAAQAhB3EAHwDs
KgAAAAADGMUBEwAfAPQqAAAAABYI8AhOAR8AMCsAAAAAFggECVMBHwBEKwAAAAAWCBAJWAEfAEwr
AAAAABEYAAIXACAAYCsAAAAABhjFARMAIABoKwAAAAAWCGwJbwEgAAAAAQDBAgAAAQD6AgAAAQD6
AgAAAQBABAAAAgBKBAAAAwBTBAAABABbBAAABQBiBAAAAQD3BAAAAgD/BAAAAwBbBAAABABiBAAA
AQBbBAAAAQAyBQAAAQBABAAAAQBABAAAAQAyBQAAAQBqBQAAAQCXBQAAAQCXBQAAAQDVBQAAAQDV
BQAAAQDVBQAAAQDVBQAAAQDVBQAAAQDVBQAAAQDVBQAAAQDVBQAAAQAEBwAAAQAZBwAAAQAcCQkA
xQETAJEAxQF5AaEAxQGIAREAxQETAKkAxQETACQAxQETACwAxQETADQAxQETADwAxQETACQAFwOL
ACwAFwOLADQAFwOLADwAFwOLALEAxQETALkAxQETAMEAxQH+AMkAzAodAhkAugJjABkAwwJoACkA
7QoqAhkA3AJxANkACQs6AhkAxQETAOEAxQFKAkQAYAOQAEwAbAmLAEwAMwvHAkwAxQETAOkAxQEO
ATkAxQGvAPkAmwTAAPkAowTAAAEBxQEOAVkAxQETAEEAAAzhAgkBLQznAhEBTgztAhkBVwxoAPEA
XgzrADkAcwz0AkkAiwj5AkkAfgz+AvEAiAxxAEkATgwDA2kAjQxjADEBoAwIA0kAkgj5AEkArgwP
AzkByQwVA0kA1AwcAykBxQH+AEkB6QwiAyEB+QxxAEkBBQ0XAEEAVgUTABkBTQ1AA2EBZw1oAGEB
TgxGA1kAgw1NA2kBqg1TAxkBcwxoAFEBvA1oAHEByg1ZA1EB4A1fA3kBEg5kA2kAxQETAPEALg5p
A/EANA5zA2kA1Ax4AxkBcA6TA2EBgA4TAIkBrg6ZA5kBTgyfA5EBvA1oAIkB3A6mA6kBxQETAKkB
8w7HA7EBAw/MA6kBDQ/TA1kAgwX5AJkBIQ/oA8EBLw/uA5EB4A1fA8EBOw/AAMkBUA8TAFkAnwX5
ABkBWA/AAAkBZw8MBEEAmw8XBNkBsQ8dBNEBTgwmBOEBbAnuA9EB0A8TAGEBIQ/oA/EA1w81BFEB
3g9xAOkBxQETAPEBxQH+APkBxQH+AAECxQFqBAkCxQH6BBECxQH+ABkCxQE2BSkCxQETADECxQH+
ADkCxQETACkAMxHlBnkAxQHrBokAxQETAEkCWREIB0kCXxEIB1ECxQETAFkCxQH5AGECxQETAGkC
xQH+AHECxQH+AHkCxQH+AIECxQH+AIkCxQH+AJECxQH+AJkCxQH+AKECxQH+AKkCxQH+AA4AKADu
AAgAUAA8AQgAVABBASkAgwD/AS4AwwPfBy4A2wPfBy4AuwO/By4AkwMbBy4AmwM6By4AswPWAi4A
0wPWAi4AiwMSBy4AywMcCC4AowOCBy4AqwOPBy4A6wDWAi4ACwG5B0AAKwBBAUAAEwB/AUMAEwB/
AUMAGwCOAUkAgwDrAWMAEwB/AWMAGwCOAWkAgwAQAoAAKwBBAYMAcwBBAYMAewBBAYMAGwCOAYkA
gwDXAaAAKwBBAaMAEwB/AaMAwwBSAsAAKwBBAcMAEwB/AcMA6wDWAuAAKwBBAeMACwHWAgABKwBB
AQABEwB/AQMBCwHWAgkBKwMABQkBMwMHBSABKwBBASABEwB/ASkBOwN/ASkBMwM9BUABKwBBAUAB
EwB/AUkBOwN/AUkBMwNRBUkBQwNBAWABEwB/AWABKwBBAWMBGwNcBGMBIwNwBGMBCwNBAWMBEwNJ
BGMBCwHWAmkBMwPZBYABKwBBAYkBUwNBAYkBMwODBqABKwBBAakBQwNBAakBMwOWBakBOwN/AcAB
EwB/AcABKwBBAckBMwMiBskBSwMIBuABKwBBAekBMwO1BukBUwNBAQACEwB/AQACKwBBAQkCEwD/
BikCEwD/BkkCgwNBAUADCwHWAmADCwHWAsMByAHNAdIBIgImAjECNgJFAkUCzQLcAtwCIgIiAikD
fgOuA94D8gMBBDYCAQQHBCICNgI2AiICNgI2AiICLQQ7BPMG+gYNBwQAAQAGAAUABwAGAAsACAAN
ABAADgASAAAA6QFPAAAAogJUAAAAUQJZAAAArgJeAAAAagOYAAAArwTEAAAAwgTEAAAA/gcsAQAA
CwgwAQAAEgg1AQAAKQgsAQAANggsAQAASwg1AQAAYAgsAQAAawgsAQAAqwheAQAAIgljAQAAHAl0
AQIABAADAAIABQAFAAIABgAHAAIABwAJAAIADwALAAIAEgANAAIAEwAPAAIAIwARAAEAJAARAAIA
JQATAAEAJgATAAIAJwAVAAEAKAAVAAIAKQAXAAEAKgAXAAEALAAZAAIAKwAZAAIALQAbAAEALgAb
AAEAMAAdAAIALwAdAAIAMQAfAAEAMgAfAAIANwAhAAIAOAAjAAEAOQAjAAIAPAAlAHUAdQCIAKcB
rgG1AbwBtAK7AtsDBIAAAAEAAAAAAAAAAAAAAAAAvAAAAAQAAAAAAAAAAAAAAAEACgAAAAAACgAA
AAAAAAAAAAAACgATAAAAAAABAAAAAAAAAAAAAACdAHYDAAAAAAsAAAAAAAAAAAAAAKYAtAMAAAAA
CwAAAAAAAAAAAAAApgACBAAAAAALAAAAAAAAAAAAAACmAGQHAAAAAAQAAAAAAAAAAAAAAAEA8gEA
AAAACwAAAAAAAAAAAAAApgCaCwAAAAAAAAAAAQAAAIERAAAFAAQABgAEAAwACwAAABAADAD4AgAA
EAAZAPgCAAAAABsA+AItAEACLQDCAgAAAAAAPE1vZHVsZT4AbXNjb3JsaWIATWljcm9zb2Z0LlZp
c3VhbEJhc2ljAE15QXBwbGljYXRpb24AU2NyaXB0Q29tcG9uZW50XzZmOGM2M2E2Y2ZkMzQwZTk5
NmJiN2Y4MWFmNDg0ZTg4LnZicHJvai5NeQBNeUNvbXB1dGVyAE15UHJvamVjdABNeVdlYlNlcnZp
Y2VzAFRocmVhZFNhZmVPYmplY3RQcm92aWRlcmAxAElucHV0QnVmZmVyAFNjcmlwdENvbXBvbmVu
dF82ZjhjNjNhNmNmZDM0MGU5OTZiYjdmODFhZjQ4NGU4OC52YnByb2oAVXNlckNvbXBvbmVudABD
b25uZWN0aW9ucwBWYXJpYWJsZXMAU2NyaXB0TWFpbgBBY3Rpb25UeXBlcwBNeVJlc291cmNlcwBT
Y3JpcHRDb21wb25lbnRfNmY4YzYzYTZjZmQzNDBlOTk2YmI3ZjgxYWY0ODRlODgudmJwcm9qLk15
LlJlc291cmNlcwBNeVNldHRpbmdzAE1pY3Jvc29mdC5WaXN1YWxCYXNpYy5BcHBsaWNhdGlvblNl
cnZpY2VzAEFwcGxpY2F0aW9uQmFzZQAuY3RvcgBNaWNyb3NvZnQuVmlzdWFsQmFzaWMuRGV2aWNl
cwBDb21wdXRlcgBTeXN0ZW0AT2JqZWN0AC5jY3RvcgBnZXRfQ29tcHV0ZXIAbV9Db21wdXRlck9i
amVjdFByb3ZpZGVyAGdldF9BcHBsaWNhdGlvbgBtX0FwcE9iamVjdFByb3ZpZGVyAFVzZXIAZ2V0
X1VzZXIAbV9Vc2VyT2JqZWN0UHJvdmlkZXIAZ2V0X1dlYlNlcnZpY2VzAG1fTXlXZWJTZXJ2aWNl
c09iamVjdFByb3ZpZGVyAEFwcGxpY2F0aW9uAFdlYlNlcnZpY2VzAEVxdWFscwBvAEdldEhhc2hD
b2RlAFR5cGUAR2V0VHlwZQBUb1N0cmluZwBDcmVhdGVfX0luc3RhbmNlX18AVABpbnN0YW5jZQBE
aXNwb3NlX19JbnN0YW5jZV9fAGdldF9HZXRJbnN0YW5jZQBNaWNyb3NvZnQuVmlzdWFsQmFzaWMu
TXlTZXJ2aWNlcy5JbnRlcm5hbABDb250ZXh0VmFsdWVgMQBtX0NvbnRleHQAR2V0SW5zdGFuY2UA
Q296eVJvYy5TU0lTUGx1cy4yMDEyAENvenlSb2MuU3FsU2VydmVyLlNTSVMAU2NyaXB0QnVmZmVy
UGx1cwBNaWNyb3NvZnQuU3FsU2VydmVyLlR4U2NyaXB0AE1pY3Jvc29mdC5TcWxTZXJ2ZXIuRHRz
LlBpcGVsaW5lAFNjcmlwdENvbXBvbmVudABNaWNyb3NvZnQuU3FsU2VydmVyLlBpcGVsaW5lSG9z
dABQaXBlbGluZUJ1ZmZlcgBPdXRwdXROYW1lTWFwAENvbXBvbmVudABPYmplY3RJRABJc0lucHV0
AEJ1ZmZlcgBPdXRwdXRNYXAAZ2V0X1N0YXRpY0lucHV0Q29sdW1ucwBnZXRfU3RhdGljT3V0cHV0
Q29sdW1ucwBOZXh0Um93AEVuZE9mUm93c2V0AFN0YXRpY0lucHV0Q29sdW1ucwBTdGF0aWNPdXRw
dXRDb2x1bW5zAFNjcmlwdENvbXBvbmVudFBsdXMAUHJvY2Vzc0lucHV0AElucHV0SUQASW5wdXRO
YW1lAElucHV0X1Byb2Nlc3NJbnB1dABJbnB1dF9Qcm9jZXNzSW5wdXRSb3cAUm93AFBhcmVudENv
bXBvbmVudABDb2x1bW5TZXBhcmF0b3IAUHJlRXhlY3V0ZQBWYWxpZGF0ZQBlcnJNZXNzYWdlAEdl
dFByb3BlcnRpZXMAT25JbnB1dFBhdGhBdHRhY2hlZABpbnB1dElEAE9uSW5wdXRQYXRoRGV0YWNo
ZWQAZ2V0X0lucHV0Q29sdW1ucwBzZXRfSW5wdXRDb2x1bW5zAHZhbHVlAGdldF9BY3Rpb24Ac2V0
X0FjdGlvbgBnZXRfSXNSZXBsYWNlVmFsdWVWYXJpYWJsZQBzZXRfSXNSZXBsYWNlVmFsdWVWYXJp
YWJsZQBnZXRfUmVwbGFjZVZhbHVlAHNldF9SZXBsYWNlVmFsdWUAZ2V0X1JlcGxhY2VWYWx1ZVZh
cmlhYmxlAHNldF9SZXBsYWNlVmFsdWVWYXJpYWJsZQBnZXRfSXNNYXRjaFZhbHVlVmFyaWFibGUA
c2V0X0lzTWF0Y2hWYWx1ZVZhcmlhYmxlAGdldF9NYXRjaFZhbHVlAHNldF9NYXRjaFZhbHVlAGdl
dF9NYXRjaFZhbHVlVmFyaWFibGUAc2V0X01hdGNoVmFsdWVWYXJpYWJsZQBGaXJlRXJyb3JfAG1l
c3NhZ2UAR2V0VmFyaWFibGVfAHZhck5hbWUAR2V0SW5wdXRDb2xzXwBtX2lucHV0Q29scwBtX2Fj
dGlvbgBtX2lzVmFsdWVWYXIAbV92YWx1ZQBtX2lucHV0SWR4AE1pY3Jvc29mdC5TcWxTZXJ2ZXIu
RFRTUnVudGltZVdyYXAATWljcm9zb2Z0LlNxbFNlcnZlci5EdHMuUnVudGltZS5XcmFwcGVyAERh
dGFUeXBlAG1faW5wdXRUeXBlcwBtX3JlcGxhY2VWYWx1ZQBTeXN0ZW0uQ29sbGVjdGlvbnMASGFz
aHRhYmxlAG1fbWF0Y2hWYWx1ZQBJbnB1dENvbHVtbnMAQWN0aW9uAElzUmVwbGFjZVZhbHVlVmFy
aWFibGUAUmVwbGFjZVZhbHVlAFJlcGxhY2VWYWx1ZVZhcmlhYmxlAElzTWF0Y2hWYWx1ZVZhcmlh
YmxlAE1hdGNoVmFsdWUATWF0Y2hWYWx1ZVZhcmlhYmxlAEVudW0AdmFsdWVfXwBJc051bGwAU2V0
TnVsbABTeXN0ZW0uUmVzb3VyY2VzAFJlc291cmNlTWFuYWdlcgBfcmVzTWdyAFN5c3RlbS5HbG9i
YWxpemF0aW9uAEN1bHR1cmVJbmZvAF9yZXNDdWx0dXJlAGdldF9SZXNvdXJjZU1hbmFnZXIAZ2V0
X0N1bHR1cmUAc2V0X0N1bHR1cmUAVmFsdWUAQ3VsdHVyZQBTeXN0ZW0uQ29uZmlndXJhdGlvbgBB
cHBsaWNhdGlvblNldHRpbmdzQmFzZQBtX1ZhbHVlAG1fU3luY09iamVjdABnZXRfVmFsdWUAU3lz
dGVtLkNvbXBvbmVudE1vZGVsAEVkaXRvckJyb3dzYWJsZUF0dHJpYnV0ZQBFZGl0b3JCcm93c2Fi
bGVTdGF0ZQBTeXN0ZW0uQ29kZURvbS5Db21waWxlcgBHZW5lcmF0ZWRDb2RlQXR0cmlidXRlAFN5
c3RlbS5EaWFnbm9zdGljcwBEZWJ1Z2dlckhpZGRlbkF0dHJpYnV0ZQBNaWNyb3NvZnQuVmlzdWFs
QmFzaWMuQ29tcGlsZXJTZXJ2aWNlcwBTdGFuZGFyZE1vZHVsZUF0dHJpYnV0ZQBIaWRlTW9kdWxl
TmFtZUF0dHJpYnV0ZQBTeXN0ZW0uQ29tcG9uZW50TW9kZWwuRGVzaWduAEhlbHBLZXl3b3JkQXR0
cmlidXRlAFN5c3RlbS5SdW50aW1lLkNvbXBpbGVyU2VydmljZXMAUnVudGltZUhlbHBlcnMAR2V0
T2JqZWN0VmFsdWUAUnVudGltZVR5cGVIYW5kbGUAR2V0VHlwZUZyb21IYW5kbGUAQWN0aXZhdG9y
AENyZWF0ZUluc3RhbmNlAE15R3JvdXBDb2xsZWN0aW9uQXR0cmlidXRlAHNldF9WYWx1ZQBTeXN0
ZW0uUnVudGltZS5JbnRlcm9wU2VydmljZXMAQ29tVmlzaWJsZUF0dHJpYnV0ZQBTdHJpbmcAU2Ny
aXB0QnVmZmVyAENMU0NvbXBsaWFudEF0dHJpYnV0ZQBNaWNyb3NvZnQuU3FsU2VydmVyLkRUU1Bp
cGVsaW5lV3JhcABNaWNyb3NvZnQuU3FsU2VydmVyLkR0cy5QaXBlbGluZS5XcmFwcGVyAElEVFND
b21wb25lbnRNZXRhRGF0YTEwMABnZXRfQ29tcG9uZW50TWV0YURhdGEASURUU0lucHV0Q29sbGVj
dGlvbjEwMABnZXRfSW5wdXRDb2xsZWN0aW9uAElEVFNJbnB1dDEwMABnZXRfSXRlbQBnZXRfSUQA
RW1wdHkARXhjZXB0aW9uAEd1aWQAZ2V0X0J1ZmZlcgBHZXRTdHJpbmcAVHJpbQBDb250YWlucwBP
cGVyYXRvcnMAQ29tcGFyZVN0cmluZwBTZXRTdHJpbmcAQ29udmVydABEYXRlVGltZQBUb0RhdGVU
aW1lAHNldF9JdGVtAFByb2plY3REYXRhAFNldFByb2plY3RFcnJvcgBnZXRfTWVzc2FnZQBDbGVh
clByb2plY3RFcnJvcgBJRFRTSW5wdXRDb2x1bW4xMDAASW50MzIASURUU0lucHV0Q29sdW1uQ29s
bGVjdGlvbjEwMABnZXRfSW5wdXRDb2x1bW5Db2xsZWN0aW9uAGdldF9Db3VudABQaXBlbGluZUNv
bXBvbmVudABnZXRfSG9zdENvbXBvbmVudABJRFRTQnVmZmVyTWFuYWdlcjEwMABnZXRfQnVmZmVy
TWFuYWdlcgBnZXRfTGluZWFnZUlEAEZpbmRDb2x1bW5CeUxpbmVhZ2VJRABnZXRfRGF0YVR5cGUA
U3lzdGVtLlRleHQuUmVndWxhckV4cHJlc3Npb25zAFJlZ2V4AFVuZXNjYXBlAFN0cmluZ1NwbGl0
T3B0aW9ucwBTcGxpdABJc051bGxPckVtcHR5AElEVFNWaXJ0dWFsSW5wdXQxMDAASURUU1ZpcnR1
YWxJbnB1dENvbHVtbjEwMABHZXRWaXJ0dWFsSW5wdXQAUmVtb3ZlQWxsAElEVFNWaXJ0dWFsSW5w
dXRDb2x1bW5Db2xsZWN0aW9uMTAwAGdldF9WaXJ0dWFsSW5wdXRDb2x1bW5Db2xsZWN0aW9uAERU
U1VzYWdlVHlwZQBTZXRVc2FnZVR5cGUAQXJyYXlMaXN0AEFkZABJbnRlcmFjdGlvbgBJSWYAQXJy
YXkAVG9BcnJheQBJRW51bWVyYXRvcgBHZXRFbnVtZXJhdG9yAGdldF9DdXJyZW50AE1vdmVOZXh0
AElEaXNwb3NhYmxlAERpc3Bvc2UAZ2V0X0lzQXR0YWNoZWQARmlyZUVycm9yAElEVFNWYXJpYWJs
ZXMxMDAASURUU1ZhcmlhYmxlRGlzcGVuc2VyMTAwAGdldF9WYXJpYWJsZURpc3BlbnNlcgBMb2Nr
T25lRm9yUmVhZABJRFRTVmFyaWFibGUxMDAAVW5sb2NrAENvbmNhdABnZXRfTmFtZQBTU0lTU2Ny
aXB0Q29tcG9uZW50RW50cnlQb2ludEF0dHJpYnV0ZQBDb3p5Um9jLlNxbFNlcnZlci5TU0lTLkF0
dHJpYnV0ZXMARmlsdGVyUHJvcGVydGllc0F0dHJpYnV0ZQBWYWxpZGF0ZVByb3BlcnRpZXNBdHRy
aWJ1dGUAU29ydFByb3BlcnRpZXNBdHRyaWJ1dGUASW5wdXRWaXJ0dWFsQ29sdW1uQXR0cmlidXRl
AERlc2NyaXB0aW9uQXR0cmlidXRlAFJlZnJlc2hQcm9wZXJ0aWVzQXR0cmlidXRlAFJlZnJlc2hQ
cm9wZXJ0aWVzAE5vbkVzc2VudGlhbEF0dHJpYnV0ZQBUZXh0RGlhbG9nQXR0cmlidXRlAFZhcmlh
YmxlQXR0cmlidXRlAFN5c3RlbS5SZWZsZWN0aW9uAEFzc2VtYmx5AGdldF9Bc3NlbWJseQBTeXN0
ZW0uVGhyZWFkaW5nAE1vbml0b3IARW50ZXIARXhpdABEZWJ1Z2dlck5vblVzZXJDb2RlQXR0cmli
dXRlAFNjcmlwdENvbXBvbmVudF82ZjhjNjNhNmNmZDM0MGU5OTZiYjdmODFhZjQ4NGU4OC52YnBy
b2ouUmVzb3VyY2VzLnJlc291cmNlcwBDb21waWxhdGlvblJlbGF4YXRpb25zQXR0cmlidXRlAFJ1
bnRpbWVDb21wYXRpYmlsaXR5QXR0cmlidXRlAFN5c3RlbS5SdW50aW1lLlZlcnNpb25pbmcAVGFy
Z2V0RnJhbWV3b3JrQXR0cmlidXRlAEFzc2VtYmx5RmlsZVZlcnNpb25BdHRyaWJ1dGUAR3VpZEF0
dHJpYnV0ZQBBc3NlbWJseVRyYWRlbWFya0F0dHJpYnV0ZQBBc3NlbWJseUNvcHlyaWdodEF0dHJp
YnV0ZQBBc3NlbWJseVByb2R1Y3RBdHRyaWJ1dGUAQXNzZW1ibHlDb21wYW55QXR0cmlidXRlAEFz
c2VtYmx5RGVzY3JpcHRpb25BdHRyaWJ1dGUAQXNzZW1ibHlUaXRsZUF0dHJpYnV0ZQBTY3JpcHRD
b21wb25lbnRfNmY4YzYzYTZjZmQzNDBlOTk2YmI3ZjgxYWY0ODRlODgudmJwcm9qLmRsbAAAAAAA
C0kAbgBwAHUAdAAAAwoAAAUsAAoAABlJAG4AcAB1AHQAQwBvAGwAdQBtAG4AcwAADUEAYwB0AGkA
bwBuAAAtSQBzAFIAZQBwAGwAYQBjAGUAVgBhAGwAdQBlAFYAYQByAGkAYQBiAGwAZQAAKVIAZQBw
AGwAYQBjAGUAVgBhAGwAdQBlAFYAYQByAGkAYQBiAGwAZQAAGVIAZQBwAGwAYQBjAGUAVgBhAGwA
dQBlAAApSQBzAE0AYQB0AGMAaABWAGEAbAB1AGUAVgBhAHIAaQBhAGIAbABlAAAlTQBhAHQAYwBo
AFYAYQBsAHUAZQBWAGEAcgBpAGEAYgBsAGUAABVNAGEAdABjAGgAVgBhAGwAdQBlAAAnTgB1AGwA
bAAgAFQAcgBhAG4AcwBmAG8AcgBtAGEAdABpAG8AbgAAMU0AeQAuAFIAZQBzAG8AdQByAGMAZQBz
AC4ATQB5AFIAZQBzAG8AdQByAGMAZQBzAAAAAABqWh8tQVlhTbit4VfyflPZAAi3elxWGTTgiQiw
P19/EdUKOgMgAAEDAAABBAAAEgwHBhUSGAESDAQAABIIBwYVEhgBEggEAAASEQcGFRIYARIRBAAA
EhQHBhUSGAESFAQIABIMBAgAEggECAASEQQIABIUBCABAhwDIAAIBCAAEhUDIAAOAh4ABxABAR4A
HgAHMAEBARAeAAITAAQgABMABwYVEhkBEwAEKAATAAgWz0kLuAw06giJhF3NgIDMkQsgBQESIQgC
EiUSKQQgAB0OAyAAAgQoAB0OAwYSJAMGEigJIAQBCA4SJRIpBSABARIcAwYSIQUgAQESIQIGDgQs
AAoABSABAhAOBCABAQgEIAEBDgQgABEwBSABAREwBCABAQIEIAEcDgMGETACBgIDBh0IBAYdETED
BhI1AygADgQoABEwAygAAgIGCAQAAAAABAEAAAADBhI9AwYSQQQAABI9BAAAEkEFAAEBEkEECAAS
PQQIABJBAwYSOAIGHAQAABI4BAgAEjgFIAEBEU0IAQABAAAAAAAFIAIBDg4YAQAKTXlUZW1wbGF0
ZQgxMC4wLjAuMAAABhUSGAESDAYVEhgBEggGFRIYARIRBhUSGAESFAQHARIMBAcBEggEBwESEQQH
ARIUEwEADk15LldlYlNlcnZpY2VzAAATAQAOTXkuQXBwbGljYXRpb24AABABAAtNeS5Db21wdXRl
cgAADAEAB015LlVzZXIAAAQAARwcAwcBAgMHAQgGAAESFRFpBAcBEhUDBwEOBRABAB4ABAoBHgAE
BwEeAAcgBAEODg4OYQEANFN5c3RlbS5XZWIuU2VydmljZXMuUHJvdG9jb2xzLlNvYXBIdHRwQ2xp
ZW50UHJvdG9jb2wSQ3JlYXRlX19JbnN0YW5jZV9fE0Rpc3Bvc2VfX0luc3RhbmNlX18AAAAGFRIY
ARMABhUSGQETAAQKARMABSABARMACAcDEwATABMABQEAAAAABAcBHQ4FIAASgIUFIAASgIkGIAES
gI0cBCAAEiUEIAECCAQgAQ4IBCABHAgGAAMIDg4CBSACAQgOBgABEYChDgUgAgEIHAYAAQESgJEW
BwwICAgRMQ4OEoCRCBExETARMRGAlQUgABKAsQYgARKAqRwFIAASgLUFIAASgLkFIAIICAgEIAAR
MQQAAQ4OCSACHQ4dDhGAwQQAAQIOBSACARwcFAcLDggSgI0IEoCpHQ4OCB0OCB0OBSAAEoDFBSAA
EoDNBiABEoDJHAcgAggIEYDRGAcLAgISgI0dDhKAxQ4SgMkSgJEdDggdDgQgAQgcBgADHAIcHAcg
ARKA3RIVAh0OCQcDHQ4SgNURMAUgABKA4QMgABwOBwQSgI0SgMUSgMkSgOEFBwESgI0EBwERMAog
BgEIDg4OCBACBSAAEoDtCCACAQ4QEoDpBiABEoDxHAcHAxwcEoDpBQACDg4ODQcFDhKAjQ4SgKkS
gOESAQANR2V0UHJvcGVydGllcwAADQEACFZhbGlkYXRlAAAFIAEBHQ6AiAEACAAAAAxJbnB1dENv
bHVtbnMGQWN0aW9uFklzUmVwbGFjZVZhbHVlVmFyaWFibGUMUmVwbGFjZVZhbHVlFFJlcGxhY2VW
YWx1ZVZhcmlhYmxlFElzTWF0Y2hWYWx1ZVZhcmlhYmxlCk1hdGNoVmFsdWUSTWF0Y2hWYWx1ZVZh
cmlhYmxlAAAFIAIBDgIGAQAAAAAALgEAKVNlbGVjdCBpbnB1dCBjb2x1bW5zIHlvdSB3YW50IHRv
IHByb2Nlc3MuAAAGIAEBEYEREwEADlNlbGVjdCBhY3Rpb24uAABEAQA/U3BlY2lmaWVzIGlmIFJl
cGxhY2VWYWx1ZSBwcm9wZXJ0eSByZWZlcmVuY2VzIHBhY2thZ2UgdmFyaWFibGUuAABCAQA9U3Bl
Y2lmaWVzIGlmIE1hdGNoVmFsdWUgcHJvcGVydHkgcmVmZXJlbmNlcyBwYWNrYWdlIHZhcmlhYmxl
LgAALgEAKVNwZWNpZnkgcmVwbGFjZSB2YWx1ZSB3aGVuIGlucHV0IGlzIE5VTEwuAAAZAQAUU3Bl
Y2lmeSBtYXRjaCB2YWx1ZS4AAGABAFtTcGVjaWZ5IG1hdGNoIHZhbHVlIHRvIHJlcGxhY2Ugd2l0
aCBOVUxMLiBNdWx0aXBsZSBtYXRjaCB2YWx1ZXMgYXJlIHNlcGFyYXRlZCB3aXRoIG5ld2xpbmUu
AAAxAQAsU3BlY2lmaWVzIHZhcmlhYmxlIGNvbnRhaW5pbmcgcmVwbGFjZSB2YWx1ZS4AAC8BACpT
cGVjaWZpZXMgdmFyaWFibGUgY29udGFpbmluZyBtYXRjaCB2YWx1ZS4AAAUgABKBIQcgAgEOEoEh
BgcCEj0SPQQHARJBCAEAAgAAAAAABAABARwEBwESOAgBAAgAAAAAAB4BAAEAVAIWV3JhcE5vbkV4
Y2VwdGlvblRocm93cwFHAQAaLk5FVEZyYW1ld29yayxWZXJzaW9uPXY0LjABAFQOFEZyYW1ld29y
a0Rpc3BsYXlOYW1lEC5ORVQgRnJhbWV3b3JrIDQMAQAHMS4wLjAuMAAAKQEAJDg4ZDM1MGU2LWQ3
NDAtNDA4OC04YThkLWNhYTk0NDJkNzFlNgAABQEAAQAAHwEAGkNvcHlyaWdodCBAIE1pY3Jvc29m
dCAyMDEzAAA8AQA3U2NyaXB0Q29tcG9uZW50XzZmOGM2M2E2Y2ZkMzQwZTk5NmJiN2Y4MWFmNDg0
ZTg4LnZicHJvagAADgEACU1pY3Jvc29mdAAAAAxZAAAAAAAAAAAAAC5ZAAAAIAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAgWQAAAAAAAAAAAAAAAAAAAAAAAAAAX0NvckRsbE1haW4AbXNjb3JlZS5kbGwA
AAAAAP8lACBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABABAAAAAYAACAAAAAAAAA
AAAAAAAAAAABAAEAAAAwAACAAAAAAAAAAAAAAAAAAAABAAAAAABIAAAAWGAAAGgEAAAAAAAAAAAA
AGgENAAAAFYAUwBfAFYARQBSAFMASQBPAE4AXwBJAE4ARgBPAAAAAAC9BO/+AAABAAAAAQAAAAAA
AAABAAAAAAA/AAAAAAAAAAQAAAACAAAAAAAAAAAAAAAAAAAARAAAAAEAVgBhAHIARgBpAGwAZQBJ
AG4AZgBvAAAAAAAkAAQAAABUAHIAYQBuAHMAbABhAHQAaQBvAG4AAAAAAAAAsATIAwAAAQBTAHQA
cgBpAG4AZwBGAGkAbABlAEkAbgBmAG8AAACkAwAAAQAwADAAMAAwADAANABiADAAAAA0AAoAAQBD
AG8AbQBwAGEAbgB5AE4AYQBtAGUAAAAAAE0AaQBjAHIAbwBzAG8AZgB0AAAAmAA4AAEARgBpAGwA
ZQBEAGUAcwBjAHIAaQBwAHQAaQBvAG4AAAAAAFMAYwByAGkAcAB0AEMAbwBtAHAAbwBuAGUAbgB0
AF8ANgBmADgAYwA2ADMAYQA2AGMAZgBkADMANAAwAGUAOQA5ADYAYgBiADcAZgA4ADEAYQBmADQA
OAA0AGUAOAA4AC4AdgBiAHAAcgBvAGoAAAAwAAgAAQBGAGkAbABlAFYAZQByAHMAaQBvAG4AAAAA
ADEALgAwAC4AMAAuADAAAACYADwAAQBJAG4AdABlAHIAbgBhAGwATgBhAG0AZQAAAFMAYwByAGkA
cAB0AEMAbwBtAHAAbwBuAGUAbgB0AF8ANgBmADgAYwA2ADMAYQA2AGMAZgBkADMANAAwAGUAOQA5
ADYAYgBiADcAZgA4ADEAYQBmADQAOAA0AGUAOAA4AC4AdgBiAHAAcgBvAGoALgBkAGwAbAAAAFwA
GwABAEwAZQBnAGEAbABDAG8AcAB5AHIAaQBnAGgAdAAAAEMAbwBwAHkAcgBpAGcAaAB0ACAAQAAg
AE0AaQBjAHIAbwBzAG8AZgB0ACAAMgAwADEAMwAAAAAAoAA8AAEATwByAGkAZwBpAG4AYQBsAEYA
aQBsAGUAbgBhAG0AZQAAAFMAYwByAGkAcAB0AEMAbwBtAHAAbwBuAGUAbgB0AF8ANgBmADgAYwA2
ADMAYQA2AGMAZgBkADMANAAwAGUAOQA5ADYAYgBiADcAZgA4ADEAYQBmADQAOAA0AGUAOAA4AC4A
dgBiAHAAcgBvAGoALgBkAGwAbAAAAJAAOAABAFAAcgBvAGQAdQBjAHQATgBhAG0AZQAAAAAAUwBj
AHIAaQBwAHQAQwBvAG0AcABvAG4AZQBuAHQAXwA2AGYAOABjADYAMwBhADYAYwBmAGQAMwA0ADAA
ZQA5ADkANgBiAGIANwBmADgAMQBhAGYANAA4ADQAZQA4ADgALgB2AGIAcAByAG8AagAAADQACAAB
AFAAcgBvAGQAdQBjAHQAVgBlAHIAcwBpAG8AbgAAADEALgAwAC4AMAAuADAAAAA4AAgAAQBBAHMA
cwBlAG0AYgBsAHkAIABWAGUAcgBzAGkAbwBuAAAAMQAuADAALgAwAC4AMAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAwAAABAOQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=]]></arrayElement></arrayElements></property><property id="9" name="UserComponentTypeName" dataType="System.String">CozyRoc.SqlServer.SSIS.ScriptComponentHostPlus, CozyRoc.SSISPlus.2012, Version=1.0.0.0, Culture=neutral, PublicKeyToken=16cf490bb80c34ea</property><property id="11" 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_6f8c63a6cfd340e996bb7f81af484e88</property><property id="12" name="ScriptLanguage" dataType="System.String" description="Specifies the programming language used by the script." typeConverter="Microsoft.SqlServer.VSTAHosting.ScriptingLanguages, Microsoft.SqlServer.VSTAScriptingLib, Version=11.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91">VisualBasic</property></properties><inputs><input id="13" name="Input" hasSideEffects="true"></input></inputs><outputs><output id="17" name="Output" synchronousInputId="13"><externalMetadataColumns /></output></outputs></component>