Outputs/output-html.ps1
using module "..\MCCA.psm1" class html : MCCAOutput { $OutputDirectory = $null $DisplayReport = $True html() { $this.Name = "HTML" } RunOutput($Checks, $Collection) { <# OUTPUT GENERATION / Header #> # Obtain the tenant domain and date for the report $TenantDomain = ($Collection["AcceptedDomains"] | Where-Object { $_.InitialDomain -eq $True }).DomainName $ReportDate = "$(Get-Date -format 'dd-MMM-yyyy HH:mm') $($(Get-TimeZone).Id)" # Obtain the Remediation Report File name if ($null -eq $this.OutputDirectory) { $OutputDir = $this.DefaultOutputDirectory } else { $OutputDir = $this.OutputDirectory } $RemediationReportFileName = "$OutputDir\MCCA-$(Get-Date -Format 'yyyyMMddHHmm')-Remediation.html" # Summary $RecommendationCount = $($Checks | Where-Object { $_.Result -eq "Fail" }).Count $OKCount = $($Checks | Where-Object { $_.Result -eq "Pass" }).Count $InfoCount = $($Checks | Where-Object { $_.Result -eq "Recommendation" }).Count #> # Misc $ReportTitle = "Microsoft Compliance Configuration Analyzer" # Area icons $AreaIcon = @{} $AreaIcon["Default"] = "fas fa-user-cog" $AreaIcon["Data Loss Prevention"] = "fas fa-scroll" # Output start if ($null -ne $this.VersionCheck.Version) { $version = $($this.VersionCheck.Version.ToString()) } else { $Version = '' } $output = "<!doctype html> <html lang='en'> <head> <!-- Required meta tags --> <meta charset='utf-8'> <meta name='viewport' content='width=device-width, initial-scale=1, shrink-to-fit=no'> <link rel='stylesheet' href='https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.11.2/css/all.min.css' crossorigin='anonymous'> <link rel='stylesheet' href='https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css' integrity='sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T' crossorigin='anonymous'> <script src='https://code.jquery.com/jquery-3.3.1.slim.min.js' integrity='sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo' crossorigin='anonymous'></script> <script src='https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js' integrity='sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1' crossorigin='anonymous'></script> <script src='https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js' integrity='sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM' crossorigin='anonymous'></script> <script src='https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.11.2/js/all.js'></script> <style> .navbar-custom { background-color: #005494; color: white; padding-bottom: 10px; } /* Modify brand and text color */ .navbar-custom .navbar-brand, .navbar-custom .navbar-text { color: white; padding-top: 70px; padding-bottom: 10px; } .card-header { background-color: #0078D4;; color: white; } .table-borderless td, .table-borderless th { border: 0; padding:5px; } .bd-callout { padding: 1.25rem; margin-top: 1.25rem; margin-bottom: 1.25rem; border: 1px solid #eee; border-left-width: .25rem; border-radius: .25rem } .bd-callout h4 { margin-top: 0; margin-bottom: .25rem } .bd-callout p:last-child { margin-bottom: 0 } .bd-callout code { border-radius: .25rem } .bd-callout+.bd-callout { margin-top: -.25rem } .bd-callout-info { border-left-color: #5bc0de } .bd-callout-info h4 { color: #5bc0de } .bd-callout-warning { border-left-color: #f0ad4e } .bd-callout-warning h4 { color: #f0ad4e } .bd-callout-danger { border-left-color: #d9534f } .bd-callout-danger h4 { color: #d9534f } .bd-callout-success { border-left-color: #00bd19 } .app-footer{ background-color: #005494; color: white; padding-top:2px; padding-bottom :2px; } .star-cb-group { /* remove inline-block whitespace */ font-size: 0; /* flip the order so we can use the + and ~ combinators */ unicode-bidi: bidi-override; direction: rtl; /* the hidden clearer */ } .star-cb-group * { font-size: 1rem; } .star-cb-group > input { display: none; } .star-cb-group > input + label { /* only enough room for the star */ display: inline-block; overflow: hidden; text-indent: 9999px; width: 1.7em; white-space: nowrap; cursor: pointer; } .star-cb-group > input + label:before { display: inline-block; text-indent: -9999px; content: ""\2606""; font-size: 30px; color: #005494; } .star-cb-group > input:checked ~ label:before, .star-cb-group > input + label:hover ~ label:before, .star-cb-group > input + label:hover:before { content:""\2605""; color: #e52; font-size: 30px; text-shadow: 0 0 1px #333; } .star-cb-group > .star-cb-clear + label { text-indent: -9999px; width: .5em; margin-left: -.5em; } .star-cb-group > .star-cb-clear + label:before { width: .5em; } .star-cb-group:hover > input + label:before { content: ""\2606""; color: #005494; font-size: 30px; text-shadow: none; } .star-cb-group:hover > input + label:hover ~ label:before, .star-cb-group:hover > input + label:hover:before { content: ""\2605""; color: #e52; font-size: 30px; text-shadow: 0 0 1px #333; } </style> <title>$($ReportTitle)</title> </head> <body class='app bg-light'> <nav class='navbar navbar-custom' > <div class='container-fluid'> <div class='col-sm' style='text-align:left'> <div class='row'><div><i class='fas fa-binoculars'></i></div><div class='ml-3'><strong>Microsoft Compliance Configuration Analyzer (MCCA)</strong></div></div> </div> <div class='col-sm' style='text-align:right'> <button type='button' class='btn btn-primary' onclick='javascript:window.print();'>Print</button> <BR/> </div> </div> </nav> <div class='app-body p-3'> <main class='main'> <!-- Main content here --> <div class='container' style='padding-top:10px;'></div> <div class='card'> <div class='card-body'> <h2 class='card-title'>$($ReportTitle)</h2>" $Output += "<div style='text-align:right;margin-top:-65px;margin-right:8px;color:#005494;';> <b>Rate this report</b> </div> <div style='text-align:right;margin-top:-10px';> <span class='star-cb-group'> <input type='radio' id='rating-5' name='rating' value='5' onclick=""window.open('https://aka.ms/mcca-feedback-5','_blank');"" /> <label for='rating-5'>5</label> <input type='radio' id='rating-4' name='rating' value='4' onclick=""window.open('https://aka.ms/mcca-feedback-4','_blank');"" /> <label for='rating-4'>4</label> <input type='radio' id='rating-3' name='rating' value='3' onclick=""window.open('https://aka.ms/mcca-feedback-3','_blank');"" /> <label for='rating-3'>3</label> <input type='radio' id='rating-2' name='rating' value='2' onclick=""window.open('https://aka.ms/mcca-feedback-2','_blank');"" /> <label for='rating-2'>2</label> <input type='radio' id='rating-1' name='rating' value='1' onclick=""window.open('https://aka.ms/mcca-feedback-1','_blank');"" /> <label for='rating-1'>1</label> <input type='radio' id='rating-0' name='rating' value='0' class='star-cb-clear' /> <label for='rating-0'>0</label> </span> </div>" if ($(Test-Path -Path "$PSScriptRoot\..\Image\logo.jpg") -eq $True) { $Output += "<img src='$PSScriptRoot\..\Image\logo.jpg' align='right' width='250px' height='150px'/> " } $Output += "<strong>Version $version </strong> <p> MCCA assesses your compliance posture, highlights risks and recommends remediation steps to ensure compliance with essential data protection and regulatory standards.</p>" $Output += "<table><tr><td> <strong>Date</strong> </td> <td><strong>: $($ReportDate)</strong> </td> </tr> " if ($Collection["GetOrganisationConfig"] -ne "Error") { $OrganisationName = $Collection["GetOrganisationConfig"].DisplayName if (($null -ne $($OrganisationName)) -and ($($OrganisationName) -ne "")) { $output += " <tr><td><strong>Organization </strong> </td> <td><strong>: $($OrganisationName)</strong> </td></tr> " } } if (($null -ne $($TenantDomain)) -and ($($TenantDomain) -ne "")) { $output += " <tr><td><strong>Tenant </strong> </td> <td><strong>: $($TenantDomain)</strong> </td></tr> " } $TenantGeoLocations = $Collection["GetOrganisationRegion"] | Where-Object { $_ -ne "INTL" } if ($TenantGeoLocations -ne "Error") { $RegionString = "" $NumberToRegionMapping = Get-NumberRegionMappingHashTable foreach ($Region in $TenantGeoLocations) { foreach ($Numbers in $($NumberToRegionMapping.Keys)) { if ($($NumberToRegionMapping[$Numbers].Code) -eq $Region) { if ($RegionString -eq "") { $RegionString += "$($NumberToRegionMapping[$Numbers].Description)" } else { $RegionString += ", $($NumberToRegionMapping[$Numbers].Description)" } } } } $output += " <tr><td><strong>Note </strong> </td> <td><strong>:</strong> The following report is customized for following geolocation(s): $RegionString</td></tr> " } else { $output += " <tr><td><strong>Note </strong> </td> <td><strong>:</strong> The following report is generalized on all geolocations</td></tr> " } $output += " </table>" <# OUTPUT GENERATION / Version Warning #> If ($this.VersionCheck.Updated -eq $False) { $Output += " <div class='alert alert-danger pt-2' role='alert'> MCCA is out of date. You're running version $($this.VersionCheck.Version) but version $($this.VersionCheck.GalleryVersion) is available! Run Update-Module MCCA to get the latest definitions! </div> " } $Output += "</div> </div>" <# OUTPUT GENERATION / Summary cards #> $Output += "<br/>" <# OUTPUT GENERATION / Summary #> $Output += " <div class='card m-3'> <a name='Solutionsummary'></a> <div class='card-header'> Solutions Summary </div> <div class='card-body'>" $Output += "<table class='table table-borderless'> <tr> <td width='20'><i class='fas fa-user-cog'></i> <td><strong>All Solutions</strong></td> <td align='right'> <span class='badge badge-secondary' style='padding:15px;text-align:center;width:40px;"; $output += "'>$($InfoCount)</span> <span class='badge badge-warning' style='padding:15px;text-align:center;width:40px;"; $output += "'>$($RecommendationCount)</span> <span class='badge badge-success' style='padding:15px;text-align:center;width:40px;"; $output += "'>$($OkCount)</span> </td> </tr> " ForEach ($ParentArea in ($Checks | Where-Object { $_.Completed -eq $true } | Group-Object ParentArea)) { $Icon = $AreaIcon["Default"] If ($Null -eq $Icon) { $Icon = $AreaIcon["Default"] } $Output += " <tr > <td width='20'><i class='$Icon'></i> <td><strong>$($ParentArea.Name)</strong></td> </tr> " ForEach ($Area in ($Checks | Where-Object { $_.Completed -eq $true } | Where-Object { $_.ParentArea -eq $ParentArea.Name } | Group-Object Area)) { $Pass = @($Area.Group | Where-Object { $_.Result -eq "Pass" }).Count $Fail = @($Area.Group | Where-Object { $_.Result -eq "Fail" }).Count $Info = @($Area.Group | Where-Object { $_.Result -eq "Recommendation" }).Count $Output += " <tr> <td width='20'> <td style='vertical-align:middle;'> <i class='fa fa-cog'></i> <a href='`#$($Area.Name)'>$($Area.Name)</a></td> <td align='right' style='vertical-align:middle;'> <span class='badge badge-secondary' style='padding:10px;text-align:center;width:30px;"; $output += "'>$($Info)</span> <span class='badge badge-warning' style='padding:10px;text-align:center;width:30px;"; $output += "'>$($Fail)</span> <span class='badge badge-success' style='padding:10px;text-align:center;width:30px;"; $output += "'>$($Pass)</span> </td> </tr> " } } $Output += " <tr><td colspan='3' style='text-align:right'> <span class='badge badge-secondary'style='padding:5px;text-align:center'> </span> Recommendation <span class='badge badge-warning'style='padding:5px;text-align:center'> </span> Improvement <span class='badge badge-success' style='padding:5px;text-align:center'> </span> OK </td></tr></table>" $Output += " </div> </div> " <# OUTPUT GENERATION / Zones #> [bool] $UncompletedChecks = $False [string] $UncompletedChecksName = "" ForEach ($Area in ($Checks | Where-Object { $_.Completed -eq $False } | Group-Object Area)) { if ($UncompletedChecks -eq $False) { $UncompletedChecks = $True } # Each check if ($UncompletedChecksName -eq "") { $UncompletedChecksName += "Note: There was an issue in fetching $($Area.Name)" } else { $UncompletedChecksName += ", $($Area.Name)" } } if ($UncompletedChecks -eq $True) { $UncompletedChecksName += " information. Please try running the tool again after some time." $Output += " <div style='color:red;'> $UncompletedChecksName </div>" } ForEach ($Area in ($Checks | Where-Object { $_.Completed -eq $True } | Group-Object Area)) { # Write the top of the card $CollapseId = $($Area.Name).Replace(" " , "_") $Output += "<a name='$($Area.Name)'></a> <div class='card m-3'> <div class='card-header'> <div class=""row""> <div class='col-sm' style='text-align:left; margin-top:auto; margin-bottom:auto;'><a>$($Area.Name)</a></div> <div class='col-sm' style='text-align:right; padding-right:10px;'> <span id='more_$($CollapseId)' data-toggle='collapse' data-target='#$($CollapseId)_body'> <i class='fas fa-chevron-down' > </i> </span> </div> </div> </div> <div class='card-body collapse show' id='$($CollapseId)_body'>" # Each check [int] $count = 1 ForEach ($Check in ($Area.Group | Sort-Object Result -Descending)) { $RemediationActionsExist = $false $CheckCollapseId = $($CollapseId) + $count.ToString() If ($Check.Result -eq "Pass") { $CalloutType = "bd-callout-success" $BadgeType = "badge-success" $BadgeName = "OK" $Icon = "fas fa-thumbs-up" $IconColor = "green" $Title = $Check.PassText } ElseIf ($Check.Result -eq "Recommendation") { $CalloutType = "bd-callout-secondary" $BadgeType = "badge-secondary" $BadgeName = "Recommendation" $Icon = "fas fa-thumbs-up" $IconColor = "gray" $Title = $Check.FailRecommendation } Else { $CalloutType = "bd-callout-warning" $BadgeType = "badge-warning" $BadgeName = "Improvement" $Icon = "fas fa-thumbs-down" $IconColor = "#e5ad06" $Title = $Check.FailRecommendation } $Output += " <div class='row border-bottom' style='padding:5px; vertical-align:middle;'> <div class='col-sm-10' style='text-align:left; margin-top:auto; margin-bottom:auto;'><h6>$($Check.Name)</h6></div> <div class='col' style='text-align:right;padding-right:10px;'> <h6> <span class='badge $($BadgeType)'>$($BadgeName)</span> <i class='fas fa-chevron-down' data-toggle='collapse' data-target='#$($CheckCollapseId)'></i> </h6> </div> </div> " $Output += " <div class='row collapse' id='$($CheckCollapseId)'> <div class='bd-callout $($CalloutType) b-t-1 b-r-1 b-b-1 p-3' > <div class='container-fluid'> <div class='row'> <div><i class='$($Icon)' color='$($IconColor)'></i></div> <div class='col-8'><h6>$($Title)</h6></div> </div>" if ($Check.Importance) { $Output += " <div class='row p-3'> <div><p>$($Check.Importance)</p></div> </div>" } If ($Check.ExpandResults -eq $True) { # We should expand the results by showing a table of Config Data and Items $Output += " <div class='row pl-2 pt-3'>" if ($Check.Control -ne "Compliance Manager") { $Output += " <table class='table'> <thead class='border-bottom'> <tr>" If ($Check.CheckType -eq [CheckType]::ObjectPropertyValue) { # Object, property, value checks need three columns $Output += " <th align='center' text-align='center'>$($Check.ObjectType)</th> <th align='center' text-align='center'>$($Check.ItemName)</th> <th align='center' text-align='center'> $($Check.DataType)</th> <th align='center' text-align='center'>Status</th> " } Else { $Output += " <th align='center' text-align='center'>$($Check.ItemName)</th> <th align='center' text-align='center'>$($Check.DataType)</th> <th align='center' text-align='center'>Status</th> " } $Output += " <th style='width:50px'></th> </tr> </thead> <tbody> " ForEach ($o in $Check.Config | Sort-Object Level -Descending) { $ActionRequired = $false if ($o.Level -ne [MCCAConfigLevel]::None -and $o.Level -ne [MCCAConfigLevel]::Recommendation) { $oicon = "fas fa-check-circle text-success" $LevelText = $o.Level.ToString() } ElseIf ($o.Level -eq [MCCAConfigLevel]::Recommendation) { $oicon = "fas fa-info-circle text-muted" $LevelText = $o.Level.ToString() } Else { $oicon = "fas fa-times-circle text-danger" $LevelText = "Improvement" $ActionRequired = $true } $Output += " <tr> " if ($($o.RemediationAction)) { $RemediationActionsExist = $true } If ($Check.CheckType -eq [CheckType]::ObjectPropertyValue) { # Object, property, value checks need three columns $Output += " <td>$($o.Object)</td> <td style='word-wrap:break-word;' width = '35%'>$($o.ConfigItem)</td> <td style='word-wrap:break-word;' width = '30%'>$($o.ConfigData)</td> " } Else { $Output += " <td>$($o.ConfigItem)</td> <td style='word-wrap:break-word;' width = '35%'>$($o.ConfigData)</td> " } $Output += " <td style='text-align:left'> <div class='row badge badge-pill badge-light'>" if ($o.Level -eq [MCCAConfigLevel]::Informational) { $Output += "<span style='vertical-align: left;'>$($LevelText)</span><br/></div>" } else { $Output += "<span class='$($oicon)' style='vertical-align: left;'></span> <span style='vertical-align: left;'>$($LevelText)</span><br/></div>" } if ($ActionRequired -eq $true -and $($o.RemediationAction)) { $Output += " <span style='vertical-align: left;'><small><center>Remediation Available</center></small></span> " } $Output += " </td> </tr> " # Recommendation segment #if($o.Level -eq [MCCAConfigLevel]::Recommendation) #{ if (($null -ne $($o.InfoText)) -and ($($o.InfoText) -ne "" ) ) { $Output += " <tr>" If ($Check.CheckType -eq [CheckType]::ObjectPropertyValue) { $Output += "<td colspan='4' style='border: 0;'>" } else { $Output += "<td colspan='3' style='border: 0;'>" } $Output += " <div class='alert alert-light' role='alert' style='text-align: left;'> <span class='fas fa-info-circle text-muted' style='vertical-align: left; padding-right:5px'></span> <span style='vertical-align: middle;'>$($o.InfoText)</span> </div> " $Output += "</td></tr> " } } #} $Output += " </tbody> </table>" } # If any links exist If ($Check.Links) { $Output += " <table class='table'> <tr>" $LinksInfo = $Check.Links [int] $CountOfLinks = $LinksInfo.Keys.Count [int] $itr = 0 $LinksNameValuePair = $LinksInfo.GetEnumerator() | Sort-Object -Property Name while ($itr -lt $CountOfLinks) { $Output += " <td style='padding-top:20px;'><i class='fas fa-external-link-square-alt'></i> <a href='$($LinksNameValuePair.Value[$itr])' target=""blank"">$($LinksNameValuePair.Name[$itr])</a></td> " $itr = $itr + 1 } if ($RemediationActionsExist -eq $true) { $Output += " <td ><a class='btn btn-primary' href='$($RemediationReportFileName)' target='_blank' role='button'>Remediation Script</a></td> " } $Output += " </tr> </table> " $Output += " </table> " } $Output += " </div>" } $Output += " </div> </div> </div> " $count += 1 } # End the card $Output += " <div class='col-sm' style='text-align:right; padding-right:10px;'> <a href='#Solutionsummary'>Go to Solutions Summary</a></div> </div> </div>" } <# OUTPUT GENERATION / Footer #> $Output += " </main> <center>Bugs? Issues? Suggestions? <a href='https://github.com/OfficeDev/MCCA'>GitHub</center> </div> <footer class='app-footer'> <p><center><i> Disclaimer: Recommendations from (MCCA) should not be interpreted as a guarantee of compliance. It is up to you to evaluate and validate the effectiveness of customer controls per your regulatory environment. <br> </i></center> </p></footer> </body> </html>" # Write to file $Tenant = $(($Collection["AcceptedDomains"] | Where-Object { $_.InitialDomain -eq $True }).DomainName -split '\.')[0] $ReportFileName = "MCCA-$($tenant)-$(Get-Date -Format 'yyyyMMddHHmm').html" $OutputFile = "$OutputDir\$ReportFileName" $Output | Out-File -FilePath $OutputFile If ($this.DisplayReport) { Invoke-Expression $OutputFile } $this.Completed = $True $this.Result = $OutputFile } } # SIG # Begin signature block # MIIlvgYJKoZIhvcNAQcCoIIlrzCCJasCAQExDzANBglghkgBZQMEAgEFADB5Bgor # BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG # KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCD21FZHGQFGu+lU # sEk3zNxcLVGNsBVbFYkS4LnBN/jZ2qCCC6EwggUGMIID7qADAgECAhMzAAAE4xrK # 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/tdy0lBjf5mAcMmiyMYIZczCCGW8CAQEwgZAweTELMAkG # A1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQx # HjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEjMCEGA1UEAxMaTWljcm9z # b2Z0IFRlc3RpbmcgUENBIDIwMTACEzMAAATjGsrT9p6C2bsAAQAABOMwDQYJYIZI # AWUDBAIBBQCggbAwGQYJKoZIhvcNAQkDMQwGCisGAQQBgjcCAQQwHAYKKwYBBAGC # NwIBCzEOMAwGCisGAQQBgjcCARUwLwYJKoZIhvcNAQkEMSIEIKBjg3c5dSe2zrVH # KzfRCHzvyNmZuabFCwzA535jdPU7MEQGCisGAQQBgjcCAQwxNjA0oBSAEgBNAGkA # YwByAG8AcwBvAGYAdKEcgBpodHRwczovL3d3dy5taWNyb3NvZnQuY29tIDANBgkq # hkiG9w0BAQEFAASCAQAC2MAdFggxZh01cugVojH8ndSweZbdk1ZaTFpPeiqWmLCz # 9lXv2UDBR2qeLNxHAr+xQDpcdtTB0VJ8UhZmuxzUGbLFS6EveJsuQ4uKqHAuKtNS # YjSoTbNGZ/mUeXxRJEsVqK1VYoDXlExn2SuOQEJP6Rp7DsFEYXQ3OKJpEMcNLAHv # RjTE9OTPLV3zBWJOuo9wCyHjJhTlbN+E2IyMceQH7L8R5jk/tF6/N9ne7l/WNHW7 # qo33EanxyfPF93B7pdYqiW4fElDEVxcDdhqZegoaAbGkVx2bzbothKDcAe815TV3 # zMOPFbcz3NcluLFtUEsGZPAOT++srhyubhdAi2X8oYIXADCCFvwGCisGAQQBgjcD # AwExghbsMIIW6AYJKoZIhvcNAQcCoIIW2TCCFtUCAQMxDzANBglghkgBZQMEAgEF # ADCCAVEGCyqGSIb3DQEJEAEEoIIBQASCATwwggE4AgEBBgorBgEEAYRZCgMBMDEw # DQYJYIZIAWUDBAIBBQAEIDpYsClaDLDRH6E+0HRFhNi8LJvEltPKao75f9ahG748 # AgZiFl814HYYEzIwMjIwMzE0MDkzMjQzLjA1NVowBIACAfSggdCkgc0wgcoxCzAJ # BgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25k # MR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xJTAjBgNVBAsTHE1pY3Jv # c29mdCBBbWVyaWNhIE9wZXJhdGlvbnMxJjAkBgNVBAsTHVRoYWxlcyBUU1MgRVNO # OkU1QTYtRTI3Qy01OTJFMSUwIwYDVQQDExxNaWNyb3NvZnQgVGltZS1TdGFtcCBT # ZXJ2aWNloIIRVzCCBwwwggT0oAMCAQICEzMAAAGVt/wN1uM3MSUAAQAAAZUwDQYJ # KoZIhvcNAQELBQAwfDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24x # EDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlv # bjEmMCQGA1UEAxMdTWljcm9zb2Z0IFRpbWUtU3RhbXAgUENBIDIwMTAwHhcNMjEx # MjAyMTkwNTEyWhcNMjMwMjI4MTkwNTEyWjCByjELMAkGA1UEBhMCVVMxEzARBgNV # BAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jv # c29mdCBDb3Jwb3JhdGlvbjElMCMGA1UECxMcTWljcm9zb2Z0IEFtZXJpY2EgT3Bl # cmF0aW9uczEmMCQGA1UECxMdVGhhbGVzIFRTUyBFU046RTVBNi1FMjdDLTU5MkUx # JTAjBgNVBAMTHE1pY3Jvc29mdCBUaW1lLVN0YW1wIFNlcnZpY2UwggIiMA0GCSqG # SIb3DQEBAQUAA4ICDwAwggIKAoICAQCfbUEMZ7ZLOz9aoRCeJL4hhT9Q8JZB2xaV # lMNCt3bwhcTI5GLPrt2e93DAsmlqOzw1cFiPPg6S5sLCXz7LbbUQpLha8S4v2qcc # MtTokEaDQS+QJErnAsl6VSmRvAy0nlj+C/PaZuLb3OzY0ARw7UeCZLpyWPPH+k5M # dYj6NUDTNoXqbzQHCuPs+fgIoro5y3DHoO077g6Ir2THIx1yfVFEt5zDcFPOYMg4 # yBi4A6Xc3hm9tZ6w849nBvVKwm5YALfH3y/f3n4LnN61b1wzAx3ZCZjf13UKbpE7 # p6DYJrHRB/+pwFjG99TwHH6uXzDeZT6/r6qH7AABwn8fpYc1TmleFY8YRuVzzjp9 # VkPHV8VzvzLL7QK2kteeXLL/Y4lvjL6hzyOmE+1LVD3lEbYho1zCt+F7bU+FpjyB # fTC4i/wHsptb218YlbkQt1i1B6llmJwVFwCLX7gxQ48QIGUacMy8kp1+zczY+Sxl # paEgNmQkfc1raPh9y5sMa6X48+x0K7B8OqDoXcTiECIjJetxwtuBlQseJ05HRfis # fgFm09kG7vdHEo3NbUuMMBFikc4boN9Ufm0iUhq/JtqV0Kwrv9Cv3ayDgdNwEWiL # 2a65InEWSpRTYfsCQ03eqEh5A3rwV/KfUFcit+DrP+9VcDpjWRsCokZv4tgn5qAX # NMtHa8NiqQIDAQABo4IBNjCCATIwHQYDVR0OBBYEFKuX02ICFFdXgrcCBmDJfH5v # /KkXMB8GA1UdIwQYMBaAFJ+nFV0AXmJdg/Tl0mWnG1M1GelyMF8GA1UdHwRYMFYw # VKBSoFCGTmh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jv # c29mdCUyMFRpbWUtU3RhbXAlMjBQQ0ElMjAyMDEwKDEpLmNybDBsBggrBgEFBQcB # AQRgMF4wXAYIKwYBBQUHMAKGUGh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lv # cHMvY2VydHMvTWljcm9zb2Z0JTIwVGltZS1TdGFtcCUyMFBDQSUyMDIwMTAoMSku # Y3J0MAwGA1UdEwEB/wQCMAAwEwYDVR0lBAwwCgYIKwYBBQUHAwgwDQYJKoZIhvcN # AQELBQADggIBAOCzNt4fJ+jOvQuq0Itn37IZrYNBGswAi+IAFM3YGK/wGQlEncgj # mNBuac95W2fAL6xtFVfMfkeqSLMLqoidVsU9Bm4DEBjaWNOT9uX/tcYiJSfFQM0r # Dbrl8V4nM88RZF56G/qJW9g5dIqOSoimzKUt/Q7WH6VByW0sar5wGvgovK3qFadw # KShzRYcEqTkHH2zip5e73jezPHx2+taYqJG5xJzdDErZ1nMixRjaHs3KpcsmZYux # sIRfBYOJvAFGymTGRv5PuwsNps9Ech1Aasq84H/Y/8xN3GQj4P3MiDn8izUBDCuX # IfHYk39bqnaAmFbUiCby+WWpuzdk4oDKz/sWwrnsoQ72uEGVEN7+kyw9+HSo5i8l # 8Zg1Ymj9tUgDpVUGjAduoLyHQ7XqknKmS9kJSBKk4okEDg0Id6LeKLQwH1e4aVeT # yUYwcBX3wg7pLJQWvR7na2SGrtl/23YGQTudmWOryhx9lnU7KBGV/aNvz0tTpcsu # csK+cZFKDEkWB/oUFVrtyun6ND5pYZNj0CgRup5grVACq/Agb+EOGLCD+zEtGNop # 4tfKvsYb64257NJ9XrMHgpCib76WT34RPmCBByxLUkHxHq5zCyYNu0IFXAt1AVic # w14M+czLYIVM7NOyVpFdcB1B9MiJik7peSii0XTRdl5/V/KscTaCBFz3MIIHcTCC # BVmgAwIBAgITMwAAABXF52ueAptJmQAAAAAAFTANBgkqhkiG9w0BAQsFADCBiDEL # MAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1v # bmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEyMDAGA1UEAxMpTWlj # cm9zb2Z0IFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5IDIwMTAwHhcNMjEwOTMw # MTgyMjI1WhcNMzAwOTMwMTgzMjI1WjB8MQswCQYDVQQGEwJVUzETMBEGA1UECBMK # V2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0 # IENvcnBvcmF0aW9uMSYwJAYDVQQDEx1NaWNyb3NvZnQgVGltZS1TdGFtcCBQQ0Eg # MjAxMDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAOThpkzntHIhC3mi # y9ckeb0O1YLT/e6cBwfSqWxOdcjKNVf2AX9sSuDivbk+F2Az/1xPx2b3lVNxWuJ+ # Slr+uDZnhUYjDLWNE893MsAQGOhgfWpSg0S3po5GawcU88V29YZQ3MFEyHFcUTE3 # oAo4bo3t1w/YJlN8OWECesSq/XJprx2rrPY2vjUmZNqYO7oaezOtgFt+jBAcnVL+ # tuhiJdxqD89d9P6OU8/W7IVWTe/dvI2k45GPsjksUZzpcGkNyjYtcI4xyDUoveO0 # hyTD4MmPfrVUj9z6BVWYbWg7mka97aSueik3rMvrg0XnRm7KMtXAhjBcTyziYrLN # ueKNiOSWrAFKu75xqRdbZ2De+JKRHh09/SDPc31BmkZ1zcRfNN0Sidb9pSB9fvzZ # nkXftnIv231fgLrbqn427DZM9ituqBJR6L8FA6PRc6ZNN3SUHDSCD/AQ8rdHGO2n # 6Jl8P0zbr17C89XYcz1DTsEzOUyOArxCaC4Q6oRRRuLRvWoYWmEBc8pnol7XKHYC # 4jMYctenIPDC+hIK12NvDMk2ZItboKaDIV1fMHSRlJTYuVD5C4lh8zYGNRiER9vc # G9H9stQcxWv2XFJRXRLbJbqvUAV6bMURHXLvjflSxIUXk8A8FdsaN8cIFRg/eKtF # tvUeh17aj54WcmnGrnu3tz5q4i6tAgMBAAGjggHdMIIB2TASBgkrBgEEAYI3FQEE # BQIDAQABMCMGCSsGAQQBgjcVAgQWBBQqp1L+ZMSavoKRPEY1Kc8Q/y8E7jAdBgNV # HQ4EFgQUn6cVXQBeYl2D9OXSZacbUzUZ6XIwXAYDVR0gBFUwUzBRBgwrBgEEAYI3 # TIN9AQEwQTA/BggrBgEFBQcCARYzaHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3Br # aW9wcy9Eb2NzL1JlcG9zaXRvcnkuaHRtMBMGA1UdJQQMMAoGCCsGAQUFBwMIMBkG # CSsGAQQBgjcUAgQMHgoAUwB1AGIAQwBBMAsGA1UdDwQEAwIBhjAPBgNVHRMBAf8E # BTADAQH/MB8GA1UdIwQYMBaAFNX2VsuP6KJcYmjRPZSQW9fOmhjEMFYGA1UdHwRP # ME0wS6BJoEeGRWh0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9wa2kvY3JsL3Byb2R1 # Y3RzL01pY1Jvb0NlckF1dF8yMDEwLTA2LTIzLmNybDBaBggrBgEFBQcBAQROMEww # SgYIKwYBBQUHMAKGPmh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2kvY2VydHMv # TWljUm9vQ2VyQXV0XzIwMTAtMDYtMjMuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQCd # VX38Kq3hLB9nATEkW+Geckv8qW/qXBS2Pk5HZHixBpOXPTEztTnXwnE2P9pkbHzQ # dTltuw8x5MKP+2zRoZQYIu7pZmc6U03dmLq2HnjYNi6cqYJWAAOwBb6J6Gngugnu # e99qb74py27YP0h1AdkY3m2CDPVtI1TkeFN1JFe53Z/zjj3G82jfZfakVqr3lbYo # VSfQJL1AoL8ZthISEV09J+BAljis9/kpicO8F7BUhUKz/AyeixmJ5/ALaoHCgRlC # GVJ1ijbCHcNhcy4sa3tuPywJeBTpkbKpW99Jo3QMvOyRgNI95ko+ZjtPu4b6MhrZ # lvSP9pEB9s7GdP32THJvEKt1MMU0sHrYUP4KWN1APMdUbZ1jdEgssU5HLcEUBHG/ # ZPkkvnNtyo4JvbMBV0lUZNlz138eW0QBjloZkWsNn6Qo3GcZKCS6OEuabvshVGtq # RRFHqfG3rsjoiV5PndLQTHa1V1QJsWkBRH58oWFsc/4Ku+xBZj1p/cvBQUl+fpO+ # y/g75LcVv7TOPqUxUYS8vwLBgqJ7Fx0ViY1w/ue10CgaiQuPNtq6TPmb/wrpNPgk # NWcr4A245oyZ1uEi6vAnQj0llOZ0dFtq0Z4+7X6gMTN9vMvpe784cETRkPHIqzqK # Oghif9lwY1NNje6CbaUFEMFxBmoQtB1VM1izoXBm8qGCAs4wggI3AgEBMIH4oYHQ # pIHNMIHKMQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UE # BxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSUwIwYD # VQQLExxNaWNyb3NvZnQgQW1lcmljYSBPcGVyYXRpb25zMSYwJAYDVQQLEx1UaGFs # ZXMgVFNTIEVTTjpFNUE2LUUyN0MtNTkyRTElMCMGA1UEAxMcTWljcm9zb2Z0IFRp # bWUtU3RhbXAgU2VydmljZaIjCgEBMAcGBSsOAwIaAxUA0Y+CyLezGgVHWFNmKI1L # uE/hY6uggYMwgYCkfjB8MQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3Rv # bjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0 # aW9uMSYwJAYDVQQDEx1NaWNyb3NvZnQgVGltZS1TdGFtcCBQQ0EgMjAxMDANBgkq # hkiG9w0BAQUFAAIFAOXZQPkwIhgPMjAyMjAzMTQxMjIwMDlaGA8yMDIyMDMxNTEy # MjAwOVowdzA9BgorBgEEAYRZCgQBMS8wLTAKAgUA5dlA+QIBADAKAgEAAgIWMwIB # /zAHAgEAAgIRsjAKAgUA5dqSeQIBADA2BgorBgEEAYRZCgQCMSgwJjAMBgorBgEE # AYRZCgMCoAowCAIBAAIDB6EgoQowCAIBAAIDAYagMA0GCSqGSIb3DQEBBQUAA4GB # AKvf6Ff22jnbslCsEeXlrege1nTuL613cYpGdIhNJ2pCS0cktZHCCwybN8pj9o/J # vb7dSJutGeCgoT14y3XOIXcJOltXWZyjHcbH/iFy47JO2dYIBKZI/JFvp02h1o7D # 0uTScVUmBQAA5s7S8xBu+9zgN8UUnMeAA2CSpcYyKt3IMYIEDTCCBAkCAQEwgZMw # fDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1Jl # ZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEmMCQGA1UEAxMd # TWljcm9zb2Z0IFRpbWUtU3RhbXAgUENBIDIwMTACEzMAAAGVt/wN1uM3MSUAAQAA # AZUwDQYJYIZIAWUDBAIBBQCgggFKMBoGCSqGSIb3DQEJAzENBgsqhkiG9w0BCRAB # BDAvBgkqhkiG9w0BCQQxIgQgOT46aHcDIyYPVC4DXM+AM45cx7n+yrIlMhtSdUyG # U40wgfoGCyqGSIb3DQEJEAIvMYHqMIHnMIHkMIG9BCBc5kvhjZALe2mhIz/Qd7ke # VOmA/cC1dzKZT4ybLEkCxzCBmDCBgKR+MHwxCzAJBgNVBAYTAlVTMRMwEQYDVQQI # EwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3Nv # ZnQgQ29ycG9yYXRpb24xJjAkBgNVBAMTHU1pY3Jvc29mdCBUaW1lLVN0YW1wIFBD # QSAyMDEwAhMzAAABlbf8DdbjNzElAAEAAAGVMCIEIIOJbiwFEGPB/CANo61SCm9R # czJDns7Txd4gvLd8O794MA0GCSqGSIb3DQEBCwUABIICAHAAmNNtMGLidJcOJIa6 # sVr1cFc2uXiKsL9+/P9clO4cxqOi6nKH9ZpBWZ7x+lNvC6vuQpDArx7v2o9zvZDK # 2tT5k47oRIa92uZOCIIp+/H3rNSMr5OhHqhbMmrmTZBz4euap8kQPrSm+s7gEFIS # szuEwp/+HSRJHzVHvmrtQLoA51Mn8wOMUdw3grqb1Zl1dUAr+IUpreJXnScsd6Cf # p7VWP4oyMlS89k9db+mZ8zBoWJtEPhHBKW+t7DieYZDaUBDmkqFB7JY9F3C5Z90Y # kRJ7MGBslA7MKvbRK/oUmyWhCNP6ZrtVDk7PZmgnAC8Mp+3uelndWJq5DtA2oJWZ # haBVSbwe4hGgpRgjiQLdXhr8xH7mP/TXnt8j4LkNpVmlqA+aOhEFfv4gUs6dHamo # Em2oFBQSX+DzkKpmKzy1l65UcstvkmueFiu1N5x4kSe1JbWXWMcqUPcJrvjLUZlu # 0J2e292gYDpqcr1OQzDoGcsJIGhFWnI6ZFzXYcQS/uD3HxQxN3YwQJsOuPfw3zVh # dpUNr5hcG/ckfg+wLDECkKSqfplHXqGd77pGA6AoOsJa0AKAdX/CbV8pgpcUISJX # qTllPi+G/s7vJJfjEiaInV94euUHR+Rj4+KfXuaLC+AAeI1OXAFktQtaZHQ9taMu # RNW49/QqJReuk3PFLPUnhzIm # SIG # End signature block |