Advertisement
Guest User

Install.ps1 x86

a guest
May 16th, 2018
328
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. $Authorization = @"
  2. using System;
  3. using System.Runtime.InteropServices;
  4.  
  5. public class AdjProcessPriv
  6. {
  7. [DllImport("kernel32.dll")]
  8. public static extern uint WTSGetActiveConsoleSessionId();
  9. [DllImport("Wtsapi32.dll", SetLastError = true)]
  10. public static extern uint WTSQueryUserToken(uint SessionId, ref IntPtr phToken);
  11. [DllImport("advapi32.dll", SetLastError = true)]
  12. public static extern uint ImpersonateLoggedOnUser(IntPtr hToken);
  13. [DllImport("advapi32.dll", EntryPoint = "CreateProcessAsUser", SetLastError = true, CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
  14. public static extern bool CreateProcessAsUser(IntPtr hToken, String lpApplicationName, String lpCommandLine, IntPtr lpProcessAttributes,
  15. IntPtr lpThreadAttributes, bool bInheritHandle, uint dwCreationFlags, IntPtr lpEnvironment, String lpCurrentDirectory,
  16. ref STARTUPINFO lpStartupInfo, out PROCESS_INFORMATION lpProcessInformation);
  17.  
  18. [DllImport("userenv.dll", SetLastError = true)]
  19. public static extern bool CreateEnvironmentBlock(ref IntPtr lpEnvironment, IntPtr hToken, bool bInherit);
  20. [DllImport("userenv.dll", SetLastError = true)]
  21. [return: MarshalAs(UnmanagedType.Bool)]
  22. public static extern bool DestroyEnvironmentBlock(IntPtr lpEnvironment);
  23.  
  24. [DllImport("kernel32.dll", SetLastError = true)]
  25. public static extern bool CloseHandle(IntPtr hSnapshot);
  26.  
  27. [DllImport("kernel32.dll", SetLastError = true)]
  28. public static extern uint WaitForSingleObject(IntPtr hHandle, uint dwMilliseconds);
  29.  
  30. [DllImport("shell32.dll")]
  31. public static extern IntPtr ShellExecute(
  32. IntPtr hwnd,
  33. string lpszOp,
  34. string lpszFile,
  35. string lpszParams,
  36. string lpszDir,
  37. int FsShowCmd
  38. );
  39.  
  40. public enum WTS_CONNECTSTATE_CLASS
  41. {
  42.    WTSActive,
  43.    WTSConnected,
  44.    WTSConnectQuery,
  45.    WTSShadow,
  46.    WTSDisconnected,
  47.    WTSIdle,
  48.    WTSListen,
  49.    WTSReset,
  50.    WTSDown,
  51.    WTSInit
  52. }
  53. [StructLayout(LayoutKind.Sequential)]
  54. public struct PROCESS_INFORMATION
  55. {
  56.    public IntPtr hProcess;
  57.    public IntPtr hThread;
  58.    public uint dwProcessId;
  59.    public uint dwThreadId;
  60. }
  61. [StructLayout(LayoutKind.Sequential)]
  62. public struct STARTUPINFO
  63. {
  64.    public int cb;
  65.    public String lpReserved;
  66.    public String lpDesktop;
  67.    public String lpTitle;
  68.    public uint dwX;
  69.    public uint dwY;
  70.    public uint dwXSize;
  71.    public uint dwYSize;
  72.    public uint dwXCountChars;
  73.    public uint dwYCountChars;
  74.    public uint dwFillAttribute;
  75.    public uint dwFlags;
  76.    public short wShowWindow;
  77.    public short cbReserved2;
  78.    public IntPtr lpReserved2;
  79.    public IntPtr hStdInput;
  80.    public IntPtr hStdOutput;
  81.    public IntPtr hStdError;
  82. }
  83.  
  84. public static uint LaunchUserProcess(string appPath, string cmdLine)
  85. {
  86.    uint processId = 0;
  87.    var hImpersonationToken = IntPtr.Zero;
  88.    uint activeSessionId = WTSGetActiveConsoleSessionId();
  89.    uint userToken = WTSQueryUserToken(activeSessionId, ref hImpersonationToken);
  90.    if (userToken != 0)
  91.    {
  92.        if (ImpersonateLoggedOnUser(hImpersonationToken) != 0)
  93.         {
  94.            var startInfo = new STARTUPINFO();
  95.            var procInfo = new PROCESS_INFORMATION();
  96.            var pEnv = IntPtr.Zero;
  97.            startInfo.cb = Marshal.SizeOf(typeof(STARTUPINFO));
  98.            CreateEnvironmentBlock(ref pEnv, hImpersonationToken, false);
  99.            if (CreateProcessAsUser(hImpersonationToken,
  100.                    appPath,    
  101.                    cmdLine,    
  102.                    IntPtr.Zero,
  103.                    IntPtr.Zero,
  104.                    false,
  105.                    0,
  106.                    IntPtr.Zero,
  107.                    null,    
  108.                    ref startInfo,
  109.                    out procInfo))
  110.                {                  
  111.                    processId = procInfo.dwProcessId;
  112.                    WaitForSingleObject(procInfo.hProcess, 5000);
  113.                }
  114.  
  115.                if (pEnv != IntPtr.Zero)
  116.                {
  117.                    DestroyEnvironmentBlock(pEnv);
  118.                }
  119.                CloseHandle(procInfo.hThread);
  120.                CloseHandle(procInfo.hProcess);
  121.  
  122.        }  
  123.        CloseHandle(hImpersonationToken);
  124.    }
  125.    if(processId == 0)
  126.    {
  127.        var shellInfo = ShellExecute(IntPtr.Zero, "", appPath, cmdLine, null, 0);
  128.        if(shellInfo.ToInt32() > 32)
  129.        {
  130.            processId = (uint)(shellInfo.ToInt32());
  131.        }
  132.    }
  133.    return processId;
  134. }
  135. }
  136. "@
  137. $type = Add-Type $Authorization  -passthru
  138.  
  139. $PackageName = "LenovoBatteryGaugePackage"
  140. $PathToPluginDir = "$env:ProgramData\Lenovo\ImController\Plugins"
  141. $PathToPackageDir = "$PathToPluginDir\$PackageName"
  142. $LogFileName = ("$PackageName" + ".Install." + (Get-Date -Format "-yyyy_MM_dd-HH-mm-ss") + ".txt")
  143. $PathToLogsDir = "$env:ProgramData\Lenovo\Modern\Logs"
  144. $PathToLogFile = "$PathToLogsDir\$LogFileName"
  145. $UninstallFileName = "Uninstall.ps1"
  146. $InstallFileName = $MyInvocation.MyCommand.Name
  147. [bool]$EnableLogging = $false
  148. try { $EnableLogging = ((Get-ItemPropertyValue -Path "HKLM:\SOFTWARE\Wow6432Node\Lenovo\Modern\Logs" -Name "ImController.Service") -eq 0 ) } catch{}
  149.  
  150. $PSDefaultParameterValues["Write-Log:pathToLogFile"]=$PathToLogFile
  151. $PSDefaultParameterValues["Write-Log:enableLogging"]=$EnableLogging
  152.  
  153. Function Check-Is64BitProcess()
  154. {
  155.     return [Environment]::Is64BitProcess
  156. }
  157.  
  158. Function Check-Is64BitOS()
  159. {
  160.     return [Environment]::Is64BitOperatingSystem
  161. }
  162.  
  163. Function Check-IsWow64()
  164. {
  165.     return !(Check-Is64BitProcess) -and (Check-Is64BitOS)
  166. }
  167.  
  168. Function Check-Is64BitPackage()
  169. {
  170.     return $PSScriptRoot.ToLower().Contains("x64".ToLower())
  171. }
  172.  
  173. function Write-Log
  174. {
  175.     [CmdletBinding()]
  176.     param(
  177.         [Parameter(
  178.             Mandatory=$false,
  179.             Position=1,
  180.             ValueFromPipeline=$true
  181.         )]
  182.         [PSObject[]]$inputObject,
  183.         [string]$pathToLogFile=".\" + [System.IO.Path]::GetFileName($MyInvocation.ScriptName) + ".log",
  184.         [bool]$enableLogging=$true
  185.     )
  186.  
  187.     $obj=$null
  188.     if($input -ne $null)
  189.     {
  190.         $obj=$input
  191.     }
  192.     else
  193.     {
  194.         $obj=$inputObject
  195.     }
  196.  
  197.     Out-Host -InputObject $obj
  198.     if($enableLogging)
  199.     {
  200.         if( -not(Test-Path $pathToLogFile)) { New-Item -Path (Split-Path $pathToLogFile) -Name (Split-Path $pathToLogFile -leaf) -ItemType File -force | Out-Null }
  201.         Out-File -InputObject $obj -FilePath $pathToLogFile -Encoding unicode -Append -Width 200
  202.     }
  203. }
  204.  
  205. Function UninstallMsi($prodCode)
  206. {
  207.     $uninstallString = (Get-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$prodCode" -Name "UninstallString" -ErrorAction SilentlyContinue).UninstallString
  208.     if (($UninstallString -ne $null) -and ($uninstallString.Length -ne 0)) {
  209.         Write-Log "start uninstall msi package for PRODCODE $prodCode"
  210.         $MSIEXECPATH = "$env:SystemRoot\System32\MsiExec.exe"
  211.         Write-Log "Start-Process -NoNewWindow -Wait -FilePath $MSIEXECPATH `"/X$prodCode /quiet /noreboot`""
  212.         Start-Process -NoNewWindow -Wait -FilePath $MSIEXECPATH "/X$prodCode /quiet /noreboot" *>&1 | Write-Log
  213.     }
  214.     else
  215.     {
  216.         Write-Log "cannot find uninstall entry for program PRODCODE $prodCode"
  217.     }
  218. }
  219.  
  220. function GetCurrentActiveUserSID
  221. {
  222.     $activeUser = Get-WmiObject Win32_ComputerSystem -ComputerName $env:computername -EA stop | Select UserName -Unique|%{"{0}" -f $_.UserName.ToString().Split('\')[1]}
  223.     $objUser = New-Object System.Security.Principal.NTAccount("$activeUser")
  224.     $strSID = $objUser.Translate([System.Security.Principal.SecurityIdentifier])
  225.     $strSID.Value
  226. }
  227.  
  228. if(Check-Is64BitOS)
  229. {
  230.     $OS_BITNESS=64
  231. }
  232. else
  233. {
  234.     $OS_BITNESS=32
  235. }
  236.    
  237. if(Check-Is64BitProcess)
  238. {
  239.     $PS_BITNESS=64
  240. }
  241. else
  242. {
  243.     $PS_BITNESS=32
  244. }
  245.  
  246. if(Check-Is64BitPackage)
  247. {
  248.     $PK_BITNESS=64
  249. }
  250. else
  251. {
  252.     $PK_BITNESS=32
  253. }
  254.  
  255. if ($OS_BITNESS -eq 64)
  256. {
  257.     $arch="x64"
  258.     $PRODCODE64="{CBEDEC16-C4F5-4255-99E4-5884EFEDD1BC}"
  259.     $PRODCODE32="{01DBFF2E-73FD-4CC3-98CE-B39260D80D8C}"
  260.     $PRODCODE64_OLD="{B8D3ED8D-A295-44C2-8AE1-56823D44AD1F}"
  261.     $PRODCODE32_OLD="{840DE7EE-4816-4402-BEE4-80517B3233A3}"
  262. }
  263. else
  264. {
  265.     $arch="x86"
  266.     $PRODCODE32="{01DBFF2E-73FD-4CC3-98CE-B39260D80D8C}"
  267.     $PRODCODE32_OLD="{840DE7EE-4816-4402-BEE4-80517B3233A3}"
  268. }
  269.  
  270. $applicationName = "$env:SystemRoot\system32\rundll32.exe"
  271. $commandline = " $env:ProgramData\Lenovo\ImController\Plugins\LenovoBatteryGaugePackage\$arch\LenovoBatteryGaugePackage.dll, "
  272. $ShowBg="ShowBatteryGauge"
  273. $HideBg="HideBatteryGauge"
  274.  
  275. Function BatteryGaugeIconControl($cmdstring)
  276. {
  277.     $commandParam = $commandline + $cmdstring
  278.     $processId = $type[0]::LaunchUserProcess($applicationName, $commandParam)
  279.     if($processId -ne 0)
  280.     {
  281.         Write-Log "Launch a user process sucessful"
  282.     }
  283.     else
  284.     {
  285.         Write-Log "Launch a user process failure"
  286.     }
  287.     return $processId
  288. }
  289.  
  290. Write-Log "Below logs come from $PSCommandPath"
  291. Write-Log "Operating System is $OS_BITNESS bit"
  292. Write-Log "Process is $PS_BITNESS bit"
  293. Write-Log "Package is $PK_BITNESS Bit"
  294.  
  295. if ($PS_BITNESS -eq 32)
  296. {
  297.     if ($PK_BITNESS -eq 64)
  298.     {
  299.         if ($OS_BITNESS -eq 32)
  300.         {
  301.             Write-Log "cannot install a 64 bit package in an 32 bit os."
  302.         }
  303.         else
  304.         {
  305.             Write-Log "Package bitness is 64 but process is 32.  Relaunching as 64"
  306.             $PS64BITPATH="$env:SystemRoot\SysNative\WindowsPowerShell\v1.0\PowerShell.exe"
  307.             Write-Log "Start-Process -NoNewWindow -Wait -FilePath $PS64BITPATH -ArgumentList `"$PSCommandPath`""
  308.             Start-Process -NoNewWindow -Wait -FilePath $PS64BITPATH -ArgumentList "$PSCommandPath" *>&1 | Write-Log
  309.             Write-Log "Completed re-running as 64 bit"
  310.             Exit
  311.         }
  312.     }
  313. }
  314. elseif ($PS_BITNESS -eq 64)
  315. {
  316.     if ($PK_BITNESS -eq 32)
  317.     {
  318.         Write-Log "Package bitness is 32 but process is 64.  Relaunching as 32"
  319.         $PS32BITPATH="$env:SystemRoot\SysWOW64\WindowsPowerShell\v1.0\PowerShell.exe"
  320.         Write-Log "Start-Process -NoNewWindow -Wait -FilePath $PS32BITPATH -ArgumentList `"$PSCommandPath`""
  321.         Start-Process -NoNewWindow -Wait -FilePath $PS32BITPATH -ArgumentList "$PSCommandPath" *>&1 | Write-Log
  322.         Write-Log "Completed re-running as 32 bit"
  323.         Exit
  324.     }
  325. }
  326. else
  327. {
  328.     Write-Log "Package bitness unknown, will exit."
  329. }
  330.  
  331.  
  332. # ::**************************************************************************************************
  333. # :: This section run only when current scripts running in package folder
  334. # ::    1. Call uninstall.ps1 in the package folder if it has been install in this PC, and then delete package folder
  335. # ::    2. Create package folder and copy content to it
  336. # ::    3. Call install.ps1 in the package folder
  337. # ::
  338. # ::**************************************************************************************************
  339. if ($PSScriptRoot -ne "$env:ProgramData\Lenovo\ImController\Plugins\LenovoBatteryGaugePackage\$arch")
  340. {
  341.     #::***********************************************************************************************
  342.     #:: [Check whether pinned battery gauge to taskbar previously]
  343.     #::
  344.     #::
  345.     #::***********************************************************************************************
  346.     $SID = GetCurrentActiveUserSID
  347.     New-PSDrive -PSProvider Registry -Name HKU -Root HKEY_USERS *>&1 | Write-Log
  348.     $Pinned = (Get-ItemProperty -Path HKU:$SID\SOFTWARE\Lenovo\BatteryGauge -Name "ShowInTaskbar" -ErrorAction SilentlyContinue).ShowInTaskbar
  349.     if ($Pinned -eq 1)
  350.     {
  351.         Write-Log "The battery gauge had been pinned to task tray previously"
  352.     }
  353.     else
  354.     {
  355.         Write-Log "The battery gauge had NOT been pinned to task tray previously"
  356.     }
  357.  
  358.     if (Test-Path "$env:ProgramData\Lenovo\ImController\Plugins\LenovoBatteryGaugePackage\$arch\$UninstallFileName")
  359.     {
  360.         Write-Log "Uninstall old version by call $UninstallFileName under package folder"
  361.         Write-Log "Push-Location `"$env:ProgramData\Lenovo\ImController\Plugins\LenovoBatteryGaugePackage\$arch\`""
  362.         Push-Location "$env:ProgramData\Lenovo\ImController\Plugins\LenovoBatteryGaugePackage\$arch\" *>&1 | Write-Log
  363.         $PSPATH="$env:SystemRoot\System32\WindowsPowerShell\v1.0\PowerShell.exe"
  364.         Write-Log "Start-Process -NoNewWindow -Wait -FilePath $PSPATH -ArgumentList `"$env:ProgramData\Lenovo\ImController\Plugins\LenovoBatteryGaugePackage\$arch\$UninstallFileName`""
  365.         Start-Process -NoNewWindow -Wait -FilePath $PSPATH -ArgumentList "$env:ProgramData\Lenovo\ImController\Plugins\LenovoBatteryGaugePackage\$arch\$UninstallFileName ForUpdate" *>&1 | Write-Log
  366.         Write-Log "Pop-Location"
  367.         Pop-location *>&1 | Write-Log
  368.        
  369.         Write-Log "Remove old version package folder"
  370.         Write-Log "Remove-Item -Recurse -Force `"$env:ProgramData\Lenovo\ImController\Plugins\LenovoBatteryGaugePackage`""
  371.         Remove-Item -Recurse -Force "$env:ProgramData\Lenovo\ImController\Plugins\LenovoBatteryGaugePackage" *>&1 | Write-Log
  372.     }
  373.    
  374.     Write-Log "Make package folder for new version"
  375.     Write-Log "New-Item `"$env:ProgramData\Lenovo\ImController\Plugins\LenovoBatteryGaugePackage\`" -type directory"
  376.     New-Item "$env:ProgramData\Lenovo\ImController\Plugins\LenovoBatteryGaugePackage\" -type directory *>&1 | Write-Log
  377.  
  378.     ## ::************************************************************************************************
  379.     ## :: [Rename the LenovoBatteryGaugePackage.dll file if this file haven't been removed. There was   ]
  380.     ## :: [issue which will lead this dll cannot unload from explorer due to in-use, then cannot replace]
  381.     ## :: [Can remove this operation from next version, since already fixed the in-use issue in the dll ]
  382.     ## ::************************************************************************************************
  383.     $rand=Get-Random
  384.     if(Test-Path -Path "$env:ProgramData\Lenovo\ImController\Plugins\LenovoBatteryGaugePackage\x64\LenovoBatteryGaugePackage.dll" -PathType Leaf)
  385.     {
  386.         Write-Log "Rename-Item -Path `"$env:ProgramData\Lenovo\ImController\Plugins\LenovoBatteryGaugePackage\x64\LenovoBatteryGaugePackage.dll`" -NewName `"$rand.dll`""
  387.         Rename-Item -Path "$env:ProgramData\Lenovo\ImController\Plugins\LenovoBatteryGaugePackage\x64\LenovoBatteryGaugePackage.dll" -NewName "$rand.dll"
  388.         New-ItemProperty -Path HKU:$SID\SOFTWARE\Lenovo\BatteryGauge -Name "ShowInTaskbar" -Value $Pinned -PropertyType DWORD -Force
  389.     }
  390.  
  391.     if(Test-Path -Path "$env:ProgramData\Lenovo\ImController\Plugins\LenovoBatteryGaugePackage\x86\LenovoBatteryGaugePackage.dll" -PathType Leaf)
  392.     {
  393.         Write-Log "Rename-Item -Path `"$env:ProgramData\Lenovo\ImController\Plugins\LenovoBatteryGaugePackage\x86\LenovoBatteryGaugePackage.dll`" -NewName `"$rand.dll`""
  394.         Rename-Item -Path "$env:ProgramData\Lenovo\ImController\Plugins\LenovoBatteryGaugePackage\x86\LenovoBatteryGaugePackage.dll" -NewName "$rand.dll"
  395.         New-ItemProperty -Path HKU:$SID\SOFTWARE\Lenovo\BatteryGauge -Name "ShowInTaskbar" -Value $Pinned -PropertyType DWORD -Force
  396.     }
  397.    
  398.     Remove-PSDrive -Name HKU *>&1 | Write-Log
  399.  
  400.     Write-Log "Copy new version package contents to package folder, and give neccessary privileage"
  401.     Write-Log "Copy-Item `"$PSScriptRoot\..\*`" `"$env:ProgramData\Lenovo\ImController\Plugins\LenovoBatteryGaugePackage\`" -force -recurse -verbose"
  402.     Copy-Item "$PSScriptRoot\..\*" "$env:ProgramData\Lenovo\ImController\Plugins\LenovoBatteryGaugePackage\" -force -recurse -verbose *>&1 | Write-Log
  403.        
  404.     Write-Log "Install new version by call $InstallFileName under package folder"
  405.     Write-Log "Push-Location `"$env:ProgramData\Lenovo\ImController\Plugins\LenovoBatteryGaugePackage\$arch\`""
  406.     Push-Location "$env:ProgramData\Lenovo\ImController\Plugins\LenovoBatteryGaugePackage\$arch\" *>&1 | Write-Log
  407.     $PSPATH="$env:SystemRoot\System32\WindowsPowerShell\v1.0\PowerShell.exe"
  408.     Write-Log "Start-Process -NoNewWindow -Wait -FilePath $PSPATH -ArgumentList `"$env:ProgramData\Lenovo\ImController\Plugins\LenovoBatteryGaugePackage\$arch\$InstallFileName`""
  409.     Start-Process -NoNewWindow -Wait -FilePath $PSPATH -ArgumentList "$env:ProgramData\Lenovo\ImController\Plugins\LenovoBatteryGaugePackage\$arch\$InstallFileName $Pinned" *>&1 | Write-Log
  410.  
  411.     Write-Log "Pop-location"
  412.     Pop-location *>&1 | Write-Log
  413.     Write-Log "completed re-running in the package folder"
  414.    
  415.     Write-Log "Remove temporary install package folder"
  416.     Write-Log "Remove-Item -Recurse -Force `"$PSScriptRoot\..`""
  417.     Remove-Item -Recurse -Force "$PSScriptRoot\.." *>&1 | Write-Log
  418.        
  419.     Exit
  420. }
  421.  
  422. # ::***********************************************************************************************
  423. # :: [Uninstall old Lenovo Battery Gauge ]
  424. # ::
  425. # ::
  426. # ::***********************************************************************************************
  427. if (Get-Variable ProdCode64 -ErrorAction SilentlyContinue) {
  428.     UninstallMsi($ProdCode64)
  429. }
  430. if (Get-Variable ProdCode32 -ErrorAction SilentlyContinue) {
  431.     UninstallMsi($ProdCode32)
  432. }
  433. if (Get-Variable ProdCode64_OLD -ErrorAction SilentlyContinue) {
  434.     UninstallMsi($ProdCode64_OLD)
  435. }
  436. if (Get-Variable ProdCode32_OLD -ErrorAction SilentlyContinue) {
  437.     UninstallMsi($ProdCode32_OLD)
  438. }
  439.  
  440. # ::***********************************************************************************************
  441. # :: [Kill QuickSetting.exe process ]
  442. # ::
  443. # ::
  444. # ::***********************************************************************************************
  445. Write-Log "Start-Process -NoNewWindow -Wait -FilePath taskkill.exe -ArgumentList `"/F /T /IM QuickSetting.exe`""
  446. Start-Process -NoNewWindow -Wait -FilePath taskkill.exe -ArgumentList "/F /T /IM QuickSetting.exe" *>&1 | Write-Log
  447.  
  448. # ::***********************************************************************************************
  449. # :: [Register PluginsContract.dll ]
  450. # ::
  451. # ::
  452. # ::***********************************************************************************************
  453. Write-Log "Start-Process -NoNewWindow -Wait -FilePath $env:ProgramData\Lenovo\ImController\Plugins\LenovoBatteryGaugePackage\$arch\RegAsm.exe -ArgumentList `"/silent $env:ProgramData\Lenovo\ImController\Plugins\LenovoBatteryGaugePackage\$arch\PluginsContract.dll`""
  454. Start-Process -NoNewWindow -Wait -FilePath $env:ProgramData\Lenovo\ImController\Plugins\LenovoBatteryGaugePackage\$arch\RegAsm.exe -ArgumentList "/silent $env:ProgramData\Lenovo\ImController\Plugins\LenovoBatteryGaugePackage\$arch\PluginsContract.dll" *>&1 | Write-Log
  455. if($? -ne $true)
  456. {
  457.     Write-Log "Registry PluginsContract.dll into system return code $LastExitCode"
  458. }
  459.  
  460. # ::***********************************************************************************************
  461. # :: [Register LenovoBatteryGaugePackage.dll ]
  462. # ::
  463. # ::
  464. # ::***********************************************************************************************
  465. Write-Log "Start-Process -NoNewWindow -Wait -FilePath regsvr32.exe -ArgumentList `"/s $env:ProgramData\Lenovo\ImController\Plugins\LenovoBatteryGaugePackage\$arch\LenovoBatteryGaugePackage.dll`""
  466. Start-Process -NoNewWindow -Wait -FilePath regsvr32.exe -ArgumentList "/s $env:ProgramData\Lenovo\ImController\Plugins\LenovoBatteryGaugePackage\$arch\LenovoBatteryGaugePackage.dll" *>&1 | Write-Log
  467. if($? -ne $true)
  468. {
  469.     Write-Log "Registry battery gauge to system return code $LastExitCode"
  470. }
  471.  
  472. # ::***********************************************************************************************
  473. # :: [Create Lenovo Battery Gauge Registry Entries ]
  474. # ::
  475. # ::
  476. # ::***********************************************************************************************
  477. Write-Log "Start-Process -NoNewWindow -Wait -FilePath reg.exe -ArgumentList `"add HKLM\Software\Lenovo\QuickSetting /f`""
  478. Start-Process -NoNewWindow -Wait -FilePath reg.exe -ArgumentList "add HKLM\Software\Lenovo\QuickSetting /f" *>&1 | Write-Log
  479. if($? -ne $true)
  480. {
  481.     Write-Log "Add registry key `"HKLM\Software\Lenovo\QuickSetting`" return code $LastExitCode"
  482. }
  483.  
  484. Write-Log "Start-Process -NoNewWindow -Wait -FilePath reg.exe -ArgumentList `"add HKLM\Software\Lenovo\QuickSetting /v Path /t REG_SZ /d $env:ProgramData\Lenovo\ImController\Plugins\LenovoBatteryGaugePackage\$arch\ /f`""
  485. Start-Process -NoNewWindow -Wait -FilePath reg.exe -ArgumentList "add HKLM\Software\Lenovo\QuickSetting /v Path /t REG_SZ /d `"$env:ProgramData\Lenovo\ImController\Plugins\LenovoBatteryGaugePackage\$arch\\`" /f" *>&1 | Write-Log
  486. if($? -ne $true)
  487. {
  488.     Write-Log "Add registry value `"Path`" to `"HKLM\Software\Lenovo\QuickSetting`" return code $LastExitCode"
  489. }
  490.  
  491. Write-Log "Start-Process -NoNewWindow -Wait -FilePath reg.exe -ArgumentList `"add HKLM\Software\Lenovo\QuickSetting /v Location /t REG_SZ /d $env:ProgramData\Lenovo\ImController\Plugins\LenovoBatteryGaugePackage\$arch\QuickSetting.exe /f`""
  492. Start-Process -NoNewWindow -Wait -FilePath reg.exe -ArgumentList "add HKLM\Software\Lenovo\QuickSetting /v Location /t REG_SZ /d `"$env:ProgramData\Lenovo\ImController\Plugins\LenovoBatteryGaugePackage\$arch\QuickSetting.exe`" /f" *>&1 | Write-Log
  493. if($? -ne $true)
  494. {
  495.     Write-Log "Add registry value `"Location`" to `"HKLM\Software\Lenovo\QuickSetting`" return code $LastExitCode"
  496. }
  497.  
  498. # ::***********************************************************************************************
  499. # :: [ Pin to task bar if needed]
  500. # ::
  501. # ::
  502. # ::***********************************************************************************************
  503. Write-Log "installing param is: $($args[0])"
  504. if ($($args[0]) -eq 1)
  505. {
  506.     if(BatteryGaugeIconControl($ShowBg) -ne 0 )
  507.     {
  508.         Write-Log "Show battery gauge icon on task tray sucessful"
  509.     }
  510.     else
  511.     {
  512.         Write-Log "Show battery gauge icon on task tray failure"
  513.     }
  514. }
  515.  
  516. Write-Log "success"
  517. Exit
  518.  
  519. # SIG # Begin signature block
  520. # MIIcZQYJKoZIhvcNAQcCoIIcVjCCHFICAQExDzANBglghkgBZQMEAgEFADB5Bgor
  521. # BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG
  522. # KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCBgZ2F4VJoIbmF8
  523. # 3QYfGeL/aMdCm5VwMndTgCls1qcQ7KCCF2AwggPuMIIDV6ADAgECAhB+k+v7fMZO
  524. # WepLmnfUBvw7MA0GCSqGSIb3DQEBBQUAMIGLMQswCQYDVQQGEwJaQTEVMBMGA1UE
  525. # CBMMV2VzdGVybiBDYXBlMRQwEgYDVQQHEwtEdXJiYW52aWxsZTEPMA0GA1UEChMG
  526. # VGhhd3RlMR0wGwYDVQQLExRUaGF3dGUgQ2VydGlmaWNhdGlvbjEfMB0GA1UEAxMW
  527. # VGhhd3RlIFRpbWVzdGFtcGluZyBDQTAeFw0xMjEyMjEwMDAwMDBaFw0yMDEyMzAy
  528. # MzU5NTlaMF4xCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRTeW1hbnRlYyBDb3Jwb3Jh
  529. # dGlvbjEwMC4GA1UEAxMnU3ltYW50ZWMgVGltZSBTdGFtcGluZyBTZXJ2aWNlcyBD
  530. # QSAtIEcyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsayzSVRLlxwS
  531. # CtgleZEiVypv3LgmxENza8K/LlBa+xTCdo5DASVDtKHiRfTot3vDdMwi17SUAAL3
  532. # Te2/tLdEJGvNX0U70UTOQxJzF4KLabQry5kerHIbJk1xH7Ex3ftRYQJTpqr1SSwF
  533. # eEWlL4nO55nn/oziVz89xpLcSvh7M+R5CvvwdYhBnP/FA1GZqtdsn5Nph2Upg4XC
  534. # YBTEyMk7FNrAgfAfDXTekiKryvf7dHwn5vdKG3+nw54trorqpuaqJxZ9YfeYcRG8
  535. # 4lChS+Vd+uUOpyyfqmUg09iW6Mh8pU5IRP8Z4kQHkgvXaISAXWp4ZEXNYEZ+VMET
  536. # fMV58cnBcQIDAQABo4H6MIH3MB0GA1UdDgQWBBRfmvVuXMzMdJrU3X3vP9vsTIAu
  537. # 3TAyBggrBgEFBQcBAQQmMCQwIgYIKwYBBQUHMAGGFmh0dHA6Ly9vY3NwLnRoYXd0
  538. # ZS5jb20wEgYDVR0TAQH/BAgwBgEB/wIBADA/BgNVHR8EODA2MDSgMqAwhi5odHRw
  539. # Oi8vY3JsLnRoYXd0ZS5jb20vVGhhd3RlVGltZXN0YW1waW5nQ0EuY3JsMBMGA1Ud
  540. # JQQMMAoGCCsGAQUFBwMIMA4GA1UdDwEB/wQEAwIBBjAoBgNVHREEITAfpB0wGzEZ
  541. # MBcGA1UEAxMQVGltZVN0YW1wLTIwNDgtMTANBgkqhkiG9w0BAQUFAAOBgQADCZuP
  542. # ee9/WTCq72i1+uMJHbtPggZdN1+mUp8WjeockglEbvVt61h8MOj5aY0jcwsSb0ep
  543. # rjkR+Cqxm7Aaw47rWZYArc4MTbLQMaYIXCp6/OJ6HVdMqGUY6XlAYiWWbsfHN2qD
  544. # IQiOQerd2Vc/HXdJhyoWBl6mOGoiEqNRGYN+tjCCBKMwggOLoAMCAQICEA7P9DjI
  545. # /r81bgTYapgbGlAwDQYJKoZIhvcNAQEFBQAwXjELMAkGA1UEBhMCVVMxHTAbBgNV
  546. # BAoTFFN5bWFudGVjIENvcnBvcmF0aW9uMTAwLgYDVQQDEydTeW1hbnRlYyBUaW1l
  547. # IFN0YW1waW5nIFNlcnZpY2VzIENBIC0gRzIwHhcNMTIxMDE4MDAwMDAwWhcNMjAx
  548. # MjI5MjM1OTU5WjBiMQswCQYDVQQGEwJVUzEdMBsGA1UEChMUU3ltYW50ZWMgQ29y
  549. # cG9yYXRpb24xNDAyBgNVBAMTK1N5bWFudGVjIFRpbWUgU3RhbXBpbmcgU2Vydmlj
  550. # ZXMgU2lnbmVyIC0gRzQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCi
  551. # Yws5RLi7I6dESbsO/6HwYQpTk7CY260sD0rFbv+GPFNVDxXOBD8r/amWltm+YXkL
  552. # W8lMhnbl4ENLIpXuwitDwZ/YaLSOQE/uhTi5EcUj8mRY8BUyb05Xoa6IpALXKh7N
  553. # S+HdY9UXiTJbsF6ZWqidKFAOF+6W22E7RVEdzxJWC5JH/Kuu9mY9R6xwcueS51/N
  554. # ELnEg2SUGb0lgOHo0iKl0LoCeqF3k1tlw+4XdLxBhircCEyMkoyRLZ53RB9o1qh0
  555. # d9sOWzKLVoszvdljyEmdOsXF6jML0vGjG/SLvtmzV4s73gSneiKyJK4ux3DFvk6D
  556. # Jgj7C72pT5kI4RAocqrNAgMBAAGjggFXMIIBUzAMBgNVHRMBAf8EAjAAMBYGA1Ud
  557. # JQEB/wQMMAoGCCsGAQUFBwMIMA4GA1UdDwEB/wQEAwIHgDBzBggrBgEFBQcBAQRn
  558. # MGUwKgYIKwYBBQUHMAGGHmh0dHA6Ly90cy1vY3NwLndzLnN5bWFudGVjLmNvbTA3
  559. # BggrBgEFBQcwAoYraHR0cDovL3RzLWFpYS53cy5zeW1hbnRlYy5jb20vdHNzLWNh
  560. # LWcyLmNlcjA8BgNVHR8ENTAzMDGgL6AthitodHRwOi8vdHMtY3JsLndzLnN5bWFu
  561. # dGVjLmNvbS90c3MtY2EtZzIuY3JsMCgGA1UdEQQhMB+kHTAbMRkwFwYDVQQDExBU
  562. # aW1lU3RhbXAtMjA0OC0yMB0GA1UdDgQWBBRGxmmjDkoUHtVM2lJjFz9eNrwN5jAf
  563. # BgNVHSMEGDAWgBRfmvVuXMzMdJrU3X3vP9vsTIAu3TANBgkqhkiG9w0BAQUFAAOC
  564. # AQEAeDu0kSoATPCPYjA3eKOEJwdvGLLeJdyg1JQDqoZOJZ+aQAMc3c7jecshaAba
  565. # tjK0bb/0LCZjM+RJZG0N5sNnDvcFpDVsfIkWxumy37Lp3SDGcQ/NlXTctlzevTcf
  566. # Q3jmeLXNKAQgo6rxS8SIKZEOgNER/N1cdm5PXg5FRkFuDbDqOJqxOtoJcRD8HHm0
  567. # gHusafT9nLYMFivxf1sJPZtb4hbKE4FtAC44DagpjyzhsvRaqQGvFZwsL0kb2yK7
  568. # w/54lFHDhrGCiF3wPbRRoXkzKy57udwgCRNx62oZW8/opTBXLIlJP7nPf8m/PiJo
  569. # Y1OavWl0rMUdPH+S4MO8HNgEdTCCBLkwggOhoAMCAQICEEAaxGQhsxMhAw675BIa
  570. # xR0wDQYJKoZIhvcNAQELBQAwgb0xCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJp
  571. # U2lnbiwgSW5jLjEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1c3QgTmV0d29yazE6MDgG
  572. # A1UECxMxKGMpIDIwMDggVmVyaVNpZ24sIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1
  573. # c2Ugb25seTE4MDYGA1UEAxMvVmVyaVNpZ24gVW5pdmVyc2FsIFJvb3QgQ2VydGlm
  574. # aWNhdGlvbiBBdXRob3JpdHkwHhcNMDgwNDAyMDAwMDAwWhcNMzcxMjAxMjM1OTU5
  575. # WjCBvTELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYD
  576. # VQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwOCBW
  577. # ZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MTgwNgYDVQQD
  578. # Ey9WZXJpU2lnbiBVbml2ZXJzYWwgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0
  579. # eTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMdhN16xATTbYtcVm/9Y
  580. # WowjI9ZgjpHXkJiDeuZYGTiMxfblZIW0onH77b252s1NALTILXOlx2lxlR85PLJE
  581. # B5zoDvpNSsQh3ylhjzIiYYLFhx9ujHxfFiBRRNFwT1fq4xzjzHnuWNgOwrNFk8As
  582. # 55oXK3sAN3pBM3jhM+LzEBp/hyy+9vX3QuLlv4diiV8AS9/F3eR1RDJBOh5xbmnL
  583. # C3VGCNHK0iuV0M/7uUBrZIxXTfwTEXmE7V5U9jSfCAHzECUGF0ra8R16ZmuYYGak
  584. # 2e/SLoLx8O8J6kTJFWriA24z06yfVQDH9ghqlLlf3OAz8YRg+VsnEbT8FvK7VmqA
  585. # JY0CAwEAAaOBsjCBrzAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjBt
  586. # BggrBgEFBQcBDARhMF+hXaBbMFkwVzBVFglpbWFnZS9naWYwITAfMAcGBSsOAwIa
  587. # BBSP5dMahqyNjmvDz4Bq1EgYLHsZLjAlFiNodHRwOi8vbG9nby52ZXJpc2lnbi5j
  588. # b20vdnNsb2dvLmdpZjAdBgNVHQ4EFgQUtnf6aUhHn1MS1cLqBzJ2B9GXBxkwDQYJ
  589. # KoZIhvcNAQELBQADggEBAEr4+LAD5ixne+SUd2PMbkz5fQ4N3Mi5NblwT2P6JPps
  590. # g4xHnTtj85r5djKVkbF3vKyavrHkMSHGgZVWWg6xwtSxplms8WPLuEwdWZBK75AW
  591. # KB9arhD7gVA4DGzM8T3D9WPjs+MhySQ56f0VZkb0GxHQTXOjfUb5Pe2oX2LU8T/4
  592. # 4HRXKxidgbTEKNqUl6Vw66wdvgcR8NXb3eWM8NUysIPmV+KPv76hqr89HbXUOOrX
  593. # sFw6T2o/j8BmbGOq6dmkFvSB0ZUUDn3NlTTZ0o9wc4F7nH69mGHYRYeYkMXrhjDG
  594. # Nb/w/8NViINL7wWSBnHyuJiTt+zNgmHxOOZPl5gqWo0wggS7MIIDo6ADAgECAhBe
  595. # aloGbfZB2JYM7qNu88tLMA0GCSqGSIb3DQEBCwUAMIGEMQswCQYDVQQGEwJVUzEd
  596. # MBsGA1UEChMUU3ltYW50ZWMgQ29ycG9yYXRpb24xHzAdBgNVBAsTFlN5bWFudGVj
  597. # IFRydXN0IE5ldHdvcmsxNTAzBgNVBAMTLFN5bWFudGVjIENsYXNzIDMgU0hBMjU2
  598. # IENvZGUgU2lnbmluZyBDQSAtIEcyMB4XDTE3MTEyODAwMDAwMFoXDTE4MTEyMDIz
  599. # NTk1OVowbDELMAkGA1UEBhMCVVMxFzAVBgNVBAgMDk5vcnRoIENhcm9saW5hMRQw
  600. # EgYDVQQHDAtNb3JyaXN2aWxsZTEPMA0GA1UECgwGTGVub3ZvMQwwCgYDVQQLDANH
  601. # MDgxDzANBgNVBAMMBkxlbm92bzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
  602. # ggEBAMkbsV4DJ2Kv995qSNCYf/vJ001JkObdtW4dibreW2Y/fvIed9ztjXFnGoTZ
  603. # 6tyJJdanw9+fTK3UNuE0GvaLraq2B2argT08VsOggKOh6nTCeSt50/bkvaLHBxeR
  604. # Qhwc8rO1HeDuJre8+P1RTCzMS5Nkzpb2bTm3kC4D4ZHonST4s5CxHVC7dIo6dqNt
  605. # qzR+FDaTn+Vl2rxcC8oUs7AEEOz5acVriBX3Xah03e8roY0JUGVRvO96tRAZLC6O
  606. # +nubZce3wnsOitXQt8KKxaZOnvyeBlX0IgnJtYr+WRktLyeQtoNoWTimiPD/0PFI
  607. # 5j0Nt8qWaZ4Jj088Wd1Xr+4s4NkCAwEAAaOCAT4wggE6MAkGA1UdEwQCMAAwDgYD
  608. # VR0PAQH/BAQDAgeAMBMGA1UdJQQMMAoGCCsGAQUFBwMDMGEGA1UdIARaMFgwVgYG
  609. # Z4EMAQQBMEwwIwYIKwYBBQUHAgEWF2h0dHBzOi8vZC5zeW1jYi5jb20vY3BzMCUG
  610. # CCsGAQUFBwICMBkMF2h0dHBzOi8vZC5zeW1jYi5jb20vcnBhMB8GA1UdIwQYMBaA
  611. # FNTABiJJ6zlL3ZPiXKG4R3YJcgNYMCsGA1UdHwQkMCIwIKAeoByGGmh0dHA6Ly9y
  612. # Yi5zeW1jYi5jb20vcmIuY3JsMFcGCCsGAQUFBwEBBEswSTAfBggrBgEFBQcwAYYT
  613. # aHR0cDovL3JiLnN5bWNkLmNvbTAmBggrBgEFBQcwAoYaaHR0cDovL3JiLnN5bWNi
  614. # LmNvbS9yYi5jcnQwDQYJKoZIhvcNAQELBQADggEBAAJtYMiLmB2sXEPJnwuYI2Nz
  615. # vm5h9kK8QkMNMWSukmVGuik8DVWCOjRHCvkyc9lPODs7ALNVU9RbMJibZK431H98
  616. # pUp+4yIPNCEodl1m0PuxTTRYWuM1VMNBq+fwxwM6zFecc81coOtVBfUrxv8ZW777
  617. # +1I0Ko+zAtXnrvYES8z6cAbk8R7ueeZMEydAeyZp/30F43T3qDUU8BxMQD/FAx6b
  618. # Rq6ohCjJ2DHnWvMKK3kgSli34iNz2bEheQkZ23S0cwDL1RsEy5Cys6eusTJ9ubGB
  619. # huxBmgvTtogafcNzBSwe6Cfc32FnSz7YqYXJZiz4Jq7Vpme83HeRJVzRrWwjlK8w
  620. # ggVHMIIEL6ADAgECAhB8GzU1SufbdOdBXxFpymuoMA0GCSqGSIb3DQEBCwUAMIG9
  621. # MQswCQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsT
  622. # FlZlcmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAyMDA4IFZlcmlT
  623. # aWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxODA2BgNVBAMTL1Zl
  624. # cmlTaWduIFVuaXZlcnNhbCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4X
  625. # DTE0MDcyMjAwMDAwMFoXDTI0MDcyMTIzNTk1OVowgYQxCzAJBgNVBAYTAlVTMR0w
  626. # GwYDVQQKExRTeW1hbnRlYyBDb3Jwb3JhdGlvbjEfMB0GA1UECxMWU3ltYW50ZWMg
  627. # VHJ1c3QgTmV0d29yazE1MDMGA1UEAxMsU3ltYW50ZWMgQ2xhc3MgMyBTSEEyNTYg
  628. # Q29kZSBTaWduaW5nIENBIC0gRzIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK
  629. # AoIBAQDXlUPU3N9nrjn7UqS2JjEEcOm3jlsqujdpNZWPu8Aw54bYc7vf69F2P4pW
  630. # justS/BXGE6xjaUz0wt1I9VqeSfdo9P3Dodltd6tHPH1NbQiUa8iocFdS5B/wFlO
  631. # q515qQLXHkmxO02H/sJ4q7/vUq6crwjZOeWaUT5pXzAQTnFjbFjh8CAzGw90vlvL
  632. # EuHbjMSAlHK79kWansElC/ujHJ7YpglwcezAR0yPfcPeGc4+7gRyjhfT//CyBTIZ
  633. # TNOwHJ/+pXggQnBBsCaMbwDIOgARQXpBsKeKkQSgmXj0d7TzYCrmbFAEtxRg/w1R
  634. # 9KiLhP4h2lxeffUpeU+wRHRvbXL/AgMBAAGjggF4MIIBdDAuBggrBgEFBQcBAQQi
  635. # MCAwHgYIKwYBBQUHMAGGEmh0dHA6Ly9zLnN5bWNkLmNvbTASBgNVHRMBAf8ECDAG
  636. # AQH/AgEAMGYGA1UdIARfMF0wWwYLYIZIAYb4RQEHFwMwTDAjBggrBgEFBQcCARYX
  637. # aHR0cHM6Ly9kLnN5bWNiLmNvbS9jcHMwJQYIKwYBBQUHAgIwGRoXaHR0cHM6Ly9k
  638. # LnN5bWNiLmNvbS9ycGEwNgYDVR0fBC8wLTAroCmgJ4YlaHR0cDovL3Muc3ltY2Iu
  639. # Y29tL3VuaXZlcnNhbC1yb290LmNybDATBgNVHSUEDDAKBggrBgEFBQcDAzAOBgNV
  640. # HQ8BAf8EBAMCAQYwKQYDVR0RBCIwIKQeMBwxGjAYBgNVBAMTEVN5bWFudGVjUEtJ
  641. # LTEtNzI0MB0GA1UdDgQWBBTUwAYiSes5S92T4lyhuEd2CXIDWDAfBgNVHSMEGDAW
  642. # gBS2d/ppSEefUxLVwuoHMnYH0ZcHGTANBgkqhkiG9w0BAQsFAAOCAQEAf+vKp+qL
  643. # dkLrPo4gVDDjt7nc+kg+FscPRZUQzSeGo2bzAu1x+KrCVZeRcIP5Un5SaTzJ8eCU
  644. # RoAYu6HUpFam8x0AkdWG80iH4MvENGggXrTL+QXtnK9wUye56D5+UaBpcYvcUe2A
  645. # OiUyn0SvbkMo0yF1u5fYi4uM/qkERgSF9xWcSxGNxCwX/tVuf5riVpLxlrOtLfn0
  646. # 39qJmc6yOETA90d7yiW5+ipoM5tQct6on9TNLAs0vYsweEDgjY4nG5BvGr4IFYFd
  647. # 6y/iUedRHsl4KeceZb847wFKAQkkDhbEFHnBQTc00D2RUpSd4WjvCPDiaZxnbpAL
  648. # GpNx1CYCw8BaIzGCBFswggRXAgEBMIGZMIGEMQswCQYDVQQGEwJVUzEdMBsGA1UE
  649. # ChMUU3ltYW50ZWMgQ29ycG9yYXRpb24xHzAdBgNVBAsTFlN5bWFudGVjIFRydXN0
  650. # IE5ldHdvcmsxNTAzBgNVBAMTLFN5bWFudGVjIENsYXNzIDMgU0hBMjU2IENvZGUg
  651. # U2lnbmluZyBDQSAtIEcyAhBealoGbfZB2JYM7qNu88tLMA0GCWCGSAFlAwQCAQUA
  652. # oIGEMBgGCisGAQQBgjcCAQwxCjAIoAKAAKECgAAwGQYJKoZIhvcNAQkDMQwGCisG
  653. # AQQBgjcCAQQwHAYKKwYBBAGCNwIBCzEOMAwGCisGAQQBgjcCARUwLwYJKoZIhvcN
  654. # AQkEMSIEII5CIqS6M7K9pYH8kNNSj+tyS+ulkqKpodTBEfr/vImYMA0GCSqGSIb3
  655. # DQEBAQUABIIBAI1PmmgK0tq8l/ongqEAVGm2OfOkiv3T3IYEzySy5jfK53nggLW2
  656. # vUqDYgX3f3o+xn8AkMMD6ud67ZmUwyC9WJT7rMYky49lQZxgD3puau5TTlAWyeQt
  657. # +g7qs562J2ZqcdTPCgZk5SDatKGgvEG7VDIr4Lxbz80qlBfuSOzHT4yRRCfzPZIm
  658. # RjYSH4kiEmHP2+qjg67zvJsBhIClBaO6+fpgM1RSth97MXYsWg8mZSE4ey3GRugZ
  659. # +tU0tKnjFyPcIyhxcOc615X2U7ySbC2Vn4JJV7Ulh1dOLsSJge/oZmiup4RQGnTg
  660. # ghDr4Qa5n/35Wlo5NT5TM3JbFUWhuCo7VmGhggILMIICBwYJKoZIhvcNAQkGMYIB
  661. # +DCCAfQCAQEwcjBeMQswCQYDVQQGEwJVUzEdMBsGA1UEChMUU3ltYW50ZWMgQ29y
  662. # cG9yYXRpb24xMDAuBgNVBAMTJ1N5bWFudGVjIFRpbWUgU3RhbXBpbmcgU2Vydmlj
  663. # ZXMgQ0EgLSBHMgIQDs/0OMj+vzVuBNhqmBsaUDAJBgUrDgMCGgUAoF0wGAYJKoZI
  664. # hvcNAQkDMQsGCSqGSIb3DQEHATAcBgkqhkiG9w0BCQUxDxcNMTgwNDI0MDk1NDQ0
  665. # WjAjBgkqhkiG9w0BCQQxFgQUr/avqW3a5suHjTcIAVNGYDW8kCgwDQYJKoZIhvcN
  666. # AQEBBQAEggEALQdQaiV4FuobMdGtZTqhZ0gVE1ggQE6Vd3ruSHWLfSqu0dlyA9LA
  667. # Rg4XGui1lCA/sLCgyquWG7oMzW2PwyWDxt6Cw/3mHyUCBnRU6GxPl/MdQP38pM3D
  668. # xfDrc93YLar+dmCWJmSdbXrUJRphP3KR+Blp6AN2sKucKTqgqQk2OoWKuurVgFKE
  669. # /SMJKbH9KBdy3vEAyGwS87G6DYzW/11kNblL9e0m7RMchS/jO+sjix5lPAZyu2xp
  670. # G1+BQQW6MsgvhfZCwV3mV6QP/KPorJvPBrGDZf1PLg4tLBY20faG4jomBORj4oAz
  671. # 3n1CWQnpkrIR5CnvJr3lhqSX4BY1T+Enbw==
  672. # SIG # End signature block
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement