ISEScriptRunner.psm1


function Enable-ISEScriptRunner {
    <#
    .SYNOPSIS
    Add ScriptRunner ISE Add-on Tool to the ISE profile of the current user.
    .DESCRIPTION
    Add ScriptRunner ISE Add-on Tool to the ISE profile of the current user.
    The ScriptRunner ISE Add-on Tool is automatically loaded at the startup of the Windows PowerShell ISE.
    The Windows PowerShell ISE is created, if it does not exist.
    #>


    [CmdletBinding()]
    param()

    Test-WindowsPowerShellISE -FunctionName "Enable-ISEScriptRunner"
    if (Get-ItemProperty -Path 'HKLM:\SOFTWARE\ScriptRunner\Service\General' -ErrorAction SilentlyContinue) {
        throw "The Cmdlet 'Enable-ISEScriptRunner' can not be executed at the ScriptRunner Service Host."
    }
    #create “Current user, Windows PowerShell ISE” profile, if not exists
    if (!(Test-Path $profile))
    { New-Item -Type file -Path $profile -Force }

    [String]$iseProfile = Get-Content -Path $profile
    if ($null -eq $iseProfile) {
        [String]$iseProfile = [String]::Empty
    }
    if (!$iseProfile.Contains("Start-ISEScriptRunner")) {
        Add-Content -Path $profile -Value "`r`nStart-ISEScriptRunner" -Force
    }
    else {
        Write-Warning "`"$($profile)`" already contains `"Start-ISEScriptRunner`"."
    }
}

function Disable-ISEScriptRunner {
    <#
    .SYNOPSIS
    Remove ScriptRunner ISE Add-on Tool from the ISE profile of the current user.
    .DESCRIPTION
    Add ScriptRunner ISE Add-on Tool to the ISE profile of the current user.
    The ScriptRunner ISE Add-on Tool is not loaded at the startup of the Windows PowerShell ISE anymore.
    #>


    [CmdletBinding()]
    param()

    Test-WindowsPowerShellISE -FunctionName "Disable-ISEScriptRunner"

    if ((Test-Path $profile)) {
        # remove ScriptRunner type from profile
        [string]$iseProfile = Get-Content -Path "$profile" | Select-String -Pattern 'Start-ISEScriptRunner' -NotMatch | Out-String
        Set-Content -Path "$profile" -Value $iseProfile
    }
    else {
        Write-Warning "A ISE UserProfile `"$($profile)`" does not exist, no changes necessary."
    }
}

function Test-WindowsPowerShellISE {
    <#
    .SYNOPSIS
    Ensure running from Windows PowerShell ISE console pane.
    .DESCRIPTION
    Ensure running from Windows PowerShell ISE console pane.
    .PARAMETER FunctionName
    The name of the calling function.
    #>


    [CmdletBinding()]
    param ([string]$FunctionName)

    if ($Host.Name -ne "Windows PowerShell ISE Host") {
        $errorMsg = "The CmdLet {0} requires a Windows PowerShell ISE Host." -f $FunctionName
        throw $errorMsg
    }
}

function Reset-SRXEnv {
    <#
    .SYNOPSIS
    Reset global ScriptRunner PowerShell Host Environment Variable $SRXEnv.
    .DESCRIPTION
    Reset global ScriptRunner PowerShell Host Environment Variable $SRXEnv.
    #>

    [CmdletBinding()]
    param ()

    [psobject].Assembly.GetType('System.Management.Automation.TypeAccelerators')::Add('PSSession', [System.Management.Automation.Runspaces.PSSession])
    $me = whoami
    $ipaddress = '127.0.0.1'
    if (Get-Command -Name 'Get-NetIPAddress' -ErrorAction SilentlyContinue) {
        $ipaddress = Get-NetIPAddress -AddressFamily IPv4 -ErrorAction SilentlyContinue | Select-Object -First 1 -ExpandProperty 'IPAddress' -ErrorAction SilentlyContinue
    }
    $cmdPath = $PSCommandPath
    if ([string]::IsNullOrEmpty($cmdPath)) {
        $cmdPath = Join-Path -Path (Get-Location).Path -ChildPath 'myScript.ps1'
    }

    $Global:SRXEnv = @{
        ReportEmail      = ''
        ResultEmail      = ''
        ResultHtml       = ''
        ResultList       = New-Object -TypeName 'System.Collections.ArrayList'
        ResultList2      = New-Object -TypeName 'System.Collections.ArrayList'
        ResultMessage    = ''
        ResultObjectJSON = $null
        SRXActionID      = 42
        SRXCommandPath   = $cmdPath
        SRXDisplayName   = 'Name of the current Action'
        SRXFilterValue   = ''
        SRXStarted       = Get-Date
        SRXStartedBy     = $me
        SRXStartedIP     = $ipaddress
        SRXStartedReason = "TicketID $((Get-Date).ToString('yyyyMMdd-fff'))"
        SRXStartedVia    = "Interactive by `"$($me)`" ($($Host.Name))"
    }
    Write-Verbose ($Global:SRXEnv | Out-String)
}
Export-ModuleMember -Function 'Enable-ISEScriptRunner', 'Disable-ISEScriptRunner', 'Reset-SRXEnv'

# SIG # Begin signature block
# MIIoSQYJKoZIhvcNAQcCoIIoOjCCKDYCAQExDzANBglghkgBZQMEAgEFADB5Bgor
# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG
# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCD/1LwIRFFT/um3
# xHA0LuPdgUrob47cqIXbYCCsmFLHvaCCDbUwggawMIIEmKADAgECAhAIrUCyYNKc
# TJ9ezam9k67ZMA0GCSqGSIb3DQEBDAUAMGIxCzAJBgNVBAYTAlVTMRUwEwYDVQQK
# EwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20xITAfBgNV
# BAMTGERpZ2lDZXJ0IFRydXN0ZWQgUm9vdCBHNDAeFw0yMTA0MjkwMDAwMDBaFw0z
# NjA0MjgyMzU5NTlaMGkxCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5EaWdpQ2VydCwg
# SW5jLjFBMD8GA1UEAxM4RGlnaUNlcnQgVHJ1c3RlZCBHNCBDb2RlIFNpZ25pbmcg
# UlNBNDA5NiBTSEEzODQgMjAyMSBDQTEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw
# ggIKAoICAQDVtC9C0CiteLdd1TlZG7GIQvUzjOs9gZdwxbvEhSYwn6SOaNhc9es0
# JAfhS0/TeEP0F9ce2vnS1WcaUk8OoVf8iJnBkcyBAz5NcCRks43iCH00fUyAVxJr
# Q5qZ8sU7H/Lvy0daE6ZMswEgJfMQ04uy+wjwiuCdCcBlp/qYgEk1hz1RGeiQIXhF
# LqGfLOEYwhrMxe6TSXBCMo/7xuoc82VokaJNTIIRSFJo3hC9FFdd6BgTZcV/sk+F
# LEikVoQ11vkunKoAFdE3/hoGlMJ8yOobMubKwvSnowMOdKWvObarYBLj6Na59zHh
# 3K3kGKDYwSNHR7OhD26jq22YBoMbt2pnLdK9RBqSEIGPsDsJ18ebMlrC/2pgVItJ
# wZPt4bRc4G/rJvmM1bL5OBDm6s6R9b7T+2+TYTRcvJNFKIM2KmYoX7BzzosmJQay
# g9Rc9hUZTO1i4F4z8ujo7AqnsAMrkbI2eb73rQgedaZlzLvjSFDzd5Ea/ttQokbI
# YViY9XwCFjyDKK05huzUtw1T0PhH5nUwjewwk3YUpltLXXRhTT8SkXbev1jLchAp
# QfDVxW0mdmgRQRNYmtwmKwH0iU1Z23jPgUo+QEdfyYFQc4UQIyFZYIpkVMHMIRro
# OBl8ZhzNeDhFMJlP/2NPTLuqDQhTQXxYPUez+rbsjDIJAsxsPAxWEQIDAQABo4IB
# WTCCAVUwEgYDVR0TAQH/BAgwBgEB/wIBADAdBgNVHQ4EFgQUaDfg67Y7+F8Rhvv+
# YXsIiGX0TkIwHwYDVR0jBBgwFoAU7NfjgtJxXWRM3y5nP+e6mK4cD08wDgYDVR0P
# AQH/BAQDAgGGMBMGA1UdJQQMMAoGCCsGAQUFBwMDMHcGCCsGAQUFBwEBBGswaTAk
# BggrBgEFBQcwAYYYaHR0cDovL29jc3AuZGlnaWNlcnQuY29tMEEGCCsGAQUFBzAC
# hjVodHRwOi8vY2FjZXJ0cy5kaWdpY2VydC5jb20vRGlnaUNlcnRUcnVzdGVkUm9v
# dEc0LmNydDBDBgNVHR8EPDA6MDigNqA0hjJodHRwOi8vY3JsMy5kaWdpY2VydC5j
# b20vRGlnaUNlcnRUcnVzdGVkUm9vdEc0LmNybDAcBgNVHSAEFTATMAcGBWeBDAED
# MAgGBmeBDAEEATANBgkqhkiG9w0BAQwFAAOCAgEAOiNEPY0Idu6PvDqZ01bgAhql
# +Eg08yy25nRm95RysQDKr2wwJxMSnpBEn0v9nqN8JtU3vDpdSG2V1T9J9Ce7FoFF
# UP2cvbaF4HZ+N3HLIvdaqpDP9ZNq4+sg0dVQeYiaiorBtr2hSBh+3NiAGhEZGM1h
# mYFW9snjdufE5BtfQ/g+lP92OT2e1JnPSt0o618moZVYSNUa/tcnP/2Q0XaG3Ryw
# YFzzDaju4ImhvTnhOE7abrs2nfvlIVNaw8rpavGiPttDuDPITzgUkpn13c5Ubdld
# AhQfQDN8A+KVssIhdXNSy0bYxDQcoqVLjc1vdjcshT8azibpGL6QB7BDf5WIIIJw
# 8MzK7/0pNVwfiThV9zeKiwmhywvpMRr/LhlcOXHhvpynCgbWJme3kuZOX956rEnP
# LqR0kq3bPKSchh/jwVYbKyP/j7XqiHtwa+aguv06P0WmxOgWkVKLQcBIhEuWTatE
# QOON8BUozu3xGFYHKi8QxAwIZDwzj64ojDzLj4gLDb879M4ee47vtevLt/B3E+bn
# KD+sEq6lLyJsQfmCXBVmzGwOysWGw/YmMwwHS6DTBwJqakAwSEs0qFEgu60bhQji
# WQ1tygVQK+pKHJ6l/aCnHwZ05/LWUpD9r4VIIflXO7ScA+2GRfS0YW6/aOImYIbq
# yK+p/pQd52MbOoZWeE4wggb9MIIE5aADAgECAhAKJP1KmIX7+jQowyMbCSwIMA0G
# CSqGSIb3DQEBCwUAMGkxCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5EaWdpQ2VydCwg
# SW5jLjFBMD8GA1UEAxM4RGlnaUNlcnQgVHJ1c3RlZCBHNCBDb2RlIFNpZ25pbmcg
# UlNBNDA5NiBTSEEzODQgMjAyMSBDQTEwHhcNMjIwODIzMDAwMDAwWhcNMjUwOTE4
# MjM1OTU5WjCBgTELMAkGA1UEBhMCREUxEjAQBgNVBAcTCUV0dGxpbmdlbjEjMCEG
# A1UEChMaU2NyaXB0UnVubmVyIFNvZnR3YXJlIEdtYkgxFDASBgNVBAsTC0RldmVs
# b3BtZW50MSMwIQYDVQQDExpTY3JpcHRSdW5uZXIgU29mdHdhcmUgR21iSDCCAaIw
# DQYJKoZIhvcNAQEBBQADggGPADCCAYoCggGBAKcqyjEj0fwOK50z5/Bat6McHeK2
# 7HiTb0WvAGgTVstcYSMC9GSBNh77X3gMGzIf4bFFFt5FXVoC3MgxXXhYWBVDXr4k
# 3reQ5t9Nm9p4n/lQYsVQ4v4lnBeki8kv9dlRBZdHeAWZ47pQW3JWSVkP1XUQqR16
# uc3wPHL8UjLuPmVl1lbyxyXMHIXilCNIIA1OilNJ37fy/RXYtUkqrkPtU1fV4keu
# At+owdH7NrSaxjxo0Ok4xF4gXvxRbJojWi9Rp5hPV6qFaCFsYx4t3QqSeQ/xKPp9
# 3CDBsJz1myLhdDwd5Iji8U/QvLV+qTLcebGj76ojylB9lPyyrqUfZ/8eMgxNvagp
# Etmd/RBcv/DS/YKeFOJuA92Y56cP2eNCK0oopTj6Lg5TmIynUjAnnpKfyavmp9s9
# lXMbr/0WnNSxrOK2VQ77A30EsRBXwxdMwKHoQAVGL1mRW/xOuaseKpaaekRIEI5e
# Z7PLG5pwvp80SICcYgx/aBwSK9AWdXBZ4UxHzQIDAQABo4ICBjCCAgIwHwYDVR0j
# BBgwFoAUaDfg67Y7+F8Rhvv+YXsIiGX0TkIwHQYDVR0OBBYEFFvNKs/rU+6pAev0
# BPScCQIVWvvrMA4GA1UdDwEB/wQEAwIHgDATBgNVHSUEDDAKBggrBgEFBQcDAzCB
# tQYDVR0fBIGtMIGqMFOgUaBPhk1odHRwOi8vY3JsMy5kaWdpY2VydC5jb20vRGln
# aUNlcnRUcnVzdGVkRzRDb2RlU2lnbmluZ1JTQTQwOTZTSEEzODQyMDIxQ0ExLmNy
# bDBToFGgT4ZNaHR0cDovL2NybDQuZGlnaWNlcnQuY29tL0RpZ2lDZXJ0VHJ1c3Rl
# ZEc0Q29kZVNpZ25pbmdSU0E0MDk2U0hBMzg0MjAyMUNBMS5jcmwwPgYDVR0gBDcw
# NTAzBgZngQwBBAEwKTAnBggrBgEFBQcCARYbaHR0cDovL3d3dy5kaWdpY2VydC5j
# b20vQ1BTMIGUBggrBgEFBQcBAQSBhzCBhDAkBggrBgEFBQcwAYYYaHR0cDovL29j
# c3AuZGlnaWNlcnQuY29tMFwGCCsGAQUFBzAChlBodHRwOi8vY2FjZXJ0cy5kaWdp
# Y2VydC5jb20vRGlnaUNlcnRUcnVzdGVkRzRDb2RlU2lnbmluZ1JTQTQwOTZTSEEz
# ODQyMDIxQ0ExLmNydDAMBgNVHRMBAf8EAjAAMA0GCSqGSIb3DQEBCwUAA4ICAQBe
# i1jojgcQsTbWf2VsHA+uV7M5TQzxqPMjEOGuYVfMMQ0gmLsdhFMkPsNgoa8Irhi1
# MfHYjcUFpPFNfKqmsRGnd4ZSvjLWbJoh6aysQA/BavnCDaf4+jdZpTKdW1s9B9eP
# HW06mvsXyLje88jBKGJGGFbv/vgB/OKSb4t9LgLTDUFNC8aRW7DTxqR07OyMVtSq
# g2SnoGAIm8WvzH5+tUgXOOXap3Kd31LGWjwnoANRrCGBwrJPkDUGag27tXRjv9KU
# X+3/yevBS6EIIr6fAkWinsH1wzXiZdaOVhclIFrxhwPLdR6IgFT+dm2TCErMLB68
# lZok/8pxQAS0M6vUvbYucCQqS423Ok9720mT2UTJiO6rdSe3glaNuHnELKipQMWS
# Dg4yXXAYjYLjRCNEUEQpd1RJSap3xgTFfxtmTDTSAuq6vhSkz7ZRwfloQ4UiPMX/
# 750Kl7S5GM0zRLzZbHUCtTsfzBCiaamJnO/ZnNCYi1GlL9U4kkZxBiIylUOYSJOi
# 6JXFPCCj4V8VXOjBPxP/Pl5+EAAW7wuCE3DR1aOIVVsVOyVDYmCWdBz0dMo4BIIL
# VQX9R38ttEoqm5LRl7KvtisZMrGvGkn0hzzbN6Ec/3TbgbvIv29QSP0S/kNKqeNy
# HSbAF863Yx3+8lccinkQP8dAfbm/laiVOfpQbEOAazGCGeowghnmAgEBMH0waTEL
# MAkGA1UEBhMCVVMxFzAVBgNVBAoTDkRpZ2lDZXJ0LCBJbmMuMUEwPwYDVQQDEzhE
# aWdpQ2VydCBUcnVzdGVkIEc0IENvZGUgU2lnbmluZyBSU0E0MDk2IFNIQTM4NCAy
# MDIxIENBMQIQCiT9SpiF+/o0KMMjGwksCDANBglghkgBZQMEAgEFAKB8MBAGCisG
# AQQBgjcCAQwxAjAAMBkGCSqGSIb3DQEJAzEMBgorBgEEAYI3AgEEMBwGCisGAQQB
# gjcCAQsxDjAMBgorBgEEAYI3AgEVMC8GCSqGSIb3DQEJBDEiBCDBn5rgZpzGFBeT
# wqnh+giODhTz45fpeKihrPduFOuQ6zANBgkqhkiG9w0BAQEFAASCAYAtNQ0anMAV
# sheCXAn7kubQsuQSGiMdoxTwoJi/3C4VrKJjHW2D2mcTceg4s6+S5W11VvE/oRZL
# vtm3Gj5OxPn7Y2AQgBxNY9/mLzgW3Fc9WTTXe4Ayez1/mdu38i9v1zMyP4vIC0+A
# H3jaqzt68hX7/cnnTDevLlFUkQiCIss5u0jGHVHjqaNjwIVXX0L8LxYVIHJNvz/K
# vwymgkcPtECWPl+ppHqAJX48PyjdRvaiWVkETbyQzxvrfwimOiJLU2DVPVPBd76A
# O9YzdZz0EdpeMq8PlsNfSNPG1P12mrqs49tyQlaEfr2dsivAZSeF/VNQ/oBirBt/
# CMpwJc1C6cqfWzJyjS8W3fLr2M27qO+ABfaHZHjEnWKNXJEtuz2eEKXoFJ6zkB5E
# 2O7+yYjzPtgXZq6mRlWJefO2nd07IvZ1h+OBi7nc1c6dkfUxgoFDn4B3CZhKJJJb
# +4iHMd3NnRUL9PkxMF8AxAnu8B85Zhj7K5cVKNXGFIHTRo+H0Cg4+AChghdAMIIX
# PAYKKwYBBAGCNwMDATGCFywwghcoBgkqhkiG9w0BBwKgghcZMIIXFQIBAzEPMA0G
# CWCGSAFlAwQCAQUAMHgGCyqGSIb3DQEJEAEEoGkEZzBlAgEBBglghkgBhv1sBwEw
# MTANBglghkgBZQMEAgEFAAQgnj0OTsDnKDpqNK8RVSEGJrW602NiJp4ME32s7rMr
# OlICEQCvk4OR8j8Krs3dSC4IoH+BGA8yMDIzMDkxMjE1NDczOFqgghMJMIIGwjCC
# BKqgAwIBAgIQBUSv85SdCDmmv9s/X+VhFjANBgkqhkiG9w0BAQsFADBjMQswCQYD
# VQQGEwJVUzEXMBUGA1UEChMORGlnaUNlcnQsIEluYy4xOzA5BgNVBAMTMkRpZ2lD
# ZXJ0IFRydXN0ZWQgRzQgUlNBNDA5NiBTSEEyNTYgVGltZVN0YW1waW5nIENBMB4X
# DTIzMDcxNDAwMDAwMFoXDTM0MTAxMzIzNTk1OVowSDELMAkGA1UEBhMCVVMxFzAV
# BgNVBAoTDkRpZ2lDZXJ0LCBJbmMuMSAwHgYDVQQDExdEaWdpQ2VydCBUaW1lc3Rh
# bXAgMjAyMzCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAKNTRYcdg45b
# rD5UsyPgz5/X5dLnXaEOCdwvSKOXejsqnGfcYhVYwamTEafNqrJq3RApih5iY2nT
# WJw1cb86l+uUUI8cIOrHmjsvlmbjaedp/lvD1isgHMGXlLSlUIHyz8sHpjBoyoNC
# 2vx/CSSUpIIa2mq62DvKXd4ZGIX7ReoNYWyd/nFexAaaPPDFLnkPG2ZS48jWPl/a
# Q9OE9dDH9kgtXkV1lnX+3RChG4PBuOZSlbVH13gpOWvgeFmX40QrStWVzu8IF+qC
# ZE3/I+PKhu60pCFkcOvV5aDaY7Mu6QXuqvYk9R28mxyyt1/f8O52fTGZZUdVnUok
# L6wrl76f5P17cz4y7lI0+9S769SgLDSb495uZBkHNwGRDxy1Uc2qTGaDiGhiu7xB
# G3gZbeTZD+BYQfvYsSzhUa+0rRUGFOpiCBPTaR58ZE2dD9/O0V6MqqtQFcmzyrzX
# xDtoRKOlO0L9c33u3Qr/eTQQfqZcClhMAD6FaXXHg2TWdc2PEnZWpST618RrIbro
# HzSYLzrqawGw9/sqhux7UjipmAmhcbJsca8+uG+W1eEQE/5hRwqM/vC2x9XH3mwk
# 8L9CgsqgcT2ckpMEtGlwJw1Pt7U20clfCKRwo+wK8REuZODLIivK8SgTIUlRfgZm
# 0zu++uuRONhRB8qUt+JQofM604qDy0B7AgMBAAGjggGLMIIBhzAOBgNVHQ8BAf8E
# BAMCB4AwDAYDVR0TAQH/BAIwADAWBgNVHSUBAf8EDDAKBggrBgEFBQcDCDAgBgNV
# HSAEGTAXMAgGBmeBDAEEAjALBglghkgBhv1sBwEwHwYDVR0jBBgwFoAUuhbZbU2F
# L3MpdpovdYxqII+eyG8wHQYDVR0OBBYEFKW27xPn783QZKHVVqllMaPe1eNJMFoG
# A1UdHwRTMFEwT6BNoEuGSWh0dHA6Ly9jcmwzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2Vy
# dFRydXN0ZWRHNFJTQTQwOTZTSEEyNTZUaW1lU3RhbXBpbmdDQS5jcmwwgZAGCCsG
# AQUFBwEBBIGDMIGAMCQGCCsGAQUFBzABhhhodHRwOi8vb2NzcC5kaWdpY2VydC5j
# b20wWAYIKwYBBQUHMAKGTGh0dHA6Ly9jYWNlcnRzLmRpZ2ljZXJ0LmNvbS9EaWdp
# Q2VydFRydXN0ZWRHNFJTQTQwOTZTSEEyNTZUaW1lU3RhbXBpbmdDQS5jcnQwDQYJ
# KoZIhvcNAQELBQADggIBAIEa1t6gqbWYF7xwjU+KPGic2CX/yyzkzepdIpLsjCIC
# qbjPgKjZ5+PF7SaCinEvGN1Ott5s1+FgnCvt7T1IjrhrunxdvcJhN2hJd6PrkKoS
# 1yeF844ektrCQDifXcigLiV4JZ0qBXqEKZi2V3mP2yZWK7Dzp703DNiYdk9WuVLC
# tp04qYHnbUFcjGnRuSvExnvPnPp44pMadqJpddNQ5EQSviANnqlE0PjlSXcIWiHF
# tM+YlRpUurm8wWkZus8W8oM3NG6wQSbd3lqXTzON1I13fXVFoaVYJmoDRd7ZULVQ
# jK9WvUzF4UbFKNOt50MAcN7MmJ4ZiQPq1JE3701S88lgIcRWR+3aEUuMMsOI5lji
# tts++V+wQtaP4xeR0arAVeOGv6wnLEHQmjNKqDbUuXKWfpd5OEhfysLcPTLfddY2
# Z1qJ+Panx+VPNTwAvb6cKmx5AdzaROY63jg7B145WPR8czFVoIARyxQMfq68/qTr
# eWWqaNYiyjvrmoI1VygWy2nyMpqy0tg6uLFGhmu6F/3Ed2wVbK6rr3M66ElGt9V/
# zLY4wNjsHPW2obhDLN9OTH0eaHDAdwrUAuBcYLso/zjlUlrWrBciI0707NMX+1Br
# /wd3H3GXREHJuEbTbDJ8WC9nR2XlG3O2mflrLAZG70Ee8PBf4NvZrZCARK+AEEGK
# MIIGrjCCBJagAwIBAgIQBzY3tyRUfNhHrP0oZipeWzANBgkqhkiG9w0BAQsFADBi
# MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
# d3cuZGlnaWNlcnQuY29tMSEwHwYDVQQDExhEaWdpQ2VydCBUcnVzdGVkIFJvb3Qg
# RzQwHhcNMjIwMzIzMDAwMDAwWhcNMzcwMzIyMjM1OTU5WjBjMQswCQYDVQQGEwJV
# UzEXMBUGA1UEChMORGlnaUNlcnQsIEluYy4xOzA5BgNVBAMTMkRpZ2lDZXJ0IFRy
# dXN0ZWQgRzQgUlNBNDA5NiBTSEEyNTYgVGltZVN0YW1waW5nIENBMIICIjANBgkq
# hkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAxoY1BkmzwT1ySVFVxyUDxPKRN6mXUaHW
# 0oPRnkyibaCwzIP5WvYRoUQVQl+kiPNo+n3znIkLf50fng8zH1ATCyZzlm34V6gC
# ff1DtITaEfFzsbPuK4CEiiIY3+vaPcQXf6sZKz5C3GeO6lE98NZW1OcoLevTsbV1
# 5x8GZY2UKdPZ7Gnf2ZCHRgB720RBidx8ald68Dd5n12sy+iEZLRS8nZH92GDGd1f
# tFQLIWhuNyG7QKxfst5Kfc71ORJn7w6lY2zkpsUdzTYNXNXmG6jBZHRAp8ByxbpO
# H7G1WE15/tePc5OsLDnipUjW8LAxE6lXKZYnLvWHpo9OdhVVJnCYJn+gGkcgQ+ND
# Y4B7dW4nJZCYOjgRs/b2nuY7W+yB3iIU2YIqx5K/oN7jPqJz+ucfWmyU8lKVEStY
# dEAoq3NDzt9KoRxrOMUp88qqlnNCaJ+2RrOdOqPVA+C/8KI8ykLcGEh/FDTP0kyr
# 75s9/g64ZCr6dSgkQe1CvwWcZklSUPRR8zZJTYsg0ixXNXkrqPNFYLwjjVj33GHe
# k/45wPmyMKVM1+mYSlg+0wOI/rOP015LdhJRk8mMDDtbiiKowSYI+RQQEgN9XyO7
# ZONj4KbhPvbCdLI/Hgl27KtdRnXiYKNYCQEoAA6EVO7O6V3IXjASvUaetdN2udIO
# a5kM0jO0zbECAwEAAaOCAV0wggFZMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0O
# BBYEFLoW2W1NhS9zKXaaL3WMaiCPnshvMB8GA1UdIwQYMBaAFOzX44LScV1kTN8u
# Zz/nupiuHA9PMA4GA1UdDwEB/wQEAwIBhjATBgNVHSUEDDAKBggrBgEFBQcDCDB3
# BggrBgEFBQcBAQRrMGkwJAYIKwYBBQUHMAGGGGh0dHA6Ly9vY3NwLmRpZ2ljZXJ0
# LmNvbTBBBggrBgEFBQcwAoY1aHR0cDovL2NhY2VydHMuZGlnaWNlcnQuY29tL0Rp
# Z2lDZXJ0VHJ1c3RlZFJvb3RHNC5jcnQwQwYDVR0fBDwwOjA4oDagNIYyaHR0cDov
# L2NybDMuZGlnaWNlcnQuY29tL0RpZ2lDZXJ0VHJ1c3RlZFJvb3RHNC5jcmwwIAYD
# VR0gBBkwFzAIBgZngQwBBAIwCwYJYIZIAYb9bAcBMA0GCSqGSIb3DQEBCwUAA4IC
# AQB9WY7Ak7ZvmKlEIgF+ZtbYIULhsBguEE0TzzBTzr8Y+8dQXeJLKftwig2qKWn8
# acHPHQfpPmDI2AvlXFvXbYf6hCAlNDFnzbYSlm/EUExiHQwIgqgWvalWzxVzjQEi
# Jc6VaT9Hd/tydBTX/6tPiix6q4XNQ1/tYLaqT5Fmniye4Iqs5f2MvGQmh2ySvZ18
# 0HAKfO+ovHVPulr3qRCyXen/KFSJ8NWKcXZl2szwcqMj+sAngkSumScbqyQeJsG3
# 3irr9p6xeZmBo1aGqwpFyd/EjaDnmPv7pp1yr8THwcFqcdnGE4AJxLafzYeHJLtP
# o0m5d2aR8XKc6UsCUqc3fpNTrDsdCEkPlM05et3/JWOZJyw9P2un8WbDQc1PtkCb
# ISFA0LcTJM3cHXg65J6t5TRxktcma+Q4c6umAU+9Pzt4rUyt+8SVe+0KXzM5h0F4
# ejjpnOHdI/0dKNPH+ejxmF/7K9h+8kaddSweJywm228Vex4Ziza4k9Tm8heZWcpw
# 8De/mADfIBZPJ/tgZxahZrrdVcA6KYawmKAr7ZVBtzrVFZgxtGIJDwq9gdkT/r+k
# 0fNX2bwE+oLeMt8EifAAzV3C+dAjfwAL5HYCJtnwZXZCpimHCUcr5n8apIUP/JiW
# 9lVUKx+A+sDyDivl1vupL0QVSucTDh3bNzgaoSv27dZ8/DCCBY0wggR1oAMCAQIC
# EA6bGI750C3n79tQ4ghAGFowDQYJKoZIhvcNAQEMBQAwZTELMAkGA1UEBhMCVVMx
# FTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZMBcGA1UECxMQd3d3LmRpZ2ljZXJ0LmNv
# bTEkMCIGA1UEAxMbRGlnaUNlcnQgQXNzdXJlZCBJRCBSb290IENBMB4XDTIyMDgw
# MTAwMDAwMFoXDTMxMTEwOTIzNTk1OVowYjELMAkGA1UEBhMCVVMxFTATBgNVBAoT
# DERpZ2lDZXJ0IEluYzEZMBcGA1UECxMQd3d3LmRpZ2ljZXJ0LmNvbTEhMB8GA1UE
# AxMYRGlnaUNlcnQgVHJ1c3RlZCBSb290IEc0MIICIjANBgkqhkiG9w0BAQEFAAOC
# Ag8AMIICCgKCAgEAv+aQc2jeu+RdSjwwIjBpM+zCpyUuySE98orYWcLhKac9WKt2
# ms2uexuEDcQwH/MbpDgW61bGl20dq7J58soR0uRf1gU8Ug9SH8aeFaV+vp+pVxZZ
# VXKvaJNwwrK6dZlqczKU0RBEEC7fgvMHhOZ0O21x4i0MG+4g1ckgHWMpLc7sXk7I
# k/ghYZs06wXGXuxbGrzryc/NrDRAX7F6Zu53yEioZldXn1RYjgwrt0+nMNlW7sp7
# XeOtyU9e5TXnMcvak17cjo+A2raRmECQecN4x7axxLVqGDgDEI3Y1DekLgV9iPWC
# PhCRcKtVgkEy19sEcypukQF8IUzUvK4bA3VdeGbZOjFEmjNAvwjXWkmkwuapoGfd
# pCe8oU85tRFYF/ckXEaPZPfBaYh2mHY9WV1CdoeJl2l6SPDgohIbZpp0yt5LHucO
# Y67m1O+SkjqePdwA5EUlibaaRBkrfsCUtNJhbesz2cXfSwQAzH0clcOP9yGyshG3
# u3/y1YxwLEFgqrFjGESVGnZifvaAsPvoZKYz0YkH4b235kOkGLimdwHhD5QMIR2y
# VCkliWzlDlJRR3S+Jqy2QXXeeqxfjT/JvNNBERJb5RBQ6zHFynIWIgnffEx1P2Ps
# IV/EIFFrb7GrhotPwtZFX50g/KEexcCPorF+CiaZ9eRpL5gdLfXZqbId5RsCAwEA
# AaOCATowggE2MA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFOzX44LScV1kTN8u
# Zz/nupiuHA9PMB8GA1UdIwQYMBaAFEXroq/0ksuCMS1Ri6enIZ3zbcgPMA4GA1Ud
# DwEB/wQEAwIBhjB5BggrBgEFBQcBAQRtMGswJAYIKwYBBQUHMAGGGGh0dHA6Ly9v
# Y3NwLmRpZ2ljZXJ0LmNvbTBDBggrBgEFBQcwAoY3aHR0cDovL2NhY2VydHMuZGln
# aWNlcnQuY29tL0RpZ2lDZXJ0QXNzdXJlZElEUm9vdENBLmNydDBFBgNVHR8EPjA8
# MDqgOKA2hjRodHRwOi8vY3JsMy5kaWdpY2VydC5jb20vRGlnaUNlcnRBc3N1cmVk
# SURSb290Q0EuY3JsMBEGA1UdIAQKMAgwBgYEVR0gADANBgkqhkiG9w0BAQwFAAOC
# AQEAcKC/Q1xV5zhfoKN0Gz22Ftf3v1cHvZqsoYcs7IVeqRq7IviHGmlUIu2kiHdt
# vRoU9BNKei8ttzjv9P+Aufih9/Jy3iS8UgPITtAq3votVs/59PesMHqai7Je1M/R
# Q0SbQyHrlnKhSLSZy51PpwYDE3cnRNTnf+hZqPC/Lwum6fI0POz3A8eHqNJMQBk1
# RmppVLC4oVaO7KTVPeix3P0c2PR3WlxUjG/voVA9/HYJaISfb8rbII01YBwCA8sg
# sKxYoA5AY8WYIsGyWfVVa88nq2x2zm8jLfR+cWojayL/ErhULSd+2DrZ8LaHlv1b
# 0VysGMNNn3O3AamfV6peKOK5lDGCA3YwggNyAgEBMHcwYzELMAkGA1UEBhMCVVMx
# FzAVBgNVBAoTDkRpZ2lDZXJ0LCBJbmMuMTswOQYDVQQDEzJEaWdpQ2VydCBUcnVz
# dGVkIEc0IFJTQTQwOTYgU0hBMjU2IFRpbWVTdGFtcGluZyBDQQIQBUSv85SdCDmm
# v9s/X+VhFjANBglghkgBZQMEAgEFAKCB0TAaBgkqhkiG9w0BCQMxDQYLKoZIhvcN
# AQkQAQQwHAYJKoZIhvcNAQkFMQ8XDTIzMDkxMjE1NDczOFowKwYLKoZIhvcNAQkQ
# AgwxHDAaMBgwFgQUZvArMsLCyQ+CXc6qisnGTxmcz0AwLwYJKoZIhvcNAQkEMSIE
# II+IKWojhHDlCP7TZ3oflTLRmAOMmIN/B4fZKIQzSaaMMDcGCyqGSIb3DQEJEAIv
# MSgwJjAkMCIEINL25G3tdCLM0dRAV2hBNm+CitpVmq4zFq9NGprUDHgoMA0GCSqG
# SIb3DQEBAQUABIICAA8iTqUrWkEF7EyDGfzPB/zAjggvL4I87UhSTm1j/hxklP8M
# 7/v3x0WD0J0LxZctGsfPLm2i6miwf8tLpDCXZRgubkYgwXoIw1J0DOa6KpKXobCO
# V894OB3L16UJ2AhXKzfZ0kKExyKQJXxqumVCjOwicuDhcQJqDs1MPNrJNW6e7P5V
# WnhrJBVQWEzkLfP2QWFN/DYrdXPAG89nMvkRRU5V3kifCB3SHXE81KkqrVukMISm
# us5cRad/aV5nD7ilipgNdU41nDKGLQGwZ1G+TJriax1rJbxdcAM1mrkUit40iiK6
# PsC0lOfV1ERWmzi4flc0D5dSUvbJr//cmYS4m+U+HMYBGW6mJ9cPQAmb+p2pvMj5
# QpKYft6C4kuDRRY06yfxpme3H2LlTDFpQ7LbhCFAExioN391AhkljD/7PFkrd1tw
# LwkkfTVDtWxFI4TNWIt0SCQhrXp+npdoX+QldeYfq+cTkfLKDN6GyXEn+2tTX90y
# 624K9HA3aECH8mgxPlqIHv+N8Z2pC+RPR3MCvs7/gVCn7Sfe2uVwou20GimKX6tq
# CoPV+dydglKBi2YnjezktG4VGqyp5gnHOHH8D6D0odLt4E+r+0StllusJ/fSD/g1
# +ty8l4gFSQYdDdp5tSLnKdPGMd0dblH79nmCHeDJAoAAJ1Spa6AamZjpVPQ6
# SIG # End signature block