public/Get-AppVManagementPackage.ps1
|
<#
.SYNOPSIS Retrieves App-V packages with AD access entitlements from the Microsoft App-V Management database. .DESCRIPTION The Get-AppVManagementPackage function queries the App-V Management database to retrieve complete package information including package metadata, version details, applications, shortcuts, file type associations, and AD entitlements. Each package includes: - DeploymentConfigurationXml: Global deployment configuration (one per package) - ADGroups: Array of AD entitlements, each with: - UserConfigurationXml: The AD group's specific user configuration (if any) - DeploymentConfigurationXml: Combined deployment config where the UserConfiguration element from the global deployment config is replaced with this AD group's UserConfiguration (if UserConfigurationXml exists for the group) .PARAMETER SQLServer Specifies the SQL Server hostname or IP address. Default value: localhost .PARAMETER SQLInstance Specifies the SQL Server instance name. If not specified, the default instance will be used. .PARAMETER SQLDatabase Specifies the App-V Management database name. Default value: AppVManagement .PARAMETER SQLCredential Specifies the PSCredential object for SQL Server authentication. If not specified, Windows Integrated Authentication will be used. .PARAMETER PackageGuid Retrieves a specific package by its PackageGuid. This can be used to get all versions of a specific package. .PARAMETER VersionGuid Retrieves a specific package version by its VersionGuid. .PARAMETER Name Filters packages by name using wildcards (*). Example: "Adobe*" will return all packages starting with "Adobe". .PARAMETER EnabledOnly Returns only enabled packages (Enabled = 1). .EXAMPLE Get-AppVManagementPackage -SQLServer "sql01.domain.local" Retrieves all packages with their AD entitlements from the App-V Management database. .EXAMPLE $cred = Get-Credential Get-AppVManagementPackage -SQLServer "sql01.domain.local" -SQLCredential $cred Retrieves all packages using SQL Server authentication. .EXAMPLE Get-AppVManagementPackage -SQLServer "SQLSRV01" -SQLInstance "INSTANCE01" -EnabledOnly Retrieves only enabled packages from a named SQL Server instance. .EXAMPLE Get-AppVManagementPackage -SQLServer "SQLSRV01" -Name "Adobe*" Retrieves all packages with names starting with "Adobe". .EXAMPLE Get-AppVManagementPackage -SQLServer "SQLSRV01" -PackageGuid "FB4267F4-6B2B-45E1-A55B-0FE9C69A3DC2" Retrieves all versions of a specific package by PackageGuid with AD entitlements. .NOTES Function : Get-AppVManagementPackage Author : John Billekens Copyright: (c) John Billekens Consultancy Version : 2026.0130.1600 Requires : SqlServer PowerShell module #> function Get-AppVManagementPackage { [CmdletBinding(DefaultParameterSetName = 'All')] param( [Parameter(Mandatory = $false, ParameterSetName = 'All')] [Parameter(Mandatory = $false, ParameterSetName = 'ByPackageGuid')] [Parameter(Mandatory = $false, ParameterSetName = 'ByVersionGuid')] [Parameter(Mandatory = $false, ParameterSetName = 'ByName')] [ValidateNotNullOrEmpty()] [String]$SQLServer = "localhost", [Parameter(Mandatory = $false, ParameterSetName = 'All')] [Parameter(Mandatory = $false, ParameterSetName = 'ByPackageGuid')] [Parameter(Mandatory = $false, ParameterSetName = 'ByVersionGuid')] [Parameter(Mandatory = $false, ParameterSetName = 'ByName')] [String]$SQLInstance, [Parameter(Mandatory = $false, ParameterSetName = 'All')] [Parameter(Mandatory = $false, ParameterSetName = 'ByPackageGuid')] [Parameter(Mandatory = $false, ParameterSetName = 'ByVersionGuid')] [Parameter(Mandatory = $false, ParameterSetName = 'ByName')] [ValidateNotNullOrEmpty()] [String]$SQLDatabase = 'AppVManagement', [Parameter(Mandatory = $false, ParameterSetName = 'All')] [Parameter(Mandatory = $false, ParameterSetName = 'ByPackageGuid')] [Parameter(Mandatory = $false, ParameterSetName = 'ByVersionGuid')] [Parameter(Mandatory = $false, ParameterSetName = 'ByName')] [System.Management.Automation.PSCredential]$SQLCredential = [System.Management.Automation.PSCredential]::Empty, [Parameter(Mandatory = $true, ParameterSetName = 'ByPackageGuid')] [ValidateNotNullOrEmpty()] [Guid]$PackageGuid, [Parameter(Mandatory = $true, ParameterSetName = 'ByVersionGuid')] [ValidateNotNullOrEmpty()] [Guid]$VersionGuid, [Parameter(Mandatory = $true, ParameterSetName = 'ByName')] [ValidateNotNullOrEmpty()] [String]$Name, [Parameter(Mandatory = $false, ParameterSetName = 'All')] [Parameter(Mandatory = $false, ParameterSetName = 'ByPackageGuid')] [Parameter(Mandatory = $false, ParameterSetName = 'ByName')] [Switch]$EnabledOnly ) begin { Write-Verbose "Starting function 'Get-AppVManagementPackage'" Write-Verbose 'Checking for SqlServer module availability' if (-not (Get-Module -Name SqlServer -ListAvailable)) { Write-AppVentiXError -Message 'SqlServer module is not installed. Please install it using: Install-Module -Name SqlServer' ` -ErrorId 'SqlServerModuleNotFound' ` -Category NotInstalled ` -Cmdlet $PSCmdlet } # Import SqlServer module try { if (-not (Get-Module -Name SqlServer)) { Write-Verbose 'Importing SqlServer module' Import-Module SqlServer -ErrorAction Stop Write-Verbose 'SqlServer module imported successfully' } else { Write-Verbose 'SqlServer module is already imported' } } catch { Write-AppVentiXError -Message "Failed to import SqlServer module: $($_.Exception.Message)" ` -ErrorId 'SqlServerModuleImportFailed' ` -Category InvalidOperation ` -Cmdlet $PSCmdlet } # Test SQL connection $SQLParams = @{ SQLServer = $SQLServer SQLDatabase = $SQLDatabase } if ($PSBoundParameters.ContainsKey('SQLCredential') -and -not [string]::IsNullOrEmpty($SQLCredential.UserName)) { $SQLParams.SQLCredential = $SQLCredential } if ($PSBoundParameters.ContainsKey('SQLInstance')) { $SQLParams.SQLInstance = $SQLInstance } try { $connectionResult = Test-AppVManagementSQLConnection @SQLParams -ErrorAction Stop if (-not $connectionResult) { Write-AppVentiXError -Message "Cannot connect to the App-V Management database on server '$SQLServer', database '$SQLDatabase', instance '$SQLInstance'." ` -ErrorId 'SQLConnectionFailed' ` -Category ConnectionError ` -Cmdlet $PSCmdlet return } } catch { Write-AppVentiXError -Message "Cannot connect to the App-V Management database on server '$SQLServer', database '$SQLDatabase', instance '$SQLInstance'." ` -ErrorId 'SQLConnectionFailed' ` -Category ConnectionError ` -Cmdlet $PSCmdlet return } } process { # Build ServerInstance parameter $serverInstance = $SQLServer if (-not [String]::IsNullOrEmpty($SQLInstance)) { $serverInstance = "$SQLServer\$SQLInstance" Write-Verbose "Using SQL Server instance: $serverInstance" } else { Write-Verbose "Using SQL Server: $serverInstance" } # Build WHERE conditions based on parameters $whereConditions = @() if ($PSCmdlet.ParameterSetName -eq 'ByPackageGuid') { $whereConditions += "pv.PackageGuid = '$PackageGuid'" Write-Verbose "Filtering by PackageGuid: $PackageGuid" } if ($PSCmdlet.ParameterSetName -eq 'ByVersionGuid') { $whereConditions += "pv.VersionGuid = '$VersionGuid'" Write-Verbose "Filtering by VersionGuid: $VersionGuid" } if ($PSCmdlet.ParameterSetName -eq 'ByName') { # Convert PowerShell wildcard to SQL LIKE pattern $sqlPattern = $Name.Replace('*', '%').Replace('?', '_') $whereConditions += "pv.Name LIKE '$sqlPattern'" Write-Verbose "Filtering by Name: $Name (SQL pattern: $sqlPattern)" } if ($EnabledOnly) { $whereConditions += 'pv.Enabled = 1' Write-Verbose 'Filtering for enabled packages only' } $whereClause = "" if ($whereConditions.Count -gt 0) { $whereClause = "WHERE " + ($whereConditions -join ' AND ') } # Query 1: Package metadata with counts $packagesQuery = @" SELECT pv.Id, pv.PackageGuid, pv.VersionGuid, pv.Name, pv.Description, pv.VersionNumber, pv.Size, CAST(pv.Size / 1024.0 / 1024.0 AS DECIMAL(10,2)) AS SizeMB, pv.PackageUrl, pv.SequencerArchitecture, pv.SupportedOSsFromManifest, pv.Enabled, pv.TimeAdded, pv.TimeChanged, pv.TimeEnabled, pv.ClientVersion, COUNT(DISTINCT a.Id) AS ApplicationCount, COUNT(DISTINCT s.Id) AS ShortcutCount, COUNT(DISTINCT fta.Id) AS FileTypeAssociationCount FROM PackageVersions pv LEFT JOIN Applications a ON pv.Id = a.PackageVersionId LEFT JOIN Shortcuts s ON pv.Id = s.PackageVersionId LEFT JOIN FileTypeAssociations fta ON pv.Id = fta.PackageVersionId $whereClause GROUP BY pv.Id, pv.PackageGuid, pv.VersionGuid, pv.Name, pv.Description, pv.VersionNumber, pv.Size, pv.PackageUrl, pv.SequencerArchitecture, pv.SupportedOSsFromManifest, pv.Enabled, pv.TimeAdded, pv.TimeChanged, pv.TimeEnabled, pv.ClientVersion ORDER BY pv.Name, pv.VersionNumber; "@ # Query 2: DeploymentConfiguration (rows where SID is empty - one per package) $deploymentConfigQuery = @" SELECT pe.PackageVersionId, pe.UserConfigurationContent AS DeploymentConfigurationXml, pe.UserConfigurationTimestamp AS DeploymentConfigurationTimestamp FROM PackageEntitlements pe INNER JOIN PackageVersions pv ON pe.PackageVersionId = pv.Id WHERE (pe.Sid IS NULL OR pe.Sid = '') $(if ($whereConditions.Count -gt 0) { "AND " + ($whereConditions -join ' AND ') }) ORDER BY pe.PackageVersionId; "@ # Query 3: AD Entitlements with UserConfiguration (rows where SID is populated) $adEntitlementsQuery = @" SELECT pe.Id AS EntitlementId, pe.PackageVersionId, pe.Sid, pe.UserConfigurationContent AS UserConfigurationXml, pe.UserConfigurationTimestamp AS UserConfigurationTimestamp FROM PackageEntitlements pe INNER JOIN PackageVersions pv ON pe.PackageVersionId = pv.Id WHERE pe.Sid IS NOT NULL AND pe.Sid != '' $(if ($whereConditions.Count -gt 0) { "AND " + ($whereConditions -join ' AND ') }) ORDER BY pe.PackageVersionId, pe.Sid; "@ try { $sqlParams = @{ ServerInstance = $serverInstance Database = $SQLDatabase Encrypt = 'Optional' MaxCharLength = [int]::MaxValue ErrorAction = 'Stop' } if ($PSBoundParameters.ContainsKey('SQLCredential') -and -not [string]::IsNullOrEmpty($SQLCredential.UserName)) { $sqlParams['Credential'] = $SQLCredential Write-Verbose 'Using SQL Server authentication' } else { Write-Verbose 'Using Windows Integrated Authentication' } # Execute packages query Write-Verbose "Querying App-V Management Database for packages..." $sqlParams['Query'] = $packagesQuery Write-Verbose "Query: $packagesQuery" $packagesResults = Invoke-Sqlcmd @sqlParams if ($null -eq $packagesResults -or $packagesResults.Count -eq 0) { Write-Verbose 'No packages found' return } Write-Verbose "Found $($packagesResults.Count) package(s)" # Execute deployment config query Write-Verbose "Querying App-V Management Database for deployment configurations..." $sqlParams['Query'] = $deploymentConfigQuery Write-Verbose "Query: $deploymentConfigQuery" $deploymentConfigResults = Invoke-Sqlcmd @sqlParams # Index deployment configs by PackageVersionId $deploymentConfigs = @{} if ($deploymentConfigResults) { Write-Verbose "Found $($deploymentConfigResults.Count) deployment configuration(s)" foreach ($config in $deploymentConfigResults) { $deploymentConfigs[$config.PackageVersionId] = $config } } else { Write-Verbose "No deployment configurations found" } # Execute AD entitlements query Write-Verbose "Querying App-V Management Database for AD entitlements..." $sqlParams['Query'] = $adEntitlementsQuery Write-Verbose "Query: $adEntitlementsQuery" $adEntitlementsResults = Invoke-Sqlcmd @sqlParams # Group AD entitlements by PackageVersionId $groupedEntitlements = @{} if ($adEntitlementsResults) { Write-Verbose "Found $($adEntitlementsResults.Count) AD entitlement(s)" foreach ($entitlement in $adEntitlementsResults) { $pvId = $entitlement.PackageVersionId if (-not $groupedEntitlements.ContainsKey($pvId)) { $groupedEntitlements[$pvId] = @() } $groupedEntitlements[$pvId] += $entitlement } } else { Write-Verbose "No AD entitlements found" } # Get AD domain details once $DomainDetails = $null try { $DomainDetails = Get-AdsiADDomain } catch { Write-Verbose "Could not retrieve AD domain details: $($_.Exception.Message)" } # Build combined result objects $packages = @() foreach ($pkg in $packagesResults) { $pvId = $pkg.Id # Get deployment configuration for this package $deployConfig = $null $deployConfigTimestamp = $null if ($deploymentConfigs.ContainsKey($pvId)) { $config = $deploymentConfigs[$pvId] $deployConfig = if ($config.DeploymentConfigurationXml -is [DBNull]) { $null } else { $config.DeploymentConfigurationXml } $deployConfigTimestamp = if ($config.DeploymentConfigurationTimestamp -is [DBNull]) { $null } else { $config.DeploymentConfigurationTimestamp } } # Build AD Groups array for this package $adGroups = @() if ($groupedEntitlements.ContainsKey($pvId)) { foreach ($entitlement in $groupedEntitlements[$pvId]) { $userConfigXml = if ($entitlement.UserConfigurationXml -is [DBNull]) { $null } else { $entitlement.UserConfigurationXml } # Build the combined DeploymentConfigurationXml for this AD group # If the AD group has a UserConfigurationXml, replace the <UserConfiguration> element # in the global DeploymentConfigurationXml with the AD group's UserConfiguration $combinedDeployConfig = $null if ($deployConfig) { if ($userConfigXml) { # Parse both XMLs and merge try { $deployXml = [xml]$deployConfig $userXml = [xml]$userConfigXml # Find the UserConfiguration element in the deployment config $nsManager = New-Object System.Xml.XmlNamespaceManager($deployXml.NameTable) $nsManager.AddNamespace("appv", "http://schemas.microsoft.com/appv/2010/deploymentconfiguration") $existingUserConfig = $deployXml.SelectSingleNode("//appv:UserConfiguration", $nsManager) if ($existingUserConfig -and $userXml.DocumentElement) { # Import the new UserConfiguration node into the deployment XML document $importedNode = $deployXml.ImportNode($userXml.DocumentElement, $true) # Replace the existing UserConfiguration with the new one $existingUserConfig.ParentNode.ReplaceChild($importedNode, $existingUserConfig) | Out-Null $combinedDeployConfig = $deployXml.OuterXml # Clean up the UserConfiguration element - remove extra attributes that come from standalone XML # The standalone UserConfiguration XML has attributes like xmlns:xsd, xmlns:xsi, PackageId, DisplayName, xmlns # that are not present in the embedded UserConfiguration element within DeploymentConfiguration # Use regex to clean up since .NET XML DOM doesn't easily allow removing default namespace # Match UserConfiguration opening tag with all its attributes and replace with clean version $combinedDeployConfig = $combinedDeployConfig -replace '<UserConfiguration[^>]*xmlns="http://schemas\.microsoft\.com/appv/2010/userconfiguration"[^>]*>', '<UserConfiguration>' } else { # No UserConfiguration element found to replace, use original $combinedDeployConfig = $deployConfig } } catch { Write-Verbose "Failed to merge UserConfiguration into DeploymentConfiguration for SID $($entitlement.Sid): $($_.Exception.Message)" # Fall back to original deployment config $combinedDeployConfig = $deployConfig } } else { # No UserConfigurationXml for this AD group, use the global deployment config as-is $combinedDeployConfig = $deployConfig } } $adGroupItem = [PSCustomObject]@{ EntitlementId = $entitlement.EntitlementId Sid = $entitlement.Sid Name = "" Domain = if ($DomainDetails) { $DomainDetails.DNSRoot } else { "" } UserConfigurationXml = $userConfigXml UserConfigurationTimestamp = if ($entitlement.UserConfigurationTimestamp -is [DBNull]) { $null } else { $entitlement.UserConfigurationTimestamp } DeploymentConfigurationXml = $combinedDeployConfig } # Try to resolve AD Group name from SID try { $adGroup = Get-AdsiADGroup -Identity $entitlement.Sid if ($adGroup) { $adGroupItem.Name = $adGroup.Name } } catch { Write-Verbose "Failed to resolve AD Group for SID $($entitlement.Sid): $($_.Exception.Message)" } $adGroups += $adGroupItem } } # Create the combined package object $package = [PSCustomObject]@{ Id = $pkg.Id PackageGuid = $pkg.PackageGuid VersionGuid = $pkg.VersionGuid Name = $pkg.Name Description = if ($pkg.Description -is [DBNull]) { $null } else { $pkg.Description } Version = $pkg.VersionNumber Size = $pkg.Size SizeMB = $pkg.SizeMB SizeFormatted = "$($pkg.SizeMB) MB" PackageUrl = $pkg.PackageUrl SequencerArchitecture = $pkg.SequencerArchitecture SupportedOSsFromManifest = if ($pkg.SupportedOSsFromManifest -is [DBNull]) { $null } else { $pkg.SupportedOSsFromManifest } Enabled = $pkg.Enabled IsEnabled = [bool]$pkg.Enabled TimeAdded = $pkg.TimeAdded TimeChanged = if ($pkg.TimeChanged -is [DBNull]) { $null } else { $pkg.TimeChanged } TimeEnabled = if ($pkg.TimeEnabled -is [DBNull]) { $null } else { $pkg.TimeEnabled } ClientVersion = $pkg.ClientVersion ApplicationCount = $pkg.ApplicationCount ShortcutCount = $pkg.ShortcutCount FileTypeAssociationCount = $pkg.FileTypeAssociationCount DeploymentConfigurationXml = $deployConfig DeploymentConfigurationTimestamp = $deployConfigTimestamp ADGroups = $adGroups } $packages += $package } Write-Verbose "Returning $($packages.Count) package(s) with entitlements" return $packages } catch { Write-AppVentiXError -Message "Failed to query App-V Management database: $($_.Exception.Message)" ` -ErrorId 'AppVDatabaseQueryFailed' ` -Category InvalidOperation ` -TargetObject $serverInstance ` -Cmdlet $PSCmdlet } } end { Write-Verbose "Ending function 'Get-AppVManagementPackage'" } } # SIG # Begin signature block # MIImdwYJKoZIhvcNAQcCoIImaDCCJmQCAQExDzANBglghkgBZQMEAgEFADB5Bgor # BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG # KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCDrbYimH/LCuh8l # vAgzazp1KqeEWF9VaeJ7Y3DvGGCbNaCCIAowggYUMIID/KADAgECAhB6I67aU2mW # D5HIPlz0x+M/MA0GCSqGSIb3DQEBDAUAMFcxCzAJBgNVBAYTAkdCMRgwFgYDVQQK # Ew9TZWN0aWdvIExpbWl0ZWQxLjAsBgNVBAMTJVNlY3RpZ28gUHVibGljIFRpbWUg # U3RhbXBpbmcgUm9vdCBSNDYwHhcNMjEwMzIyMDAwMDAwWhcNMzYwMzIxMjM1OTU5 # WjBVMQswCQYDVQQGEwJHQjEYMBYGA1UEChMPU2VjdGlnbyBMaW1pdGVkMSwwKgYD # VQQDEyNTZWN0aWdvIFB1YmxpYyBUaW1lIFN0YW1waW5nIENBIFIzNjCCAaIwDQYJ # KoZIhvcNAQEBBQADggGPADCCAYoCggGBAM2Y2ENBq26CK+z2M34mNOSJjNPvIhKA # VD7vJq+MDoGD46IiM+b83+3ecLvBhStSVjeYXIjfa3ajoW3cS3ElcJzkyZlBnwDE # JuHlzpbN4kMH2qRBVrjrGJgSlzzUqcGQBaCxpectRGhhnOSwcjPMI3G0hedv2eNm # GiUbD12OeORN0ADzdpsQ4dDi6M4YhoGE9cbY11XxM2AVZn0GiOUC9+XE0wI7CQKf # OUfigLDn7i/WeyxZ43XLj5GVo7LDBExSLnh+va8WxTlA+uBvq1KO8RSHUQLgzb1g # bL9Ihgzxmkdp2ZWNuLc+XyEmJNbD2OIIq/fWlwBp6KNL19zpHsODLIsgZ+WZ1AzC # s1HEK6VWrxmnKyJJg2Lv23DlEdZlQSGdF+z+Gyn9/CRezKe7WNyxRf4e4bwUtrYE # 2F5Q+05yDD68clwnweckKtxRaF0VzN/w76kOLIaFVhf5sMM/caEZLtOYqYadtn03 # 4ykSFaZuIBU9uCSrKRKTPJhWvXk4CllgrwIDAQABo4IBXDCCAVgwHwYDVR0jBBgw # FoAU9ndq3T/9ARP/FqFsggIv0Ao9FCUwHQYDVR0OBBYEFF9Y7UwxeqJhQo1SgLqz # YZcZojKbMA4GA1UdDwEB/wQEAwIBhjASBgNVHRMBAf8ECDAGAQH/AgEAMBMGA1Ud # JQQMMAoGCCsGAQUFBwMIMBEGA1UdIAQKMAgwBgYEVR0gADBMBgNVHR8ERTBDMEGg # P6A9hjtodHRwOi8vY3JsLnNlY3RpZ28uY29tL1NlY3RpZ29QdWJsaWNUaW1lU3Rh # bXBpbmdSb290UjQ2LmNybDB8BggrBgEFBQcBAQRwMG4wRwYIKwYBBQUHMAKGO2h0 # dHA6Ly9jcnQuc2VjdGlnby5jb20vU2VjdGlnb1B1YmxpY1RpbWVTdGFtcGluZ1Jv # b3RSNDYucDdjMCMGCCsGAQUFBzABhhdodHRwOi8vb2NzcC5zZWN0aWdvLmNvbTAN # BgkqhkiG9w0BAQwFAAOCAgEAEtd7IK0ONVgMnoEdJVj9TC1ndK/HYiYh9lVUacah # RoZ2W2hfiEOyQExnHk1jkvpIJzAMxmEc6ZvIyHI5UkPCbXKspioYMdbOnBWQUn73 # 3qMooBfIghpR/klUqNxx6/fDXqY0hSU1OSkkSivt51UlmJElUICZYBodzD3M/SFj # eCP59anwxs6hwj1mfvzG+b1coYGnqsSz2wSKr+nDO+Db8qNcTbJZRAiSazr7KyUJ # Go1c+MScGfG5QHV+bps8BX5Oyv9Ct36Y4Il6ajTqV2ifikkVtB3RNBUgwu/mSiSU # ice/Jp/q8BMk/gN8+0rNIE+QqU63JoVMCMPY2752LmESsRVVoypJVt8/N3qQ1c6F # ibbcRabo3azZkcIdWGVSAdoLgAIxEKBeNh9AQO1gQrnh1TA8ldXuJzPSuALOz1Uj # b0PCyNVkWk7hkhVHfcvBfI8NtgWQupiaAeNHe0pWSGH2opXZYKYG4Lbukg7HpNi/ # KqJhue2Keak6qH9A8CeEOB7Eob0Zf+fU+CCQaL0cJqlmnx9HCDxF+3BLbUufrV64 # EbTI40zqegPZdA+sXCmbcZy6okx/SjwsusWRItFA3DE8MORZeFb6BmzBtqKJ7l93 # 9bbKBy2jvxcJI98Va95Q5JnlKor3m0E7xpMeYRriWklUPsetMSf2NvUQa/E5vVye # fQIwggZFMIIELaADAgECAhAIMk+dt9qRb2Pk8qM8Xl1RMA0GCSqGSIb3DQEBCwUA # MFYxCzAJBgNVBAYTAlBMMSEwHwYDVQQKExhBc3NlY28gRGF0YSBTeXN0ZW1zIFMu # QS4xJDAiBgNVBAMTG0NlcnR1bSBDb2RlIFNpZ25pbmcgMjAyMSBDQTAeFw0yNDA0 # MDQxNDA0MjRaFw0yNzA0MDQxNDA0MjNaMGsxCzAJBgNVBAYTAk5MMRIwEAYDVQQH # DAlTY2hpam5kZWwxIzAhBgNVBAoMGkpvaG4gQmlsbGVrZW5zIENvbnN1bHRhbmN5 # MSMwIQYDVQQDDBpKb2huIEJpbGxla2VucyBDb25zdWx0YW5jeTCCAaIwDQYJKoZI # hvcNAQEBBQADggGPADCCAYoCggGBAMslntDbSQwHZXwFhmibivbnd0Qfn6sqe/6f # os3pKzKxEsR907RkDMet2x6RRg3eJkiIr3TFPwqBooyXXgK3zxxpyhGOcuIqyM9J # 28DVf4kUyZHsjGO/8HFjrr3K1hABNUszP0o7H3o6J31eqV1UmCXYhQlNoW9FOmRC # 1amlquBmh7w4EKYEytqdmdOBavAD5Xq4vLPxNP6kyA+B2YTtk/xM27TghtbwFGKn # u9Vwnm7dFcpLxans4ONt2OxDQOMA5NwgcUv/YTpjhq9qoz6ivG55NRJGNvUXsM3w # 2o7dR6Xh4MuEGrTSrOWGg2A5EcLH1XqQtkF5cZnAPM8W/9HUp8ggornWnFVQ9/6M # ga+ermy5wy5XrmQpN+x3u6tit7xlHk1Hc+4XY4a4ie3BPXG2PhJhmZAn4ebNSBwN # Hh8z7WTT9X9OFERepGSytZVeEP7hgyptSLcuhpwWeR4QdBb7dV++4p3PsAUQVHFp # wkSbrRTv4EiJ0Lcz9P1HPGFoHiFAQQIDAQABo4IBeDCCAXQwDAYDVR0TAQH/BAIw # ADA9BgNVHR8ENjA0MDKgMKAuhixodHRwOi8vY2NzY2EyMDIxLmNybC5jZXJ0dW0u # cGwvY2NzY2EyMDIxLmNybDBzBggrBgEFBQcBAQRnMGUwLAYIKwYBBQUHMAGGIGh0 # dHA6Ly9jY3NjYTIwMjEub2NzcC1jZXJ0dW0uY29tMDUGCCsGAQUFBzAChilodHRw # Oi8vcmVwb3NpdG9yeS5jZXJ0dW0ucGwvY2NzY2EyMDIxLmNlcjAfBgNVHSMEGDAW # gBTddF1MANt7n6B0yrFu9zzAMsBwzTAdBgNVHQ4EFgQUO6KtBpOBgmrlANVAnyiQ # C6W6lJwwSwYDVR0gBEQwQjAIBgZngQwBBAEwNgYLKoRoAYb2dwIFAQQwJzAlBggr # BgEFBQcCARYZaHR0cHM6Ly93d3cuY2VydHVtLnBsL0NQUzATBgNVHSUEDDAKBggr # BgEFBQcDAzAOBgNVHQ8BAf8EBAMCB4AwDQYJKoZIhvcNAQELBQADggIBAEQsN8wg # PMdWVkwHPPTN+jKpdns5AKVFjcn00psf2NGVVgWWNQBIQc9lEuTBWb54IK6Ga3hx # QRZfnPNo5HGl73YLmFgdFQrFzZ1lnaMdIcyh8LTWv6+XNWfoyCM9wCp4zMIDPOs8 # LKSMQqA/wRgqiACWnOS4a6fyd5GUIAm4CuaptpFYr90l4Dn/wAdXOdY32UhgzmSu # xpUbhD8gVJUaBNVmQaRqeU8y49MxiVrUKJXde1BCrtR9awXbqembc7Nqvmi60tYK # lD27hlpKtj6eGPjkht0hHEsgzU0Fxw7ZJghYG2wXfpF2ziN893ak9Mi/1dmCNmor # GOnybKYfT6ff6YTCDDNkod4egcMZdOSv+/Qv+HAeIgEvrxE9QsGlzTwbRtbm6gwY # YcVBs/SsVUdBn/TSB35MMxRhHE5iC3aUTkDbceo/XP3uFhVL4g2JZHpFfCSu2TQr # rzRn2sn07jfMvzeHArCOJgBW1gPqR3WrJ4hUxL06Rbg1gs9tU5HGGz9KNQMfQFQ7 # 0Wz7UIhezGcFcRfkIfSkMmQYYpsc7rfzj+z0ThfDVzzJr2dMOFsMlfj1T6l22GBq # 9XQx0A4lcc5Fl9pRxbOuHHWFqIBD/BCEhwniOCySzqENd2N+oz8znKooSISStnkN # aYXt6xblJF2dx9Dn89FK7d1IquNxOwt0tI5dMIIGYjCCBMqgAwIBAgIRAKQpO24e # 3denNAiHrXpOtyQwDQYJKoZIhvcNAQEMBQAwVTELMAkGA1UEBhMCR0IxGDAWBgNV # BAoTD1NlY3RpZ28gTGltaXRlZDEsMCoGA1UEAxMjU2VjdGlnbyBQdWJsaWMgVGlt # ZSBTdGFtcGluZyBDQSBSMzYwHhcNMjUwMzI3MDAwMDAwWhcNMzYwMzIxMjM1OTU5 # WjByMQswCQYDVQQGEwJHQjEXMBUGA1UECBMOV2VzdCBZb3Jrc2hpcmUxGDAWBgNV # BAoTD1NlY3RpZ28gTGltaXRlZDEwMC4GA1UEAxMnU2VjdGlnbyBQdWJsaWMgVGlt # ZSBTdGFtcGluZyBTaWduZXIgUjM2MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC # CgKCAgEA04SV9G6kU3jyPRBLeBIHPNyUgVNnYayfsGOyYEXrn3+SkDYTLs1crcw/ # ol2swE1TzB2aR/5JIjKNf75QBha2Ddj+4NEPKDxHEd4dEn7RTWMcTIfm492TW22I # 8LfH+A7Ehz0/safc6BbsNBzjHTt7FngNfhfJoYOrkugSaT8F0IzUh6VUwoHdYDpi # ln9dh0n0m545d5A5tJD92iFAIbKHQWGbCQNYplqpAFasHBn77OqW37P9BhOASdmj # p3IijYiFdcA0WQIe60vzvrk0HG+iVcwVZjz+t5OcXGTcxqOAzk1frDNZ1aw8nFhG # EvG0ktJQknnJZE3D40GofV7O8WzgaAnZmoUn4PCpvH36vD4XaAF2CjiPsJWiY/j2 # xLsJuqx3JtuI4akH0MmGzlBUylhXvdNVXcjAuIEcEQKtOBR9lU4wXQpISrbOT8ux # +96GzBq8TdbhoFcmYaOBZKlwPP7pOp5Mzx/UMhyBA93PQhiCdPfIVOCINsUY4U23 # p4KJ3F1HqP3H6Slw3lHACnLilGETXRg5X/Fp8G8qlG5Y+M49ZEGUp2bneRLZoyHT # yynHvFISpefhBCV0KdRZHPcuSL5OAGWnBjAlRtHvsMBrI3AAA0Tu1oGvPa/4yeei # Ayu+9y3SLC98gDVbySnXnkujjhIh+oaatsk/oyf5R2vcxHahajMCAwEAAaOCAY4w # ggGKMB8GA1UdIwQYMBaAFF9Y7UwxeqJhQo1SgLqzYZcZojKbMB0GA1UdDgQWBBSI # YYyhKjdkgShgoZsx0Iz9LALOTzAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIw # ADAWBgNVHSUBAf8EDDAKBggrBgEFBQcDCDBKBgNVHSAEQzBBMDUGDCsGAQQBsjEB # AgEDCDAlMCMGCCsGAQUFBwIBFhdodHRwczovL3NlY3RpZ28uY29tL0NQUzAIBgZn # gQwBBAIwSgYDVR0fBEMwQTA/oD2gO4Y5aHR0cDovL2NybC5zZWN0aWdvLmNvbS9T # ZWN0aWdvUHVibGljVGltZVN0YW1waW5nQ0FSMzYuY3JsMHoGCCsGAQUFBwEBBG4w # bDBFBggrBgEFBQcwAoY5aHR0cDovL2NydC5zZWN0aWdvLmNvbS9TZWN0aWdvUHVi # bGljVGltZVN0YW1waW5nQ0FSMzYuY3J0MCMGCCsGAQUFBzABhhdodHRwOi8vb2Nz # cC5zZWN0aWdvLmNvbTANBgkqhkiG9w0BAQwFAAOCAYEAAoE+pIZyUSH5ZakuPVKK # 4eWbzEsTRJOEjbIu6r7vmzXXLpJx4FyGmcqnFZoa1dzx3JrUCrdG5b//LfAxOGy9 # Ph9JtrYChJaVHrusDh9NgYwiGDOhyyJ2zRy3+kdqhwtUlLCdNjFjakTSE+hkC9F5 # ty1uxOoQ2ZkfI5WM4WXA3ZHcNHB4V42zi7Jk3ktEnkSdViVxM6rduXW0jmmiu71Z # pBFZDh7Kdens+PQXPgMqvzodgQJEkxaION5XRCoBxAwWwiMm2thPDuZTzWp/gUFz # i7izCmEt4pE3Kf0MOt3ccgwn4Kl2FIcQaV55nkjv1gODcHcD9+ZVjYZoyKTVWb4V # qMQy/j8Q3aaYd/jOQ66Fhk3NWbg2tYl5jhQCuIsE55Vg4N0DUbEWvXJxtxQQaVR5 # xzhEI+BjJKzh3TQ026JxHhr2fuJ0mV68AluFr9qshgwS5SpN5FFtaSEnAwqZv3IS # +mlG50rK7W3qXbWwi4hmpylUfygtYLEdLQukNEX1jiOKMIIGgjCCBGqgAwIBAgIQ # NsKwvXwbOuejs902y8l1aDANBgkqhkiG9w0BAQwFADCBiDELMAkGA1UEBhMCVVMx # EzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNleSBDaXR5MR4wHAYD # VQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMTJVVTRVJUcnVzdCBS # U0EgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMjEwMzIyMDAwMDAwWhcNMzgw # MTE4MjM1OTU5WjBXMQswCQYDVQQGEwJHQjEYMBYGA1UEChMPU2VjdGlnbyBMaW1p # dGVkMS4wLAYDVQQDEyVTZWN0aWdvIFB1YmxpYyBUaW1lIFN0YW1waW5nIFJvb3Qg # UjQ2MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAiJ3YuUVnnR3d6Lkm # gZpUVMB8SQWbzFoVD9mUEES0QUCBdxSZqdTkdizICFNeINCSJS+lV1ipnW5ihkQy # C0cRLWXUJzodqpnMRs46npiJPHrfLBOifjfhpdXJ2aHHsPHggGsCi7uE0awqKggE # /LkYw3sqaBia67h/3awoqNvGqiFRJ+OTWYmUCO2GAXsePHi+/JUNAax3kpqstbl3 # vcTdOGhtKShvZIvjwulRH87rbukNyHGWX5tNK/WABKf+Gnoi4cmisS7oSimgHUI0 # Wn/4elNd40BFdSZ1EwpuddZ+Wr7+Dfo0lcHflm/FDDrOJ3rWqauUP8hsokDoI7D/ # yUVI9DAE/WK3Jl3C4LKwIpn1mNzMyptRwsXKrop06m7NUNHdlTDEMovXAIDGAvYy # nPt5lutv8lZeI5w3MOlCybAZDpK3Dy1MKo+6aEtE9vtiTMzz/o2dYfdP0KWZwZIX # bYsTIlg1YIetCpi5s14qiXOpRsKqFKqav9R1R5vj3NgevsAsvxsAnI8Oa5s2oy25 # qhsoBIGo/zi6GpxFj+mOdh35Xn91y72J4RGOJEoqzEIbW3q0b2iPuWLA911cRxgY # 5SJYubvjay3nSMbBPPFsyl6mY4/WYucmyS9lo3l7jk27MAe145GWxK4O3m3gEFEI # kv7kRmefDR7Oe2T1HxAnICQvr9sCAwEAAaOCARYwggESMB8GA1UdIwQYMBaAFFN5 # v1qqK0rPVIDh2JvAnfKyA2bLMB0GA1UdDgQWBBT2d2rdP/0BE/8WoWyCAi/QCj0U # JTAOBgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zATBgNVHSUEDDAKBggr # BgEFBQcDCDARBgNVHSAECjAIMAYGBFUdIAAwUAYDVR0fBEkwRzBFoEOgQYY/aHR0 # cDovL2NybC51c2VydHJ1c3QuY29tL1VTRVJUcnVzdFJTQUNlcnRpZmljYXRpb25B # dXRob3JpdHkuY3JsMDUGCCsGAQUFBwEBBCkwJzAlBggrBgEFBQcwAYYZaHR0cDov # L29jc3AudXNlcnRydXN0LmNvbTANBgkqhkiG9w0BAQwFAAOCAgEADr5lQe1oRLjl # ocXUEYfktzsljOt+2sgXke3Y8UPEooU5y39rAARaAdAxUeiX1ktLJ3+lgxtoLQhn # 5cFb3GF2SSZRX8ptQ6IvuD3wz/LNHKpQ5nX8hjsDLRhsyeIiJsms9yAWnvdYOdEM # q1W61KE9JlBkB20XBee6JaXx4UBErc+YuoSb1SxVf7nkNtUjPfcxuFtrQdRMRi/f # InV/AobE8Gw/8yBMQKKaHt5eia8ybT8Y/Ffa6HAJyz9gvEOcF1VWXG8OMeM7Vy7B # s6mSIkYeYtddU1ux1dQLbEGur18ut97wgGwDiGinCwKPyFO7ApcmVJOtlw9FVJxw # /mL1TbyBns4zOgkaXFnnfzg4qbSvnrwyj1NiurMp4pmAWjR+Pb/SIduPnmFzbSN/ # G8reZCL4fvGlvPFk4Uab/JVCSmj59+/mB2Gn6G/UYOy8k60mKcmaAZsEVkhOFuoj # 4we8CYyaR9vd9PGZKSinaZIkvVjbH/3nlLb0a7SBIkiRzfPfS9T+JesylbHa1LtR # V9U/7m0q7Ma2CQ/t392ioOssXW7oKLdOmMBl14suVFBmbzrt5V5cQPnwtd3UOTpS # 9oCG+ZZheiIvPgkDmA8FzPsnfXW5qHELB43ET7HHFHeRPRYrMBKjkb8/IN7Po0d0 # hQoF4TeMM+zYAJzoKQnVKOLg8pZVPT8wgga5MIIEoaADAgECAhEAmaOACiZVO2Wr # 3G6EprPqOTANBgkqhkiG9w0BAQwFADCBgDELMAkGA1UEBhMCUEwxIjAgBgNVBAoT # GVVuaXpldG8gVGVjaG5vbG9naWVzIFMuQS4xJzAlBgNVBAsTHkNlcnR1bSBDZXJ0 # aWZpY2F0aW9uIEF1dGhvcml0eTEkMCIGA1UEAxMbQ2VydHVtIFRydXN0ZWQgTmV0 # d29yayBDQSAyMB4XDTIxMDUxOTA1MzIxOFoXDTM2MDUxODA1MzIxOFowVjELMAkG # A1UEBhMCUEwxITAfBgNVBAoTGEFzc2VjbyBEYXRhIFN5c3RlbXMgUy5BLjEkMCIG # A1UEAxMbQ2VydHVtIENvZGUgU2lnbmluZyAyMDIxIENBMIICIjANBgkqhkiG9w0B # AQEFAAOCAg8AMIICCgKCAgEAnSPPBDAjO8FGLOczcz5jXXp1ur5cTbq96y34vuTm # flN4mSAfgLKTvggv24/rWiVGzGxT9YEASVMw1Aj8ewTS4IndU8s7VS5+djSoMcbv # IKck6+hI1shsylP4JyLvmxwLHtSworV9wmjhNd627h27a8RdrT1PH9ud0IF+njvM # k2xqbNTIPsnWtw3E7DmDoUmDQiYi/ucJ42fcHqBkbbxYDB7SYOouu9Tj1yHIohzu # C8KNqfcYf7Z4/iZgkBJ+UFNDcc6zokZ2uJIxWgPWXMEmhu1gMXgv8aGUsRdaCtVD # 2bSlbfsq7BiqljjaCun+RJgTgFRCtsuAEw0pG9+FA+yQN9n/kZtMLK+Wo837Q4QO # ZgYqVWQ4x6cM7/G0yswg1ElLlJj6NYKLw9EcBXE7TF3HybZtYvj9lDV2nT8mFSkc # SkAExzd4prHwYjUXTeZIlVXqj+eaYqoMTpMrfh5MCAOIG5knN4Q/JHuurfTI5XDY # O962WZayx7ACFf5ydJpoEowSP07YaBiQ8nXpDkNrUA9g7qf/rCkKbWpQ5boufUnq # 1UiYPIAHlezf4muJqxqIns/kqld6JVX8cixbd6PzkDpwZo4SlADaCi2JSplKShBS # ND36E/ENVv8urPS0yOnpG4tIoBGxVCARPCg1BnyMJ4rBJAcOSnAWd18Jx5n858JS # qPECAwEAAaOCAVUwggFRMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFN10XUwA # 23ufoHTKsW73PMAywHDNMB8GA1UdIwQYMBaAFLahVDkCw6A/joq8+tT4HKbROg79 # MA4GA1UdDwEB/wQEAwIBBjATBgNVHSUEDDAKBggrBgEFBQcDAzAwBgNVHR8EKTAn # MCWgI6Ahhh9odHRwOi8vY3JsLmNlcnR1bS5wbC9jdG5jYTIuY3JsMGwGCCsGAQUF # BwEBBGAwXjAoBggrBgEFBQcwAYYcaHR0cDovL3N1YmNhLm9jc3AtY2VydHVtLmNv # bTAyBggrBgEFBQcwAoYmaHR0cDovL3JlcG9zaXRvcnkuY2VydHVtLnBsL2N0bmNh # Mi5jZXIwOQYDVR0gBDIwMDAuBgRVHSAAMCYwJAYIKwYBBQUHAgEWGGh0dHA6Ly93 # d3cuY2VydHVtLnBsL0NQUzANBgkqhkiG9w0BAQwFAAOCAgEAdYhYD+WPUCiaU58Q # 7EP89DttyZqGYn2XRDhJkL6P+/T0IPZyxfxiXumYlARMgwRzLRUStJl490L94C9L # GF3vjzzH8Jq3iR74BRlkO18J3zIdmCKQa5LyZ48IfICJTZVJeChDUyuQy6rGDxLU # UAsO0eqeLNhLVsgw6/zOfImNlARKn1FP7o0fTbj8ipNGxHBIutiRsWrhWM2f8pXd # d3x2mbJCKKtl2s42g9KUJHEIiLni9ByoqIUul4GblLQigO0ugh7bWRLDm0CdY9rN # LqyA3ahe8WlxVWkxyrQLjH8ItI17RdySaYayX3PhRSC4Am1/7mATwZWwSD+B7eMc # ZNhpn8zJ+6MTyE6YoEBSRVrs0zFFIHUR08Wk0ikSf+lIe5Iv6RY3/bFAEloMU+vU # BfSouCReZwSLo8WdrDlPXtR0gicDnytO7eZ5827NS2x7gCBibESYkOh1/w1tVxTp # V2Na3PR7nxYVlPu1JPoRZCbH86gc96UTvuWiOruWmyOEMLOGGniR+x+zPF/2DaGg # K2W1eEJfo2qyrBNPvF7wuAyQfiFXLwvWHamoYtPZo0LHuH8X3n9C+xN4YaNjt2yw # zOr+tKyEVAotnyU9vyEVOaIYMk3IeBrmFnn0gbKeTTyYeEEUz/Qwt4HOUBCrW602 # NCmvO1nm+/80nLy5r0AZvCQxaQ4xggXDMIIFvwIBATBqMFYxCzAJBgNVBAYTAlBM # MSEwHwYDVQQKExhBc3NlY28gRGF0YSBTeXN0ZW1zIFMuQS4xJDAiBgNVBAMTG0Nl # cnR1bSBDb2RlIFNpZ25pbmcgMjAyMSBDQQIQCDJPnbfakW9j5PKjPF5dUTANBglg # hkgBZQMEAgEFAKCBhDAYBgorBgEEAYI3AgEMMQowCKACgAChAoAAMBkGCSqGSIb3 # DQEJAzEMBgorBgEEAYI3AgEEMBwGCisGAQQBgjcCAQsxDjAMBgorBgEEAYI3AgEV # MC8GCSqGSIb3DQEJBDEiBCDX3fv9TomsOrkRZd6U8eA81YREKEh5ODoTyH71Dk9i # mDANBgkqhkiG9w0BAQEFAASCAYBxFoLMiwt/7jSBpTxMeehUestlueA7LmQTmu1a # uOukRQzL6X5MTnB0JEg71wLwUlCk7i2x2n0ax6YNsCvYVUvuGe89KsW4y4a2GjJQ # cTsGdGhO6sB06aL5TzyMTF8ISco0ChoQyORxHN0pxG4o06P4+Ti2A4E07n8MHAZB # xNR1J7BGHjcpvN39mMUs5eOGVZ5KbTuRjSLr/EsfyKLEqUJgsWQfE5MelwLoV2aP # +VmY+ll2oH/SyUKX44e3dQXrX/pmHfs5WLt1svep3ZE1X8UXcM2L7+QEIttG1rr7 # CjDA3/6h3gMwHWk0Z9dZBanmD8Oi0gEKf0Vj9Y9L4KrOGBLmRNu2w+gQZWpTJgEA # Fd48yUePMT1QJh5Gys+AxQStRZNE0j3+vAWELDsR0aq+4prHIhQFxRat5/AqXJ2Q # IvjrxbraHeqSFZUWkzrfPuJOrLo/3B7TH0oe5YbYip26oJQAECdeUtbJfwjGJRgE # JTSpKOLsQIO+kL32s9ILzOa6+gehggMjMIIDHwYJKoZIhvcNAQkGMYIDEDCCAwwC # AQEwajBVMQswCQYDVQQGEwJHQjEYMBYGA1UEChMPU2VjdGlnbyBMaW1pdGVkMSww # KgYDVQQDEyNTZWN0aWdvIFB1YmxpYyBUaW1lIFN0YW1waW5nIENBIFIzNgIRAKQp # O24e3denNAiHrXpOtyQwDQYJYIZIAWUDBAICBQCgeTAYBgkqhkiG9w0BCQMxCwYJ # KoZIhvcNAQcBMBwGCSqGSIb3DQEJBTEPFw0yNjAxMzAxNjM5NTZaMD8GCSqGSIb3 # DQEJBDEyBDCxrJIasj4/ZNWNGSDnOVo6TltpL4Yzsf53FsBW7ka/fwZi8481SFml # KBxoHMyVL84wDQYJKoZIhvcNAQEBBQAEggIAnrfHudzJ1KwCjkdVO8RcNc64i9mF # XCsSr9GbSrYyFtcoEjN92i7HxBJrfOvEaKFWLXUgCZsB2nwiJ7DvCwaJoUBZUob1 # yuzxPihx1KhpEZILjW8cjZHTuU0IzOSIDIvGXs9lE8hKvW0PZTH4GaGYffJjMF// # fk8oAhaaXJhocTCgwNVGIW4D0/m8Kpjw3XKTWi6ov6UWfEKetYVBV+a6k/XfUiQM # zxCp+q2/9zruvcnLmbi+4hpdJaa396t0jQS6M/5exiAvLJU7hmITc7H9RKG5NAD7 # o5qVr+O+6QhrgnYsp2ZvrW8hOzClNXjDTzr2q2dHkLxAT714ZBb3mwWe02sBR7uK # fnk5nhcvGx7EIhHCwZbNoZ/LyU9uZfa+6vI2Zhxr4r+A2cNR5tJzhz9jqLS3+AcJ # yYILopLHD+L6h0uR9NF816QayCFjUDNeU288ns1e4HBrI3Ml4cEN5awsHzcw62Xe # iZSuA9dZpe5BAhUPWKu1Dp26VY2FaLGfIhiQtNZf8OJXJQyxCPN+b3zV6EOIKWID # dx78Oj29Mw9V1TsMD0eTOPO0jKPbe+GG59WT9TBNmpYjnRx2nj7JTTLfTd/iJpBE # yFs5D/MciRlDMvpwZ4ICirUrYCHZMiybkCN/K2ynuTAVoM6HwDdU9rTqTJM972Jc # nXwqjHiNz6G26lE= # SIG # End signature block |