Utilities/DLPValidationUtility.ps1
using module "..\MCCA.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 = [MCCACheckConfig]::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([MCCAConfigLevel]::Informational, "Pass") $ConfigObjectList += $ConfigObject } } else { If ($PolicySensitiveType.Count -ne 0 ) { $ConfigObject = [MCCACheckConfig]::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([MCCAConfigLevel]::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 MCCA. 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 = [MCCACheckConfig]::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([MCCAConfigLevel]::Ok, "Fail") $ConfigObjectList += $ConfigObject } if ($null -ne $PendingSensitiveType) { $ConfigObject = [MCCACheckConfig]::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([MCCAConfigLevel]::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 # MIIl1AYJKoZIhvcNAQcCoIIlxTCCJcECAQExDzANBglghkgBZQMEAgEFADB5Bgor # BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG # KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCBzCiwQmH0gTqrc # gd8MT1NHhoROilROYYO+9DNZMq3Ps6CCC6EwggUGMIID7qADAgECAhMzAAAE4xrK # 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/tdy0lBjf5mAcMmiyMYIZiTCCGYUCAQEwgZAweTELMAkG # A1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQx # HjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEjMCEGA1UEAxMaTWljcm9z # b2Z0IFRlc3RpbmcgUENBIDIwMTACEzMAAATjGsrT9p6C2bsAAQAABOMwDQYJYIZI # AWUDBAIBBQCggbAwGQYJKoZIhvcNAQkDMQwGCisGAQQBgjcCAQQwHAYKKwYBBAGC # NwIBCzEOMAwGCisGAQQBgjcCARUwLwYJKoZIhvcNAQkEMSIEIL+PeVBGgZBcm75Y # r1JnI+WEOHtIF6tB61EHqLXjwEZ1MEQGCisGAQQBgjcCAQwxNjA0oBSAEgBNAGkA # YwByAG8AcwBvAGYAdKEcgBpodHRwczovL3d3dy5taWNyb3NvZnQuY29tIDANBgkq # hkiG9w0BAQEFAASCAQBaAjVOnRyR8jalLw0wGwlw02zMR9PyhBnUu3wAJPAlBgge # LPzkSNDeXA7JWX/Jv5jXIOwdHKhvmAUPscrEfbvLRjPM2skbAM3ujp3RtiN3n8Dw # /31o20969in5Iwfl+dfcP6fFpWCsiqitwAlyzy7H/U6wC+Z5n+ac6h78Ode1pWRA # q4kJiq4XA/dGGwSvnWUehcy0+Un/HE7MDhOt1vXktumE9HmEUtP9fjeTVZG50tc1 # /43yGn4zi3KjeEHpgedL/ZiG9bsaztHuUJlyXGEq1mNgF7cqfJfkhzAuB16UgTl2 # LTQEIoCGFlqzxpvqOo2GGLVxuMbdv+v0uLpEmrBroYIXFjCCFxIGCisGAQQBgjcD # AwExghcCMIIW/gYJKoZIhvcNAQcCoIIW7zCCFusCAQMxDzANBglghkgBZQMEAgEF # ADCCAVkGCyqGSIb3DQEJEAEEoIIBSASCAUQwggFAAgEBBgorBgEEAYRZCgMBMDEw # DQYJYIZIAWUDBAIBBQAEIAxAJdS4H4yE1GCkNbw0CwrEjMukdqOPyQ2U2cIZJhhQ # AgZiCK4nuHIYEzIwMjIwMzE0MDkzMjM5LjczOVowBIACAfSggdikgdUwgdIxCzAJ # BgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25k # MR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xLTArBgNVBAsTJE1pY3Jv # c29mdCBJcmVsYW5kIE9wZXJhdGlvbnMgTGltaXRlZDEmMCQGA1UECxMdVGhhbGVz # IFRTUyBFU046ODZERi00QkJDLTkzMzUxJTAjBgNVBAMTHE1pY3Jvc29mdCBUaW1l # LVN0YW1wIFNlcnZpY2WgghFlMIIHFDCCBPygAwIBAgITMwAAAYwBl2JHNnZmOwAB # AAABjDANBgkqhkiG9w0BAQsFADB8MQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2Fz # aGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENv # cnBvcmF0aW9uMSYwJAYDVQQDEx1NaWNyb3NvZnQgVGltZS1TdGFtcCBQQ0EgMjAx # MDAeFw0yMTEwMjgxOTI3NDRaFw0yMzAxMjYxOTI3NDRaMIHSMQswCQYDVQQGEwJV # UzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UE # ChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMS0wKwYDVQQLEyRNaWNyb3NvZnQgSXJl # bGFuZCBPcGVyYXRpb25zIExpbWl0ZWQxJjAkBgNVBAsTHVRoYWxlcyBUU1MgRVNO # Ojg2REYtNEJCQy05MzM1MSUwIwYDVQQDExxNaWNyb3NvZnQgVGltZS1TdGFtcCBT # ZXJ2aWNlMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA00hoTKET+SGs # ayw+9BFdm+uZ+kvEPGLd5sF8XlT3Uy4YGqT86+Dr8G3k6q/lRagixRKvn+g2AFRL # 9VuZqC1uTva7dZN9ChiotHHFmyyQZPalXdJTC8nKIrbgTMXAwh/mbhnmoaxsI9jG # livYgi5GNOE7u6TV4UOtnVP8iohTUfNMKhZaJdzmWDjhWC7LjPXIham9QhRkVzrk # xfJKc59AsaGD3PviRkgHoGxfpdWHPPaW8iiEHjc4PDmCKluW3J+IdU38H+MkKPme # kC7GtRTLXKBCuWKXS8TjZY/wkNczWNEo+l5J3OZdHeVigxpzCneskZfcHXxrCX2h # ue7qJvWrksFStkZbOG7IYmafYMQrZGull72PnS1oIdQdYnR5/ngcvSQb11GQ0kNM # DziKsSd+5ifUaYbJLZ0XExNV4qLXCS65Dj+8FygCjtNvkDiB5Hs9I7K9zxZsUb7f # KKSGEZ9yA0JgTWbcAPCYPtuAHVJ8UKaT967pJm7+r3hgce38VU39speeHHgaCS4v # XrelTLiUMAl0Otk5ncKQKc2kGnvuwP2RCS3kEEFAxonwLn8pyedyreZTbBMQBqf1 # o3kj0ilOJ7/f/P3c1rnaYO01GDJomv7otpb5z+1hrSoIs8u+6eruJKCTihd0i/8b # c67AKF76wpWuvW9BhbUMTsWkww4r42cCAwEAAaOCATYwggEyMB0GA1UdDgQWBBSW # zlOGqYIhYIh5Vp0+iMrdQItSIzAfBgNVHSMEGDAWgBSfpxVdAF5iXYP05dJlpxtT # NRnpcjBfBgNVHR8EWDBWMFSgUqBQhk5odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v # cGtpb3BzL2NybC9NaWNyb3NvZnQlMjBUaW1lLVN0YW1wJTIwUENBJTIwMjAxMCgx # KS5jcmwwbAYIKwYBBQUHAQEEYDBeMFwGCCsGAQUFBzAChlBodHRwOi8vd3d3Lm1p # Y3Jvc29mdC5jb20vcGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRpbWUtU3RhbXAl # MjBQQ0ElMjAyMDEwKDEpLmNydDAMBgNVHRMBAf8EAjAAMBMGA1UdJQQMMAoGCCsG # AQUFBwMIMA0GCSqGSIb3DQEBCwUAA4ICAQDXaMVFWMIJqdblQZK6oks7cdCUwePA # mmEIedsyusgUMIQlQqajfCP9iG58yOFSRx2k59j2hABSZBxFmbkVjwhYEC1yJPQm # 9464gUz5G+uOW51i8ueeeB3h2i+DmoWNKNSulINyfSGgW6PCDCiRqO3qn8KYVzLz # oemfPir/UVx5CAgVcEDAMtxbRrTHXBABXyCa6aQ3+jukWB5aQzLw6qhHhz7HIOU9 # q/Q9Y2NnVBKPfzIlwPjb2NrQGfQnXTssfFD98OpRHq07ZUx21g4ps8V33hSSkJ2u # Dwhtp5VtFGnF+AxzFBlCvc33LPTmXsczly6+yQgARwmNHeNA262WqLLJM84Iz8OS # 1VfE1N6yYCkLjg81+zGXsjvMGmjBliyxZwXWGWJmsovB6T6h1GrfmvMKudOE92D6 # 7SR3zT3DdA5JwL9TAzX8Uhi0aGYtn5uNUDFbxIozIRMpLVpP/YOLng+r2v8s8lyW # v0afjwZYHBJ64MWVNxHcaNtjzkYtQjdZ5bhyka6dX+DtQD9bh3zji0SlrfVDILxE # b6OjyqtfGj7iWZvJrb4AqIVgHQaDzguixES9ietFikHff6p97C5qobTTbKwN0AEP # 3q5teyI9NIOVlJl0gi5Ibd58Hif3JLO6vp+5yHXjoSL/MlhFmvGtaYmQwD7KzTm9 # uADF4BzP/mx2vzCCB3EwggVZoAMCAQICEzMAAAAVxedrngKbSZkAAAAAABUwDQYJ # KoZIhvcNAQELBQAwgYgxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9u # MRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRp # b24xMjAwBgNVBAMTKU1pY3Jvc29mdCBSb290IENlcnRpZmljYXRlIEF1dGhvcml0 # eSAyMDEwMB4XDTIxMDkzMDE4MjIyNVoXDTMwMDkzMDE4MzIyNVowfDELMAkGA1UE # BhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAc # BgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEmMCQGA1UEAxMdTWljcm9zb2Z0 # IFRpbWUtU3RhbXAgUENBIDIwMTAwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIK # AoICAQDk4aZM57RyIQt5osvXJHm9DtWC0/3unAcH0qlsTnXIyjVX9gF/bErg4r25 # PhdgM/9cT8dm95VTcVrifkpa/rg2Z4VGIwy1jRPPdzLAEBjoYH1qUoNEt6aORmsH # FPPFdvWGUNzBRMhxXFExN6AKOG6N7dcP2CZTfDlhAnrEqv1yaa8dq6z2Nr41JmTa # mDu6GnszrYBbfowQHJ1S/rboYiXcag/PXfT+jlPP1uyFVk3v3byNpOORj7I5LFGc # 6XBpDco2LXCOMcg1KL3jtIckw+DJj361VI/c+gVVmG1oO5pGve2krnopN6zL64NF # 50ZuyjLVwIYwXE8s4mKyzbnijYjklqwBSru+cakXW2dg3viSkR4dPf0gz3N9QZpG # dc3EXzTdEonW/aUgfX782Z5F37ZyL9t9X4C626p+Nuw2TPYrbqgSUei/BQOj0XOm # TTd0lBw0gg/wEPK3Rxjtp+iZfD9M269ewvPV2HM9Q07BMzlMjgK8QmguEOqEUUbi # 0b1qGFphAXPKZ6Je1yh2AuIzGHLXpyDwwvoSCtdjbwzJNmSLW6CmgyFdXzB0kZSU # 2LlQ+QuJYfM2BjUYhEfb3BvR/bLUHMVr9lxSUV0S2yW6r1AFemzFER1y7435UsSF # F5PAPBXbGjfHCBUYP3irRbb1Hode2o+eFnJpxq57t7c+auIurQIDAQABo4IB3TCC # AdkwEgYJKwYBBAGCNxUBBAUCAwEAATAjBgkrBgEEAYI3FQIEFgQUKqdS/mTEmr6C # kTxGNSnPEP8vBO4wHQYDVR0OBBYEFJ+nFV0AXmJdg/Tl0mWnG1M1GelyMFwGA1Ud # IARVMFMwUQYMKwYBBAGCN0yDfQEBMEEwPwYIKwYBBQUHAgEWM2h0dHA6Ly93d3cu # bWljcm9zb2Z0LmNvbS9wa2lvcHMvRG9jcy9SZXBvc2l0b3J5Lmh0bTATBgNVHSUE # DDAKBggrBgEFBQcDCDAZBgkrBgEEAYI3FAIEDB4KAFMAdQBiAEMAQTALBgNVHQ8E # BAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAfBgNVHSMEGDAWgBTV9lbLj+iiXGJo0T2U # kFvXzpoYxDBWBgNVHR8ETzBNMEugSaBHhkVodHRwOi8vY3JsLm1pY3Jvc29mdC5j # b20vcGtpL2NybC9wcm9kdWN0cy9NaWNSb29DZXJBdXRfMjAxMC0wNi0yMy5jcmww # WgYIKwYBBQUHAQEETjBMMEoGCCsGAQUFBzAChj5odHRwOi8vd3d3Lm1pY3Jvc29m # dC5jb20vcGtpL2NlcnRzL01pY1Jvb0NlckF1dF8yMDEwLTA2LTIzLmNydDANBgkq # hkiG9w0BAQsFAAOCAgEAnVV9/Cqt4SwfZwExJFvhnnJL/Klv6lwUtj5OR2R4sQaT # lz0xM7U518JxNj/aZGx80HU5bbsPMeTCj/ts0aGUGCLu6WZnOlNN3Zi6th542DYu # nKmCVgADsAW+iehp4LoJ7nvfam++Kctu2D9IdQHZGN5tggz1bSNU5HhTdSRXud2f # 8449xvNo32X2pFaq95W2KFUn0CS9QKC/GbYSEhFdPSfgQJY4rPf5KYnDvBewVIVC # s/wMnosZiefwC2qBwoEZQhlSdYo2wh3DYXMuLGt7bj8sCXgU6ZGyqVvfSaN0DLzs # kYDSPeZKPmY7T7uG+jIa2Zb0j/aRAfbOxnT99kxybxCrdTDFNLB62FD+CljdQDzH # VG2dY3RILLFORy3BFARxv2T5JL5zbcqOCb2zAVdJVGTZc9d/HltEAY5aGZFrDZ+k # KNxnGSgkujhLmm77IVRrakURR6nxt67I6IleT53S0Ex2tVdUCbFpAUR+fKFhbHP+ # CrvsQWY9af3LwUFJfn6Tvsv4O+S3Fb+0zj6lMVGEvL8CwYKiexcdFYmNcP7ntdAo # GokLjzbaukz5m/8K6TT4JDVnK+ANuOaMmdbhIurwJ0I9JZTmdHRbatGePu1+oDEz # fbzL6Xu/OHBE0ZDxyKs6ijoIYn/ZcGNTTY3ugm2lBRDBcQZqELQdVTNYs6FwZvKh # ggLUMIICPQIBATCCAQChgdikgdUwgdIxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpX # YXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQg # Q29ycG9yYXRpb24xLTArBgNVBAsTJE1pY3Jvc29mdCBJcmVsYW5kIE9wZXJhdGlv # bnMgTGltaXRlZDEmMCQGA1UECxMdVGhhbGVzIFRTUyBFU046ODZERi00QkJDLTkz # MzUxJTAjBgNVBAMTHE1pY3Jvc29mdCBUaW1lLVN0YW1wIFNlcnZpY2WiIwoBATAH # BgUrDgMCGgMVADSi8hTrq/Q8oppweGyuZLNEJq/VoIGDMIGApH4wfDELMAkGA1UE # BhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAc # BgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEmMCQGA1UEAxMdTWljcm9zb2Z0 # IFRpbWUtU3RhbXAgUENBIDIwMTAwDQYJKoZIhvcNAQEFBQACBQDl2WYPMCIYDzIw # MjIwMzE0MTQ1ODIzWhgPMjAyMjAzMTUxNDU4MjNaMHQwOgYKKwYBBAGEWQoEATEs # MCowCgIFAOXZZg8CAQAwBwIBAAICA7wwBwIBAAICEU8wCgIFAOXat48CAQAwNgYK # KwYBBAGEWQoEAjEoMCYwDAYKKwYBBAGEWQoDAqAKMAgCAQACAwehIKEKMAgCAQAC # AwGGoDANBgkqhkiG9w0BAQUFAAOBgQAQ1eqZMjrDakdbuQICfSBk6/aOLhkT9GLL # G0RUjhaCoC9oToCIQvfhlQzCerx3RngybY0gPueFdjwkSsa16j5mST1Eji7KRzfv # UIZ8DRnBMsq2qyP9h49OZC26jUmGqn8K19LgTzgfYOoMjpUh9v5i2ltg451Osrcn # WoOmLPrcoTGCBA0wggQJAgEBMIGTMHwxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpX # YXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQg # Q29ycG9yYXRpb24xJjAkBgNVBAMTHU1pY3Jvc29mdCBUaW1lLVN0YW1wIFBDQSAy # MDEwAhMzAAABjAGXYkc2dmY7AAEAAAGMMA0GCWCGSAFlAwQCAQUAoIIBSjAaBgkq # hkiG9w0BCQMxDQYLKoZIhvcNAQkQAQQwLwYJKoZIhvcNAQkEMSIEIBM0TLHRiuZj # AqFJzJpc7S5NO39VgbdWFNZLQBqWh4AQMIH6BgsqhkiG9w0BCRACLzGB6jCB5zCB # 5DCBvQQg1a2L+BUqkM8Gf8TmIQWdgeKTTrYXIwOofOuJiBiYaZ4wgZgwgYCkfjB8 # MQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVk # bW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSYwJAYDVQQDEx1N # aWNyb3NvZnQgVGltZS1TdGFtcCBQQ0EgMjAxMAITMwAAAYwBl2JHNnZmOwABAAAB # jDAiBCAoSL+lqUvCWhdPz7EDk2173diMW/nXLuzi62ngnKm8TDANBgkqhkiG9w0B # AQsFAASCAgBX4qXUn1AfdL625beFWDMgZZQKxTEytExzwURD6fGbZTfU9Gb6Y96W # qlebd3uAUtj2sklfUPgqF1yX4hZn7rBfHSIAnng57X0D96tNcEnJ8prUFjlx99Ef # daAamROwyiwtmX6iI3pssp+V0rKiJKHbzfmD4jDMjn2c1Giqel2q/Ph0EajjgMxz # fkjM2fTg7JoOEUjIEbc/p9j/ojGmST79h+BnBNNpa4GcRQjhPijuPc5lM6UBokqS # fhyOdb8AmxOeGhojqkbv6hq/KXj56AyCAy90PdyHbqtlvipafJU4wYlH/kmLUiO5 # NEHLUAllPOnLGnwQPXAjhTYcmHVHf2MLM5HXhkN+p9AsR24yZJK1jjQqbVc74x8O # +5a5pxCxjrUUWlobr1QyCKa+T2eMR/8n0QVUaRBN5Tpgc6vGrDUhGX4IFGp0nclu # 9MbVaOD87qRXOOTH2reajA2hsPF+TteYf/JrNSbf+SoG4YCe8BY4KRDpCTMm1dou # pZdwdeCwiXHKxr595sYTovIIFZh9B05pkkTXQoIOens0BC6aHEwgwT8hipd8Uk7X # D56MuOywhRBuu/ECMTioAILDwJ6NPKTgt++qYnv9Y/bBgDP5E8RfwFUHJU13jHGT # myPOAVgg5ZGET+lZQC54FpuclF766Hph8tDIPIRdZzp7UY3YudmbeA== # SIG # End signature block |