StarWars.psm1



#region Functions
Function New-StarWarsADUser{
    <#
        .SYNOPSIS
            Create Active Directory account based on the Star Wars world.
 
        .DESCRIPTION
            Use Active Directory module and swapi.com to create users in your Active Directory.
 
        .PARAMETER AccountPassword
            Passwords for the accounts.
            Defaulted to 123+aze.
 
        .PARAMETER UPNSuffix
            UPN suffix for the accounts.
 
        .PARAMETER MailDomain
            Mail domain for the accounts.
 
        .PARAMETER Path
            Path of the OU to create the account.
            Defaulted to the default users creation destination.
 
        .PARAMETER PassThru
            Output the progress.
 
        .EXAMPLE
            New-StarWarsADUser -Path 'OU=Users,OU=Star Wars,OU=Prod,DC=D2K16,DC=itfordummies,DC=net'
 
            Create all Star Wars users in the specified OU.
 
        .NOTES
 
        .LINK
            https://itfordummies.net
 
        .INPUTS
 
        .OUTPUTS
    #>



    [CmdletBinding()]
    Param(
        [String]$AccountPassword = '123+aze',

        [String]$UPNSuffix = (Get-ADDomain | Select-Object -ExpandProperty DNSRoot),

        [String]$MailDomain = 'itfordummies.net',

        [String]$Path = (Get-ADDomain | Select-Object -ExpandProperty UsersContainer),

        [Switch]$PassThru
    )

    $ApiUrl = 'http://swapi.co/api'
    1..$(((Invoke-WebRequest -Uri $ApiUrl/people).Content | ConvertFrom-Json).count) | ForEach-Object -Process {
        $CurrentUser = (Invoke-WebRequest -Uri $ApiUrl/people/$_).Content | ConvertFrom-Json | Select-Object -Property Height,Mass,Hair_Color,Skin_Color,Eye_Color,Birth_Year,Gender,
            @{Label='Name';Expression={$_.Name -replace 'é','é'}},
            @{Label='Homeworld';Expression={(Invoke-WebRequest -Uri $_.homeworld).Content | ConvertFrom-Json}},
            @{Label='Films';Expression={($_.Films | ForEach-Object -Process {Invoke-WebRequest -Uri $_}).Content | ConvertFrom-Json}},
            @{Label='species';Expression={($_.species | ForEach-Object -Process {Invoke-WebRequest -Uri $_}).Content | ConvertFrom-Json}},
            #@{Label='vehicles';Expression={($_.vehicles | % {Invoke-WebRequest -Uri $_}).Content | ConvertFrom-Json}},
            #@{Label='starships';Expression={($_.starships | % {Invoke-WebRequest -Uri $_}).Content | ConvertFrom-Json}},
            @{Label='url';Expression={(Invoke-WebRequest -Uri $_.url).Content | ConvertFrom-Json}}

        $GivenName = ($CurrentUser.Name -split ' ')[0]
        $SurName = ($CurrentUser.Name -split ' ')[-1]
        if($GivenName -eq $SurName){
            $SurName = $null
            $FullSamAccountName = $SamAccountName = $GivenName
        }
        else{
            $SamAccountName = ("$(($CurrentUser.Name -split ' ')[0]).$(($CurrentUser.Name -split ' ')[-1])" -replace ' ','')[0..19] -join ''
            $FullSamAccountName = "$(($CurrentUser.Name -split ' ')[0]).$(($CurrentUser.Name -split ' ')[-1])" -replace ' ',''
        }
        Write-Verbose -Message "Creating $SamAccountName..."
        New-Object -TypeName PSObject -Property @{
            Description         = "$($CurrentUser.Gender), $($CurrentUser.Height)cm for $($CurrentUser.Mass)kg. $($CurrentUser.'Hair_Color') hair, $($CurrentUser.'Skin_Color') skin, $($CurrentUser.'Eye_Color') eyes. Born in $($CurrentUser.'Birth_Year')."
            Office              = $CurrentUser.Homeworld.Name
            #MemberOf = ($CurrentUser.Films.title -join ','),($CurrentUser.species.Name -join ',') -join ',' #,($CurrentUser.vehicles.Name -join ','),($CurrentUser.starships.Name -join ',')
            #Info = (($CurrentUser.Films.title,$CurrentUser.species.Name) -join ',').TrimEnd(',') #,($CurrentUser.vehicles.Name -join ','),($CurrentUser.starships.Name -join ',')
            Name                = $CurrentUser.Name
            DisplayName         = $CurrentUser.Name
            GivenName           = $GivenName
            Surname             = $SurName
            SamAccountName      = $FullSamAccountName
            EmailAddress        = "$FullSamAccountName@$MailDomain"
            MailNickName        = $FullSamAccountName
            UserPrincipalName   = "$FullSamAccountName@$UPNSuffix"
            Company             = 'Star Wars'
            Department          = $CurrentUser.Homeworld.Name
            Title               = $CurrentUser.species.Name -join ','
        } | New-ADUser -Path $Path -AccountPassword (ConvertTo-SecureString -AsPlainText -Force -String $AccountPassword) -Enable $true -PassThru:$PassThru -OtherAttributes @{info=((($CurrentUser.Films.title -join ','),($CurrentUser.species.Name -join ',')) -join ',').TrimEnd(',')}
        $CurrentUser = $SurName = $GivenName = $SamAccountName = $FullSamAccountName = $null
    }
}
Function New-StarWarsADGroup{
    <#
        .SYNOPSIS
            Create Active Directory groups based on the Star Wars world.
 
        .DESCRIPTION
            Use Active Directory module and swapi.com to create groups in your Active Directory.
 
        .PARAMETER Path
            Path of the OU to create the groups.
            Defaulted to the default users creation destination.
 
        .PARAMETER PassThru
            Output the progress.
 
        .EXAMPLE
            New-StarWarsADGroup -Path 'OU=Groups,OU=Star Wars,OU=Prod,DC=D2K16,DC=itfordummies,DC=net'
 
            Create all Star Wars groups in the specified OU.
 
        .NOTES
 
        .LINK
            https://itfordummies.net
 
        .INPUTS
 
        .OUTPUTS
    #>

    [CmdletBinding()]
    Param(
        [String]$Path = (Get-ADDomain | Select-Object -ExpandProperty UsersContainer),

        [Switch]$PassThru
    )

    $ApiUrl = 'http://swapi.co/api'
    #Films
    1..$(((Invoke-WebRequest -Uri $ApiUrl/films).Content | ConvertFrom-Json).count) | ForEach-Object -Process {
        $CurrentGroup = (Invoke-WebRequest -Uri $ApiUrl/films/$_).Content | ConvertFrom-Json
        Write-Verbose -Message "Adding $($CurrentGroup.title) to the group list..."
        New-Object -TypeName PSObject -Property @{
            Name        = $CurrentGroup.title
            Description = "Produced by $($CurrentGroup.producer), diected by $($CurrentGroup.director) released on $($CurrentGroup.release_date)"
            Company     = 'Star Wars'
        } | New-ADGroup -Path $Path -GroupCategory Security -GroupScope DomainLocal -OtherAttributes @{Info = "Star Wars `r`n$($CurrentGroup.opening_crawl -join '')"} -PassThru:$PassThru
        $CurrentGroup = $null
    }
    #Species
    1..$(((Invoke-WebRequest -Uri $ApiUrl/species).Content | ConvertFrom-Json).count) | ForEach-Object -Process {
        $CurrentGroup = (Invoke-WebRequest -Uri $ApiUrl/species/$_).Content | ConvertFrom-Json
        Write-Verbose -Message "Adding $($CurrentGroup.Name) to the group list..."
        New-Object -TypeName PSObject -Property @{
            Name        = $CurrentGroup.Name
            Description = "average_height : $($CurrentGroup.average_height), skin_colors : $($CurrentGroup.skin_colors), hair_colors : $($CurrentGroup.hair_colors), eye_colors : $($CurrentGroup.eye_colors), average_lifespan : $($CurrentGroup.average_lifespan)"
            Company     = 'Star Wars'
        } | New-ADGroup -Path $Path -GroupCategory Security -GroupScope DomainLocal -OtherAttributes @{Info = "Star Wars `r`n$($CurrentGroup.language)"} -PassThru:$PassThru
    }

}
Function New-StarWarsADSite{
    <#
        .SYNOPSIS
            Create Active Directory sites based on the Star Wars world.
 
        .DESCRIPTION
            Use Active Directory module and swapi.com to create sites in your Active Directory.
 
        .EXAMPLE
            New-StarWarsADSite
 
            Create all the sites.
 
        .NOTES
 
        .LINK
            https://itfordummies.net
 
        .INPUTS
 
        .OUTPUTS
    #>



    [CmdletBinding()]
    Param()

    $ApiUrl = 'http://swapi.co/api'
    1..$(((Invoke-WebRequest -Uri $ApiUrl/planets).Content | ConvertFrom-Json).count) | ForEach-Object -Process {
        $CurrentPlanet = Invoke-WebRequest -Uri $ApiUrl/planets/$_ | Select-Object -ExpandProperty Content | ConvertFrom-Json
        try{
            $Name = $CurrentPlanet.Name -replace ' ',''
            Write-Verbose -Message "Creating $Name site..."
            New-ADReplicationSite -Name $Name -Description "diameter : $($CurrentPlanet.diameter), climate : $($CurrentPlanet.climate), gravity : $($CurrentPlanet.gravity), terrain : $($CurrentPlanet.terrain), surface_water : $($CurrentPlanet.surface_water), population : $($CurrentPlanet.population), rotation_period : $($CurrentPlanet.rotation_period), orbital_period : $($CurrentPlanet.orbital_period)." -ErrorAction Stop -OtherAttributes @{Location = 'Star Wars'}
        }
        catch{
            Write-Warning -Message "$Name : $_"
        }
        $CurrentPlanet = $null
    }
}
Function Add-StarWarsADUserToAdGroup{
    <#
        .SYNOPSIS
            Add the Star Wars users to the groups which they belong to.
 
        .DESCRIPTION
            Use the Active Directory module and the info attributes.
 
        .EXAMPLE
            Add-StarWarsADUserToAdGroup
 
            Add the users to the groups.
        .NOTES
 
        .LINK
            https://itfordummies.net
 
        .INPUTS
 
        .OUTPUTS
    #>



    
    $StarWarsUsers = Get-ADUser -Filter {Company -like 'Star Wars'} -Properties info
    ForEach($User in $StarWarsUsers){
        $User.Info -split ',' | ForEach-Object -Process {
            Add-ADGroupMember -Identity $_ -Members $User
        }
    }

}
Function Invoke-StarWarsTheme{
    <#
        .SYNOPSIS
            PowerShell will sing the Star Wars theme.
 
        .DESCRIPTION
            Use [Console]::Beep to make some sound.
 
        .EXAMPLE
            Invoke-StarWarsTheme
 
            Start the song.
        .NOTES
 
        .LINK
            https://itfordummies.net
 
        .INPUTS
 
        .OUTPUTS
    #>



    #Part 1
    [Console]::Beep(523, 200)
    [Console]::Beep(523, 200)
    [Console]::Beep(523, 200)
    [Console]::Beep(783, 1200)
    [Console]::Beep(1174, 1200)
    [Console]::Beep(1046, 200)
    [Console]::Beep(987, 200)
    [Console]::Beep(880, 200)
    [Console]::Beep(1567, 1200)
    [Console]::Beep(1174, 600)
    [Console]::Beep(1046, 200)
    [Console]::Beep(987, 200)
    [Console]::Beep(880, 200)
    [Console]::Beep(1567, 1200)
    [Console]::Beep(1174, 600)
    [Console]::Beep(1046, 200)
    [Console]::Beep(987, 200)
    [Console]::Beep(1046, 200)
    [Console]::Beep(880, 1200)

    #Part 1
    [Console]::Beep(523, 200)
    [Console]::Beep(523, 200)
    [Console]::Beep(523, 200)
    [Console]::Beep(783, 1200)
    [Console]::Beep(1174, 1200)
    [Console]::Beep(1046, 200)
    [Console]::Beep(987, 200)
    [Console]::Beep(880, 200)
    [Console]::Beep(1567, 1200)
    [Console]::Beep(1174, 600)
    [Console]::Beep(1046, 200)
    [Console]::Beep(987, 200)
    [Console]::Beep(880, 200)
    [Console]::Beep(1567, 1200)
    [Console]::Beep(1174, 600)
    [Console]::Beep(1046, 200)
    [Console]::Beep(987, 200)
    [Console]::Beep(1046, 200)
    [Console]::Beep(880, 1200)

    #Part2
    [Console]::Beep(523,400)
    [Console]::Beep(523,200)
    [Console]::Beep(659,900)
    [Console]::Beep(659,300)
    [Console]::Beep(1046,300)
    [Console]::Beep(987,300)
    [Console]::Beep(880,300)
    [Console]::Beep(783,300)
    [Console]::Beep(783,300)
    [Console]::Beep(880,150)
    [Console]::Beep(987,150)
    [Console]::Beep(880,300)
    [Console]::Beep(659,300)
    [Console]::Beep(733,600)
    [Console]::Beep(523,400)
    [Console]::Beep(523,200)
    [Console]::Beep(659,900)
    [Console]::Beep(659,300)
    [Console]::Beep(1046,300)
    [Console]::Beep(987,300)
    [Console]::Beep(880,300)
    [Console]::Beep(783,300)
    [Console]::Beep(1174,900)
    [Console]::Beep(880,300)
    [Console]::Beep(880,600)
    [Console]::Beep(523,400)
    [Console]::Beep(523,200)
    [Console]::Beep(659,900)
    [Console]::Beep(659,300)
    [Console]::Beep(1046,300)
    [Console]::Beep(987,300)
    [Console]::Beep(880,300)
    [Console]::Beep(783,300)
    [Console]::Beep(783,300)
    [Console]::Beep(880,150)
    [Console]::Beep(987,150)
    [Console]::Beep(880,300)
    [Console]::Beep(659,300)
    [Console]::Beep(733,600)
    [Console]::Beep(1174,400)
    [Console]::Beep(1174,200)
    [Console]::Beep(1567,400)
    [Console]::Beep(1396,200)
    [Console]::Beep(1244,400)
    [Console]::Beep(1174,200)
    [Console]::Beep(1046,400)
    [Console]::Beep(923,200)
    [Console]::Beep(880,400)
    [Console]::Beep(783,200)
    [Console]::Beep(1174,600)
    [Console]::Beep(880,200)
    [Console]::Beep(880,200)
    [Console]::Beep(880,200)
    [Console]::Beep(880,600)

    #Part 1
    [Console]::Beep(523, 200)
    [Console]::Beep(523, 200)
    [Console]::Beep(523, 200)
    [Console]::Beep(783, 1200)
    [Console]::Beep(1174, 1200)
    [Console]::Beep(1046, 200)
    [Console]::Beep(987, 200)
    [Console]::Beep(880, 200)
    [Console]::Beep(1567, 1200)
    [Console]::Beep(1174, 600)
    [Console]::Beep(1046, 200)
    [Console]::Beep(987, 200)
    [Console]::Beep(880, 200)
    [Console]::Beep(1567, 1200)
    [Console]::Beep(1174, 600)
    [Console]::Beep(1046, 200)
    [Console]::Beep(987, 200)
    [Console]::Beep(1046, 200)
    [Console]::Beep(880, 1200)

    #Part 1
    [Console]::Beep(523, 200)
    [Console]::Beep(523, 200)
    [Console]::Beep(523, 200)
    [Console]::Beep(783, 1200)
    [Console]::Beep(1174, 1200)
    [Console]::Beep(1046, 200)
    [Console]::Beep(987, 200)
    [Console]::Beep(880, 200)
    [Console]::Beep(1567, 1200)
    [Console]::Beep(1174, 600)
    [Console]::Beep(1046, 200)
    [Console]::Beep(987, 200)
    [Console]::Beep(880, 200)
    [Console]::Beep(1567, 1200)
    [Console]::Beep(1174, 600)
    [Console]::Beep(1046, 200)
    [Console]::Beep(987, 200)
    [Console]::Beep(1046, 200)
    [Console]::Beep(880, 1200)

    #Final
    [Console]::Beep(1174, 200)
    [Console]::Beep(1174, 200)
    [Console]::Beep(1174, 200)
    [Console]::Beep(1567, 1800)
    [Console]::Beep(783, 200)
    [Console]::Beep(783, 200)
    [Console]::Beep(783, 200)
    [Console]::Beep(783, 1800)
}
#endregion

#region Cleanup
Function Remove-StarWarsADUser{
    <#
        .SYNOPSIS
            Remove Star Wars sites.
 
        .DESCRIPTION
            Uses {Company -eq 'Star Wars'} as filter.
 
        .EXAMPLE
            Remove-StarWarsADUser
 
            Remove the users.
 
        .NOTES
 
        .LINK
            https://itfordummies.net
 
        .INPUTS
 
        .OUTPUTS
    #>



    Get-ADUser -Filter {Company -eq 'Star Wars'} | Remove-ADUser -Confirm:$false
}
Function Remove-StarWarsADSite{
    <#
        .SYNOPSIS
            Remove Star Wars sites.
 
        .DESCRIPTION
            Uses {Location -eq 'Star Wars'} as filter.
 
        .EXAMPLE
            Remove-StarWarsADSite
 
            Remove the sites.
 
        .NOTES
 
        .LINK
            https://itfordummies.net
 
        .INPUTS
 
        .OUTPUTS
    #>



    Get-ADReplicationSite -Filter {Location -like 'Star Wars'} | Remove-ADReplicationSite -Confirm:$false
}
Function Remove-StarWarsADGroup{
    <#
        .SYNOPSIS
            Remove Star Wars groups
 
        .DESCRIPTION
            Uses {Info -like '*Star Wars*'} as filter.
 
        .EXAMPLE
            Remove-StarWarsADGroup
 
            Remove the groups.
 
        .NOTES
 
        .LINK
            https://itfordummies.net
 
        .INPUTS
 
        .OUTPUTS
    #>



    Get-ADGroup -Filter {info -like '*Star Wars*'} | Remove-ADGroup -Confirm:$false
}
#endregion

#region Export Module Member
Export-ModuleMember -Function New-StarWarsADUser,New-StarWarsADGroup,Add-StarWarsADUserToAdGroup,New-StarWarsADSite,Invoke-StarWarsTheme,Remove-StarWarsADUser,Remove-StarWarsADSite,Remove-StarWarsADGroup
#endregion

# SIG # Begin signature block
# MIINMgYJKoZIhvcNAQcCoIINIzCCDR8CAQExCzAJBgUrDgMCGgUAMGkGCisGAQQB
# gjcCAQSgWzBZMDQGCisGAQQBgjcCAR4wJgIDAQAABBAfzDtgWUsITrck0sYpfvNR
# AgEAAgEAAgEAAgEAAgEAMCEwCQYFKw4DAhoFAAQUgFF/o3ZB1HQ+e6vXwZaN2y/z
# C2qgggpwMIIFGTCCBAGgAwIBAgIQBf61+023NsdEoT8z8JH2/zANBgkqhkiG9w0B
# AQsFADB2MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYD
# VQQLExB3d3cuZGlnaWNlcnQuY29tMTUwMwYDVQQDEyxEaWdpQ2VydCBTSEEyIEhp
# Z2ggQXNzdXJhbmNlIENvZGUgU2lnbmluZyBDQTAeFw0xNzA2MjgwMDAwMDBaFw0x
# ODA5MjExMjAwMDBaMFgxCzAJBgNVBAYTAkZSMQ0wCwYDVQQHEwRMeW9uMRwwGgYD
# VQQKExNFbW1hbnVlbCBEZW1pbGxpZXJlMRwwGgYDVQQDExNFbW1hbnVlbCBEZW1p
# bGxpZXJlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwiVr6LVaRZ8Q
# /UcV6LYhJ555n6Ud2ImthXi0Y138pJ7piOu50nvMKtT5Nk4EfZo6Uv07dqvlqhqm
# /7vVtNZIz76iJ0ShgNH++7UXyyIUJ6dUh3V+HRlSs7p1kd7W92XeRMxTgZRDu8TJ
# zsPGvkCmczrcTl7PjuXdM2wJlZd+qwPt2CCgdur/kvrqfRxVemlic+quFHUr52EY
# D6rDPR+XiWPoWok+n36B2mE5qHFFQjLvPjCs4OjHxkl7O3r66qN2P/6ohSQaoFWD
# Sqfidd5JWVXhQwLC9SkXAWkCZrTwANbEUtaHzcP7Pz4LtQk/AkniitdMRfV9oMKS
# QeoPdiBDRwIDAQABo4IBvzCCAbswHwYDVR0jBBgwFoAUZ50PIAkMzIo65YJGcmL8
# 8cyQ5UAwHQYDVR0OBBYEFCu6fDFsAd/yYw+18oKA+ri7RyskMA4GA1UdDwEB/wQE
# AwIHgDATBgNVHSUEDDAKBggrBgEFBQcDAzBtBgNVHR8EZjBkMDCgLqAshipodHRw
# Oi8vY3JsMy5kaWdpY2VydC5jb20vc2hhMi1oYS1jcy1nMS5jcmwwMKAuoCyGKmh0
# dHA6Ly9jcmw0LmRpZ2ljZXJ0LmNvbS9zaGEyLWhhLWNzLWcxLmNybDBMBgNVHSAE
# RTBDMDcGCWCGSAGG/WwDATAqMCgGCCsGAQUFBwIBFhxodHRwczovL3d3dy5kaWdp
# Y2VydC5jb20vQ1BTMAgGBmeBDAEEATCBiAYIKwYBBQUHAQEEfDB6MCQGCCsGAQUF
# BzABhhhodHRwOi8vb2NzcC5kaWdpY2VydC5jb20wUgYIKwYBBQUHMAKGRmh0dHA6
# Ly9jYWNlcnRzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydFNIQTJIaWdoQXNzdXJhbmNl
# Q29kZVNpZ25pbmdDQS5jcnQwDAYDVR0TAQH/BAIwADANBgkqhkiG9w0BAQsFAAOC
# AQEAJyserwWyv9N3y3Hpfk8h3g/mCWkv/GkCAc5N/CS7iMjWMDH5i1xsrnmmZhnY
# XONHABVCqvb04X+xgZ/qJwo9ya6/VwvsRmepOQSevICC4KeV4iZyGu2HrAx+hpg4
# 3XGKzTpGQYsYyKQz22eu6CqtA2NCdwVcdqExJfdqJY1W9gZCC99tcXBf6EluY23W
# e6vv5uGjsUvWZ43USrbXXh9/tDq0lEFkNqqLW156DAVmEngqsxBWYWWnIALeKJO7
# wXuHhjPrtlCOKz1CrJ7THN20CdXKo3/joO1VupK1y6an4o8petGq5AQwDSU8jIre
# EhhUXLshT6HmTbY/tZp72rzjYzCCBU8wggQ3oAMCAQICEAt+EJA8OEkP+i9nmoeh
# p7kwDQYJKoZIhvcNAQELBQAwbDELMAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lD
# ZXJ0IEluYzEZMBcGA1UECxMQd3d3LmRpZ2ljZXJ0LmNvbTErMCkGA1UEAxMiRGln
# aUNlcnQgSGlnaCBBc3N1cmFuY2UgRVYgUm9vdCBDQTAeFw0xMzEwMjIxMjAwMDBa
# Fw0yODEwMjIxMjAwMDBaMHYxCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2Vy
# dCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20xNTAzBgNVBAMTLERpZ2lD
# ZXJ0IFNIQTIgSGlnaCBBc3N1cmFuY2UgQ29kZSBTaWduaW5nIENBMIIBIjANBgkq
# hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtEpefQcPQd7E9XYWNr1x/88/T3NLnNEN
# /krLV1hehRbdAhVUmfCPPC9NAngQaMjYNUs/wfdnzpgcrjO5LR2kClSTxIWi3zWx
# 9fE8p7M0+11IyUbJYkS8SJnrKElTwz2PwA7eNZjpYlHfPWtAYe4EQdrPp1xWltH5
# TLdEhIeYaeWCuRPmVb/IknCSCjFvf4syq89rWp9ixD7uvu1ZpFN/C/FSiIp7Cmck
# y5DN7NJNNEyw4bWfnMb2byzN5spTdAGfZzXeOEktzu05RIIZeU4asrX7u3jwSWan
# z/pclnWSixpy2f9QklPMPsJDMgkahhNpPPuBMjMyZHVzKCYdCDA7BwIDAQABo4IB
# 4TCCAd0wEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAYYwEwYDVR0l
# BAwwCgYIKwYBBQUHAwMwfwYIKwYBBQUHAQEEczBxMCQGCCsGAQUFBzABhhhodHRw
# Oi8vb2NzcC5kaWdpY2VydC5jb20wSQYIKwYBBQUHMAKGPWh0dHA6Ly9jYWNlcnRz
# LmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydEhpZ2hBc3N1cmFuY2VFVlJvb3RDQS5jcnQw
# gY8GA1UdHwSBhzCBhDBAoD6gPIY6aHR0cDovL2NybDQuZGlnaWNlcnQuY29tL0Rp
# Z2lDZXJ0SGlnaEFzc3VyYW5jZUVWUm9vdENBLmNybDBAoD6gPIY6aHR0cDovL2Ny
# bDMuZGlnaWNlcnQuY29tL0RpZ2lDZXJ0SGlnaEFzc3VyYW5jZUVWUm9vdENBLmNy
# bDBPBgNVHSAESDBGMDgGCmCGSAGG/WwAAgQwKjAoBggrBgEFBQcCARYcaHR0cHM6
# Ly93d3cuZGlnaWNlcnQuY29tL0NQUzAKBghghkgBhv1sAzAdBgNVHQ4EFgQUZ50P
# IAkMzIo65YJGcmL88cyQ5UAwHwYDVR0jBBgwFoAUsT7DaQP4v0cB1JgmGggC72Nk
# K8MwDQYJKoZIhvcNAQELBQADggEBAGoO/34TfAalS8AujPlTZAniuliRMFDszJ/h
# 06gvSEY2GCnQeChfmFZADx66vbE7h1zcW9ggDe0aFk3VESQhS/EnaZAT6xGhAdr9
# tU55WXW9OCpqw/aOQSuKoovXLFFR2ZygyONOumyoR9JO0WgfjAJXO7Mpao5qICq5
# 8gBiZLrI6QD5zKTUupo12K8sZWwWfFgh3kow0PrrJF0GyZ0Wt61KRdMl4gzwQKpc
# Tax+zQaCuXZGaQjYMraC/uOpWDRDG45nZ5c/aDEWNjiVPof3x8OvnXp3Gdnek7X9
# biv8lPk9t0wSNSwwvuiNngVwmkgT9IzW5x6sOOeo860Mt3rsZ+0xggIsMIICKAIB
# ATCBijB2MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYD
# VQQLExB3d3cuZGlnaWNlcnQuY29tMTUwMwYDVQQDEyxEaWdpQ2VydCBTSEEyIEhp
# Z2ggQXNzdXJhbmNlIENvZGUgU2lnbmluZyBDQQIQBf61+023NsdEoT8z8JH2/zAJ
# BgUrDgMCGgUAoHgwGAYKKwYBBAGCNwIBDDEKMAigAoAAoQKAADAZBgkqhkiG9w0B
# CQMxDAYKKwYBBAGCNwIBBDAcBgorBgEEAYI3AgELMQ4wDAYKKwYBBAGCNwIBFTAj
# BgkqhkiG9w0BCQQxFgQUmjE16jOS311jxedNKSZRJSMq5EQwDQYJKoZIhvcNAQEB
# BQAEggEABSLjMQ7fE8geP161Q6vgKuvebLl8v9fxHGPO8mYD6BZ2DxSXpFtL3dNO
# x5Jivhnzf7xNo/d/4uaFLt6uOtFKD4zF4ifGmNUeghXO0kBenAsXSdKrewc9qkMB
# ZkAzaI+BlrFWDF0zmf9Cp0j8SahuV/nKy484baeOWgYA2LnW2NwPE5W+dAP667PQ
# yPU4ci+XEFoKo1UXvT/yF4FlLy9zO8BFuKnqVDQwMXWBqz2TSsbEnLYw/Elejx4C
# 9LYLVic+UC0Ha/+6RQRbhTSlGjm+CczXr4kOZ5ZQ4FXZeJyq03n1KJfvtrmsQLwo
# Lmb5aUCZ1vHf9ds4+rolNTJEBLYzRA==
# SIG # End signature block