Remove-AaddsResourceForestTrust.ps1
<#PSScriptInfo
.VERSION 1.2.0 .GUID 28e4c489-94b3-4699-b7c8-1bb701278bb9 .AUTHOR aaddsfb@microsoft.com .COMPANYNAME Microsoft Corporation .COPYRIGHT (c) Microsoft Corporation .TAGS Azure-AD-Domain-Services ResourceForest .LICENSEURI .PROJECTURI .ICONURI .EXTERNALMODULEDEPENDENCIES .REQUIREDSCRIPTS .EXTERNALSCRIPTDEPENDENCIES .RELEASENOTES 07/19/2020 - Initial release 01/09/2024 - Rebrand to Microsoft Entra Domain Services #> <# .SYNOPSIS Remove a forest trust from Microsoft Entra Domain Services resource forest. .DESCRIPTION Remove a forest trust from Microsoft Entra Domain Services resource forest. .PARAMETER ManagedDomainFqdn [MANADATORY] The fqdn of the managed domain (aadds.corp.contoso.com). .PARAMETER TrustFqdn [MANADATORY] The FQDN of the trusted forest. Not used with All switch .PARAMETER All [OPTIONAL] Remove all the trusts from the Microsoft Entra Domain Services resource forest .PARAMETER Credential [OPTIONAL] The credentials used to authenticate to Azure. #> [CmdletBinding()] Param ( [Parameter( Mandatory=$true, ParameterSetName="Specific")] [Parameter( Mandatory=$true, ParameterSetName="All")] [string] $ManagedDomainFqdn, [Parameter( Mandatory=$true, ParameterSetName="Specific")] [string] $TrustFqdn, [Parameter( Mandatory=$true, ParameterSetName="All")] [switch] $All, [Parameter( Mandatory=$false, ParameterSetName="Specific")] [Parameter( Mandatory=$false, ParameterSetName="All")] [pscredential] $Credentials ) Process { # # Create empty trust settings $TrustSettingsValue = [System.Collections.ArrayList]@() $azProfile = $null Write-Host ([string]::Empty) Write-Host ([string]::Empty) Write-Host "Authenticating to Azure... " -NoNewline # # Collect credentials from the user for authentication if($null -ne $creds) { $creds = Get-Credential -ErrorAction SilentlyContinue $azProfile = Connect-AzAccount -Credential $creds -ErrorAction SilentlyContinue } else { $azProfile = Connect-AzAccount -ErrorAction SilentlyContinue } if($null -eq $azProfile) { # Authentication failed Write-Host -ForegroundColor Red "[Failed!]" Write-Host -ForegroundColor Red "ERROR: Could not authenticate to Azure. Check your credentials and try again." Return } else { Write-Host -ForegroundColor Green "[Success!]" } Write-Host "INFO: Authenticated to Azure as $($azProfile.Account.Id)..." Write-Host "Getting Microsoft Entra Domain Services instance..." -NoNewline $aadds = Get-AzResource -Name $ManagedDomainFqdn -ApiVersion "2020-01-01" -ExpandProperties -ErrorAction SilentlyContinue if($null -eq $aadds) { Write-Host -ForegroundColor Red "[Failed!]" Write-Host -ForegroundColor Red "ERROR: Could not find an Microsoft Entra Domain Services resource with the name $ManagedDomainFqdn." Return } #region Prerequisites checking... Write-Host ([string]::Empty) Write-Host "Checking prerequisites..." $pass = $true Write-Host "Validating resource type..." -NoNewline if($aadds.ResourceType -ne "Microsoft.AAD/domainServices") { $pass = $false Write-Host -ForegroundColor Red "[Failed!]" Write-Host -ForegroundColor Red "ERROR: The resource is not an Microsoft Entra Domain Services resource (Status:$($aadds.ResourceType)." } else {Write-Host -ForegroundColor Green "[Pass!]"} Write-Host "Validating service status..." -NoNewline if($null -ne $aadds.Properties.ReplicaSets) { $replicaSetCount = $aadds.Properties.ReplicaSets.Count } else { $replicaSetCount = 0 } $serviceStatus = $null if($replicaSetCount -eq 1) { $serviceStatus = $aadds.Properties.ReplicaSets[0].serviceStatus } elseif($replicaSetCount -gt 1) { $syncOwner = $aadds.Properties.SyncOwner $primaryReplicaSet = $aadds.Properties.ReplicaSets | Where-Object { $_.ReplicaSetId -eq $syncOwner } $serviceStatus = $primaryReplicaSet.serviceStatus } else { $serviceStatus = $null } if($serviceStatus -ne "Running") { $pass = $false Write-Host -ForegroundColor Red "[Failed!]" Write-Host -ForegroundColor Red "ERROR: The managed domain $($aadds.Name) must be running (Status:$($aadds.properties.serviceStatus))." } else { Write-Host -ForegroundColor Green "[Pass!]" } Write-Host "Validating domain configuration..." -NoNewline if($aadds.properties.domainConfigurationType -ne "ResourceTrusting") { $pass = $false Write-Host -ForegroundColor red "[Failed!]" Write-Host -ForegroundColor Red "ERROR: The managed domain $($aadds.Name) is not a resource forest (Status:$($aadds.properties.domainConfigurationType))." } else { Write-Host -ForegroundColor Green "[Pass!]"} Write-Host "Finding trust name..." -NoNewline # # Check the $all switch and skip if $true if($all -eq $true) { Write-Host -ForegroundColor Green "[Skip!]" -NoNewline Write-Host -ForegroundColor "INFO: All parameter detected." } else { # User provided an explicit trust #Get the list of current trusts. $tempTrustSettingsValue = $aadds.Properties.resourceForestSettings.settings if(0 -lt $tempTrustSettingsValue.Count) { $found = $false foreach($tempTrustValue in $tempTrustSettingsValue) { #check for matching #fqdn if($TrustFqdn -eq $tempTrustValue.trustedDomainFqdn) { $found = $true break; } } if($found) { Write-Host -ForegroundColor Green "[Pass!]" } else { $pass = $false Write-Host -ForegroundColor Red "[Failed!]" Write-Host -ForegroundColor Red "The trust $TrustFqdn does not exist in the managed domain $($aadds.Name)." } } else # There are no existing trusts to edit { $pass = $false Write-Host -ForegroundColor Red "[Failed!]" Write-Host -ForegroundColor Red "The managed domain $($aadds.Name) does not have any trusts. Use Add-AaddsResourceForestTrust to add a trust." } } if($pass -eq $false) { Write-Host ([string]::Empty) Write-Host -ForegroundColor Red "ERROR: One or more prerequisites checks failed." Return } #endregion # # TrustSettingsValue is empty. The -all case is covered # When -all is false (not present) # Add existing trust but leave out the named trust if($all -eq $false) { foreach($tempTrustValue in $tempTrustSettingsValue) { # Check for matching #fqdn if($TrustFqdn -eq $tempTrustValue.trustedDomainFqdn) { # Save the old trust for display. # Skip adding it to the new trust list $oldTrust = $tempTrustValue } else { $catchOutput = $TrustSettingsValue.Add( $tempTrustValue) } } } Write-Host ([string]::Empty) if($all -eq $true) { $msg = "Type 'Yes' to confirm you want to delete *ALL* the trust in the $($aadds.Name) managed domain." } else { # # Show the trust Write-Host -ForegroundColor Yellow "Trust Settings" Write-Host "FriendlyName: " $oldTrust.FriendlyName Write-Host "TrustedDomainFqdn: " $oldTrust.trustedDomainFqdn Write-Host "DNS IP Addresses: " $oldTrust.remoteDNSIPs $msg = "Type 'Yes' to confirm you want to delete the trust $($TrustFqdn) with these settings." } Write-Host ([string]::Empty) $answer = Read-host -Prompt $msg if("Yes" -cne $answer) { Write-Host "User canceled." Return } # Assign the trust values to the trust settings $trustSettings = @{"settings" = $TrustSettingsValue} # Assign the trust settings to the ResourceForestSettings $resourceForestSettings = @{"resourceForestSettings" = $trustSettings} $actionStart = Get-Date Write-Host ([string]::Empty) Write-Host "Sending request to Azure. This action may take up to five minutes to complete. Please wait..." Set-AzResource -ResourceId $aadds.ResourceId -ApiVersion "2020-01-01" -Properties $resourceForestSettings -force $actionStop = Get-Date Write-Host "Elapsed Time: " ($actionStop - $actionStart) } # SIG # Begin signature block # MIIr7gYJKoZIhvcNAQcCoIIr3zCCK9sCAQExDzANBglghkgBZQMEAgEFADB5Bgor # BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG # KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCARIErdAyIwzk7s # VGU40nZvWgz6VZ70dEu7OMfRxHoYdqCCEXgwggiIMIIHcKADAgECAhM2AAABzxvV # hIv3HFTwAAIAAAHPMA0GCSqGSIb3DQEBCwUAMEExEzARBgoJkiaJk/IsZAEZFgNH # QkwxEzARBgoJkiaJk/IsZAEZFgNBTUUxFTATBgNVBAMTDEFNRSBDUyBDQSAwMTAe # Fw0yMzAzMjAyMDAwMzJaFw0yNDAzMTkyMDAwMzJaMC8xLTArBgNVBAMTJE1pY3Jv # c29mdCBBenVyZSBEZXBlbmRlbmN5IENvZGUgU2lnbjCCASIwDQYJKoZIhvcNAQEB # BQADggEPADCCAQoCggEBAOREEBJi/WoqvCPTpdI+NM1fM/zljtamVZMTJaEFhALS # 3v0oF6vWx7zJy9McdDOyA9wY8x75/uBmwl1n8d5l/cLSD+PExSnU1o/zDyr80He+ # K1yZlVCdYSYsoWDsOeYCI0+sf6O6U2Y2kp+pIVLSf1j7amZd+vkbjHCbxRA28njz # MCxv66EZS2Sh5yTH+uFi+RzUWMaJltkPurDraCRNKKubmOpAmqbtaPu+FEIs+nyn # +xzFwefTOGNanTyOs2wmxBJ8VkQGU9tlRlbNrURi/5TtdktoTnM0Vn4M/2MbPlYC # QBcJtVadNVheejpKNhinXiZw8i9TsGHDOJvuz05Hl7UCAwEAAaOCBYkwggWFMCkG # CSsGAQQBgjcVCgQcMBowDAYKKwYBBAGCN1sDATAKBggrBgEFBQcDAzA8BgkrBgEE # AYI3FQcELzAtBiUrBgEEAYI3FQiGkOMNhNW0eITxiz6Fm90Wzp0SgWDigi2HkK4D # AgFkAgEOMIICdgYIKwYBBQUHAQEEggJoMIICZDBiBggrBgEFBQcwAoZWaHR0cDov # L2NybC5taWNyb3NvZnQuY29tL3BraWluZnJhL0NlcnRzL0JZMlBLSUNTQ0EwMS5B # TUUuR0JMX0FNRSUyMENTJTIwQ0ElMjAwMSgyKS5jcnQwUgYIKwYBBQUHMAKGRmh0 # dHA6Ly9jcmwxLmFtZS5nYmwvYWlhL0JZMlBLSUNTQ0EwMS5BTUUuR0JMX0FNRSUy # MENTJTIwQ0ElMjAwMSgyKS5jcnQwUgYIKwYBBQUHMAKGRmh0dHA6Ly9jcmwyLmFt # ZS5nYmwvYWlhL0JZMlBLSUNTQ0EwMS5BTUUuR0JMX0FNRSUyMENTJTIwQ0ElMjAw # MSgyKS5jcnQwUgYIKwYBBQUHMAKGRmh0dHA6Ly9jcmwzLmFtZS5nYmwvYWlhL0JZ # MlBLSUNTQ0EwMS5BTUUuR0JMX0FNRSUyMENTJTIwQ0ElMjAwMSgyKS5jcnQwUgYI # KwYBBQUHMAKGRmh0dHA6Ly9jcmw0LmFtZS5nYmwvYWlhL0JZMlBLSUNTQ0EwMS5B # TUUuR0JMX0FNRSUyMENTJTIwQ0ElMjAwMSgyKS5jcnQwga0GCCsGAQUFBzAChoGg # bGRhcDovLy9DTj1BTUUlMjBDUyUyMENBJTIwMDEsQ049QUlBLENOPVB1YmxpYyUy # MEtleSUyMFNlcnZpY2VzLENOPVNlcnZpY2VzLENOPUNvbmZpZ3VyYXRpb24sREM9 # QU1FLERDPUdCTD9jQUNlcnRpZmljYXRlP2Jhc2U/b2JqZWN0Q2xhc3M9Y2VydGlm # aWNhdGlvbkF1dGhvcml0eTAdBgNVHQ4EFgQUF8EGJdg3VCco3OMElEnYjfOsKQAw # DgYDVR0PAQH/BAQDAgeAMEUGA1UdEQQ+MDykOjA4MR4wHAYDVQQLExVNaWNyb3Nv # ZnQgQ29ycG9yYXRpb24xFjAUBgNVBAUTDTIzNjE2OSs1MDAzNjQwggHmBgNVHR8E # ggHdMIIB2TCCAdWgggHRoIIBzYY/aHR0cDovL2NybC5taWNyb3NvZnQuY29tL3Br # aWluZnJhL0NSTC9BTUUlMjBDUyUyMENBJTIwMDEoMikuY3JshjFodHRwOi8vY3Js # MS5hbWUuZ2JsL2NybC9BTUUlMjBDUyUyMENBJTIwMDEoMikuY3JshjFodHRwOi8v # Y3JsMi5hbWUuZ2JsL2NybC9BTUUlMjBDUyUyMENBJTIwMDEoMikuY3JshjFodHRw # Oi8vY3JsMy5hbWUuZ2JsL2NybC9BTUUlMjBDUyUyMENBJTIwMDEoMikuY3JshjFo # dHRwOi8vY3JsNC5hbWUuZ2JsL2NybC9BTUUlMjBDUyUyMENBJTIwMDEoMikuY3Js # hoG9bGRhcDovLy9DTj1BTUUlMjBDUyUyMENBJTIwMDEoMiksQ049QlkyUEtJQ1ND # QTAxLENOPUNEUCxDTj1QdWJsaWMlMjBLZXklMjBTZXJ2aWNlcyxDTj1TZXJ2aWNl # cyxDTj1Db25maWd1cmF0aW9uLERDPUFNRSxEQz1HQkw/Y2VydGlmaWNhdGVSZXZv # Y2F0aW9uTGlzdD9iYXNlP29iamVjdENsYXNzPWNSTERpc3RyaWJ1dGlvblBvaW50 # MB8GA1UdIwQYMBaAFJZRhOBrb3v+2Aarw/KF5imuavnUMB8GA1UdJQQYMBYGCisG # AQQBgjdbAwEGCCsGAQUFBwMDMA0GCSqGSIb3DQEBCwUAA4IBAQAy72n19XEpbA0F # OW2VYlwvvLf8AVlRHgV5AnFegvbNSGIlfvbTizxYyHrzzldeW/xZxpLMOfnU8Ymo # Oe3cpJYN6qX99cL50D2F0QibG6eJ4XpVNKDbt1YbaR+ekLgHoATohGFqAeI0LHO8 # jIQBJaICrYeLNXRcP8kXV0BrLtKXPsUojlvSxHzaECg7F2fhKt7WQkVZexhZB6QO # VGj/VQY9TjWsHi6D5evjT3o819ZINUG1mCKbBFL1pFHMDjFICKlPDFIt9oL2QbZZ # 27gH2HHcOqCIWeFlrz3qcH+dwcVGEOHz6j5SDMSIWBpS3pebi5kb0jnOu7m6uAz0 # Q8ksXFl/MIII6DCCBtCgAwIBAgITHwAAAFHqj/accwyoOwAAAAAAUTANBgkqhkiG # 9w0BAQsFADA8MRMwEQYKCZImiZPyLGQBGRYDR0JMMRMwEQYKCZImiZPyLGQBGRYD # QU1FMRAwDgYDVQQDEwdhbWVyb290MB4XDTIxMDUyMTE4NDQxNFoXDTI2MDUyMTE4 # NTQxNFowQTETMBEGCgmSJomT8ixkARkWA0dCTDETMBEGCgmSJomT8ixkARkWA0FN # RTEVMBMGA1UEAxMMQU1FIENTIENBIDAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A # MIIBCgKCAQEAyZpSCX0Bno1W1yqXMhT6BUlJZWpa4p3xFeiTHO4vm2Q6C/azR5xw # xnyYHrkSGDtS2P9X+KDE64V20mmEQkubxnPNeOVnE2RvdPGxgwlq+BhS3ONdVsQP # j79q7XgHM9HhzB9+qk0PC9KN1zm9p/seyiRS6JF1dbOqRf1pUl7FAVxmgiCFgV8h # HIb/rDPXig7FDi3S0yEx2CUDVpIq8jEhG8anUFE1WYxM+ni0S5KHwwKPKV4qyGDo # DO+9AmDoma3Chyu5WDlW5cdtqXTWsGPE3umtnX6AmlldUFLms4OVR4guKf+n5LIB # CC6bTiocfXPomqYjYTKx7AGMfaVLaaXmhQIDAQABo4IE3DCCBNgwEgYJKwYBBAGC # NxUBBAUCAwIAAjAjBgkrBgEEAYI3FQIEFgQUEmgkQiFHy9RrvjHPIKTACyN/P0cw # HQYDVR0OBBYEFJZRhOBrb3v+2Aarw/KF5imuavnUMIIBBAYDVR0lBIH8MIH5Bgcr # BgEFAgMFBggrBgEFBQcDAQYIKwYBBQUHAwIGCisGAQQBgjcUAgEGCSsGAQQBgjcV # BgYKKwYBBAGCNwoDDAYJKwYBBAGCNxUGBggrBgEFBQcDCQYIKwYBBQUIAgIGCisG # AQQBgjdAAQEGCysGAQQBgjcKAwQBBgorBgEEAYI3CgMEBgkrBgEEAYI3FQUGCisG # AQQBgjcUAgIGCisGAQQBgjcUAgMGCCsGAQUFBwMDBgorBgEEAYI3WwEBBgorBgEE # AYI3WwIBBgorBgEEAYI3WwMBBgorBgEEAYI3WwUBBgorBgEEAYI3WwQBBgorBgEE # AYI3WwQCMBkGCSsGAQQBgjcUAgQMHgoAUwB1AGIAQwBBMAsGA1UdDwQEAwIBhjAS # BgNVHRMBAf8ECDAGAQH/AgEAMB8GA1UdIwQYMBaAFCleUV5krjS566ycDaeMdQHR # CQsoMIIBaAYDVR0fBIIBXzCCAVswggFXoIIBU6CCAU+GMWh0dHA6Ly9jcmwubWlj # cm9zb2Z0LmNvbS9wa2lpbmZyYS9jcmwvYW1lcm9vdC5jcmyGI2h0dHA6Ly9jcmwy # LmFtZS5nYmwvY3JsL2FtZXJvb3QuY3JshiNodHRwOi8vY3JsMy5hbWUuZ2JsL2Ny # bC9hbWVyb290LmNybIYjaHR0cDovL2NybDEuYW1lLmdibC9jcmwvYW1lcm9vdC5j # cmyGgapsZGFwOi8vL0NOPWFtZXJvb3QsQ049QU1FUm9vdCxDTj1DRFAsQ049UHVi # bGljJTIwS2V5JTIwU2VydmljZXMsQ049U2VydmljZXMsQ049Q29uZmlndXJhdGlv # bixEQz1BTUUsREM9R0JMP2NlcnRpZmljYXRlUmV2b2NhdGlvbkxpc3Q/YmFzZT9v # YmplY3RDbGFzcz1jUkxEaXN0cmlidXRpb25Qb2ludDCCAasGCCsGAQUFBwEBBIIB # nTCCAZkwRwYIKwYBBQUHMAKGO2h0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9wa2lp # bmZyYS9jZXJ0cy9BTUVSb290X2FtZXJvb3QuY3J0MDcGCCsGAQUFBzAChitodHRw # Oi8vY3JsMi5hbWUuZ2JsL2FpYS9BTUVSb290X2FtZXJvb3QuY3J0MDcGCCsGAQUF # BzAChitodHRwOi8vY3JsMy5hbWUuZ2JsL2FpYS9BTUVSb290X2FtZXJvb3QuY3J0 # MDcGCCsGAQUFBzAChitodHRwOi8vY3JsMS5hbWUuZ2JsL2FpYS9BTUVSb290X2Ft # ZXJvb3QuY3J0MIGiBggrBgEFBQcwAoaBlWxkYXA6Ly8vQ049YW1lcm9vdCxDTj1B # SUEsQ049UHVibGljJTIwS2V5JTIwU2VydmljZXMsQ049U2VydmljZXMsQ049Q29u # ZmlndXJhdGlvbixEQz1BTUUsREM9R0JMP2NBQ2VydGlmaWNhdGU/YmFzZT9vYmpl # Y3RDbGFzcz1jZXJ0aWZpY2F0aW9uQXV0aG9yaXR5MA0GCSqGSIb3DQEBCwUAA4IC # AQBQECO3Tw/o317Rrd7yadqcswPx1LvIYymkaTN6KcmuRt6HKa0Xe73Ux2/AQ30T # fgA9GBJngweRykKBusRzyOU17iIubJvy3gA21dwtqtB0DsoEv1U/ptVu2v++doTC # J/i+GbssVXkgaX8H+6EOGEmT4evp4GbwR4HwWlc+Dvf8HH8PdUA2Z04CvcwIfckS # ipbNm84jxJ8XjmTFTWscldL9edj2NsY6iGnyJFIyur2PS7VRYyV3p1VAJp91gj1j # RQtWEyCB8P5g9nE3z8u0ANaU/hjwEQCrdGyravWgnf2JtG+bT26YAokbc8m+32zU # tXRO+NK3tAjhOu2FdsG3qNrF4sc7y37R/C+7Pcb/cFfhttqsirepZii4xStcjMOD # YuXzGm3IJs0b0owHG6oKd7ZOGvHpmmh9K8/DLriD/sq8bURD10qi/wuW8zM7IpLg # 1vcR9dIK2mc0pj44pc6UX0XbttP/VEJgu3lT2eI9VjWtaKjx38xE9woSMyekPRtz # TwgfuysF9DkJisr+yA4po/FPxpbBw9c/hBf32DH/GFxteS2pmjgKIbMP8sDukmEq # 3lVvuWNJsybrZwQvQpvaM49fv+JKpLK5YWYEfwksYRR9wU8Hh/ID9hRCEkbUoQ2W # 7mMpsp2Nbp/kcn4ivfolUy3Q9Yf0scsQ6WTLYpm+AoCUJTGCGcwwghnIAgEBMFgw # QTETMBEGCgmSJomT8ixkARkWA0dCTDETMBEGCgmSJomT8ixkARkWA0FNRTEVMBMG # A1UEAxMMQU1FIENTIENBIDAxAhM2AAABzxvVhIv3HFTwAAIAAAHPMA0GCWCGSAFl # AwQCAQUAoIGuMBkGCSqGSIb3DQEJAzEMBgorBgEEAYI3AgEEMBwGCisGAQQBgjcC # AQsxDjAMBgorBgEEAYI3AgEVMC8GCSqGSIb3DQEJBDEiBCDMucwD/7ro0V9bVhLG # 30nOMD5Q8wdZq9Wg6mtbtCXhVzBCBgorBgEEAYI3AgEMMTQwMqAUgBIATQBpAGMA # cgBvAHMAbwBmAHShGoAYaHR0cDovL3d3dy5taWNyb3NvZnQuY29tMA0GCSqGSIb3 # DQEBAQUABIIBAL259QrjzYXIzRen+/gQ+hkVASAO6HxxnJh7fbphgTlad6JgTPSF # Vfi30teKdwzVQutDnIHSlSGnx4goCijTAgofSclFK+Ut14yLNCc+IOLxJEKlDY4N # NuKr7fXtbaLo93IqoDdlajglqdsl0IUvCyvS6meVQN9zXcxG4zi0aULUdga1etc1 # 5wLzNxTfb0u99LRAF7WMBhQOVC6pAD0MJKRFKW0vXRJxQDkHqXeLmueUAR04j2lA # jc4BZX8BHMEi45rdf8vYrOAHu02VSYEJ1yZxTdKN3D0rHTkaPmUjjYt6aGAaGVC8 # EDKRthrlLC8qWWRztVZWA/onv7sIbaTlPpehgheUMIIXkAYKKwYBBAGCNwMDATGC # F4Awghd8BgkqhkiG9w0BBwKgghdtMIIXaQIBAzEPMA0GCWCGSAFlAwQCAQUAMIIB # UgYLKoZIhvcNAQkQAQSgggFBBIIBPTCCATkCAQEGCisGAQQBhFkKAwEwMTANBglg # hkgBZQMEAgEFAAQgk8lmMOtfDXe//FzFDNV9w/ixNzcfaUGDsUBWubPVQawCBmWg # ABdGsRgTMjAyNDAxMTUwNzI0NDcuMzkxWjAEgAIB9KCB0aSBzjCByzELMAkGA1UE # BhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAc # BgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjElMCMGA1UECxMcTWljcm9zb2Z0 # IEFtZXJpY2EgT3BlcmF0aW9uczEnMCUGA1UECxMeblNoaWVsZCBUU1MgRVNOOkRD # MDAtMDVFMC1EOTQ3MSUwIwYDVQQDExxNaWNyb3NvZnQgVGltZS1TdGFtcCBTZXJ2 # aWNloIIR6jCCByAwggUIoAMCAQICEzMAAAHSISQxSli/LREAAQAAAdIwDQYJKoZI # hvcNAQELBQAwfDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAO # BgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEm # MCQGA1UEAxMdTWljcm9zb2Z0IFRpbWUtU3RhbXAgUENBIDIwMTAwHhcNMjMwNTI1 # MTkxMjIxWhcNMjQwMjAxMTkxMjIxWjCByzELMAkGA1UEBhMCVVMxEzARBgNVBAgT # Cldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29m # dCBDb3Jwb3JhdGlvbjElMCMGA1UECxMcTWljcm9zb2Z0IEFtZXJpY2EgT3BlcmF0 # aW9uczEnMCUGA1UECxMeblNoaWVsZCBUU1MgRVNOOkRDMDAtMDVFMC1EOTQ3MSUw # IwYDVQQDExxNaWNyb3NvZnQgVGltZS1TdGFtcCBTZXJ2aWNlMIICIjANBgkqhkiG # 9w0BAQEFAAOCAg8AMIICCgKCAgEA3GCIQtECP0j2k+fp2EgbEnYQTztklzONFcso # PBatUz6zDQ88QocVlA+32ysGBkrDjYLY41XneR0oeYpe+YzWnG+k62cLl/kNvvn9 # v/AgsrvE2NK8RCJw904+dm1s+UEVlUHo33QgP5+mc4p4XGWe/lXpVoE32Au6w64V # 90wV/PXpal5iEjlSFnl4kSvIfYR+kl4I4UBhkG39m0jO7hpCsyf6Wdi75U86vpjl # vYj9o3GBAOG6T3rq6YJS1VEpxhkC5o0Ke0nctcBOdlozynS5wReiW5kkRDPw4/We # 6JMUTVI2EnYMr2dS1kopYVf8HoGF1UOj/TCo0ZxPAiOSjB5quxLB4SAStAffXRUM # nS9b3bgu3lhI88+eWfw8h+h5dkjzn+SmeJR3+jFMLYGn/jHmcZFtIsYf7y9Zl/Fb # CUx2vAB/tJf/XZ1sxTBRSRRu4PeZxyejJmD635qHijkaMhEEbErrNqgq6TI4Pz92 # fViQLRRqF2DA9fTa8xuFBT6VW5dzdV7xuP7pXaNfmpwaQ2IcUFO5NYHx5+kMXVFN # E7KyfyQry330vPW+FV5SGsZ1RekGYfie8S1DRrRJo+ncD86Any+86g2Sb5rL2DZN # ZXG8lcTCIAxT6ANn2T1xxe3cWoTNmRuwALd72RIjLQuhP3Ii0XCMM5SawYhxHpyD # 78VteasCAwEAAaOCAUkwggFFMB0GA1UdDgQWBBQgtp+3J0d06D/5GxGdlyRRZmdZ # JDAfBgNVHSMEGDAWgBSfpxVdAF5iXYP05dJlpxtTNRnpcjBfBgNVHR8EWDBWMFSg # UqBQhk5odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2NybC9NaWNyb3Nv # ZnQlMjBUaW1lLVN0YW1wJTIwUENBJTIwMjAxMCgxKS5jcmwwbAYIKwYBBQUHAQEE # YDBeMFwGCCsGAQUFBzAChlBodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3Bz # L2NlcnRzL01pY3Jvc29mdCUyMFRpbWUtU3RhbXAlMjBQQ0ElMjAyMDEwKDEpLmNy # dDAMBgNVHRMBAf8EAjAAMBYGA1UdJQEB/wQMMAoGCCsGAQUFBwMIMA4GA1UdDwEB # /wQEAwIHgDANBgkqhkiG9w0BAQsFAAOCAgEAsOYqtBMtC5QHc9j3KnIUcFuXfn4r # TSEgr6g9BOlvwMok5PkzN1oWE2sUNqT+jq+Kjlfg7u/y/pNfIGK9aYbIcVTFZ1zX # HY3nDLU1lDlQMGyaHlh2gIJJzSDM1yt/s4LhuU1XCxIfwlTMtSeyjxPENAs+ejYF # s3fbqxvrIUgypCnYTmD1xfe9DK9RghRaXtaF4xMumkvh3mr6dsJsuuZm7tAHFDjx # J/oWKoo4C10j6r7hZjjqOVJ0leug7+RXZKiu6uQ0XqMfUTxGXB1GvtgVCj46fnUN # w+HPSB/O9uyozA/Dl2aJg/QPDK/33A5+RSO5X2XPIIWHO7KWCkzv9GfWEUWpoVVs # cayLATeS61oftfLKFyfvhHko80mHYBlmD4NeoS/+wMnceCs/1gU1JmxoolVHBPyN # GkFNlP9Dc1IiBSFvNEr8Xg1p+iPoclYP7HRUgCz+SU+8AHvM077KyNoTKRFS3UrR # QDKmpxWKrcGVORaALKD2e4dRJVpii2ZF5PHj7gC87TWNcrHjtE8HbniBnCMCLa5Q # WINV6T89fqTIRjFW5Xuih7p2iqOSv5XTjNJkEE+FY4OmW80SFUaA3AK0Of/9PO+Y # zlLybWMnOx5dOI3Jr4xCFwtx45FGL4BxFi9EBf+H+7ywHIWhGfN/f9xmDnah+VVZ # 2a1CAUAeg02lCCwwggdxMIIFWaADAgECAhMzAAAAFcXna54Cm0mZAAAAAAAVMA0G # CSqGSIb3DQEBCwUAMIGIMQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3Rv # bjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0 # aW9uMTIwMAYDVQQDEylNaWNyb3NvZnQgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3Jp # dHkgMjAxMDAeFw0yMTA5MzAxODIyMjVaFw0zMDA5MzAxODMyMjVaMHwxCzAJBgNV # BAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4w # HAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xJjAkBgNVBAMTHU1pY3Jvc29m # dCBUaW1lLVN0YW1wIFBDQSAyMDEwMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC # CgKCAgEA5OGmTOe0ciELeaLL1yR5vQ7VgtP97pwHB9KpbE51yMo1V/YBf2xK4OK9 # uT4XYDP/XE/HZveVU3Fa4n5KWv64NmeFRiMMtY0Tz3cywBAY6GB9alKDRLemjkZr # BxTzxXb1hlDcwUTIcVxRMTegCjhuje3XD9gmU3w5YQJ6xKr9cmmvHaus9ja+NSZk # 2pg7uhp7M62AW36MEBydUv626GIl3GoPz130/o5Tz9bshVZN7928jaTjkY+yOSxR # nOlwaQ3KNi1wjjHINSi947SHJMPgyY9+tVSP3PoFVZhtaDuaRr3tpK56KTesy+uD # RedGbsoy1cCGMFxPLOJiss254o2I5JasAUq7vnGpF1tnYN74kpEeHT39IM9zfUGa # RnXNxF803RKJ1v2lIH1+/NmeRd+2ci/bfV+AutuqfjbsNkz2K26oElHovwUDo9Fz # pk03dJQcNIIP8BDyt0cY7afomXw/TNuvXsLz1dhzPUNOwTM5TI4CvEJoLhDqhFFG # 4tG9ahhaYQFzymeiXtcodgLiMxhy16cg8ML6EgrXY28MyTZki1ugpoMhXV8wdJGU # lNi5UPkLiWHzNgY1GIRH29wb0f2y1BzFa/ZcUlFdEtsluq9QBXpsxREdcu+N+VLE # hReTwDwV2xo3xwgVGD94q0W29R6HXtqPnhZyacaue7e3PmriLq0CAwEAAaOCAd0w # ggHZMBIGCSsGAQQBgjcVAQQFAgMBAAEwIwYJKwYBBAGCNxUCBBYEFCqnUv5kxJq+ # gpE8RjUpzxD/LwTuMB0GA1UdDgQWBBSfpxVdAF5iXYP05dJlpxtTNRnpcjBcBgNV # HSAEVTBTMFEGDCsGAQQBgjdMg30BATBBMD8GCCsGAQUFBwIBFjNodHRwOi8vd3d3 # Lm1pY3Jvc29mdC5jb20vcGtpb3BzL0RvY3MvUmVwb3NpdG9yeS5odG0wEwYDVR0l # BAwwCgYIKwYBBQUHAwgwGQYJKwYBBAGCNxQCBAweCgBTAHUAYgBDAEEwCwYDVR0P # BAQDAgGGMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAU1fZWy4/oolxiaNE9 # lJBb186aGMQwVgYDVR0fBE8wTTBLoEmgR4ZFaHR0cDovL2NybC5taWNyb3NvZnQu # Y29tL3BraS9jcmwvcHJvZHVjdHMvTWljUm9vQ2VyQXV0XzIwMTAtMDYtMjMuY3Js # MFoGCCsGAQUFBwEBBE4wTDBKBggrBgEFBQcwAoY+aHR0cDovL3d3dy5taWNyb3Nv # ZnQuY29tL3BraS9jZXJ0cy9NaWNSb29DZXJBdXRfMjAxMC0wNi0yMy5jcnQwDQYJ # KoZIhvcNAQELBQADggIBAJ1VffwqreEsH2cBMSRb4Z5yS/ypb+pcFLY+TkdkeLEG # k5c9MTO1OdfCcTY/2mRsfNB1OW27DzHkwo/7bNGhlBgi7ulmZzpTTd2YurYeeNg2 # LpypglYAA7AFvonoaeC6Ce5732pvvinLbtg/SHUB2RjebYIM9W0jVOR4U3UkV7nd # n/OOPcbzaN9l9qRWqveVtihVJ9AkvUCgvxm2EhIRXT0n4ECWOKz3+SmJw7wXsFSF # QrP8DJ6LGYnn8AtqgcKBGUIZUnWKNsIdw2FzLixre24/LAl4FOmRsqlb30mjdAy8 # 7JGA0j3mSj5mO0+7hvoyGtmW9I/2kQH2zsZ0/fZMcm8Qq3UwxTSwethQ/gpY3UA8 # x1RtnWN0SCyxTkctwRQEcb9k+SS+c23Kjgm9swFXSVRk2XPXfx5bRAGOWhmRaw2f # pCjcZxkoJLo4S5pu+yFUa2pFEUep8beuyOiJXk+d0tBMdrVXVAmxaQFEfnyhYWxz # /gq77EFmPWn9y8FBSX5+k77L+DvktxW/tM4+pTFRhLy/AsGConsXHRWJjXD+57XQ # KBqJC4822rpM+Zv/Cuk0+CQ1ZyvgDbjmjJnW4SLq8CdCPSWU5nR0W2rRnj7tfqAx # M328y+l7vzhwRNGQ8cirOoo6CGJ/2XBjU02N7oJtpQUQwXEGahC0HVUzWLOhcGby # oYIDTTCCAjUCAQEwgfmhgdGkgc4wgcsxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpX # YXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQg # Q29ycG9yYXRpb24xJTAjBgNVBAsTHE1pY3Jvc29mdCBBbWVyaWNhIE9wZXJhdGlv # bnMxJzAlBgNVBAsTHm5TaGllbGQgVFNTIEVTTjpEQzAwLTA1RTAtRDk0NzElMCMG # A1UEAxMcTWljcm9zb2Z0IFRpbWUtU3RhbXAgU2VydmljZaIjCgEBMAcGBSsOAwIa # AxUAiabSwmbBNOjbZh0MweRdU66BUgaggYMwgYCkfjB8MQswCQYDVQQGEwJVUzET # MBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMV # TWljcm9zb2Z0IENvcnBvcmF0aW9uMSYwJAYDVQQDEx1NaWNyb3NvZnQgVGltZS1T # dGFtcCBQQ0EgMjAxMDANBgkqhkiG9w0BAQsFAAIFAOlPG3EwIhgPMjAyNDAxMTUw # MjQ4MTdaGA8yMDI0MDExNjAyNDgxN1owdDA6BgorBgEEAYRZCgQBMSwwKjAKAgUA # 6U8bcQIBADAHAgEAAgIZqzAHAgEAAgITfjAKAgUA6VBs8QIBADA2BgorBgEEAYRZ # CgQCMSgwJjAMBgorBgEEAYRZCgMCoAowCAIBAAIDB6EgoQowCAIBAAIDAYagMA0G # CSqGSIb3DQEBCwUAA4IBAQAT98M+gs0gbkuCPnubA8VfTpNNTbRIUqUn6LWEW+Pj # q6XeqPDBnslg9WhqNvWXhqGXclqmN1PGsctYkPwjseDQa8U4DPuHi16IjOUC1+Mo # 10Zt02RuAgZqOhSyzKdCb/cv6L1eh5YwYBacpNK/sFOqoxwpAZBqV0JkzXClMKpK # chUPCqqamdC/DDAQpyqU0yuf4DHThsKecIviYqhPtXEgzyhDfTEaOGMQp074mwAG # 5sNTtT1wnmSN2Tzmwi2AKQ0HG0oKuoK/YWQof+WrgUvjpqb1r99t+CKA3CohnIO+ # 7UO3IIn9rQxVIRvGzQxJ/4irhsTOLaLmbDAoPJ/Dq3/bMYIEDTCCBAkCAQEwgZMw # fDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1Jl # ZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEmMCQGA1UEAxMd # TWljcm9zb2Z0IFRpbWUtU3RhbXAgUENBIDIwMTACEzMAAAHSISQxSli/LREAAQAA # AdIwDQYJYIZIAWUDBAIBBQCgggFKMBoGCSqGSIb3DQEJAzENBgsqhkiG9w0BCRAB # BDAvBgkqhkiG9w0BCQQxIgQguvucXXRk4T/0ZXn3P15vh+zUuhL2BiuIl/j4186+ # FVMwgfoGCyqGSIb3DQEJEAIvMYHqMIHnMIHkMIG9BCDHgCCT399IvWWzhMVOeexs # FjWix9GebOuSRYGtg3mkTjCBmDCBgKR+MHwxCzAJBgNVBAYTAlVTMRMwEQYDVQQI # EwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3Nv # ZnQgQ29ycG9yYXRpb24xJjAkBgNVBAMTHU1pY3Jvc29mdCBUaW1lLVN0YW1wIFBD # QSAyMDEwAhMzAAAB0iEkMUpYvy0RAAEAAAHSMCIEIEZn3dhpdUPooiZ/z58yk6op # M1AszdwHsiA0NRJE/jYIMA0GCSqGSIb3DQEBCwUABIICAHDSPwiKGvHN98jjKH4j # 6KTFngLK5/0eECYn9U49Hto8NnT1SKGy3h2GS5NqTHxUHIFpAHpNWfyKipow9dUM # Qq1DiCqC0+OcLo5AwAL27BD/X1oPWflfXtXoatUNhQW9/5X1eLvNiPxaUvZYt/Pn # BhxD71STG5s/bu7vOV/lZUGPUt1MMJvnea50nKmVsDgv1KcLA8xnwJR7ps+QKKOw # AHdZNuihl2pUCim3K0dh1J3Gyx6N6/oj5Bq4T+azIlDlJL29Xy08go699Xe0B++9 # /CqXg94giBbwqB+KcbcrBqM0WGptEerygEozfQI1tosQTwKGonOedFrUWOTQmkgB # 9CyBV4pdHVO6N6aqj5itFi+547+fL9r37Jskgesb8RjLFnSbHqj+SXeHHb9lEMie # 9yUq1hHue8oW5RQou9qQGVpSaF/t1Fz8XdWgvNK1drSw6X6OWJkYhIk2JZwoTs3W # NTa+KrxOMDyTL0YpL7P5YHlpvUz6oJwW/N8MnU+rr/WCF2HHJxKmFjEulJWB0jhU # cdGBRYweM4/QCpJo1C0QYD1RXZZZvcSG63cCKOyx1W4IVYUcrlof8bNriiaZI780 # Ma5GdoLg/izD338OpyxZkS+kldiQ+UVTRcDtalj/yDTtRpttfC62zTSupC5nAu7X # jTwiEJi6htJmPVnydEGCbzrb # SIG # End signature block |