Public/Get-MsrcVulnerabilityReportHtml.ps1

Function Get-MsrcVulnerabilityReportHtml {
<#
 
    .SYNOPSIS
        Use a CVRF document to create a Vulnerability summary
 
    .DESCRIPTION
        Use a CVRF document to create a Vulnerability summary
 
    .PARAMETER Vulnerability
        The Vulnerability node of a CVRF document
 
    .PARAMETER ProductTree
        The ProductTree node of a CVRF document
 
    .EXAMPLE
        Get-MsrcCvrfDocument -ID 2016-Aug -ApiKey 'YOUR API KEY' |
        Get-MsrcVulnerabilityReportHtml |
        Out-File -FilePath Cvrf-CVE-Summary.html
 
        It creates a report with all the Vulnerabilities in a CVRF document
 
    .EXAMPLE
        $cvrfDoc = Get-MsrcCvrfDocument -ID 2016-Nov
        $cvrfDoc.Vulnerability | Foreach-Object {
 
            Write-Verbose "Dealing with CVE: $($_.CVE)" -Verbose
            Get-MsrcVulnerabilityReportHtml -Vulnerability $_ -ProductTree $cvrfDoc.ProductTree |
            Out-File -FilePath "Cvrf-$($vulnerability.CVE)-Summary.html"
        }
 
        It creates a report for each of the Vulnerabilities in a CVRF document
 
    .EXAMPLE
        $cvrfDoc = Get-MsrcCvrfDocument -ID 2016-Nov
        $HT = @{
            Vulnerability = ($cvrfDoc.Vulnerability | Where-Object {$_.CVE -In @('CVE-2016-0026','CVE-2016-7202','CVE-2016-3343')})
            ProductTree = $cvrfDoc.ProductTree
        }
        Get-MsrcVulnerabilityReportHtml @HT | Out-File -FilePath Cvrf-CVE-Summary.html
 
        It creates a report for specific Vulnerabilities in a CVRF document
#>

[CmdletBinding()]
[OutputType([string])]
Param(

    [Parameter(Mandatory,ValueFromPipelineByPropertyName)]
    $Vulnerability,

    [Parameter(Mandatory,ValueFromPipelineByPropertyName)]
    $ProductTree,

    [Switch]$ShowNoProgress
)
Begin{

    $HT = @{ ErrorAction = 'Stop'}

    try {
        $JsonMetrics = Get-Content -Path (Join-Path -Path $PSScriptRoot -ChildPath 'CVSS-Metrics.json' @HT) @HT |
        Out-String @HT| ConvertFrom-Json @HT

        $JsonDescriptions = Get-Content -Path (Join-Path -Path $PSScriptRoot -ChildPath 'CVSS-Descriptions.json'@HT) @HT |
        Out-String @HT| ConvertFrom-Json @HT
    } catch {
        Throw "Failed to get required json files content because $($_.Exception.Message)"
    }

    $css = @'
        body {
          background-color: white;
          font-family: sans-serif;
        }
 
        h1 {
          color: black;
        }
        table {
          font-family: Arial, Helvetica, sans-serif;
          border-collapse: collapse;
          width: 100%;
        }
 
        table td, th {
          border: 1px solid #ddd;
          padding: 8px;
        }
 
        table tr:nth-child(even){
          background-color: #ddd;
        }
 
        table tr:hover {background-color: #FAF0E6;}
 
        table th {
          padding-top: 12px;
          padding-bottom: 12px;
          text-align: left;
          background-color: #C0C0C0;
        }
'@

}
Process {
    $htmlDocumentTemplate = @'
<html>
<head>
    <!-- Created by module version {2} -->
    <!-- this is the css from the old bulletin site. Change this to better style your report to your liking -->
    <!-- <link rel="stylesheet" href="https://i-technet.sec.s-msft.com/Combined.css?resources=0:ImageSprite,0:TopicResponsive,0:TopicResponsive.MediaQueries,1:CodeSnippet,1:ProgrammingSelector,1:ExpandableCollapsibleArea,0:CommunityContent,1:TopicNotInScope,1:FeedViewerBasic,1:ImageSprite,2:Header.2,2:HeaderFooterSprite,2:Header.MediaQueries,2:Banner.MediaQueries,3:megabladeMenu.1,3:MegabladeMenu.MediaQueries,3:MegabladeMenuSpriteCluster,0:Breadcrumbs,0:Breadcrumbs.MediaQueries,0:ResponsiveToc,0:ResponsiveToc.MediaQueries,1:NavSidebar,0:LibraryMemberFilter,4:StandardRating,2:Footer.2,5:LinkList,2:Footer.MediaQueries,0:BaseResponsive,6:MsdnResponsive,0:Tables.MediaQueries,7:SkinnyRatingResponsive,7:SkinnyRatingV2;/Areas/Library/Content:0,/Areas/Epx/Content/Css:1,/Areas/Epx/Themes/TechNet/Content:2,/Areas/Epx/Themes/Shared/Content:3,/Areas/Global/Content:4,/Areas/Epx/Themes/Base/Content:5,/Areas/Library/Themes/Msdn/Content:6,/Areas/Library/Themes/TechNet/Content:7&amp;v=9192817066EC5D087D15C766A0430C95"> -->
 
    <!-- this style section changes cell widths in the exec header table so that the affected products at the end are wide enough to read -->
    <style>
    {3}
        #execHeader td:first-child {{ width: 10% ;}}
        #execHeader td:nth-child(5) {{ width: 37% ;}}
    </style>
 
    <!-- this section defines explicit width for all cells in the affected software tables. This is so the column width is the same across each product -->
    <style>
        .affected_software td:first-child {{ width: 34% ; }}
        .affected_software td:nth-child(2) {{ width: 14% ; }}
        .affected_software td:nth-child(3) {{ width: 6% ; }}
        .affected_software td:nth-child(4) {{ width: 6% ; }}
        .affected_software td:nth-child(5) {{ width: 7.5% ; }}
        .affected_software td:nth-child(6) {{ width: 28.5% ; }}
        .affected_software td:nth-child(7) {{ width: 4% ; }}
    </style>
 
    <!-- remove spacing between table of contents cells -->
    <style>
        #tableOfContents tr td {{ padding: 2px; }}
    </style>
 
    <style>
        .cvss_table tr:nth-child(odd) {{background: #ededed}}
    </style>
 
</head>
 
<body lang=EN-US link=blue>
<div id="documentWrapper" style="width: 90%; margin-left: auto; margin-right: auto;">
 
<h1 id="top">Microsoft CVE Summary</h1>
 
<p style="margin:0; padding:0">This report contains detail for the following vulnerabilities:</p>
<table id="tableOfContents" style="width:78%; margin-top:5">
 <tr>
  <th>CVE Issued by</th>
  <th>Tag</th>
  <th>CVE ID</th>
  <th>CVE Title</th>
 </tr>
 {0}
</table>
{1}
</div>
<br>
 </body>
</html>
'@

    $cveListHtmlObjects = @()

    $cveSectionHtml = ''

    $TotalCVE = $Vulnerability.Count
    $count = 0
    $Vulnerability | ForEach-Object -Process {
        $count++
        $v = $_
        $Progress = @{
            Activity  = 'Getting Msrc Vulnerability Html Report'
            Status = "$($count)/$($TotalCVE) => $($v.CVE) "
            PercentComplete = ($count/$TotalCVE*100)
            ErrorAction = 'SilentlyContinue'
        }
        if (-not($ShowNoProgress)) { Write-Progress @Progress }
        Write-Verbose -Message "Dealing with $($_.CVE)"

        #region CVE Summary Table

        $cveSummaryTableHtml = @'
<table id="execHeader" border=1 cellpadding=0 width="99%">
 <thead style="background-color: #ededed">
  <tr>
   <td><b>CVE ID</b></td>
   <td><b>Vulnerability Description</b></td>
   <td><b>Maximum Severity Rating</b></td>
   <td><b>Vulnerability Impact</b></td>
  </tr>
 </thead>
 <tr>
     <td>{0}</td>
     <td>{1}</td>
     <td>{2}</td>
     <td>{3}</td>
 </tr>
</table>
'@


        $MaximumSeverity = Switch (
            ($_.Threats | Where-Object {$_.Type -eq 3 }).Description.Value | Select-Object -Unique
        ) {
            'Critical'  { 'Critical'  ; break }
            'Important' { 'Important' ; break }
            'Moderate'  { 'Moderate'  ; break }
            'Low'       { 'Low'       ; break }
            'None'      { 'None'       ; break }
            default {
                Write-Warning "Could not determine the Maximum Severity from the Threats for $($v.CVE)"
                'Unknown'
            }
        }
        if (-not($MaximumSeverity)) {
            $MaximumSeverity = 'Unknown'
        }


        if ($ImpactValues = ($v.Threats | Where-Object { $_.Type -eq 0 }).Description.Value | Select-Object -Unique) {
            $impactColumn = $ImpactValues -join ',<br>'
        } else {
            Write-Warning -Message "Could not determine the Impact from the Threats for $($v.CVE)"
            $impactColumn = 'Unknown'
        }

        $vulnDescriptionColumnTemplate = @'
        <b>CVE Title:</b> {0}
        <br>
        <b>CVSS:</b> <br>{1}
        <br>
        <b>Executive Summary:</b> <br>{6}
        <br>
        <b>FAQ:</b><br>{2}
        <br>
        <b>Mitigations:</b><br>{3}
        <br>
        <b>Workarounds:</b><br>{4}
        <br>
        <b>Revision:</b><br>{5}
        <br>
'@


        $vulnDescriptionColumn = $vulnDescriptionColumnTemplate -f @(
            # $cveTitle
            $(
                if ($cveTitle = $v.Title.Value) {
                    $cveTitle
                } else {
                    Write-Warning -Message "Missing Title for $($v.CVE)"
                    ($cveTitle = 'Unknown')
                }
            ),
            # $cvssScoreSet
            $(
                #Scores among the affected products can be different. So, just find the most severe.
                $highestBase = 0.0
                $highestCvssScore = $null
                ForEach($score in $v.CvssScoreSets) {
                    if ($score.BaseScore -gt $highestBase) {
                        $highestBase = $score.BaseScore
                        $highestCvssScore = $score
                    }
                }

                if (($null -ne $highestCvssScore) -and ($null -ne $highestCvssScore.Vector) -and ($highestCvssScore.Vector.Split('/').Length -gt 1)) {
                    $cvssArray = $highestCvssScore.Vector.Split('/')

                    $cvssScoreTemplate = @'
                        <br> <b>{0}</b>
                        <table class="cvss_table" border=1 cellpadding=0 width="99%">
                            <thead>
                                <tr>
                                    <td colspan="7"><b>Base score metrics</b></td>
                                </tr>
                            </thead>
                            {1}
                        </table>
                        <table class="cvss_table" border=1 cellpadding=0 width="99%">
                            <thead>
                                <tr>
                                    <td colspan="7"><b>Temporal score metrics</b></td>
                                </tr>
                            </thead>
                            {2}
                        </table>
'@

                    $cvssScoreSet = $cvssScoreTemplate -f @(
                        $rowTemplate = '<tr><td title="{0}"><b>{1}</b></td><td title="{2}"><b>{3}</b></td></tr>'

                        $baseTags = 'AC', 'AV', 'A', 'C', 'I', 'PR', 'S', 'UI'
                        $temporalTags = 'E', 'RC', 'RL'
                        $baseRows = ''
                        $temporalRows = ''
                        for($i = 1; $i -lt $cvssArray.Length; $i++) {

                            $element = $cvssArray[$i]
                            $split0 = $element.Split(':')[0]

                            $metric = $JsonMetrics.$split0
                            $value = $JsonMetrics.$element

                            $metricDescription = $JsonDescriptions.$split0
                            $valueDescription = $JsonDescriptions.$element


                            $row = '<tr><td><b>' + $metric + '</b></td>'
                            $row += '<td><b>' + $value + '</b></td></tr>'

                            if (($null -ne $metricDescription) -and ($null -ne $valueDescription)) {
                                if ($baseTags.Contains($split0)) {
                                    $baseRows += $rowTemplate -f $metricDescription, $metric, $valueDescription, $value
                                } else {
                                    if ($temporalTags.Contains($split0)) {
                                        $temporalRows += $rowTemplate -f $metricDescription, $metric, $valueDescription, $value
                                    }
                                }
                            }
                        }

                        $formattedScore = '{0} Highest BaseScore:{1}/TemporalScore:{2}' -f $cvssArray[0], $highestCvssScore.BaseScore, $highestCvssScore.TemporalScore

                        $formattedScore, $baseRows, $temporalRows
                    )
                    $cvssScoreSet
                } else {
                    'None' -join '<br>'
                }
            ),
            # $cveFaq
            $(
                if ($cveFaq = ($v.Notes | Where-Object {$_.Title -eq 'FAQ'}).Value) {
                    $cveFaq -join '<br>'
                } else {
                    'None' -join '<br>'
                }
            ),
            # $cveMitigation
            $(
                if ($cveMitigation = $v.Remediations | Where-Object { $_.Type -eq 1 }) {
                    $cveMitigation.Description.Value -join '<br>'

                } else {
                    'None' -join '<br>'
                }
            ),
            # $cveWorkaround
            $(
                if ( $cveWorkaround = ($v.Remediations | Where-Object {$_.Type -EQ 0}).Description.Value) {
                    $cveWorkaround -join '<br>'
                } else {
                    'None' -join '<br>'
                }
            ),
            # $Revision
            $(
                $RevisionStrings = @()
                $v.RevisionHistory |
                ForEach-Object {
                    $_ | Add-Member -MemberType NoteProperty -Name RevisionDate -Value ([datetime]$_.Date) -Force -PassThru
                } | Sort-Object RevisionDate |
                ForEach-Object {
                 if ( $revision = $($_.Number, $_.RevisionDate.ToString('d'), $_.Description.Value) ) {
                        $RevisionStrings += $($revision -join '&nbsp&nbsp&nbsp&nbsp')
                    }
                }
                if ( $RevisionStrings ) {
                    $RevisionStrings -join '<br>'
                } else {
                    'Unknown' -join '<br>'
                }
            ),
            # Executive Summary
            $(
                if ($cveExecSummary = ($v.Notes | Where-Object {$_.Title -eq 'Description'}).Value) {
                    $cveExecSummary -join '<br>'
                } else {
                    'None' -join '<br>'
                }
            )
        )

        $cveSectionHtml += '<h1 id="{0}">{0} - {1}</h1> (<a href="#top">top</a>)' -f $v.CVE, $cveTitle

        #region CVE Summary List
        $cveListHtmlObjects +=  [PSCustomObject]@{
            Tag = $($v.Notes | Where-Object type -eq 7).Value
            CNA = $($v.Notes | Where-Object type -eq 8).Value
            CVEID = $v.CVE
            CVETitle = $cveTitle
        }
        #endregion

        $cveSectionHtml += $cveSummaryTableHtml -f @(
            @"
<a href=`"https://portal.msrc.microsoft.com/en-US/security-guidance/advisory/$($_.CVE)`">$($_.CVE)</a>
<br>
<a href=`"https://cve.mitre.org/cgi-bin/cvename.cgi?name=$($_.CVE)`">MITRE</a>
<br>
<a href=`"https://web.nvd.nist.gov/view/vuln/detail?vulnId=$($_.CVE)`">NVD</a>
<p>Issuing CNA: $($($v.Notes | Where-Object type -eq 8).Value)</p>
"@
,
            $vulnDescriptionColumn,
            $MaximumSeverity,
            $impactColumn
        )
        #endregion

        #region Exploitability Index Table
        $exploitabilityIndexTableHtml = @'
<h2>Exploitability Index</h2>
 
<p>The following table provides an exploitability assessment of each of the vulnerabilities addressed this month. The vulnerabilities are listed in order of bulletin ID then CVE ID. Only vulnerabilities that have a severity rating of Critical or Important in the bulletins are included.</p>
 
<table border=1 cellpadding=0 width="99%">
 <thead style="background-color: #ededed">
  <tr>
   <td><b>Exploitability Assessment</b></td>
   <td><b>Publicly Disclosed</b></td>
   <td><b>Exploited</b></td>
  </tr>
 </thead>
 <tr>
     <td>{0}</td>
     <td>{1}</td>
     <td>{2}</td>
 </tr>
</table>
'@


        if ($ExploitStatusThreat = ($v.Threats | Where-Object { $_.Type -eq 1 } | Select-Object -Last 1).Description.Value) {
            $ExploitStatus = Get-MsrcThreatExploitStatus -ExploitStatusString $ExploitStatusThreat
        } else {
            Write-Warning -Message "Missing ExploitStatus for $($v.CVE)"
        }

        $cveSectionHtml += $exploitabilityIndexTableHtml -f @(
            # $LatestSoftwareRelease
            $(
                if ($ExploitStatus.LatestSoftwareRelease) {
                    $ExploitStatus.LatestSoftwareRelease
                } else {
                    'Not Found'
                }
            ),
            # $publicly disclosed
            $(
                if ($ExploitStatus.PubliclyDisclosed) {
                    $ExploitStatus.PubliclyDisclosed
                } else {
                    'Not Found'
                }
            ),
            # $Exploited
            $(
                if ($ExploitStatus.Exploited) {
                    $ExploitStatus.Exploited
                } else {
                    'Not Found'
                }
            )
        )
        #endregion

        #region Affected Software Table

        $affectedSoftwareTableTemplate = @'
<table class="affected_software" border=1 cellpadding=0 width="99%">
    <thead style="background-color: #ededed">
        <tr>
            <td colspan="9"><b>{0}</b></td>
        </tr>
    </thead>
        <tr>
            <td><b>Product</b></td>
            <td><b>KB Article</b></td>
            <td><b>Severity</b></td>
            <td><b>Impact</b></td>
            <td><b>Supercedence</b></td>
            <td><b>CVSS Score Set</b></td>
            <td><b>Fixed Build</b></td>
            <td><b>Restart Required</b></td>
            <td><b>Known Issue</b></td>
        </tr>
        {1}
</table>
<br>
'@


        $affectedSoftwareRowTemplate = @'
        <tr>
                <td>{0}</td>
                <td>{1}</td>
                <td>{2}</td>
                <td>{3}</td>
                <td>{4}</td>
                <td>{5}</td>
                <td>{6}</td>
                <td>{7}</td>
                <td>{8}</td>
        </tr>
'@


        $cveSectionHtml += @'
<h2>Affected Software</h2>
 
<p>The following tables list the affected software details for the vulnerability.</p>
'@

        $affectedSoftware = Get-MsrcCvrfAffectedSoftware -Vulnerability $v -ProductTree $ProductTree
        $affectedSoftwareTableHtml = ''


        $affectedSoftware.FullProductName | Sort-Object -Unique | ForEach-Object {

            $PN = $_

            $affectedSoftware | Where-Object {$_.FullProductName -eq $PN} | ForEach-Object {

                $affectedSoftwareTableHtml += $affectedSoftwareRowTemplate -f @(
                    $PN,
                    $(
                        $_.KBArticle | Get-KBDownloadUrl
                    ),
                    $(
                        if (-not($_.Severity)) {
                            'Unknown'
                        } else {
                            $($_.Severity | Select-Object -Unique) -join '<br />'
                        }
                    ),
                    $(
                        if (-not($_.Impact)) {
                            'Unknown'
                        } else {
                            $($_.Impact | Select-Object -Unique) -join '<br />'
                        }
                    ),
                    $(
                        if (-not($_.Supercedence)) {
                            'None'
                        } else {
                            $($_.Supercedence | Select-Object -Unique) -join '<br />'
                        }
                    ),
                    $(

                        'Base: {0}<br />Temporal: {1}<br />Vector: {2}<br />' -f (
                            $(
                                if(-not($_.CvssScoreSet.base)) {
                                    'N/A'
                                } else{
                                    $_.CvssScoreSet.base
                                }
                            )
                        ),
                        (
                            $(
                                if(-not($_.CvssScoreSet.temporal)) {
                                    'N/A'
                                } else {
                                    $_.CvssScoreSet.temporal
                                }
                            )
                        ),
                        (
                            $(
                                if(-not($_.CvssScoreSet.vector)) {
                                    'N/A'
                                } else {
                                    $_.CvssScoreSet.vector
                                }
                            )
                        )
                    ),
                    $(
                        if (-not($_.FixedBuild)) {
                            'Unknown'
                        } else {
                            $($_.FixedBuild | Select-Object -Unique) -join '<br />'
                        }
                    ),
                    $(
                        if (-not($_.RestartRequired)) {
                            'Unknown'
                        } else {
                            $($_.RestartRequired | Select-Object -Unique) -join '<br />'
                        }
                    ),
                    $(
                        if (-not($_.'Known Issue')) {
                            'None'
                        } else {
                            $_.'Known Issue' | Get-KBDownloadUrl
                        }
                    )
                )
            }
        }

        $cveSectionHtml += $affectedSoftwareTableTemplate -f @(
            $v.CVE,
            $affectedSoftwareTableHtml
        )
        #endregion

        #region Acknowledgments Table
        $acknowledgmentsTableTemplate = @'
<h2>Acknowledgements</h2>
<table border=1 cellpadding=0 width="99%">
 <thead style="background-color: #ededed">
    <tr>
        <td><b>CVE ID</b></td>
        <td><b>Acknowledgements</b></td>
    </tr>
    </thead>
 <tr>
     <td>{0}</td>
     <td>{1}</td>
 </tr>
</table>
'@


        if ($v.Acknowledgments) {
            $ackVal = ''
            $v.Acknowledgments | ForEach-Object {

                if ($_.Name.Value) {
                    $ackVal += $_.Name.Value
                    $ackVal += '<br>'
                }
                if ($_.URL) {
                    $ackVal += $_.URL
                    $ackVal += '<br>'
                }
                $ackVal += '<br><br>'
            }
        } else {
            Write-Warning -Message "No Acknowledgments for $($v.CVE)"
            $ackVal = 'None'
        }

        $cveSectionHtml += $acknowledgmentsTableTemplate -f @(
            $v.CVE,
            $ackVal
        )
    } -End {
        Write-Progress -Activity 'Getting Msrc Vulnerability Html Report' -Completed
    }
    #endregion

    (
        $htmlDocumentTemplate -f @(
            #sort the objects and put them into the table of contents format before injecting into the document template:
            ($( $cveListHtmlObjects | Sort-Object -Property Tag |
            ForEach-Object {
            '<tr><td>{3}</td><td>{0}</td> <td><a href="#{1}">{1}</a></td> <td>{2}</td></tr>' -f $_.Tag,$_.CVEID,$_.CVETitle,$_.CNA
            }) -join "`n"),
            $cveSectionHtml,
            "$($MyInvocation.MyCommand.Version.ToString())",
            $css

        )
    )
}
End {}
}

# SIG # Begin signature block
# MIInuQYJKoZIhvcNAQcCoIInqjCCJ6YCAQExDzANBglghkgBZQMEAgEFADB5Bgor
# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG
# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCAHDyNA8l0JkIlg
# 7stCU7K30JwiZC1cpF6HTyPayj8MrKCCDYEwggX/MIID56ADAgECAhMzAAACUosz
# qviV8znbAAAAAAJSMA0GCSqGSIb3DQEBCwUAMH4xCzAJBgNVBAYTAlVTMRMwEQYD
# VQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNy
# b3NvZnQgQ29ycG9yYXRpb24xKDAmBgNVBAMTH01pY3Jvc29mdCBDb2RlIFNpZ25p
# bmcgUENBIDIwMTEwHhcNMjEwOTAyMTgzMjU5WhcNMjIwOTAxMTgzMjU5WjB0MQsw
# CQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9u
# ZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMR4wHAYDVQQDExVNaWNy
# b3NvZnQgQ29ycG9yYXRpb24wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB
# AQDQ5M+Ps/X7BNuv5B/0I6uoDwj0NJOo1KrVQqO7ggRXccklyTrWL4xMShjIou2I
# sbYnF67wXzVAq5Om4oe+LfzSDOzjcb6ms00gBo0OQaqwQ1BijyJ7NvDf80I1fW9O
# L76Kt0Wpc2zrGhzcHdb7upPrvxvSNNUvxK3sgw7YTt31410vpEp8yfBEl/hd8ZzA
# v47DCgJ5j1zm295s1RVZHNp6MoiQFVOECm4AwK2l28i+YER1JO4IplTH44uvzX9o
# RnJHaMvWzZEpozPy4jNO2DDqbcNs4zh7AWMhE1PWFVA+CHI/En5nASvCvLmuR/t8
# q4bc8XR8QIZJQSp+2U6m2ldNAgMBAAGjggF+MIIBejAfBgNVHSUEGDAWBgorBgEE
# AYI3TAgBBggrBgEFBQcDAzAdBgNVHQ4EFgQUNZJaEUGL2Guwt7ZOAu4efEYXedEw
# UAYDVR0RBEkwR6RFMEMxKTAnBgNVBAsTIE1pY3Jvc29mdCBPcGVyYXRpb25zIFB1
# ZXJ0byBSaWNvMRYwFAYDVQQFEw0yMzAwMTIrNDY3NTk3MB8GA1UdIwQYMBaAFEhu
# ZOVQBdOCqhc3NyK1bajKdQKVMFQGA1UdHwRNMEswSaBHoEWGQ2h0dHA6Ly93d3cu
# bWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY0NvZFNpZ1BDQTIwMTFfMjAxMS0w
# Ny0wOC5jcmwwYQYIKwYBBQUHAQEEVTBTMFEGCCsGAQUFBzAChkVodHRwOi8vd3d3
# Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2NlcnRzL01pY0NvZFNpZ1BDQTIwMTFfMjAx
# MS0wNy0wOC5jcnQwDAYDVR0TAQH/BAIwADANBgkqhkiG9w0BAQsFAAOCAgEAFkk3
# uSxkTEBh1NtAl7BivIEsAWdgX1qZ+EdZMYbQKasY6IhSLXRMxF1B3OKdR9K/kccp
# kvNcGl8D7YyYS4mhCUMBR+VLrg3f8PUj38A9V5aiY2/Jok7WZFOAmjPRNNGnyeg7
# l0lTiThFqE+2aOs6+heegqAdelGgNJKRHLWRuhGKuLIw5lkgx9Ky+QvZrn/Ddi8u
# TIgWKp+MGG8xY6PBvvjgt9jQShlnPrZ3UY8Bvwy6rynhXBaV0V0TTL0gEx7eh/K1
# o8Miaru6s/7FyqOLeUS4vTHh9TgBL5DtxCYurXbSBVtL1Fj44+Od/6cmC9mmvrti
# yG709Y3Rd3YdJj2f3GJq7Y7KdWq0QYhatKhBeg4fxjhg0yut2g6aM1mxjNPrE48z
# 6HWCNGu9gMK5ZudldRw4a45Z06Aoktof0CqOyTErvq0YjoE4Xpa0+87T/PVUXNqf
# 7Y+qSU7+9LtLQuMYR4w3cSPjuNusvLf9gBnch5RqM7kaDtYWDgLyB42EfsxeMqwK
# WwA+TVi0HrWRqfSx2olbE56hJcEkMjOSKz3sRuupFCX3UroyYf52L+2iVTrda8XW
# esPG62Mnn3T8AuLfzeJFuAbfOSERx7IFZO92UPoXE1uEjL5skl1yTZB3MubgOA4F
# 8KoRNhviFAEST+nG8c8uIsbZeb08SeYQMqjVEmkwggd6MIIFYqADAgECAgphDpDS
# AAAAAAADMA0GCSqGSIb3DQEBCwUAMIGIMQswCQYDVQQGEwJVUzETMBEGA1UECBMK
# V2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0
# IENvcnBvcmF0aW9uMTIwMAYDVQQDEylNaWNyb3NvZnQgUm9vdCBDZXJ0aWZpY2F0
# ZSBBdXRob3JpdHkgMjAxMTAeFw0xMTA3MDgyMDU5MDlaFw0yNjA3MDgyMTA5MDla
# MH4xCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdS
# ZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xKDAmBgNVBAMT
# H01pY3Jvc29mdCBDb2RlIFNpZ25pbmcgUENBIDIwMTEwggIiMA0GCSqGSIb3DQEB
# AQUAA4ICDwAwggIKAoICAQCr8PpyEBwurdhuqoIQTTS68rZYIZ9CGypr6VpQqrgG
# OBoESbp/wwwe3TdrxhLYC/A4wpkGsMg51QEUMULTiQ15ZId+lGAkbK+eSZzpaF7S
# 35tTsgosw6/ZqSuuegmv15ZZymAaBelmdugyUiYSL+erCFDPs0S3XdjELgN1q2jz
# y23zOlyhFvRGuuA4ZKxuZDV4pqBjDy3TQJP4494HDdVceaVJKecNvqATd76UPe/7
# 4ytaEB9NViiienLgEjq3SV7Y7e1DkYPZe7J7hhvZPrGMXeiJT4Qa8qEvWeSQOy2u
# M1jFtz7+MtOzAz2xsq+SOH7SnYAs9U5WkSE1JcM5bmR/U7qcD60ZI4TL9LoDho33
# X/DQUr+MlIe8wCF0JV8YKLbMJyg4JZg5SjbPfLGSrhwjp6lm7GEfauEoSZ1fiOIl
# XdMhSz5SxLVXPyQD8NF6Wy/VI+NwXQ9RRnez+ADhvKwCgl/bwBWzvRvUVUvnOaEP
# 6SNJvBi4RHxF5MHDcnrgcuck379GmcXvwhxX24ON7E1JMKerjt/sW5+v/N2wZuLB
# l4F77dbtS+dJKacTKKanfWeA5opieF+yL4TXV5xcv3coKPHtbcMojyyPQDdPweGF
# RInECUzF1KVDL3SV9274eCBYLBNdYJWaPk8zhNqwiBfenk70lrC8RqBsmNLg1oiM
# CwIDAQABo4IB7TCCAekwEAYJKwYBBAGCNxUBBAMCAQAwHQYDVR0OBBYEFEhuZOVQ
# BdOCqhc3NyK1bajKdQKVMBkGCSsGAQQBgjcUAgQMHgoAUwB1AGIAQwBBMAsGA1Ud
# DwQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFHItOgIxkEO5FAVO
# 4eqnxzHRI4k0MFoGA1UdHwRTMFEwT6BNoEuGSWh0dHA6Ly9jcmwubWljcm9zb2Z0
# LmNvbS9wa2kvY3JsL3Byb2R1Y3RzL01pY1Jvb0NlckF1dDIwMTFfMjAxMV8wM18y
# Mi5jcmwwXgYIKwYBBQUHAQEEUjBQME4GCCsGAQUFBzAChkJodHRwOi8vd3d3Lm1p
# Y3Jvc29mdC5jb20vcGtpL2NlcnRzL01pY1Jvb0NlckF1dDIwMTFfMjAxMV8wM18y
# Mi5jcnQwgZ8GA1UdIASBlzCBlDCBkQYJKwYBBAGCNy4DMIGDMD8GCCsGAQUFBwIB
# FjNodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2RvY3MvcHJpbWFyeWNw
# cy5odG0wQAYIKwYBBQUHAgIwNB4yIB0ATABlAGcAYQBsAF8AcABvAGwAaQBjAHkA
# XwBzAHQAYQB0AGUAbQBlAG4AdAAuIB0wDQYJKoZIhvcNAQELBQADggIBAGfyhqWY
# 4FR5Gi7T2HRnIpsLlhHhY5KZQpZ90nkMkMFlXy4sPvjDctFtg/6+P+gKyju/R6mj
# 82nbY78iNaWXXWWEkH2LRlBV2AySfNIaSxzzPEKLUtCw/WvjPgcuKZvmPRul1LUd
# d5Q54ulkyUQ9eHoj8xN9ppB0g430yyYCRirCihC7pKkFDJvtaPpoLpWgKj8qa1hJ
# Yx8JaW5amJbkg/TAj/NGK978O9C9Ne9uJa7lryft0N3zDq+ZKJeYTQ49C/IIidYf
# wzIY4vDFLc5bnrRJOQrGCsLGra7lstnbFYhRRVg4MnEnGn+x9Cf43iw6IGmYslmJ
# aG5vp7d0w0AFBqYBKig+gj8TTWYLwLNN9eGPfxxvFX1Fp3blQCplo8NdUmKGwx1j
# NpeG39rz+PIWoZon4c2ll9DuXWNB41sHnIc+BncG0QaxdR8UvmFhtfDcxhsEvt9B
# xw4o7t5lL+yX9qFcltgA1qFGvVnzl6UJS0gQmYAf0AApxbGbpT9Fdx41xtKiop96
# eiL6SJUfq/tHI4D1nvi/a7dLl+LrdXga7Oo3mXkYS//WsyNodeav+vyL6wuA6mk7
# r/ww7QRMjt/fdW1jkT3RnVZOT7+AVyKheBEyIXrvQQqxP/uozKRdwaGIm1dxVk5I
# RcBCyZt2WwqASGv9eZ/BvW1taslScxMNelDNMYIZjjCCGYoCAQEwgZUwfjELMAkG
# A1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQx
# HjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEoMCYGA1UEAxMfTWljcm9z
# b2Z0IENvZGUgU2lnbmluZyBQQ0EgMjAxMQITMwAAAlKLM6r4lfM52wAAAAACUjAN
# BglghkgBZQMEAgEFAKCBrjAZBgkqhkiG9w0BCQMxDAYKKwYBBAGCNwIBBDAcBgor
# BgEEAYI3AgELMQ4wDAYKKwYBBAGCNwIBFTAvBgkqhkiG9w0BCQQxIgQg7vp8FDxQ
# oTqs5GDGAWKnjJYIoo4Lqdto4EgpJ/TBiUcwQgYKKwYBBAGCNwIBDDE0MDKgFIAS
# AE0AaQBjAHIAbwBzAG8AZgB0oRqAGGh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbTAN
# BgkqhkiG9w0BAQEFAASCAQCCmFwU2i4Prfu2t/ecIpwuyRgVBO4k1svMoSjEsHka
# 7cTBWKrgQV5/PSTZGqOGNklxukwBQSWJyyGhE1Q4EznQjCYGF8VhsXQHc61jbSpQ
# +iZ3Lflv4z//rk+90kiCTzkDzCtoEJE4wdes8ma1IhR/erTgjXBMnto+v4wdoRRv
# XsEpRL+kE9YjmGf8HTxufEAgkIhLKV0Ogq3ndLywSn496uUgh/QNF6rCxoNSArCU
# +kku6eMwchlij/jBUc7EI49A8I/JaEjONhIVCP2VwfddqhHf66pXN/JVIYQqtgpR
# CfdST13K0fyLp8XhjmhM+xKr255bcEhILm3bjOtsJQ33oYIXGDCCFxQGCisGAQQB
# gjcDAwExghcEMIIXAAYJKoZIhvcNAQcCoIIW8TCCFu0CAQMxDzANBglghkgBZQME
# AgEFADCCAVgGCyqGSIb3DQEJEAEEoIIBRwSCAUMwggE/AgEBBgorBgEEAYRZCgMB
# MDEwDQYJYIZIAWUDBAIBBQAEIDhB7+Fu+2LZ6gwRwecbaEOJAAD2F4HwU3y5y0Mm
# 1phCAgZh/VUJaiAYEjIwMjIwMjE3MTkyMDI5Ljc2WjAEgAIB9KCB2KSB1TCB0jEL
# MAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1v
# bmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEtMCsGA1UECxMkTWlj
# cm9zb2Z0IElyZWxhbmQgT3BlcmF0aW9ucyBMaW1pdGVkMSYwJAYDVQQLEx1UaGFs
# ZXMgVFNTIEVTTjpGQzQxLTRCRDQtRDIyMDElMCMGA1UEAxMcTWljcm9zb2Z0IFRp
# bWUtU3RhbXAgU2VydmljZaCCEWgwggcUMIIE/KADAgECAhMzAAABjlnbRgCoEJTM
# AAEAAAGOMA0GCSqGSIb3DQEBCwUAMHwxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpX
# YXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQg
# Q29ycG9yYXRpb24xJjAkBgNVBAMTHU1pY3Jvc29mdCBUaW1lLVN0YW1wIFBDQSAy
# MDEwMB4XDTIxMTAyODE5Mjc0NVoXDTIzMDEyNjE5Mjc0NVowgdIxCzAJBgNVBAYT
# AlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYD
# VQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xLTArBgNVBAsTJE1pY3Jvc29mdCBJ
# cmVsYW5kIE9wZXJhdGlvbnMgTGltaXRlZDEmMCQGA1UECxMdVGhhbGVzIFRTUyBF
# U046RkM0MS00QkQ0LUQyMjAxJTAjBgNVBAMTHE1pY3Jvc29mdCBUaW1lLVN0YW1w
# IFNlcnZpY2UwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCqIwKro4zM
# trnCu1x/sF/1/VZdb2Smps4HOA8m9oYutkbu3CDCpNFZ/UWSOkkoE4blA8hHLtro
# gVUDLRb60FoVfgifgNsF/a0a5vJj36FFT6FF7A8kfkJg6+k+HvsV8Yzrf46XBFen
# lgRHq0LRZEqfeavJam3gLAAO4a/QsPZCOeGGC1FWJ2yIOef35ouMy41qlSGy0aoK
# vslxBm3Rms9Qdb9OpMnKZ5TV6qA2isRtN53pRDItpNUCaFc1BcMKF9rnbqdbtFDs
# vi1df0tzSiC6IJKQ+W7l2s0Do0zzP5RdA4AfFV8hBeaL5jdJXaGvZ1zFvL2eVPNi
# 9/hkOvlalzC3u1N1EgmJtcexdYwquY7OKWIYNOgvHfhr9y1kTg04ueWspBY31kb4
# 7HnNFqsrUSFKFqEzS5A2FvoEmOnf5zR43MwUnaotmoOnb/diXlD7iT4wMctOKk/p
# UF3Fx1V93iaCtVPHdp87ko1+AyeAYZ+FJrAatpFbbwSGss6ymYjGKL3YTu+Odwna
# 1yOEsKMECtWk+HdxkbmDdlXLmKIBqgNqzCk2CcwUArlSfWt4r4wWE+L2Iye9Q/C1
# MMMm3lgQPkMBPeYFTGnlAfe3tGFnAAk0tYu2lN4YXu5vzWxIpi/Zqt1rMB71ctLX
# S1Xag4+tyeIYnOVdbtU+/GpA3F7yUIMDbQIDAQABo4IBNjCCATIwHQYDVR0OBBYE
# FOxB+TP2BPjg3/kby80drJ6n5pXkMB8GA1UdIwQYMBaAFJ+nFV0AXmJdg/Tl0mWn
# G1M1GelyMF8GA1UdHwRYMFYwVKBSoFCGTmh0dHA6Ly93d3cubWljcm9zb2Z0LmNv
# bS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRpbWUtU3RhbXAlMjBQQ0ElMjAyMDEw
# KDEpLmNybDBsBggrBgEFBQcBAQRgMF4wXAYIKwYBBQUHMAKGUGh0dHA6Ly93d3cu
# bWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVGltZS1TdGFt
# cCUyMFBDQSUyMDIwMTAoMSkuY3J0MAwGA1UdEwEB/wQCMAAwEwYDVR0lBAwwCgYI
# KwYBBQUHAwgwDQYJKoZIhvcNAQELBQADggIBADVQr3HMh5OUqFJsufRt6RHmBiHp
# sHVdCmW4KoIDXmyRnftSKVoUnDz4aSUMvOU2FI/aY6I7NXIKrySSmqd9RzTVloF7
# NDGDvup6+PaIzKDf1gl96IIiHFg4W6DB6lis87wyUH+i579WEiINvV41hOU9Ka/e
# lqWyC2StvSijQXS5aZfgRBUYpGjRQQ21l61UjFrQn0OlR2NBY94SH1wQz5GATbrn
# DlYBVv5Y3HSJaIXiJNsKatZpUQ5f3Z02oGb1tPVTucbA3kLKCk0CARpietMzHU3g
# CPE5sAIM3kN28aW787QN8xZVzqqTqIoMULpaldBKQyWuVcgj82Gn7T6ehTq18Skc
# ou3t9ib2h/mL9CiZwLCj96SI4KNiS2nf3ei+gLU7a4u1sucxWUTmtoEsE1Jsg1np
# AvGIDjWVedVUsjMOKFQvwxT0Iy8bix1uGTYVfzO+uw/k94EjDV9p6cxm7PRXdRcK
# 1Tk6THl+aKhaKItlIKLWWNrFf4ETBCKKcKL68Tn1tNgjkVu5Hy0O4YuJW78lKlUV
# evNYw/YqfXWwIsAYSOolhSY7W1Fjb0p3sdwiPaeJIHQ9A4KNiWcKfLCcOKepLUJe
# 9GyKyNWVLVGnhOa6Sz6kbGIwbMXnzNxv6GgUrI424vdv62DFMDPewXcFVf26T0zk
# X44Sh7IvIZ8t6Q0CMIIHcTCCBVmgAwIBAgITMwAAABXF52ueAptJmQAAAAAAFTAN
# BgkqhkiG9w0BAQsFADCBiDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0
# b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3Jh
# dGlvbjEyMDAGA1UEAxMpTWljcm9zb2Z0IFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9y
# aXR5IDIwMTAwHhcNMjEwOTMwMTgyMjI1WhcNMzAwOTMwMTgzMjI1WjB8MQswCQYD
# VQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEe
# MBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSYwJAYDVQQDEx1NaWNyb3Nv
# ZnQgVGltZS1TdGFtcCBQQ0EgMjAxMDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCC
# AgoCggIBAOThpkzntHIhC3miy9ckeb0O1YLT/e6cBwfSqWxOdcjKNVf2AX9sSuDi
# vbk+F2Az/1xPx2b3lVNxWuJ+Slr+uDZnhUYjDLWNE893MsAQGOhgfWpSg0S3po5G
# awcU88V29YZQ3MFEyHFcUTE3oAo4bo3t1w/YJlN8OWECesSq/XJprx2rrPY2vjUm
# ZNqYO7oaezOtgFt+jBAcnVL+tuhiJdxqD89d9P6OU8/W7IVWTe/dvI2k45GPsjks
# UZzpcGkNyjYtcI4xyDUoveO0hyTD4MmPfrVUj9z6BVWYbWg7mka97aSueik3rMvr
# g0XnRm7KMtXAhjBcTyziYrLNueKNiOSWrAFKu75xqRdbZ2De+JKRHh09/SDPc31B
# mkZ1zcRfNN0Sidb9pSB9fvzZnkXftnIv231fgLrbqn427DZM9ituqBJR6L8FA6PR
# c6ZNN3SUHDSCD/AQ8rdHGO2n6Jl8P0zbr17C89XYcz1DTsEzOUyOArxCaC4Q6oRR
# RuLRvWoYWmEBc8pnol7XKHYC4jMYctenIPDC+hIK12NvDMk2ZItboKaDIV1fMHSR
# lJTYuVD5C4lh8zYGNRiER9vcG9H9stQcxWv2XFJRXRLbJbqvUAV6bMURHXLvjflS
# xIUXk8A8FdsaN8cIFRg/eKtFtvUeh17aj54WcmnGrnu3tz5q4i6tAgMBAAGjggHd
# MIIB2TASBgkrBgEEAYI3FQEEBQIDAQABMCMGCSsGAQQBgjcVAgQWBBQqp1L+ZMSa
# voKRPEY1Kc8Q/y8E7jAdBgNVHQ4EFgQUn6cVXQBeYl2D9OXSZacbUzUZ6XIwXAYD
# VR0gBFUwUzBRBgwrBgEEAYI3TIN9AQEwQTA/BggrBgEFBQcCARYzaHR0cDovL3d3
# dy5taWNyb3NvZnQuY29tL3BraW9wcy9Eb2NzL1JlcG9zaXRvcnkuaHRtMBMGA1Ud
# JQQMMAoGCCsGAQUFBwMIMBkGCSsGAQQBgjcUAgQMHgoAUwB1AGIAQwBBMAsGA1Ud
# DwQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFNX2VsuP6KJcYmjR
# PZSQW9fOmhjEMFYGA1UdHwRPME0wS6BJoEeGRWh0dHA6Ly9jcmwubWljcm9zb2Z0
# LmNvbS9wa2kvY3JsL3Byb2R1Y3RzL01pY1Jvb0NlckF1dF8yMDEwLTA2LTIzLmNy
# bDBaBggrBgEFBQcBAQROMEwwSgYIKwYBBQUHMAKGPmh0dHA6Ly93d3cubWljcm9z
# b2Z0LmNvbS9wa2kvY2VydHMvTWljUm9vQ2VyQXV0XzIwMTAtMDYtMjMuY3J0MA0G
# CSqGSIb3DQEBCwUAA4ICAQCdVX38Kq3hLB9nATEkW+Geckv8qW/qXBS2Pk5HZHix
# BpOXPTEztTnXwnE2P9pkbHzQdTltuw8x5MKP+2zRoZQYIu7pZmc6U03dmLq2HnjY
# Ni6cqYJWAAOwBb6J6Gngugnue99qb74py27YP0h1AdkY3m2CDPVtI1TkeFN1JFe5
# 3Z/zjj3G82jfZfakVqr3lbYoVSfQJL1AoL8ZthISEV09J+BAljis9/kpicO8F7BU
# hUKz/AyeixmJ5/ALaoHCgRlCGVJ1ijbCHcNhcy4sa3tuPywJeBTpkbKpW99Jo3QM
# vOyRgNI95ko+ZjtPu4b6MhrZlvSP9pEB9s7GdP32THJvEKt1MMU0sHrYUP4KWN1A
# PMdUbZ1jdEgssU5HLcEUBHG/ZPkkvnNtyo4JvbMBV0lUZNlz138eW0QBjloZkWsN
# n6Qo3GcZKCS6OEuabvshVGtqRRFHqfG3rsjoiV5PndLQTHa1V1QJsWkBRH58oWFs
# c/4Ku+xBZj1p/cvBQUl+fpO+y/g75LcVv7TOPqUxUYS8vwLBgqJ7Fx0ViY1w/ue1
# 0CgaiQuPNtq6TPmb/wrpNPgkNWcr4A245oyZ1uEi6vAnQj0llOZ0dFtq0Z4+7X6g
# MTN9vMvpe784cETRkPHIqzqKOghif9lwY1NNje6CbaUFEMFxBmoQtB1VM1izoXBm
# 8qGCAtcwggJAAgEBMIIBAKGB2KSB1TCB0jELMAkGA1UEBhMCVVMxEzARBgNVBAgT
# Cldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29m
# dCBDb3Jwb3JhdGlvbjEtMCsGA1UECxMkTWljcm9zb2Z0IElyZWxhbmQgT3BlcmF0
# aW9ucyBMaW1pdGVkMSYwJAYDVQQLEx1UaGFsZXMgVFNTIEVTTjpGQzQxLTRCRDQt
# RDIyMDElMCMGA1UEAxMcTWljcm9zb2Z0IFRpbWUtU3RhbXAgU2VydmljZaIjCgEB
# MAcGBSsOAwIaAxUAPWIr6k9OEeqClrnGw+aJiu5ZW4yggYMwgYCkfjB8MQswCQYD
# VQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEe
# MBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSYwJAYDVQQDEx1NaWNyb3Nv
# ZnQgVGltZS1TdGFtcCBQQ0EgMjAxMDANBgkqhkiG9w0BAQUFAAIFAOW49oMwIhgP
# MjAyMjAyMTgwMDI5NTVaGA8yMDIyMDIxOTAwMjk1NVowdzA9BgorBgEEAYRZCgQB
# MS8wLTAKAgUA5bj2gwIBADAKAgEAAgILTgIB/zAHAgEAAgISgjAKAgUA5bpIAwIB
# ADA2BgorBgEEAYRZCgQCMSgwJjAMBgorBgEEAYRZCgMCoAowCAIBAAIDB6EgoQow
# CAIBAAIDAYagMA0GCSqGSIb3DQEBBQUAA4GBAAjE3J/LxI5Cx6ANQJoKV5u3m7WE
# F4BfmYx+A936qYQztOktsKMVfUVq2AZSrgTzPAUXSodSRyaIIbx0z/9qdJDkH6d/
# 98+1SfyxwqLpvrIgH77AWkSHX3HQqQ8ylDpB2tkWtV4hNDeefTkGGP4MrLIb37RD
# jwDDytBM/yhNfAhFMYIEDTCCBAkCAQEwgZMwfDELMAkGA1UEBhMCVVMxEzARBgNV
# BAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jv
# c29mdCBDb3Jwb3JhdGlvbjEmMCQGA1UEAxMdTWljcm9zb2Z0IFRpbWUtU3RhbXAg
# UENBIDIwMTACEzMAAAGOWdtGAKgQlMwAAQAAAY4wDQYJYIZIAWUDBAIBBQCgggFK
# MBoGCSqGSIb3DQEJAzENBgsqhkiG9w0BCRABBDAvBgkqhkiG9w0BCQQxIgQg64uP
# t6WKSmaRU1soPyPxAd9dXPJIoXITCCUIfYr/KkQwgfoGCyqGSIb3DQEJEAIvMYHq
# MIHnMIHkMIG9BCC9BY8hO+KBpS5Xn5/+VazcFdnAn+XWZ/7J6W7mdebEJTCBmDCB
# gKR+MHwxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQH
# EwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xJjAkBgNV
# BAMTHU1pY3Jvc29mdCBUaW1lLVN0YW1wIFBDQSAyMDEwAhMzAAABjlnbRgCoEJTM
# AAEAAAGOMCIEIB2ZZP2obnSCLamA86t5CaVtfYCIZrP+AZ5vgtxR0c45MA0GCSqG
# SIb3DQEBCwUABIICAAjLks9w7mJ5Mb0mT50/daxFim5D72ipbefek5bDIY6n4keL
# YiR39Cg6g38sKmaBQsuUBy9MRYLgsFXFmppTXI2eAkHf4ODcGALfwjAuL+btZyLe
# J0ih+B4fX7zeeX/BcfOzOS5gwIp9GIormgdvZwgGwHT+KR6R5dsKtZM+AfT2EMcQ
# pInq2fO0Cmiz0706zhQIZNCzxdGCKhI8+u+ttI8DulxRhbY7U+/792JaICPxx/Dh
# HpAJ4pq+PJ1qJ8q3Q2uEy1HOUu+z3EysMwlQke4A7E6OBCave9Hf8Q6XPSh54i2u
# s4cScmvHrDCxXiZM1Ipj8jk8Sb3roM3hvxF5vaKF502bE2sC9TbuObWW6q0B+osr
# ZqK9a0JazS52QPefxUikQ1mSFwR+i/onxeRmJh9BDYQza02hWAZ81bkczkLXQf+j
# AghWgSUEO/x535odftqt/6aLn/OHMQHhCu+aWzFiOPzw9pcsHAWC4krDdk1c+egP
# kbh4HXWI9IaY8lPNyy903SzCRXUSEZL90xTj3mL/fN07SAlf7HIOCA1iTO+oExEc
# aQJAWvIZMkBkCmJax0C/mu98FD1oC13hnKa0QQj/QM5orye5jRu3Oz3P3m8uE7Zm
# dLZmQK5xEgPpab4/0HB/Zou3q8hQV/kw0CfQT4XVB1+9utTIzJ3IcYlgKke2
# SIG # End signature block