Public/Set-SpecDeviceToComPort.ps1

function Set-SpecDeviceToComPort {
    <#
    .SYNOPSIS
    Moves a device to a specified COM port number.
 
    .DESCRIPTION
    The Set-SpecDeviceToComPort function allows you to move a device to a specified COM port number in Windows. It iterates through the available COM ports, checks if a device is attached, and, if necessary, updates the COM port settings to move the device to the desired COM port.
 
    .PARAMETER PortNumber
    Specifies the target COM port number to which the device should be moved. The default is COM1.
 
    .EXAMPLE
    Set-SpecDeviceToComPort -PortNumber 3
    Moves the attached device to COM3.
 
    .NOTES
    Author : owen.heaume
    Version : 1.0
    #>


    [CmdletBinding()]
    param (
        [parameter(Mandatory = $false)]
        [int]$PortNumber = 1
    )

    # Convert the port number to a string
    $PortNumberString = "COM$PortNumber"

    # Get the COM port details for all serial ports
    $comports = Get-WmiObject Win32_PnPEntity | Where-Object { $_.caption -match '\(COM\d+\)' }

    # Iterate through the COM ports
    foreach ($comPort in $comPorts) {
        $device = $comPort.PNPDeviceID

        # Check if a device is attached to the COM port
        if ($device) {
            #if the attached device is 'Intel*' then ignore it
            if ($comport.description -match "\bIntel") {
                write-host "Intel device detected - not moving com port for this device`n" -ForegroundColor DarkYellow
                continue
            }

            # Check if the device is already on the specified COM port
            $oldPort = Get-SpecComPort -inputString $comport.name
            if ($oldport -eq $PortNumberString) {
                Write-Host "Device '$($comPort.Description)' is already on '$PortNumberString' No action needed." -ForegroundColor DarkGreen
                return
            } else {
                write-host "Device needs to move to specified com port. Moving to COM$PortNumber..." -ForegroundColor DarkYellow
                # Construct the registry paths for the device
                $deviceKey = "HKLM:\SYSTEM\CurrentControlSet\Enum\$($comPort.PNPDeviceID)"
                $portKey = "$deviceKey\Device Parameters"

                # Set the new port name and update Friendly Name
                try {
                    Set-ItemProperty -Path $portKey -Name "PortName" -Value $PortNumberString -ErrorAction Stop
                    Set-ItemProperty -Path $deviceKey -Name "FriendlyName" -Value "$($comPort.Description) ($PortNumberString)" -ErrorAction Stop
                    Write-Host "Device '$($comPort.Description)' set to '$PortNumberString'" -ForegroundColor DarkGreen
                } catch {
                    Write-Error "Failed to update the COM port settings: $_"
                }
            }

            # No need to continue checking other COM ports
            break
        }

        write-host "Releasing previous port from com database..." -ForegroundColor DarkCyan

        $status = Release-SpecPreviousComPort -OldPort $OldPort

        switch ($status) {
            400 { Write-Host "OK`n" -ForegroundColor DarkGreen }
            401 { Write-Host "Unable to release previous port from COM database" -ForegroundColor DarkYellow }
        }
    }
}

# SIG # Begin signature block
# MIIsogYJKoZIhvcNAQcCoIIskzCCLI8CAQExDzANBglghkgBZQMEAgEFADB5Bgor
# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG
# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCA7b3FlF+Ike6mk
# YtOa4Gsnho18ie/x89igxODaBYLRnaCCE7owggWQMIIDeKADAgECAhAFmxtXno4h
# MuI5B72nd3VcMA0GCSqGSIb3DQEBDAUAMGIxCzAJBgNVBAYTAlVTMRUwEwYDVQQK
# EwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20xITAfBgNV
# BAMTGERpZ2lDZXJ0IFRydXN0ZWQgUm9vdCBHNDAeFw0xMzA4MDExMjAwMDBaFw0z
# ODAxMTUxMjAwMDBaMGIxCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJ
# bmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20xITAfBgNVBAMTGERpZ2lDZXJ0
# IFRydXN0ZWQgUm9vdCBHNDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIB
# AL/mkHNo3rvkXUo8MCIwaTPswqclLskhPfKK2FnC4SmnPVirdprNrnsbhA3EMB/z
# G6Q4FutWxpdtHauyefLKEdLkX9YFPFIPUh/GnhWlfr6fqVcWWVVyr2iTcMKyunWZ
# anMylNEQRBAu34LzB4TmdDttceItDBvuINXJIB1jKS3O7F5OyJP4IWGbNOsFxl7s
# Wxq868nPzaw0QF+xembud8hIqGZXV59UWI4MK7dPpzDZVu7Ke13jrclPXuU15zHL
# 2pNe3I6PgNq2kZhAkHnDeMe2scS1ahg4AxCN2NQ3pC4FfYj1gj4QkXCrVYJBMtfb
# BHMqbpEBfCFM1LyuGwN1XXhm2ToxRJozQL8I11pJpMLmqaBn3aQnvKFPObURWBf3
# JFxGj2T3wWmIdph2PVldQnaHiZdpekjw4KISG2aadMreSx7nDmOu5tTvkpI6nj3c
# AORFJYm2mkQZK37AlLTSYW3rM9nF30sEAMx9HJXDj/chsrIRt7t/8tWMcCxBYKqx
# YxhElRp2Yn72gLD76GSmM9GJB+G9t+ZDpBi4pncB4Q+UDCEdslQpJYls5Q5SUUd0
# viastkF13nqsX40/ybzTQRESW+UQUOsxxcpyFiIJ33xMdT9j7CFfxCBRa2+xq4aL
# T8LWRV+dIPyhHsXAj6KxfgommfXkaS+YHS312amyHeUbAgMBAAGjQjBAMA8GA1Ud
# EwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBTs1+OC0nFdZEzf
# Lmc/57qYrhwPTzANBgkqhkiG9w0BAQwFAAOCAgEAu2HZfalsvhfEkRvDoaIAjeNk
# aA9Wz3eucPn9mkqZucl4XAwMX+TmFClWCzZJXURj4K2clhhmGyMNPXnpbWvWVPjS
# PMFDQK4dUPVS/JA7u5iZaWvHwaeoaKQn3J35J64whbn2Z006Po9ZOSJTROvIXQPK
# 7VB6fWIhCoDIc2bRoAVgX+iltKevqPdtNZx8WorWojiZ83iL9E3SIAveBO6Mm0eB
# cg3AFDLvMFkuruBx8lbkapdvklBtlo1oepqyNhR6BvIkuQkRUNcIsbiJeoQjYUIp
# 5aPNoiBB19GcZNnqJqGLFNdMGbJQQXE9P01wI4YMStyB0swylIQNCAmXHE/A7msg
# dDDS4Dk0EIUhFQEI6FUy3nFJ2SgXUE3mvk3RdazQyvtBuEOlqtPDBURPLDab4vri
# RbgjU2wGb2dVf0a1TD9uKFp5JtKkqGKX0h7i7UqLvBv9R0oN32dmfrJbQdA75PQ7
# 9ARj6e/CVABRoIoqyc54zNXqhwQYs86vSYiv85KZtrPmYQ/ShQDnUBrkG5WdGaG5
# nLGbsQAe79APT0JsyQq87kP6OnGlyE0mpTX9iV28hWIdMtKgK1TtmlfB2/oQzxm3
# i0objwG2J5VT6LaJbVu8aNQj6ItRolb58KaAoNYes7wPD1N1KarqE3fk3oyBIa0H
# EEcRrYc9B9F1vM/zZn4wggawMIIEmKADAgECAhAIrUCyYNKcTJ9ezam9k67ZMA0G
# CSqGSIb3DQEBDAUAMGIxCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJ
# bmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20xITAfBgNVBAMTGERpZ2lDZXJ0
# IFRydXN0ZWQgUm9vdCBHNDAeFw0yMTA0MjkwMDAwMDBaFw0zNjA0MjgyMzU5NTla
# MGkxCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5EaWdpQ2VydCwgSW5jLjFBMD8GA1UE
# AxM4RGlnaUNlcnQgVHJ1c3RlZCBHNCBDb2RlIFNpZ25pbmcgUlNBNDA5NiBTSEEz
# ODQgMjAyMSBDQTEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDVtC9C
# 0CiteLdd1TlZG7GIQvUzjOs9gZdwxbvEhSYwn6SOaNhc9es0JAfhS0/TeEP0F9ce
# 2vnS1WcaUk8OoVf8iJnBkcyBAz5NcCRks43iCH00fUyAVxJrQ5qZ8sU7H/Lvy0da
# E6ZMswEgJfMQ04uy+wjwiuCdCcBlp/qYgEk1hz1RGeiQIXhFLqGfLOEYwhrMxe6T
# SXBCMo/7xuoc82VokaJNTIIRSFJo3hC9FFdd6BgTZcV/sk+FLEikVoQ11vkunKoA
# FdE3/hoGlMJ8yOobMubKwvSnowMOdKWvObarYBLj6Na59zHh3K3kGKDYwSNHR7Oh
# D26jq22YBoMbt2pnLdK9RBqSEIGPsDsJ18ebMlrC/2pgVItJwZPt4bRc4G/rJvmM
# 1bL5OBDm6s6R9b7T+2+TYTRcvJNFKIM2KmYoX7BzzosmJQayg9Rc9hUZTO1i4F4z
# 8ujo7AqnsAMrkbI2eb73rQgedaZlzLvjSFDzd5Ea/ttQokbIYViY9XwCFjyDKK05
# huzUtw1T0PhH5nUwjewwk3YUpltLXXRhTT8SkXbev1jLchApQfDVxW0mdmgRQRNY
# mtwmKwH0iU1Z23jPgUo+QEdfyYFQc4UQIyFZYIpkVMHMIRroOBl8ZhzNeDhFMJlP
# /2NPTLuqDQhTQXxYPUez+rbsjDIJAsxsPAxWEQIDAQABo4IBWTCCAVUwEgYDVR0T
# AQH/BAgwBgEB/wIBADAdBgNVHQ4EFgQUaDfg67Y7+F8Rhvv+YXsIiGX0TkIwHwYD
# VR0jBBgwFoAU7NfjgtJxXWRM3y5nP+e6mK4cD08wDgYDVR0PAQH/BAQDAgGGMBMG
# A1UdJQQMMAoGCCsGAQUFBwMDMHcGCCsGAQUFBwEBBGswaTAkBggrBgEFBQcwAYYY
# aHR0cDovL29jc3AuZGlnaWNlcnQuY29tMEEGCCsGAQUFBzAChjVodHRwOi8vY2Fj
# ZXJ0cy5kaWdpY2VydC5jb20vRGlnaUNlcnRUcnVzdGVkUm9vdEc0LmNydDBDBgNV
# HR8EPDA6MDigNqA0hjJodHRwOi8vY3JsMy5kaWdpY2VydC5jb20vRGlnaUNlcnRU
# cnVzdGVkUm9vdEc0LmNybDAcBgNVHSAEFTATMAcGBWeBDAEDMAgGBmeBDAEEATAN
# BgkqhkiG9w0BAQwFAAOCAgEAOiNEPY0Idu6PvDqZ01bgAhql+Eg08yy25nRm95Ry
# sQDKr2wwJxMSnpBEn0v9nqN8JtU3vDpdSG2V1T9J9Ce7FoFFUP2cvbaF4HZ+N3HL
# IvdaqpDP9ZNq4+sg0dVQeYiaiorBtr2hSBh+3NiAGhEZGM1hmYFW9snjdufE5Btf
# Q/g+lP92OT2e1JnPSt0o618moZVYSNUa/tcnP/2Q0XaG3RywYFzzDaju4ImhvTnh
# OE7abrs2nfvlIVNaw8rpavGiPttDuDPITzgUkpn13c5UbdldAhQfQDN8A+KVssIh
# dXNSy0bYxDQcoqVLjc1vdjcshT8azibpGL6QB7BDf5WIIIJw8MzK7/0pNVwfiThV
# 9zeKiwmhywvpMRr/LhlcOXHhvpynCgbWJme3kuZOX956rEnPLqR0kq3bPKSchh/j
# wVYbKyP/j7XqiHtwa+aguv06P0WmxOgWkVKLQcBIhEuWTatEQOON8BUozu3xGFYH
# Ki8QxAwIZDwzj64ojDzLj4gLDb879M4ee47vtevLt/B3E+bnKD+sEq6lLyJsQfmC
# XBVmzGwOysWGw/YmMwwHS6DTBwJqakAwSEs0qFEgu60bhQjiWQ1tygVQK+pKHJ6l
# /aCnHwZ05/LWUpD9r4VIIflXO7ScA+2GRfS0YW6/aOImYIbqyK+p/pQd52MbOoZW
# eE4wggduMIIFVqADAgECAhAJoJUtTqC7i9+OKkwQKIGcMA0GCSqGSIb3DQEBCwUA
# MGkxCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5EaWdpQ2VydCwgSW5jLjFBMD8GA1UE
# AxM4RGlnaUNlcnQgVHJ1c3RlZCBHNCBDb2RlIFNpZ25pbmcgUlNBNDA5NiBTSEEz
# ODQgMjAyMSBDQTEwHhcNMjMwODA4MDAwMDAwWhcNMjUwODA3MjM1OTU5WjB2MQsw
# CQYDVQQGEwJHRzERMA8GA1UEBxMIR3Vlcm5zZXkxKTAnBgNVBAoTIFNwZWNzYXZl
# cnMgT3B0aWNhbCBHcm91cCBMaW1pdGVkMSkwJwYDVQQDEyBTcGVjc2F2ZXJzIE9w
# dGljYWwgR3JvdXAgTGltaXRlZDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoC
# ggIBAOPMoe4VdNIy4/vGzO34XwI7nCi+OH1mZuy14lq6l2iYKfo7E2DFmtAkZiH/
# vP1rbJ1yytpuhuP51ujqHfqKJ9cikkMAhI9LjD69TP9DkAgsb1DsxcWTBgNeLpNc
# dvk5gqLD2PrR+yeMKdWLnydE+oavli/nk/btmmO6jwRqdAKUTXu8hCmDDJ35anVc
# EC50aGek2LAjSNw9pUQHI0TuwhQBj22bVRwPv3SqnxXmpi4Lvk/4aRGDWkJCciWI
# a26nF3inFre5LTh1Rp1jtIf3GteieEW/bPnyhy8sJuRhhPsCxtdGxTNSIGwNxhvU
# 6FKgW1vQC6p/kPb9doDK8MF8w2gN7jJkjT8QtCdthUuSwbvfa2iNg80hzOHJ/2Ep
# t8aCVVxZgHnuWZwP4uy+mzLoE/MVPo+LbtvUXOwi8tUjcK4m0wlvWjbouwuGA/dO
# ahZ1MuQh7+DHOXHdUhJwm0RPVE/tdkJoozx7PBaOocsTxCiFmIq6GD9sBPq2yB5I
# MXRxP0ORUtgE6bL/vfVwdB0u3iLI4xT+fwS0mHMqCrEVV1AkfH8jfFB6/hLvwYo2
# d1fnGPhlykCUEltgDehuPHA7edHP7F7gJsLMLsJn5+1z/PT+ZenhA7EY7ONvgNKl
# bR1p2Z2RlxGCCKTKhc2RJ5hvYQRxKL76zFr+23FUhgDjYahtAgMBAAGjggIDMIIB
# /zAfBgNVHSMEGDAWgBRoN+Drtjv4XxGG+/5hewiIZfROQjAdBgNVHQ4EFgQU7WId
# ep8KzsDOpdKUoMlbdIsx+ckwDgYDVR0PAQH/BAQDAgeAMBMGA1UdJQQMMAoGCCsG
# AQUFBwMDMIG1BgNVHR8Ega0wgaowU6BRoE+GTWh0dHA6Ly9jcmwzLmRpZ2ljZXJ0
# LmNvbS9EaWdpQ2VydFRydXN0ZWRHNENvZGVTaWduaW5nUlNBNDA5NlNIQTM4NDIw
# MjFDQTEuY3JsMFOgUaBPhk1odHRwOi8vY3JsNC5kaWdpY2VydC5jb20vRGlnaUNl
# cnRUcnVzdGVkRzRDb2RlU2lnbmluZ1JTQTQwOTZTSEEzODQyMDIxQ0ExLmNybDA+
# BgNVHSAENzA1MDMGBmeBDAEEATApMCcGCCsGAQUFBwIBFhtodHRwOi8vd3d3LmRp
# Z2ljZXJ0LmNvbS9DUFMwgZQGCCsGAQUFBwEBBIGHMIGEMCQGCCsGAQUFBzABhhho
# dHRwOi8vb2NzcC5kaWdpY2VydC5jb20wXAYIKwYBBQUHMAKGUGh0dHA6Ly9jYWNl
# cnRzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydFRydXN0ZWRHNENvZGVTaWduaW5nUlNB
# NDA5NlNIQTM4NDIwMjFDQTEuY3J0MAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQAD
# ggIBAKWiLtlCokxJ3Z2lxExg3RLHEqYMrrZSQCud8jMJdkpJFn+YocIVY91pVFen
# LroZOXaPSG5q9KVEOQ1rOjKDNZbkI1k/AC6qY4b6ZcwrSWjKpZYhPdeaKixp+see
# MMv1HIZGBULIPv2ECsvYRXLBY2cMaFaDcT6zEJ2SwAlibWGsAffWCDmt+HDfvxCs
# zFKkUuVUmLRKAKVoRVY5bMI9TBp+BOLsj5aD8OgulHk6htiJ7rh8mDt4CksEk1yE
# e60BZiiyNTvcY/NdYyJc7onHkMguHDue6BMo6T8+3oTpuHYdddvvCeXGpGV9SG3M
# SwgRuOVo7GCiRyRqJjd1ekeOKjjgwbqUqCwfydDZ3neUv9f/lZ/RwMvvQctmc1jv
# DR2CoQ4tfMl7ISd3EmMRsDoQCk6SfV8AgC7ZpflVJRY5PZwxKB6lzy9lksdIs8IV
# 4ef3uwIPdsuRQhsmqVMkZahtLqWHXP4QdKFLRYR6yFHoJ13L4dhwaRbbpTFPDyrS
# LmSC7dbqYUlfQo23/yHMUKiG3+Tv+OELsbXaHC4DsKjl+3NxNRLOlq79AR5dNJJJ
# 1vXfvgihF+hmsEs/3oEVv8QHQdbLSBF8QBSZ1+icPagquysQguKwbzMAMTCpyEws
# LztEZyOIkkSuldBJxP6PdUcu6ywBry5uPEW06UbmfBtplI88MYIYPjCCGDoCAQEw
# fTBpMQswCQYDVQQGEwJVUzEXMBUGA1UEChMORGlnaUNlcnQsIEluYy4xQTA/BgNV
# BAMTOERpZ2lDZXJ0IFRydXN0ZWQgRzQgQ29kZSBTaWduaW5nIFJTQTQwOTYgU0hB
# Mzg0IDIwMjEgQ0ExAhAJoJUtTqC7i9+OKkwQKIGcMA0GCWCGSAFlAwQCAQUAoIGg
# MBkGCSqGSIb3DQEJAzEMBgorBgEEAYI3AgEEMBwGCisGAQQBgjcCAQsxDjAMBgor
# BgEEAYI3AgEVMC8GCSqGSIb3DQEJBDEiBCDhBKLXrd6KnXS4P4v7utlyK1ey/im7
# nHI7EaXPSyId2zA0BgorBgEEAYI3AgEMMSYwJKACgAChHoAcaHR0cHM6Ly93d3cu
# c3BlY3NhdmVycy5jby51azANBgkqhkiG9w0BAQEFAASCAgCemYsN/nx5UGyjpm24
# rS2wrROa8d8uVm4q9ygvtS3Jl52SX1KgUDoSRxI+aT/IXUNp2MZCGPAT7M7pP+uG
# LjdbDTEkUryxs2rme18Le5vlXvD2dl1kVG77rEsNlllfp8/SJXtHBwFhLF9m1A/n
# 5M3xOUKV6evYZteUPoPS36LOeS8gvAKzdNrhQM04RiJlIxWTbZEgeKtxRekJiQtT
# Arix1TwClVwCFdjcoVyXgIqd43fkWZZB/9zPn+Qw2kcdCpk8Ns/omSFMGDsucbM6
# N8hkduO9j+xScjdmVYo3nJYNRfT/4yzS5jNpyjEQysdst6bNvSz34ZZBYMLts77z
# ew2/niEruulEyey6H5hvHI/jCBv4CFCoWaswMQvlhXtboOvPXsk5P7aFAsRQVHXP
# IKIhlrzn8J98DDDLgU3ihLdU9VPX5HyOolJoY/UkmjkzBoAPez2EEEr//up7imJ7
# czBZ8LCqVsBbpCcj5uKKjjDwFKGDDb/UbJCHMInf6VB9Vr5st/A+gIxCeqIO7D4u
# dwZ+mGvrXzyHADgM2h22d3eW2faV+v1KUycrlJ91J15DMtYTav6bScbWJ27W2pSv
# 0QDnLchKvuAQl2vb8NAmK0rjIlm1MqGEQKU0n6P8j8IJQZLNDvinliipkLOj6Q68
# v5I2d2/ySKDfqDjkRzjVPcNKoKGCFO8wghTrBgorBgEEAYI3AwMBMYIU2zCCFNcG
# CSqGSIb3DQEHAqCCFMgwghTEAgEDMQ0wCwYJYIZIAWUDBAIBMHcGCyqGSIb3DQEJ
# EAEEoGgEZjBkAgEBBgwrBgEEAYKpMAEDBgEwMTANBglghkgBZQMEAgEFAAQgkTeX
# 8gsNTTYK49dm7hwJBitK+Zh5gCS+f5ZH+sPcGRcCCDamug5UhusqGA8yMDIzMDkw
# MTEwNDMxM1owAwIBAaCCEdkwggT5MIIC4aADAgECAhAa1gin1jS1zd6Xy6PM8NBL
# MA0GCSqGSIb3DQEBCwUAMHMxCzAJBgNVBAYTAlVTMQ4wDAYDVQQIDAVUZXhhczEQ
# MA4GA1UEBwwHSG91c3RvbjERMA8GA1UECgwIU1NMIENvcnAxLzAtBgNVBAMMJlNT
# TC5jb20gVGltZXN0YW1waW5nIElzc3VpbmcgUlNBIENBIFIxMB4XDTIyMTIwOTE4
# MzA1MVoXDTMyMTIwNjE4MzA1MFowazELMAkGA1UEBhMCVVMxDjAMBgNVBAgMBVRl
# eGFzMRAwDgYDVQQHDAdIb3VzdG9uMREwDwYDVQQKDAhTU0wgQ29ycDEnMCUGA1UE
# AwweU1NMLmNvbSBUaW1lc3RhbXBpbmcgVW5pdCAyMDIyMFkwEwYHKoZIzj0CAQYI
# KoZIzj0DAQcDQgAE3nz6kiWUstk02cheBocqRK/WAmOOCkK/uP0dvuEDh8gMQi8m
# DCKJVS0M2qjskniOpyOI//i9Wgdyb/R3gT07uKOCAVowggFWMB8GA1UdIwQYMBaA
# FAydECWOmqcbmYdDzwh+4b2BkPTPMFEGCCsGAQUFBwEBBEUwQzBBBggrBgEFBQcw
# AoY1aHR0cDovL2NlcnQuc3NsLmNvbS9TU0wuY29tLXRpbWVTdGFtcGluZy1JLVJT
# QS1SMS5jZXIwUQYDVR0gBEowSDA8BgwrBgEEAYKpMAEDBgEwLDAqBggrBgEFBQcC
# ARYeaHR0cHM6Ly93d3cuc3NsLmNvbS9yZXBvc2l0b3J5MAgGBmeBDAEEAjAWBgNV
# HSUBAf8EDDAKBggrBgEFBQcDCDBGBgNVHR8EPzA9MDugOaA3hjVodHRwOi8vY3Js
# cy5zc2wuY29tL1NTTC5jb20tdGltZVN0YW1waW5nLUktUlNBLVIxLmNybDAdBgNV
# HQ4EFgQUBbqT0d/iFKwgKoZZMX8ocg6trF8wDgYDVR0PAQH/BAQDAgeAMA0GCSqG
# SIb3DQEBCwUAA4ICAQBaqLSWEGMNRGjMx5OTZSS2ic8Q39543mTUt4jKzr2TwDJy
# ccz3iFhqp3iOq8RnTsHsKkt4GHAj2ShGoNllU464QaRbTeaAnW52gkLlnCR739x9
# dODQYWLKpAqzMFqKNxNlHWsOPTwXmaGRTMpD62kxvyN1u+haD9QbsyPcYUhueg80
# Z95SMCIPNCYIprEQEiRMHMOCtlJNGtWjt4SfP0R4WexGdm0hEH8spuupFG7hrJLM
# c24LQkmaZO+ly30/q0jiC+UmPlgiIlXfha1D3y4RTEs8Y8G1bkQORS3XC+/qfZLk
# oIKVCPptn88K6KXV+hh6aeRH2HaVhmQ3QfUfn2yoiwueIG83drmwKxJ9UBzsHuSt
# al6o2K3pWrSGzZQOTVEuwSZpnI5S7YhjH6sP35knxjr6NZXtRxZ0RY9UCWF/a2JL
# tok7Yxkuo4lAJj+kNsorp5/JzVbYFGAqKw+TbIG5lRKs3HCCJCiJlvSMVhzkhRru
# NWbMKUhigwAXHavjXFFU8I4OkJbxot60LQFWSml1s222Uoke4TNAg7XD8FzynYW7
# XRpCZrwrwX19+e6u/nZpAd1x2C7XqMRHwpczETCfQChdKkoeoX+D04PVmy8BTQgp
# VkHjPQl7aYuRFg98LuQ5XyA6SJzcFGQzzq1TtAxrvfprHe9p2jD12U5fnL67/TCC
# BdgwggTAoAMCAQICEQDkJwSV9oyR1tDse0lOpN8cMA0GCSqGSIb3DQEBCwUAMH4x
# CzAJBgNVBAYTAlBMMSIwIAYDVQQKExlVbml6ZXRvIFRlY2hub2xvZ2llcyBTLkEu
# MScwJQYDVQQLEx5DZXJ0dW0gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxIjAgBgNV
# BAMTGUNlcnR1bSBUcnVzdGVkIE5ldHdvcmsgQ0EwHhcNMTgwOTExMDkyNjQ3WhcN
# MjMwOTExMDkyNjQ3WjB8MQswCQYDVQQGEwJVUzEOMAwGA1UECAwFVGV4YXMxEDAO
# BgNVBAcMB0hvdXN0b24xGDAWBgNVBAoMD1NTTCBDb3Jwb3JhdGlvbjExMC8GA1UE
# AwwoU1NMLmNvbSBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IFJTQTCCAiIw
# DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAPkP3aMrfcvQKv7sZ4Wm5y4bunfh
# 4/WvpOz6Sl2RxFdHaxh3a3by/ZPkPQ/CFp4LZsNWlJ4Xg4XOVu/yFv0AYvUiCVTo
# ZRdOQbngT0aXqhvIuG5iXmmxX9sqAn78bMrzQdjt0Oj8P2FI7bADFB0QDksZ4LtO
# 7IZl/zbzXmcCC52GVWH9ejjt/uIZALdvoVBidXQ8oPrIJZK0bnoix/geoeOy3ZEx
# qysdBP+lSgQ36YWkMyv94tZVNHwZpEpox7Ko07fKoZOI68GXvIz5HdkihCR0xwQ9
# aqkpk8zruFvh/l8lqjRYyMEjVJ0bmBHDOJx+PYZspQ9AhnwC9FwCTyjLrnGfDzrI
# M/4RJTXq/LrFYD3ZfBjVsqnTdXgDciLKOsMf7yzlLqn6niy2UUb9rwPW6mBo6oUW
# NmuF6R7As93EJNyAKoFBbZQ+yODJgUEAnl6/f8UImKIYLEJAs/lvOCdLToD0PYFH
# 4Ih86hzOtXVcUS4cK38acijnALXRdMbX5J+tB5O2UzU1/Dfkw/ZdFr4hc96SCvig
# Y2q8lpJqPvi8ZVWb3vUNiSYE/CUapiVpy8JtynziWV+XrOvvLsi81xtZPCvM8hnI
# k2snYxnP/Okm+Mpxm3+T/jRnhE6Z6/yzeAkzcLpmpnbtG3PrGqUNxCITIJRWCk4s
# bE6x/c+cCbqiM+2HAgMBAAGjggFRMIIBTTASBgNVHRMBAf8ECDAGAQH/AgECMB0G
# A1UdDgQWBBTdBAkHovV6fVJTEpKV7jiAJQ2mWTAfBgNVHSMEGDAWgBQIds3LB/8k
# 9sXN7buQvOKEN0Z19zAOBgNVHQ8BAf8EBAMCAQYwNgYDVR0fBC8wLTAroCmgJ4Yl
# aHR0cDovL3NzbGNvbS5jcmwuY2VydHVtLnBsL2N0bmNhLmNybDBzBggrBgEFBQcB
# AQRnMGUwKQYIKwYBBQUHMAGGHWh0dHA6Ly9zc2xjb20ub2NzcC1jZXJ0dW0uY29t
# MDgGCCsGAQUFBzAChixodHRwOi8vc3NsY29tLnJlcG9zaXRvcnkuY2VydHVtLnBs
# L2N0bmNhLmNlcjA6BgNVHSAEMzAxMC8GBFUdIAAwJzAlBggrBgEFBQcCARYZaHR0
# cHM6Ly93d3cuY2VydHVtLnBsL0NQUzANBgkqhkiG9w0BAQsFAAOCAQEAH5WaI1Tu
# hcLz1G+56QSPRn8s9zLAp0OsBwDt4KlFLf0X4e0AQMivmKz1wBmtG6CXMEBs7Fv7
# o5NOjIliG3zwOl+nQs9YynVlnCJMv3Z7mJOcFYMzsQ7cUTiHfJWcEmmUHgB4dH7c
# wAZ3unAthyzXaJ3juoWtSfOPZLQVBoOSxpekQJOLrfFnlLS5WmdUPKgb2QXP5KT5
# iBIABoglhdRe7vOTV9aB+Cyu9/VRSKu2Yjp52+wu8j8UVjrI2cukok8lqNGbqy0w
# IFAHGm/x8ZQdOYNj6B/9SdDoHUayRoImvZyd4aJoQUhRbnr8NZb0VNK8K0TlR9d3
# gqVKq1+XM6skETCCBvwwggTkoAMCAQICEG1SGHCH6CNNhWAA0ICPk1YwDQYJKoZI
# hvcNAQELBQAwfDELMAkGA1UEBhMCVVMxDjAMBgNVBAgMBVRleGFzMRAwDgYDVQQH
# DAdIb3VzdG9uMRgwFgYDVQQKDA9TU0wgQ29ycG9yYXRpb24xMTAvBgNVBAMMKFNT
# TC5jb20gUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSBSU0EwHhcNMTkxMTEz
# MTg1MDA1WhcNMzQxMTEyMTg1MDA1WjBzMQswCQYDVQQGEwJVUzEOMAwGA1UECAwF
# VGV4YXMxEDAOBgNVBAcMB0hvdXN0b24xETAPBgNVBAoMCFNTTCBDb3JwMS8wLQYD
# VQQDDCZTU0wuY29tIFRpbWVzdGFtcGluZyBJc3N1aW5nIFJTQSBDQSBSMTCCAiIw
# DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAK5REBPS+TwgoCCF3slQHGTJ4f3F
# 6TT/Cn8xSOhyWsVeqGH98Yf3UVz7t+bQwcITsD7CY6KoGP04OskBgareubfeMKcd
# KwIE1YBBjKhq4urwiOqxLUmVcvb2oM0wx3BnxQ3NBLu9ZkwMnjQlIY2mEwZMgDaq
# fZuiEa2BFzinXf3kRLKlQ5oa8ne3QU0vcG4qZvphy0xxBQXayqigzN3z2HQTq6N2
# 8EOjpnA2dajGPtiZ9aNJeDfcDka5j3KbhBkzk4RWCjx5vP8H6DKHIIs02GHgxv/j
# G8JMIxWY1isG+IaB09livKbxlvzhNAKZK5fQmUstrpYrVo7qqXAhJtv1tUaHzrp6
# QpuUL9dE/bSAC7UKO9xhyJSA1OsYWDx/wAmBA84JzX8IJ1olJjCEmlJ2F4o6dCAR
# KA2Zhk+EU4LogpowBReTlTW2NNwUKAW+8Cte0rhrMBZQ47Vjd92V0gEvouOTMtQJ
# gk2QVeqGwFVw8y4HSdQNa8sl8+Kay2MnyUXhLoQLFaeVaLs4SVXBOe3Ua1Gp5j3J
# 2+8Yue1T4V5wrsNuocNR3frpSt4yRIG3N68Bz1qqhk+eNUyO8WpXWlg6POZOJUdm
# 0BzzRsB8V7kst8nM8joOe03KqhunBN69Ckeo8M32qo07zeveRrDwD2P4dmJLDYBf
# lwZ1A/SQbS+HN+AHAgMBAAGjggGBMIIBfTASBgNVHRMBAf8ECDAGAQH/AgEAMB8G
# A1UdIwQYMBaAFN0ECQei9Xp9UlMSkpXuOIAlDaZZMIGDBggrBgEFBQcBAQR3MHUw
# UQYIKwYBBQUHMAKGRWh0dHA6Ly93d3cuc3NsLmNvbS9yZXBvc2l0b3J5L1NTTGNv
# bVJvb3RDZXJ0aWZpY2F0aW9uQXV0aG9yaXR5UlNBLmNydDAgBggrBgEFBQcwAYYU
# aHR0cDovL29jc3BzLnNzbC5jb20wPwYDVR0gBDgwNjA0BgRVHSAAMCwwKgYIKwYB
# BQUHAgEWHmh0dHBzOi8vd3d3LnNzbC5jb20vcmVwb3NpdG9yeTATBgNVHSUEDDAK
# BggrBgEFBQcDCDA7BgNVHR8ENDAyMDCgLqAshipodHRwOi8vY3Jscy5zc2wuY29t
# L3NzbC5jb20tcnNhLVJvb3RDQS5jcmwwHQYDVR0OBBYEFAydECWOmqcbmYdDzwh+
# 4b2BkPTPMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQsFAAOCAgEAkhl1DaZa
# Qs8ZB9ny/JT6wJvwFelEllovcTPdUOUTe5mTdw/E+3JtV8u6ppyLRbpIHbYlMy20
# KJAychU6xdaci4BsP9oVNxSRMsEjfHKz7ARqPNdpclhYAINLjsFGMO1iUNbXiAsn
# F/xboNCgfeMcMYbLyQYkU6UMobv9isrtQZ8e0EAQNV7qXJn4W0KyuTt0P8iIv/5D
# dDpIUBIktDZcjz2KEW6B1gvvsKIM1esjYwWylAazBcQAake5pANMdSn8t1HdPKsi
# wuWfOguyRQazAX8oXz6SlZSIok0Lis9a02vGVtdhEaB0R3HxIyNRMMKWV1yuSeUX
# FuoexWav3GRPZC0WYb50SrW/l+wgrS8doetaMwyZon2L7ioYlIPSy1h9Dq/Q911P
# sSkbEZ3zrsB1roVnIfBu5BJp0xvQrQ/Q4LavuvCoFR7QFoypNrotbNYi2AGMZw5t
# d4zGZtCqUTPZi0BwSuRm+HRYAEMMThTwbJX/fYV1oC8mBN970yIvadIGKhh7+DmY
# dRJYBrL8inVFCZAK+YX2w1+qWEnCSPL/VTWJtSRMhQFfceDKbJC+pBNksvKzqkva
# 0J1ZyMj1i4vDfSuBmbz4rfzsvvJxS+quZDdkmW6MeXevWGBXvqzdbAw+AqTVsAQU
# yP6tFeKZIL4S/fSFdl2rIx2X+KXkqx3S+EYxggJYMIICVAIBATCBhzBzMQswCQYD
# VQQGEwJVUzEOMAwGA1UECAwFVGV4YXMxEDAOBgNVBAcMB0hvdXN0b24xETAPBgNV
# BAoMCFNTTCBDb3JwMS8wLQYDVQQDDCZTU0wuY29tIFRpbWVzdGFtcGluZyBJc3N1
# aW5nIFJTQSBDQSBSMQIQGtYIp9Y0tc3el8ujzPDQSzALBglghkgBZQMEAgGgggFh
# MBoGCSqGSIb3DQEJAzENBgsqhkiG9w0BCRABBDAcBgkqhkiG9w0BCQUxDxcNMjMw
# OTAxMTA0MzEzWjAoBgkqhkiG9w0BCTQxGzAZMAsGCWCGSAFlAwQCAaEKBggqhkjO
# PQQDAjAvBgkqhkiG9w0BCQQxIgQghHbLiTOMNFHvi37+n5HaGnEWOM2mkG+YqThn
# n5rTb4EwgckGCyqGSIb3DQEJEAIvMYG5MIG2MIGzMIGwBCCNxcQlQtJPFc/1yBlu
# 1FqDaNTK1r3L5CGp3iNQnYvTIjCBizB3pHUwczELMAkGA1UEBhMCVVMxDjAMBgNV
# BAgMBVRleGFzMRAwDgYDVQQHDAdIb3VzdG9uMREwDwYDVQQKDAhTU0wgQ29ycDEv
# MC0GA1UEAwwmU1NMLmNvbSBUaW1lc3RhbXBpbmcgSXNzdWluZyBSU0EgQ0EgUjEC
# EBrWCKfWNLXN3pfLo8zw0EswCgYIKoZIzj0EAwIERzBFAiBC49rKqG7e26PJgr3H
# Ljtq+7werode4v4iEAv8nAnCZAIhAI7VkzsosCqZm8J1qDxVXo35WamWmUxIfZ2W
# 8MIQ7sU9
# SIG # End signature block