
Write-Host "---------------------------------------------------------" -ForegroundColor White
Write-Host "         skybow Background Automation Installer          " -ForegroundColor White
Write-Host "---------------------------------------------------------" -ForegroundColor White

. .\utils.ps1

$siteName = "skybow Background Automation"
$sitePort = 9802
$siteAppPoolName = $siteName
$sitePhysicalPath = "C:\inetpub\wwwroot\skybowBackgroundAutomation"
$siteSourcePath = Join-Path -Path $PSScriptRoot -ChildPath "WebApp"

$winServicesSourcePath = Join-Path -Path $PSScriptRoot -ChildPath "services"
$winServicesPhysicalPath = "C:\skybowBackgroundAutomation\Services"

$script:SkybowJobs = @(
    [PSCustomObject]@{
        Name = "skybowQueueMessageWebJob"
        DisplayName = "skybow Queue Message Job"
        Description = "Handles queue messages (MSMQ) from SharePoint events and adds corresponding actions to the database."
        ExeFile = "skybow.BackgroundAutomation.QueueMessageWebJob.SPSE.exe"
    },
    [PSCustomObject]@{
        Name = "skybowScheduledActionsWebJob"
        DisplayName = "skybow Scheduled Actions Job"
        Description = "Runs predefined scheduled actions by schedule"
        ExeFile = "skybow.BackgroundAutomation.SAWebJob.SPSE.exe"
    },
    [PSCustomObject]@{
        Name = "skybowCleanUpWebJob"
        DisplayName = "skybow CleanUp Job"
        Description = "Performs database cleanup, re-subscribes webhooks, monitors failures, and sends failure notifications."
        ExeFile = "skybow.BackgroundAutomation.CleanUpWebJob.SPSE.exe"
    },
    [PSCustomObject]@{
        Name = "skybowActionsWebJob"
        DisplayName = "skybow Actions Job"
        Description = "Processes actions from the database and performs calculations for SharePoint fields and/or executes triggered actions"
        ExeFile = "skybow.BackgroundAutomation.ActionsWebJob.SPSE.exe"
    },
    [PSCustomObject]@{
        Name = "skybowHttpTriggerActionsWebJob"
        DisplayName = "skybow HTTP Trigger Actions Job"
        Description = "Processes HTTP Trigger actions from the database and performs execution for the triggered actions with HTTP Request trigger"
        ExeFile = "skybow.BackgroundAutomation.HttpTriggerWebJob.SPSE.exe"
    }
)

$allowDeploy = $true;

if (-not (Check-Prerequisites)) {
    Write-Error "❌ Prerequisite checks failed. Please ensure you run this script as Administrator and required features are installed."
    $allowDeploy = $false
}

# Ensure source exists
if (-not (Test-Path $siteSourcePath)) {
    Write-Error "❌ WebApp source folder not found: $siteSourcePath"    
    $allowDeploy = $false
}
if (-not (Test-Path $winServicesSourcePath)) {
    Write-Error "❌ Services source folder not found: $winServicesSourcePath"    
    $allowDeploy = $false
}

if (-not (Get-Module -ListAvailable -Name WebAdministration)) {
    Write-Error "❌ WebAdministration module not found. Ensure IIS is installed and you're using Windows PowerShell (not PowerShell Core)."    
}
Import-Module WebAdministration

if($allowDeploy) {
    $siteExists = Get-Website | Where-Object { $_.Name -eq $siteName }

    if(-not $siteExists){
        Write-Host "This appears to be a first-time installation of the web application."        
    }
    else {
        Write-Host "This appears to be an update of an existing installation."
    }
    Write-Host "It will:"
    if(-not $siteExists){
        Write-Host "   • Create an IIS website and application pool"        
    }
    Write-Host "   • Deploy web application files in IIS"
    foreach ($job in $skybowJobs) {
        $service = Get-Service -Name $job.Name -ErrorAction SilentlyContinue
        if(-not $service){
            Write-Host "   • Create $($job.DisplayName) windows service"                        
        }
        Write-Host "   • Deploy files to $($job.DisplayName) windows service"
    }

    $confirmation = Read-Host "`n❓ Do you want to continue? (Y/N)"

    if ($confirmation -match '^[Yy]$') {     
        
        $requireCreds = $false;
        if( -not $siteExists){
            $requireCreds = $true;
        }
        if(-not $requireCreds){
            foreach ($job in $skybowJobs) {
                $service = Get-Service -Name $job.Name -ErrorAction SilentlyContinue
                if(-not $service){
                    $requireCreds = $true;
                    break;
                }
            }
        }
        $creds = $null
        if($requireCreds){
            $creds = Get-ServiceAccount
            if (-not $creds) {
                Write-Warning "⚠️ Credentials dialog were not provided. Cancelling installation..."
                $allowDeploy = $false;
            }
        }

        if($allowDeploy){            
        
            if( -not $siteExists ){        
                New-Item -Path $sitePhysicalPath -ItemType Directory -Force | Out-Null

                # Create Application Pool if it doesn't exist
                if (-not (Get-Item "IIS:\AppPools\$siteAppPoolName" -ErrorAction SilentlyContinue)) {
                    $domainUsername = $creds.UserName
                    $password = $creds.GetNetworkCredential().Password

                    New-Item "IIS:\AppPools\$siteAppPoolName" | Out-Null

                    # Configure .NET CLR Version and identity
                    Set-ItemProperty "IIS:\AppPools\$siteAppPoolName" -Name "managedRuntimeVersion" -Value "v4.0"
                    Set-ItemProperty "IIS:\AppPools\$siteAppPoolName" -Name "processModel.identityType" -Value "SpecificUser"
                    Set-ItemProperty "IIS:\AppPools\$siteAppPoolName" -Name "processModel.userName" -Value $domainUsername
                    Set-ItemProperty "IIS:\AppPools\$siteAppPoolName" -Name "processModel.password" -Value $password
                    Set-ItemProperty "IIS:\AppPools\$siteAppPoolName" -Name "processModel.loadUserProfile" -Value $true

                    Write-Host "✔️ Created application pool: $siteAppPoolName"
                }

                # Create IIS website        
                New-Website -Name $siteName -Port $sitePort -PhysicalPath $sitePhysicalPath -ApplicationPool $siteAppPoolName
                Write-Host "✔️ Created IIS website: $siteName on port $sitePort"
            }

            # Deploy code to IIS site
            Write-Host "▶️ Deploying IIS website: $siteName"
            $targetConfigPath = "$sitePhysicalPath\web.config"
            $shouldMergeConfig = Test-Path $targetConfigPath
            if($shouldMergeConfig){
                $backupExistingConfig = Backup-ConfigFile -ConfigPath $targetConfigPath
            }
            
            #Copy-Item -Path "$siteSourcePath\*" -Destination $sitePhysicalPath -Recurse -Force
            robocopy $siteSourcePath $sitePhysicalPath /E /COPY:DAT /R:0 /W:0 /NFL /NDL
            robocopy $siteSourcePath $sitePhysicalPath *.dll /E /PURGE /R:0 /W:0 /NFL /NDL

            if($shouldMergeConfig){
                Merge-ConfigFile -SourceConfigPath $backupExistingConfig -TargetConfigPath $targetConfigPath
            }
            Write-Host "✔️ Deployed IIS website: $siteName"
            
            Write-Host "▶️ Deploying windows services"

            # Stop services
            foreach ($job in $skybowJobs) {
                $service = Get-Service -Name $job.Name -ErrorAction SilentlyContinue
                if ($service -and $service.Status -eq 'Running') {                    
                    Stop-Service -Name $job.Name -Force -ErrorAction SilentlyContinue
                    $service.WaitForStatus('Stopped', '00:00:10')
                    Write-Host "▶️ Stopped service: $($job.Name)"

                    $exeName = [System.IO.Path]::GetFileNameWithoutExtension($job.ExeFile)
                    Get-Process -Name $exeName -ErrorAction SilentlyContinue | Stop-Process -Force
                }
            }
            
            # Deploy files
            Write-Host "▶️ Deploying windows services"
            $backupConfigs = @{}
            foreach ($job in $skybowJobs) {
                $configPath = Join-Path $winServicesPhysicalPath "$($job.ExeFile).config"
                if (Test-Path $configPath) {
                    $backup = Backup-ConfigFile -ConfigPath $configPath
                    $backupConfigs[$job.Name] = $backup
                }
            }
            
            #Copy-Item -Path "$winServicesSourcePath\*" -Destination $winServicesPhysicalPath -Recurse -Force
            robocopy $winServicesSourcePath $winServicesPhysicalPath /E /COPY:DAT /R:0 /W:0 /NFL /NDL            
            robocopy $winServicesSourcePath $winServicesPhysicalPath *.dll /E /PURGE /R:0 /W:0 /NFL /NDL

            foreach ($job in $skybowJobs) {
                if ($backupConfigs.ContainsKey($job.Name)) {
                    $configPath = Join-Path $winServicesPhysicalPath "$($job.ExeFile).config"
                    Merge-ConfigFile -SourceConfigPath $backupConfigs[$job.Name] -TargetConfigPath $configPath
                }
            }

            # Create or start services
            foreach ($job in $skybowJobs) {
                $service = Get-Service -Name $job.Name -ErrorAction SilentlyContinue

                if (-not $service) {
                    Write-Host "▶️ Creating service: $($job.Name)"
                    $exePath = Join-Path $winServicesPhysicalPath $job.ExeFile
                    $quotedPath = "`"$exePath`""
                    $domainUsername = $creds.UserName
                    $password = $creds.GetNetworkCredential().Password
                    $createCommand = @(
                        "create", $job.Name,
                        "binPath=", $quotedPath,
                        "DisplayName=", "`"$($job.DisplayName)`"",
                        "start=", "auto",
                        "obj=", "`"$domainUsername`"",
                        "password=", "`"$password`""
                    )
                    sc.exe @createCommand
                    if ($job.Description) {
                        sc.exe description $job.Name "`"$($job.Description)`""
                    }
                    Write-Host "✔️ Created service: $($job.Name)"
                }
                else{
                    if ($service.Status -ne 'Running') {
                        Start-Service -Name $job.Name
                        Write-Host "✔️ Started service: $($job.Name)"
                    }
                }
            }            
        }

    } else {
        Write-Host "❌ Deployment canceled by user."        
    }
}
else{
    Write-Host "Fix the error(s) and try again."
}

Read-Host -Prompt "Press any key to quit..."
# SIG # Begin signature block
# MII1SgYJKoZIhvcNAQcCoII1OzCCNTcCAQExDzANBglghkgBZQMEAgEFADB5Bgor
# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG
# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCAF+2L1cGV66xdV
# f/pmR9fEXBXGM0sE0VTfCpGB4Rht3KCCE5QwggVyMIIDWqADAgECAhB2U/6sdUZI
# k/Xl10pIOk74MA0GCSqGSIb3DQEBDAUAMFMxCzAJBgNVBAYTAkJFMRkwFwYDVQQK
# ExBHbG9iYWxTaWduIG52LXNhMSkwJwYDVQQDEyBHbG9iYWxTaWduIENvZGUgU2ln
# bmluZyBSb290IFI0NTAeFw0yMDAzMTgwMDAwMDBaFw00NTAzMTgwMDAwMDBaMFMx
# CzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMSkwJwYDVQQD
# EyBHbG9iYWxTaWduIENvZGUgU2lnbmluZyBSb290IFI0NTCCAiIwDQYJKoZIhvcN
# AQEBBQADggIPADCCAgoCggIBALYtxTDdeuirkD0DcrA6S5kWYbLl/6VnHTcc5X7s
# k4OqhPWjQ5uYRYq4Y1ddmwCIBCXp+GiSS4LYS8lKA/Oof2qPimEnvaFE0P31PyLC
# o0+RjbMFsiiCkV37WYgFC5cGwpj4LKczJO5QOkHM8KCwex1N0qhYOJbp3/kbkbuL
# ECzSx0Mdogl0oYCve+YzCgxZa4689Ktal3t/rlX7hPCA/oRM1+K6vcR1oW+9YRB0
# RLKYB+J0q/9o3GwmPukf5eAEh60w0wyNA3xVuBZwXCR4ICXrZ2eIq7pONJhrcBHe
# OMrUvqHAnOHfHgIB2DvhZ0OEts/8dLcvhKO/ugk3PWdssUVcGWGrQYP1rB3rdw1G
# R3POv72Vle2dK4gQ/vpY6KdX4bPPqFrpByWbEsSegHI9k9yMlN87ROYmgPzSwwPw
# jAzSRdYu54+YnuYE7kJuZ35CFnFi5wT5YMZkobacgSFOK8ZtaJSGxpl0c2cxepHy
# 1Ix5bnymu35Gb03FhRIrz5oiRAiohTfOB2FXBhcSJMDEMXOhmDVXR34QOkXZLaRR
# kJipoAc3xGUaqhxrFnf3p5fsPxkwmW8x++pAsufSxPrJ0PBQdnRZ+o1tFzK++Ol+
# A/Tnh3Wa1EqRLIUDEwIrQoDyiWo2z8hMoM6e+MuNrRan097VmxinxpI68YJj8S4O
# JGTfAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0G
# A1UdDgQWBBQfAL9GgAr8eDm3pbRD2VZQu86WOzANBgkqhkiG9w0BAQwFAAOCAgEA
# Xiu6dJc0RF92SChAhJPuAW7pobPWgCXme+S8CZE9D/x2rdfUMCC7j2DQkdYc8pzv
# eBorlDICwSSWUlIC0PPR/PKbOW6Z4R+OQ0F9mh5byV2ahPwm5ofzdHImraQb2T07
# alKgPAkeLx57szO0Rcf3rLGvk2Ctdq64shV464Nq6//bRqsk5e4C+pAfWcAvXda3
# XaRcELdyU/hBTsz6eBolSsr+hWJDYcO0N6qB0vTWOg+9jVl+MEfeK2vnIVAzX9Rn
# m9S4Z588J5kD/4VDjnMSyiDN6GHVsWbcF9Y5bQ/bzyM3oYKJThxrP9agzaoHnT5C
# JqrXDO76R78aUn7RdYHTyYpiF21PiKAhoCY+r23ZYjAf6Zgorm6N1Y5McmaTgI0q
# 41XHYGeQQlZcIlEPs9xOOe5N3dkdeBBUO27Ql28DtR6yI3PGErKaZND8lYUkqP/f
# obDckUCu3wkzq7ndkrfxzJF0O2nrZ5cbkL/nx6BvcbtXv7ePWu16QGoWzYCELS/h
# AtQklEOzFfwMKxv9cW/8y7x1Fzpeg9LJsy8b1ZyNf1T+fn7kVqOHp53hWVKUQY9t
# W76GlZr/GnbdQNJRSnC0HzNjI3c/7CceWeQIh+00gkoPP/6gHcH1Z3NFhnj0qinp
# J4fGGdvGExTDOUmHTaCX4GUT9Z13Vunas1jHOvLAzYIwggbmMIIEzqADAgECAhB3
# vQ4DobcI+FSrBnIQ2QRHMA0GCSqGSIb3DQEBCwUAMFMxCzAJBgNVBAYTAkJFMRkw
# FwYDVQQKExBHbG9iYWxTaWduIG52LXNhMSkwJwYDVQQDEyBHbG9iYWxTaWduIENv
# ZGUgU2lnbmluZyBSb290IFI0NTAeFw0yMDA3MjgwMDAwMDBaFw0zMDA3MjgwMDAw
# MDBaMFkxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMS8w
# LQYDVQQDEyZHbG9iYWxTaWduIEdDQyBSNDUgQ29kZVNpZ25pbmcgQ0EgMjAyMDCC
# AiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANZCTfnjT8Yj9GwdgaYw90g9
# z9DljeUgIpYHRDVdBs8PHXBg5iZU+lMjYAKoXwIC947Jbj2peAW9jvVPGSSZfM8R
# Fpsfe2vSo3toZXer2LEsP9NyBjJcW6xQZywlTVYGNvzBYkx9fYYWlZpdVLpQ0LB/
# okQZ6dZubD4Twp8R1F80W1FoMWMK+FvQ3rpZXzGviWg4QD4I6FNnTmO2IY7v3Y2F
# QVWeHLw33JWgxHGnHxulSW4KIFl+iaNYFZcAJWnf3sJqUGVOU/troZ8YHooOX1Re
# veBbz/IMBNLeCKEQJvey83ouwo6WwT/Opdr0WSiMN2WhMZYLjqR2dxVJhGaCJedD
# CndSsZlRQv+hst2c0twY2cGGqUAdQZdihryo/6LHYxcG/WZ6NpQBIIl4H5D0e6lS
# TmpPVAYqgK+ex1BC+mUK4wH0sW6sDqjjgRmoOMieAyiGpHSnR5V+cloqexVqHMRp
# 5rC+QBmZy9J9VU4inBDgoVvDsy56i8Te8UsfjCh5MEV/bBO2PSz/LUqKKuwoDy3K
# 1JyYikptWjYsL9+6y+JBSgh3GIitNWGUEvOkcuvuNp6nUSeRPPeiGsz8h+WX4VGH
# aekizIPAtw9FbAfhQ0/UjErOz2OxtaQQevkNDCiwazT+IWgnb+z4+iaEW3VCzYkm
# eVmda6tjcWKQJQ0IIPH/AgMBAAGjggGuMIIBqjAOBgNVHQ8BAf8EBAMCAYYwEwYD
# VR0lBAwwCgYIKwYBBQUHAwMwEgYDVR0TAQH/BAgwBgEB/wIBADAdBgNVHQ4EFgQU
# 2rONwCSQo2t30wygWd0hZ2R2C3gwHwYDVR0jBBgwFoAUHwC/RoAK/Hg5t6W0Q9lW
# ULvOljswgZMGCCsGAQUFBwEBBIGGMIGDMDkGCCsGAQUFBzABhi1odHRwOi8vb2Nz
# cC5nbG9iYWxzaWduLmNvbS9jb2Rlc2lnbmluZ3Jvb3RyNDUwRgYIKwYBBQUHMAKG
# Omh0dHA6Ly9zZWN1cmUuZ2xvYmFsc2lnbi5jb20vY2FjZXJ0L2NvZGVzaWduaW5n
# cm9vdHI0NS5jcnQwQQYDVR0fBDowODA2oDSgMoYwaHR0cDovL2NybC5nbG9iYWxz
# aWduLmNvbS9jb2Rlc2lnbmluZ3Jvb3RyNDUuY3JsMFYGA1UdIARPME0wQQYJKwYB
# BAGgMgEyMDQwMgYIKwYBBQUHAgEWJmh0dHBzOi8vd3d3Lmdsb2JhbHNpZ24uY29t
# L3JlcG9zaXRvcnkvMAgGBmeBDAEEATANBgkqhkiG9w0BAQsFAAOCAgEACIhyJsav
# +qxfBsCqjJDa0LLAopf/bhMyFlT9PvQwEZ+PmPmbUt3yohbu2XiVppp8YbgEtfjr
# y/RhETP2ZSW3EUKL2Glux/+VtIFDqX6uv4LWTcwRo4NxahBeGQWn52x/VvSoXMNO
# Ca1Za7j5fqUuuPzeDsKg+7AE1BMbxyepuaotMTvPRkyd60zsvC6c8YejfzhpX0FA
# Z/ZTfepB7449+6nUEThG3zzr9s0ivRPN8OHm5TOgvjzkeNUbzCDyMHOwIhz2hNab
# XAAC4ShSS/8SS0Dq7rAaBgaehObn8NuERvtz2StCtslXNMcWwKbrIbmqDvf+28rr
# vBfLuGfr4z5P26mUhmRVyQkKwNkEcUoRS1pkw7x4eK1MRyZlB5nVzTZgoTNTs/Z7
# KtWJQDxxpav4mVn945uSS90FvQsMeAYrz1PYvRKaWyeGhT+RvuB4gHNU36cdZytq
# tq5NiYAkCFJwUPMB/0SuL5rg4UkI4eFb1zjRngqKnZQnm8qjudviNmrjb7lYYuA2
# eDYB+sGniXomU6Ncu9Ky64rLYwgv/h7zViniNZvY/+mlvW1LWSyJLC9Su7UpkNpD
# R7xy3bzZv4DB3LCrtEsdWDY3ZOub4YUXmimi/eYI0pL/oPh84emn0TCOXyZQK8ei
# 4pd3iu/YTT4m65lAYPM8Zwy2CHIpNVOBNNwwggcwMIIFGKADAgECAgxnA3rBFoKs
# cJxvcXkwDQYJKoZIhvcNAQELBQAwWTELMAkGA1UEBhMCQkUxGTAXBgNVBAoTEEds
# b2JhbFNpZ24gbnYtc2ExLzAtBgNVBAMTJkdsb2JhbFNpZ24gR0NDIFI0NSBDb2Rl
# U2lnbmluZyBDQSAyMDIwMB4XDTI2MDMxMjEzNTMxOFoXDTI3MDMxMzEzNTMxOFow
# fzELMAkGA1UEBhMCQ0gxEDAOBgNVBAgMB1rDvHJpY2gxEzARBgNVBAcTCkVmZnJl
# dGlrb24xEjAQBgNVBAoTCXNreWJvdyBBRzESMBAGA1UEAxMJc2t5Ym93IEFHMSEw
# HwYJKoZIhvcNAQkBFhJzdXBwb3J0QHNreWJvdy5jb20wggIiMA0GCSqGSIb3DQEB
# AQUAA4ICDwAwggIKAoICAQCc/igc8GzAcS7T6+1/OMQA2u/vDv1mESrGkb32fAd+
# IEsw2Rk9CX2JpaAUdg0mLe8kz0k58w57RgKW1AHPJU6ws5Iau7ne7NTGxa5F4Vrx
# L1/Gzyw4qJ5yYo/qeVPDhBStRPruLX3JpdBnf6YwbFYXPaShWCdFWSV03KNJ+wnk
# 5WTMLPc79JqI8MbmlpNJR3/HR9Z5ZM8OaJ1JL3yyA8mfp9BQvrIPbp66HfYfh7OK
# K7awooWiKLIJRkjX+0Yx4flM0Vm93crQt+jvVfaSPtMHLsE1goHkqOZdP+uwnu0j
# zV77zObDJxXgU7SHtFRr/btIUb0joOZsIxCFKYnFt3z5fJLUdUuneNYZf++ybI3P
# T/6Y4YlCb5HyfsP1g/V41Tj/+Ex+UqUaCDd6MBomMZc+1sgeTroSe9WOuUHBieKK
# +Y8kPSH2gonljUDf2Ph7hgrB82dG4PPBGKDQuV0bwgQL/9ednokZVuGpg+hNhzPr
# B0DnOU8ms5Yjc8bUr7P6bu3JIWSnKt9g2Cmg6+tcETL5NH/uRzyaOD6KLyvylKD9
# 1lfiifobI0uwEAQBB9oeysZxdhtufRn1bCwpu28PyVITlTawirxPKPNOJFILAdKl
# nFpLrsdHPB3zFzPOcQsO0WhjrwkDv/9Cn2LhDIcK2vmpmk9GMLlyBj7dbinyKWbE
# FQIDAQABo4IB0DCCAcwwDgYDVR0PAQH/BAQDAgeAMIGbBggrBgEFBQcBAQSBjjCB
# izBKBggrBgEFBQcwAoY+aHR0cDovL3NlY3VyZS5nbG9iYWxzaWduLmNvbS9jYWNl
# cnQvZ3NnY2NyNDVjb2Rlc2lnbmNhMjAyMC5jcnQwPQYIKwYBBQUHMAGGMWh0dHA6
# Ly9vY3NwLmdsb2JhbHNpZ24uY29tL2dzZ2NjcjQ1Y29kZXNpZ25jYTIwMjAwVgYD
# VR0gBE8wTTBBBgkrBgEEAaAyATIwNDAyBggrBgEFBQcCARYmaHR0cHM6Ly93d3cu
# Z2xvYmFsc2lnbi5jb20vcmVwb3NpdG9yeS8wCAYGZ4EMAQQBMAkGA1UdEwQCMAAw
# RQYDVR0fBD4wPDA6oDigNoY0aHR0cDovL2NybC5nbG9iYWxzaWduLmNvbS9nc2dj
# Y3I0NWNvZGVzaWduY2EyMDIwLmNybDAdBgNVHREEFjAUgRJzdXBwb3J0QHNreWJv
# dy5jb20wEwYDVR0lBAwwCgYIKwYBBQUHAwMwHwYDVR0jBBgwFoAU2rONwCSQo2t3
# 0wygWd0hZ2R2C3gwHQYDVR0OBBYEFMLlR8OH3WpUfVjlQ6p9VIpwqMfYMA0GCSqG
# SIb3DQEBCwUAA4ICAQDIOMT/CoWZMRzl8hGIkpdGzyNcSFXbBKyMGbFQr1eeGIMN
# lo9E1aJEmewc9h6anRryO7aBzbANPc1W06H4R5K/zHUs1aa1uZevEX5LmLasyFAU
# +XNTspEmaLXxlwNvhRX3HugW9j4ziekCSC0Fsl82TXB8bCS5nS326/S02rdFkeAg
# m7pz/ab57Vl1l1QIRIvNqV3tB0aRe9xljwiUKMNa5cU/ERgzMOOfnSmIM9DBco7U
# xWmV/mFZl07rwZCFvbdj5vXfo7c+ZWmAknA4seogc2DSjAIK5sPIKY7lweJMc64p
# TeGiYq4CwxfKFZy7IblWyPnh+/CUCd0qt1rM3VR4ankmJSXpGEIwUJhNt/1cDPQs
# QgFy/y4Firkd8+hxgUM8gWcRD1AGJ22XV/EMMdCXHp9WEipZ9hABDRw/OzkhsIDp
# ibtSzrI/pBAB0tZAJYX1vi2durZk1P8KHJaEy2uDcP0dihitUMlyvqIuqvzjnGUj
# NgZhKoljayw0Wuo7XKDAYEurWu4VGn/po+1+Nt9yzCI9+iX/1pXG7F0WZhlVMW7E
# UIZ0q7smPkCA25x6tDe3j1XSY8lovZ/LQgI3nRqYa/wc74wCJalDv996eVB4w9IA
# DxMhxQLSaJf4lQw3GVNYIj3RJdALEHQnuRo/zUQ/fHhckX+IBtFNSn+BVPfL7jGC
# IQwwgiEIAgEBMGkwWTELMAkGA1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24g
# bnYtc2ExLzAtBgNVBAMTJkdsb2JhbFNpZ24gR0NDIFI0NSBDb2RlU2lnbmluZyBD
# QSAyMDIwAgxnA3rBFoKscJxvcXkwDQYJYIZIAWUDBAIBBQCggYQwGAYKKwYBBAGC
# NwIBDDEKMAigAoAAoQKAADAZBgkqhkiG9w0BCQMxDAYKKwYBBAGCNwIBBDAcBgor
# BgEEAYI3AgELMQ4wDAYKKwYBBAGCNwIBFTAvBgkqhkiG9w0BCQQxIgQg99Sogfzs
# RWR51i/qEMIXoCXe+nSfBFEjoCOOCXHppqcwDQYJKoZIhvcNAQEBBQAEggIAQbvs
# 3CTbQWs51pnNQf+HTJ878eYuXewNCPZLIeLEd15Aj4GrzPmFMDQBOcpFHKBFL12+
# GR3zD+LBMSoMv+qP2Pdl7ajzLBhs0u7fgGJHZSQ7N+qu8qbYvNFKx7XIoaxzS3OU
# VWgft3ZiMnXo3R/jxkoc4w6ADjVwZaxQqJ6A4lxs81iokIdK63cv80IEi38p8Ujf
# iUgJ/ERh9qE70It1dbx7GDkpnY9C7W7CQh8ghzfo4E4H2fu4bRuzFWCz1BNIPQNX
# 8uhW3dURTnTE0fUuUDNgXUOgRtrpRu4Tz93tUZVyuit0RdJMqaUuJEk2OjgSo1BJ
# plSDB3kRxVpcWGZjAGWLAk5vqv8CN1a1jI/ZgHzRbnvDN75L92RBCERWHysjN2DH
# y/ASqYEhcXUIlVx5NBzQNBrr+3MIfrJiUwEmFeW/quQ1eArMXhBR6gojEtSvJvPR
# pZDtGwh7bzf+2bG1cAPs2cPmdijmBB5XUw6a7szXfM/fu3d1T10GBkX5YyLsxj28
# 4kB+nwAXs/JTCD25eS15nHDVcPIf9FCRa9MPI/fuwsqu8FwQtuEJdylKLUz1HXim
# yO9m0dH3Fp3fbgOInYnzsFU7NtjAPPZIl5FzQi/eT3/DdcEAL8fyxy7iCSeABlha
# nM5aTUxcVT64Z98oLJarpOyV3Jnr6uYKT4jEUL2hgh3tMIId6QYKKwYBBAGCNwMD
# ATGCHdkwgh3VBgkqhkiG9w0BBwKggh3GMIIdwgIBAzENMAsGCWCGSAFlAwQCAjCB
# 5AYLKoZIhvcNAQkQAQSggdQEgdEwgc4CAQEGCysGAQQBoDICAwICMDEwDQYJYIZI
# AWUDBAIBBQAEIBb38ccUTJPPDYVQQczFnmMe8Q014LR20VdXo8iONuxMAhQmiS5p
# oZKJmRXQCof0ZJqcO5WK+xgPMjAyNjA1MjUxNTI1NDNaMAMCAQGgXaRbMFkxCzAJ
# BgNVBAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMS8wLQYDVQQDEyZH
# bG9iYWxzaWduIFI0NSBUU0EgZm9yIENvZGVTaWduIDIwMjUxMKCCGWAwggaKMIIE
# cqADAgECAhEAhHI/wZXMFvHbK6L2YN8r5DANBgkqhkiG9w0BAQwFADBeMQswCQYD
# VQQGEwJCRTEZMBcGA1UEChMQR2xvYmFsU2lnbiBudi1zYTE0MDIGA1UEAxMrR2xv
# YmFsU2lnbiBPZmZsaW5lIFI0NSBUaW1lc3RhbXBpbmcgQ0EgMjAyNTAeFw0yNTEw
# MTUwNzI1MDRaFw0zNzAxMTAwMDAwMDBaMFkxCzAJBgNVBAYTAkJFMRkwFwYDVQQK
# ExBHbG9iYWxTaWduIG52LXNhMS8wLQYDVQQDEyZHbG9iYWxzaWduIFI0NSBUU0Eg
# Zm9yIENvZGVTaWduIDIwMjUxMDCCAaIwDQYJKoZIhvcNAQEBBQADggGPADCCAYoC
# ggGBANFKjaGNhkBIKKMJBJzZExA88qiMT/F/hSKNrYmewntKeXaAOjEqND0dxTqt
# UPymDLWwEp1XG0ssWFjeDNj88DaLAizpnMKfGyG2NKGw3VHLNGvNzgWr7TFDHqoA
# NQyf3qaocT/SiTncM9uakGSRQPK0Yzv2dB/D1ZXKZiAD5ORsDT9A6Y800khnoKNf
# S3fAl+EvRxqJe2EEEwRYrFPm/ZTtlFsKr8NUNcD2hfWIVUFVoGnHnswsvTSfIe7H
# QidhLtGvngze02Gbv7SZrGnJMVrnW5jU8e1Mky6n+XdEaihDljB4IfaEOhQ3Ao4L
# tCQVuSWE92rbsReS56Dyos6dEOZU7Wv4HXIwBuXpC5XQv448HVIoEA+mYgWSWYnR
# KiJttSrGxPN6ON0j7LBAtRxeKWiDApawnjqHrCOVTkBWpPsUQFjNYJO3qF/tItBs
# 8azTYFryhpo1+jRIv5oCk33iW4QH/C4TWWCm2tyQvNtCUKnno6CQAlimpi66L5N+
# 54IhTQIDAQABo4IBxjCCAcIwDgYDVR0PAQH/BAQDAgeAMBYGA1UdJQEB/wQMMAoG
# CCsGAQUFBwMIMAwGA1UdEwEB/wQCMAAwHQYDVR0OBBYEFDL60+EHaCeQawjSPx08
# jGU2KAYZMB8GA1UdIwQYMBaAFHcCOwExDx50d8NIyMMHY1WIpTuiMIGlBggrBgEF
# BQcBAQSBmDCBlTBCBggrBgEFBQcwAYY2aHR0cDovL29jc3AuZ2xvYmFsc2lnbi5j
# b20vZ3NvZmZsaW5lcjQ1dGltZXN0YW1wY2EyMDI1ME8GCCsGAQUFBzAChkNodHRw
# Oi8vc2VjdXJlLmdsb2JhbHNpZ24uY29tL2NhY2VydC9nc29mZmxpbmVyNDV0aW1l
# c3RhbXBjYTIwMjUuY3J0MEoGA1UdHwRDMEEwP6A9oDuGOWh0dHA6Ly9jcmwuZ2xv
# YmFsc2lnbi5jb20vZ3NvZmZsaW5lcjQ1dGltZXN0YW1wY2EyMDI1LmNybDBWBgNV
# HSAETzBNMAgGBmeBDAEEAjBBBgkrBgEEAaAyAR4wNDAyBggrBgEFBQcCARYmaHR0
# cHM6Ly93d3cuZ2xvYmFsc2lnbi5jb20vcmVwb3NpdG9yeS8wDQYJKoZIhvcNAQEM
# BQADggIBAI6ucKaPR4aRim6eLPr9YWb3WzoqOeGQwpiVtx+2CkwG2WHKxWeIQ58G
# +Fy+gVDDgA4cb01FW9mmQGdqDkO3UczcmDbWBFUIHAXI/URPwgPGh+VjHk4PhII0
# sezq8KDqsWQ1PzW/1nLy7TFfLdZug3mIr9JtOYsaoKsAYmKEsut8iG913BWt0HKI
# e14vGCO6BPolCiAJKgEXYmqYfRkEKXnXlu1tO5ZkutBSzm++Xaj3wx2O73LIlFYv
# M9VxSRGT13zEEGLrfwUE4C6jd9zJOEZyd7vBQ5r5OCGHAgdtnenFNimCjlwLERmw
# fwRfCJNRPAd/Sp6yyyD/Zd1wYfuzQBHhPI4nZCcBrJg4Az9c4HE3NRFCDiaEx08v
# 8XxUIwqPeSglpVzHZqSHQHzaV79oFTyrY5r747A7CIcXl75/2b7KHJhvAZKiBYhX
# eGBGX5XIqtyHyC/fkUev9xXPyfT8I8ZFcaJglns/XA46Bh2QwPaIMpVhBvLkjH/E
# IHT+VIoueoSgV7N+acIlsaAAJWzAyzGEkRSO3ERxBz1p9qWd74g62zS//IJGKQmy
# eZVtLTHnQOTY4f5UKJT2z9fLOB8LtbOu1Dl2Ih1zYqyLckxMmbhrQuIQhlaK0Pn7
# o+iQ6RDz7flOwc7BSGzzsj/LImOUhmkBXg5/X8k3xtZUHcR2bhbOMIIGoDCCBIig
# AwIBAgIRAIPahje3nwyEDJR7hApSeB8wDQYJKoZIhvcNAQEMBQAwUzELMAkGA1UE
# BhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExKTAnBgNVBAMTIEdsb2Jh
# bFNpZ24gVGltZXN0YW1waW5nIFJvb3QgUjQ1MB4XDTI1MDcxNjAzMDUwNFoXDTQx
# MDcxNjAwMDAwMFowXjELMAkGA1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24g
# bnYtc2ExNDAyBgNVBAMTK0dsb2JhbFNpZ24gT2ZmbGluZSBSNDUgVGltZXN0YW1w
# aW5nIENBIDIwMjUwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCkdxb4
# 7X2L4t0ChkVjNL7lf5Zi+dagWpcB+KvWHKeFRN0fhFbUNv7I6atDbvmOWxDpvOhn
# ec3QIydxlfgTRCGmnpC/Hbv5+Wl/N4xBpwPtVyJZSIXdMuK7vBPZsEJIQ1SfeF8Y
# wbg8m9gW87mjgMDWI28eEbihLNy2h2gl9vhzwSNVqELD80uLMHetr41Z7aBkFJpk
# qtozEW3rvrKrHtFxCeNsXhHQ4sai+xm3be9Tr0DkF2g/F0D3O72sz6pMGw8NVQl7
# FjARVTQZjsEnmZRZaeLIA8dbRa/gDOTm3sjRdQiMDf7Y4aSvR1UFdUEPIR4YFWth
# cR2F9UvC6HocEYkV0isRjkqgaWmhP7gEFB7hcIfmy/XlSj4zvZUpaM8DkTHed8Uk
# Lg/kVbVJHqiUJJoiu2dnNz7OCalLKIP4ZwTa51BFAdsOLvh6deBrOTT6S2kdnVny
# hO9JpIhESi9dItsfcoLy4UiRe5yXtc8ftkYiuYX14XjO6ijkUhSey9XrSQuoUPM+
# T5RsuaBkNQI+UUUEF6Fpo2+LETKbH043Ypd6/4x8ro5kKGoZus4LbC+8AUfIqVNl
# tUd2o2K7S7lrZPUL11JNGfLX+HEvBzEv0FY/NAvCGyLJepTMzu4PSUP349gxrFRi
# ChVLGpvjG88KJWos1psj5a2MTNh9DQ/7q0FMWwIDAQABo4IBYjCCAV4wDgYDVR0P
# AQH/BAQDAgGGMBMGA1UdJQQMMAoGCCsGAQUFBwMIMBIGA1UdEwEB/wQIMAYBAf8C
# AQAwHQYDVR0OBBYEFHcCOwExDx50d8NIyMMHY1WIpTuiMB8GA1UdIwQYMBaAFEay
# HHfhexXwpTmhcN7RxC7qbbLeMIGOBggrBgEFBQcBAQSBgTB/MDcGCCsGAQUFBzAB
# hitodHRwOi8vb2NzcC5nbG9iYWxzaWduLmNvbS90aW1lc3RhbXByb290cjQ1MEQG
# CCsGAQUFBzAChjhodHRwOi8vc2VjdXJlLmdsb2JhbHNpZ24uY29tL2NhY2VydC90
# aW1lc3RhbXByb290cjQ1LmNydDA/BgNVHR8EODA2MDSgMqAwhi5odHRwOi8vY3Js
# Lmdsb2JhbHNpZ24uY29tL3RpbWVzdGFtcHJvb3RyNDUuY3JsMBEGA1UdIAQKMAgw
# BgYEVR0gADANBgkqhkiG9w0BAQwFAAOCAgEAMqPuftFu5GYxllheqUw9EmhHpfWf
# /+q5cYtV86kWhH1hrTkv3jDTLAGN6XIYZ/6cAH4JkVDuBQ53ZrZul+lbxfDkCsz5
# iM8R/wC0LgTpivXTlTVg2OVNIRGhYkpzWGRI3mbh2mxi14XKTMVBXBfnSFgoffJn
# pVy7odrQQDmh/MumLaMraNtEMJdsU0uLmY7XEpF0HYDMAXR/kLTRvgfd3mwI4Hye
# NO8DBpMwYQx5OQtYzhn1j7dQ606mjVC7FdsOldWQtetobbmIvVW2+PEQDLjnfidQ
# g0H3CE5GJwklJMttrp84rZ//VAZYR17BYscDMT43mgfRCg1EAuknkmMh94ie876x
# B0GJ2c+4son3kdOPtfIy8mEVmO1sckaURbHhSApy40osMtdYAt/BAM3YN7LeRN93
# jLDidB2TU9y0ssrcXgvaecu/3gEySlj5F+Xneg4Q3jJO+3AJg/5UO5muS1zs1pyh
# NXFmcoaS/xrVqRyR07BBkL6LwDLVXLMwBf9Nvj6vdzrkHtykC2rc6hSKNdQmC9nF
# yLpNfvyyYvZNjLa1af7wbiSude/LYQtHZdicoQ5LgxWatIKyMzmfFKuCETXRUNdB
# sR9r3eWGKR8Wgi4g0rNYMuq+7xm5ybES5/GkeM2edFVdf9m/kpCrym78xCg7PoML
# vifn47ltLC9PmyAwggajMIIEi6ADAgECAhB4SqqBc2ackAlU5CHJR+vAMA0GCSqG
# SIb3DQEBDAUAMEwxIDAeBgNVBAsTF0dsb2JhbFNpZ24gUm9vdCBDQSAtIFI2MRMw
# EQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQDEwpHbG9iYWxTaWduMB4XDTIwMTIw
# OTAwMDAwMFoXDTM0MTIxMDAwMDAwMFowUzELMAkGA1UEBhMCQkUxGTAXBgNVBAoT
# EEdsb2JhbFNpZ24gbnYtc2ExKTAnBgNVBAMTIEdsb2JhbFNpZ24gVGltZXN0YW1w
# aW5nIFJvb3QgUjQ1MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAunQz
# 7CfcEjghG8XTYSjWWrxP34vMkYRDJFe8ZCG8OxwfPU+MrQe388XXAukRFIKaqrSU
# cjtxDRrvaGuFeY6vZupYmA26wXx50v/Ns28xRdAFdAQAcmonfrg3PzqI7ZeD9as1
# TQ+fWTv1L99ZxXylMnZglsjt7vgEfhlRcqi/REF6vHseOwCbvLrglr+Q/o2bw3KL
# ABL4IDpgOPfBzIWK+4d5LqErIObLoIWRI7bEKAdUKN7sEDFPivLNFB8e3VUc6igx
# TPkhaqjN85Zn+gFBm80PC2h/u97xQ+oX5bDccCKzaTZZdGvG5YkqfOULgV2rP4+4
# 0XZy83yiqeKXQb/MjEX+Ycn2bAcLAAToFSNPgiot9u/D+hE2SKHR/Xo5OjRdoywO
# m3dQIDRA3bEDMa1f6WKHc5YDYfeUsNlcbE/nFMXh8XsNI5zNcIwdat5KLYsqu9tC
# FAUHqvsU3DHT9h9sy75oZkRwTW0X+XHrBXOOkZJ162hcHvZEYRgpYt0XZojsKLpJ
# b9s+d/65MR91HBiipke92O5IhTv9s+IPPyqYxpr6gm+xpaWGHVo6+qRsdA93UmFq
# f4cp3jmbi+6zRWAwJJcVEiqFMJMmrJamLehwbQupMq0smygKdkLyVWFRmJTe7fbF
# F288FRCwDq2w3sUW9GXRzC9aVgjPmcTwVZHCLHkCAwEAAaOCAXgwggF0MA4GA1Ud
# DwEB/wQEAwIBhjATBgNVHSUEDDAKBggrBgEFBQcDCDAPBgNVHRMBAf8EBTADAQH/
# MB0GA1UdDgQWBBRGshx34XsV8KU5oXDe0cQu6m2y3jAfBgNVHSMEGDAWgBSubAWj
# kxPioufi1xzWx/B/yGdToDB7BggrBgEFBQcBAQRvMG0wLgYIKwYBBQUHMAGGImh0
# dHA6Ly9vY3NwMi5nbG9iYWxzaWduLmNvbS9yb290cjYwOwYIKwYBBQUHMAKGL2h0
# dHA6Ly9zZWN1cmUuZ2xvYmFsc2lnbi5jb20vY2FjZXJ0L3Jvb3QtcjYuY3J0MDYG
# A1UdHwQvMC0wK6ApoCeGJWh0dHA6Ly9jcmwuZ2xvYmFsc2lnbi5jb20vcm9vdC1y
# Ni5jcmwwRwYDVR0gBEAwPjA8BgRVHSAAMDQwMgYIKwYBBQUHAgEWJmh0dHBzOi8v
# d3d3Lmdsb2JhbHNpZ24uY29tL3JlcG9zaXRvcnkvMA0GCSqGSIb3DQEBDAUAA4IC
# AQCLSLo2Vzxyxdp1+e8y9Ya93BIo44guTzZfJpnsDwEhEJaSOMZwa23zrtQOvSXv
# hn/iiY2VpX4pRANNqpio8bfc6iljIdztzYgKyxBpYXkpQgwjvOnF71IeLzM31U9m
# emapR1Qzsd0W8thkcaMxlOVv9k1L4oRs0MklZ0/IS9DOSwXWPft9QfqKscAh4H4I
# sNlkK/nq8scK9M8uDDRg7my7kvA/8XtSEmh3WYH1HC6kOow5Aw3t5cyvZkh5Y9VJ
# uP9L0iVPSE6TO5N3sJpIbLagHbN0nl+9IgQ7fDcNhbXDmrvdnFoDjbQNn0x2NNWF
# rUV7tZ+7Lom7rMi/kmNIxj/KF6oNvAARX4vo40OEikM0zf07wKJ72x+4Z8iMFd4/
# pn/HKO+hb2+yQc8CIusB+EvI0nZvJd9e2mhoPXtEBMJBbkk7p5hWBO3RJisElNvk
# 7WaOPYCdpKRVeVBe4/gaH8AWb5AVPIqmSKEMe7oq4LGphwVGm+0lVT03aZjtRpmY
# hUcKHmLb/ZzlwUNCjr3Pb/aMkf2C5J/sreOVVQXzSS9tNPf/Z+6ZQLvTmoBCQNoj
# iWAfg3GStenmygr53cdsslhBnGaNmypvH29XBENcg107aZzeOfqETTXzextti/Fv
# A8EpUuKUv3tUi99AegtwAnc/L4gHAgB10q/G1iIyGaM76DCCBYMwggNroAMCAQIC
# DkXmuwODM8OFZUjm/0VRMA0GCSqGSIb3DQEBDAUAMEwxIDAeBgNVBAsTF0dsb2Jh
# bFNpZ24gUm9vdCBDQSAtIFI2MRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQD
# EwpHbG9iYWxTaWduMB4XDTE0MTIxMDAwMDAwMFoXDTM0MTIxMDAwMDAwMFowTDEg
# MB4GA1UECxMXR2xvYmFsU2lnbiBSb290IENBIC0gUjYxEzARBgNVBAoTCkdsb2Jh
# bFNpZ24xEzARBgNVBAMTCkdsb2JhbFNpZ24wggIiMA0GCSqGSIb3DQEBAQUAA4IC
# DwAwggIKAoICAQCVB+hzymb57BTKezz3DQjxtEULLIK0SMbrWzyug7hBkjMUpG9/
# 6SrMxrCIa8W2idHGsv8UzlEUIexK3RtaxtaH7k06FQbtZGYLkoDKRN5zlE7zp4l/
# T3hjCMgSUG1CZi9NuXkoTVIaihqAtxmBDn7EirxkTCEcQ2jXPTyKxbJm1ZCatzEG
# xb7ibTIGph75ueuqo7i/voJjUNDwGInf5A959eqiHyrScC5757yTu21T4kh8jBAH
# OP9msndhfuDqjDyqtKT285VKEgdt/Yyyic/QoGF3yFh0sNQjOvddOsqi250J3l1E
# LZDxgc1Xkvp+vFAEYzTfa5MYvms2sjnkrCQ2t/DvthwTV5O23rL44oW3c6K4NapF
# 8uCdNqFvVIrxclZuLojFUUJEFZTuo8U4lptOTloLR/MGNkl3MLxxN+Wm7CEIdfzm
# YRY/d9XZkZeECmzUAk10wBTt/Tn7g/JeFKEEsAvp/u6P4W4LsgizYWYJarEGOmWW
# WcDwNf3J2iiNGhGHcIEKqJp1HZ46hgUAntuA1iX53AWeJ1lMdjlb6vmlodiDD9H/
# 3zAR+YXPM0j1ym1kFCx6WE/TSwhJxZVkGmMOeT31s4zKWK2cQkV5bg6HGVxUsWW2
# v4yb3BPpDW+4LtxnbsmLEbWEFIoAGXCDeZGXkdQaJ783HjIH2BRjPChMrwIDAQAB
# o2MwYTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU
# rmwFo5MT4qLn4tcc1sfwf8hnU6AwHwYDVR0jBBgwFoAUrmwFo5MT4qLn4tcc1sfw
# f8hnU6AwDQYJKoZIhvcNAQEMBQADggIBAIMl7ejR/ZVSzZ7ABKCRaeZc0ITe3K2i
# T+hHeNZlmKlbqDyHfAKK0W63FnPmX8BUmNV0vsHN4hGRrSMYPd3hckSWtJVewHuO
# mXgWQxNWV7Oiszu1d9xAcqyj65s1PrEIIaHnxEM3eTK+teecLEy8QymZjjDTrCHg
# 4x362AczdlQAIiq5TSAucGja5VP8g1zTnfL/RAxEZvLS471GABptArolXY2hMVHd
# VEYcTduZlu8aHARcphXveOB5/l3bPqpMVf2aFalv4ab733Aw6cPuQkbtwpMFifp9
# Y3s/0HGBfADomK4OeDTDJfuvCp8ga907E48SjOJBGkh6c6B3ace2XH+CyB7+WBso
# K6hsrV5twAXSe7frgP4lN/4Cm2isQl3D7vXM3PBQddI2aZzmewTfbgZptt4KCUhZ
# h+t7FGB6ZKppQ++Rx0zsGN1s71MtjJnhXvJyPs9UyL1n7KQPTEX/07kwIwdMjxC/
# hpbZmVq0mVccpMy7FYlTuiwFD+TEnhmxGDTVTJ267fcfrySVBHioA7vugeXaX3yL
# SqGQdCWnsz5LyCxWvcfI7zjiXJLwefechLp0LWEBIH5+0fJPB1lfiy1DUutGDJTh
# 9WZHeXfVVFsfrSQ3y0VaTqBESMjYsJnFFYQJ9tZJScBluOYacW6gqPGC6EU+bNYC
# 1wpngwVayaQQMYIDYTCCA10CAQEwczBeMQswCQYDVQQGEwJCRTEZMBcGA1UEChMQ
# R2xvYmFsU2lnbiBudi1zYTE0MDIGA1UEAxMrR2xvYmFsU2lnbiBPZmZsaW5lIFI0
# NSBUaW1lc3RhbXBpbmcgQ0EgMjAyNQIRAIRyP8GVzBbx2yui9mDfK+QwCwYJYIZI
# AWUDBAICoIIBQTAaBgkqhkiG9w0BCQMxDQYLKoZIhvcNAQkQAQQwKwYJKoZIhvcN
# AQk0MR4wHDALBglghkgBZQMEAgKhDQYJKoZIhvcNAQEMBQAwPwYJKoZIhvcNAQkE
# MTIEMLfO5+WkpOrjEAP++QbqLDdbRRPjvRR1FFEoUUOnMJbuX12I4nW/ftYw8oiX
# gQiw6jCBtAYLKoZIhvcNAQkQAi8xgaQwgaEwgZ4wgZsEIIMq1y5SP96sg/pGlLzn
# xswmF2SIKGZWZYjIrco6g4VRMHcwYqRgMF4xCzAJBgNVBAYTAkJFMRkwFwYDVQQK
# ExBHbG9iYWxTaWduIG52LXNhMTQwMgYDVQQDEytHbG9iYWxTaWduIE9mZmxpbmUg
# UjQ1IFRpbWVzdGFtcGluZyBDQSAyMDI1AhEAhHI/wZXMFvHbK6L2YN8r5DANBgkq
# hkiG9w0BAQwFAASCAYBdZph5sF9t6cCdUGBD3d83PViKkNi5zfc1xXTGTUnwWI/S
# JT/AKv+hRLZkJRLM/+2RSfyz1xrYD7pfl+XGVbnQCAM4SqiZ6zWOwhmzcmVAr+67
# iIHatBW3Q0VWaDhprAxsaX14FyI9NK2ZC0v3q5+OWLVwUAdYHA06b2awYEAGiQi+
# NOsQPqNey0VoHQLHWgddWHjL4HRSNSBptzKq33VG6B/K7FAzp4q4F3812k0IKRGB
# mieoEZbeY0yyEGY4QQseoYQZu22Tv57E8bwM2GSBtcm4pBm5aKsYCsZUVu60QEIR
# Eyh79Z9b7Mx5+PaLGnUFPlnb3gPNv17g9v7lCi6oemX+nvRh8hBSskIPaeWbk4It
# rNhpc4NKj1qypv3HZiB69GcEITt9TqSY0FCdCT/zlN0VT7ht5WgRr6tJIrvuzcyP
# v8XRnTwDgNtxUmiY1JAWeKhfOWpkMa2pBLM+WR4UQzGow+3vfs+hcW6DqtRHqTWb
# XSGw3Uk9bU7O07+I8JA=
# SIG # End signature block
