public/UpdateConnection.ps1

<#
.Synopsis
Script to update a connection using the GCS Admin UpdateV2 API.
 
.Description
This script updates an existing connection by calling the GCS Admin UpdateV2 API
(PATCH /v1.0/admin/connections/{connectionId}/v2) and stores the response in a JSON file.
The update payload can be supplied either through individual convenience parameters
(connection name, description, provider parameters, recrawl/defaults flags) or through a
JSON file that contains the complete UpdateConnectionRequest body for advanced updates
(schema, ACL settings, content experiences, data source instances, etc.).
 
.Parameter ConnectionId
Mandatory parameter specifying the ConnectionId of the connection to be updated.
 
.Parameter RequestBodyFilePath
Path to a JSON file containing the complete UpdateConnectionRequest body. When provided,
the file content is sent as-is and the individual convenience parameters are ignored.
 
.Parameter ConnectionName
Optional friendly name for the connection (maps to the "datasetName" request property).
 
.Parameter Description
Optional description for the connection.
 
.Parameter ProviderParameters
Optional provider parameters (serialized configuration string) for the connection.
 
.Parameter RecrawlNeeded
Optional switch specifying that a recrawl is needed after the update.
 
.Parameter SetDefaults
Optional switch specifying that the update should apply the connection defaults.
 
.Parameter OutputFile
Optional parameter specifying the output file location for logging and the stored response.
If not provided, a default filename based on the command type and timestamp is used.
 
.Parameter TenantId
Optional parameter specifying the TenantId of the connection to be updated.
 
.Parameter Torus
Optional switch parameter to indicate if Torus is being used.
 
#>

function Update-Connection {
    [CmdletBinding(DefaultParameterSetName = "ByProperties")]
    param(
        # Connection Id
        [Parameter(Mandatory=$true, ParameterSetName="ByProperties")]
        [Parameter(Mandatory=$true, ParameterSetName="ByFile")]
        [string]
        $ConnectionId,

        # Full request body file path
        [Parameter(Mandatory=$true, ParameterSetName="ByFile")]
        [string]
        $RequestBodyFilePath,

        # Connection name (datasetName)
        [Parameter(Mandatory=$false, ParameterSetName="ByProperties")]
        [string]
        $ConnectionName,

        # Description
        [Parameter(Mandatory=$false, ParameterSetName="ByProperties")]
        [string]
        $Description,

        # Provider parameters
        [Parameter(Mandatory=$false, ParameterSetName="ByProperties")]
        [string]
        $ProviderParameters,

        # Recrawl needed flag
        [Parameter(Mandatory=$false, ParameterSetName="ByProperties")]
        [switch]
        $RecrawlNeeded,

        # Set defaults flag
        [Parameter(Mandatory=$false, ParameterSetName="ByProperties")]
        [switch]
        $SetDefaults,

        # Output File Location for logging and response
        [Parameter(Mandatory=$false)]
        [string]
        $OutputFile,

        # Tenant Id
        [Parameter(Mandatory=$false)]
        [string]
        $TenantId,

        # Torus Check
        [Parameter(Mandatory=$false)]
        [switch]
        $Torus
    )
    try{
        $UrlPath = "/v1.0/admin/connections/$ConnectionId/v2"

        if ($PSCmdlet.ParameterSetName -eq "ByFile") {
            # Validate and read the full request body from the supplied JSON file
            $fileValidation = ValidateFile -FilePath $RequestBodyFilePath
            if($fileValidation -eq $false){
                Write-Error "Request body file validation failed"
                throw
            }

            $RequestBodyJson = Get-Content -Path $RequestBodyFilePath -Raw -Encoding UTF8

            try {
                $null = $RequestBodyJson | ConvertFrom-Json
            } catch {
                Write-Error "The JSON content of the file is not valid."
                throw
            }
        }
        else {
            # Build the request body from the supplied convenience parameters
            $RequestBody = @{}

            if (-not [string]::IsNullOrEmpty($ConnectionName)) {
                $RequestBody["datasetName"] = $ConnectionName
            }
            if ($PSBoundParameters.ContainsKey("Description")) {
                $RequestBody["description"] = $Description
            }
            if (-not [string]::IsNullOrEmpty($ProviderParameters)) {
                $RequestBody["providerParameters"] = $ProviderParameters
            }
            if ($RecrawlNeeded.IsPresent) {
                $RequestBody["isCrawlNeeded"] = $true
            }
            if ($SetDefaults.IsPresent) {
                $RequestBody["setDefaults"] = $true
            }

            if ($RequestBody.Count -eq 0) {
                Write-Error "No update fields specified. Provide at least one of -ConnectionName, -Description, -ProviderParameters, -RecrawlNeeded, -SetDefaults, or use -RequestBodyFilePath."
                throw
            }

            $RequestBodyJson = $RequestBody | ConvertTo-Json -Depth 10
        }

        ExecuteWithTranscriptAndStoreResponse -UrlPath $UrlPath -Method "Patch" -CommandType "Update-Connection" -ConnectionId $ConnectionId -RequestBody $RequestBodyJson -OutputFile $OutputFile -OutputFileExtension "json" -shouldRethrow $true
    }
    catch{
        Write-Error "Error happend while execution UpdateConnection.ps1. Error = $_"
        throw
    }

}

# SIG # Begin signature block
# MIIngAYJKoZIhvcNAQcCoIIncTCCJ20CAQExDzANBglghkgBZQMEAgEFADB5Bgor
# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG
# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCDBpfJXol8BqdD2
# xclxjAuCFGkR43tLo0e3mza2530hFqCCDLowggX1MIID3aADAgECAhMzAAACHU0Z
# yE7XD1dIAAAAAAIdMA0GCSqGSIb3DQEBCwUAMFcxCzAJBgNVBAYTAlVTMR4wHAYD
# VQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xKDAmBgNVBAMTH01pY3Jvc29mdCBD
# b2RlIFNpZ25pbmcgUENBIDIwMjQwHhcNMjYwNDE2MTg1OTQzWhcNMjcwNDE1MTg1
# OTQzWjB0MQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UE
# BxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMR4wHAYD
# VQQDExVNaWNyb3NvZnQgQ29ycG9yYXRpb24wggEiMA0GCSqGSIb3DQEBAQUAA4IB
# DwAwggEKAoIBAQDQvewXxx9gZZFC6Ys1WBay8BJ8kGA4JQnH5CMafqOASlTpK9H8
# o5ZXTXt0caVQTNMUPt445wXYD+dFtaKWTwDn1I52oUSrC9vJin1Gsqt+zyKJL5Dg
# 3eQXbQNR61DmMy20GLTIO3SFed9Rfi/ophgCLGFLDR3r0KvHjwMb/jYWS0celV/4
# Lz27LfAekm8v9E5IXaeiXbAUYZKK090n4CVl3JBtbN+9DtI9SNu/yjvozW52/u7R
# X/Ttpa/KDlpuokZ+Zcbvmtd9ur9gFLvZzh41o9MsE/clQtdaFWGvuo6Jua/ntpgk
# ey3E5/vBFe+MJPG6phdnuo6r57ZudCudiI1bAgMBAAGjggGbMIIBlzAOBgNVHQ8B
# Af8EBAMCB4AwHwYDVR0lBBgwFgYKKwYBBAGCN0wIAQYIKwYBBQUHAwMwHQYDVR0O
# BBYEFH6QuMwqcPG0hQlQ6c5jCtTTLrVeMEUGA1UdEQQ+MDykOjA4MR4wHAYDVQQL
# ExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xFjAUBgNVBAUTDTIzMDAxMis1MDc1NTkw
# HwYDVR0jBBgwFoAUf1k/VCHarU/vBeXmo9ctBpQSCDEwYAYDVR0fBFkwVzBVoFOg
# UYZPaHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0
# JTIwQ29kZSUyMFNpZ25pbmclMjBQQ0ElMjAyMDI0LmNybDBtBggrBgEFBQcBAQRh
# MF8wXQYIKwYBBQUHMAKGUWh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMv
# Y2VydHMvTWljcm9zb2Z0JTIwQ29kZSUyMFNpZ25pbmclMjBQQ0ElMjAyMDI0LmNy
# dDAMBgNVHRMBAf8EAjAAMA0GCSqGSIb3DQEBCwUAA4ICAQBKTbYOjzwTG/DXGaz9
# s6+fQeaTtDcFmMY+5UyVFCyj7Pv+5i37qfX8lSL/tBIfYQfWsMuBQlfZurJD6r4H
# VJ2CeH+1fgiq8dcHdVKoZ3Sa2qXoX3cq9iS8cVb06B7+5/XJ7I0OxHH9fDsvJ3T3
# w5V/ZtAIFmLrl+P0CtG+92uzRsn0nTbdFjOkLMLWPLAU3THohKRlSEMgFJpPkm5n
# 5UAZ35xX6FWCrDLsSKb555bTifwa8mJBwdlof0bmfYidH+dxZ1FdDxvLnNl9zeKs
# A4kejaaIqqIPguhwAti5Ql7BlTNoJNwxCvBmqW2MQLnCkYN/VVUsR3V2x/rcTNzo
# Bf/Z/SpROvdaA2ZOOd1uioXJt3tdLQ7vHpqpib0KfWr/FWXW10q38VxfCnRQBqzb
# SuztR7nEMuzX7Ck+B/XaPDXd1qh72+QYyB0Z2VzWmO9zsnb9Uq/dwu8LGeQqnyu6
# 7SDGACvnXii2fb9+US492VTnXSnFKyqwgzUyFMtZK1/sHYTv6bG4TtQUygQxTN+Z
# V+aJIlKO2MqZ7bKrAnOzS9m6NgoTdWOq11bTOZwKlIEV/EhV9SWkDmdpR/hPPT2v
# 6TEj4F8PT/zHjRezIU5c/DGlt/VhY/pK0XkJtEyMmmS1BMtjU/rqBZVMIm3dnxQs
# /TBByr+Cf8Z1r7aifQVQ+WSqzjCCBr0wggSloAMCAQICEzMAAAA5O7Y3Gb8GHWcA
# AAAAADkwDQYJKoZIhvcNAQEMBQAwgYgxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpX
# YXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQg
# Q29ycG9yYXRpb24xMjAwBgNVBAMTKU1pY3Jvc29mdCBSb290IENlcnRpZmljYXRl
# IEF1dGhvcml0eSAyMDExMB4XDTI0MDgwODIwNTQxOFoXDTM2MDMyMjIyMTMwNFow
# VzELMAkGA1UEBhMCVVMxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEo
# MCYGA1UEAxMfTWljcm9zb2Z0IENvZGUgU2lnbmluZyBQQ0EgMjAyNDCCAiIwDQYJ
# KoZIhvcNAQEBBQADggIPADCCAgoCggIBANgBnB7jOMeqlRYHNa265v4IY9fH8TKh
# emHfPINe1gpLaV3dhg324WwH06LcHbpnsBukCDNitryo0dtS/EW6I/yEL/bLSY8h
# KpbfQuWusBPr9qazYcDxCW/qnjb5JsI1s8bNOg3bVATvQVL4tcf03aTycsz8QeCd
# M0l/yHRObJ9QqazM1r6VPEOJ7LL+uEEb73w6QCuhs89a1uv1zerOYMnsneRRwCbp
# yW11IcggU0cRKDDq1pjVJzIbIF6+oiXXbReOsgeI8zu1FyQfK0fVkaya8SmVHQ/t
# Of23mZ4W9k0Ri22QW9p3UgSC5OUDktKxxcCmGL6tXLfOGSWHIIV4YrTJTT6PNty5
# REojHJuZHArkF9VnHTERWoTjAzfI3kP+5b4alUdhgAZ7ttOu1bVnXfHaqPYl2rPs
# 20ji03LOVWsh/radgE17es5hL+t6lV0eVHrVhsssROWJuz2MXMCt7iw7lFPG9LXK
# Gjsmonn2gotGdHIuEg5JnJMJVmixd5LRlkmgYRZKzhxSCwyoGIq0PhaA7Y+VPct5
# pCHkijcIIDm0nlkK+0KyepolcqGm0T/GYQRMhHJlGOOmVQop36wUVUYklUy++vDW
# eEgEo4s7hxN6mIbf2MSIQ/iIfMZgJxC69oukMUXCrOC3SkE/xIkgpfl22MM1itkZ
# 35nNXkMolU1lAgMBAAGjggFOMIIBSjAOBgNVHQ8BAf8EBAMCAYYwEAYJKwYBBAGC
# NxUBBAMCAQAwHQYDVR0OBBYEFH9ZP1Qh2q1P7wXl5qPXLQaUEggxMBkGCSsGAQQB
# gjcUAgQMHgoAUwB1AGIAQwBBMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAU
# ci06AjGQQ7kUBU7h6qfHMdEjiTQwWgYDVR0fBFMwUTBPoE2gS4ZJaHR0cDovL2Ny
# bC5taWNyb3NvZnQuY29tL3BraS9jcmwvcHJvZHVjdHMvTWljUm9vQ2VyQXV0MjAx
# MV8yMDExXzAzXzIyLmNybDBeBggrBgEFBQcBAQRSMFAwTgYIKwYBBQUHMAKGQmh0
# dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2kvY2VydHMvTWljUm9vQ2VyQXV0MjAx
# MV8yMDExXzAzXzIyLmNydDANBgkqhkiG9w0BAQwFAAOCAgEAFJQfOChP7onn6fLI
# MKrSlN1WYKwDFgAddymOUO3FrM8d7B/W/iQ6DxXsDn7D5W4wMwYeLystcEqfkjz4
# NURRgazyMu5yRzQh4LqjA4tStTcJh1opExo7nn5PuPBYnbu0+THSuVHTe0VTTPVh
# ily/piFrDo3axQ9P4C+Ol5yet+2gTfekICS5xS+cYfSIvgn0JksVBVMYVI5QFu/q
# hnLhsEFEUzG8fvv0hjgkO+lkpV9ty6GkN4vdnd7ya6Q6aR9y34aiM1qmxaxBi6OU
# nyNl6fkuun/diTFnYDLTppOkr/mg5WSfCiDVMNCxtj4wPKC5OmHm1DQIt/MNokbb
# H3UGsFP1QbzsLocuSqLCvH09Io3fDPTmscR9Y75G4qX7RTX8AdBPo0I6OEojf39z
# uFZt0qOHm65YWQE69cZM2ueE1MB05dNNgHK9gTE7zKvK/fg8B2qjW88MT/WF5V5u
# vZGtqa9FSL2RazArA+rDPuf6JGYz4HpgMZHB4S6szWSKYBv0VisCzfxgeU+dquXW
# 9bd0auYlOB58DPcOYKdc3Se94g+xL4pcEhbB54JOgAkwYTu/9dLeH2pDqeJZAABV
# DWRQCaXfO5LgyKwKCLYXpigrZYCjUSBcr+Ve8PFWMhVTQl0v4q8J/AUmQN5W4n10
# 1cY2L4A7GTQG1h32HHAvfQESWP0xghocMIIaGAIBATBuMFcxCzAJBgNVBAYTAlVT
# MR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xKDAmBgNVBAMTH01pY3Jv
# c29mdCBDb2RlIFNpZ25pbmcgUENBIDIwMjQCEzMAAAIdTRnITtcPV0gAAAAAAh0w
# DQYJYIZIAWUDBAIBBQCggeYwGQYJKoZIhvcNAQkDMQwGCisGAQQBgjcCAQQwHAYK
# KwYBBAGCNwIBCzEOMAwGCisGAQQBgjcCARUwLwYJKoZIhvcNAQkEMSIEIIVJmp9e
# KNp+J5l+0lUfvyh8VgrjnEiVzeldPFW6elAWMHoGCisGAQQBgjcCAQwxbDBqoEyA
# SgBNAGkAYwByAG8AcwBvAGYAdAAuAEcAcgBhAHAAaAAuAEMAbwBuAG4AZQBjAHQA
# bwByAHMALgBDAG0AZABsAGUAdAAuAGQAbABsoRqAGGh0dHA6Ly93d3cubWljcm9z
# b2Z0LmNvbTANBgkqhkiG9w0BAQEFAASCAQBQ5GmkhAXW6KAxGoAFuEACNLL4Om7o
# XDu9Wz+OHlYwhTqUwK+h84Ond82mzLlQxKmr1NXOWDUYj3CYSQl0n5qOdLLj6lww
# dm5KpaeX72NszZUmcqPOY4TJZIDQb8SUnbMSec8kBOOSu8jBhis7T4N4wDXebgVU
# pNolqAFwHyMSmzyaBpWlD1MK20XP+XwyOSjco79oQcfXeAeSm6Zmi6EGf6HZPa2j
# 8DxVJvJ0VyuZM7ITgCyXvR3bEomi/8gYcNT9L/zfJU/8fSIVR4PKP0RD9hvj40eR
# hnVhfo7CfUKDv8XYzygkUHa14jOqVKAG06NPY26JsJpjvMKrOf1m9m1goYIXljCC
# F5IGCisGAQQBgjcDAwExgheCMIIXfgYJKoZIhvcNAQcCoIIXbzCCF2sCAQMxDzAN
# BglghkgBZQMEAgEFADCCAVEGCyqGSIb3DQEJEAEEoIIBQASCATwwggE4AgEBBgor
# BgEEAYRZCgMBMDEwDQYJYIZIAWUDBAIBBQAEIPAFnjsvRJ1qCVv+vnrDgH98axK9
# jzQtnIhY0inH3eZbAgZqMVTWjeIYEjIwMjYwNzIwMTM0NzIzLjQ2WjAEgAIB9KCB
# 0aSBzjCByzELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNV
# BAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjElMCMG
# A1UECxMcTWljcm9zb2Z0IEFtZXJpY2EgT3BlcmF0aW9uczEnMCUGA1UECxMeblNo
# aWVsZCBUU1MgRVNOOjg2MDMtMDVFMC1EOTQ3MSUwIwYDVQQDExxNaWNyb3NvZnQg
# VGltZS1TdGFtcCBTZXJ2aWNloIIR7TCCByAwggUIoAMCAQICEzMAAAIlgMc3xs2q
# d0kAAQAAAiUwDQYJKoZIhvcNAQELBQAwfDELMAkGA1UEBhMCVVMxEzARBgNVBAgT
# Cldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29m
# dCBDb3Jwb3JhdGlvbjEmMCQGA1UEAxMdTWljcm9zb2Z0IFRpbWUtU3RhbXAgUENB
# IDIwMTAwHhcNMjYwMjE5MTk0MDAxWhcNMjcwNTE3MTk0MDAxWjCByzELMAkGA1UE
# BhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAc
# BgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjElMCMGA1UECxMcTWljcm9zb2Z0
# IEFtZXJpY2EgT3BlcmF0aW9uczEnMCUGA1UECxMeblNoaWVsZCBUU1MgRVNOOjg2
# MDMtMDVFMC1EOTQ3MSUwIwYDVQQDExxNaWNyb3NvZnQgVGltZS1TdGFtcCBTZXJ2
# aWNlMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEApvESD9HiwOOlXAj6
# L75qrCJTeqpJs+SLB1plFNJ3lKqfLhsWnXqPksFgQsEOWpWSPwzXaV38omS2Uel2
# IKUTxc3qSJezgg2+DbRLJCQiGQ5EDDcKx/WMFMru9RhooLCyMXpXh7QN7raFU3h4
# 0tW/FJ8DkUbZJypMq1AK0+maQdq6HSHJnC3L98d8MIGJTrNBRIORLFa2W+yzXP53
# dG1w6fh0zllrovHqE1cCXi8XFT/OvaBfJYuUlPNWmtrRievybHo4s/STFvEiVygU
# 9gwlzDlJArBo6Jz2Uan76DEiEGYLWjk8gCZa77MtE2e/F6xqqMoLUIpkJ2zgC+Cj
# S0grluU2REBkxyzkCRoIIG94+YCgu+/PkSDyQPp/4Zhyf8eKk/x00z6FXjAnLgSl
# q0F0dfv6WGrtxcHtLViMhvi1s5Ea/2TTz7qXANmHIt6p/B0fUcL0KKakjScJ9kYu
# mpvAEMn1VcvwQcNLeo6aET48Cr7lI3ws6WnunbjsULUNVwzfTwNspfbA5KP/gF1f
# 0jnvHmvEKEHL97NxK5Bvi6eoZ78OjjD4mp+IIDZEbYLQe66NToqKTlFyZ/WORDty
# VAFzXLjPZvuTMtVRLrxsrYAB97sZrJU51t2G632s2skgkkp1pIWjmd94YG7lEHx+
# 59jRRAFHP3Bc35gkFIpForJyWMsCAwEAAaOCAUkwggFFMB0GA1UdDgQWBBSxONKq
# F07jB19wH2VLtZ/J8dofdzAfBgNVHSMEGDAWgBSfpxVdAF5iXYP05dJlpxtTNRnp
# cjBfBgNVHR8EWDBWMFSgUqBQhk5odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtp
# b3BzL2NybC9NaWNyb3NvZnQlMjBUaW1lLVN0YW1wJTIwUENBJTIwMjAxMCgxKS5j
# cmwwbAYIKwYBBQUHAQEEYDBeMFwGCCsGAQUFBzAChlBodHRwOi8vd3d3Lm1pY3Jv
# c29mdC5jb20vcGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRpbWUtU3RhbXAlMjBQ
# Q0ElMjAyMDEwKDEpLmNydDAMBgNVHRMBAf8EAjAAMBYGA1UdJQEB/wQMMAoGCCsG
# AQUFBwMIMA4GA1UdDwEB/wQEAwIHgDANBgkqhkiG9w0BAQsFAAOCAgEAB533NslM
# qB2W778lShbl4eR8cRyLyGkfSVqSHyEyZXPyotN47kfr3JM6t7aeXxR+Sy+3iBV0
# SLqHsDLL1nha1rn661uB4ZoQsJKgK3wNQtMZPh2mLNjuPGEsTF/ZYEtZE0yG92LH
# 6BXRaSrqz39p3NmHeMC4PhYMJpMZHshNzFClZ2vEmXlaRI50ubnBXJOLKz8CtjkQ
# H+9CNtxhsj4aoCCmaYTV4UrHEwELMiKgeRsAzHUVeSyt+zX1OGJsbwmId0xWBPxo
# dNUOsib3/R8YhGacFvqFJNIK7h6G4N7ICEea34FKPJd9L1J2g2DHDwApWhTAv0Gx
# 2UmlIVl2RtTjnDKdIPb2EDSwxKhV9o5arr81UksLR7ZtSk5XQo0RA/pHQsm3D8Wz
# 2pcCYoF3NQbCPQorZ039JY8G/TZGfyVSPPw+tq1184c+Bd7tIlRs8J3BmsUcRxv1
# 7+J066ZDnnqaGGzQWzFkthtaj914+6VX9PuKkcgKidLLY0I6FTiSJlT1kY8+T0dw
# 5+mnUFTASQzOoA649a2UxVYArU4o6hmUhs716RpBd72LMhOmQ5mv5BnYlHubGniO
# pR+uj4lll4Ksbe7MthM79MiI0lb/njDk9kDFImelgnO4FbQJl6X3iLrPjZoBbzPi
# HNV+fHuCPRC+GUgInUqVltBmUyzQtNpq8i4wggdxMIIFWaADAgECAhMzAAAAFcXn
# a54Cm0mZAAAAAAAVMA0GCSqGSIb3DQEBCwUAMIGIMQswCQYDVQQGEwJVUzETMBEG
# A1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWlj
# cm9zb2Z0IENvcnBvcmF0aW9uMTIwMAYDVQQDEylNaWNyb3NvZnQgUm9vdCBDZXJ0
# aWZpY2F0ZSBBdXRob3JpdHkgMjAxMDAeFw0yMTA5MzAxODIyMjVaFw0zMDA5MzAx
# ODMyMjVaMHwxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYD
# VQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xJjAk
# BgNVBAMTHU1pY3Jvc29mdCBUaW1lLVN0YW1wIFBDQSAyMDEwMIICIjANBgkqhkiG
# 9w0BAQEFAAOCAg8AMIICCgKCAgEA5OGmTOe0ciELeaLL1yR5vQ7VgtP97pwHB9Kp
# bE51yMo1V/YBf2xK4OK9uT4XYDP/XE/HZveVU3Fa4n5KWv64NmeFRiMMtY0Tz3cy
# wBAY6GB9alKDRLemjkZrBxTzxXb1hlDcwUTIcVxRMTegCjhuje3XD9gmU3w5YQJ6
# xKr9cmmvHaus9ja+NSZk2pg7uhp7M62AW36MEBydUv626GIl3GoPz130/o5Tz9bs
# hVZN7928jaTjkY+yOSxRnOlwaQ3KNi1wjjHINSi947SHJMPgyY9+tVSP3PoFVZht
# aDuaRr3tpK56KTesy+uDRedGbsoy1cCGMFxPLOJiss254o2I5JasAUq7vnGpF1tn
# YN74kpEeHT39IM9zfUGaRnXNxF803RKJ1v2lIH1+/NmeRd+2ci/bfV+Autuqfjbs
# Nkz2K26oElHovwUDo9Fzpk03dJQcNIIP8BDyt0cY7afomXw/TNuvXsLz1dhzPUNO
# wTM5TI4CvEJoLhDqhFFG4tG9ahhaYQFzymeiXtcodgLiMxhy16cg8ML6EgrXY28M
# yTZki1ugpoMhXV8wdJGUlNi5UPkLiWHzNgY1GIRH29wb0f2y1BzFa/ZcUlFdEtsl
# uq9QBXpsxREdcu+N+VLEhReTwDwV2xo3xwgVGD94q0W29R6HXtqPnhZyacaue7e3
# PmriLq0CAwEAAaOCAd0wggHZMBIGCSsGAQQBgjcVAQQFAgMBAAEwIwYJKwYBBAGC
# NxUCBBYEFCqnUv5kxJq+gpE8RjUpzxD/LwTuMB0GA1UdDgQWBBSfpxVdAF5iXYP0
# 5dJlpxtTNRnpcjBcBgNVHSAEVTBTMFEGDCsGAQQBgjdMg30BATBBMD8GCCsGAQUF
# BwIBFjNodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL0RvY3MvUmVwb3Np
# dG9yeS5odG0wEwYDVR0lBAwwCgYIKwYBBQUHAwgwGQYJKwYBBAGCNxQCBAweCgBT
# AHUAYgBDAEEwCwYDVR0PBAQDAgGGMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgw
# FoAU1fZWy4/oolxiaNE9lJBb186aGMQwVgYDVR0fBE8wTTBLoEmgR4ZFaHR0cDov
# L2NybC5taWNyb3NvZnQuY29tL3BraS9jcmwvcHJvZHVjdHMvTWljUm9vQ2VyQXV0
# XzIwMTAtMDYtMjMuY3JsMFoGCCsGAQUFBwEBBE4wTDBKBggrBgEFBQcwAoY+aHR0
# cDovL3d3dy5taWNyb3NvZnQuY29tL3BraS9jZXJ0cy9NaWNSb29DZXJBdXRfMjAx
# MC0wNi0yMy5jcnQwDQYJKoZIhvcNAQELBQADggIBAJ1VffwqreEsH2cBMSRb4Z5y
# S/ypb+pcFLY+TkdkeLEGk5c9MTO1OdfCcTY/2mRsfNB1OW27DzHkwo/7bNGhlBgi
# 7ulmZzpTTd2YurYeeNg2LpypglYAA7AFvonoaeC6Ce5732pvvinLbtg/SHUB2Rje
# bYIM9W0jVOR4U3UkV7ndn/OOPcbzaN9l9qRWqveVtihVJ9AkvUCgvxm2EhIRXT0n
# 4ECWOKz3+SmJw7wXsFSFQrP8DJ6LGYnn8AtqgcKBGUIZUnWKNsIdw2FzLixre24/
# LAl4FOmRsqlb30mjdAy87JGA0j3mSj5mO0+7hvoyGtmW9I/2kQH2zsZ0/fZMcm8Q
# q3UwxTSwethQ/gpY3UA8x1RtnWN0SCyxTkctwRQEcb9k+SS+c23Kjgm9swFXSVRk
# 2XPXfx5bRAGOWhmRaw2fpCjcZxkoJLo4S5pu+yFUa2pFEUep8beuyOiJXk+d0tBM
# drVXVAmxaQFEfnyhYWxz/gq77EFmPWn9y8FBSX5+k77L+DvktxW/tM4+pTFRhLy/
# AsGConsXHRWJjXD+57XQKBqJC4822rpM+Zv/Cuk0+CQ1ZyvgDbjmjJnW4SLq8CdC
# PSWU5nR0W2rRnj7tfqAxM328y+l7vzhwRNGQ8cirOoo6CGJ/2XBjU02N7oJtpQUQ
# wXEGahC0HVUzWLOhcGbyoYIDUDCCAjgCAQEwgfmhgdGkgc4wgcsxCzAJBgNVBAYT
# AlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYD
# VQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xJTAjBgNVBAsTHE1pY3Jvc29mdCBB
# bWVyaWNhIE9wZXJhdGlvbnMxJzAlBgNVBAsTHm5TaGllbGQgVFNTIEVTTjo4NjAz
# LTA1RTAtRDk0NzElMCMGA1UEAxMcTWljcm9zb2Z0IFRpbWUtU3RhbXAgU2Vydmlj
# ZaIjCgEBMAcGBSsOAwIaAxUAU2/myjjwIwgX5Yc8ORFwbklsXg6ggYMwgYCkfjB8
# MQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVk
# bW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSYwJAYDVQQDEx1N
# aWNyb3NvZnQgVGltZS1TdGFtcCBQQ0EgMjAxMDANBgkqhkiG9w0BAQsFAAIFAO4I
# oZswIhgPMjAyNjA3MjAxMzMxMDdaGA8yMDI2MDcyMTEzMzEwN1owdzA9BgorBgEE
# AYRZCgQBMS8wLTAKAgUA7gihmwIBADAKAgEAAgIerQIB/zAHAgEAAgITcjAKAgUA
# 7gnzGwIBADA2BgorBgEEAYRZCgQCMSgwJjAMBgorBgEEAYRZCgMCoAowCAIBAAID
# B6EgoQowCAIBAAIDAYagMA0GCSqGSIb3DQEBCwUAA4IBAQBhB0I4kRjPTvO1ktO7
# jOT40sZUEZiSYSkYNRTXj6WX8b4GmaQH579Gdsg4QRF2vwqNsQ4+ihE6V/c8+I+3
# MWAiYUQLO/lTBuv9Ilh5pTlbPCEFf7gGqQMKuAGMslFw4MaF8Hj7dyMlQt4V4a7+
# i0Eseek2fRIPGAmVjrEU1AAV7HMX3NdSYSbThCpDiR0+2Daqrz9m7bijh3ck6eyD
# tfbOIUIne/40uUwF+eiNJN2MJ8wz1uPFr6I+xP6ZldWUd07kHAXARFjCFlbbBhRu
# 5YtRwL16nG39Zy39rf957jBktsq7E575P9gZdy0jri/zoEEfXCQtS1yOaVhxk86m
# cTVXMYIEDTCCBAkCAQEwgZMwfDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hp
# bmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jw
# b3JhdGlvbjEmMCQGA1UEAxMdTWljcm9zb2Z0IFRpbWUtU3RhbXAgUENBIDIwMTAC
# EzMAAAIlgMc3xs2qd0kAAQAAAiUwDQYJYIZIAWUDBAIBBQCgggFKMBoGCSqGSIb3
# DQEJAzENBgsqhkiG9w0BCRABBDAvBgkqhkiG9w0BCQQxIgQgjlsn03Fd2wsiML1e
# CmwabomfdZB7AdWDX/8+n11NWo4wgfoGCyqGSIb3DQEJEAIvMYHqMIHnMIHkMIG9
# BCBWDe6Iejjd8vdgpgJf5RdAmMK41lkD+nQlMWoz0hyhEDCBmDCBgKR+MHwxCzAJ
# BgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25k
# MR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xJjAkBgNVBAMTHU1pY3Jv
# c29mdCBUaW1lLVN0YW1wIFBDQSAyMDEwAhMzAAACJYDHN8bNqndJAAEAAAIlMCIE
# IGNoyyU2e8dAtYaIr5svt42Z5bB9k4BgN5OQNxd4DOULMA0GCSqGSIb3DQEBCwUA
# BIICADVg8q6u4ItazlxDQePil63DMTBrvM7wJ4pZLmmYaSpXyiM0vShvuNBgNhEs
# dC/p7UPnr5ninSgFsxTaulmD9+me6kVu1iijCg4Mg2ckJx8w364AJe91s1ewvVA6
# JKKvDRQuMoa/Ooda0Mr0hPih55MfwG7b1h1cVQrOW6aaHk8UscMgUJBWRkNx4MpA
# X5GtgKIYvipzV6VVZlizvf7mjtZBCdzmG4TKF/Kh+5upgOBVhgVoYNyz85yV0kec
# QGWj7QWYmmJ+KNxjI2jft7K90M0+VP3FKzIrpWtSrSQyNsKwd5q5Ti0nNwGD7u2C
# fqUTZH3dxRohINa4sdnySnGCZHlovW+gSrF0p1waZ294ZIqGFjsZglg8QXYU+Wfy
# dCdry840kVBJqjv3Z7otXcmPEjFG2uVPckcs8HuOiQqtUwELAs0GSFBT/sbbIsgy
# kaPNxKMRAAjMHF+QHRFRNW01PElqFHLIFrVrd6xny72TtiaMkW3ru2kOWpF8rMRZ
# hgFJZv4V2BhdtraFzSg34cwOQbneKAA5/Rr/sUR8abnEx8n6tzx+eb8K1YDNEnOI
# pVOu4XPiSIkR+QJg2nZNpuAtTjE3D8ObU01biTEsVBYq3WH71ITkuFv3JY15JhJu
# gdlFyxASowcyQ7Uy8+Rhq5iPO4I3ZlwjrTgmPlVJQhBVTgVh
# SIG # End signature block