Utilities/DLPValidationUtility.ps1
using module "..\CAMP.psm1" $ExchangeString = "Exchange" $SharePointString = "SharePoint" $OneDriveString = "OneDrive" $TeamsString = "Teams" $DevicesString = "Devices" Function Get-DLPPolicyValidation { Param ( $SensitiveTypes, $Config, $LogFile, $Name ) $ConfigObjectList = @() try { $SensitiveTypesWorkloadMapping = @() foreach ($SIT in $SensitiveTypes.keys) { $SensitiveTypesWorkloadMapping += New-Object -TypeName PSObject @{ Name = $SIT $ExchangeString = $false $SharePointString = $false $OneDriveString = $false $TeamsString = $false $DevicesString = $false } } #Getting Custom SIT if($($Config["GetDLPCustomSIT"]) -ne "Error") { $CustomSIT = $($Config["GetDLPCustomSIT"]).Name $CustomSITHashTable = @{} foreach($SIT in $CustomSIT) { $CustomSITHashTable[$SIT] = $null } } ForEach ($CompliancePolicy in $Config["GetDlpCompliancePolicy"]) { $PolicySensitiveType = New-Object System.Collections.Generic.HashSet[String] $PolicySensitiveType = Get-PolicySensitiveType -Config $Config -CompliancePolicy $CompliancePolicy -SensitiveTypes $SensitiveTypes if($($Config["GetDLPCustomSIT"]) -ne "Error") { $CustomSensitiveType = Get-PolicySensitiveType -Config $Config -CompliancePolicy $CompliancePolicy -SensitiveTypes $CustomSITHashTable $CustomSensitiveTypeText = $null foreach ($SIT in $CustomSensitiveType) { if ($null -ne $CustomSensitiveTypeText) { $CustomSensitiveTypeText += ", $SIT" } else { $CustomSensitiveTypeText += "$SIT" } } } if (($CompliancePolicy.Mode -ieq "enable") ) { $WorkloadsStatus = Get-AllLocationenabled -CompliancePolicy $CompliancePolicy $EnabledWorkload = $null $DisabledWorkload = "" $PolicySensitiveTypeText = $null foreach ($Workload in ($WorkloadsStatus.Keys | Sort-Object -CaseSensitive)) { if ($WorkloadsStatus[$Workload] -eq $true) { if ( $null -ne $EnabledWorkload) { $EnabledWorkload += ", $($Workload)" } else { $EnabledWorkload += "$($Workload)" } foreach ($SIT in $PolicySensitiveType) { if ($SITToChange = $SensitiveTypesWorkloadMapping | Where-Object { $_.Name -eq $SIT }) { $SITToChange.$($Workload) = $true } } } else { $DisabledWorkload += "$($Workload) " } } foreach ($SIT in $PolicySensitiveType) { if ($null -ne $PolicySensitiveTypeText) { $PolicySensitiveTypeText += ", $SIT" } else { $PolicySensitiveTypeText += "$SIT" } } If ($PolicySensitiveType.Count -ne 0 ) { $ConfigObject = [CAMPCheckConfig]::new() $Workload = $CompliancePolicy.Workload $ConfigObject.Object = "$($CompliancePolicy.Name)" if($null -eq $CustomSensitiveTypeText) { $ConfigObject.ConfigItem = "$PolicySensitiveTypeText" } else { $ConfigObject.ConfigItem = "$PolicySensitiveTypeText<br><strong>Custom SIT</strong> : $CustomSensitiveTypeText" } $ConfigData = "" $ConfigObjectResult = @{} $ConfigObjectResult = Set-ExchangeNotAllLocationEnabledConfigObject -ConfigObjectResult $ConfigObjectResult -CompliancePolicy $CompliancePolicy $ConfigObjectResult = Set-SharePointNotAllLocationEnabledConfigObject -ConfigObjectResult $ConfigObjectResult -CompliancePolicy $CompliancePolicy $ConfigObjectResult = Set-OneDriveNotAllLocationEnabledConfigObject -ConfigObjectResult $ConfigObjectResult -CompliancePolicy $CompliancePolicy $ConfigObjectResult = Set-TeamsNotAllLocationEnabledConfigObject -ConfigObjectResult $ConfigObjectResult -CompliancePolicy $CompliancePolicy $ConfigObjectResult = Set-DevicesNotAllLocationEnabledConfigObject -ConfigObjectResult $ConfigObjectResult -CompliancePolicy $CompliancePolicy $ConfigData = "<strong>Enabled Workloads </strong>: $($EnabledWorkload)<BR/>" foreach ($ConfigResult in $ConfigObjectResult.keys) { $ConfigData += "<strong>$ConfigResult </strong>: $($ConfigObjectResult[$ConfigResult])<BR/>" } $NotInOrganizationAccessScope = $Config["GetDlpComplianceRule"] | Where-Object {$_.AccessScope -eq "NotInOrganization" -and $_.ParentPolicyName -eq "$($CompliancePolicy.Name)"} if($null -ne $NotInOrganizationAccessScope) { $ConfigData += "<strong>Access Scope</strong>: For users outside organization<BR/>" }else{ $ConfigData += "<strong>Access Scope</strong>: For users inside organization<BR/>" } $ConfigObject.ConfigData = "$ConfigData" $ConfigObject.SetResult([CAMPConfigLevel]::Informational, "Pass") $ConfigObjectList += $ConfigObject } } else { If ($PolicySensitiveType.Count -ne 0 ) { $ConfigObject = [CAMPCheckConfig]::new() $Workload = $CompliancePolicy.Workload $ConfigObject.Object = "$($CompliancePolicy.Name)" $PolicySensitiveTypeText = $null foreach ($SIT in $PolicySensitiveType) { if ($null -ne $PolicySensitiveTypeText) { $PolicySensitiveTypeText += ", $SIT" } else { $PolicySensitiveTypeText += "$SIT" } } if($null -eq $CustomSensitiveTypeText) { $ConfigObject.ConfigItem = "$PolicySensitiveTypeText" } else { $ConfigObject.ConfigItem = "$PolicySensitiveTypeText<br><strong>Custom SIT</strong> : $CustomSensitiveTypeText" } $Mode = $($CompliancePolicy.Mode) if ( $Mode -eq "TestWithoutNotifications") { $Mode = "test without notifications" } elseif ($Mode -eq "Disable") { $Mode = "disabled" } elseif ( $Mode -eq "TestWithNotifications") { $Mode = "test with notifications" } $ConfigObject.ConfigData = "<B>Policy is in $Mode state.<B>" $ConfigObject.SetResult([CAMPConfigLevel]::Informational, "Pass") $ConfigObjectList += $ConfigObject } } } $ConfigObjectList = Get-SensitiveTypesNotEnabled -SensitiveTypesWorkloadMapping $SensitiveTypesWorkloadMapping -ConfigObjectList $ConfigObjectList -LogFile $LogFile } catch { Write-Host "Error:$(Get-Date) There was an issue while running CAMP. Please try running the tool again after some time." -ForegroundColor:Red $ErrorMessage = $_.ToString() $StackTraceInfo = $_.ScriptStackTrace Write-Log -IsError -ErrorMessage $ErrorMessage -StackTraceInfo $StackTraceInfo -LogFile $LogFile -ErrorAction:SilentlyContinue } Return $ConfigObjectList } Function Get-NoPolicyRemediationAction { [CmdletBinding()] Param ( $Name, $PendingSensitiveTypes ) $RemediationActionScript = "" $PendingSensitiveTypesList = $PendingSensitiveTypes.split(",") $LowCountSenstiveinfodetails = "" $HighCountSenstiveinfodetails = "" foreach ($PendingSensitiveType in $PendingSensitiveTypesList) { $PendingSensitiveTypetrim = $PendingSensitiveType.trim() if ( $LowCountSenstiveinfodetails -eq "") { $LowCountSenstiveinfodetails += "@{Name =" + [char]34 $HighCountSenstiveinfodetails += "@{Name =" + [char]34 } else { $LowCountSenstiveinfodetails += ",@{Name =" + [char]34 $HighCountSenstiveinfodetails += ",@{Name =" + [char]34 } $LowCountSenstiveinfodetails += $PendingSensitiveTypetrim + [char]34 $LowCountSenstiveinfodetails += ";minCount = ""1""" $LowCountSenstiveinfodetails += ";maxCount = ""5""}" $HighCountSenstiveinfodetails += $PendingSensitiveTypetrim + [char]34 $HighCountSenstiveinfodetails += ";minCount = ""6""}" } $NewPolicyTemplateData = Get-Content "$PSScriptRoot\..\Templates\NewDLPPolicyTemplate.txt" if ($null -eq $NewPolicyTemplateData -or $NewPolicyTemplateData -eq "") { Write-Host "$(Get-Date) Template file does not exist/is corrupt in $PSScriptRoot\..\Templates\NewDLPPolicyTemplate.txt. Remediation wont be generated" -ForegroundColor Orange } else { $NewPolicyTemplateData = $NewPolicyTemplateData.Replace("<NewPolicyName>", "$Name") $NewPolicyTemplateData = $NewPolicyTemplateData.Replace("<HighSensitiveInfoDetails>", "$HighCountSenstiveinfodetails") $NewPolicyTemplateData = $NewPolicyTemplateData.Replace("<LowSensitiveInfoDetails>", "$LowCountSenstiveinfodetails") $LowRuleName = "Low Volume $Name" if ($LowRuleName.length -gt 60) { $LowRuleName = $LowRuleName.substring(0, 60) } $HighRuleName = "High Volume $Name" if ($HighRuleName.length -gt 60) { $HighRuleName = $HighRuleName.substring(0, 60) } $NewPolicyTemplateData = $NewPolicyTemplateData.Replace("<HighVolumeRuleName>", "$HighRuleName") $NewPolicyTemplateData = $NewPolicyTemplateData.Replace("<LowVolumeRuleName>", "$LowRuleName") $RemediationActionScript += $NewPolicyTemplateData Write-Host "$(Get-Date) Generating Remediation Action for $Name" -ForegroundColor Yellow } Return $RemediationActionScript } Function Get-PolicySensitiveType { Param ( $Config, $CompliancePolicy, $SensitiveTypes ) $PolicySensitiveTypes = New-Object System.Collections.Generic.HashSet[String] foreach ($ComplianceRule in $Config["GetDlpComplianceRule"]) { if ($ComplianceRule.Mode -ieq "enforce" -and $CompliancePolicy.name -eq $($ComplianceRule.ParentPolicyName) ) { $SensitiveInformationContent = $ComplianceRule.ContentContainsSensitiveInformation foreach ($SensitiveType in $($SensitiveTypes.keys)) { if ($SensitiveInformationContent.Values -contains $SensitiveType) { if (!$PolicySensitiveTypes.Contains($SensitiveType)) { $PolicySensitiveTypes.Add("$SensitiveType") | Out-Null } } if ($($SensitiveInformationContent.keys) -contains "groups") { foreach ($SensitiveInformationGroupList in $SensitiveInformationContent) { $SensitiveInformationGroups = $SensitiveInformationGroupList["groups"] foreach ($SensitiveInformationGroupDefined in $SensitiveInformationGroups) { $SensitiveInformationGroupDefinedValues = $SensitiveInformationGroupDefined.Values foreach ($SensitiveInformationGroupValue in $SensitiveInformationGroupDefinedValues) { foreach ($SensitiveInformationGroupVal in $SensitiveInformationGroupValue) { if ($SensitiveInformationGroupVal.Values -contains $SensitiveType ) { if (!$PolicySensitiveTypes.Contains($SensitiveType)) { $PolicySensitiveTypes.Add("$SensitiveType") | Out-Null } } } } } } } } } } Return $PolicySensitiveTypes } Function Get-SensitiveTypesNotEnabled { Param ( $SensitiveTypesWorkloadMapping, $LogFile, $ConfigObjectList ) $PendingSensitiveType = $null $PartialCoveredSIT = $null $PartialCoveredWorkload = $null foreach ($SensitiveTypes in $SensitiveTypesWorkloadMapping) { if (($SensitiveTypes.$ExchangeString -eq $false ) -and ($SensitiveTypes.$SharePointString -eq $false ) -and ($SensitiveTypes.$TeamsString -eq $false ) -and ($SensitiveTypes.$OneDriveString -eq $false ) -and ($SensitiveTypes.$DevicesString -eq $false ) ) { $PendingSensitiveType = Get-PartialSIT -PartialCoveredSIT $PendingSensitiveType -SensitiveTypesName $($SensitiveTypes.Name) } else { if ($SensitiveTypes.$ExchangeString -eq $false ) { $PartialCoveredSIT = Get-PartialSIT -PartialCoveredSIT $PartialCoveredSIT -SensitiveTypesName $($SensitiveTypes.Name) $PartialCoveredWorkload = Get-PartialSITWorkLoad -PartialCoveredWorkload $PartialCoveredWorkload -WorkloadName $ExchangeString } if ($SensitiveTypes.$SharePointString -eq $false ) { $PartialCoveredSIT = Get-PartialSIT -PartialCoveredSIT $PartialCoveredSIT -SensitiveTypesName $($SensitiveTypes.Name) $PartialCoveredWorkload = Get-PartialSITWorkLoad -PartialCoveredWorkload $PartialCoveredWorkload -WorkloadName $SharePointString } if ($SensitiveTypes.$OneDriveString -eq $false ) { $PartialCoveredSIT = Get-PartialSIT -PartialCoveredSIT $PartialCoveredSIT -SensitiveTypesName $($SensitiveTypes.Name) $PartialCoveredWorkload = Get-PartialSITWorkLoad -PartialCoveredWorkload $PartialCoveredWorkload -WorkloadName $OneDriveString } if ($SensitiveTypes.$TeamsString -eq $false ) { $PartialCoveredSIT = Get-PartialSIT -PartialCoveredSIT $PartialCoveredSIT -SensitiveTypesName $($SensitiveTypes.Name) $PartialCoveredWorkload = Get-PartialSITWorkLoad -PartialCoveredWorkload $PartialCoveredWorkload -WorkloadName $TeamsString } if ($SensitiveTypes.$DevicesString -eq $false ) { $PartialCoveredSIT = Get-PartialSIT -PartialCoveredSIT $PartialCoveredSIT -SensitiveTypesName $($SensitiveTypes.Name) $PartialCoveredWorkload = Get-PartialSITWorkLoad -PartialCoveredWorkload $PartialCoveredWorkload -WorkloadName $DevicesString } } } if ($null -ne $PartialCoveredSIT) { $ConfigObject = [CAMPCheckConfig]::new() $ConfigObject.Object = "<B>Policy defined but not protected on 1 or more workloads<B>" $ConfigObject.ConfigItem = "$PartialCoveredSIT" $ConfigObject.ConfigData = "<b>Affected Workloads</B> : $PartialCoveredWorkload" $ConfigObject.SetResult([CAMPConfigLevel]::Ok, "Fail") $ConfigObjectList += $ConfigObject } if ($null -ne $PendingSensitiveType) { $ConfigObject = [CAMPCheckConfig]::new() $ConfigObject.Object = "<B>No active policy defined<B>" $ConfigObject.ConfigItem = "$PendingSensitiveType" $ConfigObject.ConfigData = "<b>Affected Workloads</B> : $ExchangeString, $SharePointString, $TeamsString, $OneDriveString, $DevicesString" $ConfigObject.InfoText ="It is recommended that you set up DLP policies that block access for users external to your organization for all Sensitive Information Types on all workloads." try { $ConfigObject.RemediationAction = Get-NoPolicyRemediationAction -Name $Name -PendingSensitiveTypes $PendingSensitiveType -ErrorAction:SilentlyContinue } catch { Write-Host "Warning:$(Get-Date) There was an issue in generating remediation script. Please review the script closely before running the same." -ForegroundColor:Yellow $ErrorMessage = $_.ToString() $StackTraceInfo = $_.ScriptStackTrace Write-Log -IsError -ErrorMessage $ErrorMessage -StackTraceInfo $StackTraceInfo -LogFile $LogFile -ErrorAction:SilentlyContinue } $ConfigObject.SetResult([CAMPConfigLevel]::Ok, "Fail") $ConfigObjectList += $ConfigObject } Return $ConfigObjectList } function Get-PartialSIT { Param ( $PartialCoveredSIT, $SensitiveTypesName ) if ((@($PartialCoveredSIT) -like "*$SensitiveTypesName*").Count -le 0) { if ($null -eq $PartialCoveredSIT) { $PartialCoveredSIT += "$SensitiveTypesName" } else { $PartialCoveredSIT += ", $SensitiveTypesName" } } return $PartialCoveredSIT } function Get-PartialSITWorkLoad { Param ( $PartialCoveredWorkload, $WorkloadName ) if ((@($PartialCoveredWorkload) -like "*$WorkloadName*").Count -le 0) { if ($null -eq $PartialCoveredWorkload) { $PartialCoveredWorkload += $WorkloadName } else { $PartialCoveredWorkload += ", $WorkloadName" } } return $PartialCoveredWorkload } Function Get-AllLocationenabled { Param ( $CompliancePolicy ) $ExchangeLocation = $CompliancePolicy.ExchangeLocation $SharePointLocation = $CompliancePolicy.SharePointLocation $OneDriveLocation = $CompliancePolicy.OneDriveLocation $TeamsLocation = $CompliancePolicy.TeamsLocation $EndpointDlpLocation = $CompliancePolicy.EndpointDlpLocation $WorkloadsStatus = @{} $WorkloadsStatus[$ExchangeString] = $false $WorkloadsStatus[$SharePointString] = $false $WorkloadsStatus[$OneDriveString] = $false $WorkloadsStatus[$TeamsString] = $false $WorkloadsStatus[$DevicesString] = $false if ((@($ExchangeLocation) -like 'All').Count -gt 0) { $WorkloadsStatus[$ExchangeString] = $true } if ((@($SharePointLocation) -like 'All').Count -gt 0) { $WorkloadsStatus[$SharePointString] = $true } if ((@($OneDriveLocation) -like 'All').Count -gt 0) { $WorkloadsStatus[$OneDriveString] = $true } if ((@($TeamsLocation) -like 'All').Count -gt 0) { $WorkloadsStatus[$TeamsString] = $true } if ((@($EndpointDlpLocation) -like 'All').Count -gt 0) { $WorkloadsStatus[$DevicesString] = $true } Return $WorkloadsStatus } Function Set-ExchangeNotAllLocationEnabledConfigObject { Param ( $ConfigObjectResult, $CompliancePolicy ) $ExchangeLocation = $CompliancePolicy.ExchangeLocation $ExchangeSenderException = $CompliancePolicy.ExchangeSenderException $ExchangeSenderMemberOf = $CompliancePolicy.ExchangeSenderMemberOf $ExchangeSenderMemberOfException = $CompliancePolicy.ExchangeSenderMemberOfException if (((@($ExchangeLocation) -like 'All').Count -lt 1)) { if (@($ExchangeLocation).count -ne 0) { $ConfigObjectResult["Included Exchange Groups"] += "$ExchangeLocation " } } if ($ExchangeSenderMemberOf.count -ne 0) { if ($ConfigObjectResult.contains("Included Exchange Groups")) { $ConfigObjectResult["Included Exchange Groups"] += ", $ExchangeSenderMemberOf " } else { $ConfigObjectResult["Included Exchange Groups"] = "$ExchangeSenderMemberOf " } } if (($ExchangeSenderMemberOfException.count -ne 0) -or ($ExchangeSenderException.count -ne 0) ) { $ConfigObjectResult["Excluded Exchange Groups"] += "$ExchangeSenderMemberOfException $ExchangeSenderException " } Return $ConfigObjectResult } function Set-SharePointNotAllLocationEnabledConfigObject { Param ( $ConfigObjectResult, $CompliancePolicy ) $SharePointLocation = $CompliancePolicy.SharePointLocation $SharePointLocationException = $CompliancePolicy.SharePointLocationException $SharePointOnPremisesLocationException = $CompliancePolicy.SharePointOnPremisesLocationException if (((@($SharePointLocation) -like 'All').Count -lt 1)) { if (@($SharePointLocation).count -ne 0) { $ConfigObjectResult["Included SP Sites"] += "$SharePointLocation " } } if (($SharePointLocationException.count -ne 0) -or ($SharePointOnPremisesLocationException.count -ne 0)) { $ConfigObjectResult["Excluded SP Sites"] += "$SharePointLocationException $SharePointOnPremisesLocationException " } Return $ConfigObjectResult } function Set-TeamsNotAllLocationEnabledConfigObject { Param ( $ConfigObjectResult, $CompliancePolicy ) $TeamsLocation = $CompliancePolicy.TeamsLocation $TeamsLocationException = $CompliancePolicy.TeamsLocationException if (((@($TeamsLocation) -like 'All').Count -lt 1)) { if (@($TeamsLocation).count -ne 0) { $ConfigObjectResult["Included Teams Account"] += "$TeamsLocation" } } if (($TeamsLocationException.count -ne 0)) { $ConfigObjectResult["Excluded Teams Account"] += "$TeamsLocationException" } Return $ConfigObjectResult } function Set-OneDriveNotAllLocationEnabledConfigObject { Param ( $ConfigObject, $PolicySensitiveType, $CompliancePolicy ) $OneDriveLocation = $CompliancePolicy.OneDriveLocation $OneDriveLocationException = $CompliancePolicy.OneDriveLocationException $ExceptIfOneDriveSharedByMemberOf = $CompliancePolicy.ExceptIfOneDriveSharedByMemberOf if (((@($OneDriveLocation) -like 'All').Count -lt 1)) { if (@($OneDriveLocation).count -ne 0) { $ConfigObjectResult["Included OneDrive Account"] += "$OneDriveLocation" } } if (($OneDriveLocationException.count -ne 0) -or ($ExceptIfOneDriveSharedByMemberOf.count -ne 0)) { $ConfigObjectResult["Excluded OneDrive Account"] += "$OneDriveLocationException $ExceptIfOneDriveSharedByMemberOf" } Return $ConfigObjectResult } function Set-DevicesNotAllLocationEnabledConfigObject { Param ( $ConfigObject, $PolicySensitiveType, $CompliancePolicy ) $EndpointDlpLocation = $CompliancePolicy.EndpointDlpLocation $EndpointDlpLocationException = $CompliancePolicy.EndpointDlpLocationException if (((@($EndpointDlpLocation) -like 'All').Count -lt 1)) { if (@($EndpointDlpLocation).count -ne 0) { $ConfigObjectResult["Included Devices User/Groups"] += "$EndpointDlpLocation" } } if (($EndpointDlpLocationException.count -ne 0)) { $ConfigObjectResult["Excluded Devices User/Groups"] += "$EndpointDlpLocationException" } Return $ConfigObjectResult } # SIG # Begin signature block # MIIlxwYJKoZIhvcNAQcCoIIluDCCJbQCAQExDzANBglghkgBZQMEAgEFADB5Bgor # BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG # KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCC1UJ0X7GbeTG63 # 8z5lcowa1rZlYPf8mlQaEpvPdKW5RKCCC6EwggUGMIID7qADAgECAhMzAAAE4xrK # 0/aegtm7AAEAAATjMA0GCSqGSIb3DQEBCwUAMHkxCzAJBgNVBAYTAlVTMRMwEQYD # VQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNy # b3NvZnQgQ29ycG9yYXRpb24xIzAhBgNVBAMTGk1pY3Jvc29mdCBUZXN0aW5nIFBD # QSAyMDEwMB4XDTIxMDkwMjE5MjYyOFoXDTIyMDkwMTE5MjYyOFowfDELMAkGA1UE # BhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAc # BgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEmMCQGA1UEAxMdQ29kZSBTaWdu # IFRlc3QgKERPIE5PVCBUUlVTVCkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK # AoIBAQDokaNBqvPFgH8yAnEicnWyLoQ58nf7j+B20b5uqsDq9EXWyt87+Wc9CCFh # +9gxWx6wx+iRsO/yT8SZhxi/w00uxM5jDWnbAbSIMB2VrNnLGNOxAQj674zPskBs # ecseXAMHA/+o5ujZOse4EorLmTfJ5f/Zzun8KVVwlSd1CVlj0hgk28xmTdLV7ZWw # 0wV9e/0p/XOHSRUNWw8gFfIfzli3oVV4H/DzT2o1jD4HIt3QIX1kRRXVqleASUgD # Z6/6JthrKti4xfyMdSUGyXuxEoe6zZ4EOXltaHw7hqZzH2Ufl3UxB6HmdxvG9BI4 # 3LVKq3pFO+Nj3NdMVkyptnjDJnGpAgMBAAGjggGCMIIBfjATBgNVHSUEDDAKBggr # BgEFBQcDAzAdBgNVHQ4EFgQUPMsdBtvwLsgDf0B50WrJSL+NYrEwUAYDVR0RBEkw # R6RFMEMxKTAnBgNVBAsTIE1pY3Jvc29mdCBPcGVyYXRpb25zIFB1ZXJ0byBSaWNv # MRYwFAYDVQQFEw0yMzAwNzIrNDY3NjA2MB8GA1UdIwQYMBaAFL9loqtvdaNORZZX # Bc85h/TAFRwcMFwGA1UdHwRVMFMwUaBPoE2GS2h0dHA6Ly93d3cubWljcm9zb2Z0 # LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRlc3RpbmclMjBQQ0ElMjAyMDEw # KDEpLmNybDBpBggrBgEFBQcBAQRdMFswWQYIKwYBBQUHMAKGTWh0dHA6Ly93d3cu # bWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVGVzdGluZyUy # MFBDQSUyMDIwMTAoMSkuY3J0MAwGA1UdEwEB/wQCMAAwDQYJKoZIhvcNAQELBQAD # ggEBAAylFduuUCCNS+ejRtNeqm7geSoNzl+E0wbGZi4W9+rqo972KaS338FB5Y5G # 8PNqaN3RNqNaHra/zI97JaLYjrZ+iCmKMzROdVS5cR/WpAla36J/tpuVSvNwwvW1 # 5KHRv6PEzGQ7BQYU55cMTkUwNtRVbARMdjcFa3pbuIkioVsoFNVOZ4e8aOSPV+Vz # PVmOU2xltmM/8IOgTSfFTCJhqY7d/vjqajXAXg2olbbJ2vX051uUuFfIyfo/5xJS # uyWOUCZ1opzXHy5EwrkmdZs6orQtMy1akT6UYjl4x5VZsqiszDshDNjVgRUdR97M # d7NxQZEScdZfoTf0byI8Cwtp8JIwggaTMIIEe6ADAgECAhMzAAAALTV6RojJB3HY # AAAAAAAtMA0GCSqGSIb3DQEBCwUAMIGQMQswCQYDVQQGEwJVUzETMBEGA1UECBMK # V2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0 # IENvcnBvcmF0aW9uMTowOAYDVQQDEzFNaWNyb3NvZnQgVGVzdGluZyBSb290IENl # cnRpZmljYXRlIEF1dGhvcml0eSAyMDEwMB4XDTIwMTIxMDIwNDMyMFoXDTM1MDYx # NzIxMDQxMVoweTELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAO # BgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEj # MCEGA1UEAxMaTWljcm9zb2Z0IFRlc3RpbmcgUENBIDIwMTAwggEiMA0GCSqGSIb3 # DQEBAQUAA4IBDwAwggEKAoIBAQC/PGCBq77s/9cXY/KmQtETYpywF866Rhp7Ii5V # c5pUucbU0cqY/ndHDY6d8F7M+FTv8s8q1GLxqTQKBNfFBYbyEPVN05YIZoXbAn0Y # 3OJ6I6eaKV2ueRjPDGPwGv+BqalDP6kLuVHxs0g6/EQuXxHFVjr/yg7NiAjB/cfV # 9T7v6k4bcosjvUU3nh9wwafJuCBz7fNsPYshBc93Ev6h3AfpDVt4CWwyVRBH0DfI # x/f6c/5GNORWFqg3ZFPWNfvDgLaOtoaRoRDWwUr243rUEQqy3i6eEJfgga4SXYgB # XcykxChSnGDwCuaIr0vpV4rsow83Hin2XSHT19pdDslO241tAgMBAAGjggH6MIIB # 9jAOBgNVHQ8BAf8EBAMCAYYwEgYJKwYBBAGCNxUBBAUCAwEAATAjBgkrBgEEAYI3 # FQIEFgQU6p9fM7bQX56t6y2mwQK7QDjL57UwHQYDVR0OBBYEFL9loqtvdaNORZZX # Bc85h/TAFRwcMFQGA1UdIARNMEswSQYEVR0gADBBMD8GCCsGAQUFBwIBFjNodHRw # Oi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL0RvY3MvUmVwb3NpdG9yeS5odG0w # GQYJKwYBBAGCNxQCBAweCgBTAHUAYgBDAEEwDwYDVR0TAQH/BAUwAwEB/zAfBgNV # HSMEGDAWgBSjAQR+MIgz67kxnMrrhXZn/GW00TBZBgNVHR8EUjBQME6gTKBKhkho # dHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpL2NybC9wcm9kdWN0cy9NaWNUZXNS # b29DZXJBdXRfMjAxMC0wNi0xNy5jcmwwgY0GCCsGAQUFBwEBBIGAMH4wTQYIKwYB # BQUHMAKGQWh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2kvY2VydHMvTWljVGVz # Um9vQ2VyQXV0XzIwMTAtMDYtMTcuY3J0MC0GCCsGAQUFBzABhiFodHRwOi8vb25l # b2NzcC5taWNyb3NvZnQuY29tL29jc3AwDQYJKoZIhvcNAQELBQADggIBACe00IWy # nswPpCpTc9Vt2tcxAMj2/2PI9gERtRiS2ty0+a8m6PxKeb3BZ7CIA3llzzU1BViO # 4oMGlvW6fhJZUJvg8NU9nQnzu0bNh7104nfQRgZ6IhppK2QsuYs5gAzqgiciojBX # IiTZIT+raUa3w6/Bxl682Y+RViOTqfImLkR29LpyI9GZb1tFZFPilZTxtkhAv3fw # sTiUc5ACLGsBCJZ6zlLOnZTzkTSct1oOvnD8jbwn9nX7jNbU1qjWmtUI6quiyeg1 # R9V/WS+zB9bcVjaXU+IBinywbI7nsZrO1d0GgQ4FwMt519w+tr340t0QXfo2QTSD # 711uiQVjsrGFQnxakyIKY3jKP0soUu9Bty0Ywklj0TAcWJ+bamBqJpp8oXUbLP42 # u4nMQSCnKwyj9/0BUFD+oJ09BAYRandAMhp5/i2z1BPH5GYMoIEMxMUuAWaaFu1R # jQlaMuQqfuyjP8shwNSV7+nlOIUPhWF9mcBy9hAdd+6yWfKn7K6FbMBKcBA2c4g7 # p9zUkUjCQORwz6T9Oyl8BqPMeihIDBeSs5auNENXrAjRjMxUesTJDSFnk2chdsve # WtOQ4+N/c0G7WdpI0RrJJ25K0NsVWNXdNegQ0SdmK6AkphLCaHOhgczWeCKk3ms1 # 2omIrm6SnoTwsPOLeXn/tdy0lBjf5mAcMmiyMYIZfDCCGXgCAQEwgZAweTELMAkG # A1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQx # HjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEjMCEGA1UEAxMaTWljcm9z # b2Z0IFRlc3RpbmcgUENBIDIwMTACEzMAAATjGsrT9p6C2bsAAQAABOMwDQYJYIZI # AWUDBAIBBQCgga4wGQYJKoZIhvcNAQkDMQwGCisGAQQBgjcCAQQwHAYKKwYBBAGC # NwIBCzEOMAwGCisGAQQBgjcCARUwLwYJKoZIhvcNAQkEMSIEIDXZJnOyJensgmSq # MrRyPhgUOo/BmCVdkmhprmpLYmAKMEIGCisGAQQBgjcCAQwxNDAyoBSAEgBNAGkA # YwByAG8AcwBvAGYAdKEagBhodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20wDQYJKoZI # hvcNAQEBBQAEggEAcEOpporDHqOz9/ER94LBzYbR99pCmHxnZDBqK1UElA3cTmJ0 # e56qM06BxXkHojoxE6GNZxbY94b9agjTBABU2H6vCRHpw171RmlCTqAMVY0ys91/ # 95mTXdD1CRM1K/M1411hsD3abe9QL+PtFIxhqnV9Wsu6RxrgBwjpDmuZszIto5nQ # YDD0vgTShWuzf/WzSS2vMnKnbx1rXqR4M5SLpaAHQzxHVs4DTq47LLZ16btBs1xk # SJiZijrlFUxF/rJRkFuso3w+EYkw3fAg/Tv/byUJ2vrq0y0/J4Kmc15xDm17W8wn # ZRSnxrJ4iPEtCoZ/7fF42oaDorC++6eEdZx4qKGCFwswghcHBgorBgEEAYI3AwMB # MYIW9zCCFvMGCSqGSIb3DQEHAqCCFuQwghbgAgEDMQ8wDQYJYIZIAWUDBAIBBQAw # ggFUBgsqhkiG9w0BCRABBKCCAUMEggE/MIIBOwIBAQYKKwYBBAGEWQoDATAxMA0G # CWCGSAFlAwQCAQUABCCbvOd3cjE5djzw+WI6Stb6mTGAf7Vp/0jh7qgHYmxj1wIG # YoS4nYwoGBIyMDIyMDYxMDEwMDUwMS4xM1owBIACAfSggdSkgdEwgc4xCzAJBgNV # BAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4w # HAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xKTAnBgNVBAsTIE1pY3Jvc29m # dCBPcGVyYXRpb25zIFB1ZXJ0byBSaWNvMSYwJAYDVQQLEx1UaGFsZXMgVFNTIEVT # TjpEOURFLUUzOUEtNDNGRTElMCMGA1UEAxMcTWljcm9zb2Z0IFRpbWUtU3RhbXAg # U2VydmljZaCCEV8wggcQMIIE+KADAgECAhMzAAABrGa8hyJd3j17AAEAAAGsMA0G # CSqGSIb3DQEBCwUAMHwxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9u # MRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRp # b24xJjAkBgNVBAMTHU1pY3Jvc29mdCBUaW1lLVN0YW1wIFBDQSAyMDEwMB4XDTIy # MDMwMjE4NTEyOVoXDTIzMDUxMTE4NTEyOVowgc4xCzAJBgNVBAYTAlVTMRMwEQYD # VQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNy # b3NvZnQgQ29ycG9yYXRpb24xKTAnBgNVBAsTIE1pY3Jvc29mdCBPcGVyYXRpb25z # IFB1ZXJ0byBSaWNvMSYwJAYDVQQLEx1UaGFsZXMgVFNTIEVTTjpEOURFLUUzOUEt # NDNGRTElMCMGA1UEAxMcTWljcm9zb2Z0IFRpbWUtU3RhbXAgU2VydmljZTCCAiIw # DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMd4C1DFF2Lux3HMK8AElMdTF4iG # 9ROyKQWFehTXe+EX1QOrTBFnhMAKNHIQWoxkK1W62/oQQQmtIHo8sphMt1WpkLNv # Cm3La8sdVL3t/BAx7UWkmfvujJ3KDaSgt3clc5uNPUj7e32U4n/Ep9oOc+Pv/EHc # 7XGH1fGRvLRYzwoxP1xkKleusbIzT/aKn6WC2BggPzjHXin9KE7kriCuqA+JNhsk # kedTHJQIotblR+rZcsexTSmjO+Z7R0mfeHiU8DntvZvZ/9ad9XUhDwUJFKZ8ZZvx # nqnZXwFYkDKNagY8g06BF1vDulblAs6A4huP1e7ptKFppB1VZkLUAmIW1xxJGs3k # eidATWIVx22sGVyemaT29NftDp/jRsDw/ahwv1Nkv6WvykovK0kDPIY9TCW9cRbv # UeElk++CVM7cIqrl8QY3mgEQ8oi45VzEBXuY04Y1KijbGLYRFNUypXMRDApV+kcj # G8uST13mSCf2iMhWRRLz9/jyIwe7lmXz4zUyYckr+2Nm8GrSq5fVAPshIO8Ab/aO # o6/oe3G3Y+cil8iyRJLJNxbMYxiQJKZvbxlCIp+pGInaD1373M7KPPF/yXeT4hG0 # LqXKvelkgtlpzefPrmUVupjYTgeGfupUwFzymSk4JRNO1thRB0bDKDIyNMVqEuvV # 1UxdcricV0ojgeJHAgMBAAGjggE2MIIBMjAdBgNVHQ4EFgQUWBGfdwTLH0BnSjx8 # SVqYWsBAjk0wHwYDVR0jBBgwFoAUn6cVXQBeYl2D9OXSZacbUzUZ6XIwXwYDVR0f # BFgwVjBUoFKgUIZOaHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwv # TWljcm9zb2Z0JTIwVGltZS1TdGFtcCUyMFBDQSUyMDIwMTAoMSkuY3JsMGwGCCsG # AQUFBwEBBGAwXjBcBggrBgEFBQcwAoZQaHR0cDovL3d3dy5taWNyb3NvZnQuY29t # L3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUaW1lLVN0YW1wJTIwUENBJTIwMjAx # MCgxKS5jcnQwDAYDVR0TAQH/BAIwADATBgNVHSUEDDAKBggrBgEFBQcDCDANBgkq # hkiG9w0BAQsFAAOCAgEAedC1AlhVXHCldk8toIzAW9QyITcReyhUps1uD67zCC30 # 8fRzYFES/2vMX7o0ObJgzCxT1ni0vkcs8WG2MUIsk91RCPIeDzTQItIpj9ZTz9h0 # tufcKGm3ahknRs1hoV12jRFkcaqXJo1fsyuoKgD+FTT2lOvrEsNjJh5wEsi+PB/m # Vmh/Ja0Vu8jhUJc1hrBUQ5YisQ4N00snZwhOoCePXbdD6HGs1cmsXZbrkT8vNPYV # 8LnI4lxuJ/YaYS20qQr6Y9DIHFDNYxZbTlsQeXs/KjnhRNdFiCGoAcLHWweWeRsz # h2iUhMfY1/79d7somfjx6ZyJPZOr4fE0UT2l/rBaBTroPpDOvpaOsY6E/teLLMfy # nr6UOQeE4lRiw59siVGyAGqpTBTbdzAFLBFH40ubr7VEldmjiHa14EkZxYvcgzKx # Kqub4yrKafo/j9aUbwLrL2VMHWcpa18Jhv6zIjd01IGkUdj3UJ+JKQNAz5eyPyQS # ZPt9ws8bynodGlM5nYkHBy7rPvj45y+Zz7jrLgjgvZIixGszwqKyKJ47APHxrH8G # jCQusbvW9NF4LAYKoZZGj7PwmQA+XmwD5tfUQ0KuzMRFmMpOUztiTAgJjQf9TMuc # 3pYmpFWEr8ksYdwrjrdWYALCXA/IQXEdAisQwj5YzTsh4QxTUq+vRSxs93yB3nIw # ggdxMIIFWaADAgECAhMzAAAAFcXna54Cm0mZAAAAAAAVMA0GCSqGSIb3DQEBCwUA # MIGIMQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMH # UmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMTIwMAYDVQQD # EylNaWNyb3NvZnQgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgMjAxMDAeFw0y # MTA5MzAxODIyMjVaFw0zMDA5MzAxODMyMjVaMHwxCzAJBgNVBAYTAlVTMRMwEQYD # VQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNy # b3NvZnQgQ29ycG9yYXRpb24xJjAkBgNVBAMTHU1pY3Jvc29mdCBUaW1lLVN0YW1w # IFBDQSAyMDEwMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA5OGmTOe0 # ciELeaLL1yR5vQ7VgtP97pwHB9KpbE51yMo1V/YBf2xK4OK9uT4XYDP/XE/HZveV # U3Fa4n5KWv64NmeFRiMMtY0Tz3cywBAY6GB9alKDRLemjkZrBxTzxXb1hlDcwUTI # cVxRMTegCjhuje3XD9gmU3w5YQJ6xKr9cmmvHaus9ja+NSZk2pg7uhp7M62AW36M # EBydUv626GIl3GoPz130/o5Tz9bshVZN7928jaTjkY+yOSxRnOlwaQ3KNi1wjjHI # NSi947SHJMPgyY9+tVSP3PoFVZhtaDuaRr3tpK56KTesy+uDRedGbsoy1cCGMFxP # LOJiss254o2I5JasAUq7vnGpF1tnYN74kpEeHT39IM9zfUGaRnXNxF803RKJ1v2l # IH1+/NmeRd+2ci/bfV+AutuqfjbsNkz2K26oElHovwUDo9Fzpk03dJQcNIIP8BDy # t0cY7afomXw/TNuvXsLz1dhzPUNOwTM5TI4CvEJoLhDqhFFG4tG9ahhaYQFzymei # XtcodgLiMxhy16cg8ML6EgrXY28MyTZki1ugpoMhXV8wdJGUlNi5UPkLiWHzNgY1 # GIRH29wb0f2y1BzFa/ZcUlFdEtsluq9QBXpsxREdcu+N+VLEhReTwDwV2xo3xwgV # GD94q0W29R6HXtqPnhZyacaue7e3PmriLq0CAwEAAaOCAd0wggHZMBIGCSsGAQQB # gjcVAQQFAgMBAAEwIwYJKwYBBAGCNxUCBBYEFCqnUv5kxJq+gpE8RjUpzxD/LwTu # MB0GA1UdDgQWBBSfpxVdAF5iXYP05dJlpxtTNRnpcjBcBgNVHSAEVTBTMFEGDCsG # AQQBgjdMg30BATBBMD8GCCsGAQUFBwIBFjNodHRwOi8vd3d3Lm1pY3Jvc29mdC5j # b20vcGtpb3BzL0RvY3MvUmVwb3NpdG9yeS5odG0wEwYDVR0lBAwwCgYIKwYBBQUH # AwgwGQYJKwYBBAGCNxQCBAweCgBTAHUAYgBDAEEwCwYDVR0PBAQDAgGGMA8GA1Ud # EwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAU1fZWy4/oolxiaNE9lJBb186aGMQwVgYD # VR0fBE8wTTBLoEmgR4ZFaHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraS9jcmwv # cHJvZHVjdHMvTWljUm9vQ2VyQXV0XzIwMTAtMDYtMjMuY3JsMFoGCCsGAQUFBwEB # BE4wTDBKBggrBgEFBQcwAoY+aHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3BraS9j # ZXJ0cy9NaWNSb29DZXJBdXRfMjAxMC0wNi0yMy5jcnQwDQYJKoZIhvcNAQELBQAD # ggIBAJ1VffwqreEsH2cBMSRb4Z5yS/ypb+pcFLY+TkdkeLEGk5c9MTO1OdfCcTY/ # 2mRsfNB1OW27DzHkwo/7bNGhlBgi7ulmZzpTTd2YurYeeNg2LpypglYAA7AFvono # aeC6Ce5732pvvinLbtg/SHUB2RjebYIM9W0jVOR4U3UkV7ndn/OOPcbzaN9l9qRW # qveVtihVJ9AkvUCgvxm2EhIRXT0n4ECWOKz3+SmJw7wXsFSFQrP8DJ6LGYnn8Atq # gcKBGUIZUnWKNsIdw2FzLixre24/LAl4FOmRsqlb30mjdAy87JGA0j3mSj5mO0+7 # hvoyGtmW9I/2kQH2zsZ0/fZMcm8Qq3UwxTSwethQ/gpY3UA8x1RtnWN0SCyxTkct # wRQEcb9k+SS+c23Kjgm9swFXSVRk2XPXfx5bRAGOWhmRaw2fpCjcZxkoJLo4S5pu # +yFUa2pFEUep8beuyOiJXk+d0tBMdrVXVAmxaQFEfnyhYWxz/gq77EFmPWn9y8FB # SX5+k77L+DvktxW/tM4+pTFRhLy/AsGConsXHRWJjXD+57XQKBqJC4822rpM+Zv/ # Cuk0+CQ1ZyvgDbjmjJnW4SLq8CdCPSWU5nR0W2rRnj7tfqAxM328y+l7vzhwRNGQ # 8cirOoo6CGJ/2XBjU02N7oJtpQUQwXEGahC0HVUzWLOhcGbyoYIC0jCCAjsCAQEw # gfyhgdSkgdEwgc4xCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAw # DgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24x # KTAnBgNVBAsTIE1pY3Jvc29mdCBPcGVyYXRpb25zIFB1ZXJ0byBSaWNvMSYwJAYD # VQQLEx1UaGFsZXMgVFNTIEVTTjpEOURFLUUzOUEtNDNGRTElMCMGA1UEAxMcTWlj # cm9zb2Z0IFRpbWUtU3RhbXAgU2VydmljZaIjCgEBMAcGBSsOAwIaAxUAsRrSE7C4 # sEn96AMhjNkXZ0Y1iqCggYMwgYCkfjB8MQswCQYDVQQGEwJVUzETMBEGA1UECBMK # V2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0 # IENvcnBvcmF0aW9uMSYwJAYDVQQDEx1NaWNyb3NvZnQgVGltZS1TdGFtcCBQQ0Eg # MjAxMDANBgkqhkiG9w0BAQUFAAIFAOZNiHswIhgPMjAyMjA2MTAxMzA4MTFaGA8y # MDIyMDYxMTEzMDgxMVowdzA9BgorBgEEAYRZCgQBMS8wLTAKAgUA5k2IewIBADAK # AgEAAgIcAwIB/zAHAgEAAgIRCTAKAgUA5k7Z+wIBADA2BgorBgEEAYRZCgQCMSgw # JjAMBgorBgEEAYRZCgMCoAowCAIBAAIDB6EgoQowCAIBAAIDAYagMA0GCSqGSIb3 # DQEBBQUAA4GBAC9z3Af0W+B5k4CGUuPjVoS4k1Tdi/kcBi9pdJoGPr02nLj5lWGt # JQaZsVKIZsZnrP+4MX+oE/Au113trx3GJWz4LKogMRrd+jUq8f2HHvuPs4+AGIi2 # 0+udv2erMLE3hoemf5USc/kHh+SnCpm9aXxSeFV9IaEb+evUSwJHAzGSMYIEDTCC # BAkCAQEwgZMwfDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAO # BgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEm # MCQGA1UEAxMdTWljcm9zb2Z0IFRpbWUtU3RhbXAgUENBIDIwMTACEzMAAAGsZryH # Il3ePXsAAQAAAawwDQYJYIZIAWUDBAIBBQCgggFKMBoGCSqGSIb3DQEJAzENBgsq # hkiG9w0BCRABBDAvBgkqhkiG9w0BCQQxIgQgdU6m3ESHsarqzRzLa51CTWKm+JAo # bqGx3AY31m/BZ78wgfoGCyqGSIb3DQEJEAIvMYHqMIHnMIHkMIG9BCD5twGSgzgv # CXEAcrVz56m79Pp+bQJf+0+Lg2faBCzC9TCBmDCBgKR+MHwxCzAJBgNVBAYTAlVT # MRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQK # ExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xJjAkBgNVBAMTHU1pY3Jvc29mdCBUaW1l # LVN0YW1wIFBDQSAyMDEwAhMzAAABrGa8hyJd3j17AAEAAAGsMCIEIFKhW6fJTJAu # loO1NYSSOs0Y0kAojjIXDWi0WFagsP1PMA0GCSqGSIb3DQEBCwUABIICAIX20Re8 # GemfbcZdAFASFFqtqOngbsrAb0V/9coHreVVLHDNGYEk+zbtCHNJgHlwOI6SIc2+ # nSxRASAj7LnvvUml3NRupIA7mbuf4Y1R1HOg8V/73uLRJ3xvSNqS82OFUB97fwUE # Fv3ZGd7NYVzCZVQMOnpVkd9VNcwvdqa+gG049N8VIXaDMQC9p+vM05oOZpXjPitZ # p/pkn5LVDSOZ8FSKvuBQkfbvj3keQujie3m2MNzitDnAZhvxbMwq7BbFabKyXdnC # mGpaucy0/6IZFMgA3GPBw6/7MQV7G3iDGffsYq9tWhDoGh5JRoG20KSL3bE7fhOF # B6xN6/BaMXrqfJ9o2Y1xPZyH5ZSWf+f9aRN/yV+ewq59OO4uK3jys/PNnnCFBtUO # A2Tn9+WyrTuBaG0heyiGFb7vY5r7ZowyafcHY0TRyC3GAVBApxxXA2YEESDvsUxL # SOZZiE1JpgZCQwpzPBjlgVWB71nraAx6P9OG1LdBDAq++lo/XuAqAtSM/wIOhl0Q # WUJb8CXvRH+ya11Zcm9AWHx4GHyJbzsks5omyfxISKHtHVb84g6UzduWEqpJ7B6M # PtYHk1xjiQWPHyQRL7v2obZhkN3vB/pWuOa4yybFOskWd2MJIO6vQFKiJZjmenlw # rF7Pa8+rywSomYCzt/Tum0zvVA1oFCNCXLM+ # SIG # End signature block |