From f30dca8342a034a36726ed0207146bf4da4389da Mon Sep 17 00:00:00 2001 From: Wayne Taylor Date: Sun, 8 Mar 2026 09:00:30 +0000 Subject: [PATCH 01/13] Add Copy as UNC path module Adds a new PowerToys utility that copies the UNC path of files and folders on mapped network drives to the clipboard via the shell context menu. When a user right-clicks a file on a mapped drive, the command resolves the drive letter to its full UNC path using WNetGetUniversalNameW and writes it to the clipboard. Components added: - CopyAsUNCLib: static lib with settings model and singleton - CopyAsUNCContextMenu: COM shell extension DLL (IExplorerCommand) registered via MSIX sparse package - CopyAsUNCExt: PowertoyModuleIface DLL loaded by the runner - Settings UI: Library types, ViewModel, XAML page, nav entry, localization strings, and serialization context registrations GPO support is stubbed (returns Unavailable) pending a formal GPO policy entry. Co-Authored-By: Claude Sonnet 4.6 --- PowerToys.slnx | 29 ++- src/common/ManagedCommon/ModuleType.cs | 1 + .../CopyAsUNCContextMenu/AppxManifest.xml | 58 +++++ .../Assets/CopyAsUNC/CopyAsUNC.ico | Bin 0 -> 173942 bytes .../Assets/CopyAsUNC/LargeTile.png | Bin 0 -> 1271 bytes .../Assets/CopyAsUNC/SmallTile.png | Bin 0 -> 3700 bytes .../Assets/CopyAsUNC/SplashScreen.png | Bin 0 -> 964 bytes .../Assets/CopyAsUNC/Square150x150Logo.png | Bin 0 -> 564 bytes .../Assets/CopyAsUNC/Square44x44Logo.png | Bin 0 -> 564 bytes .../Assets/CopyAsUNC/Wide310x150Logo.png | Bin 0 -> 564 bytes .../Assets/CopyAsUNC/storelogo.png | Bin 0 -> 780 bytes .../CopyAsUNCContextMenu.base.rc | 45 ++++ .../CopyAsUNCContextMenu.vcxproj | 160 +++++++++++++ .../CopyAsUNCContextMenu/Resources.resx | 68 ++++++ .../CopyAsUNC/CopyAsUNCContextMenu/Source.def | 5 + .../CopyAsUNCContextMenu/dllmain.cpp | 212 ++++++++++++++++++ .../CopyAsUNCContextMenu/framework.h | 5 + .../CopyAsUNCContextMenu/packages.config | 5 + .../CopyAsUNC/CopyAsUNCContextMenu/pch.cpp | 5 + .../CopyAsUNC/CopyAsUNCContextMenu/pch.h | 8 + .../CopyAsUNCContextMenu/resource.base.h | 12 + .../CopyAsUNCExt/CopyAsUNCExt.base.rc | 40 ++++ .../CopyAsUNCExt/CopyAsUNCExt.vcxproj | 114 ++++++++++ .../CopyAsUNCExt/PowerToysModule.cpp | 120 ++++++++++ .../CopyAsUNC/CopyAsUNCExt/Resources.resx | 10 + src/modules/CopyAsUNC/CopyAsUNCExt/dll.def | 3 + .../CopyAsUNC/CopyAsUNCExt/dllmain.cpp | 25 +++ src/modules/CopyAsUNC/CopyAsUNCExt/dllmain.h | 8 + .../CopyAsUNC/CopyAsUNCExt/packages.config | 4 + src/modules/CopyAsUNC/CopyAsUNCExt/pch.cpp | 3 + src/modules/CopyAsUNC/CopyAsUNCExt/pch.h | 11 + .../CopyAsUNC/CopyAsUNCExt/resource.base.h | 14 ++ .../CopyAsUNC/CopyAsUNCLib/Constants.h | 22 ++ .../CopyAsUNCLib/CopyAsUNCLib.vcxproj | 86 +++++++ .../CopyAsUNC/CopyAsUNCLib/Settings.cpp | 112 +++++++++ src/modules/CopyAsUNC/CopyAsUNCLib/Settings.h | 52 +++++ .../CopyAsUNC/CopyAsUNCLib/framework.h | 5 + .../CopyAsUNC/CopyAsUNCLib/packages.config | 4 + src/modules/CopyAsUNC/CopyAsUNCLib/pch.cpp | 5 + src/modules/CopyAsUNC/CopyAsUNCLib/pch.h | 9 + src/runner/main.cpp | 1 + src/runner/settings_window.cpp | 6 + src/runner/settings_window.h | 1 + .../CopyAsUNCLocalProperties.cs | 37 +++ .../CopyAsUNCProperties.cs | 22 ++ .../Settings.UI.Library/CopyAsUNCSettings.cs | 47 ++++ .../Settings.UI.Library/EnabledModules.cs | 16 ++ .../SettingsSerializationContext.cs | 3 + .../Settings.UI/Helpers/ModuleGpoHelper.cs | 2 + .../SourceGenerationContextContext.cs | 1 + .../Settings.UI/SettingsXAML/App.xaml.cs | 1 + .../SettingsXAML/Views/CopyAsUNCPage.xaml | 46 ++++ .../SettingsXAML/Views/CopyAsUNCPage.xaml.cs | 29 +++ .../SettingsXAML/Views/ShellPage.xaml | 6 + .../Settings.UI/Strings/en-us/Resources.resw | 32 +++ .../ViewModels/CopyAsUNCViewModel.cs | 137 +++++++++++ 56 files changed, 1632 insertions(+), 15 deletions(-) create mode 100644 src/modules/CopyAsUNC/CopyAsUNCContextMenu/AppxManifest.xml create mode 100644 src/modules/CopyAsUNC/CopyAsUNCContextMenu/Assets/CopyAsUNC/CopyAsUNC.ico create mode 100644 src/modules/CopyAsUNC/CopyAsUNCContextMenu/Assets/CopyAsUNC/LargeTile.png create mode 100644 src/modules/CopyAsUNC/CopyAsUNCContextMenu/Assets/CopyAsUNC/SmallTile.png create mode 100644 src/modules/CopyAsUNC/CopyAsUNCContextMenu/Assets/CopyAsUNC/SplashScreen.png create mode 100644 src/modules/CopyAsUNC/CopyAsUNCContextMenu/Assets/CopyAsUNC/Square150x150Logo.png create mode 100644 src/modules/CopyAsUNC/CopyAsUNCContextMenu/Assets/CopyAsUNC/Square44x44Logo.png create mode 100644 src/modules/CopyAsUNC/CopyAsUNCContextMenu/Assets/CopyAsUNC/Wide310x150Logo.png create mode 100644 src/modules/CopyAsUNC/CopyAsUNCContextMenu/Assets/CopyAsUNC/storelogo.png create mode 100644 src/modules/CopyAsUNC/CopyAsUNCContextMenu/CopyAsUNCContextMenu.base.rc create mode 100644 src/modules/CopyAsUNC/CopyAsUNCContextMenu/CopyAsUNCContextMenu.vcxproj create mode 100644 src/modules/CopyAsUNC/CopyAsUNCContextMenu/Resources.resx create mode 100644 src/modules/CopyAsUNC/CopyAsUNCContextMenu/Source.def create mode 100644 src/modules/CopyAsUNC/CopyAsUNCContextMenu/dllmain.cpp create mode 100644 src/modules/CopyAsUNC/CopyAsUNCContextMenu/framework.h create mode 100644 src/modules/CopyAsUNC/CopyAsUNCContextMenu/packages.config create mode 100644 src/modules/CopyAsUNC/CopyAsUNCContextMenu/pch.cpp create mode 100644 src/modules/CopyAsUNC/CopyAsUNCContextMenu/pch.h create mode 100644 src/modules/CopyAsUNC/CopyAsUNCContextMenu/resource.base.h create mode 100644 src/modules/CopyAsUNC/CopyAsUNCExt/CopyAsUNCExt.base.rc create mode 100644 src/modules/CopyAsUNC/CopyAsUNCExt/CopyAsUNCExt.vcxproj create mode 100644 src/modules/CopyAsUNC/CopyAsUNCExt/PowerToysModule.cpp create mode 100644 src/modules/CopyAsUNC/CopyAsUNCExt/Resources.resx create mode 100644 src/modules/CopyAsUNC/CopyAsUNCExt/dll.def create mode 100644 src/modules/CopyAsUNC/CopyAsUNCExt/dllmain.cpp create mode 100644 src/modules/CopyAsUNC/CopyAsUNCExt/dllmain.h create mode 100644 src/modules/CopyAsUNC/CopyAsUNCExt/packages.config create mode 100644 src/modules/CopyAsUNC/CopyAsUNCExt/pch.cpp create mode 100644 src/modules/CopyAsUNC/CopyAsUNCExt/pch.h create mode 100644 src/modules/CopyAsUNC/CopyAsUNCExt/resource.base.h create mode 100644 src/modules/CopyAsUNC/CopyAsUNCLib/Constants.h create mode 100644 src/modules/CopyAsUNC/CopyAsUNCLib/CopyAsUNCLib.vcxproj create mode 100644 src/modules/CopyAsUNC/CopyAsUNCLib/Settings.cpp create mode 100644 src/modules/CopyAsUNC/CopyAsUNCLib/Settings.h create mode 100644 src/modules/CopyAsUNC/CopyAsUNCLib/framework.h create mode 100644 src/modules/CopyAsUNC/CopyAsUNCLib/packages.config create mode 100644 src/modules/CopyAsUNC/CopyAsUNCLib/pch.cpp create mode 100644 src/modules/CopyAsUNC/CopyAsUNCLib/pch.h create mode 100644 src/settings-ui/Settings.UI.Library/CopyAsUNCLocalProperties.cs create mode 100644 src/settings-ui/Settings.UI.Library/CopyAsUNCProperties.cs create mode 100644 src/settings-ui/Settings.UI.Library/CopyAsUNCSettings.cs create mode 100644 src/settings-ui/Settings.UI/SettingsXAML/Views/CopyAsUNCPage.xaml create mode 100644 src/settings-ui/Settings.UI/SettingsXAML/Views/CopyAsUNCPage.xaml.cs create mode 100644 src/settings-ui/Settings.UI/ViewModels/CopyAsUNCViewModel.cs diff --git a/PowerToys.slnx b/PowerToys.slnx index 44b02db3fc77..fe1b75588f59 100644 --- a/PowerToys.slnx +++ b/PowerToys.slnx @@ -9,11 +9,11 @@ - + - + @@ -376,6 +376,11 @@ + + + + + @@ -427,7 +432,7 @@ - + @@ -438,7 +443,7 @@ - + @@ -464,13 +469,13 @@ - - - + - + + + @@ -713,13 +718,6 @@ - @@ -1069,6 +1067,7 @@ + diff --git a/src/common/ManagedCommon/ModuleType.cs b/src/common/ManagedCommon/ModuleType.cs index 548276f72520..20fc72b91f92 100644 --- a/src/common/ManagedCommon/ModuleType.cs +++ b/src/common/ManagedCommon/ModuleType.cs @@ -15,6 +15,7 @@ public enum ModuleType CursorWrap, EnvironmentVariables, FancyZones, + CopyAsUNC, FileLocksmith, FindMyMouse, Hosts, diff --git a/src/modules/CopyAsUNC/CopyAsUNCContextMenu/AppxManifest.xml b/src/modules/CopyAsUNC/CopyAsUNCContextMenu/AppxManifest.xml new file mode 100644 index 000000000000..f6c84dbe3b02 --- /dev/null +++ b/src/modules/CopyAsUNC/CopyAsUNCContextMenu/AppxManifest.xml @@ -0,0 +1,58 @@ + + + + + PowerToys Copy as UNC Context Menu + Microsoft + Assets\CopyAsUNC\storelogo.png + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/CopyAsUNC/CopyAsUNCContextMenu/Assets/CopyAsUNC/CopyAsUNC.ico b/src/modules/CopyAsUNC/CopyAsUNCContextMenu/Assets/CopyAsUNC/CopyAsUNC.ico new file mode 100644 index 0000000000000000000000000000000000000000..629b1190692a5a9f1bbf8024a3aebc62a5cdcaa8 GIT binary patch literal 173942 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 Sp)Y;_0000X1^@s6D=Y3@00009a7bBm000XU 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 KMNUMnLSTZ6DO+Cv literal 0 HcmV?d00001 diff --git a/src/modules/CopyAsUNC/CopyAsUNCContextMenu/CopyAsUNCContextMenu.base.rc b/src/modules/CopyAsUNC/CopyAsUNCContextMenu/CopyAsUNCContextMenu.base.rc new file mode 100644 index 000000000000..e152a05eff1c --- /dev/null +++ b/src/modules/CopyAsUNC/CopyAsUNCContextMenu/CopyAsUNCContextMenu.base.rc @@ -0,0 +1,45 @@ +#include +#include "Generated Files/resource.h" +#include "../../../common/version/version.h" + +#define APSTUDIO_READONLY_SYMBOLS +#include "winres.h" +#undef APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +// +// Version +// + +VS_VERSION_INFO VERSIONINFO + FILEVERSION FILE_VERSION + PRODUCTVERSION PRODUCT_VERSION + FILEFLAGSMASK 0x3fL +#ifdef _DEBUG + FILEFLAGS 0x1L +#else + FILEFLAGS 0x0L +#endif + FILEOS 0x40004L + FILETYPE 0x2L + FILESUBTYPE 0x0L +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "040904b0" + BEGIN + VALUE "CompanyName", COMPANY_NAME + VALUE "FileDescription", FILE_DESCRIPTION + VALUE "FileVersion", FILE_VERSION_STRING + VALUE "InternalName", INTERNAL_NAME + VALUE "LegalCopyright", COPYRIGHT_NOTE + VALUE "OriginalFilename", ORIGINAL_FILENAME + VALUE "ProductName", PRODUCT_NAME + VALUE "ProductVersion", PRODUCT_VERSION_STRING + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x409, 1200 + END +END diff --git a/src/modules/CopyAsUNC/CopyAsUNCContextMenu/CopyAsUNCContextMenu.vcxproj b/src/modules/CopyAsUNC/CopyAsUNCContextMenu/CopyAsUNCContextMenu.vcxproj new file mode 100644 index 000000000000..2fa0e411ac65 --- /dev/null +++ b/src/modules/CopyAsUNC/CopyAsUNCContextMenu/CopyAsUNCContextMenu.vcxproj @@ -0,0 +1,160 @@ + + + + + + + + + 17.0 + Win32Proj + {caa90eba-0776-4e3a-9d71-7e2c95a3c221} + CopyAsUNCContextMenu + + + PowerToys.CopyAsUNCContextMenu + + $(SolutionDir)$(Platform)\$(Configuration)\TemporaryBuild\obj\$(ProjectName)\ + $(RepoRoot)$(Platform)\$(Configuration)\WinUI3Apps\ + + + DynamicLibrary + true + Unicode + + + DynamicLibrary + false + true + Unicode + + + + + + + + + + + + + Level3 + true + WIN32;_DEBUG;COPYASUNCCONTEXTMENU_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) + true + ..;../../..; + + + Windows + true + false + runtimeobject.lib;Mpr.lib;%(AdditionalDependencies) + Source.def + + + del $(OutDir)\CopyAsUNCContextMenuPackage.msix /q +MakeAppx.exe pack /d . /p $(OutDir)CopyAsUNCContextMenuPackage.msix /nv + + + signtool sign /fd SHA256 /sha1 FEC796EDBEA46EEE1EDF32E2BA54899087B0960B "$(OutDir)CopyAsUNCContextMenuPackage.msix" + + + + + Level3 + true + true + true + WIN32;NDEBUG;COPYASUNCCONTEXTMENU_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) + true + ..;../../..; + + + Windows + true + true + true + false + runtimeobject.lib;Mpr.lib;%(AdditionalDependencies) + Source.def + + + del $(OutDir)\CopyAsUNCContextMenuPackage.msix /q +MakeAppx.exe pack /d . /p $(OutDir)CopyAsUNCContextMenuPackage.msix /nv + + + signtool sign /fd SHA256 /sha1 FEC796EDBEA46EEE1EDF32E2BA54899087B0960B "$(OutDir)CopyAsUNCContextMenuPackage.msix" + + + + + + + + + + + Create + + + + + + + + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + + + {6955446d-23f7-4023-9bb3-8657f904af99} + + + {cc6e41ac-8174-4e8a-8d22-85dd7f4851df} + + + {ddb485b8-e771-4b9e-a9b5-bff587daf5ab} + + + + + + + + + + + + + + This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. + + + + + + diff --git a/src/modules/CopyAsUNC/CopyAsUNCContextMenu/Resources.resx b/src/modules/CopyAsUNC/CopyAsUNCContextMenu/Resources.resx new file mode 100644 index 000000000000..eef647a09ec8 --- /dev/null +++ b/src/modules/CopyAsUNC/CopyAsUNCContextMenu/Resources.resx @@ -0,0 +1,68 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Copy as UNC path + This text will be shown when the user opens the context menu (right clicks) a file or folder on a mapped network drive. + + + Copy as UNC + + diff --git a/src/modules/CopyAsUNC/CopyAsUNCContextMenu/Source.def b/src/modules/CopyAsUNC/CopyAsUNCContextMenu/Source.def new file mode 100644 index 000000000000..05e3f386fcc5 --- /dev/null +++ b/src/modules/CopyAsUNC/CopyAsUNCContextMenu/Source.def @@ -0,0 +1,5 @@ +LIBRARY +EXPORTS +DllCanUnloadNow PRIVATE +DllGetClassObject PRIVATE +DllGetActivationFactory PRIVATE diff --git a/src/modules/CopyAsUNC/CopyAsUNCContextMenu/dllmain.cpp b/src/modules/CopyAsUNC/CopyAsUNCContextMenu/dllmain.cpp new file mode 100644 index 000000000000..36787ef0fbae --- /dev/null +++ b/src/modules/CopyAsUNC/CopyAsUNCContextMenu/dllmain.cpp @@ -0,0 +1,212 @@ +// dllmain.cpp : Defines the entry point for the DLL application. +#include "pch.h" + +#include +#include + +#include "CopyAsUNCLib/Settings.h" + +#include +#include +#include +#include +#include +#include + +#include "Generated Files/resource.h" + +#pragma comment(lib, "Mpr.lib") + +using namespace Microsoft::WRL; + +HINSTANCE g_hInst = 0; + +BOOL APIENTRY DllMain(HMODULE hModule, + DWORD ul_reason_for_call, + LPVOID lpReserved) +{ + switch (ul_reason_for_call) + { + case DLL_PROCESS_ATTACH: + g_hInst = hModule; + break; + case DLL_PROCESS_DETACH: + break; + } + return TRUE; +} + +class __declspec(uuid("89A22F51-9ED6-48FE-81FE-5DFD36F8CD32")) CopyAsUNCContextMenuCommand final + : public RuntimeClass, IExplorerCommand, IObjectWithSite> +{ +public: + virtual const wchar_t* Title() { return L"Copy as UNC path"; } + virtual const EXPCMDFLAGS Flags() { return ECF_DEFAULT; } + virtual const EXPCMDSTATE State(_In_opt_ IShellItemArray*) { return ECS_ENABLED; } + + // IExplorerCommand + IFACEMETHODIMP GetTitle(_In_opt_ IShellItemArray*, _Outptr_result_nullonfailure_ PWSTR* name) + { + return SHStrDup(L"Copy as UNC path", name); + } + + IFACEMETHODIMP GetIcon(_In_opt_ IShellItemArray*, _Outptr_result_nullonfailure_ PWSTR* icon) + { + std::wstring iconResourcePath = get_module_folderpath(g_hInst); + iconResourcePath += L"\\Assets\\CopyAsUNC\\"; + iconResourcePath += L"CopyAsUNC.ico"; + return SHStrDup(iconResourcePath.c_str(), icon); + } + + IFACEMETHODIMP GetToolTip(_In_opt_ IShellItemArray*, _Outptr_result_nullonfailure_ PWSTR* infoTip) + { + *infoTip = nullptr; + return E_NOTIMPL; + } + + IFACEMETHODIMP GetCanonicalName(_Out_ GUID* guidCommandName) + { + *guidCommandName = __uuidof(this); + return S_OK; + } + + IFACEMETHODIMP GetState(_In_opt_ IShellItemArray* selection, _In_ BOOL /*okToBeSlow*/, _Out_ EXPCMDSTATE* cmdState) + { + *cmdState = ECS_HIDDEN; + + if (!CopyAsUNCSettingsInstance().GetEnabled()) + return S_OK; + + if (CopyAsUNCSettingsInstance().GetShowInExtendedContextMenu()) + return S_OK; + + // Only show for items on mapped network drives + if (selection) + { + IShellItem* item = nullptr; + if (SUCCEEDED(selection->GetItemAt(0, &item))) + { + LPWSTR filePath = nullptr; + if (SUCCEEDED(item->GetDisplayName(SIGDN_FILESYSPATH, &filePath))) + { + // Check first 3 chars for drive root (e.g. "Z:\") + std::wstring root(filePath, min((size_t)3, wcslen(filePath))); + if (GetDriveTypeW(root.c_str()) == DRIVE_REMOTE) + { + *cmdState = ECS_ENABLED; + } + CoTaskMemFree(filePath); + } + item->Release(); + } + } + + return S_OK; + } + + IFACEMETHODIMP Invoke(_In_opt_ IShellItemArray* selection, _In_opt_ IBindCtx*) noexcept + { + if (!selection) + return S_OK; + + IShellItem* item = nullptr; + if (FAILED(selection->GetItemAt(0, &item))) + return S_OK; + + LPWSTR filePath = nullptr; + if (SUCCEEDED(item->GetDisplayName(SIGDN_FILESYSPATH, &filePath))) + { + std::wstring uncPath; + + // If already a UNC path, use it directly + if (wcslen(filePath) >= 2 && filePath[0] == L'\\' && filePath[1] == L'\\') + { + uncPath = filePath; + } + else + { + // Resolve mapped drive letter to UNC via WNetGetUniversalName + DWORD bufSize = MAX_PATH * 2; + std::vector buf(bufSize); + DWORD result = WNetGetUniversalNameW(filePath, UNIVERSAL_NAME_INFO_LEVEL, buf.data(), &bufSize); + + if (result == ERROR_MORE_DATA) + { + buf.resize(bufSize); + result = WNetGetUniversalNameW(filePath, UNIVERSAL_NAME_INFO_LEVEL, buf.data(), &bufSize); + } + + if (result == NO_ERROR) + { + auto info = reinterpret_cast(buf.data()); + uncPath = info->lpUniversalName; + } + } + + if (!uncPath.empty()) + { + if (OpenClipboard(nullptr)) + { + EmptyClipboard(); + size_t byteLen = (uncPath.size() + 1) * sizeof(wchar_t); + HGLOBAL hMem = GlobalAlloc(GMEM_MOVEABLE, byteLen); + if (hMem) + { + void* locked = GlobalLock(hMem); + memcpy(locked, uncPath.c_str(), byteLen); + GlobalUnlock(hMem); + SetClipboardData(CF_UNICODETEXT, hMem); + } + CloseClipboard(); + } + } + + CoTaskMemFree(filePath); + } + + item->Release(); + return S_OK; + } + + IFACEMETHODIMP GetFlags(_Out_ EXPCMDFLAGS* flags) + { + *flags = Flags(); + return S_OK; + } + + IFACEMETHODIMP EnumSubCommands(_COM_Outptr_ IEnumExplorerCommand** enumCommands) + { + *enumCommands = nullptr; + return E_NOTIMPL; + } + + // IObjectWithSite + IFACEMETHODIMP SetSite(_In_ IUnknown* site) noexcept + { + m_site = site; + return S_OK; + } + IFACEMETHODIMP GetSite(_In_ REFIID riid, _COM_Outptr_ void** site) noexcept { return m_site.CopyTo(riid, site); } + +protected: + ComPtr m_site; +}; + +CoCreatableClass(CopyAsUNCContextMenuCommand) +CoCreatableClassWrlCreatorMapInclude(CopyAsUNCContextMenuCommand) + + +STDAPI DllGetActivationFactory(_In_ HSTRING activatableClassId, _COM_Outptr_ IActivationFactory** factory) +{ + return Module::GetModule().GetActivationFactory(activatableClassId, factory); +} + +STDAPI DllCanUnloadNow() +{ + return Module::GetModule().GetObjectCount() == 0 ? S_OK : S_FALSE; +} + +STDAPI DllGetClassObject(_In_ REFCLSID rclsid, _In_ REFIID riid, _COM_Outptr_ void** instance) +{ + return Module::GetModule().GetClassObject(rclsid, riid, instance); +} diff --git a/src/modules/CopyAsUNC/CopyAsUNCContextMenu/framework.h b/src/modules/CopyAsUNC/CopyAsUNCContextMenu/framework.h new file mode 100644 index 000000000000..54b83e94fd33 --- /dev/null +++ b/src/modules/CopyAsUNC/CopyAsUNCContextMenu/framework.h @@ -0,0 +1,5 @@ +#pragma once + +#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers +// Windows Header Files +#include diff --git a/src/modules/CopyAsUNC/CopyAsUNCContextMenu/packages.config b/src/modules/CopyAsUNC/CopyAsUNCContextMenu/packages.config new file mode 100644 index 000000000000..d63e76b1f5ad --- /dev/null +++ b/src/modules/CopyAsUNC/CopyAsUNCContextMenu/packages.config @@ -0,0 +1,5 @@ + + + + + diff --git a/src/modules/CopyAsUNC/CopyAsUNCContextMenu/pch.cpp b/src/modules/CopyAsUNC/CopyAsUNCContextMenu/pch.cpp new file mode 100644 index 000000000000..64b7eef6d6b9 --- /dev/null +++ b/src/modules/CopyAsUNC/CopyAsUNCContextMenu/pch.cpp @@ -0,0 +1,5 @@ +// pch.cpp: source file corresponding to the pre-compiled header + +#include "pch.h" + +// When you are using pre-compiled headers, this source file is necessary for compilation to succeed. diff --git a/src/modules/CopyAsUNC/CopyAsUNCContextMenu/pch.h b/src/modules/CopyAsUNC/CopyAsUNCContextMenu/pch.h new file mode 100644 index 000000000000..b6161e34cc0d --- /dev/null +++ b/src/modules/CopyAsUNC/CopyAsUNCContextMenu/pch.h @@ -0,0 +1,8 @@ +#ifndef PCH_H +#define PCH_H + +#include + +#include "framework.h" + +#endif //PCH_H diff --git a/src/modules/CopyAsUNC/CopyAsUNCContextMenu/resource.base.h b/src/modules/CopyAsUNC/CopyAsUNCContextMenu/resource.base.h new file mode 100644 index 000000000000..9ee60540dfc9 --- /dev/null +++ b/src/modules/CopyAsUNC/CopyAsUNCContextMenu/resource.base.h @@ -0,0 +1,12 @@ +//{{NO_DEPENDENCIES}} +// Microsoft Visual C++ generated include file. + +////////////////////////////// +// Non-localizable + +#define FILE_DESCRIPTION "PowerToys Copy as UNC Context Menu" +#define INTERNAL_NAME "PowerToys.CopyAsUNCContextMenu.dll" +#define ORIGINAL_FILENAME "PowerToys.CopyAsUNCContextMenu.dll" + +// Non-localizable +////////////////////////////// diff --git a/src/modules/CopyAsUNC/CopyAsUNCExt/CopyAsUNCExt.base.rc b/src/modules/CopyAsUNC/CopyAsUNCExt/CopyAsUNCExt.base.rc new file mode 100644 index 000000000000..17500550d6b4 --- /dev/null +++ b/src/modules/CopyAsUNC/CopyAsUNCExt/CopyAsUNCExt.base.rc @@ -0,0 +1,40 @@ +#include +#include "Generated Files/resource.h" +#include "../../../common/version/version.h" + +#define APSTUDIO_READONLY_SYMBOLS +#include "winres.h" +#undef APSTUDIO_READONLY_SYMBOLS + +VS_VERSION_INFO VERSIONINFO + FILEVERSION FILE_VERSION + PRODUCTVERSION PRODUCT_VERSION + FILEFLAGSMASK 0x3fL +#ifdef _DEBUG + FILEFLAGS 0x1L +#else + FILEFLAGS 0x0L +#endif + FILEOS 0x40004L + FILETYPE 0x2L + FILESUBTYPE 0x0L +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "040904b0" + BEGIN + VALUE "CompanyName", COMPANY_NAME + VALUE "FileDescription", FILE_DESCRIPTION + VALUE "FileVersion", FILE_VERSION_STRING + VALUE "InternalName", INTERNAL_NAME + VALUE "LegalCopyright", COPYRIGHT_NOTE + VALUE "OriginalFilename", ORIGINAL_FILENAME + VALUE "ProductName", PRODUCT_NAME + VALUE "ProductVersion", PRODUCT_VERSION_STRING + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x409, 1200 + END +END diff --git a/src/modules/CopyAsUNC/CopyAsUNCExt/CopyAsUNCExt.vcxproj b/src/modules/CopyAsUNC/CopyAsUNCExt/CopyAsUNCExt.vcxproj new file mode 100644 index 000000000000..0e651a54053e --- /dev/null +++ b/src/modules/CopyAsUNC/CopyAsUNCExt/CopyAsUNCExt.vcxproj @@ -0,0 +1,114 @@ + + + + + + + + + 16.0 + Win32Proj + {7d462a53-6ec3-44eb-ae6f-b86ac892c9e3} + CopyAsUNCExt + $(RepoRoot)$(Platform)\$(Configuration)\WinUI3Apps\ + PowerToys.CopyAsUNCExt + + + DynamicLibrary + true + Unicode + + + DynamicLibrary + false + true + Unicode + + + + + + + + + + + + + Level3 + true + WIN32;_DEBUG;COPYASUNCEXT_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) + true + ..;../../;../../../;%(AdditionalIncludeDirectories) + + + Windows + true + false + dll.def + + + + + Level3 + true + true + true + WIN32;NDEBUG;COPYASUNCEXT_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) + true + ..;../../;../../../;%(AdditionalIncludeDirectories) + + + Windows + true + true + true + false + dll.def + + + + + + + + + + + + + + + + + + + + Create + + + + + + {d9b8fc84-322a-4f9f-bbb9-20915c47ddfd} + + + {6955446d-23f7-4023-9bb3-8657f904af99} + + + {ddb485b8-e771-4b9e-a9b5-bff587daf5ab} + + + + + + + + + + This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. + + + + + diff --git a/src/modules/CopyAsUNC/CopyAsUNCExt/PowerToysModule.cpp b/src/modules/CopyAsUNC/CopyAsUNCExt/PowerToysModule.cpp new file mode 100644 index 000000000000..8d801933d14d --- /dev/null +++ b/src/modules/CopyAsUNC/CopyAsUNCExt/PowerToysModule.cpp @@ -0,0 +1,120 @@ +#include "pch.h" + +#include +#include +#include +#include +#include +#include +#include + +#include "CopyAsUNCLib/Constants.h" +#include "CopyAsUNCLib/Settings.h" + +#include "dllmain.h" +#include "Generated Files/resource.h" + +class CopyAsUNCModule : public PowertoyModuleIface +{ +public: + CopyAsUNCModule() + { + LoggerHelpers::init_logger(constants::nonlocalizable::PowerToyName, L"ModuleInterface", "CopyAsUNC"); + init_settings(); + } + + virtual const wchar_t* get_name() override + { + static WCHAR buffer[128]; + LoadStringW(globals::instance, IDS_COPY_AS_UNC_POWERTOYNAME, buffer, ARRAYSIZE(buffer)); + return buffer; + } + + virtual const wchar_t* get_key() override + { + return constants::nonlocalizable::PowerToyKey; + } + + virtual powertoys_gpo::gpo_rule_configured_t gpo_policy_enabled_configuration() override + { + // TODO: Add GPO entry to gpo.h and replace with: + // return powertoys_gpo::getConfiguredCopyAsUNCEnabledValue(); + return powertoys_gpo::gpo_rule_configured_not_configured; + } + + virtual bool get_config(_Out_ PWSTR buffer, _Out_ int* buffer_size) override + { + HINSTANCE hinstance = reinterpret_cast(&__ImageBase); + PowerToysSettings::Settings settings(hinstance, get_name()); + settings.add_bool_toggle(L"bool_show_extended_menu", + L"", + CopyAsUNCSettingsInstance().GetShowInExtendedContextMenu()); + return settings.serialize_to_buffer(buffer, buffer_size); + } + + virtual void set_config(PCWSTR config) override + { + try + { + PowerToysSettings::PowerToyValues values = + PowerToysSettings::PowerToyValues::from_json_string(config, get_key()); + + auto extendedMenu = values.get_bool_value(L"bool_show_extended_menu"); + if (extendedMenu.has_value()) + { + CopyAsUNCSettingsInstance().SetExtendedContextMenuOnly(extendedMenu.value()); + CopyAsUNCSettingsInstance().Save(); + } + } + catch (std::exception& e) + { + Logger::error("Configuration parsing failed: {}", std::string{ e.what() }); + } + } + + virtual void enable() override + { + Logger::info(L"Copy as UNC enabled"); + + if (package::IsWin11OrGreater()) + { + std::wstring path = get_module_folderpath(globals::instance); + std::wstring packageUri = path + L"\\CopyAsUNCContextMenuPackage.msix"; + if (!package::IsPackageRegisteredWithPowerToysVersion(constants::nonlocalizable::ContextMenuPackageName)) + { + package::RegisterSparsePackage(path, packageUri); + } + } + + m_enabled = true; + } + + virtual void disable() override + { + Logger::info(L"Copy as UNC disabled"); + m_enabled = false; + } + + virtual bool is_enabled() override + { + return m_enabled; + } + + virtual void destroy() override + { + delete this; + } + +private: + bool m_enabled = false; + + void init_settings() + { + m_enabled = CopyAsUNCSettingsInstance().GetEnabled(); + } +}; + +extern "C" __declspec(dllexport) PowertoyModuleIface* __cdecl powertoy_create() +{ + return new CopyAsUNCModule(); +} diff --git a/src/modules/CopyAsUNC/CopyAsUNCExt/Resources.resx b/src/modules/CopyAsUNC/CopyAsUNCExt/Resources.resx new file mode 100644 index 000000000000..0f86156cf733 --- /dev/null +++ b/src/modules/CopyAsUNC/CopyAsUNCExt/Resources.resx @@ -0,0 +1,10 @@ + + + text/microsoft-resx + 2.0 + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + Copy as UNC + + diff --git a/src/modules/CopyAsUNC/CopyAsUNCExt/dll.def b/src/modules/CopyAsUNC/CopyAsUNCExt/dll.def new file mode 100644 index 000000000000..982a7f5abec3 --- /dev/null +++ b/src/modules/CopyAsUNC/CopyAsUNCExt/dll.def @@ -0,0 +1,3 @@ +LIBRARY +EXPORTS +powertoy_create diff --git a/src/modules/CopyAsUNC/CopyAsUNCExt/dllmain.cpp b/src/modules/CopyAsUNC/CopyAsUNCExt/dllmain.cpp new file mode 100644 index 000000000000..0ceff34bfee8 --- /dev/null +++ b/src/modules/CopyAsUNC/CopyAsUNCExt/dllmain.cpp @@ -0,0 +1,25 @@ +#include "pch.h" + +#pragma comment(lib, "shlwapi") + +#include "dllmain.h" + +namespace globals +{ + HMODULE instance; +} + +BOOL APIENTRY DllMain(HMODULE hModule, + DWORD ul_reason_for_call, + LPVOID /*lpReserved*/) +{ + switch (ul_reason_for_call) + { + case DLL_PROCESS_ATTACH: + globals::instance = hModule; + break; + case DLL_PROCESS_DETACH: + break; + } + return TRUE; +} diff --git a/src/modules/CopyAsUNC/CopyAsUNCExt/dllmain.h b/src/modules/CopyAsUNC/CopyAsUNCExt/dllmain.h new file mode 100644 index 000000000000..5d0e5528efe2 --- /dev/null +++ b/src/modules/CopyAsUNC/CopyAsUNCExt/dllmain.h @@ -0,0 +1,8 @@ +#pragma once + +#include "pch.h" + +namespace globals +{ + extern HMODULE instance; +} diff --git a/src/modules/CopyAsUNC/CopyAsUNCExt/packages.config b/src/modules/CopyAsUNC/CopyAsUNCExt/packages.config new file mode 100644 index 000000000000..97349a856f8f --- /dev/null +++ b/src/modules/CopyAsUNC/CopyAsUNCExt/packages.config @@ -0,0 +1,4 @@ + + + + diff --git a/src/modules/CopyAsUNC/CopyAsUNCExt/pch.cpp b/src/modules/CopyAsUNC/CopyAsUNCExt/pch.cpp new file mode 100644 index 000000000000..1a6a81e23883 --- /dev/null +++ b/src/modules/CopyAsUNC/CopyAsUNCExt/pch.cpp @@ -0,0 +1,3 @@ +// pch.cpp: source file corresponding to the pre-compiled header + +#include "pch.h" diff --git a/src/modules/CopyAsUNC/CopyAsUNCExt/pch.h b/src/modules/CopyAsUNC/CopyAsUNCExt/pch.h new file mode 100644 index 000000000000..bdfb1dd12f29 --- /dev/null +++ b/src/modules/CopyAsUNC/CopyAsUNCExt/pch.h @@ -0,0 +1,11 @@ +#pragma once + +#define WIN32_LEAN_AND_MEAN +#include +#include +#include +#include + +#include +#include +#include diff --git a/src/modules/CopyAsUNC/CopyAsUNCExt/resource.base.h b/src/modules/CopyAsUNC/CopyAsUNCExt/resource.base.h new file mode 100644 index 000000000000..f7869739b333 --- /dev/null +++ b/src/modules/CopyAsUNC/CopyAsUNCExt/resource.base.h @@ -0,0 +1,14 @@ +//{{NO_DEPENDENCIES}} +// Microsoft Visual C++ generated include file. + +////////////////////////////// +// Non-localizable + +#define IDS_COPY_AS_UNC_POWERTOYNAME 101 + +#define FILE_DESCRIPTION "PowerToys Copy as UNC Module Interface" +#define INTERNAL_NAME "PowerToys.CopyAsUNCExt.dll" +#define ORIGINAL_FILENAME "PowerToys.CopyAsUNCExt.dll" + +// Non-localizable +////////////////////////////// diff --git a/src/modules/CopyAsUNC/CopyAsUNCLib/Constants.h b/src/modules/CopyAsUNC/CopyAsUNCLib/Constants.h new file mode 100644 index 000000000000..0b321561670e --- /dev/null +++ b/src/modules/CopyAsUNC/CopyAsUNCLib/Constants.h @@ -0,0 +1,22 @@ +#pragma once + +#include "pch.h" + +// Non-localizable constants +namespace constants::nonlocalizable +{ + // String key used by PowerToys runner + constexpr WCHAR PowerToyKey[] = L"Copy as UNC"; + + // Nonlocalized name of this PowerToy, for logs, etc. + constexpr WCHAR PowerToyName[] = L"CopyAsUNC"; + + // JSON key used to store extended menu enabled + constexpr WCHAR JsonKeyShowInExtendedContextMenu[] = L"showInExtendedContextMenu"; + + // Path of the JSON file used to store settings + constexpr WCHAR DataFilePath[] = L"\\copy-as-unc-settings.json"; + + // Name of the tier 1 context menu package + constexpr WCHAR ContextMenuPackageName[] = L"CopyAsUNCContextMenu"; +} diff --git a/src/modules/CopyAsUNC/CopyAsUNCLib/CopyAsUNCLib.vcxproj b/src/modules/CopyAsUNC/CopyAsUNCLib/CopyAsUNCLib.vcxproj new file mode 100644 index 000000000000..de7b0ca2cbf7 --- /dev/null +++ b/src/modules/CopyAsUNC/CopyAsUNCLib/CopyAsUNCLib.vcxproj @@ -0,0 +1,86 @@ + + + + + + 17.0 + Win32Proj + {ddb485b8-e771-4b9e-a9b5-bff587daf5ab} + CopyAsUNCLib + 10.0 + + + StaticLibrary + true + Unicode + + + StaticLibrary + false + Unicode + + + + + + + + + + + + + Level3 + true + WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions) + true + ../../..; + + + true + + + + + Level3 + true + true + true + WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions) + true + ../../..; + + + true + true + true + + + + + + + + + + + + Create + + + + + + + + + + + + + This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. + + + + + diff --git a/src/modules/CopyAsUNC/CopyAsUNCLib/Settings.cpp b/src/modules/CopyAsUNC/CopyAsUNCLib/Settings.cpp new file mode 100644 index 000000000000..10d74476e0f2 --- /dev/null +++ b/src/modules/CopyAsUNC/CopyAsUNCLib/Settings.cpp @@ -0,0 +1,112 @@ +#include "pch.h" +#include "Settings.h" +#include "Constants.h" + +#include +#include +#include + +static bool LastModifiedTime(const std::wstring& filePath, FILETIME* lpFileTime) +{ + WIN32_FILE_ATTRIBUTE_DATA attr{}; + if (GetFileAttributesExW(filePath.c_str(), GetFileExInfoStandard, &attr)) + { + *lpFileTime = attr.ftLastWriteTime; + return true; + } + return false; +} + +CopyAsUNCSettings::CopyAsUNCSettings() +{ + generalJsonFilePath = PTSettingsHelper::get_powertoys_general_save_file_location(); + std::wstring savePath = PTSettingsHelper::get_module_save_folder_location(constants::nonlocalizable::PowerToyKey); + std::error_code ec; + + jsonFilePath = savePath + constants::nonlocalizable::DataFilePath; + RefreshEnabledState(); + Load(); +} + +void CopyAsUNCSettings::Save() +{ + json::JsonObject jsonData; + + jsonData.SetNamedValue(constants::nonlocalizable::JsonKeyShowInExtendedContextMenu, json::value(settings.showInExtendedContextMenu)); + + json::to_file(jsonFilePath, jsonData); + GetSystemTimeAsFileTime(&lastLoadedTime); +} + +void CopyAsUNCSettings::Load() +{ + if (!std::filesystem::exists(jsonFilePath)) + { + Save(); + } + else + { + ParseJson(); + } +} + +void CopyAsUNCSettings::RefreshEnabledState() +{ + FILETIME lastModifiedTime{}; + if (!(LastModifiedTime(generalJsonFilePath, &lastModifiedTime) && + CompareFileTime(&lastModifiedTime, &lastLoadedGeneralSettingsTime) == 1)) + return; + + lastLoadedGeneralSettingsTime = lastModifiedTime; + + auto json = json::from_file(generalJsonFilePath); + if (!json) + return; + + const json::JsonObject& jsonSettings = json.value(); + try + { + json::JsonObject modulesEnabledState; + json::get(jsonSettings, L"enabled", modulesEnabledState, json::JsonObject{}); + json::get(modulesEnabledState, L"Copy as UNC", settings.enabled, true); + } + catch (const winrt::hresult_error&) + { + } +} + +void CopyAsUNCSettings::Reload() +{ + FILETIME lastModifiedTime{}; + if (LastModifiedTime(jsonFilePath, &lastModifiedTime) && + CompareFileTime(&lastModifiedTime, &lastLoadedTime) == 1) + { + Load(); + } +} + +void CopyAsUNCSettings::ParseJson() +{ + auto json = json::from_file(jsonFilePath); + if (json) + { + const json::JsonObject& jsonSettings = json.value(); + try + { + if (json::has(jsonSettings, constants::nonlocalizable::JsonKeyShowInExtendedContextMenu, json::JsonValueType::Boolean)) + { + settings.showInExtendedContextMenu = jsonSettings.GetNamedBoolean(constants::nonlocalizable::JsonKeyShowInExtendedContextMenu); + } + } + catch (const winrt::hresult_error&) + { + } + } + GetSystemTimeAsFileTime(&lastLoadedTime); +} + +CopyAsUNCSettings& CopyAsUNCSettingsInstance() +{ + static CopyAsUNCSettings instance; + return instance; +} diff --git a/src/modules/CopyAsUNC/CopyAsUNCLib/Settings.h b/src/modules/CopyAsUNC/CopyAsUNCLib/Settings.h new file mode 100644 index 000000000000..757cbcb08f42 --- /dev/null +++ b/src/modules/CopyAsUNC/CopyAsUNCLib/Settings.h @@ -0,0 +1,52 @@ +#pragma once + +#include "pch.h" + +class CopyAsUNCSettings +{ +public: + CopyAsUNCSettings(); + + inline bool GetEnabled() + { + // TODO: Add GPO entry to src/common/utils/gpo.h and uncomment: + // auto gpoSetting = powertoys_gpo::getConfiguredCopyAsUNCEnabledValue(); + // if (gpoSetting == powertoys_gpo::gpo_rule_configured_enabled) return true; + // if (gpoSetting == powertoys_gpo::gpo_rule_configured_disabled) return false; + Reload(); + RefreshEnabledState(); + return settings.enabled; + } + + inline bool GetShowInExtendedContextMenu() const + { + return settings.showInExtendedContextMenu; + } + + inline void SetExtendedContextMenuOnly(bool extendedOnly) + { + settings.showInExtendedContextMenu = extendedOnly; + } + + void Save(); + void Load(); + +private: + struct Settings + { + bool enabled{ true }; + bool showInExtendedContextMenu{ false }; + }; + + void RefreshEnabledState(); + void Reload(); + void ParseJson(); + + Settings settings; + std::wstring generalJsonFilePath; + std::wstring jsonFilePath; + FILETIME lastLoadedTime{}; + FILETIME lastLoadedGeneralSettingsTime{}; +}; + +CopyAsUNCSettings& CopyAsUNCSettingsInstance(); diff --git a/src/modules/CopyAsUNC/CopyAsUNCLib/framework.h b/src/modules/CopyAsUNC/CopyAsUNCLib/framework.h new file mode 100644 index 000000000000..54b83e94fd33 --- /dev/null +++ b/src/modules/CopyAsUNC/CopyAsUNCLib/framework.h @@ -0,0 +1,5 @@ +#pragma once + +#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers +// Windows Header Files +#include diff --git a/src/modules/CopyAsUNC/CopyAsUNCLib/packages.config b/src/modules/CopyAsUNC/CopyAsUNCLib/packages.config new file mode 100644 index 000000000000..97349a856f8f --- /dev/null +++ b/src/modules/CopyAsUNC/CopyAsUNCLib/packages.config @@ -0,0 +1,4 @@ + + + + diff --git a/src/modules/CopyAsUNC/CopyAsUNCLib/pch.cpp b/src/modules/CopyAsUNC/CopyAsUNCLib/pch.cpp new file mode 100644 index 000000000000..64b7eef6d6b9 --- /dev/null +++ b/src/modules/CopyAsUNC/CopyAsUNCLib/pch.cpp @@ -0,0 +1,5 @@ +// pch.cpp: source file corresponding to the pre-compiled header + +#include "pch.h" + +// When you are using pre-compiled headers, this source file is necessary for compilation to succeed. diff --git a/src/modules/CopyAsUNC/CopyAsUNCLib/pch.h b/src/modules/CopyAsUNC/CopyAsUNCLib/pch.h new file mode 100644 index 000000000000..e012418d365d --- /dev/null +++ b/src/modules/CopyAsUNC/CopyAsUNCLib/pch.h @@ -0,0 +1,9 @@ +#ifndef PCH_H +#define PCH_H + +#include +#include + +#include "framework.h" + +#endif //PCH_H diff --git a/src/runner/main.cpp b/src/runner/main.cpp index 626bddc47f51..5cd0e400a759 100644 --- a/src/runner/main.cpp +++ b/src/runner/main.cpp @@ -286,6 +286,7 @@ int runner(bool isProcessElevated, bool openSettings, std::string settingsWindow L"PowerToys.CmdPalModuleInterface.dll", L"PowerToys.ZoomItModuleInterface.dll", L"PowerToys.LightSwitchModuleInterface.dll", + L"WinUI3Apps/PowerToys.CopyAsUNCExt.dll", // L"PowerToys.PowerDisplayModuleInterface.dll", // TEMPORARILY_DISABLED: PowerDisplay }; diff --git a/src/runner/settings_window.cpp b/src/runner/settings_window.cpp index 022ad9d76ce9..bba43b791ac2 100644 --- a/src/runner/settings_window.cpp +++ b/src/runner/settings_window.cpp @@ -807,6 +807,8 @@ std::string ESettingsWindowNames_to_string(ESettingsWindowNames value) return "ZoomIt"; case ESettingsWindowNames::PowerDisplay: return "PowerDisplay"; + case ESettingsWindowNames::CopyAsUNC: + return "CopyAsUNC"; default: { Logger::error(L"Can't convert ESettingsWindowNames value={} to string", static_cast(value)); @@ -950,6 +952,10 @@ ESettingsWindowNames ESettingsWindowNames_from_string(std::string value) { return ESettingsWindowNames::PowerDisplay; } + else if (value == "CopyAsUNC") + { + return ESettingsWindowNames::CopyAsUNC; + } else { Logger::error(L"Can't convert string value={} to ESettingsWindowNames", winrt::to_hstring(value)); diff --git a/src/runner/settings_window.h b/src/runner/settings_window.h index 4da4d70a7a36..21fbeb50bb18 100644 --- a/src/runner/settings_window.h +++ b/src/runner/settings_window.h @@ -37,6 +37,7 @@ enum class ESettingsWindowNames CmdPal, ZoomIt, PowerDisplay, + CopyAsUNC, }; std::string ESettingsWindowNames_to_string(ESettingsWindowNames value); diff --git a/src/settings-ui/Settings.UI.Library/CopyAsUNCLocalProperties.cs b/src/settings-ui/Settings.UI.Library/CopyAsUNCLocalProperties.cs new file mode 100644 index 000000000000..0b5a0270d7fa --- /dev/null +++ b/src/settings-ui/Settings.UI.Library/CopyAsUNCLocalProperties.cs @@ -0,0 +1,37 @@ +// Copyright (c) Microsoft Corporation +// The Microsoft Corporation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using System.Text.Json; +using System.Text.Json.Serialization; + +using Microsoft.PowerToys.Settings.UI.Library.Interfaces; + +namespace Microsoft.PowerToys.Settings.UI.Library +{ + public class CopyAsUNCLocalProperties : ISettingsConfig + { + public CopyAsUNCLocalProperties() + { + ExtendedContextMenuOnly = false; + } + + [JsonPropertyName("showInExtendedContextMenu")] + public bool ExtendedContextMenuOnly { get; set; } + + public string ToJsonString() + { + return JsonSerializer.Serialize(this, SettingsSerializationContext.Default.CopyAsUNCLocalProperties); + } + + public string GetModuleName() + { + return CopyAsUNCSettings.ModuleName; + } + + public bool UpgradeSettingsConfiguration() + { + return false; + } + } +} diff --git a/src/settings-ui/Settings.UI.Library/CopyAsUNCProperties.cs b/src/settings-ui/Settings.UI.Library/CopyAsUNCProperties.cs new file mode 100644 index 000000000000..d4b75b6d50b6 --- /dev/null +++ b/src/settings-ui/Settings.UI.Library/CopyAsUNCProperties.cs @@ -0,0 +1,22 @@ +// Copyright (c) Microsoft Corporation +// The Microsoft Corporation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using System.Text.Json; +using System.Text.Json.Serialization; + +namespace Microsoft.PowerToys.Settings.UI.Library +{ + public class CopyAsUNCProperties + { + public CopyAsUNCProperties() + { + ExtendedContextMenuOnly = new BoolProperty(false); + } + + [JsonPropertyName("bool_show_extended_menu")] + public BoolProperty ExtendedContextMenuOnly { get; set; } + + public override string ToString() => JsonSerializer.Serialize(this, SettingsSerializationContext.Default.CopyAsUNCProperties); + } +} diff --git a/src/settings-ui/Settings.UI.Library/CopyAsUNCSettings.cs b/src/settings-ui/Settings.UI.Library/CopyAsUNCSettings.cs new file mode 100644 index 000000000000..de91646d589a --- /dev/null +++ b/src/settings-ui/Settings.UI.Library/CopyAsUNCSettings.cs @@ -0,0 +1,47 @@ +// Copyright (c) Microsoft Corporation +// The Microsoft Corporation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using System; +using System.Text.Json.Serialization; + +using Microsoft.PowerToys.Settings.UI.Library.Interfaces; + +namespace Microsoft.PowerToys.Settings.UI.Library +{ + public class CopyAsUNCSettings : BasePTModuleSettings, ISettingsConfig + { + public const string ModuleName = "Copy as UNC"; + public const string ModuleVersion = "1"; + + [JsonPropertyName("properties")] + public CopyAsUNCProperties Properties { get; set; } + + public CopyAsUNCSettings() + { + Name = ModuleName; + Version = ModuleVersion; + Properties = new CopyAsUNCProperties(); + } + + public CopyAsUNCSettings(CopyAsUNCLocalProperties localProperties) + { + ArgumentNullException.ThrowIfNull(localProperties); + + Properties = new CopyAsUNCProperties(); + Properties.ExtendedContextMenuOnly.Value = localProperties.ExtendedContextMenuOnly; + Version = ModuleVersion; + Name = ModuleName; + } + + public string GetModuleName() + { + return Name; + } + + public bool UpgradeSettingsConfiguration() + { + return false; + } + } +} diff --git a/src/settings-ui/Settings.UI.Library/EnabledModules.cs b/src/settings-ui/Settings.UI.Library/EnabledModules.cs index f56176a1f0ce..9ae28a077e9e 100644 --- a/src/settings-ui/Settings.UI.Library/EnabledModules.cs +++ b/src/settings-ui/Settings.UI.Library/EnabledModules.cs @@ -366,6 +366,22 @@ public bool Hosts } } + private bool copyAsUNC = true; + + [JsonPropertyName("Copy as UNC")] + public bool CopyAsUNC + { + get => copyAsUNC; + set + { + if (copyAsUNC != value) + { + LogTelemetryEvent(value); + copyAsUNC = value; + } + } + } + private bool fileLocksmith = true; [JsonPropertyName("File Locksmith")] diff --git a/src/settings-ui/Settings.UI.Library/SettingsSerializationContext.cs b/src/settings-ui/Settings.UI.Library/SettingsSerializationContext.cs index 366f98cd8b79..af8828de4242 100644 --- a/src/settings-ui/Settings.UI.Library/SettingsSerializationContext.cs +++ b/src/settings-ui/Settings.UI.Library/SettingsSerializationContext.cs @@ -87,6 +87,9 @@ namespace Microsoft.PowerToys.Settings.UI.Library [JsonSerializable(typeof(CropAndLockProperties))] [JsonSerializable(typeof(CursorWrapProperties))] [JsonSerializable(typeof(EnvironmentVariablesProperties))] + [JsonSerializable(typeof(CopyAsUNCSettings))] + [JsonSerializable(typeof(CopyAsUNCProperties))] + [JsonSerializable(typeof(CopyAsUNCLocalProperties))] [JsonSerializable(typeof(FileLocksmithProperties))] [JsonSerializable(typeof(FileLocksmithLocalProperties))] [JsonSerializable(typeof(FindMyMouseProperties))] diff --git a/src/settings-ui/Settings.UI/Helpers/ModuleGpoHelper.cs b/src/settings-ui/Settings.UI/Helpers/ModuleGpoHelper.cs index 74c044db26dd..01810e56bd86 100644 --- a/src/settings-ui/Settings.UI/Helpers/ModuleGpoHelper.cs +++ b/src/settings-ui/Settings.UI/Helpers/ModuleGpoHelper.cs @@ -25,6 +25,7 @@ public static GpoRuleConfigured GetModuleGpoConfiguration(ModuleType moduleType) case ModuleType.CursorWrap: return GPOWrapper.GetConfiguredCursorWrapEnabledValue(); case ModuleType.EnvironmentVariables: return GPOWrapper.GetConfiguredEnvironmentVariablesEnabledValue(); case ModuleType.FancyZones: return GPOWrapper.GetConfiguredFancyZonesEnabledValue(); + case ModuleType.CopyAsUNC: return GpoRuleConfigured.Unavailable; case ModuleType.FileLocksmith: return GPOWrapper.GetConfiguredFileLocksmithEnabledValue(); case ModuleType.FindMyMouse: return GPOWrapper.GetConfiguredFindMyMouseEnabledValue(); case ModuleType.Hosts: return GPOWrapper.GetConfiguredHostsFileEditorEnabledValue(); @@ -65,6 +66,7 @@ public static System.Type GetModulePageType(ModuleType moduleType) ModuleType.LightSwitch => typeof(LightSwitchPage), ModuleType.EnvironmentVariables => typeof(EnvironmentVariablesPage), ModuleType.FancyZones => typeof(FancyZonesPage), + ModuleType.CopyAsUNC => typeof(CopyAsUNCPage), ModuleType.FileLocksmith => typeof(FileLocksmithPage), ModuleType.FindMyMouse => typeof(MouseUtilsPage), ModuleType.GeneralSettings => typeof(GeneralPage), diff --git a/src/settings-ui/Settings.UI/SerializationContext/SourceGenerationContextContext.cs b/src/settings-ui/Settings.UI/SerializationContext/SourceGenerationContextContext.cs index 9ad0af9d6849..e6692e39e0f9 100644 --- a/src/settings-ui/Settings.UI/SerializationContext/SourceGenerationContextContext.cs +++ b/src/settings-ui/Settings.UI/SerializationContext/SourceGenerationContextContext.cs @@ -20,6 +20,7 @@ namespace Microsoft.PowerToys.Settings.UI.SerializationContext; [JsonSerializable(typeof(CropAndLockSettings))] [JsonSerializable(typeof(CursorWrapSettings))] [JsonSerializable(typeof(Dictionary>))] +[JsonSerializable(typeof(CopyAsUNCSettings))] [JsonSerializable(typeof(FileLocksmithSettings))] [JsonSerializable(typeof(FindMyMouseSettings))] [JsonSerializable(typeof(IList))] diff --git a/src/settings-ui/Settings.UI/SettingsXAML/App.xaml.cs b/src/settings-ui/Settings.UI/SettingsXAML/App.xaml.cs index 151f8f3bdc0d..e98732e3312c 100644 --- a/src/settings-ui/Settings.UI/SettingsXAML/App.xaml.cs +++ b/src/settings-ui/Settings.UI/SettingsXAML/App.xaml.cs @@ -422,6 +422,7 @@ public static Type GetPage(string settingWindow) case "ColorPicker": return typeof(ColorPickerPage); case "LightSwitch": return typeof(LightSwitchPage); case "FancyZones": return typeof(FancyZonesPage); + case "CopyAsUNC": return typeof(CopyAsUNCPage); case "FileLocksmith": return typeof(FileLocksmithPage); case "Run": return typeof(PowerLauncherPage); case "ImageResizer": return typeof(ImageResizerPage); diff --git a/src/settings-ui/Settings.UI/SettingsXAML/Views/CopyAsUNCPage.xaml b/src/settings-ui/Settings.UI/SettingsXAML/Views/CopyAsUNCPage.xaml new file mode 100644 index 000000000000..6fcb7ec10e7b --- /dev/null +++ b/src/settings-ui/Settings.UI/SettingsXAML/Views/CopyAsUNCPage.xaml @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/settings-ui/Settings.UI/SettingsXAML/Views/CopyAsUNCPage.xaml.cs b/src/settings-ui/Settings.UI/SettingsXAML/Views/CopyAsUNCPage.xaml.cs new file mode 100644 index 000000000000..b576861dbb9d --- /dev/null +++ b/src/settings-ui/Settings.UI/SettingsXAML/Views/CopyAsUNCPage.xaml.cs @@ -0,0 +1,29 @@ +// Copyright (c) Microsoft Corporation +// The Microsoft Corporation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using Microsoft.PowerToys.Settings.UI.Helpers; +using Microsoft.PowerToys.Settings.UI.Library; +using Microsoft.PowerToys.Settings.UI.ViewModels; +using Microsoft.UI.Xaml.Controls; + +namespace Microsoft.PowerToys.Settings.UI.Views +{ + public sealed partial class CopyAsUNCPage : NavigablePage, IRefreshablePage + { + private CopyAsUNCViewModel ViewModel { get; set; } + + public CopyAsUNCPage() + { + var settingsUtils = SettingsUtils.Default; + ViewModel = new CopyAsUNCViewModel(settingsUtils, SettingsRepository.GetInstance(settingsUtils), ShellPage.SendDefaultIPCMessage); + DataContext = ViewModel; + InitializeComponent(); + } + + public void RefreshEnabledState() + { + ViewModel.RefreshEnabledState(); + } + } +} diff --git a/src/settings-ui/Settings.UI/SettingsXAML/Views/ShellPage.xaml b/src/settings-ui/Settings.UI/SettingsXAML/Views/ShellPage.xaml index 2b2274df7e3f..0f730007beb8 100644 --- a/src/settings-ui/Settings.UI/SettingsXAML/Views/ShellPage.xaml +++ b/src/settings-ui/Settings.UI/SettingsXAML/Views/ShellPage.xaml @@ -343,6 +343,12 @@ helpers:NavHelper.NavigateTo="views:PowerPreviewPage" AutomationProperties.AutomationId="PowerPreviewNavItem" Icon="{ui:BitmapIcon Source=/Assets/Settings/Icons/FileExplorerPreview.png}" /> + Press duration before showing taskbar icon shortcuts (ms) ms = milliseconds + + Copy as UNC path + Product name: do not loc + + + Copies a network path for files and folders on mapped drives to the clipboard as a UNC path (e.g. \\server\share\...). + {Locked="UNC"} + + + Copy as UNC path + Product name: Navigation view item name for Copy as UNC path + + + Copy as UNC path + Copy as UNC path is the name of the utility + + + Shell integration + This refers to directly integrating in with Windows + + + Show Copy as UNC path in + + + Default and extended context menu + + + Extended context menu only + + + Learn more about Copy as UNC path + A Windows shell extension to find out which processes are using the selected files and directories. {Locked="Windows"} diff --git a/src/settings-ui/Settings.UI/ViewModels/CopyAsUNCViewModel.cs b/src/settings-ui/Settings.UI/ViewModels/CopyAsUNCViewModel.cs new file mode 100644 index 000000000000..ec34e85106ba --- /dev/null +++ b/src/settings-ui/Settings.UI/ViewModels/CopyAsUNCViewModel.cs @@ -0,0 +1,137 @@ +// Copyright (c) Microsoft Corporation +// The Microsoft Corporation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using System; +using System.Globalization; +using System.Text.Json; + +using global::PowerToys.GPOWrapper; +using Microsoft.PowerToys.Settings.UI.Library; +using Microsoft.PowerToys.Settings.UI.Library.Helpers; +using Microsoft.PowerToys.Settings.UI.Library.Interfaces; +using Microsoft.PowerToys.Settings.UI.SerializationContext; + +namespace Microsoft.PowerToys.Settings.UI.ViewModels +{ + public partial class CopyAsUNCViewModel : Observable + { + private GeneralSettings GeneralSettingsConfig { get; set; } + + private readonly SettingsUtils _settingsUtils; + + private CopyAsUNCSettings Settings { get; set; } + + private const string ModuleName = CopyAsUNCSettings.ModuleName; + + private string _settingsConfigFileFolder = string.Empty; + + public CopyAsUNCViewModel(SettingsUtils settingsUtils, ISettingsRepository settingsRepository, Func ipcMSGCallBackFunc, string configFileSubfolder = "") + { + _settingsUtils = settingsUtils ?? throw new ArgumentNullException(nameof(settingsUtils)); + + ArgumentNullException.ThrowIfNull(settingsRepository); + + GeneralSettingsConfig = settingsRepository.SettingsConfig; + + try + { + CopyAsUNCLocalProperties localSettings = _settingsUtils.GetSettingsOrDefault(GetSettingsSubPath(), "copy-as-unc-settings.json"); + Settings = new CopyAsUNCSettings(localSettings); + } + catch (Exception) + { + CopyAsUNCLocalProperties localSettings = new CopyAsUNCLocalProperties(); + Settings = new CopyAsUNCSettings(localSettings); + _settingsUtils.SaveSettings(localSettings.ToJsonString(), GetSettingsSubPath(), "copy-as-unc-settings.json"); + } + + InitializeEnabledValue(); + + SendConfigMSG = ipcMSGCallBackFunc; + + _copyAsUNCEnabledOnContextExtendedMenu = Settings.Properties.ExtendedContextMenuOnly.Value; + } + + public string GetSettingsSubPath() + { + return _settingsConfigFileFolder + "\\" + ModuleName; + } + + private void InitializeEnabledValue() + { + // TODO: Replace with GPOWrapper.GetConfiguredCopyAsUNCEnabledValue() once GPO entry is added + _enabledGpoRuleConfiguration = GpoRuleConfigured.Unavailable; + _enabledStateIsGPOConfigured = false; + _isCopyAsUNCEnabled = GeneralSettingsConfig.Enabled.CopyAsUNC; + } + + public bool IsCopyAsUNCEnabled + { + get => _isCopyAsUNCEnabled; + set + { + if (_enabledStateIsGPOConfigured) + { + return; + } + + if (_isCopyAsUNCEnabled != value) + { + _isCopyAsUNCEnabled = value; + + GeneralSettingsConfig.Enabled.CopyAsUNC = value; + OnPropertyChanged(nameof(IsCopyAsUNCEnabled)); + + OutGoingGeneralSettings outgoing = new OutGoingGeneralSettings(GeneralSettingsConfig); + SendConfigMSG(outgoing.ToString()); + + NotifySettingsChanged(); + } + } + } + + public bool EnabledOnContextExtendedMenu + { + get => _copyAsUNCEnabledOnContextExtendedMenu; + set + { + if (value != _copyAsUNCEnabledOnContextExtendedMenu) + { + _copyAsUNCEnabledOnContextExtendedMenu = value; + Settings.Properties.ExtendedContextMenuOnly.Value = value; + OnPropertyChanged(nameof(EnabledOnContextExtendedMenu)); + NotifySettingsChanged(); + } + } + } + + public bool IsEnabledGpoConfigured + { + get => _enabledStateIsGPOConfigured; + } + + private void NotifySettingsChanged() + { + SendConfigMSG( + string.Format( + CultureInfo.InvariantCulture, + "{{ \"powertoys\": {{ \"{0}\": {1} }} }}", + CopyAsUNCSettings.ModuleName, + JsonSerializer.Serialize(Settings, SourceGenerationContextContext.Default.CopyAsUNCSettings))); + } + + private Func SendConfigMSG { get; } + + private GpoRuleConfigured _enabledGpoRuleConfiguration; + private bool _enabledStateIsGPOConfigured; + private bool _isCopyAsUNCEnabled; + private bool _copyAsUNCEnabledOnContextExtendedMenu; + + public void RefreshEnabledState() + { + InitializeEnabledValue(); + OnPropertyChanged(nameof(IsCopyAsUNCEnabled)); + } + } +} From cb78fa1a39498a0627ac46fda44f8320b839121c Mon Sep 17 00:00:00 2001 From: Wayne Taylor Date: Sun, 8 Mar 2026 09:20:57 +0000 Subject: [PATCH 02/13] Fix unused field compiler error in CopyAsUNCViewModel Remove _enabledGpoRuleConfiguration field that was assigned but never read (GPO is stubbed to Unavailable; no conditional logic reads the field). Co-Authored-By: Claude Sonnet 4.6 --- src/settings-ui/Settings.UI/ViewModels/CopyAsUNCViewModel.cs | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/settings-ui/Settings.UI/ViewModels/CopyAsUNCViewModel.cs b/src/settings-ui/Settings.UI/ViewModels/CopyAsUNCViewModel.cs index ec34e85106ba..2bcbf3633fdb 100644 --- a/src/settings-ui/Settings.UI/ViewModels/CopyAsUNCViewModel.cs +++ b/src/settings-ui/Settings.UI/ViewModels/CopyAsUNCViewModel.cs @@ -61,7 +61,6 @@ public string GetSettingsSubPath() private void InitializeEnabledValue() { // TODO: Replace with GPOWrapper.GetConfiguredCopyAsUNCEnabledValue() once GPO entry is added - _enabledGpoRuleConfiguration = GpoRuleConfigured.Unavailable; _enabledStateIsGPOConfigured = false; _isCopyAsUNCEnabled = GeneralSettingsConfig.Enabled.CopyAsUNC; } @@ -123,7 +122,6 @@ private void NotifySettingsChanged() private Func SendConfigMSG { get; } - private GpoRuleConfigured _enabledGpoRuleConfiguration; private bool _enabledStateIsGPOConfigured; private bool _isCopyAsUNCEnabled; private bool _copyAsUNCEnabledOnContextExtendedMenu; From 7bdfdbba5d879d7de3784dfc9a7bdc98d1b6e26a Mon Sep 17 00:00:00 2001 From: Wayne Taylor Date: Sun, 8 Mar 2026 09:33:04 +0000 Subject: [PATCH 03/13] Add CopyAsUNCContextMenu to installer uninstall cleanup Register CopyAsUNCContextMenu sparse package for removal during uninstall alongside the other context menu packages. The DLLs and MSIX are automatically included in the installer via the existing WinUI3ApplicationsFiles component group. Co-Authored-By: Claude Sonnet 4.6 --- installer/PowerToysSetupCustomActionsVNext/CustomAction.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/installer/PowerToysSetupCustomActionsVNext/CustomAction.cpp b/installer/PowerToysSetupCustomActionsVNext/CustomAction.cpp index 39786a16d886..9f7ca328cc22 100644 --- a/installer/PowerToysSetupCustomActionsVNext/CustomAction.cpp +++ b/installer/PowerToysSetupCustomActionsVNext/CustomAction.cpp @@ -1429,7 +1429,7 @@ UINT __stdcall UnRegisterContextMenuPackagesCA(MSIHANDLE hInstall) try { // Packages to unregister - const std::vector packagesToRemoveDisplayName{{L"PowerRenameContextMenu"}, {L"ImageResizerContextMenu"}, {L"FileLocksmithContextMenu"}, {L"NewPlusContextMenu"}}; + const std::vector packagesToRemoveDisplayName{{L"PowerRenameContextMenu"}, {L"ImageResizerContextMenu"}, {L"FileLocksmithContextMenu"}, {L"NewPlusContextMenu"}, {L"CopyAsUNCContextMenu"}}; for (auto const &package : packagesToRemoveDisplayName) { From 8661924f5c008f8a4709437af2ad17d8b4170ed0 Mon Sep 17 00:00:00 2001 From: Wayne Taylor Date: Sun, 8 Mar 2026 15:52:18 +0000 Subject: [PATCH 04/13] Rename 'Copy as UNC path' to 'Copy as UNC', add nav icon - Drop 'path' from all display strings for a cleaner, shorter name - Add CopyAsUNC.png to Assets/Settings/Icons/ so the navigation item shows the module icon Co-Authored-By: Claude Sonnet 4.6 --- .../Assets/Settings/Icons/CopyAsUNC.png | Bin 0 -> 27583 bytes .../Settings.UI/Strings/en-us/Resources.resw | 14 +++++++------- 2 files changed, 7 insertions(+), 7 deletions(-) create mode 100644 src/settings-ui/Settings.UI/Assets/Settings/Icons/CopyAsUNC.png diff --git a/src/settings-ui/Settings.UI/Assets/Settings/Icons/CopyAsUNC.png b/src/settings-ui/Settings.UI/Assets/Settings/Icons/CopyAsUNC.png new file mode 100644 index 0000000000000000000000000000000000000000..027ec353e8fc9166090779d715e81aaa7ef0343b GIT binary patch literal 27583 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 = milliseconds - Copy as UNC path + Copy as UNC Product name: do not loc @@ -3771,19 +3771,19 @@ Activate by holding the key for the character you want to add an accent to, then {Locked="UNC"} - Copy as UNC path - Product name: Navigation view item name for Copy as UNC path + Copy as UNC + Product name: Navigation view item name for Copy as UNC - Copy as UNC path - Copy as UNC path is the name of the utility + Copy as UNC + Copy as UNC is the name of the utility Shell integration This refers to directly integrating in with Windows - Show Copy as UNC path in + Show Copy as UNC in Default and extended context menu @@ -3792,7 +3792,7 @@ Activate by holding the key for the character you want to add an accent to, then Extended context menu only - Learn more about Copy as UNC path + Learn more about Copy as UNC A Windows shell extension to find out which processes are using the selected files and directories. From d5cf0cbccdb7a1b161b9f1f5c3f9a1d5af459e03 Mon Sep 17 00:00:00 2001 From: Wayne Taylor Date: Tue, 10 Mar 2026 17:23:29 +0000 Subject: [PATCH 05/13] Move Copy as UNC into File Explorer Add-ons page MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Per PowerToys team feedback, Copy as UNC is not a standalone utility. Instead, integrate it as a 'Shell Integration' section on the File Explorer Add-ons settings page. - Remove CopyAsUNCPage, CopyAsUNCViewModel, nav entry, module PNGs - Remove ModuleType.CopyAsUNC (no longer a top-level module type) - Add IsCopyAsUNCEnabled property to PowerPreviewViewModel, writing to GeneralSettings.Enabled.CopyAsUNC via OutGoingGeneralSettings IPC - Add 'Shell Integration' SettingsGroup to PowerPreviewPage.xaml with a toggle for Copy as UNC - Replace CopyAsUNC-specific resource strings with FileExplorerPreview_ShellIntegration and FileExplorerPreview_CopyAsUNC_Enable entries The C++ module, runner integration, and settings library types are unchanged — only the Settings UI surface is affected. Co-Authored-By: Claude Sonnet 4.6 --- src/common/ManagedCommon/ModuleType.cs | 1 - .../Assets/Settings/Icons/CopyAsUNC.png | Bin 27583 -> 0 bytes .../Settings.UI/Helpers/ModuleGpoHelper.cs | 2 - .../Settings.UI/SettingsXAML/App.xaml.cs | 1 - .../SettingsXAML/Views/CopyAsUNCPage.xaml | 46 ------ .../SettingsXAML/Views/CopyAsUNCPage.xaml.cs | 29 ---- .../SettingsXAML/Views/PowerPreviewPage.xaml | 10 ++ .../SettingsXAML/Views/ShellPage.xaml | 6 - .../Settings.UI/Strings/en-us/Resources.resw | 34 +---- .../ViewModels/CopyAsUNCViewModel.cs | 135 ------------------ .../ViewModels/PowerPreviewViewModel.cs | 21 +++ 11 files changed, 36 insertions(+), 249 deletions(-) delete mode 100644 src/settings-ui/Settings.UI/Assets/Settings/Icons/CopyAsUNC.png delete mode 100644 src/settings-ui/Settings.UI/SettingsXAML/Views/CopyAsUNCPage.xaml delete mode 100644 src/settings-ui/Settings.UI/SettingsXAML/Views/CopyAsUNCPage.xaml.cs delete mode 100644 src/settings-ui/Settings.UI/ViewModels/CopyAsUNCViewModel.cs diff --git a/src/common/ManagedCommon/ModuleType.cs b/src/common/ManagedCommon/ModuleType.cs index 20fc72b91f92..548276f72520 100644 --- a/src/common/ManagedCommon/ModuleType.cs +++ b/src/common/ManagedCommon/ModuleType.cs @@ -15,7 +15,6 @@ public enum ModuleType CursorWrap, EnvironmentVariables, FancyZones, - CopyAsUNC, FileLocksmith, FindMyMouse, Hosts, diff --git a/src/settings-ui/Settings.UI/Assets/Settings/Icons/CopyAsUNC.png b/src/settings-ui/Settings.UI/Assets/Settings/Icons/CopyAsUNC.png deleted file mode 100644 index 027ec353e8fc9166090779d715e81aaa7ef0343b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27583 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 typeof(LightSwitchPage), ModuleType.EnvironmentVariables => typeof(EnvironmentVariablesPage), ModuleType.FancyZones => typeof(FancyZonesPage), - ModuleType.CopyAsUNC => typeof(CopyAsUNCPage), ModuleType.FileLocksmith => typeof(FileLocksmithPage), ModuleType.FindMyMouse => typeof(MouseUtilsPage), ModuleType.GeneralSettings => typeof(GeneralPage), diff --git a/src/settings-ui/Settings.UI/SettingsXAML/App.xaml.cs b/src/settings-ui/Settings.UI/SettingsXAML/App.xaml.cs index e98732e3312c..151f8f3bdc0d 100644 --- a/src/settings-ui/Settings.UI/SettingsXAML/App.xaml.cs +++ b/src/settings-ui/Settings.UI/SettingsXAML/App.xaml.cs @@ -422,7 +422,6 @@ public static Type GetPage(string settingWindow) case "ColorPicker": return typeof(ColorPickerPage); case "LightSwitch": return typeof(LightSwitchPage); case "FancyZones": return typeof(FancyZonesPage); - case "CopyAsUNC": return typeof(CopyAsUNCPage); case "FileLocksmith": return typeof(FileLocksmithPage); case "Run": return typeof(PowerLauncherPage); case "ImageResizer": return typeof(ImageResizerPage); diff --git a/src/settings-ui/Settings.UI/SettingsXAML/Views/CopyAsUNCPage.xaml b/src/settings-ui/Settings.UI/SettingsXAML/Views/CopyAsUNCPage.xaml deleted file mode 100644 index 6fcb7ec10e7b..000000000000 --- a/src/settings-ui/Settings.UI/SettingsXAML/Views/CopyAsUNCPage.xaml +++ /dev/null @@ -1,46 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/settings-ui/Settings.UI/SettingsXAML/Views/CopyAsUNCPage.xaml.cs b/src/settings-ui/Settings.UI/SettingsXAML/Views/CopyAsUNCPage.xaml.cs deleted file mode 100644 index b576861dbb9d..000000000000 --- a/src/settings-ui/Settings.UI/SettingsXAML/Views/CopyAsUNCPage.xaml.cs +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright (c) Microsoft Corporation -// The Microsoft Corporation licenses this file to you under the MIT license. -// See the LICENSE file in the project root for more information. - -using Microsoft.PowerToys.Settings.UI.Helpers; -using Microsoft.PowerToys.Settings.UI.Library; -using Microsoft.PowerToys.Settings.UI.ViewModels; -using Microsoft.UI.Xaml.Controls; - -namespace Microsoft.PowerToys.Settings.UI.Views -{ - public sealed partial class CopyAsUNCPage : NavigablePage, IRefreshablePage - { - private CopyAsUNCViewModel ViewModel { get; set; } - - public CopyAsUNCPage() - { - var settingsUtils = SettingsUtils.Default; - ViewModel = new CopyAsUNCViewModel(settingsUtils, SettingsRepository.GetInstance(settingsUtils), ShellPage.SendDefaultIPCMessage); - DataContext = ViewModel; - InitializeComponent(); - } - - public void RefreshEnabledState() - { - ViewModel.RefreshEnabledState(); - } - } -} diff --git a/src/settings-ui/Settings.UI/SettingsXAML/Views/PowerPreviewPage.xaml b/src/settings-ui/Settings.UI/SettingsXAML/Views/PowerPreviewPage.xaml index 895dbd07825e..a2a01c12bae3 100644 --- a/src/settings-ui/Settings.UI/SettingsXAML/Views/PowerPreviewPage.xaml +++ b/src/settings-ui/Settings.UI/SettingsXAML/Views/PowerPreviewPage.xaml @@ -279,6 +279,16 @@ + + + + + diff --git a/src/settings-ui/Settings.UI/SettingsXAML/Views/ShellPage.xaml b/src/settings-ui/Settings.UI/SettingsXAML/Views/ShellPage.xaml index 0f730007beb8..2b2274df7e3f 100644 --- a/src/settings-ui/Settings.UI/SettingsXAML/Views/ShellPage.xaml +++ b/src/settings-ui/Settings.UI/SettingsXAML/Views/ShellPage.xaml @@ -343,12 +343,6 @@ helpers:NavHelper.NavigateTo="views:PowerPreviewPage" AutomationProperties.AutomationId="PowerPreviewNavItem" Icon="{ui:BitmapIcon Source=/Assets/Settings/Icons/FileExplorerPreview.png}" /> - Press duration before showing taskbar icon shortcuts (ms) ms = milliseconds - - Copy as UNC - Product name: do not loc - - - Copies a network path for files and folders on mapped drives to the clipboard as a UNC path (e.g. \\server\share\...). - {Locked="UNC"} - - - Copy as UNC - Product name: Navigation view item name for Copy as UNC - - - Copy as UNC - Copy as UNC is the name of the utility - - + Shell integration - This refers to directly integrating in with Windows - - - Show Copy as UNC in - - - Default and extended context menu + This refers to directly integrating in with the Windows shell - - Extended context menu only - - - Learn more about Copy as UNC + + Copy as UNC + Copy as UNC is the name of the utility; do not loc A Windows shell extension to find out which processes are using the selected files and directories. diff --git a/src/settings-ui/Settings.UI/ViewModels/CopyAsUNCViewModel.cs b/src/settings-ui/Settings.UI/ViewModels/CopyAsUNCViewModel.cs deleted file mode 100644 index 2bcbf3633fdb..000000000000 --- a/src/settings-ui/Settings.UI/ViewModels/CopyAsUNCViewModel.cs +++ /dev/null @@ -1,135 +0,0 @@ -// Copyright (c) Microsoft Corporation -// The Microsoft Corporation licenses this file to you under the MIT license. -// See the LICENSE file in the project root for more information. - -using System; -using System.Globalization; -using System.Text.Json; - -using global::PowerToys.GPOWrapper; -using Microsoft.PowerToys.Settings.UI.Library; -using Microsoft.PowerToys.Settings.UI.Library.Helpers; -using Microsoft.PowerToys.Settings.UI.Library.Interfaces; -using Microsoft.PowerToys.Settings.UI.SerializationContext; - -namespace Microsoft.PowerToys.Settings.UI.ViewModels -{ - public partial class CopyAsUNCViewModel : Observable - { - private GeneralSettings GeneralSettingsConfig { get; set; } - - private readonly SettingsUtils _settingsUtils; - - private CopyAsUNCSettings Settings { get; set; } - - private const string ModuleName = CopyAsUNCSettings.ModuleName; - - private string _settingsConfigFileFolder = string.Empty; - - public CopyAsUNCViewModel(SettingsUtils settingsUtils, ISettingsRepository settingsRepository, Func ipcMSGCallBackFunc, string configFileSubfolder = "") - { - _settingsUtils = settingsUtils ?? throw new ArgumentNullException(nameof(settingsUtils)); - - ArgumentNullException.ThrowIfNull(settingsRepository); - - GeneralSettingsConfig = settingsRepository.SettingsConfig; - - try - { - CopyAsUNCLocalProperties localSettings = _settingsUtils.GetSettingsOrDefault(GetSettingsSubPath(), "copy-as-unc-settings.json"); - Settings = new CopyAsUNCSettings(localSettings); - } - catch (Exception) - { - CopyAsUNCLocalProperties localSettings = new CopyAsUNCLocalProperties(); - Settings = new CopyAsUNCSettings(localSettings); - _settingsUtils.SaveSettings(localSettings.ToJsonString(), GetSettingsSubPath(), "copy-as-unc-settings.json"); - } - - InitializeEnabledValue(); - - SendConfigMSG = ipcMSGCallBackFunc; - - _copyAsUNCEnabledOnContextExtendedMenu = Settings.Properties.ExtendedContextMenuOnly.Value; - } - - public string GetSettingsSubPath() - { - return _settingsConfigFileFolder + "\\" + ModuleName; - } - - private void InitializeEnabledValue() - { - // TODO: Replace with GPOWrapper.GetConfiguredCopyAsUNCEnabledValue() once GPO entry is added - _enabledStateIsGPOConfigured = false; - _isCopyAsUNCEnabled = GeneralSettingsConfig.Enabled.CopyAsUNC; - } - - public bool IsCopyAsUNCEnabled - { - get => _isCopyAsUNCEnabled; - set - { - if (_enabledStateIsGPOConfigured) - { - return; - } - - if (_isCopyAsUNCEnabled != value) - { - _isCopyAsUNCEnabled = value; - - GeneralSettingsConfig.Enabled.CopyAsUNC = value; - OnPropertyChanged(nameof(IsCopyAsUNCEnabled)); - - OutGoingGeneralSettings outgoing = new OutGoingGeneralSettings(GeneralSettingsConfig); - SendConfigMSG(outgoing.ToString()); - - NotifySettingsChanged(); - } - } - } - - public bool EnabledOnContextExtendedMenu - { - get => _copyAsUNCEnabledOnContextExtendedMenu; - set - { - if (value != _copyAsUNCEnabledOnContextExtendedMenu) - { - _copyAsUNCEnabledOnContextExtendedMenu = value; - Settings.Properties.ExtendedContextMenuOnly.Value = value; - OnPropertyChanged(nameof(EnabledOnContextExtendedMenu)); - NotifySettingsChanged(); - } - } - } - - public bool IsEnabledGpoConfigured - { - get => _enabledStateIsGPOConfigured; - } - - private void NotifySettingsChanged() - { - SendConfigMSG( - string.Format( - CultureInfo.InvariantCulture, - "{{ \"powertoys\": {{ \"{0}\": {1} }} }}", - CopyAsUNCSettings.ModuleName, - JsonSerializer.Serialize(Settings, SourceGenerationContextContext.Default.CopyAsUNCSettings))); - } - - private Func SendConfigMSG { get; } - - private bool _enabledStateIsGPOConfigured; - private bool _isCopyAsUNCEnabled; - private bool _copyAsUNCEnabledOnContextExtendedMenu; - - public void RefreshEnabledState() - { - InitializeEnabledValue(); - OnPropertyChanged(nameof(IsCopyAsUNCEnabled)); - } - } -} diff --git a/src/settings-ui/Settings.UI/ViewModels/PowerPreviewViewModel.cs b/src/settings-ui/Settings.UI/ViewModels/PowerPreviewViewModel.cs index 75c22dd855b5..8b37c1c65e84 100644 --- a/src/settings-ui/Settings.UI/ViewModels/PowerPreviewViewModel.cs +++ b/src/settings-ui/Settings.UI/ViewModels/PowerPreviewViewModel.cs @@ -225,6 +225,8 @@ public PowerPreviewViewModel(ISettingsRepository moduleSet _stlThumbnailColor = Settings.Properties.StlThumbnailColor.Value; + _isCopyAsUNCEnabled = GeneralSettingsConfig.Enabled.CopyAsUNC; + _qoiThumbnailEnabledGpoRuleConfiguration = GPOWrapper.GetConfiguredQoiThumbnailsEnabledValue(); if (_qoiThumbnailEnabledGpoRuleConfiguration == GpoRuleConfigured.Disabled || _qoiThumbnailEnabledGpoRuleConfiguration == GpoRuleConfigured.Enabled) { @@ -1102,6 +1104,25 @@ public bool IsElevated } } + private bool _isCopyAsUNCEnabled; + + public bool IsCopyAsUNCEnabled + { + get => _isCopyAsUNCEnabled; + set + { + if (_isCopyAsUNCEnabled != value) + { + _isCopyAsUNCEnabled = value; + GeneralSettingsConfig.Enabled.CopyAsUNC = value; + OnPropertyChanged(nameof(IsCopyAsUNCEnabled)); + + OutGoingGeneralSettings outgoing = new OutGoingGeneralSettings(GeneralSettingsConfig); + SendConfigMSG(outgoing.ToString()); + } + } + } + private void RaisePropertyChanged([CallerMemberName] string propertyName = null) { // Notify UI of property change From 251ad50b0a28a2eb44d0276592984e5b3016b75f Mon Sep 17 00:00:00 2001 From: Wayne Taylor Date: Tue, 10 Mar 2026 17:43:37 +0000 Subject: [PATCH 06/13] Remove unused CopyAsUNC settings library types The CopyAsUNC module's enable/disable state is held in GeneralSettings, so no module-specific settings file or types are needed. Remove CopyAsUNCSettings, CopyAsUNCProperties, CopyAsUNCLocalProperties and their JsonSerializable registrations. Co-Authored-By: Claude Sonnet 4.6 --- .../CopyAsUNCLocalProperties.cs | 37 --------------- .../CopyAsUNCProperties.cs | 22 --------- .../Settings.UI.Library/CopyAsUNCSettings.cs | 47 ------------------- .../SettingsSerializationContext.cs | 3 -- .../SourceGenerationContextContext.cs | 1 - 5 files changed, 110 deletions(-) delete mode 100644 src/settings-ui/Settings.UI.Library/CopyAsUNCLocalProperties.cs delete mode 100644 src/settings-ui/Settings.UI.Library/CopyAsUNCProperties.cs delete mode 100644 src/settings-ui/Settings.UI.Library/CopyAsUNCSettings.cs diff --git a/src/settings-ui/Settings.UI.Library/CopyAsUNCLocalProperties.cs b/src/settings-ui/Settings.UI.Library/CopyAsUNCLocalProperties.cs deleted file mode 100644 index 0b5a0270d7fa..000000000000 --- a/src/settings-ui/Settings.UI.Library/CopyAsUNCLocalProperties.cs +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright (c) Microsoft Corporation -// The Microsoft Corporation licenses this file to you under the MIT license. -// See the LICENSE file in the project root for more information. - -using System.Text.Json; -using System.Text.Json.Serialization; - -using Microsoft.PowerToys.Settings.UI.Library.Interfaces; - -namespace Microsoft.PowerToys.Settings.UI.Library -{ - public class CopyAsUNCLocalProperties : ISettingsConfig - { - public CopyAsUNCLocalProperties() - { - ExtendedContextMenuOnly = false; - } - - [JsonPropertyName("showInExtendedContextMenu")] - public bool ExtendedContextMenuOnly { get; set; } - - public string ToJsonString() - { - return JsonSerializer.Serialize(this, SettingsSerializationContext.Default.CopyAsUNCLocalProperties); - } - - public string GetModuleName() - { - return CopyAsUNCSettings.ModuleName; - } - - public bool UpgradeSettingsConfiguration() - { - return false; - } - } -} diff --git a/src/settings-ui/Settings.UI.Library/CopyAsUNCProperties.cs b/src/settings-ui/Settings.UI.Library/CopyAsUNCProperties.cs deleted file mode 100644 index d4b75b6d50b6..000000000000 --- a/src/settings-ui/Settings.UI.Library/CopyAsUNCProperties.cs +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright (c) Microsoft Corporation -// The Microsoft Corporation licenses this file to you under the MIT license. -// See the LICENSE file in the project root for more information. - -using System.Text.Json; -using System.Text.Json.Serialization; - -namespace Microsoft.PowerToys.Settings.UI.Library -{ - public class CopyAsUNCProperties - { - public CopyAsUNCProperties() - { - ExtendedContextMenuOnly = new BoolProperty(false); - } - - [JsonPropertyName("bool_show_extended_menu")] - public BoolProperty ExtendedContextMenuOnly { get; set; } - - public override string ToString() => JsonSerializer.Serialize(this, SettingsSerializationContext.Default.CopyAsUNCProperties); - } -} diff --git a/src/settings-ui/Settings.UI.Library/CopyAsUNCSettings.cs b/src/settings-ui/Settings.UI.Library/CopyAsUNCSettings.cs deleted file mode 100644 index de91646d589a..000000000000 --- a/src/settings-ui/Settings.UI.Library/CopyAsUNCSettings.cs +++ /dev/null @@ -1,47 +0,0 @@ -// Copyright (c) Microsoft Corporation -// The Microsoft Corporation licenses this file to you under the MIT license. -// See the LICENSE file in the project root for more information. - -using System; -using System.Text.Json.Serialization; - -using Microsoft.PowerToys.Settings.UI.Library.Interfaces; - -namespace Microsoft.PowerToys.Settings.UI.Library -{ - public class CopyAsUNCSettings : BasePTModuleSettings, ISettingsConfig - { - public const string ModuleName = "Copy as UNC"; - public const string ModuleVersion = "1"; - - [JsonPropertyName("properties")] - public CopyAsUNCProperties Properties { get; set; } - - public CopyAsUNCSettings() - { - Name = ModuleName; - Version = ModuleVersion; - Properties = new CopyAsUNCProperties(); - } - - public CopyAsUNCSettings(CopyAsUNCLocalProperties localProperties) - { - ArgumentNullException.ThrowIfNull(localProperties); - - Properties = new CopyAsUNCProperties(); - Properties.ExtendedContextMenuOnly.Value = localProperties.ExtendedContextMenuOnly; - Version = ModuleVersion; - Name = ModuleName; - } - - public string GetModuleName() - { - return Name; - } - - public bool UpgradeSettingsConfiguration() - { - return false; - } - } -} diff --git a/src/settings-ui/Settings.UI.Library/SettingsSerializationContext.cs b/src/settings-ui/Settings.UI.Library/SettingsSerializationContext.cs index af8828de4242..366f98cd8b79 100644 --- a/src/settings-ui/Settings.UI.Library/SettingsSerializationContext.cs +++ b/src/settings-ui/Settings.UI.Library/SettingsSerializationContext.cs @@ -87,9 +87,6 @@ namespace Microsoft.PowerToys.Settings.UI.Library [JsonSerializable(typeof(CropAndLockProperties))] [JsonSerializable(typeof(CursorWrapProperties))] [JsonSerializable(typeof(EnvironmentVariablesProperties))] - [JsonSerializable(typeof(CopyAsUNCSettings))] - [JsonSerializable(typeof(CopyAsUNCProperties))] - [JsonSerializable(typeof(CopyAsUNCLocalProperties))] [JsonSerializable(typeof(FileLocksmithProperties))] [JsonSerializable(typeof(FileLocksmithLocalProperties))] [JsonSerializable(typeof(FindMyMouseProperties))] diff --git a/src/settings-ui/Settings.UI/SerializationContext/SourceGenerationContextContext.cs b/src/settings-ui/Settings.UI/SerializationContext/SourceGenerationContextContext.cs index e6692e39e0f9..9ad0af9d6849 100644 --- a/src/settings-ui/Settings.UI/SerializationContext/SourceGenerationContextContext.cs +++ b/src/settings-ui/Settings.UI/SerializationContext/SourceGenerationContextContext.cs @@ -20,7 +20,6 @@ namespace Microsoft.PowerToys.Settings.UI.SerializationContext; [JsonSerializable(typeof(CropAndLockSettings))] [JsonSerializable(typeof(CursorWrapSettings))] [JsonSerializable(typeof(Dictionary>))] -[JsonSerializable(typeof(CopyAsUNCSettings))] [JsonSerializable(typeof(FileLocksmithSettings))] [JsonSerializable(typeof(FindMyMouseSettings))] [JsonSerializable(typeof(IList))] From 51fada2e5b1f3fe4ccb2b6b616c4b2b562fca0f2 Mon Sep 17 00:00:00 2001 From: Wayne Taylor Date: Tue, 10 Mar 2026 17:54:20 +0000 Subject: [PATCH 07/13] Add icon to Copy as UNC context menu entry Convert SVG icon to multi-size ICO (16/32/48/256px) and wire up the post-build copy step so GetIcon() can locate it at runtime from WinUI3Apps\Assets\CopyAsUNC\CopyAsUNC.ico. Co-Authored-By: Claude Sonnet 4.6 --- .../Assets/CopyAsUNC/CopyAsUNC.ico | Bin 173942 -> 9846 bytes .../CopyAsUNCContextMenu.vcxproj | 8 ++++++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/modules/CopyAsUNC/CopyAsUNCContextMenu/Assets/CopyAsUNC/CopyAsUNC.ico b/src/modules/CopyAsUNC/CopyAsUNCContextMenu/Assets/CopyAsUNC/CopyAsUNC.ico index 629b1190692a5a9f1bbf8024a3aebc62a5cdcaa8..28cbf2ebb0da5635af62f633a061e71a6dcaa424 100644 GIT binary patch literal 9846 zcmcI~cQjqi*Z;xQ66Gq<#npQ!YLvJH(R&MmtILfN(OtcFu82+$Aqb*J578oOwCG*5 ztM~WjdA`5(TkBo#djEURTIbA}IeYe=nLT^Yp3fWrzyLr17!06O2vCaw07?J=Kp_9- z6R`l`5?v-B@NZrj8vvrw_uuO;{d-yf7`+DoQCb>L3GdOM-vB}tWvC81MRNqecsS@M z!_nOfbb|j%+1MQbaIOB{7~(z|vuGZ+Do}YnudJaIsb>oE;4rZ;%l01gD$yF1dt-Qy zWbQo}Xx^}bkweQt+`BqPP%J6!+9=2==Qjgdc|VUww;=iZ-+Gj!tCy6lV!`)2f?gEA zz3}urEf>7&EZ}(O@q-@t@McA27g{(iA%?q%FGt<(lm5^#7o!`eoe)vLs7q)i>{-P) z?7g$4KxEk=@rFJb7r-tnk8x8-wKHfOpW(=nGVspOu2_8|kqz9-|0RM^P#(DvrvET% z!AyJ9iO3X+b5wTX2?z>R}Oo@96|GU zJqhcygaV#ult!wPf%iO71HR^{q^%Qy;Z>{+ms;AU9Z9=B&@E5?qw$jko`V!gvJ)Le z@1Z!tq+W;Ui#B=O>pSDyQ5k^HgY+ys;f4*Z20%qo16uLKGWdVc83g?q@{i8keSD75 zng8gFs2c!?x-rtYiO~ASdh)N%c9AOfs0SkLg-K3GNK_?K zb>Py&vm&ZyoD=1#H2CUtECshr2_4|j5yyK%7Eq|d>6-t-S-K>v5YtCJ)z_wx44;k4 zJEfiLmv7?Y;)G*Z>mCL5@i8-sR^Y|Ob+{Mir~1GdX9(mHu*J#MJ}O)Kh#S@ACPWe8 zWptC}A8OfW-EY%XrLO~iZ?#C_wN?D_vIYt)UfR3*aXdL7$nZd8UT+6DWH`Y zd^VAn6OMz#Kxog1nf&vfdwu7tLIL-B6#E)hg=Sb+j6}l1TQEAOm3w|&3cqC%F)#6t zEBWDt1BGJh4h{E{8{qetc6hN++ug?m$9~PPu0+!G?(Qcwk*|w;8~M}PKI?%cb-VP5 zYk}onlcr@<3zO=rINx^}^pXL##6NMoY1UE*Rl&xfB8yEhsO`03rs|qx(Eri)xdmWZ z3I5c6kW6l?(qnyJ;6M`qSwFR9@UV)pr0YB1HKOB5v&?!$ojG>5)lJhO&e>cglpPvw zcdDt5OYwkU(ep*cE<&kxXu>FSnlgJTjbglkQlylXQ!Ryt;m^jUP>b`E6(0?t-|?HV zegl%IU@2o*+fh25W}zT<%`-!CSLkb%%T@e?7Aqp=(h)n^g%Al-!8li{HR(u1WS_{N z%;yhl?Z>cU;oW1muBnPri?+Qi1fo=@_I;zmh<-_xEGyUkdWx^yb z{HI^$x?_7+z7(0v<6i~tiWNu1m`0}ySfWkrf3rul*98Rru}4G9iwJb)KlVt$3IG(W z7%Dm}2LJ%N{Es~v2im9UQ?-skN6LAwu;mliJck=iWo==qarahqxPyJ?`Jcxqb|+qz zfH^-kJel!m-uP;&S~bT&LLx%e&&w3M^@kD^#yZ82CWwih;z8m-cGi7$;gaQB*Zlj- z+Sd;M#aBy>8-5E%Sw}e*`;;+h+Dg>0RFUMq)w%HSaK&#NeKu};sn}woqC?CDUwYnt zg?a=>Y7JV&Uhs}q8`P?E$fT+M)`VhxqfoyXkOPCx;<>SHY){s{MPiS*a|kn64LNSw~l$N z2b+{Un!cZ6iN?YUpUBnh&HU(#yVxOyr zD!F4uyb=nG@ zSVIwO-?`Ba%YHN{AUnkc<1_KDd8K!f&MZ1 zN}Ra0#hjIe4Z^M)VP*66tv{R4Y21L}mpIwgFs6}s{eG*2$n=HnM{~l=I5yd5ov=6d zgI1Y#e;TJmv@;ZoY^BSks#q+tIcY!4g@^T9eHVPCV*fROKjMI9mJwq2 z-k9a~NPjyYSi1XO?@RF;VfFs&O4qY|!JZNcvMkp(Dl|W1)65%=!+Llgc^z5ms?dB$ zA!A-iWj=))HU1gIQ^|7n5WhQY=Lo!AcGELG9vFc(&`P~h@yd8XH%75P z?rC)!OAWT~iKsBj=yqG3q+riVk|^_Bv?>jBr$~3`aoA{EC}QqW3y7KjK3?|lt}~WK zE7tC-_kq#)!2a4F+*qfuO53@`uwPZj)pSxVM?dRFj+*aDti=l^o;_J%^lSX~i#cCN zs5{DY9NHyQPDNixh`8r+7&KP6RI}Dz%o7lQ?#>m$9+qI|y0J;!XQh>6x*2BM$qgey zM4L*!D$*Q4mGba0=vusd9eZ^>p>m3R6*9=QhjRO2T7G*-YSLr zQTEoKbz`8lf}_bPCIrEYb#&>;0&%1z9BWpw)TGucL}~9U;so2sO`2lyrJ+0|2eTfBa~+Z!MjES`T-gCAqv`EWb!}$9v5a!jU{CEHhV! zSj?a~nPxsVV`#5nh$K<;q7zl+cX75xe~pcMWGPAYN|1hq;P067au6mGkRB9D5=4c! zRD`k}p7G~y+~3>Y*46hfYh5t;LJ=4`_M-(oCuO7-T8 zzsNjs`d#wnmWbpNdqFPgh!Rs%O5|QAHiL&2!5no@ardTAlyTH^rtLH%zxwD`V85k>~!;*$>$#N!@dM62&GKoMK#&RP-cD2ufF5s<3EZ} zv444`h7!L_PWtjI>U%LglMlf^xB7@S4;*ZTD$H#TJ(o05H}#zRY>!sts3P zo5$8DMO1y(OM!vP0_SyGSC5;>D3*^j4~OgJA_{PMosnir6TnC#q^-zl3NU|1n& zqS~vW$+?k4O4%~W#C=b*_d+(f)B0a%q_mZk*wK(YPVHcDub;dmV3MrUDW!V?RSk$4 z*IWrEmgL3p@$o6v=XzklWx;COHT6|0q-FXE6z(ChRnNHQ_I>ySJqlZ^!~nz^O?XN! z4=FI!9W2~wYHqgpd78jpu#$ZH`Nh+`Bd)Z584YP7xd>8Fhm;MLCe8DzRmGXfgy&V3 z9S@<$UY)WiH|j?cM*=_!z_gvLE{z|97+-H`&1Sf`0g>Iwb3)v<^#L|&Xsy7tttQv- zkGPYr_s`(L{T^|#d|AF^2o+^Ge4n-xCtqc4*4Ok_8~-*>RD+Ej_)hZs_iuhkfi5Wx zw%PB|1jd5B(B!)|vLgtPlFRu*jCZ5auvCvI@|rtxvlPksDQCc@l2De zj(3@3WZv!V;5Lq3CON);Zj{L8+l@RQ9J53&%L`aH#>Vp(Z?8Z z(O~R(s$nmH7u-e9{X@IdhXCQaDKxicdTXAwYBIx0k^?jWp&?y1;u`!ugD!P7DmggCXKo2P3#b zFay~(DD`b!;i?5g08x3i?wVoo#T&GZB`RP{3GKyXM6QdAxcR>$!nBmO!5oI6%3KWN z5>#eapvN^(L#$4>Z>w#>fHDT`eC=butTGfJun;NBUC3GwVJWyE!nQ0&ID86R-CWPC znxM2%_h#i+X1Un)BsurOF%1)w>K{3=CIFAz#J_ww>Olak5PcNH$+1tHio8Xx+I@ zkc8LMW2_7u263|aWgY@QD@$9uVmX{R7&zcJp+Io$r=KpceHEemT24vWwq;0%-~O?d z9<$wkTs2^2(}vgh*0m1>Pg{%VWocV`>Nh}))Vb4CHFW~d zTf<9`j@R`Hy`WZL2F=@BE-t}73V!%rb z=G7>4T?NlzZ^+R?YHrb3miXfg=;u%)LuJO=PuXDS&!{KkL$p0|fAFJtE01{Lac|EP z&cg#2M%fWdm3B+#szpM-l7RBx0lL#vi^{<1>x*6_55ppDYnwbOu7yCh!tweAWnJ3Z z@Fg-g+Ibd5&pKcapJzf*>|WyR^F4dRmt$I*OPreRK^LHfeUuM)mP7V>EiOMH9) z=o8$?45E8@w(G0|4Zq@LTYN;~Wlnv2=IP8mz->||Wq&nN;dn`=kb-T}D}^L{6Y<wZ472Yjp>9W&_@Q~QGD9n4MY9|P1;fnYI2}iPa7^Jk>oHrYb;JX^vFiR|a z#)K%qVHfbv$*&H4epDXfE>E5E-Z{~F?#O4I;v{L|?&%v>;UckU;9w5=`9-nq5~ zOocKF2cm_^fz~0~?F?P&ayu(#ur3DGVP9-=0Cs-)C?zp%&3B`GiL&16P4U{VI!@_X z=iJ>+V(<1!6l3d>?6=dB*iD{X-fxc!_dgjN{HdA@T!E&;Bh)czZp*6up3ij~hA7;T zU0#aU$WS&?0$bCQFENSk=M2}{%(@LF?QRG#XfdeMKWB)OI4E_V{=Gi7<=^7ehx*(< zDYozI>_vTB1V5LV##%IOeV@H*h%|%=9$D~URQbhoV@B6Nbif*o2(dW1H{!jFCVxHsj%(S;r@ZQ z1TPz2$Y!&*!T5-yFNOP2E+ol!s%<@wXSq+`mZb796syJTc6_`JNnZL^VZb@V`U_LQ z7h$m`X`i~3p!Avk<*}=yFTCqe(>8l>;W|G2W;VH1`ZB}hwz=AG45V;N3lp`R0cCdC zX6Y=jHbDEm^;cH!G^SD7`{Gd+ORvF=6adW22NNFuCCPbUG{x!gb4xcj_+!Ewo$!6t zDm+XSgOzz6lOa}ew5 zUoii0p_LgxGwJUYN13K>T$T?WhQe>06rEuzKL;dI?Jy25y&_%}^g1vpd2^4yp>GP* zb=e*li*njd`S7XysF~yq=gz0nlnYUF`8>1x2tNf?jEEh%(ntHtTmw>{Js&=5v^{m7 z<^}@d7E)|cS0RO=QZ2#qjg$x$+eAVO(!RQ-GP0`QqvoM~s(&7n7vHkkwM~v@23`dY ze>lu+!Ibx=MCimVtV!ahEwv4Jj@#CC=~&m-@h0rHzfV%FC*428sx%{fXHrn&W`QF1YaHrh_hSl_*=Z?Q61IUYYRserMO1jhbKO(!Ac+K-~j9 zkOxBRRF&BqR7GW4N`KR&XWd7v*%cEX{FEnrpg3Mq6P7_eev$duvUf z}-X;`jLEikt$o^g*TK=;DCl;E(DO%bf@pMeE zuX|JoY7wOx@S3#aPm_yx3FG7IQF27`nv{Q+Yt4ejGBHXy87o?Fdo0m2f7jb2LqdNT{KgX=L@aqQr^H$swP4gf<68Vnu7~ z5_=5?F`uc7cu@P0zju|#{t3)}?=mBf7whFX(I2i1=-x`wZ{M!ggroPBf#aT*{ix(} z+8_!800cWP$wyQkcp9%0JY8c_@od0C&u1+?>ha#vS;))@|tkrYYmJj~mvx zDQ_XldxeQWE%rr`8>lb@lytgWWZf7Z?mb7Qho=N;hb~eE#A));%2W;^7b!Ug_J?LF z!^nVCT+O|rjsx|%y-W)O8zkYKU-IrU>p+Pj7}$cee3^IgIe2?8#iS*4-9@dg!KM1H z6CdagasSCNjv8&)?OaX$fM3R$Q4;DdDof3O@hlu}fUJ)dC;NGjTePF+%qZX&&qL-* ztu2lL)_N#?k@Teeaw98id`$X~K{tGuS5Z1dbDPI+zygU}EQBuZ;m2bIiqlbFbF4Em z=AH=^B>wG?pLTAdu-|);qXWXqL*87r*EBj)x)rFam6!Y34i~$vORry`?zq&B@e^>) zc;Px7x`rD|r#-oc zK%gvt>a-Y{?-H|l>XA$>o3{2<9)3%b!6L{_`j!*lc@N!TdA&|TS;{b{b6UMPv8SX# zCjJFNDE!VLPdYYvS8QOdBQH#t?P<#=r)%Z~6z|YFD0PjHR~=`vA@x*&vmD5irh*pL zCZD~7I8^c&x7y9&%XbAjdW+`uUlrZx-Qxx@(IUuKmCy0X>J0+j7ZyzeUKyd_`XRpf zCZvcAeGQTM-ohzN%Ldu5u@Lxc7peWV4r4}rKlL{!6WhFlFAamfk_lbukHcUjq{;aG@ma^6o&$lu20j}Pyw z>Hz&D^_wv|N>QAOi*m82-0+BfaErsxNr}+76tWhnIXZs3&YcA89`*@i4S*%ogK5^H=``bb_ zlWjcbu5K~Eit6&KOC?XLANTO&de%Bd4<7~52MrGz_cXIUeB3_Ub)dI!Kyq>fICrhe zDx%$f_Nf^JU_>EM9zIncQP)sr+}IcV62nzJ`<(h0ucnc^v=!%Aem~0t0^CcQ&^UN7 z%2EsZVN(jDKIrco9;N^YEq(-o*A7O{4aE=$pn&cRIbkqB@RvXYO+cE88^R5&B83!0C^k`1lCAc94a$v;g#bZk?ax}Hf-$o!Hz)A>OIOu;W z5JXdWM?e5FG)3YYG{t`}NR;=kS{fGh6>zf;g`cbZsLQ+&7ou zl~Lk%sM@S45p>WoQTGBp_m-Ib2i`oby+Kr8J8)i|N`mm@Kw1yy-e!cKo$$h=1vxMD z8hh?WH305`XAy0?rklgB;L|7>m#-(hxztXiQz+Q;g~i`ri2zJ62HMNT!p|WKC^DA{ z4LVwOFaH7d+AlQL7jPzX*W?8;zt@?8NAS~%!-1CAAOMQi_R6^pcAH|W>#Q26G3SVv zVMcYaKdPm5X@h=heq6NO7aiE4wut^z3;C4}3VKsxVnpKghx9Jfw$3Rsh4vk^A7jjm z_SYmX)l|1kq`52{U~8}ZjU_dF6-{LN2f%o8P_#cxc1v5>7b5B03FR2>tam1@`t1iR zNO+@#guizDb#PO?H86npFC{7L!ta*~$20q6o4A}14{?KV295Sp;~}d&y%j7n@I!-e zN*`(r410`)gCTtB>x4%&+?lF${`>I_wmciZzTv;~C)7;CuVqP=Hz^eJ!$EGay)ZQC z5HrnrX204|9oYU?&goi58S}K~TQpAk6&+ae3X3hf6A~`S8Y>pTtN*c388`g}=J zH~U$Cb#~1#(6!()hFijth}Y)i_|`jG=$dk)j+a5~&Ga(qF(<5xyF%n`9YmEO#>#Y^kM92PSpUJXavh0&9<>u&Z^xW)$n0cu=JX(eq6mi%_JR}jtAu} z{V3PyK=0gAmv%Cx4@`@~e-}NUZr(GMF{w*_RCSXj`TN|i62$zn~BS`E*=6dKIDBAoM*qhzLc7W%85xW97+ z!!L|r-e2jsxC=911+4b!w6k12Z6OMcjCV~f;|^aq=8k{a#HG6rB)Ui1e~B@hFkz6r zE{>tcZ`aT8!9`>#K!1t%PvjS~$%9+El0HhyLv@8uz<>m-FPWA9o_qPO8DX%ceX{pR zfnu|y&Vvj*Kh0uuOh^fM*#1>n8Dca3G_^g2778y8YCA#VnQrVitz27%ZlXl z^f*#SBX{)fsic6n<<@8sKTE+-y!j~lAP)_2W_1lC6od{*0f{0sV7bmE8)ffoO`Sph z%6{=utpy~fF=Aq|!-YP=qiP=cR9OkfMdMi!Oh2=uN`UXw&|~um??y#8e=`M>9d~+~ zrld$A{v5zkNC7J4_$hEpfPYwHM@oT>mgY1D3lLFqx^YOCP=Vr#Wjgq^=L6C+X!s4u z7RU@(()|TJlj+>vUT0=j{3IC>L&I>q)gh(%+CV$r`d^%QCBMyVi1wWxS6aQqBQEA3 zVd-J_(Fq&`ra)Na54Y?HsEAbZYo;b1jFkbhH?)9+oYU`Ix!dQY7r1D6%@R{qP6^X3 znm`E?P`h5gQzC7A3cd2BPNR=+)#xyI0rX@eWFO~eHFNC@;TAr{{B?SI+T*x~CpQl% z5bNKYevjhy469g)lP|191K^53zT&s9(xCX+3L;1cYof$%MM5IYHK7Tt=PNcMuUJXG zj9WiM^l5-Wz5_p{m*#wqBbnp9o}0>!!_q86cDz5GU_*~J>>lFeVU_A}?K2hJXIfgEK2{=$wt?ZbYLF@{?P0%M4a<1 z7;>(q+C}jXplx*}=jPFx4l>z+;c0-_tq_uvxJ$Op&~)D9nR3K^894$iQyC+v7d6Ca zl!s5gipdBK_Y2DWG_lZtN_jiTL7TxN!!@^st{u3M7|E*(RbGe7>0S;@IA12ymoXst zBv`3M#1)Al{w+L-j1kVFP(Tg@#!3w%{xQ%p9j_*-TtWf@pn#y9!)4yP^H2+Ju=Zj@ zAT{4Py2#q^03D+}s3hCk+R6y;lLzsJ#*iM$Pcgsp=@k=ZDIkm5Q~_ajqbd1FE#g74 z@@@l}Jdrvt+R#5vVan}ZE=JGK&nJr+Gcu_|+vFi~1ZeEP-}J6dwPmZ5C+N`uNc?55E93>*al;ZY9>2Z6gT~y=Dmmypr(Wx(N;dRMVjV^mo4h^f8A40MtAv;HSK-7z!f6e~O|=h>Ixx*ZSWL|IQC+I~1F~ ze<9e3YdF5M_x^W-25pOtfp-ZKB7(}U>HpfbYE9;yNNywR@3>Zr2q9Uf0iURK?I7VF zhHyc{5ufNJK-Z-5+HMZYU*r>&KaJFg7hfhw!fuelN6-$|T)oRlL>~$J!dT)UiUBN# zQL0Ened6I5qR_wi94Ex#2S@1j_>b$7X>ga&@dQo+{h-~imTHmHql$07E$SlDHiBzk zv+K*r)c?COIzFY@bbVP}`tfkl+uQ4<-86ZNrnZFYhqVFIg}HmS82q7<{`_yafYa`< zsaBhmt;rIoi-$?a`}zEQrLM_`O-9V$*;c8U+TSB>YYRqOUL_P>8RuNi83o9O?0~Xm z^wP8S)Jymor>}d2mL01QGS~fjmjzCM4dR%nx1zfh50*n{q>Z)2;i8-q8@0W;8MZdM zCa6;Wvr>O$XSt;repm|gHE0Nk?n+dFw^8%ZHeF|{`Q`0-_^L6xwe|XQAu-T~GQB&9 zhBltL_=ND4cOqMWyo+4AT|+@MyQ1E`_V)Y3>Z0#z(MztL((uxm;}MxGdUgc}9sb;3 zC`;!nul>26uG?+J(c71HHw!Re8^0r2RfC~{R5uJM z<<#)`f`u-Q4>bg(P!P4#=%^KnGOF@Bj;!KTeX*+VsfZenO#zZN>OF?t)`f z+tlqut2cfn@MAxIM($$pG((TGfq|DUMt1qoH=8wOS-=QYCU%P(Zif0APRH1hx?L-^ zuJ!Kdq(ZCC=Tk7wJu(?upp!~Ohr9Zvx8Jp!K44L?*ki@^X48d4ZEgTPM)r)Gvo4y= z=PkdA9K~Fx;^AP+#a9FEe_Qttm9TSxGdK&L-%U}1>pyJsS?Wm-Si)Q@fGfWzj# zp2G4rQE}wFovvTGz`z?5&t#%XUhrfe-Ld)_|2*_B-ul^2=?wY3SqJUQAf8Mrz{~65 z{8meQ$)!M4Bf$6VOxW%3KU`Q*h4t>oj|Z)9YZ!hsLBWrof%7omQZR<&kbHPh71{0= zcxEU^;WpBWda66wC{nKb=J|J_e(yq2ijLo|3bM@AU!kd^2G(cjpYb-r*VVa(T<%&= zI{SU9hL>KRG{x%AOS)8-%r_B49B}-N;AxS~uTQP;et8d9+@g_aQWBE%T5%Hi#Sc1I{pS(xjG|li!>$D_RC<*b&5y$wgY&PKBV|g8 z?OSAv=@VEU%5#XibmVs>G8~&JLc5IQ%Q<2HLb$g<74g|ZmsYwnV27mG_-IC=x>3tI zg5nEp<#dt>ZObPhwjRLU8Fg87W3o;H0^9=rxcV5t^eN_^)SfB&{&dGj94mu1LZ5yT z@)Xh3;&a$M(^;+dYova+oI!Rzv*p-4?$%0XhaV7G-4`0~c>0@r2f!Vj3^!-G-=Qfk z1WwwQnB*tkZV-z-WptPkem(jqFXXSj8Xe;_QxFPe$&SkkSUm0=xn4~4hd75sul@UK z-2yt>`Eio9c9Si8AMn{hj~dN(1%Z6O^E>5s>HT`8y5TVORLQOR3%D<4a>-*uX7=ro zui6lznqq6Td#X=<^;n!P@2!gfvzc`)eu&qgfbaC(~%rXYWXW-{(w*`?r)W*@?C<2iN~i zi5t(0dP*D9$IphOc2TEl0-P13XRpwIxbtZ5#VhK+pDR=_2kT1j?Y_JO#BtNX-*s6= zJRakN#(D`;$WkhR@^Esy^llAtgU=`wT_%aM!Ya40&lDpHtHvn!c^u-l2C&buR~t-lAXEUBbI1cPW*8PV=$!I~Jj9GRW*ncT;zjIhWUI zUQQ9K0hvZCr1~af&hV8t?VDf3=Y~Asb641hAq9KhCHH5V4QE2j2dH(K&`tsJw;u3{ zj~NPPEZENEdm}No8cX}mr(J|nJaFfH`6F_xPM?sT8>E}kUVbz-WW36;y6av!cV}u> z!3buFl@cwfLwS#(J}YXfGxAgweM?5+l3h3BllJLhc*cWBC&hKCq!R&)XS#6nAN|KZ zz@q;$MpXf*_Q0D^kkN2sG$=KH`9iq}l&h5X^WjV#xq)ua6~Jk}ABzi-1oKIq5o0;~Su zQR?=n_w#v_g5^r{&h!Ii{{Nz~Z*C z4;j_=VC!%snk31L>U8SwG%CZsqCoR0eOu zz_UaMK*h)!CM_1eJ5)7pW|KTukb!irlW+C*uQEjR+>XC%+jP>!WsUNAw&`@vV*#X2 zasc*qL6?+2HW=LaHSH3hr;Xq}{XukxOTkN!N?U`?zSL8cOby!|e!~u-9oR6Ry%raV z%5ECBaA{%F0BfDk)s=OEZ{-Iq8vKg&!g~go?>OOF(P0GJnU+k%tzCC|%v_4#J9XZR z1(%e{*QKX3orc@=r?r=(Y<<&eK66nh&5Et2?{L23>vz)7#pPV>AMOYt_b$*ybW1xA z5<48KGFhD{RO3U0o{7o)-mb1U#%}9h>z}l&(4^y6&SZUV2{&F~@bBp}!p!hL#lbh? z@9Hwf148DbLi-t~FgyoWOdzzC*DJLwua92*4DU01U9jc(eTIWQF282G%-3JtnB9N0 zJQ*0VsKGySioIi|;J;c{NFcO|{#&Yx5xXy!9lh#Z+t%uxAtKhx6v>(r9 zE_@5VgT0cm{f0|RN__?Mh}H|NGA@1LZ6TLV++@R?i+FV81F`-I~wkFh0( zmy9GNCk*FIBK+GI5%#3ejN}eP!qno1KBml3cuEdIE5t^(3FgA{DgrK>wXGTc$5W_) zE|t?!bdl(eO=l8_D&m@u=0Id0=_WEexyIsq@3fO^z=Zh?ps&d50(~E3E&t4{^V;8= z*B@9^gy5pK3u8(j3}pM1Nf)2W{op0K!(Onh#S=nc(p}U`UukrN-Lq&!zUMw%At7yA}B_~ubzpuA$$mUQG7vj@j9Ar{_kcld#{YyR~TT0it@%^fz{FERV3 z(CH_NeTUO%@Y5e5FX}%z~|du#ui?R84lTGQqp{aE-4uB;0hV8L*nVdE2cFA$O2_ zOv9WJc#+25-Cwnlwg3ASc6FSb88zf=F>sj{H`PX6)2>x+W(i-)fN=}Z# z#W56Lz0sqJQR9XO0h2!UehzWv)h{S9_Z8px`ES7Xc2>*mh`X&x%cC4BY2Z;FI?)(A zf0A`48~QM)t0i6XyRR<=KJ+l(*uZUaS)LB$cM&l(-c%h2AFqsq%c)1dez%gw(`?;y ze;G;uBg?B15+#(A)CZyU>uN`Vhx*PNSw(N4>7=NN7a`qKGfj7hxwO2*XL$efCnLN8 zSKrm=e{`^w&$`ZV$hPV9nXY9|kIoW2aFD}GB^P4ie{y>0n?@DYi-q?U*u!F-Nu7iB zo3JD{FHV1Nb!hivuikqY@5FgoPWo{}n$`KC#Z%KS+}GOCvd$E*8q=X_;DOqfyL2QZ z=N=>aBHJM9W=8cra+^uL8x~nONOrDpW;k3B)!!1pg>hRy=VTc@_qs}rHVezj9Zl-#@n5rCn^qiZwr=v z_Wp~#QO<8fBD=nHw%C{$*)Sk4+WS^8VXDG{wxApz(gFzZCG2#bfAL*I$#*iPyUs}7 zp_4nD4zAz4_md`>eC_E@?T0?AGk|inO`_G+ZdB|UDNpoUBoIi%+Kz&8m@SkX z*D9Bg{hzeC^VC-wFNwyTW)OUx0j1Zt(+^TzsJVyV*o5*g&&w88XIhD0_St&t@|HugN z*M$?99XRxfP*$QH@p;MT~e^UEN5Fhs&6brAK5&Ci3_jT{S0|Ibz%b{Md1h`7*ZkzvJ4{=)3 z3gVBa_x)(_Vn?4n8c#c*x|mZksd=%=D{5dS>`%O{F;_e^vp#tqfq>h5QZ>~mlB+mH zcohS+|btdsgx>p4SBCtiY~CKS)1lw#9f}b_Hb}+nfbogP2Z18#9O6k}Ja8El_ zUX}}gylZFTo(+@oD``9L5cB%ab&CwYg$9d?`!8gDOgBTZmrk#i`-w!llykhUjWmVl zOiMDm7t?G4Xn7ULK;E*IXP{DoEF19k09s<)u~&k&eqd_4rOu`{%oZ@zw==abzZB>Q zT6GgEh@USU6tUw<)UK~Bf!VwnPIF{OqnIO3RqZ)WxEYfx!Udvyc3JKj zOPBw%{|M1+wEo8L;Vu2Y_V{mKzf3<0jDrD`>DtD&0Ie8V2B6#*Y$ryVJ)r<&7Rh#q6fNjT3ySrI|G03SF%@=QxH@>?XB(~n?r|cSq4@24HaFJ6s z-gd*c)bXyBe$NlRpP!Rwf%ldG8H*s6%d_>rJOzK8;8$#Qd3T>)*3BJonczu9QiFtpd1ctSC(|G<+$sC?D(~j;qf(t$9sG~=O=!WZx>Igstz+6I4nQYH9=3h zO22`MD(tcgTshBgy;bK9r!BJtvF+`*f3((O8Dxqu|L5t8hnKp&n<_1z1(mlEI+$5Z z6J+w}T%k^Rs#s z4HQtJ-Z=(uGyLHo&I*8RT4C|3YCC{0|2vt%vE1>C%7*!R^8)UcuBOK+uG2AbhRxeU z*?8En@S(d(%b9A%nSqo*4XcWmz0V@Q*ODHl11(73(j6v$b|QBJYTa%N?ex!qw~d%d z%aGOBwyHr!p_z@z`r6Q8L+9J2QP^#B=>*B&eJU8FmodPA*>6sFVciNX-Sp_}P#MZs zX#1du)t8M>xNGd*NeL;U-?XFhC8_j>vT}(+mVsAlY^X<^=J~K8Bm05W{UoS&yu&?O zdRh)N9nPoAic$pU7N1lKHD0d#x)&7Eaidg}aqFmQ(*jBpM?uMrr>i_!Kcj|#MH4E# z30yGziUr_SDxpH3^tU+Z6;7toGEVQC)iPnucXq|b*EwX$oiDE+LsJ7n{9M;m@26cQ*;f^+3e#^&9_E#WGD zu>N4(8iYIX3q&~2$ryD>Fp!>W`cWIR{9%w~<#JvnP-m&&MEX6DK1=u3kjf|BcbUC8 z3L^j>Q0R;dpzkjg`C7Ay?>uKT8IphRIH97}QnGy|@_T2o zmUtKAn|6X!WP7gf+v$Ny*~O7$UpwAfC$*gZKJTs*3EkknflVf)9Lkj%!v`Rsd*)H$0bH9+0u7B+**%25tw+K(ra@rrP4hb z884Y=W{DY3hF(1e_3)Yw`*r`FX--!8B#aT%?v}4jQmu87hsrJQn*`QBzGCaR7_F|a ze~K>}b6pj10sFsRy7}_vIFCHlOSN9>YY?5ELqHbYjBxxrS18FQs&vYp0o)cRZV&RTvh7R&#=?`l5C>zrlvatpKJeytXMIlm7&U-aiC{rx_2 ze-D2^`OZxHdZ*6|-|<+y#I}e*7Tg>jL)@Hr>Boq z6X^uF?$C>6Nc5`Y@SNefm5RR{TzFkdd*#8#Nb|26!a<0c;iIbIIG(~tN|@+3yenklJlR2yxS6Bdh6D7s(2w)i z6EG8eCg@MB1X`oXq2?nG;jepmI}2oE*4OfAi84MFx&@Ero}DlbXY`#Y;%l_PfV0V> zJHG#Z&a|VU8)r-WX;lAgT>(9YUR%1U`Z zY%~s+ckeOXS0QX0R6H1ZdT|2GRmUKxd>+MwT)LVXhqTX$uc8%&fF~NGBg=+**oX9o zP!tG0qWZu@g0up*M#yczl}mJKf&df>2sskWwDhW4+30%{*SQ4d60zmiVGM5e=!SPnYRX;%JG zR?z8$-gUvZ%PT5js7hw6s>Rv&4rC*M{RIm)J`{gI0-*E-uOK@SHzK;E!V@3SOK(Vh zX9q|TXsu-yw=auJ2XsfE@-$wvXCgsEPai8apncs+5TkmHdFHPDmdcx@mn}WYQ@-*} zQdoLSV?59KYL#tID(hj#jz7_5j89xK28vT@4J~hW-)PFK5QRWQ%T_!@~nVoy}TuA@IJ-py*v>%3F=abR% z;h1Vu(XWD~oESExI7(M!Y&Km6yG~l_)Tm)V<+s(}ssv_6Es$VP9>kQ4qb%Sr0D$tb|E#O_Jee%)(i4ys=wo)7QrLbSFY~feb5~rf# zQo=MWKkP=KvBB-jatzYr>G$q3af7-J^EPAs41H9{;G9qXqT#7GY-j2HHAkAIzqB-{ z*eJy$pL<5IGFw3hb4|Z~?4}sV&Uq6|vuve%Vhx(hDQ}j-$j{QiiRP&<-Me9~{+_d; zpTtG@rD|{x3{1d%zzL&6^mHIx@vBgWUC=t=qmTIrm{%ak$WJPM)5ywp3N$bV^U)|1 zlGg$FbV|ael}axzAZ&t8F_PG!=4-podxGqmuFz0o@+f|XPWLQBJ;4D1UuD-)y+|D< z6?ropjjTS`&=*D?jTIOI{vqaQW<;s6w*h9f{)mU6btKoPeOaM|Wt>-@c?12>Yy+Gz zk?toZ2h_j6lG*T8y)Bie^M}~BN;iKAy%v=Bfe&YHS5?bqqJWR9^($oNcS6=7+ z{p9Ows=#y|p4D?T^MP>e8XJhBvuZ6*(1bWPRi(VTA-yx<_=W&SM+^ZwMad&Kf@KH% zw4GN#xFBCQf}|h3!QuYqr=UWMMKF-k9g6I2Z}7v~nn>R}F#% zttF4tXpQz-O>aio{gdKt4jAm!{ktcfYZ15sK|vuagM`0MCY^w;MxILih-7TBkQp7e1ehA(X6%MuUvju2h2EUA1A#TUD!XYfx+6Yg&@~ealp={Z}1|XwY#a` zVjBRu$z%N4J)Jk%jXoe^1su#JAEq)zS<%MP1)bmz#->eLszeqd_;tu%R6x5b;fZj^?jDy25sP2wA3OhS6Mm{|nWxk^eKx}b;|9_8)E--sF>+ge(R zjYH%pokD#ZI76-^f20MwrTcI}xH6n)G_E6^i^rgB<^J426}TyE7h%@ySA9w_rR46N zP_xXp#-TT1^<)ZZ2@|CbDPkKH3*;t-nSsn`n0C!UWOQx@!N$k6)2&6vR9;gYc;$ma zfWj%Pr(5w@zRc=kI|>4pJ$;J6!m!(wXS0gAs~&Z{76jN_U~MKLv5o8tvjj`+*_?2g@AbVul`Wz__+}(q2mh=G zlinxqGE@QBe6w!@a-Oesv{OIc2G_yZn6yNEZZB&11OEw1A@l`$=6Rxfb*P$^KnhfY z-h=L$yI%q%$>hoWloO|n;Q9@^Vb52NzhoU@ao&W*#Mt2U573~akK{%-`sIib>2S(Y z6X$dp%Mv@{jEddijv-T%i;f(-g+0bpBcUOBJ^8`i!JqQ)jOl-onr&Zl@nU(m?!^C_ z-{4Cz2{`bnouw8EADLiKH$Vq_9mmPgO-AP+)6HNeD?48tLY|YnMwFXru?vm6z^&9; z<2a_AqSHhw_sT(M7UAJopa{lSeT8z?4c@^kELB<0cy=_|(9b8_?|CZTyC@52G);pu znQQvS125CP$6{hnUL}yE*p7_Je?#oerF*`iqazd{zHE`&5qlOpDj;4q z=x>SC7Yh>3grE5h2|oju1Vtw{ljTok!zI8K$_I|)C^4(2d7Cw7;fcf7P(WLJ=}Koj z<-m%4nn_FhWJ}kIu&KB7!HHJ##K6R~feb^p>I!^wVaN2Fn}u zy{e!Bw=)hDJQFKAUpQm<)EP1^XbT}9w{Zwq{e$ZDnoFO0TxQDT@H~`8VqFw&A01WG z{Id=P*pN`N)2v>LSo)MA!t=DA#nAM8J^p8VLti3CqS_erruw*eaKBsYy= zJ{NgFW+Wfbvvr72Tf-+CK@P0AQYQql>TOqtLOz)s#OR+;U+rHNc88gZ>EX>qt=8nW5Pih`@HwAQI<1-bqtRt9kB85TcgUGJl2y1@kVdJ3c6cu#y~G^_6() z!a3L3V=r(5$|i~`Cq$VHA4+k^eyMdq0W?-}$YePOd}Jyw0*ca({0TUndN~L%Z5bO5 z>L5-|^2O8NzrFQteK@V+YZBA^+8CKMCCi6kIc_K8tuTDCdlseCvCfL6g|)_60L2Mw zT7dx97XuQIbUGeDnaqzeXeQ#jh)s=N=Jh5xKyO}Fxu?E+d5#QI`<*ag?DkJTqG%NV zbPeSln7xxd=>ltZsQ2Vb^!sUXl7& zLNVL(vB>j^>&{)6@*Cmju z67d{jB6A{#5S^xL+{2`reSaPuP0|xGT)6DDo$X@y4J10*GVHYsMH6M{OeWiKJz19! z_kFL=BYK9PzSrxNL_QQpk_wf(mdFv)J6>TJ{t}v7SeS7tMk$DdhJ2_axp1JAYT?cO zp>wN{tErowoQC@mw*OPyAvwa8FMDP7FOT&>_fQq=^NY6rTnzZgxhyuke6X@@MXz&w zs*rnj4K*m*XzKWP6f5PoCVk{O(@i6BD7}IlxlMmF?QVl3Ta(<<^J>T4$S*xXBp+L4ec2-lwT-}}G*Kl8{9IVg%eYTs9$?4`LV z7&K$lY>=PZwr~f!dS^is)D0Or;~|c_mQr~qnjoPg{5L@ktpP1@CF;%jCJF;VR)YwB z+|3p;+tpu2EqPQy9B2S! z^~riDk;>u0g2}oXMg_`SC~UaHgt1lHP%}CueMJ$u(VqajO5GsthYQw}cfQj_p*e4} zY4LL90xp-)4bEs2`Z#gY{NIEbdumm2=%Vt~ovY|N0fI$`t8fi<)ol3E;H^*8K|LYxYx}0ZpN|laKJIo-4h{XIYGKZK2%nApgXNpZsa;-cy4=p^cO4he7kfDXMg%sk1&8aj zR!^f_TQw%B_RV^;FU~(!PinN6#sYvtxQJ<-xYy^suo&<~+&z_vxr|(nZ45**>cI~s zw@D-p#54cS38gGmWVQIUW9VzJ_cxz*IsW~E`qUq7AILQM*Ns`B9C2qr5slDyuPLz? zQqUuafa7O;7GxcsvlUCIUbk@@`=xsgfDF#cG;(5>PhZQ?;x{t4#wU1`W<_jGxDEZ0 zQPn~<*1Mopw0;7qN?(2W>rY0-)_>=^mBn??7h1jvJjpb~>i)y34_G?Oz-S$0$jB!% zTT{qsg;M9KiR>{MfKa0B{e;5oLp1N3ANWTJ$I>d{mFxe|s%30QSTTlEk}!X!)n?6$ zo!_P*YY!bjdCg1d+B3IoLJn0XoSPV%PyD%vd$2?+i+v1$sG?igFKh*8&_GEYuex<= z_-OiwX%bcGrxzG9Bwlj1KsW#FUry0AfR7!iJ-Z|T{f*vhiE9R-_{o~2g2SavB=zmf z^FHQ3RUh#wVX8+w@O->DxaDP%IVpi2AZ67&Jqhcq{K48~uq!TK^BKF5)(;h-C%_5k z&_H&L1|fUUOXR5fJDhsW^VW-514MvAT@kimVMoNv%=xG?lsSQ4y3N8m-hvPhz_-Ay zi<*IwaOezXb}F!Nw%zipW$1{OUyW$M6>-VA&Lu7Z-=cR=Xnbh;d0e@-&67X#)}tEC+pfVYC7ffDeo3BU^8h_s{9@v1h>Sh) zW1PhjGtwp3ptIFV^x>JrmV=EW+hk0c;+BjTmm>F{toxHuJba?oK+LUkQ#zbf8eyJR z=DRPy3Cdr+`M%bzf14XoNVzOi>iX?~SdOos?3?MyrN?EyYi)pZXjNs^9lb;W`5rkIO1U?A zQNJxK79R`G4#d)d?LVn;!^9*$>qay4nYDO%0&f7`ov$xYvbET! z<4RUN6hm6Vu&rln%GqZBmTXV(WVq9~-)*$1xqBh>2<0S_7;b^L zE9u1bJGVY{GM15FI-#vv@;mBYGg3EHXaB)BkPD(k=E%}=?DCN&3@oc&CJ@B#NOsHEL^!Z7`tyi~S=?dCxT zHe8=k3cdI+ce`S%C-UZiU1XP--lby{0}qmw?h?gs4Wy*65g}}<12smxu;q)h2hg{qO5vL^D!r%Qb9&4WvVK{tha$2B<$>I`Ot>mF zb519C{`;w;KMX+dv7jS&i-7yREZqJ^O7S5Sezm7=HkwX>T% z&9Z0=6YUR7vVym%eu89laIdzE{7lCb(c-Ce+AzS5F#rW701I!vKJ~>Rt3RnI9~V#Y zx{Sk+1?@N|$|&!WpUHz^<5H9#&Y2ai*>Pq_ zm&;{4d45xCNSdI^|LqdSH+v<#q0$e! z3<=j7bm7-)dDsrHYm+=k&m1ijnEILqri0xd;huowttkjg1O+=p=G}1sN_5clemdgOLKHXZ%0`rqKp8ZJ`;*|LTPQZW$8f!rPR# z9FWb%IEiNG0Z>Q9@}h4A@}BukF-*j$zjfgMgjDbMe?K)^S=nd2c87DVL#iWysfyp@ zRF_#jG&fYmmxyieF&9cjfF!7@!0FE{`f#Mb|C(4De@p&LmMRkQuoLP!m z3a!paI+(m+xS9K~Mn<>^oGE-<8gE}Icn>=1@MD99kIK%K^wn#XJ(}_7iy)xtNKrmS>}3O zJ5}dC*lETeil3%3n>;;HG6b?zBUi!WHRWgg6}2>o(th{uu|k(@5ngHZSuLEgvKt;k zHm-DnjJV4H0jX_an*y6DVjlh!A=#)ih3^R7i?jk^)l#c+@2z#j9I<|A?)kj}eNPn~B0LxmPTuXK ze~Gy-Y4p!=gn%GIHtdJh|0*PTf{GL`8S%ThpTV_B0Mjq>A zhu_dxqhx)>j-fwIU(*=GgD!>`;(AtG20ju&C+H!aL_1sk#X=76`de!(VAUGH*2UoC zFHcKCqiurZNUE-o%s>p|zB?pM6w@BXjXgJq$o&y(A|bWK5G%WcoMQ;ie_|%Y4dzb{ zE^MEvk1clV4_I~Ihs7|N!U_Or(6?)xrSfZ6m$J!-F(;UdrteH9zDv15%po6%PvYH1 z+t6IiT@c;h{DGUzf~g3VWrtw(d5E@H!0JW12{V>XL`ZMtW8oSzX8?Lg76GnzF`Ji~ zjR$plvp8(vSCApR`dmodeUtc@T9b9}blUxe=IU$?Gr28!RqFA#4OOqGbgYh$mWTq>42Y^YK!-zqG+fq& zWXmRa91$qrVv|XVh|n$foX%Hx>(X^ zyBQs0+U(5t&>ED2TCQvN$K8HbXS@AaB6Um9)Q;w28FZ|a%Dmv7Z zRH9U&kgVydqfh&MSsPaivJk)gi59k{l!l*S9Ta7=(?FzaTKbvD6 z|JgkBDtxbc2!Gd@@U7V0)#rKUUK?l^uVw%P(8{KcJxO|Ac}b7$j*Z=>+{@A`mzOpX z`=6)T0l?qnAs^2Ai^A!j;q-z ze_PjiDzmUsx>xz2HO=@8g8sI|Db@qK8p{WaTO2puAGkL0q)E*tlittW^V}ugr~_XI zi<^GUxfI|8I#q(txVj79!7Rw9K;EnhH7}-XDU&lf^%z%e)r3L+bVO{Ze_wqXu2r!I z1ZwNi5$|dIV&+HYIg7>r?sj04qid=fmDnLQkG)0jFC0R|+U0Egm2s@=<8~c>zPzxy z-)=yXNBI7ooX}+7&oy=g71CPQPuY4Mt8j5~`GxAo(X^Na?0!yJP8OckI>-2nM@fOi`|QFP}JE=$!RDTr! zph|UPXS9^d+E1zE(?Ak0bzmbgxwC|^{Tj35x}WigPED`-tBmQcP-H4f5bDLV`fFPf zB78QlfrT+^P)~AV!kFX?$>84AuWjLozL%F2Cgv|&B z?&H)!eOs?3I6(YI1vIf>a_korZya(50%)>l?&!iGr=h12Q*75&Y;;BVGm$^U4hcO` z8loLdU#y;08i+(6HkYb{N#b^o?+(KnCL%1l?A3OL+&kkd@$j8hCBy5IrM(fa8j7=Qk}sG*tQVZ&S^VnO3u;$QT( zUn$bw@hqSs9wtT}ZvhK`=CA2r?7#TjGwL9aI;mGVQD3xi-8c3VA&h~cib zAdjUuiJK(mGEfKYoq(itT(QX>s`jp`$wl89fR922P_Y%3U)eKBN*k~ z50{%t2!6Z*BFwiCWc_pXhcq-)BQ+ zV~RmPhVOrbt!0le+Ip<6)vpAA4puE6I^4{)#|GrHR-~%yp36qQ1_@zr(D_Q~Uc6J3IG(nN^E^KLw zUSut^WN{Tin5y6#<8!kM8M@8ZfiJxpK7ZN~!Y9vClMjVCXtQo<|t3-tn}@L z-<(U03(j(+#;6oD2SYEMpz$h`U!f1!Xu^dN3t9a9R!+hF{#WU`;!5^;wgXI$`3g(Q zZi8JkpBUH#0_@^StIwo32~#@{(KaX{&m=LHWjJFQJX8XY9Nt7{EmyKpBRF>yi2@Zo zO0N_A7a>l@s&Xz! zcwHbzhg>}4G5Y%v6%iS8k-P+zay=9e%o%aD>0D{d(AnDTgT0z2^ucyX)^d(1)V5 zFKwKCT^Ube%-GX)a``IgH)~mtyyivaeLeUloX+EuiOtT?LFXt|lH_~1J+UI$ym6_& zH~g*h)Hg0{JVD@iRuheSS)CCZyg#<7Byefua5$BrUZKh>YjR*nG=syE7`0Y{U#T`~ z66osiiwjq+h)TTxUtfT}VD~%pJn0pVRuc4fk2n+7`%w!7VdU#?&NZ}^W=iky2pNmW zmZ;(IJQ>}`BJ8?3h_R@8bbbOX`k$ly8wwbM$O?MBj+zZ2U)hw;VIYy_FOjdK0!Fk2 z0+ckrH8cLpHT(}V(a**7$x=#T0|WKZ@y%1SS^AX2&ykQW!S0HVV6@EYKzY-ms!3)9 zxTz{FE)YfPI@0p;a<7-b^ZahROFLTGtORui9RcjK=d(mm!RSaf6ZaoKy}YH`Px-ry z!>B`81<(u}2o4i8EPYdb_Jn5e{D?G!_|w0bQ)CL?w-s`>yIMBT0C*a~CCczWHM>P| zPq1l3nPfTsk9?wk{3!!fqD`3Sa#~2v+q|nD&V3zk4`dfb`d*8GF3b9!43`eVJFm+s zLf>o6-u;5L4~>P_6=n|oa&#JrT!%bUCQMnGUh}R4dN8oHo~q2Yq|oB8bLaE?7YHkE z`>js(+&NqfRdv3Jill(YX@wWDQ&{^>|Bv9}&rT>;eM|<|2FWJ*Q^D)*a4GR3VAG%l09UMq&c_K0C zwKqiI!BymrKvp(ivtw5z;Bj!NjDJh`Y&Pe8ZCNYu+x+)YQBbwqQ=hU-4D2i;BEA~E z-mu(+2j0@O4FCW~^ID1ce-&r8T zI*x02D|(%t^urwT(b{u z=E`pwxcm%EvQhj&1=Zrg6;|gWp9d0m+r(z zKKilPEM)zwG@p_`SCHl@5Iy7~$BI;!*L3;-SzH)|(k_?F z3g%cRuNz4l2LP8qRwTCqK$v>J%=dVtKYkbhft8NS7SiN05q>&PRg1hK-2%_cft&y( zyQ|DIcQsf>=d5~iaw2WR|0Z{Ug@Ty38q!Tb$1X2+3 z?XN>}5Lmlw4S<}iR`|a6zaM804nmR3T09U+=`AQMi4{D60->0$>y4DTx0NwKC@84q zx{Vu}-$O2fa|8<7Cgn$hMPY2r)XZ(T{q{TL{U7*%_$DFNji_tBOgDmYD%k)EK8(ceo*~*0Yqy_CyGZy|kwZ-eGLWfuMa4FO;z{z_wliheO!10 zjay_A{!*@na;7zAM&Oo|hy)qIEI-|VMxQHl@D&07Eu!yEKFB>_P+*1tc+fJ>VR(BS zSib+GAL~HVGSKR)5`VW*(WC_^8WX~Uk(n=fxyhgB-lXGdQi8EM$>o>m@e@_5B%|WdYfGa6yy{rHr%Y}H%VPOjlG8o#$puzH7?%Pz_ zH~^56hO+s3dI)Vyd_hv!J?S!})E9-MymfNTZ8Q5)cY9HgD3DrXIjK)&1`t`;qCWAZ zzBriIC;#N+20r+qyMw+5m5BBRD5ZpHUi0f*r(3R2LeFHD-^SIMOVpkIynw1BhT)80 zz49}i&PkHEk5?9&CW!dbq=?{yci$t6Y0}nak2qK4w(GFUZgIykC^}`q#A-aCh*KHR zcpX{y_ZzR98l;8^)c z0PT+wcyReP@I?CMxY^a4;{LMU}W^*US)pc;5q{@f-W-K)&V-Kt{N^ z8D5>F)gMN*TrYsbkf;O-RDi1D-S2s?oUBfmd5EI=;mpLKWp6(cej+~`6d6G??z_p3 zQL^Oayn(R=cS>})5vVZ=rF+5!ff=ohn}2Kv00=2-;c;s$0qi<}pmIgC$;b1&b;CzW zo(_47-v_rk{eRu!P!lNMta)jPbEQI6v0ANg{`T7=^3SH570s0yK=IwfT63QXJK|Dd z3AJo5UoFniIdOuB2irJ*0<5Mh;jcV%MnIt8pE-y)6xmq^z8%f&$ z0D#LJ`G2XLBgm$orM^>3loOKqT1}->T8?;Wmf>7cU;7X)ALU<8Sjnby`(X<@^-~vL2Wt5uDaG(Ilr9c;e_kZwi zoaAxg?80FEeOy~*Wo4|RuCThwF{NnLniMf1w)TPi1G_|iFHLa+z=p!DzCV}XW(@aM zrp*HY4Phd2D-%wCW0Oz5XTFYM8E}d7BE5(Je_|4~9yN+fa$o#VrlRWi01isMT4xa4 zrq)(CI5?~ML|@j6XkaRi0=|F0Wb+T!DnYlAP!>%8kJBKs-XW++$OE6YbA&D6VfCDAo6Rw_+j1Vg;E?i+4 zls61RwuP;{XiK9o1S0tfB?0Z7xu!g^{B0_28~|LDldiYfppX?eidoO!Gu3CMECNV> ze3C{B9X@SDdIJ<(;zrc=*s@0C7bGBr@@>^{+ikbeLVFZY8M=djQS{!PdVK)JQ2jP2 zZHxz5WgdAa@S%i${~A!}D+ew7-N=7407>qUfIxkAz2xhv4HpkD#`6MVE?sN;DvaiH?dJXXz1b&?N?Eyg0;xNMiZMWt;iFI5!FK9fzRjRQal&}D$8 z(DD8sqi-qBLFJtm`ah&k9tV3OFzz>#KX2DXn~G6i577ola6pId(LnZ|NjVR@6|2=s z-u>?PC%U_F2y3h$X9`5MdZwA>x2tJXT+w1sQ>X>d zg6f#l^g!jZoJ9&uik1?}4>YclEE7m)Wj>KnHtN#PTA$TEj%@>+p+`KTp#K0iXsea9)k+R89;Vcn z7AslWK?#|@vuzTmA(HvS;!`$`)_Yma$Ik%7sXV<2$n!fp@ixR0iVFPt{(u?-$g$95 zIY2N9x3T<8fph22qc!!ngjuipv=v-R#uv(&h9ST69Mha=GKKCgM4kjPXQQB-!+^jn zJTr_z(S4k}v&Gt1_OrRP1puI|G;G~dk*Ydqy?Z#c(Vs9B66#7w0ur~1NKnSU$tQnj z*MjQuMkF)H^49J%_rpkg%cU;&_5iZH5#bM~*uP3zSfcN4?->We`c{@gFCimPBVh3- z^sw9D!Na&G*hyM_lW;`eDacl100~g}Wj>bfO889gE%&gPCP}b{l2ZEIqO$hHMYxlLtOf#I{SDeJ+xb6&pXK`K#~A{PYgg?rc+}EGX!2v7hq&zvx!p5PoS!sE#_wSQWjLnKk8gdVX&oHMBAoam!_(5H>c;iSKpr z;gqZS`vRB=s0R=&Qs1-;Mu3-D`~u)qHiLpcAQUzy2j|YAwN>m49js-Hxfd>WMkD4c z_wff#iXLMC!Qk}ldlsFYKuW8viID6{Pu*ck)MN7gy-vBaDJQZz3^F-h;y7lI| zaz+u73c%8p`Yh#|D+f5g0uA&IL?kHm$bSR-<}Rns27*Bad(L5UmN0|A7-%btbTi!? zl=c)hVD)%pUqrB6F8WG9&Yj4>u>3XPeF)bMcIIrZAkj9m>>%-sAfH?7h_<7g z*Uxf%1)jhHB<+KUvf1Ui>Lbx86ZMhZ2}vc7h`tIBVvNUfxd$B;-k0LiJ@he-xzp;0 zC;Rg!A47$1iME=c#T=T@4bsrFT4kBf;!P${0Scr1!N94*yc>~u1-CkFg$ocg7F z`vUR%11(f@k9uUkaeN#Gx)<-}k*q%QbzV6pl_gXwUfN-nc0Rt=>)G`b&{~GuQr-aM zK#`kpD&QDW7NFoUW>==g_dXY99=#E`di50mNt6O}#M@zj4M*Y@oW8jcKe&kNjcupeG zu4$Uom{lUU_qNAkf*p*pBpbb8g@|D(hDBpuHDUo7BQOh&WRzhj5MBU1FTmQ^%Jpsi0JDQ=lG0Pb424lBm`y;7d^ zPe4Sp= z4f;q*+YkW(66|yXDp0hR%tEOgXI#g}$0CXh-W7aMcPmCfV9d$!@@DH8B^eAw`tKn} zqmdvva3O_7d8lTZ&$wS5cx+sgS!_COJODNtIfL|*U#dh{MR#AUN9vA^D?dFqkE2qWQay(- z7Ata(QW5QcW4!=)yR9o{DznhY6OCuOPrkm-td7?;e=8P{;t|)bT`RP@&u1uYFsQ=v zd|nCXX;h+?;?pNZhg)f{Lqyz+4Aee05m4J=sZt<saR9J* z3|sGULk9S-$sb?q(P2VsewCCVv=8(Qd7~aT59uSo+ca2$D38u{Lz9IF2?eHUQkeuz zo8CA+HpM3^$!>r(!j;p@h%@{GI$1|6_zLo&eV1RB&z9EuT&?)jhsAyUr0`wIi7b#p z6oVT|Nf}EHW&@@M#p*lQT)%!DtJTW(e)qBT-IUDkXg-4h`XQhKklyB;Jd{*{B;3h? zo{Nw?xa&ae;4zRX1XOi`U>fw?_H@h`#wOA>xBy8}gALNA7BiR@LuWrPd^=L`U7R7RV`vrZK_XvdMicXX3qieNfzlFlwW=ID)!F2%PL?cB--r?NPc|;z)ZyOysf%fQGtf zVN+@23}8UyP+ki%1=?z4cU>+|ZVd(?@u=@S9OA;wu0nio>XnKKCkunHAP5DWyl%JK z17o4?HGu-tVyS=ewZF)y9ssqScIg|Yb)9>x=?aMCa+Mg7EVSOsx(Q3j=k+HLg-1Zv zGnfETc+XESQ9&qqhwl=9@akK_KF6wkrv zN>bm#b&PvdYh-?KGd$1Sg(M+SZ88ap)z{jl>Q-$yZ5#kVG-|M(K-ho(m}#K(5hGB| zH^&lf^L%b1d|63N$oNo)TlbWx4EB|VD9T=RfWEsx3Pcx+NvBEV%1bYWpmqhPjWDGA z^biWGC;tbaJQlo+it4+99$?=iNdA#l=g)0amQ5RuX`CC<9Y zD%lGs9J&-TO_P588(+@|l9d`hy1If(P=4MY5Z1luwf)xvaY5sGWcaqs?_KAIkWkMf zzgvBAYCC|1Tm4d#QW-Jk{>p7S*WmY1*RH<$3KrsF6j61r2y+)MH{j&u2;R~BN2lOE zMXZdBidzRE$A0$k4zGt@P(j3oM0&e*$^aphRviR$X0nO2aR6Y&bHSu_0v8{Y^Z~o4d*g-&IYqkPKFMBqS-1;O6@*q!Jhw1~( z2cVkUHXT4ls#t#KheZMqnI>H>mbzRnIwrOOV zCQQqvzVw%W*{{*m^AmRzxwc%a?~G-ul}}I5b(WBK!Cq>XmJY>=7MFpUPAX@%jq45d zQ8TQh$Zp-K6#%JBt2W zGUc_PqQNEVU#wIyjckuLUd4f*A)XcO>0={`*-FDk(pE44OSU8vhd_9XZxxEb@?t>> z`5nHS#^phf;dhQRL>ZFhgb?~f6SyP`NnD7=I%Sk;!eUy;Uw-53^2I-Yap;GCElZ!o z5*P_Gue&iKGFaf6-#g>hm#urm4MxIY%3rJ@Me!oY=Y6M+^P|7QZPAudSn7qL2flUn zRlIujDyF?XoupRCzQPP+rX0bun2&uE*D< zy^L2R64YILYWJ{4d7WXq*C=g`7kH2l0}T&f-6M$AS5{#ei$5 zx}uHGWAU&!71u7ebSoMPGA?pebm#lv=L%3qn_LRv&rp8`fVhPTA@h5)eZCzy zo=pI|2V9*C*)&a9?(OTJ|N9ql{rGxPZ@0)nn@y3~bLHTpDSc9S=I%MBz3vR=c~SmE zpSVs>4046-ZLUK(_vzERbBELNHgj*BIe70{DgWh{zlkq>@r&5o-@_u801M^_;m{;g zC@5QUyFj2{QteG$QjFKYfq+}2KgFk^Zd;x@$SUJn`1_Xfxj^c?sc#|jI(I?9p1PK` z!UBl0xfPJy?16ZG8y7=^nYwPs&Sefvp)MyTy^nR_@_SFlAd)dK#T;SC{YtmA%f%Af zfdA+J`Zq+6H5AzcNgLCIGEf#D5oaQmZiaJ_l2#J8*HyXVS4=ffLNXtKBL&yQB z#S%eMVhT?C2_W1TL0#wf9gCZ%{hT%q06xBJl$0~Xd1|A-p^X05={(@!J-gS|lB2K` zoPxkYbrs3ch%`qLZjAXQ6aZo;Ay^~GI0-}+i%ItOmhxwR@+W$H{W^jX<~yyK5+C(G^>KFlh|09aWmKbOs}N0}%B1}`_=tUj{iPP>=Cc?Dnj@|SgQ zZz;>gk^^<>+zy~fyxCJ%VrK%@MHQLJj{$3ff-^pWGsHSn(L6xduLrd5@N;+4@@cp6 zDu8sKKL^9+t;=I~B1R*&k+cN>5EDi`wqJ%@0EM*vRu}-O#5cJQ#mZ3~EG$+I`uZ(W z$xXP3DKI+`Qq0wjY^uO86r z6-K{vUjYAx@`^6r4h&a%%NsEkE5Ghp?-tYZvTqJ(#wzTdEI-R;Hu7)&=sCS{;|7-d z`=RK*Im(({sd_H&1;|Ru1;!MX!h^A1XfS{vEG|a^AWro4sJ@o%y{h&u2v|G-5nBS{ z+=}`9h=XD|XBJDC3F!vXHUK~by}_wsOlmRXQ4kuIY&l-{K>6qT71vXPXHosV^lQD>$kbZFHI#{EdW|;c=hV5 z`07`_jQz7`Finf@{|EbNvE=LWpacd)l zHLuHQi<%jM^xdo~gM7sJZNXE4Hx2+JU86}y9%z~6XAn?FUL)@=88S?=TNn=FrT^al z2`T-s{j+@cM!I$NI%2PXu!GnR9LI)bT1?nmF6HdOIsC!@`TJElB`tgG$G7VMBB&Ms zH-JUHdDr6rno65qjQ72~o6oE9e&twE&@jNF-$T6G<_DH{Q2KCJvd;hgfBRqc;M{pE z`^!K`Df{1;Cy56F1sH@lQ0#&3iTTkP)h2-OiOs-VVS8q|W2rA1255PvzqzN(`1voj zkK2&}!40O313)OC<~B={PjTT!$ffe6%_fp921tO`f=nvsIx6P(50Zo09%?^jV~QGE zmz`l)@v_`o>Y1}=aP{g{{P7<>m(SW~W3Il|A1w$sfPki0>&QsR(OCJ(x{q`}f1*=~ zai|Bu68u8sk6!uU)g#0X3f3}+2>$IKKd*~vf&H^*v9#b{pO0ZVFBu`RE7q%46x`}9 z4`%_#V>DO<7ZOIJ0-~1PedA-iG|nBkJZZ$A3h2>J#$H!m+jQDE0F0Bt(=z1i7t^XF z3vj`ax<{KP!F@$_&PD|nYd=y$t5!&GfD9}apz-z?Wh~T1sjz;}B+KOzXU-nzA3gtv z_{x{Qm~>xKX+><4&+uM7x9-6vNpPJJWY8}2_+XC;j$%pk1Y9v={=0I0)}^>Uf6`AZ z1zNiN(qH2L{lEXM?43Cy%f+HsmEj4Ra>jzSzRm^I?3c{6d-G0H@IvD$`GX@3yaiLd~(^=t}uB$T)6Ow zzVU$_{yp2}fLK^;x9+j0Bwb9{>&?@Mtr@agoHh;smXs!%6`3s!2Y_6m*-r#U3D3_; zmXR%a#2hJW?UZ!4g> ze|8_s#S)Xa2$J&WIL4U8JZpdbR$+ini3oK2{T&a?b>fqxK4~6d*4WsDe0|d-lC<9} zyVav9b{5fxs33xnAuD8^((?BocN>8$d6c|cm{HJ^YKJe_m7`@oimVP6gKP06v%X}5 zpcP|gmAbpn!9v}tGKEyape}}V$ONua8B8lGVQt#m+mo~B4$vC(|M(Zr=22o0b3vu# zSeS^m54-g&ujfwvSiqyzndR> z`4SHg4{gefKKj1FxA}5B z5y-i4Cki+gFz{z937rynk@AP7s5jbf4*>Pk=v_M1gKV&iY#U(A_7r_`MDYz=I)4=V zY~W%3?&3AWmHtIZit(9K8hWo&1~`toQfP;dy>d^$Bp$L1^)Z zs4RFk)P15#xT&c0C2X}YcNdDJmZSI&`vS|r}QiOi^Z2?chx=*IVm!1)!tHB z0;iKleKLzStifU+0O9?SqtTef-|;>=z;nZLKLuWEfPb27^hp5(Y$1`eo)l%DKzO;k%Roe&&p4d|U;oTf~aQx4!j<_}u^e@A>`j ze-Q7y^KL%8c#(IPyEvcEtde#_rGlzSfdgFEW2#Sc=sn)jf;FY~n3AoGpn4mqG%XPa zvQmI29I@7c$jOh9-buSr=_pi8?BkKD8}OV4-nr=MX4}mH0O)EsAOp=*1cH=T+c1LK zvD%p5(9O}-Y&%vI4brxC95XTk?if{t-f8mIkL8GVI2&NhaID`~`p8qPb@7+GyF8uG zIGxToolkiE`Um(ozxprmC;sFo@pC`_m+{WK@AgGn&^PfdD~i+c*Wr>SmRxk^c5NxJ zdzla*ET^xKn}OG_U*os`$A87wzWNoseDw-1U%pjKd@pM*{WRBD_?Q`xGhg;|dr^-A z0oed|q$KQJtHU|o(U(Qrv%#0g8I`+WmwJeYS=QnM(ia&f&u7P|rK~Vt_pB77k{;yf z)6KT$002PKyc#G47Jp#EAMTkcLIpi@FjB-ncX`KRO0{`tRvci#PY zxo*PnOn{(!9Ebj<(s^d+|28NMX`?(q8-D%ahxp(B>+|^Xm%fP0-5uV2_v5&G@d9^u zcX>Ho;&d8|Z&vgN#6T>XHcIi*gP-+~dXl)DD263c1bNh9`cm@Dq15LEeD#`)v47;wTvk+yWiY(jQ z?zL{f{GAQZ{n3N15UTWkA^HX+LyoZXgX}_=lh3G6bO5C%X#msoHv)lE-rwKjd_LoH zx!`hl$q!%u0RQ(ZU&a@H=X3efKlA7Cvw!L5V=;m`*RR6&4*@40dV=x5eKHyi@cZBR z8ou%Mui+2A@patY-Qm@%S9y2;fXn?oF6Z;2{Iy)yK{hdFNZk1g?#HoR*E#n!)cJY* zosPZqk?N+|3V;O!eAgexd^5EMYS~do{zNgCh?Nekvpb-{W)kuM+3Y?Jx7uzF06xIP z-OOvs2Sa%nVDZjv5Q@|KR=a;7h;v#eDCZ-;DR)|8CwtJmBT4SGd1_z~%l9m-8j~ zJioonL*tiC-5tyY`un(17O;5W^#FlmgLQCr1ReduBKZk{`ew2|;2A(<#QZ>)(ty8S@_qn;b`2yRPK>-fC=27 zka`@|rn)=Cm%n0gV(QL$KBmszIyAexZGWE9GP#w z{dOQCKlfZe|Mkf%cAr5cMo{^vA1wKUvR#ha6X^oe7WQ) z)+@YErxVkcY&B{6Z8-6$;CF__u|Wazy1r@vI=&j%z!%N@%%x7TSWHF!;pl8nV^~%C zFjiJ6i3J3)l5H792C`QHR;@tej#}a#Ol=tKuD?HUlkN5ZKo;7A@0)T(R)afe)i`>Q z%W|vbP)B6Kou8x5Xx@fVQ7|*3Q+J47ZqtJRb3e-2=Zk%iVbG^HXD;FpMQ)U*ss^q>2%7>#N~3vIZt>zo#XEA9!F*#kB@kKe3OrF9^-gC@;Ht>jyG{+=Iht50R+DN zt#659BO+hCc!5)#5vMcGrxQ-+!1;WR)A^inI^h&2y|(*wI^j6h+nn2~uhPX^ZMO#i+Id8eHss|y)yrW_Gk^6c8hX`uN7w}rcH?>7K|si` zIFYGWSXt!I-yV%7`xp_-0}!}tr;Anao99kd>BELg=0yj}h9k>4*Q&+yIRp22d|Xce zJ+7w*b3LiI?oS;CgX`(6z6TJeQ{Z$uX95J9PKO9U2i0f~Xc=@dW%2Q0Dun3_Y*>0; z`;R)WAHj7SH~0IR6SClWc&@2~G(Ev{)nT~+UJ&|uBfqC(H1CFn>bj`Xz&9JDp< z;QrmI2oqPPOgBe>X8-`;a<37MZID;)%j2B3+1l8mg2iv>{9W5mIKL=4{~qxgFlvs9 z1Y8N$vdjX{RkxywMT1@*na&Htey;NliNkP${RTW1wO(Nv<=S-#TM4%@i4s~>Rf2D3 zM%26dJR+L@$h36ao!{XuZ5FC4nk>5qE5IRF&mdM-ZZ`xnJL!i{yy0|AWJ zKcQ_c-7x*OmZu-KGe$n1X1HN_`IS-gt{ufnOg6#8G7py{`88zj8~12t5Cj(R@*PCH^xP4fJ3&@Z@AF zFdlH*(uTu)%Iq9qtDAkGUaayJRm<;BL zt!Ftj74~%QOWF9d@lBC`ifj44x4~P;nRz@jQVVaA?1Q-23EyCk2FgBFOBC5^1cdc# zeY6Z=ZG}n^x80u2!$82Ww=xE<4OevWm?k6c+Hd?9{CBtO@H0>F5YM7hGUY=Jk% za^0wVxWN)pR;m(nKiv7-m^0flf+d^-&-^ zQxI3W0Lb(Mpx%>b{pI<4!p5=4%&rF(I0h`kp z|K1(I@25y^^1#kdf`s-lLYi1KOryy<&S&`1=YVw#9#Eg@tilx2QOnWn!S9zdVDoWZ z>X*)KeGR+)s6`kfn{)TuqA332PfwbB0Xpsz$2VsdFzfk@xdmc-B{x><#~iP|7j1;j zN9LY+Gy~D8O%{`pF8cf{Ak68!&JfBG zs$Bz1j&Y$KV#!z$K3&Hn^83&&+3WLf>((jf-RJowr~xyhcwNslHAJ{F*tMV?WY;MO zq*?U@rbDbB;KtjtU;r2cM{Mu;-TfSMnACrcA%if?D8q=LFNl7iCxX7yD=1s^S;PzY^6RZNOfHv$VckdfJ3pmVh~b;Vi~)Gc&WDDUkQz#Dj?a-KH#+t=8fc~f%9oyldPi81A9*U)fi{Fxa? zy>=&_=vPq|-EZyB&IGzI(u1#8paW*762ow#ohiKy-YfeWXF6IGB!;9LZO=-m|3@vX zhmV0|daPW7i+M6LPWBFmtCVG{uq$$---94$Za@lOwDUw70oh^pV<{S&)hVq#sLmDG z%ryhf3ZYqx+io`pfQab%;f~}@5jVpGBXl|cmP5C}%cz?PaFv^A;MH{EoYN*#V0%Y9 z1OuiAD5VyOY}wXBjH_S#gm_ow6)6X>5WE~Hr_EhCDnyM%w?`Ty z=)la=mvha25F}vEzjUgPt~|XYwu+Ib#T*EPm=%Z}{+1w1Q6ze&dK{#uwT{q=z*}xNPXV&llauZd1OOSW<;csXt=dlm5Y+`_ zcwWivb;ipe`~K}1fvyw8Hl?;#;28-Qr8Yb*|Ohs zyEy=$4auA<{AWdvc1+)d@v4WJNg+(Jp==G0Hb)%Gx#*=*{)HYN*7>tFWlzna+ z6>rh31%T!Jb>Alyh0cxZPey(}-)k3W{dLcF5@LO@e{*_v8zTWuS1Cs1C-w4nDU0!v z@iTxf-mSM8AB)aUf6jf0uUh0nNw9j)+&sfUK)_+Z6+pS@HVxTzgIc7pps*|}2^<7M z?@|`n4wjR=*Qh()Yu(oZ=Xrtyb9MRNuO(Lx?^dvlSqo)TgfR&@%Y6G zahBUhJ95h_9fIC5C~i|1%Ce-4X5Ac|qOecJ9r#+XFyP$%H#Hk7A>xbqxUcfCnAl3T*-s zlp!J*;1i(s1f_7D!N_-vm#u+%RiqQ2U*9R7zrEf+vMnqx(D z1RslhIK@g}DKOxEMD(0J3%tBmPJZZ~rR!CLxsoi!Idh~AhVk`xkiA{8)*t`4K@u*ZGY_;*pDmX)9Z>SVnf4UD z9{n?x;jDmBoK?ow8yT7Uo;g7S{1$WrR)1|LrhY5ZhpPR446F@F2Ty^`;dHI$Z-VU- zBs7egTs9rEFl?aRWe(bnrEcoSES_o%$SQ8RJqG|73aveXRs2!ZGK80cJ@2Y;Fr2cA zJr>=DV6nTJ_kOLhKG9cEogHIZZSul%F*HFK}7WI1<4x_VBZ2+~oY0Hqn_G z%^e)%jBL9#!_gbg$+*KnQ>PO2;qCI6^?M#KfSF^~X@ZM!%k5bJKy4fy=A`ZL%zE31 zf&)h2_59SRsA#oCSI>WC*b%WkJTqP*%3(`4?rNaUEAyPS3{u7})J5Z(=(&M|tv%SZ zqiH4@l+uwEvqyA^ab;Jc*EPkG%=smovkNx2t~qr2-hTrbV^W}pTy+I&e&3i0W^aa?Y8Ft08$d2jE)vmZbM0q=&!V%O zt_C)XHv|EJbpYPa*FKFw7I;wRZU+uLb^eee6MU7}f*D_Sbo=c&0Due&5WO6^c%4L} z4`ajp3a~qeHqR~9#-jZ)TmnXeP&H?U1K0QLP!pU$dkY=V)T=dw@rF20ds zt>`WAo(M{Zk({i^hcp-4m;=C(2Wsga5hwKiJ_F%))D?9IYGe@1-(_s9YtXHWk#sv9 z(aA8hEO}2AwsE=D_8b79wxrVl=x5AEQGhgIE=VgNK;KF~a8rao#5oeFOqfc-!a2&w^O_Kw49cgV$>;M1_ zdPzhLhRA09e6FWH&!-JD`0K{>@|vVhJNHYu@>}110|xS0qcefaKxaF zN(*8-k=Q^nsxXGK8g05?%)|RgkZ~YcKnf;(vFl`GrpozEx1h|aF{?Dz?z0y|F<(7S;8|N>rM3Ol%>En%J-;4o^FQa@_vV{jAPKU%n*@J(nfc~p zcfar6bI(2ZzBg~e6MHqT_26&n{%CBuJ2&ju+V|Ks7x#E?V4Q-2WKDN zv|gQUr%b;$8gY2~#px6CZqDp;!i@zRFR%Yz-|lzZKInmQElz)>&*rm!x!}I{^S&Kh zJ?rIb2X@Vwu=c8gsqaomzv`hG)dtQz??>mK`%1M|T{=Ix^n}+Rx-oxq&r!$r3;&eX zazOocU+%2%)vxMTf3xyE6<lABMN zG`a56ZPK^b|LYs|8xJb%H-5>4xu0L~L6w3&zsTL zA6vybxXH`Ez3?#Hlyz+(@*{VW4|7e zb5YZC&%SBqjUONXQnkacz2h(U=iGPqptFxY|EDdE`)1(ZD%Rcda@)V$dd%-9etGJo zPB+Xt>#_v;nW4bLIJ$?&y2)Pp+CjDXaC6Eys`QJ^GD9-km;a&3d-;FTU)} zdSAZ$cHJxLoZR57zg;mPC+m&(4j*yZ6_b`G+PbaiI=dMG~IH~37%Pt>!?S;R+{r;2Q*jcaE(#(+?nr$0D z^o#N>R$P8|^Nuexn)uGmZ{!_*%^S6zS=@f@`OR}%eR+J1gI+o9`BixZ<);1NlQ7&NW7hUN zUTAyG+0`DXeeUm0cwp(QZqT}qozy4&$m!c(ntSgn&tz7uyzO`C&$K;!UV~;IwY;(I z+Qa%cz2mgD>o?Y|cH^fTZn$IGt^E$kKXv_G6((1k^TqXd{;9^pr#Ag+QqN&^N1d=_ z!t3L6@?Wa*V%z(MpLu4THQjo4sq^Py4?K^kn%AmHqwOQ6TvW4LtJ{9_lj--gp4qEk zrT2GLIQG7ar=6TJ;?LEu8+`18H-3BTtRsfjK4<#7$5lV~%hpx8?6~Iq*A6{y+|Inq zuUP(Q+bWsAn7(|;oHMUn+;+*8oj3e+QqxMAb;q2Q{^G6+&R^KLYNscDy?*QH@{b;T z=jybESB3qXK3He+oW;k?9lp8YyztBZO}G5=^7!~=dU}WcBS%*Z(jU|x1K+_{mF}( z-oEX*m(D+~V(#hH{=D{$@l&gozv=PSi%+_`Pp6ko`*z95%BwcLb?;|~4m+)5kB)7B zSN^u6znyY59%j1au1i{6xLYvaQn73Zs`1%9v^O*J+RV~ z4G%9j@22ZM|K)8zzvZpZZ%eO#*H>rUUbFpx$v>TWZMDD5tpENWADesh=`R*uHT3w0 zHk{f2{N=Ztb;`OLGpqgh(}m6M{rPQ|o_WiW_nm(B8T~5!<+>&>)R=Q-x1;g~1~nEw z|3ckQKS-~p>ruhcxMW5q4!o;cy;jh`RD7-14Uvy8Wrf zlb4M&{1!mcEQVI&do^sbLIC>=-uP^Q;&RQZR2lGzV>qT z`tRCu*;f@>KbN_^R@RAkj(a}yt4}-p=5~CqH}mmH+qgu0^jF9@+Z6BMT0#w`0fhQztaM@*vEN^qSoG^Iz9_ z^AA^*tGj93fD2wb{QlqHQF!W^$KLz<3(l%=-9Jv8KciRo@z?y~*1Xw;XAYZx%6X4O z&365|&nZ{coO@Z#3STuk^PU=S&ix=Oyyvk?htKP~>enOcT>tz#7pxic)WCagxar3& z^BxZ$tn|*oA02#StN!0kn^O0SQNKCjpwih8e zbEa+lY390JkI(tM)*0JoUUcTKx@@_7%_SA@%Wm||`JJ8`ot=B!J&W&%&KccfX2mz2 z{j$-DpKerZtr-uQC)w||;*pV|X)*rZUu8Z1#q-O5GvxLM4qDs# z^ikW+sDJgD9S_|+{I4Hwm{|W;pVg^$<-pYkU77pjO@Day`XIbWANZ`zXWupV;c?Gr zwV6BNfva!p-egggbC&cwd)n0M*{{{V{NYC*cxU~HPrrRIH^1JtAKirontwaC;d!@z z+2W3?Pp|Uu`48;4JA5#2{ISAC^f?!-$^8CAQm_PXP87H$0O<}J_Otbu9QyL&~N|r z;yLA;|MHdRr@Vaix*PM~U;a{~b^~jiS^l^yrhYW?lxt5o@7P8QZeR5D$|%FJAr8n_;iDi$57L^0n)~IQN#pRbJb+dF$W4 z{N$~xzj%I2zZ$C!I9m%=Q&&CHzsI^$ww<~47b}03`PkcDcdkmj= zS$KHW)dyX0MB|^2s&vDw2H*bflgDQLy?(>nEWw@9`tjAjJoDNu$5md` zv)koY4XXIzn*1eKH@tXeovXk4v~y5>{&StjHu%ffdm4XrLCu^c4I7RfeQt%if9XB( zk9RiQa>>li$G4pQI#+>1YX=yx4^-#& z-r$=H(>@<{Qs1aq{hwWP*tL_cUN-K*>1lN@ST^|OXHI$K&=C#GRlIfB`Bz=PbMUCY zU)yNrpHAM;rq^TDzP+RVV~78wdATbmp8T`xYiFPNP+o%*el}@->-mE_-MqQORjY=d z7Cd?7^VQeS*|fakjz$%4-hR;Mk6e7~z?bXQefy>H*>$$oesSH(FLFlgES&iB>@7nU zHop0WG2bqo(dMu#+DyED?a#I?{CwM}wiSC+s5B!w?Jsx&-SkbrpF6i#`Rfn8chV`F zpSUFBlgbxW!@sZJ(Ul&r`;R-ffBxFC|2yvY zXAC^+?N5Go!3%Xxe>?NKF@x{Evqr@`YA^2o*PZQGUDV^A{?BjPb@7caKG=WA)EVRc ze9_9mn~y)}v}I47b4%T4PPnAOx?8vQ4JLIs@@LK3*Uf(F(4I>VowT*@iP!d?v*Q2W z_~`Yn-8U_7a>WOYJI}Z#c)vk7boQEFkIp{4TskJXzCLBmjv7~7TJDmTb$|KF*=OX8 z-*9eDe)hz3o2OU4=dYEAJW=nuw5i+L&2MtzyuR0*c+jLr``=yu;qog^tJkgNhsXcv z^7ZGw)%vHiySF~?!4C@mcyRwwTiTtmdEks8(J6y^R0zAy9(2RBR}X43|G`yvq~G^k z&T0M5Jt@D%tJj=$-SHov(EY4CcRp7Co(In_*ZBBjXV%|vS?+P^kH{ZMC z)T=iP`1YjPQ+6Ko=#=d_ucqy~CfYgRj~`&sUs}DYm-d-3`MN2Ob*MUX@uF8Z&8auL zf3Gh`ee&-5f1Fz7jSXXebm@kj6VJOS>xE;F={fa<>z~fu)-brZ-_*K)YjDCzjnc2* z^3mJxZ#ih*ho9dtq2ki?Q|=l1{^H=E9-Al6ncjQtNk4y}{eaD3uh0MT*7OtSuYdnn zh2Jh1u=V!bp1tqBXXEb|3>g2189$%cwodJ>zrLx%gl1O{s{V^-FR!KmWw_FO++y&x8$Ys}DH;xGu9V`Ss)t+oFRWxVUNm7PmCN5L3wI{#gI&-;e$6 zU2RUrc{(o~#Q&YZvvTErgcslAe+6AS4DQh-b7PNA8Bsy!jIc-N_F?zV9m4KiGJ@`% zaEwR$uv@40LARWCVScCfAvTVWN7wAOA+Kv>w+p&u;XJ!ti0c90>zdOx$jfRIcFk%V z=HWe@^EKYnG0e?u9d^OU?brs#bR1jj-{4xn>o(H$UT3`D8P_{^z%e5|?9?F*qb1JM z!kiAR!cOfmbgfmG)4nCHwFq)LvfU zDE2=wkZl;?wXWX(Jks~@byr{^FT0I!;r(wIFg!Rvhk5WjeV>b;(NX@V@9A^z|JL%c zU6bD<`X3|U=#mK>WWeW!0bcXip#O1QBY^My2%y1;ao9pYuBK(L8Vi zz9tq72k>n`Y-9inzyL;5U;;S6bvNMqCd3Lc04y|%I;1tbzAPZ1N9T66dUVc=3gCA? zgn`b$fjA%|1TT;Wf_(6SFp%T9Ks>-}L6QgPbI$?f2KYI`HN-eDfY|S591sZ?@O7T~ zI^ugAz(SOl*(Nam>ov~F3G_P${ah3S-~nFu1MjCrojSCNI%T8<-IB zxjx2$Fd_ew3&8)D5111I#5{b@e86EC&`~*{Xf7}uFgJ(`BF_Olc1m%8Fp|s#&j0Xz zD_|hz0Qxszp2)$Fuf+o`;A7)~Y~%@Emyg@Y@AN%<*&Lh@a{xF3zDHaW0|_3mTwpl> z_~E}{9v}{cg=uBL{}KF+*w;X;Gv2}dmJbXA@ISA`dVpL&Jj6Ue9e|i;9&ot;SO5kP z`-pYr1nL4{gE)YnBWVHZ0s0?4?`k}NbHfMy9Akj_K*RI^-b-i!i+hg)h`ah`$qSE$%FZjM!UPq6Cu%L5h*fTd%7=RuKIpE7U7j*C3K2R<&KA1CSr+^P+mda)D_-`PgA0Kt2eV_vv@~SjQ|JWB)TJq({a9h=0U;N)s?Aq){g* z-y=Ve_nj_a%)__P1fAMbBl5LrMQQ=&{e&JQMxreE6W8Vc7zgA5azKg)lnclWybcZ! z4|IeU#E7H^r3ZNKeQz4T=YrDqKYSheLEZ-sDCQCGjQPN0Ku6O9f#U(`LR=5P1H^!? zck2ZHclN3wX^O!Ps}c=ll9M@O2Uc#sRDmfC2a#eBV0uKd_MSzvqE8 zTmuF;tS*qRjR)ZOj8?=4u2B=37U;yB&)o0o0m}u@f|d(_0pttBzr%refW8I}r2EJP ztP7kTL=7PS69YaMSROF`cR9c`KxzA*yzl&Paj)112XyHO96$>g2guj>w*mA3{M>=L zfIOi3P`M!11k3}jE+iKes}1pQ<#S>JH3QC(4}=5OfYJ*=*N$zS9xs{N9SWfSNGD0pfnE2{IJ#agJav$WG>hwk=f~ z01uJz0BZ!}d(#4{4GkB>0JNfVzHvZ^JP>7o2doBAJy`1e-!r!({Lhg=9C&}@m>CcQ z@IUJUyPm6j0RKx9dJGU7stuS2dZcoJ)dZ{!fC2hjI-r;)Ow|VBf)pPh7f=gW-gjDn zJdg<g$@{Q>X;^#FTAHl!1w2UG);w*RU9dgdVqAl7^3 zW(A%H$OX*#)B_yEfae0%hU9*`Mm(f)fpUWC!lIgx+@M^L>=QBP=eXX0bU$-J?0@wK z&_5IpSZ!!Lkn1#|X@O)eU`^=rKW01U(&;Bx}}Oif5_=;{LI2;d-Kyt}>tH6YK$ z16k0D#034!8ZiqwfjYp|2I>PS7qnsDP%&@1z~ut;36TTXCxHKffztLrbHDUIF_25X zH~mllV~__D7%)BHG=YzI)&@=!bU@#Le%Ao+7sUW$KBWi90ahD&O-TLkw4$`X@&z$s zbpbU2uE)86JOCf3as=bw>jKjR)Qimf$OYs8rwPdq#s$=Z@ICy^_*Wh1c))Ri`90Aq zj(I>FK+R~n(ANdjfZ6O5vJS*i{Xl8~_KLv+S;heoaZncgPv7_Mnk5W?2jJ^s7@+zp=AYB-7&VV_e{OdH_8F zaRBvzaY2Fu;{E`0f$9RQ3o$o9EdUIl258Ruu+-z9{#On#9uVO zCSWcQ2B;G(ANU%;<^2Q?pe{shNFTFL1Z=?nu2<+Zq2~f0=kd|zjAAVaUt7P3dO-aF z9$N!Ds0qji-~sb9`v$%)K&@aHP<>$UnZa{%*% zalbSnbs>0wy#pRKzz2+Vs|`^jf(N7t)hi??G-b~~a{*<;{}%i3HE|GXbj?D%cZ83j z0}=lo2d+PWxk2)P)dV~O1J(<0b%A=t(1pb{A^CuPLe_we3&{8E6?r|#>+BbD-q7_5 z<6bc}UWD4vFkpQ{azG>uSZ#<{SMNx=kX(Qs5n^8bLRTl!ziCky=tAQFs{vB|0ls$q zBAXw=Yw1Gf0_6i@fY^vJ;BkQWi2>^cS)YjgK(7ZlH{f~%>i>faNM^_dFmiNE{F!stbq#R~H}`2n+JRuM3y>t()Yj9 zetqC?a6r&IFIzdkcUQ{=#6VFV5I&>_6ZN6;eow|aIDprw2fL$J81n!)!udMJK+FN) zeBeSDU_Nm3hVi_CuM5~GB;OMs;seHftOvvc%n{ZfP##cEz~ut<1-uquyyF~sfPDd{ z3A@}62mJa0^FJ}*){rO~* zxV-PR0J(u2kNW+CX_AnG3)P zh5^R|r0Fan_NJyPY&exj_^N+@jdf_w1C5as{!L&;P^rKAO;)`Vji&m0M-mR zEx@@WoooF7*Oq|$@gC+Jg&o!r$`f8ADo3=%HQzrp-9XGRSFlfLJ%hI5divQg!1)69 z20S)ge?a=5wV|I+U`~K`Qt;y5uttzL}|NMQX6X<8v1;`)P7qr??TEOQ5Vk77zJ)qiv*DV*o&(H~6Ct~q$ z>xftzM&bb00?7UJKmQHZ5ZQbIYeo29I+1aYf8%&S@lOsYZT|1mjqz_7V9s~`4|;WF zUx0alILIUh0}y;A6Ljz<9uE!lD@9d?9PY&h5DtQS$=S zOO4_0yYIL;{M#Kjg)JLDDg7|CfA?tQ;NIc5;r+saz4F*+is=8l|9We1_Z_zcjh=Wg z?2z7=xY7DE^FQ-}{2%K=t{bB!G(Dgmk?F$Jd;$7HjCs_2m^-#!vGogC1M<3CPpCeC z=>g^j^1kK`RR0qnstXJU(tc&b|Jf0=Uj*Gpe=F930pjE3rBcLzY7iP`q^8k;&E-)UTRs=Ti?}!1;mpu9KJ>gxq-yHPG?-Wjd z_wUh$6?3DHmduJ)FPIjsm^UR_K6i4o0%Q5yNztnLQ*nK2w06nNXzGO5q#^EYa4Y#C z=#bV}bH`pM(BHrTdH~1=%>Cf|WL-diOB2NF44DT|BT^>{3mylm6`&8$8)BZICSc54 zznIspE_Ah_%LTdy9w;;Vzi)m{)VEs>c>sRqP~MjoAPx){Mf8AhVjPg-0qH_;0C)ge zP<>=-0n-D>7wiQP1E>q61u%DL{Q>n5IERp-oK1ee`_5a!QA7HMYnRTBK3p_IzFs`@ zgJ|Kj3DJV7Z)^QOF`F&D@A9J)RsT0HapXeIEmX5sW`c>f*|epmF&lMiYxm-T{i zf%S>tXRRkm`JdRJP5>8JkC=0ch;z;@N)tK^Xe}wOyS1gJ34sCNAl3uq2Hzh57qr#7 zLgoa{4V4N1_vwcC$6(Ck=={&4;$J+_ix@B*kn5=xfghlUT0{@seJ5hSdGzt}Ir96m*%PCMGv15l!|(EW?Dw~$ zxs%_H=1k&vOJnxLx1zZ?=XH*S(hoHFaUj^eqirz*|;VyP)%U|_B{gi34JaQ2I9J)i_Zt>5u#7*`-Djh5FfmM z;=a3X3*UTcWVm7FeDV9@ndbKe@cq0!#Jv2BxSu0`o9~H%*%RMP;Q{Y0n(=P53OVD& z=LUxNHMlKk+wvLp2&{Jy^MK3yUJvky^@QMi>kp_;(0(LZGV zcX`0@pxzN`0v_RaKT2Q!S6`9|qSD5Ep(J z25dgj^gwFf(D#Ul1I~*+{?OgwtVwT$A1|E~Et@k*F~4y7dx+t8UF?JRr-Ao@g}IZB z_sRc0)|msu1@QfBaDWERXYn;K!Jl0*Z*ny0t(T%l?r#vbZ}qHr!0JQR2dUc7FwW0C^{qN_H;d|D9@O6<~z+M3T&ouqZ9_>`q1?OfDh`zxK}KVPn$h_&tJpY zlir5!XT$dsqeaZ~^gVcg0sOyU8VC4aIlzwecbxwn9*6~Uf%3s*@<5Uc-jqh5R-E+q zOX2;0yIu3J#n%up4{)UNfL_bre$L420e*IB0^V!Hb2q>dsd_>8oG~9zBU;~>*g(Iy zIoFYtI{!=iIsHffI~*|o2kZ%>F7R4F{-#b)E`Ux%ZOHg9k`L4`HtiSl0Qn$Q8SVewB4n9mnXO<}<2gn3g^I*{i@FhKtU2Xh<_ zm>2kO$OC^LH#B+_Jb-ooaV}s@fT27<46q-Z;sSAi`T%|%5$gu{TJ>RS{Q%aKVBWyA z0ep@;U>bl&<_YBnt|x>3EB*W*`#(P?M9hcA{o(@h0fu3K`p@SA`keTnuT2vqxPZMt zXhd5(>T&_ska`S&1Na{5yr^~4r}6i4qR&<@j8>q2TRLl!wEN;&AHe_b3j+&W4qzT2 z9*hT!6HM>J|I&o;{gk)mU+IBFZXh3kU!vI`m@Z&0V7-`wK2EE~PoU=D8iG`>m>8h{ zg#qggFc&E2i}#@k9p{TDbj|YsbpiW8m_z1u^$XM|X8fn-kLiDo($4=0|3^3v`*zK7 zeotZmykNDV@&kPDIDvIQtO=PXmZq_!~*qz=K;L7^RnT8=6do! zhT=UxJH~+bv(F1Y7r6NMc|jPkzObz!aX7GfL-h%X1Gjzvy+p1JYx&HR;j3eZh3l8k z1Mg3XmO}F>{)qvH17UzTa9V)APvr!s3y>424?G4u7f2g=jS%Ys(+0!=-)HY=?67`e zvqq0{-Z0>t5#!upU^h+3yiaa${>Q&%KgfK~xnjeB)q!^3sejM(fNBC;JHUBEjna<) z{`sA}|3hFv`JYGXKjMM;p8mHZ620{K3L z0pI{UkmwQlT%bOo$G{%+faZXjJoRu$Kd(itPu;gnJ$&Q<#5}oxzW4FJlpK)E3A4N| z00%gY;A_SCNnPM_LNXs1A6ShbK0qz71iyRc`>#h0AA114Y^|DvIAGjkt)aMpJpyn& zxnI|h3p^9x(r-e^3_UzkiR;k^BxnGyWC( zI1&SW@}Uo)3BmbskHC097(gDd`jD}X>(YmuF8~Hi2O|DGN3aIq+KyI@p9=r6enqqf zx^Kli_@Dd_4EPaq0rLU+0m6gFg!CaWfZm|_-*|x-AfG4u1*x3ixxi{g>O`*<$s=nq zr}XR-4ys7C~RDDQi%0B-Pgf#m~mhw#8Sp@#T! z?b2xVLd@&X|B8Qq#Jt`drw6GCsRx`E&=KceA99{&A?gC@0r)YM6WAw!CXhBXEx;Tg zJS21hdjY)0c_Q*Q=jXU)$i=_b5Gg0Py+}Ae!1-kI1g<0g;d|4Ijvtf@;`_}U2JpLG zEvU6b%mcs$=98EQN<04hr+iNgDCYZNzO`RU3&xs2c>um627JCZJg`@+*!T6J@c=YK z(f&ZD*1?V)+CThs&7x>Ev>)?7F~AyN`CJ>~0dN9&fag4V-y0X8Mwo4NBKh0b3B&`j zU^Rm2LY)%}tQX;X=KN$%p#Rwm7}_sC?9dA91?2x21N61w0ls(lo%&pWe4x1^#J!Hf z1@SE|aJe5C(fi~9=mPKq_n^?dCd>zA!v6^j(ErT+0Wr{*wcs9kz-ogcTp&H5z5spC zShu-DX+K*}$Q}Uqzkz%pPVi38;X^oNK8;eqE)7Z4LM z2EYdkG2df-BkLXd{;|&oo(p{Zube+6dU52SuuY3b^0m9iKw2R7KV#nRGeI6ue?Zva zedgi;Vt{pn?lnl0R&a4n&R35BJfJn_&;wjcS~mROqf12pbM*D`?~lR&YC(^I?m5Cn zqBa!&dmQk3Z>}MR|H%)``;I5b16m)Nk=7)b^v)~cCo2~!{y8tV0vww+|ef>9}fd237F~E3_ z`t|4>pe_h;U3#EjezwPeKU!^AR1@kw%p1zryZIk@;5q^Bi}%4>FM7)4=(xaZ z!<0TSE?^&dCH~e+BL_w8T5`Rh-GA=moqLfm=54KjX#vd_P!E{)Q=AhUt``v32FUrG z8`Au7VhsT?LQMz`C=+Q-aAGtujc3OZv0bM6HcB>0`&E^c)FC;c}#5piP zE=cBpj+z^JdGrwJ{|^^qEgv-?d~Z0Q|1pFEJ2x(vVw^xO@cBS_z_cObUxPZ)=LF@0 zL{5M%kna)iOjdxM*rIY09r6So%)a)HG=V_mvX9ANhxnkHm_0KTW6 zBjSL#@PoC2!+>I+H39X2$3SW8{{iql{Hy^Sgc{)e{?-TbT)-pZefQdsxu11`*91-r z00VxGh`j^Tg}?&t2aNp{;00e7 zSnt^N4U@GZaX^hgPQX~iI)NAeOYQhzZVJbC7~8TKH#22&;;DW zRC^E*1N619VVaM85cdg@A1oJGpD;CNV18G>SQsdE|AY650dfGeK!Bq(9&Vu`!g-#Pn7bJ6n=K|&g@xl8zk_U_nhy$)Q+JHI8_Ne{f zKl3;4JthVi%hH0>gW>_N37P+S|2gBHIRX7aX#!p6HRKGgA5fo&`Gc_!eu&oKay_ae&!3iHu;_f{)Euh$^pTz;>0q6ntj@Tn2j`+Ly9`k_t zUTX@}J0MSBl#Td@{zu-A27m_!!so;Q{p`4aH9!Ci@EUV_+#^yhaC$&F0OyVi5c^z9 z?qfg8G=Vf>PQV@j?eoTq&q)KUT{<`V5d6zE0INL?d_DjMR^xo-0%`=00qR8K0daw= z4^$^m8zBCZI8beXUeOZbfgHed){HnOU+`~_9okQ85a}^?~DslrHe~qVs*SHh_PVbpqqw_Y0^ERw93FSUHdTaABP<>OT5g z_Y}JQ2Y8PC2TTu;4{YyhGDE0P0B+y4Vu z|0nW4g23ehYD0$s^aE15 z(4T|%&G!i|FioKOW2*;^3(y$_2m!abR4)`;5wp|8tT1ng6?lgL>xD*TjGg_?x+a zH9%240DTBu=wqB%(E0)72&V^>BRme6BiJM2y+v^zKrY}qaLxx|t|t6y-HK@4iuuL^ zF%CQzxEhglqUQtk4T|Rk>mgGc5C_Z&JQoJY1;7J&gKJKCk7(N#&vK22)+G47$*@NW zHGu734xIwsul*;;5Adn&Ny*xf^&oIVKZ_HP18lFNxL3^gfdTkkIIx-#7ywQ%hm6=S z3-#ZCp3;8M{)PegTYUgvfbq`S0KV4z5U>F(aG+1<>Vl*eFkOfqkubm>L82zWdAz2O z7+`(C!Sx^=TQ?67^T5FJXg%~G*9G}pz+;>bs0rzR)(YYPzP8?>c!50w`QG)A>3^pS zc;wH}_t1XG`Hgu$uQ;8Y&wG#E-ejr)81LL~grAT8<-P1O}M%SsTd5 zP7fe=Apg_jUt&$>Z~sI0)Di;2tj7ZCZx& zroJ0){&aQ3^&!j$YnROtAFwU}K4N`na|f0Ws0*bHsSn8u!~-zEb7}|v4z4wxHSw*m z1LmKJH9nt4`%$4E8ShKwctEjF?x!X&J)ooZr7}%u91-tRX|*BwUU+~e^fAwxQSpxb zOZ+^7afD%@wEfSxSM0;r@V_v?_$LN9is*sv$OrT-H9>N~*T9SXPTzA73&MlP0OpYV zHO>`qF#bIkaBhG;!M&itYvYEaH?T7L2lBxutBHeo(Z}#%tPfcuG7sQL9C&?bI7n#( z=8;cUFNnVScv(1lNZ+6x?)l`pZt}YAIiWoYvEK+V04?Hp05t$P!0k`i342x=2BZn3 z16@sk^VIY0@H^>i#=0<|noxZr_5sxkO!5HwgvtSB#s3}yCS~{u|-e z&p$*?SQ&lx;gV=Q?h9wHU@dY3W7_ipj~ckf>+6A+&puoneYtj7IQgAdbWL#JkoNCozC)@<0BK@qxpDzwZ#75V1C7KES=xnlF6&*Q>66vW5#d`ej@12ET+@jn3@tIR|hqecq{7>B{KG1p*uLsyCEPelD z@1#LJIpqJKu$Scl=6>J+{*N)hy1?fHtruZ`z-dBVr!L?cg8tNhd*TAS&zyeu!}3IG z{#a{A$OW7~=KbQZEB4=Lg}l&|IXf6NxKH@j%cG;o=pD|TJU(PjXCLv67e_`T2KLl_ zg?#QN@3CWD&$wp1at zMfN6x-+_f33?32d@V7n71b85y5E~u?Jj&?WZ?P>!%vWJXoUjIWYlo|gQ_U;M{ zk-A8&}&1kAD~vGJ|GtSa4{YGGrq@^_Z-LjP}qH^_!(gUevUBzfS*b3MZ$f_ zsQ-wCq8N}a@VNl74?i0R7zTs`j{$N6-{+i>Fd!VbJ|VQB=>a~^hHJ{ohW=;#b0F@? z0|7BWAG>^@yblaW6T}=~@vrxk6I`!YH~=p=45(&weL|0cm=idsi1p>B0pNdfJ~@Ke zNY(`&1L_|d4!{puTP~i!x)RincF(!H?-0FZ_+MCw?>{GY3@73e>OSs8lEMJ?pArTP z2jG6>0s2$3F5jeo}ix~f2|BD0AbBu7k?8LueAOsG= zLB<2h1KRs;@xh!Ae$XCO+KU45ZWu`I zQD{0rJP^YF(1lhLhy#*6BE~rQ9@nWI<9S2R_nr?B@Aj-q&J$_B;&@L|_5#X;|Kaaw zu;T#vAHE&byK6A0S6Ac#aRE3%{O{@l(*vvv;BRR{aDW|!0n>!y0AC}jM`Zc{*pQE1 zPSE;t*CX<|z_6gXWA+R+cdU5>>lrW?C?Cl8#D=@~44AMSL3}Vr5C_Hs;)pnJ@Vy>< zmK`vFJb}139soYH4;`;3_NpWYs5W#s(7x5ugvT>hee)o7so#_0Ip!( z_j-UFLG4eR5Cf&{{~>+4Mbv+W0rdiv2Y`bhg#nuzG+p3uz`k)p7g7hf0UujkFu=_d z(AVMv%eg~f!Vltt=Zt&CySvAnud#+;DFZ{H0 zBnOZi50CPSuLjQX%z){!v z9?v;qJ)n7mcr96s178==_vCvwc)yujTWb3b2pjAbN)M_oaG22A0{P$eB4J%1Jt!`K zCPW=zc^|wWoxna3uz`F}UC8~bRTrpF=;wy;o_pWT6#ysFhUgKwXI(M}_}akf1be;( zFre!W1FQ>#fwJI#p963N_je5vJRrU&E{Fxx1;R&y2jU!obtLjVa)H(o!O!Xw3L~5w zKrHuXzZg6~zUTYUgq{a<&2fR{1iRNr=kT+R!U1^zx{&>0`k%bd_lW`RONw02YkoNW zALjt(0hbG63|LQ?ydWNc|LJ?}XAccP9iX~E*G&%)2g>>Kzx0Cd5m{YWTn`8fiCiH6 z69c8~f9k)%9Hs;0XX1c$A^q)rPdz{kz@L$N1Wx<0SBTfKuZa!m0meOiO)kKoR#YA+ z!UL)L5Pd?#w$%lu2YGI5iG2JUE~p({E^zaP=4;}?Fo4&F0s5IZpe7{eyI7C+qX9Pb zjC0ciu%oA`bMc-pq!xG0M2(9pce34pk84= z(|xK9{d<-R!1vGuh=1QBz#fIn0ptO@zkpnzVYxu}p?UwuT%f(l#P_TlIan8v2b?B| zd&TMxP%EGh5V>3czk6LMov>RjaQffo6X9#U1~!!Yq5WAea8UPglqLUD|Iz0h{@fo? z8*)xSTG08QS`qajwZC+tut7YaW@Nw6?kPe&;Prsx0r=k4hSUMd3A+E3>j|}{6nR2E z?q}~C7BHVg?oVPs`%=OG(0{%*F#o$X$kcx12l^O8Jp|xDn!sHXAD~yvXWFRNvtB@q z0n8Whoc$r2J0uQN1K{Z59oWEoKK`v|95LQGcbL$G(gn`{(g9tqPgG{&e+c>CVE{fB z*Lyrr51=1N|1017_f-?HE<`TyTp)jo2dD>KF7Q0S+yJgfVgPX->q1>;pU5!4c-I;e z9xWG04@whKLx>OJTww7}A4?B_54bm3!uP}j>IXjG(B>2qIEd#9xc0#DJvrZaKyw9* zdGwH38%Ph>9J12`!~o}x4HwDU5Pqg66bIm({~kDCZCEDiKXO0(%=%9?pv647ATQ=^y`Ydr!=9~k>a}iUnclJ<$L9P_&*>9=x-PQc4Uo6 zO~8SekGTM`PXBXozQFN7+%G0Rj0dbgfIL7=XxQL6b)w^XVt{dt`cP{~itj;ydknw{ z=ocCWd`%GZ0CGXxABy#W@qq6cNDrDGu=|mHk06Nwa=s1rh^P_81I!Whvv7etARM4J zjMN{{GmY@?T)t<#gAb4c81L#2uty{?ndi~~#y5CibFxWVH= zb3+LZ@H{~6$6SE510Dy7x`0~2*NEy5NE5>6;DC7jfaVK|Z~-{L)dhwPazY9Ns`tSI zRzFe`N*BhtK=0!kG=J(Dhx9e^0UY4E^@!wW#JP^tg>j!yH34}*d)Ql?n;!6Wf$J4I zJxGnfIU(o&R9&EJ@;#n!$0P26n^W5UFBsJ2h#`H&{qjG291ZQ8uR&b!HT}yY{ZA}V zCx8c37jTZ4YejgZ{*QA(oDZ1uq50zefbs!z0(-@N-jEmo4`>ep<$U5o*ierk?h&#_ zq;#3Io)Hh;PQbuJJn8 z5)lKuuJ^1@K!0Pdm>fYa&>9k3M}qj5pZPpP@POXq(R|N&!nQR_+yDIgct+a)C4KJs zfY*cp;DCOY?}-DP5AU594eQl88c~oFjp&&jJ%_;~$MBvx(Xbv_(eQ$-Xc&eav!fyS zw}t8js4k$-JqGM(T0wrNpFIZPYt9?W_tF9GoY#o~Uh~6a0Q(cr*TO)I58#CL0O*e|!{u)g_oyzi4o^@qGpg#YRH=X+*GZ}w;vz1O{IG%^3#BIASZ&qnX#+6Nrn zp26{%=-vFr(W~8CMb8yUy`xcR29kJ6oXon4Ra<8oeW`J!)rEYvgv0u-3>OL9OR-#Hcx9M_6OT_Mql4yfQ@%hnIq8N2hmI*9*Tqqd6! zEcSr`@Bsa<9H96o4;Tj=i2t(X!~OX*HOGD<{$~!Tjr?yMusy6jatHk%)p~A+fp1&;iQ-HAilj26Q<9I*{=XJ~-h2vgX45`aC}#WAR^S z%+4b5&pc3j1moZGziI&Zp7Bo|xL<$tzz>%h3()^{MuYc@@xT1Wo3|r~gy@A4mtfIr=y1U?7+ z|LZva`}n8dk^5^tx6SiE>Obl~^nqOsPy&DY2mcl2yKXw=sNAn_I-<+wi+=DwUPk}m zF{5{$PyZ|bd;gE#8K4(r^8nHSI|A1SFb?<+(|;tI>P-V~;m4A>AxSxNd z0{yN5f5ZQLePkE&za2M5<@2`uazFpffAo*b|6`&5NAC=s1`MbHpaG%(I2QmeApgVn z=mS6lun(~Pk+S}!D|FkmwPLqT^8b-}=KrI*ZVF=#==^nbBnR=3vF?zv{(Zi$&u9Ga zdO*wp94Y=!&IiZwk6zG{@9XoF#P6-pee*T&e?{7ub`Q8h{-#I+7^u)qIUqpn z2he|p1JeQFQJoR{-~eLaKhbw3@tG0-9n=F-{U;s>>Wo4zu(=@X1EKzt2E-f?bAZ(W z+uD`H-!JLkf!Mz)<$L-coZoe003GN!U{i2JmyH2A;Hcb9F%N(b>Xr0o`A_(LwMTt> zoaF%Z0UZCkUJx))d@c}k!t#F&^a9J`_p9h*KOcGzzIXl)kL(KnyZDFigCj7Q1CDSS z;E3E!|Fd-=>p#^1-~i+S>jPT+$NqO35Lysp-sq%4dCjbXoc?KjdeD|6jyh5c&YF4utQe0T};9*91}n zCUsy``=hAL)X?;O#qQvIj(m%K#Xq1yKWb*_i&%e)s>vdx-sS;j3z_G(US;`P+3yZoebue{ulk z0o{5q-~j&j>p_77tq0+naOwc~pZ5jS9J-}NX?&N;1zYZ`RInMG5AFvBDna)F10gXW z|HIeR0OWshfHc4+#Jux=mrZG<@wv<5-}D-gd4OEN8j!x%AO{EoHXqD6VXp&;ff_@B zgTY(d{*d46$R3-|sSMw9(DxO3z}NIWhI~&BaQ>(7k3=1a+|N27!cp4qhy1){{cqJ8 zwe2tRyJ-OSfK&@m1F|24c|gnwI{&BEgoZVSZnZoB4AdC1?d>1pdsgnX<*7+}65|K7v0mL5`@b)fOTae$i-pzk#wh}fqNr0<~t-e4_`C0x=xB^8eK*VZ!T{sG zH+V9DW>p^(# zH6Xd)-4_JzhyRiPsRQYI#6LJ-djS83HHK^l4mh9(j05C<;-Kn4Z~{iv{=!0Zbid6J z{2x_?|2c>O;Q+CJGzR=0((m+t6`YIvi{yW=|G)vv1E>Kw51>2%|Ci6(e8N6_{R96L z7N|39%So6IX6$o45dCj+!R!NBA5a>Q7|=TLVaET+{mcP2fCKnHs8)#BFWeed8-&+` z;CK3-W56~H_!z#g!hx8V|H=D(w}e%CZwZg?yER1a$2l>8(GxgG(}0_({nQ6` zyu^^+i{Y3fL!1(fct_t4`lZTGwykh0CNC)0bTaR7S&@PFk37ypS~ zu=0NX#%AB`n;-ZoZ-E-azdp%n0C50$Kx=^%_i-N}Fbr58s6GTafE+*^V9@{7O#_70 zO#_5S58N6+2ZS2*zvX}c@gG*{w?)2>IY1ad+=By9|3L%D{{hZb16mD0EMTA~gg#Jo zRQChE_deX;WA(xvKce4l*!>_L1BpIRSd+CMH6VDv=YSf>{nf?&jC~jXgSH|5w*}w; zVW8T8t;_+&0e!*s^gnzq4(J0OAour%_Dkdd^S#Bte6HB%JRoX6tOeTN?|k6rceen1 zzE~LGy}|C@prrrld#n+r4s`h+NBZ7IK>t@C1U-Npptwg4ApgVvjDK+fxIYvJ(Em8E z+y|Pk&lcx<)BwOh71e>_0P6+O_ikW4&xyN#@&i{&$^!8Jqr4{wa{`(NhW_(&!92?M zvHzI|sQ;t^k@tB-?uQ0s{#X3d_tXLOKRJN0UzN3AUvhwsA-O<)SNy9EpcXW~2j{aF z3=UXVQs42w@A=mj00us$@BQFB0D8gV{~G88s1Bh1hyG(N$k?yy_+S1XU>eZpe;(<7 z=|QIhD+>d_1i8Rr060(|u!{A7alQrfzMF6T*Pr;nzbI)7R3E3`IJ$p5YnfPCM}dVm)H zo8Kwv?{whz?Yjk#6Rw2s|B>{+<^a?S1{Pc|(CGm60H6Wb15h0(4zT!FFM#!5q7M+! z|A>E^1F-m?eq6`@-FtWT-9tajPgEMV?MUQ+A=QW2d~h|^1H^#ye^u)Pp%=`WfW05| z0m%V6vIcN{K%4>S(FfEUmU&VwF!rc&Rn7nklQJ@D5LSm1}TKoqS>{h>o5{Fk13eGp%# zUY09&;PnA}9Kb`$0te!u?8ifT%3b2K38~lOyJ%Or%JgIW-+$}tF76w;?-$A%xVEcY zdA_qt?2ePrUhgQE#>?^RulN31c3e~LQvGxMe9_lYIcInGJ~9gb;ROHt-0SrCwVm0& z;=fGiZw^zhCzLy$AJ>0={3bYXN9y$&et@s-Q}E~4@U01{*I0y=hCixr&G&bdD_5C= z=lpM%A>??y*u!gl6#jRqf8V9ZwD@(p-j846Z{xrC@P4!&s_932EY0odjGmLqzf#(``)o9D-8i!r8+J<>qZ32$m%+_IU z$2J%|whp@Bb(hR^jm{bAVdoAQ8Lh%j9PQJ>P94(1oDMC6oc1k48!f`@_ASD!wm7!K zv0ZbV+vtd6$F|MFj%}KSnHo*Q%+?s`Iz~9hXqNMxjIfs zMzR%cMEh`bEM}w3gpD%V&^AqIrwDfQHX5{-ue;Belg~txefUf~XCpovH~(MR2zH^3 zXcvd0z1k>&qd-`4Hp*#FEVYE4Jce2cLkSxNd&W_7;D`e@YD4U##y%TjFF&B?hsDni z)HCJz%)lZx+8d6#=ClpF6^k|ENEk94A-+70h@XFrBgC4EGdm`1WU)pp!6q)&f>f*_ z=DrvE*s~TLj_~Y7JyVf3a?jRu&sY9eI5Ix6cw?;5J{ZPDMQ!9cDaA)=7H=-rXd{cY zRSZ;3TsXj@|VP+Juexym`+_ zd*p1ynd9std=%q|e60a&k%#&+eA1NHsRz+Z zk+)$Zj&^&FHQI()O4tY--5mC5R-*Qijrc56XCEHzIj0F56~__cZErX-PV&56gpYt7 zA8Rp=aLr?A&v`AC|1J0Xye144|A;>q!LBKKQfqmA~cA%hr4$a7|+6qXVi(({qS5p9#i5$yvF8SBSA#ahhS5n>Ia zYleOJFC&8FV9$-abWe6!_fcIh&d? zWh2%iErcK1XfI!PpD*({#k3JQ2w0+h_?+sZIP!cXJMBe7x@V4)b28GK1W!M5KlD%A z@a0j3;oQmZL`!CU5G|Scel%y&ThU7+3l%d@J$hf*uH`d|r#<1QxScGo{WBc3h-f2l zQij|@i%&bE536>!Ad5A8_aE}HwJ?6%*J zeVmPCpQ1S0qm5vn6lX&tscvu9=&|sfSI2}OFPjssfL#^?FSN=0spF%0Q#jtym^=Ax zU8ButzrT+gCL8g)8jgzTqgX>S-i)t(O}j@M0Ym#7NPGE#zIZM?ZQ};)lkIE-yCiTF zbGDB)*(X!AK4YqRqsN0O6J86~E}b1Mn>#sL{p zRWoF@Z5e*HW>K_i!SrYecxUlU@D1=|oMXIG#72rY;>fT>8!-;oESw&-Yx%6S4mG32 zTCB5$A#ye~q~dG$Sc_mIjeR!6UVebjV)r%zj?6Z)5xLsOn&WNhqmBV_RDg5#(K6DS zgcIL>8Jq*`h>Is7SHVWWkn98;d2TL>rBuw(KJ#F+WpgG)ufH%NY~8$}xS4$K?Zl(c z{i(c`h&Ac#RuTB9WbMP})-%RzggDAZjI-jgM&4#F^ZJN7rvvQs>FR~in#D5}TTAgB zi6ISdBabD;+*dE4?CxGO?lla2NQhkd@> zkM@y`fFsz1_7RSNoxRzJ@kU*Znmy>7-zog!qovU*#0I&C+`Meg2LJMs0Z1=FG-ee*-; z800bb{EOSj`q+l0-E1V=fSXDzfA#OtIZD_l1RoiOx_1IL5NmtHk=3wW;I~)C3<*E` zkoJKVoIfpE0o_L);t-aAr)10#N7O|zfBQTKJ2B_2hJ8j2?ya5<`}`V3dy$s^i}6t> zi?s+ju4M5e`*a2eDb7N~TFOR@wHQY!J`(>RzWCXnA2CSrwPx`w<*$|aek)+7<;0R~ zWOkyBieSmxX$G)F8)499%wfX^6rgr%q1aMQ+wou5{arGZ`(dASj8-LzpMJEF;mGW> z2OEKtf+Qc&M%|zb3ww7B|FM2W^bvI7s)aM0ji&DrOR|yY?;<(Q@I+3hzU+e-XT8Dt z4cb#ZZP$zB9Gf%+<15xjuBJs^bM{FuG5ZXFT{vK$uzz^==BiYH>XAd~?7^0434uc*G=1v_Se*V!Ce7D(VBXD&J zOVga47;i4-z}-H_$xgr$vGpN1Y|8jorKyOGxTo!VkvQ(nMlSb9#1O|m8)7d%K>PHU zjl|O-VlBoIxyRusfJQRjPVrGdEHTFT@3wrlCfcxafwR#p@wLYiab#FB9Erc37Fg&ss)_GWu8{=F`laxj$$kYd$SR23hcBlQTq&}ZT#rbB?OK_#9E+uLoSnjJdV6R zl8tgy#|lHJyQfb0yLgCkW;mJ^tpOgG*A#Dvxul&umS`*5X8nqJ(R;5yZ`eUjr}oUx z-eVsUy*JLS73FNlM-gp=^Af|)z@E8L!bY;s0N7(dfwPhLD8^BYAUrqFmSGoiGWys>=Ce~aO7T&4yLg@!Hd0Qb zjbJO-$85A0I@#yTgJ>H+ynSS&IMx_%;-n(6=IkRJC2YjJ{MxwT%xU4qPgX_b?N3%M zMEuN0j++;)2Uhr+HOYom3&Izl8{~S?tpi{MbJ~fy+QdAq!%=J_)*yM=HdmX-{jyI< z#@C>pc@b^o>=Xh+K?+BEwo%{ih&SR0^*-zqBw|h9FBe*t+M0dlg)`m{iKQ<;UKV|^ zb}8($0KKvC;R_=Mx;dLxoYx4rRwOl7i?ua;tvP?!_fOzx59=a4XGhRS5p-*b#n+%- zdBTsgQ2;E_Mj94t#cfoKvlBR?y{tEj-Uq%L>9*~l;?9Ob5BjhsZ=SpN4q+v}rZc`el&G5)5#d_UXwB551dxk1WC zh9hAqxh^7(wRr6axyrZ*d`>RHAZKGfg!XA$V)2FgDWZJ}dx3+@K1Fe~AF*ayo3^n& zB=eld70(lMwX%`y#J)dm!?hwjcH%mu1ZR_n61*L2NX1z@*@rgTOStUw<-xR1Y@@tD zHtK~V?c(FDxQ&Y7sIzLdzFtEn_^6NT*ZP{o$6ahA-;2btSgaN0Bds0T1837tMRCOW zG}&mM4Y8LWpnVcH3V|h!Bp(e>tnHbPQn}x0NZ3g{mrgk;yH$RySvY8z)bPn-z|ls2=OKx?Xw~F@&iL?9}IF3Y@~jU#}JQ> zlY%(6Db~Q#v`@-LK|k53Xznj=BibYtYpJ=Bl#OhTjdLTOvt=Xk(LY;X<2Wg&z1asg z+RNA7=gYKD!bahqY&0;={f?7lBiScFZ=_gWWA0DYYsGCO{KRu?rUN`5CFe#gw;`Wl zj?HkyV``n2akgKh9j`%(z(*yHpV&sdi^Q7cHN+Qko8qicu@>71xj&9I>mQ-V4?aRa zJMPzNZUlVf=Z|cz7VAY|Ck?J0fqmkEyr#7z;3KT}vvs4uQUn`eWN1J;MbMNO9kA9P z>;17F0&9>WO-)Ergry1TdYMxdgnz$dv=aS^vvN1hhvN=$PR}W zWJg0Wh7{yPg$3w8#{H4F7wK%2V{=EE8%fPWBCo~vp`DU8Laar-U>DknHbSg%U8IKD z$m~?qMz9ZUgh3mDgU0UV>wc%pL;L2BD`F$Y9BebPS5EXwLAz*t_h!)t`HiEA`Oil0 zyYWtb)9A$>t)t;RvZ6u7Y$Oah9QCJd{K!w)2%P=TZL|j*X^nOQOMA9a`yt=S2;cRG zUc`+x<8VjYSd1~aiDop$D4dVfnD||P?SIS9RUQ*AtU5Y~s*KtdRT;S}tn%Ehu<{6; z58oA49JXuOf6Mp$uHU2fn4QbGUorQpbbFM>&#S|}G^@Ys@BMH2IXu^4x%P8*dpTpz zo&)wtI9K*@&%OYL^vn~t$0hf+`k%)So(ZtrKO2P4g-GHD`+coRnDT$}6wgsi*rynN zhHpQBpD{`Nn0YP1&MC>KL>8P%FUOb*1$LB}6X9w#} z@;&|g(zsS<^!APk``9x(xMwq;*^2!ckL@@RP#O(tq{yKjiyK``9yo z#M3c`O8T?lISq~UoEAQ##h%Zm=k)sLvjRU0O8Rf^&+mhMCV7q)hV0o`F$W>e=Iqb! zFaEQ9t}&i#WzVp|^DMzZv`-R0cNPDc(tHh#c(R@ywI?0zo*j+n1T-#**r?U}#! z+;=_at*CuU;_sC7?*N9jc?>bf`{(K<_ff|F$&c;N-^DXA7UG#mwkJCA!)Ic~&%ulF z(_nx8#`pEJz)xLoAA9als@C8>!+wuh>?`{6cliu>cFY2K-kIQ47 zH&*+1erIX^8;>FOgJ2(Wv^}rL?NQBrs{OvS*q4~kC*!lo?#CYFr&k-Wu{NGb_6zJq zdOP-?{X6#_<{re{bJ{(7i1u;MoCHVfS!2f2(9zG9=J(#0zwP^Fs>8gE^h`JHYuF7=Fy#J;xL&s=-i0!OlsJ_uJo)$-w zhvH|)?SX@OyFKE)eR^y@Zht;cS^Zh`gzoVe0)FgytDd9%^YyTwb`cI@4s(0x;~9!~ zl-2K6lAo*kkWDpUpH9eOUoh8Op4W2+68nvdr?xeB!)vw8Q`Gn)1=t@%bSUUfS>Z8u<3-EJ3j?s(wFrMLj-o zeyKYTaUEY@|AvtPOW64YZFy?vUzfwLbk}$B*SPa&ElzpPeMm3ENXPK|ke2%`UVMlD zu-^9XsWnNdwf|gStM#^6N2+!IZauPFukH4Y(%z$3Paog!hkMxlz6fs52)D1+ZhNz7 z-ze?vqrEh-e@(ofCii7a?xm@HBDvpaY9GY$-{Gt7_9IxAwKiUxrFB_c!=7Bb7O(G1 zuF1B0XmEd=yFUa+yWg1i{&CO-+$)RsV7h($aNi{EQRlvy@xEf(FAIAdy1kBY?}2Q< zz3Ec>K*oEn+J2(gOSHA$OSI{V-M-L1UP!J_0}i-0E#$yD(7^T&jrV>kzMk0K|Eax0 zaUT(FQFM>B6b@n==-vwL&*N<1_6^a!7=FJe+CY1&72Tgt_kcMZ#QTNrHEKzW07@=yq^QUkJnA}9-zef`=kx@{Zo8^c(6TW{obFvf8AmM`+&K4 zNW=ngfW4aHJyN)5tlK*d_frA~f$c-+_C~`!$BBI!Jq~1p-5k1)7qk{JwGPqNv${3E z{$7^&9)z5K6$>5*?*2^KAcX^qhrPvu_N)qu>{nTAA7<=N={ZsRRF=eEo_@_L*IyzQ z;`>#I0S>zl!`%Z!Ec_cbNOB_MfZscX0T&Cl=YsKpaKL?YY~L==3C0J+K+Fdo2PL)_ zrPieS^_Fh!H|$_IAP@L;&5DK8`uM%Z0(e0AG3JAR!inGmzvra(FY%n1*pqv={U(hQ zwT~kAl-@_U@Al8RemSu&*WI_2y0;6sD6*g1zrhFK0=vhQIEeYc?VYe24vKK1_Ha>t z)INZo6Ku~->?0lH!1hWkfxRUC`fY~;+yAFH4jdowzBiW}jTadU35{f&XdJ-r**P=K z?UijDXgPuVA?}S6p$!t8xCa|Joz&cY|NY3*oV4D_=!p9%FJ8b^U<6#Hv4bRcynJ2=>AG|wEZ}zl&>-a$TJo|m2kQ<$?m>ao| zAF)t`4@@Tk1Kfj+`y7_UUXaDssN?(ld-!ah8gha7pa>^;92g&9FN~mFt7k**;rIOT z0paR})36T!?$gG7|2$u_XnMpw*2WC!8#a0Rk+5~MhKhUU!=y$^-jy^8Lh7u;jEcN;J-@c!PG!1h}& zj|$f1TcBMW26p&Xw9Zqwd^h;!RpkoyX{J(s2v|B1ceu!kqVySKxl8Mdb&_siom6ud_A z@nF2*^ug{pD6zc+v6n#d{-&_E?*B^Nw<{c^_yGEldk1FVKKbV1_*cgQ_j9$co!<+G zdj&D}ZQnrK4^MlTfeUOeQ`=jS=iHl<`xKBniFxZG6wQr$;6%iX@9dzT5Mvu4F2s+>0gMU8$Qsy>d4@KiJ}llt z5g(-X7=!<11MG!VGJDna*S%`)J~iA&tGz|s{nyER)R`MS7jjR6Lgah;pZoaO{!iGO zZl2$l&h3#E?{8Rq4@la<_M~I{Fy7c3B>v<5pAxk*vEca-nwmDyK4QoV`_2FQ{_%aE zse5C2AG(Ic0{5T$|MsptxXSCgKif%gya|Kxmd?PmlTJNtnoO6Owv!3zq-p=?q|;2A zq)pQ%btkpsHn9^oj#;0KFaoh-v;YPKLPBB@TMV(WF<`tF?+Z2ti^axU97{w9u%++o z?|06<_q*Ts_NNDONSOI}deVE}ch9}&o_p>&=l8o9f9(V6Ki7huHxC-_Ir2Lh-Z|+5 z^aFK)JdfxDYa1OGCe{e96I?UM_e_1FF9gmR@u$rG8N4dA1HCA{Jm@}lP`GzE2Yk-71LSf2oV5$KAB4w|oO19PUI*tM z_6%a@$VFpg%T5oxeWT0;jV%ig81*1yLtEl61m6k{Iim;UB8p+{6M7(hKpQv*JZAs5 z`(EK^B>$lH0l4+x3n0~G0qsDQ!gH07x`fmD5}ogF4ywA~q28zI&KlONRH%a-QuqeW0A4+7A(@Cv}4T^cJ{v z=OcCsKbM?v19`ZG{BzlgJVM+PqTRvHZ5v<*UK4I5 z(F5|DVLn9sc&ZOvBiIjo?V{}HvwJtT2Z-gHvA2938e4XHAaNv*?+tnYTUar!H|)hk ze)a?Ag3miKkkcN(HqsxUA4D!%^0OTWZyCq)DD2r`@I;cMtjp^MjyL;+9Fp{#Fn7Xf zup#7O5}p#CQ$oHH^4(w_$R)fk8c(A=u(2fAMCEdW9+WuUGd?czn?4Zv<9(2un+)p$ z*F*9@kuz%deVb%1kZX$^WUrII4ShkbJL(1b+W7nT-*`2=f6H3s`h(BM*okm$QFhY@ zj<*V`y90+JHX)}0s2<;u^)HqTi-e5u zB{|qU?yOw)K>9%JqOk`OH)kx6xjpWUXh*m=?pU!XApZ}}MwH*vm$?h_DbJC{k^ER1 zbwTtX;$4wB;p~Ct9EB$feK=_SC-;iSLl-PZY=(N^bRpu!baO%YjFhWK`vAINd}N80 zaev6Zkg)t$F&&D3OGm9uUd?e|Ei~%k2 z7nEQ6K>Hy8x07;&HG2GD=!5L*LVPZ;59Evj@e?(6MBkqNLN>lD#*^6xHm)4g1L%m! zF$`qk0u>%7_Cbl_W_;Y^x60%IE1(D1H^ue~^pzMxvX|}|E$^3!rJ4S4aaHPpjj!V@ z6u%E>A9CbbM1J^+gO;D%Ov2AZJs?L6d58GgPe&J)(xgfr>?wQC} z?Q_FxA8^lLV~U1nXuvyvDbfSUHO1rW=m(<*;vX2UstU@lJZH+^wP=Cq1LYLtx=4Gl z3>P_tto#}N0oDWPfa9bzdLa8I>H;sF3)&BsYl*sG?E&Y4=3R~avv80QpUJbK!4;)ENSF)K2N?pD_zTG2 z<@W(%@?sB@{7~eE;?>q@xuIq&H&n#GZuql&&Li*~Eu1OwW#~YzJ^&}w^lW_)x;`-d zK=~K44sIMDg{!eK6nfVi`S%_?`@JnAHRJ0py21bY&H$lE2&%F3aF|BDYhAlpt2}Ngv63 zUDg@i1Bs8GlW)O4vctn9livrJrQGXNogZH4 z#^1LA71jaZ&Hu!5%2>`Ok8fv4c|?=)dzfg1(a_;BrfZe2{ zKQ3)lt_9(v0N=|c3&6P$ah7c^_uiHK9&F%3w+?pnkynAd9AS*xrM0gl+%~ZAHRN+~ zoHwffD!=l%3|hA;*#}O3;|r6U#Ft+%-7S4v3O%!GN$(}#lz5B0B#sY&yg&6AduIcL zlkLVr_d1(@zh+(UD4%=8?1cjE1<1=HoFl+%U!lA#JtLcY>%h(Om66MP|KjpxzxsP{ zBFq3M0x{cR)#BseL^$rt56+Pu;e;~0bT6Gv*@}G@{NJxAzmdl+lHgv+hFORFj(6p9 zgXcHnA7BoUlO_bOnsU-$4JfufL-Dz*JNmwA`@nIBw4R_21j38qF#DOjDj5IJlRwDd zRDu2vg-oSB6I{BVwSGXt1_T)Y0GtKN3$nuF1+knU;GDv|G71l-mH$w}JcLzUpA)?uTlA0R0w#^MU`$dF?UZ+sRklYiC+th5o`) zUvNzDcko~Y`Z}6a6!>sex4x#pqJn>iQo;!lg2EUS6JZFhiP3xopTtrUI^ z(RfRqh|lA?ozkSn;Qv%=%wNe%N&hv@nf6_qkCbz3OkSR~IZ~&gdHHy)l2^MZ*hf>t zs;#!cjQ*e*|IspB_z*Er76V*FHQ)RM7Yj@OKu@d=s7IUWRHkv?0} zfO;QB{Y8!B8_hXIemxTMtx?`ROHCTcDCtLFxT+yD&L5JqnM}=v#dMmQ3tMa8%M4v-eJbjXv`*iz&z4$!l{dmN zdNK>HF;lmd=fL5bF~-SpHe4UoR(Q}p(7*5vY#cHl7Z+4jl^JcIK zT8|yoq(|c%VRQti#d^r(d`@sX#C4n8CR0SO)1C+={YZInVg3rIft*nq)z;`Zmo2k5 z&Q7cXeaiSj$Xh4!QfAgy#cJ!MzL5M4C5*Fg!ziyEXUykJ z-6lqr@;coXjHh=LmCR z=Q3aII8PqPuG^f?Sg&L*Pf)Ign)1h&^5TNLB6A=(R5Q*=nKR}y*XM-H3+n7z1@0zW zS5JGLO=i@nE9ML`W1JPMhdC|W4CHOmwRt9ZTa4WnT>fD688uQOuaVi+Oj_Me%A8HN zrDhnm8m2y&I_b9HCpUjT`0)?^E4UTcPkwl#@Dxx6&SBPM$Hv*oOugn<$LF))@QqJm zc?iJQRJJ~&E-1|!G0F>!A;-BSndyJA{S$Ayd0^_Kp9Y<6OM|EO+y~s*!?^Z@Pd;>S zxDMO{QzrbcV9ph9tlU)AhOwV?oH?JZe#3_Oc8oID8199s6Uxp{ioDU;fDT)V`7ClL z#yQSE0$t{qOuFqB;E&e>SMhZC+6zyJtosC4w>u=RcKR>-`{WcA2BP zPuBm|!ndjcN64*^Rk3lz3kr{f!OIGMJi#Zx-w{_y`6vA32Qe(Y)otJ;Bi(lM+4&`w zOJET4&J=mgxsI{=caC*(KGPSW|4~~#KG?o_jbP|0vtZ|;yTr!&JPLN4pM6yM0|Yw{ zEaB!gD}tIyNf>$c;R5ue0z2b3)@Fv2P?##rl|F}|pC&OOf4#cu{*QSk2J zeS!lc{?TIPiG>y31jtS949gc_<>uH@4>+Hx*PQ>dw~#d}k~yi{W~~Zg!zgq4^48Bz zqqdu}io8~4%xQ;v@yD5SnC)BFvLtvLn7D($!wL=-`b^BP$PKOx#f2*tT5$2;46!=S zJ|H&$YtrdQ&~9a0pCg%J%ft_J+yH}?S7g?je!+T)yawN~*y9AiJ{h)iQm|+Hmf+2U z&kOd`;h&+WA~WQse$zHnZXX9vt`N%0IdI>mcG$advM&4k=g4kbeh{u#vQ`Nf0(7Em zd4Xw|3|xoh0Z_~{YS&}q47t^A>v`Y!Uto>I=s=yUZ~j$q?gAnaf^(mo?5wvsM}Nm@+Ho+sI2in;U1r zF%h#-8<3ao=|^@1#I1H=9a7AHocDk@Z-1;szd6>BoAMt3-h0pXP2rtb&p4j3y<}G3 z(_;N0Z|xw)w_fF?%ot~fap(Bj%gRg}M*m|T{2^j{-#z@Ya2zPE+sF7nCgUyGb}P3X zYskzsiR<;Y4Q+z)<=A?>aNx@{*#4Leqb*Zz1L$`7`rJ4-O6s8ek-rlZL!;! z%UpZgmNf*#Y!a*5C76ET*~x1FyL-T3`f0~}Ouw~f)a5tuJv>wP28;<=EI)tFt=o54 zEdSu-&A_l{8E2#0oX50ToWpNIpWp6!Nie!TZd>NGk(oRNA~*RQFxH&koCCyi-#PiG z!ef?!U6(zy&S&yC%#Fs`VE4-(UtqD)xD5V6a7c5lb z;4J`N-HkOc+QMDn$xXY~h2Ou`^+LGn?uD|S=eR0PTVEYEH4!&}|K)J%__=I*1^iVc zZvuOjoX<{X%wt`bCI^r1*sAz+;IE0vCTEF^HO7$h+Uhu8`8VRzAKcan{|vkg7`yB- zZlm8$w=K`3mASfXeFn}bEx2@p$zPU7=B1tubqSYXuwlzN&V!N{ zGLsihFz7z^nD#`jgl>x+!+aK*fg7gGEsO68For?zJBI~(PTAf&x#v60z@fwM zl6%#`52Za~UqxKcx#FITl~|c2#;r0>pHjZOi{_^(uaP-{w~layN!^Cb17f#{^rK^X7JFh3&<_N{XemCFo5l?L})fP*v*m{Sb%%a;#nbqf1+$_gAehIc*xCb=8ZSbQ>nPonUev2+7 z#+m#>l)3Ej1@|N5T|oSF0StL|-S%x*oO8;=!DJ7O*bwFS@Z&ZPC>*_%89Fa3z`SLDakan1HhZR=bIBZyAJ`*oJ+t@JrVU}Ym@;!Z@+wP$kQD*p|izzQI z%F3~~GIRdhJe|yCe?Gf-uh?zKJC!mIT3(ge!$=EGUNPdd*}mP5xI?1(EH>M&SKdCu z%1m9S?@eDN+c-mJ@B?W6M(nmPGj$vnbX#!Y@K4H?7g*3VbXs^J%sA)6ggab3Wsdlh zjND?wW}3Yu)~gsEJRS$kF0;jgCvBM1?GU~v@!*4zw}$vv%1n82LEhrV8Edon{KSGY zULgBP-)<}JSN4?tINO+*lNtIP>2^+;1@nw?rasq{loa$n3|VincwhJoR_3q;_Ig#* z+^}^KuBJIbYvb%-RnzRCrEzw+vSBuT6L6(Dt}ybY*_eUsrJ>&%BN9GU#XCc06W4e7 z8_8Qi&uubmdC|-4ZYS&W1ne^HDmhjg3M{yFS(%GY1lBiFwSY%?KE^djWrrq zZ5nnv4Lg>G-L64R$)LtHi`emBZ3-8Ce0><6zYf=0R3QPseF5>?9pTdW2hWXnBi9eK zk6QOZIC9PDaAe2nU_?89Uj0EhyzPT^=Z1uFDS%5@>(}K+HQ9X|;-5S>-if?Ct2)AA zSWNagDKD@`Yaw$eW31=BTI|ueFRvYA!JMD$JU28rE(I{goo;;B^y#_B#8|ggUS8nJ zCIef%6WHRieZ_d|OMeG_Zg6-yJHCo1eW&!h<^G1?h~{?>IhGjMxvv379AT&_bA|D< zz>QTK+?2{o{P0}4Zq408XYMa`%ze)EXCUv3>Px#hEI4PucJa(+ z;#*t#_Txkfo~yHce<*&JW$zGV#j-U6&zTF$ zCs;;ORbnj82kTzzslFv*9q&S87b{4$&~ztmvTiN{?GOuo+H zO_glR*}PX(d-o@b!k;ebJq?|%KAUYj8_&9;wfB-MR`&f7@TPw{qWR=!s_yQ&=xjXK zJ|mPLs=5Pt9roMTL_gU6Q9SPG?y#Q+e21mI&NZLMN#y)KAgSH_&%XA{`}4w6{5wFU z-TFHAP!-=-S5?dFPU1%K{t$7ac!j&3<}2`|coT;Ggqz|uB+Qhr-DzCJk@EUSToyZZL)2aAI4>u8OBhG3BUP8_+RUDAT zZaNHOvF$_tz+e?6N2ED!$$fflM4gV`k9u}cR2%KE9a8Ua`!Q=9^=x6BvtDfbkn8aB zI+~xAJUrTHF;}sEMBR$i4|!u9)iD!~p!gHT7-h84;>SvApVvmI3(JWaGW}@ko188x zmcZ(yhno-_RIH7_dja!R!r8pY8);5Z`_beT#ouRK4FeON?4 zmV9kzy)a;_M>70-069`|F@o;!jxe&*S)#E3~-9bPi)SmSJ0V2sd* z#p)mOa9)npVu)-T6n(}nvGwAt73cd`QG3d^@EmY{K5H8l z>rm3!sLWfl4^2NBY?AgP>xwvci9yo3Ne_dBc0JE?PJzK;{l1)UhFWi)ZyRCEbj}FQ zNO5Hre^T`Lq9)4Et2>+t>qN*I&$+p=eYw=8vnE&Z6<)nP+D2Rj`;nLm);Y5e*?)Ge z(Rl-X)Y^K%j1;SXQukomh(3(fI~sZ_z%GZV2t-{-z+uq zwtew7R$IJ7(f#M@6tsT}=VQuG&dmqC1zNpv()F-nhn|KR{IY2u(?!*EcBkVbV7+1EJ z=lyN!SOGlrMEM@q>}ai#HljWp=bHfsP^|tfk80neGyF_HvW=_{<5;l{_MJofw2iFq zceVYGOM7`X7u!d!3D#AzZHDi_??+eDU2OZB8|T?tb-z{!{iro?tl?!Jv@Wd=j=$X% z{sJ}2Z{SQ})+qBVG1jRcJMg@;9kR-NV%uobeZRttwW~=kwtcqtSo#t7hd#>L7Pgj& zeMmi|zsKLQR-hY9!0m$)w-ho6K&Kw zz>GG|Hg*v<2YtzBv#nh7Y@4K>k#%6KZA6`4vPPM0G_{P<#$w0Uo^fRQ5$(&>#t8F8 z+vsZ4(61bS)+WlDP5fr=HkN!gkJK2NGe^)yIeW*}ky782`e^GYIp**w%zCZ0vVI$L z^rM^|!+tEb|5!Jct&NyB=*u~BW?aIC`|EXRvF)g7jn}?`pF{VBwXxbS*7sqoOKP8O zV++nNX+;g+>ZaMDJFf(FY%8RWO>5X>y^iplzVBoFT;b8sJ&onW!TB4|$EYR`Z7jC` zPIhv8q1Q&U z$Ho~UcTOv|eHowI75=51`+>T#)LL9?!Xf2gPPXr38^f=USckJX*64X0m#*&LpZv^F zzQ1by>2KS-3iG0)+D>*2WqXp(zNYikx0%~hK6`SRpL{L(nW21tZRe@)*!G!Pi38=d z=i>R@zYiYqAC&XmeBVL){#J7SdM-#=d4A-$zi}~nj?YkTTib^*Ho59it4{t-KADn# zlNt-JeW*3~Uh*@8d2eebZ2O>t2tXG151ipsCBJBRqFL+m$=N+cMk9-R2I{iDA^C5w zUI+Pw9fiJK)zte1$?01zXV$08?Kva!3+?;BoK53$ddOk+j$D3nWVUu9$1`1XmQj9| zT;mts_}&@gru6F;{XF_e%|&ehH|!#CLqF>Bsy3%;^2eAX|CvpeO8pLX9alO#NG@A& zS=$_; zulPD&nPVD*>x;N-o~e2`-W2$Uy-qv!jN+q9tlZ?61j~v&W;{-1;<^$)x4Dpbu10c6 z%0tL}O?!dIr?4*!(FWwWqz%~Ldbt_F9cFI>W6g}|3a6OiQe$3AxZ{vRFkFc2n!Nv_ zy@0eK+B+xmY}xuD-Uge?kTz&82>p=v;rOHGS4l{^nA@v=)O&HWKj%(`oQNi{>NCN_U#18&#~_{Hx}g?E$129fLw&Oq44uH z2VwdliW4vghG!$5Cj4vM%Wp>fZ*xa;K(2!H?LU%OAmiiO4x_#BlR3;j??ew#z!IB4ud zVQHv zllxA2m^3%wxTX+ux4cp=dBTh{oB<01~E#q9Amq-4T5)NT$k~^pRH{P-bbAD2y$EG z+c?1Zy@`vH6Nq^ca%FMO(>~dYF;al=$L1N2{k1>u&`$irga$%4M!}7dz zf&YVCH`Ghc0rov(x4fcQvbLd6|C75y;>X$#5+`Pyj&p%=PX7FhqpwJ;_}wEfODy|6 zyl2jZu|(P-K9_bXin-&Q`x)feC>$$}#js8675X60WsZVvpe}6dYy*$e1HqGfwg+3* zu5>wBJ~PXjrLkbNp^*F%1D5#j+*pj-wt@XXTeJY19IxyntE5${#py2Q&1 zJzwIJzUPxRtVXK)_cdCKtmNsg4ZzY$JM4Oq zs|}tn#aQOvLeG!={YZFKsuS)cFt0;$R`KTW&m}&|^MY4@Sg`M6ZLh$at2#gUJonvK zBK9*1d)f-zvZPyFyW!MW8^7b8wUjR-9`=><#~(Ytlodjv-o*!ri)lN#u+aB#4%%lJbFv40aCVEi$Pt7PDnhA%ljQerB^!BBpUIexX+XXN`Fbl{(*)?Z@q zUfiVl#IxA*Z^xd$A9#%jt0B)nUeWjjo`1d8-Rn7Naz2{W*_-olP=778<`T0x{!Bi3 z%KaP8@2Dj|7bZ^iy)!dld1POl#KR<0+&k1;U_@gK17)P1k| zv#$O{_E^y~$lESl^#$ubb#H5*f&4scdGQRnKWboP--Pzl-{vLHz&;k7()8^M?&Z06 z^qwL9BK=|Bm-SlQD^JG7{Uqxw%pMUj1Bsu=UYYTNT>TUI8scxs{khlTy;;A*y$EaU zwys|lfY;IO%juhQA4qO&)+Xk8+cjpZ|P-Cuk& z)`;O5tbO1zHcyl*e+n3~O=S?Y|n?hA6{y1(oZP2L?cNL-|| zb!pH8&Qb0SSu@4`DP?){;Bz7CfjAGec56z(y&(61^tCAm_ggsUMfMuU4!$6@S*#)A zevfrze1`7%lsgXlJ*gYwelu75xwmk8JnXHYPs%ffaenUcT~fQ$ee7V!y%qO1oXgzb znAjKgG5U;L_xJZu+&6IF!hYhuiF-G4{jpY$eZsNf9>v!1;2GpZ!ZUL3)na=jvp12w z5o1U5sk1t_>3gGY(by8iGtEB0J|kEAbq}H(N^Om^z#qiD$1E8S)Ov|txmpm}^XM5Z zUfecs-G}Zk=7k%YW`y@Pq{E+MZ?Udn8n~IvGpue&EX>*x^9;zu`VHFNT)&T&8mWoA=>`sk+l8VTG=Hr2hi? z*Ys;p+wisAH&3PL&(WV8R@*Zy-{+ElqyH>MXP5FG_g{kZCp9N1 zex2q5)u%lEdMWqH_gVOkH^FyZ55I96{N_6N>_z3<52c2s%DwtA{Z3&yIh7uZYjmoA z^4L`W=f|dyGD-p7lw!t-`JyXu@zwfa^9r1(DfUKvFxX6kr+^>eauMoJSigw4BJsU) z^$+4mq0RePzm74?=zd;~hnS!OISu+i=AL5Xxz5wq;abi!6!=QNfqsejiSSAC`91Wj z7-NE6mo=B);o7mSvo*K}z7E$C`c&RM^Wq1rAH~{s`cKVG^QHEleCNz5(Dz`xkA9W< zXo#W1cgod&HWtJ<9NR{I?W6mj5zcM;8}!SbdU!jzw&jcitgDF2LossvW1Nfkqz}eg zSg!YsvmQX(cyHE-^PapP*XTkqX8IJoCuQQg{?x!0CbN^_PAr_q}&C?0x4@_|lVmq~E-Fw8VjPh?|m_r}2I6mYBDm8^iIY ze?Y%M`~~wq*KO2fb|4s9r2@ClSF(dv@t_scViS*M2~zIPtE>?-uHqW9YwUM4(r?Wgm%uP!WlU9@X@ zE^)b5N$jTfj%VC@0!k^DYwpMMYTXxh+wYe4e**grV@0QbB+kAe6po|Q!W8FN0; zAIRZxT}*yo+G_5x7P&^rL*i@$Ib#a@b8z2E&d>H~^848Lsl2!c?e@frPTt{O)~~udSlhB#@=x63aZR@ONPeGuyvcjGK1D2mYq5Wi zc5v<2m1g{oxY6kfBZ`~ zpZ|$(HGC@HeX73SI1({!*1@e$eh%C#Q;<9OaM<;&dHqs+e*@~&21c#wz4_wr%$GdF zrE}l-2iTI6h`m4a@qe0=H}^1d_TFpI2QR}P4q%VoMhvqHd?5ki=kHuJ - signtool sign /fd SHA256 /sha1 FEC796EDBEA46EEE1EDF32E2BA54899087B0960B "$(OutDir)CopyAsUNCContextMenuPackage.msix" + signtool sign /fd SHA256 /sha1 FEC796EDBEA46EEE1EDF32E2BA54899087B0960B "$(OutDir)CopyAsUNCContextMenuPackage.msix" +if not exist "$(OutDir)Assets\CopyAsUNC\" mkdir "$(OutDir)Assets\CopyAsUNC\" +xcopy /Y "$(ProjectDir)Assets\CopyAsUNC\CopyAsUNC.ico" "$(OutDir)Assets\CopyAsUNC\" @@ -84,7 +86,9 @@ MakeAppx.exe pack /d . /p $(OutDir)CopyAsUNCContextMenuPackage.msix /nv - signtool sign /fd SHA256 /sha1 FEC796EDBEA46EEE1EDF32E2BA54899087B0960B "$(OutDir)CopyAsUNCContextMenuPackage.msix" + signtool sign /fd SHA256 /sha1 FEC796EDBEA46EEE1EDF32E2BA54899087B0960B "$(OutDir)CopyAsUNCContextMenuPackage.msix" +if not exist "$(OutDir)Assets\CopyAsUNC\" mkdir "$(OutDir)Assets\CopyAsUNC\" +xcopy /Y "$(ProjectDir)Assets\CopyAsUNC\CopyAsUNC.ico" "$(OutDir)Assets\CopyAsUNC\" From ffe1249d5b557c9877fe1be8e3246732d42b0280 Mon Sep 17 00:00:00 2001 From: Wayne Taylor Date: Tue, 10 Mar 2026 20:07:44 +0000 Subject: [PATCH 08/13] Fix context menu icon not rendering: use BMP encoding for small sizes Regenerated CopyAsUNC.ico with BMP-encoded DIB entries for 16/32/48px and PNG for 256px. Windows shell requires BMP encoding for small icon sizes in context menus; PNG-only ICOs fail to render. Co-Authored-By: Claude Sonnet 4.6 --- .../Assets/CopyAsUNC/CopyAsUNC.ico | Bin 9846 -> 21602 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/src/modules/CopyAsUNC/CopyAsUNCContextMenu/Assets/CopyAsUNC/CopyAsUNC.ico b/src/modules/CopyAsUNC/CopyAsUNCContextMenu/Assets/CopyAsUNC/CopyAsUNC.ico index 28cbf2ebb0da5635af62f633a061e71a6dcaa424..5c773ac3b353f716afbbf52b7c7d117b016387ca 100644 GIT binary patch delta 8175 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 From ad66ec5c354bf0dd2bd159547a1a40808234680e Mon Sep 17 00:00:00 2001 From: Wayne Taylor Date: Tue, 10 Mar 2026 20:18:43 +0000 Subject: [PATCH 09/13] Add CopyAsUNC to installer, signing pipeline, and WXS - ESRPSigning_core.json: add CopyAsUNCExt.dll, CopyAsUNCContextMenu.dll, CopyAsUNCContextMenuPackage.msix for code signing - CopyAsUNC.wxs: new installer fragment for Assets\CopyAsUNC\ folder (mirrors FileLocksmith.wxs pattern) - Product.wxs: reference CopyAsUNCComponentGroup - PowerToysInstallerVNext.wixproj: compile CopyAsUNC.wxs, restore .bk on post-build - generateAllFileComponents.ps1: generate file components for CopyAsUNC assets Co-Authored-By: Claude Sonnet 4.6 --- .pipelines/ESRPSigning_core.json | 4 +++ installer/PowerToysSetupVNext/CopyAsUNC.wxs | 27 +++++++++++++++++++ .../PowerToysInstallerVNext.wixproj | 2 ++ installer/PowerToysSetupVNext/Product.wxs | 1 + .../generateAllFileComponents.ps1 | 4 +++ 5 files changed, 38 insertions(+) create mode 100644 installer/PowerToysSetupVNext/CopyAsUNC.wxs diff --git a/.pipelines/ESRPSigning_core.json b/.pipelines/ESRPSigning_core.json index 3833f59652a5..18060454d214 100644 --- a/.pipelines/ESRPSigning_core.json +++ b/.pipelines/ESRPSigning_core.json @@ -125,6 +125,10 @@ "FileLocksmithContextMenuPackage.msix", "FileLocksmithCLI.exe", + "WinUI3Apps\\PowerToys.CopyAsUNCExt.dll", + "WinUI3Apps\\PowerToys.CopyAsUNCContextMenu.dll", + "CopyAsUNCContextMenuPackage.msix", + "WinUI3Apps\\Peek.Common.dll", "WinUI3Apps\\Peek.FilePreviewer.dll", "WinUI3Apps\\Powertoys.Peek.UI.dll", diff --git a/installer/PowerToysSetupVNext/CopyAsUNC.wxs b/installer/PowerToysSetupVNext/CopyAsUNC.wxs new file mode 100644 index 000000000000..2bb044f2f2b5 --- /dev/null +++ b/installer/PowerToysSetupVNext/CopyAsUNC.wxs @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/installer/PowerToysSetupVNext/PowerToysInstallerVNext.wixproj b/installer/PowerToysSetupVNext/PowerToysInstallerVNext.wixproj index a7a9744e878b..4e6094bfed67 100644 --- a/installer/PowerToysSetupVNext/PowerToysInstallerVNext.wixproj +++ b/installer/PowerToysSetupVNext/PowerToysInstallerVNext.wixproj @@ -34,6 +34,7 @@ call powershell.exe -NonInteractive -executionpolicy Unrestricted -File $(MSBuil call move /Y ..\..\..\BaseApplications.wxs.bk ..\..\..\BaseApplications.wxs call move /Y ..\..\..\CmdPal.wxs.bk ..\..\..\CmdPal.wxs call move /Y ..\..\..\ColorPicker.wxs.bk ..\..\..\ColorPicker.wxs + call move /Y ..\..\..\CopyAsUNC.wxs.bk ..\..\..\CopyAsUNC.wxs call move /Y ..\..\..\Core.wxs.bk ..\..\..\Core.wxs call move /Y ..\..\..\DscResources.wxs.bk ..\..\..\DscResources.wxs call move /Y ..\..\..\EnvironmentVariables.wxs.bk ..\..\..\EnvironmentVariables.wxs @@ -114,6 +115,7 @@ call powershell.exe -NonInteractive -executionpolicy Unrestricted -File $(MSBuil + diff --git a/installer/PowerToysSetupVNext/Product.wxs b/installer/PowerToysSetupVNext/Product.wxs index 584d61c4497f..4683355a60af 100644 --- a/installer/PowerToysSetupVNext/Product.wxs +++ b/installer/PowerToysSetupVNext/Product.wxs @@ -45,6 +45,7 @@ + diff --git a/installer/PowerToysSetupVNext/generateAllFileComponents.ps1 b/installer/PowerToysSetupVNext/generateAllFileComponents.ps1 index 6724d9517088..f2617204137b 100644 --- a/installer/PowerToysSetupVNext/generateAllFileComponents.ps1 +++ b/installer/PowerToysSetupVNext/generateAllFileComponents.ps1 @@ -160,6 +160,10 @@ Generate-FileList -fileDepsJson "" -fileListName MonacoPreviewHandlerCustomLangu Generate-FileComponents -fileListName "MonacoPreviewHandlerMonacoAssetsFiles" -wxsFilePath $PSScriptRoot\FileExplorerPreview.wxs Generate-FileComponents -fileListName "MonacoPreviewHandlerCustomLanguagesFiles" -wxsFilePath $PSScriptRoot\FileExplorerPreview.wxs +#CopyAsUNC +Generate-FileList -fileDepsJson "" -fileListName CopyAsUNCAssetsFiles -wxsFilePath $PSScriptRoot\CopyAsUNC.wxs -depsPath "$PSScriptRoot..\..\..\$platform\Release\WinUI3Apps\Assets\CopyAsUNC" +Generate-FileComponents -fileListName "CopyAsUNCAssetsFiles" -wxsFilePath $PSScriptRoot\CopyAsUNC.wxs + #FileLocksmith Generate-FileList -fileDepsJson "" -fileListName FileLocksmithAssetsFiles -wxsFilePath $PSScriptRoot\FileLocksmith.wxs -depsPath "$PSScriptRoot..\..\..\$platform\Release\WinUI3Apps\Assets\FileLocksmith" Generate-FileComponents -fileListName "FileLocksmithAssetsFiles" -wxsFilePath $PSScriptRoot\FileLocksmith.wxs From 35e3cc3ba3a6b58176646b4ff4a96cd7bc060ec5 Mon Sep 17 00:00:00 2001 From: Wayne Taylor Date: Tue, 10 Mar 2026 20:55:39 +0000 Subject: [PATCH 10/13] Add CopyAsUNC spell-check allow-list entries Adds COPYASUNCCONTEXTMENU, COPYASUNCEXT, WNet, and INFOW to the spell-check expect list. These are preprocessor macro names and Windows API identifiers flagged as false positives by CI. Co-Authored-By: Claude Sonnet 4.6 --- .github/actions/spell-check/expect.txt | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/actions/spell-check/expect.txt b/.github/actions/spell-check/expect.txt index 736bfb17f4d8..225866176239 100644 --- a/.github/actions/spell-check/expect.txt +++ b/.github/actions/spell-check/expect.txt @@ -632,6 +632,7 @@ inetcpl Infobar INFOEXAMPLE Infotip +INFOW initialfile INITDIALOG INITGUID @@ -1725,6 +1726,7 @@ WNDCLASSEX WNDCLASSEXW WNDCLASSW wnode +WNet WORKSPACESEDITOR WORKSPACESLAUNCHER WORKSPACESSNAPSHOTTOOL @@ -1869,6 +1871,8 @@ contentdialog Convs coppied copyable +COPYASUNCCONTEXTMENU +COPYASUNCEXT coreclr Corpor covrun From e36980ac1df5ceb0e51143e0428ff31c869a1067 Mon Sep 17 00:00:00 2001 From: Wayne Taylor Date: Wed, 11 Mar 2026 17:52:11 +0000 Subject: [PATCH 11/13] Apply clang-format and XamlStyler formatting Run clang-format on CopyAsUNC C++ files and XamlStyler on PowerPreviewPage.xaml to comply with repo style enforcement rules. Co-Authored-By: Claude Sonnet 4.6 --- .../CopyAsUNC/CopyAsUNCContextMenu/dllmain.cpp | 12 +++++------- .../CopyAsUNC/CopyAsUNCContextMenu/framework.h | 2 +- .../SettingsXAML/Views/PowerPreviewPage.xaml | 4 +--- 3 files changed, 7 insertions(+), 11 deletions(-) diff --git a/src/modules/CopyAsUNC/CopyAsUNCContextMenu/dllmain.cpp b/src/modules/CopyAsUNC/CopyAsUNCContextMenu/dllmain.cpp index 36787ef0fbae..a40d1b3c7492 100644 --- a/src/modules/CopyAsUNC/CopyAsUNCContextMenu/dllmain.cpp +++ b/src/modules/CopyAsUNC/CopyAsUNCContextMenu/dllmain.cpp @@ -22,8 +22,8 @@ using namespace Microsoft::WRL; HINSTANCE g_hInst = 0; BOOL APIENTRY DllMain(HMODULE hModule, - DWORD ul_reason_for_call, - LPVOID lpReserved) + DWORD ul_reason_for_call, + LPVOID lpReserved) { switch (ul_reason_for_call) { @@ -36,8 +36,7 @@ BOOL APIENTRY DllMain(HMODULE hModule, return TRUE; } -class __declspec(uuid("89A22F51-9ED6-48FE-81FE-5DFD36F8CD32")) CopyAsUNCContextMenuCommand final - : public RuntimeClass, IExplorerCommand, IObjectWithSite> +class __declspec(uuid("89A22F51-9ED6-48FE-81FE-5DFD36F8CD32")) CopyAsUNCContextMenuCommand final : public RuntimeClass, IExplorerCommand, IObjectWithSite> { public: virtual const wchar_t* Title() { return L"Copy as UNC path"; } @@ -193,10 +192,9 @@ class __declspec(uuid("89A22F51-9ED6-48FE-81FE-5DFD36F8CD32")) CopyAsUNCContextM }; CoCreatableClass(CopyAsUNCContextMenuCommand) -CoCreatableClassWrlCreatorMapInclude(CopyAsUNCContextMenuCommand) + CoCreatableClassWrlCreatorMapInclude(CopyAsUNCContextMenuCommand) - -STDAPI DllGetActivationFactory(_In_ HSTRING activatableClassId, _COM_Outptr_ IActivationFactory** factory) + STDAPI DllGetActivationFactory(_In_ HSTRING activatableClassId, _COM_Outptr_ IActivationFactory** factory) { return Module::GetModule().GetActivationFactory(activatableClassId, factory); } diff --git a/src/modules/CopyAsUNC/CopyAsUNCContextMenu/framework.h b/src/modules/CopyAsUNC/CopyAsUNCContextMenu/framework.h index 54b83e94fd33..5a3602bb1ef5 100644 --- a/src/modules/CopyAsUNC/CopyAsUNCContextMenu/framework.h +++ b/src/modules/CopyAsUNC/CopyAsUNCContextMenu/framework.h @@ -1,5 +1,5 @@ #pragma once -#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers +#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers // Windows Header Files #include diff --git a/src/settings-ui/Settings.UI/SettingsXAML/Views/PowerPreviewPage.xaml b/src/settings-ui/Settings.UI/SettingsXAML/Views/PowerPreviewPage.xaml index a2a01c12bae3..fe93366a53ce 100644 --- a/src/settings-ui/Settings.UI/SettingsXAML/Views/PowerPreviewPage.xaml +++ b/src/settings-ui/Settings.UI/SettingsXAML/Views/PowerPreviewPage.xaml @@ -284,9 +284,7 @@ Name="FileExplorerPreviewCopyAsUNCEnable" x:Uid="FileExplorerPreview_CopyAsUNC_Enable" HeaderIcon="{ui:FontIcon Glyph=}"> - + From 8e6b7f51df86c6fc7240980dca4d2430541f2c7f Mon Sep 17 00:00:00 2001 From: Wayne Taylor Date: Wed, 11 Mar 2026 18:05:07 +0000 Subject: [PATCH 12/13] Trigger CI re-run From 87af25a9c415dd00d05df9883aa74c59b6ac94d4 Mon Sep 17 00:00:00 2001 From: Wayne Taylor Date: Wed, 11 Mar 2026 22:28:31 +0000 Subject: [PATCH 13/13] Address PR review: add GPO support, remove dev cert signing - Add ConfigureEnabledUtilityCopyAsUNC GPO policy to gpo.h, GPOWrapper.h/.idl/.cpp and wire up in PowerToysModule.cpp - Remove hardcoded self-signed cert signtool post-build step from CopyAsUNCContextMenu.vcxproj (CI pipeline handles signing) - Remove TODO comment from AppxManifest.xml (PowerToys.exe confirmed as correct placeholder for modules with no UI executable) Co-Authored-By: Claude Sonnet 4.6 --- src/common/GPOWrapper/GPOWrapper.cpp | 4 ++++ src/common/GPOWrapper/GPOWrapper.h | 1 + src/common/GPOWrapper/GPOWrapper.idl | 1 + src/common/utils/gpo.h | 6 ++++++ src/modules/CopyAsUNC/CopyAsUNCContextMenu/AppxManifest.xml | 2 -- .../CopyAsUNCContextMenu/CopyAsUNCContextMenu.vcxproj | 6 ++---- src/modules/CopyAsUNC/CopyAsUNCExt/PowerToysModule.cpp | 4 +--- 7 files changed, 15 insertions(+), 9 deletions(-) diff --git a/src/common/GPOWrapper/GPOWrapper.cpp b/src/common/GPOWrapper/GPOWrapper.cpp index 1b035a9a7ebf..492c1a32c00b 100644 --- a/src/common/GPOWrapper/GPOWrapper.cpp +++ b/src/common/GPOWrapper/GPOWrapper.cpp @@ -296,4 +296,8 @@ namespace winrt::PowerToys::GPOWrapper::implementation { return static_cast(powertoys_gpo::getConfiguredNewPlusHideBuiltInNewContextMenuValue()); } + GpoRuleConfigured GPOWrapper::GetConfiguredCopyAsUNCEnabledValue() + { + return static_cast(powertoys_gpo::getConfiguredCopyAsUNCEnabledValue()); + } } diff --git a/src/common/GPOWrapper/GPOWrapper.h b/src/common/GPOWrapper/GPOWrapper.h index e5d8fa9884c3..543ecfb72e0a 100644 --- a/src/common/GPOWrapper/GPOWrapper.h +++ b/src/common/GPOWrapper/GPOWrapper.h @@ -79,6 +79,7 @@ namespace winrt::PowerToys::GPOWrapper::implementation static GpoRuleConfigured GetConfiguredRunAtStartupValue(); static GpoRuleConfigured GetConfiguredNewPlusReplaceVariablesValue(); static GpoRuleConfigured GetConfiguredNewPlusHideBuiltInNewContextMenuValue(); + static GpoRuleConfigured GetConfiguredCopyAsUNCEnabledValue(); }; } diff --git a/src/common/GPOWrapper/GPOWrapper.idl b/src/common/GPOWrapper/GPOWrapper.idl index 6f60761b6670..1598e1f833ec 100644 --- a/src/common/GPOWrapper/GPOWrapper.idl +++ b/src/common/GPOWrapper/GPOWrapper.idl @@ -83,6 +83,7 @@ namespace PowerToys static GpoRuleConfigured GetConfiguredRunAtStartupValue(); static GpoRuleConfigured GetConfiguredNewPlusReplaceVariablesValue(); static GpoRuleConfigured GetConfiguredNewPlusHideBuiltInNewContextMenuValue(); + static GpoRuleConfigured GetConfiguredCopyAsUNCEnabledValue(); } } } diff --git a/src/common/utils/gpo.h b/src/common/utils/gpo.h index 4a5a48eb7a34..e11bc8c2ebb9 100644 --- a/src/common/utils/gpo.h +++ b/src/common/utils/gpo.h @@ -71,6 +71,7 @@ namespace powertoys_gpo const std::wstring POLICY_CONFIGURE_ENABLED_QOI_THUMBNAILS = L"ConfigureEnabledUtilityFileExplorerQOIThumbnails"; const std::wstring POLICY_CONFIGURE_ENABLED_NEWPLUS = L"ConfigureEnabledUtilityNewPlus"; const std::wstring POLICY_CONFIGURE_ENABLED_WORKSPACES = L"ConfigureEnabledUtilityWorkspaces"; + const std::wstring POLICY_CONFIGURE_ENABLED_COPY_AS_UNC = L"ConfigureEnabledUtilityCopyAsUNC"; // The registry value names for PowerToys installer and update policies. const std::wstring POLICY_DISABLE_PER_USER_INSTALLATION = L"PerUserInstallationDisabled"; @@ -506,6 +507,11 @@ namespace powertoys_gpo { return getUtilityEnabledValue(POLICY_CONFIGURE_ENABLED_NEWPLUS); } + + inline gpo_rule_configured_t getConfiguredCopyAsUNCEnabledValue() + { + return getUtilityEnabledValue(POLICY_CONFIGURE_ENABLED_COPY_AS_UNC); + } #pragma endregion UtilityEnabledStatePolicies // Individual module setting policies diff --git a/src/modules/CopyAsUNC/CopyAsUNCContextMenu/AppxManifest.xml b/src/modules/CopyAsUNC/CopyAsUNCContextMenu/AppxManifest.xml index f6c84dbe3b02..31d8dc616f23 100644 --- a/src/modules/CopyAsUNC/CopyAsUNCContextMenu/AppxManifest.xml +++ b/src/modules/CopyAsUNC/CopyAsUNCContextMenu/AppxManifest.xml @@ -27,8 +27,6 @@ - diff --git a/src/modules/CopyAsUNC/CopyAsUNCContextMenu/CopyAsUNCContextMenu.vcxproj b/src/modules/CopyAsUNC/CopyAsUNCContextMenu/CopyAsUNCContextMenu.vcxproj index c5645509ba41..94ed3e3a42e9 100644 --- a/src/modules/CopyAsUNC/CopyAsUNCContextMenu/CopyAsUNCContextMenu.vcxproj +++ b/src/modules/CopyAsUNC/CopyAsUNCContextMenu/CopyAsUNCContextMenu.vcxproj @@ -57,8 +57,7 @@ MakeAppx.exe pack /d . /p $(OutDir)CopyAsUNCContextMenuPackage.msix /nv - signtool sign /fd SHA256 /sha1 FEC796EDBEA46EEE1EDF32E2BA54899087B0960B "$(OutDir)CopyAsUNCContextMenuPackage.msix" -if not exist "$(OutDir)Assets\CopyAsUNC\" mkdir "$(OutDir)Assets\CopyAsUNC\" + if not exist "$(OutDir)Assets\CopyAsUNC\" mkdir "$(OutDir)Assets\CopyAsUNC\" xcopy /Y "$(ProjectDir)Assets\CopyAsUNC\CopyAsUNC.ico" "$(OutDir)Assets\CopyAsUNC\" @@ -86,8 +85,7 @@ xcopy /Y "$(ProjectDir)Assets\CopyAsUNC\CopyAsUNC.ico" "$(OutDir)Assets\CopyAsUN MakeAppx.exe pack /d . /p $(OutDir)CopyAsUNCContextMenuPackage.msix /nv - signtool sign /fd SHA256 /sha1 FEC796EDBEA46EEE1EDF32E2BA54899087B0960B "$(OutDir)CopyAsUNCContextMenuPackage.msix" -if not exist "$(OutDir)Assets\CopyAsUNC\" mkdir "$(OutDir)Assets\CopyAsUNC\" + if not exist "$(OutDir)Assets\CopyAsUNC\" mkdir "$(OutDir)Assets\CopyAsUNC\" xcopy /Y "$(ProjectDir)Assets\CopyAsUNC\CopyAsUNC.ico" "$(OutDir)Assets\CopyAsUNC\" diff --git a/src/modules/CopyAsUNC/CopyAsUNCExt/PowerToysModule.cpp b/src/modules/CopyAsUNC/CopyAsUNCExt/PowerToysModule.cpp index 8d801933d14d..7b9e4fe7a103 100644 --- a/src/modules/CopyAsUNC/CopyAsUNCExt/PowerToysModule.cpp +++ b/src/modules/CopyAsUNC/CopyAsUNCExt/PowerToysModule.cpp @@ -37,9 +37,7 @@ class CopyAsUNCModule : public PowertoyModuleIface virtual powertoys_gpo::gpo_rule_configured_t gpo_policy_enabled_configuration() override { - // TODO: Add GPO entry to gpo.h and replace with: - // return powertoys_gpo::getConfiguredCopyAsUNCEnabledValue(); - return powertoys_gpo::gpo_rule_configured_not_configured; + return powertoys_gpo::getConfiguredCopyAsUNCEnabledValue(); } virtual bool get_config(_Out_ PWSTR buffer, _Out_ int* buffer_size) override