Public/Update-AWSToolsModule.ps1
|
<#
.Synopsis Updates all installed AWS Tools for PowerShell modules to the latest version. Note: Users are recommended to use Install-AWSToolsModule which supports installing all modules including new modules as they are released. Use Update-AWSToolsModule for a simple invocation that intentionally only updates previously installed modules. A warning will be output for any module that is not available in the version that is specified or resolved. Such modules will still be removed if the -Cleanup parameter switch is specified. .Description This cmdlet updates all installed AWS Tools for PowerShell modules to the latest version or a specified version. It identifies installed modules and updates only those modules, downloading the AWS.Tools.zip file and extracting only the necessary modules. Modules that are not found in the zip file will trigger warnings. Note: AWS.Tools.Installer is excluded from this cmdlet and must be managed separately using Install-AWSToolsInstaller and Uninstall-AWSToolsInstaller. .Parameter Version Specifies the version to update to. Supports exact versions (e.g., 5.0.151) or major version wildcards (e.g., 4.*, 5.*). Minor version wildcards (e.g., 5.0.*, 5.1.*) are not supported. Latest version is used by default when not specified. .Parameter MaximumVersion Specifies the maximum version of the modules to update to. This parameter is deprecated and should no longer be used as it will be removed in the next major version. .Parameter SkipPublisherCheck This parameter is deprecated and should no longer be used as it will be removed in the next major version. Allows skipping the publisher validation check. .Parameter AllowClobber This parameter is deprecated and should no longer be used as it will be removed in the next major version. Overrides warning messages about installation conflicts about existing commands on a computer. .Parameter Proxy This parameter is deprecated and should no longer be used as it will be removed in the next major version. Specifies a proxy server for the request, rather than connecting directly to an internet resource. .Parameter ProxyCredential This parameter is deprecated and should no longer be used as it will be removed in the next major version. Specifies a user account that has permission to use the proxy server specified by the Proxy parameter. .Parameter Cleanup Switch that uninstalls other versions of installed AWS Tools modules after successful update like when using <code>Uninstall-AWSToolsModule -ExceptVersion ...</code> Otherwise, by default, other versions are preserved. Please note that ALL AWS Tools modules (except installer) will be uninstalled even when only specific modules were updated. .Parameter CleanUpLegacyModuleScope Runs a separate cleanup of all instances of AWSPowerShell and AWSPowerShell.NetCore found in the specified scope. Warns on failure. The acceptable values for this parameter are AllUsers and CurrentUser. .Parameter Scope Specifies the installation scope of the module as well as scope for module cleanup. The acceptable values for this parameter are AllUsers and CurrentUser. The AllUsers scope installs modules in a location that is accessible to all users of the computer. The CurrentUser installs modules in a location that is accessible only to the current user of the computer. Default value is 'CurrentUser'. .Parameter SourceZipPath Path to a local AWS.Tools.zip file for offline/air-gapped installation. Must be a file path, not a directory. Requires either -SourceHashPath for SHA512 validation or -SkipIntegrityCheck to bypass validation. .Parameter SourceHashPath Path to the SHA512 hash file for validating the integrity of the zip file specified with -SourceZipPath. When using -SourceZipPath, you must either provide this parameter for validation or use -SkipIntegrityCheck to bypass validation. .Parameter SkipIntegrityCheck Switch that bypasses SHA512 validation when specified. By default, SHA512 validation is performed to ensure the integrity of downloaded files. .Parameter Path Specifies a custom installation path for the modules. .Parameter Force Forces update even if the same version is already installed. Without this parameter, update is skipped if the target version already exists. .Parameter Prerelease Allows updating to prerelease versions. When specified, the Version parameter can include a prerelease tag (e.g., 5.0.0-preview001). This switch must be specified when updating to prerelease versions; otherwise, an error will be thrown. .Parameter Timeout Specifies the timeout in seconds for downloading the AWS.Tools.zip file. Default is 300 seconds (5 minutes). Increase this value for slower internet connections or when downloading large files. .Notes This cmdlet sources modules from the AWS CloudFront-hosted AWS.Tools.zip file for improved speed and reliability. There is no support for updating AWSPowerShell or AWSPowerShell.NetCore as these are legacy modules. AWS.Tools.Installer is also excluded and must be managed using Install-AWSToolsInstaller. .Example Update-AWSToolsModule -Version 5.* This example updates all installed AWS Tools modules to the latest version within major version 5. Using major version wildcards reduces the risk of breaking changes while still receiving bug fixes and new features within the major version. .Example Update-AWSToolsModule -WarningAction SilentlyContinue This example updates all installed AWS Tools modules to the latest version. The WarningAction parameter suppresses the production workload warning when you intentionally want the latest version. .Example Update-AWSToolsModule -Cleanup -Confirm:$false This example updates all installed AWS Tools modules to the latest version and removes all non-latest AWS Tools for PowerShell modules. .Example Update-AWSToolsModule -Version 4.1.754 -Cleanup This example updates all installed AWS Tools modules to version 4.1.754 and removes all other versions. .Example Update-AWSToolsModule -Force This example forces update of currently-installed AWS Tools modules even if the same version is already installed. .Example Update-AWSToolsModule -Scope AllUsers This example updates AWS Tools modules in the system-wide location accessible to all users. .Example Update-AWSToolsModule -SourceZipPath "C:\Downloads\AWS.Tools.zip" This example updates AWS Tools modules from a local zip file for offline scenarios. .Example Update-AWSToolsModule -Path "C:\DevModules" This example updates AWS Tools modules in a custom directory for testing or development. .Example Update-AWSToolsModule -WhatIf This example performs a what-if analysis to preview what would be updated without making changes. .Example Update-AWSToolsModule -CleanUpLegacyModuleScope CurrentUser -Confirm:$false This example updates AWS Tools modules and cleans up legacy AWSPowerShell modules from the current user scope. #> function Update-AWSToolsModule { [CmdletBinding(SupportsShouldProcess, ConfirmImpact = 'Medium', DefaultParameterSetName = 'ManagedCloudFront')] Param( [Parameter(ParameterSetName = 'ManagedCloudFront', Position = 0)] [Parameter(ParameterSetName = 'Legacy', Position = 0)] [string] [Alias('RequiredVersion')] $Version, [Parameter(ParameterSetName = 'Legacy')] [Version] $MaximumVersion, [Parameter()] [Switch] $Cleanup, [Parameter()] [ValidateSet('CurrentUser', 'AllUsers')] [string] $CleanUpLegacyModuleScope, [Parameter()] [ValidateSet('CurrentUser', 'AllUsers')] [string] $Scope = 'CurrentUser', [Parameter(ParameterSetName = 'SourceZipPath', Mandatory)] [string] $SourceZipPath, [Parameter(ParameterSetName = 'SourceZipPath')] [string] $SourceHashPath, [Parameter()] [Switch] $SkipIntegrityCheck, [Parameter()] [string] $Path, [Parameter()] [Switch] $Force, [Parameter()] [int] $Timeout = $script:Config.network.DefaultTimeout, [Parameter()] [switch] $SkipPublisherCheck, [Parameter()] [switch] $AllowClobber, [Parameter()] [uri] $Proxy, [Parameter()] [pscredential] $ProxyCredential, [Parameter(ParameterSetName = 'ManagedCloudFront')] [Alias('AllowPrerelease')] [switch] $Prerelease ) Begin { # Initialize progress bar with ID to prevent it from being overridden by other progress bars Write-Progress -Id 1 -Activity "Update-AWSToolsModule" -Status "Initializing..." -PercentComplete 0 # Parameter validation for version constraints if ($PSCmdlet.ParameterSetName -eq 'ManagedCloudFront' -or $PSCmdlet.ParameterSetName -eq 'Legacy') { # Deprecation warning for restored parameter if ($MaximumVersion) { Write-Warning "The MaximumVersion parameter is deprecated and should no longer be used as it will be removed in the next major version." } # Deprecation warnings for ignored legacy parameters if ($SkipPublisherCheck) { Write-Warning "The SkipPublisherCheck parameter is deprecated and should no longer be used as it will be removed in the next major version." } if ($AllowClobber) { Write-Warning "The AllowClobber parameter is deprecated and should no longer be used as it will be removed in the next major version." } if ($Proxy) { Write-Warning "The Proxy parameter is deprecated and should no longer be used as it will be removed in the next major version." } if ($ProxyCredential) { Write-Warning "The ProxyCredential parameter is deprecated and should no longer be used as it will be removed in the next major version." } # Note: Production workload warning is handled by Install-AWSToolsModule # No need to duplicate the warning here since Update-AWSToolsModule delegates to Install-AWSToolsModule # 1.0.3-compatible validation: Version and MaximumVersion can be used together if ($MaximumVersion -and $Version) { # Validate MaximumVersion >= Version (1.0.3 behavior) $versionObj = [Version]$Version if ($MaximumVersion -lt $versionObj) { $PSCmdlet.ThrowTerminatingError( [System.Management.Automation.ErrorRecord]::new( ([System.ArgumentException]"Parameter MaximumVersion ('$MaximumVersion') cannot be less than Version ('$Version')."), 'InvalidParameterCombination', [System.Management.Automation.ErrorCategory]::InvalidArgument, $MaximumVersion ) ) } } # Resolve version using standard logic $resolveVersionParams = @{ Name = 'AWS.Tools' Version = $Version Timeout = $Timeout } if ($Prerelease) { $resolveVersionParams.Prerelease = $true } try { $Version = Resolve-AWSToolsVersion @resolveVersionParams } catch { $PSCmdlet.ThrowTerminatingError($_) } $targetVersionToInstall = if ($Version) { $Version.ToString() } else { "latest" } } else { # SourceZipPath - version will be determined from zip contents during installation $targetVersionToInstall = "from local zip file" } Write-Verbose ("[$($MyInvocation.MyCommand)] ParameterSetName=$($PSCmdlet.ParameterSetName) " + "ConfirmPreference=$ConfirmPreference WhatIfPreference=$WhatIfPreference " + "VerbosePreference=$VerbosePreference Version=$Version Cleanup=$Cleanup") } Process { $ErrorActionPreference = 'Stop' try { # Update progress - starting version check and preparation Write-Progress -Id 1 -Activity "Update-AWSToolsModule" -Status "Getting installed modules..." -PercentComplete 10 # Get target installation path if ($Path) { $targetPath = $Path Write-Verbose ("[$($MyInvocation.MyCommand)] Using specified installation path: " + "$targetPath") } else { $targetPath = Get-PSModulePath -Scope $Scope Write-Verbose ("[$($MyInvocation.MyCommand)] Using $Scope scope installation " + "path: $targetPath") } # Get installed AWS.Tools modules (excluding installer) $getAWSToolsModuleParams = @{ Name = 'AWS.Tools' } if ($Path) { $getAWSToolsModuleParams.Path = $Path } $installedModules = Get-AWSToolsModule @getAWSToolsModuleParams if (-not $installedModules -or $installedModules.Count -eq 0) { Write-Host "No AWS.Tools modules found to update. Use Install-AWSToolsModule to install AWS.Tools modules." return } # Get unique module names without regard for version $moduleNames = $installedModules | Select-Object -ExpandProperty Name -Unique Write-Verbose ("[$($MyInvocation.MyCommand)] Found $($moduleNames.Count) installed AWS.Tools modules to update") # Inform users about the number of modules being updated and that Install-AWSToolsModule is needed for new modules Write-Host "Updating $($moduleNames.Count) installed AWS.Tools modules. Note: Use Install-AWSToolsModule to install new AWS modules that may have been released since your last update." # Build target description for ShouldProcess if ($PSCmdlet.ParameterSetName -eq 'ManagedCloudFront' -or $PSCmdlet.ParameterSetName -eq 'Legacy') { $versionText = " to version $targetVersionToInstall" } else { $versionText = " from local zip file" } $moduleText = "all installed AWS Tools modules" $target = "$moduleText$versionText in $targetPath" # Add WhatIf information message if ($WhatIfPreference) { Write-Host "What if: Would update $moduleText$versionText in $targetPath" } # Initialize installedVersion variable $installedVersion = $null # Prepare parameters for Install-AWSToolsModule $installParams = @{ Name = $moduleNames } # Add common parameters if ($PSBoundParameters.ContainsKey('Cleanup')) { $installParams.Cleanup = $Cleanup } if ($PSBoundParameters.ContainsKey('CleanUpLegacyModuleScope')) { $installParams.CleanUpLegacyModuleScope = $CleanUpLegacyModuleScope } if ($PSBoundParameters.ContainsKey('Scope')) { $installParams.Scope = $Scope } if ($PSBoundParameters.ContainsKey('Path')) { $installParams.Path = $Path } if ($PSBoundParameters.ContainsKey('Force')) { $installParams.Force = $Force } if ($PSBoundParameters.ContainsKey('Timeout')) { $installParams.Timeout = $Timeout } if ($PSBoundParameters.ContainsKey('SkipIntegrityCheck')) { $installParams.SkipIntegrityCheck = $SkipIntegrityCheck } # Add parameter set specific parameters # Note: Pass the original Version string parameter, not the resolved version object # Install-AWSToolsModule will handle version resolution internally if (($PSCmdlet.ParameterSetName -eq 'ManagedCloudFront' -or $PSCmdlet.ParameterSetName -eq 'Legacy') -and $PSBoundParameters.ContainsKey('Version')) { # Get the original version string from PSBoundParameters $installParams.Version = $PSBoundParameters['Version'] } if ($PSCmdlet.ParameterSetName -eq 'Legacy' -and $PSBoundParameters.ContainsKey('MaximumVersion')) { $installParams.MaximumVersion = $MaximumVersion } if ($PSCmdlet.ParameterSetName -eq 'ManagedCloudFront' -and $PSBoundParameters.ContainsKey('Prerelease')) { $installParams.Prerelease = $Prerelease } if ($PSCmdlet.ParameterSetName -eq 'SourceZipPath') { $installParams.SourceZipPath = $SourceZipPath if ($PSBoundParameters.ContainsKey('SourceHashPath')) { $installParams.SourceHashPath = $SourceHashPath } } # Always pass WhatIf and Confirm preferences if ($PSBoundParameters.ContainsKey('WhatIf')) { $installParams.WhatIf = $WhatIfPreference } if ($PSBoundParameters.ContainsKey('Confirm')) { $installParams.Confirm = $ConfirmPreference -ne 'None' } # Always call Install-AWSToolsModule, but ShouldProcess will control actual execution # through the -WhatIf parameter that's already been added to $installParams Write-Verbose ("[$($MyInvocation.MyCommand)] Calling Install-AWSToolsModule with " + "parameters: $($installParams.Keys -join ', ')") # This will display the ShouldProcess prompt if -WhatIf is not specified # If -WhatIf is specified, it will be passed to Install-AWSToolsModule # Suppress the return value to prevent "True" from being output to the pipeline $null = $PSCmdlet.ShouldProcess($target, "Update AWS Tools modules") # Always call Install-AWSToolsModule - the -WhatIf parameter will be passed through # and will control whether Install-AWSToolsModule actually makes changes Install-AWSToolsModule @installParams } catch { $PSCmdlet.ThrowTerminatingError($_) } } End { # Complete progress bar Write-Progress -Id 1 -Activity "Update-AWSToolsModule" -Completed Write-Verbose "[$($MyInvocation.MyCommand)] End" } } # SIG # Begin signature block # MIIutQYJKoZIhvcNAQcCoIIupjCCLqICAQExDzANBglghkgBZQMEAgEFADB5Bgor # BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG # KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCAsbfT4dSDlEEp+ # 1VFMYWMvhpD9Su2y+xZLllefLIpgBKCCE+owggXAMIIEqKADAgECAhAP0bvKeWvX # +N1MguEKmpYxMA0GCSqGSIb3DQEBCwUAMGwxCzAJBgNVBAYTAlVTMRUwEwYDVQQK # EwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20xKzApBgNV # BAMTIkRpZ2lDZXJ0IEhpZ2ggQXNzdXJhbmNlIEVWIFJvb3QgQ0EwHhcNMjIwMTEz # MDAwMDAwWhcNMzExMTA5MjM1OTU5WjBiMQswCQYDVQQGEwJVUzEVMBMGA1UEChMM # RGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSEwHwYDVQQD # ExhEaWdpQ2VydCBUcnVzdGVkIFJvb3QgRzQwggIiMA0GCSqGSIb3DQEBAQUAA4IC # DwAwggIKAoICAQC/5pBzaN675F1KPDAiMGkz7MKnJS7JIT3yithZwuEppz1Yq3aa # za57G4QNxDAf8xukOBbrVsaXbR2rsnnyyhHS5F/WBTxSD1Ifxp4VpX6+n6lXFllV # cq9ok3DCsrp1mWpzMpTREEQQLt+C8weE5nQ7bXHiLQwb7iDVySAdYyktzuxeTsiT # +CFhmzTrBcZe7FsavOvJz82sNEBfsXpm7nfISKhmV1efVFiODCu3T6cw2Vbuyntd # 463JT17lNecxy9qTXtyOj4DatpGYQJB5w3jHtrHEtWoYOAMQjdjUN6QuBX2I9YI+ # EJFwq1WCQTLX2wRzKm6RAXwhTNS8rhsDdV14Ztk6MUSaM0C/CNdaSaTC5qmgZ92k # J7yhTzm1EVgX9yRcRo9k98FpiHaYdj1ZXUJ2h4mXaXpI8OCiEhtmmnTK3kse5w5j # rubU75KSOp493ADkRSWJtppEGSt+wJS00mFt6zPZxd9LBADMfRyVw4/3IbKyEbe7 # f/LVjHAsQWCqsWMYRJUadmJ+9oCw++hkpjPRiQfhvbfmQ6QYuKZ3AeEPlAwhHbJU # KSWJbOUOUlFHdL4mrLZBdd56rF+NP8m800ERElvlEFDrMcXKchYiCd98THU/Y+wh # X8QgUWtvsauGi0/C1kVfnSD8oR7FwI+isX4KJpn15GkvmB0t9dmpsh3lGwIDAQAB # o4IBZjCCAWIwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU7NfjgtJxXWRM3y5n # P+e6mK4cD08wHwYDVR0jBBgwFoAUsT7DaQP4v0cB1JgmGggC72NkK8MwDgYDVR0P # AQH/BAQDAgGGMBMGA1UdJQQMMAoGCCsGAQUFBwMDMH8GCCsGAQUFBwEBBHMwcTAk # BggrBgEFBQcwAYYYaHR0cDovL29jc3AuZGlnaWNlcnQuY29tMEkGCCsGAQUFBzAC # hj1odHRwOi8vY2FjZXJ0cy5kaWdpY2VydC5jb20vRGlnaUNlcnRIaWdoQXNzdXJh # bmNlRVZSb290Q0EuY3J0MEsGA1UdHwREMEIwQKA+oDyGOmh0dHA6Ly9jcmwzLmRp # Z2ljZXJ0LmNvbS9EaWdpQ2VydEhpZ2hBc3N1cmFuY2VFVlJvb3RDQS5jcmwwHAYD # VR0gBBUwEzAHBgVngQwBAzAIBgZngQwBBAEwDQYJKoZIhvcNAQELBQADggEBAEHx # qRH0DxNHecllao3A7pgEpMbjDPKisedfYk/ak1k2zfIe4R7sD+EbP5HU5A/C5pg0 # /xkPZigfT2IxpCrhKhO61z7H0ZL+q93fqpgzRh9Onr3g7QdG64AupP2uU7SkwaT1 # IY1rzAGt9Rnu15ClMlIr28xzDxj4+87eg3Gn77tRWwR2L62t0+od/P1Tk+WMieNg # GbngLyOOLFxJy34riDkruQZhiPOuAnZ2dMFkkbiJUZflhX0901emWG4f7vtpYeJa # 3Cgh6GO6Ps9W7Zrk9wXqyvPsEt84zdp7PiuTUy9cUQBY3pBIowrHC/Q7bVUx8ALM # R3eWUaNetbxcyEMRoacwggawMIIEmKADAgECAhAIrUCyYNKcTJ9ezam9k67ZMA0G # CSqGSIb3DQEBDAUAMGIxCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJ # bmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20xITAfBgNVBAMTGERpZ2lDZXJ0 # IFRydXN0ZWQgUm9vdCBHNDAeFw0yMTA0MjkwMDAwMDBaFw0zNjA0MjgyMzU5NTla # MGkxCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5EaWdpQ2VydCwgSW5jLjFBMD8GA1UE # AxM4RGlnaUNlcnQgVHJ1c3RlZCBHNCBDb2RlIFNpZ25pbmcgUlNBNDA5NiBTSEEz # ODQgMjAyMSBDQTEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDVtC9C # 0CiteLdd1TlZG7GIQvUzjOs9gZdwxbvEhSYwn6SOaNhc9es0JAfhS0/TeEP0F9ce # 2vnS1WcaUk8OoVf8iJnBkcyBAz5NcCRks43iCH00fUyAVxJrQ5qZ8sU7H/Lvy0da # E6ZMswEgJfMQ04uy+wjwiuCdCcBlp/qYgEk1hz1RGeiQIXhFLqGfLOEYwhrMxe6T # SXBCMo/7xuoc82VokaJNTIIRSFJo3hC9FFdd6BgTZcV/sk+FLEikVoQ11vkunKoA # FdE3/hoGlMJ8yOobMubKwvSnowMOdKWvObarYBLj6Na59zHh3K3kGKDYwSNHR7Oh # D26jq22YBoMbt2pnLdK9RBqSEIGPsDsJ18ebMlrC/2pgVItJwZPt4bRc4G/rJvmM # 1bL5OBDm6s6R9b7T+2+TYTRcvJNFKIM2KmYoX7BzzosmJQayg9Rc9hUZTO1i4F4z # 8ujo7AqnsAMrkbI2eb73rQgedaZlzLvjSFDzd5Ea/ttQokbIYViY9XwCFjyDKK05 # huzUtw1T0PhH5nUwjewwk3YUpltLXXRhTT8SkXbev1jLchApQfDVxW0mdmgRQRNY # mtwmKwH0iU1Z23jPgUo+QEdfyYFQc4UQIyFZYIpkVMHMIRroOBl8ZhzNeDhFMJlP # /2NPTLuqDQhTQXxYPUez+rbsjDIJAsxsPAxWEQIDAQABo4IBWTCCAVUwEgYDVR0T # AQH/BAgwBgEB/wIBADAdBgNVHQ4EFgQUaDfg67Y7+F8Rhvv+YXsIiGX0TkIwHwYD # VR0jBBgwFoAU7NfjgtJxXWRM3y5nP+e6mK4cD08wDgYDVR0PAQH/BAQDAgGGMBMG # A1UdJQQMMAoGCCsGAQUFBwMDMHcGCCsGAQUFBwEBBGswaTAkBggrBgEFBQcwAYYY # aHR0cDovL29jc3AuZGlnaWNlcnQuY29tMEEGCCsGAQUFBzAChjVodHRwOi8vY2Fj # ZXJ0cy5kaWdpY2VydC5jb20vRGlnaUNlcnRUcnVzdGVkUm9vdEc0LmNydDBDBgNV # HR8EPDA6MDigNqA0hjJodHRwOi8vY3JsMy5kaWdpY2VydC5jb20vRGlnaUNlcnRU # cnVzdGVkUm9vdEc0LmNybDAcBgNVHSAEFTATMAcGBWeBDAEDMAgGBmeBDAEEATAN # BgkqhkiG9w0BAQwFAAOCAgEAOiNEPY0Idu6PvDqZ01bgAhql+Eg08yy25nRm95Ry # sQDKr2wwJxMSnpBEn0v9nqN8JtU3vDpdSG2V1T9J9Ce7FoFFUP2cvbaF4HZ+N3HL # IvdaqpDP9ZNq4+sg0dVQeYiaiorBtr2hSBh+3NiAGhEZGM1hmYFW9snjdufE5Btf # Q/g+lP92OT2e1JnPSt0o618moZVYSNUa/tcnP/2Q0XaG3RywYFzzDaju4ImhvTnh # OE7abrs2nfvlIVNaw8rpavGiPttDuDPITzgUkpn13c5UbdldAhQfQDN8A+KVssIh # dXNSy0bYxDQcoqVLjc1vdjcshT8azibpGL6QB7BDf5WIIIJw8MzK7/0pNVwfiThV # 9zeKiwmhywvpMRr/LhlcOXHhvpynCgbWJme3kuZOX956rEnPLqR0kq3bPKSchh/j # wVYbKyP/j7XqiHtwa+aguv06P0WmxOgWkVKLQcBIhEuWTatEQOON8BUozu3xGFYH # Ki8QxAwIZDwzj64ojDzLj4gLDb879M4ee47vtevLt/B3E+bnKD+sEq6lLyJsQfmC # XBVmzGwOysWGw/YmMwwHS6DTBwJqakAwSEs0qFEgu60bhQjiWQ1tygVQK+pKHJ6l # /aCnHwZ05/LWUpD9r4VIIflXO7ScA+2GRfS0YW6/aOImYIbqyK+p/pQd52MbOoZW # eE4wggduMIIFVqADAgECAhADmooc3J4LAjb9FLn2g0iAMA0GCSqGSIb3DQEBCwUA # MGkxCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5EaWdpQ2VydCwgSW5jLjFBMD8GA1UE # AxM4RGlnaUNlcnQgVHJ1c3RlZCBHNCBDb2RlIFNpZ25pbmcgUlNBNDA5NiBTSEEz # ODQgMjAyMSBDQTEwHhcNMjUwNjAzMDAwMDAwWhcNMjYwNjAyMjM1OTU5WjCB9jET # MBEGCysGAQQBgjc8AgEDEwJVUzEZMBcGCysGAQQBgjc8AgECEwhEZWxhd2FyZTEd # MBsGA1UEDwwUUHJpdmF0ZSBPcmdhbml6YXRpb24xEDAOBgNVBAUTBzQxNTI5NTQx # CzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdTZWF0 # dGxlMSIwIAYDVQQKExlBbWF6b24gV2ViIFNlcnZpY2VzLCBJbmMuMRcwFQYDVQQL # Ew5TREtzIGFuZCBUb29sczEiMCAGA1UEAxMZQW1hem9uIFdlYiBTZXJ2aWNlcywg # SW5jLjCCAaIwDQYJKoZIhvcNAQEBBQADggGPADCCAYoCggGBAKc7ffRFlFB89cU3 # j76EOoK8sFXFunuUhvU6LMeAzgO2fjlMn2l3WJBPZmrHXIicBHmejbJDRgMc+FPd # oSUR6ZsuVX08txcdv8yHqC+u2BHrj+GRakq7WF148X1PR8kOhkon+qNSh+cxoIHm # m+Lxg9kZuddkr1m+Fuv79VGj3E9xp4YjbhvVEVbxLs86p812WgVz3eoqvpNXBC0m # H4eM3FUmNHcDA6ubRR/qh3OGYQHyQs4PeMOGACqcySO+XNRKxMNxIzf+fkQU8cuR # A8eYl6s0pQ+KlJudGt2psY+5nkTU9TOC99wvRmfuuG+jpG7vEMsuGy26wCOp7hry # k5kinq/EFImAxdx1WQ3pJuk+rcuSnuOcSieW+zSKEczJOCsbemDbF+9P5Iv0f0nx # kHPYrrjdgValyxosQENsHeq1HztsE46IbBq2S4I9kGzZcaal5hKT/Yxcom9tBfXq # oNs1KaL54mC4ddBGx07kAGE0kiHpY5pr4al2lGpOmBH4B5xKmwIDAQABo4ICAjCC # Af4wHwYDVR0jBBgwFoAUaDfg67Y7+F8Rhvv+YXsIiGX0TkIwHQYDVR0OBBYEFALy # CdwoelU9i0FZLXOC5NXeXmVqMD0GA1UdIAQ2MDQwMgYFZ4EMAQMwKTAnBggrBgEF # BQcCARYbaHR0cDovL3d3dy5kaWdpY2VydC5jb20vQ1BTMA4GA1UdDwEB/wQEAwIH # gDATBgNVHSUEDDAKBggrBgEFBQcDAzCBtQYDVR0fBIGtMIGqMFOgUaBPhk1odHRw # Oi8vY3JsMy5kaWdpY2VydC5jb20vRGlnaUNlcnRUcnVzdGVkRzRDb2RlU2lnbmlu # Z1JTQTQwOTZTSEEzODQyMDIxQ0ExLmNybDBToFGgT4ZNaHR0cDovL2NybDQuZGln # aWNlcnQuY29tL0RpZ2lDZXJ0VHJ1c3RlZEc0Q29kZVNpZ25pbmdSU0E0MDk2U0hB # Mzg0MjAyMUNBMS5jcmwwgZQGCCsGAQUFBwEBBIGHMIGEMCQGCCsGAQUFBzABhhho # dHRwOi8vb2NzcC5kaWdpY2VydC5jb20wXAYIKwYBBQUHMAKGUGh0dHA6Ly9jYWNl # cnRzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydFRydXN0ZWRHNENvZGVTaWduaW5nUlNB # NDA5NlNIQTM4NDIwMjFDQTEuY3J0MAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQAD # ggIBACHYo9QgnoH4+yG1TQT8lxxsYPuy3+FiWd2sZxn/4dwBautbZSLaP5yAKlE0 # o7SFQq5IYV2FVA4c5LwJf3eoF0/8+Bh+SMmAHTteqHcAJ3VK8+VETL/qr9kFQx8j # cMA3kF2OOaLVWuB5ffEsGCRqCnS2r8r2lCstb/oEqJLyUXkqEDbyJxgkJ0vQp1XD # agCi68ujhDBwVQPoHmBux2V8TWaOuAT/5kZUJsqwUhBTxYSCKVdIYYkRppaUemJ0 # oULhtxeg1M5zumgLf432qyk6xchohECA1QSXsPflhLZ+eWk3RneSt0fAV/caEBma # mfVj4OysofDA4bCgZSWFk/16O4PEMsLZhR8FCnFr5lxFYKUgAcnVczo75KSBKp2r # aoUVAWIw9w1Z1NQljqfZbFUxWCIWLjmXmEbfy3IXeEpvlXidjPVwdqwbleyl0WR/ # ENGBEiy+I4a/ezu+HoA5zK+1b7INjLgxk8m5MnD75k6Pq+XctyTkzEh6F4Whhq7s # ck16llf7N+i28flIkqzcXuSHxeOZUZb2VNDIcCXiapaxS7cslbP4wafWGEYs2SN3 # +Q398T0fI7uJ4ATp58qdIp6w7Z9PomrVKE0LQMC1P1j9VDiCv7VqnU1cM/2uPpzA # Lop57Q8mTPr7Mh7nl0/QusIr8V/o6XWwRynumecNqn1oeMlaMYIaITCCGh0CAQEw # fTBpMQswCQYDVQQGEwJVUzEXMBUGA1UEChMORGlnaUNlcnQsIEluYy4xQTA/BgNV # BAMTOERpZ2lDZXJ0IFRydXN0ZWQgRzQgQ29kZSBTaWduaW5nIFJTQTQwOTYgU0hB # Mzg0IDIwMjEgQ0ExAhADmooc3J4LAjb9FLn2g0iAMA0GCWCGSAFlAwQCAQUAoHww # EAYKKwYBBAGCNwIBDDECMAAwGQYJKoZIhvcNAQkDMQwGCisGAQQBgjcCAQQwHAYK # KwYBBAGCNwIBCzEOMAwGCisGAQQBgjcCARUwLwYJKoZIhvcNAQkEMSIEINNZ/Pvx # r0RDtCw1EEJpv5QdPb0WfpECwnhfhtA+zUhOMA0GCSqGSIb3DQEBAQUABIIBgEKj # g5xuew92j2TzydACRk3EiafmnNIUp0U90V6UgKHEK/TZWs/dAyyKZqJmaE9Ubpp9 # 51IdbRBhgDUDT3JkyP9wNfJNe1haZlWRi1alDKU503g0v2mrFps4+QgeH9cEQDSv # MmiTeIA+soFiM2C0qsW1moA29VxCCvMltfoTC0wBoShWFFEa+gHbMSs6aEtb0ixV # jEZf6dv8JxWThnm2TZEIzeT+U1TvcnV8tF3be/GXnuf/0ojs5VDYPw8zzDdrjdhT # DYR1ZQ/XPiLrKaiG9BNwPt4TtrTOpxkFptIdbxb/WWnff3QoBfzsDTN+KKhK+W82 # I+1I6RAX+VoQkSoDwbYaYf2jMwfrfXRQWEWY+kT3P7y0nVNTAMdI/Zp/saXjbYPR # ouM1Ax6nRDEqMoU8kE3fsZifTrugaWYA4htIqJBg/838iG8PZAR2D7k7CSuU8LOF # +zO+e3xFDn9+bnuzoAxcASlDntGyZOZafpbr32Neinum06JYFcjZ9QjOKfp4hqGC # F3cwghdzBgorBgEEAYI3AwMBMYIXYzCCF18GCSqGSIb3DQEHAqCCF1AwghdMAgED # MQ8wDQYJYIZIAWUDBAIBBQAweAYLKoZIhvcNAQkQAQSgaQRnMGUCAQEGCWCGSAGG # /WwHATAxMA0GCWCGSAFlAwQCAQUABCDs/ygz4GOSK+GZ5SMFeCvrKGJx1q1R9SOr # uloyobH0LwIRAOmsxefbxEamSH9ssQeVrt0YDzIwMjYwMjE0MDMxMzU4WqCCEzow # ggbtMIIE1aADAgECAhAKgO8YS43xBYLRxHanlXRoMA0GCSqGSIb3DQEBCwUAMGkx # CzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5EaWdpQ2VydCwgSW5jLjFBMD8GA1UEAxM4 # RGlnaUNlcnQgVHJ1c3RlZCBHNCBUaW1lU3RhbXBpbmcgUlNBNDA5NiBTSEEyNTYg # MjAyNSBDQTEwHhcNMjUwNjA0MDAwMDAwWhcNMzYwOTAzMjM1OTU5WjBjMQswCQYD # VQQGEwJVUzEXMBUGA1UEChMORGlnaUNlcnQsIEluYy4xOzA5BgNVBAMTMkRpZ2lD # ZXJ0IFNIQTI1NiBSU0E0MDk2IFRpbWVzdGFtcCBSZXNwb25kZXIgMjAyNSAxMIIC # IjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA0EasLRLGntDqrmBWsytXum9R # /4ZwCgHfyjfMGUIwYzKomd8U1nH7C8Dr0cVMF3BsfAFI54um8+dnxk36+jx0Tb+k # +87H9WPxNyFPJIDZHhAqlUPt281mHrBbZHqRK71Em3/hCGC5KyyneqiZ7syvFXJ9 # A72wzHpkBaMUNg7MOLxI6E9RaUueHTQKWXymOtRwJXcrcTTPPT2V1D/+cFllESvi # H8YjoPFvZSjKs3SKO1QNUdFd2adw44wDcKgH+JRJE5Qg0NP3yiSyi5MxgU6cehGH # r7zou1znOM8odbkqoK+lJ25LCHBSai25CFyD23DZgPfDrJJJK77epTwMP6eKA0kW # a3osAe8fcpK40uhktzUd/Yk0xUvhDU6lvJukx7jphx40DQt82yepyekl4i0r8OEp # s/FNO4ahfvAk12hE5FVs9HVVWcO5J4dVmVzix4A77p3awLbr89A90/nWGjXMGn7F # QhmSlIUDy9Z2hSgctaepZTd0ILIUbWuhKuAeNIeWrzHKYueMJtItnj2Q+aTyLLKL # M0MheP/9w6CtjuuVHJOVoIJ/DtpJRE7Ce7vMRHoRon4CWIvuiNN1Lk9Y+xZ66laz # s2kKFSTnnkrT3pXWETTJkhd76CIDBbTRofOsNyEhzZtCGmnQigpFHti58CSmvEyJ # cAlDVcKacJ+A9/z7eacCAwEAAaOCAZUwggGRMAwGA1UdEwEB/wQCMAAwHQYDVR0O # BBYEFOQ7/PIx7f391/ORcWMZUEPPYYzoMB8GA1UdIwQYMBaAFO9vU0rp5AZ8esri # kFb2L9RJ7MtOMA4GA1UdDwEB/wQEAwIHgDAWBgNVHSUBAf8EDDAKBggrBgEFBQcD # CDCBlQYIKwYBBQUHAQEEgYgwgYUwJAYIKwYBBQUHMAGGGGh0dHA6Ly9vY3NwLmRp # Z2ljZXJ0LmNvbTBdBggrBgEFBQcwAoZRaHR0cDovL2NhY2VydHMuZGlnaWNlcnQu # Y29tL0RpZ2lDZXJ0VHJ1c3RlZEc0VGltZVN0YW1waW5nUlNBNDA5NlNIQTI1NjIw # MjVDQTEuY3J0MF8GA1UdHwRYMFYwVKBSoFCGTmh0dHA6Ly9jcmwzLmRpZ2ljZXJ0 # LmNvbS9EaWdpQ2VydFRydXN0ZWRHNFRpbWVTdGFtcGluZ1JTQTQwOTZTSEEyNTYy # MDI1Q0ExLmNybDAgBgNVHSAEGTAXMAgGBmeBDAEEAjALBglghkgBhv1sBwEwDQYJ # KoZIhvcNAQELBQADggIBAGUqrfEcJwS5rmBB7NEIRJ5jQHIh+OT2Ik/bNYulCrVv # hREafBYF0RkP2AGr181o2YWPoSHz9iZEN/FPsLSTwVQWo2H62yGBvg7ouCODwrx6 # ULj6hYKqdT8wv2UV+Kbz/3ImZlJ7YXwBD9R0oU62PtgxOao872bOySCILdBghQ/Z # LcdC8cbUUO75ZSpbh1oipOhcUT8lD8QAGB9lctZTTOJM3pHfKBAEcxQFoHlt2s9s # XoxFizTeHihsQyfFg5fxUFEp7W42fNBVN4ueLaceRf9Cq9ec1v5iQMWTFQa0xNqI # tH3CPFTG7aEQJmmrJTV3Qhtfparz+BW60OiMEgV5GWoBy4RVPRwqxv7Mk0Sy4QHs # 7v9y69NBqycz0BZwhB9WOfOu/CIJnzkQTwtSSpGGhLdjnQ4eBpjtP+XB3pQCtv4E # 5UCSDag6+iX8MmB10nfldPF9SVD7weCC3yXZi/uuhqdwkgVxuiMFzGVFwYbQsiGn # oa9F5AaAyBjFBtXVLcKtapnMG3VH3EmAp/jsJ3FVF3+d1SVDTmjFjLbNFZUWMXuZ # yvgLfgyPehwJVxwC+UpX2MSey2ueIu9THFVkT+um1vshETaWyQo8gmBto/m3acaP # 9QsuLj3FNwFlTxq25+T4QwX9xa6ILs84ZPvmpovq90K8eWyG2N01c4IhSOxqt81n # MIIGtDCCBJygAwIBAgIQDcesVwX/IZkuQEMiDDpJhjANBgkqhkiG9w0BAQsFADBi # MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 # d3cuZGlnaWNlcnQuY29tMSEwHwYDVQQDExhEaWdpQ2VydCBUcnVzdGVkIFJvb3Qg # RzQwHhcNMjUwNTA3MDAwMDAwWhcNMzgwMTE0MjM1OTU5WjBpMQswCQYDVQQGEwJV # UzEXMBUGA1UEChMORGlnaUNlcnQsIEluYy4xQTA/BgNVBAMTOERpZ2lDZXJ0IFRy # dXN0ZWQgRzQgVGltZVN0YW1waW5nIFJTQTQwOTYgU0hBMjU2IDIwMjUgQ0ExMIIC # IjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAtHgx0wqYQXK+PEbAHKx126NG # aHS0URedTa2NDZS1mZaDLFTtQ2oRjzUXMmxCqvkbsDpz4aH+qbxeLho8I6jY3xL1 # IusLopuW2qftJYJaDNs1+JH7Z+QdSKWM06qchUP+AbdJgMQB3h2DZ0Mal5kYp77j # YMVQXSZH++0trj6Ao+xh/AS7sQRuQL37QXbDhAktVJMQbzIBHYJBYgzWIjk8eDrY # hXDEpKk7RdoX0M980EpLtlrNyHw0Xm+nt5pnYJU3Gmq6bNMI1I7Gb5IBZK4ivbVC # iZv7PNBYqHEpNVWC2ZQ8BbfnFRQVESYOszFI2Wv82wnJRfN20VRS3hpLgIR4hjzL # 0hpoYGk81coWJ+KdPvMvaB0WkE/2qHxJ0ucS638ZxqU14lDnki7CcoKCz6eum5A1 # 9WZQHkqUJfdkDjHkccpL6uoG8pbF0LJAQQZxst7VvwDDjAmSFTUms+wV/FbWBqi7 # fTJnjq3hj0XbQcd8hjj/q8d6ylgxCZSKi17yVp2NL+cnT6Toy+rN+nM8M7LnLqCr # O2JP3oW//1sfuZDKiDEb1AQ8es9Xr/u6bDTnYCTKIsDq1BtmXUqEG1NqzJKS4kOm # xkYp2WyODi7vQTCBZtVFJfVZ3j7OgWmnhFr4yUozZtqgPrHRVHhGNKlYzyjlroPx # ul+bgIspzOwbtmsgY1MCAwEAAaOCAV0wggFZMBIGA1UdEwEB/wQIMAYBAf8CAQAw # HQYDVR0OBBYEFO9vU0rp5AZ8esrikFb2L9RJ7MtOMB8GA1UdIwQYMBaAFOzX44LS # cV1kTN8uZz/nupiuHA9PMA4GA1UdDwEB/wQEAwIBhjATBgNVHSUEDDAKBggrBgEF # BQcDCDB3BggrBgEFBQcBAQRrMGkwJAYIKwYBBQUHMAGGGGh0dHA6Ly9vY3NwLmRp # Z2ljZXJ0LmNvbTBBBggrBgEFBQcwAoY1aHR0cDovL2NhY2VydHMuZGlnaWNlcnQu # Y29tL0RpZ2lDZXJ0VHJ1c3RlZFJvb3RHNC5jcnQwQwYDVR0fBDwwOjA4oDagNIYy # aHR0cDovL2NybDMuZGlnaWNlcnQuY29tL0RpZ2lDZXJ0VHJ1c3RlZFJvb3RHNC5j # cmwwIAYDVR0gBBkwFzAIBgZngQwBBAIwCwYJYIZIAYb9bAcBMA0GCSqGSIb3DQEB # CwUAA4ICAQAXzvsWgBz+Bz0RdnEwvb4LyLU0pn/N0IfFiBowf0/Dm1wGc/Do7oVM # Y2mhXZXjDNJQa8j00DNqhCT3t+s8G0iP5kvN2n7Jd2E4/iEIUBO41P5F448rSYJ5 # 9Ib61eoalhnd6ywFLerycvZTAz40y8S4F3/a+Z1jEMK/DMm/axFSgoR8n6c3nuZB # 9BfBwAQYK9FHaoq2e26MHvVY9gCDA/JYsq7pGdogP8HRtrYfctSLANEBfHU16r3J # 05qX3kId+ZOczgj5kjatVB+NdADVZKON/gnZruMvNYY2o1f4MXRJDMdTSlOLh0HC # n2cQLwQCqjFbqrXuvTPSegOOzr4EWj7PtspIHBldNE2K9i697cvaiIo2p61Ed2p8 # xMJb82Yosn0z4y25xUbI7GIN/TpVfHIqQ6Ku/qjTY6hc3hsXMrS+U0yy+GWqAXam # 4ToWd2UQ1KYT70kZjE4YtL8Pbzg0c1ugMZyZZd/BdHLiRu7hAWE6bTEm4XYRkA6T # l4KSFLFk43esaUeqGkH/wyW4N7OigizwJWeukcyIPbAvjSabnf7+Pu0VrFgoiovR # Diyx3zEdmcif/sYQsfch28bZeUz2rtY/9TCA6TD8dC3JE3rYkrhLULy7Dc90G6e8 # BlqmyIjlgp2+VqsS9/wQD7yFylIz0scmbKvFoW2jNrbM1pD2T7m3XDCCBY0wggR1 # oAMCAQICEA6bGI750C3n79tQ4ghAGFowDQYJKoZIhvcNAQEMBQAwZTELMAkGA1UE # BhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZMBcGA1UECxMQd3d3LmRpZ2lj # ZXJ0LmNvbTEkMCIGA1UEAxMbRGlnaUNlcnQgQXNzdXJlZCBJRCBSb290IENBMB4X # DTIyMDgwMTAwMDAwMFoXDTMxMTEwOTIzNTk1OVowYjELMAkGA1UEBhMCVVMxFTAT # BgNVBAoTDERpZ2lDZXJ0IEluYzEZMBcGA1UECxMQd3d3LmRpZ2ljZXJ0LmNvbTEh # MB8GA1UEAxMYRGlnaUNlcnQgVHJ1c3RlZCBSb290IEc0MIICIjANBgkqhkiG9w0B # AQEFAAOCAg8AMIICCgKCAgEAv+aQc2jeu+RdSjwwIjBpM+zCpyUuySE98orYWcLh # Kac9WKt2ms2uexuEDcQwH/MbpDgW61bGl20dq7J58soR0uRf1gU8Ug9SH8aeFaV+ # vp+pVxZZVXKvaJNwwrK6dZlqczKU0RBEEC7fgvMHhOZ0O21x4i0MG+4g1ckgHWMp # Lc7sXk7Ik/ghYZs06wXGXuxbGrzryc/NrDRAX7F6Zu53yEioZldXn1RYjgwrt0+n # MNlW7sp7XeOtyU9e5TXnMcvak17cjo+A2raRmECQecN4x7axxLVqGDgDEI3Y1Dek # LgV9iPWCPhCRcKtVgkEy19sEcypukQF8IUzUvK4bA3VdeGbZOjFEmjNAvwjXWkmk # wuapoGfdpCe8oU85tRFYF/ckXEaPZPfBaYh2mHY9WV1CdoeJl2l6SPDgohIbZpp0 # yt5LHucOY67m1O+SkjqePdwA5EUlibaaRBkrfsCUtNJhbesz2cXfSwQAzH0clcOP # 9yGyshG3u3/y1YxwLEFgqrFjGESVGnZifvaAsPvoZKYz0YkH4b235kOkGLimdwHh # D5QMIR2yVCkliWzlDlJRR3S+Jqy2QXXeeqxfjT/JvNNBERJb5RBQ6zHFynIWIgnf # fEx1P2PsIV/EIFFrb7GrhotPwtZFX50g/KEexcCPorF+CiaZ9eRpL5gdLfXZqbId # 5RsCAwEAAaOCATowggE2MA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFOzX44LS # cV1kTN8uZz/nupiuHA9PMB8GA1UdIwQYMBaAFEXroq/0ksuCMS1Ri6enIZ3zbcgP # MA4GA1UdDwEB/wQEAwIBhjB5BggrBgEFBQcBAQRtMGswJAYIKwYBBQUHMAGGGGh0 # dHA6Ly9vY3NwLmRpZ2ljZXJ0LmNvbTBDBggrBgEFBQcwAoY3aHR0cDovL2NhY2Vy # dHMuZGlnaWNlcnQuY29tL0RpZ2lDZXJ0QXNzdXJlZElEUm9vdENBLmNydDBFBgNV # HR8EPjA8MDqgOKA2hjRodHRwOi8vY3JsMy5kaWdpY2VydC5jb20vRGlnaUNlcnRB # c3N1cmVkSURSb290Q0EuY3JsMBEGA1UdIAQKMAgwBgYEVR0gADANBgkqhkiG9w0B # AQwFAAOCAQEAcKC/Q1xV5zhfoKN0Gz22Ftf3v1cHvZqsoYcs7IVeqRq7IviHGmlU # Iu2kiHdtvRoU9BNKei8ttzjv9P+Aufih9/Jy3iS8UgPITtAq3votVs/59PesMHqa # i7Je1M/RQ0SbQyHrlnKhSLSZy51PpwYDE3cnRNTnf+hZqPC/Lwum6fI0POz3A8eH # qNJMQBk1RmppVLC4oVaO7KTVPeix3P0c2PR3WlxUjG/voVA9/HYJaISfb8rbII01 # YBwCA8sgsKxYoA5AY8WYIsGyWfVVa88nq2x2zm8jLfR+cWojayL/ErhULSd+2DrZ # 8LaHlv1b0VysGMNNn3O3AamfV6peKOK5lDGCA3wwggN4AgEBMH0waTELMAkGA1UE # BhMCVVMxFzAVBgNVBAoTDkRpZ2lDZXJ0LCBJbmMuMUEwPwYDVQQDEzhEaWdpQ2Vy # dCBUcnVzdGVkIEc0IFRpbWVTdGFtcGluZyBSU0E0MDk2IFNIQTI1NiAyMDI1IENB # MQIQCoDvGEuN8QWC0cR2p5V0aDANBglghkgBZQMEAgEFAKCB0TAaBgkqhkiG9w0B # CQMxDQYLKoZIhvcNAQkQAQQwHAYJKoZIhvcNAQkFMQ8XDTI2MDIxNDAzMTM1OFow # KwYLKoZIhvcNAQkQAgwxHDAaMBgwFgQU3WIwrIYKLTBr2jixaHlSMAf7QX4wLwYJ # KoZIhvcNAQkEMSIEIGoKHyvDa75kpKVhqiE51YwLAIPlJm7ABp7mddzPzbnUMDcG # CyqGSIb3DQEJEAIvMSgwJjAkMCIEIEqgP6Is11yExVyTj4KOZ2ucrsqzP+NtJpqj # NPFGEQozMA0GCSqGSIb3DQEBAQUABIICAEFOOQ1hTQUN1qQFzQbYZyELBWAvGyk8 # EGJWE4N3Bfwez541SOSimNUHL2xlaFoCVXIy0oSDPL/ClJm+3YqpTM2fUkIc7kym # PD9h7eRYlgQrSQhZRq+xRcY48NP63FNWSt7CZjB1ekBnFSzgAr1bsIHEY6j4kT9y # NDzS38lO4t5vxl926+Yb4X7PPGx7HmHxTxmi0bYDlv+fA2Rk8Lu6Z/A4O1dws5Q8 # oXQXhkfZlLFRLxVv1nco4RrTKcbdO6qcu1jlPjivcV1DYTY8O2peKHnzIE0otj9C # J5WSI7r7Psf9ySsmX6jDF1iRS0fg6S1RSKKF8qcaUz5IHfZJ3C1H0nI7mpcQ/sfX # GHvOsYt9d//SLnLWAauEjFivrPfsll5EA/eoffsI9JJgJNo8jJesAvU6WYpie8cE # +Tow5FtVRV3lmpLMlpF2qw0MecarZK9LC6JWkWHLbxhdP0U+w2VMTDr+5BzsJ5wb # mTQFr/PruhrV9ufVf0l+thx+L4WMIP50uVaAaCzF6zjXRAPks8qY7n5aRrBcuqpw # vPqRdPOCuvCwipSLwm8bTFWVXL45shpnRwPHDt9smrWT2M6vzOUuc/co1XvqNqlm # Ez3UcIozITCvY/GeEgwpTV1pwkQhsit+Jl10aoPC4zSsQ3ZEOrJl0T27kLRmrrxd # Pv2qkz4+kt6R # SIG # End signature block |