New-PSSentinelOneApiRequest.ps1

Function New-PSSentinelOneApiRequest
{
    <#
    .SYNOPSIS
        Create SentineOne API request.
 
    .PARAMETER ApiToken
        Authorization token.
 
    .PARAMETER Method
        Rest API method.
 
    .PARAMETER Uri
        API uri.
 
    .PARAMETER Headers
        Use own headers.
 
    .PARAMETER Body
        Hashtable or JSON body.
 
    .EXAMPLE
        $Body = @{
            filter = @{
                computerName = $ComputerName
                ids = @($ComputerId)
            }
        }
 
        $Params = @{
            Uri = "https://euce1-103.sentinelone.net/web/api/v2.1/agents/actions/decommission"
            Method = "POST"
            Body = ($Body | ConvertTo-Json)
            ApiToken = $ApiToken
        }
        $Request = New-PSSentinelOneApiRequest @Params
 
    .EXAMPLE
        $Body = @{
            tenant = $true
        }
 
        $Params = @{
            Uri = "https://euce1-103.sentinelone.net/web/api/v2.1/restrictions"
            Method = "GET"
            Body = $Body
            ApiToken = $ApiToken
        }
        $Request = New-PSSentinelOneApiRequest @Params
 
    .NOTES
        Author: Michal Gajda
    #>

    [CmdletBinding()]
    [OutputType([System.Collections.Hashtable])]
    param
    (
        [Parameter(Mandatory = $true,ParameterSetName="ApiToken")]
        [String]$ApiToken,
        [Parameter(Mandatory = $true)]
        [ValidateSet("GET", "POST", "PUT", "DELETE")]
        [String]$Method,
        [Parameter(Mandatory = $true)]
        [String]$Uri,
        [Parameter(Mandatory = $true,ParameterSetName="Headers")]
        [Hashtable]$Headers,
        [Parameter()]
        $Body
    )

    #Load assembly System.Web
    Add-Type -AssemblyName System.Web

    $UriRequest = [System.UriBuilder]$Uri

      #Build request headers
    if(!$Headers)
    {
        $Headers = @{}
        $Headers.Add("Authorization","ApiToken $ApiToken")
    }

    #Build core request
    $Request = @{}
    $Request.Add("Method",$Method)
    $Request.Add("Headers",$Headers)
    Write-Debug "Method: $Method"

    #Build request params
    if($Body)
    {
        if($Method -eq "GET")
        {
            #For GET method
            $QueryString = [System.Web.HttpUtility]::ParseQueryString($UriRequest.Query)

            ForEach($Item in $Body.GetEnumerator())
            {
                if($null -eq $QueryString[$Item.Name])
                {
                    #Add new param
                    $QueryString.Add($Item.Name, $Item.Value)
                } else {
                    #Set overwrite exist param
                    $QueryString.Set($Item.Name, $Item.Value)
                }
            }

            $UriRequest.Query = $QueryString.ToString()
            Write-Debug "Params: $($QueryString.ToString())"
        } else {
            #For non GET methods
            if($Body -is "Hashtable")
            {
                $Body = $Body | ConvertTo-Json
            }

            $Request.Add("Body",$Body)
            $Request.Add("ContentType", "application/json")
            Write-Debug "Params: $Body"
        }
    }
    
    #Build Uri
    $Request.Add("Uri",$UriRequest.Uri.OriginalString)
    Write-Verbose $UriRequest.Uri.OriginalString

    return $Request
}

# SIG # Begin signature block
# MIIuIwYJKoZIhvcNAQcCoIIuFDCCLhACAQExCzAJBgUrDgMCGgUAMGkGCisGAQQB
# gjcCAQSgWzBZMDQGCisGAQQBgjcCAR4wJgIDAQAABBAfzDtgWUsITrck0sYpfvNR
# AgEAAgEAAgEAAgEAAgEAMCEwCQYFKw4DAhoFAAQUuNuLPicqtTyCsU3EwnqOovOa
# YkKggiZ6MIIFyTCCBLGgAwIBAgIQG7WPJSrfIwBJKMmuPX7tJzANBgkqhkiG9w0B
# AQwFADB+MQswCQYDVQQGEwJQTDEiMCAGA1UEChMZVW5pemV0byBUZWNobm9sb2dp
# ZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVtIENlcnRpZmljYXRpb24gQXV0aG9yaXR5
# MSIwIAYDVQQDExlDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENBMB4XDTIxMDUzMTA2
# NDMwNloXDTI5MDkxNzA2NDMwNlowgYAxCzAJBgNVBAYTAlBMMSIwIAYDVQQKExlV
# bml6ZXRvIFRlY2hub2xvZ2llcyBTLkEuMScwJQYDVQQLEx5DZXJ0dW0gQ2VydGlm
# aWNhdGlvbiBBdXRob3JpdHkxJDAiBgNVBAMTG0NlcnR1bSBUcnVzdGVkIE5ldHdv
# cmsgQ0EgMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAL35ePjm1YAM
# ZJ2GG5ZkZz8iOh51AX3v+1xnjMnMXGupkea5QuUgS5vam3u5mV3Zm4BL14RAKyfT
# 6Lowuz4JGqdJle8rQCTCl8en7psl76gKAJeFWqqd3CnJ4jUH63BNStbBs1a4oUE4
# m9H7MX+P4F/hsT8PjhZJYNcGjRj5qiYQqyrT0NFnjRtGvkcw1S5y0cVj2udjeUR+
# S2MkiYYuND8pTFKLKqfA4pEoibnAW/kd2ecnrf+aApfBxlCSmwIsvam5NFkKv4RK
# /9/+s5/r2Z7gmCPspmt3FirbzK07HKSH3EZzXhliaEVX5JCCQrtC1vBh4MGjPWaj
# XfQY7ojJjRdFKZkydQIx7ikmyGsC5rViRX83FVojaInUPt5OJ7DwQAy8TRfLTaKz
# HtAGWt32k89XdZn1+oYaZ3izv5b+NNy951JW5bPldXvXQZEF3F1p45UNQ7n8g5Y5
# lXtsgFpPE3LG130pekS6UqQq1UFGCSD+IqC2WzCNvIkM1ddw+IdS/drvrFEuB7NO
# /tAJ2nDvmPpW5m3btVdL3OUsJRXIni54TvjanJ6GLMpX8xrlyJKLGoKWesO8UBJp
# 2A5aRos66yb6I8m2sIG+QgCk+Nb+MC7H0kb25Y51/fLMudCHW8wGEGC7gzW3Xmfe
# R+yZSPGkoRX+rYxijjlVTzkWubFjnf+3AgMBAAGjggE+MIIBOjAPBgNVHRMBAf8E
# BTADAQH/MB0GA1UdDgQWBBS2oVQ5AsOgP46KvPrU+Bym0ToO/TAfBgNVHSMEGDAW
# gBQIds3LB/8k9sXN7buQvOKEN0Z19zAOBgNVHQ8BAf8EBAMCAQYwLwYDVR0fBCgw
# JjAkoCKgIIYeaHR0cDovL2NybC5jZXJ0dW0ucGwvY3RuY2EuY3JsMGsGCCsGAQUF
# BwEBBF8wXTAoBggrBgEFBQcwAYYcaHR0cDovL3N1YmNhLm9jc3AtY2VydHVtLmNv
# bTAxBggrBgEFBQcwAoYlaHR0cDovL3JlcG9zaXRvcnkuY2VydHVtLnBsL2N0bmNh
# LmNlcjA5BgNVHSAEMjAwMC4GBFUdIAAwJjAkBggrBgEFBQcCARYYaHR0cDovL3d3
# dy5jZXJ0dW0ucGwvQ1BTMA0GCSqGSIb3DQEBDAUAA4IBAQBRwqFYFiIQi/yGMdTC
# MtNc+EuiL2o+TfirCB7t1ej65wgN7LfGHg6ydQV6sQv613RqAAYfpM6q8mt92BHA
# EQjUDk1hxTqo+rHh45jq4mP9QfWTfQ28XZI7kZplutBfTL5MjWgDEBbV8dAEioUz
# +TfnWy4maUI8us281HrpTZ3a50P7Y1KAhQTEJZVV8H6nnwHFWyj44M6GcKYnOzn7
# OC6YU2UidS3X9t0iIpGW691o7T+jGZfTOyWI7DYSPal+zgKNBZqSpyduRbKcYoY3
# DaQzjteoTtBKF0NMxfGnbNIeWGwUUX6KVKH27595el2BmhaQD+G78UoA+fndvu2q
# 7M4KMIIF0jCCA7qgAwIBAgIQIdbQSk8lD8kyN/yqXhKN6TANBgkqhkiG9w0BAQ0F
# ADCBgDELMAkGA1UEBhMCUEwxIjAgBgNVBAoTGVVuaXpldG8gVGVjaG5vbG9naWVz
# IFMuQS4xJzAlBgNVBAsTHkNlcnR1bSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEk
# MCIGA1UEAxMbQ2VydHVtIFRydXN0ZWQgTmV0d29yayBDQSAyMCIYDzIwMTExMDA2
# MDgzOTU2WhgPMjA0NjEwMDYwODM5NTZaMIGAMQswCQYDVQQGEwJQTDEiMCAGA1UE
# ChMZVW5pemV0byBUZWNobm9sb2dpZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVtIENl
# cnRpZmljYXRpb24gQXV0aG9yaXR5MSQwIgYDVQQDExtDZXJ0dW0gVHJ1c3RlZCBO
# ZXR3b3JrIENBIDIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC9+Xj4
# 5tWADGSdhhuWZGc/IjoedQF97/tcZ4zJzFxrqZHmuULlIEub2pt7uZld2ZuAS9eE
# QCsn0+i6MLs+CRqnSZXvK0AkwpfHp+6bJe+oCgCXhVqqndwpyeI1B+twTUrWwbNW
# uKFBOJvR+zF/j+Bf4bE/D44WSWDXBo0Y+aomEKsq09DRZ40bRr5HMNUuctHFY9rn
# Y3lEfktjJImGLjQ/KUxSiyqnwOKRKIm5wFv5HdnnJ63/mgKXwcZQkpsCLL2puTRZ
# Cr+ESv/f/rOf69me4Jgj7KZrdxYq28ytOxykh9xGc14ZYmhFV+SQgkK7QtbwYeDB
# oz1mo130GO6IyY0XRSmZMnUCMe4pJshrAua1YkV/NxVaI2iJ1D7eTiew8EAMvE0X
# y02isx7QBlrd9pPPV3WZ9fqGGmd4s7+W/jTcvedSVuWz5XV710GRBdxdaeOVDUO5
# /IOWOZV7bIBaTxNyxtd9KXpEulKkKtVBRgkg/iKgtlswjbyJDNXXcPiHUv3a76xR
# LgezTv7QCdpw75j6VuZt27VXS9zlLCUVyJ4ueE742pyehizKV/Ma5ciSixqClnrD
# vFASadgOWkaLOusm+iPJtrCBvkIApPjW/jAux9JG9uWOdf3yzLnQh1vMBhBgu4M1
# t15n3kfsmUjxpKEV/q2MYo45VU85FrmxY53/twIDAQABo0IwQDAPBgNVHRMBAf8E
# BTADAQH/MB0GA1UdDgQWBBS2oVQ5AsOgP46KvPrU+Bym0ToO/TAOBgNVHQ8BAf8E
# BAMCAQYwDQYJKoZIhvcNAQENBQADggIBAHGlDs7k6b8/ONWJWsQCYftMxRQXLYtP
# U2sQF/xlhMcQSZDe28cmk4gmb3DWAl45oPePq5a1pRNcgRRtDoGCERuKTsZPpd1i
# HkTfCVn0W3cLN+mLIMb4Ck4uWBzrM9DPhmDJ2vuAL55MYIR4PSFk1vtBHxgP58l1
# cb29XN40hz5BsA72udY/CROWFC/emh1auVbONTqwX3BNXuMp8SMoclm2q8KMZiYc
# dywmdjWLKKdpoPk79SPdhRB0yZADVpHnr7pH1BKXESLjokmUbOe3lEu6LaTaM4tM
# pkT/WjzGHWTYtTHkpjx6qFcL2+1hGsvxznN3Y6SHb0xRONbkX8eftoEq5IVIeVhe
# O/jbAoJnwTnbw3RLPTYe+SmTiGhbqEQZIfCn6IENLOiTNrQ3ssqwGyZ6miUfmpqA
# nksqP/ujmv5zMnHCnsZy4YpoJ/HkD7TETKVhk/iXEAcqMCWpuchxuO9ozC1+9eB+
# D4Kob7a6bINDd82Kkhehnlt4Fj1F4jNy3eFmypnTycUm/Q1oBEauttmbjL4ZvrHG
# 8hnjXALKLNhvSgfZyTXaQHXyxKcZb55CEJh15pWLYLztxRLXis7VmFxWlgPF7ncG
# Nf/P5O4/E2Hu29othfDNrp2yGAlFw5Khchf8R7agCyzxxN5DaAhqXzvwdmP7zAYs
# psbiDrW5viSPMIIGlTCCBH2gAwIBAgIRAPFkJYwJtuJ74g4yYI5L9KgwDQYJKoZI
# hvcNAQEMBQAwVjELMAkGA1UEBhMCUEwxITAfBgNVBAoTGEFzc2VjbyBEYXRhIFN5
# c3RlbXMgUy5BLjEkMCIGA1UEAxMbQ2VydHVtIFRpbWVzdGFtcGluZyAyMDIxIENB
# MB4XDTIxMDUxOTA1NDI0NloXDTMyMDUxODA1NDI0NlowUDELMAkGA1UEBhMCUEwx
# ITAfBgNVBAoMGEFzc2VjbyBEYXRhIFN5c3RlbXMgUy5BLjEeMBwGA1UEAwwVQ2Vy
# dHVtIFRpbWVzdGFtcCAyMDIxMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKC
# AgEA1WG+gAC93YRj7hJlmB14VItG+saRFhq6PR58vjQY9ui/eIJiPJDjVWHbtgs/
# QX7ZIsr5OPtzBQ65KL2WUPFg3Jhl5bV+MQMDwHI1xG14BGdHsRD+QHtm5MCpU4sl
# FwmqtA/SRGiubeCqu6x+653SneZF+ygEXDBVhDfopFdXIBpSoKpiUk5NAb24G3Ou
# 6KJSIbaIXBJLWWRbreVScUydTirEUdxVJjfuEKwJNESL+HcNmeLFopam3QWgUv+Y
# ai7efLKbYjkZMZ4o6991Z74iz9vsG1skDOZPwIKyo/JZOgOQvFf3UoY+pf06qkTM
# pBgCjpougnLxm1A4mzypI5cZQC3eJhyxbo1qBPdRonClCn1ZC7BaqZW/3Tz10I8N
# kwpmWwHoA0JbAKaZ3YvVFGcR7z3K8sstBModcuBp+179bxMJ8AYrGYwe9jMvJM1E
# NII8T9ur4QZLxdgonNep1QB8chjj5tGNL+5RZnEsmFVoNSeemGW/kACWQi+wSfQg
# UiaQFzRsXDVETdG2gAZWUx5922wTzgYTkmPb2xsC9+JzpkxaURuZj+h0FV3PxDvX
# I/OemvWrngxss9oXJTCGYoxhGua8GnBrT8NR81qYDQDiNuAoQwUUPGJg9tyDda5i
# 5cwjLEWfcBWCLzQ7TCVTEkIAtPl0ARTznuvZD8MYDzTeAgsCAwEAAaOCAWIwggFe
# MAwGA1UdEwEB/wQCMAAwHQYDVR0OBBYEFMVHEk5yV7ZEFGuIcRoUrDG5P7oIMB8G
# A1UdIwQYMBaAFL5UAi+/QGxzQ86sCSVOnkNEGu7gMA4GA1UdDwEB/wQEAwIHgDAW
# BgNVHSUBAf8EDDAKBggrBgEFBQcDCDAzBgNVHR8ELDAqMCigJqAkhiJodHRwOi8v
# Y3JsLmNlcnR1bS5wbC9jdHNjYTIwMjEuY3JsMG8GCCsGAQUFBwEBBGMwYTAoBggr
# BgEFBQcwAYYcaHR0cDovL3N1YmNhLm9jc3AtY2VydHVtLmNvbTA1BggrBgEFBQcw
# AoYpaHR0cDovL3JlcG9zaXRvcnkuY2VydHVtLnBsL2N0c2NhMjAyMS5jZXIwQAYD
# VR0gBDkwNzA1BgsqhGgBhvZ3AgUBCzAmMCQGCCsGAQUFBwIBFhhodHRwOi8vd3d3
# LmNlcnR1bS5wbC9DUFMwDQYJKoZIhvcNAQEMBQADggIBADdzzDC3wl+J5qp0rB1N
# q2YRP3ZKq3UmC7yN1PYuPYcbPovvaKOZiZeLqzy2SdMSM+gewhxQTVvXRcIGoZxT
# F4k+0Jz7meQgMHy//Qn7AC913Z0tAFpZfuyEqJkaPHedW36Rx7dz948fQuiJodQO
# 9yUqfdAqtDaj6pxH5a1cWF/rGGtkjvbxrETGLIVO7sxNVeXGFlqBVDGgx6cELh+A
# zV4mTug+3/EBlp1zR17ukt0pWmAxuGKMe0iFtbUL9I7JJhdb3TX6MVQMpkBkXTS7
# BswF5+jjwFIsNcUOjNaqYyuFJyk1IhSX74A1209XL62LCa8mwf+NbKPg7ALdMoys
# W6UuYj+0qcch7J3IdFXCOeLCH9Cuun+CyRqHAaQ0ym1NQDqtzrx21aiO1cKrPkxg
# ru0yqq0y9jUE0QwMR5LKOxbR/ONUdgNpb2EhQ3xsfOwdTbz1mFN5mPxkbJkMfkYA
# PD5f+zb6e2QGPgFPJg1a9il6xT+Lp6bMFQUJR8bSDsc+o3sn3SyBtqBSZZd4qXAE
# h2r/6G2BLfxdRkZSfphSELSg2ncVAZn4UZYCIGLxBLbiRhER7sXzA9uoy5osbvEk
# zxkUXKPkeQXYLvqhW58pin7lzuLEfeiWKmjjsYpXDf8a+5rNd4ku8KgDaXdrcSmY
# z8t8HVp4lUHLi+8glw9rhHNtMIIGuTCCBKGgAwIBAgIRAJmjgAomVTtlq9xuhKaz
# 6jkwDQYJKoZIhvcNAQEMBQAwgYAxCzAJBgNVBAYTAlBMMSIwIAYDVQQKExlVbml6
# ZXRvIFRlY2hub2xvZ2llcyBTLkEuMScwJQYDVQQLEx5DZXJ0dW0gQ2VydGlmaWNh
# dGlvbiBBdXRob3JpdHkxJDAiBgNVBAMTG0NlcnR1bSBUcnVzdGVkIE5ldHdvcmsg
# Q0EgMjAeFw0yMTA1MTkwNTMyMThaFw0zNjA1MTgwNTMyMThaMFYxCzAJBgNVBAYT
# AlBMMSEwHwYDVQQKExhBc3NlY28gRGF0YSBTeXN0ZW1zIFMuQS4xJDAiBgNVBAMT
# G0NlcnR1bSBDb2RlIFNpZ25pbmcgMjAyMSBDQTCCAiIwDQYJKoZIhvcNAQEBBQAD
# ggIPADCCAgoCggIBAJ0jzwQwIzvBRiznM3M+Y116dbq+XE26vest+L7k5n5TeJkg
# H4Cyk74IL9uP61olRsxsU/WBAElTMNQI/HsE0uCJ3VPLO1UufnY0qDHG7yCnJOvo
# SNbIbMpT+Cci75scCx7UsKK1fcJo4TXetu4du2vEXa09Tx/bndCBfp47zJNsamzU
# yD7J1rcNxOw5g6FJg0ImIv7nCeNn3B6gZG28WAwe0mDqLrvU49chyKIc7gvCjan3
# GH+2eP4mYJASflBTQ3HOs6JGdriSMVoD1lzBJobtYDF4L/GhlLEXWgrVQ9m0pW37
# KuwYqpY42grp/kSYE4BUQrbLgBMNKRvfhQPskDfZ/5GbTCyvlqPN+0OEDmYGKlVk
# OMenDO/xtMrMINRJS5SY+jWCi8PRHAVxO0xdx8m2bWL4/ZQ1dp0/JhUpHEpABMc3
# eKax8GI1F03mSJVV6o/nmmKqDE6TK34eTAgDiBuZJzeEPyR7rq30yOVw2DvetlmW
# ssewAhX+cnSaaBKMEj9O2GgYkPJ16Q5Da1APYO6n/6wpCm1qUOW6Ln1J6tVImDyA
# B5Xs3+JriasaiJ7P5KpXeiVV/HIsW3ej85A6cGaOEpQA2gotiUqZSkoQUjQ9+hPx
# DVb/Lqz0tMjp6RuLSKARsVQgETwoNQZ8jCeKwSQHDkpwFndfCceZ/OfCUqjxAgMB
# AAGjggFVMIIBUTAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTddF1MANt7n6B0
# yrFu9zzAMsBwzTAfBgNVHSMEGDAWgBS2oVQ5AsOgP46KvPrU+Bym0ToO/TAOBgNV
# HQ8BAf8EBAMCAQYwEwYDVR0lBAwwCgYIKwYBBQUHAwMwMAYDVR0fBCkwJzAloCOg
# IYYfaHR0cDovL2NybC5jZXJ0dW0ucGwvY3RuY2EyLmNybDBsBggrBgEFBQcBAQRg
# MF4wKAYIKwYBBQUHMAGGHGh0dHA6Ly9zdWJjYS5vY3NwLWNlcnR1bS5jb20wMgYI
# KwYBBQUHMAKGJmh0dHA6Ly9yZXBvc2l0b3J5LmNlcnR1bS5wbC9jdG5jYTIuY2Vy
# MDkGA1UdIAQyMDAwLgYEVR0gADAmMCQGCCsGAQUFBwIBFhhodHRwOi8vd3d3LmNl
# cnR1bS5wbC9DUFMwDQYJKoZIhvcNAQEMBQADggIBAHWIWA/lj1AomlOfEOxD/PQ7
# bcmahmJ9l0Q4SZC+j/v09CD2csX8Yl7pmJQETIMEcy0VErSZePdC/eAvSxhd7488
# x/Cat4ke+AUZZDtfCd8yHZgikGuS8mePCHyAiU2VSXgoQ1MrkMuqxg8S1FALDtHq
# nizYS1bIMOv8znyJjZQESp9RT+6NH024/IqTRsRwSLrYkbFq4VjNn/KV3Xd8dpmy
# QiirZdrONoPSlCRxCIi54vQcqKiFLpeBm5S0IoDtLoIe21kSw5tAnWPazS6sgN2o
# XvFpcVVpMcq0C4x/CLSNe0XckmmGsl9z4UUguAJtf+5gE8GVsEg/ge3jHGTYaZ/M
# yfujE8hOmKBAUkVa7NMxRSB1EdPFpNIpEn/pSHuSL+kWN/2xQBJaDFPr1AX0qLgk
# XmcEi6PFnaw5T17UdIInA58rTu3mefNuzUtse4AgYmxEmJDodf8NbVcU6VdjWtz0
# e58WFZT7tST6EWQmx/OoHPelE77lojq7lpsjhDCzhhp4kfsfszxf9g2hoCtltXhC
# X6NqsqwTT7xe8LgMkH4hVy8L1h2pqGLT2aNCx7h/F95/QvsTeGGjY7dssMzq/rSs
# hFQKLZ8lPb8hFTmiGDJNyHga5hZ59IGynk08mHhBFM/0MLeBzlAQq1utNjQprztZ
# 5vv/NJy8ua9AGbwkMWkOMIIGuTCCBKGgAwIBAgIRAOf/acc7Nc5LkSbYdHxopYcw
# DQYJKoZIhvcNAQEMBQAwgYAxCzAJBgNVBAYTAlBMMSIwIAYDVQQKExlVbml6ZXRv
# IFRlY2hub2xvZ2llcyBTLkEuMScwJQYDVQQLEx5DZXJ0dW0gQ2VydGlmaWNhdGlv
# biBBdXRob3JpdHkxJDAiBgNVBAMTG0NlcnR1bSBUcnVzdGVkIE5ldHdvcmsgQ0Eg
# MjAeFw0yMTA1MTkwNTMyMDdaFw0zNjA1MTgwNTMyMDdaMFYxCzAJBgNVBAYTAlBM
# MSEwHwYDVQQKExhBc3NlY28gRGF0YSBTeXN0ZW1zIFMuQS4xJDAiBgNVBAMTG0Nl
# cnR1bSBUaW1lc3RhbXBpbmcgMjAyMSBDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIP
# ADCCAgoCggIBAOkSHwQ17bldesWmlUG+imV/TnfRbSV102aO2/hhKH9/t4NAoVoi
# pzu0ePujH67y8iwlmWuhqRR4xLeLdPxolEL55CzgUXQaq+Qzr5Zk7ySbNl/GZloF
# iYwuzwWS2AVgLPLCZd5DV8QTF+V57Y6lsdWTrrl5dEeMfsxhkjM2eOXabwfLy6UH
# 2ZHzAv9bS/SmMo1PobSx+vHWST7c4aiwVRvvJY2dWRYpTipLEu/XqQnqhUngFJtn
# jExqTokt4HyzOsr2/AYOm8YOcoJQxgvc26+LAfXHiBkbQkBdTfHak4DP3UlYolIC
# ZHL+XSzSXlsRgqiWD4MypWGU4A13xiHmaRBZowS8FET+QAbMiqBaHDM3Y6wohW07
# yZ/mw9ZKu/KmVIAEBhrXesxifPB+DTyeWNkeCGq4IlgJr/Ecr1px6/1QPtj66yvX
# l3uauzPPGEXUk6vUym6nZyE1IGXI45uGVI7XqvCt99WuD9LNop9Kd1LmzBGGvxuc
# Oo0lj1M3IRi8FimAX3krunSDguC5HgD75nWcUgdZVjm/R81VmaDPEP25Wj+C1rei
# cY5CPckLGBjHQqsJe7jJz1CJXBMUtZs10cVKMEK3n/xD2ku5GFWhx0K6eFwe50xL
# UIZD9GfT7s/5/MyBZ1Ep8Q6H+GMuudDwF0mJitk3G8g6EzZprfMQMc3DAgMBAAGj
# ggFVMIIBUTAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBS+VAIvv0Bsc0POrAkl
# Tp5DRBru4DAfBgNVHSMEGDAWgBS2oVQ5AsOgP46KvPrU+Bym0ToO/TAOBgNVHQ8B
# Af8EBAMCAQYwEwYDVR0lBAwwCgYIKwYBBQUHAwgwMAYDVR0fBCkwJzAloCOgIYYf
# aHR0cDovL2NybC5jZXJ0dW0ucGwvY3RuY2EyLmNybDBsBggrBgEFBQcBAQRgMF4w
# KAYIKwYBBQUHMAGGHGh0dHA6Ly9zdWJjYS5vY3NwLWNlcnR1bS5jb20wMgYIKwYB
# BQUHMAKGJmh0dHA6Ly9yZXBvc2l0b3J5LmNlcnR1bS5wbC9jdG5jYTIuY2VyMDkG
# A1UdIAQyMDAwLgYEVR0gADAmMCQGCCsGAQUFBwIBFhhodHRwOi8vd3d3LmNlcnR1
# bS5wbC9DUFMwDQYJKoZIhvcNAQEMBQADggIBALiTWXfJTBX9lAcIoKd6oCzwQZOf
# ARQkt0OmiQ390yEqMrStHmpfycggfPGlBHdMDDYhHDVTGyvY+WIbdsIWpJ1BNRt9
# pOrpXe8HMR5sOu71AWOqUqfEIXaHWOEs0UWmVs8mJb4lKclOHV8oSoR0p3GCX2tV
# O+XF8Qnt7E6fbkwZt3/AY/C5KYzFElU7TCeqBLuSagmM0X3Op56EVIMM/xlWRaDg
# Rna0hLQze5mYHJGv7UuTCOO3wC1bzeZWdlPJOw5v4U1/AljsNLgWZaGRFuBwdF62
# t6hOKs86v+jPIMqFPwxNJN/ou22DqzpP+7TyYNbDocrThlEN9D2xvvtBXyYqA7jh
# YY/fW9edUqhZUmkUGM++Mvz9lyT/nBdfaKqM5otK0U5H8hCSL4SGfjOVyBWbbZlU
# IE8X6XycDBRRKEK0q5JTsaZksoKabFAyRKJYgtObwS1UPoDGcmGirwSeGMQTJSh+
# WR5EXZaEWJVA6ZZPBlGvjgjFYaQ0kLq1OitbmuXZmX7Z70ks9h/elK0A8wOg8oiN
# Vd3o1bb59ms1QF4OjZ45rkWfsGuz8ctB9/leCuKzkx5Rt1WAOsXy7E7pws+9k+jr
# ePrZKw2DnmlNaT19QgX2I+hFtvhC6uOhj/CgjVEA4q1i1OJzpoAmre7zdEg+kZcF
# IkrDHgokA5mcIMK1MIIGwDCCBKigAwIBAgIQPy8Gn1xriJ6aZcVTBnSWFTANBgkq
# hkiG9w0BAQsFADBWMQswCQYDVQQGEwJQTDEhMB8GA1UEChMYQXNzZWNvIERhdGEg
# U3lzdGVtcyBTLkEuMSQwIgYDVQQDExtDZXJ0dW0gQ29kZSBTaWduaW5nIDIwMjEg
# Q0EwHhcNMjIwNDE0MDkyMTM4WhcNMjUwNDEzMDkyMTM3WjBmMQswCQYDVQQGEwJQ
# TDERMA8GA1UEBwwIV2Fyc3phd2ExITAfBgNVBAoMGFBvd2VyQ2xvdWRzIE1pY2hh
# bCBHYWpkYTEhMB8GA1UEAwwYUG93ZXJDbG91ZHMgTWljaGFsIEdhamRhMIICIjAN
# BgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAnrfsZFuBAlS9Q0o/cXMBg3t8k615
# 3Crjv1LB0Iwxt8EyhDGSbpAvIB15zypa7YPR9yrXRvS+eQPseeVQpeSqWsuAE68Q
# FCnbOQembttmqHt7XqV5WkJPDzvmrr7U/q9HMyb0wO/8Oxb5uVfbSQUzskV9GbBs
# qYn6L/LGRYIS/aVUAanPmgFsfxbIPLNSUoIMeYjkkJS78cS2/e5oaSwxcaG4Kp3W
# 4wqrizBFeXKmOvjg4VSQQBB+ONuVJDBFZF+dIONjxaB3nv2QOPuWjMfEX/btaQOs
# lar3B6CcF47qLtq/8erLPm/UnFMr1CHI16JMgLU7cq1DsBNo1g7854Wz5pbYZ9pc
# 7LOsgGk03q8k4HFdH/J4bNkBaGvE2TBYv3zYy/KK1rKav9GdR8DTZA9TIdgeiZw/
# 7pzst34++zAYTJ1s0lUxx/mWAxsGA7IJlG3/Ig+jLxBsy8Isj/N4i+q73LJErCja
# HDwdS8qUz/k77hhiHZkIXjX49WNprOujv7Dtu/vSQOI1sTRRUEOmUyE05e333/dW
# 6M3ioyPghO8WwLTg5vhrIte2K4YHlFZNWKVTiowYZ144zCfTIfglVn8QKxLPwNGW
# R813gAmJsWjLKPIV1ORUglEzLeDI8TxWps+fXtH/fKii5FXxYqEKlPw/ydruP/lB
# SXoM2YPd2+og/tUCAwEAAaOCAXgwggF0MAwGA1UdEwEB/wQCMAAwPQYDVR0fBDYw
# NDAyoDCgLoYsaHR0cDovL2Njc2NhMjAyMS5jcmwuY2VydHVtLnBsL2Njc2NhMjAy
# MS5jcmwwcwYIKwYBBQUHAQEEZzBlMCwGCCsGAQUFBzABhiBodHRwOi8vY2NzY2Ey
# MDIxLm9jc3AtY2VydHVtLmNvbTA1BggrBgEFBQcwAoYpaHR0cDovL3JlcG9zaXRv
# cnkuY2VydHVtLnBsL2Njc2NhMjAyMS5jZXIwHwYDVR0jBBgwFoAU3XRdTADbe5+g
# dMqxbvc8wDLAcM0wHQYDVR0OBBYEFHXAKAmHZQwSjH6oseE9xCBAAeUxMEsGA1Ud
# IAREMEIwCAYGZ4EMAQQBMDYGCyqEaAGG9ncCBQEEMCcwJQYIKwYBBQUHAgEWGWh0
# dHBzOi8vd3d3LmNlcnR1bS5wbC9DUFMwEwYDVR0lBAwwCgYIKwYBBQUHAwMwDgYD
# VR0PAQH/BAQDAgeAMA0GCSqGSIb3DQEBCwUAA4ICAQAV8SrARS4ygM/Qr1TNkL+v
# uDMlACQ091rNovvah1LHcBpK3V7yDu8/hV8YTyNOF8HGTTXI4ckGOjCDsQ1iFXCd
# 0ITtC0nLmQnjuN2UizK5DclwW2hwsliBlNUJQ5twIfLqNBzF3BAwJmlAdXNgJOAE
# X07p05Uj/uHHe3NzL5meLTkHBykyhXdEQBaWvcpxHfw6AF6wAnQzwHN3JRMz328O
# YyRsG7PTcrJOUsojSgkLTAJ2J6hkX0ZC42+97TTx9TO1J1KpxFQKrPreuGu0AiFE
# g0iCExhAeG4ZRVCLsAIXpGY+8jyKz8L9k2PKuwpcjeGzk0qYYfyRkwZVvXYEjxeW
# 0Anlu7N4wIIC58+MYN3qI2bkj4V2HS+QMdGMmmaF6tytgrz9P0mGYdMU6e+ZzSOt
# LVfQ7KKSP8ppAcH2BUu+ypnpaIbLdgQIwkZiTSw2SSuur1F5WqwDYY4C+Qf1lMsS
# LjzWn+jwvQM1s9Rh8TW3jVAmYIw/cJaSCwx+YLGHYpgIU74H7VMjCr8i+NqylaRm
# VvS/P7/f/r65H/un8bnx8YJLLHAB9EKqH8fvmJauGUNj86ayPWATS5JsLkkIX/iH
# U/48LtnGFDfW7jmSaN/UbRbFS0DBnxbpYjd0gFbXxTftn+MLEbad6uwZZcAuJHuC
# nbZHnSzVBT1I9dGgRpEmnDGCBxMwggcPAgEBMGowVjELMAkGA1UEBhMCUEwxITAf
# BgNVBAoTGEFzc2VjbyBEYXRhIFN5c3RlbXMgUy5BLjEkMCIGA1UEAxMbQ2VydHVt
# IENvZGUgU2lnbmluZyAyMDIxIENBAhA/LwafXGuInpplxVMGdJYVMAkGBSsOAwIa
# BQCgeDAYBgorBgEEAYI3AgEMMQowCKACgAChAoAAMBkGCSqGSIb3DQEJAzEMBgor
# BgEEAYI3AgEEMBwGCisGAQQBgjcCAQsxDjAMBgorBgEEAYI3AgEVMCMGCSqGSIb3
# DQEJBDEWBBRrGPFoA7/EfMmeCedvJ4HXw3hfcTANBgkqhkiG9w0BAQEFAASCAgBZ
# zC5nJW+H6/nKwCKwPjYs6rBC5jHm+ozQ7Gn+no2u/a9wqGFikrRky5lrb/1QzYHd
# 4HjaUZEYmCT94Q2+40rbLanAJ+uI0nrcxK3cdjOFiCx78A7K01n9klwYOm3EdM85
# je4JtxQD0j9jS3SH3qKbKFhFTM+sPOR5mxzqrz+rJLDLoiplt7kG9AU4NL2512Hg
# ljvI+Gc5HIvZlcicITLArimaZTDZe+ChgkFoqZlS/XbCFwV7EC1W6kV2PzutvNtQ
# Jib6egVhavw+TMOZBwdX8brvAZuRh/mziGVhE4wZFXBPvSW4aTnx7qipBto1pAbN
# EGgaTNJD1nJjSDf01XrQMrOvI0QWG32wD2caAd2b3s0YrtDfSqugOOyugcyCnQOw
# Vsjynj68ZxF17nOZ7gyZJynUF8Fr1Hny2DHst4fgIdAwoFvpXMzP0/Yz9p+P+ZG9
# 9C/hm1NZ5NCMXvKh/cXGPjd0EpTfPjhkV0QANlU0VL1berJLjLIp0YTaY9vQyeFN
# ClGnkbyKDbOp1id1ZRWdf2D//9xM2PpNP88QYwdSEmSF2zTJDq4ywVkbtLol3Aau
# 4XlQpl/o5FG3x7yAUl2OsT3hh5aWBOxVH7BcMjQBz/UMLIiw32RtMMAu8Dm03QF3
# j/TyBlDh6Tmj3Y5V2dd09rmQhqVD4QEUZCUAt17kdqGCBAQwggQABgkqhkiG9w0B
# CQYxggPxMIID7QIBATBrMFYxCzAJBgNVBAYTAlBMMSEwHwYDVQQKExhBc3NlY28g
# RGF0YSBTeXN0ZW1zIFMuQS4xJDAiBgNVBAMTG0NlcnR1bSBUaW1lc3RhbXBpbmcg
# MjAyMSBDQQIRAPFkJYwJtuJ74g4yYI5L9KgwDQYJYIZIAWUDBAICBQCgggFXMBoG
# CSqGSIb3DQEJAzENBgsqhkiG9w0BCRABBDAcBgkqhkiG9w0BCQUxDxcNMjIwNDE0
# MTI0MzA1WjA3BgsqhkiG9w0BCRACLzEoMCYwJDAiBCAbWb/o5XcrrPZDu3mstI6B
# WHhPIcVUrhNHbToaPgXF0zA/BgkqhkiG9w0BCQQxMgQwIaw85+tICtUkYZ2b4puN
# Ay+Di2u1LS961Nzobbk3Nuaw2rSip+FHyexo1e5VZxOHMIGgBgsqhkiG9w0BCRAC
# DDGBkDCBjTCBijCBhwQU0xHGlTEbjOc/1bVTGKzfWYrhmxMwbzBapFgwVjELMAkG
# A1UEBhMCUEwxITAfBgNVBAoTGEFzc2VjbyBEYXRhIFN5c3RlbXMgUy5BLjEkMCIG
# A1UEAxMbQ2VydHVtIFRpbWVzdGFtcGluZyAyMDIxIENBAhEA8WQljAm24nviDjJg
# jkv0qDANBgkqhkiG9w0BAQEFAASCAgCZNYaR3X/JNM0pH3PbKacx4aelCYt1CjJ0
# ilLnH6xSgD0dc+Jl13Bb0wilQ7mo0tM34gyYNLcRckNMxn+Gyz+H/7Axe34rFc8N
# wyb0ehPeCBtvqiYS24kpef3DVHap0wCuZPWacFm55ieOcVQlXbqED3x+0ekISOe9
# v8Rb9WstDSj8ubIT1qhKWLjhooYYtG9betP88dXhAlxX8lKdWdl4DCXOCSSzJtMH
# e1B3AXvVpR9uuIbK/NmFIQlvIZu1OxEvqtCgqE3tVU99secmtwInr10np4j2rhel
# nHITFs3GpDxugD/odxrO25O+ssdkMInVxz9WhvfFFw9NBDMcbL+pcYm9LS4rHax9
# 14+kAHU41ELj4gpQk79awyv/tj68px1nSbslnEEAV+M5DviK4igfl21h2bHs7pnW
# 8trKr0a6Bpp0L/wG8uy4af7rZZ2ngkUO9v1gYlWK1+eq4my8Idhp5rqugxgXFwJD
# f7EdktZg4G1ZnhFNVakf6sKRD/HrNeIqjkg0JtoC23dP7FXDzeVugTKjduw07nCW
# hIIB/HPBzkqo761nzPYfbeyoCxn8Us4droun1DZe9EBeY6liEtg+yWQ4NjDXdPDF
# Nv5QNvSVIC9N4HJJ8RuGSnx0MhAOq1b9RjQ4qHrYYzOVYFCD522dedQJJlsl78aM
# sE1Y7Y+Efw==
# SIG # End signature block