Modules/COM-Alerts.psm1
|
#------------------- FUNCTIONS FOR COMPUTE OPS MANAGEMENT ALERTS ----------------------------------------------------------------------------------------------------------------------------------------------- using module .\Constants.psm1 # Public functions Function Get-HPECOMAlert { <# .SYNOPSIS Retrieve the list of server alerts. .DESCRIPTION This Cmdlet returns a collection of server alert resources that are available in the specified region. Alerts provide security information and issues related to servers. By default, all alerts are returned since they persist until cleared. .PARAMETER Region Specifies the region code of a Compute Ops Management instance provisioned in the workspace (e.g., 'us-west', 'eu-central', etc.). This mandatory parameter can be retrieved using 'Get-HPEGLService -Name "Compute Ops Management" -ShowProvisioned' or 'Get-HPEGLRegion -ShowProvisioned'. Auto-completion (Tab key) is supported for this parameter, providing a list of region codes provisioned in your workspace. .PARAMETER SourceName Optional parameter that can be used to display alerts for a specific server by name or serial number. .PARAMETER ShowLastWeek This switch parameter can be used to display alerts from the last week (7 days). .PARAMETER ShowLastMonth This switch parameter can be used to display the alerts from the last month. .PARAMETER ShowLastThreeMonths This switch parameter can be used to display the alerts from the last three months. .PARAMETER WhatIf Shows the raw REST API call that would be made to COM instead of sending the request. This option is useful for understanding the inner workings of the native REST API calls used by COM. .EXAMPLE Get-HPECOMAlert -Region eu-central Return all server alerts in the central European region. .EXAMPLE Get-HPECOMAlert -Region eu-central -ShowLastWeek Return server alerts from the last week (7 days) in the central European region. .EXAMPLE Get-HPECOMAlert -Region eu-central -ShowLastMonth Return server alerts from the last month in the central European region. .EXAMPLE Get-HPECOMAlert -Region eu-central -ShowLastThreeMonths Return server alerts from the last three months in the central European region. .EXAMPLE Get-HPECOMAlert -Region eu-central -SourceName CZJ11105MV Retrieve alerts for a server specified by its serial number. .EXAMPLE Get-HPECOMAlert -Region eu-central -SourceName "ESX-1" Retrieve alerts for a server specified by its name. .EXAMPLE Get-HPECOMServer -Region eu-central -Name ESX-1 | Get-HPECOMAlert Retrieve alerts for a server named 'ESX-1' in the "eu-central" region using pipeline input. .EXAMPLE Get-HPECOMServer -Region us-west -PowerState ON | Get-HPECOMAlert Retrieve alerts for all powered on servers in the "us-west" region. .INPUTS System.String, System.String[] A single string object or a list of string objects representing the server names or serial numbers. System.Collections.ArrayList List of server resources retrieved using 'Get-HPECOMServer'. .OUTPUTS HPEGreenLake.COM.Servers.Alert [System.Management.Automation.PSCustomObject] Alert objects with the following key properties: - serverName: The name of the server - serialNumber: The serial number of the server - serverId: The internal server ID - createdAt: The date/time when the alert was created (DateTime object) - description: The alert description/message - severity: The severity level of the alert (possible values: OK, WARNING, CRITICAL, UNKNOWN, NOT_PRESENT, REDUNDANT, NON_REDUNDANT) - category: The category of the alert - region: The region code where the alert was generated #> [CmdletBinding(DefaultParameterSetName = 'Default')] Param( [Parameter (Mandatory, ValueFromPipelineByPropertyName, ParameterSetName = 'Default')] [Parameter (Mandatory, ValueFromPipelineByPropertyName, ParameterSetName = 'SourceName')] [ValidateScript({ # First check if there's an active session with COM regions if (-not $Global:HPEGreenLakeSession -or -not $Global:HPECOMRegions -or $Global:HPECOMRegions.Count -eq 0) { Throw "No active HPE GreenLake session found.`n`nCAUSE:`nYou have not authenticated to HPE GreenLake yet, or your previous session has been disconnected.`n`nACTION REQUIRED:`nRun 'Connect-HPEGL' to establish an authenticated session.`n`nExample:`n Connect-HPEGL`n Connect-HPEGL -Credential (Get-Credential)`n Connect-HPEGL -Workspace `"MyWorkspace`"`n`nAfter connecting, you will be able to use HPE GreenLake cmdlets." } # Then validate the region if (($_ -in $Global:HPECOMRegions.region)) { $true } else { Throw "The COM region '$_' is not provisioned in this workspace! Please specify a valid region code (e.g., 'us-west', 'eu-central'). `nYou can retrieve the region code using: Get-HPEGLService -Name 'Compute Ops Management' -ShowProvisioned. `nYou can also use the Tab key for auto-completion to see the list of provisioned region codes." } })] [ArgumentCompleter({ param($commandName, $parameterName, $wordToComplete, $commandAst, $fakeBoundParameters) # Filter region based on $Global:HPECOMRegions global variable and create completions $Global:HPECOMRegions.region | Where-Object { $_ -like "$wordToComplete*" } | ForEach-Object { [System.Management.Automation.CompletionResult]::new($_, $_, 'ParameterValue', $_) } })] [String]$Region, [Parameter (ParameterSetName = 'SourceName')] [Alias('Name', 'SerialNumber')] [String]$SourceName, [Parameter (ValueFromPipelineByPropertyName, ParameterSetName = 'Default')] [Parameter (ValueFromPipelineByPropertyName, ParameterSetName = 'SourceName')] [string]$ResourceUri, [Parameter (ParameterSetName = 'Default')] [Parameter (ParameterSetName = 'SourceName')] [Switch]$ShowLastWeek, [Parameter (ParameterSetName = 'Default')] [Parameter (ParameterSetName = 'SourceName')] [Switch]$ShowLastMonth, [Parameter (ParameterSetName = 'Default')] [Parameter (ParameterSetName = 'SourceName')] [Switch]$ShowLastThreeMonths, [Switch]$WhatIf ) Begin { $Caller = (Get-PSCallStack)[1].Command "[{0}] Called from: {1}" -f $MyInvocation.InvocationName.ToString().ToUpper(), $Caller | Write-Verbose $AlertCollection = [System.Collections.ArrayList]::new() # Calculate time filters $todayMinusSevenDays = (Get-Date).AddDays(-7).ToUniversalTime() $todayMinusOneMonth = (Get-Date).AddMonths(-1).ToUniversalTime() $todayMinusThreeMonths = (Get-Date).AddMonths(-3).ToUniversalTime() } Process { "[{0}] Bound PS Parameters: {1}" -f $MyInvocation.InvocationName.ToString().ToUpper(), ($PSBoundParameters | out-string) | Write-Verbose if ($ResourceUri) { # Extract server ID from resourceUri and use it directly $ServerID = $ResourceUri.Split("/")[-1] "[{0}] Extracted server ID '{1}' from resourceUri" -f $MyInvocation.InvocationName.ToString().ToUpper(), $ServerID | Write-Verbose # Build URI directly with the extracted server ID $Uri = (Get-COMServersUri) + "/" + $ServerID + "/alerts" # Make API call try { "[{0}] Retrieving alerts for server ID '{1}'" -f $MyInvocation.InvocationName.ToString().ToUpper(), $ServerID | Write-Verbose [Array]$CollectionList = Invoke-HPECOMWebRequest -Method Get -Uri $Uri -Region $Region -WhatIfBoolean $WhatIf -Verbose:$VerbosePreference } catch { $PSCmdlet.ThrowTerminatingError($_) } if ($Null -ne $CollectionList -and $CollectionList.Count -gt 0 -and -not $WhatIf) { "[{0}] Received {1} alert(s) from server ID '{2}'" -f $MyInvocation.InvocationName.ToString().ToUpper(), $CollectionList.Count, $ServerID | Write-Verbose # Add serial number and region to object (serverName not available without lookup) $CollectionList | ForEach-Object { if ($_.serverId) { $_ | Add-Member -type NoteProperty -name serialNumber -value ($_.serverId -split '\+')[1] -Force } } $CollectionList | Add-Member -type NoteProperty -name region -value $Region -Force # Convert createdAt string to DateTime object in-place $CollectionList | ForEach-Object { if ($_.createdAt) { $_.createdAt = [DateTime]$_.createdAt } } "[{0}] Before filtering: {1} alert(s)" -f $MyInvocation.InvocationName.ToString().ToUpper(), $CollectionList.Count | Write-Verbose # Apply time filters if specified if ($ShowLastWeek) { $CollectionList = @($CollectionList | Where-Object { $_.createdAt -and ($_.createdAt -gt $todayMinusSevenDays) }) "[{0}] After ShowLastWeek filter: {1} alert(s)" -f $MyInvocation.InvocationName.ToString().ToUpper(), $CollectionList.Count | Write-Verbose } elseif ($ShowLastMonth) { $CollectionList = @($CollectionList | Where-Object { $_.createdAt -and ($_.createdAt -gt $todayMinusOneMonth) }) "[{0}] After ShowLastMonth filter: {1} alert(s)" -f $MyInvocation.InvocationName.ToString().ToUpper(), $CollectionList.Count | Write-Verbose } elseif ($ShowLastThreeMonths) { $CollectionList = @($CollectionList | Where-Object { $_.createdAt -and ($_.createdAt -gt $todayMinusThreeMonths) }) "[{0}] After ShowLastThreeMonths filter: {1} alert(s)" -f $MyInvocation.InvocationName.ToString().ToUpper(), $CollectionList.Count | Write-Verbose } if ($CollectionList.Count -gt 0) { "[{0}] Adding {1} alert(s) to collection" -f $MyInvocation.InvocationName.ToString().ToUpper(), $CollectionList.Count | Write-Verbose [void]$AlertCollection.AddRange($CollectionList) } else { "[{0}] No alerts remaining after filtering" -f $MyInvocation.InvocationName.ToString().ToUpper() | Write-Verbose } } } elseif ($SourceName) { # Get alerts for a specific server # Step 1: Pre-validation - Get server resource try { "[{0}] Retrieving server resource for '{1}'" -f $MyInvocation.InvocationName.ToString().ToUpper(), $SourceName | Write-Verbose $Server = Get-HPECOMServer -Region $Region -Name $SourceName -Verbose:$false | Select-Object -First 1 } catch { $PSCmdlet.ThrowTerminatingError($_) } # Step 2: Validation check BEFORE API call if (-not $Server) { "[{0}] Server '{1}' not found in region '{2}'" -f $MyInvocation.InvocationName.ToString().ToUpper(), $SourceName, $Region | Write-Verbose if ($WhatIf) { $ErrorMessage = "Server '{0}' not found in region '{1}'. Cannot display API request." -f $SourceName, $Region Write-Warning $ErrorMessage return } else { # Get-* cmdlet: return nothing silently for "not found" return } } # Step 3: Build URI AFTER validation passes $ServerID = $Server.id $Uri = (Get-COMServersUri) + "/" + $ServerID + "/alerts" # Step 4: Make API call try { "[{0}] Retrieving alerts for server '{1}' (ID: {2})" -f $MyInvocation.InvocationName.ToString().ToUpper(), $SourceName, $ServerID | Write-Verbose [Array]$CollectionList = Invoke-HPECOMWebRequest -Method Get -Uri $Uri -Region $Region -WhatIfBoolean $WhatIf -Verbose:$VerbosePreference } catch { $PSCmdlet.ThrowTerminatingError($_) } if ($Null -ne $CollectionList -and $CollectionList.Count -gt 0 -and -not $WhatIf) { "[{0}] Received {1} alert(s) from server '{2}'" -f $MyInvocation.InvocationName.ToString().ToUpper(), $CollectionList.Count, $Server.name | Write-Verbose # Add serial number, servername, and region to object $CollectionList | Add-Member -type NoteProperty -name serverName -value $Server.name -Force $CollectionList | ForEach-Object { if ($_.serverId) { $_ | Add-Member -type NoteProperty -name serialNumber -value ($_.serverId -split '\+')[1] -Force } } $CollectionList | Add-Member -type NoteProperty -name region -value $Region -Force # Convert createdAt string to DateTime object in-place $CollectionList | ForEach-Object { if ($_.createdAt) { $_.createdAt = [DateTime]$_.createdAt } } "[{0}] Before filtering: {1} alert(s)" -f $MyInvocation.InvocationName.ToString().ToUpper(), $CollectionList.Count | Write-Verbose # Apply time filters if specified if ($ShowLastWeek) { $CollectionList = @($CollectionList | Where-Object { $_.createdAt -and ($_.createdAt -gt $todayMinusSevenDays) }) "[{0}] After ShowLastWeek filter: {1} alert(s)" -f $MyInvocation.InvocationName.ToString().ToUpper(), $CollectionList.Count | Write-Verbose } elseif ($ShowLastMonth) { $CollectionList = @($CollectionList | Where-Object { $_.createdAt -and ($_.createdAt -gt $todayMinusOneMonth) }) "[{0}] After ShowLastMonth filter: {1} alert(s)" -f $MyInvocation.InvocationName.ToString().ToUpper(), $CollectionList.Count | Write-Verbose } elseif ($ShowLastThreeMonths) { $CollectionList = @($CollectionList | Where-Object { $_.createdAt -and ($_.createdAt -gt $todayMinusThreeMonths) }) "[{0}] After ShowLastThreeMonths filter: {1} alert(s)" -f $MyInvocation.InvocationName.ToString().ToUpper(), $CollectionList.Count | Write-Verbose } # Default: no filtering - show all alerts (they persist until cleared) if ($CollectionList.Count -gt 0) { "[{0}] Adding {1} alert(s) to collection" -f $MyInvocation.InvocationName.ToString().ToUpper(), $CollectionList.Count | Write-Verbose [void]$AlertCollection.AddRange($CollectionList) } else { "[{0}] No alerts remaining after filtering" -f $MyInvocation.InvocationName.ToString().ToUpper() | Write-Verbose } } } else { # Get alerts for all servers in the region "[{0}] Retrieving all servers in region '{1}'" -f $MyInvocation.InvocationName.ToString().ToUpper(), $Region | Write-Verbose # Step 1: Get all servers try { $Servers = Get-HPECOMServer -Region $Region -Verbose:$false } catch { $PSCmdlet.ThrowTerminatingError($_) } if (-not $Servers) { "[{0}] No servers found in region '{1}'" -f $MyInvocation.InvocationName.ToString().ToUpper(), $Region | Write-Verbose return } # Step 2: Get alerts for each server foreach ($Server in $Servers) { $ServerID = $Server.id $Uri = (Get-COMServersUri) + "/" + $ServerID + "/alerts" try { "[{0}] Retrieving alerts for server '{1}' (ID: {2})" -f $MyInvocation.InvocationName.ToString().ToUpper(), $Server.name, $ServerID | Write-Verbose [Array]$CollectionList = Invoke-HPECOMWebRequest -Method Get -Uri $Uri -Region $Region -WhatIfBoolean $WhatIf -Verbose:$VerbosePreference } catch { # Continue to next server if one fails "[{0}] Failed to retrieve alerts for server '{1}': {2}" -f $MyInvocation.InvocationName.ToString().ToUpper(), $Server.name, $_.Exception.Message | Write-Verbose continue } if ($Null -ne $CollectionList -and $CollectionList.Count -gt 0 -and -not $WhatIf) { # Add serial number, servername, and region to object $CollectionList | Add-Member -type NoteProperty -name serverName -value $Server.name -Force $CollectionList | ForEach-Object { if ($_.serverId) { $_ | Add-Member -type NoteProperty -name serialNumber -value ($_.serverId -split '\+')[1] -Force } } $CollectionList | Add-Member -type NoteProperty -name region -value $Region -Force # Convert createdAt string to DateTime object in-place $CollectionList | ForEach-Object { if ($_.createdAt) { $_.createdAt = [DateTime]$_.createdAt } } # Apply time filters if specified if ($ShowLastWeek) { $CollectionList = @($CollectionList | Where-Object { $_.createdAt -and ($_.createdAt -gt $todayMinusSevenDays) }) } elseif ($ShowLastMonth) { $CollectionList = @($CollectionList | Where-Object { $_.createdAt -and ($_.createdAt -gt $todayMinusOneMonth) }) } elseif ($ShowLastThreeMonths) { $CollectionList = @($CollectionList | Where-Object { $_.createdAt -and ($_.createdAt -gt $todayMinusThreeMonths) }) } # Default: no filtering - show all alerts (they persist until cleared) if ($CollectionList.Count -gt 0) { [void]$AlertCollection.AddRange($CollectionList) } } } } } End { "[{0}] Total alerts collected: {1}" -f $MyInvocation.InvocationName.ToString().ToUpper(), $AlertCollection.Count | Write-Verbose if ($AlertCollection.Count -gt 0) { "[{0}] Repackaging {1} alert(s)" -f $MyInvocation.InvocationName.ToString().ToUpper(), $AlertCollection.Count | Write-Verbose $ReturnData = Invoke-RepackageObjectWithType -RawObject $AlertCollection -ObjectName "COM.Servers.Alert" "[{0}] Returning {1} alert(s)" -f $MyInvocation.InvocationName.ToString().ToUpper(), $ReturnData.Count | Write-Verbose return $ReturnData | Sort-Object -Property createdAt -Descending } else { "[{0}] No alerts found" -f $MyInvocation.InvocationName.ToString().ToUpper() | Write-Verbose return } } } # Private functions (not exported) function Invoke-RepackageObjectWithType { Param ( $RawObject, $ObjectName, [boolean] $WhatIf = $false ) process { if ( $RawObject ) { $OutputObject = @() if ( $WhatIf ) { Return } foreach ( $RawElementObject in $RawObject ) { $DataSetType = "HPEGreenLake.$ObjectName" $RawElementObject.PSTypeNames.Insert(0, $DataSetType) $RawElementObject.PSObject.TypeNames.Insert(0, $DataSetType) $OutputObject += $RawElementObject } if ($OutputObject.PSObject.TypeNames -notcontains $DataSetType) { foreach ($item in $OutputObject) { [void]($item | Add-Member -MemberType NoteProperty -Name PSObject.TypeNames -Value @( $DataSetType) -Force) } } return $OutputObject } else { return } } } # Export only public functions and aliases Export-ModuleMember -Function 'Get-HPECOMAlert' -Alias * # SIG # Begin signature block # MIItTgYJKoZIhvcNAQcCoIItPzCCLTsCAQExDzANBglghkgBZQMEAgEFADB5Bgor # BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG # KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCC4WQCMUY+twoAy # R/8UoP0LvH8mfxqmw/DzaEzWD2sVgaCCEfYwggVvMIIEV6ADAgECAhBI/JO0YFWU # jTanyYqJ1pQWMA0GCSqGSIb3DQEBDAUAMHsxCzAJBgNVBAYTAkdCMRswGQYDVQQI # DBJHcmVhdGVyIE1hbmNoZXN0ZXIxEDAOBgNVBAcMB1NhbGZvcmQxGjAYBgNVBAoM # EUNvbW9kbyBDQSBMaW1pdGVkMSEwHwYDVQQDDBhBQUEgQ2VydGlmaWNhdGUgU2Vy # dmljZXMwHhcNMjEwNTI1MDAwMDAwWhcNMjgxMjMxMjM1OTU5WjBWMQswCQYDVQQG # EwJHQjEYMBYGA1UEChMPU2VjdGlnbyBMaW1pdGVkMS0wKwYDVQQDEyRTZWN0aWdv # IFB1YmxpYyBDb2RlIFNpZ25pbmcgUm9vdCBSNDYwggIiMA0GCSqGSIb3DQEBAQUA # A4ICDwAwggIKAoICAQCN55QSIgQkdC7/FiMCkoq2rjaFrEfUI5ErPtx94jGgUW+s # hJHjUoq14pbe0IdjJImK/+8Skzt9u7aKvb0Ffyeba2XTpQxpsbxJOZrxbW6q5KCD # J9qaDStQ6Utbs7hkNqR+Sj2pcaths3OzPAsM79szV+W+NDfjlxtd/R8SPYIDdub7 # P2bSlDFp+m2zNKzBenjcklDyZMeqLQSrw2rq4C+np9xu1+j/2iGrQL+57g2extme # me/G3h+pDHazJyCh1rr9gOcB0u/rgimVcI3/uxXP/tEPNqIuTzKQdEZrRzUTdwUz # T2MuuC3hv2WnBGsY2HH6zAjybYmZELGt2z4s5KoYsMYHAXVn3m3pY2MeNn9pib6q # RT5uWl+PoVvLnTCGMOgDs0DGDQ84zWeoU4j6uDBl+m/H5x2xg3RpPqzEaDux5mcz # mrYI4IAFSEDu9oJkRqj1c7AGlfJsZZ+/VVscnFcax3hGfHCqlBuCF6yH6bbJDoEc # QNYWFyn8XJwYK+pF9e+91WdPKF4F7pBMeufG9ND8+s0+MkYTIDaKBOq3qgdGnA2T # OglmmVhcKaO5DKYwODzQRjY1fJy67sPV+Qp2+n4FG0DKkjXp1XrRtX8ArqmQqsV/ # AZwQsRb8zG4Y3G9i/qZQp7h7uJ0VP/4gDHXIIloTlRmQAOka1cKG8eOO7F/05QID # AQABo4IBEjCCAQ4wHwYDVR0jBBgwFoAUoBEKIz6W8Qfs4q8p74Klf9AwpLQwHQYD # VR0OBBYEFDLrkpr/NZZILyhAQnAgNpFcF4XmMA4GA1UdDwEB/wQEAwIBhjAPBgNV # HRMBAf8EBTADAQH/MBMGA1UdJQQMMAoGCCsGAQUFBwMDMBsGA1UdIAQUMBIwBgYE # VR0gADAIBgZngQwBBAEwQwYDVR0fBDwwOjA4oDagNIYyaHR0cDovL2NybC5jb21v # ZG9jYS5jb20vQUFBQ2VydGlmaWNhdGVTZXJ2aWNlcy5jcmwwNAYIKwYBBQUHAQEE # KDAmMCQGCCsGAQUFBzABhhhodHRwOi8vb2NzcC5jb21vZG9jYS5jb20wDQYJKoZI # hvcNAQEMBQADggEBABK/oe+LdJqYRLhpRrWrJAoMpIpnuDqBv0WKfVIHqI0fTiGF # OaNrXi0ghr8QuK55O1PNtPvYRL4G2VxjZ9RAFodEhnIq1jIV9RKDwvnhXRFAZ/ZC # J3LFI+ICOBpMIOLbAffNRk8monxmwFE2tokCVMf8WPtsAO7+mKYulaEMUykfb9gZ # pk+e96wJ6l2CxouvgKe9gUhShDHaMuwV5KZMPWw5c9QLhTkg4IUaaOGnSDip0TYl # d8GNGRbFiExmfS9jzpjoad+sPKhdnckcW67Y8y90z7h+9teDnRGWYpquRRPaf9xH # +9/DUp/mBlXpnYzyOmJRvOwkDynUWICE5EV7WtgwggYaMIIEAqADAgECAhBiHW0M # UgGeO5B5FSCJIRwKMA0GCSqGSIb3DQEBDAUAMFYxCzAJBgNVBAYTAkdCMRgwFgYD # VQQKEw9TZWN0aWdvIExpbWl0ZWQxLTArBgNVBAMTJFNlY3RpZ28gUHVibGljIENv # ZGUgU2lnbmluZyBSb290IFI0NjAeFw0yMTAzMjIwMDAwMDBaFw0zNjAzMjEyMzU5 # NTlaMFQxCzAJBgNVBAYTAkdCMRgwFgYDVQQKEw9TZWN0aWdvIExpbWl0ZWQxKzAp # BgNVBAMTIlNlY3RpZ28gUHVibGljIENvZGUgU2lnbmluZyBDQSBSMzYwggGiMA0G # CSqGSIb3DQEBAQUAA4IBjwAwggGKAoIBgQCbK51T+jU/jmAGQ2rAz/V/9shTUxjI # ztNsfvxYB5UXeWUzCxEeAEZGbEN4QMgCsJLZUKhWThj/yPqy0iSZhXkZ6Pg2A2NV # DgFigOMYzB2OKhdqfWGVoYW3haT29PSTahYkwmMv0b/83nbeECbiMXhSOtbam+/3 # 6F09fy1tsB8je/RV0mIk8XL/tfCK6cPuYHE215wzrK0h1SWHTxPbPuYkRdkP05Zw # mRmTnAO5/arnY83jeNzhP06ShdnRqtZlV59+8yv+KIhE5ILMqgOZYAENHNX9SJDm # +qxp4VqpB3MV/h53yl41aHU5pledi9lCBbH9JeIkNFICiVHNkRmq4TpxtwfvjsUe # dyz8rNyfQJy/aOs5b4s+ac7IH60B+Ja7TVM+EKv1WuTGwcLmoU3FpOFMbmPj8pz4 # 4MPZ1f9+YEQIQty/NQd/2yGgW+ufflcZ/ZE9o1M7a5Jnqf2i2/uMSWymR8r2oQBM # dlyh2n5HirY4jKnFH/9gRvd+QOfdRrJZb1sCAwEAAaOCAWQwggFgMB8GA1UdIwQY # MBaAFDLrkpr/NZZILyhAQnAgNpFcF4XmMB0GA1UdDgQWBBQPKssghyi47G9IritU # pimqF6TNDDAOBgNVHQ8BAf8EBAMCAYYwEgYDVR0TAQH/BAgwBgEB/wIBADATBgNV # HSUEDDAKBggrBgEFBQcDAzAbBgNVHSAEFDASMAYGBFUdIAAwCAYGZ4EMAQQBMEsG # A1UdHwREMEIwQKA+oDyGOmh0dHA6Ly9jcmwuc2VjdGlnby5jb20vU2VjdGlnb1B1 # YmxpY0NvZGVTaWduaW5nUm9vdFI0Ni5jcmwwewYIKwYBBQUHAQEEbzBtMEYGCCsG # AQUFBzAChjpodHRwOi8vY3J0LnNlY3RpZ28uY29tL1NlY3RpZ29QdWJsaWNDb2Rl # U2lnbmluZ1Jvb3RSNDYucDdjMCMGCCsGAQUFBzABhhdodHRwOi8vb2NzcC5zZWN0 # aWdvLmNvbTANBgkqhkiG9w0BAQwFAAOCAgEABv+C4XdjNm57oRUgmxP/BP6YdURh # w1aVcdGRP4Wh60BAscjW4HL9hcpkOTz5jUug2oeunbYAowbFC2AKK+cMcXIBD0Zd # OaWTsyNyBBsMLHqafvIhrCymlaS98+QpoBCyKppP0OcxYEdU0hpsaqBBIZOtBajj # cw5+w/KeFvPYfLF/ldYpmlG+vd0xqlqd099iChnyIMvY5HexjO2AmtsbpVn0OhNc # WbWDRF/3sBp6fWXhz7DcML4iTAWS+MVXeNLj1lJziVKEoroGs9Mlizg0bUMbOalO # hOfCipnx8CaLZeVme5yELg09Jlo8BMe80jO37PU8ejfkP9/uPak7VLwELKxAMcJs # zkyeiaerlphwoKx1uHRzNyE6bxuSKcutisqmKL5OTunAvtONEoteSiabkPVSZ2z7 # 6mKnzAfZxCl/3dq3dUNw4rg3sTCggkHSRqTqlLMS7gjrhTqBmzu1L90Y1KWN/Y5J # KdGvspbOrTfOXyXvmPL6E52z1NZJ6ctuMFBQZH3pwWvqURR8AgQdULUvrxjUYbHH # j95Ejza63zdrEcxWLDX6xWls/GDnVNueKjWUH3fTv1Y8Wdho698YADR7TNx8X8z2 # Bev6SivBBOHY+uqiirZtg0y9ShQoPzmCcn63Syatatvx157YK9hlcPmVoa1oDE5/ # L9Uo2bC5a4CH2RwwggZhMIIEyaADAgECAhEAyDHh+zCQwUNyJV9S6gqqvTANBgkq # hkiG9w0BAQwFADBUMQswCQYDVQQGEwJHQjEYMBYGA1UEChMPU2VjdGlnbyBMaW1p # dGVkMSswKQYDVQQDEyJTZWN0aWdvIFB1YmxpYyBDb2RlIFNpZ25pbmcgQ0EgUjM2 # MB4XDTI1MDUyMDAwMDAwMFoXDTI4MDUxOTIzNTk1OVowdzELMAkGA1UEBhMCVVMx # DjAMBgNVBAgMBVRleGFzMSswKQYDVQQKDCJIZXdsZXR0IFBhY2thcmQgRW50ZXJw # cmlzZSBDb21wYW55MSswKQYDVQQDDCJIZXdsZXR0IFBhY2thcmQgRW50ZXJwcmlz # ZSBDb21wYW55MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA37AD03qw # cmuCQyxRB2VBM7SfUf0SmpQb8iaPvGmxw5uoDBY3gdC/3Xq/rfM3ndCn03hNdGyu # cpC7tD4zmel6yYqxyXDVr45Jd2cz9jFXoYTOMcuDV6I6CvU/EnbFxWhv0VCp+2Ip # z4+uJGI6aVlMpFpLbgPjhp9ogd/89HEyi1FkSFoarnvxxaXm93S81k7FD/4Edtvu # muGI4V8p39GfbCiMuHku8BzSQ2g86gWFnOaVhY6h4XWvEmE8LPYkU/STrej28Flg # kSt9f/Jg6+dvRKm92uN2Z760Eql9+DTWkGmGe4YrIyD25XDa07sS9tIpVWzLrGOy # ecaVpJwVVBqCadXDgkgTYKw/UlS+cEqsviT6wREGl4aX/GbeNO6Y4oDTTYkabW3p # eg1ku0v90oDqzoTaWEE5ly2UajvXIgzpFLLXqpR6GYkv/y3ZJV0chBqRtAObebH7 # XOBa5a2kqMBw0gkIZBJHd8+PCPH/U7eJkeKXtGGj2uTudcGjZgOjVcFYdCRnufJd # isrV7bj0Hzghcv3QyRXL3rRjcNb4ccKNnSgF/8cmiTVpvFHTfUKsYdkbM6wsbjXR # dJNADjGOYRms7tKsii3/oXO+2S1Um7yomBZQ2+wVRCY6MrRX1onDKid5t5AyWFtR # u0aQcdBmHG6JeDiQ3Hrb2g9kZhuFkgABVBkCAwEAAaOCAYkwggGFMB8GA1UdIwQY # MBaAFA8qyyCHKLjsb0iuK1SmKaoXpM0MMB0GA1UdDgQWBBQH4rUE0gsy8LW2G3vm # oYtOnZ8zEjAOBgNVHQ8BAf8EBAMCB4AwDAYDVR0TAQH/BAIwADATBgNVHSUEDDAK # BggrBgEFBQcDAzBKBgNVHSAEQzBBMDUGDCsGAQQBsjEBAgEDAjAlMCMGCCsGAQUF # BwIBFhdodHRwczovL3NlY3RpZ28uY29tL0NQUzAIBgZngQwBBAEwSQYDVR0fBEIw # QDA+oDygOoY4aHR0cDovL2NybC5zZWN0aWdvLmNvbS9TZWN0aWdvUHVibGljQ29k # ZVNpZ25pbmdDQVIzNi5jcmwweQYIKwYBBQUHAQEEbTBrMEQGCCsGAQUFBzAChjho # dHRwOi8vY3J0LnNlY3RpZ28uY29tL1NlY3RpZ29QdWJsaWNDb2RlU2lnbmluZ0NB # UjM2LmNydDAjBggrBgEFBQcwAYYXaHR0cDovL29jc3Auc2VjdGlnby5jb20wDQYJ # KoZIhvcNAQEMBQADggGBAIax+Yaj5EciDlztft4iAfD2CtIWEF0cxR+UbbvJEs86 # 5wyoO3ZQoujr0FJ+P5fjDKLbamHrEWmyoD2YC4lzecmnFOnY0y4uJ9zBY8B6X6TU # 9e6+TfZtlXd44YffXYAfoLX+uYjVJcZOaMuXF61+CFpjLJjepsD8m1gdj5QUz2sH # 6GOfU6mEm8SHvKpgPMV/yhEKqgjlenY6Ao49RkxnDuvRlMP8SFPB+8bxiLegEdGa # ei8nSr/j5YeDZFevUJ696T4W45QGrwAhBBpbKDz6CzlImC1b2C8Bp02XBAsOQs/u # CIaQv5XxUmVxmb85tDJkd7QfqHo2z1T2NYMkvXUcSClYRuVxxC/frpqcrxS9O9xE # v65BoUztAJSXsTdfpUjWeNOnhq8lrwa2XAD3fbagNF6ElsBiNDSbwHCG/iY4kAya # VpbAYtaa6TfzdI/I0EaCX5xYRW56ccI2AnbaEVKz9gVjzi8hBLALlRhrs1uMFtPj # nZ+oA+rbZZyGZkz3xbUYKTGCGq4wghqqAgEBMGkwVDELMAkGA1UEBhMCR0IxGDAW # BgNVBAoTD1NlY3RpZ28gTGltaXRlZDErMCkGA1UEAxMiU2VjdGlnbyBQdWJsaWMg # Q29kZSBTaWduaW5nIENBIFIzNgIRAMgx4fswkMFDciVfUuoKqr0wDQYJYIZIAWUD # BAIBBQCgfDAQBgorBgEEAYI3AgEMMQIwADAZBgkqhkiG9w0BCQMxDAYKKwYBBAGC # NwIBBDAcBgorBgEEAYI3AgELMQ4wDAYKKwYBBAGCNwIBFTAvBgkqhkiG9w0BCQQx # IgQgV4H8BeJSOrsjTD94u08/VsdEb7JvSXy6QRMwJExRwk4wDQYJKoZIhvcNAQEB # BQAEggIACCm+r4se0io7BpoC6TEIDFLIbqK1BrbyqSEhHGBY/Zzz6aOj0oVjLvxf # sP9ZmFcyJIGogo/+IuMNaIeHogYHqLUORgR4SKq+BNG1O+ouFZjYT0ZlYcuDzVO6 # Yf9VZ3Vbhj4arWZVoGRnnVTFsVMw9OFrvQc9Lch9PM3n/VAmAbZGKLFYaKHTAbMc # IHRUY7QMD+XNzWp8ucsonzss4nSM6LG+xPeh78fEjbcu9CIila+v3hfvIR2I4/yH # 7ztcieTq97BiSQxHDMf8DXABRP5vRjW5bqyQ935ruPzurYPxIELbjx9+5o+j8moV # dLlW376SrvgbWJELstTLew+foLFdgzM+at46dCEOYGFnzAAbhLWl5QaGYI+h6QgX # 1K642EVUSGEdxeq3eTvp+GtafQaJSNlvXi8YyhMeJboz7KlLkOb+P3WZ7FYLvjfZ # OtU2O3SQrlSNBO1DnqAorYoaaT6pTZvPXbOjBoq1jBUKDR2kHkE+VYDIE8QqxDEk # TdX2AHYFIZrfPRP3V8CDGu+i5+z5u2A6gOvsuQWJh+FNBBYIqJZGkJnnnkoOBcqq # 0cn4t4rAQW7HlDjBcLg3QM38IgHrqgyFPz9JZVhzaU8XFO2QsgVW1u9HsqSWByDf # z7fDdcNsZfyf+uYL2iereoiurV9g7nPY2DYxGs/g97vP9Irg89ahgheYMIIXlAYK # KwYBBAGCNwMDATGCF4QwgheABgkqhkiG9w0BBwKgghdxMIIXbQIBAzEPMA0GCWCG # SAFlAwQCAgUAMIGIBgsqhkiG9w0BCRABBKB5BHcwdQIBAQYJYIZIAYb9bAcBMEEw # DQYJYIZIAWUDBAICBQAEMEe3uH3m4Jr1RQ8KzOrdYH0eUSOZNFcxFhFPy5hf17rd # GfPj3IbZZuOdOd1KIjIgCgIRAM0yr5U5daM5GobrYECRjK8YDzIwMjYwMTMwMTA0 # NDQzWqCCEzowggbtMIIE1aADAgECAhAMIENJ+dD3WfuYLeQIG4h7MA0GCSqGSIb3 # DQEBDAUAMGkxCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5EaWdpQ2VydCwgSW5jLjFB # MD8GA1UEAxM4RGlnaUNlcnQgVHJ1c3RlZCBHNCBUaW1lU3RhbXBpbmcgUlNBNDA5 # NiBTSEEyNTYgMjAyNSBDQTEwHhcNMjUwNjA0MDAwMDAwWhcNMzYwOTAzMjM1OTU5 # WjBjMQswCQYDVQQGEwJVUzEXMBUGA1UEChMORGlnaUNlcnQsIEluYy4xOzA5BgNV # BAMTMkRpZ2lDZXJ0IFNIQTM4NCBSU0E0MDk2IFRpbWVzdGFtcCBSZXNwb25kZXIg # MjAyNSAxMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA2zlS+4t0t+XJ # DVHY+vNJxpv794sM3O4UQycmKRXmYLs+YRfztyl8QJ7n/UqxNTKWmjdFDWGv43+a # 2oiJ41yxOe0sLoFx8F1az2JRTZc7dhAxbne+byd5bf2SEZlCruGxxWSqbpUY6dAG # RCCyBOaiFaoXhkn+L15efcomDSrTnA5Vgd9pvMO+7bM+tSW4JzAiIbO2mIPyCEdK # YscmPl+YBuenSP7NJw9icL1tWpn61uM6WyUNv4RcyBAz+NvJbNf5kTM7F46cvBwp # 0lZYisZR985y5sYj4e4yUBbPBxyrT5aNMZ++5tis8GDmHCpqyVLQ4eLHwpim5iwR # 49TREfETtlEFORWTkJ2hOO1zzVAWs6jtdep12VtFZoQOhIwdUfPHSsAw39xFVevF # EFf2u+DVr1sOV7JACY+xcG8hWIeqPGVUwkiyBRUTgA7HeAxJb0iQl4GDBC6ZBA4w # GN/ahMxF4fuJsOs1zwkPBSnXmHkm18HwHgIPKk287dMIchZyjm7zGcCYZ4bisoUY # WL9oTga9JCfFMTc9yl26XDB0zl9rdSwviOmaYSlaRanF84oxAYnqgBy6Z89ykPgW # nb7SRi31NyP359Whok+36fkyxTPjSrCWvMK7pzbRg8tfIRlUnxl7G5bIrkPqMbD9 # zJoB79MHFgLr5ljU7rrcLwy+cEfpzFMCAwEAAaOCAZUwggGRMAwGA1UdEwEB/wQC # MAAwHQYDVR0OBBYEFFWeuednyJEQSbQ2Uo15tyTFPy34MB8GA1UdIwQYMBaAFO9v # U0rp5AZ8esrikFb2L9RJ7MtOMA4GA1UdDwEB/wQEAwIHgDAWBgNVHSUBAf8EDDAK # BggrBgEFBQcDCDCBlQYIKwYBBQUHAQEEgYgwgYUwJAYIKwYBBQUHMAGGGGh0dHA6 # Ly9vY3NwLmRpZ2ljZXJ0LmNvbTBdBggrBgEFBQcwAoZRaHR0cDovL2NhY2VydHMu # ZGlnaWNlcnQuY29tL0RpZ2lDZXJ0VHJ1c3RlZEc0VGltZVN0YW1waW5nUlNBNDA5 # NlNIQTI1NjIwMjVDQTEuY3J0MF8GA1UdHwRYMFYwVKBSoFCGTmh0dHA6Ly9jcmwz # LmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydFRydXN0ZWRHNFRpbWVTdGFtcGluZ1JTQTQw # OTZTSEEyNTYyMDI1Q0ExLmNybDAgBgNVHSAEGTAXMAgGBmeBDAEEAjALBglghkgB # hv1sBwEwDQYJKoZIhvcNAQEMBQADggIBABt+CySH2AlqxUHnUWnZJI7rpdAqo0Pc # ikyV48Ltk5QWFgxpHP9WtjR3lskEAOk3TszmuNyMid7VuxHlQJl4KcdTr5cQ2YLy # +l560peBgM7kA4HCJqGqdQdzjXyrlg3YCdfnjs9w/7BO8xUmlAaq/D+PTZZO+Mnx # a3/IoyYsF+L9gWX4VJxZLljVs5JKmpSonnysMYv7CaqkQpBDmJWU2F68mLLZXfU0 # wXbDy9QQTskgcHviyQDeB1l6jl/WwOQiSNTNafYQUR2ZsJ5rPJu1NPzO1htKwdiU # jWenHwq5BRK1BR7+D+TwG97UHX4V0W+JvFZp8z3d3G5sA7Pt9qO5/6AWZ+0yf8nN # 58D+HAAShHmny25t6W7qF6VSRZCIpGr8hbAjfbBhO4MY8G2U9zwVKp6SljuKknxd # 2buihO33dioCGsB6trX++xQKf4QlYSggFvD9ZWSG4ysJPYOx+hbsBTEONFtr99x6 # OgJnnyVkDoudIn+gmV+Bq+a2G++BLU5AXOVclExpuoUQXUZF5p3sUrd21QjF9Ra0 # x4RD02gS4XwgzN+tvuY+tjhPICwXmH3ERL+fPIoxZT0XgwVP+17UqUbi5Zpe4Yda # dG5WjCTBvtmlM4JVovGYRvyAyfmYJJx0/0T+qK05wRJpg4q81vOKuCQPaE9H99JC # VvfCDBm4KjrEMIIGtDCCBJygAwIBAgIQDcesVwX/IZkuQEMiDDpJhjANBgkqhkiG # 9w0BAQsFADBiMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkw # FwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSEwHwYDVQQDExhEaWdpQ2VydCBUcnVz # dGVkIFJvb3QgRzQwHhcNMjUwNTA3MDAwMDAwWhcNMzgwMTE0MjM1OTU5WjBpMQsw # CQYDVQQGEwJVUzEXMBUGA1UEChMORGlnaUNlcnQsIEluYy4xQTA/BgNVBAMTOERp # Z2lDZXJ0IFRydXN0ZWQgRzQgVGltZVN0YW1waW5nIFJTQTQwOTYgU0hBMjU2IDIw # MjUgQ0ExMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAtHgx0wqYQXK+ # PEbAHKx126NGaHS0URedTa2NDZS1mZaDLFTtQ2oRjzUXMmxCqvkbsDpz4aH+qbxe # Lho8I6jY3xL1IusLopuW2qftJYJaDNs1+JH7Z+QdSKWM06qchUP+AbdJgMQB3h2D # Z0Mal5kYp77jYMVQXSZH++0trj6Ao+xh/AS7sQRuQL37QXbDhAktVJMQbzIBHYJB # YgzWIjk8eDrYhXDEpKk7RdoX0M980EpLtlrNyHw0Xm+nt5pnYJU3Gmq6bNMI1I7G # b5IBZK4ivbVCiZv7PNBYqHEpNVWC2ZQ8BbfnFRQVESYOszFI2Wv82wnJRfN20VRS # 3hpLgIR4hjzL0hpoYGk81coWJ+KdPvMvaB0WkE/2qHxJ0ucS638ZxqU14lDnki7C # coKCz6eum5A19WZQHkqUJfdkDjHkccpL6uoG8pbF0LJAQQZxst7VvwDDjAmSFTUm # s+wV/FbWBqi7fTJnjq3hj0XbQcd8hjj/q8d6ylgxCZSKi17yVp2NL+cnT6Toy+rN # +nM8M7LnLqCrO2JP3oW//1sfuZDKiDEb1AQ8es9Xr/u6bDTnYCTKIsDq1BtmXUqE # G1NqzJKS4kOmxkYp2WyODi7vQTCBZtVFJfVZ3j7OgWmnhFr4yUozZtqgPrHRVHhG # NKlYzyjlroPxul+bgIspzOwbtmsgY1MCAwEAAaOCAV0wggFZMBIGA1UdEwEB/wQI # MAYBAf8CAQAwHQYDVR0OBBYEFO9vU0rp5AZ8esrikFb2L9RJ7MtOMB8GA1UdIwQY # MBaAFOzX44LScV1kTN8uZz/nupiuHA9PMA4GA1UdDwEB/wQEAwIBhjATBgNVHSUE # DDAKBggrBgEFBQcDCDB3BggrBgEFBQcBAQRrMGkwJAYIKwYBBQUHMAGGGGh0dHA6 # Ly9vY3NwLmRpZ2ljZXJ0LmNvbTBBBggrBgEFBQcwAoY1aHR0cDovL2NhY2VydHMu # ZGlnaWNlcnQuY29tL0RpZ2lDZXJ0VHJ1c3RlZFJvb3RHNC5jcnQwQwYDVR0fBDww # OjA4oDagNIYyaHR0cDovL2NybDMuZGlnaWNlcnQuY29tL0RpZ2lDZXJ0VHJ1c3Rl # ZFJvb3RHNC5jcmwwIAYDVR0gBBkwFzAIBgZngQwBBAIwCwYJYIZIAYb9bAcBMA0G # CSqGSIb3DQEBCwUAA4ICAQAXzvsWgBz+Bz0RdnEwvb4LyLU0pn/N0IfFiBowf0/D # m1wGc/Do7oVMY2mhXZXjDNJQa8j00DNqhCT3t+s8G0iP5kvN2n7Jd2E4/iEIUBO4 # 1P5F448rSYJ59Ib61eoalhnd6ywFLerycvZTAz40y8S4F3/a+Z1jEMK/DMm/axFS # goR8n6c3nuZB9BfBwAQYK9FHaoq2e26MHvVY9gCDA/JYsq7pGdogP8HRtrYfctSL # ANEBfHU16r3J05qX3kId+ZOczgj5kjatVB+NdADVZKON/gnZruMvNYY2o1f4MXRJ # DMdTSlOLh0HCn2cQLwQCqjFbqrXuvTPSegOOzr4EWj7PtspIHBldNE2K9i697cva # iIo2p61Ed2p8xMJb82Yosn0z4y25xUbI7GIN/TpVfHIqQ6Ku/qjTY6hc3hsXMrS+ # U0yy+GWqAXam4ToWd2UQ1KYT70kZjE4YtL8Pbzg0c1ugMZyZZd/BdHLiRu7hAWE6 # bTEm4XYRkA6Tl4KSFLFk43esaUeqGkH/wyW4N7OigizwJWeukcyIPbAvjSabnf7+ # Pu0VrFgoiovRDiyx3zEdmcif/sYQsfch28bZeUz2rtY/9TCA6TD8dC3JE3rYkrhL # ULy7Dc90G6e8BlqmyIjlgp2+VqsS9/wQD7yFylIz0scmbKvFoW2jNrbM1pD2T7m3 # XDCCBY0wggR1oAMCAQICEA6bGI750C3n79tQ4ghAGFowDQYJKoZIhvcNAQEMBQAw # ZTELMAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZMBcGA1UECxMQ # d3d3LmRpZ2ljZXJ0LmNvbTEkMCIGA1UEAxMbRGlnaUNlcnQgQXNzdXJlZCBJRCBS # b290IENBMB4XDTIyMDgwMTAwMDAwMFoXDTMxMTEwOTIzNTk1OVowYjELMAkGA1UE # BhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZMBcGA1UECxMQd3d3LmRpZ2lj # ZXJ0LmNvbTEhMB8GA1UEAxMYRGlnaUNlcnQgVHJ1c3RlZCBSb290IEc0MIICIjAN # BgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAv+aQc2jeu+RdSjwwIjBpM+zCpyUu # ySE98orYWcLhKac9WKt2ms2uexuEDcQwH/MbpDgW61bGl20dq7J58soR0uRf1gU8 # Ug9SH8aeFaV+vp+pVxZZVXKvaJNwwrK6dZlqczKU0RBEEC7fgvMHhOZ0O21x4i0M # G+4g1ckgHWMpLc7sXk7Ik/ghYZs06wXGXuxbGrzryc/NrDRAX7F6Zu53yEioZldX # n1RYjgwrt0+nMNlW7sp7XeOtyU9e5TXnMcvak17cjo+A2raRmECQecN4x7axxLVq # GDgDEI3Y1DekLgV9iPWCPhCRcKtVgkEy19sEcypukQF8IUzUvK4bA3VdeGbZOjFE # mjNAvwjXWkmkwuapoGfdpCe8oU85tRFYF/ckXEaPZPfBaYh2mHY9WV1CdoeJl2l6 # SPDgohIbZpp0yt5LHucOY67m1O+SkjqePdwA5EUlibaaRBkrfsCUtNJhbesz2cXf # SwQAzH0clcOP9yGyshG3u3/y1YxwLEFgqrFjGESVGnZifvaAsPvoZKYz0YkH4b23 # 5kOkGLimdwHhD5QMIR2yVCkliWzlDlJRR3S+Jqy2QXXeeqxfjT/JvNNBERJb5RBQ # 6zHFynIWIgnffEx1P2PsIV/EIFFrb7GrhotPwtZFX50g/KEexcCPorF+CiaZ9eRp # L5gdLfXZqbId5RsCAwEAAaOCATowggE2MA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0O # BBYEFOzX44LScV1kTN8uZz/nupiuHA9PMB8GA1UdIwQYMBaAFEXroq/0ksuCMS1R # i6enIZ3zbcgPMA4GA1UdDwEB/wQEAwIBhjB5BggrBgEFBQcBAQRtMGswJAYIKwYB # BQUHMAGGGGh0dHA6Ly9vY3NwLmRpZ2ljZXJ0LmNvbTBDBggrBgEFBQcwAoY3aHR0 # cDovL2NhY2VydHMuZGlnaWNlcnQuY29tL0RpZ2lDZXJ0QXNzdXJlZElEUm9vdENB # LmNydDBFBgNVHR8EPjA8MDqgOKA2hjRodHRwOi8vY3JsMy5kaWdpY2VydC5jb20v # RGlnaUNlcnRBc3N1cmVkSURSb290Q0EuY3JsMBEGA1UdIAQKMAgwBgYEVR0gADAN # BgkqhkiG9w0BAQwFAAOCAQEAcKC/Q1xV5zhfoKN0Gz22Ftf3v1cHvZqsoYcs7IVe # qRq7IviHGmlUIu2kiHdtvRoU9BNKei8ttzjv9P+Aufih9/Jy3iS8UgPITtAq3vot # Vs/59PesMHqai7Je1M/RQ0SbQyHrlnKhSLSZy51PpwYDE3cnRNTnf+hZqPC/Lwum # 6fI0POz3A8eHqNJMQBk1RmppVLC4oVaO7KTVPeix3P0c2PR3WlxUjG/voVA9/HYJ # aISfb8rbII01YBwCA8sgsKxYoA5AY8WYIsGyWfVVa88nq2x2zm8jLfR+cWojayL/ # ErhULSd+2DrZ8LaHlv1b0VysGMNNn3O3AamfV6peKOK5lDGCA4wwggOIAgEBMH0w # aTELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDkRpZ2lDZXJ0LCBJbmMuMUEwPwYDVQQD # EzhEaWdpQ2VydCBUcnVzdGVkIEc0IFRpbWVTdGFtcGluZyBSU0E0MDk2IFNIQTI1 # NiAyMDI1IENBMQIQDCBDSfnQ91n7mC3kCBuIezANBglghkgBZQMEAgIFAKCB4TAa # BgkqhkiG9w0BCQMxDQYLKoZIhvcNAQkQAQQwHAYJKoZIhvcNAQkFMQ8XDTI2MDEz # MDEwNDQ0M1owKwYLKoZIhvcNAQkQAgwxHDAaMBgwFgQUcrz9oBB/STSwBxxhD+bX # llAAmHcwNwYLKoZIhvcNAQkQAi8xKDAmMCQwIgQgMvPjsb2i17JtTx0bjN29j4uE # dqF4ntYSzTyqep7/NcIwPwYJKoZIhvcNAQkEMTIEMDZEV8OIIJcfom2P+pHFuH4J # q/haBajvFasTiMhN7fzr6PtnIILEfHwWXPPcjp/02TANBgkqhkiG9w0BAQEFAASC # AgBRFs+zixLs3jP6urd9jZtXIIKiT9XzwIW6ZtRiWFoux9R8cZ78EfOW+2oEnuWH # ijLfUbtki1i9Tyrsd8V4N8FhmuMhlAy/U49aATjBRVwIFhnVC+u4RsVRbzr+u2u8 # WAArApdpNP8HnG3/f4PyPWzQHeuF8N7GoJt0/HSnitPzLDnC+ukEBs53lb/fhXVs # TCO83z0LwRCN2ChMSDIy+1RzZE0tBSkKV21EA6PJ4MB5szdlyGr9KgQtaEvhWDT4 # s6xhsipSfYRQ98yToQHZ16hvCIicojqao7wf4fDweJZRwocvr91/aT+mNusW9Jeo # NNfdYx8eLjtsxIis+hGfrXvFY/Cyhc+wSeqhfJ4wZzb52KJkAI+eI6WY9RQSG+wT # TgdrynOA1vWeOX0G7Df6kKAcOcyMr0jNJLPPzyLtcM6bPQIxXMZ4j765FCiK+z1e # wf/TuWPW/6I/F1+nPXUlnRJEYAUCkWizEQXs6gv6dYBu+DdCEoEQURaSegS3vmc1 # 1Se/GXdbn+85bg9YzsxEP2t4p/3EjVdpLMdlewNWLtwIPqwICJ5dO3AMr68YtSw0 # +VbAwtqwgbfuZrLMMoDMfFGtdNpuFnC2Dkh1gZokTd0MeZO5h9tVpqQsX3z1E1YD # 6ZwKueTyf5rGfukNitxNlH8rVwN0kZ/Nlypixl2Ax7jU/w== # SIG # End signature block |