custom/Invoke-AzKustoDataConnectionValidation.ps1
# ---------------------------------------------------------------------------------- # # Copyright Microsoft Corporation # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # http://www.apache.org/licenses/LICENSE-2.0 # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # ---------------------------------------------------------------------------------- <# .Synopsis Checks that the data connection parameters are valid. .Description Checks that the data connection parameters are valid. .Example PS C:\> $dataConnectionProperties = New-Object -Type Microsoft.Azure.PowerShell.Cmdlets.Kusto.Models.Api202101.EventHubDataConnection -Property @{Location=$location; Kind=$kind; EventHubResourceId=$eventHubResourceId; DataFormat=$dataFormat; ConsumerGroup='$Default'; Compression= "None"; TableName = $tableName; MappingRuleName = $tableMappingName} PS C:\> $dataConnectionValidation = New-Object -Type Microsoft.Azure.PowerShell.Cmdlets.Kusto.Models.Api202101.DataConnectionValidation -Property @{DataConnectionName=$dataConnectionName; Property=$dataConnectionProperties} PS C:\> Invoke-AzKustoDataConnectionValidation -ResourceGroupName $resourceGroupName -ClusterName $clusterName -DatabaseName $databaseName -Parameter $dataConnectionValidation ErrorMessage ------------ event hub resource id and consumer group tuple provided are already used .Link https://docs.microsoft.com/powershell/module/az.kusto/invoke-azkustodataconnectionvalidation #> function Invoke-AzKustoDataConnectionValidation { [OutputType([Microsoft.Azure.PowerShell.Cmdlets.Kusto.Models.Api202101.IDataConnectionValidationResult])] [CmdletBinding(DefaultParameterSetName = 'DataExpandedEventHub', PositionalBinding = $false, SupportsShouldProcess, ConfirmImpact = 'Medium')] param( [Parameter(ParameterSetName = 'DataExpandedEventHub', Mandatory)] [Parameter(ParameterSetName = 'DataExpandedEventGrid', Mandatory)] [Parameter(ParameterSetName = 'DataExpandedIotHub', Mandatory)] [Microsoft.Azure.PowerShell.Cmdlets.Kusto.Category('Path')] [System.String] # The name of the Kusto cluster. ${ClusterName}, [Parameter(ParameterSetName = 'DataExpandedEventHub', Mandatory)] [Parameter(ParameterSetName = 'DataExpandedEventGrid', Mandatory)] [Parameter(ParameterSetName = 'DataExpandedIotHub', Mandatory)] [Microsoft.Azure.PowerShell.Cmdlets.Kusto.Category('Path')] [System.String] # The name of the database in the Kusto cluster. ${DatabaseName}, [Parameter(ParameterSetName = 'DataExpandedEventHub', Mandatory)] [Parameter(ParameterSetName = 'DataExpandedEventGrid', Mandatory)] [Parameter(ParameterSetName = 'DataExpandedIotHub', Mandatory)] [Microsoft.Azure.PowerShell.Cmdlets.Kusto.Category('Path')] [System.String] # The name of the resource group containing the Kusto cluster. ${ResourceGroupName}, [Parameter(ParameterSetName = 'DataExpandedEventHub')] [Parameter(ParameterSetName = 'DataExpandedEventGrid')] [Parameter(ParameterSetName = 'DataExpandedIotHub')] [Microsoft.Azure.PowerShell.Cmdlets.Kusto.Category('Path')] [Microsoft.Azure.PowerShell.Cmdlets.Kusto.Runtime.DefaultInfo(Script = '(Get-AzContext).Subscription.Id')] [System.String] # Gets subscription credentials which uniquely identify Microsoft Azure subscription. # The subscription ID forms part of the URI for every service call. ${SubscriptionId}, [Parameter(ParameterSetName = 'DataViaIdentityExpandedEventHub', Mandatory, ValueFromPipeline)] [Parameter(ParameterSetName = 'DataViaIdentityExpandedEventGrid', Mandatory, ValueFromPipeline)] [Parameter(ParameterSetName = 'DataViaIdentityExpandedIotHub', Mandatory, ValueFromPipeline)] [Microsoft.Azure.PowerShell.Cmdlets.Kusto.Category('Path')] [Microsoft.Azure.PowerShell.Cmdlets.Kusto.Models.IKustoIdentity] # Identity Parameter # To construct, see NOTES section for INPUTOBJECT properties and create a hash table. ${InputObject}, [Parameter(Mandatory)] [ArgumentCompleter( { param ( $CommandName, $ParameterName, $WordToComplete, $CommandAst, $FakeBoundParameters ) return @('EventHub', 'EventGrid', 'IoTHub') })] [Microsoft.Azure.PowerShell.Cmdlets.Kusto.Category('Body')] [Microsoft.Azure.PowerShell.Cmdlets.Kusto.Support.Kind] # Kind of the endpoint for the data connection ${Kind}, [Parameter(Mandatory)] [Microsoft.Azure.PowerShell.Cmdlets.Kusto.Category('Body')] [System.String] # The name of the data connection. ${DataConnectionName}, [Parameter(ParameterSetName = 'DataExpandedEventHub', Mandatory)] [Parameter(ParameterSetName = 'DataExpandedEventGrid', Mandatory)] [Parameter(ParameterSetName = 'DataViaIdentityExpandedEventHub', Mandatory)] [Parameter(ParameterSetName = 'DataViaIdentityExpandedEventGrid', Mandatory)] [Microsoft.Azure.PowerShell.Cmdlets.Kusto.Category('Body')] [System.String] # The resource ID of the event hub to be used to create a data connection / event grid is configured to send events. ${EventHubResourceId}, [Parameter(Mandatory)] [Microsoft.Azure.PowerShell.Cmdlets.Kusto.Category('Body')] [System.String] # The event/iot hub consumer group. ${ConsumerGroup}, [Parameter(ParameterSetName = 'UpdateExpandedEventGrid')] [Parameter(ParameterSetName = 'UpdateViaIdentityExpandedEventGrid')] [Microsoft.Azure.PowerShell.Cmdlets.Kusto.Category('Body')] [Microsoft.Azure.PowerShell.Cmdlets.Kusto.Support.BlobStorageEventType] # The name of blob storage event type to process. ${BlobStorageEventType}, [Parameter(ParameterSetName = 'UpdateExpandedEventGrid')] [Parameter(ParameterSetName = 'UpdateViaIdentityExpandedEventGrid')] [Microsoft.Azure.PowerShell.Cmdlets.Kusto.Category('Body')] [System.Management.Automation.SwitchParameter] # If set to true, indicates that ingestion should ignore the first record of every file. ${IgnoreFirstRecord}, [Parameter()] [Microsoft.Azure.PowerShell.Cmdlets.Kusto.Category('Body')] [Microsoft.Azure.PowerShell.Cmdlets.Kusto.Support.EventGridDataFormat] # The data format of the message. Optionally the data format can be added to each message. ${DataFormat}, [Parameter(ParameterSetName = 'DataExpandedEventHub')] [Parameter(ParameterSetName = 'DataExpandedIotHub')] [Parameter(ParameterSetName = 'DataViaIdentityExpandedEventHub')] [Parameter(ParameterSetName = 'DataViaIdentityExpandedIotHub')] [Microsoft.Azure.PowerShell.Cmdlets.Kusto.Category('Body')] [System.String[]] # System properties of the event/iot hub. ${EventSystemProperty}, [Parameter()] [Microsoft.Azure.PowerShell.Cmdlets.Kusto.Category('Body')] [System.String] # The mapping rule to be used to ingest the data. Optionally the mapping information can be added to each message. ${MappingRuleName}, [Parameter()] [Microsoft.Azure.PowerShell.Cmdlets.Kusto.Category('Body')] [System.String] # The table where the data should be ingested. Optionally the table information can be added to each message. ${TableName}, [Parameter(ParameterSetName = 'DataExpandedEventHub')] [Parameter(ParameterSetName = 'DataViaIdentityExpandedEventHub')] [Microsoft.Azure.PowerShell.Cmdlets.Kusto.Category('Body')] [Microsoft.Azure.PowerShell.Cmdlets.Kusto.Support.Compression] # The event hub messages compression type. ${Compression}, [Parameter(ParameterSetName = 'DataExpandedEventGrid', Mandatory)] [Parameter(ParameterSetName = 'DataViaIdentityExpandedEventGrid', Mandatory)] [Microsoft.Azure.PowerShell.Cmdlets.Kusto.Category('Body')] [System.String] # The resource ID of the storage account where the data resides. ${StorageAccountResourceId}, [Parameter(ParameterSetName = 'DataExpandedIotHub', Mandatory)] [Parameter(ParameterSetName = 'DataViaIdentityExpandedIotHub', Mandatory)] [Microsoft.Azure.PowerShell.Cmdlets.Kusto.Category('Body')] [System.String] # The resource ID of the Iot hub to be used to create a data connection. ${IotHubResourceId}, [Parameter(ParameterSetName = 'DataExpandedIotHub', Mandatory)] [Parameter(ParameterSetName = 'DataViaIdentityExpandedIotHub', Mandatory)] [Microsoft.Azure.PowerShell.Cmdlets.Kusto.Category('Body')] [System.String] # The name of the share access policy. ${SharedAccessPolicyName}, [Parameter(Mandatory)] [Microsoft.Azure.PowerShell.Cmdlets.Kusto.Category('Body')] [System.String] # Resource location. ${Location}, [Parameter()] [Alias('AzureRMContext', 'AzureCredential')] [ValidateNotNull()] [Microsoft.Azure.PowerShell.Cmdlets.Kusto.Category('Azure')] [System.Management.Automation.PSObject] # The credentials, account, tenant, and subscription used for communication with Azure. ${DefaultProfile}, [Parameter(DontShow)] [Microsoft.Azure.PowerShell.Cmdlets.Kusto.Category('Runtime')] [System.Management.Automation.SwitchParameter] # Wait for .NET debugger to attach ${Break}, [Parameter(DontShow)] [ValidateNotNull()] [Microsoft.Azure.PowerShell.Cmdlets.Kusto.Category('Runtime')] [Microsoft.Azure.PowerShell.Cmdlets.Kusto.Runtime.SendAsyncStep[]] # SendAsync Pipeline Steps to be appended to the front of the pipeline ${HttpPipelineAppend}, [Parameter(DontShow)] [ValidateNotNull()] [Microsoft.Azure.PowerShell.Cmdlets.Kusto.Category('Runtime')] [Microsoft.Azure.PowerShell.Cmdlets.Kusto.Runtime.SendAsyncStep[]] # SendAsync Pipeline Steps to be prepended to the front of the pipeline ${HttpPipelinePrepend}, [Parameter(DontShow)] [Microsoft.Azure.PowerShell.Cmdlets.Kusto.Category('Runtime')] [System.Uri] # The URI for the proxy server to use ${Proxy}, [Parameter(DontShow)] [ValidateNotNull()] [Microsoft.Azure.PowerShell.Cmdlets.Kusto.Category('Runtime')] [System.Management.Automation.PSCredential] # Credentials for a proxy server to use for the remote call ${ProxyCredential}, [Parameter(DontShow)] [Microsoft.Azure.PowerShell.Cmdlets.Kusto.Category('Runtime')] [System.Management.Automation.SwitchParameter] # Use the default credentials for the proxy ${ProxyUseDefaultCredentials} ) process { try { $Parameter = [Microsoft.Azure.PowerShell.Cmdlets.Kusto.Models.Api202101.DataConnectionValidation]::new() $Parameter.DataConnectionName = $PSBoundParameters['DataConnectionName'] $null = $PSBoundParameters.Remove('DataConnectionName') if ($PSBoundParameters['Kind'] -eq 'EventHub') { $Parameter.Property = [Microsoft.Azure.PowerShell.Cmdlets.Kusto.Models.Api202101.EventHubDataConnection]::new() $Parameter.Property.EventHubResourceId = $PSBoundParameters['EventHubResourceId'] $null = $PSBoundParameters.Remove('EventHubResourceId') if ($PSBoundParameters.ContainsKey('EventSystemProperty')) { $Parameter.Property.EventSystemProperty = $PSBoundParameters['EventSystemProperty'] $null = $PSBoundParameters.Remove('EventSystemProperty') } if ($PSBoundParameters.ContainsKey('Compression')) { $Parameter.Property.Compression = $PSBoundParameters['Compression'] $null = $PSBoundParameters.Remove('Compression') } } elseif ($PSBoundParameters['Kind'] -eq 'EventGrid') { $Parameter.Property = [Microsoft.Azure.PowerShell.Cmdlets.Kusto.Models.Api202101.EventGridDataConnection]::new() $Parameter.Property.EventHubResourceId = $PSBoundParameters['EventHubResourceId'] $null = $PSBoundParameters.Remove('EventHubResourceId') $Parameter.Property.StorageAccountResourceId = $PSBoundParameters['StorageAccountResourceId'] $null = $PSBoundParameters.Remove('StorageAccountResourceId') if ($PSBoundParameters.ContainsKey('BlobStorageEventType')) { $Parameter.BlobStorageEventType = $PSBoundParameters['BlobStorageEventType'] $null = $PSBoundParameters.Remove('BlobStorageEventType') } if ($PSBoundParameters.ContainsKey('IgnoreFirstRecord')) { $Parameter.IgnoreFirstRecord = $PSBoundParameters['IgnoreFirstRecord'] $null = $PSBoundParameters.Remove('IgnoreFirstRecord') } } else { $Parameter.Property = [Microsoft.Azure.PowerShell.Cmdlets.Kusto.Models.Api202101.IotHubDataConnection]::new() $Parameter.Property.IotHubResourceId = $PSBoundParameters['IotHubResourceId'] $null = $PSBoundParameters.Remove('IotHubResourceId') $Parameter.Property.SharedAccessPolicyName = $PSBoundParameters['SharedAccessPolicyName'] $null = $PSBoundParameters.Remove('SharedAccessPolicyName') if ($PSBoundParameters.ContainsKey('EventSystemProperty')) { $Parameter.Property.EventSystemProperty = $PSBoundParameters['EventSystemProperty'] $null = $PSBoundParameters.Remove('EventSystemProperty') } } $Parameter.Property.Kind = $PSBoundParameters['Kind'] $null = $PSBoundParameters.Remove('Kind') $Parameter.Property.Location = $PSBoundParameters['Location'] $null = $PSBoundParameters.Remove('Location') $Parameter.Property.ConsumerGroup = $PSBoundParameters['ConsumerGroup'] $null = $PSBoundParameters.Remove('ConsumerGroup') if ($PSBoundParameters.ContainsKey('DataFormat')) { $Parameter.Property.DataFormat = $PSBoundParameters['DataFormat'] $null = $PSBoundParameters.Remove('DataFormat') } if ($PSBoundParameters.ContainsKey('MappingRuleName')) { $Parameter.Property.MappingRuleName = $PSBoundParameters['MappingRuleName'] $null = $PSBoundParameters.Remove('MappingRuleName') } if ($PSBoundParameters.ContainsKey('TableName')) { $Parameter.Property.TableName = $PSBoundParameters['TableName'] $null = $PSBoundParameters.Remove('TableName') } $null = $PSBoundParameters.Add('Parameter', $Parameter) Az.Kusto.internal\Invoke-AzKustoDataConnectionValidation @PSBoundParameters } catch { throw } } } # SIG # Begin signature block # MIIjkgYJKoZIhvcNAQcCoIIjgzCCI38CAQExDzANBglghkgBZQMEAgEFADB5Bgor # BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG # KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCByWk5BSntkyqfX # i76eBHAMhcOzlBRjEnqiPwgOfRrAQ6CCDYEwggX/MIID56ADAgECAhMzAAAB32vw # LpKnSrTQAAAAAAHfMA0GCSqGSIb3DQEBCwUAMH4xCzAJBgNVBAYTAlVTMRMwEQYD # VQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNy # b3NvZnQgQ29ycG9yYXRpb24xKDAmBgNVBAMTH01pY3Jvc29mdCBDb2RlIFNpZ25p # bmcgUENBIDIwMTEwHhcNMjAxMjE1MjEzMTQ1WhcNMjExMjAyMjEzMTQ1WjB0MQsw # CQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9u # ZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMR4wHAYDVQQDExVNaWNy # b3NvZnQgQ29ycG9yYXRpb24wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB # AQC2uxlZEACjqfHkuFyoCwfL25ofI9DZWKt4wEj3JBQ48GPt1UsDv834CcoUUPMn # s/6CtPoaQ4Thy/kbOOg/zJAnrJeiMQqRe2Lsdb/NSI2gXXX9lad1/yPUDOXo4GNw # PjXq1JZi+HZV91bUr6ZjzePj1g+bepsqd/HC1XScj0fT3aAxLRykJSzExEBmU9eS # yuOwUuq+CriudQtWGMdJU650v/KmzfM46Y6lo/MCnnpvz3zEL7PMdUdwqj/nYhGG # 3UVILxX7tAdMbz7LN+6WOIpT1A41rwaoOVnv+8Ua94HwhjZmu1S73yeV7RZZNxoh # EegJi9YYssXa7UZUUkCCA+KnAgMBAAGjggF+MIIBejAfBgNVHSUEGDAWBgorBgEE # AYI3TAgBBggrBgEFBQcDAzAdBgNVHQ4EFgQUOPbML8IdkNGtCfMmVPtvI6VZ8+Mw # UAYDVR0RBEkwR6RFMEMxKTAnBgNVBAsTIE1pY3Jvc29mdCBPcGVyYXRpb25zIFB1 # ZXJ0byBSaWNvMRYwFAYDVQQFEw0yMzAwMTIrNDYzMDA5MB8GA1UdIwQYMBaAFEhu # ZOVQBdOCqhc3NyK1bajKdQKVMFQGA1UdHwRNMEswSaBHoEWGQ2h0dHA6Ly93d3cu # bWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY0NvZFNpZ1BDQTIwMTFfMjAxMS0w # Ny0wOC5jcmwwYQYIKwYBBQUHAQEEVTBTMFEGCCsGAQUFBzAChkVodHRwOi8vd3d3 # Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2NlcnRzL01pY0NvZFNpZ1BDQTIwMTFfMjAx # MS0wNy0wOC5jcnQwDAYDVR0TAQH/BAIwADANBgkqhkiG9w0BAQsFAAOCAgEAnnqH # tDyYUFaVAkvAK0eqq6nhoL95SZQu3RnpZ7tdQ89QR3++7A+4hrr7V4xxmkB5BObS # 0YK+MALE02atjwWgPdpYQ68WdLGroJZHkbZdgERG+7tETFl3aKF4KpoSaGOskZXp # TPnCaMo2PXoAMVMGpsQEQswimZq3IQ3nRQfBlJ0PoMMcN/+Pks8ZTL1BoPYsJpok # t6cql59q6CypZYIwgyJ892HpttybHKg1ZtQLUlSXccRMlugPgEcNZJagPEgPYni4 # b11snjRAgf0dyQ0zI9aLXqTxWUU5pCIFiPT0b2wsxzRqCtyGqpkGM8P9GazO8eao # mVItCYBcJSByBx/pS0cSYwBBHAZxJODUqxSXoSGDvmTfqUJXntnWkL4okok1FiCD # Z4jpyXOQunb6egIXvkgQ7jb2uO26Ow0m8RwleDvhOMrnHsupiOPbozKroSa6paFt # VSh89abUSooR8QdZciemmoFhcWkEwFg4spzvYNP4nIs193261WyTaRMZoceGun7G # CT2Rl653uUj+F+g94c63AhzSq4khdL4HlFIP2ePv29smfUnHtGq6yYFDLnT0q/Y+ # Di3jwloF8EWkkHRtSuXlFUbTmwr/lDDgbpZiKhLS7CBTDj32I0L5i532+uHczw82 # oZDmYmYmIUSMbZOgS65h797rj5JJ6OkeEUJoAVwwggd6MIIFYqADAgECAgphDpDS # 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/BvW1taslScxMNelDNMYIVZzCCFWMCAQEwgZUwfjELMAkG # A1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQx # HjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEoMCYGA1UEAxMfTWljcm9z # b2Z0IENvZGUgU2lnbmluZyBQQ0EgMjAxMQITMwAAAd9r8C6Sp0q00AAAAAAB3zAN # BglghkgBZQMEAgEFAKCBrjAZBgkqhkiG9w0BCQMxDAYKKwYBBAGCNwIBBDAcBgor # BgEEAYI3AgELMQ4wDAYKKwYBBAGCNwIBFTAvBgkqhkiG9w0BCQQxIgQgC6GQXAYi # vuzKjQ44HEg2cAs9R8vf0Vt81ThhLdOQG04wQgYKKwYBBAGCNwIBDDE0MDKgFIAS # AE0AaQBjAHIAbwBzAG8AZgB0oRqAGGh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbTAN # BgkqhkiG9w0BAQEFAASCAQCZXWPPanOjcbcyyblVEyQ4V0JExwnxA9ws2/UydQm6 # 5aaD1oNHP4T/QmcHcBMvuAjxTBkqLru9baHWZlsvcRXapn9RVyB5pIbaije2Ibfp # ocvtr0vFI9t+SWpfNtWSu1s5/wn9D9eewAXprhrwHmMPe2yQdtT4Xf54RPL8C9+h # DsORyWnOss1HrUXwvK5/iP08UYwaadFY3Lzowvq912lL721Kvq3eoeoMqnzVXqEC # dhS1AtJV7U2l2ykc/PAgggH2zNpjIHJSTwwf8m07FQ3psSlWGYlPL7TK1m9VN2r6 # kHSjlaHolSqrJXh/rlnasYvg5SvqmPrvwjdj1+GkN41coYIS8TCCEu0GCisGAQQB # gjcDAwExghLdMIIS2QYJKoZIhvcNAQcCoIISyjCCEsYCAQMxDzANBglghkgBZQME # AgEFADCCAVUGCyqGSIb3DQEJEAEEoIIBRASCAUAwggE8AgEBBgorBgEEAYRZCgMB # MDEwDQYJYIZIAWUDBAIBBQAEIK7vsD7jlt2ZETehpAuadV1pHO2963AJ/PVSiI/N # hSwoAgZgieYssPsYEzIwMjEwNTIwMDk0MzQ3LjM2M1owBIACAfSggdSkgdEwgc4x # CzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRt # b25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xKTAnBgNVBAsTIE1p # Y3Jvc29mdCBPcGVyYXRpb25zIFB1ZXJ0byBSaWNvMSYwJAYDVQQLEx1UaGFsZXMg # VFNTIEVTTjo0RDJGLUUzREQtQkVFRjElMCMGA1UEAxMcTWljcm9zb2Z0IFRpbWUt # U3RhbXAgU2VydmljZaCCDkQwggT1MIID3aADAgECAhMzAAABX8OuZVblU1jsAAAA # AAFfMA0GCSqGSIb3DQEBCwUAMHwxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNo # aW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29y # cG9yYXRpb24xJjAkBgNVBAMTHU1pY3Jvc29mdCBUaW1lLVN0YW1wIFBDQSAyMDEw # MB4XDTIxMDExNDE5MDIxOVoXDTIyMDQxMTE5MDIxOVowgc4xCzAJBgNVBAYTAlVT # MRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQK # ExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xKTAnBgNVBAsTIE1pY3Jvc29mdCBPcGVy # YXRpb25zIFB1ZXJ0byBSaWNvMSYwJAYDVQQLEx1UaGFsZXMgVFNTIEVTTjo0RDJG # LUUzREQtQkVFRjElMCMGA1UEAxMcTWljcm9zb2Z0IFRpbWUtU3RhbXAgU2Vydmlj # ZTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALw9efmC2WQ9uaaw7k4g # xHSSCEoJLk22FTAaF8jYbAMkQC6DQF0WPnIheLM1ERTuQ9FWbglf0mXbDd2KjezR # Nlz53ycJIReiGUQOnw5vd4TgjLUxL17g3K0MP2nNhY/LyP98Ml/40X905egDbiIn # dZdtHiDb1xfY17a7v1j9o3muc+MCgFt9fO+U4CDNUpMMMQJFr/9QlU4YdJawjbyK # fK3Ltvqfq3lvgK0/HphiDtX5ch3beGNBKowKSTXhft8pwuXQProutWgB5PZmAN8X # ZhACo4jWi/a0zgAJJcBqoXvS6InrWcH/Eqi/qVaj8Vs56/Z/6kaYZZu/1mSzLn5E # ALMCAwEAAaOCARswggEXMB0GA1UdDgQWBBQl7OnTlc0rgZ7Fd7qlDFguYTU49TAf # BgNVHSMEGDAWgBTVYzpcijGQ80N7fEYbxTNoWoVtVTBWBgNVHR8ETzBNMEugSaBH # hkVodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpL2NybC9wcm9kdWN0cy9NaWNU # aW1TdGFQQ0FfMjAxMC0wNy0wMS5jcmwwWgYIKwYBBQUHAQEETjBMMEoGCCsGAQUF # BzAChj5odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpL2NlcnRzL01pY1RpbVN0 # YVBDQV8yMDEwLTA3LTAxLmNydDAMBgNVHRMBAf8EAjAAMBMGA1UdJQQMMAoGCCsG # AQUFBwMIMA0GCSqGSIb3DQEBCwUAA4IBAQAOgtfZLJYSbsE3W73nd0hLnqQqHSFl # 2spHxzeXxM4uJT2uAVk/SLVzzjvZemUDBeOedKeXG8hctprpoQMpU3gbsNUnUaDe # sDcmR+eELCwYa+VBkUCqsIGJmQlDwuDwNa67kyCEPyPW59Yu2w/djNrwNWSjtuRw # fUFoDkjYyDjnXD0josi67qxJgW8rRqjl9a62hGzlzgE+aVLTT5IhK5z2X62Lph8j # 9f4XjtCPnyeFKFmgBWHPY1HbbjUHfg91StCLxueH2LjZoQETWOJ+pxElicXwVP5B # 0wlWkiauwug3rTKnDb5WKUb2llsnQgaegV+MQjMI7K6v+spvsMgRjPlhMIIGcTCC # BFmgAwIBAgIKYQmBKgAAAAAAAjANBgkqhkiG9w0BAQsFADCBiDELMAkGA1UEBhMC # VVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNV # BAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEyMDAGA1UEAxMpTWljcm9zb2Z0IFJv # b3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5IDIwMTAwHhcNMTAwNzAxMjEzNjU1WhcN # MjUwNzAxMjE0NjU1WjB8MQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3Rv # bjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0 # aW9uMSYwJAYDVQQDEx1NaWNyb3NvZnQgVGltZS1TdGFtcCBQQ0EgMjAxMDCCASIw # DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKkdDbx3EYo6IOz8E5f1+n9plGt0 # VBDVpQoAgoX77XxoSyxfxcPlYcJ2tz5mK1vwFVMnBDEfQRsalR3OCROOfGEwWbEw # RA/xYIiEVEMM1024OAizQt2TrNZzMFcmgqNFDdDq9UeBzb8kYDJYYEbyWEeGMoQe # dGFnkV+BVLHPk0ySwcSmXdFhE24oxhr5hoC732H8RsEnHSRnEnIaIYqvS2SJUGKx # Xf13Hz3wV3WsvYpCTUBR0Q+cBj5nf/VmwAOWRH7v0Ev9buWayrGo8noqCjHw2k4G # kbaICDXoeByw6ZnNPOcvRLqn9NxkvaQBwSAJk3jN/LzAyURdXhacAQVPIk0CAwEA # AaOCAeYwggHiMBAGCSsGAQQBgjcVAQQDAgEAMB0GA1UdDgQWBBTVYzpcijGQ80N7 # fEYbxTNoWoVtVTAZBgkrBgEEAYI3FAIEDB4KAFMAdQBiAEMAQTALBgNVHQ8EBAMC # AYYwDwYDVR0TAQH/BAUwAwEB/zAfBgNVHSMEGDAWgBTV9lbLj+iiXGJo0T2UkFvX # zpoYxDBWBgNVHR8ETzBNMEugSaBHhkVodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20v # cGtpL2NybC9wcm9kdWN0cy9NaWNSb29DZXJBdXRfMjAxMC0wNi0yMy5jcmwwWgYI # KwYBBQUHAQEETjBMMEoGCCsGAQUFBzAChj5odHRwOi8vd3d3Lm1pY3Jvc29mdC5j # b20vcGtpL2NlcnRzL01pY1Jvb0NlckF1dF8yMDEwLTA2LTIzLmNydDCBoAYDVR0g # AQH/BIGVMIGSMIGPBgkrBgEEAYI3LgMwgYEwPQYIKwYBBQUHAgEWMWh0dHA6Ly93 # d3cubWljcm9zb2Z0LmNvbS9QS0kvZG9jcy9DUFMvZGVmYXVsdC5odG0wQAYIKwYB # BQUHAgIwNB4yIB0ATABlAGcAYQBsAF8AUABvAGwAaQBjAHkAXwBTAHQAYQB0AGUA # bQBlAG4AdAAuIB0wDQYJKoZIhvcNAQELBQADggIBAAfmiFEN4sbgmD+BcQM9naOh # IW+z66bM9TG+zwXiqf76V20ZMLPCxWbJat/15/B4vceoniXj+bzta1RXCCtRgkQS # +7lTjMz0YBKKdsxAQEGb3FwX/1z5Xhc1mCRWS3TvQhDIr79/xn/yN31aPxzymXlK # kVIArzgPF/UveYFl2am1a+THzvbKegBvSzBEJCI8z+0DpZaPWSm8tv0E4XCfMkon # /VWvL/625Y4zu2JfmttXQOnxzplmkIz/amJ/3cVKC5Em4jnsGUpxY517IW3DnKOi # PPp/fZZqkHimbdLhnPkd/DjYlPTGpQqWhqS9nhquBEKDuLWAmyI4ILUl5WTs9/S/ # fmNZJQ96LjlXdqJxqgaKD4kWumGnEcua2A5HmoDF0M2n0O99g/DhO3EJ3110mCII # YdqwUB5vvfHhAN/nMQekkzr3ZUd46PioSKv33nJ+YWtvd6mBy6cJrDm77MbL2IK0 # cs0d9LiFAR6A+xuJKlQ5slvayA1VmXqHczsI5pgt6o3gMy4SKfXAL1QnIffIrE7a # KLixqduWsqdCosnPGUFN4Ib5KpqjEWYw07t0MkvfY3v1mYovG8chr1m1rtxEPJdQ # cdeh0sVV42neV8HR3jDA/czmTfsNv11P6Z0eGTgvvM9YBS7vDaBQNdrvCScc1bN+ # NR4Iuto229Nfj950iEkSoYIC0jCCAjsCAQEwgfyhgdSkgdEwgc4xCzAJBgNVBAYT # AlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYD # VQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xKTAnBgNVBAsTIE1pY3Jvc29mdCBP # cGVyYXRpb25zIFB1ZXJ0byBSaWNvMSYwJAYDVQQLEx1UaGFsZXMgVFNTIEVTTjo0 # RDJGLUUzREQtQkVFRjElMCMGA1UEAxMcTWljcm9zb2Z0IFRpbWUtU3RhbXAgU2Vy # dmljZaIjCgEBMAcGBSsOAwIaAxUA+gfSqjdAndOFEaXOQyBCdupmQoeggYMwgYCk # fjB8MQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMH # UmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSYwJAYDVQQD # Ex1NaWNyb3NvZnQgVGltZS1TdGFtcCBQQ0EgMjAxMDANBgkqhkiG9w0BAQUFAAIF # AORQE28wIhgPMjAyMTA1MjAwMjQ1MDNaGA8yMDIxMDUyMTAyNDUwM1owdzA9Bgor # BgEEAYRZCgQBMS8wLTAKAgUA5FATbwIBADAKAgEAAgIg3QIB/zAHAgEAAgIRMjAK # AgUA5FFk7wIBADA2BgorBgEEAYRZCgQCMSgwJjAMBgorBgEEAYRZCgMCoAowCAIB # AAIDB6EgoQowCAIBAAIDAYagMA0GCSqGSIb3DQEBBQUAA4GBADA+Hc6OircJQM9i # FpJqZ9FvJ3DtI+lH5HQbZWHBF0687OFj6MP6XVQmUAffAhTGtQe/jdiBCu6Srtth # /Kb+4lSBBtGwBACeAhPHnxKV5KyPi7s4pjymK/FYzt//o71OV14pASEppUk0e/us # v4sY6VjOjfLSfS1EEidly9rSaMpgMYIDDTCCAwkCAQEwgZMwfDELMAkGA1UEBhMC # VVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNV # BAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEmMCQGA1UEAxMdTWljcm9zb2Z0IFRp # bWUtU3RhbXAgUENBIDIwMTACEzMAAAFfw65lVuVTWOwAAAAAAV8wDQYJYIZIAWUD # BAIBBQCgggFKMBoGCSqGSIb3DQEJAzENBgsqhkiG9w0BCRABBDAvBgkqhkiG9w0B # CQQxIgQgK7S9o9diXNnv2cVqjP83HLcjg3ryMWSltY4Fsr01muMwgfoGCyqGSIb3 # DQEJEAIvMYHqMIHnMIHkMIG9BCDQzXq1KxGsLuj0szktrnlhIRqmbwp5bVGc6Bu6 # hglMXDCBmDCBgKR+MHwxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9u # MRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRp # b24xJjAkBgNVBAMTHU1pY3Jvc29mdCBUaW1lLVN0YW1wIFBDQSAyMDEwAhMzAAAB # X8OuZVblU1jsAAAAAAFfMCIEIMzMO/8MGU6wJEYLUVGLHxl8I3c5fonT43Z5VduD # w4DqMA0GCSqGSIb3DQEBCwUABIIBAErlO/WwSZQhcy8Hf1CHue0i3SczyDh81+8Z # 9J5UZFHEAyRT/eVvXr+IpQz/yJWZMn8b90pXXXEcU0GnYrpBqUAC3Wu4iUYQU86d # XpM4jl4F/h60sBetkSJjV3XsO1n8evnYxjL0TEefhdd4U1t90cl8X1lE9SWCof/k # cV4NF2uItD5HIwbDdFdv9kYi9tYZ6DZL2DJKXSPRGivbl/8sLLJgs3ewXDj8Z6c+ # vOZkEIUft3D974qf2I+GGh74ARgxzVpbp2yEfzsRxNqX2BN9wg/YVW+I8kIwT2zU # IjrbycxKgeKQxBr9aVt4xmuXR3rfa4/LAJxFCybMeVbFcjKYcIM= # SIG # End signature block |