From 43392235946974c2e0362646364a40395245c8d1 Mon Sep 17 00:00:00 2001 From: "METANEOCORTEX\\Kotti" Date: Mon, 6 Apr 2026 17:19:34 +0200 Subject: [PATCH 1/5] Fix ARM64 flickering/rendering issues on Windows 11 25H2 Addresses reported flickering and rendering problems on ARM64 devices running Windows 11 25H2 by implementing ARM64-specific rendering defaults, build configuration fixes, and redraw optimizations. Rendering fixes: - Default to SC_TECHNOLOGY_DIRECTWRITERETAIN on ARM64 to preserve back buffer between frames, avoiding blank flashes with Qualcomm Adreno GPUs and Win11 25H2 DWM compositor changes - Wrap MsgThemeChanged() in WM_SETREDRAW FALSE/TRUE to suppress N intermediate repaints during heavy theme/DPI transitions - Add WS_EX_COMPOSITED to main window on ARM64 for system-level double-buffering - Remove RDW_ERASE from DarkMode ListView/TreeView RedrawWindow() calls to avoid background erase flash during theme changes Build configuration fixes: - Add _WIN64 preprocessor define to Scintilla, SciLexer, Lexilla ARM64 configurations (was missing, could cause 32-bit code paths) - Add TargetMachine=MachineARM64 to all ARM64 linker sections across Notepad3, Scintilla, SciLexer, Lexilla projects - Add CETCompat=false to Scintilla and SciLexer ARM64 configurations (CET is x86/x64 only, not compatible with ARM64) Platform code improvements: - Add _M_ARM64 detection for GrepWin binary selection (ARM64 was silently mapped to x64 binary via _WIN64 check) - Add NP3_BUILD_ARM64 helper macro in TypeDefs.h for future ARM64-specific code paths - Document RenderingTechnology setting in Build/Notepad3.ini with per-resolution override syntax and ARM64 troubleshooting tips Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- Build/Notepad3.ini | 8 ++++++++ lexilla/Lexilla.vcxproj | 11 +++++++---- scintilla/win32/SciLexer.vcxproj | 10 +++++++--- scintilla/win32/Scintilla.vcxproj | 10 +++++++--- src/Config/Config.cpp | 6 ++++++ src/DarkMode/ListViewUtil.hpp | 4 ++-- src/Notepad3.c | 15 ++++++++++++++- src/Notepad3.vcxproj | 5 ++++- src/TypeDefs.h | 8 ++++++++ 9 files changed, 63 insertions(+), 14 deletions(-) diff --git a/Build/Notepad3.ini b/Build/Notepad3.ini index 6aa76fd979..cc64bc96aa 100644 --- a/Build/Notepad3.ini +++ b/Build/Notepad3.ini @@ -35,6 +35,14 @@ SettingsVersion=5 ;RelativeFileMRU=1 ;ReuseWindow=0 ;SaveBlankNewFile=true +;RenderingTechnology=1 +; Scintilla Rendering Technology: +; 0 = GDI (default Win32 rendering) +; 1 = DirectWrite (default) - Direct2D +; 2 = DirectWriteRetain (preserves back buffer, default on ARM64) +; 3 = DirectWriteDC (DC-based Direct2D) +; Tip: On ARM64 with rendering issues, try 0 (GDI) or 3 (DirectWriteDC) +; Per-resolution override in [Window]: e.g. 1920x1080 RenderingTechnology=0 ;SciFontQuality=3 ;SimpleIndentGuides=0 ;SingleFileInstance=1 diff --git a/lexilla/Lexilla.vcxproj b/lexilla/Lexilla.vcxproj index 72c31b6145..dab667c3ef 100644 --- a/lexilla/Lexilla.vcxproj +++ b/lexilla/Lexilla.vcxproj @@ -477,7 +477,7 @@ Level4 - _WIN32_WINNT=0x0A00;WINVER=0x0A00;NTDDI_VERSION=0x0A000006;SCI_LEXER;_CRT_SECURE_NO_WARNINGS;STATIC_BUILD;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _WIN64;_WIN32_WINNT=0x0A00;WINVER=0x0A00;NTDDI_VERSION=0x0A000006;SCI_LEXER;_CRT_SECURE_NO_WARNINGS;STATIC_BUILD;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) true stdcpp20 true @@ -502,6 +502,7 @@ Console true false + MachineARM64 true @@ -598,7 +599,7 @@ true - _WIN32_WINNT=0x0A00;WINVER=0x0A00;NTDDI_VERSION=0x0A000006;SCI_LEXER;_CRT_SECURE_NO_WARNINGS;STATIC_BUILD;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + _WIN64;_WIN32_WINNT=0x0A00;WINVER=0x0A00;NTDDI_VERSION=0x0A000006;SCI_LEXER;_CRT_SECURE_NO_WARNINGS;STATIC_BUILD;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) true stdcpp20 true @@ -626,6 +627,7 @@ true true false + MachineARM64 true @@ -641,7 +643,7 @@ true - _WIN32_WINNT=0x0A00;WINVER=0x0A00;NTDDI_VERSION=0x0A000006;SCI_LEXER;_CRT_SECURE_NO_WARNINGS;STATIC_BUILD;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + _WIN64;_WIN32_WINNT=0x0A00;WINVER=0x0A00;NTDDI_VERSION=0x0A000006;SCI_LEXER;_CRT_SECURE_NO_WARNINGS;STATIC_BUILD;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) true stdcpp20 true @@ -669,6 +671,7 @@ true true false + MachineARM64 true @@ -680,4 +683,4 @@ - \ No newline at end of file + diff --git a/scintilla/win32/SciLexer.vcxproj b/scintilla/win32/SciLexer.vcxproj index fc12e80dc4..34e134fb97 100644 --- a/scintilla/win32/SciLexer.vcxproj +++ b/scintilla/win32/SciLexer.vcxproj @@ -119,11 +119,13 @@ - _DEBUG;%(PreprocessorDefinitions) + _WIN64;_DEBUG;%(PreprocessorDefinitions) stdcpp17 Default + MachineARM64 + false @@ -156,12 +158,14 @@ true true - NDEBUG;%(PreprocessorDefinitions) + _WIN64;NDEBUG;%(PreprocessorDefinitions) stdcpp17 true true + MachineARM64 + false @@ -182,4 +186,4 @@ - \ No newline at end of file + diff --git a/scintilla/win32/Scintilla.vcxproj b/scintilla/win32/Scintilla.vcxproj index 7b33211deb..038525342d 100644 --- a/scintilla/win32/Scintilla.vcxproj +++ b/scintilla/win32/Scintilla.vcxproj @@ -120,11 +120,13 @@ - _DEBUG;%(PreprocessorDefinitions) + _WIN64;_DEBUG;%(PreprocessorDefinitions) stdcpp17 Default + MachineARM64 + false @@ -157,12 +159,14 @@ true true - NDEBUG;%(PreprocessorDefinitions) + _WIN64;NDEBUG;%(PreprocessorDefinitions) stdcpp17 true true + MachineARM64 + false @@ -186,4 +190,4 @@ - \ No newline at end of file + diff --git a/src/Config/Config.cpp b/src/Config/Config.cpp index d89e24dcad..8c37674087 100644 --- a/src/Config/Config.cpp +++ b/src/Config/Config.cpp @@ -1325,7 +1325,13 @@ void LoadSettings() Defaults.RenderingTechnology = clampi(Defaults.RenderingTechnology, SC_TECHNOLOGY_DEFAULT, SC_TECHNOLOGY_DIRECTWRITEDC); } else { +#if defined(_M_ARM64) + // ARM64: use DirectWriteRetain to preserve back buffer between frames, + // avoiding flicker with Qualcomm Adreno GPUs and Win11 25H2 DWM compositor + Defaults.RenderingTechnology = SC_TECHNOLOGY_DIRECTWRITERETAIN; +#else Defaults.RenderingTechnology = SC_TECHNOLOGY_DIRECTWRITE; // new default DirectWrite (D2D) +#endif } // Settings2 EnableBidirectionalSupport deprecated diff --git a/src/DarkMode/ListViewUtil.hpp b/src/DarkMode/ListViewUtil.hpp index 9878c83f43..dfec7102bf 100644 --- a/src/DarkMode/ListViewUtil.hpp +++ b/src/DarkMode/ListViewUtil.hpp @@ -61,7 +61,7 @@ extern "C" void InitListView(HWND hListView) SendMessage(hHeader, WM_THEMECHANGED, wParam, lParam); - RedrawWindow(hWnd, nullptr, nullptr, RDW_ERASE | RDW_FRAME | RDW_INVALIDATE | RDW_INTERNALPAINT); + RedrawWindow(hWnd, nullptr, nullptr, RDW_FRAME | RDW_INVALIDATE | RDW_INTERNALPAINT); } } break; @@ -123,7 +123,7 @@ extern "C" void InitTreeView(HWND hTreeView) } CloseThemeData(hTheme); } - RedrawWindow(hWnd, nullptr, nullptr, RDW_ERASE | RDW_FRAME | RDW_INVALIDATE | RDW_INTERNALPAINT); + RedrawWindow(hWnd, nullptr, nullptr, RDW_FRAME | RDW_INVALIDATE | RDW_INTERNALPAINT); } } break; diff --git a/src/Notepad3.c b/src/Notepad3.c index 168e926423..01916a898d 100644 --- a/src/Notepad3.c +++ b/src/Notepad3.c @@ -81,7 +81,9 @@ LPCWSTR WordBookMarks[MARKER_NP3_BOOKMARK] = { CONSTANTS_T const Constants = { 2 // StdDefaultLexerID , L"minipath.exe" // FileBrowserMiniPath -#ifdef _WIN64 +#if defined(_M_ARM64) + , L"grepWin-x64_portable.exe" // FileSearchGrepWin (x64 via emulation on ARM64) +#elif defined(_WIN64) , L"grepWin-x64_portable.exe" // FileSearchGrepWin #else , L"grepWin-x86_portable.exe" // FileSearchGrepWin @@ -1818,7 +1820,11 @@ HWND InitInstance(const HINSTANCE hInstance, int nCmdShow) DWORD const dwStyle = ((WS_OVERLAPPEDWINDOW | WS_CLIPCHILDREN) & ~WS_VISIBLE); // | (g_IniWinInfo.max ? WS_MAXIMIZE : 0); HWND const hwndMain = CreateWindowEx( +#if defined(_M_ARM64) + WS_EX_ACCEPTFILES | WS_EX_COMPOSITED, // double-buffering reduces flicker on ARM64 +#else WS_EX_ACCEPTFILES, +#endif s_wchWndClass, _W(SAPPNAME), dwStyle, @@ -3593,6 +3599,9 @@ LRESULT MsgThemeChanged(HWND hwnd, WPARAM wParam,LPARAM lParam) if (Globals.hwndMain) { + // suppress intermediate redraws during heavy theme update to prevent flickering + SendMessage(hwnd, WM_SETREDRAW, FALSE, 0); + #ifdef D_NP3_WIN10_DARK_MODE RefreshTitleBarThemeColor(hwnd); #endif @@ -3622,6 +3631,10 @@ LRESULT MsgThemeChanged(HWND hwnd, WPARAM wParam,LPARAM lParam) EditUpdateVisibleIndicators(); UpdateUI(hwnd); + + // re-enable drawing and force a single + SendMessage(hwnd, WM_SETREDRAW, TRUE, 0); + RedrawWindow(hwnd, NULL, NULL, RDW_ERASE | RDW_FRAME | RDW_INVALIDATE | RDW_ALLCHILDREN); } UpdateWindowEx(hwnd); diff --git a/src/Notepad3.vcxproj b/src/Notepad3.vcxproj index 7b505f33bb..ce22703ded 100644 --- a/src/Notepad3.vcxproj +++ b/src/Notepad3.vcxproj @@ -426,6 +426,7 @@ false true clang_rt.asan-i386.lib + MachineARM64 @@ -853,6 +854,7 @@ true + MachineARM64 @@ -938,6 +940,7 @@ true + MachineARM64 @@ -1277,4 +1280,4 @@ - \ No newline at end of file + diff --git a/src/TypeDefs.h b/src/TypeDefs.h index 8c3a29cbd4..a9d789429e 100644 --- a/src/TypeDefs.h +++ b/src/TypeDefs.h @@ -65,6 +65,14 @@ // no Analyze warning "prefer: enum class" #pragma warning(disable : 26812) +// --- Platform Architecture Detection --- +// Use NP3_BUILD_ARM64 for ARM64-specific code paths +#if defined(_M_ARM64) +#define NP3_BUILD_ARM64 1 +#else +#define NP3_BUILD_ARM64 0 +#endif + /**************************************************/ /* Declared in WINNT.H */ /* */ From ea3eedc57c944080e65cbde0a5e89771f6243721 Mon Sep 17 00:00:00 2001 From: "METANEOCORTEX\\Kotti" Date: Mon, 6 Apr 2026 17:33:03 +0200 Subject: [PATCH 2/5] docs: Add ARM64 platform considerations to instruction files Add comprehensive ARM64 section to both CLAUDE.md and copilot-instructions.md covering: - Architecture detection (_M_ARM64 vs _WIN64 distinction) - NP3_BUILD_ARM64 helper macro in TypeDefs.h - ARM64 rendering defaults (DirectWriteRetain, WS_EX_COMPOSITED) - ARM64 build config requirements (CETCompat, TargetMachine, _WIN64) - GrepWin x64 emulation on ARM64 - Theme change flickering prevention (WM_SETREDRAW lock) - ARM 32-bit not supported (solution config maps to Win32) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .github/copilot-instructions.md | 45 ++++++++++++++++++++++++++++++++- CLAUDE.md | 45 +++++++++++++++++++++++++++++++-- 2 files changed, 87 insertions(+), 3 deletions(-) diff --git a/.github/copilot-instructions.md b/.github/copilot-instructions.md index 8f0d9d49dd..77a44e0327 100644 --- a/.github/copilot-instructions.md +++ b/.github/copilot-instructions.md @@ -48,7 +48,7 @@ GitHub Actions workflow at `.github/workflows/build.yml` builds all four platfor ## Architecture -Notepad3 is a Win32 desktop text editor built on the **Scintilla** editing component with **Lexilla** for syntax highlighting. It ships with the companion tool **MiniPath** (file browser) and integrates with the external **grepWin** tool (file search/grep). +Notepad3 is a Win32 desktop text editor built on the **Scintilla** editing component with **Lexilla** for syntax highlighting. It ships with the companion tool **MiniPath** (file browser) and integrates with the external **grepWin** tool (file search/grep) via pre-built portable executables. ### Core modules (in `src\`) @@ -75,6 +75,22 @@ Notepad3 is a Win32 desktop text editor built on the **Scintilla** editing compo - **`src\uthash\`** — Hash table library (C macros) - **`src\crypto\`** — Rijndael/SHA-256 for AES-256 encryption +### grepWin Integration (`grepWin\`) + +grepWin is an **external** file search/grep tool — it is **not** built from source as part of Notepad3. Pre-built portable executables and translation files are stored in the repository: + +- **`grepWin\portables\`** — `grepWin-x86_portable.exe`, `grepWin-x64_portable.exe`, `LICENSE.txt` +- **`grepWin\translations\`** — `*.lang` translation files (e.g. `German.lang`, `French.lang`) + +At runtime (`src\Dialogs.c`), Notepad3 searches for grepWin in this order: +1. `Settings2.GrepWinPath` (user-configured INI setting) +2. `\grepWin\grepWin-x64_portable.exe` (or x86) — portable layout +3. `%APPDATA%\Rizonesoft\Notepad3\grepWin\` — installed layout + +Language mapping (`src\MuiLanguage.c`): `grepWinLangResName[]` maps Notepad3 locale names (e.g. `de-DE`) to grepWin `.lang` filenames (e.g. `German.lang`). The language file path is written to `grepwin.ini` before launching. + +Portable build scripts (`Build\make_portable_*.cmd`) package grepWin into a `grepWin\` subdirectory in the archive containing both portable executables, the license, and all `*.lang` translations. + ### Syntax highlighting lexers (`src\StyleLexers\`) Each language has its own `styleLexXXX.c` file (~50+ languages). All lexers follow the `EDITLEXER` struct pattern defined in `EditLexer.h`: @@ -138,6 +154,33 @@ URL hotspot regex is defined at `src\Edit.c:108` (`HYPLNK_REGEX_FULL` macro). It Windows 10/11 dark mode via IAT (Import Address Table) hooks. Includes stub DLLs for uxtheme and user32. +### ARM64 Platform Considerations + +**Supported platforms**: Win32 (x86), x64, x64_AVX2, ARM64. ARM 32-bit is **not** supported (the `Release|ARM` solution config maps to Win32). + +#### Architecture detection + +Use `#if defined(_M_ARM64)` or the helper macro `NP3_BUILD_ARM64` (defined in `src\TypeDefs.h`) for ARM64-specific code paths. **Important**: both ARM64 and x64 define `_WIN64`, so use `_M_ARM64` when you need to distinguish ARM64 from x64. + +#### ARM64 rendering defaults + +ARM64 defaults to `SC_TECHNOLOGY_DIRECTWRITERETAIN` (value 2) instead of `SC_TECHNOLOGY_DIRECTWRITE` (value 1) to preserve the Direct2D back buffer between frames. This avoids flickering on Qualcomm Adreno GPUs and the Win11 25H2 DWM compositor. The main window also uses `WS_EX_COMPOSITED` on ARM64 for system-level double-buffering. Users can override via `RenderingTechnology` in the INI file or the View menu. + +#### ARM64 build configuration + +- `CETCompat` must be `false` for ARM64 (CET is x86/x64 only) +- `TargetMachine` must be `MachineARM64` in all ARM64 linker sections +- `_WIN64` must be defined in preprocessor definitions for all ARM64 configurations +- Build fix scripts in `Build\scripts\`: `FixARM64CETCompat.ps1`, `FixARM64CrossCompile.ps1`, `FixARM64OutDir.ps1` + +#### GrepWin on ARM64 + +No native ARM64 grepWin build exists. The ARM64 build uses `grepWin-x64_portable.exe` which runs via x64 emulation on Windows ARM64. The binary selection in `src\Notepad3.c` uses `#if defined(_M_ARM64)` to handle this explicitly. + +#### Theme change flickering prevention + +`MsgThemeChanged()` in `src\Notepad3.c` wraps all heavy operations (bar recreation, lexer reset, restyling) in `WM_SETREDRAW FALSE/TRUE` to suppress intermediate repaints and performs a single `RedrawWindow()` at the end. DarkMode `RedrawWindow()` calls in `ListViewUtil.hpp` omit `RDW_ERASE` to avoid background erase flashes during theme transitions. + ## Conventions ### Code style diff --git a/CLAUDE.md b/CLAUDE.md index 2ef416c245..8acf004bc2 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -4,7 +4,7 @@ This file provides guidance to Claude Code (claude.ai/code) when working with co ## Project Overview -Notepad3 is a Windows-only Win32 desktop text editor (C/C++) built on **Scintilla** (editing component) and **Lexilla** (syntax highlighting). It ships with the companion tool **MiniPath** (file browser, Ctrl+M) and integrates with the external **grepWin** tool (file search/grep, Ctrl+Shift+F). Licensed under BSD 3-Clause. +Notepad3 is a Windows-only Win32 desktop text editor (C/C++) built on **Scintilla** (editing component) and **Lexilla** (syntax highlighting). It ships with the companion tool **MiniPath** (file browser, Ctrl+M) and integrates with the external **grepWin** tool (file search/grep, Ctrl+Shift+F) via pre-built portable executables. Licensed under BSD 3-Clause. ## Build Commands @@ -85,6 +85,22 @@ MainWndProc (Notepad3.c) | `src\uthash\` | uthash | Hash table / dynamic array macros | | `src\crypto\` | Rijndael/SHA-256 | AES-256 encryption | +### grepWin Integration (`grepWin\`) + +grepWin is an **external** file search/grep tool — it is **not** built from source as part of Notepad3. Pre-built portable executables and translation files are stored in the repository: + +- **`grepWin\portables\`** — `grepWin-x86_portable.exe`, `grepWin-x64_portable.exe`, `LICENSE.txt` +- **`grepWin\translations\`** — `*.lang` translation files (e.g. `German.lang`, `French.lang`) + +At runtime (`src\Dialogs.c`), Notepad3 searches for grepWin in this order: +1. `Settings2.GrepWinPath` (user-configured INI setting) +2. `\grepWin\grepWin-x64_portable.exe` (or x86) — portable layout +3. `%APPDATA%\Rizonesoft\Notepad3\grepWin\` — installed layout + +Language mapping (`src\MuiLanguage.c`): `grepWinLangResName[]` maps Notepad3 locale names (e.g. `de-DE`) to grepWin `.lang` filenames (e.g. `German.lang`). The language file path is written to `grepwin.ini` before launching. + +Portable build scripts (`Build\make_portable_*.cmd`) package grepWin into a `grepWin\` subdirectory in the archive containing both portable executables, the license, and all `*.lang` translations. + ### Syntax Lexers (`src\StyleLexers\`) 50+ languages, each in a `styleLexXXX.c` file. All follow the `EDITLEXER` struct pattern from `EditLexer.h`: @@ -190,7 +206,32 @@ URL hotspot regex is defined at `src\Edit.c:108` (`HYPLNK_REGEX_FULL` macro). It Windows 10/11 dark mode via IAT (Import Address Table) hooks. Includes stub DLLs for uxtheme and user32. -## Code Conventions +### ARM64 Platform Considerations + +**Supported platforms**: Win32 (x86), x64, x64_AVX2, ARM64. ARM 32-bit is **not** supported (the `Release|ARM` solution config maps to Win32). + +#### Architecture detection + +Use `#if defined(_M_ARM64)` or the helper macro `NP3_BUILD_ARM64` (defined in `src\TypeDefs.h`) for ARM64-specific code paths. **Important**: both ARM64 and x64 define `_WIN64`, so use `_M_ARM64` when you need to distinguish ARM64 from x64. + +#### ARM64 rendering defaults + +ARM64 defaults to `SC_TECHNOLOGY_DIRECTWRITERETAIN` (value 2) instead of `SC_TECHNOLOGY_DIRECTWRITE` (value 1) to preserve the Direct2D back buffer between frames. This avoids flickering on Qualcomm Adreno GPUs and the Win11 25H2 DWM compositor. The main window also uses `WS_EX_COMPOSITED` on ARM64 for system-level double-buffering. Users can override via `RenderingTechnology` in the INI file or the View menu. + +#### ARM64 build configuration + +- `CETCompat` must be `false` for ARM64 (CET is x86/x64 only) +- `TargetMachine` must be `MachineARM64` in all ARM64 linker sections +- `_WIN64` must be defined in preprocessor definitions for all ARM64 configurations +- Build fix scripts in `Build\scripts\`: `FixARM64CETCompat.ps1`, `FixARM64CrossCompile.ps1`, `FixARM64OutDir.ps1` + +#### GrepWin on ARM64 + +No native ARM64 grepWin build exists. The ARM64 build uses `grepWin-x64_portable.exe` which runs via x64 emulation on Windows ARM64. The binary selection in `src\Notepad3.c` uses `#if defined(_M_ARM64)` to handle this explicitly. + +#### Theme change flickering prevention + +`MsgThemeChanged()` in `src\Notepad3.c` wraps all heavy operations (bar recreation, lexer reset, restyling) in `WM_SETREDRAW FALSE/TRUE` to suppress intermediate repaints and performs a single `RedrawWindow()` at the end. DarkMode `RedrawWindow()` calls in `ListViewUtil.hpp` omit `RDW_ERASE` to avoid background erase flashes during theme transitions. ### Formatting From fac17811127913037b796288a7a4c1df3dadba39 Mon Sep 17 00:00:00 2001 From: "METANEOCORTEX\\Kotti" Date: Mon, 6 Apr 2026 17:34:27 +0200 Subject: [PATCH 3/5] chore: no PAF .7z creation - not supposed to be used that way. --- np3portableapp/build_np3portableapp.cmd | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/np3portableapp/build_np3portableapp.cmd b/np3portableapp/build_np3portableapp.cmd index 4793f885d6..0072afea32 100644 --- a/np3portableapp/build_np3portableapp.cmd +++ b/np3portableapp/build_np3portableapp.cmd @@ -324,14 +324,15 @@ if errorlevel 1 ( :: call %SCRIPT_DIR%Signing_for_NP3P_2nd_EXE.cmd :: --------------------------------------------------------------------------------------------------- -:: Step 11: Create .7z copy and report result +:: Step 11: report result :: --------------------------------------------------------------------------------------------------- echo. echo --- Step 11: Finalize --- set Notepad3Portable.paf.exe=%SCRIPT_DIR%Notepad3Portable_%VERSION%%DEVNAME%.paf.exe if exist %Notepad3Portable.paf.exe% ( - copy /B %Notepad3Portable.paf.exe% %Notepad3Portable.paf.exe%.7z /Y /V + rem ~ PAF can be extracted using 7-ZIP, but it is not supposed for this issue + rem ~ DON't DO: copy /B %Notepad3Portable.paf.exe% %Notepad3Portable.paf.exe%.7z /Y /V echo. echo === PortableApps Package Built Successfully! === echo Output: %Notepad3Portable.paf.exe% From b9c78d8344bb5063ecfbc7600291783d7ee0ab53 Mon Sep 17 00:00:00 2001 From: Pairi Daiza Date: Mon, 6 Apr 2026 23:46:00 +0200 Subject: [PATCH 4/5] Revert "fix: try to fix flickering issue" --- .github/copilot-instructions.md | 45 +------------------------ Build/Notepad3.ini | 8 ----- CLAUDE.md | 45 ++----------------------- lexilla/Lexilla.vcxproj | 11 +++--- np3portableapp/build_np3portableapp.cmd | 5 ++- scintilla/win32/SciLexer.vcxproj | 10 ++---- scintilla/win32/Scintilla.vcxproj | 10 ++---- src/Config/Config.cpp | 6 ---- src/DarkMode/ListViewUtil.hpp | 4 +-- src/Notepad3.c | 15 +-------- src/Notepad3.vcxproj | 5 +-- src/TypeDefs.h | 8 ----- 12 files changed, 19 insertions(+), 153 deletions(-) diff --git a/.github/copilot-instructions.md b/.github/copilot-instructions.md index 77a44e0327..8f0d9d49dd 100644 --- a/.github/copilot-instructions.md +++ b/.github/copilot-instructions.md @@ -48,7 +48,7 @@ GitHub Actions workflow at `.github/workflows/build.yml` builds all four platfor ## Architecture -Notepad3 is a Win32 desktop text editor built on the **Scintilla** editing component with **Lexilla** for syntax highlighting. It ships with the companion tool **MiniPath** (file browser) and integrates with the external **grepWin** tool (file search/grep) via pre-built portable executables. +Notepad3 is a Win32 desktop text editor built on the **Scintilla** editing component with **Lexilla** for syntax highlighting. It ships with the companion tool **MiniPath** (file browser) and integrates with the external **grepWin** tool (file search/grep). ### Core modules (in `src\`) @@ -75,22 +75,6 @@ Notepad3 is a Win32 desktop text editor built on the **Scintilla** editing compo - **`src\uthash\`** — Hash table library (C macros) - **`src\crypto\`** — Rijndael/SHA-256 for AES-256 encryption -### grepWin Integration (`grepWin\`) - -grepWin is an **external** file search/grep tool — it is **not** built from source as part of Notepad3. Pre-built portable executables and translation files are stored in the repository: - -- **`grepWin\portables\`** — `grepWin-x86_portable.exe`, `grepWin-x64_portable.exe`, `LICENSE.txt` -- **`grepWin\translations\`** — `*.lang` translation files (e.g. `German.lang`, `French.lang`) - -At runtime (`src\Dialogs.c`), Notepad3 searches for grepWin in this order: -1. `Settings2.GrepWinPath` (user-configured INI setting) -2. `\grepWin\grepWin-x64_portable.exe` (or x86) — portable layout -3. `%APPDATA%\Rizonesoft\Notepad3\grepWin\` — installed layout - -Language mapping (`src\MuiLanguage.c`): `grepWinLangResName[]` maps Notepad3 locale names (e.g. `de-DE`) to grepWin `.lang` filenames (e.g. `German.lang`). The language file path is written to `grepwin.ini` before launching. - -Portable build scripts (`Build\make_portable_*.cmd`) package grepWin into a `grepWin\` subdirectory in the archive containing both portable executables, the license, and all `*.lang` translations. - ### Syntax highlighting lexers (`src\StyleLexers\`) Each language has its own `styleLexXXX.c` file (~50+ languages). All lexers follow the `EDITLEXER` struct pattern defined in `EditLexer.h`: @@ -154,33 +138,6 @@ URL hotspot regex is defined at `src\Edit.c:108` (`HYPLNK_REGEX_FULL` macro). It Windows 10/11 dark mode via IAT (Import Address Table) hooks. Includes stub DLLs for uxtheme and user32. -### ARM64 Platform Considerations - -**Supported platforms**: Win32 (x86), x64, x64_AVX2, ARM64. ARM 32-bit is **not** supported (the `Release|ARM` solution config maps to Win32). - -#### Architecture detection - -Use `#if defined(_M_ARM64)` or the helper macro `NP3_BUILD_ARM64` (defined in `src\TypeDefs.h`) for ARM64-specific code paths. **Important**: both ARM64 and x64 define `_WIN64`, so use `_M_ARM64` when you need to distinguish ARM64 from x64. - -#### ARM64 rendering defaults - -ARM64 defaults to `SC_TECHNOLOGY_DIRECTWRITERETAIN` (value 2) instead of `SC_TECHNOLOGY_DIRECTWRITE` (value 1) to preserve the Direct2D back buffer between frames. This avoids flickering on Qualcomm Adreno GPUs and the Win11 25H2 DWM compositor. The main window also uses `WS_EX_COMPOSITED` on ARM64 for system-level double-buffering. Users can override via `RenderingTechnology` in the INI file or the View menu. - -#### ARM64 build configuration - -- `CETCompat` must be `false` for ARM64 (CET is x86/x64 only) -- `TargetMachine` must be `MachineARM64` in all ARM64 linker sections -- `_WIN64` must be defined in preprocessor definitions for all ARM64 configurations -- Build fix scripts in `Build\scripts\`: `FixARM64CETCompat.ps1`, `FixARM64CrossCompile.ps1`, `FixARM64OutDir.ps1` - -#### GrepWin on ARM64 - -No native ARM64 grepWin build exists. The ARM64 build uses `grepWin-x64_portable.exe` which runs via x64 emulation on Windows ARM64. The binary selection in `src\Notepad3.c` uses `#if defined(_M_ARM64)` to handle this explicitly. - -#### Theme change flickering prevention - -`MsgThemeChanged()` in `src\Notepad3.c` wraps all heavy operations (bar recreation, lexer reset, restyling) in `WM_SETREDRAW FALSE/TRUE` to suppress intermediate repaints and performs a single `RedrawWindow()` at the end. DarkMode `RedrawWindow()` calls in `ListViewUtil.hpp` omit `RDW_ERASE` to avoid background erase flashes during theme transitions. - ## Conventions ### Code style diff --git a/Build/Notepad3.ini b/Build/Notepad3.ini index cc64bc96aa..6aa76fd979 100644 --- a/Build/Notepad3.ini +++ b/Build/Notepad3.ini @@ -35,14 +35,6 @@ SettingsVersion=5 ;RelativeFileMRU=1 ;ReuseWindow=0 ;SaveBlankNewFile=true -;RenderingTechnology=1 -; Scintilla Rendering Technology: -; 0 = GDI (default Win32 rendering) -; 1 = DirectWrite (default) - Direct2D -; 2 = DirectWriteRetain (preserves back buffer, default on ARM64) -; 3 = DirectWriteDC (DC-based Direct2D) -; Tip: On ARM64 with rendering issues, try 0 (GDI) or 3 (DirectWriteDC) -; Per-resolution override in [Window]: e.g. 1920x1080 RenderingTechnology=0 ;SciFontQuality=3 ;SimpleIndentGuides=0 ;SingleFileInstance=1 diff --git a/CLAUDE.md b/CLAUDE.md index 8acf004bc2..2ef416c245 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -4,7 +4,7 @@ This file provides guidance to Claude Code (claude.ai/code) when working with co ## Project Overview -Notepad3 is a Windows-only Win32 desktop text editor (C/C++) built on **Scintilla** (editing component) and **Lexilla** (syntax highlighting). It ships with the companion tool **MiniPath** (file browser, Ctrl+M) and integrates with the external **grepWin** tool (file search/grep, Ctrl+Shift+F) via pre-built portable executables. Licensed under BSD 3-Clause. +Notepad3 is a Windows-only Win32 desktop text editor (C/C++) built on **Scintilla** (editing component) and **Lexilla** (syntax highlighting). It ships with the companion tool **MiniPath** (file browser, Ctrl+M) and integrates with the external **grepWin** tool (file search/grep, Ctrl+Shift+F). Licensed under BSD 3-Clause. ## Build Commands @@ -85,22 +85,6 @@ MainWndProc (Notepad3.c) | `src\uthash\` | uthash | Hash table / dynamic array macros | | `src\crypto\` | Rijndael/SHA-256 | AES-256 encryption | -### grepWin Integration (`grepWin\`) - -grepWin is an **external** file search/grep tool — it is **not** built from source as part of Notepad3. Pre-built portable executables and translation files are stored in the repository: - -- **`grepWin\portables\`** — `grepWin-x86_portable.exe`, `grepWin-x64_portable.exe`, `LICENSE.txt` -- **`grepWin\translations\`** — `*.lang` translation files (e.g. `German.lang`, `French.lang`) - -At runtime (`src\Dialogs.c`), Notepad3 searches for grepWin in this order: -1. `Settings2.GrepWinPath` (user-configured INI setting) -2. `\grepWin\grepWin-x64_portable.exe` (or x86) — portable layout -3. `%APPDATA%\Rizonesoft\Notepad3\grepWin\` — installed layout - -Language mapping (`src\MuiLanguage.c`): `grepWinLangResName[]` maps Notepad3 locale names (e.g. `de-DE`) to grepWin `.lang` filenames (e.g. `German.lang`). The language file path is written to `grepwin.ini` before launching. - -Portable build scripts (`Build\make_portable_*.cmd`) package grepWin into a `grepWin\` subdirectory in the archive containing both portable executables, the license, and all `*.lang` translations. - ### Syntax Lexers (`src\StyleLexers\`) 50+ languages, each in a `styleLexXXX.c` file. All follow the `EDITLEXER` struct pattern from `EditLexer.h`: @@ -206,32 +190,7 @@ URL hotspot regex is defined at `src\Edit.c:108` (`HYPLNK_REGEX_FULL` macro). It Windows 10/11 dark mode via IAT (Import Address Table) hooks. Includes stub DLLs for uxtheme and user32. -### ARM64 Platform Considerations - -**Supported platforms**: Win32 (x86), x64, x64_AVX2, ARM64. ARM 32-bit is **not** supported (the `Release|ARM` solution config maps to Win32). - -#### Architecture detection - -Use `#if defined(_M_ARM64)` or the helper macro `NP3_BUILD_ARM64` (defined in `src\TypeDefs.h`) for ARM64-specific code paths. **Important**: both ARM64 and x64 define `_WIN64`, so use `_M_ARM64` when you need to distinguish ARM64 from x64. - -#### ARM64 rendering defaults - -ARM64 defaults to `SC_TECHNOLOGY_DIRECTWRITERETAIN` (value 2) instead of `SC_TECHNOLOGY_DIRECTWRITE` (value 1) to preserve the Direct2D back buffer between frames. This avoids flickering on Qualcomm Adreno GPUs and the Win11 25H2 DWM compositor. The main window also uses `WS_EX_COMPOSITED` on ARM64 for system-level double-buffering. Users can override via `RenderingTechnology` in the INI file or the View menu. - -#### ARM64 build configuration - -- `CETCompat` must be `false` for ARM64 (CET is x86/x64 only) -- `TargetMachine` must be `MachineARM64` in all ARM64 linker sections -- `_WIN64` must be defined in preprocessor definitions for all ARM64 configurations -- Build fix scripts in `Build\scripts\`: `FixARM64CETCompat.ps1`, `FixARM64CrossCompile.ps1`, `FixARM64OutDir.ps1` - -#### GrepWin on ARM64 - -No native ARM64 grepWin build exists. The ARM64 build uses `grepWin-x64_portable.exe` which runs via x64 emulation on Windows ARM64. The binary selection in `src\Notepad3.c` uses `#if defined(_M_ARM64)` to handle this explicitly. - -#### Theme change flickering prevention - -`MsgThemeChanged()` in `src\Notepad3.c` wraps all heavy operations (bar recreation, lexer reset, restyling) in `WM_SETREDRAW FALSE/TRUE` to suppress intermediate repaints and performs a single `RedrawWindow()` at the end. DarkMode `RedrawWindow()` calls in `ListViewUtil.hpp` omit `RDW_ERASE` to avoid background erase flashes during theme transitions. +## Code Conventions ### Formatting diff --git a/lexilla/Lexilla.vcxproj b/lexilla/Lexilla.vcxproj index dab667c3ef..72c31b6145 100644 --- a/lexilla/Lexilla.vcxproj +++ b/lexilla/Lexilla.vcxproj @@ -477,7 +477,7 @@ Level4 - _WIN64;_WIN32_WINNT=0x0A00;WINVER=0x0A00;NTDDI_VERSION=0x0A000006;SCI_LEXER;_CRT_SECURE_NO_WARNINGS;STATIC_BUILD;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _WIN32_WINNT=0x0A00;WINVER=0x0A00;NTDDI_VERSION=0x0A000006;SCI_LEXER;_CRT_SECURE_NO_WARNINGS;STATIC_BUILD;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) true stdcpp20 true @@ -502,7 +502,6 @@ Console true false - MachineARM64 true @@ -599,7 +598,7 @@ true - _WIN64;_WIN32_WINNT=0x0A00;WINVER=0x0A00;NTDDI_VERSION=0x0A000006;SCI_LEXER;_CRT_SECURE_NO_WARNINGS;STATIC_BUILD;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + _WIN32_WINNT=0x0A00;WINVER=0x0A00;NTDDI_VERSION=0x0A000006;SCI_LEXER;_CRT_SECURE_NO_WARNINGS;STATIC_BUILD;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) true stdcpp20 true @@ -627,7 +626,6 @@ true true false - MachineARM64 true @@ -643,7 +641,7 @@ true - _WIN64;_WIN32_WINNT=0x0A00;WINVER=0x0A00;NTDDI_VERSION=0x0A000006;SCI_LEXER;_CRT_SECURE_NO_WARNINGS;STATIC_BUILD;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + _WIN32_WINNT=0x0A00;WINVER=0x0A00;NTDDI_VERSION=0x0A000006;SCI_LEXER;_CRT_SECURE_NO_WARNINGS;STATIC_BUILD;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) true stdcpp20 true @@ -671,7 +669,6 @@ true true false - MachineARM64 true @@ -683,4 +680,4 @@ - + \ No newline at end of file diff --git a/np3portableapp/build_np3portableapp.cmd b/np3portableapp/build_np3portableapp.cmd index 0072afea32..4793f885d6 100644 --- a/np3portableapp/build_np3portableapp.cmd +++ b/np3portableapp/build_np3portableapp.cmd @@ -324,15 +324,14 @@ if errorlevel 1 ( :: call %SCRIPT_DIR%Signing_for_NP3P_2nd_EXE.cmd :: --------------------------------------------------------------------------------------------------- -:: Step 11: report result +:: Step 11: Create .7z copy and report result :: --------------------------------------------------------------------------------------------------- echo. echo --- Step 11: Finalize --- set Notepad3Portable.paf.exe=%SCRIPT_DIR%Notepad3Portable_%VERSION%%DEVNAME%.paf.exe if exist %Notepad3Portable.paf.exe% ( - rem ~ PAF can be extracted using 7-ZIP, but it is not supposed for this issue - rem ~ DON't DO: copy /B %Notepad3Portable.paf.exe% %Notepad3Portable.paf.exe%.7z /Y /V + copy /B %Notepad3Portable.paf.exe% %Notepad3Portable.paf.exe%.7z /Y /V echo. echo === PortableApps Package Built Successfully! === echo Output: %Notepad3Portable.paf.exe% diff --git a/scintilla/win32/SciLexer.vcxproj b/scintilla/win32/SciLexer.vcxproj index 34e134fb97..fc12e80dc4 100644 --- a/scintilla/win32/SciLexer.vcxproj +++ b/scintilla/win32/SciLexer.vcxproj @@ -119,13 +119,11 @@ - _WIN64;_DEBUG;%(PreprocessorDefinitions) + _DEBUG;%(PreprocessorDefinitions) stdcpp17 Default - MachineARM64 - false @@ -158,14 +156,12 @@ true true - _WIN64;NDEBUG;%(PreprocessorDefinitions) + NDEBUG;%(PreprocessorDefinitions) stdcpp17 true true - MachineARM64 - false @@ -186,4 +182,4 @@ - + \ No newline at end of file diff --git a/scintilla/win32/Scintilla.vcxproj b/scintilla/win32/Scintilla.vcxproj index 038525342d..7b33211deb 100644 --- a/scintilla/win32/Scintilla.vcxproj +++ b/scintilla/win32/Scintilla.vcxproj @@ -120,13 +120,11 @@ - _WIN64;_DEBUG;%(PreprocessorDefinitions) + _DEBUG;%(PreprocessorDefinitions) stdcpp17 Default - MachineARM64 - false @@ -159,14 +157,12 @@ true true - _WIN64;NDEBUG;%(PreprocessorDefinitions) + NDEBUG;%(PreprocessorDefinitions) stdcpp17 true true - MachineARM64 - false @@ -190,4 +186,4 @@ - + \ No newline at end of file diff --git a/src/Config/Config.cpp b/src/Config/Config.cpp index 8c37674087..d89e24dcad 100644 --- a/src/Config/Config.cpp +++ b/src/Config/Config.cpp @@ -1325,13 +1325,7 @@ void LoadSettings() Defaults.RenderingTechnology = clampi(Defaults.RenderingTechnology, SC_TECHNOLOGY_DEFAULT, SC_TECHNOLOGY_DIRECTWRITEDC); } else { -#if defined(_M_ARM64) - // ARM64: use DirectWriteRetain to preserve back buffer between frames, - // avoiding flicker with Qualcomm Adreno GPUs and Win11 25H2 DWM compositor - Defaults.RenderingTechnology = SC_TECHNOLOGY_DIRECTWRITERETAIN; -#else Defaults.RenderingTechnology = SC_TECHNOLOGY_DIRECTWRITE; // new default DirectWrite (D2D) -#endif } // Settings2 EnableBidirectionalSupport deprecated diff --git a/src/DarkMode/ListViewUtil.hpp b/src/DarkMode/ListViewUtil.hpp index dfec7102bf..9878c83f43 100644 --- a/src/DarkMode/ListViewUtil.hpp +++ b/src/DarkMode/ListViewUtil.hpp @@ -61,7 +61,7 @@ extern "C" void InitListView(HWND hListView) SendMessage(hHeader, WM_THEMECHANGED, wParam, lParam); - RedrawWindow(hWnd, nullptr, nullptr, RDW_FRAME | RDW_INVALIDATE | RDW_INTERNALPAINT); + RedrawWindow(hWnd, nullptr, nullptr, RDW_ERASE | RDW_FRAME | RDW_INVALIDATE | RDW_INTERNALPAINT); } } break; @@ -123,7 +123,7 @@ extern "C" void InitTreeView(HWND hTreeView) } CloseThemeData(hTheme); } - RedrawWindow(hWnd, nullptr, nullptr, RDW_FRAME | RDW_INVALIDATE | RDW_INTERNALPAINT); + RedrawWindow(hWnd, nullptr, nullptr, RDW_ERASE | RDW_FRAME | RDW_INVALIDATE | RDW_INTERNALPAINT); } } break; diff --git a/src/Notepad3.c b/src/Notepad3.c index 01916a898d..168e926423 100644 --- a/src/Notepad3.c +++ b/src/Notepad3.c @@ -81,9 +81,7 @@ LPCWSTR WordBookMarks[MARKER_NP3_BOOKMARK] = { CONSTANTS_T const Constants = { 2 // StdDefaultLexerID , L"minipath.exe" // FileBrowserMiniPath -#if defined(_M_ARM64) - , L"grepWin-x64_portable.exe" // FileSearchGrepWin (x64 via emulation on ARM64) -#elif defined(_WIN64) +#ifdef _WIN64 , L"grepWin-x64_portable.exe" // FileSearchGrepWin #else , L"grepWin-x86_portable.exe" // FileSearchGrepWin @@ -1820,11 +1818,7 @@ HWND InitInstance(const HINSTANCE hInstance, int nCmdShow) DWORD const dwStyle = ((WS_OVERLAPPEDWINDOW | WS_CLIPCHILDREN) & ~WS_VISIBLE); // | (g_IniWinInfo.max ? WS_MAXIMIZE : 0); HWND const hwndMain = CreateWindowEx( -#if defined(_M_ARM64) - WS_EX_ACCEPTFILES | WS_EX_COMPOSITED, // double-buffering reduces flicker on ARM64 -#else WS_EX_ACCEPTFILES, -#endif s_wchWndClass, _W(SAPPNAME), dwStyle, @@ -3599,9 +3593,6 @@ LRESULT MsgThemeChanged(HWND hwnd, WPARAM wParam,LPARAM lParam) if (Globals.hwndMain) { - // suppress intermediate redraws during heavy theme update to prevent flickering - SendMessage(hwnd, WM_SETREDRAW, FALSE, 0); - #ifdef D_NP3_WIN10_DARK_MODE RefreshTitleBarThemeColor(hwnd); #endif @@ -3631,10 +3622,6 @@ LRESULT MsgThemeChanged(HWND hwnd, WPARAM wParam,LPARAM lParam) EditUpdateVisibleIndicators(); UpdateUI(hwnd); - - // re-enable drawing and force a single - SendMessage(hwnd, WM_SETREDRAW, TRUE, 0); - RedrawWindow(hwnd, NULL, NULL, RDW_ERASE | RDW_FRAME | RDW_INVALIDATE | RDW_ALLCHILDREN); } UpdateWindowEx(hwnd); diff --git a/src/Notepad3.vcxproj b/src/Notepad3.vcxproj index ce22703ded..7b505f33bb 100644 --- a/src/Notepad3.vcxproj +++ b/src/Notepad3.vcxproj @@ -426,7 +426,6 @@ false true clang_rt.asan-i386.lib - MachineARM64 @@ -854,7 +853,6 @@ true - MachineARM64 @@ -940,7 +938,6 @@ true - MachineARM64 @@ -1280,4 +1277,4 @@ - + \ No newline at end of file diff --git a/src/TypeDefs.h b/src/TypeDefs.h index a9d789429e..8c3a29cbd4 100644 --- a/src/TypeDefs.h +++ b/src/TypeDefs.h @@ -65,14 +65,6 @@ // no Analyze warning "prefer: enum class" #pragma warning(disable : 26812) -// --- Platform Architecture Detection --- -// Use NP3_BUILD_ARM64 for ARM64-specific code paths -#if defined(_M_ARM64) -#define NP3_BUILD_ARM64 1 -#else -#define NP3_BUILD_ARM64 0 -#endif - /**************************************************/ /* Declared in WINNT.H */ /* */ From 29e6b42613b7bc6d267f4c2479021e61a0163d2f Mon Sep 17 00:00:00 2001 From: Pairi Daiza Date: Sat, 11 Apr 2026 00:46:30 +0200 Subject: [PATCH 5/5] MUI - Migration to original grepWin Portable, update divers scripts and cleanup --- .github/copilot-instructions.md | 45 +++++++++++++++++- Build/Notepad3.ini | 10 +++- Build/Notepad3_pap.ini | 8 ++++ CLAUDE.md | 45 +++++++++++++++++- License.txt | 2 +- Readme.md | 4 +- Readme.txt | 23 +++++---- grepWin/portables/website.url | 2 - language/Line numbers to translate.txt | 28 +---------- language/common_res.rc | 8 ++-- language/np3_af_za/strings_af_za.rc | 2 +- language/np3_be_by/strings_be_by.rc | 2 +- language/np3_de_de/strings_de_de.rc | 15 +++--- language/np3_el_gr/strings_el_gr.rc | 2 +- language/np3_en_gb/strings_en_gb.rc | 2 +- language/np3_en_us/strings_en_us.rc | 2 +- language/np3_es_es/strings_es_es.rc | 2 +- language/np3_fi_fi/strings_fi_fi.rc | 2 +- language/np3_fr_fr/strings_fr_fr.rc | 2 +- language/np3_hi_in/strings_hi_in.rc | 2 +- language/np3_hu_hu/strings_hu_hu.rc | 2 +- language/np3_id_id/strings_id_id.rc | 2 +- language/np3_it_it/strings_it_it.rc | 2 +- language/np3_ja_jp/strings_ja_jp.rc | 2 +- language/np3_ko_kr/strings_ko_kr.rc | 2 +- language/np3_nl_nl/strings_nl_nl.rc | 2 +- language/np3_pl_pl/strings_pl_pl.rc | 2 +- language/np3_pt_br/strings_pt_br.rc | 2 +- language/np3_pt_pt/strings_pt_pt.rc | 2 +- language/np3_ru_ru/dialogs_ru_ru.rc | 2 +- language/np3_ru_ru/strings_ru_ru.rc | 2 +- language/np3_sk_sk/strings_sk_sk.rc | 2 +- language/np3_sv_se/strings_sv_se.rc | 2 +- language/np3_tr_tr/strings_tr_tr.rc | 2 +- language/np3_vi_vn/strings_vi_vn.rc | 2 +- language/np3_zh_cn/strings_zh_cn.rc | 2 +- language/np3_zh_tw/strings_zh_tw.rc | 2 +- lexilla/Lexilla.vcxproj | 11 +++-- .../App/AppInfo/Launcher/Splash.jpg | Bin 101688 -> 32228 bytes .../App/DefaultData/settings/Notepad3.ini | 8 ++++ .../App/Notepad3/Docs/Changes.txt | 8 ++-- .../App/Notepad3/Docs/License.txt | 2 +- .../App/Notepad3/Docs/Readme.txt | 23 +++++---- np3portableapp/_buildname.txt | 2 +- np3portableapp/build_np3portableapp.cmd | 28 +---------- scintilla/win32/SciLexer.vcxproj | 10 ++-- scintilla/win32/Scintilla.vcxproj | 10 ++-- src/Config/Config.cpp | 6 +++ src/DarkMode/ListViewUtil.hpp | 4 +- src/Notepad3.c | 15 +++++- src/Notepad3.vcxproj | 5 +- src/TypeDefs.h | 8 ++++ 52 files changed, 248 insertions(+), 134 deletions(-) delete mode 100644 grepWin/portables/website.url diff --git a/.github/copilot-instructions.md b/.github/copilot-instructions.md index 8f0d9d49dd..77a44e0327 100644 --- a/.github/copilot-instructions.md +++ b/.github/copilot-instructions.md @@ -48,7 +48,7 @@ GitHub Actions workflow at `.github/workflows/build.yml` builds all four platfor ## Architecture -Notepad3 is a Win32 desktop text editor built on the **Scintilla** editing component with **Lexilla** for syntax highlighting. It ships with the companion tool **MiniPath** (file browser) and integrates with the external **grepWin** tool (file search/grep). +Notepad3 is a Win32 desktop text editor built on the **Scintilla** editing component with **Lexilla** for syntax highlighting. It ships with the companion tool **MiniPath** (file browser) and integrates with the external **grepWin** tool (file search/grep) via pre-built portable executables. ### Core modules (in `src\`) @@ -75,6 +75,22 @@ Notepad3 is a Win32 desktop text editor built on the **Scintilla** editing compo - **`src\uthash\`** — Hash table library (C macros) - **`src\crypto\`** — Rijndael/SHA-256 for AES-256 encryption +### grepWin Integration (`grepWin\`) + +grepWin is an **external** file search/grep tool — it is **not** built from source as part of Notepad3. Pre-built portable executables and translation files are stored in the repository: + +- **`grepWin\portables\`** — `grepWin-x86_portable.exe`, `grepWin-x64_portable.exe`, `LICENSE.txt` +- **`grepWin\translations\`** — `*.lang` translation files (e.g. `German.lang`, `French.lang`) + +At runtime (`src\Dialogs.c`), Notepad3 searches for grepWin in this order: +1. `Settings2.GrepWinPath` (user-configured INI setting) +2. `\grepWin\grepWin-x64_portable.exe` (or x86) — portable layout +3. `%APPDATA%\Rizonesoft\Notepad3\grepWin\` — installed layout + +Language mapping (`src\MuiLanguage.c`): `grepWinLangResName[]` maps Notepad3 locale names (e.g. `de-DE`) to grepWin `.lang` filenames (e.g. `German.lang`). The language file path is written to `grepwin.ini` before launching. + +Portable build scripts (`Build\make_portable_*.cmd`) package grepWin into a `grepWin\` subdirectory in the archive containing both portable executables, the license, and all `*.lang` translations. + ### Syntax highlighting lexers (`src\StyleLexers\`) Each language has its own `styleLexXXX.c` file (~50+ languages). All lexers follow the `EDITLEXER` struct pattern defined in `EditLexer.h`: @@ -138,6 +154,33 @@ URL hotspot regex is defined at `src\Edit.c:108` (`HYPLNK_REGEX_FULL` macro). It Windows 10/11 dark mode via IAT (Import Address Table) hooks. Includes stub DLLs for uxtheme and user32. +### ARM64 Platform Considerations + +**Supported platforms**: Win32 (x86), x64, x64_AVX2, ARM64. ARM 32-bit is **not** supported (the `Release|ARM` solution config maps to Win32). + +#### Architecture detection + +Use `#if defined(_M_ARM64)` or the helper macro `NP3_BUILD_ARM64` (defined in `src\TypeDefs.h`) for ARM64-specific code paths. **Important**: both ARM64 and x64 define `_WIN64`, so use `_M_ARM64` when you need to distinguish ARM64 from x64. + +#### ARM64 rendering defaults + +ARM64 defaults to `SC_TECHNOLOGY_DIRECTWRITERETAIN` (value 2) instead of `SC_TECHNOLOGY_DIRECTWRITE` (value 1) to preserve the Direct2D back buffer between frames. This avoids flickering on Qualcomm Adreno GPUs and the Win11 25H2 DWM compositor. The main window also uses `WS_EX_COMPOSITED` on ARM64 for system-level double-buffering. Users can override via `RenderingTechnology` in the INI file or the View menu. + +#### ARM64 build configuration + +- `CETCompat` must be `false` for ARM64 (CET is x86/x64 only) +- `TargetMachine` must be `MachineARM64` in all ARM64 linker sections +- `_WIN64` must be defined in preprocessor definitions for all ARM64 configurations +- Build fix scripts in `Build\scripts\`: `FixARM64CETCompat.ps1`, `FixARM64CrossCompile.ps1`, `FixARM64OutDir.ps1` + +#### GrepWin on ARM64 + +No native ARM64 grepWin build exists. The ARM64 build uses `grepWin-x64_portable.exe` which runs via x64 emulation on Windows ARM64. The binary selection in `src\Notepad3.c` uses `#if defined(_M_ARM64)` to handle this explicitly. + +#### Theme change flickering prevention + +`MsgThemeChanged()` in `src\Notepad3.c` wraps all heavy operations (bar recreation, lexer reset, restyling) in `WM_SETREDRAW FALSE/TRUE` to suppress intermediate repaints and performs a single `RedrawWindow()` at the end. DarkMode `RedrawWindow()` calls in `ListViewUtil.hpp` omit `RDW_ERASE` to avoid background erase flashes during theme transitions. + ## Conventions ### Code style diff --git a/Build/Notepad3.ini b/Build/Notepad3.ini index 6aa76fd979..91ec9e809a 100644 --- a/Build/Notepad3.ini +++ b/Build/Notepad3.ini @@ -5,7 +5,7 @@ SettingsVersion=5 ;AnalyzeReliableConfidenceLevel=50 [Settings2] -;grepWin.exe=grepWinNP3.exe +;grepWin.exe=%PORTABLEAPPS_DIR%\grepWinPortable\grepWinPortable.exe ;IMEInteraction=0 ;DateTimeFormat= ;(-> ) ;DateTimeLongFormat= ;(-> ) @@ -35,6 +35,14 @@ SettingsVersion=5 ;RelativeFileMRU=1 ;ReuseWindow=0 ;SaveBlankNewFile=true +;RenderingTechnology=1 +; Scintilla Rendering Technology: +; 0 = GDI (default Win32 rendering) +; 1 = DirectWrite (default) - Direct2D +; 2 = DirectWriteRetain (preserves back buffer, default on ARM64) +; 3 = DirectWriteDC (DC-based Direct2D) +; Tip: On ARM64 with rendering issues, try 0 (GDI) or 3 (DirectWriteDC) +; Per-resolution override in [Window]: e.g. 1920x1080 RenderingTechnology=0 ;SciFontQuality=3 ;SimpleIndentGuides=0 ;SingleFileInstance=1 diff --git a/Build/Notepad3_pap.ini b/Build/Notepad3_pap.ini index 564d1514af..b50797bab0 100644 --- a/Build/Notepad3_pap.ini +++ b/Build/Notepad3_pap.ini @@ -35,6 +35,14 @@ grepWin.exe=%PORTABLEAPPS_DIR%\grepWinPortable\grepWinPortable.exe ;RelativeFileMRU=1 ;ReuseWindow=0 ;SaveBlankNewFile=true +;RenderingTechnology=1 +; Scintilla Rendering Technology: +; 0 = GDI (default Win32 rendering) +; 1 = DirectWrite (default) - Direct2D +; 2 = DirectWriteRetain (preserves back buffer, default on ARM64) +; 3 = DirectWriteDC (DC-based Direct2D) +; Tip: On ARM64 with rendering issues, try 0 (GDI) or 3 (DirectWriteDC) +; Per-resolution override in [Window]: e.g. 1920x1080 RenderingTechnology=0 ;SciFontQuality=3 ;SimpleIndentGuides=0 ;SingleFileInstance=1 diff --git a/CLAUDE.md b/CLAUDE.md index 2ef416c245..8acf004bc2 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -4,7 +4,7 @@ This file provides guidance to Claude Code (claude.ai/code) when working with co ## Project Overview -Notepad3 is a Windows-only Win32 desktop text editor (C/C++) built on **Scintilla** (editing component) and **Lexilla** (syntax highlighting). It ships with the companion tool **MiniPath** (file browser, Ctrl+M) and integrates with the external **grepWin** tool (file search/grep, Ctrl+Shift+F). Licensed under BSD 3-Clause. +Notepad3 is a Windows-only Win32 desktop text editor (C/C++) built on **Scintilla** (editing component) and **Lexilla** (syntax highlighting). It ships with the companion tool **MiniPath** (file browser, Ctrl+M) and integrates with the external **grepWin** tool (file search/grep, Ctrl+Shift+F) via pre-built portable executables. Licensed under BSD 3-Clause. ## Build Commands @@ -85,6 +85,22 @@ MainWndProc (Notepad3.c) | `src\uthash\` | uthash | Hash table / dynamic array macros | | `src\crypto\` | Rijndael/SHA-256 | AES-256 encryption | +### grepWin Integration (`grepWin\`) + +grepWin is an **external** file search/grep tool — it is **not** built from source as part of Notepad3. Pre-built portable executables and translation files are stored in the repository: + +- **`grepWin\portables\`** — `grepWin-x86_portable.exe`, `grepWin-x64_portable.exe`, `LICENSE.txt` +- **`grepWin\translations\`** — `*.lang` translation files (e.g. `German.lang`, `French.lang`) + +At runtime (`src\Dialogs.c`), Notepad3 searches for grepWin in this order: +1. `Settings2.GrepWinPath` (user-configured INI setting) +2. `\grepWin\grepWin-x64_portable.exe` (or x86) — portable layout +3. `%APPDATA%\Rizonesoft\Notepad3\grepWin\` — installed layout + +Language mapping (`src\MuiLanguage.c`): `grepWinLangResName[]` maps Notepad3 locale names (e.g. `de-DE`) to grepWin `.lang` filenames (e.g. `German.lang`). The language file path is written to `grepwin.ini` before launching. + +Portable build scripts (`Build\make_portable_*.cmd`) package grepWin into a `grepWin\` subdirectory in the archive containing both portable executables, the license, and all `*.lang` translations. + ### Syntax Lexers (`src\StyleLexers\`) 50+ languages, each in a `styleLexXXX.c` file. All follow the `EDITLEXER` struct pattern from `EditLexer.h`: @@ -190,7 +206,32 @@ URL hotspot regex is defined at `src\Edit.c:108` (`HYPLNK_REGEX_FULL` macro). It Windows 10/11 dark mode via IAT (Import Address Table) hooks. Includes stub DLLs for uxtheme and user32. -## Code Conventions +### ARM64 Platform Considerations + +**Supported platforms**: Win32 (x86), x64, x64_AVX2, ARM64. ARM 32-bit is **not** supported (the `Release|ARM` solution config maps to Win32). + +#### Architecture detection + +Use `#if defined(_M_ARM64)` or the helper macro `NP3_BUILD_ARM64` (defined in `src\TypeDefs.h`) for ARM64-specific code paths. **Important**: both ARM64 and x64 define `_WIN64`, so use `_M_ARM64` when you need to distinguish ARM64 from x64. + +#### ARM64 rendering defaults + +ARM64 defaults to `SC_TECHNOLOGY_DIRECTWRITERETAIN` (value 2) instead of `SC_TECHNOLOGY_DIRECTWRITE` (value 1) to preserve the Direct2D back buffer between frames. This avoids flickering on Qualcomm Adreno GPUs and the Win11 25H2 DWM compositor. The main window also uses `WS_EX_COMPOSITED` on ARM64 for system-level double-buffering. Users can override via `RenderingTechnology` in the INI file or the View menu. + +#### ARM64 build configuration + +- `CETCompat` must be `false` for ARM64 (CET is x86/x64 only) +- `TargetMachine` must be `MachineARM64` in all ARM64 linker sections +- `_WIN64` must be defined in preprocessor definitions for all ARM64 configurations +- Build fix scripts in `Build\scripts\`: `FixARM64CETCompat.ps1`, `FixARM64CrossCompile.ps1`, `FixARM64OutDir.ps1` + +#### GrepWin on ARM64 + +No native ARM64 grepWin build exists. The ARM64 build uses `grepWin-x64_portable.exe` which runs via x64 emulation on Windows ARM64. The binary selection in `src\Notepad3.c` uses `#if defined(_M_ARM64)` to handle this explicitly. + +#### Theme change flickering prevention + +`MsgThemeChanged()` in `src\Notepad3.c` wraps all heavy operations (bar recreation, lexer reset, restyling) in `WM_SETREDRAW FALSE/TRUE` to suppress intermediate repaints and performs a single `RedrawWindow()` at the end. DarkMode `RedrawWindow()` calls in `ListViewUtil.hpp` omit `RDW_ERASE` to avoid background erase flashes during theme transitions. ### Formatting diff --git a/License.txt b/License.txt index cf68bffd1f..ae3a0b3581 100644 --- a/License.txt +++ b/License.txt @@ -30,7 +30,7 @@ GNU General Public License v3.0, All Rights Reserved. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . -"grepWin" is developed by Stefan Kung (https://tools.stefankueng.com/grepWin.html). +"grepWin" is developed by Stefan Küng (https://tools.stefankueng.com/grepWin.html). Original "grepWin" binaries and corresponding source code (according GPL to v3.0) can be retrived at folowing location https://github.com/stefankueng/grepWin/releases/. diff --git a/Readme.md b/Readme.md index de2fe63ae5..7cad15372f 100644 --- a/Readme.md +++ b/Readme.md @@ -48,7 +48,7 @@ Over 55 languages supported, including: - **Portable design** — runs from USB drives with relative path storage ### Search -- **grepWinNP3** — integrated search-in-files tool with regex support (**Ctrl+Shift+F**) +- **grepWin** — integrated search-in-files tool with regex support (**Ctrl+Shift+F**) - **Hyperlink hotspot highlighting** — Ctrl+Click to open in browser, Alt+Click to load in editor ### User Interface @@ -66,7 +66,7 @@ Over 55 languages supported, including: ### Companion Tools - **[MiniPath](minipath/)** — fast file browser plugin (Ctrl+M) -- **[grepWinNP3](grepWinNP3/)** — powerful search-and-replace across files +- **[grepWin](grepWin/)** — powerful search-and-replace across files ## System Requirements diff --git a/Readme.txt b/Readme.txt index 3a6269b2a9..30944c723b 100644 --- a/Readme.txt +++ b/Readme.txt @@ -70,6 +70,7 @@ Development: Contributors: ------------- Derick Payne (© Rizonesoft) https://rizonesoft.com +Pairi Daiza (MUI language support) https://github.com/hpwamr XhmikosR (Notepad2-mod) https://xhmikosr.github.io/notepad2-mod Kai Liu (CodeFolding) https://code.kliu.org/misc/notepad2 RL Vision (Bookmarks) https://www.rlvision.com/notepad2/about.php @@ -83,13 +84,16 @@ Some Icons by Pixel perfect (Flaticon) https://www.flaticon.com -------------------------------------------------------------------------------- Open Source / Libraries: ------------------------ -N.Hodgson (Scintilla) https://www.scintilla.org -K.Kosako (Oniguruma Regex) https://github.com/kkos/oniguruma -Stefan Küng (grepWin) https://github.com/stefankueng/grepWin -D.Dyer (NotepadCrypt) https://www.real-me.net/ddyer/notepad/NotepadCrypt.html -T.D.Hanson (uthash) https://troydhanson.github.io/uthash -Carbo Kuo (Mozilla's uchardet) https://www.freedesktop.org/wiki/Software/uchardet -Lewis Van Winkle (TinyExpr) https://github.com/codeplea/tinyexpr +Neil Hodgson (Scintilla) https://www.scintilla.org +Neil Hodgson (Lexilla) https://www.scintilla.org/Lexilla.html +Philip Hazel et al. (PCRE2 Regex) https://pcre2project.github.io/pcre2 +Stefan Küng (grepWin) https://github.com/stefankueng/grepWin +D.Dyer (NotepadCrypt) https://www.real-me.net/ddyer/notepad/NotepadCrypt.html +Brodie Thiesfield (SimpleIni) https://github.com/brofield/simpleini +T.D.Hanson (uthash) https://troydhanson.github.io/uthash +Carbo Kuo (Mozilla's uchardet) https://www.freedesktop.org/wiki/Software/uchardet +Lewis Van Winkle (TinyExpr) https://github.com/codeplea/tinyexpr +Carlo Pallini (Resample BMP) https://www.codeproject.com/Articles/22271/Plain-C-Resampling-DLL -------------------------------------------------------------------------------- Acknowledgments: @@ -97,10 +101,12 @@ Acknowledgments: alex-ilin https://github.com/alex-ilin alexantr https://github.com/alexantr ashish12phnx https://github.com/ashish12phnx +bovirus https://github.com/bovirus bravo-hero https://github.com/bravo-hero chuanliwen https://github.com/chuanliwen craigo- https://github.com/craigo- Crane70 https://github.com/Crane70 +en2sv https://github.com/en2sv engelhro https://github.com/engelhro Hexaae https://github.com/Hexaae hpwamr https://github.com/hpwamr @@ -122,6 +128,7 @@ MelchiorGaspar https://github.com/MelchiorGaspar Mitezuss https://github.com/Mitezuss nickreserved https://github.com/nickreserved np3fan https://github.com/np3fan +p0k33m0n https://github.com/p0k33m0n quadratz https://github.com/quadratz RaiKoHoff https://github.com/RaiKoHoff rizonesoft https://github.com/rizonesoft @@ -144,7 +151,7 @@ Data Sharing Service https://workupload.com Licences: --------- Scintilla https://www.scintilla.org/License.txt -Oniguruma Regex https://github.com/kkos/oniguruma/blob/master/COPYING +PCRE2 Regex https://github.com/PCRE2Project/pcre2/blob/main/LICENCE.md grepWin https://github.com/stefankueng/grepWin/blob/master/LICENSE uthash https://troydhanson.github.io/uthash/license.html uchardet https://www.freedesktop.org/wiki/Software/uchardet/#license diff --git a/grepWin/portables/website.url b/grepWin/portables/website.url deleted file mode 100644 index 14ff80821a..0000000000 --- a/grepWin/portables/website.url +++ /dev/null @@ -1,2 +0,0 @@ -[InternetShortcut] -URL=https://tools.stefankueng.com/ \ No newline at end of file diff --git a/language/Line numbers to translate.txt b/language/Line numbers to translate.txt index 8c6134ef0d..eea5b15fbc 100644 --- a/language/Line numbers to translate.txt +++ b/language/Line numbers to translate.txt @@ -1,37 +1,11 @@ ====================================================================================================== == == == This file is intended for the "Translators" to communicate to them the "Line Numbers" of == -== the "Added or Modified" lines in "Resource" files ("filename_xx_yy.rc" and "grepWinNP3.lang"). == +== the "Added or Modified" lines in "Resource" files ("filename_xx_yy.rc" and "grepWin.lang"). == == == == Last update: 2026-03-06 == ====================================================================================================== -January 2024: Line numbers to translate_2024-01 - No "Added or Modified" items in January 2024 -Februar 2024: Line numbers to translate_2024-02 - No "Added or Modified" items in February 2024 -March 2024: Line numbers to translate_2024-03 - No "Added or Modified" items in March 2024 -April 2024: Line numbers to translate_2024-04 - No "Added or Modified" items in April 2024 -May 2024: Line numbers to translate_2024-05 - https://workupload.com/file/gTG3tx8xeDn (2024-05-31) -June 2024: Line numbers to translate_2024-06 - No "Added or Modified" items in June 2024 -July 2024: Line numbers to translate_2024-07 - https://workupload.com/file/CrBAXqPmbRp (2024-07-03) -August 2024: Line numbers to translate_2024-08 - https://workupload.com/file/QMEYR9fNhvc (2024-08-24) -Septemb 2024: Line numbers to translate_2024-09 - No "Added or Modified" items in September 2024 -October 2024: Line numbers to translate_2024-10 - No "Added or Modified" items in October 2024 -Novemb. 2024: Line numbers to translate_2024-11 - https://workupload.com/file/3ZUjcxrZv9p (2024-11-13) -Decemb. 2024: Line numbers to translate_2024-12 - No "Added or Modified" items in December 2024 - -January 2025: Line numbers to translate_2025-01 - No "Added or Modified" items in January 2025 -Februar 2025: Line numbers to translate_2025-02 - No "Added or Modified" items in February 2025 -March 2025: Line numbers to translate_2025-03 - No "Added or Modified" items in March 2025 -April 2025: Line numbers to translate_2025-04 - No "Added or Modified" items in April 2025 -May 2025: Line numbers to translate_2025-05 - No "Added or Modified" items in May 2025 -June 2025: Line numbers to translate_2025-06 - No "Added or Modified" items in June 2025 -July 2025: Line numbers to translate_2025-07 - No "Added or Modified" items in July 2025 -August 2025: Line numbers to translate_2025-08 - No "Added or Modified" items in August 2025 -Septemb 2025: Line numbers to translate_2025-09 - No "Added or Modified" items in September 2025 -October 2025: Line numbers to translate_2025-10 - No "Added or Modified" items in October 2025 -Novemb. 2025: Line numbers to translate_2025-11 - No "Added or Modified" items in November 2025 -Decemb. 2025: Line numbers to translate_2025-12 - No "Added or Modified" items in December 2025 - January 2026: Line numbers to translate_2026-01 - No "Added or Modified" items in January 2026 Februar 2026: Line numbers to translate_2026-02 - No "Added or Modified" items in February 2026 March 2026: Line numbers to translate_2026-03 - https://workupload.com/file/uDjfcJwACXx (2026-03-06) diff --git a/language/common_res.rc b/language/common_res.rc index 3c2d60c0db..4b1179d8d6 100644 --- a/language/common_res.rc +++ b/language/common_res.rc @@ -102,9 +102,8 @@ IDS_MUI_ABOUT_CONTRIBS "\ IDS_MUI_ABOUT_LIBS "\ \\cf0 Neil Hodgson (Scintilla)\\tab https://www.scintilla.org\\par\ \\cf0 Neil Hodgson (Lexilla)\\tab https://www.scintilla.org/Lexilla.html\\par\ -\\cf0 K.Kosako (Oniguruma Regex, deprecated)\\tab https://github.com/kkos/oniguruma\\par\ \\cf0 Philip Hazel et al. (PCRE2 Regex)\\tab https://pcre2project.github.io/pcre2\\par\ -\\cf0 Stefan K\\u252nng (grepWin)\\tab https://github.com/stefankueng/grepWin\\par\ +\\cf0 Stefan Küng (grepWin)\\tab https://github.com/stefankueng/grepWin\\par\ \\cf0 Dave Dyer (NotepadCrypt)\\tab https://www.real-me.net/ddyer/notepad/NotepadCrypt.html\\par\ \\cf0 Brodie Thiesfield (SimpleIni)\\tab https://github.com/brofield/simpleini\\par\ \\cf0 T.D.Hanson (uthash)\\tab https://troydhanson.github.io/uthash\\par\ @@ -123,10 +122,12 @@ IDS_MUI_ABOUT_ACKNOWLEDGES "\ \\cf0 alex-ilin\\tab https://github.com/alex-ilin\\par\ \\cf0 alexantr\\tab https://github.com/alexantr\\par\ \\cf0 ashish12phnx\\tab https://github.com/ashish12phnx\\par\ +\\cf0 bovirus\\tab https://github.com/bovirus\\par\ \\cf0 bravo-hero\\tab https://github.com/bravo-hero\\par\ \\cf0 chuanliwen\\tab https://github.com/chuanliwen\\par\ \\cf0 craigo-\\tab https://github.com/craigo-/\\par\ \\cf0 Crane70\\tab https://github.com/Crane70\\par\ +\\cf0 en2sv\\tab https://github.com/en2sv\\par\ \\cf0 engelhro\\tab https://github.com/engelhro\\par\ \\cf0 Hexaae\\tab https://github.com/Hexaae\\par\ \\cf0 hpwamr\\tab https://github.com/hpwamr\\par\ @@ -148,8 +149,8 @@ IDS_MUI_ABOUT_ACKNOWLEDGES "\ \\cf0 Mitezuss\\tab https://github.com/Mitezuss\\par\ \\cf0 nickreserved\\tab https://github.com/nickreserved\\par\ \\cf0 np3fan\\tab https://github.com/np3fan\\par\ +\\cf0 p0k33m0n\\tab https://github.com/p0k33m0n\\par\ \\cf0 quadratz\\tab https://github.com/quadratz\\par\ -\\cf0 RaiKoHoff\\tab https://github.com/RaiKoHoff\\par\ \\cf0 rizonesoft\\tab https://github.com/rizonesoft\\par\ \\cf0 Rudolfin\\tab https://github.com/Rudolfin\\par\ \\cf0 Stephan-P\\tab https://github.com/Stephan-P\\par\ @@ -170,7 +171,6 @@ IDS_MUI_ABOUT_MORE "\ IDS_MUI_ABOUT_LICENSES "\ \\cf0 Scintilla\\tab https://www.scintilla.org/License.txt\\par\ -\\cf0 Oniguruma Regex\\tab https://github.com/kkos/oniguruma/blob/master/COPYING\\par\ \\cf0 PCRE2 Regex\\tab https://github.com/PCRE2Project/pcre2/blob/main/LICENCE.md\\par\ \\cf0 grepWin\\tab https://github.com/stefankueng/grepWin/blob/master/LICENSE\\par\ \\cf0 uthash\\tab https://troydhanson.github.io/uthash/license.html\\par\ diff --git a/language/np3_af_za/strings_af_za.rc b/language/np3_af_za/strings_af_za.rc index 29b4e28f31..7ff178ae9f 100644 --- a/language/np3_af_za/strings_af_za.rc +++ b/language/np3_af_za/strings_af_za.rc @@ -132,7 +132,7 @@ BEGIN IDS_MUI_ERR_PATHNOTFOUND "Die pad vir ""%s"" bestaan ​​nie meer nie.\nHerskep die pad en stoor die lêer?" IDS_MUI_ERR_DLG_FORMAT "Fout '%s', oorsaak:\n%s(ID:%d)\n" IDS_MUI_ERR_BROWSE "Geen lêerblaaier plugin is gevind nie\nDie MiniPath-lêerblaaier plugin kan afgelaai word vanaf https://rizonesoft.com" - IDS_MUI_ERR_GREPWIN "Geen lêer soek-inprop is gevind nie\nDie grepWinNP3 lêersoek plugin kan afgelaai word vanaf https://rizonesoft.com" + IDS_MUI_ERR_GREPWIN "Geen lêer soek-inprop is gevind nie\nDie grepWin lêersoek plugin kan afgelaai word vanaf https://portableapps.com/apps/utilities/grepwin-portable" IDS_MUI_ERR_MRUDLG "Geen toegang tot die gekose lêer nie!\nWil jy dit uit die lys verwyder?" IDS_MUI_ERR_CREATELINK "Kon nie die Desktop skakel skep nie" IDS_MUI_ERR_PREVWINDISABLED diff --git a/language/np3_be_by/strings_be_by.rc b/language/np3_be_by/strings_be_by.rc index a0eee664b1..a62e687310 100644 --- a/language/np3_be_by/strings_be_by.rc +++ b/language/np3_be_by/strings_be_by.rc @@ -132,7 +132,7 @@ BEGIN IDS_MUI_ERR_PATHNOTFOUND "Шлях да «%s» больш не існуе.\nАднавіць шлях і захаваць файл?" IDS_MUI_ERR_DLG_FORMAT "Памылка '%s', прычына:\n%s(ID:%d)\n" IDS_MUI_ERR_BROWSE "Не знойдзены плагін аглядніка файлаў\nПлагін MiniPath можна спампаваць з сайта https://rizonesoft.com" - IDS_MUI_ERR_GREPWIN "Не знойдзены плагін для пошука ў файлах\nПлагін grepWinNP3 можна спампаваць з сайта https://rizonesoft.com" + IDS_MUI_ERR_GREPWIN "Не знойдзены плагін для пошука ў файлах\nПлагін grepWin можна спампаваць з сайта https://portableapps.com/apps/utilities/grepwin-portable" IDS_MUI_ERR_MRUDLG "Няма доступа да выбранага файла!\nХочаце выдаліць яго са спіску?" IDS_MUI_ERR_CREATELINK "Памылка стварэння цэтліка на Працоўным стале" IDS_MUI_ERR_PREVWINDISABLED diff --git a/language/np3_de_de/strings_de_de.rc b/language/np3_de_de/strings_de_de.rc index 16ec6af75a..31b6229b6a 100644 --- a/language/np3_de_de/strings_de_de.rc +++ b/language/np3_de_de/strings_de_de.rc @@ -127,13 +127,14 @@ END STRINGTABLE BEGIN - IDS_MUI_ERR_LOADFILE "Fehler beim laden ""%s""" - IDS_MUI_ERR_SAVEFILE "Fehler beim speichern ""%s""" - IDS_MUI_ERR_PATHNOTFOUND "Der Dateipfad zu ""%s"" existiert nicht länger.\nErzeuge den Dateipfad neu und speichere die Datei?" - IDS_MUI_ERR_BROWSE "Kein Datei-Browser-Plugin gefunden\nDas MiniPath Datei-Browser-Plugin kann hier https://rizonesoft.com herunter geladen werden" - IDS_MUI_ERR_GREPWIN "Kein Datei-Suchen-Plugin gefunden\nDas grepWinNP3 Datei-Suchen-Plugin kann hier https://rizonesoft.com herunter geladen werden" - IDS_MUI_ERR_MRUDLG "Es kann nicht auf die ausgewählte Datei zugegriffen werden!\nMöchtest Du den Eintrag aus der Liste entfernen?" - IDS_MUI_ERR_CREATELINK "Fehler beim erzeugen des Desktop-Links" + IDS_MUI_ERR_LOADFILE "Error loading ""%s""" + IDS_MUI_ERR_SAVEFILE "Error saving ""%s""" + IDS_MUI_ERR_PATHNOTFOUND "The path for ""%s"" no longer exists.\nRecreate the path and save the file?" + IDS_MUI_ERR_DLG_FORMAT "Error '%s', cause:\n%s(ID:%d)\n" + IDS_MUI_ERR_BROWSE "No file browser plugin was found\nThe MiniPath file browser plugin can be downloaded from https://rizonesoft.com" + IDS_MUI_ERR_GREPWIN "No file search plugin was found\nThe grepWin file search plugin can be downloaded from https://portableapps.com/apps/utilities/grepwin-portable" + IDS_MUI_ERR_MRUDLG "No access to the selected file!\nWould you like to remove it from the list?" + IDS_MUI_ERR_CREATELINK "Error creating the Desktop link" IDS_MUI_ERR_PREVWINDISABLED "Die existierende Notepad3-Instanz ist entweder beschäftigt oder hat eine geöffnete Dialogbox\nMöchtest Du eine andere Notepad3-Instanz öffnen?" IDS_MUI_ERR_ENCODINGNA "Die Code-Page Konvertierungstabellen sind für die ausgewählte Codierung auf diesem System nicht vorhanden" diff --git a/language/np3_el_gr/strings_el_gr.rc b/language/np3_el_gr/strings_el_gr.rc index e71e72a231..9f6f0edebd 100644 --- a/language/np3_el_gr/strings_el_gr.rc +++ b/language/np3_el_gr/strings_el_gr.rc @@ -132,7 +132,7 @@ BEGIN IDS_MUI_ERR_PATHNOTFOUND "The path for ""%s"" no longer exists.\nRecreate the path and save the file?" IDS_MUI_ERR_DLG_FORMAT "Σφάλμα '%s'. Αιτία:\n%s(ID:%d)\n" IDS_MUI_ERR_BROWSE "Δεν βρέθηκε το πρόσθετο περιήγησης αρχείων\nΜπορείτε να κάνετε λήψη του πρόσθετου περιήγησης αρχείων MiniPath από https://rizonesoft.com" - IDS_MUI_ERR_GREPWIN "Δεν βρέθηκε το πρόσθετο αναζήτησης αρχείων\nΜπορείτε να κάνετε λήψη του πρόσθετου αναζήτησης αρχείων grepWinNP3 από https://rizonesoft.com" + IDS_MUI_ERR_GREPWIN "Δεν βρέθηκε το πρόσθετο αναζήτησης αρχείων\nΜπορείτε να κάνετε λήψη του πρόσθετου αναζήτησης αρχείων grepWin από https://portableapps.com/apps/utilities/grepwin-portable" IDS_MUI_ERR_MRUDLG "Δεν υπάρχει πρόσβαση στο επιλεγμένο αρχείο!\nΘέλετε να το καταργήσετε από τη λίστα;" IDS_MUI_ERR_CREATELINK "Σφάλμα κατά τη δημιουργία συνδέσμου στην επιφάνεια εργασίας" IDS_MUI_ERR_PREVWINDISABLED diff --git a/language/np3_en_gb/strings_en_gb.rc b/language/np3_en_gb/strings_en_gb.rc index c8f1c396be..8d3e68a1e1 100644 --- a/language/np3_en_gb/strings_en_gb.rc +++ b/language/np3_en_gb/strings_en_gb.rc @@ -132,7 +132,7 @@ BEGIN IDS_MUI_ERR_PATHNOTFOUND "The path for ""%s"" no longer exists.\nRecreate the path and save the file?" IDS_MUI_ERR_DLG_FORMAT "Error '%s', cause:\n%s(ID:%d)\n" IDS_MUI_ERR_BROWSE "No file browser plugin was found\nThe MiniPath file browser plugin can be downloaded from https://rizonesoft.com" - IDS_MUI_ERR_GREPWIN "No file search plugin was found\nThe grepWinNP3 file search plugin can be downloaded from https://rizonesoft.com" + IDS_MUI_ERR_GREPWIN "No file search plugin was found\nThe grepWin file search plugin can be downloaded from https://portableapps.com/apps/utilities/grepwin-portable" IDS_MUI_ERR_MRUDLG "No access to the selected file!\nWould you like to remove it from the list?" IDS_MUI_ERR_CREATELINK "Error creating the Desktop link" IDS_MUI_ERR_PREVWINDISABLED diff --git a/language/np3_en_us/strings_en_us.rc b/language/np3_en_us/strings_en_us.rc index 7aeb7351d9..6b797f242f 100644 --- a/language/np3_en_us/strings_en_us.rc +++ b/language/np3_en_us/strings_en_us.rc @@ -132,7 +132,7 @@ BEGIN IDS_MUI_ERR_PATHNOTFOUND "The path for ""%s"" no longer exists.\nRecreate the path and save the file?" IDS_MUI_ERR_DLG_FORMAT "Error '%s', cause:\n%s(ID:%d)\n" IDS_MUI_ERR_BROWSE "No file browser plugin was found\nThe MiniPath file browser plugin can be downloaded from https://rizonesoft.com" - IDS_MUI_ERR_GREPWIN "No file search plugin was found\nThe grepWinNP3 file search plugin can be downloaded from https://rizonesoft.com" + IDS_MUI_ERR_GREPWIN "No file search plugin was found\nThe grepWin file search plugin can be downloaded from https://portableapps.com/apps/utilities/grepwin-portable" IDS_MUI_ERR_MRUDLG "No access to the selected file!\nWould you like to remove it from the list?" IDS_MUI_ERR_CREATELINK "Error creating the Desktop link" IDS_MUI_ERR_PREVWINDISABLED diff --git a/language/np3_es_es/strings_es_es.rc b/language/np3_es_es/strings_es_es.rc index bc4c6b9783..742c908504 100644 --- a/language/np3_es_es/strings_es_es.rc +++ b/language/np3_es_es/strings_es_es.rc @@ -132,7 +132,7 @@ BEGIN IDS_MUI_ERR_PATHNOTFOUND "La ruta para ""%s"" ya no existe.\n¿Recrear la ruta y guardar el archivo?" IDS_MUI_ERR_DLG_FORMAT "Error '%s', causa:\n%s(ID:%d)\n" IDS_MUI_ERR_BROWSE "No se encontró plug-in para el navegador de archivos\nEl plug-in de navegador de archivos MiniPath se puede descargar desde https://rizonesoft.com" - IDS_MUI_ERR_GREPWIN "No se encontró plug-in de búsqueda de archivos\nEl plug-in grepWinNP3 de búsqueda de archivos se puede descargar desde https://rizonesoft.com" + IDS_MUI_ERR_GREPWIN "No se encontró plug-in de búsqueda de archivos\nEl plug-in grepWin de búsqueda de archivos se puede descargar desde https://portableapps.com/apps/utilities/grepwin-portable" IDS_MUI_ERR_MRUDLG "¡No hay acceso al archivo seleccionado!\n¿Desea eliminarlo de la lista?" IDS_MUI_ERR_CREATELINK "Error al crear el enlace de escritorio" IDS_MUI_ERR_PREVWINDISABLED diff --git a/language/np3_fi_fi/strings_fi_fi.rc b/language/np3_fi_fi/strings_fi_fi.rc index 702c23105a..520b9f0631 100644 --- a/language/np3_fi_fi/strings_fi_fi.rc +++ b/language/np3_fi_fi/strings_fi_fi.rc @@ -132,7 +132,7 @@ BEGIN IDS_MUI_ERR_PATHNOTFOUND "Polkua ""%s"" ei ole enää olemassa.\nLuodaanko polku ja tallennetaan tiedosto?" IDS_MUI_ERR_DLG_FORMAT "Virhe '%s', syy:\n%s(ID:%d)\n" IDS_MUI_ERR_BROWSE "Tiedostoselaimen laajennusta ei löytynyt\nMiniPath-tiedostoselaimen laajennuksen voi ladata osoitteesta https://rizonesoft.com" - IDS_MUI_ERR_GREPWIN "Tiedostonhakulaajennusta ei löytynyt\nGrepWinNP3-tiedostonhakulaajennuksen voi ladata osoitteesta https://rizonesoft.com" + IDS_MUI_ERR_GREPWIN "Tiedostonhakulaajennusta ei löytynyt\ngrepWin-tiedostonhakulaajennuksen voi ladata osoitteesta https://portableapps.com/apps/utilities/grepwin-portable" IDS_MUI_ERR_MRUDLG "Valittuun tiedostoon ei ole pääsyä!\nTahdotko poistaa sen luettelosta?" IDS_MUI_ERR_CREATELINK "Virhe työpöytälinkin luomisessa" IDS_MUI_ERR_PREVWINDISABLED diff --git a/language/np3_fr_fr/strings_fr_fr.rc b/language/np3_fr_fr/strings_fr_fr.rc index 35cf83f156..5380035ee4 100644 --- a/language/np3_fr_fr/strings_fr_fr.rc +++ b/language/np3_fr_fr/strings_fr_fr.rc @@ -132,7 +132,7 @@ BEGIN IDS_MUI_ERR_PATHNOTFOUND "Le chemin de ""%s"" n'existe plus.\nRecréer le chemin et sauvegarder le fichier ?" IDS_MUI_ERR_DLG_FORMAT "Erreur '%s', cause :\n%s(ID:%d)\n" IDS_MUI_ERR_BROWSE "Aucun plugin de navigateur de fichiers n'a été trouvé\nLe plugin du navigateur de fichiers MiniPath peut être téléchargé à partir de https://rizonesoft.com" - IDS_MUI_ERR_GREPWIN "Aucun plugin de recherche de fichiers n'a été trouvé\nLe plugin de recherche de fichiers grepWinNP3 peut être téléchargé depuis https://rizonesoft.com" + IDS_MUI_ERR_GREPWIN "Aucun plugin de recherche de fichiers n'a été trouvé\nLe plugin de recherche de fichiers grepWin peut être téléchargé depuis https://portableapps.com/apps/utilities/grepwin-portable" IDS_MUI_ERR_MRUDLG "Pas d'accès au fichier sélectionné !\nLe retirer de la liste ?" IDS_MUI_ERR_CREATELINK "Erreur lors de la création du lien sur le bureau" IDS_MUI_ERR_PREVWINDISABLED diff --git a/language/np3_hi_in/strings_hi_in.rc b/language/np3_hi_in/strings_hi_in.rc index 1e4aadfe51..ed0509e372 100644 --- a/language/np3_hi_in/strings_hi_in.rc +++ b/language/np3_hi_in/strings_hi_in.rc @@ -132,7 +132,7 @@ BEGIN IDS_MUI_ERR_PATHNOTFOUND """%s"" का पथ अब मौजूद नहीं है।\nपथ पुनः बनाएं और फ़ाईल सहेजें?" IDS_MUI_ERR_DLG_FORMAT "त्रुटि '%s', कारण:\n%s(ID:%d)\n" IDS_MUI_ERR_BROWSE "कोई फ़ाईल ब्राउज़र plugin नहीं मिला।\nकृपया MiniPath फ़ाईल ब्राउज़र plugin यहाँ से डाउनलोड करें: https://rizonesoft.com" - IDS_MUI_ERR_GREPWIN "कोई फ़ाईल सर्च plugin नहीं मिला।\ngrepWinNP3 सर्च plugin कृपया यहाँ से डाउनलोड करें: https://rizonesoft.com" + IDS_MUI_ERR_GREPWIN "कोई फ़ाईल सर्च plugin नहीं मिला।\ngrepWin सर्च plugin कृपया यहाँ से डाउनलोड करें: https://portableapps.com/apps/utilities/grepwin-portable" IDS_MUI_ERR_MRUDLG "चुनी हुई फ़ाईल तक पहुंचना संभव नहीं!\nक्या आप इस फ़ाईल को सूची में से हटाना चाहते हैं?" IDS_MUI_ERR_CREATELINK "डेस्कटॉप लिंक बनाने में त्रुटि" IDS_MUI_ERR_PREVWINDISABLED diff --git a/language/np3_hu_hu/strings_hu_hu.rc b/language/np3_hu_hu/strings_hu_hu.rc index da7e6a2186..9f8a3d976f 100644 --- a/language/np3_hu_hu/strings_hu_hu.rc +++ b/language/np3_hu_hu/strings_hu_hu.rc @@ -132,7 +132,7 @@ BEGIN IDS_MUI_ERR_PATHNOTFOUND "Az útvonal ehhez: ""%s"" már nem létezik.\nLétrehozzam újra az útvonalat és mentsem a fájlt?" IDS_MUI_ERR_DLG_FORMAT "Hiba '%s', oka:\n%s(ID:%d)\n" IDS_MUI_ERR_BROWSE "Fájlböngésző plugin nem található\nA MiniPath fájlböngésző plugin letölthető a https://rizonesoft.com címről" - IDS_MUI_ERR_GREPWIN "Fájlkereső plugin nem található\nA grepWinNP3 fájlkereső plugin letölthető a https://rizonesoft.com címről" + IDS_MUI_ERR_GREPWIN "Fájlkereső plugin nem található\nA grepWin fájlkereső plugin letölthető a https://portableapps.com/apps/utilities/grepwin-portable címről" IDS_MUI_ERR_MRUDLG "A kijelölt fájlhoz nincs hozzáférésünk!\nEl szeretné távolítani a listából?" IDS_MUI_ERR_CREATELINK "Hiba az asztali parancsikon létrehozásakor" IDS_MUI_ERR_PREVWINDISABLED diff --git a/language/np3_id_id/strings_id_id.rc b/language/np3_id_id/strings_id_id.rc index a55d9a1777..620dd8bc8f 100644 --- a/language/np3_id_id/strings_id_id.rc +++ b/language/np3_id_id/strings_id_id.rc @@ -132,7 +132,7 @@ BEGIN IDS_MUI_ERR_PATHNOTFOUND "The path for ""%s"" no longer exists.\nRecreate the path and save the file?" IDS_MUI_ERR_DLG_FORMAT "Kesalahan pada '%s', penyebab:\n%s(ID:%d)\n" IDS_MUI_ERR_BROWSE "Tidak ditemukan plugin penelusuran berkas\nPlugin penelusuran berkas MiniPath dapat diunduh di https://rizonesoft.com" - IDS_MUI_ERR_GREPWIN "Tidak ditemukan plugin pencarian berkas\nPlugin pencarian berkas grepWinNP3 dapat diunduh di https://rizonesoft.com" + IDS_MUI_ERR_GREPWIN "Tidak ditemukan plugin pencarian berkas\nPlugin pencarian berkas grepWin dapat diunduh di https://portableapps.com/apps/utilities/grepwin-portable" IDS_MUI_ERR_MRUDLG "Tidak ada akses ke berkas yang dipilih!\nApakah Anda ingin menghapusnya dari daftar?" IDS_MUI_ERR_CREATELINK "Kesalahan saat membuat pintasan Desktop" IDS_MUI_ERR_PREVWINDISABLED diff --git a/language/np3_it_it/strings_it_it.rc b/language/np3_it_it/strings_it_it.rc index 0fc692f8f1..082ed9ac89 100644 --- a/language/np3_it_it/strings_it_it.rc +++ b/language/np3_it_it/strings_it_it.rc @@ -132,7 +132,7 @@ BEGIN IDS_MUI_ERR_PATHNOTFOUND "Il percorso per ""%s"" non esiste più.\nVuoi ricreare il percorso e salvare il file?" IDS_MUI_ERR_DLG_FORMAT "Errore '%s', causa:\n%s(ID:%d)\n" IDS_MUI_ERR_BROWSE "Nessun plugin file browser trovato\nMiniPath può essere scaricato da https://rizonesoft.com" - IDS_MUI_ERR_GREPWIN "Nessun plugin ricerca file trovato\nIl plugin ricerca file grepWinNP3 può esssere scaricato da https://rizonesoft.com" + IDS_MUI_ERR_GREPWIN "Nessun plugin ricerca file trovato\nIl plugin ricerca file grepWin può esssere scaricato da https://portableapps.com/apps/utilities/grepwin-portable" IDS_MUI_ERR_MRUDLG "Nessun accesso al file selezionato!\nVuoi rimuoverlo dall'elenco?" IDS_MUI_ERR_CREATELINK "Errore nella creazione del collegamento sul desktop" IDS_MUI_ERR_PREVWINDISABLED diff --git a/language/np3_ja_jp/strings_ja_jp.rc b/language/np3_ja_jp/strings_ja_jp.rc index 53db8f4049..810c2af298 100644 --- a/language/np3_ja_jp/strings_ja_jp.rc +++ b/language/np3_ja_jp/strings_ja_jp.rc @@ -132,7 +132,7 @@ BEGIN IDS_MUI_ERR_PATHNOTFOUND "The path for ""%s"" no longer exists.\nRecreate the path and save the file?" IDS_MUI_ERR_DLG_FORMAT "エラー '%s', 原因:\n%s(ID:%d)\n" IDS_MUI_ERR_BROWSE "ファイラーのプラグインがありません\nこのプラグイン MiniPath は以下からダウンロードできます https://rizonesoft.com" - IDS_MUI_ERR_GREPWIN "ファイル検索プラグインが見つかりません\nファイル検索プラグインの grepWinNP3 は以下からダウンロードできます https://rizonesoft.com" + IDS_MUI_ERR_GREPWIN "ファイル検索プラグインが見つかりません\nファイル検索プラグインの grepWin は以下からダウンロードできます https://portableapps.com/apps/utilities/grepwin-portable" IDS_MUI_ERR_MRUDLG "選択したファイルにアクセスできません\n一覧から除去しますか?" IDS_MUI_ERR_CREATELINK "デスクトップへのショートカット作成時にエラーが発生しました" IDS_MUI_ERR_PREVWINDISABLED diff --git a/language/np3_ko_kr/strings_ko_kr.rc b/language/np3_ko_kr/strings_ko_kr.rc index e446493de3..141b50e662 100644 --- a/language/np3_ko_kr/strings_ko_kr.rc +++ b/language/np3_ko_kr/strings_ko_kr.rc @@ -132,7 +132,7 @@ BEGIN IDS_MUI_ERR_PATHNOTFOUND """%s""의 경로는 더 이상 존재하지 않습니다.\n경로를 다시 생성하고 파일을 저장하시겠습니까?" IDS_MUI_ERR_DLG_FORMAT "오류 '%s', 원인:\n%s(ID:%d)\n" IDS_MUI_ERR_BROWSE "파일 탐색기 플러그인을 찾을 수 없습니다\nMiniPath 파일 탐색기 플러그인은 https://rizonesoft.com에서 다운로드할 수 있습니다" - IDS_MUI_ERR_GREPWIN "파일 검색 플러그인을 찾을 수 없습니다\ngrepWinNP3 파일 검색 플러그인은 https://rizonesoft.com에서 다운로드할 수 있습니다" + IDS_MUI_ERR_GREPWIN "파일 검색 플러그인을 찾을 수 없습니다\ngrepWin 파일 검색 플러그인은 https://portableapps.com/apps/utilities/grepwin-portable 다운로드할 수 있습니다" IDS_MUI_ERR_MRUDLG "선택한 파일에 접근할 수 없습니다!\n목록에서 제거하시겠습니까?" IDS_MUI_ERR_CREATELINK "바탕 화면 링크를 만드는 중에 오류가 발생하였습니다" IDS_MUI_ERR_PREVWINDISABLED diff --git a/language/np3_nl_nl/strings_nl_nl.rc b/language/np3_nl_nl/strings_nl_nl.rc index 3676282e12..cca1014b74 100644 --- a/language/np3_nl_nl/strings_nl_nl.rc +++ b/language/np3_nl_nl/strings_nl_nl.rc @@ -132,7 +132,7 @@ BEGIN IDS_MUI_ERR_PATHNOTFOUND "Het pad voor ""%s"" bestaat niet meer.\nPad opnieuw aanmaken en bestand opslaan?" IDS_MUI_ERR_DLG_FORMAT "Fout '%s', oorzaak:\n%s(ID:%d)\n" IDS_MUI_ERR_BROWSE "Geen bestandsbrowser-plugin gevonden\nDe plugin voor de MiniPath bestandsbrowser kan worden gedownload van https://rizonesoft.com" - IDS_MUI_ERR_GREPWIN "Geen plugin voor het doorzoeken van bestanden gevonden\nDe plug-in grepWinNP3 voor het doorzoeken van bestanden kan worden gedownload van https://rizonesoft.com" + IDS_MUI_ERR_GREPWIN "Geen plugin voor het doorzoeken van bestanden gevonden\nDe plug-in grepWin voor het doorzoeken van bestanden kan worden gedownload van https://portableapps.com/apps/utilities/grepwin-portable" IDS_MUI_ERR_MRUDLG "Geen toegang tot het geselecteerde bestand!\nWil je het uit de lijst verwijderen?" IDS_MUI_ERR_CREATELINK "Fout bij het aanmaken van de bureaubladkoppeling" IDS_MUI_ERR_PREVWINDISABLED diff --git a/language/np3_pl_pl/strings_pl_pl.rc b/language/np3_pl_pl/strings_pl_pl.rc index abf5e0c095..ae63a628c1 100644 --- a/language/np3_pl_pl/strings_pl_pl.rc +++ b/language/np3_pl_pl/strings_pl_pl.rc @@ -132,7 +132,7 @@ BEGIN IDS_MUI_ERR_PATHNOTFOUND "The path for ""%s"" no longer exists.\nRecreate the path and save the file?" IDS_MUI_ERR_DLG_FORMAT "Błąd '%s', powód:\n%s(ID:%d)\n" IDS_MUI_ERR_BROWSE "Nie znaleziono wtyczki przeglądarki pliku\nWtyczkę przeglądarki pliku do MiniPath można pobrać z https://rizonesoft.com" - IDS_MUI_ERR_GREPWIN "Nie znaleziono wtyczki wyszukiwania pliku.\Wtyczkę wyszukiwania pliku programu grepWinNP3 można pobrać ze strony https://rizonesoft.com" + IDS_MUI_ERR_GREPWIN "Nie znaleziono wtyczki wyszukiwania pliku.\Wtyczkę wyszukiwania pliku programu grepWin można pobrać ze strony https://portableapps.com/apps/utilities/grepwin-portable" IDS_MUI_ERR_MRUDLG "Brak dostępu do wybranego pliku!\nCzy chcesz usunąć go z listy?" IDS_MUI_ERR_CREATELINK "Błąd podczas tworzenia skrótu na Pulpicie" IDS_MUI_ERR_PREVWINDISABLED diff --git a/language/np3_pt_br/strings_pt_br.rc b/language/np3_pt_br/strings_pt_br.rc index 60c397d213..3dd5975ece 100644 --- a/language/np3_pt_br/strings_pt_br.rc +++ b/language/np3_pt_br/strings_pt_br.rc @@ -132,7 +132,7 @@ BEGIN IDS_MUI_ERR_PATHNOTFOUND "O caminho para ""%s"" não existe mais.\nRecriar caminho e salvar o arquivo?" IDS_MUI_ERR_DLG_FORMAT "Erro '%s', causa:\n%s(ID:%d)\n" IDS_MUI_ERR_BROWSE "Nenhum plugin de gerenciador de arquivos foi encontrado\nO plugin de gerenciador de arquivos MiniPath pode ser baixado de https://rizonesoft.com" - IDS_MUI_ERR_GREPWIN "Nenhum plugin de localizador em arquivos foi encontrado\nO plugin de localizador em arquivos grepWinNP3 pode ser baixado de https://rizonesoft.com" + IDS_MUI_ERR_GREPWIN "Nenhum plugin de localizador em arquivos foi encontrado\nO plugin de localizador em arquivos grepWin pode ser baixado de https://portableapps.com/apps/utilities/grepwin-portable" IDS_MUI_ERR_MRUDLG "Sem acesso ao arquivo selecionado!\nVocê quer remover ele da lista?" IDS_MUI_ERR_CREATELINK "Erro criando o link para Área de Trabalho" IDS_MUI_ERR_PREVWINDISABLED diff --git a/language/np3_pt_pt/strings_pt_pt.rc b/language/np3_pt_pt/strings_pt_pt.rc index a45ebcc37b..2fe54f7f05 100644 --- a/language/np3_pt_pt/strings_pt_pt.rc +++ b/language/np3_pt_pt/strings_pt_pt.rc @@ -132,7 +132,7 @@ BEGIN IDS_MUI_ERR_PATHNOTFOUND "O caminho para ""%s"" já não existe.\nRecriar o caminho e guardar o ficheiro?" IDS_MUI_ERR_DLG_FORMAT "Erro '%s', causa:\n%s(ID:%d)\n" IDS_MUI_ERR_BROWSE "Não foi encontrado nenhum plugin de navegador de ficheiros\nO plugin do navegador de ficheiros MiniPath pode ser transferido de https://rizonesoft.com" - IDS_MUI_ERR_GREPWIN "Não foi encontrado nenhum plugin de procura de ficheiros\nO plugin de procura de ficheiros grepWinNP3 pode ser transferido de https://rizonesoft.com" + IDS_MUI_ERR_GREPWIN "Não foi encontrado nenhum plugin de procura de ficheiros\nO plugin de procura de ficheiros grepWin pode ser transferido de https://portableapps.com/apps/utilities/grepwin-portable" IDS_MUI_ERR_MRUDLG "Não foi possível aceder ao ficheiro seleccionado!\nDeseja removê-lo da lista?" IDS_MUI_ERR_CREATELINK "Erro ao criar a ligação ao ambiente de trabalho" IDS_MUI_ERR_PREVWINDISABLED diff --git a/language/np3_ru_ru/dialogs_ru_ru.rc b/language/np3_ru_ru/dialogs_ru_ru.rc index 071efd0e9c..e07fcbfbe7 100644 --- a/language/np3_ru_ru/dialogs_ru_ru.rc +++ b/language/np3_ru_ru/dialogs_ru_ru.rc @@ -1,4 +1,4 @@ -// Microsoft Visual C++ generated resource script. +// Microsoft Visual C++ generated resource script. // encoding: UTF-8 #pragma code_page(65001) // UTF-8 #include "resource.h" diff --git a/language/np3_ru_ru/strings_ru_ru.rc b/language/np3_ru_ru/strings_ru_ru.rc index 7d38359edd..309f7da9ff 100644 --- a/language/np3_ru_ru/strings_ru_ru.rc +++ b/language/np3_ru_ru/strings_ru_ru.rc @@ -132,7 +132,7 @@ BEGIN IDS_MUI_ERR_PATHNOTFOUND "Путь к «%s» больше не существует.\nВоссоздать путь и сохранить файл?" IDS_MUI_ERR_DLG_FORMAT "Ошибка '%s', причина:\n%s(ID:%d)\n" IDS_MUI_ERR_BROWSE "Не найден плагин браузера файлов\nПлагин MiniPath можно загрузить с сайта https://rizonesoft.com" - IDS_MUI_ERR_GREPWIN "Не найден плагин поиска в файлах\nПлагин grepWinNP3 можно загрузить с сайта https://rizonesoft.com" + IDS_MUI_ERR_GREPWIN "Не найден плагин поиска в файлах\nПлагин grepWin можно загрузить с сайта https://portableapps.com/apps/utilities/grepwin-portable" IDS_MUI_ERR_MRUDLG "Нет доступа к выбранному файлу!\nХотите удалить его из списка?" IDS_MUI_ERR_CREATELINK "Ошибка создания ярлыка на Рабочем столе" IDS_MUI_ERR_PREVWINDISABLED diff --git a/language/np3_sk_sk/strings_sk_sk.rc b/language/np3_sk_sk/strings_sk_sk.rc index a4a1fa06e8..c2f4a02e08 100644 --- a/language/np3_sk_sk/strings_sk_sk.rc +++ b/language/np3_sk_sk/strings_sk_sk.rc @@ -132,7 +132,7 @@ BEGIN IDS_MUI_ERR_PATHNOTFOUND "Cesta pre ""%s"" už neexistuje.\nZnovu vytvoriť cestu a uložiť súbor?" IDS_MUI_ERR_DLG_FORMAT "Chyba '%s', príčina:\n%s(ID:%d)\n" IDS_MUI_ERR_BROWSE "Nenašiel sa doplnok na prehľadávanie súborov\nDoplnok MiniPath si môžete stiahnuť z https://rizonesoft.com" - IDS_MUI_ERR_GREPWIN "Nenašiel sa vyhľadávací doplnok\nDoplnok na vyhľadávanie súborov grepWinNP3 si môžete stiahnuť z https://rizonesoft.com" + IDS_MUI_ERR_GREPWIN "Nenašiel sa vyhľadávací doplnok\nDoplnok na vyhľadávanie súborov grepWin si môžete stiahnuť z https://portableapps.com/apps/utilities/grepwin-portable" IDS_MUI_ERR_MRUDLG "Žiadny prístup k vybranému súboru!\nChcete ho odstrániť zo zoznamu?" IDS_MUI_ERR_CREATELINK "Chyba pri vytváraní odkazu na pracovnú plochu" IDS_MUI_ERR_PREVWINDISABLED diff --git a/language/np3_sv_se/strings_sv_se.rc b/language/np3_sv_se/strings_sv_se.rc index 3789ecff09..7ac4d7726a 100644 --- a/language/np3_sv_se/strings_sv_se.rc +++ b/language/np3_sv_se/strings_sv_se.rc @@ -132,7 +132,7 @@ BEGIN IDS_MUI_ERR_PATHNOTFOUND "Sökvägen till ""%s"" finns inte längre.\nVill du återskapa sökvägen och spara filen?" IDS_MUI_ERR_DLG_FORMAT "Fel '%s', orsak:\n%s(ID:%d)\n" IDS_MUI_ERR_BROWSE "Inget plugin för filbläddring hittades\nMinipath filbläddrare kan laddas ner från https://rizonesoft.com" - IDS_MUI_ERR_GREPWIN "Inget sökplugin hittades\ngrepWinNP3 filsökningsplugin kan hämtas från https://rizonesoft.com" + IDS_MUI_ERR_GREPWIN "Inget sökplugin hittades\ngrepWin filsökningsplugin kan hämtas från https://portableapps.com/apps/utilities/grepwin-portable" IDS_MUI_ERR_MRUDLG "Tillgång saknas för vald fil!\nVill du ta bort den från listan?" IDS_MUI_ERR_CREATELINK "Fel vi skapande av skrivbordslänk" IDS_MUI_ERR_PREVWINDISABLED diff --git a/language/np3_tr_tr/strings_tr_tr.rc b/language/np3_tr_tr/strings_tr_tr.rc index ecb506627f..207fd78ce4 100644 --- a/language/np3_tr_tr/strings_tr_tr.rc +++ b/language/np3_tr_tr/strings_tr_tr.rc @@ -132,7 +132,7 @@ BEGIN IDS_MUI_ERR_PATHNOTFOUND "The path for ""%s"" no longer exists.\nRecreate the path and save the file?" IDS_MUI_ERR_DLG_FORMAT "Hata '%s'. Nedeni:\n%s(ID:%d)\n" IDS_MUI_ERR_BROWSE "Dosya gezgini uygulama eki bulunamadı\nMiniPath dosya tarayıcı uygulama ekini şuradan indirebilirsiniz: https://rizonesoft.com" - IDS_MUI_ERR_GREPWIN "Dosya arama uygulama eki bulunamadı\ngrepWinNP3 dosya arama uygulama ekini şuradan indirebilirsiniz: https://rizonesoft.com" + IDS_MUI_ERR_GREPWIN "Dosya arama uygulama eki bulunamadı\ngrepWin dosya arama uygulama ekini şuradan indirebilirsiniz: https://portableapps.com/apps/utilities/grepwin-portable" IDS_MUI_ERR_MRUDLG "Seçilmiş dosyaya erişilemedi!\nWListeden kaldırmak ister misiniz?" IDS_MUI_ERR_CREATELINK "Masaüstü bağlantısı oluşturulurken sorun çıktı" IDS_MUI_ERR_PREVWINDISABLED diff --git a/language/np3_vi_vn/strings_vi_vn.rc b/language/np3_vi_vn/strings_vi_vn.rc index 209af3b2b6..1dd77b5b19 100644 --- a/language/np3_vi_vn/strings_vi_vn.rc +++ b/language/np3_vi_vn/strings_vi_vn.rc @@ -132,7 +132,7 @@ BEGIN IDS_MUI_ERR_PATHNOTFOUND "The path for ""%s"" no longer exists.\nRecreate the path and save the file?" IDS_MUI_ERR_DLG_FORMAT "Lỗi '%s', Nguyên nhân:\n%s(ID:%d)\n" IDS_MUI_ERR_BROWSE "Không thể tìm thấy plugin trình duyệt tệp\nPlugin MiniPath có thể tải xuống từ https://rizonesoft.com" - IDS_MUI_ERR_GREPWIN "Không thể tìm thấy plugin tìm kiếm tệp\nPlugin grepWinNP3 có thể tải xuống từ https://rizonesoft.com" + IDS_MUI_ERR_GREPWIN "Không thể tìm thấy plugin tìm kiếm tệp\nPlugin grepWin có thể tải xuống từ https://portableapps.com/apps/utilities/grepwin-portable" IDS_MUI_ERR_MRUDLG "Không thể truy cập tệp đã chọn!\nCó muốn xóa khỏi danh sách không?" IDS_MUI_ERR_CREATELINK "Đã xảy ra lỗi khi tạo liên kết trên màn hình chính" IDS_MUI_ERR_PREVWINDISABLED diff --git a/language/np3_zh_cn/strings_zh_cn.rc b/language/np3_zh_cn/strings_zh_cn.rc index 3928216d77..6e66d03c9c 100644 --- a/language/np3_zh_cn/strings_zh_cn.rc +++ b/language/np3_zh_cn/strings_zh_cn.rc @@ -132,7 +132,7 @@ BEGIN IDS_MUI_ERR_PATHNOTFOUND "路径“%s”已不复存在。\n重新创建路径并保存文件吗?" IDS_MUI_ERR_DLG_FORMAT "错误“%s”,原因:\n%s(ID:%d)\n" IDS_MUI_ERR_BROWSE "无可用文件浏览器插件\n\nMiniPath 插件可以从 https://rizonesoft.com 下载" - IDS_MUI_ERR_GREPWIN "无可用文件查找插件\n\ngrepWinNP3 插件可以从 https://rizonesoft.com 下载" + IDS_MUI_ERR_GREPWIN "无可用文件查找插件\n\ngrepWin 插件可以从 https://portableapps.com/apps/utilities/grepwin-portable 下载" IDS_MUI_ERR_MRUDLG "指定的文件无法访问。它可能已被改名、删除或移动\n\n从列表中删除它吗?" IDS_MUI_ERR_CREATELINK "创建桌面快捷方式时遇到错误" IDS_MUI_ERR_PREVWINDISABLED diff --git a/language/np3_zh_tw/strings_zh_tw.rc b/language/np3_zh_tw/strings_zh_tw.rc index b283e936f3..1469b1959f 100644 --- a/language/np3_zh_tw/strings_zh_tw.rc +++ b/language/np3_zh_tw/strings_zh_tw.rc @@ -132,7 +132,7 @@ BEGIN IDS_MUI_ERR_PATHNOTFOUND "路徑 ""%s"" 已不復存在。\n重新建立路徑並儲存檔案嗎?" IDS_MUI_ERR_DLG_FORMAT "錯誤 ""%s"" ,原因:\n%s(ID:%d)\n" IDS_MUI_ERR_BROWSE "無可用檔案瀏覽器外掛\nMiniPath 外掛可由 https://rizonesoft.com 下載" - IDS_MUI_ERR_GREPWIN "無可用檔案尋找外掛\ngrepWinNP3 外掛可由 https://rizonesoft.com 下載" + IDS_MUI_ERR_GREPWIN "無可用檔案尋找外掛\ngrepWin 外掛可由 https://portableapps.com/apps/utilities/grepwin-portable 下載" IDS_MUI_ERR_MRUDLG "指定的檔案無法存取。它可能已被改名、刪除或移動\n\n從清單中刪除它嗎?" IDS_MUI_ERR_CREATELINK "建立桌面捷徑時遇到錯誤" IDS_MUI_ERR_PREVWINDISABLED diff --git a/lexilla/Lexilla.vcxproj b/lexilla/Lexilla.vcxproj index 72c31b6145..dab667c3ef 100644 --- a/lexilla/Lexilla.vcxproj +++ b/lexilla/Lexilla.vcxproj @@ -477,7 +477,7 @@ Level4 - _WIN32_WINNT=0x0A00;WINVER=0x0A00;NTDDI_VERSION=0x0A000006;SCI_LEXER;_CRT_SECURE_NO_WARNINGS;STATIC_BUILD;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _WIN64;_WIN32_WINNT=0x0A00;WINVER=0x0A00;NTDDI_VERSION=0x0A000006;SCI_LEXER;_CRT_SECURE_NO_WARNINGS;STATIC_BUILD;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) true stdcpp20 true @@ -502,6 +502,7 @@ Console true false + MachineARM64 true @@ -598,7 +599,7 @@ true - _WIN32_WINNT=0x0A00;WINVER=0x0A00;NTDDI_VERSION=0x0A000006;SCI_LEXER;_CRT_SECURE_NO_WARNINGS;STATIC_BUILD;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + _WIN64;_WIN32_WINNT=0x0A00;WINVER=0x0A00;NTDDI_VERSION=0x0A000006;SCI_LEXER;_CRT_SECURE_NO_WARNINGS;STATIC_BUILD;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) true stdcpp20 true @@ -626,6 +627,7 @@ true true false + MachineARM64 true @@ -641,7 +643,7 @@ true - _WIN32_WINNT=0x0A00;WINVER=0x0A00;NTDDI_VERSION=0x0A000006;SCI_LEXER;_CRT_SECURE_NO_WARNINGS;STATIC_BUILD;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + _WIN64;_WIN32_WINNT=0x0A00;WINVER=0x0A00;NTDDI_VERSION=0x0A000006;SCI_LEXER;_CRT_SECURE_NO_WARNINGS;STATIC_BUILD;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) true stdcpp20 true @@ -669,6 +671,7 @@ true true false + MachineARM64 true @@ -680,4 +683,4 @@ - \ No newline at end of file + diff --git a/np3portableapp/Notepad3Portable/App/AppInfo/Launcher/Splash.jpg b/np3portableapp/Notepad3Portable/App/AppInfo/Launcher/Splash.jpg index dff98671ddeac8ecaeb73c301ee085e945ebdda9..092908d516f302e7c8fbe6face6087d103620039 100644 GIT binary patch literal 32228 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

U-YOmEMxZq3e+SrOMe*KD;=x;RX z)FZAswy`<$;|*!#^6f7ittDP*O}b)cHyB3M*ZBnnsTvm9mmKty9$u`vc9})Wr8QPY zRX1JuS&tzEhjZi*Kz*_?@XRmqnW?&1XJx*7=Az*8r2b4r%U-R6UP13A%NX&Z;C`x6 zAH%9z!_ux~f`B%!9V!LDcyQ#D%%3eOUp?o^%3AJ&<;mSpe9-J>DO#*imq=pYH`O22Z;+B7j|8=8z!RjD`bfPbkG34ukSrFe0M64Lvi0Cy;`|`bL ziz72SqTE%9kezWZLYw77D@1i$=zU!T(&%gTV|!+psp&gIdc$J5$Z&D$E0ag9wI{-Q z(DzL(y%W+u@*B5%2W-{M7??_U7VWcj40Oaj7E9IPb{yPKA(DbI~6g?{F0%W7*bu!=4Xi0UhD>l`psPz8Eq zmk>&Npur8kYeQWx-_m*A zdIQH5(G&xC``66zpU-buR#}<2x|zLiPtE-_FhtTEj{B9;MZ-Q7=X}*?)t-MZP-~B= zy8hbHt5N@)dhOuA@Gziv_Oeb-Y3Pd9!Cmv>D5uMkgm zcc``MZ;4+@lwBlL2YleCBVeZ0f!S(5Tfs^hwL1}n+!Mltj>hgZ`G|;TnI$Vu$KfeI zXds)G>@i#HL*-RmtUpnQnN5dH-%bCr`UVCy!MfXKxD@{$=55s)dwMl6YbJK=W53NY zpUJeG@DhA?lwL-tp**uxd})%9tEp8o9*@ygHIj(d`vl?GT#m4SrgQwMP}*x;!GVV0 z1WvAa4p;96dA5ycLtTUSe;D+EjY;6lpL`0~%rP0;Fbuiv z>8l?ys_Tbhig~CEQIXFCZz@Phl;<#+JZTLw&^q{i*u?PG*YK)kWrovoxiRvsl8o%O zYt_AJpN+$VNhR!MGAIksOZstK$`lME({MY3=E`TCf}}R{`Jj>94Wqgd5i9p~c+H;s zXYoY1k)n=bnAdLT$2JqjPBs4iE;uAz6^{j0#$qo$FK3^*s${vIJ3)h()A^~dX)v}s zwU$olk(2j80OME@aXvg~O9LMeP(qQ-0dW$0s;tgVdUGCOyH0_%N>k>FeXCd+xw1Bs za>1aR8s)J~Lp4bUGz!K;yY>(>>JPr%lD02H-o$sDyX#rv^Im+BTYx6%nH&E|yAOZ2 z{)^#`2RCOf>Xmh+J#Ic*UpFrPLDBh(#NJTpVjk2G^H!H;?n?S&PJB;+ERF2dt7&*e z+v~qykY#Sp zy9+WE@lIBeKOL+zN0%OzK0n`XszhwPCSO>@@gAevkgT@(fpM6 z!YY1Q3=LY0-S@mUwdJxZP*zZ_XGZ!#l-1NoMp=y5qJj`3ox(Y5MvsTdq#{(6i`+ zF5YeFLw-e{XO7whO4XJGsGP-=nf0K2+Sq7sS)t(_?b(>wsLZAzN;$XknWpgk!u%pc z0cH9J?(+dNR{&w-Xq;>qijEz|}PCi$5AiqMp5NZ;6;DJ2(3|^BIlS-RD)+c7ytp&P?aRLyKqf*IGt{CWTYHX{6El z8F3Zt4NPAy|2+hHqe|rc=xloR{a3>dPK64|fgIOa1X4dHxB0~c#Zkzu3f52@%B=G# zT;N=mbNi;pD;oRoCq07!35o5I@T*+CTUSP-Fy$xtyCE_B1x=7^Lsz-TepL}q_M5s# zl?zKHRP$=gH#_a?U1B0oGS0gw7$OxfJ9ojE^~W$%*TF?@|trHThmHm95M z@b{95rk31^H+Kb1FMfuMc6Ee$uSWt2;H_FeKNC&q%5-UKj0yGib+%EMD{{m1H$M*P zl3OgI&kWJ0GUdCLY(%~sgj3=z7x2}Ae-T4VP^zMDxomY-ZL4!j@w+>1u<-~NWyVbz zHT3n!Jb}AlhQ-}=Z!AGhH>wuWJ51NHoF04ms&>qj>|tS9MI%@C z%s`O#n_T_SBsWd^n2bnV-GS#sb+4bQ==(mV?1dJ*apOWzS3VrGv2_gmDFZ7 z51gk6e;P{_ljthi-;ygBIO24< zxaWS}yl(55Sz6+B=l#gN#VR&!xfmV2ZW;ZXGosTm&G8<~N@kf=g$~q092iD-@= zoDoPjTB&z;W75g;TxaXB$NeQW8=Z4w=ugRAYfo}c=Ckf7r+m1-{-o67ad5^unAw|1 z`*syJ!N%Qq_gLFo@V=v!h}J~rjTwF^AE6haBIYL5vo$wwYSfC&89yzj532KO^*sAB z)wxAW_>$uWXu{L%M=qb`TE-#btbAg9HMq1j(n#9f*d2Sflt!eeik@=Pu`D`VBR5HV z#OFBmmfuJ9HjRxWAM<`GDzEemmO|VlmB6c3=7%%mvm2Xa-u6Z8_!n$?SH^2oy2p(* z{CW)+gzg+MuQfv0b=2S&c8sC5(RE|$VOaq_+cZN@I?pv6Kz;mzTT3Xpd{v)!RnQ;r8%_K+DL2O(a9W(%qzG$KWpDVE-LDa@0=aNv$vbAF8_I1-~y z3y(F_*LdfJ=7siL-2E9)0Jlxi9sQZaL?V$@BG!2?qmIAF80xg)K`FY2g$0T?Aok;f z!1@Y`78P0PZ;v+B=8U65KAfOHzr8cy^~tuv5WQ3!)j_cPV|^UeK>+wo%Afj^lutX} zst#CQBJszWuFpFA`8pl#VjDpFg?eC6&oGT+)#j>_BH zLOYG=+4uZr4i%*m-*}U@L6${*LYe)v%ABr1+7G~O(T}aWWruhRpy8AmgYTL4KIU@K zgUT}~+JPFUoFfb%xAA$b9G7TwivaT)4||i?8>r2*Bfpy-%G&gN-&BQ-Z;Pywoe$yI z0B4RZdl2#kFFA(Qi)_n+R8SMufWE;i9q-GFEUG}OX-DQ_;%nY+#Hnh{y5lXjb$Bu3 zFk(OI)72*3AcNfgtn6Xhtwo7GzW4 z{1b54iy&{DU#+u!Ll8Xm&aYwOH5VV9{;|ew;&F0bNURMDFV7E}P|Xu%ozEw$GUn_X zUU;LVq##S{a~yjryxootGOhVgz4D?mx{(1U#!|)bVU-bOzSz_#FuA^Dq$xn#SfhtBYCmg{L<=0!IlO4>)h~8n+TYF@>(fxt0(WkoJ>g7C z@mjS&k8$>zSJG7U%q`X(_QS#PAiz|KD?(g z^jqUJeH{j~rS>f3o8B5%M7%-U+5=qPbpgjY-APZ~dTjzK$DAG9wNxC6Y6!Wwd=7E? zCk)8&DWfVueMQ5I3Nt}h05mH>OTiIk&dy7)M5+#pgo-t!C~YQd z$K9uXnflePr-=(OpbB2rad(Vi8=@xwoKL+5B|BN80(P8z!7r%UqkHVz$WZ_6tkI$i zUT^4Q*^$t`Mjcul?@?MhWMV4=w)r<5c2P13?pw4dD!SXH>Gw85SO2PNkjm@@nQMCC ziKe;MeciTF)~zyo8c|^<<%G$;G0a&{FLp4(OOcsXFeKo8B*L}VHIq|*YWigtrsVTB zzlLX@6YOkqG&RIMFF*briE79I#FNr_oxaPEtvPytxz%w=%4HEnRU5N zcbu-afh+AtsNZMs5nyPE3|p||DdsS8sRJ{k66B}|{YpfiS4jPYz9~7B&ZA=z)CV<) z1fD)o7fQ&N!XSt6N(+2z5WMKeO&tXYnVSuxS&kR7ge($S`tI(c*lg`~gQ&+mQ0<}7 z4{6F{;^xayPi{Rs^QyOJ9+K`cCBc5&Mx=m?KdRbmwJqQox^vFUTFD%!2f9j>}qw8zz44Iwqg8c$~b3btXS^5hw zt|>s1WC(QAOS*mPX<$02v((?*`e^J6o*sMIeTW&>qz3JZI!i&7*KWW7ZdZKgtP0`{ zItK)iQNGddoPVlMIoa4sBF$a&XMv2gv5Ag; z1=%CReE}Udn{3F6J&VJ8JN3~8@~pIUv1vNxIN|+_J2A{fNjmDD%&!HN6q$giFI3-L zn+ZMnihLX%3kBthJ~ft`^-V8XVqAqsDsdWytIyW$fS|e6y~yyn!!(7|NV1PQWt*hp zICd{8+)s}v15@9LnQm-(`3Z%-bUo_0chH#<<9I7M9{b$z)TY8ZTNTtprDSPf8(I_M$CXWj6SQogGdwT!;6v=<(Xs7gG0AQGy^L>Big(S{T9y0ZDj1ICel zmo!!beyY?#rWniK=U1dJ`0Vhc&ThE%Zs#Z*&msgORVHY___l_lLtn7#AHf*Zz% z6)ei^U8E2>Sf13K%TK?~XBH0W%r4$dPNa@<%y!1jjY~<@Vq2F(_9wK*uw!UFjPGR% z9A4KbaMi4#LGCgcW4cymsdWhH#<;o)6+s1s?QZCM zM%n=}d&&VYBJ=}Jq&aw{saiF1Raj}zLtq3YFg z$;`|~LYQCa3|~rBG37hiH9U%hJN&Q`^I8{&FE+gmZWK$?l5up(QY@V@z$Vo877VV( zA6E@f@+OD_Fw*0%Y;Bl2nm>Lr^1az~4NtG}WA}5PlBZ@qmiTO>93;`j1+1%svJWVt zvmdF0@28QIit`-gg!Jm;$_Wvoz<6@|L3Iok%x5=T!EdKjU0(@Z`c@4hFim>kA!#J= z>Yk%Sz-|ubqT{`yehvvvuqNmkZJ`x`x1mM!!tq;=<4W@YUj|Pu^$fivv7zVHj~^or zOzY#bV2>ZaONdS6VYM0Tm$Ac$TNC$ePq0PLhL=eucrI(H&xyvd+CfX8G0_v$`~hbV z&1-#4lnbZF4$AR9^kgS_)1-#+(V#a!P|m~9?!ZfYqeH|hPGn4I(vd;`WdYB@u<0Rq z9d?|hj;%FK*@0NW4`;wQGGx1q{RXY5D!|9mT#|JM+vs|(kb4Z#I+G0DOM4g|?A9%A zJmYh|Fz?T9atNtqO;35QGyDNO$Q%X2M5~K`8w(at%YG<3f_B8$GQDm5U5LmD0dvl- zL7`Rf7M6C8FId(&o9{Hq5 z)`$W$`sFR*E6P(=-o4L7p{t#|;@T4N&Wla)97fanv%02@j1QT5crcR9O%A3_zIqCWPc<}mX2#l9yg>1W#l*BHXPQx+xG5=dWvqGpISGQ7 zLDZkg$^b*Y27NC~^$mkLTQl@Y{U2Ej_pYejN^2)Vj^A?~!?CoeNBs44_(^Pu%-J_Z z?&)sfz{Vuf1ThkEN`IzxA+|p9e)v6}%8s7B4WOThVOKBEK`*Pg&LOmj(NHJ9P=T}X-(zsP=)Om)H>8}q5LLk&6AXl4$gB+GDIUpn;^AL690TYS*y zp6rg17V8jAwNg*Ygy7t76j=Le%TN~?W5vbObeY3BOQWhSsfIxw*x^JL)1iwsz|56p z6OyZ*C0EFjB!|w3>V*k=5bpQs14;(N@5%nPFG_JI?-~njtQ`->wBzO%0CV*07l70V zILrNCY{0)yu#HU(WRVj9X^fWxgKofI0DuNC@C!CnrA-10FPJkbQW+&$aLT!lK%gih zsK3S9iXjbrGU(c?>LB~DO45L48JV@8ZKPqvVei*!W&$(t3elK;z}cp%#4LHFD=RwP z0*>(?TNs?!tLZPov!t?a%=?O5$u-X|9w@9mSCE32N(Cp9p@Oqa-P=yJlPugo`g0J~m#P0cHGgxdv zU`>R%n!cAvn$X4GBQW4OcmvysthcsVf z4sKPR?hGK?;^UzUi%02tB2L3Eu0`6lnEc4Eo5i#D5<%hw2ov6ODuWIaE%75`!+x zHeT35Hv{d!JQkt4Vq&mLsiS|RwW2T_xN_INBqL868K0mdISjR?8WN0TT40pG1HVJ? zN-G+Xtq!EL`@{Dkm%hSGDl;`TK3g8sHVo{%;3c(Y=S8>*IKuvqE7Y`HTvFqms4QtP;ILX4K~GR4N@TvshNsA6u7;uJ5G zOAZhe7KG$7rL(zJ^YZN>qyl0$4aXqw4W=J9zb-VgFSk7uq?AwmqPBK#5$hSRCc8Rs%@zPu7Id)q8p8u3`P)Sb}RY=p52k(v3~``FdSmt|SR5!tBt(5qMp zT>p}0ly*f~0L57e)oQm}Zavu$xpJeKcBZeipZnwtqDiX;E#8j$MO1KOC)Kk*(;t`0 z%aunH)Z*Y|++9YFGbZl}JWEg}z+BaLN={0AsjZT8~vvHsSIHR)#~4(l+^lUPWKCxnhv6a!<3G4sQHtoPjD_an=@ywzqUM;B+bu!5_)}?l@iiTY0^^0>xPV~ zoNKyC_nFZF4Sgtwk!+YZ3XMp;qSzRgefuyx19QKXgDT{$KxmRXQL5wjP`&vp?0&ZW zVq^1k-bHhe`ubxEDIuSek`a=W3PxU}&uU*LYl( zi*SG5oC9f(`%b0t9&9F}S6g^Er;s;JoDQxlx!U7r=G1J7Lh59OkCd0|KrQ=Pe%Fg1 zmLwJ&nuAJQXmZCi+@0fp0bX)W(}%?kX= z%O=X1uo}8fUnh23dq=66nBb2oyjW%lDXGrBr6v#E8~xe*f<Kw3Y`i@^}?Yj%2SMEQ1K0(*z_91tsdHj(U>%b3vy37o&RQk zqMDh1vp;v)8jPepJX#!nz6PV1IV2ju7hj|Wh;tVAPz1ND=WXaY`75p08z`N?Z*AyV z3n*oTy=!6=13E|Cl2RB&nkk4ysVU&)T>I>Ym`#oY$EQjnh^u3>afIUA{%&bL3 zh-ACnf!|Bi(rg(;)E7Dj2Y+|epvOAO`(N(%uCOdnAx4|$h4!{v>hCBLM$un z&HH+dZv@S%yZdOvzZ3KR0>~Kwk)6M{W>T^!+1quL?CoFF^~>MX^+#aD`Pd@2rGn`b z7Xx2bJKjySH_3@_sS*@UnbGI2<`gpzDt2=ZabpJnk~sF%8_dM?@nN(*vsW7zn?b@r z^N@3-30~P*_2pemw~%{?L@MY}1MoiQeo`9bOfEWPhY`)@_a{wT|22`Qdx?=TjrS|h zOR>r9?M+2>-jEOsyI;G0$`L!^iUbIqm&$q4sksPBMWQKql@SXeXCfuA`pIZp9ksfx zEqiU8&gk6o%jx5S?qa)j6GAXljp!Rb=b~F?vEhAIE%II*&?V{BeH9!L_Km)a+IJs+ zGZXXsB@gBB)y86D5dRxX!1=)f-Ft^Ktd|Q<33`FsAM2j7%!fa!Le&BI1^B&=p^ILw z|EoPP_zoZQLdO4QN7@QChO)4y9crRAIyy|(>7xZ=wxZLWBa!C^KXMo>W{GNwe z6@czwh8iJWFS2~6a)xdHI~GHaLZ8p#aW9?epZ*@8U&sas9Zyoe7r;K7u9Ib%4-qD~ zj^lfJIgWmJOM$-=_}OkX;`2E0`_2G9`zheih)M96#AV9x4Fy>D>?%Vxc*Uvlr-;srnen-Yfjqv5j1W1eh z;rvz%pFjFLYTmbkDFI^C7+ud%@MqU!Dpdab>jjoyzUFs5xZU&*ZbxCDfWp9nnC~wy z3@HDtet#9(`{S(z;T;PqG$1ID0$(=zxL2m{k6JEyDCG0 zwSPU2KUOjHDF053Zt?8TXs(o6sB-?ug!rvOA4(DO{d`DJ=AX~1_v|Y}7q!Qf1jr7_dkUj6U^uOd0I#P1)Tq7u zZ;jfo-;S)yph>gAg}MrXP8fRK%_geFDP^O2B#o0HWn6NL0Dvoi0F!-q2AQ|h4!OdZ zsm_1v!3s|(D-A`2?Bi+Jag2Yx)UkA#(MPwTmZM^jp^I1s5!iuMXEvcCQDfF4-Y9Aba0n?E`f8})bya) z5p+YG*F=`gXtXl#AmH8xBQ)*!R2Uq)s!c&TFZ(Qmm3s~^DvaCn{PupTI;&3mCqWgS z_e>=3e;$EeElIA=(*_3vzr$d+&XTJIn+dYAfbQAZ#RLP|(^uQ>DC-3b*5kO}x_|d| z8zn~Gk)6YTLVNvm`}aiD(9MgI{8Rt!w^O}>aA((^Chs+k4-5q%7Dvu6e;({NuCT2C zHSzt=^T|)Y0Qk?oeMMgdYkdblqSLo|sfKu=7SAS1!{a%u{{F7q)%V!*Cc&_kd zNgjZ3i*E({dlz<^$&wq-*CSXB;~HkbhDv*qwgfR+#yua5=iXQM!X5~peE`rK7sv_& zH}$p*w(ll`?F3E&cHZxvM=tdSKx$k>#gPU$ST9lnHhOL=2(SxQ-3%q8X0LFf&gk#F zzkS6#ZGkgGnMGn7-TXDJcF8&XYF@S=L}m{8wCR5gylO(?yqfxJc`yRP zP}Bb72k^83epe2aHAf|dzG`RiUF+|hmj1};*&jKj{UayPAHhES5zOFsu>U)|CkDYY zvwyj7sYJOKcl{aoN1=Z@{eKktj|%>eQ(&G?yZ&tDk%Kn0R%fy%Y<@0D&DOwgV^ES% zM+BX0@cs@XQ=ObALj&FaCAx(YE^Md8-mZofP3cL6(RZ#Jd=EMXruj(gd_aibVoKUc zPe{QrPoya}J>(Q6jMa?kZhGoq4OAhCR1 zK$ki_xr;HRC^2(LXNY8D1F(g@hlY~3A|aUqe#!7HItaiI*B@ApzB)1y&5f!cF+cUGFmt+LtJ|ih+Mg!)fJCPyY-}xL`yl%TupIA6ySiPpnfEJRrr?O$Jtt*Wz z#b_^T8r{%8L-p{sI8Mr4)(x~WYd>gVj^X@NJz1D3r%v@df^>r1F2H`srC7F6o&JS>J@&#EKFwt^ zfO%(^)re=%<&lMorzXuz*tjbCi=Si^DpIn90)ZvT|hUwR|F@${^~lUpIkGw{AZt);!RSRI6g5{5=NI& z-DrGs67xw1AgJ#98h_wHz4xV6Ik#!q7^S-}it&wDT`9imhQ2^ISc!G<(5ohcuIdqU zF35|FXO8u?DbrAULJn|Z_PNYCZ4R`V^ug17yOWQvv>c+wuMvG>N4&^GxhV)ua=k%0S%0IB)5hW})SAb9+ zy)LdP1?P558w`>-)4Nj`mLw#nl&?2g$IagITifct3C^Mver?DM^UOm#PgRn#s&rAY zA1jYncjAk0qDV%&4QM)W5qt(eE>e*j60LLw?_^TscYivpj1B0hDNA6s^R&6Z zS&+jh1CEP6TL0SqsoQK!W!Cj)ol)r(b)e{Oer$%C6sLQreu9xp#NEA ze=yVs(T5ji?AzSz3SrCk_UBO9BLfZ%1(QgeB%BQ7>+fP5WcJPMK; zTPkxW7weskaN?KiagjBagdSd>l#-=IJnNq*CW2_Ou-dgN>)-%kH0B6i^1y@d)6eJVQFU);^G%v9s7(JnKFbp&>ZCHU_sz-N(RU$duN2z@FCG5YDh}^0wv!61XV8{08I%f?w?C;}+ zDP$J8EIpeiP7b`=!+L^9*sKn9dRgUMer(p zi&eq)Q@uiH^-=6(0(Ll^f|Qe;N$NV{yP8W8OJeqePw_Og1zJ9z=Us0VRXHn;SKV^f z^v#$b9_w>*aDyz>tOUoipOX=BaJpXkZf&=wB39)VvmGGzRlaY_ve8Ov&%i0XRFzUX zXpycC$WJojPj5eWGzgLKCV3T?nb0+WZaNB+KMaR?PISDUw#$d^99FhN<~*~l5EB*W zFP*%~I(*5yO7-(IvZ~!>YTtSyyTAg-6={d$hNHUV#K2v|^)9_099onn0enyLF_;&R z`IEVpq;N||A+DCVvq@AZxr}ho5r}s@XqGl2uVf8*WlN}{B%bzs)K7`j-kQ2JCybiX z393)EE5u0Fp)t7YTx*t|&DyjK$32d8t2JzJoVaHelm4zyW^`N^DeBouMw>0*2)Q>r z25xr@-%Zl*$pP7jNjbA-kZLpe^?mJWda65P5?y88eC0(2-OuJ>kDaM?J^T!@-3VWn+0i$wDOlSR0ww~L7H-) zhsL*X2Lb&>If{ubS*IG%ngmPAu*=8s&Ob zW3_mtg}ld*jN+&k%JPgxqpRHJZi|dpc%m<;{XhF+O2tOEmS)Bq*F8?Azm>)ug|h3a z;uYqGc4mL@FY}oRpak_G_I>;W%kGB(au?9tw^N8x2Jf1zf zhZ5^xBw7_vkiTbEMcWEIEU-Y$-C z$xm#eYTyyIv7Q1bOyV`$+7MWw_+;y(?d`-)YQG{}X#iax_LNcv2nD<8EeXyZo?)0f z!KK9247TRe<7K*iHK*nWgR8lOcylyoo!*59s%8N&V;bD$m7c#m9w-iykF2#Q@QHAO zgRC=LU~cM7B2nQxYO`3#Myk7@Wm&!$c&x*Xj)vXpRPP`9bFSZ^Ffin6XmC?r0s%53vn zgoog!Dv{lPi{nlCpIcQ3&dQ3$^aH)=E6-Gke*pwUdV|ORM_V34LV4LQ!1sh%z}4DP z?ee@au^m{s&2V_>dl~-ZJta-GkD|hFmN843*15Q8isG~iLF@;81Cn;cgfD$+89%PlXp`p(oJx%NUW7o@2`OFs8}|0V z$p#}*ob+%(k2Hk^Kukhz`w<}2i$)#7W3wY&N5u_HgLAWZ!_*(8*Hkzejl)L!WBkw%Sf&^T+g{uu8tc_RgE7j|d;OiuUvvHAnxCZ;MZ9$u&6rg{tyJ0+HCy29>jo9F4Tn6AUr{rqO;0$;RQnIeUR^|w{#Q&H!Y0;vz< z6&l}}oZL$iZW*DH7v{;5TO?EReBf=}j3||1)<5BOOHt7?QdplA#eCt#$Lr$5b!(rS zK@HPjGG5ANXJ;;mh1#2vr}&F{M+!YAOWdP=L~nw|1%wa^encKNQM5eOZDPC3sD?>< z!zP5(o%RejbVyF%Tr_U}qDq*ClV*(O!{D@A#wJ`H1LiK(UIV3F(tDpX#h1pv_E*s* zHeRQHT-H(v=;JZ-eNzKcnfjpl`7>DuWpv|FwG%XY>2NHtyEAhH#VXboIEhmeiHc!G zV{i%w%0i?T&h4FHwy0KT7mMtuusOCRqzjEjZYie#k!mXqVSGvj|lA4MnWfD5ozW@oNxAT;SpV%t5r$y}x zL>WAezqNs)SSE)wDsSsgYy!qJhbURz>M3_U{3)X5Bl02~qpESAD{ivB)% z4kAJ_!h!2HPa3wdq5G5Oi5oVCDHHHx!J+~?PC znR2B9iS*5tit@>#qlx4M8#yr>Egw3hx2&x$bwbjbZ|8IEoP0c1^`X++#j$2X1-x0+ zD-d6NSY%UG=b}`BKy;F8TXUd4*>RZ!ktLHimsSY!yChVGSmDX{*b3?B2XOV^C1;_O z;u_wg%IYs5bv^Zh4j*1cNVX_Qf$;cX=*-E8?8iBYB>g+JQTMi4A|a9pl7vT>j$+p1 z5E}U^P@eg~LJYU=V^LD;S~h7F-KnDw+_R8W8A;Ufh=^%Sb*dLDIg<%=0^wAq6u}fS zf&+gD)I+-WoDANfSi|*@JW>n2>CnKc*k$%Sg-*&cC;7!nS#jrVCb1Lp`?9sfo#&N^ zBr@%{r1M0UK-_V>2$pSNbLveTzFc;_uj&dWl#tWp1+|9@l>Ja8@SJgLQCAl-dwb5A zwIC+t(ryo13>z!w;J|^63Ph{Zq*?o7t1t4(Iv*v*zk#N8FU6I@#(1?1PUO*s-hbQ{ zJ$=)md4$*7^J><(Ta!Hs(Lg85hjVB4BL$oVwaG-Po{~6Nw@KUQ2BWO@sgPGd%Y#v3Vs<6 zZ24oXlsTF0+Geu3dpTL~HCQN;fiwn!zRCK># zx|F7g^0dbbMg4kw7iY3;mVr4bCX&k+j;)zXA`=UIOd;&gF? z&b1_8)*Y*-62`beb241rdg6puUEn{AZcOm9D>&BE*Es#^Ay@pGN>iFmk3)05u|PYs zEcfBX;7ui1bR12dyz`s*a^8YC>)7N_SZc}~FEuv0T)VYlg@Wj~`EqFO+||Y?k762& zK%6;q);;LMO-5X~Fq>3y^}zrHSFDWw;h`!A<=*lK#3NpgTZ~Rh_K$6rLv;}WM+aJF zhRp^9&@QkzU=>`V?qgOnJDN(%Hk64=P6BN>Pn}6UZDc3w64`d&1{^>Xz&X?t3i zScS1tW0JK}UW?G1lC6;^vxE@OPA@9>&HE-{vSHdF4tl_TUdt>d8~C8pAp2Qj40P47 zb?e;3+n1fH{n9i%lVD8~}?Q3So+;TKHha^TBCOY?V`RBu0z5T)~ zOhv=iXX%9%ylE{hMi!&9sc|+Y);zPk9dC=)H5BIJkFfdj)3)j+(&dZmadB1azs_xG zmPy!)TL?+{<(&7JJ*8T0FF(Fc<+Xawt)4E1tHR3+8frRmA!N~f^rW&J{?K*OuFEI8 zQcMt{E3!hCA2moYz~LNg(o}X{QGG|wzm0cZafJ7VZ7Ck+GHRrgR9Bs?JkZQsbexKZ zGoRullVi^@((^DLAx`p^###p*yTCAeyJcQlUCpUHr@LbcSsH!D!#h=8W7v}YUesT1 zXkb8nNTz~wOBm{$VXy8uwFLdT7r4r>rv@~AMy0Lu{-@B3zVZo;BeZ&?Ok(wE=TVQY zL2BA$hhOo=jPA$rgZbLguo7}=-NyVRkwf|38bEud2tX6(A+rrtDUsjC|GBdcm?zR9 z>1?B2()EbW38nh5hm}dZnEbE1uiPqIY<>X{e=szIC9~r^!zUD;I=H1XpX6Dn7me8= zXh(gf#CCQBRZ20i1$tev;<>YR5gqV;v)2#0i%;uuNQb)x(uCB@0ea>7A(1?%IG7tc z*imF!0({fGf$lZoeDS=DC#xMG(JLX;hRrbvVmeZsnP3V2Xf{#~O~pWuX2HpM1@yNR zn6*#wB?O(bt1jaXebDi1OOdvRCJF=Y(-|PS{2cP-B(DG);r#T~)yYw>f=z1ZfHzsu3_EQ&@Uh90?B_d$Rc_x{slSyZT5`oqz$L?QNkTiL zwMuqfd-cf!cHLrlibDKw<-CYFg$S^7{@DGtRk+}_z#KGGAV@G+SLNgES=%jJ-0?i$ zbY%3|jb489VClv_w{qU?)mXj)qn@{+&bMc@{fydkGF1GC44SZL zI0%GNhO@QAa!(7|li3f@RN*J(8+&I$Cn`ytDP>-n`nAmftXS@OkE)l+{XehPfA;Xd zFG<95MQD_NYJOlzFAa%bYU)m{tl%S~jZs46IeX{6{|EpuOAs$M{OiTrs#*N8uK4@X zwTWAS!`h=SHi112I`sGDpDz9bhW|fI{xR)OfcQ&@vVYc!iLa$%hix$YjnDtC^Fob$-@f%x^E2!(X4*xiRlL&m2`Dn5W1N{&kb;Zzf{3`0w z+`wn2mQ=Ua-y|^TQ(qK#114^IQmFvJ-!FoGpcAgC-gTi7Ysxwp0*Ey|Sb#W}uNr#! z5>GQuEUC`;cZrvKm8IWz-UyKRyxn=b+$-dM;fW(7D9ZsPmEp8xV*mW302OEbR0Yt{ zS@H`|9U_nT`2p~@XSi4M57!v%YZj-#g!79>YiLA&cxCxMbuH@+2!EBbzd>?q`J+}E zNQ%lO5_QpQ=g)m0i3k1JN-xXHvt2A;!se+Z<|-sEDY5^u*>>RD>uBZ0Vw+A|iy)laNGYD>g`!R%sGD zh>8$VAoNi|A|M0^5+Fi=03n1Bn)K~0-uFArIOCo%zWd#u-ytKUR#mN9HLF(5XU=Cn zrRmiSf!3Tpaq0v}OG^uM3HX3C!&+&_tR?re)NelR%*4p;( z%N|<0K-&LYzX;fP00jI8tpUD1$-$t-|6C6O-2{FY{w@LEh5rBi4Zj>57PT+zTGV!{ zeFyhhfk2DSKKbX74g-7KKl}9GmbI1v?S+2-_E`jsq5bbIEui(E+y81U{(rXrTWje* z+yBwh`Dd?%ev3g%K{~+aKW|%TYyYQh3+;u`7ybL*3+;v8Oa9sSU;P)3wXpQB&*J~I zZDGy7M)|j`|L4CT4HI;1;ST*@{Vg2i|LOn>oi$%TYnN#)*DBH0+5uX$R!e)WmZlK| z2JX?4e;xauH*DdaEz(}RWU0=w%fv&t2B}1F_*?;?tMQjE|On-RRLdv(xfQ#GU0UHf`45veo2I(_OpwSXm#kv9+^5 z_K)KyTuz=keg1-{m-k;6eFCpuyB>5S_-15ObWChqJTmF;yZ4gsKX{myo{^cA{p@+p ztJiM|3W;yuz5n#Nth|C;Sylb5q49eY^+$6{7rpye52LrQe|UsFIyTOk;7-oY%?m|h ziBu+EuuBW1{qL9TUzYtByVe4BEn2)-d$G=fU0RD`7Ytv!c*%|fOV=Gar*j#x{*Qx+ z%QhT+`m*%va$`%6nT=N>I#+DkX*FyzyI|TsE&G3G*q#4Rmi@b7|6x}@Xq7fFh1Y7Y z1wlaSnR?>{S1Do!`?Z?d2!DiK~+7EeQEsNm09Ut^HWDIJa%;7b9Z^m>Xtn>H{Lwqu6r)yLfU6US{>c__0FMG zs}Vo*GqJki$r}($muCGDce?Utdh+}&#!ArXz&5mEhw=zQtOitSqc-vW zLQ=zbsRx=N6OozN;fCcJP-~KUhs{HRFx2s|2GnSCUjvf$ga1!XF9RDkN)Xz$P-cez z)_}&oYCvmpzeDAR@Y}H?+ZwS-zMeE5u3Vq4#%Vy}KY=mcOE+pjZDar4Amj+B++YkQ z4gZFn8v^We8zHK;LDxWLSC2r{G093tvU+*52IQgvDb{00JQG%EK;v_`|7Hwkm8nWM zf~2&)43ULn8~>a=uYOFt50>7W1unhAF}0De2DEro1A46isUA>f_tY=J&d0m_H)HUB zr>m3gywwK#3Cc>y$ojZ<8qf)Pqn`3u9AI1i%m4k1di~!FBAz~_0UgUL(tvdJp=v+y z?DEa1%E5F0%{YqKof^=~c2A(& zDpL(;pPuyZ!9Cc{vRQ55mJAweK%5)@+v)J%4f9`SozDMEy8oGU|J7Z-{+~(rKc4R2 zu=D?So-R||7CnrR8o(jlv(NlspT@)l&&G44DVeOwPL;uFrZw*i2#JhnVSFajIJKtV z{VYTnRsMH=?$;O5)5>m6fgKqV*<)d1-o z(60gco5LyO0(pW4Btj#ZGs@|ZuZ0|ga6JQLB*PE@EhAB}?sFzwMmv&-3$U94*%lJ; zgc$~38Y4^21db$+R@XkhZ}t1qTET=J%_&ahLb}P z>;ptk(Un+lvJ}+^Eb;@dthRYU9nzX`m~%i#Q}2}z(egfxhp)Cs^-2-c*fIdQhM3a6O^c*{f_!%8UZ!}ur_aD-e?D31~`%LT;107DyM zOPqjCsz=6v2{#!@XPTV-Qs$7zRYKJ=(0o_6@(?R_OcF3~mz>SzsA8;#=_kK3e^9j@ zjpAuzO-Huq)P*z<1Emp8hYfHIlz`vb^bJ^VMJ=VIK}`r{um*}($3+e18I0;t3$b7> z9_dxKH7pzmxgbP$`?b=j_Fb_`ipkhK>{%=jM(~MQ3MFvoJHImNMieMf-&DCegwhXJP{=>JpXAt~kzWFbU2kGfFie$2s>n z;&^dENq%iTk|GUfL9Kr=Ur{d9d7t-LZM6y^4W!cxbr0@$uI;Ja3OClC7$1voSp8;?QRjp-I~oam z*3ALQmHWPDaky{cEaF5K5ak&M7&^Q#`_~p>TLxS zT0pft**Bz^%#AA1fQsUCX1KK+_?bW)EFg(kf?9*>DYJ){(nt`Fb}F9W<0xSYMPztG zCH$Hy1a1y4VLCmIvto%+f%@zj8lyx9O7k&yTonewJkx-{?g#Lk#a&7@{FSeg^3$Kt ztOhgON<^_1RQOii+iGp4`mcAlwO?pY95_+uf}K-SAm?tpIP7jeD|#=8USY7Q6&roR z?N7A^R3kuHc$w}b?`nO^A6o2}x2SPcw^0LHX8O@d1M=gN1|F;$LN2{^RW~vfO$F}j z#`K)*d6PahB><~<=sPNkT7giY^`c%up{{^gKB{_Iha+(4M|Kz+du<+I4ucivE@ zU#~;pHNQL)94NPQmCmU zR0GDr7E<#?3*I$8!R<^?Y!j@v9Kov*52*58M5OWY)i&U7 zNQFAT1`G4)Cn%Q zo#IZ_E@|8vhD{dAqlD@>r_WS>Qkc4=M}jp}Iay(}g%kCB2N|!hCZ~g2{|KLiJM%Q< zDb0~xMGeR-)y<{viEzNmE1S@kw;`Z%`fGYYO^7Pq>6kK8$iFrqvVK92IFN!pgSCJ+ zbOFu?kyNHa$mG$+U}(!-4C@y|R9KxH3KnL=Ci}wx2OcFurVfQe93$d|!Y|DW6Ebj& zMl@=efiQ$G<5jF!bR9;eJw{iO6(uAIxxUdJ4$S~JkcU$#g<2D4KC5krtz0Hc$I!_h z72~voQ!Xgv!MQN#GymYwLyYMjg#fKSQCFXfe};yEQ1HQuJjf z@C?m!l*?YJVmp0jWPEaH`sd4Il&k^Da5X?X-QWI}24n$i6#&j0ooq`rRH79Lhtu z3b^z-ie9&Mxg6VIUBa?x>E|6O#OuG495CaMHdV8Ck2luVU9hcRc62F7gsR8(B+VZm$hp77MD8@AGEvCNSM;MUrP*PZH9|X-{bMvkS3YE!c zB*izP+HaE_jgoozB%=n$7=s9yut#28XD{qwnjdAoR@R^gl<9|d(6y*7aUyMeo`J-G zQ&}7rHBI>Q0L>j@Q3x%GYd;R2IV8gd)Feak_>%tkoYLUecMgLSRVYMaw*mWMXKIfX z)gTE^P(?s?Xg~}YV@w0mQ7`H^Md7uX*9-jRn-;wn>J!gu9S0rTJKNCkan*^VdbO-0 z0_IL#J;$wW>E~|^uZJ_zn=J9a=c#^?!Uv}ZLV1%Fb?Gc$h`G4^{OMWfppX)l;~yK$ z?R)QFD=-#g&%Se^{%+Z0(Cp4)OqTNcH!Ys!k2l*+eL5d zdc#&CnogOT5*?pPFR^8L*F5BXiPo z9?}R*x=YkgkeU+tL$_~l6I-g@ZoaWS4f+*qpqrcrzQr~$;6MsD>Yo_2*~I!Ty0vkz zT0L*r)od2f5Bo(pzq#$(bJq#!qX(g{0d@;;#XYp+SPSo7B>?hwS^!{^nsOSg03c~% z_2y#*BxbTW0^CC(=vxgEcJt_4z(=NZ+zD*Dp5(WS>JGpV3B@*Y4Ja}4Gr*1QECF2c zHJ$Z9H1aZbc{~6w=0M1Uz-2q<&&tGdkxg(G0ZcN5lggIent|}Q$W#YdqAU8DIRs%AnlV7MSH_PDYLvwZ2QJCD7fLBOjig+(cy3bP*h;tBk zJ-?Kz90PPbBiWtv1Vg|rR-~*Vbm4f@<)rxvLaeWY2IM0PQNtbp0i?ULpKjk4KC=)C zN=%xv2Zjl5S}~vaWwB7{a1LGjK_V0?traEKQU`O4x3~I3J*RZ(bKLM)->ygNHn&ld;3awWyQJDa7sJcD|aCV2)>*5S?$7lxW)EBfZ zqYrz5aDP$V0XorWFfV#CUb_HnmY`r(!_d`Y-6CNC!5nMo7H1{M){10o$IXS?M+p+~ z@(%8EDu6LFYJa(U>D@xg<61hs4GX1E6z(e^?EtVog5o8&fn zIg;0eT+5du&&{C(kw&OMZnrML6I#*@ z9tojvXnxH_{v=g}@j(yzGmZtUwn-U^;R}At5$OVM;(}LAv7lh6bP;6q9GOMR=^DgW zcqipYHc3gTAgW`50YML3z+8({d&|YzM9v9Xmrnq5vzOR*0 zbGrRE%2AR4v^VVQLLL?=Ip}hpCgL!NybK#H`W&=#NKTP zQ-NvFdAfW7M$eESB}b?_2FPf`15bU|aBCx~w3$T2*Dsuup*gJmUIo?%n*%Q7c~0^< zD&J|~0_{XMF!4}wm4Q*7L5eqC=_hTN$rWQ~%A75wU)gRJU(|+`-Ns$T7SYQ{f_)aE z-IwuWd!yPcPJZsTMxPc;^)S}gdTrWlv9b1`+nzTkf9_eEF{Xb!@>E%x0OK$A>KFV& zQd2sNFkLsA2Yxc1=hj&D*ns#)b9j2wc>LXHuL~b5ZzhyRMopYA3ivQOw)Mi>%iIg3 zfDgkb9@}RI>AMb*HUhNhWeq5husZ(H3&I1|nw@7pxD6AQ{FxhS7O@cz-O4lCRQb^O ztGU=F)7$ngbBwe&SH1G}&|lH_hd!zDl>U(~Ho_=4 zH`~0XvX4sZ#7v!C?|Qy`xaJsk?ZMlZZM)7kUF*A&QFVoP#AcTYJOq>O1?c|x5y+pA z4HpwUrLlI~q5JBF6#gM@k1O|f`o%e1oZa-&%2mbb+Ma!9G3XMx&v}`u7BCYEmYEGx z`b~#ZJlZ!L3mHMf)oXnFF4j+-3S>V^aEPND-O*b941ehQr=si;uD`-LPC^ton4vQT zFlEE%zfkC!Kw6#uw~8{tvpm zHjE8^R~CvrI%}AAGr*{)EFa~bt@2kte%m*h<#F}ut?JU8IPiAP*pu0|5bu?44pwyE z!Vk2`Gl$GpKW^y!J~X@GK%C!k+g}YM;lF|z4U7WoxC^g+G78*_?aTvhPoGQsb!g-I zwheK*!>9Poj-0fmCj*>kx1lF}Kh^a1m2VgwNc&a)hCNn{c=V6-c3CQxw6s8S$JPmvqt4T-GV z$AwvGUO2b&694{?fSi3UV&o+QPW@r3QF+Sy7{AhB zJ5=jmg=J8GFL5>FL|4bR^9uK#it3`Gh`s>Y@Gq9q39U@(twHG5I@*Og-Ka>@1TbUf_p~sCf@?D*hHo^Z z2#8#kQCm|YfpBwZP5e#_82`ck2763!2Qh8u)NaYj>+EC7yEGuYSOeOTP!}zv%PIJ# zM*HCQ7&RCQ?T|mslLLGWkjE`Te?0KS_J^Q1dK@R+rlb^v-ZJ#?=AuHzf%<8+B|wD{ zTL}rsOM1NS(P)qt5R9O!xN4}5JP5zM`87i{=QR+;RO?%lMPpLAJPa`ZX{wX%fpnaE zrK6Dgg4+}ggaBVx%GX&=qEZK((7R3EBbl8tjBkQmM?`9!;mM{#8VX}UL-SwM@q86P z@YvjyL5;PYbYx)Ci*bS{i5FT7R{8|n}QrejlOyx079l4sU)SH_C2Ecx%>a$DGrS0|z2L4|8Fdco?ATTe; zaF*VYDg+#9Kn@lNIqw)&!+HkxDMkL(TW5l+4D~Pr_6UJYBmo#9`T)A!LClr0>9U$o z39=4CqbN6$MWYmmG!n=ZiLLYw1VbO}4n=fJz5^o)wc^?%QxIGcmB>9hQ5;jlhsUZ{ z(xV^@ zwi+bNjpDjM>)^75>{9U$b#3%_%pU;QMNKIwcfd@P9n11V%F(yrMq~wDxdk9tYrB8H8vBGS_@MzU{}Z2Yglml~rsp21+LK3cU$?P0YWt^Qp{u>IFv3+i-X!|@B`#xc_ z;-tC{qcxYDtO4DCJ&63SyZCGz(c8$O;yA2ot8d&0tI>u08M4meO2m z#M;wz3fmp9;`8JFiekvS1fbBmWRI$(47vxh_UjCf`lMu2yoj)JFxWo*?c^0g!`6Bn zvB5a@de?Pa`u%%xa_?`f8P9DG{yr;Z4dts!4sc*`-rqmoTyzG1(JCKyf}T(tSq}5b zjdg2ncJ}wFj1Ph4m`CMuyy!*0Layi5SBM~=rKa3tBSx^Te+4)WE6Mk{E?EcL4hEe! z`I#e$pB&lmA@8~PsAwN7X|+LN8vT6&>!>tRy<&&LDMSG&vv7nBF~VQq)=E95*&#-4 z7IzD0t&T({j$7^l#U40P11I00l)=C1t!wHy=UoG+LXK|SuVKl$^U0suvs@n{YCk$2 zTatO90A-{8<@37rX6u{4V}?HG5S>=PRBj|K|F4NH_m=1f!cEP(4LFYLmKpZ~2w25q z8I*?Azl9v3IzexKtq@j+nuI7y2B*mi^TFmicy+hR{(MH6TiJ)PpY=PdJTm+SibEpG zQT{&Dk^++n?RS$p2Dfz&Q2l}&BlgF)olBdMf83dZm~xgF&w<$&?dmIP7@2ilV|8*~ zP$7Sib>myKA$g!_TG>;b`Z+Y9$L;u^zf|W=`%*!7_FF!d4eAZ2p>;s9rb!n}YDe!3 zpRlBE(Y|dz{pH8>ewT_6qZ@U9WRVe)fZ|=M{JlNd@PWzc=}V*e_)q@l$r9&Qx*PMC zZ-iC)nTiW7iP&hKEWGO&BSs6VNNTWE~WHRQ!V0F0$bWessnyQ0nfC?p_bX6#m(BGBn zK8tgJR=7B;YJ{dt(}IvAg>$+NNbGik9_fk67Y^&|Jqr71@dTZX{fX+XSj zfQXF5Wv6q$QptXSy^1yV=hOg|8%h^3-ZMWdW4IOlSpO_8Kw0IuIG~+uX*yiOdFeb* zeRE(P3YZ(KM;&7fh`0rW><|EQDx1!C=#HXdMc-9bcg^Q`TX1hgF!B0IhKkNUrU`7KmP;M8KsD(-){-WWop3sNPw71nmg#X;(I^ zX3k6L6!Q@#S5S(h%H;rl@2+R?l#mbsF|vdb1M2f3 z#JSBJ3JuB=dIKTWb(AiJ!=w|iP314?$kh~Ds(loVLcs`w8G_H#H8Cu?7q&}jA%}e? zzXYfbd<>2#GGfyUouELSDwjUSX6W-1@x+v9uIyY%KaUQx;3Ag+qzRWwPvy`dN1+L+ z4uSvVTB#k_L>iAuZgul@69%gRK)$VVc7p@xKc)&JFTi-}!Ahk}iBQM!x&REv_Q_{e zNV&@034A^V|Hfs%5GsLa z)j3Z5eXEkPnxR~&0)$E0LUqOUGOrbtrUo%o9{=l547a~z=UU=%qe0f_{K*{J2$8d%t}|*8O3h2<5T4?0Hv+^CK^Q(*mn}824n!9d3@;Lu_&Q48>qta^VrrR$VD~q zI9c#|sM7W7l6EGvP%<|+?=70JP#Qx!?#Uxu0QpazUdsoc2}#dEnb_MVCQ>(z2{o^+ zMV?w&gun@~k9T{gq^G>za=gg4WzV^gHrq1#WDfahfkFD(C*FfL-x%Ae*#C*L=2^zoyp`{Kw`f1TC;J@(Jz5?4t?g_sqpxM| zwRwfa@13N29Cv&}E+l%0w81hVD=NJ9*j;>R5^gW1E;(h_c*aPTNAxAx{;G#5UQa)~ z_0Gu6oAul}=2UcemT^1!)BT+G+{HhaUi!7kZR;hDKJ1WaU6;$$tL1({x0#=Pj2=bk>Ra(=?T2pT()qoC5<44f2ql^TX64zHZww|B_6}s)q zkAE%oJ{s4vt82nI*WBB)$J{{A{KcL|?{?_@&yH?;;_z#~ow#@2b>p2>k6#?MM6!Ud^w<7!~V#rMhOcUEbAGa3XpZ5%K-fH931G zx}OG6vEOocZ^8RQ@6|7@$U3$2_gJygqM&hlYP2-shpXj*D~)NV>`FueJ8egi{?}Wv zrp9>tOQQy;9JxI`+fn9S!#AC^0hf1DU*X!|-RkaP$*!wgHtZZTS(R(%E{P1Y-D`EN zeN^ODENF|V?If5CFHU2g;&x-)KgCe!U9M#v>*%=k7S*4zIpC8F|qOUgKlFHzTY>924wd-8UI|I>eP+T;>tx zkzI4W7!~Da794wx&W1~OId#H&EyM#$vLi7+uw^f<=t=5VNq>gw%iO2fsdZ-J)atnh zkylDks`=wuTFeFO}6CIot~{YK9r@O(8~)1L!fT zol3wRb$;GV)#vpufLTI4zJW)RV&cDp%|c0P?FtqrXnrMdCe{)S2pW>RhD-d!$x{uY z5EJOqRGlz0A46NA8K2p~CNY?xtLK=ZYJOczEJM(1USGEfU-3%`)Dok8cwYeR=f60Re#hlqtfzvN{m|+~|b|tOt)LB!}I1)PRcDG3Dg2rrNDHhWO&9W!zph zc%hm$5yPJ0w}&H=CS45FQP?jkM+pF0S_zaQ3m*A*8<37ZotvLtirtZ_BO5hXsPj3W z!v#3pMsc+17yL)ag3gJ^7V7G-C# z^wwr!T{hN)%SDM7Qhx(9i)awki<&{(2LZW!VUU4=ZXHD4fTxVEaFnyAnJ_7KZc}xb zIEL}w-%%|p2aE^i2%Y>^$3Q|eFu+(BZOYp$&;{x%$J*V|Qn^?s)EWxUp`b&t7ERLv z20XKv9Q5)<)-3Ue8g0qob`^qj?>s3nKRVxdJFSm;O@>JI{xYEyV|p5-yU1MOK`i+H^Hz& zc;wb;1LY^s2M5*Iw!g&ZO5?tm=QnPvAp*5u)k#drAvvhkjDCsdmx7?v6 zFK;+B>+>CY;bW5Z`--9%Y;Nc9t!>$RU!{e0dXLoca4yxj!Kvfb89i z_~mu*6=eB@Ps9%`uu0ob#-|Dru|>+1S8JUOY4>DRCJoaudbv~H^~-t=^xwMXW0 z{%(iU>)qG8xdfZeLoUv&ziWJV_H%=yzy9fi-#C@>>0sN+rtDQg^B(RkZEi=~ZVe{$ zonI@l$CTd_E-J3Idy6qr(p5`!{*dd$?dGu(N0(u93r8&7-2H-MRHPulX07$APb(Nu z>tT69k?Z^C;*0Lg=6neT?fJ050K@taR%Y-)~}n|qVq2@ly2AkiM{-TY*K z0in?SAfiKcgx~RNw*}_>d^-L`;+#ZVCov@&{A^=VaInBBk8sefrl@i%r!K7`-#&9U z)s^_?Kt6r0$J`_&^i{oN*D0i>Bv#WwI3OLz-1Uam7Zg8}MAgB4WGT7viq73|wfpMUVo* zyaF7d{pAyS$5Mn_#A+-tfWn(ompfzqD;TeZ*dB@{z(v~14hX?n5CXkE1kkzYvxPJ% z*5e>D7D93+%&6aqj`XYZGlc@xtp&zU7Vj9Y2f~e`e@xjg2s`Z8)Y*zS`i9920=0M> zpCqJsv!)jl@~0@S0jyWQ`;vfiqBgHtxk zKM`Z^+s5tfO#)PsXiJfSe67q2ka0k>=}ft{P@gkzW$sw!^QJmNSnt=cp^*4e{ zCU!*eQ(eY&ZUInqNyUP5)JMe1?<9D>m_7}>aPV5DVsPQSihH$y>M04FNY!EDW$lG^G@&F*Dc`mxxHd{a#~sy!T_&i@Z#Dp= ze84lXI}2y{Me^0jjp9q}1L~AdEb>){m~usSNJ4p7%;6K$s< zji@{!d>wmTia;S#(qFhvo= zBXH^Thdw|g!BFl8Xonx4Ht60)BWN7gyok6B%Sa~O2Snk}7aRcp)tK_rZY~B(n7o>C zb}9RXAeB<=nh`o{9vWgbI0;nv>1u-qZu^S-&m)f)AId5!Av4?CwtQk)rfr#VIaZ^c ziY^r}UK*^RrOlffmtbz)Ze&9SE{oa^)0|G2;XP1;eiiQG30V}%+%T8r>y&F(;C$^v zL5P3AsT;CegE@i_-eyuPe6v(B`}!Z!jWfwq)~1BRfoZg_cyMiZ@rO~Yc{%!uTUG$L zbM5?GTX9IXJtlkoTp+5{?DDz$>Oa$AjQSnQzo47r@ZwNtBj&*DWLz?=+e9Hj;y;%> zcJZj(KKe&3{U>*8{?o$Vj>VqZtRF+FEYmgo;&)W|XT4yX=+610%p2w2kQU$>U;7=p z@jHH9xZ$4ny*EZGa}7_d_IWe!M_rvh7KxbP?j_lzYzvrcJXO3GO%*#6hEOvog)W5{ zIpzP+Ny^682H`Df0ZFO5QBVu2T1&?IWkE+_8+=-c>`H0z;NDxd+K&s4?Q>dGaagiv zgMw|>b(b%_$p69-G}a_{H&M3-r5d&$NPIY7`qy!<`PYi-+{%GDH)Z{n_~LB?W>rR6 zOJBXb8O>Gr*ze>cGcvpU$mK(n%*pI;U4EnpmTOrxctWr$S&@{iJ$R@gQFLyw82il; z%K@^6dQ={U_;7}3pD{Xo&eqN8d^MInU>()-enQ@FcWtYX?S(Tr9r5e5#qo+X-=}3*_r61avpn`W%j!}m2KA_Sbwb|qn&_Q3R*M=PkoOy!FI8OOk&ycc* zrE{)z?J`!BLWr~BN|_81e96JP(C_=!lYV4>e3#cv@sEo=^oFwazRIK2C|5f_Q0osl|<7K-7T$7*<#$98OFNNXJELs z`@`?!&zA1xh;(=Txqd#(ImsyB-QCH49?&%H<`T2` zZ@Ig8CLtF?nf#m6mnO-dW3d~j(amxQY)oo|7X_$9QS&xm+ zM7dv)cOVe>FvlgaQwJ15FK%V2(t(OZfx|N+y>EK@+8yf&hvR5S)eOmdd-fsY{V_L% zA8ouo1*jc{d0{Gxa$48H;K*={A3*(ms6CN;>J3n!GyA)O3%8DvRLQ;r)rJ6n;9b6Z zZwZ5{0_-KAI$KYHWBc;3KGHu{+Z3LCD&&8qaZ`Io>Uu*SH)4DD=>a)TAnsM82Gnep zj_o_v$dZ=~Tg>+X4)@up1(%LzJ>d|+r-7oW1{5STC4Z#4R|@z)cwDK^AYlw0T0)CT zkdU&uDhugmK-KhI+l<$#zd3^A7%xTOi(tONMClm&TyY)J)^j1q*geG-%^ zN3qhzdYF#99LXZOyMX3-gB3gI@j8a8I{Qd2L!UbTx&Yv!9k5=T!`=^~f+bwqW&0WJZ0sI}$)-z+g-OF}3omEx_vG zGZ-!m8U~ML#C9+%vTn9^v0~IkRe(^dBeYq*Ua80noD~5@#X*b@d8B+*cGd$ zO-uIcLY$L$9UgG?ws+=Ctkj}2dbjI4EyfhtW*D`hC;74`r0f>AF66ZK%aeq44uBaraA;Va`tcOT=C3 zVN`nRGmc?t&MQf(W%^TwP7*zZZ6`=Wsp7tQuJ?{P74deiV9>nAswBOl+DGD5n)H_R zp+5!RvU}i7342pon1Xz*yf~)CA_md0PtOBEH{eu3aF^@^1QX8DZHW`hw3E15qmeZF z?Z}IE-!B%CKSzW$mv5|iP$oi|mxoa;5!DhO|65%?JMoXpLtxKM;a);D@Q&?JDWPmt zPS(pIT3_qoTJz9?cq3=&ZSzruJoBd|GtT87RsEhB{k^SN(tuBkk=+U63;&Xx~jfVp-^}u9gk>wEV5*1t|Zj!VzJY@}Xh9 zcd2?4`cG+=-!%_EuAt;COy_o5@wuMlP9~0s4G^L;keDQ;Eomh|!NMumOZ1AcJ|Z$fME|KUO$bsivYbR?>U)*APbj45 z+*375$j+N}fk-H8RlY(&35_I!F^cY%EHmDo^yDz;jzdy6`glm+WVX1{3lV7q+8tg% zJ7eJbbRXjJ%lvG}w}>Mg(uu4;54{T^-3u^no6eH7M;@sanYqxSPd#NdDJH)oE<$3=IESH*vZuF)(p3``q%F4=xo~k)2d;&x z?y~tl?I%mjIlqd_1Z9W6oqYT~^MhrZ-m`-RLz_DvTsSb7pJUp1f3p7i=H&tR4%+w$ zGp?&XY_171@@%8*%?%kq)y!375jqET0{7b`8(y<4xcS$6+gmMfKF;^N!gcTI%0FpU zyyvv1N8~3&WJ-|!>2MDPW=~B|+8bdMxCl`{@*=XNST`Aerozn)f zrl43I13-bW%oNx2)@j@_+2hoYZI<1*fWN_kc*v?e{Gc*Fb4qr>V+;fR2eXTIq1yO) zTUbFG3Nt4NH7}YfujUn$;GSwg@Rc7~r8@i!2lCWA#jza@rHoZ#v{8S}8RjG3(JTMCuD$a20&y`r!N z(8<-5HN~pwl#eUej99)zaS(VzZu_x9{K3~Ls2~PFoJlx_MHBz&6*($;kVqeajAk`s zr(TZ0A+qf7Z0O`T;N~Go9R@+*WRa=U(uI;9F|kbTA`{U_+K##hBY&y=RgNkrM;rmr z0xN>KTqg9`f;gllQb}dpMi2rbai;-sF8i)2@dzD9t&*>LtL=D?EFu%#rT~7ldJ=H^ zQgDyTEiQ^BK4HhF-BJwY4TU>}FX&Z!F4w*7{u45*K70dp4rGT&4oAYx;~Xk#qQqdAH!{x3%I znf8Nq=p)9AlpvPl6X4CF{Zaic#udQ33&w;qqbe6OwT_4(S0vFzb3&df8c_Ws6K)3* z+@AwM0HMSk@vtY!tqC9=iCh-WZx!~uS|_UlD)JeK)orDR2DA!7=Br3c^XX%>TY-i^ z76iQa;SXS5B>AObrBj@CVsE;Dl>?h`5Ppg!XR%`4Hj7l)fD-@}3U0vX;n_?clW^Xr zH26!zVeOJr`uZa00U4+Jyed@g3}{iJ_@fRb3KCt8Mox#zIo}C?53b8O>3C#z6QFNdw1PYaIT=g&H1Hq3Dwp$=9X~+Ww$lE-;~c#n1%%GhAsvQ+#8al?_Edf z=2oYahHT!p;$!DB#mBD|=4wDI`;WZ+{qtC@Yp~VJk<^PBvU6p(feK#0gPIUHuLE6! z^=6SGCzb&O*8ZgPWu4`?^<1_7ujtiO_m8s|I;2SSu~rAa{=&Cn_4RF%OIJ5XY}hxI zH05O(Oh$a@iH*rd*#7?H^ZR&2$un?mN+ay&v9GIYGQ>M0UEsc=IdyG=oIEfl+qQi4 zU1;TxEvEI(`EhJAB4zx|;ESu7pul%uREJfTu9r9B#T(jn=awzj!;%;>|l9%t)J#M5RsG3g~bU2jhz!}$PfX`zZSFNYi)A{Tp{txN zI(ait9g=(f^PwKppr|1ad}iz;dOneWpo7m;mGwjYqpIt1nXKVYK5qt@&Vie42gTUd z@&UIiQ|ZB|_kboR#HsUyYb|G$i{Eq;G{D7?&|p_$OvO8QsEwo!-;Hc%H#V1b)b4&c zX+QmD!X-!CA6k~ZRDa`-`LHk_>x!~O-{|k%AHUqLeW;5_&tto<^$0t6m(=6&(3cl2 z&MNjreQs_0eCE)(tZ}=NL$6;awanPoQa2yUe|_)k<-tEbC-hKE>^(9_*HH7=1IpNh zbF=uG*^m*_l=_|0%%9balxUtRf^TE>w6Eajn~T8}Q_{$wH@yWV&#$~$loj)2M^pcV z^RgT2*v8e)=;w;n_ufVS7=o9f_9`M{$&+7#iZMw(r?YgU*da%gh=#~r5f)N-_H&@l zeR1O%?{#tc*+G>W5O!N0BE$0MRZ?4mm&GA9z0vh~QLBWW8-c7D5K)+ftB?U5xd^Be z*~&Y`XRyn7zwv0yGo{&hJPZ3nJuLq;#piKV3Evf_3Nw5h2jWiP)S33_Nj3uyH`m3g zMtuy}1t>p3=hbD^swWyyG*kwGLg(8|`<4OOxB{Erv}-&Yf%e~r6Hws5qxW<}4|$u1 znZxxON_EakbNluk)xK>f#23m-%O1oHn0)UpZG2%cn%?0(O`ej?%rS?P8~jbb&csJR z3xa!Id)A~Nuq7;~_Ln4BSkt&~zWaD=GA6(Q{-@#BD}JF%Wrm`0f;tTdqfMmXPS%Oq z%nKu7f6z?a3bICf&wNT5d!I4?0p3&eb|Bb(fAg+L>+7!{xc>E1SnMKIC(9m6Ys85_ z7J>V|X=u1ud0^;-5%t{cfbb%aFKH28h)J!E*RZps`I9hquFZRG~Kvc+sC z1;aN3|FAQ3kl)`rAV4((wXb&0a44%Lw21h|tH{$V!6&%9JGAbhN5J~_`NSr7kaowl zDkmqLcIwTP?AjS5c5VM(>wmLx-Gug!k^hUScMoT}|KrD%;#S?1Qj|l5B&U$`VI2vv zBIj6z9A=jD**ZybSUKJ~t#Urha+t|!&O$7PWpiE*!_0BU4)^zcf4;x#`hEX#@rP^d z@OnL-kJEFB>X+nF$M9m*VuC2ilz;mCEhf`)v#j64wv3d?Se`tZQoZRR0XJiJ*2pw& z9oIj$k*puGh{HZe*-G?C*32_oELH%{*&yjjO-KENB9a{uo1TsV_}^mr$_3%V)S7uS zw6o{V!CANfV|@n9+8iE7d^4%bG)P``5l`;7G^~FT$H%87TzzS~zZ@TFJf4HsaL;$lb zg!f+f(*Hv4F?r8`Ym&cM<|gpoEtcH(2TVsf$3HFR75J|ife3}cygEoG;Cwx~h#!D2 zXQC!DiU1xpIv>NoJ!s@loQQl1$cBN5NGl`6J)UcRmNuoDt3Mq%{Q!;HTLWG&<6SoP z|5Axa5~?TykU75p=XBWwB5cwAD8goUfQAr}Cs@44yQg113EPJ@GdH)1FyK-Yl=-~) zg|kPH0XqQ$H}!mAn`E?l-oJdMZHrTxMGX`LxW92iKVqM;MkoHkG8TadUC(4|&m*^Q z+nnf^hWr#)DP4C_1J7boo>2g(J+B2Zil2!&5W}hgwi$yNM##7VMq&Eok_*#6v$ci!!$=sxTF z(_L-E=vHloPKl$peOJ#a3 zagB{*GhH%w&}?rmq9f0?BIXyQ))g=JO6`;r%Wvv>pE3tD%hfo1|9Xe1aj7SI`N2=T zPNuR`qVp}CK5>)&`35ZTUx`t$nDQNn*f zHpx!Dz59y*KaGZgr~tvMJrRIeiMvRQIk$JYiu>;TqeGo;f7%XF)pI4=!PUpBo&VjQKM%a&-$X_KW)JZe)AmF>{XSCxE! zQ=brTEJZR_QK^;%e_&?{*w_N;P{+d-RhvVUAIq_*}!4VNl4c;+ygTj5E zkcgiEl;MaS0ar%(Z)C>Z0UT@5D5T-7Nc{=}(~OLd%bGW^Z@e4Eu7BHzzo^%Snjz5< z)X6|rgo+pxNw? zGVoc}V2?PF2a5A+S_TT;&gfYjJ-knU?uBygAGZ!SD#i!WJoM9kp(wox^Z3vPT` z(mV^={3ZRVJ-LagE9u{}IQ%_lr!fFFzGXtf&cbAg13N7=+4K>+(OxKe>LbN-s5YGf zD-KGfnLD@Tb|&VBSqjIMN!Slq=eKyHixJYLgOy6F9zPU9q6t82WXerk+y8YggJ-i!SV;?mM$Z*nI z3VQuPQdUAs;5&kb)Gxb>*W8=+bPbStf4@u)H;ig&-Ig)$ZQLLCLv@6054r3_U|SMw z1oaH=^pbn)8JC*J^%O8levHThw0sEN#A4X2_gsVU4S4J0sNzz}D?KLR&ot-M7F8}I z=Hxn~P3r6-Y%xLpb(gW)-GYA8*~u&P%$vk#5}-?^mCn5-V!A;TO+mc`h*Vu(4FfjirT}i95&e zVt)~eRUMtBY)i_qR)ZAOyXkRD?sN};-19&fsqg#zOvJCM3f60D5B^m$44YDAeHC6A zwRvC%G|p{so3J071LTSt+Zvh}bUM5(9O0S)>V^MZ?P;v@LrqF?PF*Z-KN`XxkH)1I zp?SXh*{iR)s4-;qF@y-twHYrB;s$SV2(>X(w$k$S92-9)I4+38+}Z>1wijDL3V4oD zn+U>ivL_kz+z^DBq^$sLSH)ksnE;MJ#>n(@=8)CVAlF4yYn~C1bBtnCvztLbj4_iy z22*^OFdjF{+KB54(`x*2s6nP9>>^2iqM!@(UTw@7Ax!xu%lK`Q+0fS@+2!x;QGen* zhQ#>0C+W(X)uv0sF1xDZw2?uL2mxchf^3t{QYg;Dt0*H^A^A+39qFT;3mQm#?qdDw z!%L**9bdt3y|j+v`YQ2bE)KNjaIGNXm1R)RHt1)x(i}WF;ADB&m~{WlbgZa!B(4)F zT5ROsEfRH5cLA@w0ZhQ%C*A=fX68SfLo&I=ihz|T6I2|g$uoVPj{5!q2JU0tH#P<`7Jbvrce+$fz$SY^Bu1Vx)J_Dy&zcXD%Xy4~VVbDARDo+;59`iBl+6 zkRXs0lJ!4a4G2iHW@R~XtcLJvP)EP*g*BW;@EJ1&c@Hl=d5^x_;;&Y{mFQwxWQ$bSmeKaR~qf`O5WaO5%6mA&piv~Y~v*RObqFr(EaJ^-JV}2W)t9cIfBDX741?PHcM`04Oaps&Y+W`KT0{gn%*I1rKX(E^TLtHK9xjyE zJF7B0zDui&TO@H#ZA1~qZ%%^nY&#%HVRVuQ+yJj$#r%}rC;fAyC<3#H>c`++!#OL< z|4(?SJAYMOX4As`KZCRyue|;qaN#ee%S9qbB6*U*0I55~oi1KXTr}J0{r?JP~2zgbP33ciUnLR?rw0ITZBX0@NIg}48o;0BxE!K zx-Za(aH4DgmM8sVkwMfvpr65LGmP$h+6xy)-wKmH&Gc;WEn}L(VlaIe74?4W!7voD^ zx&h>mi)Z0@qPvj_nqCaPHpNAhqu!r^tXm^q4zr+bOh_##$@pBDsmq3N6*a+reK*Mv z`jr*&y`tiI_xr^AL-CQmp2-U;?@pOX{T%usFr)-Ke-vk5yz>iW88Q8p zzKiI9j3~F9WO+J}_s_iBj=tj{z`mAwf-W@Dp@qdV^8s4n>L|UUw$`pWf+yZrH1wVn?!r;B2n=#&_wCl$ft{aDb4*#zv+sI; zMd`sJgU^a3Z`mQRg9RtPaX;}T{o|$(^u;+}8UrzA{mVyX;!B+^z2PCu)4s{Zy;3^LWih%_Y4dh$cSiCUq)5WiLoVY(P*9nW-WtBc!ddDMfmmJ-X*Yb zLEdYF=K@B?Ie$cz1dRuk@LCl3wNjCgGUjv3#htdZH z16_+QHsxNzxX(*Bcw;PrAY(n7h_~Z%Zk;15o2J~%!wKa;_On~uZ+aVWrd6#>d+=Iv z|K%fGi_YZCL<=JBkx&EN`Q1H?F>pS={=)rxRhA5TcMi-0+yOj108R3Y^ax<${?GuI z-uP|536TMM7oEDdFS3RDm(RZWMo<;m*)mvh??O_6-zQjpti)nq&Xwetr-Ii;vb_U+ z$QG`2CCENLJwErc&6{O2(~J{oQ|vq1K(8o)h#V))ZgD^?w}KwTUkRPkmpnJ@--W7< z%QlaGji)O^WCIY-Xz?D;)>GV)7Yu;XfUH)oXTItDlJ=jSv-fT@weH#cV422ge7}`acT%C%RP3BHx32I?a8)(VD$2#2SjS_co9{*cM{jKX z=qWNl=(FH+?4zjT9MfAV7k?2`lj0ZI|ogtyMW7` zRZfPCO?ovi+?Zz>=FUbYmkDvY5w4o^P5cbaV^rDakJW$B2r`dHc@6LD|E*&opxAq2YI&NR0~-2HgV&L8C$5a^vO}Lx}=>IdsC2z$LKFNYMVS zn2E*D#hl}M-Os~kUVn&`HTKAGD6{e*)w6d{b-|+o?TOEIWDqj zxS0-jF}CN{Rc^7*#f<5Kcb;d(z*{`&&Jj;swp^6^Q-+Q*olpeq@rPl7ina2?Lle+X*>n7hpw;h&+G- zTcNnVX8}54@tmnReJzYC6;6<)po7st+gmjuQ zEbH^qRptkg`Oet`o)3vZ*>`*G8%HoI6|j#l+a`^ER&^GH9-H|y_lCIx-{du{vV8zv zCvyT1Hl6t6%TwhjeQ&bVxwlaiSLq{a=-=b{g}_B$a(Ja<=DA4ux|O>*_*#-Pab&0Q zTx9tV>oAou@r65HQ)Y(k{0A)z&1%+iqFN%V=!pwSz!|F_J-yyW+g}?A+Tqpy>fb0z z+Bge2=5uQn;O=8#P0#95>rxD#JShjouC0wJT%{}{eusWs2|2yhcQM(5VvsH5az3cMesBi_&rI>3Q z#qF5)+WKFwzm#nriPBQddv;VS4^`5@jkV_pXDs2%697eJ9&_sto}9oFnw$f@pFSE4 zKh3$tvY)}n$sF%INPV!r``XYMv2n)4D~oIf$H;V%T7+0nef^#u-SlEcTxxvgnV=r_ zigWELb#HbUCHl#VhGSEKp7o&@`;&*jHTU$K5&6-FoWc>k%vNA)T$TCfcvUH=yE4#fKUb)B0 zoIUA{_73PaN7g-JJ(W2W7OVP8*7Wk|8rIXlx$tGKWBK;VY$oT7L8p^gHR>JWSQPwo z!jnVb(l7-lBFEk{V4&VISUVk!6m;&mKZrpT^wSQjsxd7CFFVId zdTlhs+TAjxO|G|I0Xq(Wc+)6}&#ZFZaVT7{gZoAK!K0qi7D_SJtRO{A>rNl)n#qt< zeq_nf4+RH16oFc~eU;kzY8P9aA8GSyYH0JHES&S5DD4QPA}nkib0JTjTWsh!*X!XB ztT=r7W2cY17oCIubgDvezPs>4>WjD>w?xwMDgBm~eixUf!f)m+Hxor;9@-F%oHKZ9 zdJj_JXhwcZ(sDkTRF}l~+CcLQ*OJF*Mre;>8Q@t@{PeS1aE!(Cbb@qrGvrQ5FLV%X{4UT$7_ONP&e z)2Bd%N+vcN)@YjUqD2`amup8sH=O6}VrTpH7}#9DzV^vmm!a_~nzCYYa$Ym)A+iLHZvLRT_^3dhDslUtVpuzChAy-ox2 zAtS+1XRT;v$hPVB1^LBCb<|(4bUEVO0D~ZoSAUGqpPXc2&7KFZUnj@mN)}5i6|{Hk zTts083jHCqyN_@~N(K?qfmsnQ&Q|Wz8f+ssc<_pQikWx*&`{*`V}CB^ThEPG2igop zpFh98=94;=Z1tC3&s47_@t7LaYN4YG^eqqczBT zg96GFWhEdnvshtaFEXRUJvI5v`Q(n@F_!?f>HvFO_Jhd*$zyzagnJ*tB{)z8l~gN& zz1V=q`V^;(5out|R1XB_Cl4s91_)H|h3XZbQ&g zi#!)=e5o#WohNe8J5xRwBH1?tSq%}TumZs;dTKSvPkFoy(O4?E z23Q(DWOz84tu96dDO&F4_wi20e;)Suo_8+nsRr1vs^iGtjd^B|OwT4JSFG~=IhHrd zG)ekmnoqMk>u##(0X=p&{jSLQ`yQ#E7aT2me+6&_!lo*6zt*md8c)?t?7@Yr2hGPb zR4wife~AMG5ll+Dd4kncU;0j6=>(B|VMljA1kiN#3fKy|a)6%hwg&{CHrbhbGNo*> z;+1H?O?)e_cym!EU2WWmLP7FyRIb4*9tyZ4FR(?_enP5)=9^g{;QoUkS6p!IgagQT zAkikh+3~MiwJ>eqlXOz>Q773o^%@-Jc2yQ?TIOR3^|;~z`H^B~zm_#E{Js3voqVtd z5on$ri;H=X28a!ddd3fD2aa`U_pf6!Fx-ryE2-TEMkCLCnpQ_qD!HlO_wzvz!rqbX z`q|BE+2U2N>YisXJ(FDa5w$)0Sv#mM8Pp#{SPuX}MX2&TQ-uLe%5+=RhqluOjf5|8P~XJekB+HB*Izj6ow;XchN76qUe}7IqZB zD}!T0N|i0k^yq7fW?|8xG7K>{Jl6I+SyZk3i2s{4NuF*iRa1~2LvZtVJVp@K%a z!{mW$d-e@!zB{CWNgs?`?tnpLuXo|<2=+ZVeO!)l&TAN`X`H4P2BUuOGQS;qf@1ox zmJ41t<#1Ft?*7TUvG|dgL)vkJK-va(0!@P$U^Q$bL<$bJP*Em~huy&JC<*z&_pa#1 znP~%r$D3qPqHC^wrrQjLrKrK+ehRt`_(Dj)YK8yVC1<|it7mxFp<6{%R>TI8h{sC} zT1D<)Dr0$#KuYd^<;guVfxx#wU=C2F;^L$53oh+0h;krS-rSxS>4vjHpkgL9fiA5A zxA|?_^eat*jlw%PeLHFkpo9Lap|x}Y+T{Lo4x)h3kkmuk835oE zq9*6@3FI%NpP*IvPVp8IJP@?!*QlCpJT}H$;^5CMF;_PKCo1Ix8A|8;%eUWb1!X-4 zh^sV2n^}u4M}XU6ti*D2S{Lm2moEwQmmz3Q#k6B_meKjQ26Nhuh^X2@n~w&=Ci3VynG<)=>xYlxlW#saKN!UwK;{nYfb#O(}fkB#edM5@DUgSRoPhYzw9k@GzJd zz%hEF$$J(odZU~%g9`}V5T<`7l*NvaBKArrc4|{#!#w|AjN5ae1TXC z>}$vq845Ns*|dF$4T(Ryi7!J5hOs-yxoIFjZ1Z}fNuG6OnQvtfG}H0+Ew({dgV7p# z7G|pPp%ex~n?=13we;`{JbQGXP1?bf1mSlI@jvO)t~IaLE^lJIWT@OCzmXL z?_hzLLG|@RO2SG=)^|TG#1YNk_tvWBi|UdCz90D#m#x)QbnSd1%(v!bP5I+X!))v_ z&w_Nr+|FqUKO^@qpAt%tbAA1uw9dL6dX{_hqAPiFO6eWe5^R|_=*F+);_TXSOh-h{ z|J#wV-H%4Kjh<%wWs7^KxRs!pw;wt78+BDwcpU0Pj0&RNVZUMO4i*2-`0B=)E)l`7 zXLAOqsn!<74Mt+nIndunLrqR6RfcWKRfSrAR2H~avN-B&u^ov%IqBlE;$CNmw*mR& zrhuJ|?BWglM(HZkSFFh4C==dK{5lvS5vBc0nPapO$n0e$uuW<+(1l2T&>KU=jq)4o z9B+0?p7cg$7ux`QjCCNkHqUxGOr{$m8q;-AWuP|j-ttB65mq4kXw<3oPj&bjmj6us z8oKEH!_g>2v_dyr?8nW6?Q_#kRqKTIcONI+KAeNZW@a)s`7VyEb*c}j24qj$PEBG? zVQHK8>H7}7BdO2~nt^jQUa4l~R627Qyyv(FAiKlu8^*b8BNtu==+wnXV%Vno_D5>2U+KW9}^30|6)us0jqv%IM75Utcq>+>#MHKrX!t2n!d=&$sly z8ZXi1GSFUQ*(*Ui<5M)B=#Ju*pH*)~MZt$ed+QJOX$YA3Q@*U}=`Q7OToT~#HWSQO zRM0&i{S$XTjM8lszL>fRbqRtycQdPL3mBMoL)5_JPEED9Z_Bw!`LgCzCnb}fT+VIQ z(9Cok*|NKaDk4gAI*o#!O0m%X5`5^9;v<;7yK<{`NMg?8$Iqcamira(@u{HgicYaY zXRKcF&NrO2;18>@5A^)pDfFOa?6~OWUaQLMYB>c3W$eSbKclr4cB5D@kkmQNsAM7% ziiJY~n@q0vnF^PD;(FD_nGQmHo*^rj$_AZ?G9ke^4`0W`_DWZRzV} z8$*~9q92=d=V^iSK)|QOV1ogkHhEANdFGSlKUd%*668 zkhLx4QoOyPlg`7F&a|lohk~?gb}qsA&6QwQ^X}L_h^(k~PQvpLb#1+VyFF(!Vn2vr zrDzs$y?Z8~TOpYfd@};5Xhqsg?D^SG(UhDa5&IDeSVlp{@|f4ABy%@+?Ys4SQpy9o zO2vF=AtP*g?B^GGnvn<}RrqF!k*+S!ZLzjZt?+2DCh6aU_rXsOuRmeIBM zqg}W@O5k`SV~i{MYcVY)q@e+Z3n8}J7e(W9$WkC3$r z5?BXX_aI}NIucAc_s!r%fS{G0p>z*gLM^aWIk5K!-;Ddr$8LRQ4=AK+p^o4Y!YG5L z7o-jk_I5E;dnd)sBXC}A^iYNp8#8HHUywzj8w8s!deTkT8+)9l6EKF6-hTUxID1Rt z>g=mF*SW15*eaZix7jLF!o4PCj}got>U-&K>`%PU@hd`dEd1(GKrPxvh8R9L7+e;7f(^Vx~T!fdw<#|(bav|N3b`A&GL zO=1Pw=BUuEzg@G<+8C)scK|gDZFQCDieK)Zhp04 zMcf8?Ei`c=)xJJD^*8VH#Pz}ha_x*%G|L3@-=17B_I929^k!sss+Ko znZ>;n27d<yRK_Ptu+;wZe2_6@^h4vrEwB(j& zW@$M4X3!w3exq5IDizz+RUEux^J$vnBq-LLFc<1)U;SWItDHP9p$5Ki*X_rj_2y*F zL~3%qEY><@SK`lU<9at*n~|WxtG{OKG@v1)lt*Kug=^#ir~c;j`NCB<#hyYUej-!N zf~*nQ=n_ep>Jm~5lSM?;#oT{x)~Ym;GqX)aI(?C!Q8?GCzw2e^a4 zX*@^65W^5qayS(oOd}Pd8za>~s`z<0Y7dKpD{y0wFo$a$ZAVvrC+{ukF6s5GbOD7* zL5Cxf{{gbqe-@LwxbS_Y7>MdC27U*=vc9GDmH6t_Pu=@q!(#_h=`WFfx^iyFEnDF7 znEOu?I~QZf8-|>#G(I#%c8RiD2V{~Ri0Crp7(kvM@0w-AgG8e)%tdR@EpHf$|DGNw zE=KN53q$oSivT~--yAgrV&h~dVJ^v-+BS7^L#yu79C#JGhv0#wwrh_3`K-0 zn27egi+D24xzVGA z`>g0WO#Humwcs|!5f-v5BT2u(s{z#^BjL(1-Z0Ll#^OXGL-Q?XlLVq~`NkJ}qa#() zD|j@34nOS9O)<2YO_@F%bA=KW?5*x-kqbTk z6DA*LKdQp%5nURV)6EppGb>+Cb)wv^9V2V+IvJ1$$Etp=?YQm_1qNVYZe;;e>`R#G zO8f~Hg*m!0o#5x!6T1x&4$~iAT1$cU%54DXnNxG&F_^g%8~0+>;{kA;c)q+887_{+ z&Rj_}jvnQBRIn_S1(pORI#@&ZGj9mGA(*#Hb zg~Sv4Obi5Nln!5iuF+#??_CmQZ+!X}R^(Jzc_$h4wn_7=Gq=WN<4k;TlFs#C+ZKVm zN~$eMD?7nO$>OyF6kIatL_SS9`KY4WxkuSJUaQ;;N}OD)g=0da6N}bHS2-9}v=gZY zHbtg|uw{BhIA=V0M?~0$F@TEI4isJiwd%%~EjDDGSWz(-Zp}$Kw>MaFc*k%fTIGZT z(RpN%lhaAs{SHTAvvd>NktRivcR_FM;!oNf8+2ng@_^Z8<0DTk%9y1|m0+A^Sc7Bt zgxenR@-FB_hmkrPTw|d}-~tP4Ck$g{w-O)R9u~|9KmJTt*71@@ z{~lCa4U!2t3j~2mcX2n_9n%Ln1}c9NWPxL+-5#y{VSM)XiBD*ihdo+D{=xs`-4In6 zFFYnOnlFA+*ou9}X>1uN4y9o{mY<008Pui>=_wR7p~nr3r*a{;wr+Jr#C1(4?YE7_ zoM&Y|+PFixE3IT!SZ}FMSU4s+)~9v4{Pf%bB^i0Ml`R?bb@(b_4jti;Vx)gNarIvK zz2kw)=g*^jk1a}WIrTkwMZAqBT4mFsTUM666}wLW(o$`$6*(BN^n&goJi))=oigN* zlLJMAKRsR|*YqU9_M`qW(){s5d>d%w##aHK>IdsRU>zbQ-16`{TwN$xZdzl{cebAT znRsZAdjp^`IZ0coHh6a%ET!UEAuUNjg$~7Hf*s>b%y}M8 zecsC$oC~9kFa^ma{SgOR{d2bWvZcp?viFbs3r#euv5+D1Alb$F;V9rfS#FfJ$!IWP zyG}pr)A3J%oX+wY9^C=h2w|(8y@<7mzm~7^`JN;hMshFrhv<9iF5i5eIuSi{eMh(3 z%73aV-NK+06kL!UVlnH-Ou~$6*ELgq_n@3j)*u6;|j#D$YzS{Z|ZPOK=bz;SaAQ*ah)|>sGn($hd zT{=1|mOHX-sWe3z9^MP~IMeL+oTVoi0{GZ>#Hl4a)Z!cO0r3|w--1>@_zxOC<%s&T zB6cd=he_#_K_bt!+_e`Pt(qvW028&F8l)+iuvgR+fpw6U7!!+D{|2k?t#TWy*QwK= z8F}Ftl(B4-=sGIVDcaOBSxtoX%4OJSKIgJByg;r>|7}jTZ9xb~Yrg9JpPKO0gp`91 zEKXdpN&H+J@(2x#?rN|UY_?Nfw!Kqh6!P@?7=MCB*7pz%>AogJ^viDD?_i;LGkIP4 z@;Agk7;{ULLcK=aky!mSo(_p~at_0{d{=EItNYHg(-DOUjgFHCa(cWGy5OAThHo8-p49#vPd+_VX4QQ48SdQE4~X#D&EE$)t+gUQl%M@zlMv!< zluHU?J9{qCfAO4v=!uQLNO~YNlw*g<-W>)yBQ6An;bt-gf?KZWs^3jZkgOhdgbq9D8WzWZG{-}rY->zTO-KCg;Spi7D z^o5^f*2?4RK5P1p6IcS0zGIzX{3Z_Jf7Cs4>R@=AnD8o+kG15eDjW~UtZhvc~-YjM@{)%JEz2wS%7ync8 z#i;LJy3HcT{Xc~7hxY2~Nf0DI7}Y%VXdb*-C7T?A>^TY)_H9-^TVtT-QlZ%}w<6pq zom1+{9G>p83W>O*lMl}7W29q4gXp0!dPQh@pT?A8uR;9M(F5Jr*MvZM&($ef<`(UI z_ghm(Jf+loKta-RdE<14@1YI2&E|{g+17yU0t+5lOt(y@%fmy|(t{#gRqcRlZAxeJ zju71F=F3E?ksztk^ad*;D_?#=u>V&c*MW*TBy9u&nGf_9`oUJ2<}~?ou*rV;Y6BEw zSa@o;r7k7Z%m975v^P`|Ix*) zFk473vjPXukpUiK4Y)_4u(PZCXz)bXS)Ztrao(kfZrjeIx7W~V&vR3wgT@)ngtz#a zuSfCBi1qh~Nag^5yZnF(F93IlaWjCbYE(8zd7hEb1X9|qbB zX{-MG(y~0WN10GWg`p*aqXVSX`p7_u*P9t%J*pRFWSc&My2lP2#-X?UU$`3_kT~!8 z6Idv=UXYAP@Sb^1sRXuS0IVcpn@H+6-QC4vMF+{!{y70UIDY8~eu}|MuBC`kMRckW z-w^?XWKd}ux`lft(h>1d)y!+M2~%zl(Sc3xrKxI(XzN`>`UsjLLjp|Zdjwy85bCL? z{lLsac}G67kI_J<4L#=ICz4d?*xn)y(=x|$lht)f?8~NBu{_Hmp@)?>0hDw1mSf;b z%`k~*p>qm_-nOsf-iyXGr6xoKI@00GxNwd67Fv&HZ7hqoQp6ktbNV?e|hxu|R3zAMV( zU%CZe+u6%PJi*87pGo+Sr~HpzOEgvla9EIw^%$^FmIX5EL;)5A~8c}3CZ~X2%{E=c@z z4RGrZs01V8^Nfjx*HXymD1Ym(K{Q=PpFS-=)u0v&ds0u@(e<1>F1Q1wwA#y<|qTL+MO4h7}g)2m5mdKlx>JEMk*Gb<}e;Cmx$g$-ET7{^Gf(aS#5 z8g!W?; zGDwv@qfFERV>Qmxu~esxsr<^YtbNmCU+HUS$)v#eBTnO<{qI$NI&_za99lf`IU2oQ z!xN%b`k0JNc-#0!C$>H2`*Y~Q?hB>Zb2mT!3UJtZGkq63QcG%jAyT?|VqmSaPV}WV%9#nX>qSUx~ud?bKPq zs^Sbo*!1Y6_ZVhgL%>E3zv^T((IrSbM5DcBuYV{zeX3TzyhapmC` z>onH->}a9TKw}rRplxS(be3`ZI=&q&5N0K3VWjcf@PhW?cnhUhLQgKZpi>OgBo6H? z60IG+Ap2v*#3Bw;a}K1OnmLI}3G8|B=wt~aq%yZ++rrh35m`7kP`=dAY)Bh}O_Ei- z`};#-S}lEp1IIZ5LdrTD`{FALDmr=@|%w~dE(0^#;*^5iKx19lQR z8=-*dOPI<@Z8a3`;V*hF9KClaq$eU@WlcTv$&2U0zl5W&T4_Wii9HV z4yYRU%Dz!dn4W8|<5X`TupMGdu_a+{w36fx*dYbwkt0>Il5VLzF|Q?P59ON$uSgKs zrs5oX@tzWeszKcf$=wjAmEf-p-nHnj5fqOhhc<#O%p*T)?3KO070K2A5$;i4qn%=J z--*9KCW zBw}@=db+7txxKf6EB9n$YD-3SwH3LbGDSUDu6l%CR6T-5Gkh0aYMg(T%4s~_XqNix zhhh0K{cm>Ge+je%Y{1*a^EIZ!9BX7$$(EgspY#SP2Bi+C#btf%E%67C&<73>3hy)HKSNKfi)eg=zsd}r(Sn%X|(}*+_O}3kV6q#ab~%faVAvR zuwc0O0ov`zs9gB5qh(&96~E4*^_c?W7iVYF@3w6&#D9|l+enuE=r~j=&}@H$^#)xH z1l82@_(oK0-=8GvobCuzldNg0KiS^;s^ygikeriSB@Pwk;lKkiGO`=WC>du(jI#D6 zO@~n1b^v}pV)>Mo^gT#SNlA0^LF+u*@eV9Nl{sP2+d_e!%Ar?v_dH(R3DR8_vVPvd zO8?duAb#+wa&$Jo{9S$pId%lVvF?ushAZu>^^rIc`_9`D&tvc2L~9pY`P(GUr6ztI z9m$t3%%d@l;{c#{QT5WsnNDbZSpBp0#W)L$g;HoT%xcYOe9upTZPXN?c-ZOOQnl?5 zOxc3&v1oO!67BiNKOIDuQ66BIE6PPKA%(v|Y-W{Pth7s!VTpbD*zXydClqI=`vtxY z*|&V8yM0@~lX2$$h+_=1U)NbO2bSeefbU4MudX;n6r1h<7{(ANL_y3i?)+xgHjgfl z=7!pQfY1alpR?72jxllc0m0TWT}k(}8FWap4({bkNi-qeFf^z!u*bqb(UVW)p8af| z)<`YuN;=Pws0lD#y&0R3!70+lQgr4KHI~KPKB_l`0?`|E+KXY>e2Sc+{PXc+t>oeT z*MoOguNw7s-H&Yh@i#Vp@YECJXUUC3wp*V5m_}ZP_q8mz`>>foqjyUscWfW^!;&7{ zj6NISJstot{WF@oHc9t{TBoeOi18Hwyjpq$UBU=Ak{@74!Tcd+pkN1_>p%QOky}W& z=`+?`4;bTXV$9)1PnaqrQoErBMOIkve&7TO-qPytmv*0D-)^4jUGl`v8dR@}MCGXu z`seX2>QT4L0$km6pIdKNH|thr$ibpp|L!{#STXalk`!C@!68rf75;8H18t@U$MoVrwjEXUd4#(B*xKCHq-_`1fy+@ReQ4^Bp2U0mS; zvL8n&Idqb!8mYxt%4OPzK4>Z1g$56~INQpKc#WbJp>o3we!EsHb?6<7hmHALC@N%C zeOB#ENA&q&bV164%e{5Uw`%Jq%UZ4%6qFvuVCt zH?(pzZVwH}3`q94TZnrl4@+EKy4ld1K5vqroCJZv5%UmXjBBnGbE;Ea$hqG>v<%i` zhd~%^JMGDQMAe$E(x@t~hu3lRgmoV{*`|XWTo7TEwBdTRZXHF}n`zb`{7tJ<4~wJ* zSEiS`vM~3Cw %xr(p|UpV*IU6YT&zIruibt(lrfU2zG*BMOR4OF5B%f2+~5vy<} zDY8RaCfeZMhJ8n~K`Z_^Fv8JeF5*WyIuQ-^9%f4(@>`7XQ<@F&*$)`+TBYndvGtu{b?iV#RyO-- z)KdlUx^b%KI;bP_pqI7FK?)n%O{Dykkn=XQFQX_oxDWSiqFAQNwYi^^Bq`$W5gh=% zjCseoQ>OiW?y?r*IFy{!in>1*Oi7ruw{6L~wPhKK2$#cI_kk}IetL0VK+wF0Y$7xc zZ9>`CWj1FtIKw}^E=gYm-{bM?;wc(`b!(20Bv)$pY;d#~*UaJm z=$+^^OoySnU&ZXSw=3CcZ7P(}l3{0v=$u}^M;C_1U8OZ{y7z8&>%VLr|CoF=keGN( zR0J4H+BCOI)Gl}uVLyGk{<-)5V2P*PN1Q=*WGKjd(4kx|6>lN`tQKjB%3fMS-FDx| zba5d+8nQEsEb9XgKx~5x>G{TFRw(-fOQ}Q2&o78=a^%YgIX>a?4?p`%jrjQU0E5Yj zng|f!g~wfpR}QL|O}X&8?(+9GDTkhnogR$U+xjwFcz9tX#C~l>idYT(I!<1lDSx-v z04ofxX(VROMQEJ~NwrjMxR%VktfC?-bm(e#dG4p=<9g?*m%rZ^l2p@O)H|5v_kN@C zyyq2T#*-ceNoj6F3&vhgH_g~}}0*OX_9|ZJfs5w-O%#<-z!9ZyX8q>0~nmSsCR;q-d zi;|`oXABxCz)xn8xZyQ&W6x+|$YiMzjrKYxQPtwu!SMcLc@x5)m}S;eiK61Esjr%Z zoARFf(>|EGHrZ+9=1pd&jZ)#klb2~Bm19`}v}aEz8(pqtBpHRnf9^ULdiY^n;5RLP zKF;uv+!Ped2{8M!Xy_)nnCz35**p>upvNbwCwRo_02Qbbee{Si)?4mk(2}%uxm>Q+ zk3<}_n%FGCT5UkfYg*#R>&G2k3DsoM<^C`MGr{Nk(k%tjRtD5V`x_5k*H7-INAn5F zAwmyPWh=wjF7Z&x8XXVdcO;u(gc(zufOn$4~%*}}pLM~WPm z6$UzK!`)M0TTZ(;XybHH`qawpp+0DqU1p_e!f)G!2X7jXLV?HIx_jC@U2lb3Gmts- z!M`?*oZBp{~?GAZ-5*DyH*t^`CV_%#}^*H?vSSi8L;bh_(#&W7) z<=*)rlvxfTN%xs9-aC7yv^f4%i+0*Wn@*eeW=}7i!Y5d&P03f#3Jnx*lnxX9cK*Hy zuk|KbJL`4Nd{XZdypwV1r#15Wvj6Dwa16L=qiR%zc(3uL^3GAx`yn;Ar**oyV>%fw zt-U@6r5*3}efQQm?@~OObmvTX-;kxA89w$>C1o{zd_%(6xb8ITQV#8@Oif{Bt&*+J ziL_vzWD%Ez#t@{!(|{u?N}|w2_Q`eLo0oV*0VEexx?J@7;SL<<-_JFEq@aUgrxi+rd;7%+YL~r{qXpoV|>_ z+^7AhI>AXx{u#P3FK+jepooRgtM(^X*EGJoZJT|*?QvAMFa7MpQeqk`-};S>-B9uW zA?e)Xnf(9%U!M-rNs&`d^+qd_!{apSCKcO5BWWm+{~IJ4zG*$3}Cj7g#bCE_&0) zC2401hjRx+p1qK7$%ZJd={f7nw16@AYxfTq(oS7{T1eyxXRFO9AP+uoH7-aw9UQrA z#(3Um6Wta$QNM6l_iz36>t;6ZOoc*5^D}E|=N%i<)mZE;2b$fk-Xti5*J5k6?ttsL z5o~KUNVZPcu0ed8qUno7fhSh~C?=*BNw0#H-ZOuD6ar^|0$4>gMm5QW{Mk23FJs_r z^YA8eYSHzy$!+JsCd{YGT+3g|I@I(=W)ChC+kl7;CFB$6s3x-W4OrpLN6+Gu{ey$> zdb6m3G(w17;bzE2;ydIaDMrC`bf`j-bDM3Av(Hvm_9kAXk-(Ixt6WZ!4X7%J1chZT}wib7!7jO%(`!TJkAdluEd zV<3oLT|!k+?$foc-3`l~op4suKC68!B+y7ki`g0TcR^8kz@Ea3e7HbvXC<0{8;~rI zB2WkTqWd}mDvE9SWT1q`yF9R38M5m*GJv$^cq?XDt&wnlbNga@^V1B@7R@2=$~S8N zs_>|++#(dNlrY2gB^9p0#Ji*8D`hRKnwp6(93~?O&2^W%qaydGFL-8zv@%LG`VGSQ zsW#CxdJn4X@YzHGvJ1I6)1Z{U{dL@8cP091_9XE#K2{_%#9`=$d4(1_EFi)~&Atwy zhFIHtTBOFlun+*^f&B?CLPkvsWqR7C(BHwj8b%r$9>hbaj&CGui*8&-+_u`toN}~s zFW0jwBN{ff;=HAiMJDWTV#3OyGb5n#C1NK$;&OLn8kB4F#z^D0w@_(7={*&o=Bx^z zJy|eYAYZRI3#!rtB$#WC7K4^eMzM2Bc{M|$<~w6mjTJMX(i>xYjlE9AWO%Q8l0Am` zB|k(fIJM@&`@faV6&2rEnJ=)nmi4{gPz=?-z=O3MZXG25W=%nf0Z zRab5BoUh|xR`@UtJH~n%5tJ%f7larll_^4&UW6r>8I-Az@ z<8E%aeza2g;^4&6_nJnrca=1xs5C`M@zb9aP9i|Qn9#}NW6gt#QflvA z-$l%#YM%WnM%cW6{ZppC-5QTA>Wk)EZR6WZmW=b|WGpW`el|50{*tlF2igkdyl)}fj z=Gby?hj&!x1U35G>!t_qFx*Nq9|sjoPvfmVZ*2C3 zSU6zwQZWdZ!e)GOjo%UiAx6vqyFtg6^GBTa`YKd6)Wod+`IKpiBj1>pz&xMpsMyc| zR%^%KjUAR3l42x8joeqdg1Yj^b@rqw@XYvWlW_WUWcS)>D~%9=f2?N})n+at*>{ov zTf!CRY{Ol>Y*e))aYY>M{(LN9n2J!Z!-R4C-d0D{1=XEx6@JNF`5h`3vZ#`ko1~!m zF0xDLmp&sS@Xtc#&Squ9C=*9B2i4d_5b}c3BWj`lw%s3#aj3C?#x}wxs-dtxRd@8F z(Vtb4BDvZIaPkCH8#2T#TsoH;-jF8M>rU=6NsuH)+J_$WW}V{v7W@H~BiPz(9DJHn z*<;(}fN<{7-|IDb0(b@1wnp6QY%_LCzgtak0^V(LAQ|hG*an z>)s7qM&Zt>Rw?;r4{;M#*23BXQI;{1 zu9hZZb!<1$32eS1k?YW48*qo9REhQ5)s6^IRPa^8h=Z!C%&(cl&R?$Iik&QcyO$-; zE=)NsbT~tQ>qKUg)YcYrs0@k(pZqD7-c%U$J99vve;?lt}y{6zM_i~p> zr%NMES7n(`%3Az$ET0xdL*`n3I4kW_(1WHf&4GU#zBAsoisLX8$K?jFHqjHo4~{OJ z7&PBJsed{)s1Tb~dPP;I_)`@b%kYX-kAS;@29-U8tyH7SjNc)YHs>duA-d>1Xql)1+$)o4J0AF z;`^Ti7an?sSE3D8BH(_kp5f4KJ6q>c1dO0#YMap*6}-3ujJ5q??+H_lo$%N?!jgIH zM8iD;Ae`^>Y)FRr&qK5c;6GisdQ7l1E%43|DlL@;MssR%drI`x;t>=fe9ouTTR{om z@S^w=u?UW$5x^FY<&2GLS6OV?}c+nIg20tn#`Fq zcWZJimyQ1}QZ_#V4OM(*bwe}bx+EeBs+~K$Y*W^!UxiY-R8;(VHUAT{JQ1(cOmVEM zj(=Uze(p>D4ChbWgGcs0bk)HO_?Ug^<>6U$?^^Kir($xJz1D0|C_|ivgwo@an}s5{ z>8Dr3s2ywa4C~B&#kZCV@Jn9!HX3wC7vZv0#@Amc$)WUH0rrjk^L|S-0CBPeJY^21?J!bOwts@a zB!$;&NA72^XLA(63-i+3vIim+ex?1XEI?0LGDpqF%)GxwY3(g$XN*htRoRDE51sCx z=;0EZKMTg2934l1cCJ4tTY4wmHtsVXKsHYSOJe$>E_z*odJ82}@dL1}bjW&xR&jpt z;3bUrxw=Luj=LPv0E&pTa8`56i*mj`8KNBVYYW$hGK?F^jV3-3p@OA6B7O#>9Fp$W zWN&xq?GSEunMU%1+{aVnQfDTruP(TZd6hF=N(>gpqn##QZtse;zakF%IS`1W{TFaK z?(3Ik)I8<}X)dKhr1p6Bz4pRVRNP5GRu3dKPva2Ss5at+r-LKoZ_9 zA+Y?P0V6$a?w0d|WlAGdI1z!abi{X6RON4zEkhxLE#(xT1dGOj*8*=CoJPtC-4)v%%m6~OdqajlRs1{4FU?F$-*|q_7cPC7I6o3R z+3H`1xK!uj%(~A&-^Z{hla?hk^+vR^=W5j|)^UniF6#a;*3>}mbLhf1(nIUJo+FY3 zg|?nQN)r7p;8l{8QN!Vrg$Xr?G4qB^^9`p>XVw~VE~a}GJKSdLtR7_$;!lQVV?iw| zQ-fn5H16wmyWuP(T>Tj-WnFLS&qm_#2&jeR%GjGYZS*6}Xy7rjQdtcPM8fQLYKN_L zsXDA}*}7K1Yo*PnSlK>RTaI|OtVgkS0bhZ2L)#P}D)2Bas9(za&mj_}DyUoB0=la3 zp-}&bqV%DZ=V|q`59PCSH5(mWcOgk(Yl}sLE0u-#v9L(pueFxU^6-GkntKSU`P0d& z{M9j2Xxjt>sRuA}g~5BD6*yq9wh7Bougl!%=JbMG(|V*d1MM{sdoG{KHCG*TGs=&j zvg)0}e(H|^)+n3C5w>r)Ls!>uQ8d`=FKP?-goUb0kjA`L1*;d)$8D!FgibIsZtgxG zc*@XYfQ&zai^=nI1RQm0p{aa)v=2t{Eq-*xL_3_mi>unQpwz@MtB3Y5+h3FyDwzIB za)daK0{Mxs0h~(WRC*Ip?~p+YYk$+=zXLbP@14K~o4)WqPl_eRrvWyp-L&R$rKf+1 z7CJQNI~h>^;?pE;eTrq~Z3S)qpRU+2^DqOaG2nj;RHz>e9NENo8cPl4KjquM`Cq^J zlf-yn5v%4Em+V;ET#cTKzBGvm^-#f$IO|SU;DKIV?d$mB=8ETzh3M4f=^Vxv)$zm( zp}*s+fVEEU$vcY&4yA;(k`8#&P#CW(VbMM#B}1vyT3Q4m*JN#ZgcEjk%THz7;u;07 zLTH>^>Y1u`j9voXoeCcwauSL|XEzcwX`h#tfNg-y@V3NF!*tuyYQweZy-_PiXLB?` zAXCx02iPv6b|Lc)Pfo{zS<%{+t_XBi<)?|Kds^Eg6F_>b;s10}3N;d92X3xvzDMt>jW; z95r7&UVVP9eyR7y1lf=@6I_Wpl-d_!he3Ef_fLDtOWN~N99ycFkJ%c*{*nj*Y=2Uj_Y0|uQV3kyf;7tfV33!~!I{Vi=XHd+FM zT4B~t)Ba2YSzlIq3-ci5B5Y>OTYu;32y_1;wQS}{>DMPW@}N!@YSalnwK~E{i#ak@ zTGG$GVjeM^5>&8INQg87FI2=y9QI((Pvq9p2RNG zdB%Z-i?PP{G&dPlu_DqIj#K7pYRJ;^p!vCQH(PU-|G2b80G!*Bo0_Wv&*`;{v|pp* z&Ct^7(G_CDX{KhfTXM(bqE3$hQ{FDmlV-sY;-rT{dWUd&eV((U-98x+aqCgnsz!m~ za?^J6FWH^g@k@2KlWSiIW0 zMUWqms&=2UB8Jh*tl@{dY1WN}{J`rPyyIV#S5D`fuO$3o;14xShZF{lzwPXXys`N2 zfIlSyn0tH$s$*sNMB9CHNPM=@uvgV`pNX4s_?BgpG1o*|-RY*x4!CE*xK!;u1?9>p z>k2W2jxH2xG6x?03zqKQWR%`^0^fF&^hRgzRPB#zjWF=0Ot^7MYkg18-q;FeG;h2J zTbbu*={6~;6(EI7YL`sB$DSut_(&EVnDp6Ao%$5m8n@hxtG)H>Gpc^)e!-b2$7WtM zm%t;Il)Jbi^Jq?QjPGgp-RS2?iR>)J9(Ksf6zg(!AswokQ=;U4d{SVaH6$3EiHWs9 zmJ9b+Il&5oz;WItPCX(gY`SeaOo(rx-p!c1yfQWr5opb| ze!-|6?aB*yLiQNBij_#V8m`>3Pa9d=g0ASge5|CK+ge|Uykz1e6GvS)I&$ed@5(o4 zR}&@8n^j27z629bLGZJ|zW`IpxfuwvyabT4U>;av5r_EW6g1)Ukb`sqM*$-$qLve)en-61gul`XVI zupjc62}u85sW2%c%T?)XR%QUA83%1^e)iK_O6~dD9mAky5qAu*OQOVY2OrV{8Hq^m z+#HYtNPPRLeXK~gO{*(L9^5=f0yC@zkic}kz<#r97;j~9sWClw*pGmJhHS|$?ss?8 zZwjq3$ZPMPzkmKblP3E=GjVg4ke=Sp<)c%jhFe<<5KV6-1!Y=Uh0mtv2jTh$9O|6a zHKi?E^`^R4SygX!ws9H$6TKArCAHu5|$_goIxr0 z*XRAXwcYjRTcf+nF=~K5CINi5^kx1Y5ogU8i*58S<)5?WIvI&5pyaWuqEivqrpCix zL0BH)vF3}!vc0Ew^M0vRN9+$A8yUBR1f){F;;Wjl(F$LlFsmg0#RTjqaI|+?#DUs^ zueeg-h#g%ayuSsV$T;y$Hg&8&YIoffweH zD=LcJ(k`^pr8#jRBr#>1A*8k24V`pA=;Y7w@&GjWm@ej*mlmb-9I9QWZWG^m4d$gx z*m@fk@Hh)kDm|3hD(hYN!7!Ax*)J@JfJ_4yihbXmn#4WHNnd5mu*Uu%&p!~T_@K_L zZ7mwQ%v|9+MudDrM%b~#(o!WdaJy9nZ0Vy7k+Scuh7f*Xj@_!vcj@lqgasnc|4A`` zjh@a`&2s%bykh$@E3^&+ie3r(ve9h$ksdrzB$nD1tqaTg&M6(RrnYa_zty7diF|Ae zjsnVn*sXnepk|JUn`jZ+Zw6c-3Pk# z5`~QoeE&Oe@>)!|cKWH_GG0M9eIQw0iydAW8jA=s@FKSkZmNpZUa4tV_wOLj-&D_O z9@&rvf_P>$?3}I7-ajE-Qc$D-*Hd{P0k@BklYzR0c^_5R|F)h&)M{J5;-NA(JSQos zANU}z?#t_hk>Gxm)|Y7PK=~>Wfo?vq2{vkFj#o?T%}#R)9+yD@q578@gp~HFAKVpG z7`5W zOX~o%-MDOy{E1MivYwcp-NWfed2Dw5y&!j$++tcx0lm+Yi^c;Wf4X0&HOhgQY1KJ?Wq2A5UBw$ zl8?G>kAypiT5#sxwxq|}x%e7vX@tqR4%UU&%myRsJ5@uTQl?qn@Nd_%R2;nL>MIDeS1(0)-ec0XU?T{jJIAQq@eGR)}j38Q16Io8C2f<-aqL%&YSmce)925A#UN{EyB z&bO(afhp(U#cH2Ds!8>mF{VeMZSo+x!g6x2ah*C^J6^&>uM6ViKykl`=QnA*YXPkT z2@(q8hC#k;xFg$Bx3RiiHU7-<86L={IUo^r1{)F*IkWY_mwY!2VcdT2hM`h^(;d*j zN73(l-dr4T=feek?l@W}F^P7L=##H5fyA}XkP^exk1ZA+B*&P=&sd-K138So`Vm&X z(wLj1Oy)ZU87lvU{f-^lVxFfe>59VC_IeN0ZS##8&D-s37cdxb@REyJ%i4_)giYoUxHO(eYcE7Ubt~5H8{FN$x z1sts(RC;^jMZ{d{WKJGI+j|3;(f^-|Isp;aL;OK(3wQyLI^v(Gf$Vr@bSNuXKj68x zh!7P??#$bN^$i~<&9Q!qiE;Zffvk3>G@BH`jb&Td7)&#!)bG3RB{}CQn*iT$H~lF@ zve~LSM}|ZcgLqhvrIP?W^Cbd-^WTBwIAOl=DBrrw{aWv2$h~IvR%ZHH_seg`Ojxg( z&7ZB`A9qwl!}~1@R*f#727e!CFgw1X=s-U*Ms?6Olin%*7Q zu!1S_tZQ_DXKS{#GmVH^;7+Fq=pM{~Y+f*KU+{ zKz<^$QrVu`*G&N1A$q0u@CXE`Xpj)K^XLk7+s_fNy_VVdcH0vpr_d=0pTxFgDL1>W zFGkLWDUJsX7{1dFu`6!*+2wRJ=v}Zu;R}yt$jMpHf6z4}G=G3xIX9}p1?WnR7_IAB zENq>{ns2xBpo1mhJVJS-3g>(;x*vJ*mFbS1dXt)McxrA2rTR%F%j-o+-bi(rQugFmlv)vHWV|I+yC|aJ7Ia`uH9>FU zrXiPf;o&Toznqd=ulGb)@bC2OX}#8k@sh}`OR|&=Qx{Ngg|FUTjbAqlIS$MJ&|nlG zdBs3is=kETyH=+AYqY%2C)d5D|RX>DZ^_Xr1b&)U3>KgcC+P)&c0`r@JqvOYOW- ze#7sY@=Kno1|dOZLWT>^>o-M6A)rKi;1~+X7^!odh_N+CnPev`pby-=uJlMGA z9;Buonm3|K``W@C!}uC4f!h_Vn~$0=$i`Z4mW#qRGG5HR8p0QfjDM3v2I~3*k^7{>o?8meqEoxy zrT<;Df=ovq@P1DomJNBZVL}Y=YpJq!L{}@k8Zbi-XV#85F__|Y&^@Y7Bh1o>+~}*i z;WJ+ILk<7BN{f5Y>y$9~I`}Hud^Vl&=10MePsQs!Ce9;qbs&A za!JDl-ou%|*_>tTdjPY_t_A8~W)))27NB~iAlbs|f6p90S@5X- z6zveW-#QNUT04_ym)&y3wBP+nZ$)!lZ!(qjBQYz_O090H%$Iq74!50QQ@b&!{AHS0 z#~jS$2JC+(1CGG%Gra1Il+xT7gWC!|J0fXk_NH}*)}3$ zJ{!yxH}aHD-2J9S{RrxT)~=w8pw{hbY*$_F@i!%uVRo#o<8GG@b(xlD(dWF6T9jrI zM+y@5;sZE3&7<)B#21CsEvSpZ>YhH3q%jg0l=97^TW)wdoROi&%mXB`dZp87uI56UKGrViO~MK?Fh>Qg5KxYYw(?ks$s+xCzixGb*aLjG};7?C^L^PoU2V)l`;%d z%6z83*%h+cC#)Mp704e3F+~1tvMi<-9qQ=af^*5>9>sja` z0&{dFe|2$$Fz%meZs4>6_(`|HlYeb@+a8l|mi3%{7(&S$u%5FPoLKs+Z_g*bRV`7a zF}|&>n9zL5OETpJSU$AX)w;i-e$Fy z2}n0a4#-^biNj&uh{BIAE(a+mK0YcnfpH$hnD{spXT+W>VD$!QhYx%x7gQv4&aQ_? z#-DizN;03)X!QsRx3X zUB1M%;kC`5FnGgPn_->hy+BH~=THwVpLL`9HUhR{sPcLr-6bF32btD=I=)WtQXXch zg{djdsiy#4%H97C@GgUXx+e-i`(ImtQAn$GypQ{91=$ukB#cE8D6?~_=^}DwGwzZu zNar56Xy@Nr6{#L{k=JTldaD>j^{eD!WNq7ap86Z5x2KFZtbRWxc;U$sKk6q;)&I~J zO!btHSe={eDIX0TF$V)Dx_8302kM#KkV(@>^Um|A1ttE1&s>?)C_QPUf7)huRPDEY z$#T7wY7VW*%FnMax@tY8C1XF|Sc4DL-wD94+G-fuHPm8^q;TzdOVhNsHb^tNb*IP+ z4L>RjU9lV|GKA4iH!ufiKPi0ic<-+~O1nVqcYt=Z-RMIyruk;+GA<|TX^zC`V@PK_ z@2~jPTuw4K@dxic!#zm>XV&@Ofie7T9vs-~?+{#OgW5mx?@J_cZb4K4`_X#y-A2id zfTK?OY9*+kqUYb1oELTSvj06X7nws2wzvNgw%!Pc1QpQn-}!Z3N@YO#)>tKx=j+h; zqB7^5`9^WZ#t)m0Cx52oy5fB(?NFJ-N~ZZRPNL*|Hu$le^7%TZtQ~rFp|@w}Lc^zj zDv1_=8j8ZjcLk&n@t`E&9{2?LUyG5+o(fO(Rt*^oNsm_`JJqtg8a#|BuP$UK(4nHIuSFn*i7mP-0X6m7X0V+vePNB&cu5FyQ43CFZE3|YcQO0Xj>n9*+1jr?R>$zj(bJ=T0b2j;V^4?w4!(o3W^`BQxH%s?y1V4%FdkUuk;2Mef0L8YkPS$6USVwpscD!Ud z?_T@d8eNDjLJTHiS+C9bWvOmh0HsAK!|H#@f4A%vhnkl>~vKCSi zFT17rX~AW=Zti%Ll?EDW-s7iZg}&3>W+gO%Vp}UvX>aPqMhQOrL&~@F2Ilen@2X?FWy85*>WUuXZG(iGqTGW;39Bp&2U{C90=PYdZ}MJxnZIYq);)m~&Mu@kak% zcu9tKrv=U<_u-F_KF~9?>|bTqoc7e=DM6_P=)NPXjLXoRD|ptWEU)lbAVc(U|2~25 z#ZeRpb2yp|Jo8Wm3|R`> J`3f#^{xb2EATS`OkTO4a)jQPm*Eo;gj`l2c1TRq; zJYUe+;@yH>H?#n)+=Y&hhzMdsR;$?zF2GDlD2Z?L+Or0@JOH5m%bo%6D7h=@RT6u= zl_(qr5%q0Ev=kMO-&E_MUP~(G)wb)0=NJ0`(xdNf_hF^cW=lGBF$@U=6ZL&-YHG7D zr(aA&pRXxdur9>hfyAy~ZiV$5^sM_W`Qd%$b3oD`2YarEaF`%J!@gYQ z`rBmNmpjW-wzcMXxt&P&4*=XupwCkmoQP*Dv=ZxdQ$ks9j1AbZm+>>bB5%Sa)X{w$ zp;jF6P~1gJfOrIVPzwni6)5FfHn|yeoS4_tsVJHFcU!+8ZMVN@kF*z!4B`Ib;9FBc zclKWy|HTWLL3K$9E-d03iLVVEv=U1ukpGht>R`j2@0z)>BT_LEy9+M$?7m-@j4sJM z7th+$J|_0-)xt90s55Zt#M|HkYneyzc~|w@;FJyiCCN_?ozostz{yp4P#_13O3&W= zkf&3#PxrR^XF|g0u{-Wtt^Qzz9?Wn}YY}9xj47t*szbNU)+6^UV+{6d1pnhd+zU4SJh&hYSrq_Z|JHyj7CR#j)o`)2C(B zWx5~90eHg507Qs*HP?VG!fF*reuJ2GK^Ss-o zg?7At*q3O8<~?=`x)cUPG7K?2b0}8Bp%wWCk?6OFvx(p0-Vd)o-A;(nrL#_R>g{K& zL?hEr&dD0R>@A-o&rAr4ko@+&oAwynDpfh48HHgiuy$VJFSwktw-3hXE3v1qwAn3L ziCTQx@!&>+00eGucofkwtYYiRwJse_W+Fa3HrO0iRQM_Cp*>jL`hxt&emz$YrGk{r zmCfnh{|?AmSgvhG(|nbR!n22SxQ;_ySc^*m4q&8eWu&(?M8a^0&P(GtOy@milrke& z_fqg35>3G-A?0*byrI2hbBsd4N%^3c;MSFXFhg(g)RXz@wH5r;IGGi3Oa{3G11$<~ zNdC6}uyQ99q^W?AV_Y?&j~TJa^Bgv26(<4-io9-|SRk zr-CeBg-uBZ2n3U=ZE;|Z$- z`0K2`Kzcq`%-2e|(bwX}oZm)C@eVeq#-CzY8a+jgE1R~vJj#K-`V>=iZQzlaNXLgB zCsW^?p}yb=k{A#GwIY|;POs@%MjIl)9+&UM_1O4_q}YM|f-Q_~_P~5cBF|*cJ?05d z8!Z?TXaYxhPZO!ijf+oiQQ?p}MWn|0rpC{7m=yRFyz9Y78PBWQN@K?l@PyLLuRio6%y{Ty4Mu36MNp`AI@ zPM@-I*ZMgJ)!fDDpik=j4+nqVHd2mGE$JuGb(xf}Jm7mK6TO)yW+XeU-w@BnXwJ}1 zBJ;?1*hdO;zn${1;2f!e!ThW!Q7_*O)m4k!R;zR_EQ(uJCJxtOAl3G~2osgo~T? z>+SGx-9iPZYN}i4xB>D}&iLI77h>JrAC|)}?DgLokC5{n>X_0X9Ht~|HoLCbc6i6N z`sdS3p`WsD9nJP6*DJSm;zT`LF0#AsmCyfofEpR2`IPm1N=z)zrgg^4#E>f8@~HKX zthQhFm1deo+q~GztIAT0D^VsaX0L8ijQg~aDjl@S;ndFLJ`;d=+m<}|H1Un`^~AP& zPOiLammIp>aT<(`Nq^01wwy_}^kNpnp{cNbaA$pVa#{(r4 zcUKZ%Y`lq=HZ;df#`WVH9bX9K|2PBN(8b7*8UG*Gn#z}*b1<dGbP!FfNK8JwB)E3Q-6;;&QmY;qv~Lf`%Yb8a~q0XdFA5|*a89^ z5fXATLT6z1mxRH`FAX&fbq%(MTP2s{-~4v~_v+&`O%~bv)A$I_hNH@WRj{kgYB)lj zy~L#V$WY(71LQ4LFjiGYwIVgznGC@-n;GW^gnT2-FqJPg>}lDGXt~}F3qZ(E!or@? zAT{{#3I7qoWGJEujcf|l(}Wz^cp84c%~d$xJI0`0Vc8Tx?=-$dFQAs_$3R}Bi6!e< zzhX;$aA=)TWdxlIDPZaJeE$efllj8oHmOAcuT zq`m~K5;*}~QKYn(ShjALPUEZh^z^fSQLid0kf<3_`X&!cJ57^=I^@y!?!je>;*Si! zic};QwU9S|e!qH_7b#;Gb{u zv<>#14O~t{Ga=@d*Oux1NNqXuYc^gP>rm(^@rzCMqidC)YwJVP{qy2ht9_`w?va?s z)zP$4mqmf7roz|Uvkx^>%K%pX*^#nDsPKM8 zd+3x`66WUPnHQ;7y-xa}U$@dPlXTnT@gmQvL#>O@}{g`cQM8h4$TAup0e5;u#HxdP6IaqV#R+4BuR90+yINXe`1Q^bmirSl(gc{1HvlUA2KAIN?W_Y9S8 z?4zzh1ERB)Fuk#V0lV$Au<{8WOoMH3w)La6=zB}mA-r8DIiwO%d4XXzYOr!V{@*3|c z)vzrS)}4W0q~|HP!7T@v2IY7p$-{O&r@3Zy;A3YncCD$x$g3zb$!^meHL&K`Qj_kY zs+Ae!HyB<^vD=L-$<}RN*$@RUgx^YumXF#CW&B@CX__$UZbHz?dcw_xhC`^R&S7f@ zM#)Mpw8hciZ3h#Ts6#;sVPhp8D#=W@(ni8)+IdrFXl@>r zIx%_9W=5e7GaWxR&Y=4D$DN3|FXRW{{LCn3_o6}#xm(Qrb;sovDT@_@A?jS!ICVvC zgIF~l3Mp<@jhOz20FbwhYtsevEZKr9|X`;XJsTgtFuO^vHDlylw9h4|)dj+9Vu&;AM{ zaNwhHFJR~29GuuE?_(ie{~h>W9M!#+m?k)cE&#2{D=Vb z$4iK7jGur(3d@rDGd9)yozRjhnNpW7z7l2iro4ytILVp(kE6SHW5ai#)vbj1qIha% ztNIWx*6S!zd%#;ZZ-Xw9B9P@J{=;@}Pj(jp>Z*=pdVrXZuCrH`{N-fZA+^o@qojYD zT3k}Y=ht`W(Qt!roA)axy1h;fUUf5+i|G;fTxv|yUR-3^^km&nkt-|@vS1c(!T$k2 z3B6J9B;HKSW+>-kyYx#}fC}qtANV^FEhN>Xt@mx^t8Zzsiy8k+H8+AoTHW5094L=5 z8&o$0(*siD&ul^7jGjM@KGj!(DdF947vY7p7mB;NTi4%lZriqV6S3vUp4IWvH*P4- ze}AN>7a=m|&ObxuR`cZcK)rirG2;85`A=vk4ddyM*RbPtY(Zw_Vw_?l!o_K@n8H`a zAfptEeRki~QM4xg8P?cbtKpZQI)4&qPjXK@Dw8orc0VHim~(Lb@lt;Ymv8gw&i#y( z?CS9SsS2xJ*aPc5&3*eE6&8XS`0h@9D&wv7g{E5aWxnv@?~N3)e(K|rswQd3 z`(2IV3_pR?k74y|U)gC*rOV%!bjf`sPUc&P(l!yEZjlSHhD|)gGiawOq#Js0pk1(Y zY{-ik@H7pmdFs}xBQI6c_a9SC$nzr$@vj|n&Ywy}cT%mtwfua@Hov8CMifj=QZA?sXEQpieStyO?fD+?Cd|M9iofLfs z{mw_EG)uErIvWSt2M)rPlY#i#c(j`7_T!P@$I&^*H>QL%o8>aHNy)4 zrgAvWk(XcpxGVSELH7x9u4-rJT}!&8Mijt zhoyYi3X$6AO0yK6@v*eHmvas4upllD9|@XEMI$%V*@b0*@`UCERr3F@HGB{U7&wl{ z=-4-#Gl&dR;gZ3YpFT zM8s+!p=VlTb*EC$Ppg9@LuT$FduNDghHep$TR?+h9r%$t!ejQb{>y^Y(j{HT^YL%$ z)I#Cs!;8Kye{T&3+RrD+LQMseW4@g#-;1`)2PRU!S>w)*u-H)`Ojh`H=?ej= zC+zH?@p1mGAq?L`K0o%HWDYl?4geE6!I)PcN9r5<5VF}mZJ(y=GBFT6)H+<1CgK)$D|x~$P%#;F{S+F#d1B%KQ- z^mvbgz~S;GqJ@9eeM$QA`qNd93M=HBwijsVm|YnZMQtDc*9DN_eXI(+Bn`u&hSvlg zUy_1qV#=&@2BvCiYq9D7#`9El`QqN(!2NGT?2Eim43 ze>QbvKli@_k0A*(;kb(~*xa<$$`})RfP}9CToV3yIZl@Y!_w>dh7TkXR54;!BTqy3 zon>@#ey@b@7T~sZH7sho_m9v6PCSV_w=a*p-!4!=#;8jKL0TD5B zZmMX{x+aUIOIw3(&ZCBJ`kbx-{^PIy7E>!U$DSMvt^pltldcEM>S>1}}W+ z+@`fz`N*zwN-px>BS=!&X4ioQ2qTZbw~rSbMrLxKb0k+Qyga5q8Ian0so?Z1~s1qUtlqm3M*_aU(1r};44JB#0aCB6>3shd3=YFWvdu2`0BR*||AF89zv#^%A>Q-MAY)z4vMh3MV2qhQ_~o(3DvoXQQdN?D-<|9& zuD1?iUZ9Xn%4TH%}O{d{jxDS2tkZXx1)sOEG>5x|_oI>Zo zSVXJ)_km>N!%K0;ehjI#$RlOC6cnEDUQVZaw;r1L??AheJG5a4OFMydw|vic39DL; zig=|JjSTJH?9)d+iL@%amV1hUEmiglhA}TkXO=AXaNj2TtLaURTC5{Xi~@=pcDG;3 zg95w$Qa9$@POXhHgtksy4g{PyJK>-k?ejZa57LJe)U`r|v+WAhb8?Oezk>88nl6+k zke-BHncEE1{;?e9LvGjWT~SC61h^w$`X&R3gUd4^@K_aVP_Dpz5 z7QD*>C7w{l1RuZ%lB)m5Yo{*&oI&ZB@Szw)Ig)joYzPhe2Ae|a-W_gs(XRUVnYxtW z* zCsbw%biC-*uMFK=`3AQy_OAa@%yG*E-Y_DMzei#sd}BS-el4riPng7D=i|%+_Wt4r z490s0B(})Z4~8<~bfA-9*3JY_J?Mq+i&vaaRehY^zp)l;w&yPc-G|zcE48gxp~vb_ zSZAN==&RcsQ@4w5mpQwjXGe^c<9-<{vuR8jPChBBbaep(z}!Uy8q4~QZ?yoK{utk{ zk>^p3RB%gzW{_QfZ|(nOEroO@yO6O41J~ek(7qfwRqKSy?R9wD2RHN4U$-Nvb5sXn zV?%@6=#Ow*8kc-qmPlF?CM^`)hF)Rx7#=ddnDqKjO#a&qf6?lWVZFG5`tgL27Ky@; zOnPuiPmYSLc{^YC!^4VZc?AXc%fEg+aNhbNJ(z-Wq0`1(I*6i%=6h=V>xn-b7g~YF z2pI1rZVkMSnl%RAZ~?IuiwaWOOI6oGiNd`2j!ZvF%k_p9wm&Aw7=xhmLhCoj{vSo> z9nR+Z|MB+pw7Sq%)u!j5YS-SJE=o#j*Gv`FNKqpMk#y3Ur)FzJTdM@Ak=U_0s2Q!^zn>nN{irB)EU+xiV{_do?5>C#WhDZLI3G(QUD)d-tin=vr3%#k)!xGMZ7R3R__cnuI*4#tc{F~q5d+~I2GIF zp>fgb-cQ|&4*Y^j?vfZGrnzdCu*|2w#(DL~uo4Xg2aR&JfXb-4aOYF66+ zwqeTaPitLjV*tEd&)5T)sh>~8WWNd?e>?ibQ@7I#I1R9A%4kC1QJ^gyc429jn{s4B z-Z^svH$}KZAbwwIKYuhrC4gxp`J+H~MSP>BRi~`_Ka%TJ zmzH)ky1}Ti)OMaNWK{XkN0L!ddXAc+9G8Z@GOyXpafh@lfc&v>TZUfvKu?#R7=DmV zCnA0WRF;=##p9oNuI7Yy2X~?Md-}WzLNJ@83`(VSLxUT9+$G#Ye!VW+Av0Ke1X(P1 zb$Vo%fCIdd`Cfm_CY@N^TU`7hp_a6kxydiZmEb6{?>e)ZKM>`RG8|8UtcW_7J%>D&+dB&EFb zpQ^oRvLdGA@u}IeLOvncF0MVDTE#sMn%MgzWmY-PeqA>2AC!DbiKpG{Atk3irD!qkzc(nL=@-#0t+kEbp^K$%<#R`9sK$qPH>!f8p*>}?NH>8bC>4Gvf>~dT;2@S zQ6Jnf3!^l@)q;G`cN>VQex9KpmY}-r#07Z<=B?i?wDc=ByOCRQKktqpOf*)Y2LDc0 zxVBd<)3R8_#X`}|HgZjFDa6BBbM;48lY*A#xjO~A_C=zf;=lQuw^r|arA=XyV;d}e z!=@PNDO4jl>!HTm1@-7*OL3`l8IhW7|pZCC}j-hXWWgSEeD) zEhQ6{IH=Wgf?lySQ;-Om{Mh)P@^Dg~b>~2iyajJi{U@83e%+M%rYv$)L190%2f`oS z0eqm_FL#PS&Kkw0T2Wc`4ezqOXkv%MU`Av=^jDOkERzSSym9jU%z~$0_Y2R72*+P@ zvPUUs?|^H_J3tH$M-7;qU-;e3mS+6)P38Fy8^d^vV=s)?-YVcKE>BL`wCb%BnMWJpO4fxmg9+C@D&RCyc*6T{V&^W zIZ^muBAb>sfAlh(jCL)9@Is^8Ngq%rIbm!_I|%`%CcQS4V2ia?&D@8pMstHHWkQ{q z8ne?e*T!=vGnaC9GUr?ZQr5?z=VzuhG}@K?QrwMz2#D=b`Y|ueoC<#541k&2_)l`u z|5CpVFeEt_+INlr#>Xza)x0(}@$;Bm{l@h)qKx_X`?NbRCQ9-!FN@?$lHbYNm|Uz= z*0CE1n9(D~$Xn7a!M-NDaM zvReZBf=QekG=Ut9-q7GF9w}C>;UAF#E3f1EjDjK6dw^xJdA;rjXBG0Xrnzdc)nNXE z03^o&E$oKWWW6}puJ3b;!sB}Yafzro087WC^U?l24USu9n1qG%l)^j(PLY0KW`c#K ze5b|8?n|;c)@{0y$iPY}pAUi2wtU-u#aDE*rz7k9$rtGe-`_ zezzUZO&xS?&bfdZV71gbd_BJI<9E#1?{n6a+BZ}=M9~}X=Zguk4@yfNh~X^Adc&a_ zS8H5L>I&E7DEF8TVbUR50Qf^TDu8WFjQdp*{94s0L$+eHdM&aqN=>rcaf95$f#sc`xNO_NG2X7>BG#-d4)Res#C-oi5c&vv)2iU6U5*^0H-si{ z+pKT|sLEu&L($43^#%baxjGyVR*HE8AaY0Q12H^h{zsz_N8-@26vCwa_~Hl-4)rT5 zT^wZs)il19gQ$Y80@<8|w9<@`wmseesNX4zr*CAy3hepyszWuTIopFhoS)BFYdh|rRyWxQc`lSkt#&ZVa*0h?I_WCs}ZD~=C|?{g7(yXa#uzG z)F+C!(K%#mqFZzdBxBjbbv?>Oo#2LFdrMPoZH~^pDodiNL2FRj0KjnP2yB@!QPo}K zJM}((3X?04jQnqX~YrTD_m=aK&E`T6d?^`&>}0Kmw1Psak=Ge|V(sp)nMHwnpxBm>kTUK(Zcp^i1PG z4i%3302&6|Zv6NP@&v~WSPykrw+F(6J~nDBsPaALU<_atgw*BHcBA5G_E`eB^ejPtTRk=CHsk#+jBjED|6ZK{E-OZz5&90|v zwV#KIRD46^dmES5m+u7sSn*g<2zf%6I}h!>XH{mA{5yMQY0j^wXk#+`zAxiy*6J5? zX2T!<^Z?IOdU9a)>%lEXKTp#jTW!W%?)({^LW9sAX+ueUDNJf9{!zo~Oy=^8J*FOe zzt1lX7uF{~UA9EVPKT`LS94NoT#CG-md!)Kt~E%X-xB(m?&iMfZ9uIsv-GOlb%&?u zZd#YVRABr|KL5gA`A)xHyzhXHZ~vrrQ-BX~LXVh?pK?|fL&o--4k#Ny$*Y(T1+tUk ztaAf=rnK?XR#AKp{G$Mx0FLG68&rZV$qh%U&U=anr;P6&yU3xOOkMufW_NX3!QJ*vF-Aey+LvEYr6c;99 zrCk0jHHA=2n9cj{Sks6Pn>GtA^;F0#DjSPqtfmGK(j8D6*2-}g=_)`7l83WJS zfe0^5P9Q)!lzSzX9sIAA(d(7znjgER-n#4AAq<&mP>%kxQr*=D~V}=t&iqPEV?U{K8Pr zS0q$Rs@A!`3KSV{u)4(@JD7Jjmcs7 zhCa8_S0*kVMLKAt9aL`+;zFnI5&R}M_x;mL+u$-A1%B5)IRvByVJFvw6(8RjGbH^dV=wqs6i{&aadlJddbU582Yh#w-?yiy2-d^EhK==sjGm6wEBnoU z?sXtm1eB4+#$1Wus@e6rBqa`%MQcU#aP@*I;FBwRq7E^^$~!`({>ysj?i%DBrGsv0V`}3XS^liSyLXz_XvJr`D^7* zwz$+YGBv$Teyo>4fA??l>|LdQr82MCXgt;iZrSF~ael68$slYx(=XW=$n|C0LOych z;(clIhI_F;k>;-kD%4sio>oMmIQ2$%Fvb)kG^ub^_Ct#&TeEl|Res>zYUD$cs$#1v zNq)+Eb;1BJWJ33p%&z!C$boe-C$YTyQ@r*WgFpDJG#H5;n6zB2QruXtO?A!E@Y-(m zQiM!3At9GXA+9u6eOOV?bVX5Fzw01qrEnLp1^u&FProimH_~;jG0c6)->qc@B8}F0 z45>=VZ~qyOIXcO;^pL|%`Aw(QcncLQW>!{3xD+slKi6sQ29ZM=(?-a1GySWh_!W56 zvJpjG;MGabT1wW>7M`!$o{5coqxp?`1E>bhDG5Dcad@|p8Qw=e#BvI-3D#FyZq}{z zd6)PeJB+s3i`7>#Lem!0GGRUbjK~@v2^9d%byjI6xYYs3vA^Of#Aje9TL!J;6H)#e zLz_DAp0&rlQF>V}@Yu$1N7X2U&NV^Vinv_6*>TvO!|x@~{mAJr1Y8rj(RMewVU{I8 z3tIFbUgBB^5AcECYT<$L7mv?7LQ5{RD5RXu136Y4&`5QFrd9UTiS%8F?CB^8+FpTuExvqw z^#9Y!tZ5z3-eYC%a}Jzk(kdF$fsQj)CUFH9auoLNk?{PNR*QpW^L37;$4Y^~<)rYs z-^RvL9U0&6Xf?9_?aiFijfRFdG9t)agMg{_-KYQ_U^ehtwG+bYgfOF-CA}~f;wp{7 zp{gN|k$&t`_GEa1fE5dq0L3~@&YNTBeW%XgyrF;Y{#2@*tddC(|JSeyp&~-P*mp9f zU!7Y{R6Y6e*P0h6V%uKt@I`OpsY46ml{6JJR6q6QWyD8w+rP0B}ve!@iXdx@s9R6d?;ab@4 zcul5@FB_U(Q?Z=9x|<2-9w-xWvI$*PyrqMMcSD6Ro(p@7v_l=#5bDO5p%g2OTAoB} zzJdsC+p-(m&Qa*@xa0~AO&8KPDxg8ki&sRWss&oLo4!D^-q%edP6;66azvJH1`!Y@cUtsZVi{bN? zpH#_g3ZO?WXAT#R)xf?>lhH5uC$ScsG8oIuhBMDP?xPmW)xjt*^cgVqg8e9(qBN>R zvi`|Jj_V!&s$oZe^U%~um%LI(jOz#^jB9UBtps%k`j0$&jGC0Hvcgf(;v9u`n&WFo zXEUD|Fv?_oMnuqTwe<(GfbBUMXG^`Bo~|=A?Yb6-P+nIV?-*IWP-2$1Z^kI&D(dBXXn zW62rqp~+-Z%jH=Hq1y;p4o<(_bz%E|p}4{Ba>x{e9I0-TOVuXtCHY5jd}Vo)oD8bm z$L)p$pLU|a@b59r=|7vuT21OBR2sbRixi0~VS-BV1oCn`mn}|U}MQc9)_%s*}j8~uQue-Y@t4_c{q0byu;^@z~ zvK?Q<*GTW8Sko% zt{t!0{QNlvgeY$|gMj1t;hhV!($-ZZyrtBmQKf*5GUp4Rk4wpdp&ZC=-BC6-kg|`o zq^QPAUL4zw43I*AD1O_7`gaMD1;C)|cU2)GvK1ph-v06=&T$x@B(NshmFDw(dX=CJ z991%gz!&gXk#1ADSGwc;JI$pp=U~8B&)`&sC*-HiLAlATqIcMLZ4Ouw3(bV=33>Uepj)64T?ueln6${YaRX|4eJ`>Dfd_2^J zNvg4mUTNmW>7Oa1@r$h(i;W|d^Poekdn2n;X7Sfn8r6O%lL=px6Uqpc1fl2w&>Hs6 z?=gz2^u1N1^EB#S`^51LGnOwzc==zhZ7s{1lMt}rq-t$=7rqc!3Zl^2%J}ThI-*|A zGyFxCG8Y+twj!5@-F5s8+uzm}Dg7vZCZesuZ+oah2wRsa9xWEf^2&;vY6lkSjTYQV zZCcs-VR7kb&Ao39(Ql44@7yfj>@KMekPn*uQ3Pw!8V{MIm|QY}4o=GbGh}#i>6Qg2~*GkTVadCBu*Ym@F-aXGIB_!fSFJ#%TB$%Mpn(@8$-A zhD$~nEnqrq*M-IRjl$6Agoq*)y~C&sF)OyvyQv;6x6r|kdP$r|V981*E@sDw$8vOg z_Sx7TsJd?SYYMorcGlz1jF=-J{Ib!?@#+4&?=dIvKG*^$WUF2jQ`}?q{ybUTB8flq zwnK+qf%%a|f&S>K`QUuIn1F&6jQ_)8=bb#?M_*F{9Q$Cs+O}b7+0~6v3|p)52cV>B zja}b38%|7K4?Cc}Cz6#5W@}^F;^t?n|3%#CZmsO(kG(+-Nc^n1lX5TpdGf(o|7W%F zgljj>ABL_sLvvr(H@D-iAzetu@*Lwe3jI~`K5&WZ?%cbCFm}@(nSRt%$u^4ndo_~} zdpcn$ZE|?WK+(^M!F=Hj(sAjt)sa+e-_UNe`Q~!D{Yxs8TH)l+7ys=%JheikzP+(N zZdXfgeJK_ZucaSUQhW$BX3uSomRVitvZFVC-w6b*7v|^nX8CV`EoDpU$97HS0H0*h z0#DnlVyoz0hg6)g0E?KwRy1p3^Ss_ku-JgC4_dtqD9_%KC z8yAEr<4astuT^Tcx?U!&nuriZR{+IrfU#OXZSdj@QmGQSKI1kF(M7)L_08{N-ZQ>N z7UL)2Q3{}GmnL;x>2Ti8yqUl348m^x-8eNP)|txsVyaKL{h8F_Q=n4E@Xi}WI(PVH9QxN%sPZHf+IVYcMn0}+A%{j@28ms8%cT3Ya*hEb=Wy) zXu{FA;A>xs-1fEA`ok2Jn;JLon|0(8c-ChrxQiUIu88q2@SnFSQXln0Yp@)tjB_DRfzvQ0y1fs+TRw9;*DEqr0nB zUI!huN!`D;YYWN>Vf5yS7)>F|2ft`GX*hE-7W{Zx9i^^lB?)mnL9El|ANfDtV3+MS z6uBTAO!#MR3z7-daC*I)(n?q;>9$rGs}2^KkGb~7{Lf*3_TEt$+9z+}Jtsl6Gxz-c zg&xBPhEf3~gMo1WaiRk3f}g#iQ6W@g+N^Xnvm?`#Ots0F5iPnP=D zS4YP*3uJ}Xx7SPpCk?O$YpOSzmdiGG2B!{p{fD@+3-gkz5Rpa!{^T8v&~Lo{!(s4gK)ItSAoG%g-K{>tG)m`j#5zRhI|t7t z@Ke2`@g-c7G0n&xq-7ze<{@jn-c@vIH!h5l73FZD&r*fvJo2?EQ)lwey^1>>7Uglv zHmvpzQSwVW&$jRmxzC%6Z(=&!zUC6rMZ|QEG!U?DJXp&s+PXa`O{tSjZ%glijW6~A}{x~OU za@liKrTR6+e4~K0W64T^DX8VPBQI*lh{u};fX?O3;!OxL|I!c?%>p4_j@Mz^NFL2c?FoZ%m5 zLf?)**E=Owjy7>tpOeg5JQ4ZICaIZV`zr6$j=<81cO_Ts`; zVuaK;L(%>oMaBKOL%%3LX2ADxhr}>hzmSOMQ$Szj8Iin^Ua{0%R>v<23(E|6XK4Fl zVkRncx4pf7mQe~!$;Ggi>c1ny@AOtm3oj)=`aZd9Pu<1JE1=cUUcdk`fKx$1ziYl~ z2tD-WwOZ>CaP^H~w!U3JzrVH@kwDBU^-Z^Vp73MB%#$jHCOAXaBF3-PBXw?d%7@s* z%J@Ugw`2DG~{RYoH}QacBI-lXK3kbuE}ATP-K#*owL!o2D4C%_SnvY z0G0Kx7158&%b3PPl40S}k5s-@HdgfX6ZS*g9n2d#p@d8)<8giPT$R{t-x43qPgZGITEy4NfRjKD6JywXqs38;HMzKQ;Ktq)ghf+txbfd10GItty zHM%kCLz3N{$8w|7otW#Sufu*wjl78-boh_<;KJFJdU#G*L1$-Ybk6SN#n9)BGhu{c zgS9HusvkT`DK%u=joJLE8)7zhgQBqZrqVD=hKlsL^bBrr+ou)j zme~1n``U%eAk}Xv&n5}B9l|TLij51r$uF6FztaNM+kRJc*=?Xij{))7g=59lDSC9H zQ4|h}QD$v?)@lN`N#0@+>L~nII=^dv6ouVdab8NxuE~Ufl+>zs6K=iUP)=WYqVwpS zVJ83d*6z#35w1abCp8BiqIzkr5OY97=yc3a5XFgEHq9huWkW}7XJKCvB4Tsbqr+)FxbhFr&rOno-3KoShmvb2wmpaA+W5)VX zWp6|R_lUdeTdlTx{~Sma;pLi)dZt%vX=~Y%O@or3OS8+c-L#=b_DodF zR(^p$&P6#KPmUaXmO>6%gSj6RK1$ve*qe|vw)x+Q;u8WpJQC4S@=Y6hGa4I#pVl42 zP+ugP^Z->Jo+byRu&=;aNOWwd>w&6$qjukWSzMd+-^(&rJgvao1_kVVK zn3((4$*h0FyZ0L4JM?&#I#`Yn5nP9zb~4g|%AxFGTHg~G@Tjr+nKqj$PO?jNu40O> z@{MXbo&byF@w9$i490sZ>F*6Vv*^F#4X*SahegZS+|8T-Ez zzfARzV7MY<{c5+L+>q_Ra&%W8Fl0yTB^(5)0TDps%bP zpb84t%!}usFIQO0qC1_xoQ;^BCit3l*dZ7-Vk}?D(oSM4T0u^7WsWdh%Y1|wji=j$ z@42x$J0s!PkZZ>d+ifK34prmc5@k6Cg$TtisXsN7VvKpJ0kJoJ@DIXUAQw1>7tDQ! z1ZfelKln+y{0Ru3Xx0}=X`MDRp}7Bo6J`4;7X=?a6VvWc8ds*QXYglGDzu){f}C~r zNEn|lj)-^yLAFmmLHH@4F&--Vz#Xu4AkRW9N1!*ShNpm2c&(9x@4G4AQDol3yU4#d z4L}a)HCo8{BJu$zg}?RWp>IzqXKz97BiegVl;dg6i7c8#ta^`B4}L`58IK``oga8hgz~3 zPvt#c+7^B6_$?Tig0ac=+r8>{Z8o38(Q}CVzEYO9F;_%aX*$$D9vL^`Au1hr26Fj? zrUE*ery4qPMU;SCdo#!CSVHb?nV|%=dCGL2Mnlj#+(j}v3I97G1o+WyN`{1mtoWkhcDh@uv9st%C|(rzHf(A8oA?C4Y_rJoOP` zgCJG);?iR!P~R5tXpb8V=K5UHrQULylXy8N7W*?C<@jakqrzi-L}}mOeJtG>^;FrU zUIpuJisAyX=3}0XW^meLoaXwm$dCMe`(#4mco^A;QI?TCaojV1m8i)TKT0~jz=d)k z?0v2V5X8?8;ywmI$cfF*vdYZb-Gxj5wp!=>d&0qBna8zj4 z@3^30eBZQ*z`m+y{tRRVZHelZx&Q?Kz%h9faE?M`i*!LrL)5CIX+e`OOzyC$iTbc~L8z0m)oS+3c z9hVnVtdMq-R2*N@=@xwdd1kY|bB}h@no;`UJWR)vruF}oVPDI;lujU~3WO1qIZ64* zlN?zZfJ6zS4z>(V9`0tb>8(e$U76+ISdmmiqAa_)1qg>vQ)&_oql(aNxz#L88pWFf z3u8xi>KvqJ(Ijq=9%ODEUqU#*jK`?~E%Q@yw3{(KAhAs>Id_CCb2dS7pSQkv<0^n!w%+4WVqok~o zM~0({*}11Y)NpF9=C83IioSTP{H_(xP#7F@%Ay9ZhyC%a@oq=Bq1vSTwZ|{6i3udr z;YF{z?w*Q`Ho1^$-5YdJ2X}uVUSF)apE7Obq}#iZlKPb)KR3FIT~5r)@U9Mo14Rk`TyGy6wI6w9S{F=vYM@Tb)o~H- z@+S7fjjC)a|1_urEehvZ>9w7_R;IzA&^ijXgV z0tp={jurj_|JfvAXw~!#Qle&T`q4*x^ZJTb@plqqiOgXh>Lc&5_ZafjfJ8~28q&6^ zFz3R8PwOs+pLW=Pr&DR3TJr|=7cz`&=m@w49MUtuRADYJt@%&R8km)lD4Sw=JXky2 zXb0yNg>u1^EYlI91=7A<&mrt}7p2NDPpzfz)uxrmuXM{dR6}DO32{wbwEO_escm4B zt1Y&M;9@U)8EUof6aNWPOuQnTS-mB1AJ;loBocfhbMc)|&-qx(;|*mnMuDAdV_tUE zW_5B4*OCjoecbvun)Q~Nz+7izkq%_lW-looE)Ouwnm^CI%K<}aChz8SSh*cw3B>Ay zJTljVhUP^`yRg9V;P~o3{>#4ZBI7%5j$k4yEjsTgqj+NfrOSb1Tfiiaifa$xMYkF@ zniNAL+!)=h{IS5z(lCmlyRLZmGRba=ltj}v+Cc%-gk6h14~M!doKMrn?j za@^HQSZXCPu9Ib}2qV|)>+rj}c?q>90!mvFuc)Wvkhhhl;%{B<3w~i(iBElr{*bNn zs_a7!Qcz#LsAHmBu9saa7>#vC=sEn7&Tc=cpqBQa*f|@=BozHh6%DjrEYe4g00YPj z;)sgkIA+Y}4X0?qgdz9?sSBKLz2mA@bKvZ@0~!raXWTDFs?^l8aqDBbC$$PWaoA4u z!r`p(Wf~S8cOaL5uYIaL0-`nJ?CpInbayVSe%-l5>?#K(wmWvwg0tHN{~e~5@_D{5c-6zXtI?<4 z49i(C&I1_^>SEtl9_S@{+*RtYT<3krd!A!%(^nzf`Jwl5$*oj)kz%h+%A4X}WuofV zjpVu_hitpd`0tsP&nIcQe8#$N3mh;dy%3#7VF+^{a_~i{VU!$euN}+>8^maE zE$WncI;nja@n+gQ*Rk%nd$?dU`FNG=SKV{nw_TrxI)4CcpPc+rt3#b^qFJuzCOqT! z0FLiT(6J89U$zV)^|3f@;b$$^O-bsS2MggGuB0}MJs+N0B(8akyF-AhUG-E5N&v|@ z3#7`4%w_J9ea*R-v(D-xhcs!R(B85~V0!t`;!`l+>z&5+<()$c@0EA(p{Wr3d+a zFXJ}bkGq?z(H~WTJsLEkzq=&?(v?YPkk}W1`sX{~{1~!o}00 z)!#{r=JjHOY7=<0-|^);G?YU{qSDhKSsku68`Ev%z2=Z^qTjmQ?3 z3(|u1o)OcLH6NY4>MS@IqlM-pB$Ofcz~lf;-e8;bDa8v}c`%)UrAhjE>Xm~%Q4bdR zH!05*MX2Yg#g(l3FbWQ=zq)TbrEG92f@#w4JN%nJY!GZyDax6BES;FWzkF$S#W_i%$FQy}VR%fWW( zNM0tx*CLf&AY`koYo*ffH)=R9o-2kPNZ00R$t1w#(D0}=w zpWyq915)bK6>8;+>1aht6*nv1q@wt)Y9H6UZ9zBYgJ-I@poV<=2j4(GD^@M?qi5Ac zEu}$?@Y0}tkA2wu*w2|>GPGwPdwFy8y^nd2+0}0j^+lFFCFS`_#l_WhWB+@(I^R@V zAn}A|QEyHax&UUZ%CbY_F;(oprx()m%8>dMq!5NiNA9^slLbp@T5ilvg1(E94ZYL& zVpA@pVyqEheqDo!I^S$)npo z6h^&h^&_s206Xj~y;1t}la=3J?h7w)V9`H?T@$>y52{}H2zpI$?|tj2Gc~yUrucP1 zOj-J~{X%}Dwr6$e*HZKJ$w7_8ZS`1$`$N;eQ(0TCEZ6GirdP8SN>V!RL^#A}riOc; zPl>14SdV{c6N})!DqM6*GJ?=nGcPudK2@tiqi6fG0BWZBpv3 zMM(pKmHv|uMoWomC|}UaJP`@?sBj5AW{c7Nr%NzAT&!yhN=)1v8I0Uy=0zINS!8a_3hUg2Tv);7Omah1DkmFR!>J@2u@VGOP0)cT-y zeYE=?s{;i$9m>x2#`}U7;szy=k}MO34@lIEIM^=5n~KJ}g3*$ruuQmKFAU70ZfCsx=iE*kb7h{9-ot7nnOKFfXN>Wi8rKHvFSLFm1c-RU_{>2GDbUr54JJc;CNz6cV#THrD zsus|qP-7vomg;G9p7)KXv7M#uWr$ee_n1$?r)PgTzfhaeXgqk^{X)>PKWm2DzQBy0 z7i?4nBnzDwpr!KOkIH~N;_$QYcAi*q;IQ#a;Ks@lXU5F~OD{1*8ObJbmz@3ISabk?1;?8PLUUwi=UKqa*)B3K>zWTk4 zdD=KKNHO|~BDb}bcgsfrXw-(w#c#LBNvJIwHJOMm1w}5eGs2gr_Cl(v+{o3w8v}sd z(Xe9YZ+2~utvN7OvC0CbpJBbLhmFnNcdSQLbS#|*LG?E7bZNPnpdzD|7W%wVv|7tR zVbsWFT`5*0{n!}er)Ri(=N+lOupD) zvw@g!bKX)PV$1)$6u;;QriMjyt|vD->^g2XW!iZ)8vc9h?4pmMEs z=@tC?jhP4|**NBHN^DQB!oW%&NX6YQJ+sfvJ_{A0IGZP=mA6(E04kHxxtFyS>Gyr) zUB%aGG`i&6}N`IT-q=$uSmDRWzjWHsfstp^7ob>#UrfXn|&#B*Q@L9y7Brc+HmIbC=!H67RZ^8GFpEsgydZwv*Y-dk9*QY<WX=d4JPan!) z(P6tkfZYeOW(k<6o;>=TfZURu|MQLG+U8qQNxHN!gX8l9hohd8{eqo#<-69q!8|Gw zgL_ZImC2ct4N-%l7BdFzKvGrxbdU|8OvJ!JBPkEXCyYJMimtsZ8z@Z=` z9@|#nz0U_th{zb9-C?{=Y)M&5%;yB95E`+ieptt)dIoH=!EO3}N!>m`?g?7QqtAmg zT-Tfvn!HkB|$!)9~naI)`shG}_Oohhh)QY;k*&dT1|l?h!ub}CVy z-Jpb)>z=r{-6Ae&PQQKx6S{#XJIRn4&(`M^8UoE_>$mFSi%R^#UQ?Vb_tm`!MUz-J zBb{%`D=(6RhrGj3jk~nOrYPNS%F7b!!K*JdFnUW>)52?<^NFZW?ilq?!K5NPmKW;FGH_*cB^y}yW8q^ceCJqW?;6O47~61 zn4q2iin2qu7f!|knQV>2F2n4LH&3wVPe~Ja9**&WK$`=`<-?V+jm{0} z%%Rr7%;ESfx8$XzO4kAPfcv<%jYF+sQxM^J_rYrL8(nd9ND?yS2-+9Xr1R?J;=g=R z4L%t9L~KugB%x|KuLS0Ob6|hH~k&HmvmQR=*(Cj~Lle~S!{Dt_oNXrRHwe1~|0X<#8l#*@7 zpkbYo`Y>nT(#%S5A=bX`UCC5$-*@vK?9>YXSp0AD+AlbVtDsX_dRPoH(`tekYR#txth z@YHROxSTVW?GwL4C*dr*Y*q_yhS&VUZ4}|A9LLMH31fQMqc4a&s!M(iM8~kc8g&SC zt$x`ydFvGO@_&8C{F0ot4O3JTpr!r#$KAK%Ulpg9{(O0dj^UBGg(%I6Tb^%cx?y$t z{3LK=Ob~RgOC6KGjCkLb7vvW3$Xm5uf|NMJlN6m=Rux`YQWs=iQH(H ztMa4i?bp+#|Gi}bocA>?!G)_!Q>yA+>&vHILTbn%t$n@Lq|oxxY&Trg6^{Y zeS2Yn{x<$-ew-xHK$Z_Ux7=|Fv3iw{E+;qRFA-yur~=A!o?xgQTb4h ztiZOp-9|hor2KDb*vT{wpggv`SVeL_WUJo%GwA=n6KUT4upfn_2yBl*AwCSM7_~=+ z64i5Za5xt$ol0vzb93D?O;_A3d1^^dRVpjeoDk}_diCgx_h!gc5rg-s{S8(112ZO zZ~P1bII6I!l(;GFogiXg0dAJ2C&TzPH`9YhdHY2IqR9wIojEg-M?CnI)m-)_LRii) zcnx@w-7-(${{?=+82AJlMP4ydlm|bXHlL=(r7`>;5&^s2sNX%rW-x}yY=J{d~Z^C5>?mmMBeYcQ^IX~jBYewgX2GO zIkCa~JYZIO?S+}7T?dwPiu5`%1BGQM%On%x=60Z1g9&cA4WxIEm;~xhUzsD>ByIU_ z%wX!T<~J?8T8!jx_-~!hAoA`1>w3d`42EO&g0nxho*Fs|?v{Y5_?P$N#WuGf8MCm= z-rfVk9+WUL)Me|JKV>;mDA&kJCTn|n)p0S!T`St#gC>!>r-TDHo;cW$*R@c;rVtDhT) z&xj4&I`c$rkMIc-E^;E##MUmqQRF&(TBd?)#QATVCa0BJIBj8BJ_I!q0DlK%G`rya z`{eW>X2L6l6-~Jc4gO;hVPo@sp^uXH63;De-k$1Mpy>@n@#!x{+UpQcq%=#udx;nn zi$T(U7=I}(FrudVk5#xcQUdpEhqaoO4?`+`O;_P}@H9Bn1U}ixB)gbNCc)@U%QERH z82xBDy{XL$ak;~vJ_%LnM^wBtl($N%Lo)JGw&yoAYvN^H!vddnn~`||Zdz_6Xj zrWc-ia(VH2Ubz3G=)B{ST-!Kqr_#(p<(`}}Gk5M0%3Gc^H6{0!OwE;=8x^54wVWqs zIWr}NX zw-&LR?k#5>+i2UoG<2$f<8srcRHu%Br>7~(WhP%=8RYj4(B&+D&yP+j()@g|c%S8n zvHztKquRD4?}Q6mvj(=Pe5=BPR8QUw`t3A!EL(+yd(MxwH7^ft4s`lDZ(}59g?=Ks z=OYh9+Q5Ffs2jk%KkFFeI10}23T zghFgxAj~>7EMaURd%EK|X=iA?+}g`0A=kelEiegN;T!n#;++0-pZ*wp8sfO15jmd%Gflha~!z1tGc*pV$*@~aJ)hE7~ zc;)5Vt;16jBv?6YX=%IT$M%H1Uu9-%8*g#zuHkj=mhRCH=a6{u&XxbT1|#f`OcCJV z+!Hs>qb)|#qfIz5J;%B()p3kwHNCMs6K1mu)P*)pfF~$#PoUD_5O*{_^u9t;WIUA; zMT!bY`dwAR> z=Xf}Gqrp(MsLp>tUw(eL&3pMLMt)=MVY8sn05p^3OjO%C?qMqZT$#A1EQI@VtM*k%MOeE9Kt zliFgFw~dbt|3Pw=>42Tup3|IQ>l?+Cs{B1Ch1AXI>Rk(u(X>9vSKIMMoN86@UZi5Iyj|eWy-r4}Pt`7f(4co734+7q?n_k%YLY2u zlW&g!%&i{_%p=3@t^qCtuG&Y6=!5yx3-LI$_v9HoffhjoV1Ykn+MjNTTVBJ!k^!f+#gu4)_L~q z1J9Swqb0ySc0u#10fR$Olo|ca$IrVuy|=_WjAB@vw4Vn5Hd zFCXr=kkJroW8YSsrq6A-ylE10+`17Km5%kfr(We=BCT&c-Xi4@(04|2T|PSTfUWFk z11JdvrNW$1N0uJBxv2(@FJANuRfc1qWE&4EST`xoN9--n+u5H84Tf2dZKiskc;`*+ z)LFMp+bbmg!X_U7H_m7EAeIf_^jU(^AT+q;`TB{MkwM99-hWsgw4U~NSI~8@`Yr{n zS&w0BQ~V98clOFoy;h^USgaRJl}7n<&|gwsEgXbJRHt?Y?OQN`2@x((54`614bqAf z6X@Z09lkN6+Li-ttR;Z5sjWf z^e;s`QW}S@a`lb8(Xc#fq63;l6vffvw1}NzWvSoomi;KHDp| zvZ;Lj7~6@Qln%jx-e#bfw=(;~;*XtuzV5N}o-WP(egOzWNgS+tFt0GkHCubrO$Y5Hec;+v!DbSz?4U zs1FORy?*T?7cVVeaXADe}mExdpFyTG^s>w9IE>M!VH z&-U_Bb1T*Vwd&}FJDy^@DM|kF5UKCi-TYm2aRFXWwgj&?RA}~dC2C?btD%0-*>Np# zA*hf4T&kAD+oDWqlnz5S`JYq?9O*46{#UB3G^ZddSMKvWXV-${y7)35i;K5ArT!>U z3)e5Ux9_dmKJa4qdW*x1aCJC-Hg%^%ob;;zJp6Px#j1K^dig!+#!WQC=G@&y8jcMtE9Fbu(dyw-S z)mqt*EVMD+{ys=CWZBF?N~~&dylzQh5AKu&W8B^2!ML?+lS^>v2Wul0-L|Q;qs7w{L-JAWX}0M89~QL*qF=ap7Dg0*{J`s0=FlasXr=F7TvFm#E_ z{X2j;qIr~s@r?HPRzNZv<2ob41HJ}r~l$)QUs^)u8Iw>R|-&XVKs|AXlk5&E%WtTMR; zjj-+9K(-wNx^~9EXLu5t>%QiC8qgRhao%%HXsH?S5AUI5NLY*G=1_<`75joNa^{Mjz^gckkE+VLGZr;5HSGZCbaz_oB2J zHuvFFR)}k8040Yok)<*89rgn2CJS@yDkAdqv zo|sIbz06lLCQ_mahpmq7XM5B9EqAf$x0^oto#;puxobgv&~s=kLp9~IF1n2xO=Rk5 znUO>f{;=qHS1_m1^&kp!44}Zap(|(|6viX&@4zAMKZa6lYsW$xwu8^=OpRu2rq%tZ z6B*v5w%uWWTlA5{7%r2PCv)O<>`pM;7-f$rebkzR2Wd{lFlL4C;1U`Y1i!$f=K% zHF%Uyz-QU4tx2l&V`@ZL=q7IMpDvd6@XTd)1n&AyQ!K-6d5Gk5*_MD^p`WNC`v;8g)^x9f|2q8x+!W@@Ha}A!T&h$KA0B?ip~vqTg{Wt{R}ED zn{V}Dg(@-J7MN{p>g3y`V(&i@HVq!5_it1v{>5;~82=GKnMtzuav&N@(qTjt?038( z-IzHF#ZwnncOzcv-lR!p>Eh{Onp-bnd{$jv@HqzAzaJi*Xm~c|4U^r`wcvy+_Yu!% zbx`(52+`NaVtRDR`{+10bRv7nKWbw9xPX?GQY<$Pr~buw9M)J%X-dk?*g;@vcf_7N7qbnGK|48L({yJ%H0aoA24%Yh&k=XDN# z+0MiHE$E16N<(*eDA!k0lF;lq6W}XI(a%w6QqV$*U;c9|kJCaXtGEE!pvN!IfB?U6 zC8}kbygs*&!pG`2#N<0unCiC|{5do?$5A`j zr*U~c9w8W9o6%r;L4#B`&s$&&A%|!N-e%mPqy%i7Vhb!X&Muxzrjd`k_1XOU6l0nJ zGSCa+Eq$2FX*I}{@Q6C>dYEl(Ja1;-+h!^}v{aAWDVd+2vzOlpgp%w~sVc@< z@(QcNTdF^?Ku8k~Mp%BQqY0DwO#FNeB0BW9njGc%h|Tbm{Pz$m`S6OdCfan4gYni}SLD6r?_D2P#zP&V zM3E7B+o`~feuu;Zvx*YnF7bW3Vu`Iag(VfR+wuUvB#gKYNzGTMj6#zCN_ud7HuwAL zGnpcQe_)Q<1Hg-Muf*e+Jc?YI>pHQ;x9)88H>*VxfQ<3_;f?mqUWIH!jmDFuti<*(vcP96*lo#HB{Z$fNkhRRPDh*rLz>rQ7x~#ujMI5^N6l7*5(t| zn7ri5loZ+Ukd-`mbaKyh8rRN4m6m>rm2Uk{1=2VhFt&-Uot z+^D9Bk_kR@*c)Be9Wwf&#s_i9aaQ(zD~ILTK8}DDwX{BB1Kbw>X}&GPC@}Qcd}=gf zdm#{*61x0{tv433Q#L1u=%;T2h*g<%o^vFwM;rSTlCjTpLfz&4C#ZQe`loR;8R&hp_g z)uwk~#)m%oQ~}q$Xp~}J)q&N?{oC_{x@?GoCj|=0X2h^Pjq05F`TPK?Proi-8_kJ& zV|<0c6mQ92|E#Or^zuSTp0?MMY&7?#(ml>gy@4aY1|-V+;w!faGO>( znf9VP*P#2|*U|HO(nM{(0J~6u*S{7UJ2e0spQX>^Ta*eTKKl}_GI|Mcu`@(phz6m% z1)#q7F-el~4&WD;hj`<~wItB<=+%$yff9dJCl^=9{#9B0@`4)E3`|M+2|YMB4y8D_ z1IwAuR&zbyo5GyCs!Du6`|Lu61_7qPr{ZZT(KPQXhPb7IWwb$ioWwBWcCXcN;L{3~ z3WFq-!C>zvLZKiL^9(IFq?GjCT&k+~;HC7AbwM2eq4##+4u@dp$+u$ezNQLr!wW z<2$9O`PH>1k!5&a?*~n_*OkAd-T$}fI{(hK3%;zpELDHoaEOY>v0C)H281ZtCOTik zKp^2>7G=(rlbdZC3U(%+%6eCxv}CvZS~29bzK6GC1zjI#M&IZr)koBpCH6h~mCG&u zN#Kl8XwuE;qPsjL5O>c&1-pBLdD;m+1)WD|J~`E&5)CzU`Md@hiFgjT`$b7?7fWCB za)y2`!_cPANgU57DuE0=*b6>*oMW=gY@qsw_TDheYvX10Kc?=urT#vcpg=fCdwnT$ z^j@aubg=)M?7e9J;Ga8BjDZ4eWus?zKq$06F4HYTNJIAAx%@c)00vN*bvr^=vr%A* z|AH=*!CLoix1B5e)8dvurZ7DA0Fh%h_MlehJ+itEQ3LB_%ImJWD` zHM%+B2O^D~)90xBSf=_M!7iu>eQ$Tj zvKR?u{G;qFL9iH>b)4m-dO71|fCP=V>$L5GcT`cc!0E4}S<=IX73 z)5RP7?EXV{Q+JM9cs4xtC-WZRKKHikK-bfe`9)Agh^t!Y?Z~JWI^?VvqnNx8-~T=H zR1G&pUvXe)*sqK_9nzUWmwtnH3$ASp>@N7W_@Xu!goQ)%)Q$?hd`i4v<;w%w?^K73 z)!SP-l%70kj2)N$JM)L3nUM8`^;pCGwaVH|Zr#ROs#L6+VqCrowJ8SezV`|!EnX&# zq>xhLmxZHA;zeHM(KExVTo!}}^ENLP)fQSHK(6ZwjJ+}lF^Io2c{ow#t-TkATM_xm z{JV~lx0|K-B_LL4ia8S8oO6r#v(lN3Bf-uY9`jXdH0A3poN}(8Li*1s!bDI1ts!WA z#V?JR-qm_hJSZ6hQOPM;!P~`NeO!MLyt$@(6U*5qlJlr$c0}rHbI2qn%_UdmtN7W= zv3)KzQvp6Q!N5TH-XHW4{Wq8XBn3u2eqsXp@vylG3kxL53z$tFtmX6sIeHyMY^z_guRPMuo1Dj^ z-k>I(L9_rW_6SWYpjHr}+f${$bV$JmS^Ii%ZD%^b|v6eK!_$|S_Q=_ zc$C`<%z@iFWwW9jbyVBVZmnFw61&FvPuP)S#DpSN3=#1nrtjH`Fh#*VhNM`&2Dcwn zmfKS310aUFDhmBi4#j1a``!PI5rxQ<2S595B6pN8BKEo@sc*F=J0<agoW>hcRxLEJJ+{S->LyV{c}L$RD-JecvjF^&Xg-y9q$3~+`< zJ`XL43Ua2xV^C-Rd%&l(ORwq(^f^Ob{}ktIp?V}Xti$HA=nnWvRVcS%7+Hqt)OALj`rhn=jFH1YbxML|s9k@g7H^6ll**7`~uk zIZvlABTC?TI|m8!{!_zQjiy2bfdS;Ic$MCzZ4J2YxZQrCuuWHouHj(dc1-jwFbHUuG0v(I3JkaP@}vPbqnCDFlM*maJEu<*GwFV`#f*+3V^xC zkx*rntRD15zy*r}(=L;TU`Z?Nx+=EFt7EENf6-D*XlSbZ=kI zlOPHKaYIUP2bEgVDTDdw=VjKa7`Ys^@;vrmQ^QovUIP(}Ze3wRYGilVIBK{{paDEb zCMI`a5C!^aOn#020@j{o9SSq0+!jVUNTj9CSWl>OMdF1!GXJZD1b#-WCm;CgPY~>N z`VtChu6>#L=es76vK2}S?dr@MIY1ppivj+~KH=p;5}0RxQ(TlX8tohRqFq-lh5K&s z!VriZQHQ?brDW%=SmAS=&ok~k&M;bStXD9?bBET@s@SG#5?TBcUI*9bsR33YQA z;Tm6~)Z0!M%C^bZd)Y&kl!`CZ6^pUwxcod_iFXRZOPT#*Gq~Ye$SLQ!TD~?4Vti%X zCx3;-g#+(Fg~ciRsSr8Imt*miWQ&XMOjWAx)M zE9VDR%@nV)dt3x(e@Cp<35(uQz$L*5N#%B)Gezdn_r}+nVH_L6kXEFyd_~VM&&>JI zXmCuWAGTUPIA&_^=|P8-LucZavJSI0yxOFU=CM%OE=}C2==$Fn>_HmFHkUf{PK(j{ z3qk5!S0H|^;II&7V)Q$NXS01koNoL|<3%w&F3-#?D;`TZ`|;^wcgkCSO;;t9#S>=A zoH1xmWFDLca+fgCJ>uxzo35l(XpX>EtkW3RWoCdH&Gz@?N#n&1Vbye0L+Q67jtTsu zQsS-PQld+oEh1Q*d4)0{!IWOQkgxsoB%Gnuv^ANw9jG);Smvb+dici$tNnc-te>yR zkbiM9Q+Aq=*6}M5Yl&rc$3#``Zg_1S7v&+|lm2nvMZD;vdar=^*0*3`PD+1Ru*S!o zmdhfPljtVBu|6Hup{t`0-hM|b8WCE?RD;ibO8ZoHRErZ0$bGE1pJLx;FD$359?u`&E+l2WDN}%7Zr<^lNT5XvW(w)@?%<@{9qbCtpz%(!>xHK^I#Bxj-ly9@(aza+?LMoeHt^~%7Hv*J6iKdM9a zYxN`ElJ4ENs4$QlsyWc?O1wp_c=y=Ln$XkMuix-%1JA`N5i4=VM!6(^k8!t>HqU$hOcJ0#=^}k5d z-yG$_PSRnK0SpbEGmGqQV7kV73alzZQ#AT!=9R1&Wx2PcGVON}`>||i?D@QjJ}{8> z;Iq%f4;}4gkscR_8%S^na7ku?Hs+H8rwa=&Mu}2H z8j7!iI3n(g?%_7sIL&$y)kfS|`MO;~Hb}f|h~;A#Ip>D-a?~w7DLn z|Egq5+lm|W{dK4fC21l?O*K*ymZf^8eX>%TtAZUC)K}J<%v0Wk>KJq)GD?u9{ z{3S9))p)I#2~y3GUAaViK0D(6()LdNZ5`_on@jKip`OoU$rpT&|De>RD-hf4pwc~p z(FK3maG?hOsCn0}?vy^2VZ>va2eD#5wZ;gCi2SHBQnpHe^mC*#d<~+biwsNY)c*cE z8$a3$v~-!?tisOXcF;M z>VM-6P9WlwI3fVGL;Yca0Xz}`lFzALpLTz|nqm_FvIbS5%H5qL-L8o71P0X`utN8$ zX+`+30uV~n4l&Vv+?DrZQK*MuVa${Bz2%;qz!kUfM9(MfYFXqh7m8pGN!i<|8VoY# zI)pgcWR1tjT`7ctfOJW=>sodY*#**<@>5jpAo=7DEj-t~g^iy!(cjXw*Vz~UF3 z-h0^fsdvJiJDsvgVo%3$K#uV!1JWfVLrXLTi8yzn4HSAF`M9T}%71Mu{nCirMXA$r z2*S|VV5}f*gtSKxW-JSi9iFG|Y>SIe9wO}BQn_yT2KksFLMe}huD^`*HS(WMKesj8iyezdBXnLWu%e8l z5EGV+JmrJ2mxfF45Kr&z`s(LJDm#7#Z&$c2^1#8Ob#dHofqf9(eeV0uc7^V_5MSGR zmt){%GM5Msu>u#HjnZt(`O`9P;@{`%>yZn_`D59C02`g6Naxs#wyi>L-Xx?2Y0m6q z$%t3Ul9zXX*GtY_)JljLaLF7`nk+hu$Pj^40=h=zzl)0tz%Q5L|D^Od2v34tYEZ9G ztvDwibj_Lfxv@&|{qZ_>$&e&tB@WwBss`yk;NBD9=oh1=@cS?e0FJtOvqcP?F=2Q1 zaG-7lFs035*A@)EMeVf&yhF4gC9$p$d@*zVY6sbpM`ivlWeeSE zc|=di0Jz>JN}Fo%3TI+LDtQ5MB`dzxJwr?QKx?xF2KrZ`aUI})#?^*J2-;JX!kuvn z7~f9_Z!q^fV>;y{;~I6_NDW=<=%Xt%*02yv(<@?hhV}gBlIsV>mEm*M;s#Zo$|;Xx zrLtB7W*w)kWL<0iusrO(n=Fj62kf7F^GwSgQsLeFD)Q4&vb;)sq`;vJhb~{g5Mb4OpC(7PMY%2)I$Q=Al32%hw zP7VG1;p{@`C(on=b9h!U%>SjW^w|577XgS!93h*TMvAhZW-ge=Pu!n?7?$`nYBRpw zsTj=8nArH>P2D(Z;x{CTDNnDM)MKG30LM`G40S!}!dY6oMOE$5V$Y!-*aCN_`|AHl zZE#k~2v{f?3zHs_eMo3kw$=WvZ>OyZF$yVhM#v3CGBP22@t!IVUY=~As-izET6@1TRYF-iiDeb8T;7{GhC2xVeilM9OAj2vXxY3A=4W+~#qX$7zwqKyQPx5LPAF^1vvyfIO>r@gN4Sskvjd-+NXg+=Umj2-hu795oiz5R=~ej`XmJ1J7mLQf+Q6x zzNOiW>#65!T<%k~xm}X_1akQW&E4Cy^Q>0yWc{3eajoj%Tmv>Vqw`|{`AoLZV}W6z zw?gL#hMMH6oCCR6C7-w!+;i6&aj|)(C=(5^E6P@qBm{w#hQc>an_B> zM!lJ&Bdx)u9SwHg%QC8!wdW0ucKpjpNZlKD>I$EP>+vuUxKc~X=EJFmE8aKbFjZ$ss`6P2yc zKOtYHdD5@_4ppN+A~(BU#akL0AM(~Gtof#UW}obr?e=j0-@iU&vAWOlv;8W6EK-k9c3RN18_0Rn96oL_m9S;t0hhjcRubpX_0gAC*L)A z^llWpO%~y1{%MSenu!DIh*usHA%?q*)O~|h>@A`)5P4BQ3#5MHjU1Y9sw8o%XHcvlVgrlFuT>$DLADIWfCGv`chts z|3w|`R(##{7es^#S~WuQQNegnj6Jq*t167py7&B$?b}mTc@09R4Ar`bbd{vqJRWl9 zoC@Z&AnU_28ZzI{;K8qow~z|vJ&xk3{yPS%z@h_VvY!^AW>$oB&oYO>m(;*#5qspY zB&Nz7!lSP#$a9P#LlJld$ff$6FH^Aip^h7XTcPXH9>c|>_#VQyp}1udSCLcdtGh3B z@m+a__%&pFrlNqLbp|v-(^FHy@A*zN?WKLoCgnDd{VZ<4{>I92Ml}0XZ3vLW z#UBO;IfI4ht?z%x!!j!|&KM(G8Qf1jAqTiPe?Mo@A4$AJmc<#(An#cfnE+P1|B#w4$u{FmF<@J8X2F zk`yNARzY2VJkqxUY11+l+qODQNv@@O^f*h^QDCu>w6#wRrGe8I~Qq#xEU@Rtg&*2 zcSy-g{9}yqJjs(tRSOarFc#2q3H;qJ@VeLK4~uY@KX^9oNEz5iVDM#G(r(kWP;)Ew z%LT=VtfR(L3~+w;T=xb5J&2>|t-`nAE);BESiZzKirYK;Q

N2CX!QVIUU!i!X) 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 T9ygX!{O6C. -"grepWin" is developed by Stefan Kung (https://tools.stefankueng.com/grepWin.html). +"grepWin" is developed by Stefan Küng (https://tools.stefankueng.com/grepWin.html). Original "grepWin" binaries and corresponding source code (according GPL to v3.0) can be retrived at folowing location https://github.com/stefankueng/grepWin/releases/. diff --git a/np3portableapp/Notepad3Portable/App/Notepad3/Docs/Readme.txt b/np3portableapp/Notepad3Portable/App/Notepad3/Docs/Readme.txt index 3a6269b2a9..30944c723b 100644 --- a/np3portableapp/Notepad3Portable/App/Notepad3/Docs/Readme.txt +++ b/np3portableapp/Notepad3Portable/App/Notepad3/Docs/Readme.txt @@ -70,6 +70,7 @@ Development: Contributors: ------------- Derick Payne (© Rizonesoft) https://rizonesoft.com +Pairi Daiza (MUI language support) https://github.com/hpwamr XhmikosR (Notepad2-mod) https://xhmikosr.github.io/notepad2-mod Kai Liu (CodeFolding) https://code.kliu.org/misc/notepad2 RL Vision (Bookmarks) https://www.rlvision.com/notepad2/about.php @@ -83,13 +84,16 @@ Some Icons by Pixel perfect (Flaticon) https://www.flaticon.com -------------------------------------------------------------------------------- Open Source / Libraries: ------------------------ -N.Hodgson (Scintilla) https://www.scintilla.org -K.Kosako (Oniguruma Regex) https://github.com/kkos/oniguruma -Stefan Küng (grepWin) https://github.com/stefankueng/grepWin -D.Dyer (NotepadCrypt) https://www.real-me.net/ddyer/notepad/NotepadCrypt.html -T.D.Hanson (uthash) https://troydhanson.github.io/uthash -Carbo Kuo (Mozilla's uchardet) https://www.freedesktop.org/wiki/Software/uchardet -Lewis Van Winkle (TinyExpr) https://github.com/codeplea/tinyexpr +Neil Hodgson (Scintilla) https://www.scintilla.org +Neil Hodgson (Lexilla) https://www.scintilla.org/Lexilla.html +Philip Hazel et al. (PCRE2 Regex) https://pcre2project.github.io/pcre2 +Stefan Küng (grepWin) https://github.com/stefankueng/grepWin +D.Dyer (NotepadCrypt) https://www.real-me.net/ddyer/notepad/NotepadCrypt.html +Brodie Thiesfield (SimpleIni) https://github.com/brofield/simpleini +T.D.Hanson (uthash) https://troydhanson.github.io/uthash +Carbo Kuo (Mozilla's uchardet) https://www.freedesktop.org/wiki/Software/uchardet +Lewis Van Winkle (TinyExpr) https://github.com/codeplea/tinyexpr +Carlo Pallini (Resample BMP) https://www.codeproject.com/Articles/22271/Plain-C-Resampling-DLL -------------------------------------------------------------------------------- Acknowledgments: @@ -97,10 +101,12 @@ Acknowledgments: alex-ilin https://github.com/alex-ilin alexantr https://github.com/alexantr ashish12phnx https://github.com/ashish12phnx +bovirus https://github.com/bovirus bravo-hero https://github.com/bravo-hero chuanliwen https://github.com/chuanliwen craigo- https://github.com/craigo- Crane70 https://github.com/Crane70 +en2sv https://github.com/en2sv engelhro https://github.com/engelhro Hexaae https://github.com/Hexaae hpwamr https://github.com/hpwamr @@ -122,6 +128,7 @@ MelchiorGaspar https://github.com/MelchiorGaspar Mitezuss https://github.com/Mitezuss nickreserved https://github.com/nickreserved np3fan https://github.com/np3fan +p0k33m0n https://github.com/p0k33m0n quadratz https://github.com/quadratz RaiKoHoff https://github.com/RaiKoHoff rizonesoft https://github.com/rizonesoft @@ -144,7 +151,7 @@ Data Sharing Service https://workupload.com Licences: --------- Scintilla https://www.scintilla.org/License.txt -Oniguruma Regex https://github.com/kkos/oniguruma/blob/master/COPYING +PCRE2 Regex https://github.com/PCRE2Project/pcre2/blob/main/LICENCE.md grepWin https://github.com/stefankueng/grepWin/blob/master/LICENSE uthash https://troydhanson.github.io/uthash/license.html uchardet https://www.freedesktop.org/wiki/Software/uchardet/#license diff --git a/np3portableapp/_buildname.txt b/np3portableapp/_buildname.txt index e16c76dff8..607e7f3983 100644 --- a/np3portableapp/_buildname.txt +++ b/np3portableapp/_buildname.txt @@ -1 +1 @@ -"" +"_beta" diff --git a/np3portableapp/build_np3portableapp.cmd b/np3portableapp/build_np3portableapp.cmd index 4793f885d6..76c6b8ddb6 100644 --- a/np3portableapp/build_np3portableapp.cmd +++ b/np3portableapp/build_np3portableapp.cmd @@ -8,7 +8,6 @@ chcp 65001 >nul 2>&1 :: :: This "build_np3portableapp.cmd" batch file creates: :: - "Notepad3Portable_x.xx.xxx.x_zzzz.paf.exe" -:: - "Notepad3Portable_x.xx.xxx.x_zzzz.paf.exe.7z" :: :: Usage: build_np3portableapp.cmd [PortableAppsDir] :: PortableAppsDir — optional path to the PortableApps platform root @@ -16,7 +15,7 @@ chcp 65001 >nul 2>&1 :: :: --------------------------------------------------------------------------------------------------- :: Based on PortableApps.com's Application_Template: -:: (https://sourceforge.net/projects/portableapps/files/PortableApps.com%20Template/PortableApps.com_Application_Template_3.9.0.zip) +:: (https://sourceforge.net/projects/portableapps/files/PortableApps.com%20Template/PortableApps.com_Application_Template_3.9.0.zip) :: --------------------------------------------------------------------------------------------------- :: :: Prerequisites: (portable) installation of: @@ -111,9 +110,6 @@ if not defined NP3_LANGUAGE_SET ( exit /b 1 ) -rem - We will rely on PortableApps Platform installed grepWinPortable -rem ~ call :RESOLVEPATH GREPWIN_DIR %SCRIPT_DIR%..\grepWin - call :RESOLVEPATH NP3_PORTAPP_DIR %SCRIPT_DIR%Notepad3Portable call :RESOLVEPATH NP3_PORTAPP_INFO %NP3_PORTAPP_DIR%\App\AppInfo\appinfo call :RESOLVEPATH NP3_PORTAPP_INSTALL %NP3_PORTAPP_DIR%\App\AppInfo\installer @@ -160,10 +156,6 @@ if exist "%NP3_PORTAPP_DIR%\App\Notepad3\x86\lng" rmdir "%NP3_PORTAPP_DIR%\App\N if exist "%NP3_PORTAPP_DIR%\App\Notepad3\x64\lng" rmdir "%NP3_PORTAPP_DIR%\App\Notepad3\x64\lng" /S /Q -rem - We will rely on PortableApps Platform installed grepWinPortable -rem ~ if exist "%NP3_PORTAPP_DIR%\App\Notepad3\x86\grepWin" rmdir "%NP3_PORTAPP_DIR%\App\Notepad3\x86\grepWin" /S /Q -rem ~if exist "%NP3_PORTAPP_DIR%\App\Notepad3\x64\grepWin" rmdir "%NP3_PORTAPP_DIR%\App\Notepad3\x64\grepWin" /S /Q - if not exist "%NP3_PORTAPP_DIR%\App\DefaultData\settings\" ( mkdir "%NP3_PORTAPP_DIR%\App\DefaultData\settings\" ) else ( @@ -246,21 +238,6 @@ for /d %%d in (%NP3_LANGUAGE_SET%) do ( copy /B "%NP3_X64_DIR%\lng\np3lng.dll" /B "%NP3_PORTAPP_DIR%\App\Notepad3\x64\lng\" /Y /V copy /B "%NP3_X64_DIR%\lng\mplng.dll" /B "%NP3_PORTAPP_DIR%\App\Notepad3\x64\lng\" /Y /V -:: Don't copy np3encrypt or grepWin -rem ~if not exist "%NP3_PORTAPP_DIR%\App\Notepad3\x86\grepWin\" mkdir "%NP3_PORTAPP_DIR%\App\Notepad3\x86\grepWin" -rem ~copy "%GREPWIN_DIR%\portables\grepWin-x86_portable.exe" "%NP3_PORTAPP_DIR%\App\Notepad3\x86\grepWin\grepWin-x86_portable.exe" /Y /V -rem ~copy "%GREPWIN_DIR%\portables\LICENSE.txt" "%NP3_PORTAPP_DIR%\App\Notepad3\x86\grepWin\LICENSE.txt" /Y /V -rem ~copy "%GREPWIN_DIR%\portables\website.url" "%NP3_PORTAPP_DIR%\App\Notepad3\x86\grepWin\website.url" /Y /V -rem ~copy "%GREPWIN_DIR%\translations\*.lang" "%NP3_PORTAPP_DIR%\App\Notepad3\x86\grepWin\*.lang" /Y /V -rem ~copy /B "%NP3_WIN32_DIR%\np3encrypt.exe" /B "%NP3_PORTAPP_DIR%\App\Notepad3\x86\" /Y /V -rem ~ -rem ~if not exist "%NP3_PORTAPP_DIR%\App\Notepad3\x64\grepWin\" mkdir "%NP3_PORTAPP_DIR%\App\Notepad3\x64\grepWin" -rem ~copy "%GREPWIN_DIR%\portables\grepWin-x64_portable.exe" "%NP3_PORTAPP_DIR%\App\Notepad3\x64\grepWin\grepWin-64_portable.exe" /Y /V -rem ~copy "%GREPWIN_DIR%\portables\LICENSE.txt" "%NP3_PORTAPP_DIR%\App\Notepad3\x64\grepWin\LICENSE.txt" /Y /V -rem ~copy "%GREPWIN_DIR%\portables\website.url" "%NP3_PORTAPP_DIR%\App\Notepad3\x64\grepWin\website.url" /Y /V -rem ~copy "%GREPWIN_DIR%\translations\*.lang" "%NP3_PORTAPP_DIR%\App\Notepad3\x64\grepWin\*.lang" /Y /V -rem ~copy /B "%NP3_X64_DIR%\np3encrypt.exe" /B "%NP3_PORTAPP_DIR%\App\Notepad3\x64\" /Y /V - :: --------------------------------------------------------------------------------------------------- :: Step 7: Process INI templates (appinfo.ini, installer.ini) :: --------------------------------------------------------------------------------------------------- @@ -324,14 +301,13 @@ if errorlevel 1 ( :: call %SCRIPT_DIR%Signing_for_NP3P_2nd_EXE.cmd :: --------------------------------------------------------------------------------------------------- -:: Step 11: Create .7z copy and report result +:: Step 11: report result :: --------------------------------------------------------------------------------------------------- echo. echo --- Step 11: Finalize --- set Notepad3Portable.paf.exe=%SCRIPT_DIR%Notepad3Portable_%VERSION%%DEVNAME%.paf.exe if exist %Notepad3Portable.paf.exe% ( - copy /B %Notepad3Portable.paf.exe% %Notepad3Portable.paf.exe%.7z /Y /V echo. echo === PortableApps Package Built Successfully! === echo Output: %Notepad3Portable.paf.exe% diff --git a/scintilla/win32/SciLexer.vcxproj b/scintilla/win32/SciLexer.vcxproj index fc12e80dc4..34e134fb97 100644 --- a/scintilla/win32/SciLexer.vcxproj +++ b/scintilla/win32/SciLexer.vcxproj @@ -119,11 +119,13 @@ - _DEBUG;%(PreprocessorDefinitions) + _WIN64;_DEBUG;%(PreprocessorDefinitions) stdcpp17 Default + MachineARM64 + false @@ -156,12 +158,14 @@ true true - NDEBUG;%(PreprocessorDefinitions) + _WIN64;NDEBUG;%(PreprocessorDefinitions) stdcpp17 true true + MachineARM64 + false @@ -182,4 +186,4 @@ - \ No newline at end of file + diff --git a/scintilla/win32/Scintilla.vcxproj b/scintilla/win32/Scintilla.vcxproj index 7b33211deb..038525342d 100644 --- a/scintilla/win32/Scintilla.vcxproj +++ b/scintilla/win32/Scintilla.vcxproj @@ -120,11 +120,13 @@ - _DEBUG;%(PreprocessorDefinitions) + _WIN64;_DEBUG;%(PreprocessorDefinitions) stdcpp17 Default + MachineARM64 + false @@ -157,12 +159,14 @@ true true - NDEBUG;%(PreprocessorDefinitions) + _WIN64;NDEBUG;%(PreprocessorDefinitions) stdcpp17 true true + MachineARM64 + false @@ -186,4 +190,4 @@ - \ No newline at end of file + diff --git a/src/Config/Config.cpp b/src/Config/Config.cpp index d89e24dcad..8c37674087 100644 --- a/src/Config/Config.cpp +++ b/src/Config/Config.cpp @@ -1325,7 +1325,13 @@ void LoadSettings() Defaults.RenderingTechnology = clampi(Defaults.RenderingTechnology, SC_TECHNOLOGY_DEFAULT, SC_TECHNOLOGY_DIRECTWRITEDC); } else { +#if defined(_M_ARM64) + // ARM64: use DirectWriteRetain to preserve back buffer between frames, + // avoiding flicker with Qualcomm Adreno GPUs and Win11 25H2 DWM compositor + Defaults.RenderingTechnology = SC_TECHNOLOGY_DIRECTWRITERETAIN; +#else Defaults.RenderingTechnology = SC_TECHNOLOGY_DIRECTWRITE; // new default DirectWrite (D2D) +#endif } // Settings2 EnableBidirectionalSupport deprecated diff --git a/src/DarkMode/ListViewUtil.hpp b/src/DarkMode/ListViewUtil.hpp index 9878c83f43..dfec7102bf 100644 --- a/src/DarkMode/ListViewUtil.hpp +++ b/src/DarkMode/ListViewUtil.hpp @@ -61,7 +61,7 @@ extern "C" void InitListView(HWND hListView) SendMessage(hHeader, WM_THEMECHANGED, wParam, lParam); - RedrawWindow(hWnd, nullptr, nullptr, RDW_ERASE | RDW_FRAME | RDW_INVALIDATE | RDW_INTERNALPAINT); + RedrawWindow(hWnd, nullptr, nullptr, RDW_FRAME | RDW_INVALIDATE | RDW_INTERNALPAINT); } } break; @@ -123,7 +123,7 @@ extern "C" void InitTreeView(HWND hTreeView) } CloseThemeData(hTheme); } - RedrawWindow(hWnd, nullptr, nullptr, RDW_ERASE | RDW_FRAME | RDW_INVALIDATE | RDW_INTERNALPAINT); + RedrawWindow(hWnd, nullptr, nullptr, RDW_FRAME | RDW_INVALIDATE | RDW_INTERNALPAINT); } } break; diff --git a/src/Notepad3.c b/src/Notepad3.c index 168e926423..01916a898d 100644 --- a/src/Notepad3.c +++ b/src/Notepad3.c @@ -81,7 +81,9 @@ LPCWSTR WordBookMarks[MARKER_NP3_BOOKMARK] = { CONSTANTS_T const Constants = { 2 // StdDefaultLexerID , L"minipath.exe" // FileBrowserMiniPath -#ifdef _WIN64 +#if defined(_M_ARM64) + , L"grepWin-x64_portable.exe" // FileSearchGrepWin (x64 via emulation on ARM64) +#elif defined(_WIN64) , L"grepWin-x64_portable.exe" // FileSearchGrepWin #else , L"grepWin-x86_portable.exe" // FileSearchGrepWin @@ -1818,7 +1820,11 @@ HWND InitInstance(const HINSTANCE hInstance, int nCmdShow) DWORD const dwStyle = ((WS_OVERLAPPEDWINDOW | WS_CLIPCHILDREN) & ~WS_VISIBLE); // | (g_IniWinInfo.max ? WS_MAXIMIZE : 0); HWND const hwndMain = CreateWindowEx( +#if defined(_M_ARM64) + WS_EX_ACCEPTFILES | WS_EX_COMPOSITED, // double-buffering reduces flicker on ARM64 +#else WS_EX_ACCEPTFILES, +#endif s_wchWndClass, _W(SAPPNAME), dwStyle, @@ -3593,6 +3599,9 @@ LRESULT MsgThemeChanged(HWND hwnd, WPARAM wParam,LPARAM lParam) if (Globals.hwndMain) { + // suppress intermediate redraws during heavy theme update to prevent flickering + SendMessage(hwnd, WM_SETREDRAW, FALSE, 0); + #ifdef D_NP3_WIN10_DARK_MODE RefreshTitleBarThemeColor(hwnd); #endif @@ -3622,6 +3631,10 @@ LRESULT MsgThemeChanged(HWND hwnd, WPARAM wParam,LPARAM lParam) EditUpdateVisibleIndicators(); UpdateUI(hwnd); + + // re-enable drawing and force a single + SendMessage(hwnd, WM_SETREDRAW, TRUE, 0); + RedrawWindow(hwnd, NULL, NULL, RDW_ERASE | RDW_FRAME | RDW_INVALIDATE | RDW_ALLCHILDREN); } UpdateWindowEx(hwnd); diff --git a/src/Notepad3.vcxproj b/src/Notepad3.vcxproj index 7b505f33bb..ce22703ded 100644 --- a/src/Notepad3.vcxproj +++ b/src/Notepad3.vcxproj @@ -426,6 +426,7 @@ false true clang_rt.asan-i386.lib + MachineARM64 @@ -853,6 +854,7 @@ true + MachineARM64 @@ -938,6 +940,7 @@ true + MachineARM64 @@ -1277,4 +1280,4 @@ - \ No newline at end of file + diff --git a/src/TypeDefs.h b/src/TypeDefs.h index 8c3a29cbd4..a9d789429e 100644 --- a/src/TypeDefs.h +++ b/src/TypeDefs.h @@ -65,6 +65,14 @@ // no Analyze warning "prefer: enum class" #pragma warning(disable : 26812) +// --- Platform Architecture Detection --- +// Use NP3_BUILD_ARM64 for ARM64-specific code paths +#if defined(_M_ARM64) +#define NP3_BUILD_ARM64 1 +#else +#define NP3_BUILD_ARM64 0 +#endif + /**************************************************/ /* Declared in WINNT.H */ /* */