Bacpac/Export-NavContainerDatabasesAsBacpac.ps1
<#
.Synopsis Export databases in a NAV/BC Container as .bacpac files .Description If the Container is multi-tenant, this command will create an app.bacpac and a tenant.bacpac. If the Container is single-tenant, this command will create one bacpac file called database.bacpac. .Parameter containerName Name of the container for which you want to export and convert objects .Parameter sqlCredential Credentials for the SQL admin user if using NavUserPassword authentication. User will be prompted if not provided .Parameter bacpacFolder The folder to which the bacpac files are exported (needs to be shared with the container) .Parameter tenant The tenant database(s) to export, only applies to multi-tenant containers Omit to export tenant template, specify default to export the default tenant. .Parameter doNotCheckEntitlements Include this parameter to avoid checking entitlements. Entitlements are needed if the .bacpac file is to be used for cloud deployments. .Parameter includeDacPac Use this parameter to export databases as dacpac .Parameter dacPacOnly Use this parameter to export databases as dacpac only (skip Bacpac) .Parameter commandTimeout Timeout in seconds for the export command for every database. Default is 1 hour (3600). .Parameter diagnostics Include this switch to enable diagnostics from the database export command Timeout in seconds for the export command for every database. Default is 1 hour (3600). .Parameter additionalArguments Use this parameter to specify additional arguments to sqlpackage.exe .Example Export-BcContainerDatabasesAsBacpac -containerName test .Example Export-BcContainerDatabasesAsBacpac -containerName test -bacpacfolder "c:\programdata\bccontainerhelper\extensions\test" .Example Export-BcContainerDatabasesAsBacpac -containerName test -bacpacfolder "c:\demo" -sqlCredential <sqlCredential> .Example Export-BcContainerDatabasesAsBacpac -containerName test -tenant default .Example Export-BcContainerDatabasesAsBacpac -containerName test -tenant @("default","tenant") #> function Export-BcContainerDatabasesAsBacpac { Param ( [string] $containerName = $bcContainerHelperConfig.defaultContainerName, [PSCredential] $sqlCredential = $null, [string] $bacpacFolder = "", [string[]] $tenant = @("default"), [int] $commandTimeout = 3600, [switch] $includeDacPac, [switch] $dacPacOnly, [switch] $diagnostics, [switch] $doNotCheckEntitlements, [string[]] $additionalArguments = @() ) $telemetryScope = InitTelemetryScope -name $MyInvocation.InvocationName -parameterValues $PSBoundParameters -includeParameters @() try { $genericTag = Get-BcContainerGenericTag -containerOrImageName $containerName if ([System.Version]$genericTag -lt [System.Version]"0.0.4.5") { throw "Export-DatabasesAsBacpac is not supported in images with generic tag prior to 0.0.4.5" } $sqlCredential = Get-DefaultSqlCredential -containerName $containerName -sqlCredential $sqlCredential $containerFolder = Join-Path $bcContainerHelperConfig.hostHelperFolder "Extensions\$containerName" if ("$bacpacFolder" -eq "") { $bacpacFolder = $containerFolder } $containerBacpacFolder = Get-BcContainerPath -containerName $containerName -path $bacpacFolder -throw Invoke-ScriptInBcContainer -containerName $containerName -ScriptBlock { Param([PSCredential]$sqlCredential, $bacpacFolder, $tenant, $commandTimeout, $includeDacPac, $dacPacOnly, $diagnostics, $additionalArguments, $doNotCheckEntitlements) function CmdDo { Param( [string] $command = "", [string] $arguments = "", [switch] $silent, [switch] $returnValue, [string] $inputStr = "", [string] $messageIfCmdNotFound = "" ) $oldNoColor = "$env:NO_COLOR" $env:NO_COLOR = "Y" $oldEncoding = [Console]::OutputEncoding try { [Console]::OutputEncoding = [System.Text.Encoding]::UTF8 } catch {} try { $pinfo = New-Object System.Diagnostics.ProcessStartInfo $pinfo.FileName = $command $pinfo.RedirectStandardError = $true $pinfo.RedirectStandardOutput = $true if ($inputStr) { $pinfo.RedirectStandardInput = $true } $pinfo.WorkingDirectory = Get-Location $pinfo.UseShellExecute = $false $pinfo.Arguments = $arguments $pinfo.WindowStyle = [System.Diagnostics.ProcessWindowStyle]::Minimized $p = New-Object System.Diagnostics.Process $p.StartInfo = $pinfo $p.Start() | Out-Null if ($inputStr) { $p.StandardInput.WriteLine($inputStr) $p.StandardInput.Close() } $outtask = $p.StandardOutput.ReadToEndAsync() $errtask = $p.StandardError.ReadToEndAsync() $p.WaitForExit(); $message = $outtask.Result $err = $errtask.Result if ("$err" -ne "") { $message += "$err" } $message = $message.Trim() if ($p.ExitCode -eq 0) { if (!$silent) { Write-Host $message } if ($returnValue) { $message.Replace("`r", "").Split("`n") } } else { $message += "`n`nExitCode: " + $p.ExitCode + "`nCommandline: $command $arguments" throw $message } } catch [System.ComponentModel.Win32Exception] { if ($_.Exception.NativeErrorCode -eq 2) { if ($messageIfCmdNotFound) { throw $messageIfCmdNotFound } else { throw "Command $command not found, you might need to install that command." } } else { throw } } finally { try { [Console]::OutputEncoding = $oldEncoding } catch {} $env:NO_COLOR = $oldNoColor } } function InstallPrerequisite { Param ( [Parameter(Mandatory=$true)] [string] $Name, [Parameter(Mandatory=$true)] [string] $MsiPath, [Parameter(Mandatory=$true)] [string] $MsiUrl ) if (!(Test-Path $MsiPath)) { Write-Host "Downloading $Name" $MsiFolder = [System.IO.Path]::GetDirectoryName($MsiPath) if (!(Test-Path $MsiFolder)) { New-Item -Path $MsiFolder -ItemType Directory | Out-Null } [Net.ServicePointManager]::SecurityProtocol = [Net.ServicePointManager]::SecurityProtocol -bor [Net.SecurityProtocolType]::Tls12 (New-Object System.Net.WebClient).DownloadFile($MsiUrl, $MsiPath) } Write-Host "Installing $Name" start-process $MsiPath -ArgumentList "/quiet /qn /passive" -Wait } function Install-DACFx { $sqlpakcageExe = Get-Item "C:\Program Files\Microsoft SQL Server\*\DAC\bin\sqlpackage.exe" | Sort-Object -Property FullName -Descending | Select-Object -First 1 if (!($sqlpakcageExe)) { InstallPrerequisite -Name "Dac Framework 19.0" -MsiPath "c:\download\DacFramework.msi" -MsiUrl "https://go.microsoft.com/fwlink/?linkid=2185764" | Out-Null $sqlpakcageExe = Get-Item "C:\Program Files\Microsoft SQL Server\*\DAC\bin\sqlpackage.exe" } $sqlpakcageExe.FullName } function Remove-NetworkServiceUser { Param ( [Parameter(Mandatory=$true)] [string] $DatabaseName, [Parameter(Mandatory=$true)] [string] $DatabaseServer, [Parameter(Mandatory=$false)] [PSCredential] $sqlCredential = $null ) $params = @{ 'ErrorAction' = 'Ignore'; 'ServerInstance' = $databaseServer } if ($sqlCredential) { $params += @{ 'Username' = $sqlCredential.UserName; 'Password' = ([System.Runtime.InteropServices.Marshal]::PtrToStringBSTR([System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($sqlCredential.Password))) } } Write-Host "Remove Network Service User from $DatabaseName" Invoke-Sqlcmd @params -Query "USE [$DatabaseName] IF EXISTS (SELECT 'X' FROM sysusers WHERE name = 'NT AUTHORITY\NETWORK SERVICE' and isntuser = 1) BEGIN DROP USER [NT AUTHORITY\NETWORK SERVICE] END" Write-Host "Remove System User from $DatabaseName" Invoke-Sqlcmd @params -Query "USE [$DatabaseName] IF EXISTS (SELECT 'X' FROM sysusers WHERE name = 'NT AUTHORITY\SYSTEM' and isntuser = 1) BEGIN DROP USER [NT AUTHORITY\SYSTEM] END" } function Remove-WindowsUsers { Param ( [Parameter(Mandatory=$true)] [string] $DatabaseName, [Parameter(Mandatory=$true)] [string] $DatabaseServer, [Parameter(Mandatory=$false)] [PSCredential] $sqlCredential = $null ) $params = @{ 'ErrorAction' = 'Ignore'; 'ServerInstance' = $databaseServer } if ($sqlCredential) { $params += @{ 'Username' = $sqlCredential.UserName; 'Password' = ([System.Runtime.InteropServices.Marshal]::PtrToStringBSTR([System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($sqlCredential.Password))) } } Write-Host "Remove Windows Users from $DatabaseName" Invoke-Sqlcmd @params -Query "USE [$DatabaseName] declare @sql nvarchar(max) set @sql = '' SELECT @sql = @sql+' drop user [' + name + '] 'FROM sys.database_principals WHERE sys.database_principals.authentication_type = 3 and sys.database_principals.name != 'dbo' execute ( @sql )" } function Remove-ApplicationRoles { Param ( [Parameter(Mandatory=$true)] [string] $DatabaseName, [Parameter(Mandatory=$true)] [string] $DatabaseServer, [Parameter(Mandatory=$false)] [PSCredential] $sqlCredential = $null ) $params = @{ 'ErrorAction' = 'Ignore'; 'ServerInstance' = $databaseServer } if ($sqlCredential) { $params += @{ 'Username' = $sqlCredential.UserName; 'Password' = ([System.Runtime.InteropServices.Marshal]::PtrToStringBSTR([System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($sqlCredential.Password))) } } Write-Host "Remove Application Roles from $DatabaseName" Invoke-Sqlcmd @params -Query "USE [$DatabaseName] declare @sql nvarchar(max) set @sql = '' SELECT @sql = @sql+' drop application role [' + name + '] 'FROM sys.database_principals WHERE sys.database_principals.type = 'A' execute ( @sql )" } function Check-Entitlements { Param ( [Parameter(Mandatory=$true)] [string] $DatabaseName, [Parameter(Mandatory=$true)] [string] $DatabaseServer, [Parameter(Mandatory=$false)] [PSCredential] $sqlCredential = $null ) Write-Host "Checking Entitlements" $params = @{ 'ErrorAction' = 'Ignore'; 'ServerInstance' = $databaseServer } if ($sqlCredential) { $params += @{ 'Username' = $sqlCredential.UserName; 'Password' = ([System.Runtime.InteropServices.Marshal]::PtrToStringBSTR([System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($sqlCredential.Password))) } } 'Membership Entitlement', 'Entitlement Set', 'Entitlement' | % { $result = Invoke-Sqlcmd @params -query "USE [$DatabaseName] select count(*) from [dbo].[$_]" if (($result) -and ($result.Column1 -eq 0)) { throw "Entitlements are missing in table $_. Add -doNotCheckEntitlements to dismiss this error and create .bacpac files, that cannot be used for Cloud deployments." } } } function Remove-NavDatabaseSystemTableData { Param ( [Parameter(Mandatory=$true)] [string] $DatabaseName, [Parameter(Mandatory=$true)] [string] $DatabaseServer, [Parameter(Mandatory=$false)] [PSCredential] $sqlCredential = $null ) $params = @{ 'ErrorAction' = 'Ignore'; 'ServerInstance' = $databaseServer } if ($sqlCredential) { $params += @{ 'Username' = $sqlCredential.UserName; 'Password' = ([System.Runtime.InteropServices.Marshal]::PtrToStringBSTR([System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($sqlCredential.Password))) } } Write-Host "Remove data from System Tables database $DatabaseName" 'Server Instance','$ndo$cachesync','$ndo$tenants','Object Tracking' | % { Invoke-Sqlcmd @params -Query "USE [$DatabaseName] DELETE FROM dbo.[$_]" } Invoke-Sqlcmd @params -Query "USE [$DatabaseName] UPDATE [dbo].[`$ndo`$dbproperty] SET [license] = NULL" Invoke-Sqlcmd @params -Query "USE [$DatabaseName] IF EXISTS ( SELECT 'X' FROM [sys].[tables] WHERE name = 'Active Session' AND type = 'U' ) BEGIN Delete from dbo.[Active Session] END" Invoke-Sqlcmd @params -Query "USE [$DatabaseName] IF EXISTS ( SELECT 'X' FROM [sys].[tables] WHERE name = 'Session Event' AND type = 'U' ) BEGIN Delete from dbo.[Session Event] END" Remove-NetworkServiceUser -DatabaseServer $DatabaseServer -DatabaseName $DatabaseName -sqlCredential $sqlCredential } function Remove-NavTenantDatabaseUserData { Param ( [Parameter(Mandatory=$true)] [string] $DatabaseName, [Parameter(Mandatory=$true)] [string] $DatabaseServer, [Parameter(Mandatory=$false)] [PSCredential] $sqlCredential = $null, [switch] $KeepUserData ) $params = @{ 'ErrorAction' = 'Ignore'; 'ServerInstance' = $databaseServer } if ($sqlCredential) { $params += @{ 'Username' = $sqlCredential.UserName; 'Password' = ([System.Runtime.InteropServices.Marshal]::PtrToStringBSTR([System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($sqlCredential.Password))) } } if (!($KeepUserData)) { Write-Host "Remove data from User table and related tables in $DatabaseName database." 'Access Control', 'User Property', 'User Personalization', 'User Metadata', 'User Default Style Sheet', 'User', 'User Group Member', 'User Group Access Control', 'User Plan' | % { Invoke-Sqlcmd @params -Query "USE [$DatabaseName] DELETE FROM dbo.[$_]" } $tables = Invoke-Sqlcmd @params -Query "USE [$DatabaseName] SELECT name FROM sysobjects WHERE (xtype = 'U' ) AND (name LIKE '%User Login')" $tables | % { Write-Host "DELETE FROM dbo.[$($_.Name)]" Invoke-Sqlcmd @params -Query "USE [$DatabaseName] DELETE FROM dbo.[$($_.Name)]" } } Invoke-Sqlcmd @params -Query "USE [$DatabaseName] UPDATE [dbo].[$("$")ndo$("$")tenantproperty] SET [license] = NULL" 'Tenant License State', 'Active Session', 'Session Event' | % { Invoke-Sqlcmd @params -Query "USE [$DatabaseName] DELETE FROM dbo.[$_]" } Write-Host "Drop triggers from $DatabaseName" Invoke-Sqlcmd @params -Query "USE [$DatabaseName] DROP TRIGGER [dbo].[RemoveOnLogoutActiveSession]" Invoke-Sqlcmd @params -Query "USE [$DatabaseName] DROP TRIGGER [dbo].[DeleteActiveSession]" Write-Host "Drop Views from $DatabaseName" Invoke-Sqlcmd @Params -Query "USE [$DatabaseName] DROP VIEW IF EXISTS [dbo].[deadlock_report_ring_buffer_view]" Remove-NetworkServiceUser -DatabaseServer $DatabaseServer -DatabaseName $DatabaseName -sqlCredential $sqlCredential } function Do-Export { Param ( [Parameter(Mandatory=$true)] [string] $DatabaseName, [Parameter(Mandatory=$true)] [string] $DatabaseServer, [Parameter(Mandatory=$false)] [PSCredential] $sqlCredential = $null, [Parameter(Mandatory=$true)] [string] $targetFile, [Parameter(Mandatory=$false)] [int] $commandTimeout = 3600, [switch] $includeDacPac, [switch] $dacPacOnly, [switch] $diagnostics, [Parameter(Mandatory=$false)] [string[]] $additionalArguments = @() ) if (!$dacPacOnly) { Write-Host "Exporting as BacPac..." $arguments = @( ('/Action:Export'), ('/TargetFile:"'+$targetFile+'"'), ('/SourceDatabaseName:"'+$databaseName+'"'), ('/SourceServerName:"'+$databaseServer+'"'), ('/OverwriteFiles:True') ("/p:CommandTimeout=$commandTimeout") ) if ($diagnostics) { $arguments += @('/Diagnostics:True') } if ($sqlCredential) { $arguments += @( ('/SourceUser:"'+$sqlCredential.UserName+'"'), ('/SourcePassword:"'+([System.Runtime.InteropServices.Marshal]::PtrToStringBSTR([System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($sqlCredential.Password)))+'"') ) } if ($additionalArguments) { $arguments += $additionalArguments } CmdDo -command $sqlpackageExe -arguments ($arguments -join ' ') } if ($includeDacPac -or $dacPacOnly) { Write-Host "Extracting as DacPac..." $arguments = @( ('/Action:Extract'), ('/TargetFile:"'+$targetFile.Replace('.bacpac','.dacpac')+'"'), ('/SourceDatabaseName:"'+$databaseName+'"'), ('/SourceServerName:"'+$databaseServer+'"'), ('/OverwriteFiles:True') ('/p:VerifyExtraction=True') ('/p:ExtractAllTableData=True') ("/p:CommandTimeout=$commandTimeout") ) if ($diagnostics) { $arguments += @('/Diagnostics:True') } if ($sqlCredential) { $arguments += @( ('/SourceUser:"'+$sqlCredential.UserName+'"'), ('/SourcePassword:"'+([System.Runtime.InteropServices.Marshal]::PtrToStringBSTR([System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($sqlCredential.Password)))+'"') ) } if ($additionalArguments) { $arguments += $additionalArguments } CmdDo -command $sqlpackageExe -arguments ($arguments -join ' ') } } $customConfigFile = Join-Path (Get-Item "C:\Program Files\Microsoft Dynamics NAV\*\Service").FullName "CustomSettings.config" [xml]$customConfig = [System.IO.File]::ReadAllText($customConfigFile) $multitenant = ($customConfig.SelectSingleNode("//appSettings/add[@key='Multitenant']").Value -eq "true") $databaseServer = $customConfig.SelectSingleNode("//appSettings/add[@key='DatabaseServer']").Value $databaseInstance = $customConfig.SelectSingleNode("//appSettings/add[@key='DatabaseInstance']").Value $databaseName = $customConfig.SelectSingleNode("//appSettings/add[@key='DatabaseName']").Value $databaseServerInstance = $databaseServer if ("$databaseInstance" -ne "") { $databaseServerInstance = "$databaseServer\$databaseInstance" } $sqlPackageExe = Install-DACFx if (!(Test-Path $bacpacFolder)) { New-Item $bacpacFolder -ItemType Directory | Out-Null } if ($multitenant) { $tempAppDatabaseName = "temp$DatabaseName" $appBacpacFileName = Join-Path $bacpacFolder "app.bacpac" Copy-NavDatabase -DatabaseServer $databaseServer -DatabaseInstance $databaseInstance -databaseCredentials $sqlCredential -SourceDatabaseName $DatabaseName -DestinationDatabaseName $tempAppDatabaseName if (!$doNotCheckEntitlements) { Check-Entitlements -DatabaseServer $databaseServerInstance -DatabaseName $tempAppDatabaseName -sqlCredential $sqlCredential } Remove-WindowsUsers -DatabaseServer $databaseServerInstance -DatabaseName $tempAppDatabaseName -sqlCredential $sqlCredential Remove-ApplicationRoles -DatabaseServer $databaseServerInstance -DatabaseName $tempAppDatabaseName -sqlCredential $sqlCredential Remove-NavDatabaseSystemTableData -DatabaseServer $databaseServerInstance -DatabaseName $tempAppDatabaseName -sqlCredential $sqlCredential Do-Export -DatabaseServer $databaseServerInstance -DatabaseName $tempAppDatabaseName -sqlCredential $sqlCredential -targetFile $appBacpacFileName -commandTimeout $commandTimeout -includeDacPac:$includeDacPac -dacPacOnly:$dacPacOnly -diagnostics:$diagnostics -additionalArguments $additionalArguments $tenant | ForEach-Object { $sourceDatabase = $_ if ("$_" -ne "tenant") { Sync-NavTenant -ServerInstance $ServerInstance -Tenant $_ -Force $tenantInfo = Get-NavTenant -ServerInstance $ServerInstance -Tenant $_ $sourceDatabase = $tenantInfo.DatabaseName if ($tenantInfo.State -ne "Operational") { throw "Tenant $_ is not operational, you might need to synchronize the tenant or run data upgrade" } } $tempTenantDatabaseName = "tempTenant" $tenantBacpacFileName = Join-Path $bacpacFolder "$_.bacpac" Copy-NavDatabase -DatabaseServer $databaseServer -DatabaseInstance $databaseInstance -databaseCredentials $sqlCredential -SourceDatabaseName $sourceDatabase -DestinationDatabaseName $tempTenantDatabaseName Remove-WindowsUsers -DatabaseServer $databaseServerInstance -DatabaseName $tempTenantDatabaseName -sqlCredential $sqlCredential Remove-ApplicationRoles -DatabaseServer $databaseServerInstance -DatabaseName $tempTenantDatabaseName -sqlCredential $sqlCredential Remove-NavTenantDatabaseUserData -DatabaseServer $databaseServerInstance -DatabaseName $tempTenantDatabaseName -sqlCredential $sqlCredential Do-Export -DatabaseServer $databaseServerInstance -DatabaseName $tempTenantDatabaseName -sqlCredential $sqlCredential -targetFile $tenantBacpacFileName -commandTimeout $commandTimeout -includeDacPac:$includeDacPac -dacPacOnly:$dacPacOnly -diagnostics:$diagnostics -additionalArguments $additionalArguments } } else { $tempDatabaseName = "temp$DatabaseName" $bacpacFileName = Join-Path $bacpacFolder "database.bacpac" Copy-NavDatabase -DatabaseServer $databaseServer -DatabaseInstance $databaseInstance -databaseCredentials $sqlCredential -SourceDatabaseName $DatabaseName -DestinationDatabaseName $tempDatabaseName if (!$doNotCheckEntitlements) { Check-Entitlements -DatabaseServer $databaseServerInstance -DatabaseName $tempDatabaseName -sqlCredential $sqlCredential } Remove-WindowsUsers -DatabaseServer $databaseServerInstance -DatabaseName $tempDatabaseName -sqlCredential $sqlCredential Remove-ApplicationRoles -DatabaseServer $databaseServerInstance -DatabaseName $tempDatabaseName -sqlCredential $sqlCredential Remove-NavDatabaseSystemTableData -DatabaseServer $databaseServerInstance -DatabaseName $tempDatabaseName -sqlCredential $sqlCredential Remove-NavTenantDatabaseUserData -DatabaseServer $databaseServerInstance -DatabaseName $tempDatabaseName -sqlCredential $sqlCredential Do-Export -DatabaseServer $databaseServerInstance -DatabaseName $tempDatabaseName -sqlCredential $sqlCredential -targetFile $bacpacFileName -commandTimeout $commandTimeout -includeDacPac:$includeDacPac -dacPacOnly:$dacPacOnly -diagnostics:$diagnostics -additionalArguments $additionalArguments } } -ArgumentList $sqlCredential, $containerBacpacFolder, $tenant, $commandTimeout, $includeDacPac, $dacPacOnly, $diagnostics, $additionalArguments, $doNotCheckEntitlements } catch { TrackException -telemetryScope $telemetryScope -errorRecord $_ throw } finally { TrackTrace -telemetryScope $telemetryScope } } Set-Alias -Name Export-NavContainerDatabasesAsBacpac -Value Export-BcContainerDatabasesAsBacpac Export-ModuleMember -Function Export-BcContainerDatabasesAsBacpac -Alias Export-NavContainerDatabasesAsBacpac # SIG # Begin signature block # MIImZgYJKoZIhvcNAQcCoIImVzCCJlMCAQExDzANBglghkgBZQMEAgEFADB5Bgor # BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG # KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCC8JkIFjBlpZS6h # +FzQejttY/Cp6BQyKR9OqpEc2SuZ1aCCH34wggWNMIIEdaADAgECAhAOmxiO+dAt # 5+/bUOIIQBhaMA0GCSqGSIb3DQEBDAUAMGUxCzAJBgNVBAYTAlVTMRUwEwYDVQQK # EwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20xJDAiBgNV # BAMTG0RpZ2lDZXJ0IEFzc3VyZWQgSUQgUm9vdCBDQTAeFw0yMjA4MDEwMDAwMDBa # Fw0zMTExMDkyMzU5NTlaMGIxCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2Vy # dCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20xITAfBgNVBAMTGERpZ2lD # ZXJ0IFRydXN0ZWQgUm9vdCBHNDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoC # ggIBAL/mkHNo3rvkXUo8MCIwaTPswqclLskhPfKK2FnC4SmnPVirdprNrnsbhA3E # MB/zG6Q4FutWxpdtHauyefLKEdLkX9YFPFIPUh/GnhWlfr6fqVcWWVVyr2iTcMKy # unWZanMylNEQRBAu34LzB4TmdDttceItDBvuINXJIB1jKS3O7F5OyJP4IWGbNOsF # xl7sWxq868nPzaw0QF+xembud8hIqGZXV59UWI4MK7dPpzDZVu7Ke13jrclPXuU1 # 5zHL2pNe3I6PgNq2kZhAkHnDeMe2scS1ahg4AxCN2NQ3pC4FfYj1gj4QkXCrVYJB # MtfbBHMqbpEBfCFM1LyuGwN1XXhm2ToxRJozQL8I11pJpMLmqaBn3aQnvKFPObUR # WBf3JFxGj2T3wWmIdph2PVldQnaHiZdpekjw4KISG2aadMreSx7nDmOu5tTvkpI6 # nj3cAORFJYm2mkQZK37AlLTSYW3rM9nF30sEAMx9HJXDj/chsrIRt7t/8tWMcCxB # YKqxYxhElRp2Yn72gLD76GSmM9GJB+G9t+ZDpBi4pncB4Q+UDCEdslQpJYls5Q5S # UUd0viastkF13nqsX40/ybzTQRESW+UQUOsxxcpyFiIJ33xMdT9j7CFfxCBRa2+x # q4aLT8LWRV+dIPyhHsXAj6KxfgommfXkaS+YHS312amyHeUbAgMBAAGjggE6MIIB # NjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTs1+OC0nFdZEzfLmc/57qYrhwP # TzAfBgNVHSMEGDAWgBRF66Kv9JLLgjEtUYunpyGd823IDzAOBgNVHQ8BAf8EBAMC # AYYweQYIKwYBBQUHAQEEbTBrMCQGCCsGAQUFBzABhhhodHRwOi8vb2NzcC5kaWdp # Y2VydC5jb20wQwYIKwYBBQUHMAKGN2h0dHA6Ly9jYWNlcnRzLmRpZ2ljZXJ0LmNv # bS9EaWdpQ2VydEFzc3VyZWRJRFJvb3RDQS5jcnQwRQYDVR0fBD4wPDA6oDigNoY0 # aHR0cDovL2NybDMuZGlnaWNlcnQuY29tL0RpZ2lDZXJ0QXNzdXJlZElEUm9vdENB # LmNybDARBgNVHSAECjAIMAYGBFUdIAAwDQYJKoZIhvcNAQEMBQADggEBAHCgv0Nc # Vec4X6CjdBs9thbX979XB72arKGHLOyFXqkauyL4hxppVCLtpIh3bb0aFPQTSnov # Lbc47/T/gLn4offyct4kvFIDyE7QKt76LVbP+fT3rDB6mouyXtTP0UNEm0Mh65Zy # oUi0mcudT6cGAxN3J0TU53/oWajwvy8LpunyNDzs9wPHh6jSTEAZNUZqaVSwuKFW # juyk1T3osdz9HNj0d1pcVIxv76FQPfx2CWiEn2/K2yCNNWAcAgPLILCsWKAOQGPF # mCLBsln1VWvPJ6tsds5vIy30fnFqI2si/xK4VC0nftg62fC2h5b9W9FcrBjDTZ9z # twGpn1eqXijiuZQwggYaMIIEAqADAgECAhBiHW0MUgGeO5B5FSCJIRwKMA0GCSqG # SIb3DQEBDAUAMFYxCzAJBgNVBAYTAkdCMRgwFgYDVQQKEw9TZWN0aWdvIExpbWl0 # ZWQxLTArBgNVBAMTJFNlY3RpZ28gUHVibGljIENvZGUgU2lnbmluZyBSb290IFI0 # NjAeFw0yMTAzMjIwMDAwMDBaFw0zNjAzMjEyMzU5NTlaMFQxCzAJBgNVBAYTAkdC # MRgwFgYDVQQKEw9TZWN0aWdvIExpbWl0ZWQxKzApBgNVBAMTIlNlY3RpZ28gUHVi # bGljIENvZGUgU2lnbmluZyBDQSBSMzYwggGiMA0GCSqGSIb3DQEBAQUAA4IBjwAw # ggGKAoIBgQCbK51T+jU/jmAGQ2rAz/V/9shTUxjIztNsfvxYB5UXeWUzCxEeAEZG # bEN4QMgCsJLZUKhWThj/yPqy0iSZhXkZ6Pg2A2NVDgFigOMYzB2OKhdqfWGVoYW3 # haT29PSTahYkwmMv0b/83nbeECbiMXhSOtbam+/36F09fy1tsB8je/RV0mIk8XL/ # tfCK6cPuYHE215wzrK0h1SWHTxPbPuYkRdkP05ZwmRmTnAO5/arnY83jeNzhP06S # hdnRqtZlV59+8yv+KIhE5ILMqgOZYAENHNX9SJDm+qxp4VqpB3MV/h53yl41aHU5 # pledi9lCBbH9JeIkNFICiVHNkRmq4TpxtwfvjsUedyz8rNyfQJy/aOs5b4s+ac7I # H60B+Ja7TVM+EKv1WuTGwcLmoU3FpOFMbmPj8pz44MPZ1f9+YEQIQty/NQd/2yGg # W+ufflcZ/ZE9o1M7a5Jnqf2i2/uMSWymR8r2oQBMdlyh2n5HirY4jKnFH/9gRvd+ # QOfdRrJZb1sCAwEAAaOCAWQwggFgMB8GA1UdIwQYMBaAFDLrkpr/NZZILyhAQnAg # NpFcF4XmMB0GA1UdDgQWBBQPKssghyi47G9IritUpimqF6TNDDAOBgNVHQ8BAf8E # BAMCAYYwEgYDVR0TAQH/BAgwBgEB/wIBADATBgNVHSUEDDAKBggrBgEFBQcDAzAb # BgNVHSAEFDASMAYGBFUdIAAwCAYGZ4EMAQQBMEsGA1UdHwREMEIwQKA+oDyGOmh0 # dHA6Ly9jcmwuc2VjdGlnby5jb20vU2VjdGlnb1B1YmxpY0NvZGVTaWduaW5nUm9v # dFI0Ni5jcmwwewYIKwYBBQUHAQEEbzBtMEYGCCsGAQUFBzAChjpodHRwOi8vY3J0 # LnNlY3RpZ28uY29tL1NlY3RpZ29QdWJsaWNDb2RlU2lnbmluZ1Jvb3RSNDYucDdj # MCMGCCsGAQUFBzABhhdodHRwOi8vb2NzcC5zZWN0aWdvLmNvbTANBgkqhkiG9w0B # AQwFAAOCAgEABv+C4XdjNm57oRUgmxP/BP6YdURhw1aVcdGRP4Wh60BAscjW4HL9 # hcpkOTz5jUug2oeunbYAowbFC2AKK+cMcXIBD0ZdOaWTsyNyBBsMLHqafvIhrCym # laS98+QpoBCyKppP0OcxYEdU0hpsaqBBIZOtBajjcw5+w/KeFvPYfLF/ldYpmlG+ # vd0xqlqd099iChnyIMvY5HexjO2AmtsbpVn0OhNcWbWDRF/3sBp6fWXhz7DcML4i # TAWS+MVXeNLj1lJziVKEoroGs9Mlizg0bUMbOalOhOfCipnx8CaLZeVme5yELg09 # Jlo8BMe80jO37PU8ejfkP9/uPak7VLwELKxAMcJszkyeiaerlphwoKx1uHRzNyE6 # bxuSKcutisqmKL5OTunAvtONEoteSiabkPVSZ2z76mKnzAfZxCl/3dq3dUNw4rg3 # sTCggkHSRqTqlLMS7gjrhTqBmzu1L90Y1KWN/Y5JKdGvspbOrTfOXyXvmPL6E52z # 1NZJ6ctuMFBQZH3pwWvqURR8AgQdULUvrxjUYbHHj95Ejza63zdrEcxWLDX6xWls # /GDnVNueKjWUH3fTv1Y8Wdho698YADR7TNx8X8z2Bev6SivBBOHY+uqiirZtg0y9 # ShQoPzmCcn63Syatatvx157YK9hlcPmVoa1oDE5/L9Uo2bC5a4CH2RwwggZZMIIE # waADAgECAhANIM3qwHRbWKHw+Zq6JhzlMA0GCSqGSIb3DQEBDAUAMFQxCzAJBgNV # BAYTAkdCMRgwFgYDVQQKEw9TZWN0aWdvIExpbWl0ZWQxKzApBgNVBAMTIlNlY3Rp # Z28gUHVibGljIENvZGUgU2lnbmluZyBDQSBSMzYwHhcNMjExMDIyMDAwMDAwWhcN # MjQxMDIxMjM1OTU5WjBdMQswCQYDVQQGEwJESzEUMBIGA1UECAwLSG92ZWRzdGFk # ZW4xGzAZBgNVBAoMEkZyZWRkeSBLcmlzdGlhbnNlbjEbMBkGA1UEAwwSRnJlZGR5 # IEtyaXN0aWFuc2VuMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAgYC5 # tlg+VRktRRkahxxaV8+DAd6vHoDpcO6w7yT24lnSoMuA6nR7kgy90Y/sHIwKE9Ww # t/px/GAY8eBePWjJrFpG8fBtJbXadRTVd/470Hs/q9t+kh6A/0ELj7wYsKSNOyuF # Poy4rtClOv9ZmrRpoDVnh8Epwg2DpklX2BNzykzBQxIbkpp+xVo2mhPNWDIesntc # 4/BnSebLGw1Vkxmu2acKkIjYrne/7lsuyL9ue0vk8TGk9JBPNPbGKJvHu9szP9oG # oH36fU1sEZ+AacXrp+onsyPf/hkkpAMHAhzQHl+5Ikvcus/cDm06twm7VywmZcas # 2rFAV5MyE6WMEaYAolwAHiPz9WAs2GDhFtZZg1tzbRjJIIgPpR+doTIcpcDBcHnN # dSdgWKrTkr2f339oT5bnJfo7oVzc/2HGWvb8Fom6LQAqSC11vWmznHYsCm72g+fo # TKqW8lLDfLF0+aFvToLosrtW9l6Z+l+RQ8MtJ9EHOm2Ny8cFLzZCDZYw32BydwcL # V5rKdy4Ica9on5xZvyMOLiFwuL4v2V4pjEgKJaGSS/IVSMEGjrM9DHT6YS4/oq9q # 20rQUmMZZQmGmEyyKQ8t11si8VHtScN5m0Li8peoWfCU9mRFxSESwTWow8d462+o # 9/SzmDxCACdFwzvfKx4JqDMm55cL+beunIvc0NsCAwEAAaOCAZwwggGYMB8GA1Ud # IwQYMBaAFA8qyyCHKLjsb0iuK1SmKaoXpM0MMB0GA1UdDgQWBBTZD6uy9ZWIIqQh # 3srYu1FlUhdM0TAOBgNVHQ8BAf8EBAMCB4AwDAYDVR0TAQH/BAIwADATBgNVHSUE # DDAKBggrBgEFBQcDAzARBglghkgBhvhCAQEEBAMCBBAwSgYDVR0gBEMwQTA1Bgwr # BgEEAbIxAQIBAwIwJTAjBggrBgEFBQcCARYXaHR0cHM6Ly9zZWN0aWdvLmNvbS9D # UFMwCAYGZ4EMAQQBMEkGA1UdHwRCMEAwPqA8oDqGOGh0dHA6Ly9jcmwuc2VjdGln # by5jb20vU2VjdGlnb1B1YmxpY0NvZGVTaWduaW5nQ0FSMzYuY3JsMHkGCCsGAQUF # BwEBBG0wazBEBggrBgEFBQcwAoY4aHR0cDovL2NydC5zZWN0aWdvLmNvbS9TZWN0 # aWdvUHVibGljQ29kZVNpZ25pbmdDQVIzNi5jcnQwIwYIKwYBBQUHMAGGF2h0dHA6 # Ly9vY3NwLnNlY3RpZ28uY29tMA0GCSqGSIb3DQEBDAUAA4IBgQASEbZACurQeQN8 # WDTR+YyNpoQ29YAbbdBRhhzHkT/1ao7LE0QIOgGR4GwKRzufCAwu8pCBiMOUTDHT # ezkh0rQrG6khxBX2nSTBL5i4LwKMR08HgZBsbECciABy15yexYWoB/D0H8WuGe63 # PhGWueR4IFPbIz+jEVxfW0Nyyr7bXTecpKd1iprm+TOmzc2E6ab95dkcXdJVx6Zy # s++QrrOfQ+a57qEXkS/wnjjbN9hukL0zg+g8L4DHLKTodzfiQOampvV8QzbnB7Y8 # YjNcxR9s/nptnlQH3jorNFhktiBXvD62jc8pAIg6wyH6NxSMjtTsn7QhkIp2kusw # IQwD8hN/fZ/m6gkXZhRJWFr2WRZOz+edZ62Jf25C/NYWscwfBwn2hzRZf1HgyxkX # Al88dvvUA3kw1T6uo8aAB9IcL6Owiy7q4T+RLRF7oqx0vcw0193Yhq/gPOaUFlqz # ExP6TQ5TR9XWVPQk+a1B1ATKMLi1JShO6KWTmNkFkgkgpkW69BEwggauMIIElqAD # AgECAhAHNje3JFR82Ees/ShmKl5bMA0GCSqGSIb3DQEBCwUAMGIxCzAJBgNVBAYT # AlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2Vy # dC5jb20xITAfBgNVBAMTGERpZ2lDZXJ0IFRydXN0ZWQgUm9vdCBHNDAeFw0yMjAz # MjMwMDAwMDBaFw0zNzAzMjIyMzU5NTlaMGMxCzAJBgNVBAYTAlVTMRcwFQYDVQQK # Ew5EaWdpQ2VydCwgSW5jLjE7MDkGA1UEAxMyRGlnaUNlcnQgVHJ1c3RlZCBHNCBS # U0E0MDk2IFNIQTI1NiBUaW1lU3RhbXBpbmcgQ0EwggIiMA0GCSqGSIb3DQEBAQUA # A4ICDwAwggIKAoICAQDGhjUGSbPBPXJJUVXHJQPE8pE3qZdRodbSg9GeTKJtoLDM # g/la9hGhRBVCX6SI82j6ffOciQt/nR+eDzMfUBMLJnOWbfhXqAJ9/UO0hNoR8XOx # s+4rgISKIhjf69o9xBd/qxkrPkLcZ47qUT3w1lbU5ygt69OxtXXnHwZljZQp09ns # ad/ZkIdGAHvbREGJ3HxqV3rwN3mfXazL6IRktFLydkf3YYMZ3V+0VAshaG43IbtA # rF+y3kp9zvU5EmfvDqVjbOSmxR3NNg1c1eYbqMFkdECnwHLFuk4fsbVYTXn+149z # k6wsOeKlSNbwsDETqVcplicu9Yemj052FVUmcJgmf6AaRyBD40NjgHt1biclkJg6 # OBGz9vae5jtb7IHeIhTZgirHkr+g3uM+onP65x9abJTyUpURK1h0QCirc0PO30qh # HGs4xSnzyqqWc0Jon7ZGs506o9UD4L/wojzKQtwYSH8UNM/STKvvmz3+DrhkKvp1 # KCRB7UK/BZxmSVJQ9FHzNklNiyDSLFc1eSuo80VgvCONWPfcYd6T/jnA+bIwpUzX # 6ZhKWD7TA4j+s4/TXkt2ElGTyYwMO1uKIqjBJgj5FBASA31fI7tk42PgpuE+9sJ0 # sj8eCXbsq11GdeJgo1gJASgADoRU7s7pXcheMBK9Rp6103a50g5rmQzSM7TNsQID # AQABo4IBXTCCAVkwEgYDVR0TAQH/BAgwBgEB/wIBADAdBgNVHQ4EFgQUuhbZbU2F # L3MpdpovdYxqII+eyG8wHwYDVR0jBBgwFoAU7NfjgtJxXWRM3y5nP+e6mK4cD08w # DgYDVR0PAQH/BAQDAgGGMBMGA1UdJQQMMAoGCCsGAQUFBwMIMHcGCCsGAQUFBwEB # BGswaTAkBggrBgEFBQcwAYYYaHR0cDovL29jc3AuZGlnaWNlcnQuY29tMEEGCCsG # AQUFBzAChjVodHRwOi8vY2FjZXJ0cy5kaWdpY2VydC5jb20vRGlnaUNlcnRUcnVz # dGVkUm9vdEc0LmNydDBDBgNVHR8EPDA6MDigNqA0hjJodHRwOi8vY3JsMy5kaWdp # Y2VydC5jb20vRGlnaUNlcnRUcnVzdGVkUm9vdEc0LmNybDAgBgNVHSAEGTAXMAgG # BmeBDAEEAjALBglghkgBhv1sBwEwDQYJKoZIhvcNAQELBQADggIBAH1ZjsCTtm+Y # qUQiAX5m1tghQuGwGC4QTRPPMFPOvxj7x1Bd4ksp+3CKDaopafxpwc8dB+k+YMjY # C+VcW9dth/qEICU0MWfNthKWb8RQTGIdDAiCqBa9qVbPFXONASIlzpVpP0d3+3J0 # FNf/q0+KLHqrhc1DX+1gtqpPkWaeLJ7giqzl/Yy8ZCaHbJK9nXzQcAp876i8dU+6 # WvepELJd6f8oVInw1YpxdmXazPByoyP6wCeCRK6ZJxurJB4mwbfeKuv2nrF5mYGj # VoarCkXJ38SNoOeY+/umnXKvxMfBwWpx2cYTgAnEtp/Nh4cku0+jSbl3ZpHxcpzp # SwJSpzd+k1OsOx0ISQ+UzTl63f8lY5knLD0/a6fxZsNBzU+2QJshIUDQtxMkzdwd # eDrknq3lNHGS1yZr5Dhzq6YBT70/O3itTK37xJV77QpfMzmHQXh6OOmc4d0j/R0o # 08f56PGYX/sr2H7yRp11LB4nLCbbbxV7HhmLNriT1ObyF5lZynDwN7+YAN8gFk8n # +2BnFqFmut1VwDophrCYoCvtlUG3OtUVmDG0YgkPCr2B2RP+v6TR81fZvAT6gt4y # 3wSJ8ADNXcL50CN/AAvkdgIm2fBldkKmKYcJRyvmfxqkhQ/8mJb2VVQrH4D6wPIO # K+XW+6kvRBVK5xMOHds3OBqhK/bt1nz8MIIGvDCCBKSgAwIBAgIQC65mvFq6f5WH # xvnpBOMzBDANBgkqhkiG9w0BAQsFADBjMQswCQYDVQQGEwJVUzEXMBUGA1UEChMO # RGlnaUNlcnQsIEluYy4xOzA5BgNVBAMTMkRpZ2lDZXJ0IFRydXN0ZWQgRzQgUlNB # NDA5NiBTSEEyNTYgVGltZVN0YW1waW5nIENBMB4XDTI0MDkyNjAwMDAwMFoXDTM1 # MTEyNTIzNTk1OVowQjELMAkGA1UEBhMCVVMxETAPBgNVBAoTCERpZ2lDZXJ0MSAw # HgYDVQQDExdEaWdpQ2VydCBUaW1lc3RhbXAgMjAyNDCCAiIwDQYJKoZIhvcNAQEB # BQADggIPADCCAgoCggIBAL5qc5/2lSGrljC6W23mWaO16P2RHxjEiDtqmeOlwf0K # MCBDEr4IxHRGd7+L660x5XltSVhhK64zi9CeC9B6lUdXM0s71EOcRe8+CEJp+3R2 # O8oo76EO7o5tLuslxdr9Qq82aKcpA9O//X6QE+AcaU/byaCagLD/GLoUb35SfWHh # 43rOH3bpLEx7pZ7avVnpUVmPvkxT8c2a2yC0WMp8hMu60tZR0ChaV76Nhnj37DEY # TX9ReNZ8hIOYe4jl7/r419CvEYVIrH6sN00yx49boUuumF9i2T8UuKGn9966fR5X # 6kgXj3o5WHhHVO+NBikDO0mlUh902wS/Eeh8F/UFaRp1z5SnROHwSJ+QQRZ1fisD # 8UTVDSupWJNstVkiqLq+ISTdEjJKGjVfIcsgA4l9cbk8Smlzddh4EfvFrpVNnes4 # c16Jidj5XiPVdsn5n10jxmGpxoMc6iPkoaDhi6JjHd5ibfdp5uzIXp4P0wXkgNs+ # CO/CacBqU0R4k+8h6gYldp4FCMgrXdKWfM4N0u25OEAuEa3JyidxW48jwBqIJqIm # d93NRxvd1aepSeNeREXAu2xUDEW8aqzFQDYmr9ZONuc2MhTMizchNULpUEoA6Vva # 7b1XCB+1rxvbKmLqfY/M/SdV6mwWTyeVy5Z/JkvMFpnQy5wR14GJcv6dQ4aEKOX5 # AgMBAAGjggGLMIIBhzAOBgNVHQ8BAf8EBAMCB4AwDAYDVR0TAQH/BAIwADAWBgNV # HSUBAf8EDDAKBggrBgEFBQcDCDAgBgNVHSAEGTAXMAgGBmeBDAEEAjALBglghkgB # hv1sBwEwHwYDVR0jBBgwFoAUuhbZbU2FL3MpdpovdYxqII+eyG8wHQYDVR0OBBYE # FJ9XLAN3DigVkGalY17uT5IfdqBbMFoGA1UdHwRTMFEwT6BNoEuGSWh0dHA6Ly9j # cmwzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydFRydXN0ZWRHNFJTQTQwOTZTSEEyNTZU # aW1lU3RhbXBpbmdDQS5jcmwwgZAGCCsGAQUFBwEBBIGDMIGAMCQGCCsGAQUFBzAB # hhhodHRwOi8vb2NzcC5kaWdpY2VydC5jb20wWAYIKwYBBQUHMAKGTGh0dHA6Ly9j # YWNlcnRzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydFRydXN0ZWRHNFJTQTQwOTZTSEEy # NTZUaW1lU3RhbXBpbmdDQS5jcnQwDQYJKoZIhvcNAQELBQADggIBAD2tHh92mVvj # OIQSR9lDkfYR25tOCB3RKE/P09x7gUsmXqt40ouRl3lj+8QioVYq3igpwrPvBmZd # rlWBb0HvqT00nFSXgmUrDKNSQqGTdpjHsPy+LaalTW0qVjvUBhcHzBMutB6Hzele # dbDCzFzUy34VarPnvIWrqVogK0qM8gJhh/+qDEAIdO/KkYesLyTVOoJ4eTq7gj9U # FAL1UruJKlTnCVaM2UeUUW/8z3fvjxhN6hdT98Vr2FYlCS7Mbb4Hv5swO+aAXxWU # m3WpByXtgVQxiBlTVYzqfLDbe9PpBKDBfk+rabTFDZXoUke7zPgtd7/fvWTlCs30 # VAGEsshJmLbJ6ZbQ/xll/HjO9JbNVekBv2Tgem+mLptR7yIrpaidRJXrI+UzB6vA # lk/8a1u7cIqV0yef4uaZFORNekUgQHTqddmsPCEIYQP7xGxZBIhdmm4bhYsVA6G2 # WgNFYagLDBzpmk9104WQzYuVNsxyoVLObhx3RugaEGru+SojW4dHPoWrUhftNpFC # 5H7QEY7MhKRyrBe7ucykW7eaCuWBsBb4HOKRFVDcrZgdwaSIqMDiCLg4D+TPVgKx # 2EgEdeoHNHT9l3ZDBD+XgbF+23/zBjeCtxz+dL/9NWR6P2eZRi7zcEO1xwcdcqJs # yz/JceENc2Sg8h3KeFUCS7tpFk7CrDqkMYIGPjCCBjoCAQEwaDBUMQswCQYDVQQG # EwJHQjEYMBYGA1UEChMPU2VjdGlnbyBMaW1pdGVkMSswKQYDVQQDEyJTZWN0aWdv # IFB1YmxpYyBDb2RlIFNpZ25pbmcgQ0EgUjM2AhANIM3qwHRbWKHw+Zq6JhzlMA0G # CWCGSAFlAwQCAQUAoIGEMBgGCisGAQQBgjcCAQwxCjAIoAKAAKECgAAwGQYJKoZI # hvcNAQkDMQwGCisGAQQBgjcCAQQwHAYKKwYBBAGCNwIBCzEOMAwGCisGAQQBgjcC # ARUwLwYJKoZIhvcNAQkEMSIEIK1OefOVEURgZzMA9m2C4ooQ9/j68kZYjQu2Y7OY # 4xCaMA0GCSqGSIb3DQEBAQUABIICACq+qnE2XPqo5qye0p2gtmVORBpL7HGVhYLv # d1TLNABSGyzey4ydLqeooZWqPvBT7yisKvxIAfES4+GI5BLpgjIBryRyDMFXHw1w # an1TKYcUuPvH2/2ucoq47eW/kXjqiJja5EHrGI1GuHJvqW5p82MUIo1gDAnA8K3Y # 4c1DLAeJGqHJdvJ1MGWgdd+oStI8wI58GzEfcIIZndu5NoZ11btlEebqeTrDDqNS # qp3dRwqopJos93x9bzXro1H7+2P1A+3pSgN/hB4JoZIFg0FHJeG3LHt0XuOwj7at # hmwfCHbQhjItkigCGAYco52zWkjpanQPWO/lr+NaUvSBuH/XKWo7YDhG/RmW6a8n # fJ56j8oxSDK/fVJUTfBpwlFWfZpbb6Syp1uLj93Fyqaml/sLVrjIMaXDGWeSKpRQ # nXw0iOUvOLtM5BnewAsZ+6dXrGd7KygvSR2RiuyYdUwQW1GT2kzIld/EsaMl2UQG # lxZhgeVNsqZaIb5ddO4lZ9QMW9sLAlnaWwi7YGR7J4KrxFloxGwhvQrRkofMbDd+ # 2/Rtv7StgfBBtPMM30JiFJR+N+80Bpy33zQ/LmlSLkFNFDxSZVgkxIjuA+IuXdw/ # jMQViOa6Vij9DLERrrOgB9qLOrmYGi35ZISF7kSCLzPFeYxp3BoOxyaWrDuTGiHv # mC51O3YCoYIDIDCCAxwGCSqGSIb3DQEJBjGCAw0wggMJAgEBMHcwYzELMAkGA1UE # BhMCVVMxFzAVBgNVBAoTDkRpZ2lDZXJ0LCBJbmMuMTswOQYDVQQDEzJEaWdpQ2Vy # dCBUcnVzdGVkIEc0IFJTQTQwOTYgU0hBMjU2IFRpbWVTdGFtcGluZyBDQQIQC65m # vFq6f5WHxvnpBOMzBDANBglghkgBZQMEAgEFAKBpMBgGCSqGSIb3DQEJAzELBgkq # hkiG9w0BBwEwHAYJKoZIhvcNAQkFMQ8XDTI0MTAwNDA3MTEyOFowLwYJKoZIhvcN # AQkEMSIEIJY3NiEJ9iwFHM9MH5FzSjVhgmU4srkoulT8yJ8VlBPhMA0GCSqGSIb3 # DQEBAQUABIICAELa3CpBastWHtYfYILAucUDuqSSw9mQREcM9wTqKNK+jRDtwsBN # BayLcDlhDX3R2DXQjmF3nejutWaJNVfWmzuzwILl+b5vPMHB9lgFDqFAIHceiFc2 # BPggnC3XkV7jJAKsAqWa0cDKtT3KWp0jAP/x1Kzc7BzIHfyXiFfcBN97SnmqdnJX # 56JEo5+6cat7iwS06V+9sFhEjF05yk1DugK3f2hj59DuhmRyfTSF+wAoqNdWwDt2 # mAygvZfXReG7ZGKsoeuJIBl/GnbH0X6UqaxCKGNn0R/W9sSQ99muqvVpX432QjHv # KBQxycX4mHH15LwWondvx0GsCTenEoV0NK6eVilfS5bMf0N9CTfQfPhpT1pfNxwO # oyk2VVoqbpSQl75sd3XiWdYrylGVYXMlqxq3nvFFNgqD1ZUJNi6sge/QSRMc/jci # Oprz4sFCfvun9cYSjoIYt5yLOk3ahyILM+cjRo46Od5xbk5ARPbiaak1kCby7DoS # 9ApMjaZ2Uu/s5PSvRWmeeDlroj8KVdCao/zTPrDUzDw6ehcg/ftvMkpAxjkqC0rB # 6jcjjeRu/g46yR+b01DNsVIANydueLyCrR/u7ss5rm2IUXFO/oG7z8k5A4Nes++E # tQH87C2yiuBmlaiskYGJv4Jdy0uma+EScxRYbH7JJyVcgzStvWUGJrr9 # SIG # End signature block |