home *** CD-ROM | disk | FTP | other *** search
/ Chip 2008 June / CHIP-2008-06.iso / software / PowerShell / PowerShell_Setup_x86.msi / product.cab / ConfigureWinRM.ps1 < prev    next >
Encoding:
Text File  |  2007-10-29  |  21.8 KB  |  455 lines

  1. ################################################################
  2. #
  3. # Name: Configure-WSMan
  4. #
  5. # Desc: Configures WSMan to enable PowerShell remoting
  6. #
  7. ################################################################
  8.  
  9. param($action, [switch]$force, [switch]$help)
  10. trap { Write-Host -ForeGroundColor Red "Error: $_"; exit 1 }
  11.  
  12. if ($args -contains "-?" -or $args -contains "/?" -or $help)
  13. {
  14. @"
  15. NAME
  16.     Configure-WSMan
  17.  
  18. SYNOPSIS
  19.     Configures WSMan to enable PowerShell remoting
  20.  
  21. SYNTAX
  22.     Configure-WSMan [-action <actionparam>] [-force] [-help]
  23.  
  24. DETAILED DESCRIPTION
  25.     This script configures WSMan service to enable PowerShell
  26.     remoting. The settings are set to a value with which 
  27.     PowerShell remoting can work without any glitches. Its
  28.     generally recommended not to modify these values that this
  29.     script sets by default. 
  30.     The script makes the following modifications in your system:
  31.           - Maximum shells a remote user can launch on this 
  32.             machine = 16
  33.           - Maximum number of users who can connect concurrently 
  34.             to this machine = 5
  35.           - Maximum memory that can be allocated to a remotely 
  36.             lauched shell (any remotely launched PowerShell) = 150 MB
  37.           - Timeout for client to wait for server response = 3 mins
  38.           - Maximum provider requests that a lauched shell in the
  39.             server will support (any remote PowerShell instance
  40.             launched typically has 6 requests) = 400          
  41.           - Maximum connections on the service = 50
  42.           - Creates a HTTP listener that can bind to incoming requests
  43.             from any IP address
  44.           - Opens port 80 and 443 on your system
  45.           - Creates a default WSMan shell for launching PowerShell
  46.             remotely
  47.  
  48. PARAMETERS
  49.     -action
  50.         Allows the user to specify advanced configuration actions
  51.         CreateShell - creates a new WSMan shell
  52.         SetWSManParameter - sets a WSMan parameter
  53.         GetWSManConfig - gets the current WSMan configuration
  54.     -force
  55.         Do not prompt the user, force configure WSMan
  56.     -help
  57.         Show this help information
  58.  
  59. REMARKS
  60.     Do not modify any of the above settings unless you are
  61.     absolutely sure on what those WSMan settings mean.
  62.     Ensure that on Vista/Longhorn you run this script from an 
  63.     elevated PowerShell prompt
  64. "@
  65. exit 1
  66. }
  67.  
  68. #Globals
  69. $Downlevel = "Downlevel"
  70. $Vista = "Vista"
  71.  
  72. #Error Messages
  73. $ErrorMsgs = @{}
  74. $ErrorMsgs += @{ErrorPort80 ="Error opening port 80 on system. `nCheck if the 'Windows Firewall/Internet Connection Sharing (ICS)' service is running using the following command:`n`n`t get-service SharedAccess`n`nIf the service is not running, use the following to start the service:`n`n`t netsh firewall set opmode enable`n "}
  75. $ErrorMsgs += @{ErrorPort443 = "Error opening port 443 on system.`nCheck if the 'Windows Firewall/Internet Connection Sharing (ICS)' service is running using the following command:`n`n`t get-service SharedAccess`n`nIf the service is not running, use the following to start the service:`n`n`t netsh firewall set opmode enable`n "}
  76. $ErrorMsgs += @{
  77.     ErrorRestore = "Error restoring default WSMan configuration. Exiting"
  78.     ErrorMaxShellsPerUser = "Error Setting MaxShellsPerUser"
  79.     ErrorMaxConcurrentUsers = "Error setting MaxConcurrentUsers"
  80.     ErrorMaxMemoryPerShellMB = "Error setting MaxMemoryPerShellMB"
  81.     ErrorMaxTimeoutms = "Error setting MaxTimeoutms"
  82.     ErrorMaxProviderRequests = "Error setting MaxProviderRequests"
  83.     ErrorMaxConnections = "Error setting MaxConnections"
  84.     ErrorCreateListener = "Error creating HTTP listener"
  85.     ErrorCreateCustomShell = "Error creating PowerShell custom shell on WSMan"
  86. }
  87.  
  88. $commands =@(
  89.     "winrm set winrm/config/winrs `'@{MaxShellsPerUser=`"16`"}`'", 
  90.     "winrm set winrm/config/winrs `'@{MaxConcurrentUsers=`"5`"}`'",
  91.     "winrm set winrm/config/winrs `'@{MaxMemoryPerShellMB=`"150`"}`'",
  92.     "winrm set winrm/config `'@{MaxTimeoutms=`"180000`"}`'" ,
  93.     "winrm set winrm/config `'@{MaxProviderRequests=`"400`"}`'", 
  94.     "winrm set winrm/config/Service `'@{MaxConnections=`"50`"}`'", 
  95.     "winrm create winrm/config/Listener?Address=*+Transport=HTTP" 
  96. )
  97.  
  98. $commanderrors = @(
  99.     $ErrorMsgs["ErrorMaxShellsPerUser"],
  100.     $ErrorMsgs["ErrorConcurrnetUsers"],
  101.     $ErrorMsgs["ErrorMaxMemoryPerShellMB"],
  102.     $ErrorMsgs["ErrorMaxTimeoutms"],
  103.     $ErrorMsgs["ErrorMaxProviderRequests"],
  104.     $ErrorMsgs["ErrorMaxConnections"],
  105.     $ErrorMsgs["ErrorCreateListener"]
  106. )
  107.  
  108.  
  109. # Write-Message
  110. function Write-Message($msg)
  111. {
  112.     Write-Host -ForegroundColor Yellow $msg
  113. }
  114.  
  115. #write-error
  116. function Write-Error($msg)
  117. {
  118.     Write-Host -ForegroundColor Red $msg
  119. }
  120.  
  121. #function fixhash
  122. function fixhash ($h)
  123. {
  124.     $c=0
  125.    @('@{') +
  126.         $(foreach ($k in $h.get_keys())
  127.         { 
  128.             if ($c++) {';'}
  129.             "$k="
  130.            "`"$($h[$k])`""
  131.         }
  132.     ) +
  133.     "}"
  134. }
  135.  
  136. #Check-Error
  137. function Check-Error ($msg)
  138. {
  139.     if ($lastExitCode -ne 0){
  140.         Write-Error $msg
  141.     }
  142. }
  143.  
  144. #Create-Shell
  145. function Create-Shell
  146. {
  147.     Write-Host -noNewLine "Enter name for Shell (ex: Microsoft.PowerShell) : "
  148.     $name = Read-Host
  149.     Write-Host -noNewLine "Enter full path to server executable`n(ex: c:\windows\system32\WindowsPowerShell\v1.0\PowerShell.exe): "
  150.     $path = Read-Host
  151.     Write-Host -noNewLine "Enter arguments to server executable (optional)`n(ex: -s -nologo): "
  152.     $arguments = Read-Host
  153.     $fixhashparam = @('@{') + $("Shell=" 
  154.                                 "`"$path`"" 
  155.                                 ';' 
  156.                                 "Arguments=" 
  157.                                 "`"$arguments`"" 
  158.                                 ) + "}"
  159.     winrm create winrm/config/winrs/customremoteshell?uri=http://schemas.microsoft.com/wbem/winrm/1/windows/shell/$name $fixhashparam | out-null
  160.     Check-Error $ErrorMsgs["ErrorCreateCustomShell"]
  161. }
  162.  
  163. #Set winrm parameters
  164. function Set-winrmParameter
  165. {
  166.     $paramname = $args[0]
  167.     $value = $args[1]
  168.  
  169.     $i = -1
  170.     if ($paramname -ieq "maxshellsperuser"){$i = 0}
  171.     if ($paramname -ieq "maxconcurrentusers"){$i = 1}
  172.     if ($paramname -ieq "maxmemorypershellmb"){$i = 2}
  173.     if ($paramname -ieq "maxtimeoutms"){$i = 3}
  174.     if ($paramname -ieq "maxproviderrequests"){$i = 4}
  175.     if ($paramname -ieq "maxconnections"){$i = 5}
  176.     
  177.     if ($i -eq -1){
  178.         Write-Error "Specified parameter:$paramname is either not valid or cannot be modified"
  179.         exit 1
  180.     }
  181.  
  182.     $command = $commands[$i] -replace "[0-9]+", $value
  183.     Invoke-Expression $command > $null
  184.     Check-Error $commanderrors[$i]    
  185. }
  186.  
  187. #Detect the OS version. Installable varies as per the OS version
  188. $version = [system.environment]::OSVersion.Version
  189. $majorversion = $version.Major
  190. if ($majorversion -lt 6){
  191.    $os = $Downlevel
  192. }
  193. else{
  194.    $os = $vista
  195. }
  196.  
  197. #Check if elevated in case of Vista
  198. if ($os -eq $vista -and !$force){
  199.     #check if user is running elevated
  200.     $id = [System.Security.Principal.WindowsIdentity]::GetCurrent()
  201.     $p = New-Object System.Security.Principal.WindowsPrincipal($id)
  202.  
  203.     if (!$p.IsInRole([System.Security.Principal.WindowsBuiltInRole]::Administrator)){
  204.  
  205.         Write-Error "Configuration on Vista requires that user is elevated. Try Configuration from an elevated prompt"
  206.         exit 1
  207.     }
  208. }
  209.  
  210. #check if winrm service is installed before configuring
  211. if (!(Test-Path HKLM:\SYSTEM\CurrentControlSet\Services\winrm)){
  212.     Write-Error "winrm service is not installed"
  213.     exit 1
  214. }
  215.  
  216. if ($action -match "CreateShell"){
  217.     Create-Shell
  218.     exit 1
  219. }
  220. elseif ($action -match "SetWSManParameter"){
  221.     $WSManparam = Read-Host -prompt "Enter parameter to set"
  222.     $WSManparamvalue = Read-Host -prompt "Enter value"
  223.     Set-WinRMParameter $WSManparam $WSManparamvalue
  224. }
  225. elseif ($action -match "GetWSManConfig"){
  226.     winrm get winrm/config
  227. }
  228. elseif ($action -eq $null){
  229.  
  230.     Write-Message "Configuring WSMan"
  231.     winrm invoke restore winrm/config | out-null
  232.  
  233.     if ($lastexitcode -ne 0){
  234.         Write-Error $ErrorMsgs["ErrorRestore"]
  235.         exit 1
  236.     }
  237.  
  238.     for($i=0; $i -lt $commands.length; $i++){
  239.         Invoke-Expression $commands[$i] | out-null
  240.         Check-Error $commanderrors[$i]
  241.     }
  242.  
  243.     winrm create winrm/config/winrs/customremoteshell?uri=http://schemas.microsoft.com/wbem/wsman/1/windows/shell/Microsoft.PowerShell (fixhash @{Shell="$env:windir\system32\windowspowershell\v1.0\powershell.exe";Arguments="-s -nologo"}) | out-null
  244.     Check-Error $ErrorMsgs["ErrorCreateCustomShell"]
  245.     Write-Message "Configuring WSMan Complete"    
  246.  
  247.     #open network ports as necessary
  248.     Write-Message "Opening port 80 and port 443"
  249.     netsh firewall set portopening TCP 80 HTTP |  out-null 
  250.     Check-Error $ErrorMsgs["ErrorPort80"]
  251.     netsh firewall set portopening TCP 443 HTTPS | out-null
  252.     Check-Error $ErrorMsgs["ErrorPort443"]
  253. }
  254. else{
  255.     Write-Error "Argument $action is not supported"
  256. }
  257.  
  258.  
  259. # SIG # Begin signature block
  260. # MIIkOQYJKoZIhvcNAQcCoIIkKjCCJCYCAQExCzAJBgUrDgMCGgUAMGkGCisGAQQB
  261. # gjcCAQSgWzBZMDQGCisGAQQBgjcCAR4wJgIDAQAABBAfzDtgWUsITrck0sYpfvNR
  262. # AgEAAgEAAgEAAgEAAgEAMCEwCQYFKw4DAhoFAAQUYKlqhAlmtu+VBY1YW8CPVuGX
  263. # 9J+ggh7hMIIEEjCCAvqgAwIBAgIPAMEAizw8iBHRPvZj7N9AMA0GCSqGSIb3DQEB
  264. # BAUAMHAxKzApBgNVBAsTIkNvcHlyaWdodCAoYykgMTk5NyBNaWNyb3NvZnQgQ29y
  265. # cC4xHjAcBgNVBAsTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEhMB8GA1UEAxMYTWlj
  266. # cm9zb2Z0IFJvb3QgQXV0aG9yaXR5MB4XDTk3MDExMDA3MDAwMFoXDTIwMTIzMTA3
  267. # MDAwMFowcDErMCkGA1UECxMiQ29weXJpZ2h0IChjKSAxOTk3IE1pY3Jvc29mdCBD
  268. # b3JwLjEeMBwGA1UECxMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSEwHwYDVQQDExhN
  269. # aWNyb3NvZnQgUm9vdCBBdXRob3JpdHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw
  270. # ggEKAoIBAQCpAr3BcOY78k4bKJ+XeF4w6qKpjSVf+P6VTKO3/p2iID58UaKboo9g
  271. # MmvRQmR57qx2yVTa8uuchhyPn4Rms8VremIj1h083g8BkuiWxL8tZpqaaCaZ0Dos
  272. # vwy1WCbBRucKPjiWLKkoOajsSYNC44QPu5psVWGsgnyhYC13TOmZtGQ7mlAcMQgk
  273. # FJ+p55ErGOY9mGMUYFgFZZ8dN1KH96fvlALGG9O/VUWziYC/OuxUlE6u/ad6bXRO
  274. # rxjMlgkoIQBXkGBpN7tLEgc8Vv9b+6RmCgim0oFWV++2O14WgXcE2va+roCV/rDN
  275. # f9anGnJcPMq88AijIjCzBoXJsyB3E4XfAgMBAAGjgagwgaUwgaIGA1UdAQSBmjCB
  276. # l4AQW9Bw72lyniNRfhSyTY7/y6FyMHAxKzApBgNVBAsTIkNvcHlyaWdodCAoYykg
  277. # MTk5NyBNaWNyb3NvZnQgQ29ycC4xHjAcBgNVBAsTFU1pY3Jvc29mdCBDb3Jwb3Jh
  278. # dGlvbjEhMB8GA1UEAxMYTWljcm9zb2Z0IFJvb3QgQXV0aG9yaXR5gg8AwQCLPDyI
  279. # EdE+9mPs30AwDQYJKoZIhvcNAQEEBQADggEBAJXoC8CN85cYNe24ASTYdxHzXGAy
  280. # n54Lyz4FkYiPyTrmIfLwV5MstaBHyGLv/NfMOztaqTZUaf4kbT/JzKreBXzdMY09
  281. # nxBwarv+Ek8YacD80EPjEVogT+pie6+qGcgrNyUtvmWhEoolD2Oj91Qc+SHJ1hXz
  282. # UqxuQzIH/YIX+OVnbA1R9r3xUse958Qw/CAxCYgdlSkaTdUdAqXxgOADtFv0sd3I
  283. # V+5lScdSVLa0AygS/5DW8AiPfriXxas3LOR65Kh343agANBqP8HSNorgQRKoNWob
  284. # ats14dQcBOSoRQTIWjM4bk0cDWK3CqKM09VUP0bNHFWmcNsSOoeTdZ+n0qAwggQS
  285. # MIIC+qADAgECAg8AwQCLPDyIEdE+9mPs30AwDQYJKoZIhvcNAQEEBQAwcDErMCkG
  286. # A1UECxMiQ29weXJpZ2h0IChjKSAxOTk3IE1pY3Jvc29mdCBDb3JwLjEeMBwGA1UE
  287. # CxMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSEwHwYDVQQDExhNaWNyb3NvZnQgUm9v
  288. # dCBBdXRob3JpdHkwHhcNOTcwMTEwMDcwMDAwWhcNMjAxMjMxMDcwMDAwWjBwMSsw
  289. # KQYDVQQLEyJDb3B5cmlnaHQgKGMpIDE5OTcgTWljcm9zb2Z0IENvcnAuMR4wHAYD
  290. # VQQLExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xITAfBgNVBAMTGE1pY3Jvc29mdCBS
  291. # b290IEF1dGhvcml0eTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKkC
  292. # vcFw5jvyThson5d4XjDqoqmNJV/4/pVMo7f+naIgPnxRopuij2Aya9FCZHnurHbJ
  293. # VNry65yGHI+fhGazxWt6YiPWHTzeDwGS6JbEvy1mmppoJpnQOiy/DLVYJsFG5wo+
  294. # OJYsqSg5qOxJg0LjhA+7mmxVYayCfKFgLXdM6Zm0ZDuaUBwxCCQUn6nnkSsY5j2Y
  295. # YxRgWAVlnx03Uof3p++UAsYb079VRbOJgL867FSUTq79p3ptdE6vGMyWCSghAFeQ
  296. # YGk3u0sSBzxW/1v7pGYKCKbSgVZX77Y7XhaBdwTa9r6ugJX+sM1/1qcaclw8yrzw
  297. # CKMiMLMGhcmzIHcThd8CAwEAAaOBqDCBpTCBogYDVR0BBIGaMIGXgBBb0HDvaXKe
  298. # I1F+FLJNjv/LoXIwcDErMCkGA1UECxMiQ29weXJpZ2h0IChjKSAxOTk3IE1pY3Jv
  299. # c29mdCBDb3JwLjEeMBwGA1UECxMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSEwHwYD
  300. # VQQDExhNaWNyb3NvZnQgUm9vdCBBdXRob3JpdHmCDwDBAIs8PIgR0T72Y+zfQDAN
  301. # BgkqhkiG9w0BAQQFAAOCAQEAlegLwI3zlxg17bgBJNh3EfNcYDKfngvLPgWRiI/J
  302. # OuYh8vBXkyy1oEfIYu/818w7O1qpNlRp/iRtP8nMqt4FfN0xjT2fEHBqu/4STxhp
  303. # wPzQQ+MRWiBP6mJ7r6oZyCs3JS2+ZaESiiUPY6P3VBz5IcnWFfNSrG5DMgf9ghf4
  304. # 5WdsDVH2vfFSx73nxDD8IDEJiB2VKRpN1R0CpfGA4AO0W/Sx3chX7mVJx1JUtrQD
  305. # KBL/kNbwCI9+uJfFqzcs5HrkqHfjdqAA0Go/wdI2iuBBEqg1ahtq2zXh1BwE5KhF
  306. # BMhaMzhuTRwNYrcKoozT1VQ/Rs0cVaZw2xI6h5N1n6fSoDCCBGAwggNMoAMCAQIC
  307. # Ci6rEdxQ/1ydy8AwCQYFKw4DAh0FADBwMSswKQYDVQQLEyJDb3B5cmlnaHQgKGMp
  308. # IDE5OTcgTWljcm9zb2Z0IENvcnAuMR4wHAYDVQQLExVNaWNyb3NvZnQgQ29ycG9y
  309. # YXRpb24xITAfBgNVBAMTGE1pY3Jvc29mdCBSb290IEF1dGhvcml0eTAeFw0wNzA4
  310. # MjIyMjMxMDJaFw0xMjA4MjUwNzAwMDBaMHkxCzAJBgNVBAYTAlVTMRMwEQYDVQQI
  311. # EwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3Nv
  312. # ZnQgQ29ycG9yYXRpb24xIzAhBgNVBAMTGk1pY3Jvc29mdCBDb2RlIFNpZ25pbmcg
  313. # UENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAt3l91l2zRTmoNKwx
  314. # 2vklNUl3wPsfnsdFce/RRujUjMNrTFJi9JkCw03YSWwvJD5lv84jtwtIt3913UW9
  315. # qo8OUMUlK/Kg5w0jH9FBJPpimc8ZRaWTSh+ZzbMvIsNKLXxv2RUeO4w5EDndvSn0
  316. # ZjstATL//idIprVsAYec+7qyY3+C+VyggYSFjrDyuJSjzzimUIUXJ4dO3TD2AD30
  317. # xvk9gb6G7Ww5py409rQurwp9YpF4ZpyYcw2Gr/LE8yC5TxKNY8ss2TJFGe67SpY7
  318. # UFMYzmZReaqth8hWPp+CUIhuBbE1wXskvVJmPZlOzCt+M26ERwbRntBKhgJuhgCk
  319. # wIffUwIDAQABo4H6MIH3MBMGA1UdJQQMMAoGCCsGAQUFBwMDMIGiBgNVHQEEgZow
  320. # gZeAEFvQcO9pcp4jUX4Usk2O/8uhcjBwMSswKQYDVQQLEyJDb3B5cmlnaHQgKGMp
  321. # IDE5OTcgTWljcm9zb2Z0IENvcnAuMR4wHAYDVQQLExVNaWNyb3NvZnQgQ29ycG9y
  322. # YXRpb24xITAfBgNVBAMTGE1pY3Jvc29mdCBSb290IEF1dGhvcml0eYIPAMEAizw8
  323. # iBHRPvZj7N9AMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFMwdznYAcFuv8drE
  324. # TppRRC6jRGPwMAsGA1UdDwQEAwIBhjAJBgUrDgMCHQUAA4IBAQB7q65+SibyzrxO
  325. # dKJYJ3QqdbOG/atMlHgATenK6xjcacUOonzzAkPGyofM+FPMwp+9Vm/wY0SpRADu
  326. # lsia1Ry4C58ZDZTX2h6tKX3v7aZzrI/eOY49mGq8OG3SiK8j/d/p1mkJkYi9/uEA
  327. # uzTz93z5EBIuBesplpNCayhxtziP4AcNyV1ozb2AQWtmqLu3u440yvIDEHx69dLg
  328. # Qt97/uHhrP7239UNs3DWkuNPtjiifC3UPds0C2I3Ap+BaiOJ9lxjj7BauznXYIxV
  329. # hBoz9TuYoIIMol+Lsyy3oaXLq9ogtr8wGYUgFA0qvFL0QeBeMOOSKGmHwXDi86er
  330. # zoBCcnYOMIIEajCCA1KgAwIBAgIKYQ94TQAAAAAAAzANBgkqhkiG9w0BAQUFADB5
  331. # MQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVk
  332. # bW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSMwIQYDVQQDExpN
  333. # aWNyb3NvZnQgQ29kZSBTaWduaW5nIFBDQTAeFw0wNzA4MjMwMDIzMTNaFw0wOTAy
  334. # MjMwMDMzMTNaMHQxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAw
  335. # DgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24x
  336. # HjAcBgNVBAMTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjCCASIwDQYJKoZIhvcNAQEB
  337. # BQADggEPADCCAQoCggEBAKLbCo3PwsFJm82qOjStI1lr22y+ISK3lMjqrr/G1SbC
  338. # MhGLvNpdLPs2Vh4VK66PDd0Uo24oTH8WP0GsjUCxRogN2YGUrZcG0FdEdlzq8fwO
  339. # 4n90ozPLdOXv42GhfgO3Rf/VPhLVsMpeDdB78rcTDfxgaiiFdYy3rbyF6Be0kL71
  340. # FrZiXe0R3zruIVuLr4Bzw0XjlYl3YJvnrXfBN40zFC8T22LJrhqpT5hnrdQgOTBx
  341. # 4I1nRuLGHPQNUHRBL+gFJGoha0mwksSyOcdCpW1cGEqrj9eOgz54CkfYpLKEI8Pi
  342. # 8ntmsUp0vSZBS5xhFGBOMMiC89ALcHzuVU130ghVdoECAwEAAaOB+DCB9TAOBgNV
  343. # HQ8BAf8EBAMCBsAwHQYDVR0OBBYEFPMhQI58UfhUS5jlF9dqgzQFLiboMBMGA1Ud
  344. # JQQMMAoGCCsGAQUFBwMDMB8GA1UdIwQYMBaAFMwdznYAcFuv8drETppRRC6jRGPw
  345. # MEQGA1UdHwQ9MDswOaA3oDWGM2h0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9wa2kv
  346. # Y3JsL3Byb2R1Y3RzL0NTUENBLmNybDBIBggrBgEFBQcBAQQ8MDowOAYIKwYBBQUH
  347. # MAKGLGh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2kvY2VydHMvQ1NQQ0EuY3J0
  348. # MA0GCSqGSIb3DQEBBQUAA4IBAQBAV29TZ54ggzQBDuYXSzyt69iBf+4NeXR3T5dH
  349. # GPMAFWl+22KQov1noZzkKCn6VdeZ/lC/XgmzuabtgvOYHm9Z+vXx4QzTiwg+Fhcg
  350. # 0cC1RUcIJmBXCUuU8AjMuk1u8OJIEig1iyFy31+2r2kSJJTu6TQJ235ub5IKUsoq
  351. # TEmqMiyG6KHMXSa8vDzgW7KDC7o1HE+ERUf/u5ShWQeplt14vVd/padOzPKtnJpB
  352. # 4stcJD7cfzRHTvbPyHud67bJnGMUU6+tmu/Xv8+goauVynorhyzAx9n8bAPavzit
  353. # 8dFcGRcPwPfKgKYQCBrdkCPnsKFMPuqwESZ4DsEsuaRrx488MIIEnTCCA4WgAwIB
  354. # AgIKYUdSugAAAAAABDANBgkqhkiG9w0BAQUFADB5MQswCQYDVQQGEwJVUzETMBEG
  355. # A1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWlj
  356. # cm9zb2Z0IENvcnBvcmF0aW9uMSMwIQYDVQQDExpNaWNyb3NvZnQgVGltZXN0YW1w
  357. # aW5nIFBDQTAeFw0wNjA5MTYwMTUzMDBaFw0xMTA5MTYwMjAzMDBaMIGmMQswCQYD
  358. # VQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEe
  359. # MBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMScwJQYDVQQLEx5uQ2lwaGVy
  360. # IERTRSBFU046RDhBOS1DRkNDLTU3OUMxJzAlBgNVBAMTHk1pY3Jvc29mdCBUaW1l
  361. # c3RhbXBpbmcgU2VydmljZTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
  362. # AJtt3IZR6DI7NzqWJbLPb+5htUHSGDtanXhnuvgf2QhVkoh+40FT+uwoVP612v5w
  363. # O5UnSH5DoDIvJoFK8gJ2d8jJqfiiIVh+Db0B2iTG/kQRBTU6AajqVAozLIfSfkGz
  364. # 6AnZsL7jmSWmvCXt19OO2/S3bRtJC+bTw4du7kbJf/Nt6+eDHqhTRj/KJH7mfMks
  365. # +3kUKEXATzZrUxqnhrPn/OHBn1EJ27ylu/7Khwn2tzIZvuFKUby8fKwslWqXc+py
  366. # V6Gci4bYm71L/CczwW0yrOBoGNhuOi4iQ9H5j+3xAAENZMDJo90P8cjpVMoR/9x4
  367. # KT4drFjA29+q3K5lG9OdvGcCAwEAAaOB+DCB9TAdBgNVHQ4EFgQUTxiJitLKAHjG
  368. # 7FkND/18xMEigN4wHwYDVR0jBBgwFoAUb+hOP5e5NKtLho+8nOqsO0FDxtAwRAYD
  369. # VR0fBD0wOzA5oDegNYYzaHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraS9jcmwv
  370. # cHJvZHVjdHMvdHNwY2EuY3JsMEgGCCsGAQUFBwEBBDwwOjA4BggrBgEFBQcwAoYs
  371. # aHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3BraS9jZXJ0cy90c3BjYS5jcnQwEwYD
  372. # VR0lBAwwCgYIKwYBBQUHAwgwDgYDVR0PAQH/BAQDAgbAMA0GCSqGSIb3DQEBBQUA
  373. # A4IBAQA3Jx71jEDg9mUmPmTEkLw+41eF3UMNQIRnvoeoKtrctDYgmI4zfC5f4FB7
  374. # YTHzGhPehL3qaRxYfLMbk+EIJ4FFttRwyhS3X7pX6dRe0DtDqrc/ttphi3HP1H3V
  375. # e26/tMpaMJHf2goOozWfJWFOwDJ0K3oGlHIArBidS+WeK8U6VKykYNin95t/2alt
  376. # 7URrutzgEvrwrYcMlWMKMh6JTszMfqc3pf5f2Gf6RkvRbR2nfdK+Av/zboLzh3TE
  377. # aeW5cMxLZaMHNalEnoR9OW7+FAW9GlAhtT6f83ccj8KanVfhaX1p6IPPAm8qIrs3
  378. # Mzpy+tYwHZGt9lAa6xPeOsW3XM2zMIIEnTCCA4WgAwIBAgIKYUl87QAAAAAABTAN
  379. # BgkqhkiG9w0BAQUFADB5MQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3Rv
  380. # bjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0
  381. # aW9uMSMwIQYDVQQDExpNaWNyb3NvZnQgVGltZXN0YW1waW5nIFBDQTAeFw0wNjA5
  382. # MTYwMTU1MjJaFw0xMTA5MTYwMjA1MjJaMIGmMQswCQYDVQQGEwJVUzETMBEGA1UE
  383. # CBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9z
  384. # b2Z0IENvcnBvcmF0aW9uMScwJQYDVQQLEx5uQ2lwaGVyIERTRSBFU046MTBEOC01
  385. # ODQ3LUNCRjgxJzAlBgNVBAMTHk1pY3Jvc29mdCBUaW1lc3RhbXBpbmcgU2Vydmlj
  386. # ZTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOq6BWPI2XmuhEQ+pbPE
  387. # 7UyeJN85dh4J1jJKWHjSK9mlB5Dv5z37vSZ8o/vlfX4yz9k9izk38vjYOzQW1JKC
  388. # +zTsaIVyGo/guEzguIXzMwoCwaJ2czVMXfG34Up9HbiUeNv/HoUVQkZxzn8nVxLR
  389. # g087z/re9ovtPwDj1d5h+ReNS6SBPPVpQOrhib8HT7p0e+kM5Ufqq2zx1WeBCPgW
  390. # yn0Tu3PiCUz6YvvtoDmaOv7rEchhHmJY2ApUg9U7S0viVb0vYBqOkgVD2l3rggoj
  391. # lwmgBTFli5NOHkEhopKQ/UVERW81sUU3rWmpZfk0Q7EXwjs54RCM8hqH41RQHzud
  392. # Ma0CAwEAAaOB+DCB9TAdBgNVHQ4EFgQUfnLwLj9WKeAl92i4AfxL4X7P4z4wHwYD
  393. # VR0jBBgwFoAUb+hOP5e5NKtLho+8nOqsO0FDxtAwRAYDVR0fBD0wOzA5oDegNYYz
  394. # aHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraS9jcmwvcHJvZHVjdHMvdHNwY2Eu
  395. # Y3JsMEgGCCsGAQUFBwEBBDwwOjA4BggrBgEFBQcwAoYsaHR0cDovL3d3dy5taWNy
  396. # b3NvZnQuY29tL3BraS9jZXJ0cy90c3BjYS5jcnQwEwYDVR0lBAwwCgYIKwYBBQUH
  397. # AwgwDgYDVR0PAQH/BAQDAgbAMA0GCSqGSIb3DQEBBQUAA4IBAQBpeoIJDBbR3s9G
  398. # iS6/0TR6gX8nKEEq89Mhkg6XrV9TXin57cFUSqh99xPQCxT5TfKGFQBu44MdKEWn
  399. # LDky3W+aN1ruI1KPVAONP6ecZDj2NsgUQ7Y6PpjJDcNxgSjzZqcx4lxdj/lSUuFc
  400. # 65OQnWkJTInR0XZMNA1q4XxEpytbg1R/RSQZJcSKRsUl4xmAaSkU9hfG8CIsgUZe
  401. # K/T5psZ3PiNv+aZkhY6iYg2pLR6o5ZA+f/+wjvyX7PH9BK/NSc5adKz68xMfGznO
  402. # o7TWvPS07sit8lYe+zzxyNYqRLy/nD99ZhjNsiBjCspAPWUyGXyyuD3BJkhOIhmZ
  403. # bowwwfGRMIIEnTCCA4WgAwIBAgIQaguZT8AAJasR20UfWHpnojANBgkqhkiG9w0B
  404. # AQUFADBwMSswKQYDVQQLEyJDb3B5cmlnaHQgKGMpIDE5OTcgTWljcm9zb2Z0IENv
  405. # cnAuMR4wHAYDVQQLExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xITAfBgNVBAMTGE1p
  406. # Y3Jvc29mdCBSb290IEF1dGhvcml0eTAeFw0wNjA5MTYwMTA0NDdaFw0xOTA5MTUw
  407. # NzAwMDBaMHkxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYD
  408. # VQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xIzAh
  409. # BgNVBAMTGk1pY3Jvc29mdCBUaW1lc3RhbXBpbmcgUENBMIIBIjANBgkqhkiG9w0B
  410. # AQEFAAOCAQ8AMIIBCgKCAQEA3Ddu+6/IQkpxGMjOSD5TwPqrFLosMrsST1LIg+0+
  411. # M9lJMZIotpFk4B9QhLrCS9F/Bfjvdb6Lx6jVrmlwZngnZui2t++Fuc3uqv0SpAtZ
  412. # Iikvz0DZVgQbdrVtZG1KVNvd8d6/n4PHgN9/TAI3lPXAnghWHmhHzdnAdlwvfbYl
  413. # BLRWW2ocY/+AfDzu1QQlTTl3dAddwlzYhjcsdckO6h45CXx2/p1sbnrg7D6Pl55x
  414. # Dl8qTxhiYDKe0oNOKyJcaEWL3i+EEFCy+bUajWzuJZsT+MsQ14UO9IJ2czbGlXqi
  415. # zGAG7AWwhjO3+JRbhEGEWIWUbrAfLEjMb5xD4GrofyaOawIDAQABo4IBKDCCASQw
  416. # EwYDVR0lBAwwCgYIKwYBBQUHAwgwgaIGA1UdAQSBmjCBl4AQW9Bw72lyniNRfhSy
  417. # TY7/y6FyMHAxKzApBgNVBAsTIkNvcHlyaWdodCAoYykgMTk5NyBNaWNyb3NvZnQg
  418. # Q29ycC4xHjAcBgNVBAsTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEhMB8GA1UEAxMY
  419. # TWljcm9zb2Z0IFJvb3QgQXV0aG9yaXR5gg8AwQCLPDyIEdE+9mPs30AwEAYJKwYB
  420. # BAGCNxUBBAMCAQAwHQYDVR0OBBYEFG/oTj+XuTSrS4aPvJzqrDtBQ8bQMBkGCSsG
  421. # AQQBgjcUAgQMHgoAUwB1AGIAQwBBMAsGA1UdDwQEAwIBhjAPBgNVHRMBAf8EBTAD
  422. # AQH/MA0GCSqGSIb3DQEBBQUAA4IBAQCUTRExwnxQuxGOoWEHAQ6McEWN73NUvT8J
  423. # BS3/uFFThRztOZG3o1YL3oy2OxvR+6ynybexUSEbbwhpfmsDoiJG7Wy0bXwiuEbT
  424. # hPOND74HijbB637pcF1Fn5LSzM7djsDhvyrNfOzJrjLVh7nLY8Q20Rghv3beO5qz
  425. # G3OeIYjYtLQSVIz0nMJlSpooJpxgig87xxNleEi7z62DOk+wYljeMOnpOR3jifLa
  426. # OYH5EyGMZIBjBgSW8poCQy97Roi6/wLZZflK3toDdJOzBW4MzJ3cKGF8SPEXnBEh
  427. # OAIch6wGxZYyuOVAxlM9vamJ3uhmN430IpaczLB3VFE61nJEsiP2MYIEwjCCBL4C
  428. # AQEwgYcweTELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNV
  429. # BAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEjMCEG
  430. # A1UEAxMaTWljcm9zb2Z0IENvZGUgU2lnbmluZyBQQ0ECCmEPeE0AAAAAAAMwCQYF
  431. # Kw4DAhoFAKCB7TAZBgkqhkiG9w0BCQMxDAYKKwYBBAGCNwIBBDAcBgorBgEEAYI3
  432. # AgELMQ4wDAYKKwYBBAGCNwIBFTAjBgkqhkiG9w0BCQQxFgQUspug6nZ2NYVub6iy
  433. # CAbkiZVztbIwgYwGCisGAQQBgjcCAQwxfjB8oFKAUABNAGkAYwByAG8AcwBvAGYA
  434. # dAAgAEMAbwByAHAAbwByAGEAdABpAG8AbgAgAFcAaQBuAGQAbwB3AHMAIABQAG8A
  435. # dwBlAHIAUwBoAGUAbABsoSaAJGh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wb3dl
  436. # cnNoZWxsIDANBgkqhkiG9w0BAQEFAASCAQCMcZymGHSL8EvwrCXt3K049qlwXZvE
  437. # X1MHuN86JF5+r7QXv66HnuTxQburdfRF69/TOflDn0Icjs0A5T6aNRJYgMt2lZ+k
  438. # jxKH01SlcAzSDMCdf5/sKSCPskH2sGvtitFrr3hJQkN0f2ydEx47bCTeY2aCVwwV
  439. # 89TsN6pcl7e/Xrndl8Y2ZTP/rfxmx70PIWQmF7BLvZ5qG16/y1gfXw7LGZBo+bmy
  440. # ucTUgHNPWaBmg2Rg+AM0vMqkJP97bUQeZCEZzgEGfsh2jjycrwGgbooamdPGC1Ke
  441. # +vQcF9Nxih2XFVykt7L9PsIM+kKuAqZD1LyuKAQQkAyfmg4bWYNMlpJJoYICHzCC
  442. # AhsGCSqGSIb3DQEJBjGCAgwwggIIAgEBMIGHMHkxCzAJBgNVBAYTAlVTMRMwEQYD
  443. # VQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNy
  444. # b3NvZnQgQ29ycG9yYXRpb24xIzAhBgNVBAMTGk1pY3Jvc29mdCBUaW1lc3RhbXBp
  445. # bmcgUENBAgphSXztAAAAAAAFMAcGBSsOAwIaoF0wGAYJKoZIhvcNAQkDMQsGCSqG
  446. # SIb3DQEHATAcBgkqhkiG9w0BCQUxDxcNMDcxMDMwMDE0NTU0WjAjBgkqhkiG9w0B
  447. # CQQxFgQUZ+mIozcaeB+1xNmSz8ufcuHI93owDQYJKoZIhvcNAQEFBQAEggEApK/2
  448. # dWS+XRdvo5DdXKVY1TdqvA1npnSNmyiDvFdIQ+rk7uf6POZqqWyTUFRQUA931A3d
  449. # O2d2ugpkDzZFiv2+2DNu80u0Tasg135g9hYOHjcb+leI0xz+EjefFplDTGbzWT0V
  450. # /lDgn27invVNGwg/TUqesQjmnqLV0X/ziNjjESMtJV4g22KZRy8+tZNmto5RAc0Z
  451. # SvlEBa/val8BNpfMlE4PBbacT4lplt6tPYkuVN7G0N+V7a0WiJU6LG9omN+z7a1r
  452. # FKsQtpYn2iKiuDp6jsFKOVAfgWXdYzZWrNzHSZuiwzuXQ+Y5gSUrGIpteDHWtAUH
  453. # hH5/h7xZ6NZilHWnag==
  454. # SIG # End signature block
  455.