Scem.Support.psm1

<#
.Synopsis
   Short description
.DESCRIPTION
   Long description
.EXAMPLE
   Example of how to use this cmdlet
.EXAMPLE
   Another example of how to use this cmdlet
#>

function Export-SCVMMInfo {
    [CmdletBinding()]
    Param(
        [parameter(Mandatory = $false,
                   Position=0)]
        [string]
        $ComputerName = $env:COMPUTERNAME
        )
    if($null -eq (Get-Module virtualmachinemanager)){
        try{
            Import-Module virtualmachinemanager -ErrorAction Stop
        }
        catch [FileNotFoundException]{
            Write-Error "This does not appear to be a System Center Virtual Machine Manager."
        }
    }

    # Get our VMM Server
    [Microsoft.SystemCenter.VirtualMachineManager.Remoting.ServerConnection]$vmmServer = $null
    $vmmServer = virtualmachinemanager\Get-SCVMMServer -ComputerName $ComputerName

    # Get the .NET Framework Version & add a property
    $dotNetFrameworkVersion = Get-DotNetFrameworkVersion -ComputerName $vmmServer.FQDN
    $vmmServer | Add-Member -NotePropertyName DotNetFrameworkVersion -NotePropertyValue $dotNetFrameworkVersion

    # Write the json to a file
    $vmmServer | ConvertTo-Json | Out-File .\vmmServer.json

    # Get VMM Host Groups & write json
    $vmmHostGroups = Get-SCVMHostGroup -VMMServer $vmmServer
    $vmmHostGroups | ConvertTo-Json | Out-File .\vmmHostGroups.json

    $vmmHostCollection = Get-SCVMHost -VMMServer $vmmServer
    $vmmHostCollection | ConvertTo-Json | Out-File .\vmmHosts.json

    if ($null -ne $vmmServer) {
        if ($vmmServer.IsConnected) {
            $vmmServer.Disconnect()
        }
        $vmmServer = $null
    }
}

<#
.Synopsis
   Exports SCOM Management Server information to json
.DESCRIPTION
   Exports SCOM Management Server information to json
.EXAMPLE
   PS C:\> Get-SCOMManagementServer | Export-SCOMManagementServerInfo
.EXAMPLE
   PS C:\> $managementServerCollection = Get-SCOMManagementServer
   PS C:\> Export-SCOMManagementServerInfo -ManagementServer $managementServerCollection
#>

function Export-SCOMManagementServerInfo
{
    [CmdletBinding()]
    [OutputType([string])]
    Param
    (
        [Parameter(Mandatory=$true,
                   ValueFromPipeline=$true,
                   Position=0)]
        [ValidateNotNull()]
        [Microsoft.EnterpriseManagement.Administration.ManagementServer[]]
        $ManagementServer
    )

    Begin{
        $jsonOutput = @()
    }
    Process{
        # This is a hack because ConvertTo-Json does not like converting ManagmentServers.
        # When you pipe to ConvertTo-Json, you get this error:
        # "ConvertTo-Json : An item with the same key has already been added."
        # The multiple pipes below seem to convert to json as currently desired.
        $tmpMgmtServer = $ManagementServer | ConvertTo-Csv | ConvertFrom-Csv

        # Get the .NET Framework version and add a new property to the Management Server object.
        $dotNetFrameworkVersion = Get-DotNetFrameworkVersion -ComputerName $tmpMgmtServer.ComputerName
        $tmpMgmtServer | Add-Member -NotePropertyName DotNetFrameworkVersion -NotePropertyValue $dotNetFrameworkVersion

        # Add the temporary object to the output array
        $jsonOutput += $tmpMgmtServer
    }
    End{
        $jsonOutput | ConvertTo-Json | Out-File .\SCOMManagementServerInfo.json
    }
}

<#
.Synopsis
   Returns the friendly version of the .NET Framework.
.DESCRIPTION
   Converts the value of 'SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full' Release to a string.
#>

function ConvertTo-DotNetFrameworkFriendlyVersionName
{
    [CmdletBinding()]
    [OutputType([string])]
    Param
    (
        [System.UInt32]$Release
    )
    [string]$FriendlyVersionValue = switch ($Release) {
        378389 { ".NET Framework 4.5" }
        378675 { ".NET Framework 4.5.1" }
        378758 { ".NET Framework 4.5.1" }
        379893 { ".NET Framework 4.5.2" }
        393295 { ".NET Framework 4.6" }
        393297 { ".NET Framework 4.6" }
        394254 { ".NET Framework 4.6.1" }
        394271 { ".NET Framework 4.6.1" }
        394802 { ".NET Framework 4.6.2" }
        394806 { ".NET Framework 4.6.2" }
        460798 { ".NET Framework 4.7" }
        460805 { ".NET Framework 4.7" }
        461308 { ".NET Framework 4.7.1" }
        461310 { ".NET Framework 4.7.1" }
        461808 { ".NET Framework 4.7.2" }
        461814 { ".NET Framework 4.7.2" }
        528040 { ".NET Framework 4.8" }
        528049 { ".NET Framework 4.8" }
        528372 { ".NET Framework 4.8" }
        default { "Unknown .NET version: $Release" }
    }

    return $FriendlyVersionValue
}
<#
.Synopsis
   Returns the .NET Framework Version
.DESCRIPTION
   Returns the .NET Framework Version
#>

function Get-DotNetFrameworkVersion
{
    [CmdletBinding()]
    [OutputType([string])]
    Param
    (
        [parameter(Mandatory = $false)]
        [string] $ComputerName = $env:COMPUTERNAME
    )

    $arguments = @{sSubKeyName = "SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full"; sValueName ='Release'};

    # Invoke-CimMethod seems to not like FQDNs when $ComputerName is the current machine.
    # For example: assume $ComputerName -eq 'ms1.contoso.com' and $env:COMPUTERNAME -eq 'ms1'.
    # Then Invoke-CimMethod will throw this:
    ########################################################################################
    # Invoke-CimMethod : Access is denied.
    # At line:1 char:1
    # + Invoke-CimMethod -ClassName StdRegProv -MethodName GetDWORDValue -Arg ...
    # + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    # + CategoryInfo : PermissionDenied: (root\cimv2:StdRegProv:String) [Invoke-CimMethod], CimException
    # + FullyQualifiedErrorId : HRESULT 0x80070005,Microsoft.Management.Infrastructure.CimCmdlets.InvokeCimMethodCommand
    # + PSComputerName : OpsMgr-1.contoso.com
    ########################################################################################
    #
    # This split ensures we always call Invoke-CimMethod with the NetBIOS name even if
    # $ComputerName is already a NetBIOS name.
    [string]$tmpComputerName = $ComputerName.Split('.')[0]

    # https://docs.microsoft.com/en-us/previous-versions/windows/desktop/regprov/stdregprov
    $output = Invoke-CimMethod -ClassName StdRegProv -MethodName GetDWORDValue -Arguments $arguments -ComputerName $tmpComputerName

    $friendlyVersion = ConvertTo-DotNetFrameworkFriendlyVersionName $output.uValue

    return $friendlyVersion
}

<#
.Synopsis
   Gets the SQL Server Version Information
.DESCRIPTION
   This returns the T-SQL @@VERSION
.EXAMPLE
   Example of how to use this cmdlet
.EXAMPLE
   Another example of how to use this cmdlet
#>

function Get-SqlVersion
{
    [CmdletBinding()]
    [Alias()]
    [OutputType([string])]
    Param
    (
        [Parameter(Mandatory=$true,
                   Position=0)]
        [string]
        $ComputerName,
        [Parameter(Mandatory=$false,
                   Position=1)]
        [string]
        $InstanceName
    )

    $connectionStringBuilder = New-Object System.Data.SqlClient.SqlConnectionStringBuilder

    if ($InstanceName) {
        $connectionStringBuilder['Data Source'] = $ComputerName + "\" + $InstanceName
    } else {
        $connectionStringBuilder['Data Source'] = $ComputerName
    }

    $connectionStringBuilder['Initial Catalog'] = 'master'
    $connectionStringBuilder['Application Name'] = 'Scem.Support Module'
    $connectionStringBuilder['Trusted_Connection'] = $true

    [System.Data.SqlClient.SqlCommand]$sqlCommand = $null
    [System.Data.SqlClient.SqlDataReader]$sqlReader = $null
    [string]$sqlVersion = 'Unknown'

    try{
        $sqlConnection = New-Object System.Data.SqlClient.SqlConnection $connectionStringBuilder.ConnectionString
        $sqlConnection.Open()

        [System.Data.SqlClient.SqlCommand]$sqlCommand = $sqlConnection.CreateCommand()
        $sqlCommand.CommandText = 'SELECT @@VERSION'
        $sqlCommand.CommandType = [System.Data.CommandType]::Text

        [System.Data.SqlClient.SqlDataReader]$sqlReader = $sqlCommand.ExecuteReader()
        while($sqlReader.Read()){
            $sqlVersion = $sqlReader.GetString(0)
            break
        }
    }
    finally{
        if($null -ne $sqlReader){
            $sqlReader.Dispose()
        }
        if($null -ne $sqlCommand){
            $sqlCommand.Dispose()
        }
        if($null -ne $sqlConnection){
            $sqlConnection.Dispose()
        }
    }

    return $sqlVersion
}

<#
.Synopsis
   Gets the TLS Settings Information
.DESCRIPTION
   This returns the TLS Settings
.EXAMPLE
   Example of how to use this cmdlet
.EXAMPLE
   Another example of how to use this cmdlet
.OWNER
    AndyDesmond
#>

function Get-TLSSetting {
    [CmdletBinding()]
    Param(
        [parameter(Mandatory = $false,Position=0)]
        [string]$ComputerName = $env:COMPUTERNAME
    )

    $ProtocolList = @("SSL 2.0", "SSL 3.0", "TLS 1.0", "TLS 1.1", "TLS 1.2")
    $ProtocolSubKeyList = @("Client", "Server")

    #Initialize the results set
    $TLSSetting = [Ordered]@{}
    # Invoke-CimMethod seems to not like FQDNs when $ComputerName is the current machine.
    # For example: assume $ComputerName -eq 'ms1.contoso.com' and $env:COMPUTERNAME -eq 'ms1'.
    # Then Invoke-CimMethod will throw this:
    ########################################################################################
    # Invoke-CimMethod : Access is denied.
    # At line:1 char:1
    # + Invoke-CimMethod -ClassName StdRegProv -MethodName GetDWORDValue -Arg ...
    # + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    # + CategoryInfo : PermissionDenied: (root\cimv2:StdRegProv:String) [Invoke-CimMethod], CimException
    # + FullyQualifiedErrorId : HRESULT 0x80070005,Microsoft.Management.Infrastructure.CimCmdlets.InvokeCimMethodCommand
    # + PSComputerName : OpsMgr-1.contoso.com
    ########################################################################################
    #
    # This split ensures we always call Invoke-CimMethod with the NetBIOS name even if
    # $ComputerName is already a NetBIOS name.
    [string]$Target = $ComputerName.Split('.')[0]
    $Protocols = @{}
    ForEach ($Protocol in $ProtocolList) {
        ForEach ($ProtocolSubKey in $ProtocolSubKeyList) {
            $sSubKeyName = "SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\$($Protocol)\$($ProtocolSubKey)"
            $CIMMethod = Invoke-CimMethod -ClassName 'StdRegProv' -MethodName GetDWORDValue -ComputerName $Target -Arguments @{sSubKeyName = $sSubKeyName; sValueName = "DisabledByDefault" }
            $Protocols.add("$Protocol.$ProtocolSubKey", $CIMMethod)
        }
    }
    $TLSSetting.Add($Target, $Protocols)

    Return (ConvertTo-Json $TLSSetting)
}

<#
.Synopsis
   Gets the Registry Keys from System Center Product
.DESCRIPTION
   This gets the Registry Keys from System Center Product
.EXAMPLE
   Example of how to use this cmdlet
.EXAMPLE
   Another example of how to use this cmdlet
.OWNER
    blakedrumm
#>

function Get-SystemCenterSetupRegKeyInfo
{
    [CmdletBinding()]
    [OutputType([Microsoft.EnterpriseManagement.Support.Common.SystemCenterSetupRegKeyInfo])]
    Param(
    [parameter(Mandatory = $false,Position=0)]
    [string]$ComputerName = $env:COMPUTERNAME
    )

    # This split ensures we always call Invoke-CimMethod with the NetBIOS name even if
    # $ComputerName is already a NetBIOS name.
    [string]$Target = $ComputerName.Split('.')[0]
    $sSubKeyName = "SOFTWARE\Microsoft\Microsoft Operations Manager\3.0\Setup"
    # construct a new object
    $setuplocation = New-Object -TypeName Microsoft.EnterpriseManagement.Support.Common.SystemCenterSetupRegKeyInfo
    #set the object values from the registry key
    $CIMMethod = Invoke-CimMethod -ClassName 'StdRegProv' -MethodName GetStringValue -ComputerName $Target -Arguments @{sSubKeyName = $sSubKeyName; sValueName = "CurrentVersion" }
    $setuplocation.CurrentVersion = $CIMMethod.sValue

    $CIMMethod = Invoke-CimMethod -ClassName 'StdRegProv' -MethodName GetStringValue -ComputerName $Target -Arguments @{sSubKeyName = $sSubKeyName; sValueName = "DatabaseName" }
    $setuplocation.DatabaseName = $CIMMethod.sValue

    $CIMMethod = Invoke-CimMethod -ClassName 'StdRegProv' -MethodName GetStringValue -ComputerName $Target -Arguments @{sSubKeyName = $sSubKeyName; sValueName = "DatabaseServerName" }
    $setuplocation.DatabaseServerName = $CIMMethod.sValue

    $CIMMethod = Invoke-CimMethod -ClassName 'StdRegProv' -MethodName GetStringValue -ComputerName $Target -Arguments @{sSubKeyName = $sSubKeyName; sValueName = "DatabaseVersion" }
    $setuplocation.DatabaseVersion = $CIMMethod.sValue

    $CIMMethod = Invoke-CimMethod -ClassName 'StdRegProv' -MethodName GetStringValue -ComputerName $Target -Arguments @{sSubKeyName = $sSubKeyName; sValueName = "DataWarehouseDBName" }
    $setuplocation.DataWarehouseDBName = $CIMMethod.sValue

    $CIMMethod = Invoke-CimMethod -ClassName 'StdRegProv' -MethodName GetStringValue -ComputerName $Target -Arguments @{sSubKeyName = $sSubKeyName; sValueName = "DataWarehouseDBServerName" }
    $setuplocation.DataWarehouseDBServerName = $CIMMethod.sValue

    $CIMMethod = Invoke-CimMethod -ClassName 'StdRegProv' -MethodName GetStringValue -ComputerName $Target -Arguments @{sSubKeyName = $sSubKeyName; sValueName = "InstallDirectory" }
    $setuplocation.InstallDirectory = $CIMMethod.sValue

    $CIMMethod = Invoke-CimMethod -ClassName 'StdRegProv' -MethodName GetStringValue -ComputerName $Target -Arguments @{sSubKeyName = $sSubKeyName; sValueName = "InstalledOn" }
    $setuplocation.InstalledOn = $CIMMethod.sValue

    $CIMMethod = Invoke-CimMethod -ClassName 'StdRegProv' -MethodName GetStringValue -ComputerName $Target -Arguments @{sSubKeyName = $sSubKeyName; sValueName = "ManagementServerPort" }
    $setuplocation.ManagementServerPort = $CIMMethod.sValue

    $CIMMethod = Invoke-CimMethod -ClassName 'StdRegProv' -MethodName GetStringValue -ComputerName $Target -Arguments @{sSubKeyName = $sSubKeyName; sValueName = "Product" }
    $setuplocation.Product = $CIMMethod.sValue

    $CIMMethod = Invoke-CimMethod -ClassName 'StdRegProv' -MethodName GetStringValue -ComputerName $Target -Arguments @{sSubKeyName = $sSubKeyName; sValueName = "ServerVersion" }
    $setuplocation.ServerVersion = $CIMMethod.sValue

    $CIMMethod = Invoke-CimMethod -ClassName 'StdRegProv' -MethodName GetStringValue -ComputerName $Target -Arguments @{sSubKeyName = $sSubKeyName; sValueName = "UIVersion" }
    $setuplocation.UIVersion = $CIMMethod.sValue

    return $setuplocation
}

<#
.Synopsis
   Gets the resource pools used in SCOM Cross Platform Monitoring
.DESCRIPTION
   Gets the resource pools used in SCOM Cross Platform Monitoring
.EXAMPLE
   Example of how to use this cmdlet
.EXAMPLE
   Another example of how to use this cmdlet
.OWNER
    udmudiar
#>

function Get-SCXResourcePool
{
    [CmdletBinding()]
    [OutputType([String[]])]
    Param()

    $UnixLinuxComputers = Get-SCOMClass -DisplayName "UNIX/Linux Computer" | Get-SCOMClassInstance
    $relationshipType = Get-SCOMRelationship -Name "Microsoft.SystemCenter.ManagementActionPointShouldManageEntity"
    $instances=Get-SCOMRelationshipInstance -TargetInstance $UnixLinuxComputers | Where-Object { $_.RelationshipId -eq $relationshipType.Id }

    return $instances.SourceObject.DisplayName | Get-Unique
}

<#
.Synopsis
   Tests whether the current user is running with elevated privileges
.DESCRIPTION
   Tests whether the current user is running with elevated privileges
.NOTES
   Returns $true if user is running with elevated privileges. $false otherwise.
.OWNER
    cgreene
#>

function Test-IsCurrentUserAdministrator
{
    [CmdletBinding()]
    [OutputType([bool])]
    Param()

    [Security.Principal.WindowsPrincipal]$currentPrincipal = New-Object Security.Principal.WindowsPrincipal([Security.Principal.WindowsIdentity]::GetCurrent())

    [bool] $IsAdministrator = $currentPrincipal.IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)

    return $IsAdministrator
}

<#
.Synopsis
   Return globally installed programs
.DESCRIPTION
   Queries the registry using the "HKLM\SOFTWARE[\WOW6432Node]\Microsoft\Windows\CurrentVersion\Uninstall" registry keys and returns installed products for the system. Does not return programs installed under user profiles.
.EXAMPLE
   [LocalHost] Get-InstalledPrograms
.EXAMPLE
   [RemoteComputer] Get-InstalledPrograms -ComputerName Server007.Contoso.com, Server008.Contoso.com
.NOTES
    If running against a remote machine, the console must be elevated to administrator with remote permissions.
 
    Inspired by the works of:
    Marc Carter - https://devblogs.microsoft.com/scripting/use-powershell-to-quickly-find-installed-software/
    XKLN.net - https://xkln.net/blog/please-stop-using-win32product-to-find-installed-software-alternatives-inside/
 
    Uninstall Registry Property List:
    https://docs.microsoft.com/en-us/windows/win32/msi/uninstall-registry-key
.OWNER
    LorneSepaugh
#>

Function Get-InstalledPrograms {
    [CmdletBinding()]
    Param
    (
        [parameter(Mandatory = $false)]
        [String[]] $ComputerName = $env:COMPUTERNAME
    )

    If ($ComputerName -notlike $env:COMPUTERNAME) {
        If (Test-IsCurrentUserAdministrator) {
            Write-Debug "$($env:USERNAME) is Administrator, continuing"
        }
        Else {
            Write-Warning "To query remote machines, you must run as Administrator"
            Return $null
        }
    }

    # Define variables for uninstall key locations
    $UninstallKeys = @(
        "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall", #64bit
        "SOFTWARE\\Wow6432Node\\Microsoft\\Windows\\CurrentVersion\\Uninstall" #32bit
        )

    ForEach ($Machine in $ComputerName) {

            # Create an instance of the KHEY_LOCAL_MACHINE registry hive
            $reg=[Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey('LocalMachine',$Machine)

            # Iterate through the HKLM\Software...\Uninstall hives and extract properties into a PSObject
            $GlobalInstalledPrograms = ForEach ($UninstallKey in $UninstallKeys) {

                # Drill down into the Uninstall key using the OpenSubKey Method, retrieve an array of string that contain all the subkey names
                $regkey = $reg.OpenSubKey($UninstallKey)
                $subkeys = $regkey.GetSubKeyNames()

                # Open each Subkey and use GetValue method to return desired properties for each program
                ForEach ($key in $subkeys){
                    # Concat the full path to the subkey, then open it
                    $thisKey = $UninstallKey + "\\" + $key
                    $thisSubKey = $reg.OpenSubKey($thisKey)

                    # Grab relevant properties from each key as we read it, add to main object. Avoids things like patches by filtering on DisplayName
                    if ($($thisSubKey.GetValue("DisplayName"))) {
                        # Adds properties pulled from the registry into a PSCustomObject, which will get added into the main $GlobalInstalledPrograms object
                        [pscustomobject]@{
                            'ComputerName'    = $Machine
                            'DisplayName'     = $($thisSubKey.GetValue("DisplayName"))
                            'DisplayVersion'  = $($thisSubKey.GetValue("DisplayVersion"))
                            'InstallLocation' = $($thisSubKey.GetValue("InstallLocation"))
                                                # Reformats a string date like 19990101 to 1999-Jan-01. If the InstallDate field is null, an error is thrown regardless of any other error handling, hence the try/catch
                            'InstallDate'     = try{([System.DateTime]::ParseExact(($($thisSubKey.GetValue("InstallDate"))-replace "[^0-9]"),"yyyyMMdd",[CultureInfo]::InvariantCulture)).ToString('yyyy-MMM-dd')} catch { $null };
                            'ProductCode'     = ([regex]::Matches($($thisSubKey.GetValue("UninstallString")),'{.*}').value)
                            'Publisher'       = $($thisSubKey.GetValue("Publisher"))
                            'URLInfoAbout'    = $($thisSubKey.GetValue("URLInfoAbout"))
                        }
                    }
                }
            }
    # Close open registry keys
    $reg.Dispose()

    $GlobalInstalledPrograms | Sort-Object DisplayName | Format-Table -auto

    } #End of per-machine loop
}

# SIG # Begin signature block
# MIInngYJKoZIhvcNAQcCoIInjzCCJ4sCAQExDzANBglghkgBZQMEAgEFADB5Bgor
# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG
# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCCEwW/6wdAlsyvJ
# 7V5+S8USECbEGtp/43ie544XTo/7EKCCDYEwggX/MIID56ADAgECAhMzAAACUosz
# qviV8znbAAAAAAJSMA0GCSqGSIb3DQEBCwUAMH4xCzAJBgNVBAYTAlVTMRMwEQYD
# VQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNy
# b3NvZnQgQ29ycG9yYXRpb24xKDAmBgNVBAMTH01pY3Jvc29mdCBDb2RlIFNpZ25p
# bmcgUENBIDIwMTEwHhcNMjEwOTAyMTgzMjU5WhcNMjIwOTAxMTgzMjU5WjB0MQsw
# CQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9u
# ZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMR4wHAYDVQQDExVNaWNy
# b3NvZnQgQ29ycG9yYXRpb24wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB
# AQDQ5M+Ps/X7BNuv5B/0I6uoDwj0NJOo1KrVQqO7ggRXccklyTrWL4xMShjIou2I
# sbYnF67wXzVAq5Om4oe+LfzSDOzjcb6ms00gBo0OQaqwQ1BijyJ7NvDf80I1fW9O
# L76Kt0Wpc2zrGhzcHdb7upPrvxvSNNUvxK3sgw7YTt31410vpEp8yfBEl/hd8ZzA
# v47DCgJ5j1zm295s1RVZHNp6MoiQFVOECm4AwK2l28i+YER1JO4IplTH44uvzX9o
# RnJHaMvWzZEpozPy4jNO2DDqbcNs4zh7AWMhE1PWFVA+CHI/En5nASvCvLmuR/t8
# q4bc8XR8QIZJQSp+2U6m2ldNAgMBAAGjggF+MIIBejAfBgNVHSUEGDAWBgorBgEE
# AYI3TAgBBggrBgEFBQcDAzAdBgNVHQ4EFgQUNZJaEUGL2Guwt7ZOAu4efEYXedEw
# UAYDVR0RBEkwR6RFMEMxKTAnBgNVBAsTIE1pY3Jvc29mdCBPcGVyYXRpb25zIFB1
# ZXJ0byBSaWNvMRYwFAYDVQQFEw0yMzAwMTIrNDY3NTk3MB8GA1UdIwQYMBaAFEhu
# ZOVQBdOCqhc3NyK1bajKdQKVMFQGA1UdHwRNMEswSaBHoEWGQ2h0dHA6Ly93d3cu
# bWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY0NvZFNpZ1BDQTIwMTFfMjAxMS0w
# Ny0wOC5jcmwwYQYIKwYBBQUHAQEEVTBTMFEGCCsGAQUFBzAChkVodHRwOi8vd3d3
# Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2NlcnRzL01pY0NvZFNpZ1BDQTIwMTFfMjAx
# MS0wNy0wOC5jcnQwDAYDVR0TAQH/BAIwADANBgkqhkiG9w0BAQsFAAOCAgEAFkk3
# uSxkTEBh1NtAl7BivIEsAWdgX1qZ+EdZMYbQKasY6IhSLXRMxF1B3OKdR9K/kccp
# kvNcGl8D7YyYS4mhCUMBR+VLrg3f8PUj38A9V5aiY2/Jok7WZFOAmjPRNNGnyeg7
# l0lTiThFqE+2aOs6+heegqAdelGgNJKRHLWRuhGKuLIw5lkgx9Ky+QvZrn/Ddi8u
# TIgWKp+MGG8xY6PBvvjgt9jQShlnPrZ3UY8Bvwy6rynhXBaV0V0TTL0gEx7eh/K1
# o8Miaru6s/7FyqOLeUS4vTHh9TgBL5DtxCYurXbSBVtL1Fj44+Od/6cmC9mmvrti
# yG709Y3Rd3YdJj2f3GJq7Y7KdWq0QYhatKhBeg4fxjhg0yut2g6aM1mxjNPrE48z
# 6HWCNGu9gMK5ZudldRw4a45Z06Aoktof0CqOyTErvq0YjoE4Xpa0+87T/PVUXNqf
# 7Y+qSU7+9LtLQuMYR4w3cSPjuNusvLf9gBnch5RqM7kaDtYWDgLyB42EfsxeMqwK
# WwA+TVi0HrWRqfSx2olbE56hJcEkMjOSKz3sRuupFCX3UroyYf52L+2iVTrda8XW
# esPG62Mnn3T8AuLfzeJFuAbfOSERx7IFZO92UPoXE1uEjL5skl1yTZB3MubgOA4F
# 8KoRNhviFAEST+nG8c8uIsbZeb08SeYQMqjVEmkwggd6MIIFYqADAgECAgphDpDS
# AAAAAAADMA0GCSqGSIb3DQEBCwUAMIGIMQswCQYDVQQGEwJVUzETMBEGA1UECBMK
# V2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0
# IENvcnBvcmF0aW9uMTIwMAYDVQQDEylNaWNyb3NvZnQgUm9vdCBDZXJ0aWZpY2F0
# ZSBBdXRob3JpdHkgMjAxMTAeFw0xMTA3MDgyMDU5MDlaFw0yNjA3MDgyMTA5MDla
# MH4xCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdS
# ZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xKDAmBgNVBAMT
# H01pY3Jvc29mdCBDb2RlIFNpZ25pbmcgUENBIDIwMTEwggIiMA0GCSqGSIb3DQEB
# AQUAA4ICDwAwggIKAoICAQCr8PpyEBwurdhuqoIQTTS68rZYIZ9CGypr6VpQqrgG
# OBoESbp/wwwe3TdrxhLYC/A4wpkGsMg51QEUMULTiQ15ZId+lGAkbK+eSZzpaF7S
# 35tTsgosw6/ZqSuuegmv15ZZymAaBelmdugyUiYSL+erCFDPs0S3XdjELgN1q2jz
# y23zOlyhFvRGuuA4ZKxuZDV4pqBjDy3TQJP4494HDdVceaVJKecNvqATd76UPe/7
# 4ytaEB9NViiienLgEjq3SV7Y7e1DkYPZe7J7hhvZPrGMXeiJT4Qa8qEvWeSQOy2u
# M1jFtz7+MtOzAz2xsq+SOH7SnYAs9U5WkSE1JcM5bmR/U7qcD60ZI4TL9LoDho33
# X/DQUr+MlIe8wCF0JV8YKLbMJyg4JZg5SjbPfLGSrhwjp6lm7GEfauEoSZ1fiOIl
# XdMhSz5SxLVXPyQD8NF6Wy/VI+NwXQ9RRnez+ADhvKwCgl/bwBWzvRvUVUvnOaEP
# 6SNJvBi4RHxF5MHDcnrgcuck379GmcXvwhxX24ON7E1JMKerjt/sW5+v/N2wZuLB
# l4F77dbtS+dJKacTKKanfWeA5opieF+yL4TXV5xcv3coKPHtbcMojyyPQDdPweGF
# RInECUzF1KVDL3SV9274eCBYLBNdYJWaPk8zhNqwiBfenk70lrC8RqBsmNLg1oiM
# CwIDAQABo4IB7TCCAekwEAYJKwYBBAGCNxUBBAMCAQAwHQYDVR0OBBYEFEhuZOVQ
# BdOCqhc3NyK1bajKdQKVMBkGCSsGAQQBgjcUAgQMHgoAUwB1AGIAQwBBMAsGA1Ud
# DwQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFHItOgIxkEO5FAVO
# 4eqnxzHRI4k0MFoGA1UdHwRTMFEwT6BNoEuGSWh0dHA6Ly9jcmwubWljcm9zb2Z0
# LmNvbS9wa2kvY3JsL3Byb2R1Y3RzL01pY1Jvb0NlckF1dDIwMTFfMjAxMV8wM18y
# Mi5jcmwwXgYIKwYBBQUHAQEEUjBQME4GCCsGAQUFBzAChkJodHRwOi8vd3d3Lm1p
# Y3Jvc29mdC5jb20vcGtpL2NlcnRzL01pY1Jvb0NlckF1dDIwMTFfMjAxMV8wM18y
# Mi5jcnQwgZ8GA1UdIASBlzCBlDCBkQYJKwYBBAGCNy4DMIGDMD8GCCsGAQUFBwIB
# FjNodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2RvY3MvcHJpbWFyeWNw
# cy5odG0wQAYIKwYBBQUHAgIwNB4yIB0ATABlAGcAYQBsAF8AcABvAGwAaQBjAHkA
# XwBzAHQAYQB0AGUAbQBlAG4AdAAuIB0wDQYJKoZIhvcNAQELBQADggIBAGfyhqWY
# 4FR5Gi7T2HRnIpsLlhHhY5KZQpZ90nkMkMFlXy4sPvjDctFtg/6+P+gKyju/R6mj
# 82nbY78iNaWXXWWEkH2LRlBV2AySfNIaSxzzPEKLUtCw/WvjPgcuKZvmPRul1LUd
# d5Q54ulkyUQ9eHoj8xN9ppB0g430yyYCRirCihC7pKkFDJvtaPpoLpWgKj8qa1hJ
# Yx8JaW5amJbkg/TAj/NGK978O9C9Ne9uJa7lryft0N3zDq+ZKJeYTQ49C/IIidYf
# wzIY4vDFLc5bnrRJOQrGCsLGra7lstnbFYhRRVg4MnEnGn+x9Cf43iw6IGmYslmJ
# aG5vp7d0w0AFBqYBKig+gj8TTWYLwLNN9eGPfxxvFX1Fp3blQCplo8NdUmKGwx1j
# NpeG39rz+PIWoZon4c2ll9DuXWNB41sHnIc+BncG0QaxdR8UvmFhtfDcxhsEvt9B
# xw4o7t5lL+yX9qFcltgA1qFGvVnzl6UJS0gQmYAf0AApxbGbpT9Fdx41xtKiop96
# eiL6SJUfq/tHI4D1nvi/a7dLl+LrdXga7Oo3mXkYS//WsyNodeav+vyL6wuA6mk7
# r/ww7QRMjt/fdW1jkT3RnVZOT7+AVyKheBEyIXrvQQqxP/uozKRdwaGIm1dxVk5I
# RcBCyZt2WwqASGv9eZ/BvW1taslScxMNelDNMYIZczCCGW8CAQEwgZUwfjELMAkG
# A1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQx
# HjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEoMCYGA1UEAxMfTWljcm9z
# b2Z0IENvZGUgU2lnbmluZyBQQ0EgMjAxMQITMwAAAlKLM6r4lfM52wAAAAACUjAN
# BglghkgBZQMEAgEFAKCBrjAZBgkqhkiG9w0BCQMxDAYKKwYBBAGCNwIBBDAcBgor
# BgEEAYI3AgELMQ4wDAYKKwYBBAGCNwIBFTAvBgkqhkiG9w0BCQQxIgQgC2Ykqa33
# i1Xri5irN4fS2BG1FezoIgi23Iaxm4cygDkwQgYKKwYBBAGCNwIBDDE0MDKgFIAS
# AE0AaQBjAHIAbwBzAG8AZgB0oRqAGGh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbTAN
# BgkqhkiG9w0BAQEFAASCAQBT4Dk4tyHe2qEzRBNONpZqzFj5N2D5G9Q27OyfCZY2
# f7jR4Qj+6MpmaPmOL7GzKETqITtgshpO2lmOb1v27wDG26z5PS77IGbUi9SegxWH
# scXE7YNmpzPk8b6/LqJsceye8O/GOPb3ZhFDrkRerJ8uAeRpwbizC+zK2WSbbzHv
# xtMdFgockhGwguqQ2mrTARqt6E5OSvKBcOFfcin/KDa3RxnSOG2lmfbJ+Qy0MQO0
# sWe7I7Cbl0d6gPYPdBqlF5eiGJui9LWQ+iMqWtCSn6uhcczvpbvUAULm6tsP3caA
# RWb2vjFzixlJXuTO/QpmW6Ynw9YzCWv1mugV3SHAIc3ZoYIW/TCCFvkGCisGAQQB
# gjcDAwExghbpMIIW5QYJKoZIhvcNAQcCoIIW1jCCFtICAQMxDzANBglghkgBZQME
# AgEFADCCAVEGCyqGSIb3DQEJEAEEoIIBQASCATwwggE4AgEBBgorBgEEAYRZCgMB
# MDEwDQYJYIZIAWUDBAIBBQAEICmynKAUjO5l4jXxdyqBfu4+s5uqg9Ulcmg8XUFQ
# 4ztvAgZiYbKhnxAYEzIwMjIwNDI3MTgwMDM4LjYwNFowBIACAfSggdCkgc0wgcox
# CzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRt
# b25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xJTAjBgNVBAsTHE1p
# Y3Jvc29mdCBBbWVyaWNhIE9wZXJhdGlvbnMxJjAkBgNVBAsTHVRoYWxlcyBUU1Mg
# RVNOOjdCRjEtRTNFQS1CODA4MSUwIwYDVQQDExxNaWNyb3NvZnQgVGltZS1TdGFt
# cCBTZXJ2aWNloIIRVDCCBwwwggT0oAMCAQICEzMAAAGfK0U1FQguS10AAQAAAZ8w
# DQYJKoZIhvcNAQELBQAwfDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0
# b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3Jh
# dGlvbjEmMCQGA1UEAxMdTWljcm9zb2Z0IFRpbWUtU3RhbXAgUENBIDIwMTAwHhcN
# MjExMjAyMTkwNTIyWhcNMjMwMjI4MTkwNTIyWjCByjELMAkGA1UEBhMCVVMxEzAR
# BgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1p
# Y3Jvc29mdCBDb3Jwb3JhdGlvbjElMCMGA1UECxMcTWljcm9zb2Z0IEFtZXJpY2Eg
# T3BlcmF0aW9uczEmMCQGA1UECxMdVGhhbGVzIFRTUyBFU046N0JGMS1FM0VBLUI4
# MDgxJTAjBgNVBAMTHE1pY3Jvc29mdCBUaW1lLVN0YW1wIFNlcnZpY2UwggIiMA0G
# CSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCk9Xl8TVGyiZAvzm8tB4fLP0znL883
# YDIG03js1/WzCaICXDs0kXlJ39OUZweBFa/V8l27mlBjyLZDtTg3W8dQORDunfn7
# SzZEoFmlXaSYcQhyDMV5ghxi6lh8y3NV1TNHGYLzaoQmtBeuFSlEH9wp6rC/sRK7
# GPrOn17XAGzo+/yFy7DfWgIQ43X35ut20TShUeYDrs5GOVpHp7ouqQYRTpu+lAaC
# Hfq8tr+LFqIyjpkvxxb3Hcx6Vjte0NPH6GnICT84PxWYK7eoa5AxbsTUqWQyiWtr
# GoyQyXP4yIKfTUYPtsTFCi14iuJNr3yRGjo4U1OHZU2yGmWeCrdccJgkby6k2N5A
# hRYvKHrePPh5oWHY01g8TckxV4h4iloqvaaYGh3HDPWPw4KoKyEy7QHGuZK1qAkh
# eWiKX2qE0eNRWummCKPhdcF3dcViVI9aKXhty4zM76tsUjcdCtnG5VII6eU6dzcL
# 6YFp0vMl7JPI3y9Irx9sBEiVmSigM2TDZU4RUIbFItD60DJYzNH0rGu2Dv39P/0O
# wox37P3ZfvB5jAeg6B+SBSD0awi+f61JFrVc/UZ83W+5tgI/0xcLGWHBNdEibSF1
# NFfrV0KPCKfi9iD2BkQgMYi02CY8E3us+UyYA4NFYcWJpjacBKABeDBdkY1BPfGg
# zskaKhIGhdox9QIDAQABo4IBNjCCATIwHQYDVR0OBBYEFGI08tUeExYrSA4u6N/Z
# asfWHchhMB8GA1UdIwQYMBaAFJ+nFV0AXmJdg/Tl0mWnG1M1GelyMF8GA1UdHwRY
# MFYwVKBSoFCGTmh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01p
# Y3Jvc29mdCUyMFRpbWUtU3RhbXAlMjBQQ0ElMjAyMDEwKDEpLmNybDBsBggrBgEF
# BQcBAQRgMF4wXAYIKwYBBQUHMAKGUGh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9w
# a2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVGltZS1TdGFtcCUyMFBDQSUyMDIwMTAo
# MSkuY3J0MAwGA1UdEwEB/wQCMAAwEwYDVR0lBAwwCgYIKwYBBQUHAwgwDQYJKoZI
# hvcNAQELBQADggIBAB2KKCk8O+kZ8+m9bPXQIAmo+6xbKDaKkMR3/82A8XVAMa9R
# pItYJkdkta+C6ZIVBsZEARJkKnWpYJiiyGBV3PmPoIMP5zFbr0BYLMolDJZMtH3M
# ifVBD9NknYNKg+GbWyaAPs8VZ6UD3CRzjoVZ2PbHRH+UOl2Yc/cm1IR3BlvjlcNw
# ykpzBGUndARefuzjfRSfB+dBzmlFY+dME8+J3OvveMraIcznSrlr46GXMoWGJt0h
# BJNf4G5JZqyXe8n8z2yR5poL2uiMRzqIXX1rwCIXhcLPFgSKN/vJxrxHiF9ByVio
# uf4jCcD8O2mO94toCSqLERuodSe9dQ7qrKVBonDoYWAx+W0XGAX2qaoZmqEun7Qb
# 8hnyNyVrJ2C2fZwAY2yiX3ZMgLGUrpDRoJWdP+tc5SS6KZ1fwyhL/KAgjiNPvUBi
# u7PF4LHx5TRFU7HZXvgpZDn5xktkXZidA4S26NZsMSygx0R1nXV3ybY3JdlNfRET
# t6SIfQdCxRX5YUbI5NdvuVMiy5oB3blfhPgNJyo0qdmkHKE2pN4c8iw9SrajnWcM
# 0bUExrDkNqcwaq11Dzwc0lDGX14gnjGRbghl6HLsD7jxx0+buzJHKZPzGdTLMFKo
# SdJeV4pU/t3dPbdU21HS60Ex2Ip2TdGfgtS9POzVaTA4UucuklbjZkQihfg2MIIH
# cTCCBVmgAwIBAgITMwAAABXF52ueAptJmQAAAAAAFTANBgkqhkiG9w0BAQsFADCB
# iDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1Jl
# ZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEyMDAGA1UEAxMp
# TWljcm9zb2Z0IFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5IDIwMTAwHhcNMjEw
# OTMwMTgyMjI1WhcNMzAwOTMwMTgzMjI1WjB8MQswCQYDVQQGEwJVUzETMBEGA1UE
# CBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9z
# b2Z0IENvcnBvcmF0aW9uMSYwJAYDVQQDEx1NaWNyb3NvZnQgVGltZS1TdGFtcCBQ
# Q0EgMjAxMDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAOThpkzntHIh
# C3miy9ckeb0O1YLT/e6cBwfSqWxOdcjKNVf2AX9sSuDivbk+F2Az/1xPx2b3lVNx
# WuJ+Slr+uDZnhUYjDLWNE893MsAQGOhgfWpSg0S3po5GawcU88V29YZQ3MFEyHFc
# UTE3oAo4bo3t1w/YJlN8OWECesSq/XJprx2rrPY2vjUmZNqYO7oaezOtgFt+jBAc
# nVL+tuhiJdxqD89d9P6OU8/W7IVWTe/dvI2k45GPsjksUZzpcGkNyjYtcI4xyDUo
# veO0hyTD4MmPfrVUj9z6BVWYbWg7mka97aSueik3rMvrg0XnRm7KMtXAhjBcTyzi
# YrLNueKNiOSWrAFKu75xqRdbZ2De+JKRHh09/SDPc31BmkZ1zcRfNN0Sidb9pSB9
# fvzZnkXftnIv231fgLrbqn427DZM9ituqBJR6L8FA6PRc6ZNN3SUHDSCD/AQ8rdH
# GO2n6Jl8P0zbr17C89XYcz1DTsEzOUyOArxCaC4Q6oRRRuLRvWoYWmEBc8pnol7X
# KHYC4jMYctenIPDC+hIK12NvDMk2ZItboKaDIV1fMHSRlJTYuVD5C4lh8zYGNRiE
# R9vcG9H9stQcxWv2XFJRXRLbJbqvUAV6bMURHXLvjflSxIUXk8A8FdsaN8cIFRg/
# eKtFtvUeh17aj54WcmnGrnu3tz5q4i6tAgMBAAGjggHdMIIB2TASBgkrBgEEAYI3
# FQEEBQIDAQABMCMGCSsGAQQBgjcVAgQWBBQqp1L+ZMSavoKRPEY1Kc8Q/y8E7jAd
# BgNVHQ4EFgQUn6cVXQBeYl2D9OXSZacbUzUZ6XIwXAYDVR0gBFUwUzBRBgwrBgEE
# AYI3TIN9AQEwQTA/BggrBgEFBQcCARYzaHR0cDovL3d3dy5taWNyb3NvZnQuY29t
# L3BraW9wcy9Eb2NzL1JlcG9zaXRvcnkuaHRtMBMGA1UdJQQMMAoGCCsGAQUFBwMI
# MBkGCSsGAQQBgjcUAgQMHgoAUwB1AGIAQwBBMAsGA1UdDwQEAwIBhjAPBgNVHRMB
# Af8EBTADAQH/MB8GA1UdIwQYMBaAFNX2VsuP6KJcYmjRPZSQW9fOmhjEMFYGA1Ud
# HwRPME0wS6BJoEeGRWh0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9wa2kvY3JsL3By
# b2R1Y3RzL01pY1Jvb0NlckF1dF8yMDEwLTA2LTIzLmNybDBaBggrBgEFBQcBAQRO
# MEwwSgYIKwYBBQUHMAKGPmh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2kvY2Vy
# dHMvTWljUm9vQ2VyQXV0XzIwMTAtMDYtMjMuY3J0MA0GCSqGSIb3DQEBCwUAA4IC
# AQCdVX38Kq3hLB9nATEkW+Geckv8qW/qXBS2Pk5HZHixBpOXPTEztTnXwnE2P9pk
# bHzQdTltuw8x5MKP+2zRoZQYIu7pZmc6U03dmLq2HnjYNi6cqYJWAAOwBb6J6Gng
# ugnue99qb74py27YP0h1AdkY3m2CDPVtI1TkeFN1JFe53Z/zjj3G82jfZfakVqr3
# lbYoVSfQJL1AoL8ZthISEV09J+BAljis9/kpicO8F7BUhUKz/AyeixmJ5/ALaoHC
# gRlCGVJ1ijbCHcNhcy4sa3tuPywJeBTpkbKpW99Jo3QMvOyRgNI95ko+ZjtPu4b6
# MhrZlvSP9pEB9s7GdP32THJvEKt1MMU0sHrYUP4KWN1APMdUbZ1jdEgssU5HLcEU
# BHG/ZPkkvnNtyo4JvbMBV0lUZNlz138eW0QBjloZkWsNn6Qo3GcZKCS6OEuabvsh
# VGtqRRFHqfG3rsjoiV5PndLQTHa1V1QJsWkBRH58oWFsc/4Ku+xBZj1p/cvBQUl+
# fpO+y/g75LcVv7TOPqUxUYS8vwLBgqJ7Fx0ViY1w/ue10CgaiQuPNtq6TPmb/wrp
# NPgkNWcr4A245oyZ1uEi6vAnQj0llOZ0dFtq0Z4+7X6gMTN9vMvpe784cETRkPHI
# qzqKOghif9lwY1NNje6CbaUFEMFxBmoQtB1VM1izoXBm8qGCAsswggI0AgEBMIH4
# oYHQpIHNMIHKMQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4G
# A1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSUw
# IwYDVQQLExxNaWNyb3NvZnQgQW1lcmljYSBPcGVyYXRpb25zMSYwJAYDVQQLEx1U
# aGFsZXMgVFNTIEVTTjo3QkYxLUUzRUEtQjgwODElMCMGA1UEAxMcTWljcm9zb2Z0
# IFRpbWUtU3RhbXAgU2VydmljZaIjCgEBMAcGBSsOAwIaAxUAdF2umB/yywxFLFTC
# 8rJ9Fv9c9reggYMwgYCkfjB8MQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGlu
# Z3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBv
# cmF0aW9uMSYwJAYDVQQDEx1NaWNyb3NvZnQgVGltZS1TdGFtcCBQQ0EgMjAxMDAN
# BgkqhkiG9w0BAQUFAAIFAOYTcUYwIhgPMjAyMjA0MjcxNTM3NDJaGA8yMDIyMDQy
# ODE1Mzc0MlowdDA6BgorBgEEAYRZCgQBMSwwKjAKAgUA5hNxRgIBADAHAgEAAgIU
# zDAHAgEAAgITlDAKAgUA5hTCxgIBADA2BgorBgEEAYRZCgQCMSgwJjAMBgorBgEE
# AYRZCgMCoAowCAIBAAIDB6EgoQowCAIBAAIDAYagMA0GCSqGSIb3DQEBBQUAA4GB
# AEDV7w0kItvV4B5JNsTh0C/dy0yOGyNvJmIATpDwvKD8lvs3+ckAkROuWhV4OGs2
# qeehauO62TsupLDpEcHe1eM7L8mermFhQ9VcOFKXszTYJ1l6CMMuD+Mki4Qh92GH
# KypapG6hbz9d9JXfp0qtY4/ruoTki4XqsceUITdEmJGRMYIEDTCCBAkCAQEwgZMw
# fDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1Jl
# ZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEmMCQGA1UEAxMd
# TWljcm9zb2Z0IFRpbWUtU3RhbXAgUENBIDIwMTACEzMAAAGfK0U1FQguS10AAQAA
# AZ8wDQYJYIZIAWUDBAIBBQCgggFKMBoGCSqGSIb3DQEJAzENBgsqhkiG9w0BCRAB
# BDAvBgkqhkiG9w0BCQQxIgQg1mhSZTp+uJ83/vOswFBfdtQ4800Y5Oe0RI6b7DVO
# kA0wgfoGCyqGSIb3DQEJEAIvMYHqMIHnMIHkMIG9BCCG8V4poieJnqXnVzwNUeje
# KgLJfEH7P+jspyw3S3xc2jCBmDCBgKR+MHwxCzAJBgNVBAYTAlVTMRMwEQYDVQQI
# EwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3Nv
# ZnQgQ29ycG9yYXRpb24xJjAkBgNVBAMTHU1pY3Jvc29mdCBUaW1lLVN0YW1wIFBD
# QSAyMDEwAhMzAAABnytFNRUILktdAAEAAAGfMCIEIBJIXEn0Mkg0nLEWg8axW8vq
# hheGPXio/xlhFA1vCJsEMA0GCSqGSIb3DQEBCwUABIICAEs3ujWETZshboPkrUlQ
# YWiobr1lKk316FUfVg7xc8tAAD62zposlgZypmc0wQx3giruxBNGsclcn5XCvthw
# AF+b+z6Tkg9qPMA6MjbobObh7md+FENQbC09xkoLwmAgxI64anTV3d2qkLEmrN5k
# 0gV5fL7KfOagGSy5rHMHD8YzzO8sPYJMQb97QrxKW4Z/FgeGx3wzehgurs2248+8
# w6/G8dnlR2Ug8NhH3fC6xjvXMYDP5IyAc604Wl1mo0FT5j6pUnMjWVIWWRwYvr70
# AosFGdFou4VBVEuJu1uLqP+WzcBvKDT+zehJJqUzbkJafqVa0ZGi9Z6iczW5aRWy
# TJu06QtmBpzlaFVLq0DdAD0rJDrPx5HygXZNq1953EZEIWX2xHYwRbNxBQCmYtaf
# nMej2R48Om66WayyYTMRX+m2ETYYCA2EIcm6yAeytLalhPS3W4w/lWiKF7L25rOD
# ggl3szmt6+godTes8AxLRmj7atnFLW6JB8b0uGSpVsuMMI+A6Ot7b3QB2mT8i8DS
# PBEK/1vN12zWZkO9pGuULS83huSKI40+oqy67qRJU4TIKGEcRs68le5lIhrqGkZR
# dECJWFyWwuHHpY7pLcHGR1ittGnT54FG8iFrRN3LxQh9Fe1V7VQ5WcYvTm/TpmLX
# SGzAtQjq3eQkIDJwLICGYO4U
# SIG # End signature block