ShowLicense.ps1
<# (c) Copyright 2017-2020 Hewlett Packard Enterprise Development LP #> Add-Type @' public class AsyncPipeline { public System.Management.Automation.PowerShell Pipeline ; public System.IAsyncResult AsyncResult ; } '@ function Create-HPESysInfoThreadPool { [Cmdletbinding()] Param ( [Parameter(Position=0,Mandatory=$true)][int]$PoolSize, [Parameter(Position=1,Mandatory=$False)][Switch]$MTA ) $pool = [RunspaceFactory]::CreateRunspacePool(1, $PoolSize) If(!$MTA) { $pool.ApartmentState = 'STA' } $pool.Open() return $pool } function Start-HPESysInfoThreadScriptBlock { [Cmdletbinding()] Param ( [Parameter(Position=0,Mandatory=$True)]$ThreadPool, [Parameter(Position=1,Mandatory=$True)][ScriptBlock]$ScriptBlock, [Parameter(Position=2,Mandatory=$False)][Object[]]$Parameters ) $Pipeline = [System.Management.Automation.PowerShell]::Create() $Pipeline.RunspacePool = $ThreadPool $Pipeline.AddScript($ScriptBlock) | Out-Null Foreach($Arg in $Parameters) { $Pipeline.AddArgument($Arg) | Out-Null } $AsyncResult = $Pipeline.BeginInvoke() $Output = New-Object AsyncPipeline $Output.Pipeline = $Pipeline $Output.AsyncResult = $AsyncResult $Output } function Get-HPESysInfoThreadPipelines { [Cmdletbinding()] Param ( [Parameter(Position=0,Mandatory=$True)][AsyncPipeline[]]$Pipelines, [Parameter(Position=1,Mandatory=$false)][Switch]$ShowProgress ) # incrementing for Write-Progress $i = 1 foreach($Pipeline in $Pipelines) { try { $Pipeline.Pipeline.EndInvoke($Pipeline.AsyncResult) If($Pipeline.Pipeline.Streams.Error) { Throw $Pipeline.Pipeline.Streams.Error } } catch { $_ } $Pipeline.Pipeline.Dispose() $i++ } } $ThreadPipes = @() $poolsize = 1 $thispool = Create-HPESysInfoThreadPool $poolsize $t = { Param($path) [void] [System.Reflection.Assembly]::LoadWithPartialName('System.Drawing') [void] [System.Reflection.Assembly]::LoadWithPartialName('System.Windows.Forms') $mod = "HPESysInfoCmdlets" $RegPath = 'HKCU:\Software\Hewlett Packard Enterprise\PowerShell\Modules\' + $mod $PropLicense = 'LicenseShown' $PropPath = 'InstallPath' $PropVersion = 'ModuleVersion' $alreadyInstalled = $false $sameInstalledVersion = $true $modInfoPath = $path + '\'+ $mod + '_B557F265-DDB8-4723-AB21-51DC9DA3E643_ModuleInfo.xml' $xmlLocal = [xml](Get-Content -Path "$modInfoPath") $currVersionString = $xmlLocal.ModuleInfo.Version.ToString() if ($(Test-Path $RegPath) -and $(Get-ItemProperty -Path $RegPath -Name $PropLicense -ErrorAction SilentlyContinue).$PropLicense -eq 'True') { $alreadyInstalled = $True $oldVersionString = (Get-ItemProperty -Path $RegPath -Name $PropVersion).$PropVersion if($currVersionString -ne $oldVersionString) { $sameInstalledVersion = $false } } #check to see if the registry path and entry are present if ($alreadyInstalled -eq $false -or $sameInstalledVersion -eq $false) { #show the license and create the key ################################################ $objForm = New-Object System.Windows.Forms.Form $objForm.Text = $mod + ' License' $objForm.Size = New-Object System.Drawing.Size(762,660) $objForm.StartPosition = 'CenterScreen' $objForm.KeyPreview = $True $x = 'Decline' $OKButton = New-Object System.Windows.Forms.Button $OKButton.Location = New-Object System.Drawing.Size(75,582) $OKButton.Size = New-Object System.Drawing.Size(75,23) $OKButton.Text = 'Accept' $OKButton.Add_Click({$global:x='Accept';$objForm.Close()}) $objForm.Controls.Add($OKButton) $NOTOKButton = New-Object System.Windows.Forms.Button $NOTOKButton.Location = New-Object System.Drawing.Size(175,582) $NOTOKButton.Size = New-Object System.Drawing.Size(75,23) $NOTOKButton.Text = 'Decline' $NOTOKButton.Add_Click({$global:x='Decline';$objForm.Close()}) $objForm.Controls.Add($NOTOKButton) $objLabel = New-Object System.Windows.Forms.Label $objLabel.Font = New-Object System.Drawing.Font('SansSerif',12) $objLabel.Location = New-Object System.Drawing.Size(10,20) $objLabel.Size = New-Object System.Drawing.Size(700,30) $objLabel.Text = 'By using this module you accept these license terms:' $objForm.Controls.Add($objLabel) $link='' $objRTFTextBox = New-Object System.Windows.Forms.RichTextBox $objRTFTextBox.Location = New-Object System.Drawing.Size(10,60) $objRTFTextBox.Size = New-Object System.Drawing.Size(728,500) $eulapath = $path + '\' + $mod + 'License.rtf' $objRTFTextBox.LoadFile($eulapath) $objRTFTextBox.ReadOnly = $True $objRTFTextBox.DetectUrls = $True $objRTFTextBox.Add_LinkClicked({$global:link = $_.LinkText; start $_.LinkText}) $objForm.Controls.Add($objRTFTextBox) $objForm.Topmost = $True $size = New-Object System.Drawing.Size(0,0) #Home key grabs window size $objForm.Add_KeyDown({if ($_.KeyCode -eq 'Home') { $global:size.Height = $global:objForm.Size.Height $global:size.Width = $global:objForm.Size.Width $_.Handled = $True } }) $objForm.ControlBox = $false $objForm.FormBorderStyle = [System.Windows.Forms.FormBorderStyle]::FixedDialog $objForm.Add_Shown({$objForm.Activate()}) [void] $objForm.ShowDialog() #throw an error if the license was declined if ($x -eq 'Decline') {return $false} else { #create the path first $newpath = '' $pathitems = $RegPath.Split('\') foreach ($pathitem in $pathitems) { if ($pathitem -notmatch ':') { $newpath += '\' + $pathitem if (-not $(Test-Path $newpath)) { New-Item -Path $newpath | Out-Null } } else { $newpath = $pathitem } } $modInfoPath = $path + '\'+ $mod + '_B557F265-DDB8-4723-AB21-51DC9DA3E643_ModuleInfo.xml' $xmlLocal = [xml](Get-Content -Path "$modInfoPath") $currVersionString = $xmlLocal.ModuleInfo.Version.ToString() #create the property if($alreadyInstalled -eq $false) { New-ItemProperty -Path $RegPath -Name $PropVersion -PropertyType String -Value $currVersionString | Out-Null New-ItemProperty -Path $RegPath -Name $PropLicense -PropertyType String -Value $true | Out-Null New-ItemProperty -Path $RegPath -Name $PropPath -PropertyType String -Value $path | Out-Null } if($sameInstalledVersion -eq $false) { Set-ItemProperty -Path $RegPath -Name $PropVersion -Value $currVersionString | Out-Null } } } return $true } #end of $t scriptblock $ThreadPipes += Start-HPESysInfoThreadScriptBlock -ThreadPool $thispool -ScriptBlock $t -Parameters $PSScriptRoot.ToString() if ($VerbosePreference -eq 'Continue') { $rstList = Get-HPESysInfoThreadPipelines -Pipelines $ThreadPipes -ShowProgress } else { $rstList = Get-HPESysInfoThreadPipelines -Pipelines $ThreadPipes } $thispool.Close() $thispool.Dispose() if (-not $rstList) {throw 'License declined so module not loaded'} # SIG # Begin signature block # MIIkbgYJKoZIhvcNAQcCoIIkXzCCJFsCAQExDzANBglghkgBZQMEAgEFADB5Bgor # BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG # KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCAfDIsRZ4nsq7g4 # 12MHkq5WfCW/OBgGgxttJLaoSk/iYKCCHuQwggQUMIIC/KADAgECAgsEAAAAAAEv # TuFS1zANBgkqhkiG9w0BAQUFADBXMQswCQYDVQQGEwJCRTEZMBcGA1UEChMQR2xv # YmFsU2lnbiBudi1zYTEQMA4GA1UECxMHUm9vdCBDQTEbMBkGA1UEAxMSR2xvYmFs # U2lnbiBSb290IENBMB4XDTExMDQxMzEwMDAwMFoXDTI4MDEyODEyMDAwMFowUjEL # MAkGA1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExKDAmBgNVBAMT # H0dsb2JhbFNpZ24gVGltZXN0YW1waW5nIENBIC0gRzIwggEiMA0GCSqGSIb3DQEB # AQUAA4IBDwAwggEKAoIBAQCU72X4tVefoFMNNAbrCR+3Rxhqy/Bb5P8npTTR94ka # v56xzRJBbmbUgaCFi2RaRi+ZoI13seK8XN0i12pn0LvoynTei08NsFLlkFvrRw7x # 55+cC5BlPheWMEVybTmhFzbKuaCMG08IGfaBMa1hFqRi5rRAnsP8+5X2+7UulYGY # 4O/F69gCWXh396rjUmtQkSnF/PfNk2XSYGEi8gb7Mt0WUfoO/Yow8BcJp7vzBK6r # kOds33qp9O/EYidfb5ltOHSqEYva38cUTOmFsuzCfUomj+dWuqbgz5JTgHT0A+xo # smC8hCAAgxuh7rR0BcEpjmLQR7H68FPMGPkuO/lwfrQlAgMBAAGjgeUwgeIwDgYD # VR0PAQH/BAQDAgEGMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFEbYPv/c # 477/g+b0hZuw3WrWFKnBMEcGA1UdIARAMD4wPAYEVR0gADA0MDIGCCsGAQUFBwIB # FiZodHRwczovL3d3dy5nbG9iYWxzaWduLmNvbS9yZXBvc2l0b3J5LzAzBgNVHR8E # LDAqMCigJqAkhiJodHRwOi8vY3JsLmdsb2JhbHNpZ24ubmV0L3Jvb3QuY3JsMB8G # A1UdIwQYMBaAFGB7ZhpFDZfKiVAvfQTNNKj//P1LMA0GCSqGSIb3DQEBBQUAA4IB # AQBOXlaQHka02Ukx87sXOSgbwhbd/UHcCQUEm2+yoprWmS5AmQBVteo/pSB204Y0 # 1BfMVTrHgu7vqLq82AafFVDfzRZ7UjoC1xka/a/weFzgS8UY3zokHtqsuKlYBAIH # MNuwEl7+Mb7wBEj08HD4Ol5Wg889+w289MXtl5251NulJ4TjOJuLpzWGRCCkO22k # aguhg/0o69rvKPbMiF37CjsAq+Ah6+IvNWwPjjRFl+ui95kzNX7Lmoq7RU3nP5/C # 2Yr6ZbJux35l/+iS4SwxovewJzZIjyZvO+5Ndh95w+V/ljW8LQ7MAbCOf/9RgICn # ktSzREZkjIdPFmMHMUtjsN/zMIIEnzCCA4egAwIBAgISESHWmadklz7x+EJ+6RnM # U0EUMA0GCSqGSIb3DQEBBQUAMFIxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9i # YWxTaWduIG52LXNhMSgwJgYDVQQDEx9HbG9iYWxTaWduIFRpbWVzdGFtcGluZyBD # QSAtIEcyMB4XDTE2MDUyNDAwMDAwMFoXDTI3MDYyNDAwMDAwMFowYDELMAkGA1UE # BhMCU0cxHzAdBgNVBAoTFkdNTyBHbG9iYWxTaWduIFB0ZSBMdGQxMDAuBgNVBAMT # J0dsb2JhbFNpZ24gVFNBIGZvciBNUyBBdXRoZW50aWNvZGUgLSBHMjCCASIwDQYJ # KoZIhvcNAQEBBQADggEPADCCAQoCggEBALAXrqLTtgQwVh5YD7HtVaTWVMvY9nM6 # 7F1eqyX9NqX6hMNhQMVGtVlSO0KiLl8TYhCpW+Zz1pIlsX0j4wazhzoOQ/DXAIlT # ohExUihuXUByPPIJd6dJkpfUbJCgdqf9uNyznfIHYCxPWJgAa9MVVOD63f+ALF8Y # ppj/1KvsoUVZsi5vYl3g2Rmsi1ecqCYr2RelENJHCBpwLDOLf2iAKrWhXWvdjQIC # KQOqfDe7uylOPVOTs6b6j9JYkxVMuS2rgKOjJfuv9whksHpED1wQ119hN6pOa9PS # UyWdgnP6LPlysKkZOSpQ+qnQPDrK6Fvv9V9R9PkK2Zc13mqF5iMEQq8CAwEAAaOC # AV8wggFbMA4GA1UdDwEB/wQEAwIHgDBMBgNVHSAERTBDMEEGCSsGAQQBoDIBHjA0 # MDIGCCsGAQUFBwIBFiZodHRwczovL3d3dy5nbG9iYWxzaWduLmNvbS9yZXBvc2l0 # b3J5LzAJBgNVHRMEAjAAMBYGA1UdJQEB/wQMMAoGCCsGAQUFBwMIMEIGA1UdHwQ7 # MDkwN6A1oDOGMWh0dHA6Ly9jcmwuZ2xvYmFsc2lnbi5jb20vZ3MvZ3N0aW1lc3Rh # bXBpbmdnMi5jcmwwVAYIKwYBBQUHAQEESDBGMEQGCCsGAQUFBzAChjhodHRwOi8v # c2VjdXJlLmdsb2JhbHNpZ24uY29tL2NhY2VydC9nc3RpbWVzdGFtcGluZ2cyLmNy # dDAdBgNVHQ4EFgQU1KKESjhaGH+6TzBQvZ3VeofWCfcwHwYDVR0jBBgwFoAURtg+ # /9zjvv+D5vSFm7DdatYUqcEwDQYJKoZIhvcNAQEFBQADggEBAI+pGpFtBKY3IA6D # lt4j02tuH27dZD1oISK1+Ec2aY7hpUXHJKIitykJzFRarsa8zWOOsz1QSOW0zK7N # ko2eKIsTShGqvaPv07I2/LShcr9tl2N5jES8cC9+87zdglOrGvbr+hyXvLY3nKQc # MLyrvC1HNt+SIAPoccZY9nUFmjTwC1lagkQ0qoDkL4T2R12WybbKyp23prrkUNPU # N7i6IA7Q05IqW8RZu6Ft2zzORJ3BOCqt4429zQl3GhC+ZwoCNmSIubMbJu7nnmDE # Rqi8YTNsz065nLlq8J83/rU9T5rTTf/eII5Ol6b9nwm8TcoYdsmwTYVQ8oDSHQb1 # WAQHsRgwggVMMIIDNKADAgECAhMzAAAANdjVWVsGcUErAAAAAAA1MA0GCSqGSIb3 # DQEBBQUAMH8xCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYD # VQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xKTAn # BgNVBAMTIE1pY3Jvc29mdCBDb2RlIFZlcmlmaWNhdGlvbiBSb290MB4XDTEzMDgx # NTIwMjYzMFoXDTIzMDgxNTIwMzYzMFowbzELMAkGA1UEBhMCU0UxFDASBgNVBAoT # C0FkZFRydXN0IEFCMSYwJAYDVQQLEx1BZGRUcnVzdCBFeHRlcm5hbCBUVFAgTmV0 # d29yazEiMCAGA1UEAxMZQWRkVHJ1c3QgRXh0ZXJuYWwgQ0EgUm9vdDCCASIwDQYJ # KoZIhvcNAQEBBQADggEPADCCAQoCggEBALf3GjPm8gAELTngTlvtH7xsD821+iO2 # zt6bETOXpClMfZOfvUq8k+0DGuOPz+VtUFrWlymUWoCwSXrbLpX9uMq/NzgtHj6R # Qa1wVsfwTz/oMp50ysiQVOnGXw94nZpAPA6sYapeFI+eh6FqUNzXmk6vBbOmcZSc # cbNQYArHE504B4YCqOmoaSYYkKtMsE8jqzpPhNjfzp/haW+710LXa0Tkx63ubUFf # clpxCDezeWWkWaCUN/cALw3CknLa0Dhy2xSoRcRdKn23tNbE7qzNE0S3ySvdQwAl # +mG5aWpYIxG3pzOPVnVZ9c0p10a3CitlttNCbxWyuHv77+ldU9U0WicCAwEAAaOB # 0DCBzTATBgNVHSUEDDAKBggrBgEFBQcDAzASBgNVHRMBAf8ECDAGAQH/AgECMB0G # A1UdDgQWBBStvZh6NLQm9/rEJlTvA73gJMtUGjALBgNVHQ8EBAMCAYYwHwYDVR0j # BBgwFoAUYvsKIVt/Q24R2glUUGv10pZx8Z4wVQYDVR0fBE4wTDBKoEigRoZEaHR0 # cDovL2NybC5taWNyb3NvZnQuY29tL3BraS9jcmwvcHJvZHVjdHMvTWljcm9zb2Z0 # Q29kZVZlcmlmUm9vdC5jcmwwDQYJKoZIhvcNAQEFBQADggIBADYrovLhMx/kk/fy # aYXGZA7Jm2Mv5HA3mP2U7HvP+KFCRvntak6NNGk2BVV6HrutjJlClgbpJagmhL7B # vxapfKpbBLf90cD0Ar4o7fV3x5v+OvbowXvTgqv6FE7PK8/l1bVIQLGjj4OLrSsl # U6umNM7yQ/dPLOndHk5atrroOxCZJAC8UP149uUjqImUk/e3QTA3Sle35kTZyd+Z # BapE/HSvgmTMB8sBtgnDLuPoMqe0n0F4x6GENlRi8uwVCsjq0IT48eBr9FYSX5Xg # /N23dpP+KUol6QQA8bQRDsmEntsXffUepY42KRk6bWxGS9ercCQojQWj2dUk8vig # 0TyCOdSogg5pOoEJ/Abwx1kzhDaTBkGRIywipacBK1C0KK7bRrBZG4azm4foSU45 # C20U30wDMB4fX3Su9VtZA1PsmBbg0GI1dRtIuH0T5XpIuHdSpAeYJTsGm3pOam9E # hk8UTyd5Jz1Qc0FMnEE+3SkMc7HH+x92DBdlBOvSUBCSQUns5AZ9NhVEb4m/aX35 # TUDBOpi2oH4x0rWuyvtT1T9Qhs1ekzttXXyaPz/3qSVYhN0RSQCix8ieN913jm1x # i+BbgTRdVLrM9ZNHiG3n71viKOSAG0DkDyrRfyMVZVqsmZRDP0ZVJtbE+oiV4pGa # oy0Lhd6sjOD5Z3CfcXkCMfdhoinEMIIFYTCCBEmgAwIBAgIQafEFAENkSJcny8iq # t/4gLzANBgkqhkiG9w0BAQsFADB8MQswCQYDVQQGEwJHQjEbMBkGA1UECBMSR3Jl # YXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHEwdTYWxmb3JkMRgwFgYDVQQKEw9TZWN0 # aWdvIExpbWl0ZWQxJDAiBgNVBAMTG1NlY3RpZ28gUlNBIENvZGUgU2lnbmluZyBD # QTAeFw0xOTA2MTgwMDAwMDBaFw0yMDA2MTcyMzU5NTlaMIHSMQswCQYDVQQGEwJV # UzEOMAwGA1UEEQwFOTQzMDQxCzAJBgNVBAgMAkNBMRIwEAYDVQQHDAlQYWxvIEFs # dG8xHDAaBgNVBAkMEzMwMDAgSGFub3ZlciBTdHJlZXQxKzApBgNVBAoMIkhld2xl # dHQgUGFja2FyZCBFbnRlcnByaXNlIENvbXBhbnkxGjAYBgNVBAsMEUhQIEN5YmVy # IFNlY3VyaXR5MSswKQYDVQQDDCJIZXdsZXR0IFBhY2thcmQgRW50ZXJwcmlzZSBD # b21wYW55MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAy8D3HuNn4fq2 # +wSX7FKxB4j5Z7n5a2D0drZS/qDNUM+gcySjur6962yIjQt+anubhIFB0Fl7JA1e # E1Nf9s38VUvsFyc7PM/NKFnRgi3Ih0/EOHg9zj8HP7mKp046JeFjiWUNLyhXqEre # hNgRhtxev1vq7giPu7pLfE8yZnixWYG9HJJOYTeFPF4plvEmbeRHA+Ce2lWkKRjj # Xps/6dhMJCoA9YDLbsa2+IBYIUJqXpw4Ma3rGRr47hDBM0VmDgW3U+PkEZBxHRrE # D6ZmDEiVog9B1lApIO2T6wo2Vk8tfOzxSMP6N6PapYArel405MvR3oKCg6K5JCQ6 # zJJrWCqG1wIDAQABo4IBhjCCAYIwHwYDVR0jBBgwFoAUDuE6qFM6MdWKvsG7rWca # A4WtNA4wHQYDVR0OBBYEFNlSI/3ypwX+zyUYC/zkj25MJRanMA4GA1UdDwEB/wQE # AwIHgDAMBgNVHRMBAf8EAjAAMBMGA1UdJQQMMAoGCCsGAQUFBwMDMBEGCWCGSAGG # +EIBAQQEAwIEEDBABgNVHSAEOTA3MDUGDCsGAQQBsjEBAgEDAjAlMCMGCCsGAQUF # BwIBFhdodHRwczovL3NlY3RpZ28uY29tL0NQUzBDBgNVHR8EPDA6MDigNqA0hjJo # dHRwOi8vY3JsLnNlY3RpZ28uY29tL1NlY3RpZ29SU0FDb2RlU2lnbmluZ0NBLmNy # bDBzBggrBgEFBQcBAQRnMGUwPgYIKwYBBQUHMAKGMmh0dHA6Ly9jcnQuc2VjdGln # by5jb20vU2VjdGlnb1JTQUNvZGVTaWduaW5nQ0EuY3J0MCMGCCsGAQUFBzABhhdo # dHRwOi8vb2NzcC5zZWN0aWdvLmNvbTANBgkqhkiG9w0BAQsFAAOCAQEADG2garnm # MjxUloU281Gn4i84GiJ6NBRs6D7SPUH4/a5ZHCfV1lqWiAhVO438IIJSRS/Lml3Q # 4YZFJZHeJYfH7FK4Hn1FKqp3puZJE4w67TWpQ5WmW/V+/qytrypYHNrkoGHsvkm8 # V1QhblNfRIE+b3a/UWhgEwIh7DkD7YRCTQFg7wbCcOBGdmQ6cqUFBfZhhXoGsvif # xAF9W+URjehqw1G2/xNyzh+Oz+HT8xyJthzXZ82aI1Tp57L8imorH244aLzZhrt9 # Ghh4KOgi5zU9XIPYBazDYsYAhDdmF7C/nQKBEv9kTkq2f3aqybWsZpYfWkfMF6S3 # mLPndSdSuziV5jCCBXcwggRfoAMCAQICEBPqKHBb9OztDDZjCYBhQzYwDQYJKoZI # hvcNAQEMBQAwbzELMAkGA1UEBhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMSYw # JAYDVQQLEx1BZGRUcnVzdCBFeHRlcm5hbCBUVFAgTmV0d29yazEiMCAGA1UEAxMZ # QWRkVHJ1c3QgRXh0ZXJuYWwgQ0EgUm9vdDAeFw0wMDA1MzAxMDQ4MzhaFw0yMDA1 # MzAxMDQ4MzhaMIGIMQswCQYDVQQGEwJVUzETMBEGA1UECBMKTmV3IEplcnNleTEU # MBIGA1UEBxMLSmVyc2V5IENpdHkxHjAcBgNVBAoTFVRoZSBVU0VSVFJVU1QgTmV0 # d29yazEuMCwGA1UEAxMlVVNFUlRydXN0IFJTQSBDZXJ0aWZpY2F0aW9uIEF1dGhv # cml0eTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAIASZRc2DsPbCLPQ # rFcNdu3NJ9NMrVCDYeKqIE0JLWQJ3M6Jn8w9qez2z8Hc8dOx1ns3KBErR9o5xrw6 # GbRfpr19naNjQrZ28qk7K5H44m/Q7BYgkAk+4uh0yRi0kdRiZNt/owbxiBhqkCI8 # vP4T8IcUe/bkH47U5FHGEWdGCFHLhhRUP7wz/n5snP8WnRi9UY41pqdmyHJn2yFm # sdSbeAPAUDrozPDcvJ5M/q8FljUfV1q3/875PbcstvZU3cjnEjpNrkyKt1yatLcg # Pcp/IjSufjtoZgFE5wFORlObM2D3lL5TN5BzQ/Myw1Pv26r+dE5px2uMYJPexMcM # 3+EyrsyTO1F4lWeL7j1W/gzQaQ8bD/MlJmszbfduR/pzQ+V+DqVmsSl8MoRjVYnE # DcGTVDAZE6zTfTen6106bDVc20HXEtqpSQvf2ICKCZNijrVmzyWIzYS4sT+kOQ/Z # Ap7rEkyVfPNrBaleFoPMuGfi6BOdzFuC00yz7Vv/3uVzrCM7LQC/NVV0CUnYSVga # f5I25lGSDvMmfRxNF7zJ7EMm0L9BX0CpRET0medXh55QH1dUqD79dGMvsVBlCeZY # Qi5DGky08CVHWfoEHpPUJkZKUIGy3r54t/xnFeHJV4QeD2PW6WK61l9VLupcxigI # BCU5uA4rqfJMlxwHPw1S9e3vL4IPAgMBAAGjgfQwgfEwHwYDVR0jBBgwFoAUrb2Y # ejS0Jvf6xCZU7wO94CTLVBowHQYDVR0OBBYEFFN5v1qqK0rPVIDh2JvAnfKyA2bL # MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MBEGA1UdIAQKMAgwBgYE # VR0gADBEBgNVHR8EPTA7MDmgN6A1hjNodHRwOi8vY3JsLnVzZXJ0cnVzdC5jb20v # QWRkVHJ1c3RFeHRlcm5hbENBUm9vdC5jcmwwNQYIKwYBBQUHAQEEKTAnMCUGCCsG # AQUFBzABhhlodHRwOi8vb2NzcC51c2VydHJ1c3QuY29tMA0GCSqGSIb3DQEBDAUA # A4IBAQCTZfY3g5UPXsOCHB/Wd+c8isCqCfDpCybx4MJqdaHHecm5UmDIKRIO8K0D # 1gnEdt/lpoGVp0bagleplZLFto8DImwzd8F7MhduB85aFEE6BSQb9hQGO6glJA67 # zCp13blwQT980GM2IQcfRv9gpJHhZ7zeH34ZFMljZ5HqZwdrtI+LwG5DfcOhgGyy # HrxThX3ckKGkvC3vRnJXNQW/u0a7bm03mbb/I5KRxm5A+I8pVupf1V8UU6zwT2Hq # 9yLMp1YL4rg0HybZexkFaD+6PNQ4BqLT5o8O47RxbUBCxYS0QJUr9GWgSHn2HYFj # lp1PdeD4fOSOqdHyrYqzjMchzcLvMIIF9TCCA92gAwIBAgIQHaJIMG+bJhjQguCW # fTPTajANBgkqhkiG9w0BAQwFADCBiDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCk5l # dyBKZXJzZXkxFDASBgNVBAcTC0plcnNleSBDaXR5MR4wHAYDVQQKExVUaGUgVVNF # UlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMTJVVTRVJUcnVzdCBSU0EgQ2VydGlmaWNh # dGlvbiBBdXRob3JpdHkwHhcNMTgxMTAyMDAwMDAwWhcNMzAxMjMxMjM1OTU5WjB8 # MQswCQYDVQQGEwJHQjEbMBkGA1UECBMSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYD # VQQHEwdTYWxmb3JkMRgwFgYDVQQKEw9TZWN0aWdvIExpbWl0ZWQxJDAiBgNVBAMT # G1NlY3RpZ28gUlNBIENvZGUgU2lnbmluZyBDQTCCASIwDQYJKoZIhvcNAQEBBQAD # ggEPADCCAQoCggEBAIYijTKFehifSfCWL2MIHi3cfJ8Uz+MmtiVmKUCGVEZ0MWLF # EO2yhyemmcuVMMBW9aR1xqkOUGKlUZEQauBLYq798PgYrKf/7i4zIPoMGYmobHut # AMNhodxpZW0fbieW15dRhqb0J+V8aouVHltg1X7XFpKcAC9o95ftanK+ODtj3o+/ # bkxBXRIgCFnoOc2P0tbPBrRXBbZOoT5Xax+YvMRi1hsLjcdmG0qfnYHEckC14l/v # C0X/o84Xpi1VsLewvFRqnbyNVlPG8Lp5UEks9wO5/i9lNfIi6iwHr0bZ+UYc3Ix8 # cSjz/qfGFN1VkW6KEQ3fBiSVfQ+noXw62oY1YdMCAwEAAaOCAWQwggFgMB8GA1Ud # IwQYMBaAFFN5v1qqK0rPVIDh2JvAnfKyA2bLMB0GA1UdDgQWBBQO4TqoUzox1Yq+ # wbutZxoDha00DjAOBgNVHQ8BAf8EBAMCAYYwEgYDVR0TAQH/BAgwBgEB/wIBADAd # BgNVHSUEFjAUBggrBgEFBQcDAwYIKwYBBQUHAwgwEQYDVR0gBAowCDAGBgRVHSAA # MFAGA1UdHwRJMEcwRaBDoEGGP2h0dHA6Ly9jcmwudXNlcnRydXN0LmNvbS9VU0VS # VHJ1c3RSU0FDZXJ0aWZpY2F0aW9uQXV0aG9yaXR5LmNybDB2BggrBgEFBQcBAQRq # MGgwPwYIKwYBBQUHMAKGM2h0dHA6Ly9jcnQudXNlcnRydXN0LmNvbS9VU0VSVHJ1 # c3RSU0FBZGRUcnVzdENBLmNydDAlBggrBgEFBQcwAYYZaHR0cDovL29jc3AudXNl # cnRydXN0LmNvbTANBgkqhkiG9w0BAQwFAAOCAgEATWNQ7Uc0SmGk295qKoyb8QAA # Hh1iezrXMsL2s+Bjs/thAIiaG20QBwRPvrjqiXgi6w9G7PNGXkBGiRL0C3danCpB # OvzW9Ovn9xWVM8Ohgyi33i/klPeFM4MtSkBIv5rCT0qxjyT0s4E307dksKYjallo # UkJf/wTr4XRleQj1qZPea3FAmZa6ePG5yOLDCBaxq2NayBWAbXReSnV+pbjDbLXP # 30p5h1zHQE1jNfYw08+1Cg4LBH+gS667o6XQhACTPlNdNKUANWlsvp8gJRANGftQ # kGG+OY96jk32nw4e/gdREmaDJhlIlc5KycF/8zoFm/lv34h/wCOe0h5DekUxwZxN # qfBZslkZ6GqNKQQCd3xLS81wvjqyVVp4Pry7bwMQJXcVNIr5NsxDkuS6T/Fikygl # Vyn7URnHoSVAaoRXxrKdsbwcCtp8Z359LukoTBh+xHsxQXGaSynsCz1XUNLK3f2e # BVHlRHjdAd6xdZgNVCT98E7j4viDvXK6yz067vBeF5Jobchh+abxKgoLpbn0nu6Y # MgWFnuv5gynTxix9vTp3Los3QqBqgu07SqqUEKThDfgXxbZaeTMYkuO1dfih6Y4K # JR7kHvGfWocj/5+kUZ77OYARzdu1xKeogG/lU9Tg46LC0lsa+jImLWpXcBw8pFgu # o/NbSwfcMlnzh6cabVgxggTgMIIE3AIBATCBkDB8MQswCQYDVQQGEwJHQjEbMBkG # A1UECBMSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHEwdTYWxmb3JkMRgwFgYD # VQQKEw9TZWN0aWdvIExpbWl0ZWQxJDAiBgNVBAMTG1NlY3RpZ28gUlNBIENvZGUg # U2lnbmluZyBDQQIQafEFAENkSJcny8iqt/4gLzANBglghkgBZQMEAgEFAKB8MBAG # CisGAQQBgjcCAQwxAjAAMBkGCSqGSIb3DQEJAzEMBgorBgEEAYI3AgEEMBwGCisG # AQQBgjcCAQsxDjAMBgorBgEEAYI3AgEVMC8GCSqGSIb3DQEJBDEiBCDk/7V55ziA # oIhYEVn75+8GjtKmNI/cNiHpk5O//kpb5zANBgkqhkiG9w0BAQEFAASCAQArsi+C # FAPpod0nNCe4ML3XT98HAzgdLQw25CHlYwed1xgL5jn2CDvVlvd3cVcT9JLCC34L # a0yeTauyQLMJETj75x0xmFHL9KYeQPJnEjaQC3KaCeEKJdn4Wwa3RD4Ecf/Iu3rX # 0qFRlqbmQMbnUCj5Iit7fSxE8gcvKaQg3PVvznGAQUJLc/d62mlFhN+/ws+j2oV4 # Nu+6cpzjCfT6Z7kQATql3/5DLlmu2VOBDrldo2dQd42gimDQma85zy682tXY5y99 # Af6C95PKo7kICgybpNKhpq44IxhzrLf9/OACtYi0VPN7cghGcF+wMDwwLraTSw/A # h0dzHI3MoqAeFKhPoYICojCCAp4GCSqGSIb3DQEJBjGCAo8wggKLAgEBMGgwUjEL # MAkGA1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExKDAmBgNVBAMT # H0dsb2JhbFNpZ24gVGltZXN0YW1waW5nIENBIC0gRzICEhEh1pmnZJc+8fhCfukZ # zFNBFDAJBgUrDgMCGgUAoIH9MBgGCSqGSIb3DQEJAzELBgkqhkiG9w0BBwEwHAYJ # KoZIhvcNAQkFMQ8XDTIwMDIxNDE1MzM0MVowIwYJKoZIhvcNAQkEMRYEFBXNXYeP # nwUxzKmSG9i3g9rRNixZMIGdBgsqhkiG9w0BCRACDDGBjTCBijCBhzCBhAQUY7gv # q2H1g5CWlQULACScUCkz7HkwbDBWpFQwUjELMAkGA1UEBhMCQkUxGTAXBgNVBAoT # EEdsb2JhbFNpZ24gbnYtc2ExKDAmBgNVBAMTH0dsb2JhbFNpZ24gVGltZXN0YW1w # aW5nIENBIC0gRzICEhEh1pmnZJc+8fhCfukZzFNBFDANBgkqhkiG9w0BAQEFAASC # AQAcVa3sJh/Ldon1wvLDrL9KrnITOXTBMX4FOMvfB7wSRjVSJnAooYpI3TLYS7tw # BM4SU8OFlwvvC7cKD1MfFfHmzfP6GnUCFipOBv/fa64qQP6fc9A0rRNmmzCUJ7c2 # LHNYw3mMWiYAJQyW3M5pbfsihpMTJnCQrhS8zrljJdb6GqdRLbcCuqK/U3fZ5FNu # YJz8KLGyMXCYicutsDSyIciS7leUtSlHxVCmjkdM8IJ4shY+PNZfzXAVUqOSrUlr # wKenPBLqQzrGEseQFp2JkkcOJBDGLxt9ALn5DSsxlHVbW34pRTXop4D6YhlKbhYF # qfUAToA18Pp7yO8SjYwHNkr3 # SIG # End signature block |