Get-AaddsReplicaSets.ps1

<#PSScriptInfo
.VERSION 1.2.0
.GUID A84ADA92-A8A1-4BDD-8D50-823E216B2581
.AUTHOR aaddsfb@microsoft.com
.COMPANYNAME Microsoft Corporation
.COPYRIGHT (c) Microsoft Corporation
.TAGS Azure-AD-Domain-Services ReplicaSet
.LICENSEURI
.PROJECTURI
.ICONURI
.EXTERNALMODULEDEPENDENCIES
.REQUIREDSCRIPTS
.EXTERNALSCRIPTDEPENDENCIES
.RELEASENOTES
    07/19/2020 - Initial release
    01/09/2024 - Rebrand to Microsoft Entra Domain Services
#>


<#
 
.SYNOPSIS
    Shows replica sets for the specified Microsoft Entra Domain Service domain.
 
.DESCRIPTION
    Shows replica sets for the specified Microsoft Entra Domain Service domain.
 
.PARAMETER ManagedDomainFqdn
    The fqdn of the managed domain (aadds.ufcontoso.com).
    This parameter is mandatory.
 
.PARAMETER Credentials
    The credentials used to authenticate to Azure.
    This parameter is optional.
#>


[CmdletBinding()]
Param (

    [Parameter(
        Mandatory=$true)]
        [string]
        $ManagedDomainFqdn,

    [Parameter(
        Mandatory=$false)]
        [pscredential]
        $creds
)


Process
{

    Set-Item Env:\SuppressAzurePowerShellBreakingChangeWarnings "true"

    Write-Host ([String]::Empty)
    Write-Host -ForegroundColor Cyan "Get-AaddsReplicaSet"

    $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)
    {
        $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 {0}..." -f $azProfile.Context.Account.Id)


    Write-Host "Getting Microsoft Entra Domain Services instance..." -NoNewline
    $aadds = Get-AzResource -Name $ManagedDomainFqdn -ExpandProperties -ApiVersion 2020-01-01 -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 {0}." -f $ManagedDomainFqdn)
        Return

    }

    $aaddsSyncOwnerId = $aadds.Properties.SyncOwner

    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 (Staus:{0})." -f $aadds.ResourceType)
    }
    else {Write-Host -ForegroundColor Green "[Pass!]"}

    Write-Host "Validating SKU..." -NoNewline
    if($aadds.properties.sku -eq "Standard")
    {
        $pass = $false
        Write-Host -ForegroundColor Red "[Failed!]"
        Write-Host -ForegroundColor Red ("ERROR: The managed domain {0} is does not support replica sets." -f $aadds.Name)
        Write-Host ([string]::Empty)
        Write-Host -ForegroundColor White "Replica Sets are only avaiable on Enterprise and Premium higher SKUs."
        Write-Host -ForegroundColor White "SKU changes affect Azure billing. See https://go.microsoft.com/fwlink/?linkid=2117164 for details."
        Write-Host ([string]::Empty)
        Write-Host -ForegroundColor White "Do you want to upgrade Microsoft Entra Domain Services to the Enterprise SKU?Type 'Yes' to continue or 'No' to quit"
        Write-Host -ForegroundColor Green "Type 'Yes' to continue or 'No' to quit"

        $answer = Read-Host
        if("Yes" -ne $answer)
        {
            Write-Host "User canceled."
            Return
        }
        else
        {
            ## Upgrade the SKU
            Write-Host "Sending request to Azure. This action may take up to 10 minutes to complete. Please wait..."
            Write-Host ("Upgrading Microsoft Entra Domain instance {0} to Enterprise sku..." -f $aadds.Name) -NoNewline

            Set-AzResource -ResourceId $aadds.ResourceId -Properties @{'Sku'='Enterprise'} -ApiVersion 2020-01-01 -Force | Out-Null
            $rvError = $Error[0].Exception.Message

            $aadds = Get-AzResource -Name $aadds.Name -ApiVersion 2020-01-01 -ExpandProperties -ErrorAction SilentlyContinue
            if($aadds.Properties.sku -ne "Enterprise")
            {
                Write-Host -ForegroundColor Red "[Failed!]"
                Write-Host -ForegroundColor Red "ERROR: Failed to upgrade the sku."
                Write-Host -ForegroundColor Red ("Message:{0}" -f $rvError)
                $pass = $false
            }
            else
            {
                Write-Host -ForegroundColor Green "[Success!]"
            }
        }
    }
    else
    { Write-Host -ForegroundColor Green "[Pass!]"}


    if($pass -eq $false)
    {
        Write-Host ([string]::Empty)
        Write-Host -ForegroundColor Red  "ERROR: One or more prerequisites checks failed."
        Return
    }

    $rs = $aadds.Properties.replicaSets
    if(0 -gt $rs.Count)
    {
        Write-Host ("INFO: The managed domain {0} does not have any replica sets" -f $aadds.Name)
    }
    Write-Host ([string]::Empty)
    Write-Host -Foreground Yellow "Replica sets for domain: " -NoNewline
    Write-Host ("{0}" -f $aadds.Name)
    Write-Host ([string]::Empty)
    [int]$count = 0

    foreach($r in $rs)
    {
        Write-Host -ForegroundColor Cyan "Replica Set " -NoNewline
        Write-Host -ForegroundColor Yellow "[" -NoNewline
        Write-Host -ForegroundColor Green ("{0}" -f $count.ToString()) -NoNewline
        Write-Host -ForegroundColor Yellow "]"

        if($r.replicaSetId -eq $aaddsSyncOwnerId)
        {
            Write-Host ("Location: {0}*" -f $r.Location)
        }
        else
        {
            Write-Host ("Location: {0}" -f $r.Location)
        }

        if($null -eq $r.domainControllerIpAddress)
        {
            Write-Host "IP Addreses: Unavailable"
        }
        else
        {
            Write-Host ("IP Addreses: {0} {1}" -f $r.domainControllerIpAddress[0], $r.domainControllerIpAddress[1])
        }

        Write-Host ("Status: {0}" -f $r.serviceStatus)
        Write-Host ([string]::Empty)
        $count++
    }

    Set-Item Env:\SuppressAzurePowerShellBreakingChangeWarnings "false"
}
# SIG # Begin signature block
# MIIr7gYJKoZIhvcNAQcCoIIr3zCCK9sCAQExDzANBglghkgBZQMEAgEFADB5Bgor
# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG
# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCCIBiNbnbfn3CHb
# uR1npan150CNy14zyQrpQF6PO+WKqKCCEXgwggiIMIIHcKADAgECAhM2AAABzxvV
# 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
# AQsxDjAMBgorBgEEAYI3AgEVMC8GCSqGSIb3DQEJBDEiBCC8KbKkZTss2QYriDbc
# ZvVWz70PbwGt9qgnqZIOYyLufTBCBgorBgEEAYI3AgEMMTQwMqAUgBIATQBpAGMA
# cgBvAHMAbwBmAHShGoAYaHR0cDovL3d3dy5taWNyb3NvZnQuY29tMA0GCSqGSIb3
# DQEBAQUABIIBAH2FBrwpfZ/Kg6Tc01vG1lLOEmMgv2nPTrPzBD2GfiP1xcFuNGVT
# /ZctC/OncrFHxi52+qEbUqUxHTNAckxyzy3C1GWlv9h5awc8n+Z+z2AA8Eutz/jR
# KzcmVqZpsfvd/QtbEQ6BnIEirvNe5Hr0PU5MfE+k7AwkbDjAH574VSI5SPrw7n0l
# W2IuvCd9lAgR4fZHfiRYYTcQ8xAUyKzK+CU1ulglnPTmFnBmWHmDBZw6QovYaIeY
# lSDWgLlgC4SxvcdrbeUlQuM4UXwvs1och9M21go0TXhsp4PBIrSfqmFc+oFP4Nml
# a7fNZ8S/InNc8cJM1lYNTj50a22TWG9twhyhgheUMIIXkAYKKwYBBAGCNwMDATGC
# F4Awghd8BgkqhkiG9w0BBwKgghdtMIIXaQIBAzEPMA0GCWCGSAFlAwQCAQUAMIIB
# UgYLKoZIhvcNAQkQAQSgggFBBIIBPTCCATkCAQEGCisGAQQBhFkKAwEwMTANBglg
# hkgBZQMEAgEFAAQgaTAndEv9nABmKdcgBDmAJIaEvYUroOtGwBYyGROx6R8CBmWf
# 1wDYDhgTMjAyNDAxMTUwNzI0NDcuNjMyWjAEgAIB9KCB0aSBzjCByzELMAkGA1UE
# BhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAc
# BgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjElMCMGA1UECxMcTWljcm9zb2Z0
# IEFtZXJpY2EgT3BlcmF0aW9uczEnMCUGA1UECxMeblNoaWVsZCBUU1MgRVNOOkE5
# MzUtMDNFMC1EOTQ3MSUwIwYDVQQDExxNaWNyb3NvZnQgVGltZS1TdGFtcCBTZXJ2
# aWNloIIR6jCCByAwggUIoAMCAQICEzMAAAHRsltAKGwu0kUAAQAAAdEwDQYJKoZI
# hvcNAQELBQAwfDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAO
# BgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEm
# MCQGA1UEAxMdTWljcm9zb2Z0IFRpbWUtU3RhbXAgUENBIDIwMTAwHhcNMjMwNTI1
# MTkxMjE4WhcNMjQwMjAxMTkxMjE4WjCByzELMAkGA1UEBhMCVVMxEzARBgNVBAgT
# Cldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29m
# dCBDb3Jwb3JhdGlvbjElMCMGA1UECxMcTWljcm9zb2Z0IEFtZXJpY2EgT3BlcmF0
# aW9uczEnMCUGA1UECxMeblNoaWVsZCBUU1MgRVNOOkE5MzUtMDNFMC1EOTQ3MSUw
# IwYDVQQDExxNaWNyb3NvZnQgVGltZS1TdGFtcCBTZXJ2aWNlMIICIjANBgkqhkiG
# 9w0BAQEFAAOCAg8AMIICCgKCAgEAmUzaNDnhs9lxXdoC4OZ05QZvFzqbsCSIl7DF
# Ota8KtWSg6WuON0a0hv6R/Bs+lzZxUChpwqjQrZr6ClCwKcK0/7O/3tV9JTRSpo+
# 1O1+KdNEtLkG1ui8Ep/81h2htnOeGV7BmPgWH4Vg4GxaQk8Uc050Qhutm5Fj6emR
# 22T4OB7dQkQgDIYThk0fMCOBu8MFmcHTHOlL1FJatKpfQMQH85GEaYtrUbwxzHZm
# d78l6aoRcL0RvHIAh/00wo1uaumjW3aii9wRQz81LbgjbD1y9/xNHUdmwzKmtGjR
# /oiH4RguP73MLrXjjAj1CA1UqgwjXyGjwxMGHItX3fYLtc1cPhxIQ2TOxGt58SFK
# 87fkX6eU6DDI+EAJielGnZvkz2w26PJBSCu9EoZlvMJ/HyZPUXkEBKU7SDeN3kb/
# UJl8t1HnfNKLDgRPlpHTL0ghYfqoArCnc0MUCRutnE3qFNnqjYR96KaV5sn1VMG7
# Hn0MzD7W4pwmXdBVJZpTP3R/uDp4qkMmh767WMt8KiGn2N83hSE5VQKD/avbxeFu
# yh0f7hdJr06QC+TWkwzdaZUEtDHYzJIM2SuYLcKjnv9605agc8cGu2GKd7qz+clp
# E8yEhp4TViGTsTskCDsWX24iGwB25tzPIY+9ykFnAkeSWr4JMFJp3BRxEmkH+A66
# rPv9S9UCAwEAAaOCAUkwggFFMB0GA1UdDgQWBBQLjvFMxew3B9JprBeF0McR0L0t
# ozAfBgNVHSMEGDAWgBSfpxVdAF5iXYP05dJlpxtTNRnpcjBfBgNVHR8EWDBWMFSg
# UqBQhk5odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2NybC9NaWNyb3Nv
# ZnQlMjBUaW1lLVN0YW1wJTIwUENBJTIwMjAxMCgxKS5jcmwwbAYIKwYBBQUHAQEE
# YDBeMFwGCCsGAQUFBzAChlBodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3Bz
# L2NlcnRzL01pY3Jvc29mdCUyMFRpbWUtU3RhbXAlMjBQQ0ElMjAyMDEwKDEpLmNy
# dDAMBgNVHRMBAf8EAjAAMBYGA1UdJQEB/wQMMAoGCCsGAQUFBwMIMA4GA1UdDwEB
# /wQEAwIHgDANBgkqhkiG9w0BAQsFAAOCAgEAm7va0wB1duJmNKqBuXhJyJs+WpBl
# 074gcCqdmOdbNusPKA61qK/ptNEeP9wXA5mJVCvDa8f2rmBWInWXXXFI8ONkMUkr
# Zr/6lpwkIv9jpx99ilR0PpDDmTwAUExtV5HJ2D1DjhBKK+n/9ybNbo+MIx8xOFeG
# rpmFwQLK+C+SkfLynrObRcYTJFjQ/zu1v0Wh2MCTIzJMVaLAaJO1dtbCQJcUnBF8
# XyWvv6pKlK+wmYMN0eIwh0ZD6kITFom1zzGGq/4hdGbiwfTvPQzCTYYyvQUn+oqo
# GaDLsyFbfhAaE86b//aeMEOsaAQrNvZpI/xCFhXXPuWt9JLgkDkhDo9O/liNvQOJ
# OkCEQecPnjJmdCXnNLEsnkAeSo8ROdYmDIbZTK1CnK9OpwagrEij2LEgCEwM4LLC
# Q/mf3E0uwrt+Xya1oTPTWF9uLgMWCwFtIqTbVqbSHlempLmRHhFegTbTN1U5PpgJ
# Vef3gv9GNe2lUoyuf4Mg6CzZq4FcL+UwGgZqv8IEURR5lvVCd87/C5pOpiKAMk6a
# gW7lIzC8q7Wo7krAP5tg5yjDtEIs9b/hUlW6jN/Cfz05YQk1GxTsdJC0+2P+/mcq
# 4pVQs8gGHxSIpwyI1pTPObQ3lPGXyQoxSsKtw7EcVeCWNfMcMPE05qHd5ZK/Tahk
# OeC5sj1XPuYmza4wggdxMIIFWaADAgECAhMzAAAAFcXna54Cm0mZAAAAAAAVMA0G
# 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
# bnMxJzAlBgNVBAsTHm5TaGllbGQgVFNTIEVTTjpBOTM1LTAzRTAtRDk0NzElMCMG
# A1UEAxMcTWljcm9zb2Z0IFRpbWUtU3RhbXAgU2VydmljZaIjCgEBMAcGBSsOAwIa
# AxUARyWNhb/hoS0LUQ0dryMwWkr/+yyggYMwgYCkfjB8MQswCQYDVQQGEwJVUzET
# MBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMV
# TWljcm9zb2Z0IENvcnBvcmF0aW9uMSYwJAYDVQQDEx1NaWNyb3NvZnQgVGltZS1T
# dGFtcCBQQ0EgMjAxMDANBgkqhkiG9w0BAQsFAAIFAOlO8k8wIhgPMjAyNDAxMTQy
# MzUyNDdaGA8yMDI0MDExNTIzNTI0N1owdDA6BgorBgEEAYRZCgQBMSwwKjAKAgUA
# 6U7yTwIBADAHAgEAAgIcUDAHAgEAAgIUmTAKAgUA6VBDzwIBADA2BgorBgEEAYRZ
# CgQCMSgwJjAMBgorBgEEAYRZCgMCoAowCAIBAAIDB6EgoQowCAIBAAIDAYagMA0G
# CSqGSIb3DQEBCwUAA4IBAQBT3nXSp/cfRRjqywDDWdeCnPrd3ct4kdkS4JOnBOQY
# tjOG1k/YyuIV3Do4amuyo8ScQdgoz51HNkt7NkQgjlOWWiLJJ/f6twmM++lWNEIj
# EQnH3fV+VnxAWI5rJQs7VH5DCNfeUn7LrAfSaO28VfpPDBdLNIaF0fQYREPrX6pV
# ssQGqhFONtxUlpfmRT+YW3C4WAvON+i5A7Ed3EQ21UxlgHfI/zTNLgqi8xUgRuqA
# peTbII/Mua3rMy6nLzzLv+F3shn0lsq1Kvn8I9OZ7qGyJqOOyxIu4aIYUI4PHSck
# dZcCGSVv2eX2PnlHeinU3Rg+1ODOueJRGBZyIhopDMKgMYIEDTCCBAkCAQEwgZMw
# fDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1Jl
# ZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEmMCQGA1UEAxMd
# TWljcm9zb2Z0IFRpbWUtU3RhbXAgUENBIDIwMTACEzMAAAHRsltAKGwu0kUAAQAA
# AdEwDQYJYIZIAWUDBAIBBQCgggFKMBoGCSqGSIb3DQEJAzENBgsqhkiG9w0BCRAB
# BDAvBgkqhkiG9w0BCQQxIgQg9LsxJ8wQsn0z+i23PnCE1/V1wN7cREQHgWf4swY1
# yuUwgfoGCyqGSIb3DQEJEAIvMYHqMIHnMIHkMIG9BCDMvGF5AgC7+e3ObEYaz07m
# 9auE8CeqFQN+pPCIiPwHDDCBmDCBgKR+MHwxCzAJBgNVBAYTAlVTMRMwEQYDVQQI
# EwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3Nv
# ZnQgQ29ycG9yYXRpb24xJjAkBgNVBAMTHU1pY3Jvc29mdCBUaW1lLVN0YW1wIFBD
# QSAyMDEwAhMzAAAB0bJbQChsLtJFAAEAAAHRMCIEIDyMtpSUFkrWwpkZBBSmrZ6l
# 8us0fO0Ay4rLD0cTOZq2MA0GCSqGSIb3DQEBCwUABIICAA9H2poK7sVgu74aAON7
# 5FXz6LTJzhQPrwglRiTzL+xlQXaMc3/6cl0LChO2G2Ks5OWmkvH6aKhbETUwZ6JF
# F0NF2zsHAStC2rkoGv0fRHqQbIV8A/m0f0v5gLuaOl7aiLuIWKsCAUc4b0ppP6a5
# dgbTIuLK82TcUxvNilMuH/dJKUl0bKxl4v5hOouL8SYk24Y3XRV88L8wcUHS72d/
# YcYlkIY+7hdvcY9XKuErdDP7AzuNopULEFirG3fZ1vn87rI6ARSojrT/KYGKvLgK
# Arrh7SBEAVvfxmo8GOrEbzLL36+mX3Xh24J/EMyUu1dddYqcgAX/ur18jMdWkPtB
# X+tMDW7UGCGNxR36epdXtEz06SqyKmuj8DcfbslEnaPV5+Mzp7k7okuIgu8ueKj1
# IGSxd9rhcsXS6aDUx8i0oLIy2DdpyyeZSBKeUXKV7rgc+VRBOiiYi2TeM2sbsrcF
# BTLPUlQE8n4Hjm9n8eb+hUdz7IPtXRow+OM9tvgMwkoKTx3zO9L4qrrccsF/Gv+u
# b+J0OIAa2gUJ5q1QtKVMKqW7/CQpJgTuCZRNrIWPbeChcghMMlatzMy4yV2VrHfs
# NrGLZQFFNVoQd42bO+zHDHBy5VFhrRa7n02xNQnu/Ek27nd1k/n++8Xirot/vFBp
# lT2nJuZYsUESsmRxKM9D5HrO
# SIG # End signature block