<# .SYNOPSIS Enables and disables software packages included with the installation of JS7 products .DESCRIPTION Disabling software packages can be an immediate means for mitigation of vulnerabilities in 3rd-party components used by JS7 products. The JS7 products ship with a Software Bill of Materials that can be used to identify vulnerable components and package dependencies. For disabling of components the script is used to remove component files such as .jar files from a JS7 product installation. The script can be used later on to restore disabled components. The script is available on Windows and Unix platforms supporting PowerShell 5.1, 6, 7 For download see https://kb.sos-berlin.com/display/JS7/JS7+-+Download .PARAMETER HomeDir Specifies the directory in which the JS7 product is installed. .PARAMETER Features Specifies the path to a file in .json format that stores information about enabled and disabled software packages. By default the /features.json file is used. The file does not exist by default but is automatically created when enabling and disabling packages. .PARAMETER SBOM Specifies the path to a file that holds the Software Bill of Materials. The file ships with the respective JS7 products. For Controller and Agents the /sbom.json file is used. For JOC Cockpit the JETTY_BASE/webapps/joc/sbom.json file is used. .PARAMETER Enable Specifies software packages that should be enabled. A number of software packages can be specified separated by comma. As a prerequisite when disabling software packages * the information is stored in the features.json file, see -Features argument. This information is later on used to enable software packages. * the backup directory has to be specified, see -BackupDir argument, that is used as the source when enabling software packages. If a software package is not available from the backup directory then the software package cannot be enabled. Instead the JS7 product has to be re-installed or updated. .PARAMETER Disable Specifies software packages that should be disabled. A number of software packages can be specified separated by comma. The files related to a software package such as *.jar files will be removed from the JS7 product installation. To allow later enabling a backup directory is specified with the -BackupDir argument. Users who do not want to use a backup directory can apply the -Force switch. .PARAMETER BackupDir If a backup directory is specified when disabling software packages then related files such as *.jar files are moved to this directory. The backup directory holds a lib sub-folder with related sub-folders of the JS7 product's lib directory such as lib/sos, lib/3rd-party etc. .PARAMETER LogDir If a log directory is specified then the Software Package Management Script will log information about processing steps to a log file in this directory. File names are created according to the pattern: js7_set_feature..--
T--.log For example: js7_set_feature.centostest_primary.2022-03-19T20-50-45.log .PARAMETER ShowLogs Displays the log output created by the Software Package Management Script if the -LogDir argument is used. .PARAMETER MakeDirs If directories are missing that are indicated with the -BackupDir or -LogDir arguments then they will be created. .PARAMETER Force Specifies that a software package is disabled, i.e. its files are removed from the JS7 product installation, without use of a backup directory. .EXAMPLE ./Set-JS7Feature.ps1 -HomeDir "C:\Program Files\sos-berlin.com\js7\agent" -List Displays list of enabled/disabled packages. .EXAMPLE ./Set-JS7Feature.ps1 -HomeDir "C:\Program Files\sos-berlin.com\js7\agent" -Disable simple-xml,snakeyaml -BackupDir C:\tmp\backup -MakeDirs Disables the indicated packages and moves related .jar files from the JS7 products home directory to the backup directory. .EXAMPLE ./Set-JS7Feature.ps1 -HomeDir "C:\Program Files\sos-berlin.com\js7\agent" -Enable simple-xml,snakeyaml -BackupDir C:\tmp\backup Enables the indicated packages and moves related .jar files from the backup directory to the home directory of the JS7 product. #> [cmdletbinding(SupportsShouldProcess)] param ( [Parameter(Mandatory=$True,ValueFromPipeline=$False,ValueFromPipelinebyPropertyName=$True)] [string] $HomeDir, [Parameter(Mandatory=$False,ValueFromPipeline=$False,ValueFromPipelinebyPropertyName=$True)] [string] $Features, [Parameter(Mandatory=$False,ValueFromPipeline=$False,ValueFromPipelinebyPropertyName=$True)] [string] $SBOM, [Parameter(Mandatory=$False,ValueFromPipeline=$False,ValueFromPipelinebyPropertyName=$True)] [string[]] $Enable, [Parameter(Mandatory=$False,ValueFromPipeline=$False,ValueFromPipelinebyPropertyName=$True)] [string[]] $Disable, [Parameter(Mandatory=$False,ValueFromPipeline=$False,ValueFromPipelinebyPropertyName=$True)] [string] $BackupDir, [Parameter(Mandatory=$False,ValueFromPipeline=$False,ValueFromPipelinebyPropertyName=$True)] [string] $LogDir, [Parameter(Mandatory=$False,ValueFromPipeline=$False,ValueFromPipelinebyPropertyName=$True)] [switch] $List, [Parameter(Mandatory=$False,ValueFromPipeline=$False,ValueFromPipelinebyPropertyName=$True)] [switch] $ShowLogs, [Parameter(Mandatory=$False,ValueFromPipeline=$False,ValueFromPipelinebyPropertyName=$True)] [switch] $MakeDirs, [Parameter(Mandatory=$False,ValueFromPipeline=$False,ValueFromPipelinebyPropertyName=$True)] [switch] $Force ) Begin { switch ([System.Environment]::OSVersion.Platform) { 'Win32NT' { New-Variable -Option Constant -Name IsWindows -Value $True -ErrorAction SilentlyContinue New-Variable -Option Constant -Name IsLinux -Value $false -ErrorAction SilentlyContinue New-Variable -Option Constant -Name IsMacOs -Value $false -ErrorAction SilentlyContinue } } # argument defaults $script:LibHome = $HomeDir $script:SBOMHome = $HomeDir if ( $HomeDir -and (Test-Path -Path $HomeDir -PathType container) ) { if ( Test-Path -Path "$($HomeDir)/install" -PathType container ) { if ( Get-ChildItem -Path "$($HomeDir)/jetty_base" -ErrorAction silentlycontinue | Where-Object { $_.Attributes -match "ReparsePoint" } ) { $script:LibHome = "$($HomeDir)/jetty_base/webapps/joc/WEB-INF" $script:SBOMHome = "$($HomeDir)/jetty_base/webapps/joc" } else { $script:LibHome = "$($HomeDir)/webapps/joc/WEB-INF" $script:SBOMHome = "$($HomeDir)/webapps/joc" } if ( !(Test-Path -Path $LibHome -PathType container) ) { Out-LogError "could not find base directory for libraries: $($LibHome)" return 1 } if ( Test-Path -Path "$($HomeDir)/sbom.json" -PathType leaf ) { $script:SBOMHome = $HomeDir } } } if ( !$Features ) { $script:Features = "$($HomeDir)/features.json" } if ( !$SBOM ) { $script:SBOM = "$($SBOMHome)/sbom.json" } # nop operations to work around ScriptAnalyzer bugs $script:ShowLogs = $ShowLogs $script:Force = $Force # default variables $script:hostname = if ( $env:COMPUTERNAME ) { $env:COMPUTERNAME } else { $env:HOSTNAME } $script:startTime = Get-Date $script:logFile = $null if ( $isWindows ) { $script:osPlatform = 'windows' } else { $script:osPlatform = 'unix' } } Process { # inline functions function Out-LogInfo( [string] $Message ) { if ( $logFile ) { $Message | Out-File $logFile -Append } if ( !$ShowLogs ) { Write-Output $Message } } function Out-LogError( [string] $Message ) { if ( $logFile ) { "[ERROR] $($Message)" | Out-File $logFile -Append } if ( !$ShowLogs ) { Write-Error $Message } } function Out-LogVerbose( [string] $Message ) { if ( $logFile ) { "[VERBOSE] $($Message)" | Out-File $logFile -Append } if ( !$ShowLogs ) { Write-Verbose $Message } } function Out-LogDebug( [string] $Message ) { if ( $logFile ) { "[DEBUG] $($Message)" | Out-File $logFile -Append } if ( !$ShowLogs ) { Write-Debug $Message } } function Find-ComponentUp( [PSObject] $SBOMJson, [string] $ComponentRef, [int] $IndentLevel ) { $indentString = ' ' * ($IndentLevel+1) Out-LogInfo "$($indentString) recursing affected component reference: $($ComponentRef)" $dependentRefs = $SBOMjson.dependencies.Where( {$_.dependsOn -contains $ComponentRef} ).ref foreach( $dependentRef in $dependentRefs ) { Find-ComponentUp -SBOMJson $SBOMJson -ComponentRef $dependentRef -IndentLevel ($IndentLevel+1) } } function Test-Arguments() { if ( $List -and $Enable ) { Out-LogError "conflicting arguments -Enable and -List specified" return 1 } if ( $List -and $Disable ) { Out-LogError "conflicting arguments -Disable and -List specified" return 1 } if ( $HomeDir -and !(Test-Path -Path $HomeDir -PathType container) ) { Out-LogError "home directory not found: -HomeDir $HomeDir" return 1 } if ( !$MakeDirs -and $BackupDir -and !(Test-Path -Path $BackupDir -PathType container) ) { Out-LogError "backup directory not found and -MakeDirs switch not present: -BackupDir $($BackupDir)" return 1 } if ( !$MakeDirs -and $LogDir -and !(Test-Path -Path $LogDir -PathType container) ) { Out-LogError "log directory not found and -MakeDirs switch not present: -LogDir $($LogDir)" return 1 } if ( $Enable -and !$BackupDir ) { Out-LogError "argument -Enable requires to specify a backup directory: -BackupDir " return 1 } if ( $Disable -and !$BackupDir -and !$Force ) { Out-LogError "argument -Disable without argument -BackupDir requires to specify switch: -Force" return 1 } if ( !$Enable -and !$Disable -and !$List ) { Out-LogError "no action specified, use -Enable, -Disable or -List" return 1 } if ( !(Test-Path -Path $SBOM -PathType leaf) ) { Out-LogError "sbom.json file not found: -SBOM $($SBOM)" return 1 } if ( !(Test-Path -Path $Features -PathType leaf) ) { if ( $Disable ) { $null | Out-File $Features -Append } else { Out-LogError "features.json file not found, it will be created when disabling packages: -Features $($Features)" return 1 } } if ( $Enable ) { $featuresJson = Get-Content -Path $Features | ConvertFrom-Json foreach( $packageName in $Enable ) { $packageNameFound = $featuresJson.packages.Where( {$_.Name -eq $packageName} ).name if ( $packageName -ne $packageNameFound ) { Out-LogError "package not found: -Enable $($packageName)" return 1 } $packageEnabled = $featuresJson.packages.Where( {$_.Name -eq $packageName} ).enabled if ( $packageEnabled ) { Out-LogError "package already enabled: -Enable $($packageName)" return 1 } } } if ( $Disable ) { $featuresJson = Get-Content -Path $Features | ConvertFrom-Json $sbomJson = Get-Content -Path $SBOM | ConvertFrom-Json foreach( $packageName in $Disable ) { $packageNameFound = $featuresJson.packages.Where( {$_.Name -eq $packageName} ).name # $packageNameFound = sh -c "(< ""$($Features)"" jq -r '.packages[] | select(.name == \""$($packageName)\"") | .name // empty') || rc=$?" if ( $packageNameFound ) { if ( $packageName -ne $packageNameFound ) { Out-LogError "package not found: -Disable $($packageName)" return 1 } $packageEnabled = $featuresJson.packages.Where( {$_.Name -eq $packageName} ).enabled if ( !$packageEnabled ) { Out-LogError "package already disabled: -Disable $($packageName)" return 1 } } $packageNameFound = $sbomJson.components.Where( {$_.Name -eq $packageName} ).name if ( !$packageNameFound ) { Out-LogError "package not found: -Disable $($packageName)" return 1 } } } } function isPowerShellVersion( [int] $Major=-1, [int] $Minor=-1, [int] $Patch=-1 ) { $rc = $false if ( $Major -gt -1 ) { if ( $PSVersionTable.PSVersion.Major -eq $Major ) { if ( $Minor -gt -1 ) { if ( $PSVersionTable.PSVersion.Minor -eq $Minor ) { if ( $Patch -gt - 1 ) { if ( $PSVersionTable.PSVersion.Patch -ge $Patch ) { $rc = $true } } else { $rc = $true } } elseif ( $PSVersionTable.PSVersion.Minor -gt $Minor ) { $rc = $true } else { $rc = $true } } else { $rc = $true } } elseif ( $PSVersionTable.PSVersion.Major -gt $Major ) { $rc = $true } } $rc } function hasAdministratorRole() { $currentPrincipal = New-Object Security.Principal.WindowsPrincipal([Security.Principal.WindowsIdentity]::GetCurrent()) return $currentPrincipal.IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator) } function Final() { if ( $tarDir -and (Test-Path -Path $tarDir -PathType container) ) { Remove-Item -Path $tarDir -Recurse -Force } Out-LogInfo "-- end of log ----------------" if ( $ShowLogs -and (Test-Path -Path $logFile -PathType leaf) ) { Get-Content -Path $logFile } } # ------------------------------ # Main # ------------------------------ if ( Test-Arguments -ne 0 ) { return 1 } if ( $LogDir ) { if ( $MakeDirs -and !(Test-Path -Path $LogDir -PathType container) ) { New-Item -Path $LogDir -ItemType directory | Out-Null } $logFile = "$($LogDir)/js7_set_feature.$($hostname).$(Get-Date $startTime -Format 'yyyy-MM-ddTHH-mm-ss').log" while ( Test-Path -Path $logFile -PathType leaf ) { Start-Sleep -Seconds 1 $script:startTime = Get-Date $script:logFile = "$($LogDir)/js7_set_feature.$($hostname).$(Get-Date $startTime -Format 'yyyy-MM-ddTHH-mm-ss').log" } New-Item $logFile -ItemType file | Out-Null } if ( !$List ) { Out-LogInfo "-- begin of log --------------" # Get the command name $commandName = $PSCmdlet.MyInvocation.InvocationName # Get the list of parameters for the command $parameterList = (Get-Command -Name $commandName).Parameters # Grab each parameter value, using Get-Variable foreach ($parameter in $parameterList.Keys) { $variable = Get-Variable -Name $parameter -ErrorAction SilentlyContinue if ( $variable.value ) { Out-LogInfo ".. Argument: $($variable.name) = $($variable.value)" } } Out-LogInfo "-- begin of output -----------" } try { if ( Test-Path -Path $Features -PathType leaf ) { $featuresJson = Get-Content -Path $Features | ConvertFrom-Json } if ( !$featuresJson ) { $featuresJson = New-Object PSObject } if ( !$featuresJson.packages ) { Add-Member -Membertype NoteProperty -Name 'packages' -value @() -InputObject $featuresJson } if ( $BackupDir -and $MakeDirs -and !(Test-Path -Path $BackupDir -PathType container) ) { New-Item -Path $BackupDir -ItemType directory | Out-Null } if ( $BackupDir -and !(Test-Path -Path "$($BackupDir)/lib" -PathType container) ) { New-Item -Path "$($BackupDir)/lib" -ItemType directory | Out-Null } if ( $List ) { $featuresJson.packages return } if ( $Enable ) { $sbomJson = Get-Content -Path $SBOM | ConvertFrom-Json foreach( $packageName in $Enable ) { $isConfirmed = $False Out-LogInfo ".. checking to enable package: $($packageName)" $componentRefs = $sbomJson.components.Where( {$_.Name -eq $packageName} )."bom-ref" foreach( $componentRef in $componentRefs ) { $componentGroup = $sbomJson.components.Where( {$_."bom-ref" -eq $componentRef} ).group $componentName = $sbomJson.components.Where( {$_."bom-ref" -eq $componentRef} ).name $componentVersion = $sbomJson.components.Where( {$_."bom-ref" -eq $componentRef} ).version # $candidateFiles = Get-ChildItem -Path "$($BackupDir)/lib" -Filter "$($componentName)*.jar" -File -attributes !reparsepoint | Get-ChildItem -Recurse $candidateFiles = Get-ChildItem -Path "$($BackupDir)/lib" -Filter "$($componentName)*.jar" -File -attributes !reparsepoint -Recurse Out-LogInfo ".... candidate component files to be restored from backup directory: $($BackupDir)" Out-LogInfo $candidateFiles if ( $BackupDir ) { Out-LogInfo ".... restoring component files from backup directory: $($BackupDir)/lib" if ( $PSCmdlet.ShouldProcess( "$($LibHome)/lib", 'restore component files' ) ) { $isConfirmed = $True Copy-Item -Path "$($BackupDir)/lib" -Filter "$($componentName)*.jar" -Destination "$($LibHome)" -Recurse -Force } Out-LogInfo ".... removing component files from backup directory: $($BackupDir)/lib" if ( $PSCmdlet.ShouldProcess( "$($LibHome)/lib", 'remove backup files' ) ) { $candidateFiles | Remove-Item } } if ( $featuresJson.packages.Where( {$_.Name -eq $componentName} ) ) { $featuresJson.packages.Where( {$_.Name -eq $componentName} )[0].enabled = $True } else { $packageObject = New-Object PSObject Add-Member -Membertype NoteProperty -Name 'group' -value $componentGroup -InputObject $packageObject Add-Member -Membertype NoteProperty -Name 'name' -value $componentName -InputObject $packageObject Add-Member -Membertype NoteProperty -Name 'version' -value $componentVersion -InputObject $packageObject Add-Member -Membertype NoteProperty -Name 'enabled' -value $False -InputObject $packageObject $featuresJson.packages += $packageObject } if ( $PSCmdlet.ShouldProcess( "$($Features)", 'update features.json file' ) ) { $featuresJson | ConvertTo-Json | Out-File $Features } } if ( $isConfirmed ) { Out-LogInfo ".. package enabled: $($packageName)" } } } if ( $Disable ) { $isConfirmed = $False $sbomJson = Get-Content -Path $SBOM | ConvertFrom-Json foreach( $packageName in $Disable ) { Out-LogInfo ".. checking to disable package: $($packageName)" $componentRefs = $sbomJson.components.Where( {$_.Name -eq $packageName} )."bom-ref" foreach( $componentRef in $componentRefs ) { $componentGroup = $sbomJson.components.Where( {$_."bom-ref" -eq $componentRef} ).group $componentName = $sbomJson.components.Where( {$_."bom-ref" -eq $componentRef} ).name $componentVersion = $sbomJson.components.Where( {$_."bom-ref" -eq $componentRef} ).version # $candidateFiles = Get-ChildItem -Path "$($LibHome)/lib" -Filter "$($componentName)*.jar" -File -attributes !reparsepoint | Get-ChildItem -Recurse $candidateFiles = Get-ChildItem -Path "$($LibHome)/lib" -Filter "$($componentName)*.jar" -File -attributes !reparsepoint -Recurse Out-LogInfo ".... candidate component files for removal from directory: $($LibHome)/lib" Out-LogInfo $candidateFiles if ( $BackupDir ) { Out-LogInfo ".... creating backups of component files in directory: $($BackupDir)/lib" if ( $PSCmdlet.ShouldProcess( "$($LibHome)/lib", 'backup component files' ) ) { Copy-Item -Path "$($LibHome)/lib" -Filter "$($componentName)*.jar" -Destination "$($BackupDir)" -Recurse -Force } } Out-LogInfo ".... removing component files from directory: $($LibHome)/lib" if ( $PSCmdlet.ShouldProcess( "$($LibHome)/lib", 'remove component files' ) ) { $isConfirmed = $True $candidateFiles | Remove-Item } if ( $featuresJson.packages.Where( {$_.Name -eq $componentName} ) ) { $featuresJson.packages.Where( {$_.Name -eq $componentName} )[0].enabled = $False } else { $packageObject = New-Object PSObject Add-Member -Membertype NoteProperty -Name 'group' -value $componentGroup -InputObject $packageObject Add-Member -Membertype NoteProperty -Name 'name' -value $componentName -InputObject $packageObject Add-Member -Membertype NoteProperty -Name 'version' -value $componentVersion -InputObject $packageObject Add-Member -Membertype NoteProperty -Name 'enabled' -value $False -InputObject $packageObject $featuresJson.packages += $packageObject } if ( $PSCmdlet.ShouldProcess( "$($Features)", 'update features.json file' ) ) { $featuresJson | ConvertTo-Json | Out-File $Features } Out-LogInfo ".. checking dependencies" Find-ComponentUp -SBOMJson $sbomJson -ComponentRef $componentRef -IndentLevel 4 } if ( $isConfirmed ) { Out-LogInfo ".. package disabled: $($packageName)" } } } Final } catch { Final $message = $_.Exception | Format-List -Force | Out-String Out-LogError "Exception occurred in line number $($_.InvocationInfo.ScriptLineNumber)`n$($message)" } } End { Out-LogVerbose ".. processing completed" } # SIG # Begin signature block # MIInfwYJKoZIhvcNAQcCoIIncDCCJ2wCAQExCzAJBgUrDgMCGgUAMGkGCisGAQQB # gjcCAQSgWzBZMDQGCisGAQQBgjcCAR4wJgIDAQAABBAfzDtgWUsITrck0sYpfvNR # AgEAAgEAAgEAAgEAAgEAMCEwCQYFKw4DAhoFAAQUY2ECIxH2zJKyCrtFHmOHJh9a # WFGggiCOMIIFbzCCBFegAwIBAgIQSPyTtGBVlI02p8mKidaUFjANBgkqhkiG9w0B # AQwFADB7MQswCQYDVQQGEwJHQjEbMBkGA1UECAwSR3JlYXRlciBNYW5jaGVzdGVy # MRAwDgYDVQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21vZG8gQ0EgTGltaXRlZDEh # MB8GA1UEAwwYQUFBIENlcnRpZmljYXRlIFNlcnZpY2VzMB4XDTIxMDUyNTAwMDAw # MFoXDTI4MTIzMTIzNTk1OVowVjELMAkGA1UEBhMCR0IxGDAWBgNVBAoTD1NlY3Rp # Z28gTGltaXRlZDEtMCsGA1UEAxMkU2VjdGlnbyBQdWJsaWMgQ29kZSBTaWduaW5n # IFJvb3QgUjQ2MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAjeeUEiIE # JHQu/xYjApKKtq42haxH1CORKz7cfeIxoFFvrISR41KKteKW3tCHYySJiv/vEpM7 # fbu2ir29BX8nm2tl06UMabG8STma8W1uquSggyfamg0rUOlLW7O4ZDakfko9qXGr # YbNzszwLDO/bM1flvjQ345cbXf0fEj2CA3bm+z9m0pQxafptszSswXp43JJQ8mTH # qi0Eq8Nq6uAvp6fcbtfo/9ohq0C/ue4NnsbZnpnvxt4fqQx2sycgoda6/YDnAdLv # 64IplXCN/7sVz/7RDzaiLk8ykHRGa0c1E3cFM09jLrgt4b9lpwRrGNhx+swI8m2J # mRCxrds+LOSqGLDGBwF1Z95t6WNjHjZ/aYm+qkU+blpfj6Fby50whjDoA7NAxg0P # OM1nqFOI+rgwZfpvx+cdsYN0aT6sxGg7seZnM5q2COCABUhA7vaCZEao9XOwBpXy # bGWfv1VbHJxXGsd4RnxwqpQbghesh+m2yQ6BHEDWFhcp/FycGCvqRfXvvdVnTyhe # Be6QTHrnxvTQ/PrNPjJGEyA2igTqt6oHRpwNkzoJZplYXCmjuQymMDg80EY2NXyc # uu7D1fkKdvp+BRtAypI16dV60bV/AK6pkKrFfwGcELEW/MxuGNxvYv6mUKe4e7id # FT/+IAx1yCJaE5UZkADpGtXChvHjjuxf9OUCAwEAAaOCARIwggEOMB8GA1UdIwQY # MBaAFKARCiM+lvEH7OKvKe+CpX/QMKS0MB0GA1UdDgQWBBQy65Ka/zWWSC8oQEJw # IDaRXBeF5jAOBgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zATBgNVHSUE # DDAKBggrBgEFBQcDAzAbBgNVHSAEFDASMAYGBFUdIAAwCAYGZ4EMAQQBMEMGA1Ud # HwQ8MDowOKA2oDSGMmh0dHA6Ly9jcmwuY29tb2RvY2EuY29tL0FBQUNlcnRpZmlj # YXRlU2VydmljZXMuY3JsMDQGCCsGAQUFBwEBBCgwJjAkBggrBgEFBQcwAYYYaHR0 # cDovL29jc3AuY29tb2RvY2EuY29tMA0GCSqGSIb3DQEBDAUAA4IBAQASv6Hvi3Sa # mES4aUa1qyQKDKSKZ7g6gb9Fin1SB6iNH04hhTmja14tIIa/ELiueTtTzbT72ES+ # BtlcY2fUQBaHRIZyKtYyFfUSg8L54V0RQGf2QidyxSPiAjgaTCDi2wH3zUZPJqJ8 # ZsBRNraJAlTH/Fj7bADu/pimLpWhDFMpH2/YGaZPnvesCepdgsaLr4CnvYFIUoQx # 2jLsFeSmTD1sOXPUC4U5IOCFGmjhp0g4qdE2JXfBjRkWxYhMZn0vY86Y6GnfrDyo # XZ3JHFuu2PMvdM+4fvbXg50RlmKarkUT2n/cR/vfw1Kf5gZV6Z2M8jpiUbzsJA8p # 1FiAhORFe1rYMIIGHDCCBASgAwIBAgIQM9cIqJFAUxnipbvTObmtbjANBgkqhkiG # 9w0BAQwFADBWMQswCQYDVQQGEwJHQjEYMBYGA1UEChMPU2VjdGlnbyBMaW1pdGVk # MS0wKwYDVQQDEyRTZWN0aWdvIFB1YmxpYyBDb2RlIFNpZ25pbmcgUm9vdCBSNDYw # HhcNMjEwMzIyMDAwMDAwWhcNMzYwMzIxMjM1OTU5WjBXMQswCQYDVQQGEwJHQjEY # MBYGA1UEChMPU2VjdGlnbyBMaW1pdGVkMS4wLAYDVQQDEyVTZWN0aWdvIFB1Ymxp # YyBDb2RlIFNpZ25pbmcgQ0EgRVYgUjM2MIIBojANBgkqhkiG9w0BAQEFAAOCAY8A # MIIBigKCAYEAu9H+HrdCW3j1kKeuLIPxjSHTMIaFe9/TzdkWS6yFxbsBz+KMKBFy # BHYsgcWrEnpASsUQ6IEUORtfTwf2MDAwfzUl5cBzPUAJlOio+Os5C1XVtgyLHif4 # 3j4iwb/vZe5z7mXdKN27H32bMn+3mVUXqrJJqDwQajrDIbKZqEPXO4KoGWG1Pmpa # Xbi8nhPQCp71W49pOGjqpR9byiPuC+280B5DQ26wU4zCcypEMW6+j7jGAva7ggQV # eQxSIOiYJ3Fh7y/k+AL7M1m19MNV59/2CCKuttEJWewBn3OJt0NP1fLZvVZZCd23 # F/bEdIC6h0asBtvbBA3VTrrujAk0GZUb5nATBCXfj7jXhDOMbKYM62i6lU98ROjU # aY0lecMh8TV3+E+2ElWV0FboGALV7nnIhqFp8RtOlBNqB2Lw0GuZpZdQnhwzoR7u # YYsFaByO9e4mkIPW/nGFp5ryDRQ+NrUSrXd1esznRjZqkFPLxpRx3gc6IfnWMmfg # nG5UhqBkoIPLAgMBAAGjggFjMIIBXzAfBgNVHSMEGDAWgBQy65Ka/zWWSC8oQEJw # IDaRXBeF5jAdBgNVHQ4EFgQUgTKSQSsozUbIxKLGKjkS7EipPxQwDgYDVR0PAQH/ # BAQDAgGGMBIGA1UdEwEB/wQIMAYBAf8CAQAwEwYDVR0lBAwwCgYIKwYBBQUHAwMw # GgYDVR0gBBMwETAGBgRVHSAAMAcGBWeBDAEDMEsGA1UdHwREMEIwQKA+oDyGOmh0 # dHA6Ly9jcmwuc2VjdGlnby5jb20vU2VjdGlnb1B1YmxpY0NvZGVTaWduaW5nUm9v # dFI0Ni5jcmwwewYIKwYBBQUHAQEEbzBtMEYGCCsGAQUFBzAChjpodHRwOi8vY3J0 # LnNlY3RpZ28uY29tL1NlY3RpZ29QdWJsaWNDb2RlU2lnbmluZ1Jvb3RSNDYucDdj # MCMGCCsGAQUFBzABhhdodHRwOi8vb2NzcC5zZWN0aWdvLmNvbTANBgkqhkiG9w0B # AQwFAAOCAgEAXzas+/n2cloUt/ALHd7Y/ZcB0v0B7pkthuj2t/A5/9aBSlqnQkoK # LRWd5pT9xWlKstdL8RYSTPa+kGZliy101KsI92oRAwh3fL5p4bDbnySJA9beXKTg # sta0z+M41bltzCfWzmQR6BBydtP54OksielJ07OXlgYK4fYKyEGakV2B2DZ3mMqA # QZeo+JE/Y5+qzVRUS4Dq9Rdm05Rx/Z79RzHj6RqGHdO+INI/sVJfspO9jJUJmHKP # lQH0mEOlSvsUJqqdNr9ysPzcvYQN7O00qF6VKzgWYwV12fYxLhVr4pSyKtJ0NbWY # mqP++CsvthdLJ2xa5rl2XtqG3atk1mrqgxiIGzGC9YizlCXAIS8IaQLjTLtMKhEw # 64F5BuFBlSrUIPYLk+R8dgydHSZrX4QB9iqZza/ex/DkGKJOmy8qDGamknUmvtlA # NRNvrqY3GnrorRxRYwcqVgZs7X4Y9uPsZHOmbQg2i68Pma51axcrwk1qw1FGQVbp # j8KN/xNxm9rtntOfq+VFphLFFFpSQZejBgAIxeYc6ieCPDvb5kbE7y0ANRPNNn2d # 5aonCAXMzsA2DksZT9Bjmm2/xSlTMSLbdVB3htDy+GruawYbPoUjK5fIfnqZQQzd # WH8OqMMSPTo1m+CdLIwXgVREqHodmJ2Wf1lYplRl/1FCC/hH68/45b8wggbsMIIE # 1KADAgECAhAwD2+s3WaYdHypRjaneC25MA0GCSqGSIb3DQEBDAUAMIGIMQswCQYD # VQQGEwJVUzETMBEGA1UECBMKTmV3IEplcnNleTEUMBIGA1UEBxMLSmVyc2V5IENp # dHkxHjAcBgNVBAoTFVRoZSBVU0VSVFJVU1QgTmV0d29yazEuMCwGA1UEAxMlVVNF # UlRydXN0IFJTQSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0xOTA1MDIwMDAw # MDBaFw0zODAxMTgyMzU5NTlaMH0xCzAJBgNVBAYTAkdCMRswGQYDVQQIExJHcmVh # dGVyIE1hbmNoZXN0ZXIxEDAOBgNVBAcTB1NhbGZvcmQxGDAWBgNVBAoTD1NlY3Rp # Z28gTGltaXRlZDElMCMGA1UEAxMcU2VjdGlnbyBSU0EgVGltZSBTdGFtcGluZyBD # QTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMgbAa/ZLH6ImX0BmD8g # kL2cgCFUk7nPoD5T77NawHbWGgSlzkeDtevEzEk0y/NFZbn5p2QWJgn71TJSeS7J # Y8ITm7aGPwEFkmZvIavVcRB5h/RGKs3EWsnb111JTXJWD9zJ41OYOioe/M5YSdO/ # 8zm7uaQjQqzQFcN/nqJc1zjxFrJw06PE37PFcqwuCnf8DZRSt/wflXMkPQEovA8N # T7ORAY5unSd1VdEXOzQhe5cBlK9/gM/REQpXhMl/VuC9RpyCvpSdv7QgsGB+uE31 # DT/b0OqFjIpWcdEtlEzIjDzTFKKcvSb/01Mgx2Bpm1gKVPQF5/0xrPnIhRfHuCkZ # pCkvRuPd25Ffnz82Pg4wZytGtzWvlr7aTGDMqLufDRTUGMQwmHSCIc9iVrUhcxIe # /arKCFiHd6QV6xlV/9A5VC0m7kUaOm/N14Tw1/AoxU9kgwLU++Le8bwCKPRt2ieK # BtKWh97oaw7wW33pdmmTIBxKlyx3GSuTlZicl57rjsF4VsZEJd8GEpoGLZ8DXv2D # olNnyrH6jaFkyYiSWcuoRsDJ8qb/fVfbEnb6ikEk1Bv8cqUUotStQxykSYtBORQD # Hin6G6UirqXDTYLQjdprt9v3GEBXc/Bxo/tKfUU2wfeNgvq5yQ1TgH36tjlYMu9v # GFCJ10+dM70atZ2h3pVBeqeDAgMBAAGjggFaMIIBVjAfBgNVHSMEGDAWgBRTeb9a # qitKz1SA4dibwJ3ysgNmyzAdBgNVHQ4EFgQUGqH4YRkgD8NBd0UojtE1XwYSBFUw # DgYDVR0PAQH/BAQDAgGGMBIGA1UdEwEB/wQIMAYBAf8CAQAwEwYDVR0lBAwwCgYI # KwYBBQUHAwgwEQYDVR0gBAowCDAGBgRVHSAAMFAGA1UdHwRJMEcwRaBDoEGGP2h0 # dHA6Ly9jcmwudXNlcnRydXN0LmNvbS9VU0VSVHJ1c3RSU0FDZXJ0aWZpY2F0aW9u # QXV0aG9yaXR5LmNybDB2BggrBgEFBQcBAQRqMGgwPwYIKwYBBQUHMAKGM2h0dHA6 # Ly9jcnQudXNlcnRydXN0LmNvbS9VU0VSVHJ1c3RSU0FBZGRUcnVzdENBLmNydDAl # BggrBgEFBQcwAYYZaHR0cDovL29jc3AudXNlcnRydXN0LmNvbTANBgkqhkiG9w0B # AQwFAAOCAgEAbVSBpTNdFuG1U4GRdd8DejILLSWEEbKw2yp9KgX1vDsn9FqguUlZ # kClsYcu1UNviffmfAO9Aw63T4uRW+VhBz/FC5RB9/7B0H4/GXAn5M17qoBwmWFzz # tBEP1dXD4rzVWHi/SHbhRGdtj7BDEA+N5Pk4Yr8TAcWFo0zFzLJTMJWk1vSWVgi4 # zVx/AZa+clJqO0I3fBZ4OZOTlJux3LJtQW1nzclvkD1/RXLBGyPWwlWEZuSzxWYG # 9vPWS16toytCiiGS/qhvWiVwYoFzY16gu9jc10rTPa+DBjgSHSSHLeT8AtY+dwS8 # BDa153fLnC6NIxi5o8JHHfBd1qFzVwVomqfJN2Udvuq82EKDQwWli6YJ/9GhlKZO # qj0J9QVst9JkWtgqIsJLnfE5XkzeSD2bNJaaCV+O/fexUpHOP4n2HKG1qXUfcb9b # Q11lPVCBbqvw0NP8srMftpmWJvQ8eYtcZMzN7iea5aDADHKHwW5NWtMe6vBE5jJv # HOsXTpTDeGUgOw9Bqh/poUGd/rG4oGUqNODeqPk85sEwu8CgYyz8XBYAqNDEf+oR # nR4GxqZtMl20OAkrSQeq/eww2vGnL8+3/frQo4TZJ577AWZ3uVYQ4SBuxq6x+ba6 # yDVdM3aO8XwgDCp3rrWiAoa6Ke60WgCxjKvj+QrJVF3UuWp0nr1Irpgwggb1MIIE # 3aADAgECAhA5TCXhfKBtJ6hl4jvZHSLUMA0GCSqGSIb3DQEBDAUAMH0xCzAJBgNV # BAYTAkdCMRswGQYDVQQIExJHcmVhdGVyIE1hbmNoZXN0ZXIxEDAOBgNVBAcTB1Nh # bGZvcmQxGDAWBgNVBAoTD1NlY3RpZ28gTGltaXRlZDElMCMGA1UEAxMcU2VjdGln # byBSU0EgVGltZSBTdGFtcGluZyBDQTAeFw0yMzA1MDMwMDAwMDBaFw0zNDA4MDIy # MzU5NTlaMGoxCzAJBgNVBAYTAkdCMRMwEQYDVQQIEwpNYW5jaGVzdGVyMRgwFgYD # VQQKEw9TZWN0aWdvIExpbWl0ZWQxLDAqBgNVBAMMI1NlY3RpZ28gUlNBIFRpbWUg # U3RhbXBpbmcgU2lnbmVyICM0MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKC # AgEApJMoUkvPJ4d2pCkcmTjA5w7U0RzsaMsBZOSKzXewcWWCvJ/8i7u7lZj7JRGO # WogJZhEUWLK6Ilvm9jLxXS3AeqIO4OBWZO2h5YEgciBkQWzHwwj6831d7yGawn7X # LMO6EZge/NMgCEKzX79/iFgyqzCz2Ix6lkoZE1ys/Oer6RwWLrCwOJVKz4VQq2cD # JaG7OOkPb6lampEoEzW5H/M94STIa7GZ6A3vu03lPYxUA5HQ/C3PVTM4egkcB9Ei # 4GOGp7790oNzEhSbmkwJRr00vOFLUHty4Fv9GbsfPGoZe267LUQqvjxMzKyKBJPG # V4agczYrgZf6G5t+iIfYUnmJ/m53N9e7UJ/6GCVPE/JefKmxIFopq6NCh3fg9EwC # SN1YpVOmo6DtGZZlFSnF7TMwJeaWg4Ga9mBmkFgHgM1Cdaz7tJHQxd0BQGq2qBDu # 9o16t551r9OlSxihDJ9XsF4lR5F0zXUS0Zxv5F4Nm+x1Ju7+0/WSL1KF6NpEUSqi # zADKh2ZDoxsA76K1lp1irScL8htKycOUQjeIIISoh67DuiNye/hU7/hrJ7CF9adD # hdgrOXTbWncC0aT69c2cPcwfrlHQe2zYHS0RQlNxdMLlNaotUhLZJc/w09CRQxLX # Mn2YbON3Qcj/HyRU726txj5Ve/Fchzpk8WBLBU/vuS/sCRMCAwEAAaOCAYIwggF+ # MB8GA1UdIwQYMBaAFBqh+GEZIA/DQXdFKI7RNV8GEgRVMB0GA1UdDgQWBBQDDzHI # kSqTvWPz0V1NpDQP0pUBGDAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAW # BgNVHSUBAf8EDDAKBggrBgEFBQcDCDBKBgNVHSAEQzBBMDUGDCsGAQQBsjEBAgED # CDAlMCMGCCsGAQUFBwIBFhdodHRwczovL3NlY3RpZ28uY29tL0NQUzAIBgZngQwB # BAIwRAYDVR0fBD0wOzA5oDegNYYzaHR0cDovL2NybC5zZWN0aWdvLmNvbS9TZWN0 # aWdvUlNBVGltZVN0YW1waW5nQ0EuY3JsMHQGCCsGAQUFBwEBBGgwZjA/BggrBgEF # BQcwAoYzaHR0cDovL2NydC5zZWN0aWdvLmNvbS9TZWN0aWdvUlNBVGltZVN0YW1w # aW5nQ0EuY3J0MCMGCCsGAQUFBzABhhdodHRwOi8vb2NzcC5zZWN0aWdvLmNvbTAN # BgkqhkiG9w0BAQwFAAOCAgEATJtlWPrgec/vFcMybd4zket3WOLrvctKPHXefpRt # wyLHBJXfZWlhEwz2DJ71iSBewYfHAyTKx6XwJt/4+DFlDeDrbVFXpoyEUghGHCrC # 3vLaikXzvvf2LsR+7fjtaL96VkjpYeWaOXe8vrqRZIh1/12FFjQn0inL/+0t2v++ # kwzsbaINzMPxbr0hkRojAFKtl9RieCqEeajXPawhj3DDJHk6l/ENo6NbU9irALpY # +zWAT18ocWwZXsKDcpCu4MbY8pn76rSSZXwHfDVEHa1YGGti+95sxAqpbNMhRnDc # L411TCPCQdB6ljvDS93NkiZ0dlw3oJoknk5fTtOPD+UTT1lEZUtDZM9I+GdnuU2/ # zA2xOjDQoT1IrXpl5Ozf4AHwsypKOazBpPmpfTXQMkCgsRkqGCGyyH0FcRpLJzaq # 4Jgcg3Xnx35LhEPNQ/uQl3YqEqxAwXBbmQpA+oBtlGF7yG65yGdnJFxQjQEg3gf3 # AdT4LhHNnYPl+MolHEQ9J+WwhkcqCxuEdn17aE+Nt/cTtO2gLe5zD9kQup2ZLHzX # dR+PEMSU5n4k5ZVKiIwn1oVmHfmuZHaR6Ej+yFUK7SnDH944psAU+zI9+KmDYjbI # w74Ahxyr+kpCHIkD3PVcfHDZXXhO7p9eIOYJanwrCKNI9RX8BE/fzSEceuX1jhrU # uUAwggcOMIIFdqADAgECAhBLD42C8LN2spe26tpOptTsMA0GCSqGSIb3DQEBCwUA # MFcxCzAJBgNVBAYTAkdCMRgwFgYDVQQKEw9TZWN0aWdvIExpbWl0ZWQxLjAsBgNV # BAMTJVNlY3RpZ28gUHVibGljIENvZGUgU2lnbmluZyBDQSBFViBSMzYwHhcNMjMw # NTMwMDAwMDAwWhcNMjYwNTI5MjM1OTU5WjCB1DESMBAGA1UEBRMJSFJCIDIxMDE1 # MRMwEQYLKwYBBAGCNzwCAQMTAkRFMR0wGwYDVQQPExRQcml2YXRlIE9yZ2FuaXph # dGlvbjELMAkGA1UEBhMCREUxDzANBgNVBAgMBkJlcmxpbjE1MDMGA1UECgwsU09T # IFNvZnR3YXJlLSB1bmQgT3JnYW5pc2F0aW9ucy1TZXJ2aWNlIEdtYkgxNTAzBgNV # BAMMLFNPUyBTb2Z0d2FyZS0gdW5kIE9yZ2FuaXNhdGlvbnMtU2VydmljZSBHbWJI # MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAvm3W6wNLzldzDdwiBUO9 # vjdX3L2GJGfxxaemditbwpxLnzXbSfStEJc9bywUm+bhSp/XGzWxeSbIGt13Sn9E # FopORa25JxuwA8xTEOxLM/CElgP/aN+/rl5sHzapJRF87id7yIXvlZxxiuAPZvpk # Tc/HWSz/IfbNPDtWNJhmCOliGJR3bXmFPHDDDflrfY5L9/v2wyLURELypxVBi53A # abZutiAa40LSqovVndbYQ8qQfdW9QVRJDF0hDMQ8xmu31kB6mLMCXK/9Rm7F2Yiv # 0NMvg4h3qh3kV+kLHzEcaIMeBQu+VtCPvMEn8ahRRw80blh7V2f9OX3GRyYn0DQf # jMZdGjpmj4P0xldq8Ge2PVm+rCUJeJSQUYsO1rLhMyBAoMl+z6qhwWuxh5cJaJar # DQvLWpixrisA+AJNJUniPyXTr+dZTSvnt29dG30C66KRskFKWDuBzjraAr3kUWQA # J5kS6G1KSuydbxgWk99Mjt+iaHLKDlseJEqXIerceCvsLzw+NOYsA5AOEdCz+OCL # dowQM0etNwWgcGViZBuydT3OvQ8w5QldJEXU+wh7a++/D2ul++4uhtQ3bWDWyk24 # SKX6OsqDFgcrFxWq+VJWflIhKqFA9hEZst5k8gHZkyXnD7PlbCDoeqt2sPUyiZKQ # /BY3ESONKDc+HZaLMG2ARjcCAwEAAaOCAdYwggHSMB8GA1UdIwQYMBaAFIEykkEr # KM1GyMSixio5EuxIqT8UMB0GA1UdDgQWBBREcHbV+LshFGmyiI02mnHSTFDZgjAO # BgNVHQ8BAf8EBAMCB4AwDAYDVR0TAQH/BAIwADATBgNVHSUEDDAKBggrBgEFBQcD # AzBJBgNVHSAEQjBAMDUGDCsGAQQBsjEBAgEGATAlMCMGCCsGAQUFBwIBFhdodHRw # czovL3NlY3RpZ28uY29tL0NQUzAHBgVngQwBAzBLBgNVHR8ERDBCMECgPqA8hjpo # dHRwOi8vY3JsLnNlY3RpZ28uY29tL1NlY3RpZ29QdWJsaWNDb2RlU2lnbmluZ0NB # RVZSMzYuY3JsMHsGCCsGAQUFBwEBBG8wbTBGBggrBgEFBQcwAoY6aHR0cDovL2Ny # dC5zZWN0aWdvLmNvbS9TZWN0aWdvUHVibGljQ29kZVNpZ25pbmdDQUVWUjM2LmNy # dDAjBggrBgEFBQcwAYYXaHR0cDovL29jc3Auc2VjdGlnby5jb20wSAYDVR0RBEEw # P6AcBggrBgEFBQcIA6AQMA4MDERFLUhSQiAyMTAxNYEfYW5kcmVhcy5wdWVzY2hl # bEBzb3MtYmVybGluLmNvbTANBgkqhkiG9w0BAQsFAAOCAYEAZBWwQK1VzdSeibzU # hNfNeTez03qcyuzLEhcFO0WlrUqr+hFmOEvdi4dmYDeRKmLw2M7RO+kjXsoT+UQH # y2byrEsA5MJDuXYKyQBtzPksgUoNvP5+br3gZp4CnzYprETjn9X56yOLfoPxUq3L # AMAFqtNkANfGkh9Dn72ws3LR3OkLBRxSvDRQCuhvo2uibwXqdL19wGgPyEvH9YjB # nKGkpgaYq0SGkXuWwrsjFTb+303nc3N8n6+ZK4xEp1m7W6gA3H09eRaiWKGZ9H8n # zYehgszuiRkZuEzNPfHoM6fS2Kv6YI4hyCTyIwDWfGS5w+JYEdhifcvE/xp+iBKT # XUfGTmb1ke92uqwdlTfSV/sRHObvMKNoTGx1P/Ua1QmU3K0OslDIrQm2I/cLHG5m # saHxsU41FOkMeSt9/VqD9cY9lH7IsJaCqY7cmCg8tECQ+UggkSRr7gwO5Gjfo7NO # tORIoBibi4YD3FpyV0aiOt7hpeBIqd1JIEWtD1GpUA7A6qqDMYIGWzCCBlcCAQEw # azBXMQswCQYDVQQGEwJHQjEYMBYGA1UEChMPU2VjdGlnbyBMaW1pdGVkMS4wLAYD # VQQDEyVTZWN0aWdvIFB1YmxpYyBDb2RlIFNpZ25pbmcgQ0EgRVYgUjM2AhBLD42C # 8LN2spe26tpOptTsMAkGBSsOAwIaBQCgeDAYBgorBgEEAYI3AgEMMQowCKACgACh # AoAAMBkGCSqGSIb3DQEJAzEMBgorBgEEAYI3AgEEMBwGCisGAQQBgjcCAQsxDjAM # BgorBgEEAYI3AgEVMCMGCSqGSIb3DQEJBDEWBBTLQIfI2qiqs8nElRdyCYxGt8zD # HjANBgkqhkiG9w0BAQEFAASCAgCZ0iTbsUOO55y9I47AscZVXxCof6pDbZ91sJXX # T/ao9gKaeGUcfRpBm71QjwFqnGMpjWt8XEP6U/PHwJ9N+viRaOsMGKYoedveDarF # CBy9MPzgmNdMAHFB6yEIsatJB0UNjJheAqtIx0UqbZwrHh1OrJCmo2BiRBCJJpW4 # 2RFOh5x54mWHpAYcxAHo6PWfqZmPLzuTClS3L6qWA0a5T5JXUsyzhaum+FZSZ9Yu # 72epVEJDUoabS4TEwBWlK8Dzy+R8MuWsUY7ZKphYati/Tj/RPETGtPXxeLaS1eD9 # RqEfpfDTS9y79NmXIZ7z5x41IxeFlIPqxdOgWbbbdROB3bwDA38qE8LZyiVUu9Bu # yZ6hhE/VqEYa7ItFPWwA+DJs0q1VdmVNNeqOBnRHcbiAcLa5PUbzEvYVVtGKPrv4 # f6DwEEw38t4URs5dp3lqCOLYl5iU1fe6T2Jh72p7xGKUv2nAbIyOgjVIfYXb4huh # X1+fo31lzInTrkddmZHPNBj3OQk8wYhpacYPrX1C20RZx5akRJ87P4zyFPEUmDHA # ldPffdQhOJxx075pSbN7IeqBnkDkFpmmXFyPL9XlM+OSJqWxYKyrXwqQcMDjvdEs # jbRXMHxB4MVAfH+8+G4FUU32Ru4/khxmUd8Z008kg6yaS//7STyUD2gVemYr/ylY # YjZmI6GCA0swggNHBgkqhkiG9w0BCQYxggM4MIIDNAIBATCBkTB9MQswCQYDVQQG # EwJHQjEbMBkGA1UECBMSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHEwdTYWxm # b3JkMRgwFgYDVQQKEw9TZWN0aWdvIExpbWl0ZWQxJTAjBgNVBAMTHFNlY3RpZ28g # UlNBIFRpbWUgU3RhbXBpbmcgQ0ECEDlMJeF8oG0nqGXiO9kdItQwDQYJYIZIAWUD # BAICBQCgeTAYBgkqhkiG9w0BCQMxCwYJKoZIhvcNAQcBMBwGCSqGSIb3DQEJBTEP # Fw0yMzA2MDYxOTA2NDhaMD8GCSqGSIb3DQEJBDEyBDDT1T2AOzzOIxDtdtOL1s7n # bhu2uvQ40JIJXYIgIn3IKQjYCH9q3M2Wg/vPGhd0NoowDQYJKoZIhvcNAQEBBQAE # ggIAliJo6FK2VriVG7quGgdKs+ZmF9Dj6vuVlP1waMEX46nCUOTcaAZZjmlZ6GJw # EV5T41WWyuDsCud7OU6eZ+VLcxkafULJFJcLw5W4ixDnUf4V0R1hyuJgLqA6sCyq # nIK1319fDmKbiKEOGtpRF9qsp4qofHoRzY9INfwwqPvZYy4eXCnNc36hcUBRajzy # 5BJ6/lxPfM2uu/qWT78y1IoVqBosd4aKu2eptz96Z8tnLh1s0ipoKV7ccYNTSnTI # Ai4EvLOqwAbOrWhq9FjEhaYd6aPbtYpniJrTy5Q/SraPq7g86KjNvAdkGNa3/tUq # ObaxAUmlmVzdxMkoHu3Ehmo/rY3YM6C2xs7VZ6t1PGhgpOTTNky3o0hNF6EwYhhm # X7R7IgxkISOkUqX5/AsKmYC1tyV0P3xlRNQqdcPsFW7IscON0EfsNQKbYDztwNuU # vJnDaK/NPnOX3tBZAeEwJMopVrrKD37LwVjZAs9S+0bNE3kFIXwm/lBMVz5z2zfB # NS9+7itQ3k8PsPqtCfdbXtJS0EJONgjeEw5OT1RD0ag1aYSaHJUFKtVfA5hnGch7 # Ynt03m9AWb3h/1QjMHWMP667ouxOx++e3essWOzsAhEgyT4wwQFslVfaoxeVSB47 # RFUydAwDrN8V9jAM4uxuRAPuIPHIOploeF0BOmHCgbff9jo= # SIG # End signature block