diff --git a/.github/workflows/c-cpp.yml b/.github/workflows/c-cpp.yml new file mode 100644 index 0000000..22bcb3e --- /dev/null +++ b/.github/workflows/c-cpp.yml @@ -0,0 +1,179 @@ +name: Parallax Windows Build + +on: + workflow_dispatch: + push: + branches: [ main ] + tags: + - 'v*.*.*' # 匹配版本标签如 v1.0.0, v2.1.3 等 + pull_request: + branches: [ main ] + +jobs: + build: + runs-on: windows-latest + + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Setup Visual Studio environment + uses: microsoft/setup-msbuild@v1.1 + + - name: Setup CMake + uses: lukka/get-cmake@latest + + - name: Create build directory + run: | + cd src + mkdir build + cd build + + - name: Configure CMake + run: | + cd src/build + cmake ../parallax -A x64 -DCMAKE_BUILD_TYPE=Release + + - name: Build project + run: | + cd src/build + cmake --build . --config Release + + - name: Verify build output + run: | + if (Test-Path "src\build\x64\Release\parallax.exe") { + Write-Host "Build successful: parallax.exe found" + Get-Item "src\build\x64\Release\parallax.exe" | Select-Object Name, Length, LastWriteTime + } else { + Write-Host "Build failed: parallax.exe not found" + exit 1 + } + + - name: Prepare installer files + run: | + # Create installer files directory + if (Test-Path "installer\FilesToInstall") { + Remove-Item "installer\FilesToInstall" -Recurse -Force + } + New-Item -ItemType Directory -Path "installer\FilesToInstall" -Force + + # Copy executable to installer directory + Copy-Item "src\build\x64\Release\parallax.exe" "installer\FilesToInstall\" + + Write-Host "Files prepared for installer:" + Get-ChildItem "installer\FilesToInstall" | Select-Object Name, Length + + - name: Build installer + run: | + cd installer + cmd /c "build-nim-nozip.bat" + shell: cmd + + - name: Verify installer output + run: | + $installerPath = "installer\Output\Gradient_Parallax_PC_Setup_v1.0.0.0.exe" + if (Test-Path $installerPath) { + Write-Host "Installer created successfully" + Get-Item $installerPath | Select-Object Name, Length, LastWriteTime + } else { + Write-Host "Installer creation failed" + Write-Host "Available files in installer\Output:" + if (Test-Path "installer\Output") { + Get-ChildItem "installer\Output" | Select-Object Name, Length + } + exit 1 + } + + - name: Collect PDB files + run: | + # Create PDB directory + New-Item -ItemType Directory -Path "pdbs" -Force + + # Find and copy all PDB files from build directory + Write-Host "Searching for PDB files..." + $pdbFiles = Get-ChildItem -Path "src\build" -Filter "*.pdb" -Recurse + + if ($pdbFiles.Count -gt 0) { + Write-Host "Found PDB files:" + foreach ($pdb in $pdbFiles) { + Write-Host "- $($pdb.FullName)" + Copy-Item $pdb.FullName "pdbs\" + } + } else { + Write-Host "No PDB files found" + } + + Write-Host "PDB files collected:" + Get-ChildItem "pdbs" | Select-Object Name, Length + + - name: Create release package + run: | + # Get current date for versioning + $date = Get-Date -Format "yyyyMMdd" + $time = Get-Date -Format "HHmm" + $version = "1.0.0" + $datetime = "${date}_${time}" + + # Create package directory + New-Item -ItemType Directory -Path "release" -Force + + # Copy executable + Copy-Item "src\build\x64\Release\parallax.exe" "release\" + + # Create program tar.gz package + $packageName = "Parallax_Win-v${version}_${datetime}.tar.gz" + tar -czf $packageName -C release . + + # Create PDB tar.gz package + $pdbPackageName = "Parallax_Pdb-v${version}_${datetime}.tar.gz" + if (Test-Path "pdbs" -PathType Container) { + $pdbCount = (Get-ChildItem "pdbs").Count + if ($pdbCount -gt 0) { + tar -czf $pdbPackageName -C pdbs . + Write-Host "PDB package created: $pdbPackageName" + } else { + Write-Host "No PDB files to package" + } + } + + # Rename installer with timestamp + $installerName = "Parallax_Win_Setup_v${version}_${datetime}.exe" + Copy-Item "installer\Output\Gradient_Parallax_PC_Setup_v1.0.0.0.exe" $installerName + + Write-Host "Release packages created:" + Write-Host "- Program package: $packageName" + Write-Host "- PDB package: $pdbPackageName" + Write-Host "- Installer: $installerName" + + - name: Upload program package artifact + uses: actions/upload-artifact@v4 + with: + name: parallax-win-package + path: Parallax_Win-v*.tar.gz + + - name: Upload PDB package artifact + uses: actions/upload-artifact@v4 + with: + name: parallax-win-pdbs + path: Parallax_Pdb-v*.tar.gz + + - name: Upload installer artifact + uses: actions/upload-artifact@v4 + with: + name: parallax-win-installer + path: Parallax_Win_Setup_v*.exe + + - name: Create GitHub release + if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/v') + uses: softprops/action-gh-release@v1 + with: + files: | + Parallax_Win-v*.tar.gz + Parallax_Pdb-v*.tar.gz + Parallax_Win_Setup_v*.exe + name: Parallax Windows Release ${{ github.ref_name }} + tag_name: ${{ github.ref_name }} + draft: false + prerelease: false + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..3c999f9 --- /dev/null +++ b/.gitignore @@ -0,0 +1,90 @@ +# Build directories and artifacts +/src/build/ +**/build/ +**/Debug/ +**/Release/ +**/x64/ +**/x86/ +**/.vs/ + +# Visual Studio files +*.vcxproj.user +*.vcxproj.filters +*.sln.docstates +*.suo +*.user +*.userosscache +*.sln.docstates.json + +# CMake files +CMakeCache.txt +CMakeFiles/ +cmake_install.cmake +Makefile +*.cmake +!CMakeLists.txt +!src/parallax/common_make/*.cmake + +# Compiled binaries +*.exe +*.dll +*.lib +*.pdb +*.ilk +*.obj +*.iobj +*.ipdb +*.exp + +# Exception: Keep NSIS installer tools +!installer/NSIS/**/*.exe +!installer/NSIS/**/*.dll +!installer/*.exe +!installer/*.dll + +# Log files +*.log +parallax.log + +# Configuration files (keep template) +parallax_config.txt + +# Installer output +/installer/Output/ +/installer/FilesToInstall/ + +# Temporary files +*.tmp +*.temp +*~ +*.swp +*.swo + +# OS generated files +.DS_Store +.DS_Store? +._* +.Spotlight-V100 +.Trashes +ehthumbs.db +Thumbs.db + +# IDE files +.vscode/ +.idea/ +*.code-workspace + +# Package managers +node_modules/ +.npm +.yarn/ + +# Backup files +*.bak +*.backup +*~ + +# Test files +test_* +*_test +*.test \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..9f691d6 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,63 @@ +# Changelog + +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + +## [Unreleased] + +### Added +- Initial release of Parallax Windows CLI +- Comprehensive environment checking and installation +- WSL2 integration with real-time output +- CUDA toolkit detection and validation +- Modern C++ architecture with CRTP patterns +- Multi-language support (English/Chinese) + +### Features +- `parallax check` - Environment requirements checking +- `parallax install` - Automated component installation +- `parallax config` - Configuration management +- `parallax run` - Direct WSL inference server execution +- `parallax join` - Distributed cluster node joining +- `parallax cmd` - WSL command pass-through + +### System Support +- Windows 10 Version 2004+ and Windows 11 +- NVIDIA GPU support (RTX 3060 Ti+) +- WSL2 and Ubuntu integration +- CUDA Toolkit 12.8/12.9 compatibility + +## [1.0.0] - 2025-10-18 + +### Added +- Initial public release +- Complete development environment setup automation +- Professional Windows installer with NSIS +- Comprehensive documentation and examples +- Apache 2.0 license for open source distribution + +### Architecture +- Modular component-based design +- Template method pattern for commands +- CRTP for compile-time polymorphism +- Separation of concerns across modules + +### Documentation +- English and Chinese README files +- Contributing guidelines +- Security policy +- GitHub issue and PR templates + +--- + +## Release Notes Format + +Each release should include: +- **Added**: New features +- **Changed**: Changes in existing functionality +- **Deprecated**: Soon-to-be removed features +- **Removed**: Removed features +- **Fixed**: Bug fixes +- **Security**: Security improvements diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..bb06140 --- /dev/null +++ b/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2025 GradientHQ + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/README.md b/README.md index 65f50a0..c77fb43 100644 --- a/README.md +++ b/README.md @@ -1 +1,443 @@ -# parallax_win_cli \ No newline at end of file +# Parallax Windows CLI + +[中文版](README_zh.md) | English + +Parallax Windows CLI is a development environment configuration tool for Windows platform, providing automatic detection and installation of WSL2, CUDA toolkit, development tools, and more. This project adopts modern C++ architecture and implements one-click deployment through NSIS-built Windows installer, supporting WSL2 + Ubuntu development environment configuration. + +## Features + +### 1. Environment Management +- **Automatic Check**: Comprehensive checking of Windows environment, WSL2, NVIDIA drivers, and other components +- **One-Click Installation**: Automatic installation and configuration of WSL2, CUDA toolkit, development tools, etc. +- **Smart Detection**: Support for NVIDIA GPU detection and CUDA toolkit checking +- **System Requirements**: Minimum support for RTX 3060 Ti, recommended RTX 4090 or higher configuration + +### 2. Automated Environment Configuration +- **Smart Detection**: Automatic detection of system environment and hardware configuration +- **One-Click Installation**: Automatic installation of WSL2, CUDA toolkit, development tools, etc. +- **GPU Support**: Complete NVIDIA GPU detection and driver verification +- **Real-time Feedback**: Support for real-time viewing of installation progress and status + +### 3. WSL2 Integration +- **Command Execution**: Complete WSL2 command execution support +- **Real-time Output**: Real-time stdout/stderr output for WSL command execution +- **Interrupt Support**: Support for Ctrl+C interruption of running WSL commands +- **Proxy Synchronization**: Automatic synchronization of system proxy configuration to WSL environment + +### 4. Configuration Management +- **Flexible Configuration**: Support for multiple configurations including proxy, WSL distribution, installation sources, etc. +- **Dynamic Updates**: Configuration changes automatically synchronized to related components +- **Reset Function**: One-click reset of all configurations to default state +- **Secure Storage**: Secure storage and access control for configuration files + +### 5. Modern Architecture Design +- **Template Method Pattern**: Unified command execution flow and error handling +- **CRTP Technology**: Compile-time polymorphism with zero runtime overhead +- **Command Pattern**: Extensible command registration and execution mechanism +- **Strategy Pattern**: Flexible environment requirements and checking strategies + +## Architecture Design + +Parallax Windows CLI adopts modern C++ design patterns and mainly contains the following core components: + +### 1. Command Line Interface +- **Location**: `src/parallax/cli/` +- **Functions**: + - Unified command parsing and execution framework + - Command base class based on template method pattern + - Support for standardized parameter validation, environment preparation, and execution flow +- **Supported Commands**: check, install, config, run, join, cmd + +### 2. Environment Installer +- **Location**: `src/parallax/environment/` +- **Architecture Features**: + - Modular design with separation of concerns + - Composite pattern managing multiple specialized components + - Unified checking and installation interface +- **Core Components**: + - `base_component`: Basic interface and execution context + - `command_executor`: Unified command executor + - `system_checker`: System checker (OS version, NVIDIA GPU, NVIDIA driver, BIOS virtualization) + - `windows_feature_manager`: Windows feature manager (WSL2, virtual machine platform, WSL package, WSL2 kernel, Ubuntu) + - `software_installer`: Software installer (CUDA toolkit check, Rust Cargo, Ninja build tool, pip upgrade, Parallax project) +- **State Management**: Support for success, failure, skip, and warning states + +### 3. Configuration Manager +- **Location**: `src/parallax/config/` +- **Functions**: + - Unified configuration file management + - Support for dynamic configuration loading and updating + - Configuration validation and default value handling + +### 4. Utility Library +- **Location**: `src/parallax/utils/` +- **Functions**: + - `utils`: WSL command building, string conversion, GPU detection, file operations + - `process`: Process management and real-time output handling, supporting callbacks and interruption + - `wsl_process`: WSL-specific process management, supporting real-time output and encoding conversion + +### 5. Logging System +- **Location**: `src/parallax/tinylog/` +- **Functions**: + - High-performance asynchronous logging system + - Support for log rotation and size limits + - Multi-level log output and filtering + +## System Requirements + +### System Requirements +- **Operating System**: Windows 10 Version 2004 (Build 19041) or Windows 11 +- **Architecture**: x86_64 +- **Permissions**: Administrator privileges (for WSL2 and Docker installation) +- **Memory**: Minimum 16GB RAM, recommended 32GB or higher +- **Storage**: Minimum 50GB available space + +### Hardware Requirements +- **GPU**: NVIDIA RTX 3060 Ti or higher configuration +- **VRAM**: Minimum 8GB VRAM, recommended 24GB or higher +- **CPU**: Intel i5-8400 or AMD Ryzen 5 2600 and above (recommended) +- **Network**: Stable internet connection (for downloading images and models) + +### Software Dependencies +- **WSL2**: Windows Subsystem for Linux 2 +- **Ubuntu**: Ubuntu distribution on WSL2 (default Ubuntu-24.04) +- **NVIDIA Driver**: Latest driver supporting CUDA 12.x +- **CUDA Toolkit**: CUDA Toolkit 12.8 or 12.9 version (needs to be pre-installed) +- **Rust Cargo**: Rust package manager and build tool +- **Ninja**: Fast build tool + +## Quick Start + +### 1. Download and Install +Download the latest installer from the Release page: +``` +Gradient_Parallax_PC_Setup_v1.0.0.0.exe +``` + +### 2. Environment Check +```cmd +parallax check +``` + +### 3. Environment Installation (if needed) +```cmd +parallax install +``` + +### 4. Configure Proxy (optional) +```cmd +parallax config proxy_url "http://127.0.0.1:7890" +``` + +### 5. Verify Installation +```cmd +# Verify all environment components +parallax check + +# Start Parallax inference server (optional) +parallax run +``` + +## Command Reference + +### `parallax check` +Check environment requirements and component status +```cmd +parallax check [--help|-h] +``` + +### `parallax install` +Install required environment components +```cmd +parallax install [--help|-h] +``` + +### `parallax config` +Configuration management command +```cmd +# View all configurations +parallax config list + +# Set configuration item +parallax config + +# Delete configuration item +parallax config "" + +# Reset all configurations +parallax config reset + +# View help +parallax config --help +``` + +### `parallax run` +Run Parallax inference server directly in WSL +```cmd +parallax run [--help|-h] +``` + +### `parallax join` +Join distributed inference cluster as a node +```cmd +parallax join [options] +``` + +### `parallax cmd` +Execute commands in WSL or Python virtual environment +```cmd +parallax cmd [--venv] [args...] +``` + +**Command Descriptions**: +- `run`: Start Parallax inference server directly in WSL, default configuration is Qwen/Qwen3-0.6B model, listening on localhost:3001 +- `join`: Join distributed inference cluster as a worker node (open a new terminal with administrator privileges and input `parallax join`) +- `cmd`: Pass-through commands to WSL environment, supports `--venv` option to run in parallax project's Python virtual environment + +**Main Configuration Items**: +- `proxy_url`: Network proxy address (supports http, socks5, socks5h) +- `wsl_linux_distro`: WSL Linux distribution (default Ubuntu-24.04) +- `wsl_installer_url`: WSL installer download URL +- `wsl_kernel_url`: WSL2 kernel update package download URL +- `parallax_git_repo_url`: Parallax project Git repository URL (default: https://github.com/GradientHQ/parallax.git) + +## Build Instructions + +### Development Environment +- **Visual Studio 2022**: With C++ desktop development workload +- **CMake 3.20+**: For building C++ projects +- **NSIS 3.08+**: For creating Windows installer + +### Quick Build +Execute in project root directory: +```cmd +cd src +mkdir build && cd build +cmake ../parallax -A x64 +cmake --build . --config Release +``` + +Generated executable is located at: `src/build/x64/Release/parallax.exe` + +### Create Installer +```cmd +# 1. Create installation file directory +mkdir installer\FilesToInstall + +# 2. Copy generated executable +copy src\build\x64\Release\parallax.exe installer\FilesToInstall\ + +# 3. Build installer +call installer\build-nim-nozip.bat +``` + +## Configuration + +Parallax is configured through configuration files, main configuration items include: + +```conf +# WSL related configuration +wsl_installer_url=https://github.com/microsoft/WSL/releases/download/2.4.13/wsl.2.4.13.0.x64.msi +wsl_kernel_url=https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi +wsl_linux_distro=Ubuntu-24.04 + +# Parallax project configuration +parallax_git_repo_url=https://github.com/GradientHQ/parallax.git + +# Network proxy configuration (optional) +proxy_url=http://127.0.0.1:7890 +``` + +## Troubleshooting + +### Common Issues + +1. **Environment Check Failed** + - Ensure running commands with administrator privileges + - Check if Windows version meets requirements + - Verify NVIDIA GPU and driver installation + +2. **WSL2 Installation Failed** + - Enable Windows features: Virtual Machine Platform and WSL + - Check if virtualization is enabled in BIOS + - Ensure system is updated to the latest version + +3. **CUDA Toolkit Check Failed** + - Check if NVIDIA driver is correctly installed + - Confirm CUDA Toolkit is correctly installed + - Verify CUDA version meets requirements (12.8 or 12.9) + +4. **Parallax Project Installation Failed** + - Check Git repository access permissions + - Verify proxy configuration is correct + - Ensure sufficient storage space in WSL2 + +5. **Network Connection Issues** + - Configure correct proxy settings + - Check firewall and network policies + - Verify software package repository access permissions + +### Log Viewing + +- **Main Program Log**: `parallax.log` (Program running directory: C:\Program Files (x86)\Gradient Parallax\parallax.log) +- **Detailed Debugging**: View detailed output of command execution + +### Diagnostic Commands + +```cmd +# Check environment status (recommended) +parallax check + +# View detailed configuration +parallax config list + +# Start inference server test +parallax run + +# Execute commands in WSL +parallax cmd "python --version" + +# Manual verification of specific components (optional) +wsl --list --verbose # WSL status +nvidia-smi # GPU status +``` + +## Technical Features + +### Real-time Output Support +- All long-running commands support real-time output +- Support for Ctrl+C interruption +- Automatic handling of output encoding conversion + +### Automatic Proxy Configuration Synchronization +- Automatic detection of proxy configuration changes +- WSL network environment adaptation + +### Smart GPU Detection +- Automatic detection of NVIDIA GPU models +- Verification of GPU driver and CUDA compatibility +- Support for mainstream NVIDIA GPU architectures + +### Error Handling +- Comprehensive environment checking mechanism +- Detailed error messages and suggestions +- Graceful failure recovery handling + +## Development Guide + +### Adding New Commands + +1. Create new command class in `src/parallax/cli/commands/` directory +2. Inherit appropriate base class (BaseCommand, WSLCommand, AdminCommand) +3. Implement required virtual functions +4. Register new command in `command_parser.cpp` + +```cpp +// Example: Adding new check command +class NewCheckCommand : public WSLCommand { +public: + std::string GetName() const override { return "newcheck"; } + std::string GetDescription() const override { + return "New check functionality"; + } + + CommandResult ExecuteImpl(const CommandContext& context) { + // Implement specific logic + return CommandResult::Success; + } +}; +``` + +### Extending Environment Checks + +1. Choose appropriate component class based on functionality type (SystemChecker, WindowsFeatureManager, SoftwareInstaller) +2. Inherit `BaseEnvironmentComponent` and implement `IEnvironmentComponent` interface +3. Register new component in main `EnvironmentInstaller` +4. Update related error handling and user prompts + +```cpp +// Example: Adding new system check component +class NewSystemChecker : public BaseEnvironmentComponent { +public: + explicit NewSystemChecker(std::shared_ptr context); + + ComponentResult Check() override; + ComponentResult Install() override; + EnvironmentComponent GetComponentType() const override; + std::string GetComponentName() const override; +}; +``` + +### Adding Configuration Items + +1. Define new configuration keys in `config_manager.h` +2. Add default values and validation logic in `config_manager.cpp` +3. Update help information for configuration commands + +## Directory Structure + +``` +parallax_win/ +├── src/ +│ └── parallax/ +│ ├── cli/ # Command line interface +│ │ ├── commands/ # Specific command implementations +│ │ │ ├── base_command.h +│ │ │ ├── check_command.cpp/.h +│ │ │ ├── install_command.cpp/.h +│ │ │ ├── config_command.cpp/.h +│ │ │ ├── cmd_command.cpp/.h +│ │ │ └── model_commands.cpp/.h # run and join commands +│ │ ├── command_parser.h # Command parser +│ │ └── command_parser.cpp +│ ├── environment/ # Environment installer (modularized after refactoring) +│ │ ├── environment_installer.h/.cpp # Main controller +│ │ ├── base_component.h/.cpp # Basic interface and context +│ │ ├── command_executor.h/.cpp # Command executor +│ │ ├── system_checker.h/.cpp # System checker +│ │ ├── windows_feature_manager.h/.cpp # Windows feature manager +│ │ ├── windows_feature_manager2.cpp # Windows feature manager (continued) +│ │ ├── software_installer.h/.cpp # Software installer +│ │ └── software_installer2.cpp # Software installer (continued) +│ ├── config/ # Configuration management +│ │ ├── config_manager.h +│ │ └── config_manager.cpp +│ ├── utils/ # Utility library +│ │ ├── utils.h/.cpp # General utility functions +│ │ ├── process.h/.cpp # Process management +│ │ └── wsl_process.h/.cpp # WSL process management +│ ├── tinylog/ # Logging system +│ │ ├── tinylog.h +│ │ └── tinylog.cpp +│ ├── main.cpp # Program entry point +│ └── CMakeLists.txt # Build configuration +├── installer/ # NSIS installer +│ ├── SetupScripts/ +│ └── Output/ +├── parallax_config.txt # Default configuration +└── README.md # This document +``` + +## License + +Please refer to the LICENSE file for license information. + +## Contributing + +1. Fork this project +2. Create a feature branch (`git checkout -b feature/AmazingFeature`) +3. Commit your changes (`git commit -m 'Add some AmazingFeature'`) +4. Push to the branch (`git push origin feature/AmazingFeature`) +5. Create a Pull Request + +## Contact + +If you have any questions or suggestions, please contact us through: + +- Create an Issue to report problems +- Submit a Pull Request to contribute code +- Contact the development team for support + +--- + +**Note**: Parallax is a high-performance distributed inference framework optimized for NVIDIA GPUs. Please ensure your hardware configuration meets the minimum requirements and that relevant drivers are correctly installed before use. diff --git a/README_zh.md b/README_zh.md new file mode 100644 index 0000000..538fd82 --- /dev/null +++ b/README_zh.md @@ -0,0 +1,446 @@ +# Parallax Windows CLI + +中文版 | [English](README.md) + +Parallax Windows CLI 是一个用于 Windows 平台的开发环境配置工具,提供 WSL2、CUDA 工具包、开发工具等的自动检测和安装。该项目采用现代 C++ 架构,通过 NSIS 制作的 Windows 安装包实现一键部署,支持 WSL2 + Ubuntu 的开发环境配置。 + +## 功能特性 + +### 1. 环境管理 +- **自动检查**: 全面检查 Windows 环境、WSL2、NVIDIA 驱动等组件 +- **一键安装**: 自动安装和配置 WSL2、CUDA工具包、开发工具等 +- **智能检测**: 支持 NVIDIA GPU 检测和 CUDA 工具包检查 +- **系统要求**: 最低支持 RTX 3060 Ti,推荐 RTX 4090 或更高配置 + +### 2. 环境自动配置 +- **智能检测**: 自动检测系统环境和硬件配置 +- **一键安装**: 自动安装WSL2、CUDA工具包、开发工具等 +- **GPU 支持**: 完整的 NVIDIA GPU 检测和驱动验证 +- **实时反馈**: 支持实时查看安装进度和状态 + +### 3. WSL2 集成 +- **命令执行**: 完整的 WSL2 命令执行支持 +- **实时输出**: WSL 命令执行的实时 stdout/stderr 输出 +- **中断支持**: 支持 Ctrl+C 中断正在运行的 WSL 命令 +- **代理同步**: 自动同步系统代理配置到 WSL 环境 + +### 4. 配置管理 +- **灵活配置**: 支持代理、WSL 发行版、安装源等多种配置 +- **动态更新**: 配置变更自动同步到相关组件 +- **重置功能**: 一键重置所有配置到默认状态 +- **安全存储**: 配置文件安全存储和访问控制 + +### 5. 现代架构设计 +- **模板方法模式**: 统一的命令执行流程和错误处理 +- **CRTP 技术**: 编译时多态,零运行时开销 +- **命令模式**: 可扩展的命令注册和执行机制 +- **策略模式**: 灵活的环境要求和检查策略 + +## 架构设计 + +Parallax Windows CLI 采用现代 C++ 设计模式,主要包含以下核心组件: + +### 1. 命令行接口 +- **位置**: `src/parallax/cli/` +- **功能**: + - 统一的命令解析和执行框架 + - 基于模板方法模式的命令基类 + - 支持参数验证、环境准备、执行流程的标准化 +- **支持命令**: check、install、config、run、join、cmd + +### 2. 环境安装器 +- **位置**: `src/parallax/environment/` +- **架构特点**: + - 采用模块化设计,职责分离 + - 组合模式管理多个专门组件 + - 提供统一的检查和安装接口 +- **核心组件**: + - `base_component`: 基础接口和执行上下文 + - `command_executor`: 统一的命令执行器 + - `system_checker`: 系统检查器(OS版本、NVIDIA GPU、NVIDIA驱动、BIOS虚拟化) + - `windows_feature_manager`: Windows功能管理器(WSL2、虚拟机平台、WSL包、WSL2内核、Ubuntu) + - `software_installer`: 软件安装器(CUDA工具包检查、Rust Cargo、Ninja构建工具、pip升级、Parallax项目) +- **状态管理**: 支持成功、失败、跳过、警告四种状态 + +### 3. 配置管理器 +- **位置**: `src/parallax/config/` +- **功能**: + - 统一的配置文件管理 + - 支持动态配置加载和更新 + - 配置验证和默认值处理 + +### 4. 工具库 +- **位置**: `src/parallax/utils/` +- **功能**: + - `utils`: WSL命令构建、字符串转换、GPU检测、文件操作 + - `process`: 进程管理和实时输出处理,支持回调和中断 + - `wsl_process`: WSL专用进程管理,支持实时输出和编码转换 + +### 5. 日志系统 +- **位置**: `src/parallax/tinylog/` +- **功能**: + - 高性能的异步日志系统 + - 支持日志轮转和大小限制 + - 多级别日志输出和过滤 + +## 环境要求 + +### 系统要求 +- **操作系统**: Windows 10 Version 2004 (Build 19041) 或 Windows 11 +- **架构**: x86_64 +- **权限**: 管理员权限(用于 WSL2 和 Docker 安装) +- **内存**: 最低 16GB RAM,推荐 32GB 或更高 +- **存储**: 最低 50GB 可用空间 + +### 硬件要求 +- **GPU**: NVIDIA RTX 3060 Ti 或更高配置 +- **显存**: 最低 8GB VRAM,推荐 24GB 或更高 +- **CPU**: Intel i5-8400 或 AMD Ryzen 5 2600 及以上(建议) +- **网络**: 稳定的互联网连接(用于下载镜像和模型) + +### 软件依赖 +- **WSL2**: Windows Subsystem for Linux 2 +- **Ubuntu**: WSL2上的Ubuntu发行版(默认Ubuntu-24.04) +- **NVIDIA 驱动**: 支持 CUDA 12.x 的最新驱动 +- **CUDA 工具包**: CUDA Toolkit 12.8或12.9版本(需要预先安装) +- **Rust Cargo**: Rust包管理器和构建工具 +- **Ninja**: 快速构建工具 + +## 快速开始 + +### 1. 下载安装 +从 Release 页面下载最新的安装包: +``` +Gradient_Parallax_PC_Setup_v1.0.0.0.exe +``` + +### 2. 环境检查 +```cmd +parallax check +``` + +### 3. 环境安装(如需要) +```cmd +parallax install +``` + +### 4. 配置代理(可选) +```cmd +parallax config proxy_url "http://127.0.0.1:7890" +``` + +### 5. 验证安装 +```cmd +# 验证所有环境组件 +parallax check + +# 启动Parallax推理服务器(可选) +parallax run +``` + +## 命令参考 + +### `parallax check` +检查环境要求和组件状态 +```cmd +parallax check [--help|-h] +``` + +### `parallax install` +安装必需的环境组件 +```cmd +parallax install [--help|-h] +``` + +### `parallax config` +配置管理命令 +```cmd +# 查看所有配置 +parallax config list + +# 设置配置项 +parallax config + +# 删除配置项 +parallax config "" + +# 重置所有配置 +parallax config reset + +# 查看帮助 +parallax config --help +``` + +### `parallax run` +直接在WSL中运行Parallax推理服务器 +```cmd +parallax run [--help|-h] +``` + +### `parallax join` +加入分布式推理集群作为节点 +```cmd +parallax join [options] +``` + +### `parallax cmd` +在WSL或Python虚拟环境中执行命令 +```cmd +parallax cmd [--venv] [args...] +``` + +**命令说明**: +- `run`: 直接在WSL中启动Parallax推理服务器,默认配置为Qwen/Qwen3-0.6B模型,监听localhost:3001 +- `join`: 加入分布式推理集群作为工作节点(管理员权限新开一个终端输入parallax join) +- `cmd`: 透传命令到WSL环境执行,支持`--venv`选项在parallax project的Python虚拟环境中运行 + +**主要配置项**: +- `proxy_url`: 网络代理地址(支持 http、socks5、socks5h) +- `wsl_linux_distro`: WSL Linux 发行版(默认 Ubuntu-24.04) +- `wsl_installer_url`: WSL安装包下载地址 +- `wsl_kernel_url`: WSL2内核更新包下载地址 +- `parallax_git_repo_url`: Parallax项目Git仓库地址(默认:https://github.com/GradientHQ/parallax.git) + + +## 构建说明 + +### 开发环境 +- **Visual Studio 2022**: 带 C++ 桌面开发工作负载 +- **CMake 3.20+**: 用于构建 C++ 项目 +- **NSIS 3.08+**: 用于创建 Windows 安装包 + +### 快速构建 +在项目根目录执行: +```cmd +cd src +mkdir build && cd build +cmake ../parallax -A x64 +cmake --build . --config Release +``` + +生成的可执行文件位于:`src/build/x64/Release/parallax.exe` + +### 创建安装包 +```cmd +# 1. 创建安装文件目录 +mkdir installer\FilesToInstall + +# 2. 复制生成的可执行文件 +copy src\build\x64\Release\parallax.exe installer\FilesToInstall\ + +# 3. 构建安装包 +call installer\build-nim-nozip.bat +``` + +## 配置说明 + +Parallax 通过配置文件进行配置,主要配置项包括: + +```conf +# WSL 相关配置 +wsl_installer_url=https://github.com/microsoft/WSL/releases/download/2.4.13/wsl.2.4.13.0.x64.msi +wsl_kernel_url=https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi +wsl_linux_distro=Ubuntu-24.04 + +# Parallax 项目配置 +parallax_git_repo_url=https://github.com/GradientHQ/parallax.git + +# 网络代理配置(可选) +proxy_url=http://127.0.0.1:7890 +``` + +## 故障排除 + +### 常见问题 + +1. **环境检查失败** + - 确保以管理员权限运行命令 + - 检查 Windows 版本是否满足要求 + - 验证 NVIDIA GPU 和驱动安装 + +2. **WSL2 安装失败** + - 启用 Windows 功能:虚拟机平台和 WSL + - 检查 BIOS 中是否启用虚拟化 + - 确保系统更新到最新版本 + +3. **CUDA 工具包检查失败** + - 检查 NVIDIA 驱动是否正确安装 + - 确认 CUDA Toolkit 是否已正确安装 + - 验证 CUDA 版本是否符合要求(12.8或12.9) + +4. **Parallax 项目安装失败** + - 检查 Git 仓库访问权限 + - 验证代理配置是否正确 + - 确保 WSL2 中有足够的存储空间 + +5. **网络连接问题** + - 配置正确的代理设置 + - 检查防火墙和网络策略 + - 验证软件包仓库访问权限 + +### 日志查看 + +- **主程序日志**: `parallax.log`(程序运行目录: C:\Program Files (x86)\Gradient Parallax\parallax.log) +- **详细调试**: 查看命令执行的详细输出 + +### 诊断命令 + +```cmd +# 检查环境状态(推荐) +parallax check + +# 查看详细配置 +parallax config list + +# 启动推理服务器测试 +parallax run + +# 在WSL中执行命令 +parallax cmd "python --version" + +# 如需手动验证特定组件(可选) +wsl --list --verbose # WSL状态 +nvidia-smi # GPU状态 +``` + + +## 技术特性 + +### 实时输出支持 +- 所有长时间运行的命令都支持实时输出 +- 支持 Ctrl+C 中断操作 +- 自动处理输出编码转换 + +### 代理配置自动同步 +- 自动检测代理配置变更 +- WSL 网络环境适配 + +### GPU 智能检测 +- 自动检测 NVIDIA GPU 型号 +- 验证 GPU 驱动和 CUDA 兼容性 +- 支持主流 NVIDIA GPU 架构 + +### 错误处理 +- 完善的环境检查机制 +- 详细的错误信息和建议 +- 优雅的失败恢复处理 + +## 开发指南 + +### 添加新命令 + +1. 在 `src/parallax/cli/commands/` 目录下创建新的命令类 +2. 继承适当的基类(BaseCommand、WSLCommand、AdminCommand) +3. 实现必需的虚函数 +4. 在 `command_parser.cpp` 中注册新命令 + +```cpp +// 示例:添加新的检查命令 +class NewCheckCommand : public WSLCommand { +public: + std::string GetName() const override { return "newcheck"; } + std::string GetDescription() const override { + return "New check functionality"; + } + + CommandResult ExecuteImpl(const CommandContext& context) { + // 实现具体逻辑 + return CommandResult::Success; + } +}; +``` + +### 扩展环境检查 + +1. 根据功能类型选择合适的组件类(SystemChecker、WindowsFeatureManager、SoftwareInstaller) +2. 继承 `BaseEnvironmentComponent` 并实现 `IEnvironmentComponent` 接口 +3. 在主 `EnvironmentInstaller` 中注册新组件 +4. 更新相关的错误处理和用户提示 + +```cpp +// 示例:添加新的系统检查组件 +class NewSystemChecker : public BaseEnvironmentComponent { +public: + explicit NewSystemChecker(std::shared_ptr context); + + ComponentResult Check() override; + ComponentResult Install() override; + EnvironmentComponent GetComponentType() const override; + std::string GetComponentName() const override; +}; +``` + +### 添加配置项 + +1. 在 `config_manager.h` 中定义新的配置键 +2. 在 `config_manager.cpp` 中添加默认值和验证逻辑 +3. 更新配置命令的帮助信息 + +## 目录结构 + +``` +parallax_win/ +├── src/ +│ └── parallax/ +│ ├── cli/ # 命令行接口 +│ │ ├── commands/ # 具体命令实现 +│ │ │ ├── base_command.h +│ │ │ ├── check_command.cpp/.h +│ │ │ ├── install_command.cpp/.h +│ │ │ ├── config_command.cpp/.h +│ │ │ ├── cmd_command.cpp/.h +│ │ │ └── model_commands.cpp/.h # run和join命令 +│ │ ├── command_parser.h # 命令解析器 +│ │ └── command_parser.cpp +│ ├── environment/ # 环境安装器(重构后模块化) +│ │ ├── environment_installer.h/.cpp # 主控制器 +│ │ ├── base_component.h/.cpp # 基础接口和上下文 +│ │ ├── command_executor.h/.cpp # 命令执行器 +│ │ ├── system_checker.h/.cpp # 系统检查器 +│ │ ├── windows_feature_manager.h/.cpp # Windows功能管理器 +│ │ ├── windows_feature_manager2.cpp # Windows功能管理器(续) +│ │ ├── software_installer.h/.cpp # 软件安装器 +│ │ └── software_installer2.cpp # 软件安装器(续) +│ ├── config/ # 配置管理 +│ │ ├── config_manager.h +│ │ └── config_manager.cpp +│ ├── utils/ # 工具库 +│ │ ├── utils.h/.cpp # 通用工具函数 +│ │ ├── process.h/.cpp # 进程管理 +│ │ └── wsl_process.h/.cpp # WSL进程管理 +│ ├── tinylog/ # 日志系统 +│ │ ├── tinylog.h +│ │ └── tinylog.cpp +│ ├── main.cpp # 程序入口 +│ └── CMakeLists.txt # 构建配置 +├── installer/ # NSIS 安装包 +│ ├── SetupScripts/ +│ └── Output/ +├── parallax_config.txt # 默认配置 +└── README.md # 本文档 +``` + + +## 许可证 + +请参考 LICENSE 文件了解许可证信息。 + +## 贡献指南 + +1. Fork 本项目 +2. 创建特性分支 (`git checkout -b feature/AmazingFeature`) +3. 提交代码变更 (`git commit -m 'Add some AmazingFeature'`) +4. 推送到分支 (`git push origin feature/AmazingFeature`) +5. 创建 Pull Request + +## 联系方式 + +如有问题或建议,请通过以下方式联系: + +- 创建 Issue 报告问题 +- 提交 Pull Request 贡献代码 +- 联系开发团队获取支持 + +--- + +**注意**: Parallax 是一个高性能的分布式推理框架,专为 NVIDIA GPU 优化。使用前请确保您的硬件配置满足最低要求,并正确安装了相关驱动程序。 \ No newline at end of file diff --git a/installer/7z.dll b/installer/7z.dll new file mode 100644 index 0000000..71e7ed6 Binary files /dev/null and b/installer/7z.dll differ diff --git a/installer/7z.exe b/installer/7z.exe new file mode 100644 index 0000000..a35ab24 Binary files /dev/null and b/installer/7z.exe differ diff --git a/installer/NSIS.chm b/installer/NSIS.chm new file mode 100644 index 0000000..9ac3e62 Binary files /dev/null and b/installer/NSIS.chm differ diff --git a/installer/NSIS/Bin/GenPat.exe b/installer/NSIS/Bin/GenPat.exe new file mode 100644 index 0000000..04373fc Binary files /dev/null and b/installer/NSIS/Bin/GenPat.exe differ diff --git a/installer/NSIS/Bin/LibraryLocal.exe b/installer/NSIS/Bin/LibraryLocal.exe new file mode 100644 index 0000000..39063e9 Binary files /dev/null and b/installer/NSIS/Bin/LibraryLocal.exe differ diff --git a/installer/NSIS/Bin/MakeLangId.exe b/installer/NSIS/Bin/MakeLangId.exe new file mode 100644 index 0000000..16ade13 Binary files /dev/null and b/installer/NSIS/Bin/MakeLangId.exe differ diff --git a/installer/NSIS/Bin/RegTool.bin b/installer/NSIS/Bin/RegTool.bin new file mode 100644 index 0000000..5d11756 Binary files /dev/null and b/installer/NSIS/Bin/RegTool.bin differ diff --git a/installer/NSIS/Bin/zip2exe.exe b/installer/NSIS/Bin/zip2exe.exe new file mode 100644 index 0000000..6a33540 Binary files /dev/null and b/installer/NSIS/Bin/zip2exe.exe differ diff --git a/installer/NSIS/COPYING b/installer/NSIS/COPYING new file mode 100644 index 0000000..afd4902 Binary files /dev/null and b/installer/NSIS/COPYING differ diff --git a/installer/NSIS/Contrib/Graphics/Checks/big.bmp b/installer/NSIS/Contrib/Graphics/Checks/big.bmp new file mode 100644 index 0000000..d6db077 Binary files /dev/null and b/installer/NSIS/Contrib/Graphics/Checks/big.bmp differ diff --git a/installer/NSIS/Contrib/Graphics/Checks/classic-cross.bmp b/installer/NSIS/Contrib/Graphics/Checks/classic-cross.bmp new file mode 100644 index 0000000..a4d37a1 Binary files /dev/null and b/installer/NSIS/Contrib/Graphics/Checks/classic-cross.bmp differ diff --git a/installer/NSIS/Contrib/Graphics/Checks/classic.bmp b/installer/NSIS/Contrib/Graphics/Checks/classic.bmp new file mode 100644 index 0000000..83e3cf5 Binary files /dev/null and b/installer/NSIS/Contrib/Graphics/Checks/classic.bmp differ diff --git a/installer/NSIS/Contrib/Graphics/Checks/colorful.bmp b/installer/NSIS/Contrib/Graphics/Checks/colorful.bmp new file mode 100644 index 0000000..7713942 Binary files /dev/null and b/installer/NSIS/Contrib/Graphics/Checks/colorful.bmp differ diff --git a/installer/NSIS/Contrib/Graphics/Checks/grey-cross.bmp b/installer/NSIS/Contrib/Graphics/Checks/grey-cross.bmp new file mode 100644 index 0000000..b28b59b Binary files /dev/null and b/installer/NSIS/Contrib/Graphics/Checks/grey-cross.bmp differ diff --git a/installer/NSIS/Contrib/Graphics/Checks/grey.bmp b/installer/NSIS/Contrib/Graphics/Checks/grey.bmp new file mode 100644 index 0000000..b374432 Binary files /dev/null and b/installer/NSIS/Contrib/Graphics/Checks/grey.bmp differ diff --git a/installer/NSIS/Contrib/Graphics/Checks/modern.bmp b/installer/NSIS/Contrib/Graphics/Checks/modern.bmp new file mode 100644 index 0000000..62468de Binary files /dev/null and b/installer/NSIS/Contrib/Graphics/Checks/modern.bmp differ diff --git a/installer/NSIS/Contrib/Graphics/Checks/red-round.bmp b/installer/NSIS/Contrib/Graphics/Checks/red-round.bmp new file mode 100644 index 0000000..31d3c02 Binary files /dev/null and b/installer/NSIS/Contrib/Graphics/Checks/red-round.bmp differ diff --git a/installer/NSIS/Contrib/Graphics/Checks/red.bmp b/installer/NSIS/Contrib/Graphics/Checks/red.bmp new file mode 100644 index 0000000..e14e6b4 Binary files /dev/null and b/installer/NSIS/Contrib/Graphics/Checks/red.bmp differ diff --git a/installer/NSIS/Contrib/Graphics/Checks/simple-round.bmp b/installer/NSIS/Contrib/Graphics/Checks/simple-round.bmp new file mode 100644 index 0000000..6950232 Binary files /dev/null and b/installer/NSIS/Contrib/Graphics/Checks/simple-round.bmp differ diff --git a/installer/NSIS/Contrib/Graphics/Checks/simple-round2.bmp b/installer/NSIS/Contrib/Graphics/Checks/simple-round2.bmp new file mode 100644 index 0000000..ee1ec84 Binary files /dev/null and b/installer/NSIS/Contrib/Graphics/Checks/simple-round2.bmp differ diff --git a/installer/NSIS/Contrib/Graphics/Checks/simple.bmp b/installer/NSIS/Contrib/Graphics/Checks/simple.bmp new file mode 100644 index 0000000..c687a1d Binary files /dev/null and b/installer/NSIS/Contrib/Graphics/Checks/simple.bmp differ diff --git a/installer/NSIS/Contrib/Graphics/Header/nsis-r.bmp b/installer/NSIS/Contrib/Graphics/Header/nsis-r.bmp new file mode 100644 index 0000000..eb3650f Binary files /dev/null and b/installer/NSIS/Contrib/Graphics/Header/nsis-r.bmp differ diff --git a/installer/NSIS/Contrib/Graphics/Header/nsis.bmp b/installer/NSIS/Contrib/Graphics/Header/nsis.bmp new file mode 100644 index 0000000..cbb5231 Binary files /dev/null and b/installer/NSIS/Contrib/Graphics/Header/nsis.bmp differ diff --git a/installer/NSIS/Contrib/Graphics/Header/orange-nsis.bmp b/installer/NSIS/Contrib/Graphics/Header/orange-nsis.bmp new file mode 100644 index 0000000..b4a0cf9 Binary files /dev/null and b/installer/NSIS/Contrib/Graphics/Header/orange-nsis.bmp differ diff --git a/installer/NSIS/Contrib/Graphics/Header/orange-r-nsis.bmp b/installer/NSIS/Contrib/Graphics/Header/orange-r-nsis.bmp new file mode 100644 index 0000000..2da34f1 Binary files /dev/null and b/installer/NSIS/Contrib/Graphics/Header/orange-r-nsis.bmp differ diff --git a/installer/NSIS/Contrib/Graphics/Header/orange-r.bmp b/installer/NSIS/Contrib/Graphics/Header/orange-r.bmp new file mode 100644 index 0000000..c74fbdd Binary files /dev/null and b/installer/NSIS/Contrib/Graphics/Header/orange-r.bmp differ diff --git a/installer/NSIS/Contrib/Graphics/Header/orange-uninstall-nsis.bmp b/installer/NSIS/Contrib/Graphics/Header/orange-uninstall-nsis.bmp new file mode 100644 index 0000000..635596b Binary files /dev/null and b/installer/NSIS/Contrib/Graphics/Header/orange-uninstall-nsis.bmp differ diff --git a/installer/NSIS/Contrib/Graphics/Header/orange-uninstall-r-nsis.bmp b/installer/NSIS/Contrib/Graphics/Header/orange-uninstall-r-nsis.bmp new file mode 100644 index 0000000..5f215d7 Binary files /dev/null and b/installer/NSIS/Contrib/Graphics/Header/orange-uninstall-r-nsis.bmp differ diff --git a/installer/NSIS/Contrib/Graphics/Header/orange-uninstall-r.bmp b/installer/NSIS/Contrib/Graphics/Header/orange-uninstall-r.bmp new file mode 100644 index 0000000..1672afa Binary files /dev/null and b/installer/NSIS/Contrib/Graphics/Header/orange-uninstall-r.bmp differ diff --git a/installer/NSIS/Contrib/Graphics/Header/orange-uninstall.bmp b/installer/NSIS/Contrib/Graphics/Header/orange-uninstall.bmp new file mode 100644 index 0000000..97be674 Binary files /dev/null and b/installer/NSIS/Contrib/Graphics/Header/orange-uninstall.bmp differ diff --git a/installer/NSIS/Contrib/Graphics/Header/orange.bmp b/installer/NSIS/Contrib/Graphics/Header/orange.bmp new file mode 100644 index 0000000..4ac1413 Binary files /dev/null and b/installer/NSIS/Contrib/Graphics/Header/orange.bmp differ diff --git a/installer/NSIS/Contrib/Graphics/Header/win.bmp b/installer/NSIS/Contrib/Graphics/Header/win.bmp new file mode 100644 index 0000000..6612357 Binary files /dev/null and b/installer/NSIS/Contrib/Graphics/Header/win.bmp differ diff --git a/installer/NSIS/Contrib/Graphics/Icons/arrow-install.ico b/installer/NSIS/Contrib/Graphics/Icons/arrow-install.ico new file mode 100644 index 0000000..0441d5c Binary files /dev/null and b/installer/NSIS/Contrib/Graphics/Icons/arrow-install.ico differ diff --git a/installer/NSIS/Contrib/Graphics/Icons/arrow-uninstall.ico b/installer/NSIS/Contrib/Graphics/Icons/arrow-uninstall.ico new file mode 100644 index 0000000..f3e7bfe Binary files /dev/null and b/installer/NSIS/Contrib/Graphics/Icons/arrow-uninstall.ico differ diff --git a/installer/NSIS/Contrib/Graphics/Icons/arrow2-install.ico b/installer/NSIS/Contrib/Graphics/Icons/arrow2-install.ico new file mode 100644 index 0000000..e047f7d Binary files /dev/null and b/installer/NSIS/Contrib/Graphics/Icons/arrow2-install.ico differ diff --git a/installer/NSIS/Contrib/Graphics/Icons/arrow2-uninstall.ico b/installer/NSIS/Contrib/Graphics/Icons/arrow2-uninstall.ico new file mode 100644 index 0000000..fa6064f Binary files /dev/null and b/installer/NSIS/Contrib/Graphics/Icons/arrow2-uninstall.ico differ diff --git a/installer/NSIS/Contrib/Graphics/Icons/box-install.ico b/installer/NSIS/Contrib/Graphics/Icons/box-install.ico new file mode 100644 index 0000000..fd6c7c1 Binary files /dev/null and b/installer/NSIS/Contrib/Graphics/Icons/box-install.ico differ diff --git a/installer/NSIS/Contrib/Graphics/Icons/box-uninstall.ico b/installer/NSIS/Contrib/Graphics/Icons/box-uninstall.ico new file mode 100644 index 0000000..bc27541 Binary files /dev/null and b/installer/NSIS/Contrib/Graphics/Icons/box-uninstall.ico differ diff --git a/installer/NSIS/Contrib/Graphics/Icons/classic-install.ico b/installer/NSIS/Contrib/Graphics/Icons/classic-install.ico new file mode 100644 index 0000000..5afcc62 Binary files /dev/null and b/installer/NSIS/Contrib/Graphics/Icons/classic-install.ico differ diff --git a/installer/NSIS/Contrib/Graphics/Icons/classic-uninstall.ico b/installer/NSIS/Contrib/Graphics/Icons/classic-uninstall.ico new file mode 100644 index 0000000..0953290 Binary files /dev/null and b/installer/NSIS/Contrib/Graphics/Icons/classic-uninstall.ico differ diff --git a/installer/NSIS/Contrib/Graphics/Icons/llama-blue.ico b/installer/NSIS/Contrib/Graphics/Icons/llama-blue.ico new file mode 100644 index 0000000..08288b6 Binary files /dev/null and b/installer/NSIS/Contrib/Graphics/Icons/llama-blue.ico differ diff --git a/installer/NSIS/Contrib/Graphics/Icons/llama-grey.ico b/installer/NSIS/Contrib/Graphics/Icons/llama-grey.ico new file mode 100644 index 0000000..4749479 Binary files /dev/null and b/installer/NSIS/Contrib/Graphics/Icons/llama-grey.ico differ diff --git a/installer/NSIS/Contrib/Graphics/Icons/modern-install-blue-full.ico b/installer/NSIS/Contrib/Graphics/Icons/modern-install-blue-full.ico new file mode 100644 index 0000000..8f1c512 Binary files /dev/null and b/installer/NSIS/Contrib/Graphics/Icons/modern-install-blue-full.ico differ diff --git a/installer/NSIS/Contrib/Graphics/Icons/modern-install-blue.ico b/installer/NSIS/Contrib/Graphics/Icons/modern-install-blue.ico new file mode 100644 index 0000000..fecdc27 Binary files /dev/null and b/installer/NSIS/Contrib/Graphics/Icons/modern-install-blue.ico differ diff --git a/installer/NSIS/Contrib/Graphics/Icons/modern-install-colorful.ico b/installer/NSIS/Contrib/Graphics/Icons/modern-install-colorful.ico new file mode 100644 index 0000000..2908f58 Binary files /dev/null and b/installer/NSIS/Contrib/Graphics/Icons/modern-install-colorful.ico differ diff --git a/installer/NSIS/Contrib/Graphics/Icons/modern-install-full.ico b/installer/NSIS/Contrib/Graphics/Icons/modern-install-full.ico new file mode 100644 index 0000000..3aa83e9 Binary files /dev/null and b/installer/NSIS/Contrib/Graphics/Icons/modern-install-full.ico differ diff --git a/installer/NSIS/Contrib/Graphics/Icons/modern-install.ico b/installer/NSIS/Contrib/Graphics/Icons/modern-install.ico new file mode 100644 index 0000000..f8fbd5f Binary files /dev/null and b/installer/NSIS/Contrib/Graphics/Icons/modern-install.ico differ diff --git a/installer/NSIS/Contrib/Graphics/Icons/modern-uninstall-blue-full.ico b/installer/NSIS/Contrib/Graphics/Icons/modern-uninstall-blue-full.ico new file mode 100644 index 0000000..cd92279 Binary files /dev/null and b/installer/NSIS/Contrib/Graphics/Icons/modern-uninstall-blue-full.ico differ diff --git a/installer/NSIS/Contrib/Graphics/Icons/modern-uninstall-blue.ico b/installer/NSIS/Contrib/Graphics/Icons/modern-uninstall-blue.ico new file mode 100644 index 0000000..77031b5 Binary files /dev/null and b/installer/NSIS/Contrib/Graphics/Icons/modern-uninstall-blue.ico differ diff --git a/installer/NSIS/Contrib/Graphics/Icons/modern-uninstall-colorful.ico b/installer/NSIS/Contrib/Graphics/Icons/modern-uninstall-colorful.ico new file mode 100644 index 0000000..461035c Binary files /dev/null and b/installer/NSIS/Contrib/Graphics/Icons/modern-uninstall-colorful.ico differ diff --git a/installer/NSIS/Contrib/Graphics/Icons/modern-uninstall-full.ico b/installer/NSIS/Contrib/Graphics/Icons/modern-uninstall-full.ico new file mode 100644 index 0000000..a134f58 Binary files /dev/null and b/installer/NSIS/Contrib/Graphics/Icons/modern-uninstall-full.ico differ diff --git a/installer/NSIS/Contrib/Graphics/Icons/modern-uninstall.ico b/installer/NSIS/Contrib/Graphics/Icons/modern-uninstall.ico new file mode 100644 index 0000000..6c7410c Binary files /dev/null and b/installer/NSIS/Contrib/Graphics/Icons/modern-uninstall.ico differ diff --git a/installer/NSIS/Contrib/Graphics/Icons/nsis1-install.ico b/installer/NSIS/Contrib/Graphics/Icons/nsis1-install.ico new file mode 100644 index 0000000..e180449 Binary files /dev/null and b/installer/NSIS/Contrib/Graphics/Icons/nsis1-install.ico differ diff --git a/installer/NSIS/Contrib/Graphics/Icons/nsis1-uninstall.ico b/installer/NSIS/Contrib/Graphics/Icons/nsis1-uninstall.ico new file mode 100644 index 0000000..a37774c Binary files /dev/null and b/installer/NSIS/Contrib/Graphics/Icons/nsis1-uninstall.ico differ diff --git a/installer/NSIS/Contrib/Graphics/Icons/orange-install-nsis.ico b/installer/NSIS/Contrib/Graphics/Icons/orange-install-nsis.ico new file mode 100644 index 0000000..ef3975f Binary files /dev/null and b/installer/NSIS/Contrib/Graphics/Icons/orange-install-nsis.ico differ diff --git a/installer/NSIS/Contrib/Graphics/Icons/orange-install.ico b/installer/NSIS/Contrib/Graphics/Icons/orange-install.ico new file mode 100644 index 0000000..1db75f8 Binary files /dev/null and b/installer/NSIS/Contrib/Graphics/Icons/orange-install.ico differ diff --git a/installer/NSIS/Contrib/Graphics/Icons/orange-uninstall-nsis.ico b/installer/NSIS/Contrib/Graphics/Icons/orange-uninstall-nsis.ico new file mode 100644 index 0000000..431eb2e Binary files /dev/null and b/installer/NSIS/Contrib/Graphics/Icons/orange-uninstall-nsis.ico differ diff --git a/installer/NSIS/Contrib/Graphics/Icons/orange-uninstall.ico b/installer/NSIS/Contrib/Graphics/Icons/orange-uninstall.ico new file mode 100644 index 0000000..59c79f3 Binary files /dev/null and b/installer/NSIS/Contrib/Graphics/Icons/orange-uninstall.ico differ diff --git a/installer/NSIS/Contrib/Graphics/Icons/pixel-install.ico b/installer/NSIS/Contrib/Graphics/Icons/pixel-install.ico new file mode 100644 index 0000000..f2106d6 Binary files /dev/null and b/installer/NSIS/Contrib/Graphics/Icons/pixel-install.ico differ diff --git a/installer/NSIS/Contrib/Graphics/Icons/pixel-uninstall.ico b/installer/NSIS/Contrib/Graphics/Icons/pixel-uninstall.ico new file mode 100644 index 0000000..2003b2d Binary files /dev/null and b/installer/NSIS/Contrib/Graphics/Icons/pixel-uninstall.ico differ diff --git a/installer/NSIS/Contrib/Graphics/Icons/win-install.ico b/installer/NSIS/Contrib/Graphics/Icons/win-install.ico new file mode 100644 index 0000000..a5eb774 Binary files /dev/null and b/installer/NSIS/Contrib/Graphics/Icons/win-install.ico differ diff --git a/installer/NSIS/Contrib/Graphics/Icons/win-uninstall.ico b/installer/NSIS/Contrib/Graphics/Icons/win-uninstall.ico new file mode 100644 index 0000000..9329176 Binary files /dev/null and b/installer/NSIS/Contrib/Graphics/Icons/win-uninstall.ico differ diff --git a/installer/NSIS/Contrib/Graphics/Wizard/arrow.bmp b/installer/NSIS/Contrib/Graphics/Wizard/arrow.bmp new file mode 100644 index 0000000..9f7426b Binary files /dev/null and b/installer/NSIS/Contrib/Graphics/Wizard/arrow.bmp differ diff --git a/installer/NSIS/Contrib/Graphics/Wizard/llama.bmp b/installer/NSIS/Contrib/Graphics/Wizard/llama.bmp new file mode 100644 index 0000000..1e1d942 Binary files /dev/null and b/installer/NSIS/Contrib/Graphics/Wizard/llama.bmp differ diff --git a/installer/NSIS/Contrib/Graphics/Wizard/nsis.bmp b/installer/NSIS/Contrib/Graphics/Wizard/nsis.bmp new file mode 100644 index 0000000..dcc3809 Binary files /dev/null and b/installer/NSIS/Contrib/Graphics/Wizard/nsis.bmp differ diff --git a/installer/NSIS/Contrib/Graphics/Wizard/nullsoft.bmp b/installer/NSIS/Contrib/Graphics/Wizard/nullsoft.bmp new file mode 100644 index 0000000..d4145d4 Binary files /dev/null and b/installer/NSIS/Contrib/Graphics/Wizard/nullsoft.bmp differ diff --git a/installer/NSIS/Contrib/Graphics/Wizard/orange-nsis.bmp b/installer/NSIS/Contrib/Graphics/Wizard/orange-nsis.bmp new file mode 100644 index 0000000..ec46bd8 Binary files /dev/null and b/installer/NSIS/Contrib/Graphics/Wizard/orange-nsis.bmp differ diff --git a/installer/NSIS/Contrib/Graphics/Wizard/orange-uninstall-nsis.bmp b/installer/NSIS/Contrib/Graphics/Wizard/orange-uninstall-nsis.bmp new file mode 100644 index 0000000..661e702 Binary files /dev/null and b/installer/NSIS/Contrib/Graphics/Wizard/orange-uninstall-nsis.bmp differ diff --git a/installer/NSIS/Contrib/Graphics/Wizard/orange-uninstall.bmp b/installer/NSIS/Contrib/Graphics/Wizard/orange-uninstall.bmp new file mode 100644 index 0000000..097d094 Binary files /dev/null and b/installer/NSIS/Contrib/Graphics/Wizard/orange-uninstall.bmp differ diff --git a/installer/NSIS/Contrib/Graphics/Wizard/orange.bmp b/installer/NSIS/Contrib/Graphics/Wizard/orange.bmp new file mode 100644 index 0000000..196a5b7 Binary files /dev/null and b/installer/NSIS/Contrib/Graphics/Wizard/orange.bmp differ diff --git a/installer/NSIS/Contrib/Graphics/Wizard/win.bmp b/installer/NSIS/Contrib/Graphics/Wizard/win.bmp new file mode 100644 index 0000000..5524eef Binary files /dev/null and b/installer/NSIS/Contrib/Graphics/Wizard/win.bmp differ diff --git a/installer/NSIS/Contrib/Language files/Afrikaans.nlf b/installer/NSIS/Contrib/Language files/Afrikaans.nlf new file mode 100644 index 0000000..1ec5358 Binary files /dev/null and b/installer/NSIS/Contrib/Language files/Afrikaans.nlf differ diff --git a/installer/NSIS/Contrib/Language files/Afrikaans.nsh b/installer/NSIS/Contrib/Language files/Afrikaans.nsh new file mode 100644 index 0000000..154afb6 Binary files /dev/null and b/installer/NSIS/Contrib/Language files/Afrikaans.nsh differ diff --git a/installer/NSIS/Contrib/Language files/Albanian.nlf b/installer/NSIS/Contrib/Language files/Albanian.nlf new file mode 100644 index 0000000..a27dbd8 Binary files /dev/null and b/installer/NSIS/Contrib/Language files/Albanian.nlf differ diff --git a/installer/NSIS/Contrib/Language files/Albanian.nsh b/installer/NSIS/Contrib/Language files/Albanian.nsh new file mode 100644 index 0000000..faf9224 Binary files /dev/null and b/installer/NSIS/Contrib/Language files/Albanian.nsh differ diff --git a/installer/NSIS/Contrib/Language files/Arabic.nlf b/installer/NSIS/Contrib/Language files/Arabic.nlf new file mode 100644 index 0000000..e8ba223 Binary files /dev/null and b/installer/NSIS/Contrib/Language files/Arabic.nlf differ diff --git a/installer/NSIS/Contrib/Language files/Arabic.nsh b/installer/NSIS/Contrib/Language files/Arabic.nsh new file mode 100644 index 0000000..1f6f3b5 Binary files /dev/null and b/installer/NSIS/Contrib/Language files/Arabic.nsh differ diff --git a/installer/NSIS/Contrib/Language files/Basque.nlf b/installer/NSIS/Contrib/Language files/Basque.nlf new file mode 100644 index 0000000..2f46f50 Binary files /dev/null and b/installer/NSIS/Contrib/Language files/Basque.nlf differ diff --git a/installer/NSIS/Contrib/Language files/Basque.nsh b/installer/NSIS/Contrib/Language files/Basque.nsh new file mode 100644 index 0000000..bf5939b Binary files /dev/null and b/installer/NSIS/Contrib/Language files/Basque.nsh differ diff --git a/installer/NSIS/Contrib/Language files/Belarusian.nlf b/installer/NSIS/Contrib/Language files/Belarusian.nlf new file mode 100644 index 0000000..3730e75 Binary files /dev/null and b/installer/NSIS/Contrib/Language files/Belarusian.nlf differ diff --git a/installer/NSIS/Contrib/Language files/Belarusian.nsh b/installer/NSIS/Contrib/Language files/Belarusian.nsh new file mode 100644 index 0000000..5708940 Binary files /dev/null and b/installer/NSIS/Contrib/Language files/Belarusian.nsh differ diff --git a/installer/NSIS/Contrib/Language files/Bosnian.nlf b/installer/NSIS/Contrib/Language files/Bosnian.nlf new file mode 100644 index 0000000..d7d7ebb Binary files /dev/null and b/installer/NSIS/Contrib/Language files/Bosnian.nlf differ diff --git a/installer/NSIS/Contrib/Language files/Bosnian.nsh b/installer/NSIS/Contrib/Language files/Bosnian.nsh new file mode 100644 index 0000000..e9df254 Binary files /dev/null and b/installer/NSIS/Contrib/Language files/Bosnian.nsh differ diff --git a/installer/NSIS/Contrib/Language files/Breton.nlf b/installer/NSIS/Contrib/Language files/Breton.nlf new file mode 100644 index 0000000..a908feb Binary files /dev/null and b/installer/NSIS/Contrib/Language files/Breton.nlf differ diff --git a/installer/NSIS/Contrib/Language files/Breton.nsh b/installer/NSIS/Contrib/Language files/Breton.nsh new file mode 100644 index 0000000..e80cb1b Binary files /dev/null and b/installer/NSIS/Contrib/Language files/Breton.nsh differ diff --git a/installer/NSIS/Contrib/Language files/Bulgarian.nlf b/installer/NSIS/Contrib/Language files/Bulgarian.nlf new file mode 100644 index 0000000..de8fe4a Binary files /dev/null and b/installer/NSIS/Contrib/Language files/Bulgarian.nlf differ diff --git a/installer/NSIS/Contrib/Language files/Bulgarian.nsh b/installer/NSIS/Contrib/Language files/Bulgarian.nsh new file mode 100644 index 0000000..d8d9fdb Binary files /dev/null and b/installer/NSIS/Contrib/Language files/Bulgarian.nsh differ diff --git a/installer/NSIS/Contrib/Language files/Catalan.nlf b/installer/NSIS/Contrib/Language files/Catalan.nlf new file mode 100644 index 0000000..8800ef0 Binary files /dev/null and b/installer/NSIS/Contrib/Language files/Catalan.nlf differ diff --git a/installer/NSIS/Contrib/Language files/Catalan.nsh b/installer/NSIS/Contrib/Language files/Catalan.nsh new file mode 100644 index 0000000..931cc43 Binary files /dev/null and b/installer/NSIS/Contrib/Language files/Catalan.nsh differ diff --git a/installer/NSIS/Contrib/Language files/Croatian.nlf b/installer/NSIS/Contrib/Language files/Croatian.nlf new file mode 100644 index 0000000..97a7f2b Binary files /dev/null and b/installer/NSIS/Contrib/Language files/Croatian.nlf differ diff --git a/installer/NSIS/Contrib/Language files/Croatian.nsh b/installer/NSIS/Contrib/Language files/Croatian.nsh new file mode 100644 index 0000000..0670d63 Binary files /dev/null and b/installer/NSIS/Contrib/Language files/Croatian.nsh differ diff --git a/installer/NSIS/Contrib/Language files/Czech.nlf b/installer/NSIS/Contrib/Language files/Czech.nlf new file mode 100644 index 0000000..2a337ea Binary files /dev/null and b/installer/NSIS/Contrib/Language files/Czech.nlf differ diff --git a/installer/NSIS/Contrib/Language files/Czech.nsh b/installer/NSIS/Contrib/Language files/Czech.nsh new file mode 100644 index 0000000..ae1f19b Binary files /dev/null and b/installer/NSIS/Contrib/Language files/Czech.nsh differ diff --git a/installer/NSIS/Contrib/Language files/Danish.nlf b/installer/NSIS/Contrib/Language files/Danish.nlf new file mode 100644 index 0000000..943749e Binary files /dev/null and b/installer/NSIS/Contrib/Language files/Danish.nlf differ diff --git a/installer/NSIS/Contrib/Language files/Danish.nsh b/installer/NSIS/Contrib/Language files/Danish.nsh new file mode 100644 index 0000000..ae4ebd4 Binary files /dev/null and b/installer/NSIS/Contrib/Language files/Danish.nsh differ diff --git a/installer/NSIS/Contrib/Language files/Dutch.nlf b/installer/NSIS/Contrib/Language files/Dutch.nlf new file mode 100644 index 0000000..a556efa Binary files /dev/null and b/installer/NSIS/Contrib/Language files/Dutch.nlf differ diff --git a/installer/NSIS/Contrib/Language files/Dutch.nsh b/installer/NSIS/Contrib/Language files/Dutch.nsh new file mode 100644 index 0000000..b3fb5c2 Binary files /dev/null and b/installer/NSIS/Contrib/Language files/Dutch.nsh differ diff --git a/installer/NSIS/Contrib/Language files/English.nlf b/installer/NSIS/Contrib/Language files/English.nlf new file mode 100644 index 0000000..09cc0b8 Binary files /dev/null and b/installer/NSIS/Contrib/Language files/English.nlf differ diff --git a/installer/NSIS/Contrib/Language files/English.nsh b/installer/NSIS/Contrib/Language files/English.nsh new file mode 100644 index 0000000..cc8cdc9 Binary files /dev/null and b/installer/NSIS/Contrib/Language files/English.nsh differ diff --git a/installer/NSIS/Contrib/Language files/Esperanto.nlf b/installer/NSIS/Contrib/Language files/Esperanto.nlf new file mode 100644 index 0000000..2636fce Binary files /dev/null and b/installer/NSIS/Contrib/Language files/Esperanto.nlf differ diff --git a/installer/NSIS/Contrib/Language files/Esperanto.nsh b/installer/NSIS/Contrib/Language files/Esperanto.nsh new file mode 100644 index 0000000..c01b319 Binary files /dev/null and b/installer/NSIS/Contrib/Language files/Esperanto.nsh differ diff --git a/installer/NSIS/Contrib/Language files/Estonian.nlf b/installer/NSIS/Contrib/Language files/Estonian.nlf new file mode 100644 index 0000000..5317a1c Binary files /dev/null and b/installer/NSIS/Contrib/Language files/Estonian.nlf differ diff --git a/installer/NSIS/Contrib/Language files/Estonian.nsh b/installer/NSIS/Contrib/Language files/Estonian.nsh new file mode 100644 index 0000000..b75660f Binary files /dev/null and b/installer/NSIS/Contrib/Language files/Estonian.nsh differ diff --git a/installer/NSIS/Contrib/Language files/Farsi.nlf b/installer/NSIS/Contrib/Language files/Farsi.nlf new file mode 100644 index 0000000..0f62cf6 Binary files /dev/null and b/installer/NSIS/Contrib/Language files/Farsi.nlf differ diff --git a/installer/NSIS/Contrib/Language files/Farsi.nsh b/installer/NSIS/Contrib/Language files/Farsi.nsh new file mode 100644 index 0000000..44f6b4e Binary files /dev/null and b/installer/NSIS/Contrib/Language files/Farsi.nsh differ diff --git a/installer/NSIS/Contrib/Language files/Finnish.nlf b/installer/NSIS/Contrib/Language files/Finnish.nlf new file mode 100644 index 0000000..8d64dd3 Binary files /dev/null and b/installer/NSIS/Contrib/Language files/Finnish.nlf differ diff --git a/installer/NSIS/Contrib/Language files/Finnish.nsh b/installer/NSIS/Contrib/Language files/Finnish.nsh new file mode 100644 index 0000000..2c003fb Binary files /dev/null and b/installer/NSIS/Contrib/Language files/Finnish.nsh differ diff --git a/installer/NSIS/Contrib/Language files/French.nlf b/installer/NSIS/Contrib/Language files/French.nlf new file mode 100644 index 0000000..6134917 Binary files /dev/null and b/installer/NSIS/Contrib/Language files/French.nlf differ diff --git a/installer/NSIS/Contrib/Language files/French.nsh b/installer/NSIS/Contrib/Language files/French.nsh new file mode 100644 index 0000000..81b6b2a Binary files /dev/null and b/installer/NSIS/Contrib/Language files/French.nsh differ diff --git a/installer/NSIS/Contrib/Language files/Galician.nlf b/installer/NSIS/Contrib/Language files/Galician.nlf new file mode 100644 index 0000000..456b9d8 Binary files /dev/null and b/installer/NSIS/Contrib/Language files/Galician.nlf differ diff --git a/installer/NSIS/Contrib/Language files/Galician.nsh b/installer/NSIS/Contrib/Language files/Galician.nsh new file mode 100644 index 0000000..ac5b884 Binary files /dev/null and b/installer/NSIS/Contrib/Language files/Galician.nsh differ diff --git a/installer/NSIS/Contrib/Language files/German.nlf b/installer/NSIS/Contrib/Language files/German.nlf new file mode 100644 index 0000000..16969cb Binary files /dev/null and b/installer/NSIS/Contrib/Language files/German.nlf differ diff --git a/installer/NSIS/Contrib/Language files/German.nsh b/installer/NSIS/Contrib/Language files/German.nsh new file mode 100644 index 0000000..807bc8f Binary files /dev/null and b/installer/NSIS/Contrib/Language files/German.nsh differ diff --git a/installer/NSIS/Contrib/Language files/Greek.nlf b/installer/NSIS/Contrib/Language files/Greek.nlf new file mode 100644 index 0000000..a7fbcd5 Binary files /dev/null and b/installer/NSIS/Contrib/Language files/Greek.nlf differ diff --git a/installer/NSIS/Contrib/Language files/Greek.nsh b/installer/NSIS/Contrib/Language files/Greek.nsh new file mode 100644 index 0000000..c8b07c6 Binary files /dev/null and b/installer/NSIS/Contrib/Language files/Greek.nsh differ diff --git a/installer/NSIS/Contrib/Language files/Hebrew.nlf b/installer/NSIS/Contrib/Language files/Hebrew.nlf new file mode 100644 index 0000000..22781ff Binary files /dev/null and b/installer/NSIS/Contrib/Language files/Hebrew.nlf differ diff --git a/installer/NSIS/Contrib/Language files/Hebrew.nsh b/installer/NSIS/Contrib/Language files/Hebrew.nsh new file mode 100644 index 0000000..b95289f Binary files /dev/null and b/installer/NSIS/Contrib/Language files/Hebrew.nsh differ diff --git a/installer/NSIS/Contrib/Language files/Hungarian.nlf b/installer/NSIS/Contrib/Language files/Hungarian.nlf new file mode 100644 index 0000000..dde9b31 Binary files /dev/null and b/installer/NSIS/Contrib/Language files/Hungarian.nlf differ diff --git a/installer/NSIS/Contrib/Language files/Hungarian.nsh b/installer/NSIS/Contrib/Language files/Hungarian.nsh new file mode 100644 index 0000000..e117f7f Binary files /dev/null and b/installer/NSIS/Contrib/Language files/Hungarian.nsh differ diff --git a/installer/NSIS/Contrib/Language files/Icelandic.nlf b/installer/NSIS/Contrib/Language files/Icelandic.nlf new file mode 100644 index 0000000..565d05a Binary files /dev/null and b/installer/NSIS/Contrib/Language files/Icelandic.nlf differ diff --git a/installer/NSIS/Contrib/Language files/Icelandic.nsh b/installer/NSIS/Contrib/Language files/Icelandic.nsh new file mode 100644 index 0000000..5806041 Binary files /dev/null and b/installer/NSIS/Contrib/Language files/Icelandic.nsh differ diff --git a/installer/NSIS/Contrib/Language files/Indonesian.nlf b/installer/NSIS/Contrib/Language files/Indonesian.nlf new file mode 100644 index 0000000..2e18276 Binary files /dev/null and b/installer/NSIS/Contrib/Language files/Indonesian.nlf differ diff --git a/installer/NSIS/Contrib/Language files/Indonesian.nsh b/installer/NSIS/Contrib/Language files/Indonesian.nsh new file mode 100644 index 0000000..daaba7f Binary files /dev/null and b/installer/NSIS/Contrib/Language files/Indonesian.nsh differ diff --git a/installer/NSIS/Contrib/Language files/Irish.nlf b/installer/NSIS/Contrib/Language files/Irish.nlf new file mode 100644 index 0000000..a89970a Binary files /dev/null and b/installer/NSIS/Contrib/Language files/Irish.nlf differ diff --git a/installer/NSIS/Contrib/Language files/Irish.nsh b/installer/NSIS/Contrib/Language files/Irish.nsh new file mode 100644 index 0000000..fe46098 Binary files /dev/null and b/installer/NSIS/Contrib/Language files/Irish.nsh differ diff --git a/installer/NSIS/Contrib/Language files/Italian.nlf b/installer/NSIS/Contrib/Language files/Italian.nlf new file mode 100644 index 0000000..617d4af Binary files /dev/null and b/installer/NSIS/Contrib/Language files/Italian.nlf differ diff --git a/installer/NSIS/Contrib/Language files/Italian.nsh b/installer/NSIS/Contrib/Language files/Italian.nsh new file mode 100644 index 0000000..5f70778 Binary files /dev/null and b/installer/NSIS/Contrib/Language files/Italian.nsh differ diff --git a/installer/NSIS/Contrib/Language files/Japanese.nlf b/installer/NSIS/Contrib/Language files/Japanese.nlf new file mode 100644 index 0000000..9b94418 Binary files /dev/null and b/installer/NSIS/Contrib/Language files/Japanese.nlf differ diff --git a/installer/NSIS/Contrib/Language files/Japanese.nsh b/installer/NSIS/Contrib/Language files/Japanese.nsh new file mode 100644 index 0000000..d52b12c Binary files /dev/null and b/installer/NSIS/Contrib/Language files/Japanese.nsh differ diff --git a/installer/NSIS/Contrib/Language files/Korean.nlf b/installer/NSIS/Contrib/Language files/Korean.nlf new file mode 100644 index 0000000..6160fd8 Binary files /dev/null and b/installer/NSIS/Contrib/Language files/Korean.nlf differ diff --git a/installer/NSIS/Contrib/Language files/Korean.nsh b/installer/NSIS/Contrib/Language files/Korean.nsh new file mode 100644 index 0000000..615227f Binary files /dev/null and b/installer/NSIS/Contrib/Language files/Korean.nsh differ diff --git a/installer/NSIS/Contrib/Language files/Kurdish.nlf b/installer/NSIS/Contrib/Language files/Kurdish.nlf new file mode 100644 index 0000000..5f24454 Binary files /dev/null and b/installer/NSIS/Contrib/Language files/Kurdish.nlf differ diff --git a/installer/NSIS/Contrib/Language files/Kurdish.nsh b/installer/NSIS/Contrib/Language files/Kurdish.nsh new file mode 100644 index 0000000..c5d33d2 Binary files /dev/null and b/installer/NSIS/Contrib/Language files/Kurdish.nsh differ diff --git a/installer/NSIS/Contrib/Language files/Latvian.nlf b/installer/NSIS/Contrib/Language files/Latvian.nlf new file mode 100644 index 0000000..03a5bae Binary files /dev/null and b/installer/NSIS/Contrib/Language files/Latvian.nlf differ diff --git a/installer/NSIS/Contrib/Language files/Latvian.nsh b/installer/NSIS/Contrib/Language files/Latvian.nsh new file mode 100644 index 0000000..273331e Binary files /dev/null and b/installer/NSIS/Contrib/Language files/Latvian.nsh differ diff --git a/installer/NSIS/Contrib/Language files/Lithuanian.nlf b/installer/NSIS/Contrib/Language files/Lithuanian.nlf new file mode 100644 index 0000000..bc3dd77 Binary files /dev/null and b/installer/NSIS/Contrib/Language files/Lithuanian.nlf differ diff --git a/installer/NSIS/Contrib/Language files/Lithuanian.nsh b/installer/NSIS/Contrib/Language files/Lithuanian.nsh new file mode 100644 index 0000000..78880de Binary files /dev/null and b/installer/NSIS/Contrib/Language files/Lithuanian.nsh differ diff --git a/installer/NSIS/Contrib/Language files/Luxembourgish.nlf b/installer/NSIS/Contrib/Language files/Luxembourgish.nlf new file mode 100644 index 0000000..20c879b Binary files /dev/null and b/installer/NSIS/Contrib/Language files/Luxembourgish.nlf differ diff --git a/installer/NSIS/Contrib/Language files/Luxembourgish.nsh b/installer/NSIS/Contrib/Language files/Luxembourgish.nsh new file mode 100644 index 0000000..c18a407 Binary files /dev/null and b/installer/NSIS/Contrib/Language files/Luxembourgish.nsh differ diff --git a/installer/NSIS/Contrib/Language files/Macedonian.nlf b/installer/NSIS/Contrib/Language files/Macedonian.nlf new file mode 100644 index 0000000..69bd7d8 Binary files /dev/null and b/installer/NSIS/Contrib/Language files/Macedonian.nlf differ diff --git a/installer/NSIS/Contrib/Language files/Macedonian.nsh b/installer/NSIS/Contrib/Language files/Macedonian.nsh new file mode 100644 index 0000000..f1d4fae Binary files /dev/null and b/installer/NSIS/Contrib/Language files/Macedonian.nsh differ diff --git a/installer/NSIS/Contrib/Language files/Malay.nlf b/installer/NSIS/Contrib/Language files/Malay.nlf new file mode 100644 index 0000000..8072d54 Binary files /dev/null and b/installer/NSIS/Contrib/Language files/Malay.nlf differ diff --git a/installer/NSIS/Contrib/Language files/Malay.nsh b/installer/NSIS/Contrib/Language files/Malay.nsh new file mode 100644 index 0000000..feaea41 Binary files /dev/null and b/installer/NSIS/Contrib/Language files/Malay.nsh differ diff --git a/installer/NSIS/Contrib/Language files/Mongolian.nlf b/installer/NSIS/Contrib/Language files/Mongolian.nlf new file mode 100644 index 0000000..c9f7fe3 Binary files /dev/null and b/installer/NSIS/Contrib/Language files/Mongolian.nlf differ diff --git a/installer/NSIS/Contrib/Language files/Mongolian.nsh b/installer/NSIS/Contrib/Language files/Mongolian.nsh new file mode 100644 index 0000000..b9a6d49 Binary files /dev/null and b/installer/NSIS/Contrib/Language files/Mongolian.nsh differ diff --git a/installer/NSIS/Contrib/Language files/Norwegian.nlf b/installer/NSIS/Contrib/Language files/Norwegian.nlf new file mode 100644 index 0000000..eef204b Binary files /dev/null and b/installer/NSIS/Contrib/Language files/Norwegian.nlf differ diff --git a/installer/NSIS/Contrib/Language files/Norwegian.nsh b/installer/NSIS/Contrib/Language files/Norwegian.nsh new file mode 100644 index 0000000..4ae470a Binary files /dev/null and b/installer/NSIS/Contrib/Language files/Norwegian.nsh differ diff --git a/installer/NSIS/Contrib/Language files/NorwegianNynorsk.nlf b/installer/NSIS/Contrib/Language files/NorwegianNynorsk.nlf new file mode 100644 index 0000000..4536a8c Binary files /dev/null and b/installer/NSIS/Contrib/Language files/NorwegianNynorsk.nlf differ diff --git a/installer/NSIS/Contrib/Language files/NorwegianNynorsk.nsh b/installer/NSIS/Contrib/Language files/NorwegianNynorsk.nsh new file mode 100644 index 0000000..dd6f8fb Binary files /dev/null and b/installer/NSIS/Contrib/Language files/NorwegianNynorsk.nsh differ diff --git a/installer/NSIS/Contrib/Language files/Polish.nlf b/installer/NSIS/Contrib/Language files/Polish.nlf new file mode 100644 index 0000000..491629b Binary files /dev/null and b/installer/NSIS/Contrib/Language files/Polish.nlf differ diff --git a/installer/NSIS/Contrib/Language files/Polish.nsh b/installer/NSIS/Contrib/Language files/Polish.nsh new file mode 100644 index 0000000..d92e470 Binary files /dev/null and b/installer/NSIS/Contrib/Language files/Polish.nsh differ diff --git a/installer/NSIS/Contrib/Language files/Portuguese.nlf b/installer/NSIS/Contrib/Language files/Portuguese.nlf new file mode 100644 index 0000000..082fb1b Binary files /dev/null and b/installer/NSIS/Contrib/Language files/Portuguese.nlf differ diff --git a/installer/NSIS/Contrib/Language files/Portuguese.nsh b/installer/NSIS/Contrib/Language files/Portuguese.nsh new file mode 100644 index 0000000..2974313 Binary files /dev/null and b/installer/NSIS/Contrib/Language files/Portuguese.nsh differ diff --git a/installer/NSIS/Contrib/Language files/PortugueseBR.nlf b/installer/NSIS/Contrib/Language files/PortugueseBR.nlf new file mode 100644 index 0000000..10f6fe7 Binary files /dev/null and b/installer/NSIS/Contrib/Language files/PortugueseBR.nlf differ diff --git a/installer/NSIS/Contrib/Language files/PortugueseBR.nsh b/installer/NSIS/Contrib/Language files/PortugueseBR.nsh new file mode 100644 index 0000000..330665d Binary files /dev/null and b/installer/NSIS/Contrib/Language files/PortugueseBR.nsh differ diff --git a/installer/NSIS/Contrib/Language files/Romanian.nlf b/installer/NSIS/Contrib/Language files/Romanian.nlf new file mode 100644 index 0000000..b69ebe9 Binary files /dev/null and b/installer/NSIS/Contrib/Language files/Romanian.nlf differ diff --git a/installer/NSIS/Contrib/Language files/Romanian.nsh b/installer/NSIS/Contrib/Language files/Romanian.nsh new file mode 100644 index 0000000..9898022 Binary files /dev/null and b/installer/NSIS/Contrib/Language files/Romanian.nsh differ diff --git a/installer/NSIS/Contrib/Language files/Russian.nlf b/installer/NSIS/Contrib/Language files/Russian.nlf new file mode 100644 index 0000000..253fa59 Binary files /dev/null and b/installer/NSIS/Contrib/Language files/Russian.nlf differ diff --git a/installer/NSIS/Contrib/Language files/Russian.nsh b/installer/NSIS/Contrib/Language files/Russian.nsh new file mode 100644 index 0000000..df536bb Binary files /dev/null and b/installer/NSIS/Contrib/Language files/Russian.nsh differ diff --git a/installer/NSIS/Contrib/Language files/Serbian.nlf b/installer/NSIS/Contrib/Language files/Serbian.nlf new file mode 100644 index 0000000..32404fd Binary files /dev/null and b/installer/NSIS/Contrib/Language files/Serbian.nlf differ diff --git a/installer/NSIS/Contrib/Language files/Serbian.nsh b/installer/NSIS/Contrib/Language files/Serbian.nsh new file mode 100644 index 0000000..aa3d93e Binary files /dev/null and b/installer/NSIS/Contrib/Language files/Serbian.nsh differ diff --git a/installer/NSIS/Contrib/Language files/SerbianLatin.nlf b/installer/NSIS/Contrib/Language files/SerbianLatin.nlf new file mode 100644 index 0000000..5ef26d2 Binary files /dev/null and b/installer/NSIS/Contrib/Language files/SerbianLatin.nlf differ diff --git a/installer/NSIS/Contrib/Language files/SerbianLatin.nsh b/installer/NSIS/Contrib/Language files/SerbianLatin.nsh new file mode 100644 index 0000000..66b4431 Binary files /dev/null and b/installer/NSIS/Contrib/Language files/SerbianLatin.nsh differ diff --git a/installer/NSIS/Contrib/Language files/SimpChinese.nlf b/installer/NSIS/Contrib/Language files/SimpChinese.nlf new file mode 100644 index 0000000..344bb35 Binary files /dev/null and b/installer/NSIS/Contrib/Language files/SimpChinese.nlf differ diff --git a/installer/NSIS/Contrib/Language files/SimpChinese.nsh b/installer/NSIS/Contrib/Language files/SimpChinese.nsh new file mode 100644 index 0000000..68d1dcc Binary files /dev/null and b/installer/NSIS/Contrib/Language files/SimpChinese.nsh differ diff --git a/installer/NSIS/Contrib/Language files/Slovak.nlf b/installer/NSIS/Contrib/Language files/Slovak.nlf new file mode 100644 index 0000000..8020787 Binary files /dev/null and b/installer/NSIS/Contrib/Language files/Slovak.nlf differ diff --git a/installer/NSIS/Contrib/Language files/Slovak.nsh b/installer/NSIS/Contrib/Language files/Slovak.nsh new file mode 100644 index 0000000..eac5238 Binary files /dev/null and b/installer/NSIS/Contrib/Language files/Slovak.nsh differ diff --git a/installer/NSIS/Contrib/Language files/Slovenian.nlf b/installer/NSIS/Contrib/Language files/Slovenian.nlf new file mode 100644 index 0000000..ba98565 Binary files /dev/null and b/installer/NSIS/Contrib/Language files/Slovenian.nlf differ diff --git a/installer/NSIS/Contrib/Language files/Slovenian.nsh b/installer/NSIS/Contrib/Language files/Slovenian.nsh new file mode 100644 index 0000000..52db6a3 Binary files /dev/null and b/installer/NSIS/Contrib/Language files/Slovenian.nsh differ diff --git a/installer/NSIS/Contrib/Language files/Spanish.nlf b/installer/NSIS/Contrib/Language files/Spanish.nlf new file mode 100644 index 0000000..f781488 Binary files /dev/null and b/installer/NSIS/Contrib/Language files/Spanish.nlf differ diff --git a/installer/NSIS/Contrib/Language files/Spanish.nsh b/installer/NSIS/Contrib/Language files/Spanish.nsh new file mode 100644 index 0000000..15281a0 Binary files /dev/null and b/installer/NSIS/Contrib/Language files/Spanish.nsh differ diff --git a/installer/NSIS/Contrib/Language files/SpanishInternational.nlf b/installer/NSIS/Contrib/Language files/SpanishInternational.nlf new file mode 100644 index 0000000..6134f11 Binary files /dev/null and b/installer/NSIS/Contrib/Language files/SpanishInternational.nlf differ diff --git a/installer/NSIS/Contrib/Language files/SpanishInternational.nsh b/installer/NSIS/Contrib/Language files/SpanishInternational.nsh new file mode 100644 index 0000000..4a4b590 Binary files /dev/null and b/installer/NSIS/Contrib/Language files/SpanishInternational.nsh differ diff --git a/installer/NSIS/Contrib/Language files/Swedish.nlf b/installer/NSIS/Contrib/Language files/Swedish.nlf new file mode 100644 index 0000000..20e1b4e Binary files /dev/null and b/installer/NSIS/Contrib/Language files/Swedish.nlf differ diff --git a/installer/NSIS/Contrib/Language files/Swedish.nsh b/installer/NSIS/Contrib/Language files/Swedish.nsh new file mode 100644 index 0000000..f1525fc Binary files /dev/null and b/installer/NSIS/Contrib/Language files/Swedish.nsh differ diff --git a/installer/NSIS/Contrib/Language files/Thai.nlf b/installer/NSIS/Contrib/Language files/Thai.nlf new file mode 100644 index 0000000..34ec333 Binary files /dev/null and b/installer/NSIS/Contrib/Language files/Thai.nlf differ diff --git a/installer/NSIS/Contrib/Language files/Thai.nsh b/installer/NSIS/Contrib/Language files/Thai.nsh new file mode 100644 index 0000000..29e74dc Binary files /dev/null and b/installer/NSIS/Contrib/Language files/Thai.nsh differ diff --git a/installer/NSIS/Contrib/Language files/TradChinese.nlf b/installer/NSIS/Contrib/Language files/TradChinese.nlf new file mode 100644 index 0000000..9070034 Binary files /dev/null and b/installer/NSIS/Contrib/Language files/TradChinese.nlf differ diff --git a/installer/NSIS/Contrib/Language files/TradChinese.nsh b/installer/NSIS/Contrib/Language files/TradChinese.nsh new file mode 100644 index 0000000..b46dd6f Binary files /dev/null and b/installer/NSIS/Contrib/Language files/TradChinese.nsh differ diff --git a/installer/NSIS/Contrib/Language files/Turkish.nlf b/installer/NSIS/Contrib/Language files/Turkish.nlf new file mode 100644 index 0000000..bd1968b Binary files /dev/null and b/installer/NSIS/Contrib/Language files/Turkish.nlf differ diff --git a/installer/NSIS/Contrib/Language files/Turkish.nsh b/installer/NSIS/Contrib/Language files/Turkish.nsh new file mode 100644 index 0000000..2f5586d Binary files /dev/null and b/installer/NSIS/Contrib/Language files/Turkish.nsh differ diff --git a/installer/NSIS/Contrib/Language files/Ukrainian.nlf b/installer/NSIS/Contrib/Language files/Ukrainian.nlf new file mode 100644 index 0000000..e556221 Binary files /dev/null and b/installer/NSIS/Contrib/Language files/Ukrainian.nlf differ diff --git a/installer/NSIS/Contrib/Language files/Ukrainian.nsh b/installer/NSIS/Contrib/Language files/Ukrainian.nsh new file mode 100644 index 0000000..7111d51 Binary files /dev/null and b/installer/NSIS/Contrib/Language files/Ukrainian.nsh differ diff --git a/installer/NSIS/Contrib/Language files/Uzbek.nlf b/installer/NSIS/Contrib/Language files/Uzbek.nlf new file mode 100644 index 0000000..e5c40ce Binary files /dev/null and b/installer/NSIS/Contrib/Language files/Uzbek.nlf differ diff --git a/installer/NSIS/Contrib/Language files/Uzbek.nsh b/installer/NSIS/Contrib/Language files/Uzbek.nsh new file mode 100644 index 0000000..79beed7 Binary files /dev/null and b/installer/NSIS/Contrib/Language files/Uzbek.nsh differ diff --git a/installer/NSIS/Contrib/Language files/Welsh.nlf b/installer/NSIS/Contrib/Language files/Welsh.nlf new file mode 100644 index 0000000..d28bf32 Binary files /dev/null and b/installer/NSIS/Contrib/Language files/Welsh.nlf differ diff --git a/installer/NSIS/Contrib/Language files/Welsh.nsh b/installer/NSIS/Contrib/Language files/Welsh.nsh new file mode 100644 index 0000000..8af9f1b Binary files /dev/null and b/installer/NSIS/Contrib/Language files/Welsh.nsh differ diff --git a/installer/NSIS/Contrib/Modern UI 2/Deprecated.nsh b/installer/NSIS/Contrib/Modern UI 2/Deprecated.nsh new file mode 100644 index 0000000..ddde664 Binary files /dev/null and b/installer/NSIS/Contrib/Modern UI 2/Deprecated.nsh differ diff --git a/installer/NSIS/Contrib/Modern UI 2/Interface.nsh b/installer/NSIS/Contrib/Modern UI 2/Interface.nsh new file mode 100644 index 0000000..2fba6a0 Binary files /dev/null and b/installer/NSIS/Contrib/Modern UI 2/Interface.nsh differ diff --git a/installer/NSIS/Contrib/Modern UI 2/Localization.nsh b/installer/NSIS/Contrib/Modern UI 2/Localization.nsh new file mode 100644 index 0000000..aa7fc2a Binary files /dev/null and b/installer/NSIS/Contrib/Modern UI 2/Localization.nsh differ diff --git a/installer/NSIS/Contrib/Modern UI 2/MUI2.nsh b/installer/NSIS/Contrib/Modern UI 2/MUI2.nsh new file mode 100644 index 0000000..e571bd0 Binary files /dev/null and b/installer/NSIS/Contrib/Modern UI 2/MUI2.nsh differ diff --git a/installer/NSIS/Contrib/Modern UI 2/Pages.nsh b/installer/NSIS/Contrib/Modern UI 2/Pages.nsh new file mode 100644 index 0000000..76b033f Binary files /dev/null and b/installer/NSIS/Contrib/Modern UI 2/Pages.nsh differ diff --git a/installer/NSIS/Contrib/Modern UI 2/Pages/Components.nsh b/installer/NSIS/Contrib/Modern UI 2/Pages/Components.nsh new file mode 100644 index 0000000..eeeeb57 Binary files /dev/null and b/installer/NSIS/Contrib/Modern UI 2/Pages/Components.nsh differ diff --git a/installer/NSIS/Contrib/Modern UI 2/Pages/Directory.nsh b/installer/NSIS/Contrib/Modern UI 2/Pages/Directory.nsh new file mode 100644 index 0000000..dafe194 Binary files /dev/null and b/installer/NSIS/Contrib/Modern UI 2/Pages/Directory.nsh differ diff --git a/installer/NSIS/Contrib/Modern UI 2/Pages/Finish.nsh b/installer/NSIS/Contrib/Modern UI 2/Pages/Finish.nsh new file mode 100644 index 0000000..1f6250d Binary files /dev/null and b/installer/NSIS/Contrib/Modern UI 2/Pages/Finish.nsh differ diff --git a/installer/NSIS/Contrib/Modern UI 2/Pages/InstallFiles.nsh b/installer/NSIS/Contrib/Modern UI 2/Pages/InstallFiles.nsh new file mode 100644 index 0000000..00796c1 Binary files /dev/null and b/installer/NSIS/Contrib/Modern UI 2/Pages/InstallFiles.nsh differ diff --git a/installer/NSIS/Contrib/Modern UI 2/Pages/License.nsh b/installer/NSIS/Contrib/Modern UI 2/Pages/License.nsh new file mode 100644 index 0000000..2979cc9 Binary files /dev/null and b/installer/NSIS/Contrib/Modern UI 2/Pages/License.nsh differ diff --git a/installer/NSIS/Contrib/Modern UI 2/Pages/StartMenu.nsh b/installer/NSIS/Contrib/Modern UI 2/Pages/StartMenu.nsh new file mode 100644 index 0000000..b1403b2 Binary files /dev/null and b/installer/NSIS/Contrib/Modern UI 2/Pages/StartMenu.nsh differ diff --git a/installer/NSIS/Contrib/Modern UI 2/Pages/UninstallConfirm.nsh b/installer/NSIS/Contrib/Modern UI 2/Pages/UninstallConfirm.nsh new file mode 100644 index 0000000..9b01ed3 Binary files /dev/null and b/installer/NSIS/Contrib/Modern UI 2/Pages/UninstallConfirm.nsh differ diff --git a/installer/NSIS/Contrib/Modern UI 2/Pages/Welcome.nsh b/installer/NSIS/Contrib/Modern UI 2/Pages/Welcome.nsh new file mode 100644 index 0000000..b80beb9 Binary files /dev/null and b/installer/NSIS/Contrib/Modern UI 2/Pages/Welcome.nsh differ diff --git a/installer/NSIS/Contrib/Modern UI/System.nsh b/installer/NSIS/Contrib/Modern UI/System.nsh new file mode 100644 index 0000000..e58d6d2 Binary files /dev/null and b/installer/NSIS/Contrib/Modern UI/System.nsh differ diff --git a/installer/NSIS/Contrib/Modern UI/ioSpecial.ini b/installer/NSIS/Contrib/Modern UI/ioSpecial.ini new file mode 100644 index 0000000..9dba154 Binary files /dev/null and b/installer/NSIS/Contrib/Modern UI/ioSpecial.ini differ diff --git a/installer/NSIS/Contrib/UIs/default.exe b/installer/NSIS/Contrib/UIs/default.exe new file mode 100644 index 0000000..fd11f01 Binary files /dev/null and b/installer/NSIS/Contrib/UIs/default.exe differ diff --git a/installer/NSIS/Contrib/UIs/modern.exe b/installer/NSIS/Contrib/UIs/modern.exe new file mode 100644 index 0000000..61dc1fb Binary files /dev/null and b/installer/NSIS/Contrib/UIs/modern.exe differ diff --git a/installer/NSIS/Contrib/UIs/modern_headerbmp.exe b/installer/NSIS/Contrib/UIs/modern_headerbmp.exe new file mode 100644 index 0000000..a4393b1 Binary files /dev/null and b/installer/NSIS/Contrib/UIs/modern_headerbmp.exe differ diff --git a/installer/NSIS/Contrib/UIs/modern_headerbmpr.exe b/installer/NSIS/Contrib/UIs/modern_headerbmpr.exe new file mode 100644 index 0000000..eef8fa4 Binary files /dev/null and b/installer/NSIS/Contrib/UIs/modern_headerbmpr.exe differ diff --git a/installer/NSIS/Contrib/UIs/modern_nodesc.exe b/installer/NSIS/Contrib/UIs/modern_nodesc.exe new file mode 100644 index 0000000..3b628a6 Binary files /dev/null and b/installer/NSIS/Contrib/UIs/modern_nodesc.exe differ diff --git a/installer/NSIS/Contrib/UIs/modern_smalldesc.exe b/installer/NSIS/Contrib/UIs/modern_smalldesc.exe new file mode 100644 index 0000000..52000ad Binary files /dev/null and b/installer/NSIS/Contrib/UIs/modern_smalldesc.exe differ diff --git a/installer/NSIS/Contrib/UIs/sdbarker_tiny.exe b/installer/NSIS/Contrib/UIs/sdbarker_tiny.exe new file mode 100644 index 0000000..ec5b4ba Binary files /dev/null and b/installer/NSIS/Contrib/UIs/sdbarker_tiny.exe differ diff --git a/installer/NSIS/Contrib/zip2exe/Base.nsh b/installer/NSIS/Contrib/zip2exe/Base.nsh new file mode 100644 index 0000000..47219c3 Binary files /dev/null and b/installer/NSIS/Contrib/zip2exe/Base.nsh differ diff --git a/installer/NSIS/Contrib/zip2exe/Classic.nsh b/installer/NSIS/Contrib/zip2exe/Classic.nsh new file mode 100644 index 0000000..adfd8df Binary files /dev/null and b/installer/NSIS/Contrib/zip2exe/Classic.nsh differ diff --git a/installer/NSIS/Contrib/zip2exe/Modern.nsh b/installer/NSIS/Contrib/zip2exe/Modern.nsh new file mode 100644 index 0000000..1ed8c2a Binary files /dev/null and b/installer/NSIS/Contrib/zip2exe/Modern.nsh differ diff --git a/installer/NSIS/Include/Colors.nsh b/installer/NSIS/Include/Colors.nsh new file mode 100644 index 0000000..01f9337 Binary files /dev/null and b/installer/NSIS/Include/Colors.nsh differ diff --git a/installer/NSIS/Include/FileFunc.nsh b/installer/NSIS/Include/FileFunc.nsh new file mode 100644 index 0000000..30307a5 Binary files /dev/null and b/installer/NSIS/Include/FileFunc.nsh differ diff --git a/installer/NSIS/Include/InstallOptions.nsh b/installer/NSIS/Include/InstallOptions.nsh new file mode 100644 index 0000000..c51b2dd Binary files /dev/null and b/installer/NSIS/Include/InstallOptions.nsh differ diff --git a/installer/NSIS/Include/LangFile.nsh b/installer/NSIS/Include/LangFile.nsh new file mode 100644 index 0000000..565ab7d Binary files /dev/null and b/installer/NSIS/Include/LangFile.nsh differ diff --git a/installer/NSIS/Include/Library.nsh b/installer/NSIS/Include/Library.nsh new file mode 100644 index 0000000..9ba0125 Binary files /dev/null and b/installer/NSIS/Include/Library.nsh differ diff --git a/installer/NSIS/Include/Locate.nsh b/installer/NSIS/Include/Locate.nsh new file mode 100644 index 0000000..a4ed008 --- /dev/null +++ b/installer/NSIS/Include/Locate.nsh @@ -0,0 +1,51 @@ +!define locate::Open `!insertmacro locate::Open` + +!macro locate::Open _PATH _OPTIONS _HANDLE + locate::_Open /NOUNLOAD `${_PATH}` `${_OPTIONS}` + Pop ${_HANDLE} +!macroend + + +!define locate::Find `!insertmacro locate::Find` + +!macro locate::Find _HANDLE _PATHANDNAME _PATH _NAME _SIZE _TIME _ATTRIB + locate::_Find /NOUNLOAD `${_HANDLE}` + Pop ${_PATHANDNAME} + Pop ${_PATH} + Pop ${_NAME} + Pop ${_SIZE} + Pop ${_TIME} + Pop ${_ATTRIB} +!macroend + + +!define locate::Close `!insertmacro locate::Close` + +!macro locate::Close _HANDLE + locate::_Close /NOUNLOAD `${_HANDLE}` +!macroend + + +!define locate::GetSize `!insertmacro locate::GetSize` + +!macro locate::GetSize _PATH _OPTIONS _SIZE _FILES _DIRS + locate::_GetSize /NOUNLOAD `${_PATH}` `${_OPTIONS}` + Pop ${_SIZE} + Pop ${_FILES} + Pop ${_DIRS} +!macroend + + +!define locate::RMDirEmpty `!insertmacro locate::RMDirEmpty` + +!macro locate::RMDirEmpty _PATH _OPTIONS _REMOVED + locate::_RMDirEmpty /NOUNLOAD `${_PATH}` `${_OPTIONS}` + Pop ${_REMOVED} +!macroend + + +!define locate::Unload `!insertmacro locate::Unload` + +!macro locate::Unload + locate::_Unload +!macroend diff --git a/installer/NSIS/Include/LogicLib.nsh b/installer/NSIS/Include/LogicLib.nsh new file mode 100644 index 0000000..295978f Binary files /dev/null and b/installer/NSIS/Include/LogicLib.nsh differ diff --git a/installer/NSIS/Include/MUI.nsh b/installer/NSIS/Include/MUI.nsh new file mode 100644 index 0000000..79b53ac Binary files /dev/null and b/installer/NSIS/Include/MUI.nsh differ diff --git a/installer/NSIS/Include/MUI2.nsh b/installer/NSIS/Include/MUI2.nsh new file mode 100644 index 0000000..7a76129 Binary files /dev/null and b/installer/NSIS/Include/MUI2.nsh differ diff --git a/installer/NSIS/Include/Memento.nsh b/installer/NSIS/Include/Memento.nsh new file mode 100644 index 0000000..cf9ca48 Binary files /dev/null and b/installer/NSIS/Include/Memento.nsh differ diff --git a/installer/NSIS/Include/MultiUser.nsh b/installer/NSIS/Include/MultiUser.nsh new file mode 100644 index 0000000..9feb3a7 Binary files /dev/null and b/installer/NSIS/Include/MultiUser.nsh differ diff --git a/installer/NSIS/Include/Sections.nsh b/installer/NSIS/Include/Sections.nsh new file mode 100644 index 0000000..f5ca621 Binary files /dev/null and b/installer/NSIS/Include/Sections.nsh differ diff --git a/installer/NSIS/Include/StrFunc.nsh b/installer/NSIS/Include/StrFunc.nsh new file mode 100644 index 0000000..4108164 Binary files /dev/null and b/installer/NSIS/Include/StrFunc.nsh differ diff --git a/installer/NSIS/Include/TextFunc.nsh b/installer/NSIS/Include/TextFunc.nsh new file mode 100644 index 0000000..287631b Binary files /dev/null and b/installer/NSIS/Include/TextFunc.nsh differ diff --git a/installer/NSIS/Include/UpgradeDLL.nsh b/installer/NSIS/Include/UpgradeDLL.nsh new file mode 100644 index 0000000..8e88c3c Binary files /dev/null and b/installer/NSIS/Include/UpgradeDLL.nsh differ diff --git a/installer/NSIS/Include/Util.nsh b/installer/NSIS/Include/Util.nsh new file mode 100644 index 0000000..b05d9ea Binary files /dev/null and b/installer/NSIS/Include/Util.nsh differ diff --git a/installer/NSIS/Include/VB6RunTime.nsh b/installer/NSIS/Include/VB6RunTime.nsh new file mode 100644 index 0000000..7591240 Binary files /dev/null and b/installer/NSIS/Include/VB6RunTime.nsh differ diff --git a/installer/NSIS/Include/VPatchLib.nsh b/installer/NSIS/Include/VPatchLib.nsh new file mode 100644 index 0000000..42ed923 Binary files /dev/null and b/installer/NSIS/Include/VPatchLib.nsh differ diff --git a/installer/NSIS/Include/Win/WinDef.nsh b/installer/NSIS/Include/Win/WinDef.nsh new file mode 100644 index 0000000..db7b6c7 --- /dev/null +++ b/installer/NSIS/Include/Win/WinDef.nsh @@ -0,0 +1,74 @@ +!ifndef __WIN_WINDEF__INC +!define __WIN_WINDEF__INC +!verbose push +!verbose 3 +!ifndef __WIN_NOINC_WINDEF + + +!ifndef MAX_PATH +!define MAX_PATH 260 +!endif +#define NULL 0 + + +!macro _Win_MINMAX _intcmp _j1 _j2 _outvar _a _b +${_intcmp} "${_a}" "${_b}" ${_j1} ${_j1} ${_j2} +StrCpy ${_outvar} "${_a}" +goto +2 +StrCpy ${_outvar} "${_b}" +!macroend +!ifndef __WIN_MS_NOMINMAX & min & max & min_u & max_u +!define min "!insertmacro _Win_MINMAX IntCmp +1 +3 " +!define max "!insertmacro _Win_MINMAX IntCmp +3 +1 " +!define min_u "!insertmacro _Win_MINMAX IntCmpU +1 +3 " +!define max_u "!insertmacro _Win_MINMAX IntCmpU +3 +1 " +!endif + +!macro _Win_LOBYTE _outvar _in +IntOp ${_outvar} "${_in}" & 0xFF +!macroend +!define LOBYTE "!insertmacro _Win_LOBYTE " + +!macro _Win_HIBYTE _outvar _in +IntOp ${_outvar} "${_in}" >> 8 +${LOBYTE} ${_outvar} ${_outvar} +!macroend +!define HIBYTE "!insertmacro _Win_HIBYTE " + +!macro _Win_LOWORD _outvar _in +IntOp ${_outvar} "${_in}" & 0xFFFF +!macroend +!define LOWORD "!insertmacro _Win_LOWORD " + +!macro _Win_HIWORD _outvar _in +IntOp ${outvar} "${_in}" >> 16 ;sign extended :( +${LOWORD} ${_outvar} ${outvar} ;make sure we strip off the upper word +!macroend +!define HIWORD "!insertmacro _Win_HIWORD " + +!macro _Win_MAKEWORD _outvar _tmpvar _lo _hi +${LOBYTE} ${_outvar} "${_hi}" +${LOBYTE} ${_tmpvar} "${_lo}" +IntOp ${_outvar} ${_outvar} << 8 +IntOp ${_outvar} ${_outvar} | ${_tmpvar} +!macroend +!define MAKEWORD "!insertmacro _Win_MAKEWORD " + +!macro _Win_MAKELONG32 _outvar _tmpvar _wlo _whi +${LOWORD} ${_outvar} "${_wlo}" +IntOp ${_tmpvar} "${_whi}" << 16 +IntOp ${_outvar} ${_outvar} | ${_tmpvar} +!macroend +!define MAKELONG "!insertmacro _Win_MAKELONG32 " +!if "${__WIN_PTRSIZE}" <= 4 +!define MAKEWPARAM "${MAKELONG}" +!define MAKELPARAM "${MAKELONG}" +!define MAKELRESULT "${MAKELONG}" +!else +!error "Missing 64bit imp!" +!endif + + +!endif /* __WIN_NOINC_WINDEF */ +!verbose pop +!endif /* __WIN_WINDEF__INC */ \ No newline at end of file diff --git a/installer/NSIS/Include/Win/WinError.nsh b/installer/NSIS/Include/Win/WinError.nsh new file mode 100644 index 0000000..4fec780 --- /dev/null +++ b/installer/NSIS/Include/Win/WinError.nsh @@ -0,0 +1,64 @@ +!ifndef __WIN_WINERROR__INC +!define __WIN_WINERROR__INC +!verbose push +!verbose 3 +!ifndef __WIN_NOINC_WINERROR + +#define NO_ERROR 0 +!define ERROR_SUCCESS 0 +!define ERROR_INVALID_FUNCTION 1 +!define ERROR_FILE_NOT_FOUND 2 +!define ERROR_PATH_NOT_FOUND 3 +!define ERROR_TOO_MANY_OPEN_FILES 4 +!define ERROR_ACCESS_DENIED 5 +!define ERROR_INVALID_HANDLE 6 +!define ERROR_ARENA_TRASHED 7 +!define ERROR_NOT_ENOUGH_MEMORY 8 +!define ERROR_INVALID_BLOCK 9 +!define ERROR_BAD_ENVIRONMENT 10 +!define ERROR_BAD_FORMAT 11 +!define ERROR_INVALID_ACCESS 12 +!define ERROR_INVALID_DATA 13 +!define ERROR_OUTOFMEMORY 14 +!define ERROR_INVALID_DRIVE 15 +!define ERROR_CURRENT_DIRECTORY 16 +!define ERROR_NOT_SAME_DEVICE 17 +!define ERROR_NO_MORE_FILES 18 +!define ERROR_WRITE_PROTECT 19 +!define ERROR_BAD_UNIT 20 +!define ERROR_NOT_READY 21 +!define ERROR_BAD_COMMAND 22 +!define ERROR_CRC 23 +!define ERROR_BAD_LENGTH 24 +!define ERROR_SEEK 25 +!define ERROR_NOT_DOS_DISK 26 +!define ERROR_SECTOR_NOT_FOUND 27 +!define ERROR_OUT_OF_PAPER 28 +!define ERROR_WRITE_FAULT 29 +!define ERROR_READ_FAULT 30 +!define ERROR_GEN_FAILURE 31 +!define ERROR_SHARING_VIOLATION 32 +!define ERROR_LOCK_VIOLATION 33 +!define ERROR_WRONG_DISK 34 +!define ERROR_SHARING_BUFFER_EXCEEDED 36 +!define ERROR_HANDLE_EOF 38 +!define ERROR_HANDLE_DISK_FULL 39 +!define ERROR_NOT_SUPPORTED 50 + +!define SEVERITY_SUCCESS 0 +!define SEVERITY_ERROR 1 +!define E_UNEXPECTED 0x8000FFFF +!define E_NOTIMPL 0x80004001 +!define E_OUTOFMEMORY 0x8007000E +!define E_INVALIDARG 0x80070057 +!define E_NOINTERFACE 0x80004002 +!define E_POINTER 0x80004003 +!define E_HANDLE 0x80070006 +!define E_ABORT 0x80004004 +!define E_FAIL 0x80004005 +!define E_ACCESSDENIED 0x80070005 +!define E_PENDING 0x8000000A + +!endif /* __WIN_NOINC_WINERROR */ +!verbose pop +!endif /* __WIN_WINERROR__INC */ \ No newline at end of file diff --git a/installer/NSIS/Include/Win/WinNT.nsh b/installer/NSIS/Include/Win/WinNT.nsh new file mode 100644 index 0000000..bec1c14 --- /dev/null +++ b/installer/NSIS/Include/Win/WinNT.nsh @@ -0,0 +1,209 @@ +!ifndef __WIN_WINNT__INC +!define __WIN_WINNT__INC +!verbose push +!verbose 3 +!ifndef __WIN_NOINC_WINNT + + +#define MINCHAR 0x80 +#define MAXCHAR 0x7f +!define MINSHORT 0x8000 +!define MAXSHORT 0x7fff +!define MINLONG 0x80000000 +!define MAXLONG 0x7fffffff +!define MAXBYTE 0xff +!define MAXWORD 0xffff +!define MAXDWORD 0xffffffff + +!ifndef WIN32_NO_STATUS +!define STATUS_WAIT_0 0x00000000 +!define STATUS_ABANDONED_WAIT_0 0x00000080 +!define STATUS_USER_APC 0x000000C0 +!define STATUS_TIMEOUT 0x00000102 +!define STATUS_PENDING 0x00000103 +!define DBG_EXCEPTION_HANDLED 0x00010001 +!define DBG_CONTINUE 0x00010002 +!define STATUS_SEGMENT_NOTIFICATION 0x40000005 +!define DBG_TERMINATE_THREAD 0x40010003 +!define DBG_TERMINATE_PROCESS 0x40010004 +!define DBG_CONTROL_C 0x40010005 +!define DBG_CONTROL_BREAK 0x40010008 +!define DBG_COMMAND_EXCEPTION 0x40010009 +!define STATUS_GUARD_PAGE_VIOLATION 0x80000001 +!define STATUS_DATATYPE_MISALIGNMENT 0x80000002 +!define STATUS_BREAKPOINT 0x80000003 +!define STATUS_SINGLE_STEP 0x80000004 +!define DBG_EXCEPTION_NOT_HANDLED 0x80010001 +!define STATUS_ACCESS_VIOLATION 0xC0000005 +!define STATUS_IN_PAGE_ERROR 0xC0000006 +!define STATUS_INVALID_HANDLE 0xC0000008 +!define STATUS_NO_MEMORY 0xC0000017 +!define STATUS_ILLEGAL_INSTRUCTION 0xC000001D +!define STATUS_NONCONTINUABLE_EXCEPTION 0xC0000025 +!define STATUS_INVALID_DISPOSITION 0xC0000026 +!define STATUS_ARRAY_BOUNDS_EXCEEDED 0xC000008C +!define STATUS_FLOAT_DENORMAL_OPERAND 0xC000008D +!define STATUS_FLOAT_DIVIDE_BY_ZERO 0xC000008E +!define STATUS_FLOAT_INEXACT_RESULT 0xC000008F +!define STATUS_FLOAT_INVALID_OPERATION 0xC0000090 +!define STATUS_FLOAT_OVERFLOW 0xC0000091 +!define STATUS_FLOAT_STACK_CHECK 0xC0000092 +!define STATUS_FLOAT_UNDERFLOW 0xC0000093 +!define STATUS_INTEGER_DIVIDE_BY_ZERO 0xC0000094 +!define STATUS_INTEGER_OVERFLOW 0xC0000095 +!define STATUS_PRIVILEGED_INSTRUCTION 0xC0000096 +!define STATUS_STACK_OVERFLOW 0xC00000FD +!define STATUS_CONTROL_C_EXIT 0xC000013A +!define STATUS_FLOAT_MULTIPLE_FAULTS 0xC00002B4 +!define STATUS_FLOAT_MULTIPLE_TRAPS 0xC00002B5 +!define STATUS_REG_NAT_CONSUMPTION 0xC00002C9 +!define STATUS_SXS_EARLY_DEACTIVATION 0xC015000F +!define STATUS_SXS_INVALID_DEACTIVATION 0xC0150010 +!endif /*WIN32_NO_STATUS*/ + +#define MAXIMUM_WAIT_OBJECTS 64 + +!define DELETE 0x00010000 +!define READ_CONTROL 0x00020000 +!define WRITE_DAC 0x00040000 +!define WRITE_OWNER 0x00080000 +!define SYNCHRONIZE 0x00100000 +!define STANDARD_RIGHTS_REQUIRED 0x000F0000 +!define STANDARD_RIGHTS_READ ${READ_CONTROL} +!define STANDARD_RIGHTS_WRITE ${READ_CONTROL} +!define STANDARD_RIGHTS_EXECUTE ${READ_CONTROL} +!define STANDARD_RIGHTS_ALL 0x001F0000 +!define SPECIFIC_RIGHTS_ALL 0x0000FFFF +!define ACCESS_SYSTEM_SECURITY 0x01000000 +!define MAXIMUM_ALLOWED 0x02000000 +!define GENERIC_READ 0x80000000 +!define GENERIC_WRITE 0x40000000 +!define GENERIC_EXECUTE 0x20000000 +!define GENERIC_ALL 0x10000000 + +!define SE_PRIVILEGE_ENABLED_BY_DEFAULT 0x00000001 +!define SE_PRIVILEGE_ENABLED 0x00000002 +!define SE_PRIVILEGE_REMOVED 0x00000004 +!define SE_PRIVILEGE_USED_FOR_ACCESS 0x80000000 + +!define SE_CREATE_TOKEN_NAME "SeCreateTokenPrivilege" +!define SE_ASSIGNPRIMARYTOKEN_NAME "SeAssignPrimaryTokenPrivilege" +!define SE_LOCK_MEMORY_NAME "SeLockMemoryPrivilege" +!define SE_INCREASE_QUOTA_NAME "SeIncreaseQuotaPrivilege" +!define SE_UNSOLICITED_INPUT_NAME "SeUnsolicitedInputPrivilege" +!define SE_MACHINE_ACCOUNT_NAME "SeMachineAccountPrivilege" +!define SE_TCB_NAME "SeTcbPrivilege" +!define SE_SECURITY_NAME "SeSecurityPrivilege" +!define SE_TAKE_OWNERSHIP_NAME "SeTakeOwnershipPrivilege" +!define SE_LOAD_DRIVER_NAME "SeLoadDriverPrivilege" +!define SE_SYSTEM_PROFILE_NAME "SeSystemProfilePrivilege" +!define SE_SYSTEMTIME_NAME "SeSystemtimePrivilege" +!define SE_PROF_SINGLE_PROCESS_NAME "SeProfileSingleProcessPrivilege" +!define SE_INC_BASE_PRIORITY_NAME "SeIncreaseBasePriorityPrivilege" +!define SE_CREATE_PAGEFILE_NAME "SeCreatePagefilePrivilege" +!define SE_CREATE_PERMANENT_NAME "SeCreatePermanentPrivilege" +!define SE_BACKUP_NAME "SeBackupPrivilege" +!define SE_RESTORE_NAME "SeRestorePrivilege" +!define SE_SHUTDOWN_NAME "SeShutdownPrivilege" +!define SE_DEBUG_NAME "SeDebugPrivilege" +!define SE_AUDIT_NAME "SeAuditPrivilege" +!define SE_SYSTEM_ENVIRONMENT_NAME "SeSystemEnvironmentPrivilege" +!define SE_CHANGE_NOTIFY_NAME "SeChangeNotifyPrivilege" +!define SE_REMOTE_SHUTDOWN_NAME "SeRemoteShutdownPrivilege" +!define SE_UNDOCK_NAME "SeUndockPrivilege" +!define SE_SYNC_AGENT_NAME "SeSyncAgentPrivilege" +!define SE_ENABLE_DELEGATION_NAME "SeEnableDelegationPrivilege" +!define SE_MANAGE_VOLUME_NAME "SeManageVolumePrivilege" +!define SE_IMPERSONATE_NAME "SeImpersonatePrivilege" +!define SE_CREATE_GLOBAL_NAME "SeCreateGlobalPrivilege" + +!define TOKEN_ASSIGN_PRIMARY 0x0001 +!define TOKEN_DUPLICATE 0x0002 +!define TOKEN_IMPERSONATE 0x0004 +!define TOKEN_QUERY 0x0008 +!define TOKEN_QUERY_SOURCE 0x0010 +!define TOKEN_ADJUST_PRIVILEGES 0x0020 +!define TOKEN_ADJUST_GROUPS 0x0040 +!define TOKEN_ADJUST_DEFAULT 0x0080 +!define TOKEN_ADJUST_SESSIONID 0x0100 +!define TOKEN_ALL_ACCESS_P 0xF00FF +!define /math TOKEN_ALL_ACCESS ${TOKEN_ALL_ACCESS_P} | ${TOKEN_ADJUST_SESSIONID} +!define /math TOKEN_READ ${STANDARD_RIGHTS_READ} | ${TOKEN_QUERY} +!define TOKEN_WRITE 0x200E0 ;(STANDARD_RIGHTS_WRITE|TOKEN_ADJUST_PRIVILEGES|TOKEN_ADJUST_GROUPS|TOKEN_ADJUST_DEFAULT) +!define TOKEN_EXECUTE ${STANDARD_RIGHTS_EXECUTE} + +!define PROCESS_TERMINATE 0x0001 +!define PROCESS_CREATE_THREAD 0x0002 +!define PROCESS_SET_SESSIONID 0x0004 +!define PROCESS_VM_OPERATION 0x0008 +!define PROCESS_VM_READ 0x0010 +!define PROCESS_VM_WRITE 0x0020 +!define PROCESS_DUP_HANDLE 0x0040 +!define PROCESS_CREATE_PROCESS 0x0080 +!define PROCESS_SET_QUOTA 0x0100 +!define PROCESS_SET_INFORMATION 0x0200 +!define PROCESS_QUERY_INFORMATION 0x0400 +!define PROCESS_SUSPEND_RESUME 0x0800 +!define PROCESS_ALL_ACCESS 0x1F0FFF ;(STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0xFFF) +!define THREAD_TERMINATE 0x0001 +!define THREAD_SUSPEND_RESUME 0x0002 +!define THREAD_GET_CONTEXT 0x0008 +!define THREAD_SET_CONTEXT 0x0010 +!define THREAD_SET_INFORMATION 0x0020 +!define THREAD_QUERY_INFORMATION 0x0040 +!define THREAD_SET_THREAD_TOKEN 0x0080 +!define THREAD_IMPERSONATE 0x0100 +!define THREAD_DIRECT_IMPERSONATION 0x0200 +!define THREAD_ALL_ACCESS 0x1F03FF ;(STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0x3FF) +!define JOB_OBJECT_ASSIGN_PROCESS 0x0001 +!define JOB_OBJECT_SET_ATTRIBUTES 0x0002 +!define JOB_OBJECT_QUERY 0x0004 +!define JOB_OBJECT_TERMINATE 0x0008 +!define JOB_OBJECT_SET_SECURITY_ATTRIBUTES 0x0010 +!define JOB_OBJECT_ALL_ACCESS 0x1F001F ;(STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0x1F ) +!define EVENT_MODIFY_STATE 0x0002 +!define EVENT_ALL_ACCESS 0x1F0003 ;(STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|0x3) +!define MUTANT_QUERY_STATE 0x0001 +!define MUTANT_ALL_ACCESS 0x1F0001 ;(STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|MUTANT_QUERY_STATE) + +!define FILE_SHARE_READ 0x00000001 +!define FILE_SHARE_WRITE 0x00000002 +!define FILE_SHARE_DELETE 0x00000004 +!define FILE_ATTRIBUTE_READONLY 0x00000001 +!define FILE_ATTRIBUTE_HIDDEN 0x00000002 +!define FILE_ATTRIBUTE_SYSTEM 0x00000004 +!define FILE_ATTRIBUTE_DIRECTORY 0x00000010 +!define FILE_ATTRIBUTE_ARCHIVE 0x00000020 +!define FILE_ATTRIBUTE_DEVICE 0x00000040 +!define FILE_ATTRIBUTE_NORMAL 0x00000080 +!define FILE_ATTRIBUTE_TEMPORARY 0x00000100 +!define FILE_ATTRIBUTE_SPARSE_FILE 0x00000200 +!define FILE_ATTRIBUTE_REPARSE_POINT 0x00000400 +!define FILE_ATTRIBUTE_COMPRESSED 0x00000800 +!define FILE_ATTRIBUTE_OFFLINE 0x00001000 +!define FILE_ATTRIBUTE_NOT_CONTENT_INDEXED 0x00002000 +!define FILE_ATTRIBUTE_ENCRYPTED 0x00004000 + +!define DUPLICATE_CLOSE_SOURCE 0x00000001 +!define DUPLICATE_SAME_ACCESS 0x00000002 + +!define VER_PLATFORM_WIN32s 0 +!define VER_PLATFORM_WIN32_WINDOWS 1 +!define VER_PLATFORM_WIN32_NT 2 + +!ifndef REG_SZ & NSIS_WINDOWS__NO_REGTYPES +!define REG_NONE 0 +!define REG_SZ 1 +!define REG_EXPAND_SZ 2 +!define REG_BINARY 3 +!define REG_DWORD 4 +!define REG_DWORD_LITTLE_ENDIAN 4 +!define REG_DWORD_BIG_ENDIAN 5 +!define REG_LINK 6 +!define REG_MULTI_SZ 7 +!endif + + +!endif /* __WIN_NOINC_WINNT */ +!verbose pop +!endif /* __WIN_WINNT__INC */ \ No newline at end of file diff --git a/installer/NSIS/Include/Win/WinUser.nsh b/installer/NSIS/Include/Win/WinUser.nsh new file mode 100644 index 0000000..7a217c2 --- /dev/null +++ b/installer/NSIS/Include/Win/WinUser.nsh @@ -0,0 +1,199 @@ +!ifndef __WIN_WINUSER__INC +!define __WIN_WINUSER__INC +!verbose push +!verbose 3 +!ifndef __WIN_MS_NOUSER & __WIN_NOINC_WINUSER + +!ifndef __WIN_MS_NOVIRTUALKEYCODES +!define VK_LBUTTON 0x01 +!define VK_RBUTTON 0x02 +!define VK_CANCEL 0x03 +!define VK_MBUTTON 0x04 /* NOT contiguous with L & RBUTTON */ +!define VK_XBUTTON1 0x05 /* NOT contiguous with L & RBUTTON */ +!define VK_XBUTTON2 0x06 /* NOT contiguous with L & RBUTTON */ +!define VK_BACK 0x08 +!define VK_TAB 0x09 +!define VK_CLEAR 0x0C +!define VK_RETURN 0x0D +!define VK_SHIFT 0x10 +!define VK_CONTROL 0x11 +!define VK_MENU 0x12 +!define VK_PAUSE 0x13 +!define VK_CAPITAL 0x14 +!define VK_ESCAPE 0x1B +!define VK_CONVERT 0x1C +!define VK_NONCONVERT 0x1D +!define VK_ACCEPT 0x1E +!define VK_MODECHANGE 0x1F +!define VK_SPACE 0x20 +!define VK_PRIOR 0x21 +!define VK_NEXT 0x22 +!define VK_END 0x23 +!define VK_HOME 0x24 +!define VK_LEFT 0x25 +!define VK_UP 0x26 +!define VK_RIGHT 0x27 +!define VK_DOWN 0x28 +!define VK_SELECT 0x29 +!define VK_PRINT 0x2A +!define VK_EXECUTE 0x2B +!define VK_SNAPSHOT 0x2C +!define VK_INSERT 0x2D +!define VK_DELETE 0x2E +!define VK_HELP 0x2F +; VK_0 - VK_9 are the same as ASCII '0' - '9' (0x30 - 0x39) +; VK_A - VK_Z are the same as ASCII 'A' - 'Z' (0x41 - 0x5A) +!define VK_LWIN 0x5B +!define VK_RWIN 0x5C +!define VK_APPS 0x5D +!define VK_SLEEP 0x5F +!define VK_NUMPAD0 0x60 +!define VK_NUMPAD1 0x61 +!define VK_NUMPAD2 0x62 +!define VK_NUMPAD3 0x63 +!define VK_NUMPAD4 0x64 +!define VK_NUMPAD5 0x65 +!define VK_NUMPAD6 0x66 +!define VK_NUMPAD7 0x67 +!define VK_NUMPAD8 0x68 +!define VK_NUMPAD9 0x69 +!define VK_MULTIPLY 0x6A +!define VK_ADD 0x6B +!define VK_SEPARATOR 0x6C +!define VK_SUBTRACT 0x6D +!define VK_DECIMAL 0x6E +!define VK_DIVIDE 0x6F +!define VK_F1 0x70 +!define VK_F2 0x71 +!define VK_F3 0x72 +!define VK_F4 0x73 +!define VK_F5 0x74 +!define VK_F6 0x75 +!define VK_F7 0x76 +!define VK_F8 0x77 +!define VK_F9 0x78 +!define VK_F10 0x79 +!define VK_F11 0x7A +!define VK_F12 0x7B +!define VK_NUMLOCK 0x90 +!define VK_SCROLL 0x91 +!define VK_OEM_NEC_EQUAL 0x92 ; '=' key on numpad +!define VK_LSHIFT 0xA0 +!define VK_RSHIFT 0xA1 +!define VK_LCONTROL 0xA2 +!define VK_RCONTROL 0xA3 +!define VK_LMENU 0xA4 +!define VK_RMENU 0xA5 +!endif + +!ifndef __WIN_MS_NOWINOFFSETS +/* in nsDialogs.nsh... +!define GWL_STYLE -16 +!define GWL_EXSTYLE -20 */ +!define GWLP_WNDPROC -4 +!define GWLP_HINSTANCE -6 +!define GWLP_HWNDPARENT -8 +!define GWLP_USERDATA -21 +!define GWLP_ID -12 +!define DWLP_MSGRESULT 0 +!define /math DWLP_DLGPROC ${DWLP_MSGRESULT} + ${__WIN_PTRSIZE} ;DWLP_MSGRESULT + sizeof(LRESULT) +!define /math DWLP_USER ${DWLP_DLGPROC} + ${__WIN_PTRSIZE} ;DWLP_DLGPROC + sizeof(DLGPROC) +!endif + +!ifndef __WIN_MS_NONCMESSAGES +!define HTERROR -2 +!define HTTRANSPARENT -1 +!define HTNOWHERE 0 +!define HTCLIENT 1 +!define HTCAPTION 2 +!define HTSYSMENU 3 +!define HTGROWBOX 4 +!define HTSIZE ${HTGROWBOX} +!define HTMENU 5 +!define HTHSCROLL 6 +!define HTVSCROLL 7 +!define HTMINBUTTON 8 +!define HTMAXBUTTON 9 +!define HTLEFT 10 +!define HTRIGHT 11 +!define HTTOP 12 +!define HTTOPLEFT 13 +!define HTTOPRIGHT 14 +!define HTBOTTOM 15 +!define HTBOTTOMLEFT 16 +!define HTBOTTOMRIGHT 17 +!define HTBORDER 18 +!define HTREDUCE ${HTMINBUTTON} +!define HTZOOM ${HTMAXBUTTON} +!define HTSIZEFIRST ${HTLEFT} +!define HTSIZELAST ${HTBOTTOMRIGHT} +!define HTOBJECT 19 +!define HTCLOSE 20 +!define HTHELP 21 +!endif + +!ifndef __WIN_MS_NOSYSCOMMANDS +!define SC_SIZE 0xF000 +!define SC_MOVE 0xF010 +!define SC_MINIMIZE 0xF020 +!define SC_MAXIMIZE 0xF030 +!define SC_NEXTWINDOW 0xF040 +!define SC_PREVWINDOW 0xF050 +!define SC_CLOSE 0xF060 +!define SC_VSCROLL 0xF070 +!define SC_HSCROLL 0xF080 +!define SC_MOUSEMENU 0xF090 +!define SC_KEYMENU 0xF100 +!define SC_ARRANGE 0xF110 +!define SC_RESTORE 0xF120 +!define SC_TASKLIST 0xF130 +!define SC_SCREENSAVE 0xF140 +!define SC_HOTKEY 0xF150 +!define SC_DEFAULT 0xF160 +!define SC_MONITORPOWER 0xF170 +!define SC_CONTEXTHELP 0xF180 +!define SC_SEPARATOR 0xF00F +!endif + +!define IDC_ARROW 32512 +!define IDC_IBEAM 32513 +!define IDC_WAIT 32514 +!define IDC_CROSS 32515 +!define IDC_UPARROW 32516 +!define IDC_SIZENWSE 32642 +!define IDC_SIZENESW 32643 +!define IDC_SIZEWE 32644 +!define IDC_SIZENS 32645 +!define IDC_SIZEALL 32646 +!define IDC_NO 32648 +!define IDC_HAND 32649 +!define IDC_APPSTARTING 32650 +!define IDC_HELP 32651 + +/* in nsDialogs.nsh... +!define IMAGE_BITMAP 0 +!define IMAGE_ICON 1 +!define IMAGE_CURSOR 2*/ + +/* in nsDialogs.nsh... +!define LR_DEFAULTCOLOR 0x0000 +!define LR_MONOCHROME 0x0001 +!define LR_COLOR 0x0002 +!define LR_COPYRETURNORG 0x0004 +!define LR_COPYDELETEORG 0x0008 +!define LR_LOADFROMFILE 0x0010 +!define LR_LOADTRANSPARENT 0x0020 +!define LR_DEFAULTSIZE 0x0040 +!define LR_VGACOLOR 0x0080 +!define LR_LOADMAP3DCOLORS 0x1000 +!define LR_CREATEDIBSECTION 0x2000 +!define LR_COPYFROMRESOURCE 0x4000 +!define LR_SHARED 0x8000*/ + +!define GA_PARENT 1 +!define GA_ROOT 2 +!define GA_ROOTOWNER 3 + +!endif /* __WIN_MS_NOUSER & __WIN_NOINC_WINUSER */ +!verbose pop +!endif /* __WIN_WINUSER__INC */ \ No newline at end of file diff --git a/installer/NSIS/Include/WinCore.nsh b/installer/NSIS/Include/WinCore.nsh new file mode 100644 index 0000000..6767847 Binary files /dev/null and b/installer/NSIS/Include/WinCore.nsh differ diff --git a/installer/NSIS/Include/WinMessages.nsh b/installer/NSIS/Include/WinMessages.nsh new file mode 100644 index 0000000..cbfb54a Binary files /dev/null and b/installer/NSIS/Include/WinMessages.nsh differ diff --git a/installer/NSIS/Include/WinVer.nsh b/installer/NSIS/Include/WinVer.nsh new file mode 100644 index 0000000..91640c6 Binary files /dev/null and b/installer/NSIS/Include/WinVer.nsh differ diff --git a/installer/NSIS/Include/WordFunc.nsh b/installer/NSIS/Include/WordFunc.nsh new file mode 100644 index 0000000..875a00b Binary files /dev/null and b/installer/NSIS/Include/WordFunc.nsh differ diff --git a/installer/NSIS/Include/common.nsh b/installer/NSIS/Include/common.nsh new file mode 100644 index 0000000..7655d5e --- /dev/null +++ b/installer/NSIS/Include/common.nsh @@ -0,0 +1,165 @@ +/*************************************************************************** +* Copyright (C) 2014 Jeffery Jiang. +* +* You may opt to use, copy, modify, merge, publish, distribute and/or sell +* copies of the Software, and permit persons to whom the Software is +* furnished to do so. +* +* HOWEVER YOU CAN NOT REMOVE/MODIFY THESE COMMENTS. +* +* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY +* KIND, either express or implied. + ***************************************************************************/ + +# ============================ +# ×Զ¨Ò庯Êý»òÕߺê +# ============================ + +!include "nsProcess.nsh" +!include "LogicLib.nsh" +!include "FileFunc.nsh" +!insertmacro GetParameters +!insertmacro GetOptions +!macro Trace msg + MessageBox MB_ICONINFORMATION|MB_OK "${msg}" /SD IDOK +!macroend + + + +!define MAX_RETRY 10 +Var RetryTimes + +# ÖÕֹ½ø³Ì +Function TerminateProcess + # ʹÓÃRtlAdjustPrivilegeº¯ÊýÌáÉý×ÔÉí½ø³̵½ϵͳȨÏÞ + System::Call ntdll::RtlAdjustPrivilege(i20,i1,i0,*i) + StrCpy $RetryTimes 0 +loop__: + nsProcess::_FindProcess /NOUNLOAD "$R0" + Pop $R1 + StrCmp $R1 "0" +1 TerminateProcessOver + nsProcess::_KillProcess /NOUNLOAD "$R0" + Pop $R1 + + IntOp $RetryTimes $RetryTimes + 1 + ${If} $RetryTimes > ${MAX_RETRY} + Goto TerminateProcessOver + ${EndIf} + + Sleep 200 +Goto loop__ +TerminateProcessOver: +FunctionEnd + +Function un.TerminateProcess4Uninstall + # ʹÓÃRtlAdjustPrivilegeº¯ÊýÌáÉý×ÔÉí½ø³̵½ϵͳȨÏÞ + System::Call ntdll::RtlAdjustPrivilege(i20,i1,i0,*i) + StrCpy $RetryTimes 0 +loop__: + nsProcess::_FindProcess /NOUNLOAD "$R0" + Pop $R1 + StrCmp $R1 "0" +1 TerminateProcessOver + nsProcess::_KillProcess /NOUNLOAD "$R0" + Pop $R1 + + IntOp $RetryTimes $RetryTimes + 1 + ${If} $RetryTimes > ${MAX_RETRY} + Goto TerminateProcessOver + ${EndIf} + + Sleep 200 +Goto loop__ +TerminateProcessOver: +FunctionEnd + + + +# ´¦Àí×Զ¨ÒåÁÙʱĿ¼,ʹÓòå¼þchngvrbl.dll¡£ +# ¸úê±ØÐëÔÚ.onInitÖе÷Óᣠ+!macro ChangeTempDir dirPath + StrCmp "${dirPath}" "" ChangeTempDirOver +1 + CreateDirectory "${dirPath}" + File /oname=${dirPath}\chngvrbl.dll "chngvrbl.dll" + Push "${dirPath}" + Push 25 ;$TEMP + CallInstDLL "${dirPath}\chngvrbl.dll" changeVariable + Delete "${dirPath}\chngvrbl.dll" +ChangeTempDirOver: +!macroend + +!macro DeleteTempDir + RMDir /r "$TEMP" +!macroend + +# ½âÎöÆô¶¯²ÎÊý +# foo.exe /S /USERNAME Bar /D C:\Program Files\Foo +!macro ParseParameters paramName paramValue + ${GetParameters} $R0 + ${GetOptions} $R0 "${paramName}" ${paramValue} +!macroend + +# ȷ±£VALUEÒÔEND_WITH½áÊø +!macro EnsureEndsWith VALUE END_WITH + StrLen $R7 "${END_WITH}" + IntOp $R8 0 - $R7 + StrCpy $R9 "${VALUE}" $R7 $R8 + StrCmp $R9 ${END_WITH} +2 + StrCpy ${VALUE} "${VALUE}${END_WITH}" +!macroend + +# ×ÖÌ尲װ +!macro InstallFont fontFilePath fontFilename fontShowName + IfFileExists "$FONTS\${fontFilename}" InstallFontOver + + System::Call "ntdll::RtlAdjustPrivilege(i20,i1,i0,*i) i.s" + Pop $R9 + #${If} $R9 <> 0 + # ÌáÉýȨÏÞʧ°Ü + #MessageBox MB_ICONINFORMATION|MB_OK "ÌáÉýȨÏÞʧ°Ü!" /SD IDOK + #${EndIf} + + File /oname=$FONTS\${fontFilename} ${fontFilePath} + WriteRegStr HKLM "SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts" "${fontShowName}" "$FONTS\${fontFilename}" + System::Call "GDI32::AddFontResource(t'$FONTS\${fontFilename}') i.s" + Pop $R9 + ${If} $R9 == 0 + MessageBox MB_ICONINFORMATION|MB_OK "°²װ×ÖÌåʧ°Ü!" /SD IDOK + ${EndIf} +!macroend + + + + +# »ñȡ¿ؼþλÖà +!macro GetWindowPos parentHwnd ctrlHwnd l t r b + + System::Call "*(i0,i0,i0,i0) i.r11" + System::Call "User32::GetWindowRect(i${ctrlHwnd}, i$R1)" + System::Call "*$R1(i.r16,i.r17,i.r18,i.r19)" + + System::Call "*(i$R6,i$R7) i.r12)" # ×óÉÏ + System::Call "*(i$R8,i$R9) i.r13)" # ÓÒÏ + + System::Call "User32::ScreenToClient(i${parentHwnd}, i$R2)" + System::Call "User32::ScreenToClient(i${parentHwnd}, i$R3)" + + System::Call "*$R2(i.r14,i.r15)" + System::Call "*$R3(i.r16,i.r17)" + + IntOp ${l} $R4 + 0 + IntOp ${t} $R5 + 0 + IntOp ${r} $R6 + 0 + IntOp ${b} $R7 + 0 + + System::Free $R1 + System::Free $R2 + System::Free $R3 +!macroend + + + +# ¿ؼþ±³¾°͸Ã÷»¯ +!macro SetTransparent HWND IDC fontClr + GetDlgItem $R0 ${HWND} ${IDC} + SetCtlColors $R0 ${fontClr} transparent +!macroend diff --git a/installer/NSIS/Include/nsDialogs.nsh b/installer/NSIS/Include/nsDialogs.nsh new file mode 100644 index 0000000..ef4e178 Binary files /dev/null and b/installer/NSIS/Include/nsDialogs.nsh differ diff --git a/installer/NSIS/Include/nsOpenUrl.nsh b/installer/NSIS/Include/nsOpenUrl.nsh new file mode 100644 index 0000000..21f4b76 Binary files /dev/null and b/installer/NSIS/Include/nsOpenUrl.nsh differ diff --git a/installer/NSIS/Include/nsProcess.nsh b/installer/NSIS/Include/nsProcess.nsh new file mode 100644 index 0000000..279f581 --- /dev/null +++ b/installer/NSIS/Include/nsProcess.nsh @@ -0,0 +1,28 @@ +!define nsProcess::FindProcess `!insertmacro nsProcess::FindProcess` + +!macro nsProcess::FindProcess _FILE _ERR + nsProcess::_FindProcess /NOUNLOAD `${_FILE}` + Pop ${_ERR} +!macroend + + +!define nsProcess::KillProcess `!insertmacro nsProcess::KillProcess` + +!macro nsProcess::KillProcess _FILE _ERR + nsProcess::_KillProcess /NOUNLOAD `${_FILE}` + Pop ${_ERR} +!macroend + +!define nsProcess::CloseProcess `!insertmacro nsProcess::CloseProcess` + +!macro nsProcess::CloseProcess _FILE _ERR + nsProcess::_CloseProcess /NOUNLOAD `${_FILE}` + Pop ${_ERR} +!macroend + + +!define nsProcess::Unload `!insertmacro nsProcess::Unload` + +!macro nsProcess::Unload + nsProcess::_Unload +!macroend diff --git a/installer/NSIS/Include/x64.nsh b/installer/NSIS/Include/x64.nsh new file mode 100644 index 0000000..5f78a1d Binary files /dev/null and b/installer/NSIS/Include/x64.nsh differ diff --git a/installer/NSIS/NSIS.exe b/installer/NSIS/NSIS.exe new file mode 100644 index 0000000..ba4dcae Binary files /dev/null and b/installer/NSIS/NSIS.exe differ diff --git a/installer/NSIS/Plugins/AdvSplash.dll b/installer/NSIS/Plugins/AdvSplash.dll new file mode 100644 index 0000000..9d40006 Binary files /dev/null and b/installer/NSIS/Plugins/AdvSplash.dll differ diff --git a/installer/NSIS/Plugins/Banner.dll b/installer/NSIS/Plugins/Banner.dll new file mode 100644 index 0000000..7cbc3a1 Binary files /dev/null and b/installer/NSIS/Plugins/Banner.dll differ diff --git a/installer/NSIS/Plugins/BgImage.dll b/installer/NSIS/Plugins/BgImage.dll new file mode 100644 index 0000000..d79334f Binary files /dev/null and b/installer/NSIS/Plugins/BgImage.dll differ diff --git a/installer/NSIS/Plugins/BgWorker.dll b/installer/NSIS/Plugins/BgWorker.dll new file mode 100644 index 0000000..53c3423 Binary files /dev/null and b/installer/NSIS/Plugins/BgWorker.dll differ diff --git a/installer/NSIS/Plugins/Dialer.dll b/installer/NSIS/Plugins/Dialer.dll new file mode 100644 index 0000000..4d163e1 Binary files /dev/null and b/installer/NSIS/Plugins/Dialer.dll differ diff --git a/installer/NSIS/Plugins/INetC.dll b/installer/NSIS/Plugins/INetC.dll new file mode 100644 index 0000000..d867f8c Binary files /dev/null and b/installer/NSIS/Plugins/INetC.dll differ diff --git a/installer/NSIS/Plugins/InstallOptions.dll b/installer/NSIS/Plugins/InstallOptions.dll new file mode 100644 index 0000000..b6de1b6 Binary files /dev/null and b/installer/NSIS/Plugins/InstallOptions.dll differ diff --git a/installer/NSIS/Plugins/LangDLL.dll b/installer/NSIS/Plugins/LangDLL.dll new file mode 100644 index 0000000..35b0b46 Binary files /dev/null and b/installer/NSIS/Plugins/LangDLL.dll differ diff --git a/installer/NSIS/Plugins/LogEx.dll b/installer/NSIS/Plugins/LogEx.dll new file mode 100644 index 0000000..f430a91 Binary files /dev/null and b/installer/NSIS/Plugins/LogEx.dll differ diff --git a/installer/NSIS/Plugins/Math.dll b/installer/NSIS/Plugins/Math.dll new file mode 100644 index 0000000..d5a6d4e Binary files /dev/null and b/installer/NSIS/Plugins/Math.dll differ diff --git a/installer/NSIS/Plugins/NSISdl.dll b/installer/NSIS/Plugins/NSISdl.dll new file mode 100644 index 0000000..5747dc6 Binary files /dev/null and b/installer/NSIS/Plugins/NSISdl.dll differ diff --git a/installer/NSIS/Plugins/Splash.dll b/installer/NSIS/Plugins/Splash.dll new file mode 100644 index 0000000..bd1ec59 Binary files /dev/null and b/installer/NSIS/Plugins/Splash.dll differ diff --git a/installer/NSIS/Plugins/StartMenu.dll b/installer/NSIS/Plugins/StartMenu.dll new file mode 100644 index 0000000..0f69f3a Binary files /dev/null and b/installer/NSIS/Plugins/StartMenu.dll differ diff --git a/installer/NSIS/Plugins/System.dll b/installer/NSIS/Plugins/System.dll new file mode 100644 index 0000000..19a876e Binary files /dev/null and b/installer/NSIS/Plugins/System.dll differ diff --git a/installer/NSIS/Plugins/TypeLib.dll b/installer/NSIS/Plugins/TypeLib.dll new file mode 100644 index 0000000..b4440fd Binary files /dev/null and b/installer/NSIS/Plugins/TypeLib.dll differ diff --git a/installer/NSIS/Plugins/UserInfo.dll b/installer/NSIS/Plugins/UserInfo.dll new file mode 100644 index 0000000..586871c Binary files /dev/null and b/installer/NSIS/Plugins/UserInfo.dll differ diff --git a/installer/NSIS/Plugins/VPatch.dll b/installer/NSIS/Plugins/VPatch.dll new file mode 100644 index 0000000..af1b4e6 Binary files /dev/null and b/installer/NSIS/Plugins/VPatch.dll differ diff --git a/installer/NSIS/Plugins/locate.dll b/installer/NSIS/Plugins/locate.dll new file mode 100644 index 0000000..6a15df8 Binary files /dev/null and b/installer/NSIS/Plugins/locate.dll differ diff --git a/installer/NSIS/Plugins/nsCommon.dll b/installer/NSIS/Plugins/nsCommon.dll new file mode 100644 index 0000000..9b5ccd0 Binary files /dev/null and b/installer/NSIS/Plugins/nsCommon.dll differ diff --git a/installer/NSIS/Plugins/nsDialogs.dll b/installer/NSIS/Plugins/nsDialogs.dll new file mode 100644 index 0000000..1f142a2 Binary files /dev/null and b/installer/NSIS/Plugins/nsDialogs.dll differ diff --git a/installer/NSIS/Plugins/nsExec.dll b/installer/NSIS/Plugins/nsExec.dll new file mode 100644 index 0000000..788bfe3 Binary files /dev/null and b/installer/NSIS/Plugins/nsExec.dll differ diff --git a/installer/NSIS/Plugins/nsNiuniuSkin.dll b/installer/NSIS/Plugins/nsNiuniuSkin.dll new file mode 100644 index 0000000..7a952b9 Binary files /dev/null and b/installer/NSIS/Plugins/nsNiuniuSkin.dll differ diff --git a/installer/NSIS/Plugins/nsProcess.dll b/installer/NSIS/Plugins/nsProcess.dll new file mode 100644 index 0000000..d070fe6 Binary files /dev/null and b/installer/NSIS/Plugins/nsProcess.dll differ diff --git a/installer/NSIS/Plugins/nsis7zU.dll b/installer/NSIS/Plugins/nsis7zU.dll new file mode 100644 index 0000000..25b5108 Binary files /dev/null and b/installer/NSIS/Plugins/nsis7zU.dll differ diff --git a/installer/NSIS/Stubs/bzip2 b/installer/NSIS/Stubs/bzip2 new file mode 100644 index 0000000..0a63d05 Binary files /dev/null and b/installer/NSIS/Stubs/bzip2 differ diff --git a/installer/NSIS/Stubs/bzip2_solid b/installer/NSIS/Stubs/bzip2_solid new file mode 100644 index 0000000..313d679 Binary files /dev/null and b/installer/NSIS/Stubs/bzip2_solid differ diff --git a/installer/NSIS/Stubs/lzma b/installer/NSIS/Stubs/lzma new file mode 100644 index 0000000..a4038f9 Binary files /dev/null and b/installer/NSIS/Stubs/lzma differ diff --git a/installer/NSIS/Stubs/lzma_solid b/installer/NSIS/Stubs/lzma_solid new file mode 100644 index 0000000..f992aec Binary files /dev/null and b/installer/NSIS/Stubs/lzma_solid differ diff --git a/installer/NSIS/Stubs/uninst b/installer/NSIS/Stubs/uninst new file mode 100644 index 0000000..90d7d22 Binary files /dev/null and b/installer/NSIS/Stubs/uninst differ diff --git a/installer/NSIS/Stubs/zlib b/installer/NSIS/Stubs/zlib new file mode 100644 index 0000000..ad55bb1 Binary files /dev/null and b/installer/NSIS/Stubs/zlib differ diff --git a/installer/NSIS/Stubs/zlib_solid b/installer/NSIS/Stubs/zlib_solid new file mode 100644 index 0000000..5855cff Binary files /dev/null and b/installer/NSIS/Stubs/zlib_solid differ diff --git a/installer/NSIS/makensis.exe b/installer/NSIS/makensis.exe new file mode 100644 index 0000000..6845bb2 Binary files /dev/null and b/installer/NSIS/makensis.exe differ diff --git a/installer/NSIS/makensisw.exe b/installer/NSIS/makensisw.exe new file mode 100644 index 0000000..db65e00 Binary files /dev/null and b/installer/NSIS/makensisw.exe differ diff --git a/installer/NSIS/nsisconf.nsh b/installer/NSIS/nsisconf.nsh new file mode 100644 index 0000000..ded5b9a Binary files /dev/null and b/installer/NSIS/nsisconf.nsh differ diff --git a/installer/Output/.gitkeep b/installer/Output/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/installer/Packaging Configuration and Process Explanation.doc b/installer/Packaging Configuration and Process Explanation.doc new file mode 100644 index 0000000..1cafbfa Binary files /dev/null and b/installer/Packaging Configuration and Process Explanation.doc differ diff --git a/installer/README.md b/installer/README.md new file mode 100644 index 0000000..1d1d358 --- /dev/null +++ b/installer/README.md @@ -0,0 +1,110 @@ +# Introduction +This product is a modern and beatiful UI plugin based on DirectUI for NSIS. It is compact in size and powerful in functionality. We provide a comprehensive product packaging and release solution that includes UI configuration, installation script, and one-click packaging. + +# preview the install windows + +![](./images/config.png) +![](./images/installing.png) +![](./images/uninstall.png) +![](./images/uninstalling.png) + + +# Steps to modify the UI, package files, and modify scripts based on the template +## 1. Customize the product info +Modify the xxx_setup.nsi file under the corresponding project directory in the SetupScripts directory: +``` +# ====================== Product info ============================== +!define PRODUCT_NAME " Leeqia_Capture " +!define PRODUCT_PATHNAME "Leeqia_Capture" #registry key +!define INSTALL_APPEND_PATH "Leeqia_Capture" #append directory name +!define INSTALL_DEFALT_SETUPPATH "" #default setup path +!define EXE_NAME "牛牛截图.exe" +!define PRODUCT_VERSION "2.5.0.0" +!define PRODUCT_PUBLISHER "Leeqia" +!define PRODUCT_LEGAL "Leeqia Copyright(c)2020" +!define INSTALL_OUTPUT_NAME "Senior_PC_Setup_v2.5.0.exe" + +# ====================== Customize info============================== +!define INSTALL_7Z_PATH "..\app.7z" +!define INSTALL_7Z_NAME "app.7z" +!define INSTALL_RES_PATH "skin.zip" +!define INSTALL_LICENCE_FILENAME "licence.rtf" +!define INSTALL_ICO "logo.ico" +!define UNINSTALL_ICO "uninst.ico" +``` +## 2. Copy the files which need to be packaged +Place the information of the files to be installed in the 'FilesToInstall' directory; the packaging script will compress and package this directory (including multiple levels of subdirectories). + +## 3. Configure the UI in the 'skin' directory + +- install.xml: This is a master script. + +- configpage.xml: Configures the first UI displayed after opening the installation package, also used for selecting installation paths and other options. + +- licensepage.xml: Configures the UI for displaying the license agreement. + +- installingpage.xml: UI during the installation process. + +- finishpage.xml: UI displayed upon completion of the installation. + +- uninstallpage.xml: Uninstallation entry UI. + +- uninstallingpage.xml: UI during the uninstallation process. + +- uninstallfinishpage.xml: UI displayed upon completion of the uninstallation. + +- msgBox.xml: Secondary popup window. + +The "images" subdirectory is used to store the image information required for the UIs. +## 4. Modify the scripts +If there are specific installation features that require modification, please go to the corresponding project directory under SetupScripts and modify the file xxx_setup.nsh. + +- Function DUIPage: Installation entry script used to initialize some information. +- un.DUIPage: Uninstallation entry script. +- BindUIControls: Binds buttons and other responsive events. +- ShowMsgBox: Displays secondary sub-windows. +- OnBtnInstall: Controls the main installation process. + +## 5. Start package +- Simply execute xxxx-nozip.bat in the directory to complete the packaging. +- The packaged files will be placed in the Output directory. +- Note: Do not place the packaging script directory in a directory with Chinese characters. + +## 6. Other Notes/Points to Consider +- The currently configured NSIS is the Unicode version, so Chinese characters displayed in the console may appear as question marks. You can ignore it. +``` +@rem If you want to debug errors, please use the following script, which will open the compilation UI (Chinese characters will appear as question marks in the command-line UI). +".\NSIS\makensisw.exe" xxx +``` +- The NSI file contains information related to the installation configuration. The actual installation logic is in commonfunc.nsh and the NSH file that accompanies the NSI file. + +- If you have UIs that you don't understand, please refer to the examples and documentation. + +- All NSI and NSH files for NSIS need to be in Unicode or UTF-8 encoding. + +- For the ShowMsgBox UI, an additional parameter has been added to specify the style file used for the popup window. For example: +``` +nsNiuniuSkin::ShowMsgBox "notice title" "notice message." 0 "msgBox2.xml" +``` +This will use the style described in msgBox2.xml to display the window, facilitating personalized customization of the popup message box. + +- To use an RTF file as the license agreement file, simply change the agreement file to RTF (refer to the Nim example). + +## 7. New Version +Our latest version has incorporated the following features, significantly reducing the time spent in the installation package creation process while ensuring the delivery of higher-quality installation packages: + +- Multi-language Support +- High-DPI Support +- Silent Installation +- Upgrade Installation +- Online Installation +- Installation Behavior Reporting +- Anti-Decompile, Protection of Installation Package UI Resources and Scripts +- Automatic Signing of Installation Package and Uninstaller to Prevent False Positives +- Various Exquisite Templates for Quick Application +- Visual Configuration Wizard, No More Worries About Configuration Issues +- More templates + + +More information, please visit: +https://www.ggniu.com/nsniuniuskin/productdes/ diff --git a/installer/SetupScripts/commonfunc.nsh b/installer/SetupScripts/commonfunc.nsh new file mode 100644 index 0000000..84d6a91 Binary files /dev/null and b/installer/SetupScripts/commonfunc.nsh differ diff --git a/installer/SetupScripts/nim/licence.rtf b/installer/SetupScripts/nim/licence.rtf new file mode 100644 index 0000000..372ab1a --- /dev/null +++ b/installer/SetupScripts/nim/licence.rtf @@ -0,0 +1,408 @@ +{\rtf1\adeflang1025\ansi\ansicpg936\uc2\adeff0\deff0\stshfdbch31505\stshfloch31506\stshfhich31506\stshfbi0\deflang1033\deflangfe2052\themelang1033\themelangfe2052\themelangcs0{\fonttbl{\f0\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f2\fbidi \fmodern\fcharset0\fprq1{\*\panose 02070309020205020404}Courier New;} +{\f3\fbidi \froman\fcharset2\fprq2{\*\panose 05050102010706020507}Symbol;}{\f10\fbidi \fnil\fcharset2\fprq2{\*\panose 05000000000000000000}Wingdings;}{\f13\fbidi \fnil\fcharset134\fprq2{\*\panose 02010600030101010101}\'cb\'ce\'cc\'e5{\*\falt SimSun};} +{\f34\fbidi \froman\fcharset0\fprq2{\*\panose 02040503050406030204}Cambria Math;}{\f37\fbidi \fswiss\fcharset0\fprq2{\*\panose 020f0502020204030204}Calibri;}{\f40\fbidi \fnil\fcharset134\fprq2{\*\panose 00000000000000000000}@\'cb\'ce\'cc\'e5;} +{\f48\fbidi \fswiss\fcharset0\fprq2{\*\panose 020b0502040204020203}Segoe UI;}{\f50\fbidi \fmodern\fcharset0\fprq1{\*\panose 020b0609020204030204}Consolas;}{\flomajor\f31500\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;} +{\fdbmajor\f31501\fbidi \fnil\fcharset134\fprq2{\*\panose 02010600030101010101}\'cb\'ce\'cc\'e5{\*\falt SimSun};}{\fhimajor\f31502\fbidi \fswiss\fcharset0\fprq2{\*\panose 020f0302020204030204}Calibri Light;} +{\fbimajor\f31503\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\flominor\f31504\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;} +{\fdbminor\f31505\fbidi \fnil\fcharset134\fprq2{\*\panose 02010600030101010101}\'cb\'ce\'cc\'e5{\*\falt SimSun};}{\fhiminor\f31506\fbidi \fswiss\fcharset0\fprq2{\*\panose 020f0502020204030204}Calibri;} +{\fbiminor\f31507\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f51\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\f52\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;} +{\f54\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\f55\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\f56\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\f57\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);} +{\f58\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\f59\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\f71\fbidi \fmodern\fcharset238\fprq1 Courier New CE;}{\f72\fbidi \fmodern\fcharset204\fprq1 Courier New Cyr;} +{\f74\fbidi \fmodern\fcharset161\fprq1 Courier New Greek;}{\f75\fbidi \fmodern\fcharset162\fprq1 Courier New Tur;}{\f76\fbidi \fmodern\fcharset177\fprq1 Courier New (Hebrew);}{\f77\fbidi \fmodern\fcharset178\fprq1 Courier New (Arabic);} +{\f78\fbidi \fmodern\fcharset186\fprq1 Courier New Baltic;}{\f79\fbidi \fmodern\fcharset163\fprq1 Courier New (Vietnamese);}{\f183\fbidi \fnil\fcharset0\fprq2 SimSun Western{\*\falt SimSun};}{\f391\fbidi \froman\fcharset238\fprq2 Cambria Math CE;} +{\f392\fbidi \froman\fcharset204\fprq2 Cambria Math Cyr;}{\f394\fbidi \froman\fcharset161\fprq2 Cambria Math Greek;}{\f395\fbidi \froman\fcharset162\fprq2 Cambria Math Tur;}{\f398\fbidi \froman\fcharset186\fprq2 Cambria Math Baltic;} +{\f399\fbidi \froman\fcharset163\fprq2 Cambria Math (Vietnamese);}{\f421\fbidi \fswiss\fcharset238\fprq2 Calibri CE;}{\f422\fbidi \fswiss\fcharset204\fprq2 Calibri Cyr;}{\f424\fbidi \fswiss\fcharset161\fprq2 Calibri Greek;} +{\f425\fbidi \fswiss\fcharset162\fprq2 Calibri Tur;}{\f428\fbidi \fswiss\fcharset186\fprq2 Calibri Baltic;}{\f429\fbidi \fswiss\fcharset163\fprq2 Calibri (Vietnamese);}{\f453\fbidi \fnil\fcharset0\fprq2 @\'cb\'ce\'cc\'e5 Western;} +{\f531\fbidi \fswiss\fcharset238\fprq2 Segoe UI CE;}{\f532\fbidi \fswiss\fcharset204\fprq2 Segoe UI Cyr;}{\f534\fbidi \fswiss\fcharset161\fprq2 Segoe UI Greek;}{\f535\fbidi \fswiss\fcharset162\fprq2 Segoe UI Tur;} +{\f537\fbidi \fswiss\fcharset178\fprq2 Segoe UI (Arabic);}{\f538\fbidi \fswiss\fcharset186\fprq2 Segoe UI Baltic;}{\f539\fbidi \fswiss\fcharset163\fprq2 Segoe UI (Vietnamese);}{\f551\fbidi \fmodern\fcharset238\fprq1 Consolas CE;} +{\f552\fbidi \fmodern\fcharset204\fprq1 Consolas Cyr;}{\f554\fbidi \fmodern\fcharset161\fprq1 Consolas Greek;}{\f555\fbidi \fmodern\fcharset162\fprq1 Consolas Tur;}{\f558\fbidi \fmodern\fcharset186\fprq1 Consolas Baltic;} +{\f559\fbidi \fmodern\fcharset163\fprq1 Consolas (Vietnamese);}{\flomajor\f31508\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\flomajor\f31509\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;} +{\flomajor\f31511\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\flomajor\f31512\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\flomajor\f31513\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);} +{\flomajor\f31514\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\flomajor\f31515\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\flomajor\f31516\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);} +{\fdbmajor\f31520\fbidi \fnil\fcharset0\fprq2 SimSun Western{\*\falt SimSun};}{\fhimajor\f31528\fbidi \fswiss\fcharset238\fprq2 Calibri Light CE;}{\fhimajor\f31529\fbidi \fswiss\fcharset204\fprq2 Calibri Light Cyr;} +{\fhimajor\f31531\fbidi \fswiss\fcharset161\fprq2 Calibri Light Greek;}{\fhimajor\f31532\fbidi \fswiss\fcharset162\fprq2 Calibri Light Tur;}{\fhimajor\f31535\fbidi \fswiss\fcharset186\fprq2 Calibri Light Baltic;} +{\fhimajor\f31536\fbidi \fswiss\fcharset163\fprq2 Calibri Light (Vietnamese);}{\fbimajor\f31538\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\fbimajor\f31539\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;} +{\fbimajor\f31541\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\fbimajor\f31542\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\fbimajor\f31543\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);} +{\fbimajor\f31544\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\fbimajor\f31545\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\fbimajor\f31546\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);} +{\flominor\f31548\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\flominor\f31549\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\flominor\f31551\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;} +{\flominor\f31552\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\flominor\f31553\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\flominor\f31554\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);} +{\flominor\f31555\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\flominor\f31556\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\fdbminor\f31560\fbidi \fnil\fcharset0\fprq2 SimSun Western{\*\falt SimSun};} +{\fhiminor\f31568\fbidi \fswiss\fcharset238\fprq2 Calibri CE;}{\fhiminor\f31569\fbidi \fswiss\fcharset204\fprq2 Calibri Cyr;}{\fhiminor\f31571\fbidi \fswiss\fcharset161\fprq2 Calibri Greek;}{\fhiminor\f31572\fbidi \fswiss\fcharset162\fprq2 Calibri Tur;} +{\fhiminor\f31575\fbidi \fswiss\fcharset186\fprq2 Calibri Baltic;}{\fhiminor\f31576\fbidi \fswiss\fcharset163\fprq2 Calibri (Vietnamese);}{\fbiminor\f31578\fbidi \froman\fcharset238\fprq2 Times New Roman CE;} +{\fbiminor\f31579\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\fbiminor\f31581\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\fbiminor\f31582\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;} +{\fbiminor\f31583\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\fbiminor\f31584\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\fbiminor\f31585\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;} +{\fbiminor\f31586\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}}{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0;\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0; +\red255\green255\blue255;\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;\red192\green192\blue192; +\chyperlink\ctint255\cshade255\red5\green99\blue193;\red23\green23\blue23;\red0\green104\blue129;}{\*\defchp \fs21\kerning2\loch\af31506\hich\af31506\dbch\af31505 }{\*\defpap +\ql \li0\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 }\noqfpromote {\stylesheet{\qj \li0\ri0\nowidctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af0\afs22\alang1025 \ltrch\fcs0 +\fs21\lang1033\langfe2052\kerning2\loch\f31506\hich\af31506\dbch\af31505\cgrid\langnp1033\langfenp2052 \snext0 \sqformat \spriority0 Normal;}{ +\s1\ql \li0\ri0\sb100\sa100\sbauto1\saauto1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\outlinelevel0\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \ab\af13\afs48\alang1025 \ltrch\fcs0 +\b\fs48\lang1033\langfe2052\kerning36\loch\f13\hich\af13\dbch\af13\cgrid\langnp1033\langfenp2052 \sbasedon0 \snext1 \slink15 \sqformat \spriority9 \styrsid1983895 heading 1;}{ +\s2\ql \li0\ri0\sb100\sa100\sbauto1\saauto1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\outlinelevel1\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \ab\af13\afs36\alang1025 \ltrch\fcs0 +\b\fs36\lang1033\langfe2052\loch\f13\hich\af13\dbch\af13\cgrid\langnp1033\langfenp2052 \sbasedon0 \snext2 \slink16 \sqformat \spriority9 \styrsid1983895 heading 2;}{\*\cs10 \additive \ssemihidden \sunhideused \spriority1 Default Paragraph Font;}{\* +\ts11\tsrowd\trftsWidthB3\trpaddl108\trpaddr108\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\tblind0\tblindtype3\tscellwidthfts0\tsvertalt\tsbrdrt\tsbrdrl\tsbrdrb\tsbrdrr\tsbrdrdgl\tsbrdrdgr\tsbrdrh\tsbrdrv +\ql \li0\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af0\afs21\alang1025 \ltrch\fcs0 \fs21\lang1033\langfe2052\kerning2\loch\f31506\hich\af31506\dbch\af31505\cgrid\langnp1033\langfenp2052 +\snext11 \ssemihidden \sunhideused \sqformat Normal Table;}{\*\cs15 \additive \rtlch\fcs1 \ab\af13\afs48 \ltrch\fcs0 \b\fs48\kerning36\loch\f13\hich\af13\dbch\af13 \sbasedon10 \slink1 \slocked \spriority9 \styrsid1983895 \'b1\'ea\'cc\'e2 1 Char;}{\*\cs16 +\additive \rtlch\fcs1 \ab\af13\afs36 \ltrch\fcs0 \b\fs36\kerning0\loch\f13\hich\af13\dbch\af13 \sbasedon10 \slink2 \slocked \spriority9 \styrsid1983895 \'b1\'ea\'cc\'e2 2 Char;}{\s17\qc \li0\ri0\nowidctlpar\brdrb\brdrs\brdrw15\brsp20 +\tqc\tx4153\tqr\tx8306\wrapdefault\aspalpha\aspnum\faauto\nosnaplinegrid\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af0\afs18\alang1025 \ltrch\fcs0 \fs18\lang1033\langfe2052\kerning2\loch\f31506\hich\af31506\dbch\af31505\cgrid\langnp1033\langfenp2052 +\sbasedon0 \snext17 \slink18 \sunhideused \styrsid3494360 header;}{\*\cs18 \additive \rtlch\fcs1 \af0\afs18 \ltrch\fcs0 \fs18 \sbasedon10 \slink17 \slocked \styrsid3494360 \'d2\'b3\'c3\'bc Char;}{\s19\ql \li0\ri0\nowidctlpar +\tqc\tx4153\tqr\tx8306\wrapdefault\aspalpha\aspnum\faauto\nosnaplinegrid\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af0\afs18\alang1025 \ltrch\fcs0 \fs18\lang1033\langfe2052\kerning2\loch\f31506\hich\af31506\dbch\af31505\cgrid\langnp1033\langfenp2052 +\sbasedon0 \snext19 \slink20 \sunhideused \styrsid3494360 footer;}{\*\cs20 \additive \rtlch\fcs1 \af0\afs18 \ltrch\fcs0 \fs18 \sbasedon10 \slink19 \slocked \styrsid3494360 \'d2\'b3\'bd\'c5 Char;}{\*\cs21 \additive \rtlch\fcs1 \af0 \ltrch\fcs0 \ul\cf17 +\sbasedon10 \sunhideused \styrsid4659932 Hyperlink;}{\s22\qj \li0\ri0\nowidctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af0\afs18\alang1025 \ltrch\fcs0 +\fs18\lang1033\langfe2052\kerning2\loch\f13\hich\af31506\dbch\af13\cgrid\langnp1033\langfenp2052 \sbasedon0 \snext22 \slink23 \ssemihidden \sunhideused \styrsid1983895 Document Map;}{\*\cs23 \additive \rtlch\fcs1 \af0\afs18 \ltrch\fcs0 +\fs18\loch\f13\dbch\af13 \sbasedon10 \slink22 \slocked \ssemihidden \styrsid1983895 \'ce\'c4\'b5\'b5\'bd\'e1\'b9\'b9\'cd\'bc Char;}{\s24\ql \li0\ri0\sb100\sa100\sbauto1\saauto1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 +\rtlch\fcs1 \af13\afs24\alang1025 \ltrch\fcs0 \fs24\lang1033\langfe2052\loch\f13\hich\af13\dbch\af13\cgrid\langnp1033\langfenp2052 \sbasedon0 \snext24 \ssemihidden \sunhideused \styrsid1983895 Normal (Web);}{\*\cs25 \additive \rtlch\fcs1 \af0 \ltrch\fcs0 +\sbasedon10 \spriority0 \styrsid1983895 language;}{\s26\ql \li0\ri0\widctlpar +\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af13\afs24\alang1025 \ltrch\fcs0 +\fs24\lang1033\langfe2052\loch\f13\hich\af13\dbch\af13\cgrid\langnp1033\langfenp2052 \sbasedon0 \snext26 \slink27 \ssemihidden \sunhideused \styrsid1983895 HTML Preformatted;}{\*\cs27 \additive \rtlch\fcs1 \af13\afs24 \ltrch\fcs0 +\fs24\kerning0\loch\f13\hich\af13\dbch\af13 \sbasedon10 \slink26 \slocked \ssemihidden \styrsid1983895 HTML \'d4\'a4\'c9\'e8\'b8\'f1\'ca\'bd Char;}{\*\cs28 \additive \rtlch\fcs1 \af13\afs24 \ltrch\fcs0 \fs24\loch\f13\hich\af13\dbch\af13 +\sbasedon10 \ssemihidden \sunhideused \styrsid1983895 HTML Code;}{\*\cs29 \additive \rtlch\fcs1 \af0 \ltrch\fcs0 \sbasedon10 \spriority0 \styrsid1983895 hljs-function;}{\*\cs30 \additive \rtlch\fcs1 \af0 \ltrch\fcs0 +\sbasedon10 \spriority0 \styrsid1983895 hljs-title;}{\*\cs31 \additive \rtlch\fcs1 \af0 \ltrch\fcs0 \sbasedon10 \spriority0 \styrsid1983895 hljs-params;}}{\*\listtable{\list\listtemplateid391410550{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0 +\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01{\uc1\u-3913 ?};}{\levelnumbers;}\f3\fs20\fbias0\hres0\chhres0 \fi-360\li720\jclisttab\tx720\lin720 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1 +\lvltentative\levelspace0\levelindent0{\leveltext\'01o;}{\levelnumbers;}\f2\fs20\fbias0\hres0\chhres0 \fi-360\li1440\jclisttab\tx1440\lin1440 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0 +\levelindent0{\leveltext\'01{\uc1\u-3929 ?};}{\levelnumbers;}\f10\fs20\fbias0\hres0\chhres0 \fi-360\li2160\jclisttab\tx2160\lin2160 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0 +{\leveltext\'01{\uc1\u-3929 ?};}{\levelnumbers;}\f10\fs20\fbias0\hres0\chhres0 \fi-360\li2880\jclisttab\tx2880\lin2880 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext +\'01{\uc1\u-3929 ?};}{\levelnumbers;}\f10\fs20\fbias0\hres0\chhres0 \fi-360\li3600\jclisttab\tx3600\lin3600 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext +\'01{\uc1\u-3929 ?};}{\levelnumbers;}\f10\fs20\fbias0\hres0\chhres0 \fi-360\li4320\jclisttab\tx4320\lin4320 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext +\'01{\uc1\u-3929 ?};}{\levelnumbers;}\f10\fs20\fbias0\hres0\chhres0 \fi-360\li5040\jclisttab\tx5040\lin5040 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext +\'01{\uc1\u-3929 ?};}{\levelnumbers;}\f10\fs20\fbias0\hres0\chhres0 \fi-360\li5760\jclisttab\tx5760\lin5760 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext +\'01{\uc1\u-3929 ?};}{\levelnumbers;}\f10\fs20\fbias0\hres0\chhres0 \fi-360\li6480\jclisttab\tx6480\lin6480 }{\listname ;}\listid287971728}{\list\listtemplateid683425434{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1 +\levelspace0\levelindent0{\leveltext\'01{\uc1\u-3913 ?};}{\levelnumbers;}\f3\fs20\fbias0\hres0\chhres0 \fi-360\li720\jclisttab\tx720\lin720 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0 +\levelindent0{\leveltext\'01o;}{\levelnumbers;}\f2\fs20\fbias0\hres0\chhres0 \fi-360\li1440\jclisttab\tx1440\lin1440 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext +\'01{\uc1\u-3929 ?};}{\levelnumbers;}\f10\fs20\fbias0\hres0\chhres0 \fi-360\li2160\jclisttab\tx2160\lin2160 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext +\'01{\uc1\u-3929 ?};}{\levelnumbers;}\f10\fs20\fbias0\hres0\chhres0 \fi-360\li2880\jclisttab\tx2880\lin2880 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext +\'01{\uc1\u-3929 ?};}{\levelnumbers;}\f10\fs20\fbias0\hres0\chhres0 \fi-360\li3600\jclisttab\tx3600\lin3600 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext +\'01{\uc1\u-3929 ?};}{\levelnumbers;}\f10\fs20\fbias0\hres0\chhres0 \fi-360\li4320\jclisttab\tx4320\lin4320 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext +\'01{\uc1\u-3929 ?};}{\levelnumbers;}\f10\fs20\fbias0\hres0\chhres0 \fi-360\li5040\jclisttab\tx5040\lin5040 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext +\'01{\uc1\u-3929 ?};}{\levelnumbers;}\f10\fs20\fbias0\hres0\chhres0 \fi-360\li5760\jclisttab\tx5760\lin5760 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext +\'01{\uc1\u-3929 ?};}{\levelnumbers;}\f10\fs20\fbias0\hres0\chhres0 \fi-360\li6480\jclisttab\tx6480\lin6480 }{\listname ;}\listid368185088}{\list\listtemplateid914903858{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1 +\levelspace0\levelindent0{\leveltext\'02\'00.;}{\levelnumbers\'01;}\rtlch\fcs1 \af0 \ltrch\fcs0 \hres0\chhres0 \fi-360\li720\jclisttab\tx720\lin720 }{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0 +\levelindent0{\leveltext\'02\'01.;}{\levelnumbers\'01;}\rtlch\fcs1 \af0 \ltrch\fcs0 \hres0\chhres0 \fi-360\li1440\jclisttab\tx1440\lin1440 }{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0 +\levelindent0{\leveltext\'02\'02.;}{\levelnumbers\'01;}\rtlch\fcs1 \af0 \ltrch\fcs0 \hres0\chhres0 \fi-360\li2160\jclisttab\tx2160\lin2160 }{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0 +\levelindent0{\leveltext\'02\'03.;}{\levelnumbers\'01;}\rtlch\fcs1 \af0 \ltrch\fcs0 \hres0\chhres0 \fi-360\li2880\jclisttab\tx2880\lin2880 }{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0 +\levelindent0{\leveltext\'02\'04.;}{\levelnumbers\'01;}\rtlch\fcs1 \af0 \ltrch\fcs0 \hres0\chhres0 \fi-360\li3600\jclisttab\tx3600\lin3600 }{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0 +\levelindent0{\leveltext\'02\'05.;}{\levelnumbers\'01;}\rtlch\fcs1 \af0 \ltrch\fcs0 \hres0\chhres0 \fi-360\li4320\jclisttab\tx4320\lin4320 }{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0 +\levelindent0{\leveltext\'02\'06.;}{\levelnumbers\'01;}\rtlch\fcs1 \af0 \ltrch\fcs0 \hres0\chhres0 \fi-360\li5040\jclisttab\tx5040\lin5040 }{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0 +\levelindent0{\leveltext\'02\'07.;}{\levelnumbers\'01;}\rtlch\fcs1 \af0 \ltrch\fcs0 \hres0\chhres0 \fi-360\li5760\jclisttab\tx5760\lin5760 }{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0 +\levelindent0{\leveltext\'02\'08.;}{\levelnumbers\'01;}\rtlch\fcs1 \af0 \ltrch\fcs0 \hres0\chhres0 \fi-360\li6480\jclisttab\tx6480\lin6480 }{\listname ;}\listid1359622474}}{\*\listoverridetable{\listoverride\listid287971728\listoverridecount0\ls1} +{\listoverride\listid1359622474\listoverridecount0\ls2}{\listoverride\listid368185088\listoverridecount0\ls3}}{\*\pgptbl {\pgp\ipgp4\itap0\li0\ri0\sb0\sa0}{\pgp\ipgp6\itap0\li0\ri0\sb0\sa0}{\pgp\ipgp6\itap0\li0\ri0\sb0\sa0}{\pgp\ipgp0\itap0\li0\ri0\sb0 +\sa0}{\pgp\ipgp4\itap0\li0\ri0\sb240\sa0}{\pgp\ipgp4\itap0\li0\ri0\sb0\sa0}{\pgp\ipgp4\itap0\li0\ri0\sb0\sa0}{\pgp\ipgp4\itap0\li0\ri0\sb240\sa0}{\pgp\ipgp11\itap0\li0\ri0\sb0\sa0}{\pgp\ipgp0\itap0\li0\ri0\sb0\sa0}{\pgp\ipgp10\itap0\li0\ri0\sb0\sa0}} +{\*\rsidtbl \rsid875717\rsid1983895\rsid2519781\rsid3149025\rsid3494360\rsid4659932\rsid4797149\rsid4868476\rsid4996014\rsid5776520\rsid5860784\rsid5904406\rsid7688949\rsid7762551\rsid9441335\rsid11619474\rsid11945771\rsid14759587\rsid14952530 +\rsid15803732}{\mmathPr\mmathFont34\mbrkBin0\mbrkBinSub0\msmallFrac0\mdispDef1\mlMargin0\mrMargin0\mdefJc1\mwrapIndent1440\mintLim0\mnaryLim1}{\info{\author \'c3\'e7\'b6\'ac\'c3\'b7}{\operator zjs}{\creatim\yr2016\mo9\dy13\hr11\min24} +{\revtim\yr2022\mo11\dy26\hr11\min38}{\version11}{\edmins206}{\nofpages4}{\nofwords1063}{\nofchars5711}{\*\company Microsoft}{\nofcharsws6761}{\vern32859}}{\*\xmlnstbl {\xmlns1 http://schemas.microsoft.com/office/word/2003/wordml}} +\paperw11906\paperh16838\margl1800\margr1800\margt1440\margb1440\gutter0\ltrsect +\deftab420\ftnbj\aenddoc\trackmoves1\trackformatting1\donotembedsysfont1\relyonvml0\donotembedlingdata0\grfdocevents0\validatexml1\showplaceholdtext0\ignoremixedcontent0\saveinvalidxml0\showxmlerrors1\formshade\horzdoc\dgmargin\dghspace180\dgvspace156 +\dghorigin1800\dgvorigin1440\dghshow0\dgvshow2\jcompress\lnongrid +\viewkind1\viewscale100\splytwnine\ftnlytwnine\htmautsp\useltbaln\alntblind\lytcalctblwd\lyttblrtgr\lnbrkrule\nobrkwrptbl\snaptogridincell\allowfieldendsel\wrppunct\asianbrkrule\rsidroot7762551\newtblstyruls +\nogrowautofit\usenormstyforlist\noindnmbrts\felnbrelev\nocxsptable\indrlsweleven\noafcnsttbl\afelev\utinl\hwelev\spltpgpar\notcvasp\notbrkcnstfrctbl\notvatxbx\krnprsnet\cachedcolbal \nouicompat {\upr{\*\fchars +!%),.:\'3b>?]\'7d\'a1\'e9\'a1\'a7\'a1\'e3\'a1\'a4\'a1\'a6\'a1\'a5\'a8\'44\'a1\'ac\'a1\'af\'a1\'b1\'a1\'ad\'a1\'eb\'a1\'e4\'a1\'e5?\'a1\'e6\'a1\'c3\'a1\'a2\'a1\'a3\'a1\'a8\'a1\'b5\'a1\'b7\'a1\'b9\'a1\'bb\'a1\'bf\'a1\'b3\'a1\'bd\'a8\'95\'a6\'e1\'a6\'e3\'a6\'e7\'a6\'e5\'a6\'eb\'a9\'77\'a9\'79\'a9\'7b\'a3\'a1\'a3\'a2\'a3\'a5\'a3\'a7\'a3\'a9\'a3\'ac\'a3\'ae\'a3\'ba\'a3\'bb\'a3\'bf\'a3\'dd\'a3\'e0\'a3\'fc\'a3\'fd\'a1\'ab\'a1\'e9 +}{\*\ud\uc0{\*\fchars +!%),.:\'3b>?]\'7d{\uc2\u162 \'a1\'e9\'a1\'a7\'a1\'e3\'a1\'a4\'a1\'a6\'a1\'a5\'a8D\'a1\'ac\'a1\'af\'a1\'b1\'a1\'ad\'a1\'eb\'a1\'e4\'a1\'e5}{\uc1\u8250 ?\'a1\'e6\'a1\'c3\'a1\'a2\'a1\'a3\'a1\'a8\'a1\'b5\'a1\'b7\'a1\'b9\'a1\'bb\'a1\'bf\'a1\'b3\'a1\'bd\'a8\'95\'a6\'e1\'a6\'e3\'a6\'e7\'a6\'e5\'a6\'eb\'a9w\'a9y\'a9\'7b\'a3\'a1\'a3\'a2\'a3\'a5\'a3\'a7\'a3\'a9\'a3\'ac\'a3\'ae\'a3\'ba\'a3\'bb\'a3\'bf\'a3\'dd\'a3\'e0\'a3\'fc\'a3\'fd\'a1\'ab\'a1\'e9} +}}}{\upr{\*\lchars $([\'7b\'a1\'ea\'a3\'a4\'a1\'a4\'a1\'ae\'a1\'b0\'a1\'b4\'a1\'b6\'a1\'b8\'a1\'ba\'a1\'be\'a1\'b2\'a1\'bc\'a8\'94\'a9\'76\'a9\'78\'a9\'7a\'a1\'e7\'a3\'a8\'a3\'ae\'a3\'db\'a3\'fb\'a1\'ea\'a3\'a4}{\*\ud\uc0{\*\lchars +$([\'7b{\uc2\u163 \'a1\'ea\u165 \'a3\'a4\'a1\'a4\'a1\'ae\'a1\'b0\'a1\'b4\'a1\'b6\'a1\'b8\'a1\'ba\'a1\'be\'a1\'b2\'a1\'bc\'a8\'94\'a9v\'a9x\'a9z\'a1\'e7\'a3\'a8\'a3\'ae\'a3\'db\'a3\'fb\'a1\'ea\'a3\'a4}}}}\fet0{\*\wgrffmtfilter 2450}\nofeaturethrottle1 +\ilfomacatclnup0{\*\ftnsep \ltrpar \pard\plain \ltrpar\qj \li0\ri0\nowidctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid3494360 \rtlch\fcs1 \af0\afs22\alang1025 \ltrch\fcs0 +\fs21\lang1033\langfe2052\kerning2\loch\af31506\hich\af31506\dbch\af31505\cgrid\langnp1033\langfenp2052 {\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid2519781 \chftnsep +\par }}{\*\ftnsepc \ltrpar \pard\plain \ltrpar\qj \li0\ri0\nowidctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid3494360 \rtlch\fcs1 \af0\afs22\alang1025 \ltrch\fcs0 +\fs21\lang1033\langfe2052\kerning2\loch\af31506\hich\af31506\dbch\af31505\cgrid\langnp1033\langfenp2052 {\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid2519781 \chftnsepc +\par }}{\*\aftnsep \ltrpar \pard\plain \ltrpar\qj \li0\ri0\nowidctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid3494360 \rtlch\fcs1 \af0\afs22\alang1025 \ltrch\fcs0 +\fs21\lang1033\langfe2052\kerning2\loch\af31506\hich\af31506\dbch\af31505\cgrid\langnp1033\langfenp2052 {\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid2519781 \chftnsep +\par }}{\*\aftnsepc \ltrpar \pard\plain \ltrpar\qj \li0\ri0\nowidctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid3494360 \rtlch\fcs1 \af0\afs22\alang1025 \ltrch\fcs0 +\fs21\lang1033\langfe2052\kerning2\loch\af31506\hich\af31506\dbch\af31505\cgrid\langnp1033\langfenp2052 {\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid2519781 \chftnsepc +\par }}\ltrpar \sectd \ltrsect\linex0\headery851\footery992\colsx425\endnhere\sectlinegrid312\sectspecifyl\sftnbj {\*\pnseclvl1\pnucrm\pnstart1\pnindent720\pnhang {\pntxta \dbch .}}{\*\pnseclvl2\pnucltr\pnstart1\pnindent720\pnhang {\pntxta \dbch .}} +{\*\pnseclvl3\pndec\pnstart1\pnindent720\pnhang {\pntxta \dbch .}}{\*\pnseclvl4\pnlcltr\pnstart1\pnindent720\pnhang {\pntxta \dbch )}}{\*\pnseclvl5\pndec\pnstart1\pnindent720\pnhang {\pntxtb \dbch (}{\pntxta \dbch )}}{\*\pnseclvl6 +\pnlcltr\pnstart1\pnindent720\pnhang {\pntxtb \dbch (}{\pntxta \dbch )}}{\*\pnseclvl7\pnlcrm\pnstart1\pnindent720\pnhang {\pntxtb \dbch (}{\pntxta \dbch )}}{\*\pnseclvl8\pnlcltr\pnstart1\pnindent720\pnhang {\pntxtb \dbch (}{\pntxta \dbch )}}{\*\pnseclvl9 +\pnlcrm\pnstart1\pnindent720\pnhang {\pntxtb \dbch (}{\pntxta \dbch )}}\pard\plain \ltrpar\s24\ql \li0\ri0\sb100\sa100\sbauto1\saauto1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid1983895 \cbpat8 \rtlch\fcs1 +\af13\afs24\alang1025 \ltrch\fcs0 \fs24\lang1033\langfe2052\loch\af13\hich\af13\dbch\af13\cgrid\langnp1033\langfenp2052 {\rtlch\fcs1 \af48 \ltrch\fcs0 \f48\fs20\cf18\insrsid5904406 \hich\af48\dbch\af13\loch\f48 This is a test +\hich\af48\dbch\af13\loch\f48 Licens\hich\af48\dbch\af13\loch\f48 e \hich\af48\dbch\af13\loch\f48 Agreement. +\par }{\rtlch\fcs1 \af48 \ltrch\fcs0 \f48\fs20\cf18\insrsid1983895\charrsid11619474 \hich\af48\dbch\af13\loch\f48 Retrieves a string from the specified section in an initialization file. +\par }\pard\plain \ltrpar\qj \li0\ri0\nowidctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid1983895 \rtlch\fcs1 \af0\afs22\alang1025 \ltrch\fcs0 +\fs21\lang1033\langfe2052\kerning2\loch\af31506\hich\af31506\dbch\af31505\cgrid\langnp1033\langfenp2052 {\rtlch\fcs1 \ab\af48 \ltrch\fcs0 \b\f48\fs16\cf18\insrsid1983895\charrsid11619474 \hich\af48\dbch\af31505\loch\f48 Note}{\rtlch\fcs1 \af48 +\ltrch\fcs0 \f48\fs16\cf18\insrsid1983895\charrsid11619474 \~\~\hich\af48\dbch\af31505\loch\f48 This function is provided only for compatibility with 16-bit Windows-based applications. App\hich\af48\dbch\af31505\loch\f48 +lications should store initialization information in the registry. +\par }\pard \ltrpar\qj \li0\ri0\nowidctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid1983895 \cbpat8 {\rtlch\fcs1 \af48 \ltrch\fcs0 \f48\fs16\cf18\insrsid1983895\charrsid11619474 \~ +\par }\pard\plain \ltrpar\s2\ql \li0\ri0\sbauto1\saauto1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\outlinelevel1\adjustright\rin0\lin0\itap0\pararsid1983895 \cbpat8 \rtlch\fcs1 \ab\af13\afs36\alang1025 \ltrch\fcs0 +\b\fs36\lang1033\langfe2052\loch\af13\hich\af13\dbch\af13\cgrid\langnp1033\langfenp2052 {\rtlch\fcs1 \af48 \ltrch\fcs0 \f48\fs24\cf18\insrsid1983895\charrsid11619474 \hich\af48\dbch\af13\loch\f48 Syntax +\par }\pard\plain \ltrpar\qj \li0\ri0\nowidctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid1983895 \rtlch\fcs1 \af0\afs22\alang1025 \ltrch\fcs0 +\fs21\lang1033\langfe2052\kerning2\loch\af31506\hich\af31506\dbch\af31505\cgrid\langnp1033\langfenp2052 {\rtlch\fcs1 \af48 \ltrch\fcs0 \cs25\f48\fs16\cf18\insrsid1983895\charrsid11619474 \hich\af48\dbch\af31505\loch\f48 C++}{\rtlch\fcs1 \af48 \ltrch\fcs0 +\f48\fs16\cf18\insrsid1983895\charrsid11619474 \hich\af48\dbch\af31505\loch\f48 Copy +\par }\pard\plain \ltrpar\s26\ql \li0\ri0\widctlpar\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid1983895 \rtlch\fcs1 +\af13\afs24\alang1025 \ltrch\fcs0 \fs24\lang1033\langfe2052\loch\af13\hich\af13\dbch\af13\cgrid\langnp1033\langfenp2052 {\rtlch\fcs1 \af50 \ltrch\fcs0 \cs29\f50\fs20\cf18\chbrdr\brdrnone\brdrframe1 \insrsid1983895\charrsid11619474 +\hich\af50\dbch\af13\loch\f50 DWORD }{\rtlch\fcs1 \af50 \ltrch\fcs0 \cs30\f50\fs20\cf19\chbrdr\brdrnone\brdrframe1 \insrsid1983895\charrsid11619474 \hich\af50\dbch\af13\loch\f50 GetPrivateProfileString}{\rtlch\fcs1 \af50 \ltrch\fcs0 \cs31\f50\fs20\cf18 +\chbrdr\brdrnone\brdrframe1 \insrsid1983895\charrsid11619474 \hich\af50\dbch\af13\loch\f50 ( +\par \hich\af50\dbch\af13\loch\f50 [in] LPCTSTR lpAppName, +\par \hich\af50\dbch\af13\loch\f50 [in] LPCTSTR lpKeyName, +\par \hich\af50\dbch\af13\loch\f50 [in] LPCTSTR lpDefault, +\par \hich\af50\dbch\af13\loch\f50 [out] LPTSTR lpReturnedString, +\par \hich\af50\dbch\af13\loch\f50 [in] DWORD nSize, +\par \hich\af50\dbch\af13\loch\f50 [\hich\af50\dbch\af13\loch\f50 in] LPCTSTR lpFileName +\par \hich\af50\dbch\af13\loch\f50 )}{\rtlch\fcs1 \af50 \ltrch\fcs0 \cs28\f50\fs20\cf18\chbrdr\brdrnone\brdrframe1 \insrsid1983895\charrsid11619474 \hich\af50\dbch\af13\loch\f50 ; +\par }\pard\plain \ltrpar\s2\ql \li0\ri0\sbauto1\saauto1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\outlinelevel1\adjustright\rin0\lin0\itap0\pararsid1983895 \cbpat8 \rtlch\fcs1 \ab\af13\afs36\alang1025 \ltrch\fcs0 +\b\fs36\lang1033\langfe2052\loch\af13\hich\af13\dbch\af13\cgrid\langnp1033\langfenp2052 {\rtlch\fcs1 \af48 \ltrch\fcs0 \f48\fs24\cf18\insrsid1983895\charrsid11619474 \hich\af48\dbch\af13\loch\f48 Parameters +\par }\pard\plain \ltrpar\s24\ql \li0\ri0\sb100\sa100\sbauto1\saauto1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid1983895 \cbpat8 \rtlch\fcs1 \af13\afs24\alang1025 \ltrch\fcs0 +\fs24\lang1033\langfe2052\loch\af13\hich\af13\dbch\af13\cgrid\langnp1033\langfenp2052 {\rtlch\fcs1 \af50\afs20 \ltrch\fcs0 \cs28\f50\fs15\cf18\insrsid1983895\charrsid11619474 \hich\af50\dbch\af13\loch\f50 [in] lpAppName}{\rtlch\fcs1 \af48 \ltrch\fcs0 +\f48\fs20\cf18\insrsid1983895\charrsid11619474 +\par \hich\af48\dbch\af13\loch\f48 The name of the section containing the key name. If this parameter is\~}{\rtlch\fcs1 \ab\af48 \ltrch\fcs0 \b\f48\fs20\cf18\insrsid1983895\charrsid11619474 \hich\af48\dbch\af13\loch\f48 NULL}{\rtlch\fcs1 \af48 \ltrch\fcs0 +\f48\fs20\cf18\insrsid1983895\charrsid11619474 \hich\af48\dbch\af13\loch\f48 , the\~}{\rtlch\fcs1 \ab\af48 \ltrch\fcs0 \b\f48\fs20\cf18\insrsid1983895\charrsid11619474 \hich\af48\dbch\af13\loch\f48 GetPrivateProfileString}{\rtlch\fcs1 \af48 \ltrch\fcs0 +\f48\fs20\cf18\insrsid1983895\charrsid11619474 \~\hich\af48\dbch\af13\loch\f48 function copies all section names in the file to the supplied buffer. +\par }{\rtlch\fcs1 \af50\afs20 \ltrch\fcs0 \cs28\f50\fs15\cf18\insrsid1983895\charrsid11619474 \hich\af50\dbch\af13\loch\f50 [in] lpKeyName}{\rtlch\fcs1 \af48 \ltrch\fcs0 \f48\fs20\cf18\insrsid1983895\charrsid11619474 +\par \hich\af48\dbch\af13\loch\f48 The name of the key whose associated string is to be retrieved. If this parameter is\~}{\rtlch\fcs1 \ab\af48 \ltrch\fcs0 \b\f48\fs20\cf18\insrsid1983895\charrsid11619474 \hich\af48\dbch\af13\loch\f48 NULL}{\rtlch\fcs1 \af48 +\ltrch\fcs0 \f48\fs20\cf18\insrsid1983895\charrsid11619474 \hich\af48\dbch\af13\loch\f48 , all key names in the section specified by the\~}{\rtlch\fcs1 \ai\af48 \ltrch\fcs0 \i\f48\fs20\cf18\insrsid1983895\charrsid11619474 \hich\af48\dbch\af13\loch\f48 +lpAppName}{\rtlch\fcs1 \af48 \ltrch\fcs0 \f48\fs20\cf18\insrsid1983895\charrsid11619474 \~\hich\af48\dbch\af13\loch\f48 parameter are copied to the buffer specified by the\~}{\rtlch\fcs1 \ai\af48 \ltrch\fcs0 +\i\f48\fs20\cf18\insrsid1983895\charrsid11619474 \hich\af48\dbch\af13\loch\f48 lpReturnedString}{\rtlch\fcs1 \af48 \ltrch\fcs0 \f48\fs20\cf18\insrsid1983895\charrsid11619474 \~\hich\af48\dbch\af13\loch\f48 parameter. +\par }{\rtlch\fcs1 \af50\afs20 \ltrch\fcs0 \cs28\f50\fs15\cf18\insrsid1983895\charrsid11619474 \hich\af50\dbch\af13\loch\f50 [in] lpDefault}{\rtlch\fcs1 \af48 \ltrch\fcs0 \f48\fs20\cf18\insrsid1983895\charrsid11619474 +\par \hich\af48\dbch\af13\loch\f48 A default stri\hich\af48\dbch\af13\loch\f48 ng. If the\~}{\rtlch\fcs1 \ai\af48 \ltrch\fcs0 \i\f48\fs20\cf18\insrsid1983895\charrsid11619474 \hich\af48\dbch\af13\loch\f48 lpKeyName}{\rtlch\fcs1 \af48 \ltrch\fcs0 +\f48\fs20\cf18\insrsid1983895\charrsid11619474 \~\hich\af48\dbch\af13\loch\f48 key cannot be found in the initialization file,\~}{\rtlch\fcs1 \ab\af48 \ltrch\fcs0 \b\f48\fs20\cf18\insrsid1983895\charrsid11619474 \hich\af48\dbch\af13\loch\f48 +GetPrivateProfileString}{\rtlch\fcs1 \af48 \ltrch\fcs0 \f48\fs20\cf18\insrsid1983895\charrsid11619474 \~\hich\af48\dbch\af13\loch\f48 copies the default string to the\~}{\rtlch\fcs1 \ai\af48 \ltrch\fcs0 \i\f48\fs20\cf18\insrsid1983895\charrsid11619474 +\hich\af48\dbch\af13\loch\f48 lpReturnedString}{\rtlch\fcs1 \af48 \ltrch\fcs0 \f48\fs20\cf18\insrsid1983895\charrsid11619474 \~\hich\af48\dbch\af13\loch\f48 buffer. +\par \hich\af48\dbch\af13\loch\f48 If this parameter is\~}{\rtlch\fcs1 \ab\af48 \ltrch\fcs0 \b\f48\fs20\cf18\insrsid1983895\charrsid11619474 \hich\af48\dbch\af13\loch\f48 NULL}{\rtlch\fcs1 \af48 \ltrch\fcs0 \f48\fs20\cf18\insrsid1983895\charrsid11619474 +\hich\af48\dbch\af13\loch\f48 , the default is an empty string, "". +\par \hich\af48\dbch\af13\loch\f48 Avoid specifying a default string with tra\hich\af48\dbch\af13\loch\f48 iling blank characters. The function inserts a\~}{\rtlch\fcs1 \ab\af48 \ltrch\fcs0 \b\f48\fs20\cf18\insrsid1983895\charrsid11619474 +\hich\af48\dbch\af13\loch\f48 null}{\rtlch\fcs1 \af48 \ltrch\fcs0 \f48\fs20\cf18\insrsid1983895\charrsid11619474 \~\hich\af48\dbch\af13\loch\f48 character in the\~}{\rtlch\fcs1 \ai\af48 \ltrch\fcs0 \i\f48\fs20\cf18\insrsid1983895\charrsid11619474 +\hich\af48\dbch\af13\loch\f48 lpReturnedString}{\rtlch\fcs1 \af48 \ltrch\fcs0 \f48\fs20\cf18\insrsid1983895\charrsid11619474 \~\hich\af48\dbch\af13\loch\f48 buffer to strip any trailing blanks. +\par }{\rtlch\fcs1 \af50\afs20 \ltrch\fcs0 \cs28\f50\fs15\cf18\insrsid1983895\charrsid11619474 \hich\af50\dbch\af13\loch\f50 [out] lpReturnedString}{\rtlch\fcs1 \af48 \ltrch\fcs0 \f48\fs20\cf18\insrsid1983895\charrsid11619474 +\par \hich\af48\dbch\af13\loch\f48 A pointer to the buffer that receives the retrieved string. +\par }{\rtlch\fcs1 \af50\afs20 \ltrch\fcs0 \cs28\f50\fs15\cf18\insrsid1983895\charrsid11619474 \hich\af50\dbch\af13\loch\f50 [in] nSize}{\rtlch\fcs1 \af48 \ltrch\fcs0 \f48\fs20\cf18\insrsid1983895\charrsid11619474 +\par \hich\af48\dbch\af13\loch\f48 The size of the buffer pointed to by th\hich\af48\dbch\af13\loch\f48 e\~}{\rtlch\fcs1 \ai\af48 \ltrch\fcs0 \i\f48\fs20\cf18\insrsid1983895\charrsid11619474 \hich\af48\dbch\af13\loch\f48 lpReturnedString}{\rtlch\fcs1 \af48 +\ltrch\fcs0 \f48\fs20\cf18\insrsid1983895\charrsid11619474 \~\hich\af48\dbch\af13\loch\f48 parameter, in characters. +\par }{\rtlch\fcs1 \af50\afs20 \ltrch\fcs0 \cs28\f50\fs15\cf18\insrsid1983895\charrsid11619474 \hich\af50\dbch\af13\loch\f50 [in] lpFileName}{\rtlch\fcs1 \af48 \ltrch\fcs0 \f48\fs20\cf18\insrsid1983895\charrsid11619474 +\par \hich\af48\dbch\af13\loch\f48 The name of the initialization file. If this parameter does not contain a full path to the file, the system searches for the file in the Windows directory. +\par }\pard\plain \ltrpar\s2\ql \li0\ri0\sbauto1\saauto1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\outlinelevel1\adjustright\rin0\lin0\itap0\pararsid1983895 \cbpat8 \rtlch\fcs1 \ab\af13\afs36\alang1025 \ltrch\fcs0 +\b\fs36\lang1033\langfe2052\loch\af13\hich\af13\dbch\af13\cgrid\langnp1033\langfenp2052 {\rtlch\fcs1 \af48 \ltrch\fcs0 \f48\fs24\cf18\insrsid1983895\charrsid11619474 \hich\af48\dbch\af13\loch\f48 Return value +\par }\pard\plain \ltrpar\s24\ql \li0\ri0\sb100\sa100\sbauto1\saauto1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid1983895 \cbpat8 \rtlch\fcs1 \af13\afs24\alang1025 \ltrch\fcs0 +\fs24\lang1033\langfe2052\loch\af13\hich\af13\dbch\af13\cgrid\langnp1033\langfenp2052 {\rtlch\fcs1 \af48 \ltrch\fcs0 \f48\fs20\cf18\insrsid1983895\charrsid11619474 \hich\af48\dbch\af13\loch\f48 The return value is the nu\hich\af48\dbch\af13\loch\f48 +mber of characters copied to the buffer, not including the terminating\~}{\rtlch\fcs1 \ab\af48 \ltrch\fcs0 \b\f48\fs20\cf18\insrsid1983895\charrsid11619474 \hich\af48\dbch\af13\loch\f48 null}{\rtlch\fcs1 \af48 \ltrch\fcs0 +\f48\fs20\cf18\insrsid1983895\charrsid11619474 \~\hich\af48\dbch\af13\loch\f48 character. +\par \hich\af48\dbch\af13\loch\f48 If neither\~}{\rtlch\fcs1 \ai\af48 \ltrch\fcs0 \i\f48\fs20\cf18\insrsid1983895\charrsid11619474 \hich\af48\dbch\af13\loch\f48 lpAppName}{\rtlch\fcs1 \af48 \ltrch\fcs0 \f48\fs20\cf18\insrsid1983895\charrsid11619474 \~ +\hich\af48\dbch\af13\loch\f48 nor\~}{\rtlch\fcs1 \ai\af48 \ltrch\fcs0 \i\f48\fs20\cf18\insrsid1983895\charrsid11619474 \hich\af48\dbch\af13\loch\f48 lpKeyName}{\rtlch\fcs1 \af48 \ltrch\fcs0 \f48\fs20\cf18\insrsid1983895\charrsid11619474 \~ +\hich\af48\dbch\af13\loch\f48 is\~}{\rtlch\fcs1 \ab\af48 \ltrch\fcs0 \b\f48\fs20\cf18\insrsid1983895\charrsid11619474 \hich\af48\dbch\af13\loch\f48 NULL}{\rtlch\fcs1 \af48 \ltrch\fcs0 \f48\fs20\cf18\insrsid1983895\charrsid11619474 \~ +\hich\af48\dbch\af13\loch\f48 and the supplied destination buffer is too small to hold the requested string, the string is truncated and followed by a\~}{\rtlch\fcs1 \ab\af48 \ltrch\fcs0 \b\f48\fs20\cf18\insrsid1983895\charrsid11619474 +\hich\af48\dbch\af13\loch\f48 null}{\rtlch\fcs1 \af48 \ltrch\fcs0 \f48\fs20\cf18\insrsid1983895\charrsid11619474 \~\hich\af48\dbch\af13\loch\f48 character, and the return value is equal to\~}{\rtlch\fcs1 \ai\af48 \ltrch\fcs0 +\i\f48\fs20\cf18\insrsid1983895\charrsid11619474 \hich\af48\dbch\af13\loch\f48 nSize}{\rtlch\fcs1 \af48 \ltrch\fcs0 \f48\fs20\cf18\insrsid1983895\charrsid11619474 \~\hich\af48\dbch\af13\loch\f48 minus one. +\par \hich\af48\dbch\af13\loch\f48 If either\~}{\rtlch\fcs1 \ai\af48 \ltrch\fcs0 \i\f48\fs20\cf18\insrsid1983895\charrsid11619474 \hich\af48\dbch\af13\loch\f48 lpAppName}{\rtlch\fcs1 \af48 \ltrch\fcs0 \f48\fs20\cf18\insrsid1983895\charrsid11619474 \~ +\hich\af48\dbch\af13\loch\f48 or\~}{\rtlch\fcs1 \ai\af48 \ltrch\fcs0 \i\f48\fs20\cf18\insrsid1983895\charrsid11619474 \hich\af48\dbch\af13\loch\f48 lpKeyName}{\rtlch\fcs1 \af48 \ltrch\fcs0 \f48\fs20\cf18\insrsid1983895\charrsid11619474 \~ +\hich\af48\dbch\af13\loch\f48 is\~}{\rtlch\fcs1 \ab\af48 \ltrch\fcs0 \b\f48\fs20\cf18\insrsid1983895\charrsid11619474 \hich\af48\dbch\af13\loch\f48 NULL}{\rtlch\fcs1 \af48 \ltrch\fcs0 \f48\fs20\cf18\insrsid1983895\charrsid11619474 \~ +\hich\af48\dbch\af13\loch\f48 and the supplied destination buffer is too small to hold all the strings, the last string is truncated and followed by two\~}{\rtlch\fcs1 \ab\af48 \ltrch\fcs0 \b\f48\fs20\cf18\insrsid1983895\charrsid11619474 +\hich\af48\dbch\af13\loch\f48 null}{\rtlch\fcs1 \af48 \ltrch\fcs0 \f48\fs20\cf18\insrsid1983895\charrsid11619474 \~\hich\af48\dbch\af13\loch\f48 characters. In this case, \hich\af48\dbch\af13\loch\f48 the return value is equal to\~}{\rtlch\fcs1 \ai\af48 +\ltrch\fcs0 \i\f48\fs20\cf18\insrsid1983895\charrsid11619474 \hich\af48\dbch\af13\loch\f48 nSize}{\rtlch\fcs1 \af48 \ltrch\fcs0 \f48\fs20\cf18\insrsid1983895\charrsid11619474 \~\hich\af48\dbch\af13\loch\f48 minus two. +\par \hich\af48\dbch\af13\loch\f48 In the event the initialization file specified by\~}{\rtlch\fcs1 \ai\af48 \ltrch\fcs0 \i\f48\fs20\cf18\insrsid1983895\charrsid11619474 \hich\af48\dbch\af13\loch\f48 lpFileName}{\rtlch\fcs1 \af48 \ltrch\fcs0 +\f48\fs20\cf18\insrsid1983895\charrsid11619474 \~\hich\af48\dbch\af13\loch\f48 is not found, or contains invalid values, calling\~}{\rtlch\fcs1 \ab\af48 \ltrch\fcs0 \b\f48\fs20\cf18\insrsid1983895\charrsid11619474 \hich\af48\dbch\af13\loch\f48 +GetLastError}{\rtlch\fcs1 \af48 \ltrch\fcs0 \f48\fs20\cf18\insrsid1983895\charrsid11619474 \~\hich\af48\dbch\af13\loch\f48 will return '0x2' (File Not Found). To retrieve extended error information, call\~}{\field\fldedit{\*\fldinst {\rtlch\fcs1 \af48 +\ltrch\fcs0 \f48\fs20\cf18\insrsid1983895\charrsid11619474 \hich\af48\dbch\af13\loch\f48 HYPE\hich\af48\dbch\af13\loch\f48 RLINK "https://learn.microsoft.com/en-us/windows/win32/api/errhandlingapi/nf-errhandlingapi-getlasterror" }{\rtlch\fcs1 \af48 +\ltrch\fcs0 \f48\fs20\cf18\insrsid9441335\charrsid11619474 {\*\datafield +00d0c9ea79f9bace118c8200aa004ba90b0200000003000000e0c9ea79f9bace118c8200aa004ba90bdc000000680074007400700073003a002f002f006c006500610072006e002e006d006900630072006f0073006f00660074002e0063006f006d002f0065006e002d00750073002f00770069006e0064006f0077007300 +2f00770069006e00330032002f006100700069002f00650072007200680061006e0064006c0069006e0067006100700069002f006e0066002d00650072007200680061006e0064006c0069006e0067006100700069002d006700650074006c006100730074006500720072006f0072000000795881f43b1d7f48af2c825dc4 +85276300000000a5ab0000ff006d}}}{\fldrslt {\rtlch\fcs1 \af48 \ltrch\fcs0 \cs21\f48\fs20\ul\cf17\insrsid1983895\charrsid11619474 \hich\af48\dbch\af13\loch\f48 GetLastError}}}\sectd \ltrsect +\linex0\headery851\footery992\colsx425\endnhere\sectlinegrid312\sectspecifyl\sftnbj {\rtlch\fcs1 \af48 \ltrch\fcs0 \f48\fs20\cf18\insrsid1983895\charrsid11619474 . +\par }\pard\plain \ltrpar\s2\ql \li0\ri0\sbauto1\saauto1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\outlinelevel1\adjustright\rin0\lin0\itap0\pararsid1983895 \cbpat8 \rtlch\fcs1 \ab\af13\afs36\alang1025 \ltrch\fcs0 +\b\fs36\lang1033\langfe2052\loch\af13\hich\af13\dbch\af13\cgrid\langnp1033\langfenp2052 {\rtlch\fcs1 \af48 \ltrch\fcs0 \f48\fs24\cf18\insrsid1983895\charrsid11619474 \hich\af48\dbch\af13\loch\f48 Remarks +\par }\pard\plain \ltrpar\s24\ql \li0\ri0\sb100\sa100\sbauto1\saauto1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid1983895 \cbpat8 \rtlch\fcs1 \af13\afs24\alang1025 \ltrch\fcs0 +\fs24\lang1033\langfe2052\loch\af13\hich\af13\dbch\af13\cgrid\langnp1033\langfenp2052 {\rtlch\fcs1 \af48 \ltrch\fcs0 \f48\fs20\cf18\insrsid1983895\charrsid11619474 \hich\af48\dbch\af13\loch\f48 The\~}{\rtlch\fcs1 \ab\af48 \ltrch\fcs0 +\b\f48\fs20\cf18\insrsid1983895\charrsid11619474 \hich\af48\dbch\af13\loch\f48 GetPrivateProfileString}{\rtlch\fcs1 \af48 \ltrch\fcs0 \f48\fs20\cf18\insrsid1983895\charrsid11619474 \~\hich\af48\dbch\af13\loch\f48 +function searches the specified initialization file for a key that matches the name specified by the\~}{\rtlch\fcs1 \ai\af48 \ltrch\fcs0 \i\f48\fs20\cf18\insrsid1983895\charrsid11619474 \hich\af48\dbch\af13\loch\f48 lpKeyName}{\rtlch\fcs1 \af48 +\ltrch\fcs0 \f48\fs20\cf18\insrsid1983895\charrsid11619474 \~\hich\af48\dbch\af13\loch\f48 parameter under the section heading specified by the\~}{\rtlch\fcs1 \ai\af48 \ltrch\fcs0 \i\f48\fs20\cf18\insrsid1983895\charrsid11619474 +\hich\af48\dbch\af13\loch\f48 lpAppName}{\rtlch\fcs1 \af48 \ltrch\fcs0 \f48\fs20\cf18\insrsid1983895\charrsid11619474 \~\hich\af48\dbch\af13\loch\f48 par\hich\af48\dbch\af13\loch\f48 +ameter. If it finds the key, the function copies the corresponding string to the buffer. If the key does not exist, the function copies the default character string specified by the\~}{\rtlch\fcs1 \ai\af48 \ltrch\fcs0 +\i\f48\fs20\cf18\insrsid1983895\charrsid11619474 \hich\af48\dbch\af13\loch\f48 lpDefault}{\rtlch\fcs1 \af48 \ltrch\fcs0 \f48\fs20\cf18\insrsid1983895\charrsid11619474 \~\hich\af48\dbch\af13\loch\f48 +parameter. A section in the initialization file must have the fo\hich\af48\dbch\af13\loch\f48 llowing form: +\par }\pard\plain \ltrpar\qj \li0\ri0\nowidctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid1983895 \rtlch\fcs1 \af0\afs22\alang1025 \ltrch\fcs0 +\fs21\lang1033\langfe2052\kerning2\loch\af31506\hich\af31506\dbch\af31505\cgrid\langnp1033\langfenp2052 {\rtlch\fcs1 \af48 \ltrch\fcs0 \cs25\f48\fs16\cf18\insrsid1983895\charrsid11619474 \hich\af48\dbch\af31505\loch\f48 syntax}{\rtlch\fcs1 \af48 +\ltrch\fcs0 \f48\fs16\cf18\insrsid1983895\charrsid11619474 \hich\af48\dbch\af31505\loch\f48 Copy +\par }\pard\plain \ltrpar\s26\ql \li0\ri0\widctlpar\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid1983895 \rtlch\fcs1 +\af13\afs24\alang1025 \ltrch\fcs0 \fs24\lang1033\langfe2052\loch\af13\hich\af13\dbch\af13\cgrid\langnp1033\langfenp2052 {\rtlch\fcs1 \af50 \ltrch\fcs0 \cs28\f50\fs20\cf18\chbrdr\brdrnone\brdrframe1 \insrsid1983895\charrsid11619474 +\hich\af50\dbch\af13\loch\f50 [section] +\par \hich\af50\dbch\af13\loch\f50 key=string +\par \hich\af50\dbch\af13\loch\f50 . +\par \hich\af50\dbch\af13\loch\f50 . +\par \hich\af50\dbch\af13\loch\f50 . +\par }\pard\plain \ltrpar\s24\ql \li0\ri0\sb100\sa100\sbauto1\saauto1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid1983895 \cbpat8 \rtlch\fcs1 \af13\afs24\alang1025 \ltrch\fcs0 +\fs24\lang1033\langfe2052\loch\af13\hich\af13\dbch\af13\cgrid\langnp1033\langfenp2052 {\rtlch\fcs1 \af48 \ltrch\fcs0 \f48\fs20\cf18\insrsid1983895\charrsid11619474 \hich\af48\dbch\af13\loch\f48 If\~}{\rtlch\fcs1 \ai\af48 \ltrch\fcs0 +\i\f48\fs20\cf18\insrsid1983895\charrsid11619474 \hich\af48\dbch\af13\loch\f48 lpAppName}{\rtlch\fcs1 \af48 \ltrch\fcs0 \f48\fs20\cf18\insrsid1983895\charrsid11619474 \~\hich\af48\dbch\af13\loch\f48 is\~}{\rtlch\fcs1 \ab\af48 \ltrch\fcs0 +\b\f48\fs20\cf18\insrsid1983895\charrsid11619474 \hich\af48\dbch\af13\loch\f48 NULL}{\rtlch\fcs1 \af48 \ltrch\fcs0 \f48\fs20\cf18\insrsid1983895\charrsid11619474 ,\~}{\rtlch\fcs1 \ab\af48 \ltrch\fcs0 \b\f48\fs20\cf18\insrsid1983895\charrsid11619474 +\hich\af48\dbch\af13\loch\f48 GetPrivateProfileString}{\rtlch\fcs1 \af48 \ltrch\fcs0 \f48\fs20\cf18\insrsid1983895\charrsid11619474 \~\hich\af48\dbch\af13\loch\f48 copies all section names in the specified file to the supplied buffer. If\~}{\rtlch\fcs1 +\ai\af48 \ltrch\fcs0 \i\f48\fs20\cf18\insrsid1983895\charrsid11619474 \hich\af48\dbch\af13\loch\f48 lpKeyName}{\rtlch\fcs1 \af48 \ltrch\fcs0 \f48\fs20\cf18\insrsid1983895\charrsid11619474 \~\hich\af48\dbch\af13\loch\f48 is\~}{\rtlch\fcs1 \ab\af48 +\ltrch\fcs0 \b\f48\fs20\cf18\insrsid1983895\charrsid11619474 \hich\af48\dbch\af13\loch\f48 NULL}{\rtlch\fcs1 \af48 \ltrch\fcs0 \f48\fs20\cf18\insrsid1983895\charrsid11619474 \hich\af48\dbch\af13\loch\f48 , the functi\hich\af48\dbch\af13\loch\f48 +on copies all key names in the specified section to the supplied buffer. An application can use this method to enumerate all of the sections and keys in a file. In either case, each string is followed by a\~}{\rtlch\fcs1 \ab\af48 \ltrch\fcs0 +\b\f48\fs20\cf18\insrsid1983895\charrsid11619474 \hich\af48\dbch\af13\loch\f48 null}{\rtlch\fcs1 \af48 \ltrch\fcs0 \f48\fs20\cf18\insrsid1983895\charrsid11619474 \~\hich\af48\dbch\af13\loch\f48 character and the final string is followed by +\hich\af48\dbch\af13\loch\f48 a second\~}{\rtlch\fcs1 \ab\af48 \ltrch\fcs0 \b\f48\fs20\cf18\insrsid1983895\charrsid11619474 \hich\af48\dbch\af13\loch\f48 null}{\rtlch\fcs1 \af48 \ltrch\fcs0 \f48\fs20\cf18\insrsid1983895\charrsid11619474 \~ +\hich\af48\dbch\af13\loch\f48 character. If the supplied destination buffer is too small to hold all the strings, the last string is truncated and followed by two\~}{\rtlch\fcs1 \ab\af48 \ltrch\fcs0 \b\f48\fs20\cf18\insrsid1983895\charrsid11619474 +\hich\af48\dbch\af13\loch\f48 null}{\rtlch\fcs1 \af48 \ltrch\fcs0 \f48\fs20\cf18\insrsid1983895\charrsid11619474 \~\hich\af48\dbch\af13\loch\f48 characters. +\par \hich\af48\dbch\af13\loch\f48 If the string associated with\~}{\rtlch\fcs1 \ai\af48 \ltrch\fcs0 \i\f48\fs20\cf18\insrsid1983895\charrsid11619474 \hich\af48\dbch\af13\loch\f48 lpKeyName}{\rtlch\fcs1 \af48 \ltrch\fcs0 +\f48\fs20\cf18\insrsid1983895\charrsid11619474 \~\hich\af48\dbch\af13\loch\f48 is enclosed in single or double quotation marks, th\hich\af48\dbch\af13\loch\f48 e marks are discarded when the\~}{\rtlch\fcs1 \ab\af48 \ltrch\fcs0 +\b\f48\fs20\cf18\insrsid1983895\charrsid11619474 \hich\af48\dbch\af13\loch\f48 GetPrivateProfileString}{\rtlch\fcs1 \af48 \ltrch\fcs0 \f48\fs20\cf18\insrsid1983895\charrsid11619474 \~\hich\af48\dbch\af13\loch\f48 function retrieves the string. +\par \hich\af48\dbch\af13\loch\f48 The\~}{\rtlch\fcs1 \ab\af48 \ltrch\fcs0 \b\f48\fs20\cf18\insrsid1983895\charrsid11619474 \hich\af48\dbch\af13\loch\f48 GetPrivateProfileString}{\rtlch\fcs1 \af48 \ltrch\fcs0 \f48\fs20\cf18\insrsid1983895\charrsid11619474 \~ +\hich\af48\dbch\af13\loch\f48 function is not case-sensitive; the strings can be a combination of uppercase and lowercase letters. +\par \hich\af48\dbch\af13\loch\f48 To retrieve a string from the Win.ini fil\hich\af48\dbch\af13\loch\f48 e, use the\~}{\field\fldedit{\*\fldinst {\rtlch\fcs1 \af48 \ltrch\fcs0 \f48\fs20\cf18\insrsid1983895\charrsid11619474 \hich\af48\dbch\af13\loch\f48 + HYPERLINK "https://learn.microsoft.com/en-us/windows/desktop/api/winbase/nf-winbase-getprofilestringa" }{\rtlch\fcs1 \af48 \ltrch\fcs0 \f48\fs20\cf18\insrsid9441335\charrsid11619474 {\*\datafield +00d0c9ea79f9bace118c8200aa004ba90b0200000003000000e0c9ea79f9bace118c8200aa004ba90bce000000680074007400700073003a002f002f006c006500610072006e002e006d006900630072006f0073006f00660074002e0063006f006d002f0065006e002d00750073002f00770069006e0064006f0077007300 +2f006400650073006b0074006f0070002f006100700069002f00770069006e0062006100730065002f006e0066002d00770069006e0062006100730065002d00670065007400700072006f00660069006c00650073007400720069006e00670061000000795881f43b1d7f48af2c825dc485276300000000a5ab0000ff0064} +}}{\fldrslt {\rtlch\fcs1 \af48 \ltrch\fcs0 \cs21\f48\fs20\ul\cf17\insrsid1983895\charrsid11619474 \hich\af48\dbch\af13\loch\f48 GetProfileString}}}\sectd \ltrsect\linex0\headery851\footery992\colsx425\endnhere\sectlinegrid312\sectspecifyl\sftnbj { +\rtlch\fcs1 \af48 \ltrch\fcs0 \f48\fs20\cf18\insrsid1983895\charrsid11619474 \~\hich\af48\dbch\af13\loch\f48 function. +\par \hich\af48\dbch\af13\loch\f48 The system maps most .ini file references to the registry, using the mapping defined under the following registry key:}{\rtlch\fcs1 \ab\af48 \ltrch\fcs0 \b\f48\fs20\cf18\insrsid1983895\charrsid11619474 +\hich\af48\dbch\af13\loch\f48 HKEY_LOCAL_MACHINE}{\rtlch\fcs1 \af48 \ltrch\fcs0 \f48\fs20\cf18\insrsid1983895\charrsid11619474 \\}{\rtlch\fcs1 \ab\af48 \ltrch\fcs0 \b\f48\fs20\cf18\insrsid1983895\charrsid11619474 \hich\af48\dbch\af13\loch\f48 SOFTWARE}{ +\rtlch\fcs1 \af48 \ltrch\fcs0 \f48\fs20\cf18\insrsid1983895\charrsid11619474 \\}{\rtlch\fcs1 \ab\af48 \ltrch\fcs0 \b\f48\fs20\cf18\insrsid1983895\charrsid11619474 \hich\af48\dbch\af13\loch\f48 Microsoft}{\rtlch\fcs1 \af48 \ltrch\fcs0 +\f48\fs20\cf18\insrsid1983895\charrsid11619474 \\}{\rtlch\fcs1 \ab\af48 \ltrch\fcs0 \b\f48\fs20\cf18\insrsid1983895\charrsid11619474 \hich\af48\dbch\af13\loch\f48 Windows NT}{\rtlch\fcs1 \af48 \ltrch\fcs0 \f48\fs20\cf18\insrsid1983895\charrsid11619474 \\} +{\rtlch\fcs1 \ab\af48 \ltrch\fcs0 \b\f48\fs20\cf18\insrsid1983895\charrsid11619474 \hich\af48\dbch\af13\loch\f48 CurrentVersion}{\rtlch\fcs1 \af48 \ltrch\fcs0 \f48\fs20\cf18\insrsid1983895\charrsid11619474 \\}{\rtlch\fcs1 \ab\af48 \ltrch\fcs0 +\b\f48\fs20\cf18\insrsid1983895\charrsid11619474 \hich\af48\dbch\af13\loch\f48 IniFileMapping}{\rtlch\fcs1 \af48 \ltrch\fcs0 \f48\fs20\cf18\insrsid1983895\charrsid11619474 +\par \hich\af48\dbch\af13\loch\f48 This ma\hich\af48\dbch\af13\loch\f48 +pping is likely if an application modifies system-component initialization files, such as Control.ini, System.ini, and Winfile.ini. In these cases, the function retrieves information from the registry, not from the initialization file; the change in the s +\hich\af48\dbch\af13\loch\f48 t\hich\af48\dbch\af13\loch\f48 orage location has no effect on the function's behavior. +\par \hich\af48\dbch\af13\loch\f48 The profile functions use the following steps to locate initialization information: +\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af0\afs22 \ltrch\fcs0 \fs16\cf18\kerning2\loch\af48\hich\af48\dbch\af31505\insrsid1983895\charrsid11619474 \hich\af48\dbch\af31505\loch\f48 1.\tab}}\pard\plain \ltrpar\ql \fi-360\li570\ri0\widctlpar +\jclisttab\tx720\wrapdefault\aspalpha\aspnum\faauto\ls2\adjustright\rin0\lin570\itap0\pararsid1983895 \cbpat8 \rtlch\fcs1 \af0\afs22\alang1025 \ltrch\fcs0 +\fs21\lang1033\langfe2052\kerning2\loch\af31506\hich\af31506\dbch\af31505\cgrid\langnp1033\langfenp2052 {\rtlch\fcs1 \af48 \ltrch\fcs0 \f48\fs16\cf18\insrsid1983895\charrsid11619474 \hich\af48\dbch\af31505\loch\f48 +Look in the registry for the name of the initialization file under the\~}{\rtlch\fcs1 \ab\af48 \ltrch\fcs0 \b\f48\fs16\cf18\insrsid1983895\charrsid11619474 \hich\af48\dbch\af31505\loch\f48 IniFileMapping}{\rtlch\fcs1 \af48 \ltrch\fcs0 +\f48\fs16\cf18\insrsid1983895\charrsid11619474 \~\hich\af48\dbch\af31505\loch\f48 key. +\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af0\afs22 \ltrch\fcs0 \fs16\cf18\kerning2\loch\af48\hich\af48\dbch\af31505\insrsid1983895\charrsid11619474 \hich\af48\dbch\af31505\loch\f48 2.\tab}\hich\af48\dbch\af31505\loch\f48 Look for th +\hich\af48\dbch\af31505\loch\f48 e section name specified by\~}{\rtlch\fcs1 \ai\af48 \ltrch\fcs0 \i\f48\fs16\cf18\insrsid1983895\charrsid11619474 \hich\af48\dbch\af31505\loch\f48 lpAppName}{\rtlch\fcs1 \af48 \ltrch\fcs0 +\f48\fs16\cf18\insrsid1983895\charrsid11619474 \hich\af48\dbch\af31505\loch\f48 . This will be a named value under the key that has the name of the initialization file, or a subkey with this name, or the name will not exist as either a value or subkey. + +\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af0\afs22 \ltrch\fcs0 \fs16\cf18\kerning2\loch\af48\hich\af48\dbch\af31505\insrsid1983895\charrsid11619474 \hich\af48\dbch\af31505\loch\f48 3.\tab}\hich\af48\dbch\af31505\loch\f48 If the section name specified by +\~}{\rtlch\fcs1 \ai\af48 \ltrch\fcs0 \i\f48\fs16\cf18\insrsid1983895\charrsid11619474 \hich\af48\dbch\af31505\loch\f48 lpAppName}{\rtlch\fcs1 \af48 \ltrch\fcs0 \f48\fs16\cf18\insrsid1983895\charrsid11619474 \~\hich\af48\dbch\af31505\loch\f48 +is a named value, then that value specifies where in the registry you will find the keys for the section. +\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af0\afs22 \ltrch\fcs0 \fs16\cf18\kerning2\loch\af48\hich\af48\dbch\af31505\insrsid1983895\charrsid11619474 \hich\af48\dbch\af31505\loch\f48 4.\tab}\hich\af48\dbch\af31505\loch\f48 If the section name specified by +\~}{\rtlch\fcs1 \ai\af48 \ltrch\fcs0 \i\f48\fs16\cf18\insrsid1983895\charrsid11619474 \hich\af48\dbch\af31505\loch\f48 lpAppName}{\rtlch\fcs1 \af48 \ltrch\fcs0 \f48\fs16\cf18\insrsid1983895\charrsid11619474 \~\hich\af48\dbch\af31505\loch\f48 +is a subkey, then named values under that subkey specify where in the registry you will find the keys fo\hich\af48\dbch\af31505\loch\f48 +r the section. If the key you are looking for does not exist as a named value, then there will be an unnamed value (shown as\~}{\rtlch\fcs1 \ab\af48 \ltrch\fcs0 \b\f48\fs16\cf18\insrsid1983895\charrsid11619474 \hich\af48\dbch\af31505\loch\f48 }{ +\rtlch\fcs1 \af48 \ltrch\fcs0 \f48\fs16\cf18\insrsid1983895\charrsid11619474 \hich\af48\dbch\af31505\loch\f48 ) that specifies the default location in the registry where you will find the key. +\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af0\afs22 \ltrch\fcs0 \fs16\cf18\kerning2\loch\af48\hich\af48\dbch\af31505\insrsid1983895\charrsid11619474 \hich\af48\dbch\af31505\loch\f48 5.\tab}\hich\af48\dbch\af31505\loch\f48 If the section name specified by +\~}{\rtlch\fcs1 \ai\af48 \ltrch\fcs0 \i\f48\fs16\cf18\insrsid1983895\charrsid11619474 \hich\af48\dbch\af31505\loch\f48 lpA\hich\af48\dbch\af31505\loch\f48 ppName}{\rtlch\fcs1 \af48 \ltrch\fcs0 \f48\fs16\cf18\insrsid1983895\charrsid11619474 \~ +\hich\af48\dbch\af31505\loch\f48 does not exist as a named value or as a subkey, then there will be an unnamed value (shown as\~}{\rtlch\fcs1 \ab\af48 \ltrch\fcs0 \b\f48\fs16\cf18\insrsid1983895\charrsid11619474 \hich\af48\dbch\af31505\loch\f48 } +{\rtlch\fcs1 \af48 \ltrch\fcs0 \f48\fs16\cf18\insrsid1983895\charrsid11619474 \hich\af48\dbch\af31505\loch\f48 ) that specifies the default location in the registry where you will find the keys for the section. +\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af0\afs22 \ltrch\fcs0 \fs16\cf18\kerning2\loch\af48\hich\af48\dbch\af31505\insrsid1983895\charrsid11619474 \hich\af48\dbch\af31505\loch\f48 6.\tab}\hich\af48\dbch\af31505\loch\f48 +If there is no subkey or entry for the sect\hich\af48\dbch\af31505\loch\f48 ion name, then look for the actual initialization file on the disk and read its contents. +\par }\pard \ltrpar\qj \li0\ri0\nowidctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid1983895 {\rtlch\fcs1 \af48 \ltrch\fcs0 \f48\fs16\cf18\chshdng0\chcfpat0\chcbpat8\insrsid1983895\charrsid11619474 +\hich\af48\dbch\af31505\loch\f48 When looking at values in the registry that specify other registry locations, there are several prefixes that change the behavior of the .ini file mapping:}{\rtlch\fcs1 \af13 \ltrch\fcs0 +\fs16\loch\af13\dbch\af13\insrsid1983895\charrsid11619474 +\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af48\afs22 \ltrch\fcs0 \fs20\cf18\kerning2\loch\af3\hich\af3\dbch\af31505\insrsid1983895\charrsid11619474 \loch\af3\dbch\af31505\hich\f3 \'b7\tab}}\pard \ltrpar\ql \fi-360\li570\ri0\widctlpar +\jclisttab\tx720\wrapdefault\aspalpha\aspnum\faauto\ls3\adjustright\rin0\lin570\itap0\pararsid1983895 \cbpat8 {\rtlch\fcs1 \af48 \ltrch\fcs0 \f48\fs16\cf18\insrsid1983895\charrsid11619474 \hich\af48\dbch\af31505\loch\f48 ! - this +\hich\af48\dbch\af31505\loch\f48 character forces all writes to go both to the registry and to the .ini file on disk. +\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af48\afs22 \ltrch\fcs0 \fs20\cf18\kerning2\loch\af3\hich\af3\dbch\af31505\insrsid1983895\charrsid11619474 \loch\af3\dbch\af31505\hich\f3 \'b7\tab}\hich\af48\dbch\af31505\loch\f48 +# - this character causes the registry value to be set to the value in the Windows 3.1 .ini file when a new user logs in for the first time after setup. +\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af48\afs22 \ltrch\fcs0 \fs20\cf18\kerning2\loch\af3\hich\af3\dbch\af31505\insrsid1983895\charrsid11619474 \loch\af3\dbch\af31505\hich\f3 \'b7\tab}\hich\af48\dbch\af31505\loch\f48 @ - this char +\hich\af48\dbch\af31505\loch\f48 acter prevents any reads from going to the .ini file on disk if the requested data is not found in the registry. +\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af48\afs22 \ltrch\fcs0 \fs20\cf18\kerning2\loch\af3\hich\af3\dbch\af31505\insrsid1983895\charrsid11619474 \loch\af3\dbch\af31505\hich\f3 \'b7\tab}\hich\af48\dbch\af31505\loch\f48 USR: - this prefix stands for\~}{ +\rtlch\fcs1 \ab\af48 \ltrch\fcs0 \b\f48\fs16\cf18\insrsid1983895\charrsid11619474 \hich\af48\dbch\af31505\loch\f48 HKEY_CURRENT_USER}{\rtlch\fcs1 \af48 \ltrch\fcs0 \f48\fs16\cf18\insrsid1983895\charrsid11619474 \hich\af48\dbch\af31505\loch\f48 +, and the text after the prefix is relative to that key. +\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af48\afs22 \ltrch\fcs0 \fs20\cf18\kerning2\loch\af3\hich\af3\dbch\af31505\insrsid1983895\charrsid11619474 \loch\af3\dbch\af31505\hich\f3 \'b7\tab}\hich\af48\dbch\af31505\loch\f48 SYS: - this prefix stands for\~}{ +\rtlch\fcs1 \ab\af48 \ltrch\fcs0 \b\f48\fs16\cf18\insrsid1983895\charrsid11619474 \hich\af48\dbch\af31505\loch\f48 HKEY_LOCAL_MACHINE\\SOFTWARE}{\rtlch\fcs1 \af48 \ltrch\fcs0 \f48\fs16\cf18\insrsid1983895\charrsid11619474 \hich\af48\dbch\af31505\loch\f48 +, and the text after the prefix is relative to that key. +\par }\pard \ltrpar\qj \li0\ri0\nowidctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid1983895 {\rtlch\fcs1 \af0\afs18 \ltrch\fcs0 \fs16\insrsid4659932\charrsid11619474 +\par }{\*\themedata 504b030414000600080000002100828abc13fa0000001c020000130000005b436f6e74656e745f54797065735d2e786d6cac91cb6ac3301045f785fe83d0b6d8 +72ba28a5d8cea249777d2cd20f18e4b12d6a8f843409c9df77ecb850ba082d74231062ce997b55ae8fe3a00e1893f354e9555e6885647de3a8abf4fbee29bbd7 +2a3150038327acf409935ed7d757e5ee14302999a654e99e393c18936c8f23a4dc072479697d1c81e51a3b13c07e4087e6b628ee8cf5c4489cf1c4d075f92a0b +44d7a07a83c82f308ac7b0a0f0fbf90c2480980b58abc733615aa2d210c2e02cb04430076a7ee833dfb6ce62e3ed7e14693e8317d8cd0433bf5c60f53fea2fe7 +065bd80facb647e9e25c7fc421fd2ddb526b2e9373fed4bb902e182e97b7b461e6bfad3f010000ffff0300504b030414000600080000002100a5d6a7e7c00000 +00360100000b0000005f72656c732f2e72656c73848fcf6ac3300c87ef85bd83d17d51d2c31825762fa590432fa37d00e1287f68221bdb1bebdb4fc7060abb08 +84a4eff7a93dfeae8bf9e194e720169aaa06c3e2433fcb68e1763dbf7f82c985a4a725085b787086a37bdbb55fbc50d1a33ccd311ba548b63095120f88d94fbc +52ae4264d1c910d24a45db3462247fa791715fd71f989e19e0364cd3f51652d73760ae8fa8c9ffb3c330cc9e4fc17faf2ce545046e37944c69e462a1a82fe353 +bd90a865aad41ed0b5b8f9d6fd010000ffff0300504b0304140006000800000021006b799616830000008a0000001c0000007468656d652f7468656d652f7468 +656d654d616e616765722e786d6c0ccc4d0ac3201040e17da17790d93763bb284562b2cbaebbf600439c1a41c7a0d29fdbd7e5e38337cedf14d59b4b0d592c9c +070d8a65cd2e88b7f07c2ca71ba8da481cc52c6ce1c715e6e97818c9b48d13df49c873517d23d59085adb5dd20d6b52bd521ef2cdd5eb9246a3d8b4757e8d3f7 +29e245eb2b260a0238fd010000ffff0300504b030414000600080000002100650442cbc5060000591a0000160000007468656d652f7468656d652f7468656d65 +312e786d6cec59cf8b1b3714be17fa3f0c7377fc6b666c2ff1067b6c67dbec2621765272d4dab24759cdc8ccc8bb3121509263a1509a961c1a28bdf450da0612 +68a1e95fb3694a9a42ff853e69c663c996bbc9b287a564f7e2d17cefe9d37bd2f7a4d1c54b77436a1de238212c6adae50b25dbc2d1908d483469da3707bd42dd +b6128ea211a22cc24d7b8e13fbd2f6871f5c445b3cc021b6c03e4ab650d30e389f6e158bc9109a5172814d7104efc62c0e1187c778521cc5e808fc86b4582995 +bc628848645b110ac1edb5f1980cb1f5f2d7df5e7ff7d8de5e78ef52e822e2896818d2b82f7c63cd44624707658148e6894f63eb10d1a60d1d8dd8d100dfe5b6 +4551c2e145d32ec93fbbb87db188b63223ca37d82a763df997d96506a3838aec339eece79d3a8eeb78addcbf0450be8eebd6ba5ed7cbfd49001a0e61a42917d5 +a7db6eb43b6e865540e94f83ef4ead532d6b78c57f758d73cb15ff1a5e8252ffce1abed7f3218a1a5e8252bcbb86779c5ac57734bc04a5786f0d5f2bb53a4e4d +c34b50404974b0862eb95ed55f8c36878c19dd31c21baed3ab5532e74b14cc867c76892ec62ce29be65a88eeb0b8070001a48893c8e2f3291ea3214c631f51b2 +1f136b974c022eba415b1829efd3a661b2d6247ab492614ca6bc697f3c45b030965eff79f1e33f2f9e59c70f9e1f3ff8e5f8e1c3e3073fa78e34ab1d144d54ab +37df7ff1f7934fadbf9e7dfbe6d157667ca2e2fff8e9b397bf7f6906c2225ad279f5f5d33f9f3f7df5f8f3d73f3c32c05b31da57e10312e2c4ba8a8fac1b2c84 +81c9a8e8ccf17efc6e16830011d5a2154d121421d18bc17f97071afaea1c5164c0b5b11ec15b318888097879764723dc0fe21927068f57825003ee3146db2c36 +46e18ae84b09f360164dcc9dc733157703a14353df3e8ab4fc766753504f6272e90758a3799da288a3098e30b7c43b7680b16174b709d1e2ba4786314bd8985b +b789d546c4189201d9d766d3d26887849097b98920e45b8bcdde2dabcda869d41d7ca8236155206a203fc0540be36534e32834b91ca090aa01df453c3091eccf +e3a18aeb261c323dc19459dd114e1293cdb518c6ab24fd0a088839ed7b741eeac898930393cf5dc4988aecb0033f40e1d484ed932850b11f2507304591759d71 +137c8fe92b443c431e50b431ddb708d6d27db21adc04ed54292d278878338b0db9bc8c99367ffb733a46584a0d48bba6d821894e94efb487b3136e90ca57df3c +31f03eaf92dd8a8971cdecac08f526dcaa3cfb2c1e91f3afce1d348bae635810eb25eabd38bf1767fb7f2fce9bd6f3d94bf2528541a0c56630dd6ecbcd77b871 +ef3d2694f6f99ce2dd446ebf13a83da31e340a3b79f0c4f9596c1ac04fb192a1030d378991b4b162c63f213ce807680a5bf7b22d9c4c92ccf524b1a62c8123a3 +6c36fa16783a0bf7d8283d7296cbe278998a4782f8b2bde4e6ed705ce029daab2d8f51b97bc976228fbb0b02c2f65d48289de924aa0612b545a308923c5c43d0 +0c24e4c8ce8445c3c0a22edc2f52b5c602a8e55981cd91055baaa6ed3a600246706642148f449ed2542fb22b93799699de144c6d0694e0c346360396996e08ae +1b872746974eb5b7c8b44642996e3a09191959c392008d70363b45ebdbd078d75c379629d5e8895064b15068d4eaffc5e2b4b906bb556da091aa1434b28e9ab6 +577561ca0cd1b4698fe1e80e3fc329cc9d446c6a119dc007b0218fd3057f1a6599c609efa02448032e4527558390701c5b94844d5b0c3f4f038da486486ee50a +08c2b925d70059396fe420e97a92f1788c875c4dbbd222229d3e82c2a75a617c2bcd4f0f16966c06e9ee07a3236b9fcee21b08a6985b2b8b008e4802df77ca69 +3447043e49e642b69c7f2b8529935df59ba09c43693ba2d30065154515f3142ea53ca7239ff218284fd99821a04a48b242b83f1105560daa564df3aa9172d858 +754f361291534473593335551155d3ac625a0f8b32b012cbd3157985d522c4502ed50a9f4af7aae436165ab7b24fc8ab04043c8f9fa1eabe454150a82d3bd3a8 +09c6eb322c343b6bd56bc7628027507b9b22a1a8beb770bb12b7bc4618bb83c653557eb05b9db5d0345eec2b65a4e5e5857abdc0f6ef807874e043ee8cf244a6 +122e0f62041ba2bedc93a4b2014be42ecf9606fcb2663169daf74a6ecbf12bae5f28d5dd6ec1a93aa542dd6d550b2dd7ad96bb6eb9d46957ee4361e1415876d3 +8b931e7c6ca2f3ecfa44b6af5da1848bef6917862c2c3279455294c4e5154ab9925da1c82b98a6bd729732107725b645407dee79955ea3da687b8546b5d52b38 +9d76bdd0f0bd76a1e3f9b54eafe3bbf546efbe6d1d4ab0d3aafa8ed7ad17bcb2ef171caf24c6516f146a4ea5d2726aad7ad769ddcff63310825447b2a0409c25 +c1ed7f010000ffff0300504b0304140006000800000021000dd1909fb60000001b010000270000007468656d652f7468656d652f5f72656c732f7468656d654d +616e616765722e786d6c2e72656c73848f4d0ac2301484f78277086f6fd3ba109126dd88d0add40384e4350d363f2451eced0dae2c082e8761be9969bb979dc9 +136332de3168aa1a083ae995719ac16db8ec8e4052164e89d93b64b060828e6f37ed1567914b284d262452282e3198720e274a939cd08a54f980ae38a38f56e4 +22a3a641c8bbd048f7757da0f19b017cc524bd62107bd5001996509affb3fd381a89672f1f165dfe514173d9850528a2c6cce0239baa4c04ca5bbabac4df0000 +00ffff0300504b01022d0014000600080000002100828abc13fa0000001c0200001300000000000000000000000000000000005b436f6e74656e745f54797065 +735d2e786d6c504b01022d0014000600080000002100a5d6a7e7c0000000360100000b000000000000000000000000002b0100005f72656c732f2e72656c7350 +4b01022d00140006000800000021006b799616830000008a0000001c00000000000000000000000000140200007468656d652f7468656d652f7468656d654d61 +6e616765722e786d6c504b01022d0014000600080000002100650442cbc5060000591a00001600000000000000000000000000d10200007468656d652f746865 +6d652f7468656d65312e786d6c504b01022d00140006000800000021000dd1909fb60000001b0100002700000000000000000000000000ca0900007468656d652f7468656d652f5f72656c732f7468656d654d616e616765722e786d6c2e72656c73504b050600000000050005005d010000c50a00000000} +{\*\colorschememapping 3c3f786d6c2076657273696f6e3d22312e302220656e636f64696e673d225554462d3822207374616e64616c6f6e653d22796573223f3e0d0a3c613a636c724d +617020786d6c6e733a613d22687474703a2f2f736368656d61732e6f70656e786d6c666f726d6174732e6f72672f64726177696e676d6c2f323030362f6d6169 +6e22206267313d226c743122207478313d22646b3122206267323d226c743222207478323d22646b322220616363656e74313d22616363656e74312220616363 +656e74323d22616363656e74322220616363656e74333d22616363656e74332220616363656e74343d22616363656e74342220616363656e74353d22616363656e74352220616363656e74363d22616363656e74362220686c696e6b3d22686c696e6b2220666f6c486c696e6b3d22666f6c486c696e6b222f3e} +{\*\latentstyles\lsdstimax267\lsdlockeddef0\lsdsemihiddendef0\lsdunhideuseddef0\lsdqformatdef0\lsdprioritydef99{\lsdlockedexcept \lsdqformat1 \lsdpriority0 \lsdlocked0 Normal;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 1; +\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdpriority9 \lsdlocked0 heading 2;\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdpriority9 \lsdlocked0 heading 3;\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdpriority9 \lsdlocked0 heading 4; +\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdpriority9 \lsdlocked0 heading 5;\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdpriority9 \lsdlocked0 heading 6;\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdpriority9 \lsdlocked0 heading 7; +\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdpriority9 \lsdlocked0 heading 8;\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdpriority9 \lsdlocked0 heading 9;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 1; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 3;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 4;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 5; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 6;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 7;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 8;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 9; +\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 1;\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 2;\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 3; +\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 4;\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 5;\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 6; +\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 7;\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 8;\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 9;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Normal Indent; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 footnote text;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 annotation text;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 header;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 footer; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index heading;\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdpriority35 \lsdlocked0 caption;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 table of figures; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 envelope address;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 envelope return;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 footnote reference;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 annotation reference; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 line number;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 page number;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 endnote reference;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 endnote text; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 table of authorities;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 macro;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 toa heading;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Bullet;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Number;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List 3; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List 4;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List 5;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Bullet 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Bullet 3; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Bullet 4;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Bullet 5;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Number 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Number 3; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Number 4;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Number 5;\lsdqformat1 \lsdpriority10 \lsdlocked0 Title;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Closing; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Signature;\lsdsemihidden1 \lsdunhideused1 \lsdpriority1 \lsdlocked0 Default Paragraph Font;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Body Text;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Body Text Indent; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Continue;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Continue 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Continue 3;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Continue 4; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Continue 5;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Message Header;\lsdqformat1 \lsdpriority11 \lsdlocked0 Subtitle;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Salutation; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Date;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Body Text First Indent;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Body Text First Indent 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Note Heading; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Body Text 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Body Text 3;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Body Text Indent 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Body Text Indent 3; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Block Text;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Hyperlink;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 FollowedHyperlink;\lsdqformat1 \lsdpriority22 \lsdlocked0 Strong; +\lsdqformat1 \lsdpriority20 \lsdlocked0 Emphasis;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Document Map;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Plain Text;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 E-mail Signature; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Top of Form;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Bottom of Form;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Normal (Web);\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Acronym; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Address;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Cite;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Code;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Definition; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Keyboard;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Preformatted;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Sample;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Typewriter; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Variable;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 annotation subject;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 No List;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Outline List 1; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Outline List 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Outline List 3;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Balloon Text;\lsdpriority39 \lsdlocked0 Table Grid; +\lsdsemihidden1 \lsdlocked0 Placeholder Text;\lsdqformat1 \lsdpriority1 \lsdlocked0 No Spacing;\lsdpriority60 \lsdlocked0 Light Shading;\lsdpriority61 \lsdlocked0 Light List;\lsdpriority62 \lsdlocked0 Light Grid; +\lsdpriority63 \lsdlocked0 Medium Shading 1;\lsdpriority64 \lsdlocked0 Medium Shading 2;\lsdpriority65 \lsdlocked0 Medium List 1;\lsdpriority66 \lsdlocked0 Medium List 2;\lsdpriority67 \lsdlocked0 Medium Grid 1;\lsdpriority68 \lsdlocked0 Medium Grid 2; +\lsdpriority69 \lsdlocked0 Medium Grid 3;\lsdpriority70 \lsdlocked0 Dark List;\lsdpriority71 \lsdlocked0 Colorful Shading;\lsdpriority72 \lsdlocked0 Colorful List;\lsdpriority73 \lsdlocked0 Colorful Grid;\lsdpriority60 \lsdlocked0 Light Shading Accent 1; +\lsdpriority61 \lsdlocked0 Light List Accent 1;\lsdpriority62 \lsdlocked0 Light Grid Accent 1;\lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 1;\lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 1;\lsdpriority65 \lsdlocked0 Medium List 1 Accent 1; +\lsdsemihidden1 \lsdlocked0 Revision;\lsdqformat1 \lsdpriority34 \lsdlocked0 List Paragraph;\lsdqformat1 \lsdpriority29 \lsdlocked0 Quote;\lsdqformat1 \lsdpriority30 \lsdlocked0 Intense Quote;\lsdpriority66 \lsdlocked0 Medium List 2 Accent 1; +\lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 1;\lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 1;\lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 1;\lsdpriority70 \lsdlocked0 Dark List Accent 1;\lsdpriority71 \lsdlocked0 Colorful Shading Accent 1; +\lsdpriority72 \lsdlocked0 Colorful List Accent 1;\lsdpriority73 \lsdlocked0 Colorful Grid Accent 1;\lsdpriority60 \lsdlocked0 Light Shading Accent 2;\lsdpriority61 \lsdlocked0 Light List Accent 2;\lsdpriority62 \lsdlocked0 Light Grid Accent 2; +\lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 2;\lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 2;\lsdpriority65 \lsdlocked0 Medium List 1 Accent 2;\lsdpriority66 \lsdlocked0 Medium List 2 Accent 2; +\lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 2;\lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 2;\lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 2;\lsdpriority70 \lsdlocked0 Dark List Accent 2;\lsdpriority71 \lsdlocked0 Colorful Shading Accent 2; +\lsdpriority72 \lsdlocked0 Colorful List Accent 2;\lsdpriority73 \lsdlocked0 Colorful Grid Accent 2;\lsdpriority60 \lsdlocked0 Light Shading Accent 3;\lsdpriority61 \lsdlocked0 Light List Accent 3;\lsdpriority62 \lsdlocked0 Light Grid Accent 3; +\lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 3;\lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 3;\lsdpriority65 \lsdlocked0 Medium List 1 Accent 3;\lsdpriority66 \lsdlocked0 Medium List 2 Accent 3; +\lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 3;\lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 3;\lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 3;\lsdpriority70 \lsdlocked0 Dark List Accent 3;\lsdpriority71 \lsdlocked0 Colorful Shading Accent 3; +\lsdpriority72 \lsdlocked0 Colorful List Accent 3;\lsdpriority73 \lsdlocked0 Colorful Grid Accent 3;\lsdpriority60 \lsdlocked0 Light Shading Accent 4;\lsdpriority61 \lsdlocked0 Light List Accent 4;\lsdpriority62 \lsdlocked0 Light Grid Accent 4; +\lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 4;\lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 4;\lsdpriority65 \lsdlocked0 Medium List 1 Accent 4;\lsdpriority66 \lsdlocked0 Medium List 2 Accent 4; +\lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 4;\lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 4;\lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 4;\lsdpriority70 \lsdlocked0 Dark List Accent 4;\lsdpriority71 \lsdlocked0 Colorful Shading Accent 4; +\lsdpriority72 \lsdlocked0 Colorful List Accent 4;\lsdpriority73 \lsdlocked0 Colorful Grid Accent 4;\lsdpriority60 \lsdlocked0 Light Shading Accent 5;\lsdpriority61 \lsdlocked0 Light List Accent 5;\lsdpriority62 \lsdlocked0 Light Grid Accent 5; +\lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 5;\lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 5;\lsdpriority65 \lsdlocked0 Medium List 1 Accent 5;\lsdpriority66 \lsdlocked0 Medium List 2 Accent 5; +\lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 5;\lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 5;\lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 5;\lsdpriority70 \lsdlocked0 Dark List Accent 5;\lsdpriority71 \lsdlocked0 Colorful Shading Accent 5; +\lsdpriority72 \lsdlocked0 Colorful List Accent 5;\lsdpriority73 \lsdlocked0 Colorful Grid Accent 5;\lsdpriority60 \lsdlocked0 Light Shading Accent 6;\lsdpriority61 \lsdlocked0 Light List Accent 6;\lsdpriority62 \lsdlocked0 Light Grid Accent 6; +\lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 6;\lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 6;\lsdpriority65 \lsdlocked0 Medium List 1 Accent 6;\lsdpriority66 \lsdlocked0 Medium List 2 Accent 6; +\lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 6;\lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 6;\lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 6;\lsdpriority70 \lsdlocked0 Dark List Accent 6;\lsdpriority71 \lsdlocked0 Colorful Shading Accent 6; +\lsdpriority72 \lsdlocked0 Colorful List Accent 6;\lsdpriority73 \lsdlocked0 Colorful Grid Accent 6;\lsdqformat1 \lsdpriority19 \lsdlocked0 Subtle Emphasis;\lsdqformat1 \lsdpriority21 \lsdlocked0 Intense Emphasis; +\lsdqformat1 \lsdpriority31 \lsdlocked0 Subtle Reference;\lsdqformat1 \lsdpriority32 \lsdlocked0 Intense Reference;\lsdqformat1 \lsdpriority33 \lsdlocked0 Book Title;\lsdsemihidden1 \lsdunhideused1 \lsdpriority37 \lsdlocked0 Bibliography; +\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdpriority39 \lsdlocked0 TOC Heading;}}{\*\datastore 0105000002000000180000004d73786d6c322e534158584d4c5265616465722e352e3000000000000000000000060000 +d0cf11e0a1b11ae1000000000000000000000000000000003e000300feff090006000000000000000000000001000000010000000000000000100000feffffff00000000feffffff0000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffdfffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff52006f006f007400200045006e00740072007900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016000500ffffffffffffffffffffffffec69d9888b8b3d4c859eaf6cd158be0f00000000000000000000000040a9 +5e9d4801d901feffffff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000105000000000000}} \ No newline at end of file diff --git a/installer/SetupScripts/nim/license.txt b/installer/SetupScripts/nim/license.txt new file mode 100644 index 0000000..6399811 --- /dev/null +++ b/installer/SetupScripts/nim/license.txt @@ -0,0 +1 @@ +Gradient Parallax \ No newline at end of file diff --git a/installer/SetupScripts/nim/logo.ico b/installer/SetupScripts/nim/logo.ico new file mode 100644 index 0000000..ac3c971 Binary files /dev/null and b/installer/SetupScripts/nim/logo.ico differ diff --git a/installer/SetupScripts/nim/nim_setup.nsi b/installer/SetupScripts/nim/nim_setup.nsi new file mode 100644 index 0000000..9b89d18 Binary files /dev/null and b/installer/SetupScripts/nim/nim_setup.nsi differ diff --git a/installer/SetupScripts/nim/skin/configpage.xml b/installer/SetupScripts/nim/skin/configpage.xml new file mode 100644 index 0000000..efb9466 --- /dev/null +++ b/installer/SetupScripts/nim/skin/configpage.xml @@ -0,0 +1,51 @@ + + + + + + + + + + + + + + +