Skip to content

Commit

Permalink
Merge branch 'master' into develop
Browse files Browse the repository at this point in the history
* master: (37 commits)
  (chocolatey#310) Fix path to chocolatey.lib files
  (maint) Corrected casing of file
  (chocolatey#23) Move call to SetRemotePackageNamesIfAllSpecified
  (chocolatey#1901) Revert commit to display location
  (maint) Update Authenticode Signature
  (tests) Some minor tweaks for test consistency
  (chocolatey#310) Set-EnvironmentVariable: delete values properly
  (tests) Remove v2 import tests
  (chocolatey#310) Fix test issues
  (chocolatey#310) Fixup v2 compatibility
  (tests) Working on tests during pairing session
  (chocolatey#2050) Add Pester test for --ignore-pinned option
  (chocolatey#3381) Add Pester tests for rule command
  (chocolatey#1144) Add Pester test to cover hash validation
  (chocolatey#72) Add Pester tests to cover new functionality
  (test) Update assertions for push commands
  (chocolatey#1310) Add Pester test to validate output
  (chocolatey#23) Add tests to handle install all
  (chocolatey#2200) Add test for new enhanced exit code
  (chocolatey#1764) Add test for new enhanced exit code
  ...
  • Loading branch information
gep13 committed Jun 5, 2024
2 parents 635eb60 + 7eb0610 commit 484999b
Show file tree
Hide file tree
Showing 35 changed files with 1,087 additions and 162 deletions.
4 changes: 4 additions & 0 deletions GenerateDocs.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,9 @@ $psModuleLocation = [System.IO.Path]::GetFullPath("$thisDirectory\src\chocolatey
$docsFolder = [System.IO.Path]::GetFullPath("$thisDirectory\docs\generated")
$mergedDirectory = [System.IO.Path]::GetFullPath("$thisDirectory\code_drop\temp\_PublishedApps\choco_merged")
$chocoExe = "$mergedDirectory\choco.exe"

Write-Host "Running choco.exe from $chocoExe"

$lineFeed = "`r`n"
$sourceLocation = 'https://github.com/chocolatey/choco/blob/master/'
$sourceCommands = $sourceLocation + 'src/chocolatey/infrastructure.app/commands'
Expand Down Expand Up @@ -599,6 +602,7 @@ The following are experimental or use not recommended:
Generate-CommandReference 'Optimize' '90'
Generate-CommandReference 'Outdated' '100'
Generate-CommandReference 'Pin' '110'
Generate-CommandReference 'Rule' '115'
Generate-CommandReference 'Search' '120'
Generate-CommandReference 'SetApiKey' '130'
Generate-CommandReference 'Source' '140'
Expand Down
52 changes: 26 additions & 26 deletions nuspec/chocolatey/chocolatey/tools/chocolateysetup.psm1
Original file line number Diff line number Diff line change
Expand Up @@ -858,7 +858,7 @@ function Invoke-Chocolatey-Initial {
try {
$chocoInstallationFolder = Get-ChocolateyInstallFolder
$chocoExe = Join-Path -Path $chocoInstallationFolder -ChildPath "choco.exe"
$runResult = & $chocoExe -v *>&1
$runResult = & $chocoExe -v 2>&1
if ($LASTEXITCODE -eq 0) {
Write-Debug "Chocolatey CLI execution completed successfully."
}
Expand All @@ -876,8 +876,8 @@ Export-ModuleMember -Function Initialize-Chocolatey
# SIG # Begin signature block
# MIInKwYJKoZIhvcNAQcCoIInHDCCJxgCAQExDzANBglghkgBZQMEAgEFADB5Bgor
# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG
# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCC8Wmtrs9N0S3FW
# cp2ebCXvAwP1tJVxI2dlqSwsrccSpKCCIK4wggWNMIIEdaADAgECAhAOmxiO+dAt
# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCArPR/MaAFOnPhm
# wTraOHhBiut3LMThkjxzi7DsT2up/qCCIK4wggWNMIIEdaADAgECAhAOmxiO+dAt
# 5+/bUOIIQBhaMA0GCSqGSIb3DQEBDAUAMGUxCzAJBgNVBAYTAlVTMRUwEwYDVQQK
# EwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20xJDAiBgNV
# BAMTG0RpZ2lDZXJ0IEFzc3VyZWQgSUQgUm9vdCBDQTAeFw0yMjA4MDEwMDAwMDBa
Expand Down Expand Up @@ -1057,30 +1057,30 @@ Export-ModuleMember -Function Initialize-Chocolatey
# IFNIQTM4NCAyMDIxIENBMQIQBNI793flHTneCMtwLiiYFTANBglghkgBZQMEAgEF
# AKCBhDAYBgorBgEEAYI3AgEMMQowCKACgAChAoAAMBkGCSqGSIb3DQEJAzEMBgor
# BgEEAYI3AgEEMBwGCisGAQQBgjcCAQsxDjAMBgorBgEEAYI3AgEVMC8GCSqGSIb3
# DQEJBDEiBCDMHmRGjDIKOEla+IaM/zMWLkvV/rMxHg45my3wmHLVfDANBgkqhkiG
# 9w0BAQEFAASCAYB3TE6Lis+z/D5XQ11XK2+4We7m53DgAY7C0+CWG/yiJ7ImRdNF
# iJQV4TXHtT1fT3ke/ZXkZE95r+W6KPg1bsm8SBBEPm/8n4lgfcP00uw/rAcejuXD
# bVXrlrygICzuG+iocYgGcLL1+UxMr5mnNIye4mLMQkrluPSXf6+3jPZrIMCS8d7G
# V6zHEyiK1BVqfl0708/LHFQ3aPwI5z9xIZqTZFDjnDgFw5z2D1bq+wZY/tB04v1F
# pLIDxgLI7l++TJZS5yjxJP54W2ysevYamY6lj6pS+3x7DMohf4yiZ/v/gOAZxFiT
# ir0rkdzIjWc/wIdGaGg+AvQPisOvndFLUp3BzsmOqjC1QyA1zv7F4QD99FAw6QVb
# vl+zF9z8XahH5uYGoe/cZiVjO1W+it5/MhB/eyXUL6vV95pUjD/mackEDBOPHD85
# bvd2Z695m+l47/7W9lDw2OFeRIxIDn8p2e/7MC3u2DeUy7wKjLy430SOzgVPYvzj
# fiuYyp2COsJOTumhggMgMIIDHAYJKoZIhvcNAQkGMYIDDTCCAwkCAQEwdzBjMQsw
# DQEJBDEiBCDGe5bdr9fhZlgcmD0adH88bZKumDvnmMPc9syGf+0gjTANBgkqhkiG
# 9w0BAQEFAASCAYA+7vMPYKMLM9YYgi74s1I/0mfFEOTHAZ1q8M7PQNczDxMBd6nT
# QLlImypyhnYyAmyq1pqheD+zfRS0JAkrzFAqjxefGQka/Jvwe1/vyTOy61pUoHWD
# MvUTswW+VPLjuk2d61bgiliINYS1oTz1MjWlUPMyMdP8n2+ger+PJPO8CPLvCLU3
# PFJWF+29r48Wkfj7IobT3CcFlsOw5B9xIhHNNf6MLcfjUJO4rtDketHHTKqHwJlG
# uU+POoAG+3agrRulYNBItW+byP78gwdCjGh+cWiovbbCgJ3CPu7PSSHdV4J/sA6G
# 0BbhfcHhqcOmWpnpcgLy4+rMTUWVaQWokMuVtK4SVCHTxdyOw/+/LtcKvrnQyuUd
# VwpkD+axSyqGOmqEqIeIO8LkPTI/zHm01IkxWfdzeHYs8jK0egW38U8ohe/bUXf2
# KGdHBiv2j7iNYaOa2KplHBumb3XnIzme6u5Mo3GA/FGmAVk7TZt/1oA2/cuIa0vC
# xqVcv0uH7jDK4KehggMgMIIDHAYJKoZIhvcNAQkGMYIDDTCCAwkCAQEwdzBjMQsw
# CQYDVQQGEwJVUzEXMBUGA1UEChMORGlnaUNlcnQsIEluYy4xOzA5BgNVBAMTMkRp
# Z2lDZXJ0IFRydXN0ZWQgRzQgUlNBNDA5NiBTSEEyNTYgVGltZVN0YW1waW5nIENB
# AhAFRK/zlJ0IOaa/2z9f5WEWMA0GCWCGSAFlAwQCAQUAoGkwGAYJKoZIhvcNAQkD
# MQsGCSqGSIb3DQEHATAcBgkqhkiG9w0BCQUxDxcNMjQwNTI0MDcwNjM4WjAvBgkq
# hkiG9w0BCQQxIgQgDWxmHrnUlxZntijseYmN7DudgquOHVAn9iBTIT0OrJ4wDQYJ
# KoZIhvcNAQEBBQAEggIAoJiyvNMSQc/zxvIMthnw6kZ/3Lx6rywEFkPcdYsaAttW
# G4YytqV8fAmcmOgh2Og73ZGgwlIgFrIzAAtSKoRq/gIYFjri6c9/MapIYUzJEznB
# IV1c+/0f4RsU+Al+t+S0fbsov9g9I42ukS4rCVY0fYz+2TH6cd9teBNPm/Q6h1Uu
# Dy1q8LX5mn310mjaqcQJ8clDRmxYpTlI9nmsk6f+KNGMib85iiWC6fqpLGhP/M5k
# D/MDdJFXm2R//TWmCLTTG8ZcVEtf+TzH5EQWdfGTc/8cMnYL8eiqJ6saftIBuEb+
# Pl9XUaC4aha4Ekq9Pfn0/6eMk9TGId8PlnBiWygRlgaVhVFwXjzQ3x2EZi3Ba25q
# Qd45EmEMRZU0LJ+/enM9N5S1ZqJksy08M+f1tMpl91J38nzQqxap6obQ8kXzCFGJ
# kFDDLNVgwFw9KdvJ8UE++V5F72tgKv5K2ZScjG14id0xi/HAjpL7GIwHgEFaiDPZ
# ysWT8Kt/Aq+VbyUYHrhJqxekpwmd1DTAkd2GeVfj/kaIZuPGpmAQTdamecSQBjMp
# WMITKQH3GKGh+RvQHqJ6h88Xuwhcf7A4yFE9qiGb45a72Glg9xwePOoMctE1K8uE
# BsbbYdjHpjf+edum40GZM/22OIoOOyZXUP73ZCl5egZ+QPEgMBnYJVD3SPjJ/6s=
# MQsGCSqGSIb3DQEHATAcBgkqhkiG9w0BCQUxDxcNMjQwNTMwMTk1ODQxWjAvBgkq
# hkiG9w0BCQQxIgQg5YQcegwbGwxZCDsCktISkjvIBghmn0esLtQVM6MncyEwDQYJ
# KoZIhvcNAQEBBQAEggIAQ4Jwo+bD++jtMq9OaaNQ+lRdtb7eS2QKvSqGparxFDw1
# Y7H4Kd53LIfKJvibvOaPCU4o8J2Qml6MSLLdSTqR2Sndq52c1eBsqYFOx3Zhbee0
# l/73uf8R47KmUUva2n2rkohfNtwMkMiMn9pYUxvGLqz5YtJthJBPJ+3FDCmMlbwC
# e1/tPvxM3cB1S9N3kQTk0/Br8wNbgg8bV11cDckQhtXR7+cq3NJrLoDcgZUJGUHJ
# sZj45sEwCJavR4LEQauMXdoMlhWDTxATXdf8VcLR6c/D4UVhnNOxtKBevJTCowXC
# 5C8nQRZib0jKZ4aVTPO6M/voFIn3GArb4sEK9Hv7kd0+5LK9xzB3jJ7k3Qp0Lyf2
# s9w3wgUF3APEZuCFOONHFHZraPyBixjALJDppZveWvOkPyWodYHnMdWnIRxJW6PX
# jL9QbXLO+kpZds0PcDt9ebAP9meuarZIUEl7BSthP4N5KF/BNQbpetVgWRCFuZJ3
# fSO9qrmQCtGm6S7ldYUgChUR2pHU+N3y1kPhmsr2bu/WDtIFojZxrickwHajrX83
# 24axIasm3XjdMUWmhZLAZo48QN1c8hUwtiwTLo+8ZGUwmjbLEp4v7WDBI/ZcD0WW
# 67XftIHKVDi4gJJyR9uKQdFrmIIqOHeJbgffxhwuEIlDQ3X45Umw+rymBiKOGxA=
# SIG # End signature block
10 changes: 5 additions & 5 deletions recipe.cake
Original file line number Diff line number Diff line change
Expand Up @@ -329,14 +329,14 @@ Task("Prepare-NuGet-Packages")
.IsDependeeOf("Sign-Assemblies")
.Does(() =>
{
CleanDirectory(BuildParameters.Paths.Directories.NuGetNuspecDirectory + "/lib");
EnsureDirectoryExists(BuildParameters.Paths.Directories.NuGetNuspecDirectory + "/lib/net48");
CleanDirectory(BuildParameters.Paths.Directories.NuGetNuspecDirectory + "/chocolatey.lib/lib");
EnsureDirectoryExists(BuildParameters.Paths.Directories.NuGetNuspecDirectory + "/chocolatey.lib/lib/net48");
// Copy legal documents
CopyFile(BuildParameters.RootDirectoryPath + "/docs/legal/CREDITS.md", BuildParameters.Paths.Directories.NuGetNuspecDirectory + "/lib/CREDITS.txt");
CopyFile(BuildParameters.RootDirectoryPath + "/docs/legal/CREDITS.md", BuildParameters.Paths.Directories.NuGetNuspecDirectory + "/chocolatey.lib/lib/CREDITS.txt");
CopyFiles(BuildParameters.Paths.Directories.PublishedLibraries + "/chocolatey_merged/*", BuildParameters.Paths.Directories.NuGetNuspecDirectory + "/lib/net48");
CopyFile(BuildParameters.Paths.Directories.PublishedLibraries + "/chocolatey/chocolatey.xml", BuildParameters.Paths.Directories.NuGetNuspecDirectory + "/lib/net48/chocolatey.xml");
CopyFiles(BuildParameters.Paths.Directories.PublishedLibraries + "/chocolatey_merged/*", BuildParameters.Paths.Directories.NuGetNuspecDirectory + "/chocolatey.lib/lib/net48");
CopyFile(BuildParameters.Paths.Directories.PublishedLibraries + "/chocolatey/chocolatey.xml", BuildParameters.Paths.Directories.NuGetNuspecDirectory + "/chocolatey.lib/lib/net48/chocolatey.xml");
});

Task("Prepare-MSI")
Expand Down
14 changes: 12 additions & 2 deletions src/Chocolatey.PowerShell/Helpers/EnvironmentHelper.cs
Original file line number Diff line number Diff line change
Expand Up @@ -166,7 +166,14 @@ public static void SetVariable(PSCmdlet cmdlet, string name, EnvironmentVariable

cmdlet.WriteDebug($"Registry type for {name} is/will be {registryType}");

registryKey.SetValue(name, value, registryType);
if (string.IsNullOrEmpty(value))
{
registryKey.DeleteValue(name, throwOnMissingValue: false);
}
else
{
registryKey.SetValue(name, value, registryType);
}
}

try
Expand Down Expand Up @@ -219,7 +226,10 @@ public static void UpdateSession(PSCmdlet cmdlet)
foreach (var name in GetVariableNames(scope))
{
var value = GetVariable(cmdlet, name, scope);
SetVariable(cmdlet, name, EnvironmentVariableTarget.Process, value);
if (!string.IsNullOrEmpty(value))
{
SetVariable(cmdlet, name, EnvironmentVariableTarget.Process, value);
}
}
}

Expand Down
95 changes: 52 additions & 43 deletions src/chocolatey.resources/helpers/chocolateyInstaller.psm1
Original file line number Diff line number Diff line change
Expand Up @@ -102,7 +102,11 @@ if (Test-Path $extensionsPath) {

if ($licensedAssembly) {
# Import-Module -Assembly doesn't work if the parent module is reimported, so force the import by path.
Import-Module $licensedAssembly.Location -Force
if ($licensedAssembly.Location) {
Import-Module $licensedAssembly.Location -Force
} else {
Import-Module $licensedAssembly
}
}
else {
# Fallback: load the extension DLL from the path directly.
Expand Down Expand Up @@ -149,35 +153,40 @@ if (Test-Path $extensionsPath) {
# In effect we ensure that any command calls that match the name of one of our commands
# will resolve to _our_ commands (preferring licensed cmdlets in the case of a name collision),
# preventing packages from overriding them with their own commands and potentially breaking things.
$ExecutionContext.InvokeCommand.PreCommandLookupAction = {
param($command, $eventArgs)
#
# This functionality is only available in v3 and later, so using this in v2 will not
# work; check for the property before trying to set it.
if ($ExecutionContext.InvokeCommand.PreCommandLookupAction) {
$ExecutionContext.InvokeCommand.PreCommandLookupAction = {
param($command, $eventArgs)

# Don't run this handler for stuff PowerShell is looking up internally
if ($eventArgs.CommandOrigin -eq 'Runspace') {
$resolvedCommand = if ($command -in $chocolateyCmdlets.Licensed) {
Get-Command "$command*" -Module 'chocolatey.licensed' -CommandType Cmdlet -ErrorAction Ignore |
Where-Object { $_.Name -match "^$command(Cmdlet)?$" } |
Select-Object -First 1
}
elseif ($command -in $chocolateyCmdlets.Default) {
Get-Command $command -Module "Chocolatey.PowerShell" -CommandType Cmdlet -ErrorAction Ignore
}
# Don't run this handler for stuff PowerShell is looking up internally
if ($eventArgs.CommandOrigin -eq 'Runspace') {
$resolvedCommand = if ($chocolateyCmdlets.Licensed -contains $command) {
Get-Command "$command*" -Module 'chocolatey.licensed' -CommandType Cmdlet -ErrorAction SilentlyContinue |
Where-Object { @($command, "$($command)Cmdlet") -contains $_.Name } |
Select-Object -First 1
}
elseif ($chocolateyCmdlets.Default -contains $command) {
Get-Command $command -Module "Chocolatey.PowerShell" -CommandType Cmdlet -ErrorAction SilentlyContinue
}

if ($resolvedCommand) {
$eventArgs.Command = $resolvedCommand
$eventArgs.StopSearch = $true
if ($resolvedCommand) {
$eventArgs.Command = $resolvedCommand
$eventArgs.StopSearch = $true
}
}
}
}.GetNewClosure()
}.GetNewClosure()
}

# todo: explore removing this for a future version
Export-ModuleMember -Function * -Alias * -Cmdlet *

# SIG # Begin signature block
# MIInKwYJKoZIhvcNAQcCoIInHDCCJxgCAQExDzANBglghkgBZQMEAgEFADB5Bgor
# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG
# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCCwc5bNHW/kpfcZ
# 7+n0pl1aI7nawLR48Dvt/t2uNlf8MqCCIK4wggWNMIIEdaADAgECAhAOmxiO+dAt
# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCDNL/wxXxTwoao9
# +niutFOSQWJKM7QvRr2vKMT3E6T+AKCCIK4wggWNMIIEdaADAgECAhAOmxiO+dAt
# 5+/bUOIIQBhaMA0GCSqGSIb3DQEBDAUAMGUxCzAJBgNVBAYTAlVTMRUwEwYDVQQK
# EwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20xJDAiBgNV
# BAMTG0RpZ2lDZXJ0IEFzc3VyZWQgSUQgUm9vdCBDQTAeFw0yMjA4MDEwMDAwMDBa
Expand Down Expand Up @@ -357,30 +366,30 @@ Export-ModuleMember -Function * -Alias * -Cmdlet *
# IFNIQTM4NCAyMDIxIENBMQIQBNI793flHTneCMtwLiiYFTANBglghkgBZQMEAgEF
# AKCBhDAYBgorBgEEAYI3AgEMMQowCKACgAChAoAAMBkGCSqGSIb3DQEJAzEMBgor
# BgEEAYI3AgEEMBwGCisGAQQBgjcCAQsxDjAMBgorBgEEAYI3AgEVMC8GCSqGSIb3
# DQEJBDEiBCDZUPufdS+OwzLmUgo92cMpyJjXnaFsIC9gTR1nYqo6YTANBgkqhkiG
# 9w0BAQEFAASCAYAaGhCrEt3ePvWYqbMREohQ4d1HO16LKq0hDHKwITSK78aBGrkS
# 8uTvYq96TCZs/IXBlKqgPbGrJx9T2/tYrf7bI7WmH32oNaHwQi8ZuGNU619aAqh2
# fv1c4AZZA0J574Kt7ornB9/WM0Q+ZwqEOKpJck/6J2kSbeORllyr4seGTUpHFrBV
# wfSIGkAv42jV6rnhmeHT1KO6K181VU6/yTnwyCwdi59mZsd92JuBqdMdevJyK+jI
# eUCRkDdbfCaoG4B08WukbLLZEXCsOCwP4pYO9k71eirpSi6x4s4Lcw8pDMYkjRpn
# Xn4kEApJm4pJNckBdENdeR8jRY8eszUTWj+3I4WqPXy10XfVqdIf0P+q+SvHpavJ
# nOZnmnHagJmT+uu2aHCeuKDAa4IXUZ+s6+LR9aPY7QiUQkmJ0PmNpMHcefCbU1W4
# w6E3DWHpzrV1YFCnD4R3ZkdAtKX3Jk3LE1SVdnxFTN1RFrmbV8cGKEyu9GXXeN3N
# HIor6od31ljL4oOhggMgMIIDHAYJKoZIhvcNAQkGMYIDDTCCAwkCAQEwdzBjMQsw
# DQEJBDEiBCDfVFiQM7J1zBG3SMXd2WKkowiR9EYrXajSa8w0Af5C4jANBgkqhkiG
# 9w0BAQEFAASCAYACrskGviu5NOPoHcqj9+yVEbLar5ZopNJX7Uc5eHIndy0yTxHH
# VKwoS2xONgmSL+whd6B7RiiPsBSMzpegud/XJip1lfqQIFh5SlQpwSoEz+WDRiTx
# vd0pToktDgn8Jyig7morW4HsRP0Pi77nNWnzF9aWaeIG4xEfGPA7gWnZBCzy07nn
# KeDagmAS8Y1RrSLNAVgh8Ccj4L07cTqMD0NTIxvjfJdqOn0ku6logYXSdfcjBFaM
# FRz7Z+FnSB2Ic/iC0RL6c+Ws8wADlZmfeHEHSz2GG7xOBodzlveriu6frN5AT8KD
# 3QqF3OK2f4T55OKhtEuOXOGz17UADB3VvyCrqMCj8IngD69QEjl4GW+437Hssy/U
# sd1XT7K8ZTR5F5dLexDvxJ1BBQ2wvSGStZXGwvzG2ckpAxVeDyZ/Cg+ghNEIzjGj
# 72qiXLvgfDqdnXjb+QVHjCTt1lp3HcIQft2QSzcZqLxgrFrt78a88t24Qg9TKD+a
# jovWMLzZuoZ4G+WhggMgMIIDHAYJKoZIhvcNAQkGMYIDDTCCAwkCAQEwdzBjMQsw
# CQYDVQQGEwJVUzEXMBUGA1UEChMORGlnaUNlcnQsIEluYy4xOzA5BgNVBAMTMkRp
# Z2lDZXJ0IFRydXN0ZWQgRzQgUlNBNDA5NiBTSEEyNTYgVGltZVN0YW1waW5nIENB
# AhAFRK/zlJ0IOaa/2z9f5WEWMA0GCWCGSAFlAwQCAQUAoGkwGAYJKoZIhvcNAQkD
# MQsGCSqGSIb3DQEHATAcBgkqhkiG9w0BCQUxDxcNMjQwNTI0MDcwNjM5WjAvBgkq
# hkiG9w0BCQQxIgQgIytP//oW3+hGlSMsPaiwBgquBFI2lmpevay3LGNpyXwwDQYJ
# KoZIhvcNAQEBBQAEggIAhogU3N2PYzBVQcqEyUJPWyop0lgf7Q3qANby72utOuEd
# v6k4X96QV/V0WD9bu1CATZeyd3ddmqrLIS+tpaiF/h+Tiskzve0pR7c3sCSJ+4TD
# LybmWMqhqRzwYd4AKpcI8GR//KNd8T+zq+9SQBlFcQb1Bwl9UDeW5pwPeYG9jZPr
# p6Ifta9Ltidqwt1zNRGjQtM2Lk0j2KIhOanAC0naTDso7q1uXE56mHwVS3Rpnj5s
# cdtxFBj8B5pXx0w/BICdJbYzsXkPbS8q0ZaQkvnk1mhUns/TjHvnByrEgGPZid0V
# KmDNhfJq/9OBUU2w2NzGnF8Me1tXrQnXKTKHqRBB0nlA2TmyjEuhmNBPpq7kdrte
# wgmsgXhoYstY30mbKvvWkv1y5wsCczgOBEg1ewAr2VACwyYVpCe/ht0WvJdoj2i4
# dAVWvohJj2oLcJzuvVKp2Y70qjY5r8tzUIuCy7Y2TPu+JM3pu4XutsjOc9wnmSuU
# aeid9dGd1t0xY1r/MzenKq6cs6F3IM43clHs3BcXZ+KehrHnKKBpdK8rIfcIPz8m
# YZVnYSyFpRT4WMLNhY0zAvWRiMCW37Zl+nhF6O7g2S0Lby1M8gP49CYQZXP2JbPb
# sJ4bDqEji2ilGD1Kfm29NE/mDm4k8WusQV0a6x38+8TX3CDq2e9t1Ta+7aKU1co=
# MQsGCSqGSIb3DQEHATAcBgkqhkiG9w0BCQUxDxcNMjQwNTMwMTk1ODQyWjAvBgkq
# hkiG9w0BCQQxIgQgMjUBf/vaW2Mel/F3o+3jwKil/Lk2VVlHp41MELm/sCMwDQYJ
# KoZIhvcNAQEBBQAEggIAit02r1pWJk+QRmD+UlpZFCzRjuVlC40zBNjlkRd3SUPI
# bDVRTWoTPbUmw6ExXn0AjFEgigxFk5MMZPyHaXL9rzAgjT2BtMwXvN76fxgp1dRR
# Rntf4jaiMWLwfsy7bQfC0RyDg8h6Xjkhl9Do0VdCi4465x9Vdafsso7lCVOf6UK2
# bkaqd/blX7G5PEghubKrPPagOEm0I4XY3r0UlMOB4gIuf2wzzI73HddmRaRdi/2T
# tdgVqdoWLgAz5K1nIafqUMQjhxRCQ41slZ4AEwS6txbLot5i+PqJ2dEqlbqedfNA
# R75eWdDWpSJzQE8Hcq6IZhvdya6OTPMn3DCODVAguYbZBq4S5Fayt+vR2K78Nmyz
# JuU6hkOYw3x1PBL/an3rtvIOrk6J0jNiGVkCGPA6Gijm3uH5TbofaO8RdnG61TIO
# x6g4USiJvOJY3SbEcSK1DsI91n2FF3vYotCZaGfuicbxhcvpIMdqtzbxiKIIsUda
# 1oUOmQr2+3ehuGKftW+EGk83ZKObNF98RMSA/4YFO9e42FtB7P9+FSbJ1mXRUnFC
# sftewOZA7haYCPiZV6Tt/kBJaG9Y2ROrq4rDrbMmKWl3WOWui/tyEwm12GcNLgpc
# cRY1FUXMfOL1kM9fgLlUCKORaN9sB1kEKOGXGFGkpKyWQNGlpQn/EuKKqHEhwl4=
# SIG # End signature block
Loading

0 comments on commit 484999b

Please sign in to comment.