Docker/Update-BCDevDockerOnServer.ps1

Function Update-BCDevDockerOnServer() {
    # Get Latest Stable version and URL
    $latestZipFile = (Invoke-WebRequest -UseBasicParsing -uri "https://download.docker.com/win/static/stable/x86_64/").Content.split("`r`n") |
    Where-Object { $_ -like "<a href=""docker-*"">docker-*" } |
    ForEach-Object { $zipName = $_.Split('"')[1]; [Version]($zipName.SubString(7, $zipName.Length - 11).Split('-')[0]) } |
    Sort-Object | Select-Object -Last 1 | ForEach-Object { "docker-$_.zip" }

    if (-not $latestZipFile) {
        throw "Unable to locate latest stable docker download"
    }
    $latestZipFileUrl = "https://download.docker.com/win/static/stable/x86_64/$latestZipFile"
    $latestVersion = [Version]($latestZipFile.SubString(7, $latestZipFile.Length - 11))
    Write-Host "Latest stable available Docker Engine version is $latestVersion"

    # Check existing docker version
    $dockerService = Get-Service docker -ErrorAction SilentlyContinue
    if ($dockerService) {
        if ($dockerService.Status -eq "Running") {
            $dockerVersion = [Version](docker version -f "{{.Server.Version}}")
            Write-Host "Current installed Docker Engine version is $dockerVersion"
            if ($latestVersion -le $dockerVersion) {
                Write-Host "No new Docker Engine available"  -ForegroundColor Green
                Return
            }
            Write-Host "New Docker Engine available" -ForegroundColor Green
        }
        else {
            Write-Host "Docker Service not running" -ForegroundColor Yellow
        }
    }
    else {
        Write-Host "Docker Engine not found" -ForegroundColor Red
        Return
    }

    Write-Host "Updating to new Docker Engine version"

    if ($dockerService) {
        Stop-Service docker -ErrorAction SilentlyContinue
    }

    # Searching Docker Location
    $DockerPath = (Get-WmiObject win32_service | Where-Object { $_.Name -like 'docker' }).pathname
    if ($DockerPath.indexof(" --") -gt 0) {
        $DockerPath = $DockerPath.Substring(0, $DockerPath.indexof(" --"))
    }
    $DockerPath = $DockerPath.Replace('"', '')
    $DockerPath = (Get-Item -Path $DockerPath).DirectoryName

    # Download new version
    $tempFolderPath = Join-Path $Env:Temp $(New-Guid)
    New-Item -Type Directory -Path $tempFolderPath | Out-Null
    $tempFile = Join-Path $tempFolderPath 'docker.zip'
    Invoke-WebRequest -UseBasicParsing -Uri $latestZipFileUrl -OutFile $tempFile

    # Expand
    Expand-Archive -Path $tempFile -DestinationPath $tempFolderPath -Force
    if (Test-Path (Join-Path $DockerPath 'docker.exe')) {
        Copy-Item -Path (Join-Path $tempFolderPath 'docker/docker.exe') -Destination $DockerPath -Force
    }
    if (Test-Path (Join-Path $DockerPath 'dockerd.exe')) {
        Copy-Item -Path (Join-Path $tempFolderPath 'docker/dockerd.exe') -Destination $DockerPath -Force
    }
    Remove-Item $tempFile -Force

    # Start Service
    Start-Service docker
}
Export-ModuleMember -Function Update-BCDevDockerOnServer

# SIG # Begin signature block
# MIInngYJKoZIhvcNAQcCoIInjzCCJ4sCAQExDzANBglghkgBZQMEAgEFADB5Bgor
# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG
# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCDS2xWi4eOA4rcd
# KGGuIrgEGlrkm7JJ4CVhsDPf1MZrdKCCILUwggWNMIIEdaADAgECAhAOmxiO+dAt
# 5+/bUOIIQBhaMA0GCSqGSIb3DQEBDAUAMGUxCzAJBgNVBAYTAlVTMRUwEwYDVQQK
# EwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20xJDAiBgNV
# BAMTG0RpZ2lDZXJ0IEFzc3VyZWQgSUQgUm9vdCBDQTAeFw0yMjA4MDEwMDAwMDBa
# Fw0zMTExMDkyMzU5NTlaMGIxCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2Vy
# dCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20xITAfBgNVBAMTGERpZ2lD
# ZXJ0IFRydXN0ZWQgUm9vdCBHNDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoC
# ggIBAL/mkHNo3rvkXUo8MCIwaTPswqclLskhPfKK2FnC4SmnPVirdprNrnsbhA3E
# MB/zG6Q4FutWxpdtHauyefLKEdLkX9YFPFIPUh/GnhWlfr6fqVcWWVVyr2iTcMKy
# unWZanMylNEQRBAu34LzB4TmdDttceItDBvuINXJIB1jKS3O7F5OyJP4IWGbNOsF
# xl7sWxq868nPzaw0QF+xembud8hIqGZXV59UWI4MK7dPpzDZVu7Ke13jrclPXuU1
# 5zHL2pNe3I6PgNq2kZhAkHnDeMe2scS1ahg4AxCN2NQ3pC4FfYj1gj4QkXCrVYJB
# MtfbBHMqbpEBfCFM1LyuGwN1XXhm2ToxRJozQL8I11pJpMLmqaBn3aQnvKFPObUR
# WBf3JFxGj2T3wWmIdph2PVldQnaHiZdpekjw4KISG2aadMreSx7nDmOu5tTvkpI6
# nj3cAORFJYm2mkQZK37AlLTSYW3rM9nF30sEAMx9HJXDj/chsrIRt7t/8tWMcCxB
# YKqxYxhElRp2Yn72gLD76GSmM9GJB+G9t+ZDpBi4pncB4Q+UDCEdslQpJYls5Q5S
# UUd0viastkF13nqsX40/ybzTQRESW+UQUOsxxcpyFiIJ33xMdT9j7CFfxCBRa2+x
# q4aLT8LWRV+dIPyhHsXAj6KxfgommfXkaS+YHS312amyHeUbAgMBAAGjggE6MIIB
# NjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTs1+OC0nFdZEzfLmc/57qYrhwP
# TzAfBgNVHSMEGDAWgBRF66Kv9JLLgjEtUYunpyGd823IDzAOBgNVHQ8BAf8EBAMC
# AYYweQYIKwYBBQUHAQEEbTBrMCQGCCsGAQUFBzABhhhodHRwOi8vb2NzcC5kaWdp
# Y2VydC5jb20wQwYIKwYBBQUHMAKGN2h0dHA6Ly9jYWNlcnRzLmRpZ2ljZXJ0LmNv
# bS9EaWdpQ2VydEFzc3VyZWRJRFJvb3RDQS5jcnQwRQYDVR0fBD4wPDA6oDigNoY0
# aHR0cDovL2NybDMuZGlnaWNlcnQuY29tL0RpZ2lDZXJ0QXNzdXJlZElEUm9vdENB
# LmNybDARBgNVHSAECjAIMAYGBFUdIAAwDQYJKoZIhvcNAQEMBQADggEBAHCgv0Nc
# Vec4X6CjdBs9thbX979XB72arKGHLOyFXqkauyL4hxppVCLtpIh3bb0aFPQTSnov
# Lbc47/T/gLn4offyct4kvFIDyE7QKt76LVbP+fT3rDB6mouyXtTP0UNEm0Mh65Zy
# oUi0mcudT6cGAxN3J0TU53/oWajwvy8LpunyNDzs9wPHh6jSTEAZNUZqaVSwuKFW
# juyk1T3osdz9HNj0d1pcVIxv76FQPfx2CWiEn2/K2yCNNWAcAgPLILCsWKAOQGPF
# mCLBsln1VWvPJ6tsds5vIy30fnFqI2si/xK4VC0nftg62fC2h5b9W9FcrBjDTZ9z
# twGpn1eqXijiuZQwggauMIIElqADAgECAhAHNje3JFR82Ees/ShmKl5bMA0GCSqG
# SIb3DQEBCwUAMGIxCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMx
# GTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20xITAfBgNVBAMTGERpZ2lDZXJ0IFRy
# dXN0ZWQgUm9vdCBHNDAeFw0yMjAzMjMwMDAwMDBaFw0zNzAzMjIyMzU5NTlaMGMx
# CzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5EaWdpQ2VydCwgSW5jLjE7MDkGA1UEAxMy
# RGlnaUNlcnQgVHJ1c3RlZCBHNCBSU0E0MDk2IFNIQTI1NiBUaW1lU3RhbXBpbmcg
# Q0EwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDGhjUGSbPBPXJJUVXH
# JQPE8pE3qZdRodbSg9GeTKJtoLDMg/la9hGhRBVCX6SI82j6ffOciQt/nR+eDzMf
# UBMLJnOWbfhXqAJ9/UO0hNoR8XOxs+4rgISKIhjf69o9xBd/qxkrPkLcZ47qUT3w
# 1lbU5ygt69OxtXXnHwZljZQp09nsad/ZkIdGAHvbREGJ3HxqV3rwN3mfXazL6IRk
# tFLydkf3YYMZ3V+0VAshaG43IbtArF+y3kp9zvU5EmfvDqVjbOSmxR3NNg1c1eYb
# qMFkdECnwHLFuk4fsbVYTXn+149zk6wsOeKlSNbwsDETqVcplicu9Yemj052FVUm
# cJgmf6AaRyBD40NjgHt1biclkJg6OBGz9vae5jtb7IHeIhTZgirHkr+g3uM+onP6
# 5x9abJTyUpURK1h0QCirc0PO30qhHGs4xSnzyqqWc0Jon7ZGs506o9UD4L/wojzK
# QtwYSH8UNM/STKvvmz3+DrhkKvp1KCRB7UK/BZxmSVJQ9FHzNklNiyDSLFc1eSuo
# 80VgvCONWPfcYd6T/jnA+bIwpUzX6ZhKWD7TA4j+s4/TXkt2ElGTyYwMO1uKIqjB
# Jgj5FBASA31fI7tk42PgpuE+9sJ0sj8eCXbsq11GdeJgo1gJASgADoRU7s7pXche
# MBK9Rp6103a50g5rmQzSM7TNsQIDAQABo4IBXTCCAVkwEgYDVR0TAQH/BAgwBgEB
# /wIBADAdBgNVHQ4EFgQUuhbZbU2FL3MpdpovdYxqII+eyG8wHwYDVR0jBBgwFoAU
# 7NfjgtJxXWRM3y5nP+e6mK4cD08wDgYDVR0PAQH/BAQDAgGGMBMGA1UdJQQMMAoG
# CCsGAQUFBwMIMHcGCCsGAQUFBwEBBGswaTAkBggrBgEFBQcwAYYYaHR0cDovL29j
# c3AuZGlnaWNlcnQuY29tMEEGCCsGAQUFBzAChjVodHRwOi8vY2FjZXJ0cy5kaWdp
# Y2VydC5jb20vRGlnaUNlcnRUcnVzdGVkUm9vdEc0LmNydDBDBgNVHR8EPDA6MDig
# NqA0hjJodHRwOi8vY3JsMy5kaWdpY2VydC5jb20vRGlnaUNlcnRUcnVzdGVkUm9v
# dEc0LmNybDAgBgNVHSAEGTAXMAgGBmeBDAEEAjALBglghkgBhv1sBwEwDQYJKoZI
# hvcNAQELBQADggIBAH1ZjsCTtm+YqUQiAX5m1tghQuGwGC4QTRPPMFPOvxj7x1Bd
# 4ksp+3CKDaopafxpwc8dB+k+YMjYC+VcW9dth/qEICU0MWfNthKWb8RQTGIdDAiC
# qBa9qVbPFXONASIlzpVpP0d3+3J0FNf/q0+KLHqrhc1DX+1gtqpPkWaeLJ7giqzl
# /Yy8ZCaHbJK9nXzQcAp876i8dU+6WvepELJd6f8oVInw1YpxdmXazPByoyP6wCeC
# RK6ZJxurJB4mwbfeKuv2nrF5mYGjVoarCkXJ38SNoOeY+/umnXKvxMfBwWpx2cYT
# gAnEtp/Nh4cku0+jSbl3ZpHxcpzpSwJSpzd+k1OsOx0ISQ+UzTl63f8lY5knLD0/
# a6fxZsNBzU+2QJshIUDQtxMkzdwdeDrknq3lNHGS1yZr5Dhzq6YBT70/O3itTK37
# xJV77QpfMzmHQXh6OOmc4d0j/R0o08f56PGYX/sr2H7yRp11LB4nLCbbbxV7HhmL
# NriT1ObyF5lZynDwN7+YAN8gFk8n+2BnFqFmut1VwDophrCYoCvtlUG3OtUVmDG0
# YgkPCr2B2RP+v6TR81fZvAT6gt4y3wSJ8ADNXcL50CN/AAvkdgIm2fBldkKmKYcJ
# RyvmfxqkhQ/8mJb2VVQrH4D6wPIOK+XW+6kvRBVK5xMOHds3OBqhK/bt1nz8MIIG
# vDCCBKSgAwIBAgIQC65mvFq6f5WHxvnpBOMzBDANBgkqhkiG9w0BAQsFADBjMQsw
# CQYDVQQGEwJVUzEXMBUGA1UEChMORGlnaUNlcnQsIEluYy4xOzA5BgNVBAMTMkRp
# Z2lDZXJ0IFRydXN0ZWQgRzQgUlNBNDA5NiBTSEEyNTYgVGltZVN0YW1waW5nIENB
# MB4XDTI0MDkyNjAwMDAwMFoXDTM1MTEyNTIzNTk1OVowQjELMAkGA1UEBhMCVVMx
# ETAPBgNVBAoTCERpZ2lDZXJ0MSAwHgYDVQQDExdEaWdpQ2VydCBUaW1lc3RhbXAg
# MjAyNDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAL5qc5/2lSGrljC6
# W23mWaO16P2RHxjEiDtqmeOlwf0KMCBDEr4IxHRGd7+L660x5XltSVhhK64zi9Ce
# C9B6lUdXM0s71EOcRe8+CEJp+3R2O8oo76EO7o5tLuslxdr9Qq82aKcpA9O//X6Q
# E+AcaU/byaCagLD/GLoUb35SfWHh43rOH3bpLEx7pZ7avVnpUVmPvkxT8c2a2yC0
# WMp8hMu60tZR0ChaV76Nhnj37DEYTX9ReNZ8hIOYe4jl7/r419CvEYVIrH6sN00y
# x49boUuumF9i2T8UuKGn9966fR5X6kgXj3o5WHhHVO+NBikDO0mlUh902wS/Eeh8
# F/UFaRp1z5SnROHwSJ+QQRZ1fisD8UTVDSupWJNstVkiqLq+ISTdEjJKGjVfIcsg
# A4l9cbk8Smlzddh4EfvFrpVNnes4c16Jidj5XiPVdsn5n10jxmGpxoMc6iPkoaDh
# i6JjHd5ibfdp5uzIXp4P0wXkgNs+CO/CacBqU0R4k+8h6gYldp4FCMgrXdKWfM4N
# 0u25OEAuEa3JyidxW48jwBqIJqImd93NRxvd1aepSeNeREXAu2xUDEW8aqzFQDYm
# r9ZONuc2MhTMizchNULpUEoA6Vva7b1XCB+1rxvbKmLqfY/M/SdV6mwWTyeVy5Z/
# JkvMFpnQy5wR14GJcv6dQ4aEKOX5AgMBAAGjggGLMIIBhzAOBgNVHQ8BAf8EBAMC
# B4AwDAYDVR0TAQH/BAIwADAWBgNVHSUBAf8EDDAKBggrBgEFBQcDCDAgBgNVHSAE
# GTAXMAgGBmeBDAEEAjALBglghkgBhv1sBwEwHwYDVR0jBBgwFoAUuhbZbU2FL3Mp
# dpovdYxqII+eyG8wHQYDVR0OBBYEFJ9XLAN3DigVkGalY17uT5IfdqBbMFoGA1Ud
# HwRTMFEwT6BNoEuGSWh0dHA6Ly9jcmwzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydFRy
# dXN0ZWRHNFJTQTQwOTZTSEEyNTZUaW1lU3RhbXBpbmdDQS5jcmwwgZAGCCsGAQUF
# BwEBBIGDMIGAMCQGCCsGAQUFBzABhhhodHRwOi8vb2NzcC5kaWdpY2VydC5jb20w
# WAYIKwYBBQUHMAKGTGh0dHA6Ly9jYWNlcnRzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2Vy
# dFRydXN0ZWRHNFJTQTQwOTZTSEEyNTZUaW1lU3RhbXBpbmdDQS5jcnQwDQYJKoZI
# hvcNAQELBQADggIBAD2tHh92mVvjOIQSR9lDkfYR25tOCB3RKE/P09x7gUsmXqt4
# 0ouRl3lj+8QioVYq3igpwrPvBmZdrlWBb0HvqT00nFSXgmUrDKNSQqGTdpjHsPy+
# LaalTW0qVjvUBhcHzBMutB6HzeledbDCzFzUy34VarPnvIWrqVogK0qM8gJhh/+q
# DEAIdO/KkYesLyTVOoJ4eTq7gj9UFAL1UruJKlTnCVaM2UeUUW/8z3fvjxhN6hdT
# 98Vr2FYlCS7Mbb4Hv5swO+aAXxWUm3WpByXtgVQxiBlTVYzqfLDbe9PpBKDBfk+r
# abTFDZXoUke7zPgtd7/fvWTlCs30VAGEsshJmLbJ6ZbQ/xll/HjO9JbNVekBv2Tg
# em+mLptR7yIrpaidRJXrI+UzB6vAlk/8a1u7cIqV0yef4uaZFORNekUgQHTqddms
# PCEIYQP7xGxZBIhdmm4bhYsVA6G2WgNFYagLDBzpmk9104WQzYuVNsxyoVLObhx3
# RugaEGru+SojW4dHPoWrUhftNpFC5H7QEY7MhKRyrBe7ucykW7eaCuWBsBb4HOKR
# FVDcrZgdwaSIqMDiCLg4D+TPVgKx2EgEdeoHNHT9l3ZDBD+XgbF+23/zBjeCtxz+
# dL/9NWR6P2eZRi7zcEO1xwcdcqJsyz/JceENc2Sg8h3KeFUCS7tpFk7CrDqkMIIG
# vzCCBKegAwIBAgIRAIFOQhehKX/tWszUF/iRrXUwDQYJKoZIhvcNAQELBQAwUzEL
# MAkGA1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExKTAnBgNVBAMT
# IEdsb2JhbFNpZ24gQ29kZSBTaWduaW5nIFJvb3QgUjQ1MB4XDTI0MDYxOTAzMjUx
# MVoXDTM4MDcyODAwMDAwMFowWTELMAkGA1UEBhMCQkUxGTAXBgNVBAoTEEdsb2Jh
# bFNpZ24gbnYtc2ExLzAtBgNVBAMTJkdsb2JhbFNpZ24gR0NDIFI0NSBDb2RlU2ln
# bmluZyBDQSAyMDIwMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA1kJN
# +eNPxiP0bB2BpjD3SD3P0OWN5SAilgdENV0Gzw8dcGDmJlT6UyNgAqhfAgL3jslu
# Pal4Bb2O9U8ZJJl8zxEWmx97a9Kje2hld6vYsSw/03IGMlxbrFBnLCVNVgY2/MFi
# TH19hhaVml1UulDQsH+iRBnp1m5sPhPCnxHUXzRbUWgxYwr4W9DeullfMa+JaDhA
# PgjoU2dOY7Yhju/djYVBVZ4cvDfclaDEcacfG6VJbgogWX6Jo1gVlwAlad/ewmpQ
# ZU5T+2uhnxgeig5fVF694FvP8gwE0t4IoRAm97Lzei7CjpbBP86l2vRZKIw3ZaEx
# lguOpHZ3FUmEZoIl50MKd1KxmVFC/6Gy3ZzS3BjZwYapQB1Bl2KGvKj/osdjFwb9
# Zno2lAEgiXgfkPR7qVJOak9UBiqAr57HUEL6ZQrjAfSxbqwOqOOBGag4yJ4DKIak
# dKdHlX5yWip7FWocxGnmsL5AGZnL0n1VTiKcEOChW8OzLnqLxN7xSx+MKHkwRX9s
# E7Y9LP8tSooq7CgPLcrUnJiKSm1aNiwv37rL4kFKCHcYiK01YZQS86Ry6+42nqdR
# J5E896IazPyH5ZfhUYdp6SLMg8C3D0VsB+FDT9SMSs7PY7G1pBB6+Q0MKLBrNP4h
# aCdv7Pj6JoRbdULNiSZ5WZ1rq2NxYpAlDQgg8f8CAwEAAaOCAYYwggGCMA4GA1Ud
# DwEB/wQEAwIBhjATBgNVHSUEDDAKBggrBgEFBQcDAzASBgNVHRMBAf8ECDAGAQH/
# AgEAMB0GA1UdDgQWBBTas43AJJCja3fTDKBZ3SFnZHYLeDAfBgNVHSMEGDAWgBQf
# AL9GgAr8eDm3pbRD2VZQu86WOzCBkwYIKwYBBQUHAQEEgYYwgYMwOQYIKwYBBQUH
# MAGGLWh0dHA6Ly9vY3NwLmdsb2JhbHNpZ24uY29tL2NvZGVzaWduaW5ncm9vdHI0
# NTBGBggrBgEFBQcwAoY6aHR0cDovL3NlY3VyZS5nbG9iYWxzaWduLmNvbS9jYWNl
# cnQvY29kZXNpZ25pbmdyb290cjQ1LmNydDBBBgNVHR8EOjA4MDagNKAyhjBodHRw
# Oi8vY3JsLmdsb2JhbHNpZ24uY29tL2NvZGVzaWduaW5ncm9vdHI0NS5jcmwwLgYD
# VR0gBCcwJTAIBgZngQwBBAEwCwYJKwYBBAGgMgEyMAwGCisGAQQBoDIKBAIwDQYJ
# KoZIhvcNAQELBQADggIBADIQ5LwXpYMQQJ3Tqf0nz0VyqcUfSzNZbywyMXlxhNY2
# Z9WrdPzU8gY6brXWy/FCg5a9fd6VLBrtauNBHKbIiTHCWWyJvCojA1lQR0n9b1MO
# KijMSFTv8yMYW5I2TryjY9TD+wAPgNEgwsrllrrwmluqpCV6Gdv623tTT/m2o9lj
# 1XVfAaUo27YYKRRleZzbtOuImBRTUGAxDGazUeNuySkmZPAU0XN4xISNPhSlklmr
# eUFG6jTPgXZGOpF4GXO+/gb118GEOaBwTAo1AF7YKjAkHzJ3tuF837NGQeH6bY3j
# 4wufL0DZpToNZMm+jNEayWUgOuIA+k56ITdBcJmdUB+Ze3WQdHNNRaVOWH/ddmqQ
# WIlmk2Sj/lT3Tarr5SDuddeIsh0MPLyhkqBW5Ef8Zw/qeCnfj6PH2eMxeKcLKZRr
# HCddISeH4qPvyECQLlwXKCXTAUQXq4DafJSoWyP8IJ6bkaGQ/7MN5XJELEcV89SR
# cib58gXjAWf3abXeBbb+KJCMf6EpO7cs2mQiaZbE9NNXDSqFxrtoaKyL8VJLZG6q
# uLfsTRQc+qgUOM7sJevkYt01+bh7B10bQ2cCCGs9vyUjg4GWcwfu/lhaPDfaoNtf
# 0pw6RpKcxCYcCTDaJeQOHZBz1B6HTmmEgZHNZX7nNfqDgGrTNB1Gp3gIpngyJWZ6
# MIIG6zCCBNOgAwIBAgIMfDeOzfSMBpXQEWmrMA0GCSqGSIb3DQEBCwUAMFkxCzAJ
# BgNVBAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMS8wLQYDVQQDEyZH
# bG9iYWxTaWduIEdDQyBSNDUgQ29kZVNpZ25pbmcgQ0EgMjAyMDAeFw0yNDA5MTkx
# MjE3MjJaFw0yNTEwMjcwODE1NTlaMFkxCzAJBgNVBAYTAkZSMREwDwYDVQQIEwhN
# b3JiaWhhbjEPMA0GA1UEBxMGVmFubmVzMRIwEAYDVQQKEwlCUklDS0xFQUQxEjAQ
# BgNVBAMTCUJSSUNLTEVBRDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIB
# ANysgL1dmPiIH07tM4uKTz5r2+xZ0EHWijxeWhGiJAb0DvOSfJX08pqkb3Q8MMcm
# SgTIggnzr68GzO8oU9JqM8+uHFJUVsAWMptAa8FxaUI0q9/8MdVKOoTkRmyDGBMK
# bgDdYf+YVbLeYmsE267LQeOF1koiSmK7WRkytnjwbOZMFr/qObysIL6DnMiM802A
# C4dFP1Z6hDKJuAu1mOmSZpqgBQZ4atM2TiOBw2qApZHbbur+bM2fEah2j46TIjTi
# QZ/YD7Sznuv2feHDB9h3on8MMWff8POZURkZRFbJRn8EUk/S4+3xRLE2ylNuYIg6
# gFW1QJaaUEU90ay1hLdfFJLF5WMnRyFaTaJwX3cYjP8khR/vbA966bQ4l0lHMbf2
# tLUpeMShi0vr5f1vOqSZ10qR3hzYyYMLSmj/dIHFR3ngprG5QTcjfIwFSdro8Aij
# 0HYmN1tQ6HC8rV4yUJ8pDzKayQy5JDIKVYfq9jwaD45KGLUUtrot1lCPI9Zm0Hf6
# lMjGBLpM16MKK8U9E8ZXz5gseqUaMJg4g34vl+gbEObOPdGtbEVicEqip1mSHseR
# HrDIOzTNA8IzI9F10csChBOlVfGZZYLZTN2DJQyhYdm6gEFzrNmBE48rH+Fzdcf4
# J1VvRgDrxSAdtpVLqbe5iR996zpfb/50JtGrc3e59YmxAgMBAAGjggGxMIIBrTAO
# BgNVHQ8BAf8EBAMCB4AwgZsGCCsGAQUFBwEBBIGOMIGLMEoGCCsGAQUFBzAChj5o
# dHRwOi8vc2VjdXJlLmdsb2JhbHNpZ24uY29tL2NhY2VydC9nc2djY3I0NWNvZGVz
# aWduY2EyMDIwLmNydDA9BggrBgEFBQcwAYYxaHR0cDovL29jc3AuZ2xvYmFsc2ln
# bi5jb20vZ3NnY2NyNDVjb2Rlc2lnbmNhMjAyMDBWBgNVHSAETzBNMEEGCSsGAQQB
# oDIBMjA0MDIGCCsGAQUFBwIBFiZodHRwczovL3d3dy5nbG9iYWxzaWduLmNvbS9y
# ZXBvc2l0b3J5LzAIBgZngQwBBAEwCQYDVR0TBAIwADBFBgNVHR8EPjA8MDqgOKA2
# hjRodHRwOi8vY3JsLmdsb2JhbHNpZ24uY29tL2dzZ2NjcjQ1Y29kZXNpZ25jYTIw
# MjAuY3JsMBMGA1UdJQQMMAoGCCsGAQUFBwMDMB8GA1UdIwQYMBaAFNqzjcAkkKNr
# d9MMoFndIWdkdgt4MB0GA1UdDgQWBBT6laBcJjcU8FGox8y/wQdZCLUf2zANBgkq
# hkiG9w0BAQsFAAOCAgEAaJ+rcBMAnoJ+aDWDFOBe363c6HTqXcC5Rf4RIJt/mbzG
# NBYDf6S2y+oA1q4mHJ/8TByYTKIvHKCQHFTvN1tl2zsulY7FtaeXC6PICPxXI5Yu
# jeYTAO6b9GMjCbxQ/IdJex6KJXuwHViTXP86G6ZwKAfczYXAmqRoC5cmlt+XQy9b
# ZNC5+GpKc6qvbVON1h7lWl1Y5Mm9rTvEzWNC06CRwZbhPeeFMRXs2/z9VtunN+S9
# k+uXLR/vaC2ptuZkZjacAK9GjX9Pbw+TJ1dxR8/0wq5eIXQfgEe/Q8ZR3LWUudZB
# sRWRIswUBsNjyfTI02B0vuG4tv8kuS+i45mtOPGZ5KZRquIGLjrhsOopmbAFNOh+
# iBLCq1ouWoNqkqOMZq81PN3fYb4rTdKX9OogYQn0AQ4UXFsAChqEC4B1XhXy/TW7
# fRWWxZRA8HXbyvid8n/9XX7p56PFipX/HJDG85PVLg+h8CJmsjrNw6qq0M3949gu
# YO79tylNhDEdI6eC5roGS4qReRsjvwYd+xUNM98oSCA8rXjMkLEZufRmJVfJt+Oi
# qEst933qbVeUyfN/tqbd1vpxwm1Owm5Dl0ap0GuAo01DEzlm8602Rw+Y7h53dsMM
# nQRrK4YLB6L1My2rUikqdtvzx7uUogzLDLAVR5hkpjF5DA6AeXNfpTJFtbyN51kx
# ggY/MIIGOwIBATBpMFkxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWdu
# IG52LXNhMS8wLQYDVQQDEyZHbG9iYWxTaWduIEdDQyBSNDUgQ29kZVNpZ25pbmcg
# Q0EgMjAyMAIMfDeOzfSMBpXQEWmrMA0GCWCGSAFlAwQCAQUAoIGEMBgGCisGAQQB
# gjcCAQwxCjAIoAKAAKECgAAwGQYJKoZIhvcNAQkDMQwGCisGAQQBgjcCAQQwHAYK
# KwYBBAGCNwIBCzEOMAwGCisGAQQBgjcCARUwLwYJKoZIhvcNAQkEMSIEINHY32KE
# 4JiBB2/gXuHulE+t8naLahKucX9rtGbl0K1aMA0GCSqGSIb3DQEBAQUABIICACAC
# sWrAQm8lNSIS7qcEPmivBJqjmD0VljJreDfUb0F65Fos187WoxckAUf+ZhAwXn0F
# FjG9/6q3aoSDxU/GVrQvzsat/sSiujCX2Oj4AxQtwgDxyg3TVU4LFasv/kcFnLNt
# 2RRw+7DS5VRUeFIX3+DiJUhxLAkovVlfxXRZqd0NKxBPrMosX46+mglrEQviB51Q
# 4SyYkH2hb5SVHloORctMqMXheImVOL8Rb1rJlQ2tb8OfYOHZBVVGL8nErPnRZzjF
# bV4F1XDUBtHkhfCNBE0hECi0CrQ2DzIacbUR6+FX9q6O+ZZAN/Q3EERtaGYYRJAP
# VQ4wrvXd2VoV2mhy8dLsj4UeCmr8H/7RbHiI07ZynsmjOTCyfiYkC/8ReR5yfMOh
# bybUog+xN5u7RoXDAkOarLw5LuInWTbIP1cVUQFGd4QZJWlvMvrSAnyYQxLKOCEL
# 8EqlZ9MBu/QevNkf+Lj3+Sbt4XZT9PRMxWFGh9iFEUVX2xsp6iPXUMZnc9oRvLx1
# g3wBfCCTThOLv9uMMipEkcT0+FU2ksPWvT8jFoFdv6SsUQv1PKnI9ThuUBq2HOeG
# bo8V0yZBrs7hehD6diIafmEL8Et6N72+1uK19hYH2BGGIXojwe8oILnbQgYuK85y
# zDc5Ag3Amfb+/+qD+JzzNh7fBGGQtHjUbbbqt8MxoYIDIDCCAxwGCSqGSIb3DQEJ
# BjGCAw0wggMJAgEBMHcwYzELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDkRpZ2lDZXJ0
# LCBJbmMuMTswOQYDVQQDEzJEaWdpQ2VydCBUcnVzdGVkIEc0IFJTQTQwOTYgU0hB
# MjU2IFRpbWVTdGFtcGluZyBDQQIQC65mvFq6f5WHxvnpBOMzBDANBglghkgBZQME
# AgEFAKBpMBgGCSqGSIb3DQEJAzELBgkqhkiG9w0BBwEwHAYJKoZIhvcNAQkFMQ8X
# DTI0MTAxODE3NTcxOFowLwYJKoZIhvcNAQkEMSIEIISnjXHbGN4V1F0jirgYU40m
# DMCjZJOa7auHZmwJTrVQMA0GCSqGSIb3DQEBAQUABIICAG9yf4fl3gYRpFFfYroI
# eQ04mXfjgwgaDqod2ItG27mBFJm8a+CbAuwK9CLGf7QhZdO4UfVqHLHZcNSkdN4j
# eb9a/LBkIFKytxgpiFVqI3KoXW0Rs9IxF80iWELYtolUvxEBJyXd77LJHoCr6mkK
# cOzyK2sVFsucJZsYqCKQTvWVEGFpredDXFqpiMnxnyYxmU82rr3JN623ouB0HUiw
# 8rKFqFdfV2fCfFCrwV87zZFTDcPz5UuYFQNLV/a3D0+o+FCn+Zu0KeppU3VtBz13
# x9J7ivJLfg5i6SE2IY5umeEtBPeWI4R1wjk95TWa2htW90uW0bQOpxn0ZFn9gLxF
# NjmSVQpVF8qknUBJch9tAhByG4ccxe3H7kZFnNCwNO+f8tkVh4ygNdeRgZnUOba6
# /xqMF7qXBEMd5ewJGIF0o1sW5uGWdAqWZQpFeuBzll1BUGwoTSTVpwK6swCI9zzR
# GOOrmax2Nwrqc8c3OwzT2Ya3skecrYdWbi0cHGt0fPsVY371Cl/oBisNhkrZdHOQ
# gYiulyTCjaVfkFZyMRZEor0jXmEvBWyMVEvKvhOAdOZeRG62Wx8A78zClQ5TBULq
# 8ts4anxAUAnVupDFi2SRxlwwLsej5JHFtE4+HWZFfpLXFWP5HBKAb8e77o+FzUZe
# /e5NVGBwLIRSPO+ztD33X9nJ
# SIG # End signature block