From dba8ae680c1deec9379d9a6fca2d3183de32710b Mon Sep 17 00:00:00 2001 From: RainbowHype123 Date: Tue, 23 Jun 2026 01:39:07 -0700 Subject: [PATCH 1/2] Add Multiple Icons Support + ZlibStream Unicode + DarkExt.json changes ZlibStream Unicode is from a port I did in my own rSDK repo, and then hastily ported into the MMF2EXTs repo. It may need some extra review and/or fixes before the pull request is accepted. --- DarkEdif/DarkEdif Template/DarkExt.json | 12 +- DarkEdif/DarkEdif Template/Edittime.cpp | 7 + DarkEdif/DarkEdif Template/Ext.rc | 3 + DarkEdif/DarkEdif Template/Image.png | Bin 0 -> 1306 bytes DarkEdif/DarkEdif Template/Resource.h | 3 + DarkEdif/Inc/Shared/Edif.hpp | 4 + DarkEdif/Lib/Shared/DarkEdif.cpp | 1 + DarkEdif/Lib/Shared/Edif.cpp | 47 ++ rSDK/Inc/zconf.h | 67 +- rSDK/Inc/zlib.h | 845 +++++++++++++--------- rSDK/Lib/zlib.lib | Bin 331624 -> 344806 bytes rSDK/ZlibStream/Data.h | 28 +- rSDK/ZlibStream/Edittime.cpp | 195 +++-- rSDK/ZlibStream/Ext.rc | 8 +- rSDK/ZlibStream/General.cpp | 65 +- rSDK/ZlibStream/{EXTICON.BMP => Icon.bmp} | Bin rSDK/ZlibStream/{EXTIMG.BMP => Img.bmp} | Bin rSDK/ZlibStream/Information.h | 12 +- rSDK/ZlibStream/Main.cpp | 599 +++++++-------- rSDK/ZlibStream/Runtime.cpp | 102 +-- rSDK/ZlibStream/UpgradeLog.htm | Bin 0 -> 31898 bytes rSDK/ZlibStream/UpgradeLog2.htm | Bin 0 -> 31898 bytes 22 files changed, 1135 insertions(+), 863 deletions(-) create mode 100644 DarkEdif/DarkEdif Template/Image.png rename rSDK/ZlibStream/{EXTICON.BMP => Icon.bmp} (100%) rename rSDK/ZlibStream/{EXTIMG.BMP => Img.bmp} (100%) create mode 100644 rSDK/ZlibStream/UpgradeLog.htm create mode 100644 rSDK/ZlibStream/UpgradeLog2.htm diff --git a/DarkEdif/DarkEdif Template/DarkExt.json b/DarkEdif/DarkEdif Template/DarkExt.json index eeefd454..bb1f591b 100644 --- a/DarkEdif/DarkEdif Template/DarkExt.json +++ b/DarkEdif/DarkEdif Template/DarkExt.json @@ -77,6 +77,11 @@ { "Type": "FolderEnd" }, + { + "Title": "Props outside folder", + "Info": "This blue header is called a group inside the DarkExt.json file.", + "Type": "Group" + }, { "Title": "Static text 1", "Info": "Blank text", @@ -139,7 +144,7 @@ "About": { "Name": "Exemple objet", "Author": "Votre Nom", - "Copyright": "Copyright \u00A9 2022 par Votre Nom", + "Copyright": "Copyright \u00A9 2026 par Votre Nom", "Comment": "Une ou deux phrases pour décrire votre poste", "Help": "Help/Example.chm", "URL": "http://www.example.com/" @@ -209,6 +214,11 @@ { "Type": "FolderEnd" }, + { + "Title": "Groupe", + "Info": "Voir le fichier DarkExt.json.", + "Type": "Group" + }, { "Title": "Texte statique 1", "Info": "Texte vide", diff --git a/DarkEdif/DarkEdif Template/Edittime.cpp b/DarkEdif/DarkEdif Template/Edittime.cpp index 95885540..62555fb7 100644 --- a/DarkEdif/DarkEdif Template/Edittime.cpp +++ b/DarkEdif/DarkEdif Template/Edittime.cpp @@ -19,7 +19,11 @@ int FusionAPI MakeIconEx(mv * mV, cSurface * pIconSf, TCHAR * lpName, ObjInfo * { #pragma DllExportHint pIconSf->Delete(); + #ifdef MULTIPLEICONS + pIconSf->Clone(*Edif::SDK->Image); + #else pIconSf->Clone(*Edif::SDK->Icon); + #endif pIconSf->SetTransparentColor(RGB(255, 0, 255)); return 0; @@ -153,6 +157,8 @@ BOOL FusionAPI EditObject(mv *mV, ObjInfo * oiPtr, LevelObject * loPtr, EDITDATA // PROPERTIES // ============================================================================ +#ifndef NOPROPS + // Inserts properties into the properties of the object. BOOL FusionAPI GetProperties(mv * mV, EDITDATA * edPtr, BOOL bMasterItem) { @@ -227,6 +233,7 @@ void FusionAPI ReleasePropCreateParam(mv *mV, EDITDATA *edPtr, unsigned int Prop #pragma DllExportHint return DarkEdif::DLL::DLL_ReleasePropCreateParam(mV, edPtr, PropID, lParam); } +#endif // ============================================================================ // ROUTINES USED WHEN BUILDING diff --git a/DarkEdif/DarkEdif Template/Ext.rc b/DarkEdif/DarkEdif Template/Ext.rc index 7a032d2a..e27e3368 100644 --- a/DarkEdif/DarkEdif Template/Ext.rc +++ b/DarkEdif/DarkEdif Template/Ext.rc @@ -154,6 +154,9 @@ END #if EditorBuild IDR_EDIF_ICON Edif "Icon.png" +#ifdef MULTIPLEICONS +IDR_EDIF_IMAGE Edif "Image.png" +#endif #if !defined(DARKEXT_JSON_FILE_EXTERNAL) IDR_EDIF_JSON Edif "DarkExt.json" #endif diff --git a/DarkEdif/DarkEdif Template/Image.png b/DarkEdif/DarkEdif Template/Image.png new file mode 100644 index 0000000000000000000000000000000000000000..e5e942d41a8b9fe51c04ec0c6e4bc456e4650cca GIT binary patch literal 1306 zcmV+#1?BpQP)$bC{XBax3jymvokw0K5Qv%fwo&zUO35@`Tyr~ z&iT${zJYtV%MbvntE;W-?Ck$dR1`&gKA!*}0Zf@Ph3D6-NnDivJ7FW9IMy9GGI&k` z@cDc~C={|>PA9*&t8|1+BvAxF(_>hsIgBW77=vrO-Hy$6!?h9D2G@ekhQppRxG#MG zJnj_g>gsOXGnCkjg{`x_CeI#_=u{<~f=)ObAsSHu$aD*+hJY%E5)X(HnI0!Ly8}hl zkwg)RI6+wjDFs)mleDx{LYm0#5}h{|3Yh%sBL0WVjvl zDHdip1sfukB_Rn;LaN0Vf0$hB6R0eV0kE(3n~_qtHURML{_lut7OyVSF?4~_`A*80 z=iturpv3Jgnw7??Wi$Bf|ijDRZ}hr@|YO2>3$5l5sy>S4npaSHQHI8JLmoNPWfIQ4FYTfTzpXl=W|ys0MJN@OsyflMG1K^iDC9n4fPT?3U0F%S7u{8D)L4v-g=estdLo696@>DFR`MnXxYixO@Ar?{{kRPP^aP^J zncl_P$J!wX#D-J|?w{1h`X^iH4;%dW!}sH*9lwF~FTE(p5tG#m&ybTLC%TT2h&~4E z3Y(Dxh33;|sjaOYSNBO7065!z3Adx4(t?&m3K|fGnfG0@o3V#7Ix;1DLS*9U0iM;{!oeb EdittimeProperties; #ifndef NOPROPS diff --git a/DarkEdif/Lib/Shared/DarkEdif.cpp b/DarkEdif/Lib/Shared/DarkEdif.cpp index d3070faf..aec4c79f 100644 --- a/DarkEdif/Lib/Shared/DarkEdif.cpp +++ b/DarkEdif/Lib/Shared/DarkEdif.cpp @@ -2,6 +2,7 @@ #include "Extension.hpp" #include #include +#include #ifdef _WIN32 extern HINSTANCE hInstLib; diff --git a/DarkEdif/Lib/Shared/Edif.cpp b/DarkEdif/Lib/Shared/Edif.cpp index a1899f5c..ebf45f22 100644 --- a/DarkEdif/Lib/Shared/Edif.cpp +++ b/DarkEdif/Lib/Shared/Edif.cpp @@ -698,6 +698,53 @@ Edif::SDKClass::SDKClass(mv * mV, json_value &_json) : json (_json) DarkEdif::MsgBox::Error(_T("DarkEdif error"), _T("Blitting to ext icon surface failed. Last error: %i."), tempIcon->GetLastError()); } ExtIcon = new DarkEdif::Surface(nullptr, Icon); + + #ifdef MULTIPLEICONS + Image = new cSurface(); + char * ImageData; + size_t ImageSize; + + int resultTwo = Edif::GetDependency (ImageData, ImageSize, _T("png"), IDR_EDIF_IMAGE); + if (resultTwo != Edif::DependencyNotFound) + { + CInputMemFile * File = CInputMemFile::NewInstance(); + File->Create((LPBYTE)ImageData, ImageSize); + + const std::unique_ptr tempImage = std::make_unique(); + const bool loadedOK = ImportImageFromInputFile(mV->ImgFilterMgr, File, tempImage.get(), NULL, 0); + if (!loadedOK) + { + // Read PNG bit depth: Skip 8 byte PNG header, IHDR 4 byte chunk length/type, img width/height, + // and then get bit depth byte. + // 4 bit or less bit depth is not loadable by Fusion's PNG filter. + const std::uint8_t bitDepth = File->GetMemBuffer()[8 + 4 + 4 + 4 + 4]; + + if (bitDepth <= 4) + DarkEdif::MsgBox::Error(_T("Failed to load ext image"), _T("" PROJECT_NAME "'s Image.png uses a bit depth of %hhu, which is too small."), bitDepth); + else + DarkEdif::MsgBox::Error(_T("Failed to load ext image"), _T("" PROJECT_NAME "'s Image.png failed to load.")); + } + + File->Delete(); + + if (!tempImage->HasAlpha()) + tempImage->SetTransparentColor(RGB(255, 0, 255)); + + if (resultTwo != Edif::DependencyWasResource) + free(ImageData); + + Image->Create(tempImage->GetWidth(), tempImage->GetHeight(), proto); + + if (!tempImage->HasAlpha()) + Image->SetTransparentColor(RGB(255, 0, 255)); + else + Image->CreateAlpha(); + + if (loadedOK && tempImage->Blit(*Image) == FALSE) + DarkEdif::MsgBox::Error(_T("DarkEdif error"), _T("Blitting to ext image surface failed. Last error: %i."), tempImage->GetLastError()); + } + ExtImage = new DarkEdif::Surface(nullptr, Image); + #endif } #if USE_DARKEDIF_UPDATE_CHECKER diff --git a/rSDK/Inc/zconf.h b/rSDK/Inc/zconf.h index 5e1d68a0..828ca617 100644 --- a/rSDK/Inc/zconf.h +++ b/rSDK/Inc/zconf.h @@ -1,5 +1,5 @@ /* zconf.h -- configuration of the zlib compression library - * Copyright (C) 1995-2016 Jean-loup Gailly, Mark Adler + * Copyright (C) 1995-2026 Jean-loup Gailly, Mark Adler * For conditions of distribution and use, see copyright notice in zlib.h */ @@ -33,14 +33,21 @@ # ifndef Z_SOLO # define compress z_compress # define compress2 z_compress2 +# define compress_z z_compress_z +# define compress2_z z_compress2_z # define compressBound z_compressBound +# define compressBound_z z_compressBound_z # endif # define crc32 z_crc32 # define crc32_combine z_crc32_combine # define crc32_combine64 z_crc32_combine64 +# define crc32_combine_gen z_crc32_combine_gen +# define crc32_combine_gen64 z_crc32_combine_gen64 +# define crc32_combine_op z_crc32_combine_op # define crc32_z z_crc32_z # define deflate z_deflate # define deflateBound z_deflateBound +# define deflateBound_z z_deflateBound_z # define deflateCopy z_deflateCopy # define deflateEnd z_deflateEnd # define deflateGetDictionary z_deflateGetDictionary @@ -56,6 +63,7 @@ # define deflateSetDictionary z_deflateSetDictionary # define deflateSetHeader z_deflateSetHeader # define deflateTune z_deflateTune +# define deflateUsed z_deflateUsed # define deflate_copyright z_deflate_copyright # define get_crc_table z_get_crc_table # ifndef Z_SOLO @@ -125,9 +133,12 @@ # define inflate_copyright z_inflate_copyright # define inflate_fast z_inflate_fast # define inflate_table z_inflate_table +# define inflate_fixed z_inflate_fixed # ifndef Z_SOLO # define uncompress z_uncompress # define uncompress2 z_uncompress2 +# define uncompress_z z_uncompress_z +# define uncompress2_z z_uncompress2_z # endif # define zError z_zError # ifndef Z_SOLO @@ -231,14 +242,20 @@ # endif #endif -#if defined(ZLIB_CONST) && !defined(z_const) -# define z_const const -#else -# define z_const +#ifndef z_const +# ifdef ZLIB_CONST +# define z_const const +# else +# define z_const +# endif #endif #ifdef Z_SOLO - typedef unsigned long z_size_t; +# ifdef _WIN64 + typedef unsigned long long z_size_t; +# else + typedef unsigned long z_size_t; +# endif #else # define z_longlong long long # if defined(NO_SIZE_T) @@ -293,14 +310,6 @@ # endif #endif -#ifndef Z_ARG /* function prototypes for stdarg */ -# if defined(STDC) || defined(Z_HAVE_STDARG_H) -# define Z_ARG(args) args -# else -# define Z_ARG(args) () -# endif -#endif - /* The following definitions for FAR are needed only for MSDOS mixed * model programming (small or medium model with some far allocations). * This was tested only with MSC; for other MSDOS compilers you may have @@ -349,6 +358,9 @@ # ifdef FAR # undef FAR # endif +# ifndef WIN32_LEAN_AND_MEAN +# define WIN32_LEAN_AND_MEAN +# endif # include /* No need for _export, use ZLIB.DEF instead. */ /* For complete Windows compatibility, use WINAPI, not __stdcall. */ @@ -431,11 +443,11 @@ typedef uLong FAR uLongf; typedef unsigned long z_crc_t; #endif -#ifdef HAVE_UNISTD_H /* may be set to #if 1 by ./configure */ +#if HAVE_UNISTD_H-0 /* may be set to #if 1 by ./configure */ # define Z_HAVE_UNISTD_H #endif -#ifdef HAVE_STDARG_H /* may be set to #if 1 by ./configure */ +#if HAVE_STDARG_H-0 /* may be set to #if 1 by ./configure */ # define Z_HAVE_STDARG_H #endif @@ -467,11 +479,14 @@ typedef uLong FAR uLongf; # undef _LARGEFILE64_SOURCE #endif -#if defined(__WATCOMC__) && !defined(Z_HAVE_UNISTD_H) -# define Z_HAVE_UNISTD_H +#ifndef Z_HAVE_UNISTD_H +# if defined(__WATCOMC__) || defined(__GO32__) || \ + (defined(_LARGEFILE64_SOURCE) && !defined(_WIN32)) +# define Z_HAVE_UNISTD_H +# endif #endif #ifndef Z_SOLO -# if defined(Z_HAVE_UNISTD_H) || defined(_LARGEFILE64_SOURCE) +# if defined(Z_HAVE_UNISTD_H) # include /* for SEEK_*, off_t, and _LFS64_LARGEFILE */ # ifdef VMS # include /* for off_t */ @@ -501,17 +516,19 @@ typedef uLong FAR uLongf; #endif #ifndef z_off_t -# define z_off_t long +# define z_off_t long long #endif #if !defined(_WIN32) && defined(Z_LARGE64) # define z_off64_t off64_t +#elif defined(__MINGW32__) +# define z_off64_t long long +#elif defined(_WIN32) && !defined(__GNUC__) +# define z_off64_t __int64 +#elif defined(__GO32__) +# define z_off64_t offset_t #else -# if defined(_WIN32) && !defined(__GNUC__) && !defined(Z_SOLO) -# define z_off64_t __int64 -# else -# define z_off64_t z_off_t -# endif +# define z_off64_t z_off_t #endif /* MVS linker does not support external names larger than 8 bytes */ diff --git a/rSDK/Inc/zlib.h b/rSDK/Inc/zlib.h index f09cdaf1..a57d3361 100644 --- a/rSDK/Inc/zlib.h +++ b/rSDK/Inc/zlib.h @@ -1,7 +1,7 @@ /* zlib.h -- interface of the 'zlib' general purpose compression library - version 1.2.11, January 15th, 2017 + version 1.3.2, February 17th, 2026 - Copyright (C) 1995-2017 Jean-loup Gailly and Mark Adler + Copyright (C) 1995-2026 Jean-loup Gailly and Mark Adler This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -24,24 +24,28 @@ The data format used by the zlib library is described by RFCs (Request for - Comments) 1950 to 1952 in the files http://tools.ietf.org/html/rfc1950 + Comments) 1950 to 1952 at https://datatracker.ietf.org/doc/html/rfc1950 (zlib format), rfc1951 (deflate format) and rfc1952 (gzip format). */ #ifndef ZLIB_H #define ZLIB_H -#include "zconf.h" +#ifdef ZLIB_BUILD +# include +#else +# include "zconf.h" +#endif #ifdef __cplusplus extern "C" { #endif -#define ZLIB_VERSION "1.2.11" -#define ZLIB_VERNUM 0x12b0 +#define ZLIB_VERSION "1.3.2" +#define ZLIB_VERNUM 0x1320 #define ZLIB_VER_MAJOR 1 -#define ZLIB_VER_MINOR 2 -#define ZLIB_VER_REVISION 11 +#define ZLIB_VER_MINOR 3 +#define ZLIB_VER_REVISION 2 #define ZLIB_VER_SUBREVISION 0 /* @@ -78,8 +82,8 @@ extern "C" { even in the case of corrupted input. */ -typedef voidpf (*alloc_func) OF((voidpf opaque, uInt items, uInt size)); -typedef void (*free_func) OF((voidpf opaque, voidpf address)); +typedef voidpf (*alloc_func)(voidpf opaque, uInt items, uInt size); +typedef void (*free_func)(voidpf opaque, voidpf address); struct internal_state; @@ -217,7 +221,7 @@ typedef gz_header FAR *gz_headerp; /* basic functions */ -ZEXTERN const char * ZEXPORT zlibVersion OF((void)); +ZEXTERN const char * ZEXPORT zlibVersion(void); /* The application can compare zlibVersion and ZLIB_VERSION for consistency. If the first character differs, the library code actually used is not compatible with the zlib.h header file used by the application. This check @@ -225,12 +229,12 @@ ZEXTERN const char * ZEXPORT zlibVersion OF((void)); */ /* -ZEXTERN int ZEXPORT deflateInit OF((z_streamp strm, int level)); +ZEXTERN int ZEXPORT deflateInit(z_streamp strm, int level); Initializes the internal stream state for compression. The fields zalloc, zfree and opaque must be initialized before by the caller. If zalloc and zfree are set to Z_NULL, deflateInit updates them to use default - allocation functions. + allocation functions. total_in, total_out, adler, and msg are initialized. The compression level must be Z_DEFAULT_COMPRESSION, or between 0 and 9: 1 gives best speed, 9 gives best compression, 0 gives no compression at all @@ -247,7 +251,7 @@ ZEXTERN int ZEXPORT deflateInit OF((z_streamp strm, int level)); */ -ZEXTERN int ZEXPORT deflate OF((z_streamp strm, int flush)); +ZEXTERN int ZEXPORT deflate(z_streamp strm, int flush); /* deflate compresses as much data as possible, and stops when the input buffer becomes empty or the output buffer becomes full. It may introduce @@ -276,7 +280,7 @@ ZEXTERN int ZEXPORT deflate OF((z_streamp strm, int flush)); == 0), or after each call of deflate(). If deflate returns Z_OK and with zero avail_out, it must be called again after making room in the output buffer because there might be more output pending. See deflatePending(), - which can be used if desired to determine whether or not there is more ouput + which can be used if desired to determine whether or not there is more output in that case. Normally the parameter flush is set to Z_NO_FLUSH, which allows deflate to @@ -320,8 +324,8 @@ ZEXTERN int ZEXPORT deflate OF((z_streamp strm, int flush)); with the same value of the flush parameter and more output space (updated avail_out), until the flush is complete (deflate returns with non-zero avail_out). In the case of a Z_FULL_FLUSH or Z_SYNC_FLUSH, make sure that - avail_out is greater than six to avoid repeated flush markers due to - avail_out == 0 on return. + avail_out is greater than six when the flush marker begins, in order to avoid + repeated flush markers upon calling deflate() again when avail_out == 0. If the parameter flush is set to Z_FINISH, pending input is processed, pending output is flushed and deflate returns with Z_STREAM_END if there was @@ -360,7 +364,7 @@ ZEXTERN int ZEXPORT deflate OF((z_streamp strm, int flush)); */ -ZEXTERN int ZEXPORT deflateEnd OF((z_streamp strm)); +ZEXTERN int ZEXPORT deflateEnd(z_streamp strm); /* All dynamically allocated data structures for this stream are freed. This function discards any unprocessed input and does not flush any pending @@ -375,7 +379,7 @@ ZEXTERN int ZEXPORT deflateEnd OF((z_streamp strm)); /* -ZEXTERN int ZEXPORT inflateInit OF((z_streamp strm)); +ZEXTERN int ZEXPORT inflateInit(z_streamp strm); Initializes the internal stream state for decompression. The fields next_in, avail_in, zalloc, zfree and opaque must be initialized before by @@ -383,7 +387,8 @@ ZEXTERN int ZEXPORT inflateInit OF((z_streamp strm)); read or consumed. The allocation of a sliding window will be deferred to the first call of inflate (if the decompression does not complete on the first call). If zalloc and zfree are set to Z_NULL, inflateInit updates - them to use default allocation functions. + them to use default allocation functions. total_in, total_out, adler, and + msg are initialized. inflateInit returns Z_OK if success, Z_MEM_ERROR if there was not enough memory, Z_VERSION_ERROR if the zlib library version is incompatible with the @@ -397,7 +402,7 @@ ZEXTERN int ZEXPORT inflateInit OF((z_streamp strm)); */ -ZEXTERN int ZEXPORT inflate OF((z_streamp strm, int flush)); +ZEXTERN int ZEXPORT inflate(z_streamp strm, int flush); /* inflate decompresses as much data as possible, and stops when the input buffer becomes empty or the output buffer becomes full. It may introduce @@ -440,7 +445,7 @@ ZEXTERN int ZEXPORT inflate OF((z_streamp strm, int flush)); The Z_BLOCK option assists in appending to or combining deflate streams. To assist in this, on return inflate() always sets strm->data_type to the - number of unused bits in the last byte taken from strm->next_in, plus 64 if + number of unused bits in the input taken from strm->next_in, plus 64 if inflate() is currently decoding the last block in the deflate stream, plus 128 if inflate() returned immediately after decoding an end-of-block code or decoding the complete header up to just before the first byte of the deflate @@ -517,7 +522,7 @@ ZEXTERN int ZEXPORT inflate OF((z_streamp strm, int flush)); */ -ZEXTERN int ZEXPORT inflateEnd OF((z_streamp strm)); +ZEXTERN int ZEXPORT inflateEnd(z_streamp strm); /* All dynamically allocated data structures for this stream are freed. This function discards any unprocessed input and does not flush any pending @@ -535,16 +540,15 @@ ZEXTERN int ZEXPORT inflateEnd OF((z_streamp strm)); */ /* -ZEXTERN int ZEXPORT deflateInit2 OF((z_streamp strm, - int level, - int method, - int windowBits, - int memLevel, - int strategy)); +ZEXTERN int ZEXPORT deflateInit2(z_streamp strm, + int level, + int method, + int windowBits, + int memLevel, + int strategy); This is another version of deflateInit with more compression options. The - fields next_in, zalloc, zfree and opaque must be initialized before by the - caller. + fields zalloc, zfree and opaque must be initialized before by the caller. The method parameter is the compression method. It must be Z_DEFLATED in this version of the library. @@ -587,18 +591,21 @@ ZEXTERN int ZEXPORT deflateInit2 OF((z_streamp strm, The strategy parameter is used to tune the compression algorithm. Use the value Z_DEFAULT_STRATEGY for normal data, Z_FILTERED for data produced by a - filter (or predictor), Z_HUFFMAN_ONLY to force Huffman encoding only (no - string match), or Z_RLE to limit match distances to one (run-length - encoding). Filtered data consists mostly of small values with a somewhat - random distribution. In this case, the compression algorithm is tuned to - compress them better. The effect of Z_FILTERED is to force more Huffman - coding and less string matching; it is somewhat intermediate between - Z_DEFAULT_STRATEGY and Z_HUFFMAN_ONLY. Z_RLE is designed to be almost as - fast as Z_HUFFMAN_ONLY, but give better compression for PNG image data. The - strategy parameter only affects the compression ratio but not the - correctness of the compressed output even if it is not set appropriately. - Z_FIXED prevents the use of dynamic Huffman codes, allowing for a simpler - decoder for special applications. + filter (or predictor), Z_RLE to limit match distances to one (run-length + encoding), or Z_HUFFMAN_ONLY to force Huffman encoding only (no string + matching). Filtered data consists mostly of small values with a somewhat + random distribution, as produced by the PNG filters. In this case, the + compression algorithm is tuned to compress them better. The effect of + Z_FILTERED is to force more Huffman coding and less string matching than the + default; it is intermediate between Z_DEFAULT_STRATEGY and Z_HUFFMAN_ONLY. + Z_RLE is almost as fast as Z_HUFFMAN_ONLY, but should give better + compression for PNG image data than Huffman only. The degree of string + matching from most to none is: Z_DEFAULT_STRATEGY, Z_FILTERED, Z_RLE, then + Z_HUFFMAN_ONLY. The strategy parameter affects the compression ratio but + never the correctness of the compressed output, even if it is not set + optimally for the given data. Z_FIXED uses the default string matching, but + prevents the use of dynamic Huffman codes, allowing for a simpler decoder + for special applications. deflateInit2 returns Z_OK if success, Z_MEM_ERROR if there was not enough memory, Z_STREAM_ERROR if any parameter is invalid (such as an invalid @@ -608,9 +615,9 @@ ZEXTERN int ZEXPORT deflateInit2 OF((z_streamp strm, compression: this will be done by deflate(). */ -ZEXTERN int ZEXPORT deflateSetDictionary OF((z_streamp strm, - const Bytef *dictionary, - uInt dictLength)); +ZEXTERN int ZEXPORT deflateSetDictionary(z_streamp strm, + const Bytef *dictionary, + uInt dictLength); /* Initializes the compression dictionary from the given byte sequence without producing any compressed output. When using the zlib format, this @@ -652,16 +659,16 @@ ZEXTERN int ZEXPORT deflateSetDictionary OF((z_streamp strm, not perform any compression: this will be done by deflate(). */ -ZEXTERN int ZEXPORT deflateGetDictionary OF((z_streamp strm, - Bytef *dictionary, - uInt *dictLength)); +ZEXTERN int ZEXPORT deflateGetDictionary(z_streamp strm, + Bytef *dictionary, + uInt *dictLength); /* Returns the sliding dictionary being maintained by deflate. dictLength is set to the number of bytes in the dictionary, and that many bytes are copied to dictionary. dictionary must have enough space, where 32768 bytes is always enough. If deflateGetDictionary() is called with dictionary equal to Z_NULL, then only the dictionary length is returned, and nothing is copied. - Similary, if dictLength is Z_NULL, then it is not set. + Similarly, if dictLength is Z_NULL, then it is not set. deflateGetDictionary() may return a length less than the window size, even when more than the window size in input has been provided. It may return up @@ -674,8 +681,8 @@ ZEXTERN int ZEXPORT deflateGetDictionary OF((z_streamp strm, stream state is inconsistent. */ -ZEXTERN int ZEXPORT deflateCopy OF((z_streamp dest, - z_streamp source)); +ZEXTERN int ZEXPORT deflateCopy(z_streamp dest, + z_streamp source); /* Sets the destination stream as a complete copy of the source stream. @@ -692,31 +699,32 @@ ZEXTERN int ZEXPORT deflateCopy OF((z_streamp dest, destination. */ -ZEXTERN int ZEXPORT deflateReset OF((z_streamp strm)); +ZEXTERN int ZEXPORT deflateReset(z_streamp strm); /* This function is equivalent to deflateEnd followed by deflateInit, but does not free and reallocate the internal compression state. The stream will leave the compression level and any other attributes that may have been - set unchanged. + set unchanged. total_in, total_out, adler, and msg are initialized. deflateReset returns Z_OK if success, or Z_STREAM_ERROR if the source stream state was inconsistent (such as zalloc or state being Z_NULL). */ -ZEXTERN int ZEXPORT deflateParams OF((z_streamp strm, - int level, - int strategy)); +ZEXTERN int ZEXPORT deflateParams(z_streamp strm, + int level, + int strategy); /* Dynamically update the compression level and compression strategy. The interpretation of level and strategy is as in deflateInit2(). This can be used to switch between compression and straight copy of the input data, or to switch to a different kind of input data requiring a different strategy. If the compression approach (which is a function of the level) or the - strategy is changed, and if any input has been consumed in a previous - deflate() call, then the input available so far is compressed with the old - level and strategy using deflate(strm, Z_BLOCK). There are three approaches - for the compression levels 0, 1..3, and 4..9 respectively. The new level - and strategy will take effect at the next call of deflate(). + strategy is changed, and if there have been any deflate() calls since the + state was initialized or reset, then the input available so far is + compressed with the old level and strategy using deflate(strm, Z_BLOCK). + There are three approaches for the compression levels 0, 1..3, and 4..9 + respectively. The new level and strategy will take effect at the next call + of deflate(). If a deflate(strm, Z_BLOCK) is performed by deflateParams(), and it does not have enough output space to complete, then the parameter change will not @@ -729,7 +737,7 @@ ZEXTERN int ZEXPORT deflateParams OF((z_streamp strm, Then no more input data should be provided before the deflateParams() call. If this is done, the old level and strategy will be applied to the data compressed before deflateParams(), and the new level and strategy will be - applied to the the data compressed after deflateParams(). + applied to the data compressed after deflateParams(). deflateParams returns Z_OK on success, Z_STREAM_ERROR if the source stream state was inconsistent or if a parameter was invalid, or Z_BUF_ERROR if @@ -740,11 +748,11 @@ ZEXTERN int ZEXPORT deflateParams OF((z_streamp strm, retried with more output space. */ -ZEXTERN int ZEXPORT deflateTune OF((z_streamp strm, - int good_length, - int max_lazy, - int nice_length, - int max_chain)); +ZEXTERN int ZEXPORT deflateTune(z_streamp strm, + int good_length, + int max_lazy, + int nice_length, + int max_chain); /* Fine tune deflate's internal compression parameters. This should only be used by someone who understands the algorithm used by zlib's deflate for @@ -757,8 +765,8 @@ ZEXTERN int ZEXPORT deflateTune OF((z_streamp strm, returns Z_OK on success, or Z_STREAM_ERROR for an invalid deflate stream. */ -ZEXTERN uLong ZEXPORT deflateBound OF((z_streamp strm, - uLong sourceLen)); +ZEXTERN uLong ZEXPORT deflateBound(z_streamp strm, uLong sourceLen); +ZEXTERN z_size_t ZEXPORT deflateBound_z(z_streamp strm, z_size_t sourceLen); /* deflateBound() returns an upper bound on the compressed size after deflation of sourceLen bytes. It must be called after deflateInit() or @@ -770,11 +778,14 @@ ZEXTERN uLong ZEXPORT deflateBound OF((z_streamp strm, to return Z_STREAM_END. Note that it is possible for the compressed size to be larger than the value returned by deflateBound() if flush options other than Z_FINISH or Z_NO_FLUSH are used. + + delfateBound_z() is the same, but takes and returns a size_t length. Note + that a long is 32 bits on Windows. */ -ZEXTERN int ZEXPORT deflatePending OF((z_streamp strm, - unsigned *pending, - int *bits)); +ZEXTERN int ZEXPORT deflatePending(z_streamp strm, + unsigned *pending, + int *bits); /* deflatePending() returns the number of bytes and bits of output that have been generated, but not yet provided in the available output. The bytes not @@ -784,12 +795,27 @@ ZEXTERN int ZEXPORT deflatePending OF((z_streamp strm, or bits are Z_NULL, then those values are not set. deflatePending returns Z_OK if success, or Z_STREAM_ERROR if the source + stream state was inconsistent. If an int is 16 bits and memLevel is 9, then + it is possible for the number of pending bytes to not fit in an unsigned. In + that case Z_BUF_ERROR is returned and *pending is set to the maximum value + of an unsigned. + */ + +ZEXTERN int ZEXPORT deflateUsed(z_streamp strm, + int *bits); +/* + deflateUsed() returns in *bits the most recent number of deflate bits used + in the last byte when flushing to a byte boundary. The result is in 1..8, or + 0 if there has not yet been a flush. This helps determine the location of + the last bit of a deflate stream. + + deflateUsed returns Z_OK if success, or Z_STREAM_ERROR if the source stream state was inconsistent. */ -ZEXTERN int ZEXPORT deflatePrime OF((z_streamp strm, - int bits, - int value)); +ZEXTERN int ZEXPORT deflatePrime(z_streamp strm, + int bits, + int value); /* deflatePrime() inserts bits in the deflate output stream. The intent is that this function is used to start off the deflate output with the bits @@ -804,8 +830,8 @@ ZEXTERN int ZEXPORT deflatePrime OF((z_streamp strm, source stream state was inconsistent. */ -ZEXTERN int ZEXPORT deflateSetHeader OF((z_streamp strm, - gz_headerp head)); +ZEXTERN int ZEXPORT deflateSetHeader(z_streamp strm, + gz_headerp head); /* deflateSetHeader() provides gzip header information for when a gzip stream is requested by deflateInit2(). deflateSetHeader() may be called @@ -821,16 +847,17 @@ ZEXTERN int ZEXPORT deflateSetHeader OF((z_streamp strm, gzip file" and give up. If deflateSetHeader is not used, the default gzip header has text false, - the time set to zero, and os set to 255, with no extra, name, or comment - fields. The gzip header is returned to the default state by deflateReset(). + the time set to zero, and os set to the current operating system, with no + extra, name, or comment fields. The gzip header is returned to the default + state by deflateReset(). deflateSetHeader returns Z_OK if success, or Z_STREAM_ERROR if the source stream state was inconsistent. */ /* -ZEXTERN int ZEXPORT inflateInit2 OF((z_streamp strm, - int windowBits)); +ZEXTERN int ZEXPORT inflateInit2(z_streamp strm, + int windowBits); This is another version of inflateInit with an extra parameter. The fields next_in, avail_in, zalloc, zfree and opaque must be initialized @@ -865,9 +892,11 @@ ZEXTERN int ZEXPORT inflateInit2 OF((z_streamp strm, detection, or add 16 to decode only the gzip format (the zlib format will return a Z_DATA_ERROR). If a gzip stream is being decoded, strm->adler is a CRC-32 instead of an Adler-32. Unlike the gunzip utility and gzread() (see - below), inflate() will not automatically decode concatenated gzip streams. - inflate() will return Z_STREAM_END at the end of the gzip stream. The state - would need to be reset to continue decoding a subsequent gzip stream. + below), inflate() will *not* automatically decode concatenated gzip members. + inflate() will return Z_STREAM_END at the end of the gzip member. The state + would need to be reset to continue decoding a subsequent gzip member. This + *must* be done if there is more data after a gzip member, in order for the + decompression to be compliant with the gzip standard (RFC 1952). inflateInit2 returns Z_OK if success, Z_MEM_ERROR if there was not enough memory, Z_VERSION_ERROR if the zlib library version is incompatible with the @@ -881,9 +910,9 @@ ZEXTERN int ZEXPORT inflateInit2 OF((z_streamp strm, deferred until inflate() is called. */ -ZEXTERN int ZEXPORT inflateSetDictionary OF((z_streamp strm, - const Bytef *dictionary, - uInt dictLength)); +ZEXTERN int ZEXPORT inflateSetDictionary(z_streamp strm, + const Bytef *dictionary, + uInt dictLength); /* Initializes the decompression dictionary from the given uncompressed byte sequence. This function must be called immediately after a call of inflate, @@ -904,22 +933,22 @@ ZEXTERN int ZEXPORT inflateSetDictionary OF((z_streamp strm, inflate(). */ -ZEXTERN int ZEXPORT inflateGetDictionary OF((z_streamp strm, - Bytef *dictionary, - uInt *dictLength)); +ZEXTERN int ZEXPORT inflateGetDictionary(z_streamp strm, + Bytef *dictionary, + uInt *dictLength); /* Returns the sliding dictionary being maintained by inflate. dictLength is set to the number of bytes in the dictionary, and that many bytes are copied to dictionary. dictionary must have enough space, where 32768 bytes is always enough. If inflateGetDictionary() is called with dictionary equal to Z_NULL, then only the dictionary length is returned, and nothing is copied. - Similary, if dictLength is Z_NULL, then it is not set. + Similarly, if dictLength is Z_NULL, then it is not set. inflateGetDictionary returns Z_OK on success, or Z_STREAM_ERROR if the stream state is inconsistent. */ -ZEXTERN int ZEXPORT inflateSync OF((z_streamp strm)); +ZEXTERN int ZEXPORT inflateSync(z_streamp strm); /* Skips invalid compressed data until a possible full flush point (see above for the description of deflate with Z_FULL_FLUSH) can be found, or until all @@ -932,14 +961,14 @@ ZEXTERN int ZEXPORT inflateSync OF((z_streamp strm)); inflateSync returns Z_OK if a possible full flush point has been found, Z_BUF_ERROR if no more input was provided, Z_DATA_ERROR if no flush point has been found, or Z_STREAM_ERROR if the stream structure was inconsistent. - In the success case, the application may save the current current value of - total_in which indicates where valid compressed data was found. In the - error case, the application may repeatedly call inflateSync, providing more - input each time, until success or end of the input data. + In the success case, the application may save the current value of total_in + which indicates where valid compressed data was found. In the error case, + the application may repeatedly call inflateSync, providing more input each + time, until success or end of the input data. */ -ZEXTERN int ZEXPORT inflateCopy OF((z_streamp dest, - z_streamp source)); +ZEXTERN int ZEXPORT inflateCopy(z_streamp dest, + z_streamp source); /* Sets the destination stream as a complete copy of the source stream. @@ -954,18 +983,19 @@ ZEXTERN int ZEXPORT inflateCopy OF((z_streamp dest, destination. */ -ZEXTERN int ZEXPORT inflateReset OF((z_streamp strm)); +ZEXTERN int ZEXPORT inflateReset(z_streamp strm); /* This function is equivalent to inflateEnd followed by inflateInit, but does not free and reallocate the internal decompression state. The stream will keep attributes that may have been set by inflateInit2. + total_in, total_out, adler, and msg are initialized. inflateReset returns Z_OK if success, or Z_STREAM_ERROR if the source stream state was inconsistent (such as zalloc or state being Z_NULL). */ -ZEXTERN int ZEXPORT inflateReset2 OF((z_streamp strm, - int windowBits)); +ZEXTERN int ZEXPORT inflateReset2(z_streamp strm, + int windowBits); /* This function is the same as inflateReset, but it also permits changing the wrap and window size requests. The windowBits parameter is interpreted @@ -978,17 +1008,19 @@ ZEXTERN int ZEXPORT inflateReset2 OF((z_streamp strm, the windowBits parameter is invalid. */ -ZEXTERN int ZEXPORT inflatePrime OF((z_streamp strm, - int bits, - int value)); +ZEXTERN int ZEXPORT inflatePrime(z_streamp strm, + int bits, + int value); /* - This function inserts bits in the inflate input stream. The intent is - that this function is used to start inflating at a bit position in the - middle of a byte. The provided bits will be used before any bytes are used - from next_in. This function should only be used with raw inflate, and - should be used before the first inflate() call after inflateInit2() or - inflateReset(). bits must be less than or equal to 16, and that many of the - least significant bits of value will be inserted in the input. + This function inserts bits in the inflate input stream. The intent is to + use inflatePrime() to start inflating at a bit position in the middle of a + byte. The provided bits will be used before any bytes are used from + next_in. This function should be used with raw inflate, before the first + inflate() call, after inflateInit2() or inflateReset(). It can also be used + after an inflate() return indicates the end of a deflate block or header + when using Z_BLOCK. bits must be less than or equal to 16, and that many of + the least significant bits of value will be inserted in the input. The + other bits in value can be non-zero, and will be ignored. If bits is negative, then the input stream bit buffer is emptied. Then inflatePrime() can be called again to put bits in the buffer. This is used @@ -996,10 +1028,18 @@ ZEXTERN int ZEXPORT inflatePrime OF((z_streamp strm, to feeding inflate codes. inflatePrime returns Z_OK if success, or Z_STREAM_ERROR if the source - stream state was inconsistent. + stream state was inconsistent, or if bits is out of range. If inflate was + in the middle of processing a header, trailer, or stored block lengths, then + it is possible for there to be only eight bits available in the bit buffer. + In that case, bits > 8 is considered out of range. However, when used as + outlined above, there will always be 16 bits available in the buffer for + insertion. As noted in its documentation above, inflate records the number + of bits in the bit buffer on return in data_type. 32 minus that is the + number of bits available for insertion. inflatePrime does not update + data_type with the new number of bits in buffer. */ -ZEXTERN long ZEXPORT inflateMark OF((z_streamp strm)); +ZEXTERN long ZEXPORT inflateMark(z_streamp strm); /* This function returns two values, one in the lower 16 bits of the return value, and the other in the remaining upper bits, obtained by shifting the @@ -1027,8 +1067,8 @@ ZEXTERN long ZEXPORT inflateMark OF((z_streamp strm)); source stream state was inconsistent. */ -ZEXTERN int ZEXPORT inflateGetHeader OF((z_streamp strm, - gz_headerp head)); +ZEXTERN int ZEXPORT inflateGetHeader(z_streamp strm, + gz_headerp head); /* inflateGetHeader() requests that gzip header information be stored in the provided gz_header structure. inflateGetHeader() may be called after @@ -1042,20 +1082,22 @@ ZEXTERN int ZEXPORT inflateGetHeader OF((z_streamp strm, The text, time, xflags, and os fields are filled in with the gzip header contents. hcrc is set to true if there is a header CRC. (The header CRC - was valid if done is set to one.) If extra is not Z_NULL, then extra_max - contains the maximum number of bytes to write to extra. Once done is true, - extra_len contains the actual extra field length, and extra contains the - extra field, or that field truncated if extra_max is less than extra_len. - If name is not Z_NULL, then up to name_max characters are written there, - terminated with a zero unless the length is greater than name_max. If - comment is not Z_NULL, then up to comm_max characters are written there, - terminated with a zero unless the length is greater than comm_max. When any - of extra, name, or comment are not Z_NULL and the respective field is not - present in the header, then that field is set to Z_NULL to signal its - absence. This allows the use of deflateSetHeader() with the returned - structure to duplicate the header. However if those fields are set to - allocated memory, then the application will need to save those pointers - elsewhere so that they can be eventually freed. + was valid if done is set to one.) The extra, name, and comment pointers + much each be either Z_NULL or point to space to store that information from + the header. If extra is not Z_NULL, then extra_max contains the maximum + number of bytes that can be written to extra. Once done is true, extra_len + contains the actual extra field length, and extra contains the extra field, + or that field truncated if extra_max is less than extra_len. If name is not + Z_NULL, then up to name_max characters, including the terminating zero, are + written there. If comment is not Z_NULL, then up to comm_max characters, + including the terminating zero, are written there. The application can tell + that the name or comment did not fit in the provided space by the absence of + a terminating zero. If any of extra, name, or comment are not present in + the header, then that field's pointer is set to Z_NULL. This allows the use + of deflateSetHeader() with the returned structure to duplicate the header. + Note that if those fields initially pointed to allocated memory, then the + application will need to save them elsewhere so that they can be eventually + freed. If inflateGetHeader is not used, then the header information is simply discarded. The header is always checked for validity, including the header @@ -1068,8 +1110,8 @@ ZEXTERN int ZEXPORT inflateGetHeader OF((z_streamp strm, */ /* -ZEXTERN int ZEXPORT inflateBackInit OF((z_streamp strm, int windowBits, - unsigned char FAR *window)); +ZEXTERN int ZEXPORT inflateBackInit(z_streamp strm, int windowBits, + unsigned char FAR *window); Initialize the internal stream state for decompression using inflateBack() calls. The fields zalloc, zfree and opaque in strm must be initialized @@ -1089,13 +1131,13 @@ ZEXTERN int ZEXPORT inflateBackInit OF((z_streamp strm, int windowBits, the version of the header file. */ -typedef unsigned (*in_func) OF((void FAR *, - z_const unsigned char FAR * FAR *)); -typedef int (*out_func) OF((void FAR *, unsigned char FAR *, unsigned)); +typedef unsigned (*in_func)(void FAR *, + z_const unsigned char FAR * FAR *); +typedef int (*out_func)(void FAR *, unsigned char FAR *, unsigned); -ZEXTERN int ZEXPORT inflateBack OF((z_streamp strm, - in_func in, void FAR *in_desc, - out_func out, void FAR *out_desc)); +ZEXTERN int ZEXPORT inflateBack(z_streamp strm, + in_func in, void FAR *in_desc, + out_func out, void FAR *out_desc); /* inflateBack() does a raw inflate with a single call using a call-back interface for input and output. This is potentially more efficient than @@ -1163,7 +1205,7 @@ ZEXTERN int ZEXPORT inflateBack OF((z_streamp strm, cannot return Z_OK. */ -ZEXTERN int ZEXPORT inflateBackEnd OF((z_streamp strm)); +ZEXTERN int ZEXPORT inflateBackEnd(z_streamp strm); /* All memory allocated by inflateBackInit() is freed. @@ -1171,7 +1213,7 @@ ZEXTERN int ZEXPORT inflateBackEnd OF((z_streamp strm)); state was inconsistent. */ -ZEXTERN uLong ZEXPORT zlibCompileFlags OF((void)); +ZEXTERN uLong ZEXPORT zlibCompileFlags(void); /* Return flags indicating compile-time options. Type sizes, two bits each, 00 = 16 bits, 01 = 32, 10 = 64, 11 = other: @@ -1203,13 +1245,14 @@ ZEXTERN uLong ZEXPORT zlibCompileFlags OF((void)); 21: FASTEST -- deflate algorithm with only one, lowest compression level 22,23: 0 (reserved) - The sprintf variant used by gzprintf (zero is best): + The sprintf variant used by gzprintf (all zeros is best): 24: 0 = vs*, 1 = s* -- 1 means limited to 20 arguments after the format - 25: 0 = *nprintf, 1 = *printf -- 1 means gzprintf() not secure! + 25: 0 = *nprintf, 1 = *printf -- 1 means gzprintf() is not secure! 26: 0 = returns value, 1 = void -- 1 means inferred string length returned + 27: 0 = gzprintf() present, 1 = not -- 1 means gzprintf() returns an error Remainder: - 27-31: 0 (reserved) + 28-31: 0 (reserved) */ #ifndef Z_SOLO @@ -1221,11 +1264,14 @@ ZEXTERN uLong ZEXPORT zlibCompileFlags OF((void)); stream-oriented functions. To simplify the interface, some default options are assumed (compression level and memory usage, standard memory allocation functions). The source code of these utility functions can be modified if - you need special options. + you need special options. The _z versions of the functions use the size_t + type for lengths. Note that a long is 32 bits on Windows. */ -ZEXTERN int ZEXPORT compress OF((Bytef *dest, uLongf *destLen, - const Bytef *source, uLong sourceLen)); +ZEXTERN int ZEXPORT compress(Bytef *dest, uLongf *destLen, + const Bytef *source, uLong sourceLen); +ZEXTERN int ZEXPORT compress_z(Bytef *dest, z_size_t *destLen, + const Bytef *source, z_size_t sourceLen); /* Compresses the source buffer into the destination buffer. sourceLen is the byte length of the source buffer. Upon entry, destLen is the total size @@ -1239,9 +1285,12 @@ ZEXTERN int ZEXPORT compress OF((Bytef *dest, uLongf *destLen, buffer. */ -ZEXTERN int ZEXPORT compress2 OF((Bytef *dest, uLongf *destLen, - const Bytef *source, uLong sourceLen, - int level)); +ZEXTERN int ZEXPORT compress2(Bytef *dest, uLongf *destLen, + const Bytef *source, uLong sourceLen, + int level); +ZEXTERN int ZEXPORT compress2_z(Bytef *dest, z_size_t *destLen, + const Bytef *source, z_size_t sourceLen, + int level); /* Compresses the source buffer into the destination buffer. The level parameter has the same meaning as in deflateInit. sourceLen is the byte @@ -1255,22 +1304,25 @@ ZEXTERN int ZEXPORT compress2 OF((Bytef *dest, uLongf *destLen, Z_STREAM_ERROR if the level parameter is invalid. */ -ZEXTERN uLong ZEXPORT compressBound OF((uLong sourceLen)); +ZEXTERN uLong ZEXPORT compressBound(uLong sourceLen); +ZEXTERN z_size_t ZEXPORT compressBound_z(z_size_t sourceLen); /* compressBound() returns an upper bound on the compressed size after compress() or compress2() on sourceLen bytes. It would be used before a compress() or compress2() call to allocate the destination buffer. */ -ZEXTERN int ZEXPORT uncompress OF((Bytef *dest, uLongf *destLen, - const Bytef *source, uLong sourceLen)); +ZEXTERN int ZEXPORT uncompress(Bytef *dest, uLongf *destLen, + const Bytef *source, uLong sourceLen); +ZEXTERN int ZEXPORT uncompress_z(Bytef *dest, z_size_t *destLen, + const Bytef *source, z_size_t sourceLen); /* Decompresses the source buffer into the destination buffer. sourceLen is - the byte length of the source buffer. Upon entry, destLen is the total size + the byte length of the source buffer. On entry, *destLen is the total size of the destination buffer, which must be large enough to hold the entire uncompressed data. (The size of the uncompressed data must have been saved previously by the compressor and transmitted to the decompressor by some - mechanism outside the scope of this compression library.) Upon exit, destLen + mechanism outside the scope of this compression library.) On exit, *destLen is the actual size of the uncompressed data. uncompress returns Z_OK if success, Z_MEM_ERROR if there was not @@ -1280,8 +1332,10 @@ ZEXTERN int ZEXPORT uncompress OF((Bytef *dest, uLongf *destLen, buffer with the uncompressed data up to that point. */ -ZEXTERN int ZEXPORT uncompress2 OF((Bytef *dest, uLongf *destLen, - const Bytef *source, uLong *sourceLen)); +ZEXTERN int ZEXPORT uncompress2(Bytef *dest, uLongf *destLen, + const Bytef *source, uLong *sourceLen); +ZEXTERN int ZEXPORT uncompress2_z(Bytef *dest, z_size_t *destLen, + const Bytef *source, z_size_t *sourceLen); /* Same as uncompress, except that sourceLen is a pointer, where the length of the source is *sourceLen. On return, *sourceLen is the number of @@ -1300,22 +1354,26 @@ ZEXTERN int ZEXPORT uncompress2 OF((Bytef *dest, uLongf *destLen, typedef struct gzFile_s *gzFile; /* semi-opaque gzip file descriptor */ /* -ZEXTERN gzFile ZEXPORT gzopen OF((const char *path, const char *mode)); +ZEXTERN gzFile ZEXPORT gzopen(const char *path, const char *mode); - Opens a gzip (.gz) file for reading or writing. The mode parameter is as - in fopen ("rb" or "wb") but can also include a compression level ("wb9") or - a strategy: 'f' for filtered data as in "wb6f", 'h' for Huffman-only - compression as in "wb1h", 'R' for run-length encoding as in "wb1R", or 'F' - for fixed code compression as in "wb9F". (See the description of - deflateInit2 for more information about the strategy parameter.) 'T' will - request transparent writing or appending with no compression and not using - the gzip format. + Open the gzip (.gz) file at path for reading and decompressing, or + compressing and writing. The mode parameter is as in fopen ("rb" or "wb") + but can also include a compression level ("wb9") or a strategy: 'f' for + filtered data as in "wb6f", 'h' for Huffman-only compression as in "wb1h", + 'R' for run-length encoding as in "wb1R", or 'F' for fixed code compression + as in "wb9F". (See the description of deflateInit2 for more information + about the strategy parameter.) 'T' will request transparent writing or + appending with no compression and not using the gzip format. 'T' cannot be + used to force transparent reading. Transparent reading is automatically + performed if there is no gzip header at the start. Transparent reading can + be disabled with the 'G' option, which will instead return an error if there + is no gzip header. 'N' will open the file in non-blocking mode. - "a" can be used instead of "w" to request that the gzip stream that will - be written be appended to the file. "+" will result in an error, since + 'a' can be used instead of 'w' to request that the gzip stream that will + be written be appended to the file. '+' will result in an error, since reading and writing to the same gzip file is not supported. The addition of - "x" when writing will create the file exclusively, which fails if the file - already exists. On systems that support it, the addition of "e" when + 'x' when writing will create the file exclusively, which fails if the file + already exists. On systems that support it, the addition of 'e' when reading or writing will set the flag to close the file on an execve() call. These functions, as well as gzip, will read and decode a sequence of gzip @@ -1334,14 +1392,22 @@ ZEXTERN gzFile ZEXPORT gzopen OF((const char *path, const char *mode)); insufficient memory to allocate the gzFile state, or if an invalid mode was specified (an 'r', 'w', or 'a' was not provided, or '+' was provided). errno can be checked to determine if the reason gzopen failed was that the - file could not be opened. + file could not be opened. Note that if 'N' is in mode for non-blocking, the + open() itself can fail in order to not block. In that case gzopen() will + return NULL and errno will be EAGAIN or ENONBLOCK. The call to gzopen() can + then be re-tried. If the application would like to block on opening the + file, then it can use open() without O_NONBLOCK, and then gzdopen() with the + resulting file descriptor and 'N' in the mode, which will set it to non- + blocking. */ -ZEXTERN gzFile ZEXPORT gzdopen OF((int fd, const char *mode)); +ZEXTERN gzFile ZEXPORT gzdopen(int fd, const char *mode); /* - gzdopen associates a gzFile with the file descriptor fd. File descriptors - are obtained from calls like open, dup, creat, pipe or fileno (if the file - has been previously opened with fopen). The mode parameter is as in gzopen. + Associate a gzFile with the file descriptor fd. File descriptors are + obtained from calls like open, dup, creat, pipe or fileno (if the file has + been previously opened with fopen). The mode parameter is as in gzopen. An + 'e' in mode will set fd's flag to close the file on an execve() call. An 'N' + in mode will set fd's non-blocking flag. The next call of gzclose on the returned gzFile will also close the file descriptor fd, just like fclose(fdopen(fd, mode)) closes the file descriptor @@ -1360,15 +1426,15 @@ ZEXTERN gzFile ZEXPORT gzdopen OF((int fd, const char *mode)); will not detect if fd is invalid (unless fd is -1). */ -ZEXTERN int ZEXPORT gzbuffer OF((gzFile file, unsigned size)); +ZEXTERN int ZEXPORT gzbuffer(gzFile file, unsigned size); /* - Set the internal buffer size used by this library's functions. The - default buffer size is 8192 bytes. This function must be called after - gzopen() or gzdopen(), and before any other calls that read or write the - file. The buffer memory allocation is always deferred to the first read or - write. Three times that size in buffer space is allocated. A larger buffer - size of, for example, 64K or 128K bytes will noticeably increase the speed - of decompression (reading). + Set the internal buffer size used by this library's functions for file to + size. The default buffer size is 8192 bytes. This function must be called + after gzopen() or gzdopen(), and before any other calls that read or write + the file. The buffer memory allocation is always deferred to the first read + or write. Three times that size in buffer space is allocated. A larger + buffer size of, for example, 64K or 128K bytes will noticeably increase the + speed of decompression (reading). The new buffer size also affects the maximum length for gzprintf(). @@ -1376,20 +1442,20 @@ ZEXTERN int ZEXPORT gzbuffer OF((gzFile file, unsigned size)); too late. */ -ZEXTERN int ZEXPORT gzsetparams OF((gzFile file, int level, int strategy)); +ZEXTERN int ZEXPORT gzsetparams(gzFile file, int level, int strategy); /* - Dynamically update the compression level or strategy. See the description - of deflateInit2 for the meaning of these parameters. Previously provided - data is flushed before the parameter change. + Dynamically update the compression level and strategy for file. See the + description of deflateInit2 for the meaning of these parameters. Previously + provided data is flushed before applying the parameter changes. gzsetparams returns Z_OK if success, Z_STREAM_ERROR if the file was not opened for writing, Z_ERRNO if there is an error writing the flushed data, or Z_MEM_ERROR if there is a memory allocation error. */ -ZEXTERN int ZEXPORT gzread OF((gzFile file, voidp buf, unsigned len)); +ZEXTERN int ZEXPORT gzread(gzFile file, voidp buf, unsigned len); /* - Reads the given number of uncompressed bytes from the compressed file. If + Read and decompress up to len uncompressed bytes from file into buf. If the input file is not in gzip format, gzread copies the given number of bytes into the buffer directly from the file. @@ -1411,20 +1477,26 @@ ZEXTERN int ZEXPORT gzread OF((gzFile file, voidp buf, unsigned len)); stream. Alternatively, gzerror can be used before gzclose to detect this case. + gzread can be used to read a gzip file on a non-blocking device. If the + input stalls and there is no uncompressed data to return, then gzread() will + return -1, and errno will be EAGAIN or EWOULDBLOCK. gzread() can then be + called again. + gzread returns the number of uncompressed bytes actually read, less than len for end of file, or -1 for error. If len is too large to fit in an int, then nothing is read, -1 is returned, and the error state is set to - Z_STREAM_ERROR. + Z_STREAM_ERROR. If some data was read before an error, then that data is + returned until exhausted, after which the next call will signal the error. */ -ZEXTERN z_size_t ZEXPORT gzfread OF((voidp buf, z_size_t size, z_size_t nitems, - gzFile file)); +ZEXTERN z_size_t ZEXPORT gzfread(voidp buf, z_size_t size, z_size_t nitems, + gzFile file); /* - Read up to nitems items of size size from file to buf, otherwise operating - as gzread() does. This duplicates the interface of stdio's fread(), with - size_t request and return types. If the library defines size_t, then - z_size_t is identical to size_t. If not, then z_size_t is an unsigned - integer type that can contain a pointer. + Read and decompress up to nitems items of size size from file into buf, + otherwise operating as gzread() does. This duplicates the interface of + stdio's fread(), with size_t request and return types. If the library + defines size_t, then z_size_t is identical to size_t. If not, then z_size_t + is an unsigned integer type that can contain a pointer. gzfread() returns the number of full items read of size size, or zero if the end of the file was reached and a full item could not be read, or if @@ -1435,26 +1507,29 @@ ZEXTERN z_size_t ZEXPORT gzfread OF((voidp buf, z_size_t size, z_size_t nitems, In the event that the end of file is reached and only a partial item is available at the end, i.e. the remaining uncompressed data length is not a - multiple of size, then the final partial item is nevetheless read into buf + multiple of size, then the final partial item is nevertheless read into buf and the end-of-file flag is set. The length of the partial item read is not provided, but could be inferred from the result of gztell(). This behavior - is the same as the behavior of fread() implementations in common libraries, - but it prevents the direct use of gzfread() to read a concurrently written - file, reseting and retrying on end-of-file, when size is not 1. + is the same as that of fread() implementations in common libraries. This + could result in data loss if used with size != 1 when reading a concurrently + written file or a non-blocking file. In that case, use size == 1 or gzread() + instead. */ -ZEXTERN int ZEXPORT gzwrite OF((gzFile file, - voidpc buf, unsigned len)); +ZEXTERN int ZEXPORT gzwrite(gzFile file, voidpc buf, unsigned len); /* - Writes the given number of uncompressed bytes into the compressed file. - gzwrite returns the number of uncompressed bytes written or 0 in case of - error. + Compress and write the len uncompressed bytes at buf to file. gzwrite + returns the number of uncompressed bytes written, or 0 in case of error or + if len is 0. If the write destination is non-blocking, then gzwrite() may + return a number of bytes written that is not 0 and less than len. + + If len does not fit in an int, then 0 is returned and nothing is written. */ -ZEXTERN z_size_t ZEXPORT gzfwrite OF((voidpc buf, z_size_t size, - z_size_t nitems, gzFile file)); +ZEXTERN z_size_t ZEXPORT gzfwrite(voidpc buf, z_size_t size, + z_size_t nitems, gzFile file); /* - gzfwrite() writes nitems items of size size from buf to file, duplicating + Compress and write nitems items of size size from buf to file, duplicating the interface of stdio's fwrite(), with size_t request and return types. If the library defines size_t, then z_size_t is identical to size_t. If not, then z_size_t is an unsigned integer type that can contain a pointer. @@ -1463,76 +1538,117 @@ ZEXTERN z_size_t ZEXPORT gzfwrite OF((voidpc buf, z_size_t size, if there was an error. If the multiplication of size and nitems overflows, i.e. the product does not fit in a z_size_t, then nothing is written, zero is returned, and the error state is set to Z_STREAM_ERROR. + + If writing a concurrently read file or a non-blocking file with size != 1, + a partial item could be written, with no way of knowing how much of it was + not written, resulting in data loss. In that case, use size == 1 or + gzwrite() instead. */ -ZEXTERN int ZEXPORTVA gzprintf Z_ARG((gzFile file, const char *format, ...)); +#if defined(STDC) || defined(Z_HAVE_STDARG_H) +ZEXTERN int ZEXPORTVA gzprintf(gzFile file, const char *format, ...); +#else +ZEXTERN int ZEXPORTVA gzprintf(); +#endif /* - Converts, formats, and writes the arguments to the compressed file under - control of the format string, as in fprintf. gzprintf returns the number of + Convert, format, compress, and write the arguments (...) to file under + control of the string format, as in fprintf. gzprintf returns the number of uncompressed bytes actually written, or a negative zlib error code in case of error. The number of uncompressed bytes written is limited to 8191, or one less than the buffer size given to gzbuffer(). The caller should assure that this limit is not exceeded. If it is exceeded, then gzprintf() will - return an error (0) with nothing written. In this case, there may also be a - buffer overflow with unpredictable consequences, which is possible only if - zlib was compiled with the insecure functions sprintf() or vsprintf() - because the secure snprintf() or vsnprintf() functions were not available. - This can be determined using zlibCompileFlags(). + return an error (0) with nothing written. + + In that last case, there may also be a buffer overflow with unpredictable + consequences, which is possible only if zlib was compiled with the insecure + functions sprintf() or vsprintf(), because the secure snprintf() and + vsnprintf() functions were not available. That would only be the case for + a non-ANSI C compiler. zlib may have been built without gzprintf() because + secure functions were not available and having gzprintf() be insecure was + not an option, in which case, gzprintf() returns Z_STREAM_ERROR. All of + these possibilities can be determined using zlibCompileFlags(). + + If a Z_BUF_ERROR is returned, then nothing was written due to a stall on + the non-blocking write destination. */ -ZEXTERN int ZEXPORT gzputs OF((gzFile file, const char *s)); +ZEXTERN int ZEXPORT gzputs(gzFile file, const char *s); /* - Writes the given null-terminated string to the compressed file, excluding + Compress and write the given null-terminated string s to file, excluding the terminating null character. gzputs returns the number of characters written, or -1 in case of error. + The number of characters written may be less than the length of the string + if the write destination is non-blocking. + + If the length of the string does not fit in an int, then -1 is returned + and nothing is written. */ -ZEXTERN char * ZEXPORT gzgets OF((gzFile file, char *buf, int len)); +ZEXTERN char * ZEXPORT gzgets(gzFile file, char *buf, int len); /* - Reads bytes from the compressed file until len-1 characters are read, or a - newline character is read and transferred to buf, or an end-of-file - condition is encountered. If any characters are read or if len == 1, the - string is terminated with a null character. If no characters are read due - to an end-of-file or len < 1, then the buffer is left untouched. + Read and decompress bytes from file into buf, until len-1 characters are + read, or until a newline character is read and transferred to buf, or an + end-of-file condition is encountered. If any characters are read or if len + is one, the string is terminated with a null character. If no characters + are read due to an end-of-file or len is less than one, then the buffer is + left untouched. gzgets returns buf which is a null-terminated string, or it returns NULL - for end-of-file or in case of error. If there was an error, the contents at - buf are indeterminate. + for end-of-file or in case of error. If some data was read before an error, + then that data is returned until exhausted, after which the next call will + return NULL to signal the error. + + gzgets can be used on a file being concurrently written, and on a non- + blocking device, both as for gzread(). However lines may be broken in the + middle, leaving it up to the application to reassemble them as needed. */ -ZEXTERN int ZEXPORT gzputc OF((gzFile file, int c)); +ZEXTERN int ZEXPORT gzputc(gzFile file, int c); /* - Writes c, converted to an unsigned char, into the compressed file. gzputc + Compress and write c, converted to an unsigned char, into file. gzputc returns the value that was written, or -1 in case of error. */ -ZEXTERN int ZEXPORT gzgetc OF((gzFile file)); +ZEXTERN int ZEXPORT gzgetc(gzFile file); /* - Reads one byte from the compressed file. gzgetc returns this byte or -1 - in case of end of file or error. This is implemented as a macro for speed. - As such, it does not do all of the checking the other functions do. I.e. - it does not check to see if file is NULL, nor whether the structure file - points to has been clobbered or not. + Read and decompress one byte from file. gzgetc returns this byte or -1 in + case of end of file or error. If some data was read before an error, then + that data is returned until exhausted, after which the next call will return + -1 to signal the error. + + This is implemented as a macro for speed. As such, it does not do all of + the checking the other functions do. I.e. it does not check to see if file + is NULL, nor whether the structure file points to has been clobbered or not. + + gzgetc can be used to read a gzip file on a non-blocking device. If the + input stalls and there is no uncompressed data to return, then gzgetc() will + return -1, and errno will be EAGAIN or EWOULDBLOCK. gzread() can then be + called again. */ -ZEXTERN int ZEXPORT gzungetc OF((int c, gzFile file)); +ZEXTERN int ZEXPORT gzungetc(int c, gzFile file); /* - Push one character back onto the stream to be read as the first character - on the next read. At least one character of push-back is allowed. + Push c back onto the stream for file to be read as the first character on + the next read. At least one character of push-back is always allowed. gzungetc() returns the character pushed, or -1 on failure. gzungetc() will fail if c is -1, and may fail if a character has been pushed but not read yet. If gzungetc is used immediately after gzopen or gzdopen, at least the output buffer size of pushed characters is allowed. (See gzbuffer above.) The pushed character will be discarded if the stream is repositioned with gzseek() or gzrewind(). + + gzungetc(-1, file) will force any pending seek to execute. Then gztell() + will report the position, even if the requested seek reached end of file. + This can be used to determine the number of uncompressed bytes in a gzip + file without having to read it into a buffer. */ -ZEXTERN int ZEXPORT gzflush OF((gzFile file, int flush)); +ZEXTERN int ZEXPORT gzflush(gzFile file, int flush); /* - Flushes all pending output into the compressed file. The parameter flush - is as in the deflate() function. The return value is the zlib error number - (see function gzerror below). gzflush is only permitted when writing. + Flush all pending output to file. The parameter flush is as in the + deflate() function. The return value is the zlib error number (see function + gzerror below). gzflush is only permitted when writing. If the flush parameter is Z_FINISH, the remaining data is written and the gzip stream is completed in the output. If gzwrite() is called again, a new @@ -1544,18 +1660,19 @@ ZEXTERN int ZEXPORT gzflush OF((gzFile file, int flush)); */ /* -ZEXTERN z_off_t ZEXPORT gzseek OF((gzFile file, - z_off_t offset, int whence)); +ZEXTERN z_off_t ZEXPORT gzseek(gzFile file, + z_off_t offset, int whence); - Sets the starting position for the next gzread or gzwrite on the given - compressed file. The offset represents a number of bytes in the + Set the starting position to offset relative to whence for the next gzread + or gzwrite on file. The offset represents a number of bytes in the uncompressed data stream. The whence parameter is defined as in lseek(2); the value SEEK_END is not supported. If the file is opened for reading, this function is emulated but can be extremely slow. If the file is opened for writing, only forward seeks are supported; gzseek then compresses a sequence of zeroes up to the new - starting position. + starting position. For reading or writing, any actual seeking is deferred + until the next read or write operation, or close operation when writing. gzseek returns the resulting offset location as measured in bytes from the beginning of the uncompressed stream, or -1 in case of error, in @@ -1563,52 +1680,52 @@ ZEXTERN z_off_t ZEXPORT gzseek OF((gzFile file, would be before the current position. */ -ZEXTERN int ZEXPORT gzrewind OF((gzFile file)); +ZEXTERN int ZEXPORT gzrewind(gzFile file); /* - Rewinds the given file. This function is supported only for reading. + Rewind file. This function is supported only for reading. - gzrewind(file) is equivalent to (int)gzseek(file, 0L, SEEK_SET) + gzrewind(file) is equivalent to (int)gzseek(file, 0L, SEEK_SET). */ /* -ZEXTERN z_off_t ZEXPORT gztell OF((gzFile file)); +ZEXTERN z_off_t ZEXPORT gztell(gzFile file); - Returns the starting position for the next gzread or gzwrite on the given - compressed file. This position represents a number of bytes in the - uncompressed data stream, and is zero when starting, even if appending or - reading a gzip stream from the middle of a file using gzdopen(). + Return the starting position for the next gzread or gzwrite on file. + This position represents a number of bytes in the uncompressed data stream, + and is zero when starting, even if appending or reading a gzip stream from + the middle of a file using gzdopen(). gztell(file) is equivalent to gzseek(file, 0L, SEEK_CUR) */ /* -ZEXTERN z_off_t ZEXPORT gzoffset OF((gzFile file)); +ZEXTERN z_off_t ZEXPORT gzoffset(gzFile file); - Returns the current offset in the file being read or written. This offset - includes the count of bytes that precede the gzip stream, for example when - appending or when using gzdopen() for reading. When reading, the offset - does not include as yet unused buffered input. This information can be used - for a progress indicator. On error, gzoffset() returns -1. + Return the current compressed (actual) read or write offset of file. This + offset includes the count of bytes that precede the gzip stream, for example + when appending or when using gzdopen() for reading. When reading, the + offset does not include as yet unused buffered input. This information can + be used for a progress indicator. On error, gzoffset() returns -1. */ -ZEXTERN int ZEXPORT gzeof OF((gzFile file)); +ZEXTERN int ZEXPORT gzeof(gzFile file); /* - Returns true (1) if the end-of-file indicator has been set while reading, - false (0) otherwise. Note that the end-of-file indicator is set only if the - read tried to go past the end of the input, but came up short. Therefore, - just like feof(), gzeof() may return false even if there is no more data to - read, in the event that the last read request was for the exact number of - bytes remaining in the input file. This will happen if the input file size - is an exact multiple of the buffer size. + Return true (1) if the end-of-file indicator for file has been set while + reading, false (0) otherwise. Note that the end-of-file indicator is set + only if the read tried to go past the end of the input, but came up short. + Therefore, just like feof(), gzeof() may return false even if there is no + more data to read, in the event that the last read request was for the exact + number of bytes remaining in the input file. This will happen if the input + file size is an exact multiple of the buffer size. If gzeof() returns true, then the read functions will return no more data, unless the end-of-file indicator is reset by gzclearerr() and the input file has grown since the previous end of file was detected. */ -ZEXTERN int ZEXPORT gzdirect OF((gzFile file)); +ZEXTERN int ZEXPORT gzdirect(gzFile file); /* - Returns true (1) if file is being copied directly while reading, or false + Return true (1) if file is being copied directly while reading, or false (0) if file is a gzip stream being decompressed. If the input file is empty, gzdirect() will return true, since the input @@ -1616,8 +1733,11 @@ ZEXTERN int ZEXPORT gzdirect OF((gzFile file)); If gzdirect() is used immediately after gzopen() or gzdopen() it will cause buffers to be allocated to allow reading the file to determine if it - is a gzip file. Therefore if gzbuffer() is used, it should be called before - gzdirect(). + is a gzip file. Therefore if gzbuffer() is used, it should be called before + gzdirect(). If the input is being written concurrently or the device is non- + blocking, then gzdirect() may give a different answer once four bytes of + input have been accumulated, which is what is needed to confirm or deny a + gzip header. Before this, gzdirect() will return true (1). When writing, gzdirect() returns true (1) if transparent writing was requested ("wT" for the gzopen() mode), or false (0) otherwise. (Note: @@ -1627,10 +1747,10 @@ ZEXTERN int ZEXPORT gzdirect OF((gzFile file)); gzip file reading and decompression, which may not be desired.) */ -ZEXTERN int ZEXPORT gzclose OF((gzFile file)); +ZEXTERN int ZEXPORT gzclose(gzFile file); /* - Flushes all pending output if necessary, closes the compressed file and - deallocates the (de)compression state. Note that once file is closed, you + Flush all pending output for file, if necessary, close file and + deallocate the (de)compression state. Note that once file is closed, you cannot call gzerror with file, since its structures have been deallocated. gzclose must not be called more than once on the same file, just as free must not be called more than once on the same allocation. @@ -1640,8 +1760,8 @@ ZEXTERN int ZEXPORT gzclose OF((gzFile file)); last read ended in the middle of a gzip stream, or Z_OK on success. */ -ZEXTERN int ZEXPORT gzclose_r OF((gzFile file)); -ZEXTERN int ZEXPORT gzclose_w OF((gzFile file)); +ZEXTERN int ZEXPORT gzclose_r(gzFile file); +ZEXTERN int ZEXPORT gzclose_w(gzFile file); /* Same as gzclose(), but gzclose_r() is only for use when reading, and gzclose_w() is only for use when writing or appending. The advantage to @@ -1652,12 +1772,13 @@ ZEXTERN int ZEXPORT gzclose_w OF((gzFile file)); zlib library. */ -ZEXTERN const char * ZEXPORT gzerror OF((gzFile file, int *errnum)); +ZEXTERN const char * ZEXPORT gzerror(gzFile file, int *errnum); /* - Returns the error message for the last error which occurred on the given - compressed file. errnum is set to zlib error number. If an error occurred - in the file system and not in the compression library, errnum is set to - Z_ERRNO and the application may consult errno to get the exact error code. + Return the error message for the last error which occurred on file. + If errnum is not NULL, *errnum is set to zlib error number. If an error + occurred in the file system and not in the compression library, *errnum is + set to Z_ERRNO and the application may consult errno to get the exact error + code. The application must not modify the returned string. Future calls to this function may invalidate the previously returned string. If file is @@ -1668,9 +1789,9 @@ ZEXTERN const char * ZEXPORT gzerror OF((gzFile file, int *errnum)); functions above that do not distinguish those cases in their return values. */ -ZEXTERN void ZEXPORT gzclearerr OF((gzFile file)); +ZEXTERN void ZEXPORT gzclearerr(gzFile file); /* - Clears the error and end-of-file flags for file. This is analogous to the + Clear the error and end-of-file flags for file. This is analogous to the clearerr() function in stdio. This is useful for continuing to read a gzip file that is being written concurrently. */ @@ -1685,11 +1806,12 @@ ZEXTERN void ZEXPORT gzclearerr OF((gzFile file)); library. */ -ZEXTERN uLong ZEXPORT adler32 OF((uLong adler, const Bytef *buf, uInt len)); +ZEXTERN uLong ZEXPORT adler32(uLong adler, const Bytef *buf, uInt len); /* Update a running Adler-32 checksum with the bytes buf[0..len-1] and - return the updated checksum. If buf is Z_NULL, this function returns the - required initial value for the checksum. + return the updated checksum. An Adler-32 value is in the range of a 32-bit + unsigned integer. If buf is Z_NULL, this function returns the required + initial value for the checksum. An Adler-32 checksum is almost as reliable as a CRC-32 but can be computed much faster. @@ -1704,15 +1826,16 @@ ZEXTERN uLong ZEXPORT adler32 OF((uLong adler, const Bytef *buf, uInt len)); if (adler != original_adler) error(); */ -ZEXTERN uLong ZEXPORT adler32_z OF((uLong adler, const Bytef *buf, - z_size_t len)); +ZEXTERN uLong ZEXPORT adler32_z(uLong adler, const Bytef *buf, + z_size_t len); /* - Same as adler32(), but with a size_t length. + Same as adler32(), but with a size_t length. Note that a long is 32 bits + on Windows. */ /* -ZEXTERN uLong ZEXPORT adler32_combine OF((uLong adler1, uLong adler2, - z_off_t len2)); +ZEXTERN uLong ZEXPORT adler32_combine(uLong adler1, uLong adler2, + z_off_t len2); Combine two Adler-32 checksums into one. For two sequences of bytes, seq1 and seq2 with lengths len1 and len2, Adler-32 checksums were calculated for @@ -1722,12 +1845,13 @@ ZEXTERN uLong ZEXPORT adler32_combine OF((uLong adler1, uLong adler2, negative, the result has no meaning or utility. */ -ZEXTERN uLong ZEXPORT crc32 OF((uLong crc, const Bytef *buf, uInt len)); +ZEXTERN uLong ZEXPORT crc32(uLong crc, const Bytef *buf, uInt len); /* Update a running CRC-32 with the bytes buf[0..len-1] and return the - updated CRC-32. If buf is Z_NULL, this function returns the required - initial value for the crc. Pre- and post-conditioning (one's complement) is - performed within this function so it shouldn't be done by the application. + updated CRC-32. A CRC-32 value is in the range of a 32-bit unsigned integer. + If buf is Z_NULL, this function returns the required initial value for the + crc. Pre- and post-conditioning (one's complement) is performed within this + function so it shouldn't be done by the application. Usage example: @@ -1739,20 +1863,35 @@ ZEXTERN uLong ZEXPORT crc32 OF((uLong crc, const Bytef *buf, uInt len)); if (crc != original_crc) error(); */ -ZEXTERN uLong ZEXPORT crc32_z OF((uLong adler, const Bytef *buf, - z_size_t len)); +ZEXTERN uLong ZEXPORT crc32_z(uLong crc, const Bytef *buf, + z_size_t len); /* - Same as crc32(), but with a size_t length. + Same as crc32(), but with a size_t length. Note that a long is 32 bits on + Windows. */ /* -ZEXTERN uLong ZEXPORT crc32_combine OF((uLong crc1, uLong crc2, z_off_t len2)); +ZEXTERN uLong ZEXPORT crc32_combine(uLong crc1, uLong crc2, z_off_t len2); Combine two CRC-32 check values into one. For two sequences of bytes, seq1 and seq2 with lengths len1 and len2, CRC-32 check values were calculated for each, crc1 and crc2. crc32_combine() returns the CRC-32 check value of seq1 and seq2 concatenated, requiring only crc1, crc2, and - len2. + len2. len2 must be non-negative, otherwise zero is returned. +*/ + +/* +ZEXTERN uLong ZEXPORT crc32_combine_gen(z_off_t len2); + + Return the operator corresponding to length len2, to be used with + crc32_combine_op(). len2 must be non-negative, otherwise zero is returned. +*/ + +ZEXTERN uLong ZEXPORT crc32_combine_op(uLong crc1, uLong crc2, uLong op); +/* + Give the same result as crc32_combine(), using op in place of len2. op is + is generated from len2 by crc32_combine_gen(). This will be faster than + crc32_combine() if the generated op is used more than once. */ @@ -1761,20 +1900,20 @@ ZEXTERN uLong ZEXPORT crc32_combine OF((uLong crc1, uLong crc2, z_off_t len2)); /* deflateInit and inflateInit are macros to allow checking the zlib version * and the compiler's view of z_stream: */ -ZEXTERN int ZEXPORT deflateInit_ OF((z_streamp strm, int level, - const char *version, int stream_size)); -ZEXTERN int ZEXPORT inflateInit_ OF((z_streamp strm, - const char *version, int stream_size)); -ZEXTERN int ZEXPORT deflateInit2_ OF((z_streamp strm, int level, int method, - int windowBits, int memLevel, - int strategy, const char *version, - int stream_size)); -ZEXTERN int ZEXPORT inflateInit2_ OF((z_streamp strm, int windowBits, - const char *version, int stream_size)); -ZEXTERN int ZEXPORT inflateBackInit_ OF((z_streamp strm, int windowBits, - unsigned char FAR *window, - const char *version, - int stream_size)); +ZEXTERN int ZEXPORT deflateInit_(z_streamp strm, int level, + const char *version, int stream_size); +ZEXTERN int ZEXPORT inflateInit_(z_streamp strm, + const char *version, int stream_size); +ZEXTERN int ZEXPORT deflateInit2_(z_streamp strm, int level, int method, + int windowBits, int memLevel, + int strategy, const char *version, + int stream_size); +ZEXTERN int ZEXPORT inflateInit2_(z_streamp strm, int windowBits, + const char *version, int stream_size); +ZEXTERN int ZEXPORT inflateBackInit_(z_streamp strm, int windowBits, + unsigned char FAR *window, + const char *version, + int stream_size); #ifdef Z_PREFIX_SET # define z_deflateInit(strm, level) \ deflateInit_((strm), (level), ZLIB_VERSION, (int)sizeof(z_stream)) @@ -1819,7 +1958,7 @@ struct gzFile_s { unsigned char *next; z_off64_t pos; }; -ZEXTERN int ZEXPORT gzgetc_ OF((gzFile file)); /* backward compatibility */ +ZEXTERN int ZEXPORT gzgetc_(gzFile file); /* backward compatibility */ #ifdef Z_PREFIX_SET # undef z_gzgetc # define z_gzgetc(g) \ @@ -1836,12 +1975,13 @@ ZEXTERN int ZEXPORT gzgetc_ OF((gzFile file)); /* backward compatibility */ * without large file support, _LFS64_LARGEFILE must also be true */ #ifdef Z_LARGE64 - ZEXTERN gzFile ZEXPORT gzopen64 OF((const char *, const char *)); - ZEXTERN z_off64_t ZEXPORT gzseek64 OF((gzFile, z_off64_t, int)); - ZEXTERN z_off64_t ZEXPORT gztell64 OF((gzFile)); - ZEXTERN z_off64_t ZEXPORT gzoffset64 OF((gzFile)); - ZEXTERN uLong ZEXPORT adler32_combine64 OF((uLong, uLong, z_off64_t)); - ZEXTERN uLong ZEXPORT crc32_combine64 OF((uLong, uLong, z_off64_t)); + ZEXTERN gzFile ZEXPORT gzopen64(const char *, const char *); + ZEXTERN z_off64_t ZEXPORT gzseek64(gzFile, z_off64_t, int); + ZEXTERN z_off64_t ZEXPORT gztell64(gzFile); + ZEXTERN z_off64_t ZEXPORT gzoffset64(gzFile); + ZEXTERN uLong ZEXPORT adler32_combine64(uLong, uLong, z_off64_t); + ZEXTERN uLong ZEXPORT crc32_combine64(uLong, uLong, z_off64_t); + ZEXTERN uLong ZEXPORT crc32_combine_gen64(z_off64_t); #endif #if !defined(ZLIB_INTERNAL) && defined(Z_WANT64) @@ -1852,6 +1992,7 @@ ZEXTERN int ZEXPORT gzgetc_ OF((gzFile file)); /* backward compatibility */ # define z_gzoffset z_gzoffset64 # define z_adler32_combine z_adler32_combine64 # define z_crc32_combine z_crc32_combine64 +# define z_crc32_combine_gen z_crc32_combine_gen64 # else # define gzopen gzopen64 # define gzseek gzseek64 @@ -1859,49 +2000,53 @@ ZEXTERN int ZEXPORT gzgetc_ OF((gzFile file)); /* backward compatibility */ # define gzoffset gzoffset64 # define adler32_combine adler32_combine64 # define crc32_combine crc32_combine64 +# define crc32_combine_gen crc32_combine_gen64 # endif # ifndef Z_LARGE64 - ZEXTERN gzFile ZEXPORT gzopen64 OF((const char *, const char *)); - ZEXTERN z_off_t ZEXPORT gzseek64 OF((gzFile, z_off_t, int)); - ZEXTERN z_off_t ZEXPORT gztell64 OF((gzFile)); - ZEXTERN z_off_t ZEXPORT gzoffset64 OF((gzFile)); - ZEXTERN uLong ZEXPORT adler32_combine64 OF((uLong, uLong, z_off_t)); - ZEXTERN uLong ZEXPORT crc32_combine64 OF((uLong, uLong, z_off_t)); + ZEXTERN gzFile ZEXPORT gzopen64(const char *, const char *); + ZEXTERN z_off_t ZEXPORT gzseek64(gzFile, z_off_t, int); + ZEXTERN z_off_t ZEXPORT gztell64(gzFile); + ZEXTERN z_off_t ZEXPORT gzoffset64(gzFile); + ZEXTERN uLong ZEXPORT adler32_combine64(uLong, uLong, z_off64_t); + ZEXTERN uLong ZEXPORT crc32_combine64(uLong, uLong, z_off64_t); + ZEXTERN uLong ZEXPORT crc32_combine_gen64(z_off64_t); # endif #else - ZEXTERN gzFile ZEXPORT gzopen OF((const char *, const char *)); - ZEXTERN z_off_t ZEXPORT gzseek OF((gzFile, z_off_t, int)); - ZEXTERN z_off_t ZEXPORT gztell OF((gzFile)); - ZEXTERN z_off_t ZEXPORT gzoffset OF((gzFile)); - ZEXTERN uLong ZEXPORT adler32_combine OF((uLong, uLong, z_off_t)); - ZEXTERN uLong ZEXPORT crc32_combine OF((uLong, uLong, z_off_t)); + ZEXTERN gzFile ZEXPORT gzopen(const char *, const char *); + ZEXTERN z_off_t ZEXPORT gzseek(gzFile, z_off_t, int); + ZEXTERN z_off_t ZEXPORT gztell(gzFile); + ZEXTERN z_off_t ZEXPORT gzoffset(gzFile); + ZEXTERN uLong ZEXPORT adler32_combine(uLong, uLong, z_off_t); + ZEXTERN uLong ZEXPORT crc32_combine(uLong, uLong, z_off_t); + ZEXTERN uLong ZEXPORT crc32_combine_gen(z_off_t); #endif #else /* Z_SOLO */ - ZEXTERN uLong ZEXPORT adler32_combine OF((uLong, uLong, z_off_t)); - ZEXTERN uLong ZEXPORT crc32_combine OF((uLong, uLong, z_off_t)); + ZEXTERN uLong ZEXPORT adler32_combine(uLong, uLong, z_off_t); + ZEXTERN uLong ZEXPORT crc32_combine(uLong, uLong, z_off_t); + ZEXTERN uLong ZEXPORT crc32_combine_gen(z_off_t); #endif /* !Z_SOLO */ /* undocumented functions */ -ZEXTERN const char * ZEXPORT zError OF((int)); -ZEXTERN int ZEXPORT inflateSyncPoint OF((z_streamp)); -ZEXTERN const z_crc_t FAR * ZEXPORT get_crc_table OF((void)); -ZEXTERN int ZEXPORT inflateUndermine OF((z_streamp, int)); -ZEXTERN int ZEXPORT inflateValidate OF((z_streamp, int)); -ZEXTERN unsigned long ZEXPORT inflateCodesUsed OF ((z_streamp)); -ZEXTERN int ZEXPORT inflateResetKeep OF((z_streamp)); -ZEXTERN int ZEXPORT deflateResetKeep OF((z_streamp)); -#if (defined(_WIN32) || defined(__CYGWIN__)) && !defined(Z_SOLO) -ZEXTERN gzFile ZEXPORT gzopen_w OF((const wchar_t *path, - const char *mode)); +ZEXTERN const char * ZEXPORT zError(int); +ZEXTERN int ZEXPORT inflateSyncPoint(z_streamp); +ZEXTERN const z_crc_t FAR * ZEXPORT get_crc_table(void); +ZEXTERN int ZEXPORT inflateUndermine(z_streamp, int); +ZEXTERN int ZEXPORT inflateValidate(z_streamp, int); +ZEXTERN unsigned long ZEXPORT inflateCodesUsed(z_streamp); +ZEXTERN int ZEXPORT inflateResetKeep(z_streamp); +ZEXTERN int ZEXPORT deflateResetKeep(z_streamp); +#if defined(_WIN32) && !defined(Z_SOLO) +ZEXTERN gzFile ZEXPORT gzopen_w(const wchar_t *path, + const char *mode); #endif #if defined(STDC) || defined(Z_HAVE_STDARG_H) # ifndef Z_SOLO -ZEXTERN int ZEXPORTVA gzvprintf Z_ARG((gzFile file, - const char *format, - va_list va)); +ZEXTERN int ZEXPORTVA gzvprintf(gzFile file, + const char *format, + va_list va); # endif #endif diff --git a/rSDK/Lib/zlib.lib b/rSDK/Lib/zlib.lib index 9d76f3d1948eb6e27f35b37c156283ca2862fdfa..5e7f3e3499be2e68c568df6310c28fd0494c7124 100644 GIT binary patch literal 344806 zcmeFa34D~*-8OvBOcKIOU=j$MAVdU3QMLfG36q^Ii?UXM5Rwc;Ac;hw<61j-;83NU?X)cGF3ak1^u*+d$(9u^r;WC( z<4BwRh}BG<-p{gWdEtGQ?SEO?+udy$Ic>LPKN)h%YRmo$q@&j`>pvoceJsZfRVPKp z{HB|AJQ?elVMUd_=2@{JIc7{@hNp1AfQ-C?y!5oO86Jg?wRuy)u3l>xq zQ{k;DEd^arHYWpdgU{Iuisn{JWU7pzRah$`UR7ERgOGYqGfm;La4mI(C1uq$g~b&m z@St!(Y5Clmd0JOfRams3Y;HLWp!6=Nt)5pnr>q9fhv^Z*`4T8AFRPKN>Y9qG(vreC zA+s7pWvMO|={cT>=@Z7~jhj$_+*$-bMD|zL6qOevO&J!G;_11b?Ck7`1?lM-A>IXL zHKkQW3&sqT;f=JC@5#z2$W24h30Yw*rSmlv6=Q~Yi;y>Sii+oZtirN#?}DP5(n4=h zHNvlT#TAuHtIFoi3xm96OG-;Z95qEKVJ1$Qo`Ufi>EkjpLw<_*j~P<4v@$F{S)Q!i z{G5!5Ir$;R#bxCs6^q9VsV-aAj58-cZ^Fc^f?UtM(xMWUrsAq%l>M^mg+(>R^FnEq z?a9p=myAAV%a?-+?O~9KokN2ccM2_a?=6h<(=a*M3E*~>Qvm!I* zMuud(XKZFxK|xOb*ifRen2Z@BLlenA!GoX_WT&Tx@uTEw_Ax`MN-Il?!lF9SGj8mJ zoXoVWtWbd1jIcJL`Cx-nGp{1lPM}zh8<(4tHZJej#WFHbd7g%h8-F zOVkupl$D2Eol=fUwy>-`3N%{eax}@ZM;w!iV3&$!6#-TKtg)EyNzcp6NS~OM=c%Yggi!iI9eQDYC5Hjk zlhB70%`Nqe8HlE<5Y?k-L1A@GNm)gqOtZoY$>;G5_Y6n3a~u|{aPG3=1r^n$g^Q^a z9hp#wte{FdDO9yJC?Y^=+0V^ghEi8qR8_Q4XcmR|l+{JmxVIMRxH#a9IBW=8gMbRY1(9Ch;3$n)L=Sg;9r@6)R zveNS=7nBxNfraXlipo-q zo#rkpt?&w>ZB}@_qA{DhOsa+srm^NG4I#3~R+VyyK(6Z2QZzu4O0JsH1q+Cf5-}wb zm`H1@P*p{vNUx}+YYG-R4h5B7w(&|M+Bc;}YaZUlD^$1WVOnII(iNz>qqQj7XqrOC zvW-`!s*MlV$wplv5si8X)qRXYCZjSLFJ$+nOfa%FqdJVGQqhG70({{d(eO9ZGC7+8 zg>#vsEufZs73hj28`2d8mYPC2V5DDSTmcTHVlcFl8KE^QpPFgI&8aRbSx{QVh$sau z%cw*E45WsZSwDB}A$9lwv-aS|;=|D%mNj{VWsRO@Sx4+PtKaE1>%I$Z*4^#w*6wL` zYxNepHLRDz>JxNWRW~@SZoi4KW;kN4dA(w}aADajCw}@r&f?F8A8BhV22x`DkB5vA zdg862CqkTR+LAx1kGC8VKer`+ZLQF+jTQb&uzvj4MueE5b_su5E4}oU;nE0s7)F{< zO&$Mr$Xi+bh2nQCRV-p1i=Wf7t6z9*ZF-auW#0WWo5f>K(@(I$)Sco_n(Y5?&Y({I zLPPq0Xi}Er`RU_}pEJ+?d1I0Pi>8J@cMPBY3+9qPdx_(}GyP2ec`GTpw*S`$s{b3a zrvK{9T%~Nr2~5>~*-$>?m(KD2|GLhqQu4S{P`R9)kJ-;LW-(*_Ba_ts=1Qy{35JG* zKW*4(hNhuG>WK_q#Sj@zaVQ=dxHi+a99#dQF}Rulm}$ZPn*!Cen3!Nr`_pH)YHHbR zJ|DKo5}Mi{a~d34htYF;uUU{0b9_u-Nt-PL{QS9dXw3#|I?dL0w718bT{m0*iJWTB zU8Yte5Ym=wLu!Gf*>YhsP4u-xy*~N>7GEP5U(rIC*}F>Ih)tWQJ2YV{BB5=u@NF=( zU?GD+oK%Oj)P)xLPJEYcS#3?(f_@cqE>RQkW9|75957($(4i?QLx&Dam8St_J15$@ zSnax`Uh;H%%gV+anxbC`m(UiKN}Xl(hvKM1>lAe+g0FN=?c83Iw8{Ed%jz3rSzB65 z#17)I64MnQ&IL#@8{|#Jqaevw#qA}HSXLsG=kZiRnD8VH@brt|bHP04C-B+8cVP>@ z#Hj8~YQfji-!^b>)=%JL_~!ovzGUz%`U!mWckNH$>j1tRe*#}0@cj{duPa^>kA?Ww zlrE|1wXhsoA^PHf7$Q^52thD^QxXeiN0x(bNa)4jxi&$tVT}UrC88WexX1AQ3p{p4 z2!i<&&As(7NC3~>Z3P=vS)#kg@^S_il7@0I3F27pjfH^+JZoqH;#lE}gV{%lM=;_q zTKHZBz6X4dBuOq*gQ)SPd!K@5zv4Sq__l%XFnFGB7vWw+xu<&v6p!SjzsR@ZdGo6= z#?eB!7r}=GAPa3k|IDoHv?&uOW1n?IPyA)%PVU(p%%7NmmwsjD44di&s zCL)nBVg?pNtEy*|R4yo5IwKRit_v!PN~&iZxZ|p8QZnXMRV*w`386e~aPGi9vxe z?F!4-Zz`%8I=Bq0tMsl0PGEc_+#m~DVIFtDF6Gd{%FE~AZ1%W`S;9p|M#Y65ke$rR zKbm5de38=9W?@+cb`q>^VBSJ4#>F){kd@r2MCQTPA;?BZB&C&TTR5rv;j%wJcDr-h zMc3t*$L$$1#(kBfj?7l-pGuZ&hPC*-WwhJ>|Kj3t1H@`MBCf1T=VO< z3&wxvD*1XuufA`8YFS^w-?!K<6_1!v8&)uJ6e7G}7R!PeLR%EfV!BXSRWTR)bSd03 zt4`^&WZ2NNX2^3D)hY9FXl2I00W)xlVL@$4DU|&N^cy&Qz~F)X2F$2MD$l51T0Mig z-EZDWa7%2zo(z|;ZC1)MfYVOJl}ih&Po|rT|wLR)-D;uKUBKPcHdG)-!GAJkb4v zc8%;APoT|4^WCqqWR7)^$Lmr;r|ZxrV&bzf1zT~J#oCf0Cw&?gyObQJ>Vowq~Kf4blphC4hKnoX*hU}*oK;-G}>W}MJ>6e^Cq(Aog&jDNIW zQ1KrdQc$JfpS?z$)eHa9l_|mf!QA-zv^f8f_{E7E+2r)y6pUE~YR%lTk&Ho~)X+)h zPn`IdDhBLpNb+gH;S~kVC^o=Rj=HI5p5F|4j+KKP4++{K&smV?8k0J8@Grp{EqWLm z`xx{$X`(yhuz?|JXJsXIfJ*zv)<4e5Okz@Xv)VD9(Zm();F3#lsou-7Tlw(&OK^L_ zZ0PvJ0voLGpk?{!|5cz&;Cj&RO3ye@&kPy`*~*%(R4!|VQaP>54CXV~H3qxRVDB1i zm%*56Sqbh3vl0vT0JQwi#?0J8?{GxfO178~k(t5-q97MVWTu>n4(i;9OrafS3QO5E zlZY(fV zWr&>CMM(&`^&~XM&+8QOAJgU_K?9IQ7WhPj=?@K zSU%D~x;IIwoYp*pEif1gPE&0{sLZs23+F>dFEdOD3Y|xhW#$c-MOI|mVZ1rTxkx); zq0ES5x<9MPu-41+RasMIN`VfHE(J_fT?(Fphd;X%uo0jm^okyZ8i4^owa`%s&*MQV zj|YP?zC%j_{;6_VS1Og$dca^08>};O%mbav;vAGJr?v5VkSz#g zi@GfvLKrAfZI=r29)!FIa%e=|)^^yaonsnYUyEbZ$4}1aX{Fr`Ppcki5aE@z1eAU* zRSo1wsAXDFCDV#3r*$j-CALASkOoj$TaYATATRsHuc7NjTnX*F)<>qs6c`LVPHOaR zo*McH`A$Klwd13Gc03i+|LSS6cfC?R*mY~uUzV+} zUi0O39X`ou9JRP=SD~4A9a1+2P5Ci zYdmN0%cp)h(tp(jm4V-Xx%*GIR{rjZkM9`v(rLb@Z|EJ^xMuK$SFOJ9yNl}@8}FGu z`SmrIy>x5(!-uyfubO-Rlp`D0&AmAHfjJr8?2?z?JbL4q|NJ=ik(nP(UG7^J#N4;j z)xOU4A2c93LWtvl{mM%IR2E}vYGMoG@!||}zX1b&gE}RV@YOt)0Eex=vK=DfD>$qK z4jb3=C)W~95%)-By{MN-Rsl&!mCB^4i zXP{tdzm`c*wEWF&wT4N^uRl(T*&VWVi?T(Y=C(MBb=Z=X`P3yD7_Mr+9#<%Nn%iRP zg+kaPe)-=*wmw$2$kW`GXv=N7Paf3y?i)k4VpP(Sr@1YrgTvMb{|rZSfj(Ra^1xQu z>K|Kuhpn%`E$er0G$CGO4ljqCsyJ+H$C)k^ZAH$9yTj7u5Mie6g0=VD-qIa5ODNA^ z(0P{F!X2*i$g)az+C16$ftK!YG~%#v?NEoOT?==ZQx2PMy{dlS?q4n4VG28JFXEr& zm?F7_JDinBcNm^__CtqSy315%BwuL1@driI`6 z!mM5Q#x3uAsjx>muIE%cR%U1E$M%)ZOC3Bgw6D}g>?<`OJA0{&4DX2uu^;ND3xwja zqU`ag3oh|eWh!4;jb(P<+#_lLn@;*b<)s6qc! zsK0_-g(7qUYwtR9ihub6DHl$E$;xUYA1X zJ!7Ed*%9U=S@VRciaGQHBBtwfllJ>T_E9z0vg%Z=<0Wq{A*O)EX5p4*jafXRB`HEn z#ED?-X;>%X5(^iY*{8{F^-N=%nIMG?Jn3T9Na_>N7L88oia6S=>WbQ`;^VJcwxgG@ zshR1iUJ%vkL{oaA`b2QIvpQM1Cbn#`TrsYGaWM(;?ezj!Z-9ES9J|H170S5KPHz!V zmoQ}$X<2hCXewjD`4Go9dgT>OC~vlE|2eI&tnQZG%1eq|2MHyqg%x!yJBsyKhK`G= zOfu$!$_2U7#?&UjXmeSXQD)kyluHK0STltrL`E((MJ~J!00%|*^2!{`@-a*$pe!Gy zpp4!rkgd4eeX=oa%+q84Esi`SSoo4*x82Sv9O}T@@rh|2x zd7?!q-qzZ7Ctjc7bf`Xa*`2{-fY}tWwP3i!_>GN^Tw4}Pss%bgpezFvY@9QN3YYCH zxu}fMn~(9D2FgU44muF@SD-^dF9K!R!J?RG6S_g&N-VEZ&D;eJ4m|$+=s-~LwRomSw*??g$aaE&xacs|n*dh5Q|nxH7%hc6>$%{8ONP~FZ42aXn+FrCU~ATkq+7FS6J)<6Oeae~{%7g% zs_UQ+)V?0b+Ueikw5qW-VdPuEE$*C60Q&CqFMrXhZR2lh3T_q9i+zv4k4r4Mvl%?# ze>Q&A;o8_>*3NyKFdA_ze-T5EvxY(M*m9N)tY!<;|AVd8m3p`^_}r|E*?#$du-CNq z|L|RH>s3v)u}^=G!e-1i{y?4NLn*ONgN(D5;h(#>$<~wjXG@T5eS&|^{X$!0E1}bZ zQ(TrPU0K6hL6*=i5#}p^*)3Ve;-T&oVZI%hO>MZbrRxx3eg^cqePSzVN7t7cF*;(H zXg39vwOWd>(GidFMhuX2BQ!)XUxY@8Lm-kYf!z4pb#^!^lS{TUjmL5dW z^FG4Go?;-vaRdt$$1-}n!&HzWv;o{=FvZ}}vYdqf_~1$gCA_hbqo7xXPc9J{W-l8Y zR(Bm3osBwb&D&gk_<+%3Msj6ACX{7u7WxaUA?W;05o0c$c-M0djA9j!!wsdv=TO3? zitd9m-gtHN1P*410ULuNsu#-3DFU;JQg*fQ=q%$XoB3_cn)wB#UXFOvM2|5@uz!RG zEk^jAj4WcaL?1)_#R4$^O-o{$$d2J#>wR!A-8&l_ad7pbBo4NYB6M#;?u2Bg!78AI zOjDu5fbf`uKxWZT7zC0nl#d)OGO|oDxhkQ$362bR>JWgk4p1;cG8IM5_OV{{M(dvj zikXKm9~2`MUmfUR&;TfU3g1wWJ zuyDs#`n%O&uNmx3gMDVOeFke|*LIVX%4wZyu+t1S&|pIhmTRyJ3|3{ZMFv}Ku(byJ ztHB;K*mi@xWU$W+w$EVS8LY`*ccb3OG`LTxMDN^ef{n8odVY<`^~^1uRL+I^o?bw- zNKp#Z1tHk?uyUfth&6-Tk%ogJ`i2z6!(Q&pXnjM=u0gkrbXJPvHT#)g8{YspBUv1cZTh&Krru^<7jq5j0Sat7nZI|YiuRn80`_8-XeC)hyTF)Gl zSoZv~r~mL;kD&vevfaJ@^|-Fxik^M#zjvU3n>fwIPdZQ#wsk`X9JT@YN8(sJ?yN&6 zLsj^uajf9s#*G~EutX3G-!#U~58Od-By2x)Z}t~0-QgJ2VdI7k+Y*Yn7VfaBI&ADQ z8M1rk#ogM{9hN(XjT<%np`wUy;f@oi!6FRWScwyHFJlvqsjgM2fqc8Ts z7$OC|Iz=d{HKJ>NjN$1fI9b{?5BhZ>c;HpKgPvT7c!OjsMEVuJ*~=Prtj*rZ$`*N= zZ}xI0%we0S%tNFcN*y)cGU6s($fV_+J9VS4*#m0Pb~>?9Q(A5IIa5-8Y^QTD zp01HwoxDNUU+i?Ay8*L46@zFyoeNl|!bOywP9Jjj7VvddrI*W6o@4BE_Ml;y5PT6k zbu}nkmxJ%CUXqbj!DD$^-0a#7ymxO*e^B%&nElaq9M{;;8H4AZGX**h3p^!hf=!$_j^^G{823zkII_KTh(oTt$m- z0@Dxki~$oRADh`|;kz7sw}a=@e94Dm7S+A=F!&XC4o;DLlaAqDcNDn(zrvITV-$*G zg>MEb(zW3EVvgivbfSgtQsCQ5C6E4(7T=>tzY$*K$2`f^0VJAx-+(W^OuHm$RQC`* z+kDIVzEbiq+R@y*8hCyU@&l3r$r&~M4xpfa37(IZ2sZ0XkZA6$0zPk<Ar-MWbABU%V>m-llBXsOdKk1~-7`hkD7^8zfrz1|Z)mnJHl+TKG~>o;O@)S&cVK z#$1qS?jf12&9{X)24yt&8i8*CpZ|8ri(p9i!p?uuWCrb#5tbW~OaMaUA8Vhzk2jAg}z3mAK0gc+t1%BVybH4odI zBD{=>)iJ#MjfJuBun7}J39EAnNgwIqthiN6e{g@bx;VO7i8SjP%^pH8EGFY9%Uq0h z_2Y~TV=0P`JWW$uJP#A!=68ZSC>#1YQgK7K6yyGQ5jqt~#!>nZ<$MnhjzkY8!Vqz4h=-8aO!Km{S2&^^^kRK9 zK4}rckH=c%i`gQP!eS)YYhigD0}y#}x#f8zB7cH|p;T*eLP;NRLYBze(KEvXP${yk zCw#13Fc&2*B77=^Q((>mQeMH)%tLU{2SyQZ(Rzh*N+S}6kvZn+r`a&HK_=Rk4BI>Y z;h1Uj+BQ|qZSB7f&0vPWTi$qPi<@X`dE@y*fw#Qz%oR)zB*le@I>jus3++{nxCQ!- zO8qg^-IW^eUs|Ur^$Spc1+zL%tbX~8XXa9Mzmsv}`Tww6$~^A%pTDwu0w>bs(JOPP z=>%MoXWLH3A+F{wo!moQKjyYMM>lZjNjNeleLE?q&mx@qkA}0Q<0cbugz;pZT|9Y( zPP=5neez1-VD0vapVc%@nP3k74}`O&<0kKhoQzYDvK$URiN!!W6$<%DO!H$qZj$As zM^0i3hI7Lws{t`inQ#s|dFg!|$4wTbp1cZmGDEHt!6eIn zBAhK94<*aV>pF*?ywYNvG9e$T6Y9j<_TxBilI6UUS6XzyO;k=|1wFRgCMG9wY^3wo z#3amndBY$SHB3PcLdHY##ClvXZwneF&;sgq(FfQv|{8Qx= z=NH=uj58&w#I~wi!Xw4O69WBmC9-T3Mx*UT-Hpba#}S| zaW%sw7M!SZTI+yuS>9#+R;irUy-+0!?DtCLv^GP<2+=7*bp8?1 z2`y9Hif`3A&Kc{9NpQ5Wx3#eaYAz!Ei*#SRi4}IVmvRe;+dynTDY;ca z$@WvWp=@hp>&O<8?FZ$F3Z@0aM!zYrOo-Q+;&Ib59wz|ft#cs%2)O`qKO|lf#Ch*{ zyvP)f);b=i`r>h-E*|$n;;o~QcE~Fr(;+uQ_Jq6(at`E2kVrY}w~!Y??tmNw`De%~ z$S)!JVUx9x;~}4iJR9=&ke5LI6Y>e8E zS&;WbmO<`?#DcGN6XdTT-+~+t`55F<$ZsHHAy+|WLH-T0H{?B#rI4RMV!7M89&!rg zKOl!d{uQzo@@q(}8sinNc$~J3w_bug7xDqfg^>S(JQeab$eEDuL7or!6y$Qq?;+bG z2JLOFt!qKA1)T&s3G_A4*FaN2Q$ha%`WMh@&}z`HK)(Xzhj3h=LC_%R1keefFMz%P z+84Ah=pR7;06HIZKIlHseV|=IyMo>VdJE{qpcjL_1Nsi=NYIg>Pk=rF`fJc%gMJ74 z9cU}iR-jjcUJ055nghBObSvnYpl5>q59t4Z&IO$d`WfhFpq)TFf!+vuBj_~HX`pX{ zz6p9B=y{+GpbemlK^KGm8}#3xZcsPq)u2~{=7Z*gz5@CRXn)ZDpbvsR2wDMJ0r~~# z7oa^rdw|{ndIxABXd&napdWya0UZPS4CphUmxEpo+63AJ%9g+bnF2W*G7+)>asXr{ zWIW_p$UczsAUi`&ha3jE1TqFP6S5a%31l+lWXQpgHINRt;D^kB+yZ$z zYs&{ZSdu$K^86Mb$Vh40nx>4NME*$T1~Bn8`S-5#?2C#u_KhK%hn+g^@5IlknWurnmjQl&ulfgAwIlZhV4 z0?65rm5@Hj4UmnHyCB0wq`&l&{?RY`LqAd=>9z-QHlz=-5t4!S{SpUg7s3X+-611; zFrJi*#5gWyKQRmm!EnV{qo86aG2(}cz>3o+56fquWR*2sN4;I_kYu7#h74raxgF68@Pesnq*rO^iv6~UHur580W)@?uOO0 z45PER`GxW;?`vPU8@BFq)u%ZE0ts&R286>wp>;P12mMD{uNW!4m>Sjb)JC`}-Tb$5 zU=PB}cLED>Vb|Z-N;^L_it*#%tb$Ayuir`)OVQVmC6HR|RtlO?6e0DQ+tgFO4@sfT zZ-%+P0Z6{LglWk9BNi9of}DXp0A2rx^UJ#x$48*knRPirL>Hu zQjl??P~lL3L*7tb3VJE9WuVu9t^nNvdO7Id6#jRGGrq)GMk^rYtu?CTtu?Bg=)a_? z3q7_}Ing(2jOi`;1|TP--N8!bM4t=+oyvM<8Z*2Xq!zMq31t{FoPxXuA$hoBa72b_ zJEW74Qc{Qv3;Sqx^ISW24(ZE^(Q-$-4SI~+`4UEb!q{}!nCEQzC@PW2q?fA1E{9qk zuBJ*JuBOU~!I_1@6tT5RM^voT9rxL4V!gw=)Mlr@y2rmM#{X@P75lxzZ{G;R+M!T9NyWKP zY@?#rV<{l@tCQiJyNAc}4)0u>nC5Scsr!ccdD$1Kjr(FZGOGeP=hUz6jKO!o)IHF` zPOp%r>CtY`)URd`lzG#meFU@yy{WM>AY{e=?0_e@*dToMx_dBM&^_uW@%o=!y#no~ zRXYI)?(8&$kYPZ00WXA{280*%LWtA9FUJ3!WBEh-T>gEIeR2MM_Ixwe9V4G#)Ykv>8t}x_w%X_LZ;B1R8qA7EqKw?^ zzVZj){^hu{zw!`NvJH1P+|ITd*Cg41j}KhUy&W}Zg?m7!oOeJv^RcDf?f3> zV9Jd@{OYEC8p}(DMc9HPu$~skOUCWZ4!|biGKpi8xs2PmFYDKW-|g$k^lfw? z4zdHP&#@y-jN_Y-H1iM)49FmwB@)8F_fdeb%0Nz6_hyzb-A-N*_jN_+RNp9GzCei) znYI-nQ(a|!hOHpDnl-}%%1Yxgl|$5&W_5@Wezu#eZ^&g_yKQYWxPLlx%MFMWkF_Ra z^r%&g=rVzAH>x*`DNjncAu(cPl@}`BBbBPNjEc9Us$rUJ@z`gbPz`YC(ajL3*dE7O z=}@f@rk_H!T&TV^SR7jSMFMLNm2?jZ(K*Np4-Ev5HdE*}o}EKm=m~SI)iJ`{4LwKM z6!DPB5$3;wK2D7W=uVpm^JI2~V$3ExpMhx2heUKf3={313OZQ_%nI*(_-XlOV+MT@ z7TF5HlWi?~BVIXTkflgMAV!PtE!g<>w;5rCI6@a&+k>+wtYLJ5Pk5J>@Msw_%Z@=jO{!u znaG4VAY47yF#!c`ie<-=iyhN?2Zl?ZS~^e{++wx0HQM~5KrvVN36BLLaXE7ma}Kx_dITcev`}QncnrWo zZ^ZDdmBaTxadt=hxH!mm39*TB_JpzR;~b6&P`Fyf#U->(!m_cx*xL;@DEWzx=!veg z`Xdp(wm&(M`F2d7u(0v$m!o%Fyu;<{=^7rF;Bet38&_9X|2RiNLM#V_G6m#wJS_WO z;bT{k9!%juLO)pO+aV?EguaV159xKKv#dF+?syNfdcI&n2zUt?B3+egZK*X%2!DA= z=Y$2B$J-or8<3orLLwy{r$Y91^~HaOxV8zgae92(0Z!9)Ps}LT_%S&tQy_aN+8LC5 zk+Y0YHRU+A9UjzS&eCsYCzGxD%tOCl%`d*N{po;t3F{V1bXY5+FCa2iMO_b@u^a)W zg>J_=Al|P)^b0-)Vjt+Kpr3>G2K@rG9`s944*m~={tqacbzd&ZHCiB_s6L>)@<4qd z%RA_NrDr{HL0<=oKEcO3#Yv#77o9*ifTn<6ho+?`=pR8(2knml^#UCSdKPFN=-Hs# zLGke}-#l?>wnl)S0-6TOCy{QJ{eQJqaVz6?9Ei>2(gK-~Ex_5)Y?ll;9^rU-_ z8|-O=eQ2;x3>J%&lrS2_s%jHdl`w1Ggz*{er2$k2D{o|*Bb0WgZ;%| z|1#J?gYkr@3|}9ma#|A&R$#D22E$BRh3`6ptv6TuT*%e#bBKcw#Z=147S=} zYYldT!EQF#y$1We!Co-fD+YVVU>_Llb&OzS_;xClydjRybJSgjlD4%jMUG0WKpkgs z^>rL>2I@G8tFOBZbFDxfXJ@I6TkFnIoLlSop)(3^piT_->$vC?sB7eZZv0F!?Pu$n z42g9x{Bt)rPJBcUJW$QSzZ?M~s4W%+WUI_7Ed|GYNOGY+2>K9Yzld=e?U09bD%&a{ z#JH@iysW0hfGjlf;maf~2V@-0aJZ$LUpB3g&8qT*1kI{`r>s+p=2X8kRvBhN$B{`{ zqVR1t*(SaK$~NRhP_~&EI{Es5z6v@R^mWh+K>qCSve zx!^#RTyUUDelbL1KIkQOjZ(QRmJo>@FxVl3VG&{y-T;aZUd`-xH{8Lpz?p7tFejN0 zgn5H+aJHKtFJ`+p(wI}-oaErNWT0!W3|qInQmk9%aNSZUv2OXfyWzQ6`#N&6D?bIizE!8*GS_3d~y=LDxPoSv`&xj}e0PmGjjVFaYTlo6!iF{d6JS9Su! zX~GGQv1%f$tkN4@&wph2gg47h=1}QN_*^MMr~Z&H6fVdTp~71Y7y+>y;0A<`Gii*< zeOw-#4f;QzMW8!C=YYNkS`7LHXbI?7pz}cwEB*IM&%~p@a)d&a9HCGp-+qx8OSZ(0 zDiuP8FiPwUrE*zk8;oN!X?L2zDhyU_FqTTm$2ENE9>*IJ`;)*#)JiCWX>827@S!U% zJ5W9t7r6~WKk3H9w=BHdd_8&>C z9mZAXsqyYd#U3SgHO)RJAT?kBl-eklRMi41cOZ|%Uv{RnyjI&)R?N=jkq|qxh1D(- zQVXt`Qs`35YDcw}?CmMEIa@BRW3{>!vY(Z0Di2NRCixdba*Iidx;bTq@_X#zwW|5% zVkOSWgt|NJr!Lhj!I7mp#M81=M;n9c__7w4sF2-j$s&uM#m6!7eW1fY(d76>fc_rT z1Nso?c+fw9=7atbltmcD(l-zEPoNc`w}Gs#D&=EP;8!jz{?HeE=wQeIG%ORbXgl;f45u=iPM zUj3EZtW^r!50FN?~ZVd=98_b<@WN`8LpYpm%_#fNlU~y4?xNKwkt_U6O6uF^cR$1erpYj>y)D z9R-Cpk1Vn`!K{Bok)@mDpAX5AuM{k@{FZMmuNt@P^kvUoVhWx1P!~EDt)JU8!OEAA zvmv$6@nw~otUzS6kKR2B%Hq=iIv8{#C|fCHzb_N?3DAo{p9C!deF~Iu+yu(v#g<$a zFREnmqRPpFDNJ3Wph@gugR!7VjIEKh%hpI@s)+oeZSRzgj8EjY_Znc__FgBqy?^a~ zbdB2fR>(XcYTH{OX+YGrw?aI>s+oomY$lwkV@$9?dKLwIrLh7)IxvbcYW9?*`{tahB%Jbtfy>^%-9 zemW$3$!NPH$Eh?e=AB{`$||!>I4J*gx-n-^^o2;l^pEkz(x(`M_69u{dMtqY&IcU` zS^zo-biLAV0L5mm??KSvpy^# zbtibN)W7i^`>X{2^G%pp#!n3n2xM&wdg7<0HU(xr8>oFT7$5W`1aef0CZ^!dyjVm&|{!#0!nx0L<7^g!74P51)fdLjCmws-gYdY=iYn9sM4P3U) zo;GsZWiJGupksk4fA=@pmtU0HSU=w8|JLr#-BzD&bLVaj{=GiO76^AqoV)P`V%7z- zUe``G1zDk2HP*P?4Vi1~XZd-gMY;@UFS{Sk2l2{wK};}6--4TN>bp63z8y{=E;1fQ7Ah^!1UK9|_02K>}F2^Xac!JtH#DD{Ka z1x4xvr@VNHE%2mBg{B~lB(4(18;tWhVjd69+=)2dj5w`Lh+mtG<2;*2yc*2i>3;NW zclu7iKWtgk4GVnFx*Ilm1KIXq?Tb?|eG+XKSWv_S4o5epf3|FfO_-`L&tW7%9v zPsM*z?Y5u@_N0J}hp>~n15bk2Z5f5=Ao<-5j{1x3j=wv0cmtDj-%ay><6f~ZIP>qR zO{?BnGR)mD`Dy#A9W`eorKh|bJm5hfro5Zl=)ER#@QEP4x(AVZI%ni}E4JY)2!*p! zU%FTZ5^ssKUAY1hpWQ~06!Qb@=4#arql!c6S^~agYcW(lp<;z*qq!1N3!car1x>sH z*l6~Gn!Ies3M0%@u_n<*m|`Ol=F=n0+2yoWuF;*m2=jMfuE(wiq1pwHB8S8b6YZ9R zazYH6RhIf^+^Od82`?;$acnY2OS(GoGQ-pJc z!a0Vaz0mK)g6Ye~Ih|;F48xX)ok5M@4Q&{+e?!kHhS8m&vLTVthT;_=?(Eydk~uda zVsR>f-=~)LOBe9_)OzSWkXEb|iz}Q-uycXXZ@?x=GOi{}7qf(V4wA(iF~S;y%soAJ zYqZAvJe69cQl_oYI?H}4_|lVJMCzR*@JV(aB#_?ofPvs}G#w!j_ZNQ!Hn z5ZfiPsIX`Z5{c?D=V7oyTUH}W0RznkOED5riD~iGRB!%%IErc^dMP`PKaqI$DuH$idmp64dL@g`DG-TOU-R`K>6y3;Du6z zQ`!Xk6%$>Vh_&BtWIkE(lB^f-vT+lku3qY>`oet^;T?mTr!ughg;>B=Z z9Vq!$gKh$4MZ|u$k0tsV&<4=ofHs0+_uID%l;-^6fvWw1>Kd&ywfkyU;$g`~en3>Je_kyyM^ImJgk zC6;2aF@`V0VEG1Pb&>HXG+430Ru~NBO7X2T*l!JnTvuVa*I<7(*rNt}-e4~q?0tiM zWUwC$W_M_R+bWgIYG<(S2J2}sOd(WQh8m1#ZDhJ!Xt28t#`o=I8f-DxR)f7}us03X z4sC;UkEcYX-7^e^Q#}gf+uM>4i}VVcZZIskE9?$~{mx)d8ElimUNYFL2K&lj|2CK} zR{OhBsnpy3@&5hESks&|HTCec`dNv?AKHN4+P!iyVivrH`&sTsCl0c?A00Kw{pgHA zcK>sZO&`VwYL7a;aj&`w#T|Bo8|9At#GCDb+#~LWgqwpik9dQx267JtU%{6AW9(YI zu4}k~-uDG}!;Zj|10%m#krNz?0rr95ax9YzGym2D7~HSv=4|pL2P>0<1@UXwh$Z-h zjt?iEy@s9yryPQzLwFdhJ?ee!pZn~N@7xW~djo6ed_b7&MH_=~2jQ)S&j8jZ*Haak zvftfs-Jm$6N$?>$7MOAfp$E1$hS>9g+ylXv5ndHkxC-wOBN6_-&yPG9%sqnB1_d}h zE<9uSvyNcT0O#_L7vuvlL`bE3{>=yAkK-B!U|+1eVY}mvfY4}1bN2@y7QwCE&o3CQ zfx0gf+IpPH=x%tS?;A{5ksKqRU-2toKOr>{v|#Rj z|E2>f8*IYqeeK|yx3zG@@p3?5`E^a`=D8;+Mr`|B!B;lzZM8N)5ZjwFRo#!iwdrGf zVCDgL!^HM>cSCY}1{aCD|EDD`%Z^Fkmcd7fSrc9!_P0pf{l`gMtOq0CXYOD1j(g>D zD1*5NRI)xKO6O~RA0vlJ-5jQ5@B^K&?|TD3o~j~1U&tg?Y1!8M+Gk$Z4~`dPI(h>e z=^G00NLk&k_zk`zhO+pC%;LxGD39)j-*UFp_X8Q2;FsYgb4Q>yJ}@O=D;8E_8>1R4b~ty7 z^aw3a%h5mMNYOdQV~fK;y5-3(PI5#51m80bJm~}Sphun+&jOXSs_vLG_bc5~}Aa{6wRfkchzMg`z=;`q_hM?R#=hTl= zi!rom^>?`O8LjT{fKlf+l~M%00{8_Ey;qLrVTrKFIV0V~ri(D5hEtE%^E1|_D1m2llF%Na|fUPvbo*3mMifN}ssBE^}Sx&_92%2-IE^81GmNX)=%!}1(F~Z-eodjhar=ZU-3KeEU zSO#Vwt^!Q~{SD|DpuYv}4|**qi~seYS)ez7ZU@DgTp#BbH-oac-U7M?sdp>rouIdY z-Vcfx`W^(m1C*uUPEgL&?*iqy<9k3q0lgQL-(311PzM5p5vVT?^nOs>vb7!o8M;lJDZY1rN8*HuNTW2s_Rn2ZPy>X42n|O69UnF&Mw2 zCH)v~FrMs|SdqalHCU~|Fi%!|0fXISu-gpwfWaO%*i#0>Y*mGia~bLHrw04dV22IH zT$g-KrE+pJMPWQgPE)5f*kHp9Hr8M~WiI)q8*GNba79?TS7R`gc!i;iE4zO(*q;sd zcZ0oduw4e*ZLlK-J8Cf2KpD55O69ax8f=Zh)Xt{3Qk=R&UMj|w;y5q9{t{!@~$&JBz z)@-aD=}ugSO?ToP7(^}(ve}*p$%ao42HFb!Xrbpia*5ElQRX52aW5XR{oyh$1IUGC z>4+1-a~y9&KKkCG+>oynPRc)>{v2FNr!DI_humF!1(Y2I3Zt((DD_;%{|9IeC?@9O z#M@5L=}J#GK7hUq^bJtv0riZ=<&bh0kSe(gNR?AOoF}pS6rWScM4K~DJ!wr^YuyF>v%3xdqm;R#q`1kk0{-S$YqugIi z433S#{vsw}m^EN?u`)4`y9-z#cQ@t_?j%3=q5`=`Q@2As5o)z(R=YE}QtYI80~4>X z2e0LJT6*2L+<|o0v%jksyK@@})F=F=?`F*PQg;Nh4onLU$474KW1d39v8ng21E0#p z(trmO!ijbE;B#psUv}qh!h|}IwTC;8dDwXjW?}m(%|3GZ{>!s*!Zm|oO5Hwk`O(W- z_g#K8h@d7shSdTG?pTj;Ke*NA7uV*qc3~f~V{qoX*dTM*v6~8W8j3B++(UeQVBrB9 z!sT8y4+E3Hly_I{aIbs;!K%-0s(bEsEQi#Ostz6qEI(j&9$&7nBaRK$4BXVusCCwR zei+9lq~@^KzjDH81kAp%sR3yxxEop_Y}4x> zf0M~G>WN_f(fZ4ejt}I%8v2aLTT+_yF-E!Q}`1U)T|7|L3;a8`O7zV-Tyz+15A6r9Qyf zG*GY^!$3(iL!51K%{AQo5jdh}TjcvV!n}!|DA!g(#naZ|_W7Y4J-0guRTuC_?$a?$ zbo*;iE}~0OH@CFB5StdL}OJa z3foUkPGpltrXDTYQHC>!0Q1JM9+t1B7V`?-1hPu-1eXIm@&>U@ZJJit?AW8b2#;nx zhzFlSZ8Sg1Atz|FXw|yT))Os5zHN|ci@y|Zwi4mng%Yg&2yM7k;JBZ6LB(Qa#j$mOC@r36Ar*sl)Yo3vaghu>r`GirD^Rj}Z_~bT*;mU>{#LvQ5AfSa;ZZ3$NG$ zKPj9_Frj@{=p7=oOwAs&X1yJ@w`aDcn4o71_Bdgk-lhxv`NCUvdc7dg%-iBHyH2uk ze@$+DdITRkLb-=GQSd!rE3@?lkDhBR5q>dq==Mv3XB3)u22Z-vS_Lni z5S)d|Sz$M!e=j^n_{55Gk!78N2_omZBZU4L*o(GM5nL#WFQdxu z-Ey#SHg@7=s@W`E+}Z<-Fo=>f|0>Iuqp?hnfD9y2X*{*HR4A7)%)k1G}QPUtZ&@I4JW40H?V z2vGJ2*q`*Vlwfts_YUZ2(EXs;G4Zja&|Mx$PXlF`$AYrNVhv2(4xRv71wGbUd`mzt z0KE)!Iw;c&_e*_jLM{TmTItt=UJU&`pff;!4>}X{F;MKl_;5SVnhnZ|H3xJTDD8g+ zN_V*vR0_(pUjiv-gH*}cAXRcNOky7?J~~n*CYcTGVN%y*A-X;CuUYNuN8EmM*rWlM5Vo1JHgOwR^g(3H`pTv+i0+74Yti-oIlF&VVJJ`-EXi121|_5e7x%{!`I7TeGKL?Sf;^nwMF^C zT{dZVp1~Fv>`8+)8cYnMd)eSz8!>W4+>!9!Ec6% zc2_{^Pbp#E%K;x(e))wgISR3b4k2-LLCMP(#~bSDuG=PFRuK!yayX_Jt_$Ey=p!Uv&IN9>(ee=QsqCgFNZvcpSeOjNH(n2tR%^UU(Wh2@|rxqcPyshoE_& zAA|C!0L@u%_JA^~46p3usgj*MRZhAfOywGc#10wkh*CN6D6Qr@U8$TnPN%Vv2J;&1 z5`%FmSNhAPTayK%|Kqbd?RYA|-s5=&Gnr`6A37`Q3B7>X&rbc59y zjEl9>kKY*VdV~GNU^rx?__i2qtHJgfjE{Lp_t@3R@L`KUVdxm}h}+}c5s9htVT;tm z^`01Spz^5ypSIdB<+B!#v%z!s$VBfEVakUt9_KjL-NT3f2y?L}8F-lM7lDU4^$$GE z`@w;SH{c&{U|ffyd5k5?Rdfvk973?^N2rCKMQ5>ujd|pf<;^gUoU7AKy5Wc9s}xey z@s*1xyP|SlrFTUyN4wB+M^wLc!FsISBh{gX@`}iN@1Y%?>0wrMd|9t2Djdn@V|bqg zO#wym^Nj|58gv$DBWN)w#*|_Sa5E_5wgr@Fv`{XqH5eL1;hs2ab3t%QJcba7(}HWoq4+0no`IF4`k1bP<%uIVxvzc*)-bk6s2}_^ z&etp-9enbN*o_u8o}f9Bd!`mve@R) z)^d*qm&00Xcf+U#@5ooGMg^BA)+VmKs*_~zNV2F);1Lm+;7%DfM}oo{k6hey2il>-HR;I3==taLGmc46m^xCmQ*Y*$5%I-Uqh4KE6W7Mdw6A? z8{o$-)lo(=90249>wMH+uJ&XKyu&r>*dp z;q4;y&snEo8~8q;j3>_sTq7V_}ADAA{Qp^bSy*KK1Lj`$+LQ@x=pa!zFfU zCEuwiy^`-VrIII8CB~DflJ9)Omu9eBgI!=S);?*MGjwT}b8v|T40fl%?lIWI2K%eQ zcrsPmebr$9GT1?bA>|bxRza1&9hAx?UhI-#>20vH4BtwFtudIGnZ@%#;)K-g)1Ki< z{MIZUENOB#;I7W!(T-&$Vy6Swo>s@LYILt*EQpyd3kH-8mVgq#j{Z0Dp&1MKKvp4ufM>tuj9zqpyTYR ze%kl@;-6vQpz>!WV9Vl&&AqA?5jxJwKFd6t1zmNRyDaZ4<8{gX;2cg1hREvoo!$iBEL-G|yDe9_=i^^MGd1MI2E#L114K9!GxToYxy|>Ux(YL6_yW4rsrt01^!#KmL-@XY5Sa0aGpjkbjMat!Sy1x zR%76T<|?kO(vvyHyi_o)7M3{knl1G8nEtIs4j4-!Sb9{}M(}(R9&~Y6he4MOw!SfX zztY?A?h=J9EVwukw@8LWu5h0sIChFAJ(T{sqzJ{=mVg;Kpz492$X%r$DrK%+zq-F^b^n*KymiN z$1%-kpqL19u|&M0#PIEhejg|c-ZDtpcTgq!4yv3Ofk;yqCyIj4DW0yEd>nsCzRqY3 zB-Tx-oYpx8oLt*i*ck@PHrRNBU1G3ugDo@I3WMEhunh)_LCYrnjaMo;Vi!-| z<0}_Dty?c%SDz-|TK9kB!VBxm6Y91$;X1s2XB|hc|BjDZcmwU5y|JEQJI2>CzE)q$ zIJG`4RzKOD5G!2dlj1I~i_eLB0}lPbdn5hL!U#V9M7``1=4IkoZ*=eQC6EM0GuglO zCc%f z4UXlz8&-;E_;F=g*l@rG9(?zI+h#=?zDL5T5K<_+`MdVb(_DR=#9|>?=)=u9jcF$kIkirSFdvULFG+Ov(w(*u=J&Eq z4C}hF!PMdiG{eL&oC(Soex<0ZE-f#?mr3M{1=V6MFbKis*GbrA(1zSqKNW{iTTYAE zbA~#FzV;2anWj&}!k}FJ)sv1T!q0#$7UySmea$kN{dj` zTTZ%?!j?x>8W3Xq*kPK4c8Mqw(n%$IZLzV-E>;VcFA9u>&Dv->&R?WVyT|P!g6`njb7~>%^p45_j*BR_?gWYGa zmkqYVVDB63BZKjHhjj0-!MY$-B*vCV`g@+iu+gosDF(ylw8FTtDeZD&Q`$w5R~S1> ziE$kik67&QJjvZK-98nsSNLCU8ooTyeU%H1*s6CPYlS3ud@cUmS+AyU$EBO=H~AYe z;X2~qMM=q%9-d~w z(FwD||3ljq)BIb%$JH@)3k%<}!SyzD`NzA6#pqxRfvZkuKkxTZiQ7{cgS?_{mhEL* zRG(+xi$+>S+TY}KU(GQy>^6#`w0<*F#9Una-%NxyCnpi)*V#-WoPpTZ=Q(7`W8p#E z&vQ43yN&ovPUu$UUan{(UAT;aqVe4Sa=M5*=Wh7Y|4r)^6HylYTfYt~9Y5oao-7*p zzMQy@x35e6G>ph`{qqg~rdFy#s|r5zXlfI-{keQ2+Ozt6$G&dEXC^=^)^Emtzpu^X zZ0+iyas+1{^=BQyBF+J{23@~9?jp_rw3HkS=&qO}LH4oirjgE8&j|Bw=q}~8I^+e+ zyG5AKg}F_Q1nJHx5$4Z|!J72#Ak0_5qsZNQhKY910p+kk3ON#N@rnvRGD4n<1lKDu z3lO|Ba9ZzC$S3S^)@zQ?*ex{nIPSs@onx}%z?B)Lg%A5Urqt<$<^9+R*84G07I*ZJ z%_E$OKHzJs+o!(k*R3mb7_*@y#0u2|rpL~ORTKE@d<4^eVi zQ@gCkxwvr^S`1>a&PA!=l}kpM8;gEwF(aU!=lh=*=5FZaI+k`Ya-oP(VQHkBD3`I* z?UV5!^ki#EOt$qVA}vR~HfyiQNq+v*B$Zi6(w~nxTe#5_Gu7H)^|CFo{n?&md)^Ue z`$r6(e1=i=YeSh_Z1+{u$_qyGKc&KALet}!osnMkZHJ^SVn^Q7-9c8ZdM3ikLBif z!t`@|`Z>eIOy;K}EEM5k@mJTgKb+G01;pZ;!A+d~L`$KUm_$DD^yk=K{qdp_KrN%XY$i3n=x>Rr3D})D6niYX|x@XnRl|kxvFiA-6h! zCV+MXZ4257v@(C+%{PPuk_up2V&;*ewRT!(iAzSA1OVlXgEa*vAG-LaIvl zIw+OXI?Z6*0+M!z8|-|8;oz&XJIi3KLDD@g{7Ji9_>&kH{v@{6VCxL_dxQPSV9y)u zWrKZgurCdU994cG@01@NgJl|w*Y0FkW*cmU!LBgaI)nYzU=JCLhbm<}8V&ZW!QMC6 zM+W=SV22IH1C%l>{8)^1Z;-);8Z6sj;|<1RlhQ7aO-j3~4aPP?V*Heh_-S44$^XBjQ$`u~cDV1)xm|2;3_9fM^I@m5*{yCq z#drO$dp+p*>ob=pKEJtoZSB9lw_Ww!Z7r&TmPwK?)~4t*8AI?t{JoM zxv_U)iF}% ztsTDN-sxRFO*q`Yal7}tUq5qh-k$W`*LJ__l-BEqe75m|ejN@L-7~!P+%D&?+R<>h z&9{Huo;_`BmuCi#IWwVgTF*D%&g_1{z>lrpe^mX<^0RMQ`>%)pJ^G!xFDIVgSa$Gt zyZ^T6lTO`Nc6#{yvp3xL()4Fy@A>|N-%RgxWrr8up8MYa$KH7dMpdQ#|IADplY~hK zp-2l7rGyd))c~nO5dxt^EMTai2nJIqB04xk7)Dm?uDX_8T)VRBB3KhZ1B!~muBfb{ zYXL#U6%lOteV%jgoK$vwcis2>=XaAk-{(B{^nTBM&U5t+-tyOs@m!O1aPu7TDEvKWf2}t`Rv=%QBQMOvnU}0md<&1z)R?kj891abr zW9MQxdzg#Yx>^Wl6fYIE91&WqtjAdmM@}lQwR0mJIj6jq^Lsec4X1Y*-$auaT?$j@ zfy?nRl%)5ICEe#+rBOHM<#oa3kUbUztS>oj9$kHP{E_!F7i-Iw>&NcfaaLo0g)Mc97zGfmHA#tGU#)pJpXE)Kxfs(6PBY&hSx*SFP>Rg!C zj78ms{>YSo+EOQ7(T)6(uevUWIFfrQ$RBwHaXG%? zSL#OR?w|3>i-UUQF4JR|LxfsG9Zl;-{ z{As7{$ewzM&jp7bc(1WP?X?}*lQ|knu6B+5k!iNeahZO~m+^u>KiJqG=}}ycA4#s{ zrd%Bw`O^um%W+DwgzM59R+KgNCy6KcLwpLv5?7~2{&a@xa$LtRS)^XR=&9k2{W(+H zkv$?^q2%h^$e%87U5*Ow{tQ*(ZpJZ)ECcvS7qe~-yqy}33k9aj;#N;a*`*XIo z!^?p!=`Z`&NMybKM`G%7{DWV)I!)X5RAYZ+uHkYVt&^^!vGhb=! zPY-Qp9u_3_a&>RyPYPU@BlNQ6FN>qHNa5A($9ifzNz}tUD7jJ^`O^!oi%)FU<-Tzd zF>B~gZ*8ZNU&$4@dKu~oi$RM?(j{K2Ox$BQ)wZ2xhO^)1L>kT^n-gw0-`Jd3!;u#z zxf0+=?(rgLbK(t0UKiy`G#ptem8-Mi^tCy?3@6LxbTOPfn{$@oTwrrL8O|J=)7Ee< zvpHQ2M?N9Rm0~z+Y))&#k@KzO>TWoHv^nhzXS2=eU^qK%j)LPf4 zUfe>LQ}v!T?~>Ai{WYTxzb+PbLQg{|AE656DB-zf^DJeug@vL|%BJ-e)xw2(drYBa zm|fQ}(|*MEi{g^mb4pZb%5G`<37ITSKZP^dduxZKEQ3~E6|%LkP%Bdn8E4lw5`^^_ z*|b9aMo=h}bpVwn^{F|woO@k{sMgiy84Ksnz0@M>9c9Nxc5@Dk(AM!gLfJ=M6xMEj zk}&JOmguO20<9yKteucmvO-j7og|=_V+(7=>k9SfdW&2CtO4su?T36yqn>Uva-x9} zlFUNfu+TWaY&%d;&h!ePb7tdVKCyA@?puv3y zrKJrVkSeCyt8Z%Rz<~pkk_Pu3%&%P2-D6p|Ytc4s!92#I(A2r^I_I3J1*IH0GQNaxY&ve`c?~ zz0-R4n_8#RsB_d%>4cfhB=Gs+vH8+VTbMV0R!MPbaZy=Pw~5`8#xE|Lzi9sD^Dmv7 zltUe!zmPt{iqj&BJyu1=-$AT0GA3V;FKeKdaY9CRRxazEQF?P(N$LE{=MyBEC`aJ?nV5So=VtRQB?+IV31bM~-AKoKZHXaFOUakA>+XTbC5ipS`$9d$9yB z=3ZXNW(4T~C0yoGYEDVXrNx9Rfpo)05n9TvU_Ef^rb9<Lq z4zDm#@%2Kpvmg}ZA{{+hw6L>Gazu>fqY)bAI?g?vTUuP4Q8A>w`GF|cAqL;bMeyBq)X`Dr}j;ycFtN@K6?&i@6_IXhotuJ+dFk? z`K*$%sZYcVN!BGLd4U7{gZlWpMOQK@I1}(eDME<=LFYZ2REo+C^)OX zk=23-H8wtuW+naNg(@-e*i8>#_S~|Ey)QPO`Dn)vT2#s#{J-BnO6~2vc=k;7wchhE zRQ8aaHzjy(`(Soh@C<+D55bZc*Y<#SPcSVr zj+z?u9<9kcw)fzuz_cH+V{cmY*LX^kJ)2#@H})P}KR(KZ`lcTd==qV4-#MPmYVSeU z9_;(8TEfoR#g8luC@fCy6vs?o%5PqN<~8=O+(ake|Ufh*X2bkRKGv%8w;Q z4mPg5oWdzWsMJC+@J`P)Kah_pJJa)aETIUF`?u_n^#V`Di{vlo+XPo0N~x--DL*5) za=+_j`m3c&Qr=k?x&A5#dFnsxDF5cjbQfD;4y9L>=DJqyPuWTSV=F)9os^%o@YTAo zLAKRzu@+ppFMWGyzu?Z4{dWDR?^yzFTQ&$G_;bq2ll~u^O9rnW^V61xAA0Da?>>C< z^K9F_XLF?gh-+jmnEhn5%__R z>C^U zE!~yaWn!o*@u%+dVxBwoQ)_wa*#^(0>4s!a#GkDVp0}3aTZdqEpVOID_fsP!g65Jq ziCe*MnZQ^V+l{RWle}RtBN?tIS;!!ll`PU9v1P5$TES_@3xu_e<{E;RBOr50%tGGw zE4V{Kzmi1js+B|$VF;Poh_^FJYE?jlvPYiO-&6D!v%BH(N!qjdmuiUyNz6v=^F@wG z4g!2#U9BS|3!Wl9idq9_6gzzSP!e0z?;RpOBV{GG=4EavwXXBYHhuJ?W~|)?B<; zJCJB6YwzP73F;L3GAwzQo!XNNTyx3v>xuLksJ$BEh*DFr)!O-$iP`|2*DfOqvq8H% z=R)1+U93R+pPpn#;76O|C1b%!Bc=+}T^@lMGRbEzL6I-7U1JF^-A&6N>HZ zMKek-F)3WB{gJhJk-L&qJ8ZW->25mf@)H%?bF{tZbou>O*8%IbMB1*45eWBpiq-iN$nsD4I2SIZrE;lS}1I%LG3}`)6s$lkq_`QAsx}(UH@uq=ROE zna)A!z0iuSOG2I>e?NxYqxZ; zNjlHJbh@0e%1hr=;9SX0z*c%dv6^WSOBLF=wDf-3`7rHVB0Eh-_GuP|V^nVnawbK0 zIo+E`vWb*k{Z8*mr&MCu1OJkC_b5djtFrKYKEEP*U=3@JvJY_JBfkN|_y1C-^vjH_}<13j+OCu6XsUXPmXlSY*f zO7oZiO1Cr->vAr31bgluon|oC!_`B`;{)zMH`!@J^7%=-UjkvZFUi z(zt!nT=+ESlYxfO$@dCa4DJROgKvSCfqw;;f_&prEgZ`CF_-|xQ>3KW*Bbl=Y!5C2 zrKnlT_Q^nVIoJ(c0m>H0E5P9(dEk>~cojGX^zlC)Tm?=5SA*w)72tGm4Y&kc3oZv) z0`si~uLb4P^LlU{_#5zA@H+4Yki78S3Pus%dq8Bhe6qLWdiXNB+yK4@-Uy1s)J@=F zki7F91#bc6)7!0JGZ|Sv%puuOF+uPw-|f_ECKg`E5J8Fk*}hRd_Hh5xCYz@ZU8AW z-!0(V;2q#Q;CDvVU4cr304?Yim1ilD<0&WLC1*Hug0@>J$a4q=;egPf> zzXZPlzXp-J)AgVYcpP&F@LTXK@C29wQa605;P;qi;_@Rn82lL=2G)QRK!v^YKnHjs z=mZNvKDPVjf`|$DMAlO3T?r`u`oS)s3`EJ`1`xSJ9|r}}Mv>wZzv>(gfJ%+c@@OBv9PQ%-0c>4|SABK0r@FJ)gRv2!ZLg>oyq`g?-N=vcq z$?hnNS7>XLvst9ulc`{E#`d z!)<4Hoeb|B!y9gR?5nfgvXjnsd$HloG`vdYQl)@SZlj zXAN(!;k|8mpBdf}!~4$gelWbm@K8G1+7v423~#vMoojgG3~#>SEi%084ew^d+iG~v z8{RI%d(H6PF}%MS-YLWT$?#f7gyP)Jrr7alczq0SjNy$pyo(I4(C}6m-c^QotKr>Y zcn=%ig-x}U2!wZiL#krYHaUh1_4K}=7!y9FIvkh;a;ay>PKErzgs=2O{ zn{CRic0k2y-cFlhog^w07xseK^?ClK$j{H8og`DY8JEtQlT=n*oK!TUBx&Z1S(oqy zromJFbt%MMIKOO8$&7`4tPki(`dLUw^rx7O7rwY-W1mOAY%!tvE!W)KHu>tuCrx?l z!pP^pF7O@uIWTqP(afCXj+a)RJ>j08dydY#cGRWMS3cdW4^h@v=6_A-QNFs?zv_N( zrJ*xwPOonPQ(f^q8WDCn17h3RV!#p^fa{B+NFa>9bQM7;xx$PXiMW?5OeOJpBv%V= z<{)t7bw#cY+%glhICa0c%5#@PzRk+j^Nq;o>rv|}lrFJTU)-XZb~Va&RSPdbA~8^BeJpu)F_kB| zZ|Xn=DRmHf5MM+Kb21B4v&Uz8bMo`D#*ZACY1g@o0ilYTF@TzyF@UO?F+l2Srg1eg zb8PmQ(c?ys$#2S))Y4kJd6^?dj2N4rot;x_*RIwXeXV+(F~D*{#6?=6G$c0gucQY0 z_DdboKS{1yse$iOL^Q{`{#~ho-Bc}+8dxgD#U*8`r2#DQUU|*Y*K~d-N#WGFw7ojD zLLP0RxSnieFEg`ljTd{#+_R{tYoxMrNu6s-x*(Of-GQA~6SOtG*r}xp8b~XMl>S*Q zc^8ovRxbLdCjA>r8~PeM!_LyyA2R%k+M;BoS|-i4roCWW#l zna?UuwUBNqI9$E=kIojZ|9_(?mVNjbPa(iXq=kKE;yH@eDAn`D)NfbwMgPjjsqf zEY8kCC6izML2YL_hovfg#gXrI|Kf2ge=Y341bmXemiAvFi`()S$D-gEd~h%!vEmR( z__4Tb%T%kc%2G4bDpkeO*eZv^>5wfm5soNFj3ds`#*ySmb!0lGO9Vn;hr$enC1Hpn z`quol;jb-!XYkjKzxMof;4hQE=`tOQ%IA(#Eu%_Ri^xvUi@8%-N3B$Gk<`Q}f{IGQ zd=Du0ecYLt5AvKzd(`>d%ypV=PzjOg(95_7W8S0UBdO3)^SHZV-UQ-7)LQOQn2+I} z8WF|pFRGNoKLCpT)!ez558+y_9DGH*F%y>9ES5 z*+J9*p1)$3{~XNBqnkYhN`6&vdoh2Gdnx~E+`M`=yWKATm6(TNe%CJlMVNbGeg>5K zw4OT;^Y^%y@|QZ3K>D}aO<6#IVe9L%5MUdsO>Zt}U=Eq3{@ zz?_cxuXg!gf|+{VY%?hJDabtr^9kHbdZuuvs9i#oQJ1W1xh$hI=ID zFL5vV$*XV_?UoI0R{39rIRo?icKH`$?t}RSQ0mil+~YC-{4d&n75+>4Pv=g;{=J~$ z_Hk!o{*dQV{^xVI!F;`4{>v~A#{8yT{_`+*!~7>u%4;q6D9m5uUdsP;?SGeD{!-7xQ7VCO9CKMYEKRd9PTAHltp|1|CnnD4O5exz}^&Vg3R4QvRoF|J8Q+&%#a@?B5THeLr^&=Ff01<$n=(JIuG*<-Y=RI_9_S z^1lRg3g)N5Xzn2Q7|h?{Uea^A_Wy=m{&TU@75k5a65bl_k(j^2z2s-8{oieuf2jR` zV3&U}cKTrdMbN{29rt+5H7bq`TdfhNOW^BwyKqNbe0aEO8}0~849`*>!X24$;Vw3O zIGioRJEIE8k<=o*87hw)QLVyPsZ63C7w*LUD%`gf_if@?ImUfNV)zVkKRu4av~llh z8Qxdir?v=>756c%!mG4P}KI+GcQNameSY5@8J0ohimrfnAc~{Dv0l#89m1iVSU*}0!8$ZYe76L1>L_=lhcs6xZ4x9so4)wq=aabexz9(f zR+oV-!4i<#s7gUeR~bmJ$IMSYPtsRw%F>%4Jhyy+w|N1Za;x7O-tP?Wkl`IQJW6oY z(G3{y<+cv;3VPcI3tDRR@l%2;+XTG#q*VsWR|g8#2A;nHp^|E^*hi)OO%^;L5IP*z ze=^DAZ$=rW?cz|}@B{uzr~hQfC5JfK17T9n2G7%BuX6fNbu2k7>L1H`1`F;9mamp9D&l0^7KGx(T1>X)kY~?jk!c5m1y2!B z@MZrYRo2&k$WfNaPkHb9#d4%$eRH+<0ZH_cNC>HA!MwH4N{Xtz8~Ft`S%7K>BxoJM zyxaEvJ>Y#LxIHlK&VcvY^`mM6>z7IX{p=|3Fl;i3UedMj;w|FEMfEe%|Fg3^W>`K+ zUi!W$d%JVpwjSP1YrR{8-g`Vxrv_hNpXEsRK2Yj@*}H{IDSzh3SwZgu={rkWB1P@J zXPQ5Zrl+Cg+51e;yD|7mO5P@25PLrj?hWQ`+IuLN_lRp-;N~)- zw!S?BG)ucNt0?)DR|Afezm}g2<~^lLcJ$tlf_WP&-YkoF^Ye-~%fIJ%g68Y9Yr0gq zwgvYGyc>^%r@a@LwvoKuD#|U0D>av@U*s5DaG*Rf{cX?c5AYlnoWVRwsAU$_BIvy> zeUImwwvuCimdxqGsR(xl{=676z1-(n?UW~Zn<{n%r#<5FRt0wkDsXej$XU%!2;HI<#<(#d#w*4l`cG_)gr*3it zn+3g(q*PU%bW#)lS@audO=hEOgk-h@?xKN~^42 z_L%%TIg}yowTn!{(!_4&A#}Ae3P?3%w#OUwYf#ejMIgmytv^Jlzd=Q7-p5eV??tF{ zNr&ZP1RaY-U1+FTP|RNN4?>SB8^O>e3;xnwF~8N9j4GX=#4d9_mC@k22w#Njr&gbu z-r)IjJP*^;Xv-f_3RKsBSuMBX%~nUANsoWJ=Q66Tj-rETFsezMC60n8;vn>8MzyjT zGZ)IXxZ!&Bm?Hs~FRmTbUXme&ea<3uC*y5C@nzI?wl2{YzI3froe`NHhyRVWREu9G*OcYg z6MFo&a!#JFB|W{gU+08b@`+0QptEYIvy*y*MVp?))6y0wl?xrqVc)9B2-;fV)%tJ6 zUE*e4R`!+a?9(F35}b@YypeMCM}MM~eaEy}WOIk$ttGO2rsjFWiqyL%s9LYBph7j7 zEs%9eYH4wasLsxgzlWgC(%xk2l#y_9Pp(K;yc+48?%b$nKnZX*=oFuAN~G3nD=2Ad z)@7$k8`u)K(0K8zF4$hWI+p9lCB?;-2(i==pJqLXD#rmh35oD7no%}up3Yy1-CFHM zM;6d5N&E*$!6@ynQyp<{c3R6;Pis5CYF*1iW`~?e%oSB97PCtb-4E5&+1h$C=Ir=Q z_-@IgXF6qPfE8&}S!&x7pE7Mb+LS-?V_cJ6SF0CveNLc0Z`C}f<9?=}BD62vx)q5Q z2+TI;Z+QGHT}iByPh>tR!t}KvmM*V7SlWuiHI8UxAFVh$M7onpWMV^cWV@x6Vkx>q zI>kM7q@|sU5EUYFb*vkKb18=&`td;GDqVmjk88zu5Z!HiyvdH25iC{P>xcmGaJ{jY zPDrG;rHM$^yf1-p&U0(dz3=RdrgzJY-%>AG);a6h@iLDP1$Ige(VpEc&h_z-I?7^d ztslGX_^{hto98%MaNu>Qpy%tdXs6@%2wry5cKT>9FW31i8V-z?x9i7Y+WH2p^A^w5 zODnLn3wp*f-C;>pU#p+K=9+?R^`9My>V8+JI{7!Ryr{@{?9lPBP7{^<{89(hk)>hl zC~|3}ylZg{LWPo(kGRiix1#0J>iaBpr5lMIxnB&u~Z!^XL#Ebx@7u?o~QAL$q_LAo9sTUX&zfKe*WOy4qwHF+Dp7adOp>(M(%D-)>qz)(iKz$?%E1Y> zm7h<(IwZ+T`EJ2j>*}wTJDzmRama8YHGH$?-{y27xcjJjT)pp*vtZ>}{pKh6@f4wm zs53&@E;m~Jg^VE=M2vicuiQgCpC{V|#B1q6q{di%iufdrPd4D|Rw_RI#rQPa_*91{K8ZW2XyTKuc_Be~SsV#n zGWU?{V(uSx`N>Iv$|s{(CMYc{3*=VWU_MAb=u?B1fQvCN1+N4z2mRm*P}>4Vpj{aUk!eWnYo$|VQ|HIi7yevtq0y%1?CSy(S!97=m-A} zR)8Oa*Mgsbw}RxA?=J8&@E-6mxDosu{3G}!D6gPjfg&h=4CF*7IfBCXF8B@jK6o5F z2!033i|a}7AK)qQB=|ijb>Rn4I>aAAsWU%;Zm6`(I zAok@T;?ll#U`y~fHvcA&viAKJYz6)fYz_V%Yy+NnTT)^3h^MC95|Yi6dTP1NG`w8HD>OW*rY_Qw;AS!z(ttQp1y)E}=y$ zsq0p_QmZZA?+x!U!+XN;wi%u%C$`*5&9>Z1-L`n28=ef{7Ecy%EPJsw((qn1 zyzPd!*YMspyuTaXXNJdyK0D44HpNue@LCyOs^RrFJP{nX(kp`FRvuhpc*TY%BIK4m zzu}26xy2J7Vmw-`^fOVG`xQpUTkE@zj&K+s}6?O+3N8fcy}6}h@V^Ol_MrB|6Vt|w+!!d!~4?kel|R|Q`&Ab zp*rZgmTOaP^#YWvN=2(}Hsw}tLCGi)t^R6LZvA;oRIERGTJ)0xO_KN<(l~dBklQnbV4fCJ-cJDK{y|+H&V_%P+Jum#I@`LH? zMqHB|xp(4CSufww`qjIi-Fj2vj0avM2z~wcgxEz0*jh>mh4qVs*z1V?(zKZ!i14pm zH(tp_u6FE{Di7h)? z*&eJ^VqtOW3LTR~VwlXY#NokbZ$2RFVD-i9X&TrOAMJ$DQHi^{{!p>7BeQ5(`8;vg zk4%Oe`a`wBj))rH2PK!KO;;%9wDy%`=f;D!IZ}l~NMC#Qe+3%xb@1RM zxkU0lOY7@<;bCish2(crlJ`TUZq&V+(AW1I{mv!W>uR?=sj``;(bqS=e(SXC)oFeb z)Y;sRH?oI*y#|uqk?`*VeQ+WK)v&**s3T(6STy zZAy~=T3Sf~_CCDGvL)SVQ~q6vy;)PSH_fugoTth7t>r-tcGk?W>~%hkf3x7fIn%Ne z`fVzHn+Uf*mOq|t**abPd^|3i!^;`BTu$z${F9x%-(%;AdDB{3t9=9cuyCtGrc;96Hb)!E2 z6+1t#*4Fe?rK$G8xTTV=vFwC?n@aB^1oR{J9$0JHI$e2e<8iA1ix%8+5sfC}cP9@{ zVCRPQ+L{(jXexd~czn-qEIXm!rs5~{^d0Pt-eB1}UHN8V?^W!?++f)|UHs%#tOs`P zy4kYV7HBGdusz;P$LnSN*4Ih}vAc)aE=%TDOGDgUIu`W$<|zt^%QleDJd z_XYg5zh^P!50<^tmB&;b+=!j8{%F}V<@j^&3x9z<83)$=0((+V?{3OogPnsi zE^KaKPu>-nK>j;B2iFnoucB{Q6z|HU_dnY>sHcIq(X{`EI|D=NiTh`a@@C~~*P^X> zK*or%StG4|g<>9Jm$`$by?9W@cx#iPJR6+hJ)d2N#_bTylP6~JWzVvFPKKyz z=6i}|OwY&}pO@zyH`!PinlUP8Vh$azWnoxG?&zG!qjSyk;hJHLwkG9}^-Qf;Id{Bq zpOrCb^7x6~+QeiNV*Uk%#)BMfHu25Pn4Fb8wl;#^3{s=FQO4Ub8i9jcuV#f3HBu}U zvL0c@d6XDU3`UEIOfVsyOA01UHd!!68^wZ@mgM2sjJ&MLIirk!c^P9z*FGJWku%Dh zGsgHoUi=?9d6e-#KO=YixQ5E5Lvfp!k>|}bRwrdlx?r4~wAXN(=l`uH>PCAro7_kF z-`KGEAMMSozrnS^PR)AzU60dWOy_2HfUwSIZ+auT?tbZ;J4d$adBLhD2K;(@sZZd4 zH*UF3#aVa}@V!mXh5o^&WyZ+2DD_qZKmXA#Pu+?A|4p9%E1NtmRnxzQ8teK#neCRp z#_rL7;Wc4d>bU#cZZ8ulyR@~r+1DezyOq&%xvYbqJ)a;V_B?a`B8 zvCFf1A*Lbmo{HJR%?d-We)#T6wh)}`sM5IR%eUpoWRPXY~W}%Fr46NLrRufpcCy0${ z#{vZ>1LcPT({{2C#j|EVbB!Xcp}i)#g8U<5L}EupWqFJp$l-gj;{Q3Wv{%J@p4GSV z-iNOB;Ol!2`d^M3gHNKk|JX?Jb>&g4mAr%g@}PIe1J1GwR(;X;k=0q< zWU*y|{yU_@$~(Tm8OUnC-urQWQMLEuPQjYX+J~N`z2)E025-|&NOZH>6P*Dh^Kc8I z6U<6xLr7$GW-4-9HAMLVhiCOcy!32-CAh8X!>F{kst!fDsKz zITc~$(ej8uRyU4I@SpT7y&&DYd+Fq0-VU<~;kcE)KvtXTELj6lq4fB7#86*INFY0v zxKw=}_1#A0ib^O;yt~Pdc+ci-fe}%}FIc`iusA08awvkoI74IbDB2jIxpg6LM(}@H__wNiLflVDmpYWc_@+9eM9Agx{(%1HSTNYuVnZI zIQ`fClg_@5o~N_gr|)U1XNqH>PpeaLts-kh{#Je8%>R)iklzy)gM+-x*B@>gbi%}0 z2GqkZG?Pv=sWe$4`4kfb>T)#2k!U^`QuOx_0Ugk|F0TG1Bk2s_3xTMHlMp z)85h@9zhK!DF5;}3i3z3iu{s@1-&u;li{A#or#kFWQ1pR8zGiQsj`m2*Zm(xaypI- zZq~3t2;(F%UsK2ZKfA2{<1<1!ZDL$jkGAd2&!t;u?8%A>Zu1{>`PoUiRCZEk$j_M! zMOB|W{a?E5aOw}5R}-A|mv(v>6cxPM0&2e4paq~yW(q~uH@riZ~= zj}H&3>s3~*SDoPN^rn2h_jAj8GkQeSCa}o~NfHy1ZJwuJ`EE}juaXfWoilHaH&v@d zS}N$R)WdLAu771rgq_^1uxz5@S$!vhDWo6=gY+`qO8SX&htSn+=fEP*2ybP2m1hL| zVJl^>SB&KeQ)<8`txw%yr zyW!1gi?2Dw=RF>LrRwu=|A(D|-><52P~-idb%HT6Flu&S**yQ3%>yedgWG~Dk296= zSIWf3N>*Uxbo$~|r#j-qvnE0uuB>E2_@lJuyyMkbd<)l+^6K<1OwXELI#;SyN}cu` z;OppVqbIdXq9JbU)7(_^VM1BlT~W{gv9|4rpn6qSDhbl5@NXQHqM8bFmXYG zzp^ZUL7h2R8}gm=uPC}cjb~U-<11WAe*HRrmkutJBO}O>YVSUQVAecW*6bl!3q7(? zTX6`MJrQJsFfpJqba^GXEI+VvM=!)P| z_WuwEH;}i3zyf)@OM6oeav;{Ol&@(9q|vGe!O;uZ?>e3`unK_D`LK`LP~=~ED6V|5 zc(-{M+pK;Zqj7lm5TZ)P970XMQYaf1I>I1bfo}^3m2M!9)@U^^P#Ma2`|55qyipw?6uPM^dtjjwO_my8cBr?cY`Y%IK=k zBgMZ{_?J>u&HR^(%yb=-8O`X0WHLj79Ev7yS;5SCu935)kfqmInjM_BFIceKnr~9S zivrYYvV?QAs3C#n3;jnN<)2Y%B*Lm$I342M;ko(`a-LLH*par4D=iy>sI>cr$th4C zz0`&*}2Yd051fdP6Qrq75{j>J2oi2Ta8RP252=Reqo{B$82Jd{4m?-I3_INhG_rNr91ie>cfu4^frKG=_i+rNjaImJatJM|5kluVwtD5dLEuC-S&k3=unB_Xw8)G zQ>tBAgO5aVs3z1lSwqRnO+QJ?9r1RcUa8_3FC7nZQrneG3|QU0xr^93@a9I`yuQ}HExIEk_Jj)y;j_OCq1!0%@M@+6!WBc?{ORBIjgoow7ly;)6J{`zLB&&Oa9ep#{hlRVtGt9cG|t%<#Tt-)U@;E05%lg$&uZV)RR4`1 zP(NUn+sK6RQo6G6$(){vzT^SXv{yICjZ}O7fgIW|%8yDSoS!}+sccMbWgr+Cq7P3b za9zg_1Q>zx4hBZ)$(RgMB1@(U8Ky2~w9?&H)uNN~enek=^0I$LOLboUg!<(k$Z0Rj zgCkRelfqVgFK>rsF{{3p7p}4}StWcyzQ_m1M1A*8wKvK~a@*}ntMq@Ex$1j)S@Pt1 zqg=1Ms$4ml{*^mbU}Vqo2wmU!jR`An$yu9Q$?lrMipq;UxmEUAntKW_)>P33{QEz< z_7d_+?g*7Z5-)*jsV*>->`9dVJVJG+QY_F<=RnDrAE9J7>^+*2`P_q=>O#kD`SO6F zL>r66+hV8-8Sq!&q9sKgdfJtFh-GiTp)Td+>JjbpV^G%9kx`+z{0Q~9etI^u$R*mp z9Z*kbUN_!jtT3{pt#3LJYQCW!g(}xBs-d=M7YCvKtf?zl;&@h5vI6~rrj9^aE=1v5 zmF8tYSv*-)+M#)yp^$whZ9cx2RBPUBmX}}AR43NsU(-}hVkkxDLRq={IMg2fv?sE1 zQaTapFw}CWmMR@Nwo5dX4Q0950d=Lew-f3rP3?yAX=)GDDoyQ!x>{5Fq5PUU0JU0E z2car7^)b{nnmPovMpH+j)@te)R6tY5q1I{YBvepSKSEurDa9v^^_mKU`i-VUo#l0! zih+`9AEDx)uGdscC|SpiP;H=Y)Kq(@n>3XKb+e|Dp>EMsH>g`R)f4JAO{GFf{}`eA zL*1^a!BBT-YADq2G(|;hbhNCzZD+!#Qt3-}ug5@%T{rhrq%IQ-J%5&(TlZ+$CmKAL z9foy}mfh6g`7EAWAy{7_Pf=TXHPAXFagsO)zRiNGb%nGJ@gcC@sj@R|jUYRSIXTxd zfpYnia#06IaG=(juxG-H9it-uj8@oVjs!M`_jCuGJ7e0Z6EUOIN(16v$S;{-!_NGmtn!7iWZia z&ckeJI+?4pejt1EtT?36)|GlDHbI>oF*f4Uh~crdYI8!RB)*776v@TfBV_AnmT^-o zAsrl|JY&2z_axBlcsYMo8afTDb*;`9eX^v)fdW(8b*X$6-d-Jd^mO`MkA-(p6L}_| z-R>2a>h9L%VbQ9Bdt!KV<%(#o4n}*_3GQ2B&r-)d6`U;*qrzI;#9j|c z-RE*~GH-_Z7IcNht4?7bg?Gday`7SGIy#2tGx>a7fjX@OM>Eul6As$Hso5sg(tI!=vK55I&2CL8=O25*p^tiL=_MTD`W1BVasWkw}sg?54 z8wqHR$=v76CUf|(T_fEo8x&iQ3mdKSBA!$qqh|HoW&_oG&9YQvbXzqgdX6)u`5)AH z&m715adGOB_#ib&q4TTE;p_eAs-4FMNO4H22vwi_ihCi|r#` zB>@HE5C!Q;6j?|Q)^-LJQWg=d$|5Qv3T&k-3~)NvMx$)a(judqowh6I=}PH^s!Sy2 zY^|;2eDO*h(uKWS=h(cNUBpilo6~}zjac9ol{gtS67bWouVFf^-v$VhO3@oIgb0om#gz5a@3O%XOo_} zYGUL-bzS5{bt1B}I+G4$4(fPUqS|;9xD(Z^FnByzW%B(jBj!a$liFN3T*} zM0Zt#V|p`Hi&Xc=3{~I6WU3rGfQ7O992a>C)f=87wTSYph)Ym^i|e6U$9GqG@zLtC z_^Il%_>0xb7SZa4776O(7ClvmglLtU5b2oJa;rKs(bCT&IXRAXed+K|=rlX@&@6SS zKRak{rwn2px2d-rZP1!@fw~^mOW!!1s=X^(^>AIN9s|GQkk|O|BsC&@u-XQG2bM&% zQJW&%s&izNDn!-omdHf)B`VRopzb#tmFZWY&UQWc$Ed5+qs^k!{${yqtUF50p}t6c zy*IiG+60r;u$bm*VoZPaOiY||$HuAtu^!dh(@tIQ;jGuV!D@0`lq!z%s(o>1koH*B zC%&!P7=MOp-(s*TY~fZ{w8&7OwTM+UE!wLy8GXN@!|9jUPOVRjQeP$xQ@vVM>l!5O zDnXZh1Z~hd!d50kOeb2eiN0EOjv1?Ni+Ns;MWXcv$^Fo|(b5gvp!>%zoQ3<7ZW_Dm zG^a$z2Gz+qfkSI2s(xX=S06FQYYnJO`6u6iP7w2EVBy(M<2IuyHHl{Fu(UTVHV zUF?~p-ts)8*2X2OgVfG5;>W47_(aFeEfOh}$!cW6gY<~)RL_>(R8h;P)me#h5V_T! z-`9E2lgUR{4yTYb*VfE)*sEBohH&obneC;l<6n;Oc{SP?%& zy%m3}y0XPEwW~#n@+8ElixLPUAy<8xaE9vEvW2>|?x8Y#rdt;3+da^+M!XC`Q`I>AtNTVXCuZg?h+w)N!}# zTgUC;t(?;HNu5g(t17Y0KKA*wLFZ0C?nTtEzdPK@Ne^G*?0|YEMl5>2Rg8@Hfu1mz z8Wh%5T@SWp#3&HOWDzd)C+-%J9n>0>W#7F2 zIriC|#|uo7dL%kR9gTiS-A&K;RLlsK61znmiEXcTG;gNbpzG&4&l&2lXRu=_d3RrY zKlMR8Lvf2VM|MKIDo^OAo=6B+e{R`BwP$M4CDEncO6;Iow~A3kt59A{?z;- z$Go`KYE|4BjtAm5I?hkHSocOU1^PkP|0rFy$0^(15`=2erdE}i9GGs6e!Q#mN+mA@ zGLp(n=mqWiQ8kRQ?2oh|u_vi%rR`bs4$;MCg(A0?|&ZR!} z(;ZP}WOuZLUaLBzgQ&eKMz!XPj^WO>VV%?^VTlxejv5o*S6vl;v+5nuNv$C3?qw+K zPUDj3$zZ)iceNcU`W7yZN=3JKXo{c@D3{nu9ehNmB1=1yqO!*Ela6kT!rN3dt==lf z*LC;Xm+|;3$9eE1r8Buv8`ydfs@Rq}I;rZgIF;&7Q?Iy_)hp5M8C6o$Ut>C|KgFJ* z-jD63E^FRN4fc3cO5EM*wYWl+86W9-s%3Na9qp_Sbw0En3 zUTmGhm27!kPkr9!)vGMR7jeEWT*;m}dYU9kAgydEs^dpCugGA>cZSNKxoh1DlqfcMA3Xe*lgXzU9qtwpUCb&hKABRdq>$v*Re6pzl z@GqV<>XZ1@dTv;5MGM7zGOLzq_K`zaWz4@LP%JrC`P2u_*)FTrN-Y#ziDy1^Mz&?$NUu5o;j4nK(15Ntr(Xpx>-b+ zt9?XROmc)%jbmnYVZ0Q2SDwnvfNSUwuOW&ZQ57$Wbwl^JwmW(Da~)dL2WCp}_NCjM zMPDuI1LtW)gA%t`t!^-6kDXQKIC_+D4CvptAt!Bc15W=TjX8rF*%{b~)2|_Ca3fcP z2Q;)ZsDC3)!x;7-*vQVnMs^0IHuR@|qg3>5%xRR0)U<~Fq&7-dYQwP7hBS1QHn?G& z(*`w6d)mN;@kwixuC%m96?>p zj3sk$X6c^nN!2PXD_KPLMC)aRGOC!hP$5?26-s(z{Z1teneobiVNZ)=;h7MEw$!6&Nv#6ET;7-+;G($3f}SPJwTO zXg>6P2>u8j0)GO(0MRSw>xBOfC&$c#yubMRf@qoZ4FBW3OuqXHo*b96f>0l~IoP7O2G)4O4i1JKuA(#c0g4y5_FbAvvbHP7@UQqPMjR3cUqrvaM zbHND4k1=2jI2LRTjswpI$AdW_dEoPc6Tr#fWN;c-00uzx`1x)G&j)V-F97cY$ur+e zAlm(WqS(oydM2oXC2Ydz`2vYZbnP3$-4crFK244b^ciyr{EXhVNj0G`5Y8&YhvzXo0Gw}G4}x91x44_dteUu0XPB_`x8NN zKgBjLu+7EbQTSJaUw{vRUxFex`xUqk{04j*q%Hg22Ty|EfjyFo_ho?1z;bLnC*9XJpSXW$qD%0gv2=mpUT>&pj+fj5B};Ge)O z@Lez)`~b`aKLvTc^R;7F6v?IX*;COHXm=B%@P5_I*iQw(vB=Byq0K6YO4}1cg z0zL(zrPKF0cp>-|h(Z$Ici=RT)eBV!W`advAt>p%3`_~5e*$H^xz^@i2VTPS+rdl0 zjbJhO42b4WUnO`s_!_tZ{0dwNqV!u`2|9VFV9@oo0j~zzfvdqB@ER~5Tmw!51K@mc zJ$Mzk0lWsh5fqX2o50(_o55$mTfle0TfuKYv@`gA0)GoSnP=Pqvc9K&2Mz-70yDw8 z!6o3m;5Fdy!L{H<@M-XmU?q4z*pkV`Ltszv5pWRrD3}F4295?F2hRha1gC*dfra2^ za2B`)Tm)_f%fM$qQ4a7NDErHv2W9bH^8F9sD$3z8unNA+eYSxwfG>eBfiHu{!D{d) za3>hU3*0WS4Y(WZ488_-1K$M4fp38Y;9l@I;9tO7z`ugGf&0N~@Lg~Z_#T+d3*h_U z5K!z71rLI<<>y0iGWZdAKKOU=BJgAIV(=4i5%?Kc3?2ekgNMN&coe(=`~utoqWRVL z8u%6X0eB2N0)7wv1N;g63H%v!@={m>Hj|e_@+%s2fN`J`Yzw-;E+BISUpKH7*avI_ z4gt|6>q`gQf!Sbta1@AUS>I%^6F3!20%w9THfXmX+k@dpQh9YJIOe7(Uz;4E+mI3GmA zv+qHW6JLBUf;r$Wa3r_~JQq9!jsZLHRyh_t8_WZTf-lgIPXb>Ar-D-N=70ww5)DHscufvi%A zCV5{1xCCqkE(P0y%fRm7a!@`jt^ltCuLK_l#lJ1K`8nH6x2pG@@@c@PqB*$0;<@!{ z4~3Yb)klVx&5YXO$y{A1w<@WvTlk>M>cJZ3d^7?i&q7iK0l?=8b)wqWy) z8J=SHZN(+brra`m+dMvSYsxJnsm)6>yjg}f*YNy?x5n`3?QOU8>$ZOn8yY_3k*+WhpaGUMs2yh+VHj--t&gH%kW+^yuTUVhlck&GhNHSDw}evHx2JEhW9ly zPRpLmL9MvNGt0Ahi8kd{!wfIW@H#U~v+SK^Q*PxoywQdy5>1x9MTYmh;mKUk3ima` zd(-fa7~WTg_k-cp7#`nS>@W~9u>I>|cwG%I&F}^p-bBMY&+u+Hyt@pq%J5z?yf+Q+ zFNSy6@V+p-pA65z9MMW|flWoL3k+|*;Vm+}<%YM?@E$b0M-6YM;q5lO{f2kI@QxYY zal>OB*v>!sh;GF%&hS`Cw|U(RuczS+HoT#RH^uNSGQ48LD>b~U49{(0#7s%yP$%B{YD5(&a+^|ej8)k&xgn)jnkxfNP;we%M!(AX4OxS>QI z3oYC>bGZWS%dSTYr=aYTh1rLNR}VTBCU%*_2xygIc9|@=hR>Tk%y% z`7|%wrqI+6b(Q9|vMIOf0wuE2(W(6p*E-TRTnM!OkN^<@4Q*#@B`4+e2gg&N`7Xs~@lS)#FpbvD>#TQ=s^dD8Z<3gyHs2R+t#@Ay_J+3_Ob07KiKy^1Z8L*_ zx{TX8k5?$`JYJ#Py3ScVsfQL%`WcINx8ZF!ylTVSYj|%PUM{6*xgBLwx;~x9>AW$r zL1PZw;P@ojhI=8T|Egp}`SXRjw7r~0>xCRL+*2`3SR+g|^Q`G9wpT`B`%I`w^Y*l3 z`PEUgv|G)a!Tllv|6bWBi>W3ZB036QwXEGhT{&2GIgIOO@AX;WKzP1eaAZ==9+7YN z#-LH9Rd8hTB=HSa)J26_hW_Gd+dXlS><7^Po;S%8uRL)h<2>=1abOad^o{4rk*P(V zzhP;I z$bl=kTdGg_U7@Lq3EZMWEp;{g&?V~1pIY`VYw%pY zc!YeL4Ar5*^OjC|u8T_R9a5P4Hs}c?P7(+Cs$xDusoI_Zsm$6=fNr5y(4k5^=af#wbqaE#-6vPRM&f*9pG7bE%p7LtTm zI{(ty#Y>5k)%#7<7TT#ex={I0FLCnez`kwVi-psRCDDs@Zn77vO^*5}y_nASc>C+0 zbjPJu=5cB$pTDgu8Mc@$$pSi9+x&?Ayc_1w8E?8t+5AwQ6qUaRY+fq8oYVEIl27&sr~3(fyy?@Pd=D$;hV)7j`w=mY{HpoAR^`r!N_j&H~S91ET z^VL^%>eQ+AtE#U&OMw|c4=@vWDKHCoI}qb8&)vXW;G@7iAY}{Z0G|aG0-1Zp06zzg z1v2*(0dYQ<7!TwuVKETrabX=Zq#3}8z$w5CE&}*_>ow5uo+Bb&wy=6nM385*!4$FoSyP*v>v@wRp_^R-x8Cr>! zyVTI`F|_*)jq(u1_ky9lV`v{3+F?V(jI8zCc_{75ZeaXl zOx%7vrP~B~3wuL;MC+LY0|E*8Ir2*X|0C4zWW-s z!?*^7ReB7Q{!4LD8JIG<(#u=eq~oLO3k=C&&ckvu9s_#fdag-lCKA;^(g`~=`rQ!r zNvZ*>3zn9cE@Oe(%PQlALHDw=!z?_@A`)~OLMkBGP|$cG3gmNF0|x*v2j&AY&FdKt zTmzf}yaISGa4m2e@KPYtjrS~Evv6VUre$-=CXqCU+>St-Q?N3i%^{w)Y)lXCFV+@dlT z(1a5f&_J|*wScy<+UaDxQBZ=A%((JJgI-fN$sWecG9C-#fo{uwHA9_a@+6;H|)gz}tXzz;(byKnQ0&Ob+^I{@^|H)@)ocQm8?jQx0`$ zbBJx0D-=~)HU|$Yl|G!}V?&EWPE>vqESm$H!8EO#p|PK?_$C-ysiAQ=qn_(Cw6%uz zS3|qS&{89Gcq1)a(11H#Rt`gD<1^A>QExZw0C#!L4 ze&{`xJTN+YuvGIau~f5E@*Ts6-thijoLYkXO85H z$kzxO#?O*ZS3mk21h;Klkeivt4L}a#G1=f50^AN{jr31o7VtG-4sZuB4@f?K7vA&P z?Ch%HJ#A`uPn#OvD;kIQiguG_a|#ac6>YPjy=-W28rs{2_KTrKAkQejEiD^1G8)>| zhIXByp$(ki&r6Vk+dMVUGrxA)IK#(0r*D4>aHN4KQ zbk`XVWKbqhHDQr?Vp~KCdlo8c>(Fnp_AsbU4il`0h{D4Efe_`Yp1FEihNFZB=8f>8 zpCO9hi}Cn4IvS{ED@qrX)KxC4F!2cZQ1M7YSWS1mvLuZ}l2NSL0&xhhM72bshAe0p zoZuN2B<|$d2X@cjqGRm?oZXyx&YsRL&TQuxXZL6amb;I0_Hp)rTReIviFSRmJthAq zNJ6#i;!pBnPm2c-C4MrdHTs#gr8Oqql*Fb8%@MYVqKl~n95%tq2%~V&hJltX`z@bI z+QmpU%%~u^;7v{R$3|j<ls+?X@%!REvw?db#)wAL|X!ux~6^-?e;#2Yx$Ux@H5mC7u5zSO1qNx}W zP4rKQTziS7p?`7S%AayFFlJ5gOC^B*3As=|W#2qw%gUdq8w`^>f1=Vi<(gt#)jibF zE9UhOKb&Chk^&PNojbxa;c>Wy&sfk86LBf7SkrycnXss|_WbZJ3I{D@%!YMHQ><$plNVd10ZGsezYc%K0N?xYu8Pf&|WaK&4z~NNQUeby9|weCiM&sP}DOlf!NCYezvNH)KQcCCjG2!AK{@Tp7BU^eKlNWc8^OU}2 znY;J;UmMjmF9GTvvquiz7&5KLOc5@fHi$`(I=X)sM~(FQ)(QQ8~=Es;e-JT2NUhDI5L@=M8s3a_o9jWD#c3~ijDaduSsU1Vs>42{!W zD!es@)-giUk}aE(+)a+)f z2SJ@8>aA!hmd_rbH4aPRhcC-g*gbe-LzeQH#oU8XlQ1fR?#gz;!@F*ZsOqw;OnJAG zN;dJzLArQPDwgE2)HJNhXu@07A8#AGjPvoZrNQ|9qeqI0?84I1RWOn2ZFw6v!%|0+(vJX;UpXZ4SA%PSGy2_#AR= zqN3eoXd5h>Q&t+vF9wh@WT(^*sA%o*ROOeWVMXg@XnhQAqoKWMXlUVadK6alaM==T zRqw?t-5j&}$9H3y#(N5XNk^*B%w9L`3!NvrGSrixFjZla7&2`DjxIMtUE z=c`jvLC6H5EE6kzELF-gw%mfJ@FfEyDSQHBSb@;U$N*W~_!(Iacs+!RM!T;>EvFUv zMS*^gbPc#~gS%Gb$8hcnbML`CVf976hV2tPFI#Z0?iyfzCo8 zz(7Ys_ff*cR#TyiQPgA+)pD0#Zn3L;Fhv`z;N)OnBn zuj?%OF0oNGF0oN@;Xp_Aa2oLD|NnPN*dL=|jYt#TDfybTFnJUG zu(IPk85>h<a%w6%{q%6&VY5Yw$)({x{8lL_hkscTApYS_yD`|C>4kzgF;rIs!|q zHzVkDVhO6U=;bI;Ob7IwWk;YA$PU1K;B4UeK+wqVsR1qkvc%%@Tmf7L+zq@C_%9&C zVVd%u&tYdtbsT6@9S7Q!{7KPR;uQ_`g0!i5PDR^dXw1!uHUwot`AxNKYRNJdkxk{2 zWY)7>N#rSvhABxB4tp9~C2$W9`6kn4oN7qU)>s<7CIt4_gW(F5I=TuiF! zfOMkjGS6D1=?osDa4jw>=H*A^+TSknUM}GYtfAodrZA9I4Er3H%6m?Cg-(evTI@^p zlN5JHqOYeV-PVkJBhtyGNYrn2x|ATcf_^KOeH)Vw7j;veq`UEJQbpa} z;FoA_c@mx!wmeDBW^I)5RX;jEx54cb7X2=)nBYghAIOZsd*(0Rv+waBka_hHUiI?*KjrycbBm2Z1jD9|vv(K55aP z0X~HL4c0xgLMblQC!tOCNoaFWz9Lb~kIc=KevTP2)x{R()Ips^6LyR@FV$0?b zOAU>~?NZ72XG8m|p*?G88w_o)p|OWiD*b+CXh#e!AwtK6WnS_1GPFL1hVAKAoc9`< znF;76#jIVVn6;yt321|vfW#mH$l^%35DL!~%`b$aK#N9~`|!s7-*6i)@=ZlUUix9i z9*&DMz{;2^$c=GI&b*4UUyCt`GhcD}S7b#@s#4KQR-B=Uq6G=R6)xc^&JLaw6&CyKtm$Vy5?}*xC+ru3nQf())Sr z<+<_4vo;-$g%jv?pTm8^+PvcpIaPR&SbJfWUelW&i6;J_os`C5YMpOyNwY=U@?*Uj zk?uGQ_1QI0XJzEzpx@)(qd0}SA%}@C4n}&*;*R-O#A15YzbI)xX^#MUaxUw(>7pQ3KJ_^WMDA=7U z0Q8Il`38o$b1qp+7|LMVge%y8ntYIaTe)&^H~fcByfID;o8vCKDaxk6E?rpGTt}RY zr@#lBUEOtP!CTSKHXa%H9bD12o~FUpZ>$?^79%Rs?;`zJiuBvzriBc&1A^6#S`F(d zaAk$fX@&3_K=&7V(HW}Jhanj@<6_Og!9Qy*mNkZ|l$=smIak4O^~%+B#KP`jsJX~d zFYl|MFjEO3pfN^LIzbtyQj*yU_iWgp%LuhjK&Z(Y&q;v-#}ZvaTKWhi880nZ2&71$ zkBIPot)*{?$qdGsZ^3skl@;F77=BZl({LS;HYkxno5}Bd6j%uS35W_yoQ?@X<{hYC z@L{LYo+1HN+z5aI8p>dm;;$u%i z@o|N-qW#Ix9x$|r4eg(X_PU{cXlRrNs_?k#MTN&zFN$W`{jkMgv zE0^Nx%7x9&L6DpI^}n0i?=PzWb_Pbtu>R<&eLUnFT<6G#sUMwgtn$WM^j^rUOqUd3 ze_&r=Hn1Ns*SgQQ?iq3NF%9X?Oui78>N(J+dJeRyp}nGUXs>7-+AG>^hPK7fIJ8%M z6ecJ>_Usfb7hhG;Mp?F?1^8HckIdFzX13lcvvomcJ3Y9Qnb=?^x@2p7(m5`^GY!*< zCOnVjG?T~ZhiS=lqaFlhbRL_$5XO{jd@bhm?ssD&4{A?)6gg^ zRy2046d(JripGXP(N-B6g}{ntD#aX`PtTP3bhyf=1CUSq1n1LEIA;xqC#cC@hj(iv zR+O_w^p?gQ`<0q;5@JhpqFl=f^`T)xQ2Jr6JsVd{lUzHcw5qZkL!}dSz4)Eb*V0>74w?Pv}JO@b+Rmb@_aeOy5RJ9lIA1?Exq-8*uz=3gM*rmAGzgA{t9R@CS6{WRh^JE!P zI}zoXTY6o)DnneHbk<4B5k~|{!pZ)&uCY7H=bU1E>awp(AYW0BC2T^ECE9_?9E)A< zm|Bf7zIB3V-wEK*zEQ(gyRkS|t#))t-^Gw^L?Z+xdTb3^mZV3kmz8#T(gRXRijR9BRd}cXjCUA?QmSF;LR{8D9$ zWQZwQn{DGP$%;O!8|yoOosvnh`!nB)J`MRpU=QruE+3bt0K{Fr{sRd6h2%hckvk%@Y8CNAXzcNd0~vIRS~QiH>oIYb5{ z{o7Uy@sI11Hf{(vrO8NOH+K4_x+r@Cn5L-(p9>Iy3vne$onFfJsG&7iQGLNE!|1Hd zii!dj^78r&7maoguBgcOv2+c%2Uk?H;C5MWzudmzA%|B^ljiT-0VD(?3R97^CykX`mdj zsK0!9M+17m=!)OrC&05R<#dm-r2ddA^C9yl3@4WV)i5X26ixwvl) zya3n+xEKhbhi5gA;am=cEZ4IZcq;H3V0+*lKnQLKord<5p|R|#XS`!*9~fE=s!$b|0?X#$xds+( zmZ4QHEUT`qttfLRbDMHSZL;c&)-ODNVfEsL$z|0GYHBO$xM4AQL4|u>b-Acqh{eT~ z<;kijC(9j&n%xQm%e3a!C3DfG4z#u`c|m2}f>Jm7DLR1JRn=wZC%c!{R2Wj7ySlcb zJXyJ*(SZaQckna~G@`anXK z2VPVAI02O}Jg2lad3I^p`G|r3K&U@Ut`gfT-F0uW4VPW^LuFQY)`_K^5)75E?W8W6>+C_JG6T5 zm;SWP>l!!TKJvyW*Q*oW8h*zU2Yc6LzF@oh#^+ZJSikGrgocG>?uF;Hy}xgUt8~Xh z|GH%I^)J;Fez1GSwQc`>eCCLn%uCMtWZ&uEXN>Imp>N(juk8CKx9{4>J3oy*{%Gp= zw~Svl=E}c}?J;BD><)8xZ2x8NrL{c@?npa$@XG^HA8k0~zVOyl|Gjxg&dwVjSaD9z z%r9+!&B*@K)g3?dKk@OZ^3sy;@Bd3}apx<>EGo|3SaH?;v!+e?G-+1(#EBU2RfBaj^oflu5`M|$gpC7kV^!xGLbFV0SX!nNmuS+cKds@rKs`viw z`HS)&8U5v@{eS5B>`TeJ&&@3r7cKsI|4+|6w&j{TuD>^V{m=hOkN8lE`! z<34v@={$PH?Vt30f8zafd)=L}x#CUx=AS=4wDgyEox59KaO%a2=Z;(2vZ%WI`n2^A zyt49&Q462n_*9Gj%X>^%_e-DAMbiroW#%lkz0_h@)u*ZX)pxxp*qTB zvF%q`{`bmA439Vf&zyrS-*3PGNM=2X(yyGQ9w+s{pw>XO&dNO0^eeBJT|c+mL{d>> zfaf{10D%^nbc<&a?RH+aS+s_jeznZIibUUbTMx_qmrnOkSZ)~|vg8r{+!agQ-4-mQ zV-zmCjfebVMW!`)r;VtLbW*f`m3 zj|9bsTd+gJVNC5d4}STbmXEWoXc|sS$+I2|ZD6B`ZxRlNU3MGOnC9*>TQlj*ZiU^( z8GStr#i3E41*bDz?6w;4&?V<8a^qj;7MY{iiNJf|W2eAIlh`C24*BdjGgkS|Ui9LG zrr{(>o|_RoQ+vV)A`gU;dGEZkK>oATNAyg zsA)JH!rN`VkPq3dqv_Bj9J<(T?@Cw9S2q;G6GIFxUnp4Mc@Sis&ZjjAr<3H_%wJq( zwg1X*8cwq0xfu+MJx!-3;dBPoZcCG{&?u7989mAH_;isx%wzg{b#4+)SILtF9>!;+ zcz9RSaJoqzHyHR;Xu38Dr#q;28^`E0=S@BKV$*O~r=k7{icj|@;q;U|NEB(dcfGo{ zX*j(k&vt~v(n!;@NjSYhwcBK+3)_H)GjC`b&KZ)2B~ORbyGb}Kd3IYFerdL!I|BrG z2>I@PaBsJ<-eB&hNof*JUr_C~FZfFa&+Vva!^7z(d8P-Yb6*)wiM6hu9-~CEtiiZS zOc|%4FkNUm8Om9TfbXw;=@jW|D5Vxp3qz3&3aF|lW8~)QoM+)$2!z5K;h|zat|OW z(UQVs_alcI3Jxk1A`^MdP;i!^JW?k>;kk)o651cb!?P6yk9Z4EaQ>p;VQc{k&S(@o z7A-)*IgU8Lz%4@=iqkp;kIo8E7;+T47KSneCtnI4!xW$lMVxscQ-H!0qssCi z3Q~iI4h1N~!NcQzf+*nOfj$8WPV^K!GAD?FugpVo0+ckQ50AA8qTt)up9}cnnn)V*g!*E>w%c^O^uh<7(bVY}o^Dyl z6Y2}uDCk*N?)>W3fG-{vLqncWU-(Gyh0i3-o&74%faqs&1qKayLVY30;7j)`2FE>+ z9q_fz@;Qz10p>XZl%hSQhex`ohPCFP$1U#9Ukv@D(o`9k*fyvO-?o1GJT`A9EaQuGLB09fp(NSKlDvN zgQBJ=y)?mh&|;=<83DDjNK*pqKs3e7v1>x$fCNpEv6Xv~G^NB{I=iaEJf~z%vLh`NeCI%KemxM_9OM)gRyCLD#(ZJo(Qd31nMoCU)$$;!pnPW$17Zr^z$jUS_ zt&E{cYM3!pO0_Z#^VrPMqsA2EX65B&S^`I~1O${BLzRRw;2|$FuV{Qh&e($S2wh4o zGlnX$WyVm-Ed!i|nb~8rvvbB5jSmE^V7QW zoB__<%;LhF?9sWofhb7PV#ZKPJ_CH?GRGEVW#tx(9}{3y;?RttmIq7tX#C_L7D&4M z;_U29$PDpxNJ%q>Dz=QF)wLNzwWJZzU%J3}%r49vm77;wTrhrA;9-(__KcxQrfMFLlb@MekXw|Mn-lcf>H!&P_+vUz*qSjE($Ny!{ z#&32}=IGHy1zDrVx&mW64J8|&L zR^>t8rXX`{_L$M*MvrMG_;B9wnRz+IMOotu3Yta*-<+QbvR!;r2zLYToS#{gH@YBi zRCXSGSpr{tJxI-(l!8&2`2}Of6c&tU{0*!A=vI+IY2yR>RnMN^KN)7=@YI3B2M-=L zB#n0gGjPCwVZ(;eeb}&6NuK2xi`F6W)WP#VN8?dsRi?qxLXy}kT4l9o77J!d5<X4_iFEr;&U?l0(vZ;Bsm40|_vhVnAlFtcSE? z=qC*Y-vFz#z!o_K zauIBrOK0|!IyT1_)MH^7kKh^+#)lb4fuh(yH!nYH^4LjeAV+k;PfpRKE}_KnV{^x4 z73EFrlFVZDHLf+d#tNmFIcLOloPtzaH@&>3s&wh}TukRxRhO36P5m|<3N~TbuHTEU`y^_LJg+-NRwbgaibKJ?j&hDK& zzQ$d-pmG@}&~nfuS3(wI#fb`XT4L?rQ;8smobkDN6Ctos_ck#$Z`?%V93gT?Pn@Kj zZvuNp#-wwL^B}&8N#t!-#>7eE&(6!0{3PUNOv=h0n}_8MieXd+f|G&MwKyYp{J4PQ zgpBMgdgTdT0n-v%*y?c$ovh0$O56~&#wHF)K%pzqO7akTtlYm*Kel?|T$Je8L>|)1 z76PHgCU%DJ#bxtKYc1bAyF|)aO6Js~dzb(g&eH1uYh(z?@RYq23m;u@egwf`_lM#q zfl0;i<=kj%5coP)&$VO$9~=*&9bbJ>b!BO41{zcinQ^U0sX+ntsN8Q||oX0=1?k!FKu$| z@9C;@S(ki1)B#T)H~=N7tg61e0@i*5`VCAQFl1oA0n_WtYTeV3yHHm8&HL{|LKmO{ zAzIS3lDgkB%*7^}-6jo4?p86oCizT2Wlb{gha{&Y&y)nvNl-U+>LwMgXC{mP)MIkD zL4&QQ^pyesejy=fybR)-n*4_cjb{y!&l))BcYD~-VZVP+CZ59v{ND)Ne1c&^^y9up z(S+<10^PBRJn@lYX!Zzkwk2#7(mCZqT+-A=X40U%7r*C;Hf_GT?tu%QTk=5OhL*D* zI{kxI8zB)D|9Kn8Qs1wpe75*H0c`?$iHKVacIQXqiBX72Bx*Q2>NTFcWkW5lRw{cB z4WSCCN74KAPw42Ie1tmS?!+B6q`@>~%N>>t*?dvl4Iub!*s(c3;SH7Y{-lMHtmwgP`Ee>{ZJ?UW>jonrgyvt&R zyMuolo>L5VwGZ_z_=d*=>)^wC%wCu7>Xb=^`fae^w0J_}VE{>exD4X+=T3gTk@4c@(W?|$K)=iP5}XYdE>AY(Tj zj_@9|t0y*azFxlc1VrXQGD26*h+Zz=M#U=@bZhbDxhmN%I%ROC| z-|e6yx*x`*ytVtVqIr)c*PVGa-tQE?A9V`{z2Vp7*KdeK(JyH~3eWIa+aO=k_0*0Z zcKV9m-LyX;eXF}I-Ye`~CLx@`jlRNM`E3voKl=@MS%2OkSEpQgV8Ln4JpW=oAIX?^ z2s??p;1lChPe3Hw;Zx(w`U(d$PEL|KJzT5Df;X-HUH{Ae<%eAPdGDq-xblzs^Y%|| ztUs=npCTmi+Lj+r`2iu?mhVq#@E7K$?C|9sLgW!U*J?MG$NQHbwKCp;n^Aha$6D46 zZ~ptk)ufJ28tePFRNsGx_h8FShoih7cJepiwY_^g;VyIKCL7AAFK@dqdmb}}Yt!LK z@5V@9VYx4Fr!RXJ5_jc~r-Q|HS<5KIVEOjbU6)0|hE=xNRm>!5c{>*^WbQoEKl!+; z6Z2>LX3}pUV+e*PBmCQT@6AR&^-VrLE+~IySNV4!J8U{^H`&njR3!TlVvcWYw!0Aw z*;VP;vudyL9&KIM)zxVg-2{k(UkT^*E~{!?`^nl%cy?n$_Boi(5o-%;eA&f5+uH1N zd_~*Wt~r9k(Tw9Y~PR@fD$f@G0rr7O(Rc zq3+pxumy4XUIzKpE56A)eUsmSqT0F?WU@7{x}MyX^7ih-$d@QNsyO-!tLFG}3uVF= zRvlP}mzv{UzBj?OnhEdEd&BkQM(@T5-axg4>S`l$1s=7}^;B+QtuJryfj4Cwb}|k>Cf1jL;p7o{ z6nP*tHA5njXJWxp5QE^55%D~^BkoBZf7Q81CYLH@ht!Hef}AHQNG|d$2UFOjkH=j+U6^) z@*cL;f9{|06_OFz68SNGtLu_Q&?~TVStP4(*Q!~N<;?Lu<3=tO*i+V|PRxXRQ|cL@ zHrBsu3K5&-phAQOsJ47DBau6^0ON+nCIQ(UK^QJJU`-B3*et*p_a{y_m^nbC4PohbZF&|5v->!xrn!u zQTq1#vg7=leWMbf+JQCqai7h1K_pw}Wg~s(Wu_GlsEhS)NO=_klVPKGMus+#hkh7Muc@qvrO14ev8!d`sWs*SEy4M>E0zjCeK zz{J?f6~_V(_oKZ0=qtkSR{IVV^xYr(cZ~5(-q&@;(cK482_o}F{?)$~nMua9!fS`?@e~c>6Ug7?=zdL`P;z-N$360>Px(vKG z5~jHhL#Fl6Jk;Rm>FnN%`o?~A96V$)FBOhWf2;OID~lk1>^^ME&P}m;eE#f7{=(_O zUwTrLEL7&|G@UtVQh4}Ha}smV%Xr4`l7s5z=>Ao6^(W6%VLn=J zbz)`CM;3}HfVOm%fzWEm?A3fmn&gjcl98@GVMbD=xcSdKkPQ!;QuGsig`)yreAdao z_&EBLh4(jq@lj~=vPa=VsQ4foqgLv$v1{I;l&xt++ZQ#{{kRt2SQYv z@yUm#`A79hf4%PXlvgJ-)}*4(th>r?r?=52)$zD;Q60qki;nwhB7GR5l*l8m8uE_g zEyM;Y>^b)W7q6Kwpc9OK)P`o*yjTWyMTO#U0$hY95J8YOF zfa?!v>nNVa#z*uJxLN^c-od8$*fZtqd$hR5(C&dPOVZ-dd7?ZzNly-K1>~Y~7{pUD$d`+g{juN!vcydP^H3-(+Vk z=VdrwpM;Bs8`jt(ATMJ(HOze_QcABl&xUPsnEQ6=j@N>jjw?3Iy*E--Z*QZ3p#Wp5 zaLquB6XQVq27(7=v|@#9Zo&xLuXdKTNi`O+7vjpePSA*VQ1p-JYu^yj7-bi2qKArE z(dpvv(PxPFqR$nhW476Pws^zV(&-luI`_yuV-zW{10%%C@#DqSF<->&h~lPO&gAUD zx1+#8sr5nZiIa5#6FI0KJmbe8a`!W-WfOCxhd zXYo&Dn%5KuL&}- z5PWvxc2r1|k7M;+{526zM!p==R(uk3USttoum{}t1-aWJhuQL@%ETj4=ZdRhZxOFM z?h@oC6=g6?{jGvFE2fmm*nnI-^rdMSGy^qxWC(>5w zzMLt&O^H7RRmo`NMIZ1LB+Q3+Sd=Xq`}<-2Fp<+DPW;o+S7bOxiUV8M{C-xE^2>G&*vMQ&e@ zXT6K-2(EZrZ`<^UwqkL_-O$;8p13!9owzP$l<0|PxMSCg)D}0|567j7p?FOuG(Xr^ zc>PNG9@oUTio8{9iLAuA?{A88t)$?D5q6Pt)eMt@`QS@grq98H`b4yE@=a$)T!U9+ z@Jvb8#h9b6u2P#_>Ai(a$w+KARk`xPen$GwjGrpzqU0=$kF&P0+5{CcLQ%GJyg1YO7bo?hW+xuSo0ZD2 zZ;UTRbiy@gu=McdX2=rO9yQf@Q0V)Q$gWZO5mhla*mQ`5Xway?XKO%#8N+9rm?#EVHW1I3Fm3F3H6 z3sDoBAl{CBSZr<4Qlw+?!85ozI-eAM;}XR4aV^E`ah=6+U_yLrF&gjtcNu?Gntigg z+eJSaADf(rMRSVOh)0a>6JG*5+Wg`rTe^sg04-vXnCgBS;gA1}`FYgW zomWv?0W~KoInnp zt@tRamG~j5Kx9Qfgt^)s;*FSg;z-QnO=^p@sCaQ-6a?AP<3ef+zJ{tTq&fw*2>hzs zKOfIB!gu` zHJQ%hqPS$S#rA`3Icl(vZI`w9P}W{79A)z3CdrJ=DqyM%?^{Qd$Ptso%?{SZfm-ZK z)M9VNd=z7|+FzScnWMEV0EZCGD*3#t;-^^UQKi%z%%EGf432S-6{M=p8O63T3InCm zz`&zeVUCO&71u>9j+=(oDLZi|g4b33JrQ@vs{Z2Ghr}kw6SDZXhXP#|^&@CTzYn^; zgPjU4hRCR?9~lK@g@TKC5hrUMiy`bbK}2a+xuQN5GsK~k;o+14gTg3-u+AJ?zkPWOMKc&D8_*IH_6T&dJWcn2bqZi_oJ5MAM5_p_|*qxoO6?sa%>nWI(m8|4A1RwNk^`_D8l;_743HwvW*<#ixOJdn3~ zdI0|o>puBF_IR!WLUosi>+~{#8-W1|$Ej;W@7XUi}M*({SM*{}{3xPv{ z#lT|V*}w~d6M>fiCjmdQ?!N_2!96r@;=Evuji=%UI45C)&Z9Q z-9Rr8-`4X8a5->0kni<2@Dku>z}3L7ftLc00WSwepsV8p#sEJ?zBvte4erMPuLF(; z{uy{S@Ooew@CM*K;9r3Yfj0rK2i^i)2fP({Kkzmn=OESrp9J0so2b;Hkj3fL(!a1J3}y1MCm{0GJBg3mgIb5V#!p5s+(9 zKL%b0JOKO$@N?is;6Y$VRE%E$y8%&FJw1S50Ve~$0oDM&1-=LT4){6n2jFqwQ6Pq1 z;zytZ_!E#?rH%pH0)GZ}2BOS+&H&ngeSi_bY9LhUdX@qsfmZ-=nzZLuAoewQ?gh30 zJ`8jKp8%rH@O%J-+|%<3ustvi^)MPM5BCaT@tvn95PO9@{ehi;Lx9P^0wD9}Ilz9n z=Ky#J@O&b4f#km*cnaR@31D~JKMm{wd=}UnxDj{; za5Hchp4R}Re?(U<>rhHp*r8TRS7=jOY!&TOi_bw-F4jVj9+u6)n$4o24wE(qYaxp^ z&d^YEShU%OcA2614ee1wL!P(7L+-Kseqw0sqpJA1EF0otXlEH(si9REn%~f_GBlpu ztit2j%_nU&x6mdzph85(CIRCs3@8fPmMZKk2kHni&ujSJ=! zA7?+*GuS>T+IBIjIY+WSn9n0nr2VmYDev1|_E zM61<9(p;9!A#Q^W|EN#zv}_K!yFz`p$3atRu)(t7z(hmaVQ9Mz?E^#m*w79e+P8+* zXlQn{h3XmHt)ZUV+R!=~T318sZ)k%JEyK`q3~jujO*FI;Ln|}1YD23tG_Jl)NF{eq;Sq-SATv-tP$$yAJ+|s zLAQY#LF;_Se9rD*i4?RM%E_r9ZKb(%vCJ?FQSC`H3~dzc`Wj%-wL6snDpw&l4XnrA zkTA8q43qpEn|%vWgEGN$BHS}c@eN1t&=*Y|bd&@!c~Muu^hGv5`I$=L3OaQJ;WhSA zAm5w!?4z{96(c7{XmiQ~5omLWyDe8I1cr*wA)Yt1O@@X9lA&PPsAY3-glEw@8X6ao z<|WB&fyEbF;op-wP_4f3E^n9WTKx}@Cd%W-ZifxZD|u+i^|UUJTU&6{do;#%*=4-V zPj1L(90iscw)W-s!cipo$-H0BpM!R&#q_S|2A%i~`Q1pFx3dEWOA{J*N>!Rrv>976 zZEf~(WI5lIj{Y6KWxdel$B{3)_xjFDo#xB#!3qBX zCx~E30VnqYMT>G{TLc@P4jR7_M%r_jdl;t-K-ZM40C^) zuYm~&nx44sm$tx+WDY9A9IJBja>Ap--0)!&YJWjCb{ELP#xHy(!xD4E1jI>_7{`|fly1_4GJ)AW&KtIsg&msVsSr?x0O1$>(Yysg^^GP9CRMB`@JUJL zJ@noh?71;M^as?D=F5f8HgGn90^Un;ak4tR1_{Kw*&0M2AI8KCO3Flt2pL}{k0K*d zO4i61*00+ZG)9WPgI|F4(j}nLaPyB+6wI3G5lK@&%ri8M{$0{0bG-*0V#vKAjR1B5 zjt0W+nF>4uxB%D}SO**kTm~Er^Z|zguLWiT{|p=s{0nddkaZIzYVv%s4B%_H&jexw z#y*5RyM*_UxQS%oUSKAWNyu7Kjml_KqcYkYl($J&r&RB%XfY^JiqC1;FtcfBsfISz z&>%&TJ{+Rn(3Tq7T0{Gjp+W9oJ>ywJ+hJ&s4p`yYA~au=Wpi*0YWeMJXwMkh3x@WF zq3tm=t>aN?r2Jo9l{!82=IZ1SU6oq@j^}ipyY5tCf)>I7HxPD>3n{OL->mQ{z z5t&$;KTb~~_dT&n)wQq@F}d;@Nk+^B)t@xT0`~;C;`muI;wuR%*91Zm`H9 ziabGkp4qzDZMrvgeag6FO~YX;qjdbCQ!CAh^dx>nPFxQiS$UvoIBX8>Htuw0FMvkr zNu({AKQK|Sp-{r0E|ez5P*e*@U*!3%TCT=h;qVzMWVH~1WKCh+tBee}iM}do7aE?5 z*$1RIQ&4KBlKO_Yg33@hPbQlzQk1?b)a2qqo8pla%$z}5i--hxFyAH@ohS;NrE+je z=>j~1QRP$a7DPdOD0vH_q@j;&D8W0z`Q1*W@n;Pm2t%Gw{VZ%DPNebYF?xX^PpB_M z0KU4>5hhgQ&!>ur@kF?hm_TfWE>>Wf`~6KVYMSiZ;; z>WdwqfEJ!mjX#izOGBPeUnqR=)mAx+P>nx_Ennmb^~JtJ;8~#>fAsVuc|v`$V-A%=$S|ps_|!;Dlk%yD0~I&Y3Cb3r>EsB0FS^&Q!PAPTNkQ{N3OQh zie-2cteS`Sq3Upci<+7s%`-#N(u^{h|JBQ)HRAlQUY4eMS>`TVTnm-ozgd6Epy5N( zh9uKae@cqfpYk&XyB@0uG^am>^NAq_%a?-NX}aa2`sKW0usM=rjj)49!cl15b9ziLuO$wEXCJEz7_v7P-X3&@?m*?R%xdC0 zfv>sn_}oX(b-BwD^sq%}F1!~}pY%ZG^m#HEU|7R87v2=muj>pxTr{k>nhS3g-s2bW zT+&st$@Rd^h1VT??}EqHUGXtJn+q=q?|UYACiGT(WN$9KrHIfL4D&|zReVgw=E7T# z@LEDR_3|La$6%Wak2UYCA($6LkAtQKuI9qy>B{rLb3OVGG;HOY3$G0HNc1S?;-Wz( zt=aI{(yazh7KWZQCkl_F*N4H=8$(kXyjHW}QQPbU@U%EfvdNaFx%lyWyhEN$#do6j zeFPCd4?K=s#mDT`TzKn2?~{l8jEm-k?~C|F}vkLADXO#MWK%{{j>oJRcy zzAoUa{0)5V!RK#|FR0JP*qp&)@(&wQ35C^+ksD9>AE*vuD6C>iN}vU*V%QKX;x8j|`J<(Rrr5+}xKrhk(gu_) zpfxm}RtFU-B4IC7ePS61M zhwJ|O{qmssnmXs0_xN4DiAoZqiR-^m*%lg-Nq-&f|0YG$xBWdL85+_b7|A9=yr&?R$oJijU}qzh5jYms2XTJbk8ZNhPKe^g>_Bl@8Q)l$yfo@5j&W=YJw=C zicxr)h%*99=T=|@IX>|lxDGHJO1!lM_Z+tC_rd7VLzd}4#tox2ImtZ=c6Hh{ZQKir zp%*TPxC6gT8>hI(vN`0Y7R9#}G{t8v;hO4Q(NU~jQB$8ZWk1{mRG4{>Hr7X%IJt7m zyP}Vn=vs9Z9WIW98l5|k^v~ih^J>Z6Krc9wHkIHnh&&UJ=_s@gU zR6E4EJIgR*sj4m-{-#O~aKL*s!Z9s+Un;^ z2Y*3adVb`hv!rMBPX2N5Z@pGr$|m(<(mOA_$l)$i1| z!J0Tzu+lJINOTbR;bqT{`iZ#6cJ0=D2i_>Yx@yIM((5ZmmG169!Uk;&@#3hEt529Sx8Qb4rqu3)!t`C8b z7`8q5g}4T`Hh8-7F%mWvo*Om_hLX6C#B#ma*d8%9u98q8Z-h;Sybrbu;5S+vGPFqC ze}`)oE^R2urHNG_?m&^JoxGAi%>5m>M@kpPhaD2qX#d?=2CdK_;N*@DX|%gXy2nWx ztCU3uuW#5e})Tnx29CVo5IQ1ZroH9X62 z0j`G-#Pc@j39v;Who2{98}GndG_L&?(#~r)u4iy%TK9D4aqQYXn1_5PS^l-A6*jA? zJ*LbeDua;155$kGK5<~J)<&70jJw>eBXKBxu>(q)ETLAB<^uWA3xJ%(7zOMCybeey zAIh$00B|fY69_@AhvgZiTkd2W52V1b7)L)Y>)L9Na@HU7g(ZByA2JUTx91c1`j1H?+ZqHr~)C8d|-faqU{E ze8y@+^BEciE_8K@yAAC{L)&U-dkpPeL&N?t%kM9S))_TrsSK~XWpju#4K2&ixNlVP z%`!CV9#gcAmd!!cwOn#M6^n+^i?MIiN83mG^1EUA@F}t~n14LD4J<*&#-HD3^+wm~ z>k*U2MalaC?D=4=G5mCDT+~fc!u+!DLBI1;r9(qOGQBkvbW_la(70&Q{Mh-O=EpWJ zDpu{i_r+xNJ9=VWybSXMVJBH(bNdRiU49?`xMbfrtgNq(^NqK966i*h$o2G;u(HFK zBs$}lObmqBIIjD}aw>R`FH9rudMDS$^R67W|SoNv=0mKAyn6vONu( z^1BH(<(Cc6ceqe4jX7f3=tdLX2D9AKX!r0o_%r2f+=JWTui=(!Yud*0nX$Oom1e!H z4BObsg=i7N+gQDZStc?Tf%Zd-HXql^xOAJSqo>FEN+)i8;(Y!Q+RvA z2eCbADOo;5Q)m~nalL@+474LHKz|PLWjjE8-m;Id?D{^ujbLOfgCR!KHln4NDWk>} zRLNlEeV+87?)9((t+X-vyPXD#wmVTTF(KlCd?uph=?KJYdy;|3fwG-w4IF}dEYk7} z2c81V213g0DF(I&P6BoSGEX8559)5}6!X*o=?`@^hdZ9TfIWcs0($}<0rmo}2O@XN zb^(1c&vx9?-wt3O;2z)r;QPSAz>k24ljjp4+Ca}i;4mQbUn-D!iT+vN&cYQV{$kmj z;%3X{5E~3_i=lmBXdfF|6jE{)?ws5;FKrI)XSZk+ozvAJ*yB}v>kREdLt`&k@v&}I ze5_j)&8p-4<7zOlu#a=w^Sh;QUDR&AP_>#r-%Sql|*59=E7<%;&$vN@o?P5E%j{X2?}y&~neon@14 zrT0+mMC`or&45nbhKSz&TO$hcsRALbO>b4Zbvwn!6#PHXb(Creh*-F6;2N1^Sxj>k`urJXh0v|;2; zQzGmb+UH_clD-%RDBi%Jl)AL2UkptoOgmdZ8`i3#7@zB zxHy-pFV=^FG!EoU1leqTNYzD5QGQK+OWwmO)#&kS1cspr$WPiZkI}FijI`{}2~|x# z4`lw^1Z214CE!rtE5PwU)Go3*+yk72`(41fz}>*bz&C*&;J<;Zfo}n?0lp1nWBv~C zHsHI!JAm&2?*gKW;JF957swPl4ty2(DG)UAIS_WEcn4hu&mr8S9C?^Kz5(I`aRyor zKaT*}?0*Mr3H$-r3V00I7Rd0Ka?Av3SVx;0*3sr*Or)z5iWim5L0=Y)&r*C{ESpnM zd4!^IpsT{88VN>Yw<3e{*Xj|c0#fSRG&03Gx3jY+G^l%()*ecxMc4o(hyrZ=FX2hmVK6-KVMJ>|b zS`_7f%U6VMmb=Zw`55P^AtG8YOF^%%1cKmhz8F6mC$yw(LR(U(!l8Ve@^sg#D-bkB zpR3rcK%2d6q1c9JHsGfjar&l{iPJX?-gqDzq03PI$KvAyESi+1yE~u*8H2FCM-24H z)rin9^?(Y|`NsPBmaIHSKJOWjtyniNFy9<5FdrKbm_HApI2z%0%}C2{<@4s7c%UQj zi@Q+D%U!GMQRzZe{osuU$NgvTd@x}iLJt;k{*cnOLhFsx&TlmJ! z^1*@*!zunv&dqM<)IWaUZ75wf9fp#bl&iB>aw#1WP8)L}FK?wRD~lF)1Pz zM>H1kZKYv%BCh?4=vez{(GhX64rhupFFL}0nzLVYoIR2xdvv_r1=1JGbC;* zISO>*HpxxGCy5j3?Xk2}+XnBS<+R#c3 zt-{bKX;xTA;p&c-^$Oz5H)8y&HAyA80exog$ zLr}V^!lRaX#W&Q@(hO~)p-nZkWrnuG(5^SM8x8HKp&d6gEw3Nk$TQpijQFiwk?<(; zgKPEWxUr-SiNU?6db@wcy!nxuB&7l*v7hDc&MsAb(%SqQB~j3Fb`19eeYD8==u9a8 zjf>jt$8*quvz8~k(wM$!iYxa=NyPy^Ja+-AKD6!+=4_^pl9H85+jRUENn1I7r%7A2 zv0Vh4YEf4i8hd;*a3!(ySU%9~$+neYXroGYXxkbKNAmJQ8Ip!}ns6EVI!O)q50{~{ znd%?5^o7slGf>XN9SQi625o0qRdroO$zoYUam6!cmbv0tH=b9AYDW741dK=8$VL6zyF@`^E4@puSLkIV4nkOAO5_qtNbDY!%M>0`H1>!X52h zkt*EjfzpKGj~5G17WcBsZA)E9DL-__HP**zLaaZ39?F$2Ry`0ERY=Z+O%(2LSO;YFR{>-i@}60B3N9tS zrcH^jX>*{!D_5tu!?HP~oK5jPV`v{4KFVX1-$^#@mpv>+Q&}|$S#`e7s-;0$b@J3e zUWJw^WLN(V*TY2#s~g>&2k-K4`r(K4yaadKd3Z+fcu-BVLZ8|96B_Gdbrz2MKkR)8 zd{jl&?`=AS&>cvCu*hbBu*hcEK?DLJVGm(3xBvl3ARrJ((kv?25Kuyk+u*({qmJ9S z>*$QKDdIA&Gvc`KC^{|!ii+g@|8=UWyKi?Rqt5rf_j^-G^{IR6RNcCDt4^I-?m2y4 z{_Z;t4r+s?Gm=OP9)-|y_+%K%Fu1u0v8Kaqxdd0nov8!n^}5?~l`B57Ew@7)*$tgZ z?`HE4p?-S0+B)yacf11rU6YW<*pFWGeDdac-C3AefMNh7n;iIYpB0!iixJ&`eY zj*f%GdZeaKT}}Z|dK_%gmM)?)D7hC~jySm&3+d{DW+7U}o~1a@R0n54!sCy9F5R`r z-}zv?A5M*6v67<~xjUOPbq-}>Zc0I(2bb8S_!=WSBgY>ukso>7;gTr3wOJzNIK;={ zeN`nHElot|$0iNS=NhZnUxV<*nYPjZ2-7Z(!8Q@!Oj|(q*A9Se7aak+0b&DEZO1}b z4d&yzD_^Qi}^%+~pQ`wZ+|GaeuV9f#CjfUnuKUp@^d* zt5RXFuD%uV4CDA`1mk!=%r`j3#jNNB>R~*SgCuHuEPCMkz_1J~_+i-0#G+v{HFQ2B zoaRRpkDM`}J|G)s7$UiS3;lNaOQvjs{f_+BPmOF*>ukzPFT`3{?XuR|I%7)hlBDY0 zbtdgaH9Mh$)jL~b1!{e5+USGeYXgvM@WIOL;MqtTI1W2(p7Z$6{Sjo{4yMM zL6KxMuYa0Iyx9IyybW0jTN{DUEO^=iGDGwtgh~{S%kHb-lbucYl@vP>8V#Sp1$&so zVaSVDA}QEl55TX3Hx3O}xfG2cBV?Gg^hQgHi6hFvSjR5W$fH8+>!x(?1# zhF5as!X*^ zM%yS98M*f9#X?#U(sH=q_o!g9r7Of-5n1d##9(o=49yjWiL4CBuMNGyN0L)gQ#v$6 z$HkZCr^djS0MWQ7msSQAa>q}Kx`#*Qj+vrx zXkZdH2Hh0YtmPZv$c&9MeTB3OHS!ZMYCi7gfE*Kf&Gy4WbF$Gs- zai?3{T#H*~ac5c_PEzQ!I6I;9Ym54o{Mze~k9tuxZnVWswK%R9N%_vQxN|ISx5Yhg zaRb3Q z{$@BR%Bm^ia8R@)v^uNX3*Ki2KV1pq!l@gQ(rR($CqKng%&m%6eRKp{I7Gj{YvoN(+sgieRgP$!?}s1Vzen@>Li9G&4! zx!H+t0{Hq+1zxpvRN!~?0`uwUt% zP1H5H%*CnzZLB$c`Hs41yBCi~% zVuMk#DkqNdWL2q0l>iJWh5@B&2E^y%)A`j6cuU^U@}e752J&Ot1B|wO&FzpOpMfcosv#vl#O67=ViPJMZa`4;wWG_mjodM{AR`JbWW* zAxdi;*L?*y$l``r9G*hcp}d-oYb=r<*H|R&28%o2;%>3H+bym&dYYuo)FH)priE6e zK-inN<{Y(n8kkvqj#{5N2jb-9BC;CU!wpSPlisg46?rx$=fha^_ual((Xwcg+2MsG zTvZR-x?V_-GmB^JC_^P+CTycM8UT@<5f|ng!Yw$B;1or4B1^2{ASJ*XC!HnS!^uHN zXMBYwG@a%-HYLqL+9AZzi_XM1qm-eqzD5YGEQUkyp3Hw4{QE8rQ5lazv;d*vJouo1 zt2^`I&FqvJi3`hc~eY&TJ8=5g1?*dGd0 zaNV4n6h-tTm7SgvmRk}D-g|4k9ltmae21J&qPmS zb<6=IFDe7%J6Zt9>E|NAVStMPhXYmsjt8s+JOvQ_K`k4V1D>JrOEjMCU_S7CXQX3~ zo(eD1P=;h0%8=+Q7u+^Y=Tkbh1;_p_bnM%L@i?A` zTCm?y)oMXqGmlhzB3xoEJ`L+rh@3XXd#%a`E?c_zcxe zW~&g{D%Y~Yt5@rAWtOz<+|~EDpjzWogxt*%h;~%yh)1q%F=GbbxDqroV?*bQhK`D_y91 zZ3b>NMBQ!rYit9YWya^ z-{JZSz)JzI2D}WA>&%$k2X6)>{qF&*0oguy&1Wx!7eRp`5fm5_^G$;LSkw6&Zk`CP z4%(m4@hqO;x?0>&i{p?abYN(j4y;k*)>zzni@VL@?zFgU43u(@zB*)AvbclV41|`| zP;iNyc2KwpPdm&)mg`Gz*_esTa6UBr#l4R8Y#DNP7P!{29yAk|h;=NU^_I0P9GVNH zJ~h%?i@n$X$VyfnEM$@WxmaCqlvG&VaD-;T%lA;i^f>;MC|osuSHUOqt3RD$Cqkp) zkA6jq(jlGcTyEyr*%cqj9N9PnDs?!0By+qIah0xkH*@4%*uBHcGLa!*`PV8^LaUi~ z=CY$%(#rCT1zY5DR_ot#Ny`sL#-$n$l!sZSX==>~O6e$d{FNXXB*H5}WE|XM_c|jW zFDG0Hx=)cUhGZAH#AG%G$cR5s6enV9APF2ZdaWqc8@w~MZhgOxD@Lt<*^1H6t&kmo zOXIU(bBJdxY9>aWi?fnM%e1USQPLJ6ueK5%0bC3GUjQ!wd;*ZndOP6tfI9%$u3rKC zBOoNJAYamxfDdZ?qx$*@ea%<22k{30@wI92AmCeoWYO;e*26Qr2iP3&13;dmWH~bd zUk6kxyMP^W4VD{ZzhFFDALUaS6d000fgw4nEw~Rg9kx)BQgEy{p<`_du9wAeol9`1 zTHM(d7qmFe1%>V+i@V?AP^bDHf3r9|kH#H`o-b*8=nzf@SlmvFvvO+HAhYw49U-4) zg$ImKUOL8%^;=gq6?XrV84gnQCuZU8{Z#PXPN)`PwEYmGkdUk-Bf(9?^&I%HOgR!) z#S; z?h%`5NOL?qS-rS5%PJS^5u3Xc%Msymibn+I&MmF5Z7AFp!s`@GLCwPgmO8gQu=vP3 zPQ1Yvk|aNRf68>h$T6A|8yU=thgZxSPgS61?ZcK{_lOKUOZ>f+Mu?G$Yk<{`=-n9i zsHkfMAQPh^4IZ)Qu|`aNGzU%3~u@nxql|eqj&47G&TL4*zvGAg_uflVPi#LNtIJkx-?K)Syft+3At%rRas_9d1+X+{=`C#99qn`Nl z+39m0&s=%v^3I=qQ1^iujeEXUc+ucNEC2P_)pV-b7%Rc_9=7Qi8WBT@aYRRdKj_dKk zclRuv^ZKW)Y98@_J-g>$?jP{y$+w+%-=%BU-~Ch7-eIe^{~?ey?X$nU)NIL3557HT z@Dnd?{&<}o-f5S=)NtR{cY4g<(R$sX#e3Uyn&&$w zG{5DQmDPm&b}CYTQHHv0MMGS)yIY&?IH~UfZKtF zrU0VdQJEBqFaW^r=JjyZmv?PkXa9ccBf@%XN$Kfj8fF>dz z=HT`Gh)kLw)Z_LFNTtj%G9RY)dZ_mQScK@3WAY)tk$W{jsH4C9 zQeyJ)0qgY?;g?U-G5OX%#pc7xgOMQ=lR47)V)7xIfdLrM@Ci@(>$Zil`LLv357qm3 zM2IdmCLb>JdObY&-xQ(tS5E>Da@S9qqM=&<;}D{27?ThAz8F(snMXVKVj0Mt4{OEi zp*nxlJkn$G;V|pR>tPTH|h2K8QGhB8pq^A_U`qZiC?y)dE3rd7n={C z*z0*jKRYfkq`TWsGeyIC=5rN((I_i6AFk8m*-_v&2+=i*$)^RdxEFunZ~V9vYt-)g zIY!aoK(JC-j|&Vu?((!$G%N7S=UVq#gYmKXv{E!w({I{g%b0vxE1J7>K3{C%mzD1F z@M+L5kPmB|u60a4ZGrWAI0<6?ykGZ9RJ=PM_A0N3YWZ1HbZuku$pqHxp$y9By0owb znwmSGc8Z1_hb@vWGbW$*z}iiT?VO+M{aK0vFx3(QnGh_Pd0 zcsJ&$Ocg5FUSW!hmGW_g5gKUwRwJpPOsafM5zc3F3}#jgrd(rM%e~BO2G~qn9m%Hm4Qy(7~BIaByvo?(~_j`=BZ``Xrlfb1u|Ioj} zsSfK@q=`<|6_~KGw8=$h3<#$hsEbM(q>3;a(M_c~S?7ui?QqT=>h_PM^A)j1Upe0X z;^JkMdP0VfnVXs3uB?CQo{uABXc;D^PrD5i*&EKf*CdX+o@bG269S zyhVX3l)$bUdpIQh1%yVY&M=n}+MHp%h7CK?(~5O7(B$S6XHU!-QBaUOVtigf4(1NS z`jyWe)=y>+ImRqmzX`boqeqXNn4i;YSl>Rw`u4UlxubJN=H-nVK6=cE95c%p)=!mn zSf642bR`YzCo_#<{lW?Jb0&;09GgFK!h{?4`lQvFA7p{pJxu?Uyrq>qRctQke|Y98p`)3oei z@hmuPK}XvMnhPm$!BGr|XF-PxIsr&rXK6Wsf_c3BGQ3bG0-C>38iHfC@$$P7_*)?j zji$5%R~J5Beh=WjXM(0Dr5U*T@bU6{6!;CG8KLJ1iOP2}%C`YD?`r-=fh=Brn{nTN zcEFksIXD~#hj`_?6ZO{+{Q6PyQ8n^kO#sgdfus!v37!{1se_=iV!!y zAAnz$jdc>rQ*ep$D?|Bi0*$Y)&~f4suY7BOKOZy=`Uzd4`r{$~DWJJ)JCgy=>C zvDyJohw6-5e`Sc63YtGN0bHW@8$?{Q6R@QWPe)NS-uu{!@;wfk)k73n!uChupl~Sa z8lDcx;^y}>%C`qJH{_5?>EVl8f6TA_aFh?8E>V6jBEQ=~b7rp4C3+uREIkC8mU%*# z=>0z8#koDuB#jX|3IXxn@1?+R9E)l6IH61QesfUpQqcTkI zU83?)8B7gmE}krOmLJ5is5NJb(3szNmaUQzx%4RL$flMb1s&__f}^10Wb?tJpd+7n z_9*Dcrd~e^x^|#DcocNZ@0h9hiEyg^B7`kQQPdjfqJw1ZV6gio7P@MXu+6p-6v;0zO88G1Gk8Z&2&$!b*@c{KGr(dYYHE0or{~- z@vL*LQutWwT--WN_rzM~>Vo#0$U2vnmYkr=_wVQDE)3G-yr zOO`C0y>fa<`SQgJ%V(EVPXFrq^DoMrQ&v&Fs1#cQ27Bhh`KR|#dk@ofXZ){0uEnUH z%FHw7S5;2$l|6m_;yDWgC8Y@V%R@Uaz|GNgwev^{R%d=V8rt%vaUOPhOwjrX2YCCUo zRD|ou$*{Eb4~)H>ipI0F#bNlD%fuX!doC$C-T7J{6T|6Xe3DqV`rwa&!s^wdoxt=d z(?a;B{2hFKbZn>~3m+#AeyOVI+>18W*)+zpVR-GP$)4&jJ%O)6Gpjb`r4-_m#%??C zo8{e6XpWDi7oP_8Fo9%#T!ily^HMzdRr2k-I#+fQo?se$_&CivTp4$!4)FQusvx&8 zY&@sLbSC}@Oa;wVON2)963)ceR{_?nQd5uPqvA|_i3)IcRo=nrkayhrlvyT{aTo4M zEf=W+w#BoT&7Qvy^Md&L2l=k}J;W?b+|79zb6-l1&7$-Vo{1A#KAc=l#h+1WF|S-S z5wrZ9knYb4Gav^XBt}zbLptC6XWW-Z|;p ztnpaE39|4f0J1Jm1mx3VrRe?o5k2*Wxx>+)WmDi^V0OM@fEEA;*yZ z)R`Y0_W3q+UJ$5F#Y<}PQmW5Ng7P)R9lZ((1#W!0r3+HRC`haB>-m7yP&{KeW7T z-`MJNvOR%gcIB$p+UMI{qei2|Fu&55RQtMxa$Ed~A)L<3dwSA>pNy8*L;LDUKH-lV z!Ew6frla`K)|;E!4G@}napR`Ce0{d+T%j9&#*XjaE^hU0=qU!d+`;O0+9huKT6&sG9>?I=1)y5-#w~+>xNtFR`R}@z(DUEBwj7M8rAX~1c@*DDh zqB!x`no(w|$guVweZt=y#KqPG+&9h_*v1Vryt3IP$WxTAs`VeJqDh7Y1i^Xqfr9o( z(GY*4G?lAzv@90q+o=ph&^yjouoFfuEPA-e#kt!V@2kq6<7ebw-yp{>`kgU%^M2bS z+*;!waGW6P_hCRj?4y7zDh?>9&nUM6_QLhkfZ%9KJ9<9gv$!qzt7G9+A-As?Se#rpA%BqSeh3*Ao^$M2s6*FcASPG^hbN{Qq*#^NSe+zgAGZE;I2 zE?{vym@oI>W{u?cxy5~DaaMlnTfNt*I=*_Zr)mLy0uvz-dAHV_8$_vL8?vY-|7=tg zl{Juk23m?xWJD#!Qa`U=-PfraTRqeX>_d7#6f) znw-+9k?$t4MyV2ZM>-Zi!^y!fg@+6X7xH;#vie9<*wsehrm5H@{2qWG32)quI>0zO zw>WmSpdAw*DUN-OxSjBBaf*48{(5+`o-4qdaa;sGpgMG{ zf(IVVPeI=1LrF5Xr{LMy;|VaP>_`&VGN0-27lFVyQ!i;itkXy^VI`(u`Amr?IHaz` z6F(ru6Ab-IQvwgkv%?<--FT+OHAD@k3E&(+#`CqO1Fq25?AUd2eHmaqz-u&~9qTmW zlyJ(B9JXi3=iGo_!EMnY(IzRlofemcW-T}}HA#yGKBb5v!LCsQK`097LxGGwyJ2AF zQ6P*ud-6DE?nR*;#*FHy?S;@{;)PoKb2Lxg3{SOV+Y5Lk?82`=m4R?qU2MiMH|XVf=1ayn7h0MXk7Xqq9tW1&_e9 zb&JDiFgWLe!PMQEq6hIioU73l;|=1b6LDzHOkx`q^&~Ph=cv1cXEp3@;*RuP3`gQN zitK8bR1BwPBNivA`4k+?1M0rk-U8Htzw)?y%5KK zhoWNmC?47tgNsz>Jr75DB-U|ytJsE4dk7Bo5T=#Szrhn4Z!ClUl8F%?oz*Lq8*O-n z9{}=MSPiNY)Xa&Z2j8`ErcILaPL0GQNr@h)u^#H2}0j9LNq#dT}I69L-- zViLsT(25ha1DuNM_JFeiI{=mfW&xfJ*b$JTMJK=wfX4ye0Eo#~a0}q^fVTm52V|Lg z06w7cd}59_A__1hq5wmpcS>*{XgVLwuBa4#8eUN$pVJ0CLFn4)kk8@wc!KL^anmdg z`eSrj=%vtfl@@oI#a(4_cU#4|!tQ0*=w%8FSXQsja;i!&mzsqrZK`s?vD0euTkkseBBZ6;b?#;f zAasQZd^3f_F%{4R%x3d%nE+aB*XfvZ&1QBSvfFZFP z5m&uB8=9~#N63gIO1OCqW>GL_(ZZh9C;34CSVC*FF>?0wPbY$;80vw0tN^?ka4z7D zfb#(V0Ejjh+zNOO;H!Yxc2<@%F9bY1xIc#beu{H4)U|c zt+lvwEsiZw=*YVz?VT2PkHvw*hE7Va{ydciqt?HiwyqPRv^orz6(tC)qO-&jHKV31o z`Ug*-`KG*sl%S{S74^_6=zvY%*9NGfn#Y4kWhRxOq2yx8z`%MFO72;e+U+&Zs{OEp zSc7MV^1yw~g&VU9WCofHsXA@s9^ADVZ9}%9xg}Mqdb{$+qXL{z-hSxWpur=|BMBfC zC{^MaN;`#csKdg^8sMcy?uM9@{S;NQ$B(BsqI{0RwZZj>M*DHk!Rp%an1z7ds0>b# zxFEoV2M!0}`U*EqBug+H$T!D)r||@KYFgy8f=OegSOy36eQ^%jmvL-!bRFT@=IMrD zM(+j81>~qO3a}3#Bm!ld0{t?WgKKbNWk9hIkn`0^fb4No0cQiA1c(vDDFWon0>@Sc z6>&Z<7{v7{fNKG3|_zV{t5q5yF`TcpYFVAm^e>0PhC`r&op)vF#9i9@onO z-vnF%_#WU&z)t{I0e%j+8jyYN96*kMK|r(*XC7d4z%_tm!|MP!>Z}K(^u7Ub0ALLu zb+wHKWZ&d9Ulc}BJ#S!0<_!$VNFq3nB!c@+hh*L$IL;e{j`Ie=4YD}A2aPMXxH%Sw zr_pJvE$(KEyVc?zwz$VE?lp^h!{WZPxF0Q!T0W$F)bb(a8)9+8EpCp*(I%46Ew?zR z;Ld0%Ot@NBC zYW}cKEspl$Qc!nwgFmRn(VO?RMP~8VKp&MgP#NLV)^|gH6tTVxMRKjAa$2wwSQ)=4 z#Z!*RP}ad^bo&t3OW~6pw(IDXp%P$>`#}eiG<3`4Mh-ObZkhZ`S9-ThP7dN8y?9R! z8VBLY+Qf16syt&p_j{w4QH_q=dW!CAry3mUAMj@6Fhw&X2eWpM92|YxtMsQKWgW%& zo1kaQ*tHj3awUw&wS(oehR|dg)~-Zu>zxXf;*DYTtxjqqZ*m)N3x7d!CzyU~<86|h zl$s3tajEGo468P4wq)0o;^QgemYb^5fL$BaNxW6;CbU_@y-ktJk9lVt4k7<4cMLcU z^F0=@Az&t8CqS%_s!f}YfPHZd?xl2Kb_N`YYj82OVuGn^@LXJjo2g9~tV9IQ$2IXU z0rmlW8xWj7_%0yh$*~y!FF>Xv-y)tIZ#ull(+r6`&5+2`g4?0#eB9DeDg4~bQ6ZmG zYjIw*AxVpsW=+@J;1p>kgrrMOu{bpxsuXi9jxGBD{5p8!*64s~_3W?=8-JE7 zo=dqBOS2;C?17>%>A93^z67N>Iz+{q6euxRt&uP|H1cJ*)xxk$%X!7B6;XLF=JUEL-_$yrq@ObLxLRSR4VQ<(nf z^|AoE2jwzTY<5hB6B+Mf1J({5G)AA9UCzA1Pyw3v!pCRFp<7=^CeIrIIpyC3$mgc! z$d-WA9N7Vonj*UaZU*cRNKKI=051pRlFb!>Wb0P~76V=dNHOVZz~z9~0CG6E0Fdv1 z*L;Qocv-GwNW>0?sTZ zLHEwy-N3nRYcNmd#}4um-=K16z$No5O6OF?YrkxP(tdjY9=ZLRQ%GEZaxdkW$3S)o z+nSQaPnJTdUsDI<_~SL6My{9{q$$_%UQk$j5y@jmyv>BcIU_))Mpn=Y`bSJwMLwX57kRX`K-_$rbOGjUGfT zxs}5Ok%n(^HT-kt#>yO)n%R>RhG*tSl7Q4c6f$vH!=enp{`5a*4Qn}M(>j=Phr5V< zEEFzs-;2}FXlq!~&IdS|IJ-l}PHR|{1o#%skr*;_dai@GI~V(hcIaH@K%bcgld-eq z^S=M4H7wO5H<-KugF4I}ceV~c0$GUf@-Kj7|62jc{voHRef6gRd*OOFAcx&&0NI{pc2RIAxB|r{#F9NRA*Bs`b#5LOq(QNMtUCe9kr<>vx{iA<^6=be~%s zs#oRWcan6-r?hYi9b`Ne>*Ks#(_x0LaZ4<&%Hp`fDQUSoC1ttY;3ElE%3k+i9PO1 zBP12|(jLn5BT9CKx}zq9Gf*6h<_sf&F;2vdu#n{D42v}(-#%R=XP^-EPk6W85avnx z3V8Do6S(xeGqJ6k&~Au~KxaUWS{*FGhr5`$G5deC-H^ihY}}g6!DzWl z)UCp~^WaI0d=%GIhw3pa)D7gv)FE5$LXCeNEt#3W4agqz9w2+nM}VBod;-Wqeg;V1 zun+JAz|R450KWhv*Zl^NqV?B+%$wJ|&p3D);~0`Ljv=3Ot&a6OH|mfNr}rdZqd_Ci=GnGqKE&=7G0^2uj_W*9VPmoXweiD z-D6o~i~cLPvpC(Ni`_z1^fX_ZbjeXQ=|yPL19127w4MFOpX8qh8({Te9;~r{0gQ#U z!vsD(87h)9nxrPRbhmMitciO>ylH$yFTmhprt!RWOpgffw-uUd05m;-op_|i??+2z z#s>h|lD`FHOXl@FeZ5FulT$FBEt~mD%VtPgHbbJgRB$(GIvO;b^Nhv) z)#AG0txDSCb;!pxQH@(?acJ4qpQnV4PI(XmyHDJw`4*XlR;5?hdeYAS3}M~!)7HPm z2qg)oQ4-V^sdfPy(F3eSs>XJvfb)WB>uvzqriryRGqAgrvVM2kx(k^bwzUFLCc3K@ zgeIh@rNL7NZwq~&mVa>C0w1=z^z1zqn_t}43LV5?(e2D#|8(kZar= z*=6UQV@w9^#dCKRp%?MX>0MYFU56{<*uyB#@NLs^%wd?Vg)N9{Ba!jl>vFf3v4T%? z#V<#^v313Ke6ILc5pV9sF>4s^=N_|ICZ^?%?2GB7r;{EYW7)#&LirU@s;7=8tYKJ+ z$q4s&)z-7xxg0k!id@ZUE)ENvgE`I*N;J$s%BCm=AKJ*ptPXL}J5%gH3xF%ax=($@C5>P_w@Q(5-A_i+Yq5~&$CAzQ>h_e5<@S`8<%~Jy zL&v#6RbZy7<AuM&t%`S_QrMV(&HkrZ|Xj+2GF5X1dD08N&+Q>a7);0Cm z+eMQ-Dhv5x`=MiHJf}jA(;xFu-ghWqH$dzih@CFL0$h&*JQ;8-AS`n#p@RGRJ%i~FO+aVJRb`-H_kYjH1F93(SMx6k6Z zJ0xjqEv`Mdh~PTukk2{6;_%K@tdDP3(-l}8wf9I`)VZd6*Wy03I4ftRtqY=hjjXji zM%F5g7-@`7`52?yGBYTQuo;h8MxaNipbUn%>sEjNW1y|FmfLDC?&X9J{F(ua2YxZZ z$VQ|L0>cnuuSix$r37~>u4lk!sE$2Sg}9P8Nrl*~g^oR#O@@cks_fGIq5J!Lj23J9{`*Rh^^eb&MnFI;$Mos5)9@HVfnhpuwI~MnWr6bdl zv}9UBhfOJs5AKi$f=-JPAX9Y3s;#t=#w_F5;~q$I6nFawB?p zB3Y7cTx}MmZP zHa&q}u6BU1iyJCR8vJ6QHFDULI&f1);ozs2rCqdfcQxF}-ejR>6ypX~erztKEm z9WchF@G;<01SsK=@*Ue9eH~Xkca1zMhVqmgQUb8)BX^B>{}qgcGx@uBjY^Tfd(oX` zV&1Ic7b1B~V6j^Apu|KzN!zBB9WxMSyT(2TzHyAd)?rwTi$j^Yr4;W6*nRan-@+Si zVTx_UJ$4gvsZ7?5Q&}O#RVjBpO@umRB&(5ctLqLjnN`#!&_S=nu_lOmRz-^~R_-?& zaVzsR%vrM(nf?HW<-hCTj_G|3- z;05Zv0^+vZrw%ec39t)bUBF&|_|i5w3J{0E)pWE0;9^`i0$d5$6fg+b9FYB}1t57` zE5OSEj|IE|Fca_|z;=M-D187Q0qh949k4SX>k7w6f-eGg1!P_I03?s;3HT}C@qqgP zVSOz4C17vB!+^|>ZMZQYIT5c}H{;<&7-L9;F@}83n>yC-ysJY#RXaj=(BfJlH^E_R zU4?uO1uwx-@RIyySln!j<8f%AqX;H+;Px5^ey?%YSlkU3$8Ve^Ej4&a+IYqh0rInRPT{63Bwoqe!L-PtQy9%);6OPiN zf-ZGMdHJHus`AVwfyy$dT!N}u6uP3)F-8+!8hC12pH9Ee+1dLKp%*_tCF}Ho7k%}+ z?1!=^b=+`4dDG2Tx7l{mq-!%TTXW0jU*2=zr%zifXt1;MHzRLZ_C)`V^9R2Bch8^p z4tn@-qsiy~^ZlDy~l<`17_-=Wm(QHMq0eu6|=LFTY~&u+uU>TDh^Hq)XtNX%D0&zq9MU z16>dAo3L*Exf6UzHOHK@>>b|;Irr?@KlzmxzL|aQ^jVMoG~=^dF8J45e|_zv;5(f| zZEnAG|MK!XLryp_qUWC9y)m!ixfY>1b#@HAYxno`qhJ$gp7pYF>xn*pWI?*Q`&`Q10MePaFQttk`^5d0x-SC{HVd=n@%C*o=EoP&}*ovF&2> zX@D57=T6iQg+{tWMiY2)lO^r7vcVg%`7pKDLrtq4m*vblv;G*H4~I>!hxl z46iZub1Y)Ko*cxm1<)ljnqUOJ_ZwXanZsSr?U2&zp@vjb&zY+9am*Iz!A#xE$y9YN zZ!j981RI4S4K$9c$tw|URVrYh@_%*-G0hAHqGu%$s12P;38Tccu=i@qOSnvnq0mH^ zVKKc00U6VjaEQh*ohlD=E+(?2rQtv?PSN}_lLY3WR7U3RoE(VLcbD&Mf%4(*sCKwn z>X&s%40W_GEXP+;aH*DNfu>2en1IHl*i`BqC$Q-jV~W&JFf?0GR-x0W@({CxA|)L$ zJtK7Dwg)beNdhjD(2*uORR>@anIyQ0N#IBmohl0$ug8ozT|Rp4Hd2WDvxcOJPSp_@ zugCPHb1wY2Fr4Z$or*Nksko=<#W8J0(Iu-8{u8r*HCV|qV;;J7V zX`)lHg?c^gt#lvdKlMd86~$9J(nO~^4j8Ye9V6kQjV5p>pN=%qsk#CazSp8*Gtps8 z2|v`SNP|=n8hN{^R9udVcCC@LSoe8lyg-Mw@q&40>Ioy-t3I!VkU4s25*h;q39J%` zLM*m;twe@FQS0zq7#bKcIwv=O%$SiA$BxViOYAT;u((7_7Eox_ z_UQQ1qa*~zX80WEeivO1EfI(ru&E}8SqSXnLPCU7bP=Y&7?lj)8KO`RibHVh6!A2? z?+1PWXu3gCpsNQTPeVBb8)qqKChEbpF0SL{w;6qH4QQHj1rm4>W;ZLdWJ6uY8nn`WO*LNaMbbOq6dD=$7^o zqD18zh3IEN)3~qDaWsfme_N1WC(u08Pv{cW-(*CO?~lcBc)CROw+9iofktg1f{wGD zc+ZRB+G#cj?+%_WQGU-MVhLzY94vH+@?*bw88n}0x8FLmMD@q~E(FaM zO_wOY(TKPkG~W)D@*OF^!eQ9mgr_@Fe&wKfI7g8s>>mY)ZZsU@G(26R_gjS!WJ82Yf{)k!N)T}$XqvG@ z!BJj{*Is4;KYjv!B3!)u_Ts*Gf^PFfAxzYsXCb;78)1ZtmtPt3TL!wfCkbJq`eWA} zh)%MA9R)7Y`}iFBttQ=6p-WUgvWw3_)8-_hOO#&*B6@))Z<^5A{t+R~GY0J5c|+3( zCF?mmCsOJsodmakL=ur*vGx+TZMj zr5ck3YJQYR>G*$(O$j~}H+<%unU5I*hBK*Hl#<56EcC6+^4Psh1_?YG0vJ?UZZ%J>H zOui)Tdw`%A!k+g*Fi zv3DNVaPp^(ZXC0>ABMGWao-$xy0v&(O0+PR?c9Sf-5lh1zYcFl_(2{12g2O1qr)DR zvNSQ9GV!mmG{Kq7e+^Ci*U-dKSlOstSvj42sb`r|*x$2a_LS1u6?4iWtxZH3m!Rp1 zA-~+X#IG?6pq1A5&eS^Ne>39+zrIjLkG<7w{~s~u5N%<>D($z{4SvmYxC|xyhFPJU zE^`C_(ah~D_zi6t{C02CGP=0!L_0W#U;};BfTI zWy7$=g-4K&vjYPjG~4j5yx#%%EO_I1uSi#kF_Dh6Eblt_5zZ(GE@5ZVaH(RR9!ni( z>ya$K#+;7{=az}{F|D1{Mjb55WmXnbAklxFZ7F1#Z3V6=?wjX1)p3F(!3nD%%Qgcr z6>t`OJ*E7PA-_6-#gNar3BRlxztXkNkWVQPo~3Y4K1TQ2s)EcF+v^wGLI) z7qweTtKULUL5&r^Vr#^2B2sy_AsV{-q#Db_GQ0_Iq&_T@Vs0R2jolhc%$E+F98zW7X0$zX)Qry|&i$ps+t5H# zh;o}#Z$_H|J53jrP2yBg{seKxhJJJOo38_egl z)Qdp1gtx&T;WS!Yh12F6fGXTmN-rm3St^!^Y6#C!<*5su4_uUx9=So`;2-*$b+Zy)PK_}nr^Xl(y$OQ*P}7Ot1i>A$xD>P^!KLbukE&KQuBXKf zwKyKqkb9I^92a{8$N7%r7qqzj7RSXcq2pOGp-a~xpYsU%_c=RQfB!Dmo`N)PT_2HL z`!T#%aY6J2Obr*!UJ=u13<)4uwEYYuI|6U=WLM16_^Eg&4DvGza$$a^!FO{eyl`QL zgbOp|Q`T1mcZH@?9CuRnsuZVa+O9ml9cVAS8x?~O(#S|}MzHKQVD~aA1d||1JZ^kG z&{~`9uKY|VlUHS=*pE)9@E-@(cGZ-ZcDg)dwdmpPTkjkXhAct=BnHHO9V)yYkcT#rxZrj{sh(vu_B> ztpa^<9~J0^0CIQswMT$8w(l4O_HJU*r^xZy zUH3KLD_tDT@C|g@I(`Cz;h?cjwGXOpQ9G5SoRM1n!P&^F2;9hX) zl%GCC6)>sK?tLAHuudLD+j0Jsf~R`KgN)NgKEn_29`&Gcq~&e*KfPu*8%*_&wSn}q zhd?mNj8FTTs7EMc&#}nR9(>(bGc$wqEo+yFejoG6MoOQp7}5CY9?F3l3UpaehX={! z!$9b?)UV0VCxxEU^it@q3p`=+n*1E3=&-$}Xe13OG~AV+gJ(cn8c7hFg~ixHPz@Lh zlg7p9f7AIBI!~Q&loub%M!32RC;RJJR0>1&eO+*K^6dAs>cjU8p8VBP1h=Y0o+w19Qqj#q=qwdF z$Ku$F1@|CAlHx^#YCxClyowOzq-19gLg%T_n+UPrB|GmTv_XaV`Oq2_+KW)N3Vn{y zIu-f~A&y+h&VGb~Ds&K`wJLN7p^Yk(gkN%5rZSFOo5Y(@_Xbd7vifM8nz}=ZgQAikG`lqA9`s-745vCgx3eyW(cJP!dh~5`3)3VvzQ|$E6&Ds+cpojYl$Vs^5SGX+ zEfrl~?=VjtXQZdXBVTEHocr;l+)_1Jni`FiVAR78bk}*UJI#2E?3KeUAaY8GIPmX9NBTa5dmoK=3;C zUB)KB-MGF0@L9l%0bd5Z1n^bB&46zJUJCdY;N^fH0zv{)HkPge`~ufk1AYm3Eg;w2 zuLC>?_W+&YzO!tAm!&r0VzHI1+X9B~7N=ADCZvcE9@Fu{w0UrVU2=Hsb z?*O54fvPKm$#|zf0Qv!c1Uv>1a(}QBAijYMVwS>>>VuR8@l3(NfNcPC02=^~25bm8 z4KNK5A0|8aVlIdejHz5dcm^QpmjL49{@`-J48R&deC8dz5s>t^1CpMCE$PW6UqpF0 zZt%WaHU25U*}y-oui4k}-t|m}A(`ng@{T(4nIezCKI^=UcLI}MCxKDM+=TJIeZ-Y)}9r8KQ^sgifzf)I-F#ksA zJVn<`hkQ;4geaf*oz6PsbNV8*Uf~Ankk83OXr021(IKBxgiy7@ovK4VXC6Xp748fj z@;NIITBC4h>yXc>K`5wjn{>$MT!j#&9KUm&4&gf~gru(C)ghnrxy5~DaY;#rE=7mz zdYArmQt>;!G1NKL{YAfZKdm1T+&(}6W*$r2uQoVzrmp04a$$wmOdTPCTM&lsI z_@mcd!<-VUpuIwsOMXm!@v%%e&yle$ACS*53a}X<-nRO-a13A;uEzp)1H{Tqus7g% zK(>Jbz`=l%0EYrj1Vo-xHltMF5MPDs$$)I(Se*#6Zl?mK0-gmg-!(HN-!(HN=EMZI zMbr5>vZxe(Wt2$hP6Q_rI*uiR!*|G-qT*Bk-l5?#C#|Zd=A(gj)hk;&fmWfDQa2?v z9=yGx(Ib2_gI`R`-Ci?1vkw$m;tSpxaTi{OgOE-&RX{d3wkW=8HmA?v-HVV+Lz-dm ze`LKYhvtN>`?;ktI#$`58iOQRkqtg#YoZtq2>~*uQiI2&O>oJVMRDJV+orUpA+pll zON1(k{6K&-a+du>l?W!|-PFD0o7Hb{SthB}uc;p&uBK}|7RZ8pehe-_;>Q5C0-ONY z4sa46o7G8xWE@3+Cjd?ZJP~j*AnT6TEJ7)~EF>``3rP(56blqwwWjkaMF@g}h@;Yq z7A3(!4AD3U8Y<+cIZBP=QjE}L>yTxQ(2JR8);g-{OS|g34{HRYk=n4xBW@RHwg(P3 z7%38SIP@0f*u?1E9BzW3RTE^;&EX&sLCse54i58Ve(0GFkI#rhlbo{FFBCBPVG>Wg(p$F{~W>y92HgmNaHZ7oT~ z2pzjAorzz}ey^{{9?|77Q;%+oyeH|$!rv9y7E9EMhHFWJb8s`#<~qGFpEFF3 zb_^G4%%okB=$~*oWYQj15}>EDELhZ3Hch1rPhD|I7CcL#<;T3k`nbdht6W#GPCgrE zU}{9~1xS{QnV2&7(H}4e*O-w7a{&heLJDw>2OOiXS(XxbQB=y1C@N*hhcy_9^*dX2 z$j7;wO5s-~dxWmm;=E`Jg6pJ1eznsgIFv}IJ;BmVu{aC`I_-lN_a}>c(c)gUI7$O~ zDG)-_L!;C68hYJO&Uo4!ia*qoFVH0kh#Bgy2fmxDEi(<9JbBB*k!`uOe6E|Na>b|- z=wzI4hISl(uhFc{{hI@}-LJ{PJ&ZHYR2PW88u<<0G0XfdAcyDg0hHy=!qFTAY>A2DzoQE|AY)GpcTAcv(%I>Xl`O z0`(q2G6!q>V-~6qc17~G$qVd>2;MST^+AsG@sB%Wc)nyZD0(-8Vj9xq z!9No9QY$LTV@688*0A_C94spJh%73NOO?32ha0bp1B(?Vg z$SjuOe)?_^gXj|6)HqX594t#T5^K7uq0|LrLrDRo9EYt-wIoIrBb{-LDZH8Ue_CJz;S>EZr*>_nO7^ z1v`-Zz~EFULY@nxK{)ZEy zvSPNyO8D?GiIKQ6Zn6&G6)49R$guH-eVcfq%VYjD6)m(05vD9E@6&M zG(3uqK}8>#^R$l;=y;AcwO*3H92#01CD-vb@sEOb*5vwT-pVy7A#f;3pJjtb`iXYgbayD$dG8=7u?O7PPFa|?lFtQ zlAy}P@3hb%pVP(SIQNkJC^|}7ijIQ2$l^9zoE9fBGa2G;!QJDv;Ag78udQlqT5!W| z`BgK~gw^C%b%RbQY2tRwx}Y=f!rhK3&e558cRS`*uzOmfiUs zEqN4PW>|-)xv}AwDabT#%j6(T*H!&W%jBD92KfqC2NGSbvfa!}X-O#<6YAh?pV|ly zqPAv^&`RSe+m7J8RX8|nPnWJf`Gj_13XTygXX%?=Gql`kw_e#eG$YGil#bNwa zc(-;$rXdYq?;Yv*Q4aH7yLl>`ntJn8_CJ}SxL-7}FinJ$0Cy8H83RTvy08qY1ZL62 zP660v$jq`M5}JD8bD8?d#Ea&2J3u~bd;Q`UAS^>ILo(DdWs`fyK)ebN2&p z4=?;*>VGUl;{JDZFA#&a>VZS_3&eRr#d;UxMaT}jUI@tgDh1@T^Ewr9F1!rY49QTYMdv-ory^7`(=ESCDo3m~JR% zAS{f9Az>^G$`3fE49=~} zLR(epn(uiKG;RGhqKnF~tW&@Ghac0{-^=T~3@pp#^E~VN8*yE|dc0HBByHN(xoJ&c zo-ywbzIq7d9o$zxG_wRYR%>RYgjS`7W~6%$?#iEqf;vrRr0mKsVQ60}qPoH8!;JJ+ zGjUTML`_?NKVqPF7}@^;p-_H`cNeqFPi?ZJCht(%hTj2uj*o|p)7FyphF%Em=+as&Qw+? z*1vJi#Ivy#P&vjtNHr+Dt5cfHOkHu-If$tUaD5CF8CaN*!A}+jk9UE61-3f+*!ibXPwZE8AA53fvhPiJv(cdL zsNy_04Jd{kB+G-IVm!e^$m+?2`1D+DAl$O4qACyfRFA1`(Yf}2Qz0q zLyGe>g?^7Wfg$takwd!A72wAzq?c6{!G+Ctn8}lwB=gy0cqgBd9C0Xfg|6zhsMhZI zHBV{l2{-w9p8B53g;VEfyBdvwe_R#0IR^1MY8{jdM40@-HFqLcq2%O5@Jnw;9-Y7f zRK5B)p_WyH!Ar3vqv<;gx;7D`REc7%*5z=bB0o;dRPaP^pmqY4i`-_R+8 zDrJ#TSelrHr=#cl_`W(^4ld8a1OWN&R{(Yc1TR)cFM@#MaD5&i zrTYzl8vxe>ZU#i33_b^V0pNRp7Xp3>cqt(7e=*=ez)JvY0e=UWjC*ee%m5@EHjk8Q z`$77eWxfpfQ5w(9z58*^Z5s6a;0(ZP0p|l=4~S=QZU9^kcoX0)fVTqP4R{;icECFT zcLClB$Zedv0NDUAPz2uqybthWK;DP^;by?E^flWqWf%DXh#@%^$B@`-7u*M$&d0-l zDurL!EEYN(ywkWe9TLN-l9tabbSGQ7=@wUIadONCeXMOAG=BT_IjhbE`W;2b#UeJV8JP?MMBn~REBh!2e|0djJxMv_Y% zfFB8O+$;pxnhkp-=cn+@>+bN`@R9MaBi>MRX{QBh!!2jd0-kwHhkpPaQXDvURq4Wo zZaI@2tqCZS71b25{3LADWLS=73TD_M3ll9R%7UQWq?ZE6gE1$og+k`c90n--amcr! zlNG^rG8c_Ai1}v!q6;b?c@!PDxG2@dR1y=KYKdmnCwsn|Z|W9J4&M#H0nB zrNbPeN_6;n^cpk(WtWmwz-!hWdR(vp;LCu`^mRVqOSm4T@#He3J5A$R-=t^nTL>?c z6^3N8!jKrK5ZsNLPOS6^j_Zm-$G$1JPb`kTRB+@>LdX6kIB-CXi)hJJV?(Y6Jm?oU zVB077BL1D0+yV62@JDLNw;FX zi)dpC$JSuz&f6Bd_(b|JV_9a8IDoANRW`AuBp%r}%$yCkW4cb!Rl zk=m)=U0c1gH9mtIjlE@7>@4^UryYK0tB`32S-3K;w+^uEbmVAWK+=+9orN;E-!s#Y zhHZqOeTZ9Axp+whzQ~*lxp-)!<-mKK;t_IE&y5H~2!51lgRKR^?*;Gjw>K*)R0MD-JTrZX^iDCt|9^Ysxs; z5%*%XoA-ELJ>iNWK+;|S$cmT)FEeX~WM<8fPaXdj+(u0&TupG~YC=a|Cb)eT zHxMmCa3|^z4$)ZLR*RFRnt!9oHpVSx!Dl#`_?@jnY%pY9=1~#Ecqa~3rJTFTUWp>O zzaeHCFZ}WFd^zIQEc@TuW*ea~@=zB##qf%G8|M4CxU;iO ztv&H#P$n4ZuWq|d^hyz*!9Ibk6{&My1I;S{ zxQ><1iE~R%=vXq;i8h+zoRH~stmL0HJo3jsUfub$i<-@!Q1^)mCv7|PnnRa&{_KOg z56rlFQKJWwy3M%egJUnN?Ah|44;Sryx683ze|U3guR706x^(_eyT1C}B>(*Mme2hw zJ@bP>hhO{V=8EY%dp!Q+0DKbje$s-AKfL4f$JZY7!=>k4I`frHODDY8{mtY0{_ch) z4;}N^^j=HH+}Wy6#`efOY%L=AC7u^2+j%&vsxS``) z=S?d9titp7>he=wxw~!CRe!zb^HbV<@$^b_ec-9)*B##V_1*LLrCjwu-HQevJf>_% zaM^Q@B)53w)lUWuYF~5Rv0X~H9Qg5!sgu{Vy5sGlb6Slk*t+!FmxJYhX}#&M2b=$~ z^|{UO8gaN!yLHW59lrbBIopbteoe6qL4rc_s_fEU~rH1=z7yNX_#dogmeEbQ+u0H9&JL_Jb|K78Unjd)97(Q9t z*MCjz{byd`Trpt(^pis8pE$d)SMxcaP=ZwMKWET{%A2EIq}pb3Dz9f&Gy$$64S%q= zh^l!sL0BQ$zh6{tMjDc+t7s5`z9KFOYd6vPP>l9^-o`IumKDx#Nv;DLQ6o)RN2T_9 zHrEm5%)}%zXu{m+9=qiBZ)5YJz~%Mq#4qnfm&l+AzhrEK`09K1{w+2iP6=R$1UDPP zOyCk3G&vt}e46EU;grGac@+dK8C@cSCc`D#xphVN`(pFq;a1cS@?nm2i42;s zIzi^#89ET>xhQN%KBhd044RAwCF`(j$=;mU@=*Bmdb07p7@|vL(4?(II~zBpUmTlH zQ^a~bnGyAq$e;-)S-71utJ!)qH9lcv`)RK7*%DDdi42-d1|?GmCauLwcITtEWITI- zW{uM&GH6nWIHn$(l+iafpH_(RdY+5OCy_xD)&TRlf8)0=$L7Np>h+8Sfq7qv44ND{ zpJP=%qa*T3WYEOq^W+)dPmC>3yO?}3WBPl0MZ=vxzOQex`d<~BPX|TAMIrNC?PK!c zsO zHq0|W8(8vbY(B>+n!OR_=@OGq*Qk8<&c9|{Y(Cu-O&Rhr_0u&bpYDpLH-1^qkNwGq zSt3J`{i27W`8=XL-DC3Usc0x8F?E}V9))!7&WDl_3{C-U`bAHb574Ss1!k&rVzz`B z$1#|}a*2ta!Q^X9cZH#u3w6*4*v6KIeT=T5#hfY#tavjYq~hsu5)6!ygXiT!jJg+e+7PCiVQh^aOI;KcI zg`v6xFhVpFj+F$!^v_1Msdc@9Qmpauf`SwDp;b8lj}2*q*jbOFPJz$N(F$U#}>R~RGk2%A7!FZ1-uhvf{4^&*fq-uWo;>w(yK{?Fk#fF+~H$$kY_)O?mu$O*uuOq6L~`vB>a=( z__SdoYw_l1?cEIQJt$K-+Pg_s_HMReoNS~T4+p>s7!QSB8|^rFCAphU9D6sZ$*>RN zqRUBO?`D{3!TKJG&Sme01N8Nvdsfr3na8t#a5C=s4rm7Gv7SKLXNc$kybYPe#YP?= zf({%ARq;#o?QcZt@xOt-ePxx3FYi}r+?T~*Ze$)o=YEtn_x~#3w|f4&q~rKnMQLgA z+`!^F5YbW^^#z7%{$ZnT5jsYS+S4m8rq2BSeW50wHAyx3`D4cCL3U1wRKU;602;?H z(YJqO75gq7`_)O;72JMruj^O8KC$U1Z%@aRGY_|or(>VeP`W2p$3CT!bWf~~{qAT- z@pSC3R`^&Q`+ryXwwIUeShIi9x}Q!Qb^Ben_`g@Sn~_hfj{Se(zIU@f{~F!+(sBN) z9sj@D@&A48_*tc=FM;y=tkU^QGO2u?y6{CgKJY|DY04jn*ddu{u3y7brlg+jThaYF zBaWwMn=3!Rg`RD0JoDRPe4u(5x^QOfShFHs>A2d{%uR>^jQ#N3(lcJmFg+5Wf$x!(kzc>5#rdlq{ZHe%;umb$C_m}ljvKUL$g zY!&45VkREs`~x=&a#oHtupmXCCV*Tw;x$*_c-=`~ch=Xbfb_D%!I125FeD$B3T~~Y zgB~Rvf*vJ{<19(&4q2Qreg4`0;Ro)$W>nYG6EBvYB3Xms)toS0>3x!sszI~CytoNIS-4EHC7XCVM~Ne?!^`1;Bv=TQVRW$Ri#HQN%!yD zt5>#_q=zd>dci)WqE6i|o+N!D+gzlJBT2uCc6bKphP4(#cIKP}lJv8h#$>7JT$Z(- zLS#3z>95(Y;aG$mCnqQJWf9*LJ@X{A`33EHC5=-_+%CzyIq2R8&G+mVa4cUux>CH| z_2@I7u?@hnd&Q%x1y9}F17`y{Plf9UA5YSM6$P)0b&A(VC^Ba_Ks-xqY)W(TaC!%x z4y`M0e*cHLF9D3IxZ{3%Bw2O?8z3lZ)NpuUqN4E#glY(6g90I32?``cNB|9o$%aD# z7d8QwXYj)N!fKVOwOTEpwweGEJX%rOD%E<_3q|Wi6-3GR`_2Eo+0ACb*5dbl4>rGf zzd7E_ygB~!pLsLmU@;GFUI-{>st6_ukLwWo7U7)?6L$v-Zx?DsJ={zlA?}!tMB#BU z>dPYyqiIz1xrx#{2;qGMH+{y6JF3MKg?BgjGf*wJTW#FI;+NsXm!5F*O{s*};~?Qx zfZtYz(?%zVJ9tZ&e_ZFB2RF|`3Be0ZWy1KaKspvrMD=CBxO91mnZhE!2BWxZ;im6& z-l^@v5{B0ccAv~dqkE}xcF_0xIx?aM+y=!tZk zG#mBua&d<)B4K#QI^%>|tf9q^*TLS$S;)WTaPw49+_8Qnir?+vr(sCZh99qky$^0F z+I=4O0$U*N4)#7+o@XsYJ9UM)V|_`K-f0N0%azzVbg{TQSpMAt>pgID^%8N%4n9$M z@8G#lz|ESFxI!ObHp#NF8k3GYWSlb5%>=*H{vpJcr^&`ysNQ=X_L4*SpF5jI(s!fxx1~CZZ!C8Q3-4-LT#xs5gM_E!7gsN*pfByR2Jxd5gKG$WiOMNg z5U1V=(TNQbu7j1U?@^B~hnrdVio25liNdRcyRYxV*nFM1O9dn<2YXOJ-h!J~9}#!w z+u_BfV+-1sVUHn>Pl~&-2XPmKy9@t-HHVwU-EiAoTtAqC^gfKv_3>@u4&D;RZx_nx zKDc@JPvS1;AmJ5*fBR*K-`m9hfaqk07mC*_}1^*OxC_V}EZzD2x3f%PkK-_f)BuX!uX5(*`8*!O9JZ>I4>_hZj zyTnxwJG?jzB=)s2F8SCF$wG8C|4%iLF+%TQ&_Hr0+T)DQU8B33TH#{?VeZ1(nbT(k zvEH+D*XVYY>cku#1#=YW=!dx#*!z5Xa0a|#uk9n-TTR1qJF)0yq;y@B#+;m8RW+>w z+Vv_(A;LL~OK^7QWfjxr%w`BeIx$3@J+p2GkMOJwR!zfjSu9+(g>s&WZO)@Bq^HiA zT|IMpeQhOY2r7b=m*AMqF2=mBv2T)EL+%qJZY$~#u%{~*^V#WFXNE%bhOQ9)>Zi^? z5bcjZ?S^|MMxrh5dsv~ULpEnu)-c{UOZ7<5-1dQYGpANSPg#WnJnN<^U1hBD5)t7^ zrfcAKYOrEjWv~(qPh#!ONQ{^>n@8|?y7t1|{HZf4Ypo+dqbX4#_J#M#8sw&ENEu=_ zC|g51x4qJtDPPJ5&Y3kAvoLkyi7Dq}O6Jrljj0Qb;=DOCr_HTa@tF%NMnKLSwH$J( zvZw1jgoO#68C8|ju&F7d8x7Er8cOcMj1TH$9$ZBUreccR|6^y>6EpDfx2fYWsDfl_? zOLO#na8PCKhowh_tU4#%tf(ZF>XJnLs^0_6FJ zCCl5lfrxip*g7R=oO9UT%HhZpiKZQre!Yh!Pkt=ypCeBWW5jh(KWjWY2CiR1^nl)< z+N&cdc?my9P|n`4}F3iJu2Qt|XX*@zXk( zIql#x9=1$g0~$l)w~BkoGRbBWk1CEMIhwpYams*J6Mhd^CNFpYf(C*dH^-m}=lj4! z)s)X@f{D6ZpE|#f9FDWFI4|Z~6R&C@e>he(WLhJ<%rj2QIql5MA+};D^Naxl&OY_b z{%4+(d0|!M>{Dyz)X&W{;4xUz1Rhx;Jw7=YlwMWIAv&2c% z8z={ET+C0r6{1ZNtCgg zc`g3HHZwUga#v29S>le2{~kwuH^2`zm|FgaBQTxR)&^sjaPuiGyIkf)X?d^vmtog9 zY@1b+^?FwEB>H{d%y+w5%#o>ioBRda^LF?Hf6tq|tM1swH?UX7KDWQIA3X4I*j_*c z(0CLO7WJL-UawDTTKL0mXHHugk2EcfEdF$tdU$cVxdS^pwS3}PImz+8iQ9l@EK)Lz$RZw&|&e4YGU^lM(jFL#<7ZT7&9J`xtj^At6rVY3}-50N z&VnDCwYj8iUao{xo~_QBt%=zTJH|vxYnt4? z64^h%RH4CRc(1cAB|oBW;Q`Mca1+CsmmE=OCXY6atdQgJqH=?u{Y9B9T4PO7CtQS${1`Ko08)pV4sZG+d2NZf11#plO z%H+04c})ZbvpCn)GWL+E9r?biI2&n>Pp~<`o%fbR>H$52HUv@>-`H$u4KI zOKb9W`U5Z8X&!Ksm0X2Vh0NkqsXkfTa8@>Iz&3x;Hk^^1RXPdAKug~Cx(p`&)p~4$ z>8_uI5;nogf|9&f=8wpG#r(U!XlHnFs=L0sW#P;Fdwt5Y%ox@kt00aok!{r4&T*7a zQt?I6N0xh|IsWb2$Fzk%a+<9blI_1n2*1QHU45v%R+)}Pu)k5JDcZCOru!B57tQfF zJaHG$CLUTVTt42d`1lYec?OSjdq{i@kCa3ZsYcml1MKVIJ>tpQ%7YJe}IH5d^ zZ}=NH&C-ZNpEm%*dtJ5D%_TKRwplvNES|9ApZ@hjbDe#boRzb^Pbo^pP_sBcQaY^K zbeB{|+zVN*U+7be%|`S68wSD0FgU4>qz^;p9EX;SFXQD?`TV?X^E;PG6vA6Pk-!w} z<%h@lm+^aWbM-AKxY;fgxoRAmRGk%=>)-IYxqL0yl^G86#WrPJx>>cEH<31%(@V?8 zo|UOiu{Bpmd2DI4GTrecdkC@guixZfA3_cp)ol&SZ*gN~*@n&4c{}Sos}#GtQ_HRt z7~#RczB%U&x>|`DHi<*t^85J6K+r6n;$O2ls|C9dMgqaS)$}|6B4*pTronAU)wOMb z8Y=^fCzz#Y^?A*|ep0T}3=G@x4ze!i^*-gy#Yp)u{|5I2WZ`I)(L?b>B0_Z-yAoHvkrtI{13YsuBE z_$r`d1|?>ZXF9u>18W!umGzPXNPAmxP?FgA2F@7wH{9_9Pbi<%`22ztR+bjjn&wN5 ztbJuxl`)S)lp<(Nuy5m)8FGe^IT5=NrVpq!+4k_> zr1>X>pIHfSj$k*$uKp;LdbDD{pm;ei)e2IcQ@$X)AMM^&eup1w4mKRvxgX_;j7q}@ zav{3IhS{n_MkV^=ktNdLW9gIC;IF{D;s7?8`*K>%{5ox_Myn@H`V}y(g}Zd)HkhPI zzeqRfvviZr1Bk_THUuj1y9_4r`%9R_cCWTgO|osXVG>)_9i)yeGZ%YAJm3k4&Hl#M zF_1yO5Z<5UU-1&mrRMyM0Ywlw9>UFlB6rX;AjRKs7hM%&Yhy+gqvHJ-6|VvpzADYY zfi_FhQ7}%9l%E{zsRO5#zhOK*2Hd+xhp%$u;HLTua+)I}_k_Q5Kgoqv{!uNiSF^U~ zJdXf33bC!peN0wM-lnTE;0<)}$a~nUmPd+uZrqOwQ6VF#!acuGQAuXF^>2pvp5kxB zYB6j<-P5Q?PvE{BHy{5If6PGtmUmK5oi{5k^Jj%bJ=uC@)vA?!Xqq5*qV;90SB1QentoW*Xo*97r^fw-jC3MV#y#xG> zTwT}R4~MTxs{k4E__jd0zAPRJ96r8}J@|XhZze=X{Y&(cm`KeY20hQrw%7Z5&Mhw5><9b+>if4F1wh`<$ zrfr_5ZGL~N7^I?Pv<5Pf=f=iD{6P*9!g~w-jr;}~$&=oKeWHIuNqSakCQCtiYGmYI zXu_J@UGp~2yUJ`qg{!_c>vgyvYv!l90+~>TcwB{hEKLrAL0KwI<%?xBjx$H@&3k3u zk#Lmt${1HmN&6@{$}^*NTou&I(eRk#zt4F-YX_c;=cA5~$A_fNE31qU^r9(NC4*4s+frlrK z+`Ib*`#CE64*sZUBJdG_v5|kmdnfuExjt0|(Kjv;{^LWiGJa}W{(_dHLt6SCuC%zP zBWk;$_n8iniRBR)Jrb3uslb^RNS&8184H5F&8z-KYFbonE9%eYELsIv1B=eEnV1?7 z*EU)W#{rao)uT*Ktv@EbBxuz4pq8Z#v01vr&7Q&E@D*;P%^F+E&jwYXyH7D!uY?8K zew*nT-siH-IIBG0bT@k7qHQ}gC}`KP_diA&DJXRemZKwXGYSiTL#;C4$b%Jd4_&a& zZvNf7tI(kar%01+vuPNS)Q^BXo&$~Vi0a6=VF%2>h$eR-zh^8#fU~Y<(P@%pQRo0zhyAHo}lsa39_cTnLQ^H&Y zUgU$yc9Awwj1vyqva16z(~V!jBnm)mt!vz@e5^#N5RT(<_OR*d<1rDt&PUrQTro`I z?rNCC_DOBq9fF#;J02!+w?uPqYtwFRdm;Kx@v#6V@$m>u5~~)?xgbU`^@tTr_bF2^ znAlLJ8>hm=8L?zzI!yN{ZZS;1RHpl3;&%k;#%nOiGuEJTNWR>yP3vG1+jn7-JVnyf z_qGi{`{KuKski~C>m1}F&2)vKgX~TscWeL<_(8Jh+BSUKt+qp92YO0q%JSdGVIxP50X=ZsP%u+jz{A zroRiys zj)mW4_$^HSy)iE3D&wt`^D%FFUe_~K4%T7ayPSTSt)BOkXAPDk|0$)Daigb`@i6i# z9d5bQ7at~8&8wqmWzO3Tfj`eQoyVxt#Eb3Ki7R5TpM z1uU1w&F)Ud<(Lati;3j5Mvk+KG1Qr5EOK@>o^d*jtsQ zr^@)v5(S7jnKE^Ykiyc>f4T*dzeWaDh37H;fNzEr#mpE%H+!`P$lKXvs%GjKXm zF&q(UMtWB|x)`@QvamCKXQMmPdJNLq3u(R2#k4X;w%=W@Bay5r#v)fYD-Y~2pEGVh zNbH_KW#rVm6X)YCjEUWP#e4DkC3el~KFJXqyE{>2|A6%T35SE*F%fqeR!kms+A(=j z`9H~ZAN;VO$Tt#~$j1Y$e_auc6gEHDFx?4NVmeA4K6=1L{z=9a#sv;OpevI4SLG(z zk&G95JPv|chHZ*jZ}U**x$gUdn4iPqPO|VsAb)gsC^PMCKOK%FukOce;m<-$lL<1Sx2kZo7HBSZh1a<*Z=k5od1WW^R0>3MeTQYSA z{sPz;I23pUunO1{$n_z|0PBGnz!30Q;A-IUKz@AH2lz0sFK|8Z6yPRcHgE^<`4D+{PKe9>6n!y?{BuQ-Nmz2LR6o765S&Q>X^`3n2CK=K*g8769)7 z4h6mgyb$;`a5yj-&BF-b5x|kaen7|_A*z)|11|%P0WJWJ1vUc50q+8q0`CKs0oMaB z0{#(rG4OfdWZcXy1(1!*V&FdD65z2Yn^yr(1cre9 zfepX`z~#W03t6#mB814RlwJQ zbAda7^}xRa8-Q;CBS7SNXan#a;2(kS0{QXiKY`qi>^&e`#*ct+0r7!nXcrKjPv}eF z7r-BYtk+JoBY0;aAMoG6W;40Gogg zgnJ9n3A`VO_9^r*5Q13fX<#Sdb3i`-1t7{)h~4Ikz@5N90pGCf-vPes!l6yp{l9^K z$NhKKJzLt9Y&Nzz-TxtW>^YmOTyh`ZZ0cemyq(%f$~_mSq%=U9H*H0MH_A>sA1 zOg`fT%?;4pFEq#2Owxw7)$)6}=IS+v7R7Scq&d`Di~F7CUez4iH;KzbXhGx|zqL$W zV~ggtX%6aq+4BgDaUFiq!(;p6&b~TX29Jdta3KfSUaJAo`@l1eB1%B|q93{;4ueD> zmpvdVz=0=nKrDp{YgA+(_rPG~itc8_5lU~6a5|^Hc52m#s@aDe(b%WM6(RWlZ092_ z-K1O64IdYM7$q9&g8EC$)L%Pam`*#t?mdn6Pc}EANj5j4Nsez2 z&a~Xg;jqF{y&&%TBG-kZqFXq%f(WxQsphvW|MHlxwS3aa^{wkGvz6-<-wrps&DUIC z;8di%Z~X;dwCqlCz1{MO&uop0~uZyM4qZ}UW~*}xKxTFk2SyftT2)~4_-BRC_x%Ml!dKN~q(sGn#S zXEZ(^9LK4yAXW^fhnv&Q(HS`Y(qDb;DsR&mM}EWe_20miIl3>{&h5DHLg@Z_VoApC z?o`;+Kttc;ZbXN~C0@;DasTi>fBk6#ic9MI;q1@XT0ZXL+Sc;PQD!SV=EkoFg?LZxj)-686%+{j_C1Kb_UTGhoaFT z#Xywv=&+tcSMKz(Kt1$%jFz!yD(qz_kG*SatMIM59%!DaoMmE6WjmQ)TRE35s2^af zbG>qLKhDx}8e>q+CIT1Wyv}H#)iW1VVV$!C%4c(lHaE`hq657|wMon)2H8!$lr$9y zmg^*S-`N@`LI9?Be4NW|>mN5Vl{nkYl-e;OD>_f!_n~1g0a6 zjNb{sn}F=HZUM5ck!J>8ho8t`G>HsGlh^pbvh^7sTPCl;QKGo}L30dUIF1d)FIxlQ z3N<%cbKLV<+|AP5<(gZgxmz^1UUN@r?qkh;ra6uZ<++_Llh-&(bH{3~pXNATwBoF} zLd}iV+<48+(OjM8uF_msbGtP6spimCnd4JS$3#0Af8$+jF&KdajC=KHIRneOkn2M{v`$dtNniq^lzJYvKh#1+ir5XI#-PkLjdB# zn$S=;W6L5-GSnk4b+*mVj+|@zliQ-)*!vNYqI`YtZrgANo*yY1YE$N@-0+rRks=RQ z@oz^V2w#!DT z&t(>6yP8Yd>hjy>=c|aCMI#h3v~9jj<(Q*9S;IY;xpuW+O=VkMdRtwZHT_xSajj6X zT)`E#ZI7>2e`yv6O)J(gc3b*KR`i6jxoHL0$wpT6Rpv!rn)}0y)sPd*CvUc=nA{Z; zH&TrVO3i%$+2pUoFCFI~+uHm^F#Sex-)R$TgmA2JVk*%lmUQ8M1ye-%Wt;eK{2K7H zFRruW0t zaM%IZS;M}T(*lgV4*^)J^E%}@9pou|xY6L4=WxY1m?jR`n_r|HjB^AWZuCoXW}51A z{;PgRrPw}5S;^9p25JV!t0zE4Mu@y`io3rv?w&=2m+ih;-O0VyEXMX?c6m7#4((p- z1dP-vNSzMs13Vi@N#b1KBw#LZ8W36?rBTcShH!r#@EYLxKx!)Uft-sP4BP}90%UJ< z0nmZ6a3PSb|486K;3y#5q7vXZU>R^K5ZWT85u6BY!2KlPwZO?hY6L5Q_W+?y3f&7V z1X4p706t;y>?EB->r&`+Q&9| znXp?JXa6Mp+f5#uv|hOHAJ?QQMLg_S|1vr>X@!YK=pwkY9pr3wcgWdxgJehCZjjhO z*~imEHpI3{_1sNJMi3{e0O}4Y<3?M!gfgz0a!|qGL>#MODT=$F9Cu$AcfTy=K4!yX z8JCEi{a#XWTVpxzjH<`vrU8!z9tY$*?*_~S_5cn59swK$JQ7$1>Ce7WaxpkUTf}bZw?hD#`Z<`lpl$M#JgXY2-^YZK_ z_mO#9{eds=iI)*Py78Of5$53BtgWurQhs_?FW(k&wO3&pYPK`dAB#3ntyoOf;g^o- zMq9ez%b`p$4L|#;unf##UaVm3AL#Zt{LaUZmu(+g!Hx%?r);D4@fD1E)`4*qjL+mV zSPp;Dp@J1v1&7X@${o-uYh#56HOFR;)sbmfYU)w^3`ONTKn8lLST zT8*ND0zFXEC?23o!@h8;Zgxe`REBVjZwFv!h+VOnj@Z#WW6BZovGj&EM(!Qzb6z$9 zhZ@I5BbTs__pnrPnTTsl(nvEFOaf^u0aAm%f<*{F`?BAAXAnV)taXZPFb~LK_a zIBusX94c-2Q;%7g$w8-qg_s=IP_-V)J;UEP35M|EzPbL!F)*p+;2eTcF(1Av(`YSX zW*YTfT8lDiXe~OK5WcD}ms}O~RX2-M+n!|MHYcb13rBLbY2zCUyXCx!XNC8F>A(6j z#O2#Jc4N7le~IrY+!*2AX|Oa4dkzcl^viuGjob@H$H zjk3;g`&Zmc(|%8VYWO>>vb&LvFZP&4nWfeMvu!>l0em5y8mZ6ZShN~Wtf8a`6K3J} z=8KW}8CXUZDerGi&WxOgm3)+}t_{v-(GQ`uAdLx}ihGRK?5YY)=$x-X2 z%EVDC#X7#-2|(ATtwZ{HB4Lgon+n>njxiFx4`#D)ZzSA+P|U)NvPgI(OuHDUD2lt3 zKdqL_nVZ!rIjsF}E#lAvFJ4t}t30$8Wg}y;aG-|mbQV+Eyi zBlGl9<0Jvy=F`~pw zmHrWks>7I9Ra*y1NJW6YJJF$Wg=>xRF4ka)>_Z=NF`@-sGwoZbj`yLH=5jzuA0mTu zrYg7vsD6IbwM4%!e8S^QO*~--ZPeAaiFZ@V@6=@itA)!q!@9R zkL*fyEITGOH6=Bvv#)cq+g0lupX^SZ?M&@6m(vW)0%+x{L<7aQ#%=L241t1YF=mpY zVV%#goXZ~bjq?pj_PF{cJ6)N+(~_O3zAnCzzCP+-0JmLH4Meqs=^!h?_$W<LTkJEPqluoQ%R623h8dtrQ z;%7e-qeuPB^VKtJ)ie2ATe#%#m6IgVipQd-uVvkk&ojERo-lSyH}laCL6Sc7+;8m4 zHmT86X~Cru9j$sx@sqjAe2%G|-9fXAlh*Z%B#SLcT|>Ho%ml%bZndP25P_=E?sdQb?r#K+1l|N32fP({G4M`cCGdXW0^kF{#XvkSv>f;#a3$~| z;40v6fY$&Y0j>f57I+&F$}qK*Zv*gM+(Rf*OZbo&rI3Tf8tQ_$Vq=gHD;bv6h1f4W z2c%+dD{vHW8*mEn1>juZi@*@@B_I`Z+ksRB?*l#!{0_JU_&tzHEC|aX*x?|0BgD22 zhY^P|fL(#Tt@~Ucmg$A4uA=>L5cdrMcf}ZoTIIp}BW8_nGFt)LasBN}kIJEqO+N&9Na9Zm8xsJucjA&0&CN zamzKgN^>`9jvwQQ-z}Qkrnz03<207IqufN3&v08NuaTy?bj@XIuCM0$Ywj$~u_Q=% zV>O3~SBsmfIiB1g?&fRmY0W*WIku$Yu7_pv8jYIcq9WSjNG(WC)F=3iWtIsWmcb-` zZ?;Tc<6g}@pt;92w?T88HP@=S9h!ShbDwJN3(aA$*;b$4R?iPwJ(v0~^+4OxR`1z` z=wXDBIe9aiRYoi-g!ZMKb@j5)ZY5dSksnG3{Sr6>_wmb<=!b4N%0JfjXv7MM9b`mX z3PBcH*H4oJ6UjUx-$Xks37PRav`nL84ta#LK1@Vg&v=S|mvfmB!+J0w?(17uNF_8I>Mprdtx56w-q-c^QQZ&gDDdDJ{5bkly zFm$6_y^(z3BuxpQMs+{mU83dy!-+2fgY z8UDh>so^%L7Z?~ck=U!szrqJ|-g5R`^%*j_Y)ZW<`VC;7n=4F>;Mw6NCm#r&erb~Z z1bi5Hz~AsE*oCij8}&YHT9g%-GxMoaGI0kk{&OU?+%A5XZ=_Wzc~_ z58{aZT=2C2?yErAOAUcy2z*sUt&jR?1L4B7iik=+6tajh;?AKtOg@CY4!?AxRQ=_^ zjQTN_o@6zQVWy=UPvh^el<8gkm7!`UWU9DhR*UHbZOYLmR!8c3nM?LH4z|4P3dI(I z0}8t3uQ<*g`Z^;?*~oBnXqnF;BYlX2}W-m0CKEx4t^M)IgT{G(2ujT(;mSw z6|q7({c@yqBE4e9=~9eHsSQ37t5(qLykY6VF0ILEt=d$3i}|Fu zNhQ8!HZMc*v#&DCV3)dBfrDDFljH1}InwaRdTBNR@e4W`CR>s5_!Y2Zs!KNyRkNqz zK#TbHq5UM$XkAemX}O{zidsDh3x_e+3e2vq{gu-bj7+pHcFW?i1Au#bd5KbFs1Po( zwNX?R9jlxktG(K}(!P~A_*%wjWE0k1N+1l9lRb9KDY&TG3r@u)@zjs~o;t%jt0S*h zF=}Ey?*LM)d<)1b{1;#^;9r5+z`p^{0=@obz!D(+j{*Jz$alwk zM)!LBQm_bBOg>|gW%8Pyf+BDZ2rAhprXqoV_gyz^h z(ALXwv*nJ{2*QcblNz_5Pq34vi^hIg`_tyvnAk?AC=H9U2dHIcwG&JA_P95*YHj4Z z$l7FnowvEnU;Krdr7-_oja?L9s2*0`r!Wo1>P{;*!fBKHh{y{1VY6eHf5rsDj>TzN zZ`J=^eS;6-!IpdY($?XZZg9$ctunEwurfB_XJ5Bl2D{iX=`6i;%ioQ0_U!B3%0}E# zqU2@!&!s070@et@G>*5pY_0&lEU>^*zAPb{?PR~s=S_8SyLZXl-en6UxD?~ zGSz7_s{K@yrdjt6Rix-Ab`jZFr2fC`tXa7k1=d)VHY(+qi6kVZ_DEwT82hrzK^G9L zY`i{3W#oInTw;iG{4Vs1y?}dgpAXyz90~j$I2w2Wcoh&|BB=!$Xput^++*onh~>ly zWIxVuZUBA*cehygjPe@%q`##}`dga31}n30tjxmg*BmReaIDPYj+I%s^E5}fQ@Bet zH(PU5%81|VHAkh4aKF?X6j2t}(=w@k^q^~}%FHDh)^uHKfZ2)3Exvz%Oz4g3iS0hE zDL<@GwI=jNC7#eLN;shx=#NQajvC5#F=TTdCiMQ>>AdKEC;!!yUQV-rLuwPpcNLN1 zMRA*?1cHoCtKKW6{p_CJ>2MfbwOivwiS}mv(p4XDlQOXg$&B0vm>yBwU)5g@hgd|? z@k>_UREf!fmnJ5*0c`rF;b&h(u;pd94{Z8qwts`;>|^B+_SzrQGcMadG^n`L8&+{h z)U@%LbYBRh3SBO{X&X~jhiQknQH(8T$SB7A(N$yT#LOj7Q|}60kLiPcm_EP+MQWEW z_~S|Qb@C1IouvMqqNXfTQtY8f>>LHVIeg`cmaw>Mc1*Zxjv~#SoaQ>}AX5|n>8u26 zLM9(#e5jrh-`YubDhI2&p>3Q2{cv;^qJs*?ZrbK5AM(e3&+HqfS$s2^9=?aoK$eiL zK*}-rurkDVOP)>Db3isUwEw}nPr|$7eKL^te3$gcCaeiRS+YWtELow+Yizb`eMYNg z@)~bw?rqJTi_pX`7m9G49?k91++NK=9*LJlWC>>lR;T~pUsnL>1j7M5yAx8k z4!?9YQayOR<{OExrR*Sh(T-PqEtMh~wZFkdSK^v)ash8~+5Z2b?4z~xE!dqCHwVsV z(mmT97InGW)zaZrRdW;7RF-F{sn`5yO|@%W>w}^8We=%< z<&T}GopBqq_y&|U&`qUe7%oigm5)U`3uwg7`K3K0 zf8$7)P`T1*c|;k$IO)F&F~XjE{DLMjq(4H$IR;kOp0}@d9QNYB5E{ip?J~ymGq@r% zHQM*ab)dTE%-ZK_HTRjraiqf+rmqy+2}Z7TM_dvIY+1X-jUCi#tGSbK%K;wya6C32 z%a#42`|R+qU(_?YGduSrM$E7yF}93eptd8ncC*hIHY7ajdq@42QY_AC4FuWNwtqz3 zozU_+xZORsIyVdV$TqEvlk0R?4%gwAZdBs0 z^!DuOrH`jF`T=D-4DUcpEU9cM8t}8P2Vu*~%2LLQEd|?rx@DETJI+28&5}Kop*zgH zw)0=cX3Of&$HGK;AU6Cbl)XHSLm8;GIxJyjoEY}~z(E~alCg(c!fKC6pjpCohvO5Y z8mHq#m#8pVaz%$VT=zmHU%REO45%wy9eRAO`PL_gm4Z*#70y)o$RwQ+Bpr1f;`~RU?v; zhm>D?CoNIK+Ft|B#gmSvG*0QPV)ZjlOAc#I}9iHlTDqEFIWPtT! zAHsKGU(xrJP=#bKBWA%$w2TQ z><`QXjsarPN@yZ5AINdRP~cU-LSPse0R9qq0g$;l9QX=w1aJqi1jqt`PclQys&T-N zf#ZRE*`+`hz%n2U!$m;Kb`ybFz{$X~f#pE9DHXs$z)OG^1E&F}0IPsgftLbT0WSky z3#rVcH?OErh}Cl<$cP{RAQ=CGQ?;$GI=4$Zx-x%V`Obs1K8F7zT2p5HS0 z)Q3vK9k01Q+8y4!aicVcH)L^mCziYUn!8eSkZCM;rsnR~99McuT-Ixj zE2f2eL34lB9JG{Hc>mPg51NCz!}8nNGWiTn!AN+R%&`1o`oiMYY3^aobx_UY+@1?F z!V7yk>%EW|B7-w>nyn8^W542HufUG6FMjqV&5qrbNymuisE+YV;J@&T7lG-AZnE$j ztQ!kk1V+a-tg4cypT`YW*(9;0qdtI5)Q{=lc(%F2;D&+PX`=4Po|NY#R=fnPo+N(~ zP0HK)Fg{5=C#vi&iScUZ5gVkT7LQjSVjjE*psK zjo=`27`G5Pdw`?<40Es>+p-5wzy{{QOzc`6JO;Zp2amvR$HA`HFgS>#yDkr=$Tsd6 ztf4?5Y-94~M8)VL*zlqqFSdoT#fWX~xkiBfv%ctuZp!fE%acnNBYf6YHDpHB)XNf; zBL*bp=r~}RvoaAJjpC4LyiPW~wMpaE7F=`h%j@TL5hg-4Z@ui$fn@-KhveBiT3 zSp3m=^-Slnz$1WY)k2IzCa@To1!Qr9#!vNW#{roqyl0VFho2M~nxx3k3D16x2I(~|#$XL!x5OfjZ{DVR!HeL*+#NBx*0Yl9mYy;uo7Y zu~Ys!2k4k_qvP0gat9U0k$f~Yx;D)KZC`fT@Pe3RkyziSYSXzu26G;ex`dTk!F9RUI}WYhMpf(bXhT+pPvpu(0Og z>=BKWs|(Jxou7I!FZ71fp47{qS)I8i~}#*uI@Pfc-ugdHg7yP{vs zSW$or2WEu}l)Qi&Tt~W_je(Baonwp~*97Bf*BHnO_V+KcD=)XlV&f(;zTfq%ak}Gc z#~fq1^Ah7YSLGoKr~S2($GAiSv$Z)g8F7;1SYsNR9By4T#Lj1fs!L|c5sFhc#-9}2 z1J%JCodC&~6!)W80%0NneUN~MkO1}|^$fz8QCT;mLP@)5XZBQBjLfUZIIl=Bc8k;k!)23&*e+@fwWrjdd6?zT!>8 zqLw`HuVWjqe>=*thf4ID8SaJ7Kc8`zLn7J4jTY{wY!A7i5eo76;%u#gPL2y&c`x6GZoS zanXe)6IbH5@QiXhN`=S5D$nTUaNz4Q=JwGLZ`cA+p)~@(aWTJm314b2pGD=C7ZZrA zQ7ne35K@=|D*5W5*^SCQQf2MA#7wD)3<0f%0)thBk~FWuDcDpRI2_2HU<5D|I1+d^ zumt!EU>UFghz)?%@`!Ta9k`zgWOb|t{vJ3J$fbcbz#3pJa3L@V3<2i>mjmYmp9NkC zd=7{sBSLI0Lcs07Wk4a(Hxshc}7HYO`4;2P5e@mCGI#&FWetB$6OQc70scbSsa@=@yoeq zafh#mEDl;ci{n>H;trZci-RuF;-DS0xS5)R;=tmzYmQ&d$TL3G92VGE97QpC2H%Xh zOVixRn#y={bGT0zF6G&h1*SSK6X&Q~=L|Q_fyO?;vBIy6`Pq)| zwT>131`CGlV}&^#8vH7{P=_C8G%jO~SZ7Vfp26w(InUrc=-I+~iJ}sF94LaF7F`=xLnD`Mj#M|Ii$<3;R!arW^db_>Fb z7qJ;9c31pBa5QU*y6gd6#f<#Ir}j1{qc&TUY< zRXHYf5Up)Np|6Vn?;&o@(c#%?jUDSH6h8;3r&3mn6E8#C{uhBpvShzwJmPJ~^8@v$ z_VU-Wii^r$T~t~U3p64|k1}MV1Y1)6%JH-@%JAVVlL?OTiDk2;RX-&uwisEZq7+TW zGIifR8Iu$jO$I+KIG7m8PXTQ)GFAqQmA~u*QRvdX{x=y6p-=^Tiya!!u2+0lS6lpL z9wWs2xj?F5F9#kEtOfQ1E&?_JaehJQcHmXOW00T-uotin$SKREz%zl%fLwwV20jX; zJBkd;fm?wqfKJpQ@=V};_=)&KlZZbwiTESj`<6Qqe}tp>Bkm~v2uJZpIO_U^HZkW_tN-WG>ot%Fpk}MWS{iI0Tj*IetZksD zzI5O)NBwB5=!f}2>;k`Z6Q6NyK5kFqpWgg)EdTW6pYHtAg?~Enk2`Nu?O(DsHC;a{4u*)BZOT+aQ3@EDvj>u9r1+or8pfHgX@ zE7Ki0&kOBezsbKogfI=BZ+?p#8#l=DPVJ977kLD6@ULmHa-d%z=m^y8=3*b5_f2_7 z#p+Pc{ZC@U=dNKIRaz`LXiW>GBOJAjqwBdra6W{SLrO(1^Eh<&I5gh8GQ(Q+JTVQO z{(y>ff1m;?WjI)mywgw?mXT<3<87B%`mjii(m|R-es;#Lygse5yRRDG7 zc4uN)t9LtDtIjnQ-v+;i35{)D1eV|~R3ELHFJJU?QIQ7{( zwnwFct~+k8B4?bf^nI3tsg<%|i*vxW%6gF2-!-dy*^W6=nPYU4m!P0QrJ@{DCrQN! zConn)iA%rvDUy|~L*_fhN*~w7$n-xW)5FN{E-`vYZp6zkd1LjE>}EO5$7E9vNqxb= zG+-jwM>SybynLuf&xXvAK;O9R>YtJvTTr}OMI|aI{yIVQ!-|Uviue=|S7LqRHOlT_ z`o<%FN>puq<1iI;7W9qVw0O?_K;mQ~%x!xy zHua6MvhLy6HF8egzU=la69h#=UVR~KvMk`RE;SQ+Iy%V^+*z_CECksb%U z2v`QBPI3Zp6YwG+tKdZ71$c8+K(61K45V%hhl_&T245>W%3&5Yi@|*62+!LDP z+=x75i{`dz?j6lB|Ha)GnxkG=xKS=K`HZoa$;+col&#O0syUY4dy#S<=HqO?Va=`3 z+})bHS99NK?ttc~X}(v5*Ud6{joz9&QFCW%?i|e(Yi^9@sFjrPF45eZntMlcFm#YK zs**&?u)9f08Z4c3%emr<p)s7|IQyGnZ_h)12@_9kjaTb1 zPV`#|9Mw_MsH>SXKcT3hg2s0H&tT8SXWU)18ir|+D}Ls*D(Q5`Eshzk0FHgU*hoq0 zC}!A`ofxCw+T|XI9R|zYQ+3#OzQu|ci6$@YeI*N2I5)aHSYN-xcp3*JUu^KuSk4Ve zQZGz8(`a;Vbbg2#xo$YlvJ6KSj?$~xWf98E*>zR5va27pfXCsb;Z@XH06eRLS_sQZIRE39hV-@5$_>hE3M zF@qW~axp`EhO^oE7AjGK=~wFCDIHM`qp0(mdS$Co3g&ebcb3)vlup+cckDDDk7F(- z;Kk3vi~rWm8E2WFlquHs;!cf9TU1`)82@16&H`mOO65bxml}Ns2}PgqjGvM;dp0?m zv|AkU$!b(N+&)=s>tf}KN7Q{{x#BWqHzYyv>R472Caq!dPf40B)h$*9;$r=lZd3Q| zlfxx2vB}x2?h_{`r0fnN)itL4l&IQL9o0Vgy4TqWUjx{MsxMkH4hv#s=mS=C#f^jC zUE;bGLzmT%jXTcgx4{har_LtN zRqcTa!C;%sD+|AA7JnaRQ&}c|3*<7WM}d8Sj{$RmPXP0QPXP;nPXmj9e*mrqwg9gK zZUWv9+ydMTd;z!}_$T03z}J8Wfd2q?!?SU0Y^VqDJs{PbyMccLehOq8_AlUW;OD?o zkn1>BHbj-*H$X}e8IaI8i@6u~*xkc80OWYR4TyDk>@Y*DD{f#jFbVh^&5T$<)MJ1tzk<|b&4x^>!mae$ERZl&hdYL1elxZA0@ ze`xMA&3&mk&P2;|ITI~@`8I?*OLO^}8>+d6**bTwl#mevjqwsN*9OMg_rdbsSP9q@XFnVEu@W%X5ybj`k;{XXd@E}QvtWN#oUV;= zVom3Ix{=bY<4)_^)WMk3+R4C_FS&Y9WZ)$Cx6o0ohRW>`^d*U=H|^dEUU2nr|J_*( zIj{YyLA&?52lWH1)Eqv18cA7@nzE^+jOYiFcJ9T>!4xa)MSSzBFrz9G);Y@SSnMS2 zf;e%Ci&1Bg{5;8kn&KGabmIz0j2n>!wt{ILnhQ!?j1rY{tXNdi9*MneC?mWNX%^qC z;0mZu4TCfqHC$t9OWwT{^`YxD$LYolXAk3Mr%!qP6khu)yANE^7}r!)N54{(m5%%> zQDQn;IZsk4ViA+BxR2v(NPUZ;7?zYe3<>rM%!&?kjB{it|J@P$B)nEG?XY7m?(S9_ zgiD6ib1||c7J6cp_&bqZT&ORK#=a^Fqo7bdQArsLR)S%=^7O{xCnUGVHv zJCrRclTw(WG#pMvBi+gh3KcEA7IcU<>Vt3k&B^*KiA4Rbis=2t?sFK9ICR0<%rp0 zN03?2$#ItBXrmlaUx%#=pK~nH)y3YUfC|~qRCqk%M&2x!jpK7iY}}Tr-XhDIBziH* z)nEt1V|@8#uJ9kYDDK)*$Yau=sIq=E+f&GF0PKqu+q!W&!sQpmJG^Tf`td!S^Le&-zR;CS!dT~oM>M= z5GxVP%~`D_P41&gTeCzK zd;IIub0ek0{OgD2I(GasXH%cRxbQRdh$E7Q1uOi=hhU7^$z?ozEXqCDRxajZPwZ|k zgN7BgsaQx{n6ZmJ$Tlu)K|a*4Te_e79Mq+9@q-(SA69VD#p*41JhDIU<+|zc;wrDn zd$I1+jci}C_UG;O7wtv-%Uqi;wGK%}nw#9mN0!rDg>3E86sGIEZFMJR?abO|-L?7y z;PDVF zUL3A)M8SKEeR!BeJNtJr__2p8F!IofcJ^6N=-a~;hVyNl{R-H}4p+X#^W&EWFi!Lf zQAnwu=mW!*>X|h)6>=^LtfR-qP}t&FMP`EcIW}P#=8un2Qk)Hj$H8z!L>4KQ>Ti}Y z!*~Yr@oc4br65SL9R0P!1%5Y%6Axnk{(VO$CDc(ZEB4Ej{hJs>L?!=Ob84%Ue5o|+ zDwvtpy@N+?;Oc~XI~w!V(Lyp#ktTw3^dd0J@@*ch%ujgehC;MFn)jlGx1$;r(Yc=t zLtqR(S22hf1rW!DvqNCyFM&KN>s0MfE{DpTiRrEUO|7q$peWhjp(39Tf!3`f!=8x| zj(VAibFr*!!iN*eOAS<)$v9Qh*G?HvIXBgLl`jeV=B4;f!@q1_f$s!gjqhZf=HqhN zyMH?1j;HzX5!R{J+|pdK1K)_Kh}uUK*;zav!=q^s!ZBHZl8tXF>#LFc_DTK7SfWCq zAU|J)5*-*&D&?_06wd7rvF!cA?W#i;iG^{Mw07Ur=nsBNRF2Rqq&k&(+#CYa%ohK> zA&25%q!QvgaXaMm`D1~n;{JHx`M_Sl;lSQNir{^KrNF+xNx&0;RlpO0(}5=ggFtMm zr$lb7=L~&{`$0gKkzWA!0M7$aU@WVqw}%0_<;w-YY9Ius zP!LFe3xH#QEbSA4w*n^t?*>)??*&c+{uT(oO611WvJ$!BSADWG6Zm)7&j!8;oCACx z2=QNix>E~e;iG%Lga_~wr6x@xBGM$&;ljOVx$~-BmW11{xfFyh94E%b?@5}=(j0Qm za>vPXafeh|9MWfT%QUxKbJuH*!xHiPJI$@v+$PO!)!g4S$9xgLA8PIs&AE{)wDs{| zACmkYwi}!-Jv;%Omf}^wy(36wqA+lkM03Wu>5gJIz*Wh%i89pwbjYm zN5_?^lueeTIj&6acV$|?C0zIz@ZkJNblHe#s7*E0Fk2Yte2pj3!Ewxz;R zks%x>z=T5?=B~;A^;X3(+a>;2TNU$o7D{uG!2h^UaW(>Z1iy6Xa`~65UMFZ%wKlQq z5nEOWR;Ho&*%v=R;$>GBRwkP5-{ZPuM)`9qiZg!LrJj!hFYO2*UAw2**M%90V7OLtzeo+IK8YWM7Qak#kM# z`#&n%EL#*Q{In^fzge^(Qn(I80N^mO^-W4 znnn4M!gtJ~vm%A>uNrz(+seYWRqmr!79KD+wd``{U2`=Y`wKRiH#60d!Y|CCVBU6f zajL&)d!+Eq$oO6AdM(%O^*1s*Ru#784)wPA8*k^0bD+!LcpXgzj)6mP zuyZ5KO+%dFP0nin@k7B6bL0=a&{1C~250>sF}Uh;#Ne(!MGQ&xy~L1Q-%|`J^?n+{ zn>+)(_}pP@?eCDbtgT5*TwcqPW6hDC$ilhiHk?|WSGa5O$*acoL<)PZ9FL?PFbm%| z$G_93)xTj-LEhp$^St3%Um$+jP#&9wZ{}^QDE9|i)RDg|Jn=nL9UjpayazvCu{{(E z*^D@Q4*#60%7`B>`-}C@BXVPVsLD9|b+EVl16Il-5UKbcigD@$J62$Rt}fTonmMzl zSJee8W>p5K&Oqslj`i#*lhfgW9VqX6!o<=`sr^vhmA#J2VPF_zg>Cx}EB_y9|8^$D z&p%zxoHgdwR?X8x1?ib&*Gx+2qg2%7$RQ3LSroB&0E41e;HRMLJ9u5A71tZPWy*kr z%dnVKMu%bCqU_fpIx-IdsT$WQXiR&czqI}Ej5KSpIJ@5A%2TGJ2OQKZv)U>ty2Fyp zgRl{XDi`tLxKrjHu2kG!HKxi`Nvw-qXWpu;C#mSM)jm$$+ap0ciEm?KWf`K3=qY;! zQGp1ap_0KAOjP`MBx8sQ%Z2-Vl{7|Wa90PiOOh&kRB-K<+%tO%x+3S=r~rXx+F|cH zg%zll>_oFkJLavaJ}Pqhe0a*b~6YN(8ui)!Edapx;mQx?r=1yp^a znuOY@yvZN73%pp^9#$sQkR(~)JsZey<^cIdg1`b`Banq-Igr_MBQONK19$`QCEym| zUx9q{Zv&6Rb3OrP19t<@1mYmc5JttuXF!aGjW2=uz^{Nz`!_(0R*k(twp-r;86U<| zq(hoSI;6>KyldI|j1Mf6R~>^O?$}O?yCj4rTqn!qHO|o7*_y-H+j7VFh+j&P;+ImS zaEmk-(j3R&;_h0_t<~IpnrqhF7R_zf++Q^JZ_Vw~9LJRMj7-afqhK}1B{&j4jxNO= zN0-8JyHepe&J>Q562fs(LO4!92*(Ks;UF$q+;24pQODw*)f~rG;`e3Ey`j0cHFrRB zPPA0=41PQzesMON#c?bq9Cw}(cbqO04qLHVT&dEcW1=%r+X*G4fuSK{LnR@T8=eX+ZnRwhVR$O)19K zSJVB8arPW%CtFes-5noi&$3|4M3hqA#V=kT&1cf@DfnHGhCk|BI=4PJcE+6A;K;EB z9b^=C7o6YWTAf45B)0w;8cEeWv%!;LM<4CaPHLl^%p=BRBG&TpB#Y6+-tlv3px))=|WEOwjw@3^W{>2J19tiWMAoWDwoI)DXT zoM*N=mUxr{W{{|YhQcIMFI6zzj9+x0&j#Gtmk3zV4wA)|?~K{YpU7)bdv+}L4*YaC z7e8Lic3zy`v5PHV%>>@!vhCAVv6ed)>v?d0THJ`3abnmD@uP-XuBElua=3!}@i@&8 zS0S-jOYy9QBw2Zvq+Xw}5O5-Uc26`~t}L{2s7B@O|KUKnN6}VZcv; zBY~d*#{xeGmI3MSV&E=d1@L3wOd#D~4x~GZhjho(-jAOMF*Jz~LzAe@g+m;aJNb%C zxHipUB0|~vIOSlu8=yH%D_9&wDDlfGEzek`Ij+_b?l#Tcr8%mv#V>%P{#B@&$4B5JBEwn2`>>!(5O`Lta8hCP?J-esaLH5Kr`*=0*iHKYO zxO&bwagaS1Kh9anwY08g=CrB`?uXc+_lovHGj#>EQ^fdiAfxhA1;tHu?GdL8!g_*d zX=1xXJ8RUedN?*AJ(OJu?rne3X-^J+S$7R%N=&#izeoNkWp|MZi-R}`%dLhY%F6m9 z&sR4cdc3~?`!r%DItkSi%67` zlCsOb6-8wy$&ye)mQ+;on>pv+L+SnbeE$FM=kxo`!!fUU&TC$?FK6zYdF8rr=@(p3 zzqY^ojHdP12Tx+!2Q*`%KdW_}8XM8x!m=jwhsBvY8(wZ~q1}=`8+^K~@vcosXkgms zJubB6*6IB88e?k%&fhbmQ{XngaFIQ=wxsXfD4zL=tnsv^*3`!j8mzI*TUuq01i4NG zPRq&UjLmD+QjL7W$0pLI+_TAobdsnacj#wp`yECV^TOO;>H}$iY<*_*b zVE27BvBOs=Q;QE0yKu+3*`xhMzlzd0CCQ6>Tc#FsP8UVWE#y&XHtZAYE>bI_(v=T! zbiST&{y@2N>F!STTM_Y*LEN8y2W4PsQR-CaGz9c>;sQsNiD6hXkL z*x6coi%Uwzf}d$oMBK*H*4i7K=LQBeARGZNfrMT9Pu#}V%Ew*^PHbSo0eRZME5MZd6g@Ow$ z0^Sxx30DdUyN{_ZhS~yy07HX>g49m%>;eyxF9;xO!b)JH$kOz{v73Nj0MuqK|%D(yfqi9@q$nH)F+6Yz=PKP+e2QE1VAOU}ENjdW@ld}fl zf$b2s=~-?~FpdA29++1G-Ui4am(QAIa`+LRc<>+gJ;V4(8_p>=@h{`gMuaD3Nquct zCI<|@ATCLgoNOOgkTfW9X*r7`JaF5SoE{NW&XPH06T)KwhUuMvf`)ooT(I;Acp^v- zY#Vdb)+Wp25=VI8mv*oepb=Xp2hMH;JUlHAN4?1v0tU*q!0pJS--cj2`g4quL3rTNGr)#x>6~+2o}SGJ&j--PAU8BJ z%jCe;N5JcV|3DP3+*x;Ixg1%92VSK|Zev@P$&o{Niok!E()_P&>C5H76*d8X2FQVR z0gc=;Ir0Dn|l*Kw_J`g!UKM_$L0d1WpZGPAmBa0e`u=HA2ltP zqXK*g_+3B_d2ZT{$T7FEwQ~WAg1`MIaqtGf0;UXa-7y@@2py9y~84@CdAm)}f zF1DUBuuA{~^KNeKX-#%7Ma%;hc_0OUZh?ja2?eSBB!nG9tVjqyf|v(bTe`ToTSH!w zCk4>V6T!V0i_#G)FArd%#q`iS}q)3PuhIEpU z?HKZogeYOiI0=!#knbc!7(vX*=Vw6lau^RI90Gt*#E?}aWDADCn|q*|c2 zMInHI+5rgE`HdQKPPdXmK@=r-EJJjEL&U8eoV{e>2!^g?33zx6@^@nj5OUuzw|4h9 z>gj0j;JpZuK9I#&5M>*f3%NiB1aq@qs`;BrR5H2~q!tT^YDp)1=~{YPx_V)r zh+-(R-wt=5B@rSn(Co>+y5LuPM>l)Sjp(w$JUty#jW>TS=!y5z1X+ZC4Hea&E zWsYrYn=k#2fE-}|qP{irrN8T#|9)7~{P&Y7<^krmo}R8=prlBrEI>1`0m(3j7vG>X zGRTO#TRBPaBSuPYtCXCKjO=E4)J^^`B`GN@E6dL>EibioD*{^3@5S@sSh;1KOq|j0 zF=4A+`o0X^a6K^wmzhfqJ;u12e$ykD0vzq zfe7D{cV`F(gGJmP_&T!0sNhsomcEZcFBne)ocNa*eimJerSm7^g$F;)1HN{+000KA zMpRfp`j))kK^)HbtHA<52rdGE0l{#8lLvqN76&}{;6eZxxZ?PmJh&F+0t*2ZxEKHi z4i0~l2S<$qfX5V0_Q1d*`X_n4fQK4R_`v*=yfKizRe*<@w8Z--c`Ja7Gk_ia%Jkb18 z`qF{N2Efy_3+4N#{8ECptiK!Rp4CSA;Dr6x`Tz|u>3UYpNzw@aAlW z^1-h1H+dUC`eXsm;ln5&Y-fLyrvdOsfae#9@1Nvt0`i2-LHaEIwLI|Bfx8cQa!7pt zRDMqZUn$@@Z3zfqKv({2`e1$wNIZ}an!n{2{z5nd_-JiV9#&xeEx!=}&jCD&q{YiW zrOyMj7j?js?|{m~+RKvp7y8VC$JzyL*R%0Qk34`+&gj z;J&?TI;z_0`vv%6u}^{L40yC~;3yR^I~7d9Oy%iiYUANzdDK+R-OtU%-O|R(bTau| z4F66CPj^>a{zWvv#nDPkN?b-<+7uh4!8K~zSaJNY`>X&9;s=g!DURCOj@F*;Uha0@ z{2TN)^6&HT24}+pz%0qX6Krxig0&@*9=I^&z%j5I!966z0NJGFz^Y}qm7_h$j|cb} z{}#r|)6&s~GD>gMJXY@|bZ_~V&nMRxgC$s>+3V5JdODdBz zKnsxQQa}rlXlu|7L`ZZ!Xu_f-8h!-)8Ss6A{mfdy6x^VJH7uLo87#~;@{xERd%B(`Zc2$zcX0om`X{SI=WfA_}JJ2Qe0A8N?vlal(?j+ zkF}?_DLCs1+M2k-|6P(b_#hETgzIat;x_mCZ_4z;k|}gRl3(1@a=)#mr?msW62FkG zqX$0(4zP+ov93%K?F7LZ>^8pH@<-OMkB#Pa`l5|&8< zfD9sf>;GOfh-)(vmz4B>Au?3de0B-xE0)dJNPw;@Xu+^gjoZsA4(5YffQGLz zL|i(FqQ}8G1in%bag`*B9%yw$H+6})HzbN4nTz03mx%ig{zHl$2iFMj%?VuEL88#B z#Efw(S598cI8y4Lp7cgPt40TVT=nwXX6iy)Lk!|wR#c`t+XT#6&5u2^J-g2o&)(%i zZEdZ@{QV0fZPZhKH^sv&j(Z1HE!sVg*xzg(By7`cquete%GlzZPk;M+dj1xd_?#Ub z&q}&g=1T9sb9p80W7?_);I~#+UN9#EY=B zPeg=fAK}X{puRm=ku1~p=)=utH2$0CaLm!^beFl}nckK#I-L+xa;3fEViSuuwH}_) zb9T0}bm4g=X&b78vzi{iMD23yHhy*04DBhy$IM@9yRvL`M+(_KJ}Qq4JX7?ukGIEa zx7h2Ip95RZ+3s!oamX@9`=wsKf;X--bwIMDP4#x4R_CQxO0JKaZ~d6*XmuKK-1)Q1 zZL`K1`^=_C7O%a;DAk5|2{Pt;>F+%YWbD~?gi80GD#dyh7GilAKf|+i`3{D;q3-;2 zZFWV;gO)Fu=6VmuKkM2k5Z{!Qm)=>&sg!GUk}*$Q(X^~E)1|nQKjhJPL2g9?!$1Kc zp(Wc}UbFqXYW_hmFWAENq zG&eU<9=)@?kh48H%i=?7N5}EF<{OWzUv1T&?%OwIU(#%ESen*DoxgpLY|gINqKvQh zuBLzZRf`~N5kRS0Ghxwpu+KhyBHB&rXt|@txm?SJRUvkzDJ|~nWCtAdFZnS%CukB& zia00)B!sCBmMa!N*+4AIxnP_pO6inqdS{`tTB@-rKk|ClCf*0VCRx=siNe#?W7krh zeCXp`Deh9!UE40pG#YA8 zUpKL>r8R8FK-<)8ZjXao$ZNhA9OWlXgp0nu^~-Yi(=6l~Hl{t};l#X9uSjiYO2o4+ zT(>>%_`qtmb-~$Ez0rlke}F#aQww9~fe=ca>Rf`nrLg^-ZyXj)+M15LyZzjhwVawC zyfN ze6i86_dtbxm!NonUG5_-%f}R}9n3C@x{Jt_6Z39FGt{i^qcV<~pb!JY2vCbDdHEBQ z<)*82dc`!ZkGVaZX3mdT-`;ZF=29wC_ZjJvXwl@2b~rL9RW6qcd&!dLgZ$bt_!r4Q!m#E9b4|0?yh# z8)L_t?z5(L>H5yBWF1Az_(jo;|LI;wmc#89s)IM}k9ck)3^wnfY}0IE44uDCpYOaS zKmGfToOqY+l4l+FOXpOiU%9+f?=$sz)4|x7(X3=7+$DKmuNSBAv{Ns*qREnDZQe}2 zLGEM0#^Os?AC=u^-azr_x;fPu+FFLLoNVHVkc4|+_#ubAtW}o083lG?O1^JYWANQa zsN-AsODEb{M2=*KMo<^z^Cedd-v02YO~#+**-d8L+~&)4>CtbQ;<-*ZF_zG}Dv8C~ zxLg^wHpM$T>&@`ESXzbJO1_%5!s)nBUm9PHzkTc!?M&4d=EsJ%SzWbkg(JF=<&Qr8 zEIJct)x+Dj^0nCRbFG1&f3)qj)y}azq>!)oGPM-v-Buzwpw)L?LiJubk%i?M1AmyI zL;gB`_t4xTyEeL)mV?QMd*_%oc0G&FYKj-A>rBrx%2nbN&tp7USZ1nNS?rQI{wRb$ zp(3|{P%yyYo!ye~v0YO>sm1RhWw-E3uQwba@2rVz7i|C0pvzVw!x9>YB9pOp*0>}V0QAb zqgJeE#S=}>+g@LowR+%a>AcX&;nJv{LOV?#)*~~A)f6J`q8Ias<#II)(Kn2#`c{ikOhm!{ zuc2sfd(QV|eZBVGheo60I($uMMcb1EPsgRHz0K+9PMR4nomEa*Y3QHmDLtwr+nPzO zS75(qmV2#7a^Sj*+J5Vp8=-f5XhkN5-S-8mh(1s_wzpwYcF3lH@f7|_5N}YkMgZ4p zVr!w9WM0e5%abx^GOrly=vSVj>^8ba)cv_i+d1(>xUh6n74N}({Swv#?7_ZLy)XK% z$A5kFqbO{B_(GY=z?R7oZLfyt4gIe5&(aJs@4Kv~B#7`^+ll{B`0h|?mV7g6Mslzq z?w}t_XP%U3R`U-#?&D=<$5&qydu#uiBaDK@L?Y9`V%O6rwG10W=AHNM&Z>UL9Cn32^FfP2AL-_iOkvuU<-Kz~+-ZL%ZsR zPl+*Rh@RRLv-kZgSz7ArjPBM4RBE5I9lLRtcal=Vq`_J%HmrWAvn(@MZS{yH1%EW< zQ`hww(FQ6n9}4&7jPO3{6x3z)w{`aA{rW=sXV%w)R|86Z%5Doz+`rYNy79Qh?R$A* z3{=w`&K8zg5+~P3?iw7geY+=PK1}><6u18Kg5z@3KRV-8DzoNW?Pho`nZ+G7XHn?j z7B$P=q%!5~bnG%yitP3q!;FU>`(*H}lZiQ|GS|~GQ8Ao<_WEU!udgz-q5G?*H1VU%TnI>vNI=WdpVUT zjd9FVM|#Qa5qNXNL%nFA1Apk&xSf()O5=qMiRs_gvoId96m??Hu&XH#Ht0~ zpNW1!W%Bf^m9mMha38O;YH_FVhn2Cs=RLAqSs1<=_&IJ{-CG;LUz9o$HoxOxS;Bf- z&Gy>YmWAHT7R6}9c4w`YN@O*YJQOy)|S;OM*o;M9d$6_ zq8GO~;XWwVQF)Ui`*w((c-IrN-KESd{VR5hhWoybs=0El;MTOk4@NVVN~f*tt7UHK z^B<^+cb#|ZHAo<8PxgK!HWZz&3S;39FY{ARd+|ZO|Lb{EkrLt0F2Smo7lf(&ig>Nq zymTANwm9F1uO_%d!2_LB)Op@_!wgaf7#&86qs}U?Aihc36RE5f%6o&ZCuwJ|_v)2F zn-ag>vuAnMzdc4&?lMQv#g~_pchW2FSfO8%^7x0+SNqg5_N))GBHyzLo{DixUXNDI z3N$(|{BBie8vey`enU6ml>8!B(a6tRG8~1jiER&moY|wx?t5Bz?^nC2ArDFYvdNav zugAt3AN*kAq6s=wVm@E&66?H9;@N23tc7c=$<}eNb6$4ZwW7lhSx;Ha<-G1+ZM#Oh zc8kUfp@E4#o~nfnF_(X;Ja}`faxallV^#XW+SwC{y7t>@nnFjN3|eqos(m@K zC(iU6uOy}4!ux$ct1>wQ1p~^z`*aNlTwxOE)H)nsm>$vE{7WQKk7vH}wLoFKaixXS zo69whrrzv#>PHP1wCI8jo|_9Y?Jb*8uL~*X)wFcXtCFi9Q*GznmT=D5W|dp%i)&l? zF7dp6+Iwa2R2V1qL5W!1uYRmKYm36gtlrWz=I=Url>=NwQ)O~iJ(56w$MoL0sfB5V z6&qx4y!3ZlyXj%wodAa9_3_7<7Cr4;6l&C2O1>b_!4pgr_i`$q5WPjiPg<#XDPdVM^Ycxz|t3!2sYC7Rlw zWW`0P>#GUXP`(e`IV>sn^i_cSE``k6mo7}#b)vhB-|df}u+Bc5G4y`^vn`d#qfd$! z{cc@_yFZ*~XLWF`>H9Su9Dba|P<&Qn#@GLrpwj0AM_Vud^5vGbS`y1Z+z5y`>rt^g9O990}nq1@d-7_Y2K3V|0H0uv*2dfMNejv$0Fy8R)o+^WOYX{ z+Q(4Hh&?^k{N0i=+(`bkZS*&`?=K!+;95n^u2XdQ;(fQ3d>4eYlRZ8UatrI0UVR+y zvLk6~bM*<~B(;s9PaZeuNALT>)zQe=cw)Dz%lc=jB_rnBX0!WxCAf^voKxv?G9l_8 zVBOzRQ2YHrzwOO7iX6M6eFMsKN?Wd+aK7BQ5TSb7yO8*1=HMG2Pr?bY>9^_cY>tnX z3|`yDW>uf8HLzh9-jRdCXk?~+(*34y`h?02*#F-a=ud<=w^3R3gngv$Oeem#{5}|3 z8pvcrFaDO{fga~L7h(4NlTbD{ug-b;qjNl?jTxUK*u=OUZk_nbWtu8J_i?H!QO-{^ z;N-f;Ya)s37L<(YlluGk0}Y}Y*{7%Fzo?~jT)8T|%~!&^m2I7|^yfI*o>-k|Igi;l zuOuI7m^Cx8=j66tIHYe|St#rN$)K~Vv?!laVgG>~hth2voLW68>bEO`YW5v&h)q$b zs!;9r8-GxA&spsdk9@|4!6C0_`i0jr&P(}f$y;9)m(lib4CT9$dFX1;-cJn|gtYQ( zp8On+ytCHAQsatrv_KM%dyS}0@Qtreom5m3LM=R^ici+|9elUisDdJssB3p;U3NID z-{GO>Q+bpDsU|MHZ!)7CqIXQ>)21^Kj5VF;ywf5pgm;fvrKHlfP4D&JB!2N~Lg29< zn%`qrO{E_{{v#|oS-Z_+K1M%*M;PbhedbavQJdN&OqMl0q9Wba-}GKtZ@+q4c@P?oWa`J1eUnez_p_Vgq~Krt2CT z)D+}GTteUtA$I| z+_npk)uJ@!Oc@$e-xsw@p~&Tzg8`G^r_zZ_rTZh3FXT9FtTdyY(I_0*!G7p!@zY>` zh6MLj%{-w$>~)-yT`eMycT3ywQ0GO@XAN6kV!wLD`(}eb#|iBV-=6UW#nnh%^YpRy zVo4vmI<=wzZ@&Eifvs#ZaL`mkoT!|b z{%FQDAN4n$NgI)bRiW3Oei`3dNMMK_8gtukO?`eyYGibRkCxs@`@O^I2F3{Ks{?cO z>Iz(eob3TOVz(!9)-)~fj!Uh{sOSy!mEW9H>D>LrhFy%kMWfo6xpKpmq6>AOb4!KU zs6IXOc;z4%>!$F$Sv+O8Wc+lRzPk6`+|R_puE3oG!35>f0o}iv4W9o&(nLB|B6j_pU>ADuwsGuaHL2I{T>Zo13O~ zpK@22pc=LGF-X7H+WcKQRlI19>aNnwAb{c*eB+V~YdjDvB@136l;^yUu;rB5Inx zIL}ji{duPaH}~K`pRt76pu`pw+VOIE{|Fz7Q zfCvxeH%y8k8#|ol0D(n{mpIaqJH~h zxV~I!ZQajic;=ZZ`%d>-^X>D)JToSi@eiw{yKU_Ay)R!9xzdqR z&IN&0F~^Pu*KExZRvSNg>(m1+3MvuScmv1R%FP04_opmf>3xS}W7eh3%ijFZaIQE5 zC!!=_lI7+S!!fdc?DR96^#VHmfsc4o3)dw0p1x+fWuHQKHhapM={{=aqST8L-yNjW zkISV0P?}{5yrkcg*>Uxlh<^3kqpWnAzl?p_d%4TKjFN^%=zGQYMG<*l?Ag`f{QP;; zRPuQZL$1dPPqv0nSyvG5&5fy8nme=2NnF&Ej#$y|xI*Rf&HTEa-u3UVuRLk7N@ul< zQD|A-xq|JUjX_tx>=7oU(T?961GQM->N~ zQZ#)h-<@mnv+vXr65<(4osw{~%^7?;AX}lI?c+Tot4wRh5mZwdI~Q+UUA+INI?sdp z_vW@P7TwBUW#Yf+=CwvtUyRvdvx1%bmx^J_p}JFVU*oGp0>jjg47XDktLSUjws1uQV2KME@7_Y`82r#sWDi}_f`24OX|7o8 z)(?f%#{^l`CCx)@y)LdB_|{mFokz(nJABRY*=@r{owW=Hd9CU`Cu}USEOzp!Q~D%o z=9bz2W5mDpsDvU{UwXw(^&daaybCOxIbu4qy|dfHM*ED+!%^l$s;#}RUS2mcy+ldR zclc)10RhQO&XLO^aXAb}n~vW5MWwZ2tH#Obit5+wV<%a2oar7KozsGhSiD$jYh;4_tFEAAs#GbB5u+VRf! zJ#WgoAPu3L-BI?Zc28}hnow{z@Ua|iZoQW-o+|zQF4bJo_vD*OLGq5r%`#SQdCl1C z8*wFcnn_A0`)O{F&Aycd>v_(PrzUO`?k_1Z&e+Bq`@ucD-sQtuyoCI8MtJ!Fi^tK&+U3)s!6$9~oY zk9d7E4cnR5{SOKw0=~#Fy;1fM*V&B?cl++a}*`bayJw{P6t9 zr>BP*Z||F}9p(W8K;mPAwOX7%BVJ_7)n6BN(czA|!zj9O@X0_$yf9|iU&tSL-2y>{BSTVdapGb!xZ z%+!6;5*Jg8(xn}~|45fP9>_GSl-Z+yN#xkoj-zj@^?zy7vG%t67#n$&bJLFuB}MHM z@7?o)m-yVdV^{K2)N?LFjq_WdC_JvPo(dnEyGL*~w^X?(F~_zdLRwE{g=2eN{>{tp z*Z1~VoLqTbX0^_$ys}Uu&+P^0zFZAzOd|;IS$lh&7B3gOGc48^*G|Nr*3Yc33psA# zPWdWhli`lZ^rk_@(Mey;6u+i(?}W5E?Ni5iglyd;rUsr4=49(v$jZ)m`*7IND#upV z1XUZy&#C|1U;MuQ0gr`?t+~usWBA#p4ZD7SQv8$Jwn zY@*vE!V&4e5G$5jT3z^It2(RTG20Mx$$@njy|ODBzsYh_<~?(~HmuWVc$@bi!`g(; zbymfeB^#CMJe=IjL_dxE=+Bfm+UlR)$EEl~eP>1ByE8vckIWQycW$3Kqiy5CJo-?k zcPmw*(e;&ZR* zuJzBu(jt<1<{7z)W#M-jxC#A&w^VJ;As@qftcdBI)PvtG-!lc4hQ1Z2x8c-#z%WbT z8fOcAa(=$k%Z+F5DE;S*#!+rDwurAMZaIjjnsQZ5eVh~ZlS_QO?qt9^V&s~7Bc%oY zzW$`fD1$)x>1pw?Eh_Em+^;~HU+R!^K#P-O+imrfo_#ez6)CX|hgB=86dsKGb*nkwE6R}P zIpj4oxZzr%{xe^x^BGsI<+c2^WyG)Wg@P&LQ09e(PkU|hw1gsue?GCaSbHa0`ih1- zPm(~ej%bb3)2}x|6I4`+qdY7Q_SK%OFk1aimzYVBz3z_PVL#UJys76yCaD3GnQwYs zc0@ZwrPJn5Xc`lk(!A-Mb_-WTrlwep?453-y(qrP|5#wc)!6TvKaQtQtx692aonR# zJ2^o=X5I%U%oB3rl(&o6=1XB2Bi|h7%sI|<9`v*ieHRx+P@b~VJHzt6;i)d|)#KR% ze5tLB+AF2UtoaNGQg;hS3c+^LQ1#}?1Upl{r%h#FbQt?q@sue4kj^${x1cHcHT=4Z zHP2=1Glz@2gcSttJ}+Hp5d5@Tq`Gpaj@X4S59`=Byx5>|eN(Tzf|```x!c|2dUcyC z-V3+Kj_**YF-dJw53AbFDarr9dHAHNyskw?MHGeFxZ=CpHB#YPvEgYl*hAIj6b%1OumN2G;o zvW;~2@#s8i9?RjZ`72l1FZnmz^uC~df+L9U*|%#_HE~|xny;%v=`6m5Yo_N+!kr>jF8sZ(1=3L&g};CdIOu;2nX5+11HOf;u@xJ(-W1MzKiuuw5>0}fdSwn zZtqqq{qJ2p(G+*3-{kFjW$Y*-N88uXA>95@-rHKIb-H}hwiMbI^?mnmuZvox)<~=q z<~KT0SLJssRearx9gkC4_(iAEs@R7wzx|QNk7JddxB6wVCxlN&_5CEzH|kXhA~s*1 zUJE4@ZXF*Rie{j;-tRUdHFTbqZ({Vlwh=vJ!)b?stI`n)>h*K&oPk{1V{ZgB)o>^75iqlfeS%qk8V8Fm*F z-zw-vZ97!aceco$;Q8!~-s25co!nYcp${`$GHy49%&ic2Jn?dGn3#X2hyI%<$v7t= zpRhuWgf{%0W8aB27t_lGj*DBU#0GXC@Bf_x!H2x_sHaj5!tRbZFb*i6jVexhLtLSy z9JzR7G5vT@awv$#rFh<4Vx4pBY~AQHlUP@ab6(?HYqjmX zSRW3H=FC}~vR&Q(dP}YLngO8~8mgXqCN9S`6ux<&@{_o?@>cpP4aO6*wFkG^>n4td zHr4EEHE>Fn>X2?{Haki&-m~^biOCsXqwXec+OZ7@A6-1;OFwpfI_z}vmc`q8uTz#6 zn%dqg(#YCdtKFT-jN5bMizM$i)AtL0l$ljO_XP+Ba(4NAFK4q?7C+b~9X)OqvKR1{u+sjlQQm5`{smWU}SCz-x zt~%y?E@4}#+bSErt=C>Wea&;})ZmrggVda1Uv*<8*5s*i6|IYYu zwl&54`=JaGD%;N%ik}`8cDePlpZ~DC#?^r}c=}hLA03B506?F=(nDI*m+6Ef6GdaZtJ)ThLbDaYgEMFk2T|(ktSX@ z8yZ@I-+VV8-PKd9v+Zu65{KZzNNX-M&Q%Mu$u*s zO_)7b6rC5znxG4@XN>3;lc9+D-hAq*Q8=Y#wC!p67vI^wt>U`yutdm1W)splZ9zWswvM(BJ|8=;i?mkhH`fUB|HuDjQ z-oET}XNMa%M}%XAD=SC`)@L`nSp|jTY!pXL8T(u@6l4 zSleHlu`cvRjI{`D&)t3Q!xIlgRRSCK9#gOxlAXk#Vk`hZ|6Sn<&}c4fC9ZDClQff= zy!_JOO6Hk4<^CPljJhdT{nRC%NOab2k`@lnKge5kfVD(l$~Tz(df$uQACJDqhp!JS z8c-=)&>orGvLU*`>sh^P|NTsZGy>&n7dvZyk?#sW#FNb`9VBO>ZXS#)7|iQr@oUZ! zl{(IC_ha>Ovoia)V%I3bI9_K;n6NzEWnr+9q4vpM=lPI#)mgj4Zbve2nN8u)O-|HZ zknKoF&>MeqY~`MPYdk&Zvb&XP+DfTI(*=ERy-?F0uo?&2s?I994Zlp954oFGvI#eO zWVd~jT)Q$+Cd)|Dhi@{dBH)U~Tw-g#)33blO?teShc^dgrtBK(IVpB(xbBo_2IKp^ zF?*Fim_8|y zWjVMja{ZpSwd3Mp^BMZwQD^0j7d(&e{6RgRRjI-=W7m2#&g@c$0*iUBnJBmOl*%Ti z%g3Br6S$I(#uvVZ2~L9otYsF>^my&4lVjw6fLL zr+vb@CdI1GyemHlcY2)Xjb&hQ&2scJ_*&b$dRuA{f549Uu#xo%We?BDOxlhgXb?P1 z*RP=H)*X1U?sCCYO6DZXAko?D%EwX3Q@)=*!@u*O`96PonYI{%f zheN|xG^aAm1TM#{E^pk!*PZTR3th#vcY-ohn&w$*g9tI>4{*Ht!lw zOfcyE*gL6xzNmr7&k|Op?pGEr|KUZN>G`kypM^_AE~^H+_)!TjuvzgIl{M&ky}IuV zzs^D1W(r;KvGoy~v6hr-oc)_2{-|l-k|c8ho16!jCUV}u2d%--9SUri&PZUx&;Iv-hX%Qz1yV$u zDG3AWkVzB~`LYH2(j)g2qkL@`A1F_=5#U0;15yL_;=P09$e}O%iU}GRDKvi;EFCCl zQJg07`3%Z|hJlHOVb?DfEb@&E5QORi0+(oeTK~&3g`BHFaI&%;RF4EK1=OIo1j2+t zPFS{h9I8wdH=;;^1zO2}Fzgn{E<)ET(&3*OBKVqkQclALxlnCR6 zv7%RkAvbGD0*GwL<+rp_bHMeN&|L^@N?=1Z6fm(n!Gl&Rq|i!*6g}<)$(M)=AyM?m z-S{Y9CWf_Qe4QA!7t|2Sr%R&faiH=SeApL!SUvzYT*zbE&`KW)vl^g;O_z+ws56+= zz$U2$9(GVzs2Y&Jw~`IO7aCX~(EQm-;Jsfmf3y-9h5#O6@IW<8s5yzW67c1#tCgdh zEz$*H4Ir%r-UI&6%0ysq#aN{=R$8)TQY(N34Ov$pQbElvvi_~Xu;a9`whce+VPGRL zFtd}J(FTBUEa8A30x?js0(Dc&)MOs`0TB^Po4W^SIp{6p=(n$IpylX*OC)tz|6O}@ zK(3mEQNVkfXWgns1?zM&GSBLpN-xyTOCDR7jyM6;kxLvm{?4 zE}BHqCf^Mia38uZ4RAumcaJ0%Gg;p7)=y7mJL9rMTg=$bjF<8bZ zA1L;aG1|z33{We|!JiS@452M27y^NUPA_Vi%E%$Jn*EVgK-m+JUL9dJYghrOU~g-K z$f}Tje8^Lrw@S!6zR0?A2+J%)@+1KQ7y8+oE=p%XW;V3Jn=`Vh`BU@9$fuFjTi{|C zD0OC5s~&w5dGKeXHbbP@Ec5+l{Lbd@AZB7cKwu)wW_^+mN7k7mdRFv+KsXPeH;ltp za2h;ha}yA-1uSg^)W8jEN)SBo;+>`bl`t!aFS@dH{llM#R52=TEAX@W!`}h%husBT zHJ4Ms>s5YV+`%-#G+YM{90yRdyp@p#Jy_w$vTSjhMIu3h{do~A8(2y%PPg!DTLub2 z1_~OYEYR6bK}8ehHCXx<%0~Gon1qd1zbZTH=@qwGiKqIEc zNdrX|I$({&hJ?if$CyVj2x#8Sgh>A!oVAWp*)yIGhCzKADAtN$ z6Bzax!xk`%0LDBtUJDXM#MxjNm;oZyS^nYe2DWwB4*&j61Mek)hTQ7@oPvcxVafh6 zIKnU>ZscZA@}&TOt_ID)E5QF|Ir!JN4A`z==ODj2k+bu+w_@0p{`IAe_ofSmsQor7GqOW!%3fzAcX4qT!TOb_fAq|Wvn*sGVg)d7tz3m}Cq3m^p= z9{7)9aJvV^3NWk~!@4o755p!f>@$WrfEq^SxsWL2%{gR@A1a3k?e?LOsYGURu)F}e z=~%ushb(Y1pPB(}^J@*kn~S-Cuv4b0Y6K`2uasd31#)rl#`t%SUOa#PJi?6O+k1nm zkCZZBovX*{)PF+n2%pIapIM-}jxZbY5g!r60yWN^hJ!%lcT{&=qz^;nYMHJ`4N4iH z$=!ff=HMhyWf!T#Afr7CqKVKRi_~EWsb!bZo{6MHqKr`g$y`t!q5UD^U_Wy~1BOmU zs*iyXkqpSEJrO{z&miVG8>#*QdXh!VMAlS&U|}w3f;P-g)hJga`z5&gkYNvnGhSq^ z40{snEPzj@9&*;AoRMZ@B+jZ&TqI^0_I$`H1(r!Z{g4q6O$q?m{t#V5;*a#1gwm(~ znhsEQm~W?&GAXPu={xp!B-6wgBmMP>J>(fW7Kzyq5+cy%EyjTsu*Xn$d_99Vjq#Ie7FfuxCk?P6FSO@CXntVB+JmMOdLX{27K*_?`~|3>Kf2=G2PmkR zj33zK@Fx&|)CF5qJDA(W{#b#)G{LxGG;os}HKfx8xIh9o(9Z6O--s`vNW?i4 z7S|d`ei5F<9fd!4_0iW6NrbDOz>d2~fYRB4^z{hVMW6!fiYo*zpotm2X8otX z1VD{L@Z|)q>48cd!hT#GMKM7Dyf~pRDUzT9z(NCb-xQ#5g94LGF7TymB&cdc2Psha z3yv332Jl4+HbI~pkU#@UoEP^9{}%rR$4W>gz1V;mAMrP%Fu_IR1^$vVQ=m7Mg<=p# z&K+DD`XFJfT%5g-_a*o~>ViN_*!xxh;ywaYO`-}u;ldu?6$sTzLY0i3i2nt`Zk*&2 zb(Apal86kLbYyP8g#kA?O6V_z_`|jFSwzN4#0}rsdJ#8#heXv-1|#m%gvBI-MkS2} ze~NfR#ha*3QuMM~2CQTbApTqw61aIpgB5N>97g=p{>b5Cl135##T?#7+&qXpn8OE%JPt%2tmt6G z|BoC>f_)6MfMD|nTWS>4xMCb0W9MmSL52Tud#|1op&+f_Te@G;H zWwSC!1P$2Oq5)$s4cOvB#lW{iewYW6SsW?hmJA!%l7U4He@%yFx(+=5hu=|Sko=%A z!FdfDxOaA%gnI(5<8ZF?1~we8pnAcTz&-}t+`tY7Hk?GlfxQXX5x`ahb`-Gnft?R* zOJGB7=dj^HE$49DtOa&3u~3I#jS55o zEZC+9&H!or0&F-gQ-XBC?G|ca!#aX)VbBtwdjqg(fh|sQZw59!aKknS{cTD9j=*LB zZWodp`wLR^xE_)(5%-ov(F0A(Xb2(>jyEWuJcdDi zZYTz~zfgH_`wPY3n=gvN?JpFAn_eiEh+$Iy|XdJIGY#75nV%S#ieX6@29?*Uq5T8H+A!=Dh7DpE)Q_Qt^dnj-a##iu1ulKVFdhus zfMJ_3OcTTQV3;9>nP8YbhB;$c5{BKturds*!myth239(xG;5G3B2Ej#>@ds;!){?% zI);s6*aU|8gP|Rk1`!uXqLAIU$b(?}>7RFG>XE$~WJ`;=V2LBL+N_2dDOWT0#}EVFi;K4evnlL7&Ooinm>1g9{}u6{irYuXs*c53~)L`4SW|vZofr#f#Fhr z$!Z2J5CSV*C}v5-Q~ETLEkaHCi%i6Y|e zVAv#v&0rYZwm(Q4SzYykt7?F}_XeB;v;ZOPhDFvx=Lm2jwf(0P)Hhrc5WzzYijYjf z^#h8*+@jRq>RSW&LPIX>KkFMV^QHedPzb}o`c?xET>78}t8a5~+48@xa}}_Dr2%id z^f*EANQ38pUgt~mNv?ByP`5B2PQcy)Y_R4ChIw)YHk|+A-UM3bkV5MmQuN5nE{cVd z_~?BV@E;vIs54)x^!zjkNjBu3O-lk`Yli89 z>>6KvQ42EgC3vBoX4tiBEKd>JHdjqhufGr2?Y+%E(1tS&G2B92u)eb3i z)eb3oj!QWn^uzMfd+OcW?(}M z+P);3?0+BW5YQI~b_v1s37)0lzasuupPVCGW-TGCiSJn)1KdP>F#@%#JI25y)w_R&>H z|3g5E&wfOt@W* z%CrKu2$qJWr)ne+enn7ii>GSPF#mk2Mjipd|-s7z~%>b8L&lw4LWTwto%w~2Lrnr*r$M918i8S+TcM4D@dV(6{Ju# z@+kI>#7B?lSwOLG7)FCfr4VsM5(QRO7`7h6wqw{%3^TznxG90g>yBY?Qv$_KU|0x- zC1Y4BhSgwL9fq}HSSN;Yf?kd01D?M@<5-VjaPttw;E!)8-yRGz!7y_S0~=u^z7rT0 ziDB?`4k|AL!yaN-35Hc*7(W<=(0GMN6ev@Ys&4xbbNbYRan7*ZhL4v!RC^?h4~>G4 z>7*wGa+FWYz4NWiR!?tS;OvMrtMPRN*BWweNK_x$xY3V zd}7a~zI=FYT<{=LI$Lu*5w&8U#zRxnRp5FRM_NX`eE$t*a4x%dW#9Uhi z^Ms-NoBXw#zR27-p}Og)xCe8MS+b1t#$&nquX(ZzTP%u;ujya&xa?hP)%hZStx40v zpI6p@d`FdMX3Ja!F6(~pbT`1HiQ?>g9x2MT@0A9eiq+dncTNkXoi~l27$11PF9b9& z#Qg76Q$s~t=t74a*HRT*px|)?yam|{vzM!;MpgsBe+1VCcSA{r-2I^qWubEh4mcMP zI0M18+#-SuUR+BNHORApj4V~M1sA>qJUIueKeDR8;TbFdmncky3o-&8!f>>JX1QWf z==1NCL&FJzfDZ(6;Hw-oBqgRxlz!0xlz<0G1p^mQ)Y<$IthD}24@@np*pCrV(9nSt zfiy3X17rAia^ToSz>fj(WI4oTa-a_Z4+mD5iuGPM+?J;Yt~>~MxZom}592a9aIPod zZ<6G=u9pIZ@n^o^piRI-Ra~Ngf`)mS9Jq)j;NhwShF0C$YOq`mTm%3)fPtJZ)@5>F zjtF?TQ7;Xs8+qQ9%jLj{7?d-p5-&hOvtpT?l>jB+mBD}5{{Eltt^~TO>Rg|j8$!Gn zxHlLkWw;DdH54;32q-ZUZ~#P+p)y=!5+nji$N<<^-?|~BC0?UQ^;tWpPid>Z=TlcL zXxmk}Mj<#opS7*SvVuePL0hp7h^TqrxBtEOJ-I_vz}2p|*E;9l=i9^CXP@*MA?T;$fH999i1i386#?B1e{e0vBoDr{P?K!+)W&d+E+11$1K zjSNzV``FGAaPfLR*6wlg7Oeb!eMpwF#!tkON7o@*F2Ln0epD9Siwe!!HR^eGM-m>@ zS`6IW;}G2gK!?6Nz#s(UYgEIwzf7Mpu4rv)#0g93>guZ+8q5)r_Wa1np>D>UA33== zKVKYpeq@dl#QBl^z;mXLpX&U`-w2PybJmx9ek5j*oC68|(w!f93rm~JD1R9gj z2nr#`izugID1=g`4-QM<=PAlhm~Y}r72oN=+nIQmNfjT3^bYt7Ghr}HX1e(HX+O#% zZmHtifcX57lP$UtkuE-pw_cEgA?Z*$>GJOdIGheYpECfAjW6MRP_jUT^3Y{Ug83!x zf=#E*xW1d^U(t*9n?9};T26a73jHV=ZtfOsY9bFJ12z5OR?r%y}=7+TvuCNS+_#@ z<^mrcJ1yaPc%S>7D#R!RS7!mPPzf-xtw2LVPVPer<>bI_NBOB?CDy)Vlb~m8`d0Wli4{V@c$`FQ=N6i z+U4A%KEpG9))fXJ7efE~sxB;&k7i++d|O$c_Od?n%mPlVNk^&`{e{Ur}WP z#XZG0VCZj0^~Ez^YLaL_25IMLK06D8Txwbr1O8043NU+!S(!QjAazO`RdVWa;5)y8 zt>=(J{K~aS*{`gnYiSM>#>g4H85UEI`o`?l2D3kAEi+$l*1s@=b@uvIbj(Hq{GJ@W z1cqBh=q$+v#5Yn}#y>peyprJ=G?(nW(tJmT(Jlq$e_sH~k6?7YoekQCnR0FOIc#Rr zRc2ag^Qk7YVE<$N?X&*a7#4plZsPAliwy)P3dXq{@kiB0!7i}ajTXDvV)t9@7ZxkY zFkxqCo0{EU*wr)`B~Lb|h-RfPckBeEFL&eMN+Um6Dh~csbB$H5areY>*9&PnBca?e zPKIYY%v4BR+oj80;qfVWXt=Bl5D9h^@TvA?Xlk!TNPaP2{ z*xlNn&v{nc{Lb?hd);Dxw%Fe-_L0Q~Ax|Z~leNv~%(B>p7UN*H_*-wWTP^kzi|w%3 zuPwF`r9{F~E0H$6K5jDRu7jvSa~HLK)R^7+N?_B=aEzAqY26vv#KvrNGFII9TCT}< z0-GMi^Hq~q;_jgE?C&Z0eS zWiPfZ>uj6zbjy=nSnt_q>L=0Nfmx3M&ilA^PgCEP&%2_#6!3K3!J<9X&T?8m3Y5j> z@ntIB=!@J5=ar`HXxWR=IZq$>CD-tmy^x1@c&w+E$1{s|wj9Aa{};o{qaAAf-@{li z)`iJ;&Kq*dh9W%6xg7UXapiIr#0e?etGJI;Hol+YbrUXQJjmL~cray*?OpaB>6bM! zf3Mqp51zA?E15}}3~qOhA7-kSlf=WEbi1#GJ4-JOg?-Ik?{QVqGM6Tk!8p#_*^6Ic;;{LlCtp(rv?~ zl8M3-Kbq_Rq2%=@UZ#T{b&l&R?xOU5fF$^A*lK zX7bl7d?7{$XKVlN4GhMjg3nOXxjFbm`j?mGf#0$rud`Jh&FwhuCKeXBgsSJ838{h<~!DG4Ve{5dJpc6oE2Au?YD=0D}vJG?!=+8i>fyO}30(}N_I_Qg_C7^GDo&)+< z&{EJ3K}Uif(a+3GHkf2ql{T4GrOoHOu3h~Os};d0ZN%Rv77KX{Hb&cgSYTwZVvEhN z*m)LPV=>Adc}J_o+AQ{<#eQkAJr;Y$VpQRl^c}Vs=S>A0p>48nfnaA?Y^wD)-C~?e z6@M35jDv@QHCk-5#jdm19TwYWv4<_j;ZerobKbTXhe8EAWU(U_djMra-usZYN%J_0 z%IVqI|MrXi!TW4%|B&b|?~}22`n2rq>y5SS>6*H0d7v~F-yv}Z-f0Y*Av7o~%CK&s z-CQFDw(f~d;@-&PMAbUR$?z=XC!yGgv2{afZBq@mO*DF3@zO`h74K#axAN2^&dB6! z#5ma11LWY3KNH)l^*XtaH!HqI=?e8G#!9iqz5xf!_{^$9Qq~uOEP0c)_!}u>OjnQZ zVV8~XAB8KPa@%Dq0c?!P+g<=rmX*2OktSg|=olbZfbx&>nfX-#$}%|?moy1!lO`c; zvcaEV_i2AV>QAT;ekW$JE{kDCRk`|{fVTOa6D_vVVpPVGcgRS`KZ>VbL&_63RCDu` z8S8U(vlLIE%|WiBNOjlLUxll_D)02%H8H%x6s6!5cco@{g^V{27tIpz0-rIa85se( z9F#l~1|^St1DEg!ZNek8`KbJ-T>Vu4Q#POTsKq)g_O`_iSnQC+SVu^FCEyHs2PL>* z;1M+vhHwBy5VmZZreQn8}sh|bmaRly?$@oln;LY+aI5O z%MH_he)@pCu|AJ^ZaR`%ziEMg{uwWy-n{=;L!158LMc~I8jG+9aUuz-0zY%DWn2d6ytYH~a$C_i=ZfCjQM*-7#ElpiBB z=dGWF8P&w}_>~`WO<#!y+{tfsEAOy?dp$kJ!_Zz2=Q~Y2eUjqA>*0qbh^eS6n+--y zOb@%uUJvIvO+5WnJmJc!6|2iJ)2573qhS7sF^G{LnT|m)U8+n!i?I5p$+Ad+0O*pL zP-knzXOTG?>0=R8HQF$gTZxRR5VaS2c;uV=uXEr-%xX>P2carfu4;f<0u9?=Ue9J_ zci+B?2lM@9XcbaRLa8OhZIJC2Ep%DkxHKuPH`5w0F`r*k-57SJPY<7463(A6=iIsH zoj2p6nI#3&i;Jcg7nV5Xm8+}jiwcb@MCgljAtp^Ko)A)ox)A-8E<_`K{uupfsdOP` zm`pOCpF$U68rYK?rnyat6D)O?db(YX>wXqDmr?#)C7(_#NdXkO!Ma}a;5pS?egqDq z;O9;TfMLl=r5nH+Ac&%O8jBxHy7+E_LlOM!W<)SO#Ww*(a4w4>Oi%GGhM&Laf|D*j zHgPUPQ5?de29qwnV#w9e@Uw^w6_`_SrTX5r_!oOlR9@^YRsKm<0C|JYO#RO5{Wx}Tonuh%pD-8B&CIugFt zSF9|r4>y82T*?M?Y=k4my=rRV$eVx;QlOC+FbTmMQ%94gJ~+r(9I@@UFr0JNC@N%^m`WG zb!e^QyrJ;nw^VjCe{k`p&!)|~_r9O`4~xFR_rU_kpl@J)LIvZftFOJXzI;t+MfK{c zhR~@SCQm$V>H6xL%G&h}p;gt54ND91msZzQtZu5Tf^~fU_<}R@iwnl*FKw!*Z(NE& zs_L36$FDs0m?~=Ps}N&&P1Tx;x~szt$1~3LHkn7OH1N-%Ur`id`i%yJRb;R_3P<~O zR=Xl?)K(#)pzyfqiI|riOWukmhl$Ci@_6LP7esCIES@7uCb9OTjtFNF*{n*XBSIN* zoODFu=V!1UNZkk46)ohOn2C5lB?y!E9xe{lB<|s*+Qo1q_25&)G;7fTscQz*6w>41 zS>kS6>E}+&EbW&+LxcVL#9c!~yx-1Bi6WAc#sW?Ehm zNBXN9L7A7$pv+@Pb=_a3P5P^}$=YPWzNh{9ocpxR&()GDtk3zQ#a^-4Jp3gId#Sdm z;aE{q=r$-4T-L!q7Q&U9A#}^Z4vHi)#7Mj#aZHS1`0?y+d6O7|tzmUo1_v;h)!65m z?cAP^8A$LPUsJ1_kSZRIUNBcVxx?mB!cN|Xsp&wkOqv?x8hsV) zO^dx_{c$);!g8cl{9)|u>tK@6ctPU!|86G9SvtYm0HoqEv73|Lz+i(4mNhBI-cO8hOCy(E@&6dUv!nT^1Uvsvs_3%bE5!)Zkd(QiZ_O)Gk3v#``YwjW*C_NNz z-$>h8uXlNzB`5D`-bYJwEZ}r?d7o@POtb{au*>*kzAhO&b2dcoraU}JTYOV zG}FX)b2f!?N=#x=2`85nGs84Ng~(AeOq7e2>X|$AO9ji16B8edPAGP=r5>fyxyom@ z4J_YAPy)LJ@CkCZ2G>wCC{3ZdQ!(OPHT%VPXLZA5LSM#^g7!6T;Z3DTn-7>?ro5*N z#wbP88rj>hKOSTrV?G))Mx(2~Y7HWk$vpILVNOM+WZ)`Qstac+Y-9Hb<6A_wDCbc& z9~;zjP(A0uj)`xWGm|Qkc-q;_IHrn(B4UGjjob{s@)fH!-l|1J6qL!j4sOh=o~VM!Bgip8j?DcD?#HCgOxi*Yty{Iy$*%3y;1yTv$H zFBs?QY4bTTi#=hny%u}ZVxLq*i0ZCDD8~x3u3>B z*pg)(R1$Cfs42UBre}E=&n-uS4bxj+X$%CmXSJ{Mcssp^TMl@d-qUjQLB^mYbfEOT zLvKSoV@spGnR$J#q*6PO;@^QQy3>erJzg`MmndPhxKe{fE^tKXG*o`F;F_j>8d08Ww*V7FLdS zQhKv$qHZOPac{6jx-C#xDb1 zfafsiLeL6OxT&gcF=#!Wmx68uT?UHkPQ`Z{XgQvDf?ff-3lw1^&w*BfQagDC=p~?6 zf>P401f>F5H7F~mHJ~?wqInp(1GElwIQVugDECrDOCnMT+6c;B>+wq?tTfhx&IjE9 z%Dq)l9Y<Uhp-kwoncC)aI8Q9` zQT0v2n$13bbl3N`%y{>WCw?>f;E|WMu6V+3>T&H4hInSa{m80IFKIscKmN4v>5jHh z|22Q$>*o1j=EEmV%^UWw58QTB+lQ;ROnvC2nH#U(9jj~^({JnOw%f}8K7Msm?&r^J zL1rrR_070*2Clnt&%LpPq}*h~HSb1A{YBeT@FiYP1o=$4N|SEJojp@{bN0Tqu3c>I znR}L0uZOd3CZ2RN?mfrDk+kmdq?>VPGnnal|2s>cPfib0;q`EK?G)H((#^OV8C3Yv z;z`NzP%_H)6yz@&nQ;%Bu}&bF4riumnBz3@*=s%hhYHB}2`L}cfi_5yMmP(O%>=?& r5L;QjPC)u`&t79n5$S;}Nib!2HfiE?v`(HGR7nE3MnAz%*zx@zGje$i literal 331624 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 z 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 diff --git a/rSDK/ZlibStream/Data.h b/rSDK/ZlibStream/Data.h index 5693c099..b311c7ed 100644 --- a/rSDK/ZlibStream/Data.h +++ b/rSDK/ZlibStream/Data.h @@ -1,6 +1,20 @@ class rRundata; typedef rRundata * LPRRDATA; +#ifdef _UNICODE + #define EDITDATA EDITDATAW + #define LPEDATA LPEDATAW + typedef std::wstring tstring; + typedef std::wstringstream tstringstream; + #define t_gzopen(path, mode) gzopen_w(path, mode) +#else + #define EDITDATA EDITDATAA + #define LPEDATA LPEDATAA + typedef std::string tstring; + typedef std::stringstream tstringstream; + #define t_gzopen(path, mode) gzopen(path, mode) +#endif + // -------------------------------- // RUNNING OBJECT DATA STRUCTURE // -------------------------------- @@ -12,18 +26,18 @@ typedef struct tagRDATA #include "MagicRDATA.h" //bool is volatile so it can be changed instantly by threads - unsigned short inbuffersize; // Default size of memory buffer - double PercentageDifference; // Percentage difference input->output - string LastOutput; // Last finished file name - string returnstring; // String to return with statistics or errors - volatile bool threadsafe; // Ensure only one thread accesses rdPtr's variables + unsigned short inbuffersize; //Default size of memory buffer + double PercentageDifference; //Percentage difference input->output + tstring LastOutput; //Last finished file name + tstring returnstring; //String to return with statistics or errors + volatile bool threadsafe; //Ensure only one thread accesses rdPtr's variables - tagRDATA() : inbuffersize(8192), PercentageDifference(0.0), LastOutput(""), returnstring(""), threadsafe(false) // Constructor + tagRDATA() : inbuffersize(8192), PercentageDifference(0.0), LastOutput(_T("")), returnstring(_T("")), threadsafe(false) //Constructor { //vars initialized above in the initializer list } //functions - ~tagRDATA(){} // Destructor + ~tagRDATA(){} //Destructor } RUNDATA; typedef RUNDATA * LPRDATA; diff --git a/rSDK/ZlibStream/Edittime.cpp b/rSDK/ZlibStream/Edittime.cpp index 32bcc5f9..406fa1fd 100644 --- a/rSDK/ZlibStream/Edittime.cpp +++ b/rSDK/ZlibStream/Edittime.cpp @@ -4,7 +4,7 @@ // under the Frame and Event editors. // // Including creating, display, and setting up your object. -// +// // ============================================================================ #include "common.h" @@ -41,7 +41,7 @@ DEBUGGER_ITEMS_START() // DB_CURRENTSTRING, // DB_CURRENTSTRING|DB_EDITABLE, - // DB_CURRENTVALUE|DB_EDITABLE, + // DB_CURRENTVALUE|DB_EDITABLE, // DB_CURRENTCHECK, // DB_CURRENTCOMBO, @@ -202,23 +202,23 @@ void WINAPI DLLExport SetPropValue(LPMV mV, LPEDATA edPtr, UINT nPropID, LPVOID // // or have an adaptive size of structure like below // // // If the length is different -// if (strlen(pStr)!=strlen(edPtr->text)) +// if (_tcslen(pStr)!=_tcslen(edPtr->text)) // { // // Asks MMF to reallocate the structure with the new size -// LPEDATA pNewPtr = (LPEDATA)mvReAllocEditData(mV, edPtr, sizeof(EDITDATA)+strlen(pStr)); -// +// LPEDATA pNewPtr = (LPEDATA)mvReAllocEditData(mV, edPtr, sizeof(EDITDATA)+_tcslen(pStr)); +// // // If reallocation worked // if (pNewPtr!=NULL) // { // // Copy the string // edPtr=pNewPtr; -// strcpy(edPtr->text, pStr); +// _tcscpy(edPtr->text, pStr); // } // } // else -// { +// { // // Same size : simply copy -// strcpy(edPtr->text, pStr); +// _tcscpy(edPtr->text, pStr); // } // } // break; @@ -303,7 +303,7 @@ BOOL WINAPI IsPropEnabled(LPMV mV, LPEDATA edPtr, UINT nPropID) // ============================================================================ // // TEXT PROPERTIES -// +// // ============================================================================ // -------------------- @@ -324,7 +324,7 @@ DWORD WINAPI DLLExport GetTextCaps(mv _far *mV, LPEDATA edPtr) // Note: the pStyle and cbSize parameters are obsolete and passed for compatibility reasons only. // -BOOL WINAPI DLLExport GetTextFont(mv _far *mV, LPEDATA edPtr, LPLOGFONT plf, LPSTR pStyle, UINT cbSize) +BOOL WINAPI DLLExport GetTextFont(mv _far *mV, LPEDATA edPtr, LPLOGFONT plf, LPTSTR pStyle, UINT cbSize) { #if !RUN_ONLY // Example: copy LOGFONT structure from EDITDATA @@ -482,7 +482,7 @@ WORD BmpToImg(int bmID, npAppli idApp, short HotX = 0, short HotY = 0, short Act // ============================================================================ // // ROUTINES USED UNDER FRAME EDITOR -// +// // ============================================================================ // -------------------- @@ -497,7 +497,7 @@ WORD BmpToImg(int bmID, npAppli idApp, short HotX = 0, short HotY = 0, short Act // /* -int WINAPI DLLExport MakeIconEx ( mv _far *mV, cSurface* pIconSf, LPSTR lpName, fpObjInfo oiPtr, LPEDATA edPtr ) +int WINAPI DLLExport MakeIconEx ( mv _far *mV, cSurface* pIconSf, LPTSTR lpName, fpObjInfo oiPtr, LPEDATA edPtr ) { int error = -1; #ifndef RUN_ONLY @@ -512,7 +512,7 @@ int WINAPI DLLExport MakeIconEx ( mv _far *mV, cSurface* pIconSf, LPSTR lpName, // -------------------- // CreateObject // -------------------- -// Called when you choose "Create new object". It should display the setup box +// Called when you choose "Create new object". It should display the setup box // and initialize everything in the datazone. int WINAPI DLLExport CreateObject(mv _far *mV, fpLevObj loPtr, LPEDATA edPtr) @@ -521,7 +521,7 @@ int WINAPI DLLExport CreateObject(mv _far *mV, fpLevObj loPtr, LPEDATA edPtr) // Do some rSDK stuff #include "rCreateObject.h" - + // Set default object settings // edPtr->swidth = 32; @@ -545,7 +545,7 @@ int WINAPI DLLExport CreateObject(mv _far *mV, fpLevObj loPtr, LPEDATA edPtr) BOOL WINAPI EditObject (mv _far *mV, fpObjInfo oiPtr, fpLevObj loPtr, LPEDATA edPtr) { #ifndef RUN_ONLY - + return TRUE; #endif // !RUN_ONLY @@ -594,7 +594,7 @@ void WINAPI DLLExport RemoveObject(mv _far *mV, fpLevObj loPtr, LPEDATA edPtr, u { #ifndef RUN_ONLY // Is the last object removed? - if (0 == cpt) + if (0 == cpt) { // Do whatever necessary to remove our data } @@ -676,7 +676,7 @@ void WINAPI DLLExport EditorDisplay(mv _far *mV, fpObjInfo oiPtr, fpLevObj loPtr // IsTransparent // -------------------- // This routine tells MMF2 if the mouse pointer is over a transparent zone of the object. -// +// extern "C" BOOL WINAPI DLLExport IsTransparent(mv _far *mV, fpLevObj loPtr, LPEDATA edPtr, int dx, int dy) { @@ -690,7 +690,7 @@ extern "C" BOOL WINAPI DLLExport IsTransparent(mv _far *mV, fpLevObj loPtr, LPED // PrepareToWriteObject // -------------------- // Just before writing the datazone when saving the application, MMF2 calls this routine. -// +// void WINAPI DLLExport PrepareToWriteObject(mv _far *mV, LPEDATA edPtr, fpObjInfo adoi) { @@ -725,23 +725,23 @@ BOOL WINAPI GetFilters(LPMV mV, LPEDATA edPtr, DWORD dwFlags, LPVOID pReserved) // Return TRUE if you can create an object from the given file // -BOOL WINAPI DLLExport UsesFile (LPMV mV, LPSTR fileName) +BOOL WINAPI DLLExport UsesFile (LPMV mV, LPTSTR fileName) { BOOL r = FALSE; #ifndef RUN_ONLY // Example: return TRUE if file extension is ".txt" -/* - LPSTR ext, npath; +/* + LPTSTR ext, npath; if ( fileName != NULL ) { - if ( (ext=(LPSTR)malloc(_MAX_EXT)) != NULL ) + if ( (ext=(LPTSTR)malloc(_MAX_EXT)) != NULL ) { - if ( (npath=(LPSTR)malloc(_MAX_PATH)) != NULL ) + if ( (npath=(LPTSTR)malloc(_MAX_PATH)) != NULL ) { - strcpy(npath, fileName); - _splitpath(npath, NULL, NULL, NULL, ext); + _tcscpy(npath, fileName); + _tsplitpath(npath, NULL, NULL, NULL, ext); if ( _stricmp(ext, ".txt") == 0 ) r = TRUE; free(npath); @@ -760,7 +760,7 @@ BOOL WINAPI DLLExport UsesFile (LPMV mV, LPSTR fileName) // Creates a new object from file // -void WINAPI DLLExport CreateFromFile (LPMV mV, LPSTR fileName, LPEDATA edPtr) +void WINAPI DLLExport CreateFromFile (LPMV mV, LPTSTR fileName, LPEDATA edPtr) { #ifndef RUN_ONLY // Initialize your extension data from the given file @@ -768,7 +768,7 @@ void WINAPI DLLExport CreateFromFile (LPMV mV, LPSTR fileName, LPEDATA edPtr) // edPtr->sheight = 32; // Example: store the filename - // strcpy(edPtr->myFileName, fileName); + // _tcscpy(edPtr->myFileName, fileName); #endif // !RUN_ONLY } @@ -778,24 +778,24 @@ void WINAPI DLLExport CreateFromFile (LPMV mV, LPSTR fileName, LPEDATA edPtr) // // ROUTINES USED UNDER EVENT / TIME / STEP-THROUGH EDITOR // You should not need to change these routines -// +// // ============================================================================ // ----------------- // menucpy // ----------------- // Internal routine used later, copy one menu onto another -// -#ifndef RUN_ONLY + void menucpy(HMENU hTargetMenu, HMENU hSourceMenu) { - int n, id, nMn; - TCHAR * strBuf; - HMENU hSubMenu; - +#ifndef RUN_ONLY + int n, id, nMn; + LPTSTR strBuf; + HMENU hSubMenu; + nMn = GetMenuItemCount(hSourceMenu); - strBuf = (TCHAR *)LocalAlloc(LPTR, 80); - for (n=0; n < nMn; n++) + strBuf = (LPTSTR)calloc(80, sizeof(TCHAR)); + for (n = 0; n < nMn; n++) { if (0 == (id = GetMenuItemID(hSourceMenu, n))) AppendMenu(hTargetMenu, MF_SEPARATOR, 0, 0L); @@ -812,26 +812,31 @@ void menucpy(HMENU hTargetMenu, HMENU hSourceMenu) } } } - LocalFree((HLOCAL)strBuf); + free(strBuf); +#endif } // ----------------- // GetPopupMenu // ----------------- // Internal routine used later. Returns the first popup from a menu -// +// HMENU GetPopupMenu(LPEDATA edPtr,short mn) { +#ifndef RUN_ONLY HMENU hPopup = CreatePopupMenu(); if (mn == MN_CONDITIONS) - menucpy(hPopup, ConditionMenu(edPtr)); + menucpy(hPopup,ConditionMenu(/*edPtr*/)); else if (mn == MN_ACTIONS) - menucpy(hPopup, ActionMenu(edPtr)); + menucpy(hPopup,ActionMenu(/*edPtr*/)); else if (mn == MN_EXPRESSIONS) - menucpy(hPopup, ExpressionMenu(edPtr)); + menucpy(hPopup,ExpressionMenu(/*edPtr*/)); return hPopup; +#else + return NULL; +#endif } // -------------------- @@ -842,14 +847,13 @@ HMENU GetPopupMenu(LPEDATA edPtr,short mn) // static LPEVENTINFOS2 GetEventInformations(LPEVENTINFOS2 eiPtr, short code) + { while (eiPtr->infos.code != code) eiPtr = EVINFO2_NEXT(eiPtr); - + return eiPtr; } -#endif // !RUN_ONLY - // ---------------------------------------------------- // GetConditionMenu / GetActionMenu / GetExpressionMenu @@ -862,7 +866,7 @@ HMENU WINAPI DLLExport GetConditionMenu(mv _far *mV, fpObjInfo oiPtr, LPEDATA ed { #ifndef RUN_ONLY // Check compatibility - return GetPopupMenu(edPtr, MN_CONDITIONS); + return GetPopupMenu(edPtr,MN_CONDITIONS); #endif // !RUN_ONLY return NULL; } @@ -871,7 +875,7 @@ HMENU WINAPI DLLExport GetActionMenu(mv _far *mV, fpObjInfo oiPtr, LPEDATA edPtr { #ifndef RUN_ONLY // Check compatibility - return GetPopupMenu(edPtr, MN_ACTIONS); + return GetPopupMenu(edPtr,MN_ACTIONS); #endif // !RUN_ONLY return NULL; } @@ -880,7 +884,7 @@ HMENU WINAPI DLLExport GetExpressionMenu(mv _far *mV, fpObjInfo oiPtr, LPEDATA e { #ifndef RUN_ONLY // Check compatibility - return GetPopupMenu(edPtr, MN_EXPRESSIONS); + return GetPopupMenu(edPtr,MN_EXPRESSIONS); #endif // !RUN_ONLY return NULL; } @@ -897,42 +901,37 @@ HMENU WINAPI DLLExport GetExpressionMenu(mv _far *mV, fpObjInfo oiPtr, LPEDATA e #ifndef RUN_ONLY void GetCodeTitle(LPEVENTINFOS2 eiPtr, short code, short param, short mn, LPTSTR strBuf, WORD maxLen) { - HMENU hMn; + HMENU hMn; // Finds event in array - eiPtr = GetEventInformations(eiPtr, code); + eiPtr=GetEventInformations(eiPtr, code); // If a special string is to be returned short strID = EVINFO2_PARAMTITLE(eiPtr, param); - if (strID) - { - switch(mn) - { + if (strID) { + switch(mn) { case MN_CONDITIONS: - if (code >= 0 && code < (short)Conditions.size()) { - if (param >= 0 && param < (short)Conditions[code]->getParamCount()) - _tcscpy_s(strBuf, maxLen, Conditions[code]->getParamName(param)); + if (code>=0&&code<(short)Conditions.size()) { + if (param>=0&¶m<(short)Conditions[code]->getParamCount()) + _tcscpy(strBuf,Conditions[code]->getParamName(param)); } break; case MN_ACTIONS: - if (code >= 0 && code < (short)Actions.size()) { - if (param >= 0 && param < (short)Actions[code]->getParamCount()) - _tcscpy_s(strBuf, maxLen, Actions[code]->getParamName(param)); + if (code>=0&&code<(short)Actions.size()) { + if (param>=0&¶m<(short)Actions[code]->getParamCount()) + _tcscpy(strBuf,Actions[code]->getParamName(param)); } break; case MN_EXPRESSIONS: - if (code >= 0 && code < (short)Expressions.size()) { - if (param >= 0 && param < (short)Expressions[code]->getParamCount()) - _tcscpy_s(strBuf, maxLen, Expressions[code]->getParamName(param)); + if (code>=0&&code<(short)Expressions.size()) { + if (param>=0&¶m<(short)Expressions[code]->getParamCount()) + _tcscpy(strBuf,Expressions[code]->getParamName(param)); } break; } - } - else - { - if ((hMn = LoadMenu(hInstLib, MAKEINTRESOURCE(mn)))) - { + } else { + if ((hMn=LoadMenu(hInstLib, MAKEINTRESOURCE(mn)))) { GetMenuString(hMn, eiPtr->menu, strBuf, maxLen, MF_BYCOMMAND); DestroyMenu(hMn); } @@ -964,9 +963,9 @@ short WINAPI DLLExport GetConditionCodeFromMenu(mv _far *mV, short menuId) #ifndef RUN_ONLY LPEVENTINFOS2 eiPtr; int n; - for (n = Conditions.size(), eiPtr = (LPEVENTINFOS2)conditionsInfos; n > 0 && eiPtr->menu != menuId; n--) - eiPtr = EVINFO2_NEXT(eiPtr); - if (n > 0) + for (n=Conditions.size(),eiPtr=(LPEVENTINFOS2)conditionsInfos;n>0&&eiPtr->menu!=menuId;n--) + eiPtr=EVINFO2_NEXT(eiPtr); + if (n>0) return eiPtr->infos.code; #endif // !RUN_ONLY return -1; @@ -978,9 +977,9 @@ short WINAPI DLLExport GetActionCodeFromMenu(mv _far *mV, short menuId) LPEVENTINFOS2 eiPtr; int n; - for (n = Actions.size(), eiPtr = (LPEVENTINFOS2)actionsInfos; n > 0 && eiPtr->menu != menuId; n--) + for (n=Actions.size(),eiPtr=(LPEVENTINFOS2)actionsInfos;n>0&&eiPtr->menu!=menuId;n--) eiPtr = EVINFO2_NEXT(eiPtr); - if (n > 0) + if (n>0) return eiPtr->infos.code; #endif // !RUN_ONLY return -1; @@ -991,9 +990,9 @@ short WINAPI DLLExport GetExpressionCodeFromMenu(mv _far *mV, short menuId) #ifndef RUN_ONLY LPEVENTINFOS2 eiPtr; int n; - for (n = Expressions.size(), eiPtr = (LPEVENTINFOS2)expressionsInfos; n > 0 && eiPtr->menu != menuId; n--) + for (n=Expressions.size(),eiPtr=(LPEVENTINFOS2)expressionsInfos;n>0&&eiPtr->menu!=menuId;n--) eiPtr = EVINFO2_NEXT(eiPtr); - if (n > 0) + if (n>0) return eiPtr->infos.code; #endif // !RUN_ONLY return -1; @@ -1003,8 +1002,8 @@ short WINAPI DLLExport GetExpressionCodeFromMenu(mv _far *mV, short menuId) // ------------------------------------------------------- // GetConditionInfos / GetActionInfos / GetExpressionInfos // ------------------------------------------------------- -// From a action / condition / expression code, returns -// an infosEvents structure. +// From a action / condition / expression code, returns +// an infosEvents structure. // LPINFOEVENTSV2 WINAPI DLLExport GetConditionInfos(mv _far *mV, short code) @@ -1038,31 +1037,31 @@ LPINFOEVENTSV2 WINAPI DLLExport GetExpressionInfos(mv _far *mV, short code) // ---------------------------------------------------------- // GetConditionString / GetActionString / GetExpressionString // ---------------------------------------------------------- -// From a action / condition / expression code, returns +// From a action / condition / expression code, returns // the string to use for displaying it under the event editor // void WINAPI DLLExport GetConditionString(mv _far *mV, short code, LPTSTR strPtr, short maxLen) { #ifndef RUN_ONLY - if (code >= 0 && code < (short)Conditions.size()) - _tcscpy(strPtr, Conditions[code]->getName()); + if (code>=0&&code<(short)Conditions.size()) + _tcscpy(strPtr,Conditions[code]->getName()); #endif // !RUN_ONLY } void WINAPI DLLExport GetActionString(mv _far *mV, short code, LPTSTR strPtr, short maxLen) { #ifndef RUN_ONLY - if (code >= 0 && code < (short)Actions.size()) - _tcscpy(strPtr, Actions[code]->getName()); + if (code>=0&&code<(short)Actions.size()) + _tcscpy(strPtr,Actions[code]->getName()); #endif // !RUN_ONLY } void WINAPI DLLExport GetExpressionString(mv _far *mV, short code, LPTSTR strPtr, short maxLen) { #ifndef RUN_ONLY - if (code >= 0 && code < (short)Expressions.size()) - _tcscpy_s(strPtr, maxLen, Expressions[code]->getName()); + if (code>=0&&code<(short)Expressions.size()) + _tcscpy(strPtr,Expressions[code]->getName()); #endif // !RUN_ONLY } @@ -1076,9 +1075,9 @@ void WINAPI DLLExport GetExpressionParam(mv _far *mV, short code, short param, L { #ifndef RUN_ONLY if (_tcslen(Expressions[code]->getParamName(param))) - _tcscpy_s(strBuf, maxLen, Expressions[code]->getParamName(param)); + _tcscpy(strBuf,Expressions[code]->getParamName(param)); else - *strBuf = 0; + *strBuf=0; #endif } @@ -1097,8 +1096,8 @@ void WINAPI InitParameter(mv _far *mV, short code, paramExt* pExt) #if !RUN_ONLY // Example // ------- - // strcpy(&pExt->pextData[0], "Parameter Test"); - // pExt->pextSize = sizeof(paramExt) + strlen(pExt->pextData) + 1; + // _tcscpy(&pExt->pextData[0], "Parameter Test"); + // pExt->pextSize = sizeof(paramExt) + _tcslen(pExt->pextData)+1; #endif // !RUN_ONLY } @@ -1116,7 +1115,7 @@ BOOL CALLBACK DLLExport SetupProc(HWND hDlg, UINT msgType, WPARAM wParam, LPARAM // Save edptr SetWindowLong(hDlg, DWL_USER, lParam); - pExt = (paramExt *)lParam; + pExt=(paramExt*)lParam; SetDlgItemText(hDlg, IDC_EDIT, pExt->pextData); return TRUE; @@ -1130,7 +1129,7 @@ BOOL CALLBACK DLLExport SetupProc(HWND hDlg, UINT msgType, WPARAM wParam, LPARAM { case IDOK: // Exit GetDlgItemText(hDlg, IDC_EDIT, pExt->pextData, 500); - pExt->pextSize = sizeof(paramExt) + strlen(pExt->pextData) + 1; + pExt->pextSize=sizeof(paramExt)+_tcslen(pExt->pextData)+1; EndDialog(hDlg, TRUE); return TRUE; @@ -1170,7 +1169,7 @@ void WINAPI EditParameter(mv _far *mV, short code, paramExt* pExt) // Initialize the parameter. // -void WINAPI GetParameterString(mv _far *mV, short code, paramExt* pExt, LPSTR pDest, short size) +void WINAPI GetParameterString(mv _far *mV, short code, paramExt* pExt, LPTSTR pDest, short size) { #if !RUN_ONLY @@ -1190,14 +1189,14 @@ void WINAPI GetParameterString(mv _far *mV, short code, paramExt* pExt, LPSTR pD // Note: ObjComment is also displayed in the Quick Description box in the Insert Object dialog box // -void WINAPI DLLExport GetObjInfos (mv _far *mV, LPEDATA edPtr, LPSTR ObjName, LPSTR ObjAuthor, LPSTR ObjCopyright, LPSTR ObjComment, LPSTR ObjHttp) +void WINAPI DLLExport GetObjInfos (mv _far *mV, LPEDATA edPtr, LPTSTR ObjName, LPTSTR ObjAuthor, LPTSTR ObjCopyright, LPTSTR ObjComment, LPTSTR ObjHttp) { #ifndef RUN_ONLY - strcpy_s(ObjName, 255, ObjectName); - strcpy_s(ObjAuthor, 255, ObjectAuthor); - strcpy_s(ObjCopyright, 255, ObjectCopyright); - strcpy_s(ObjComment, 1023, ObjectComment); - strcpy_s(ObjHttp, 255, ObjectURL); + _tcscpy(ObjName, ObjectName); + _tcscpy(ObjAuthor,ObjectAuthor); + _tcscpy(ObjCopyright,ObjectCopyright); + _tcscpy(ObjComment,ObjectComment); + _tcscpy(ObjHttp,ObjectURL); #endif } @@ -1207,10 +1206,10 @@ void WINAPI DLLExport GetObjInfos (mv _far *mV, LPEDATA edPtr, LPSTR ObjName, LP // Returns the help filename of the object. // -LPCSTR WINAPI GetHelpFileName() +LPCTSTR WINAPI GetHelpFileName() { #ifndef RUN_ONLY - return ObjectHelp; + return _T(ObjectHelp); #else return NULL; #endif diff --git a/rSDK/ZlibStream/Ext.rc b/rSDK/ZlibStream/Ext.rc index 9f122903..1da7c4ee 100644 --- a/rSDK/ZlibStream/Ext.rc +++ b/rSDK/ZlibStream/Ext.rc @@ -68,16 +68,16 @@ END #if defined(APSTUDIO_INVOKED) || defined(EDITOR) #if defined(APSTUDIO_INVOKED) -EXO_ICON$(EDITOR) BITMAP "EXTICON.BMP" +EXO_ICON$(EDITOR) BITMAP "Icon.bmp" #else -EXO_ICON BITMAP "EXTICON.BMP" +EXO_ICON BITMAP "Icon.bmp" #endif #endif #if defined(APSTUDIO_INVOKED) || defined(EDITOR) #if defined(APSTUDIO_INVOKED) -EXO_IMAGE$(EDITOR) BITMAP "EXTIMG.BMP" +EXO_IMAGE$(EDITOR) BITMAP "Img.bmp" #else -EXO_IMAGE BITMAP "EXTIMG.BMP" +EXO_IMAGE BITMAP "Img.bmp" #endif #endif diff --git a/rSDK/ZlibStream/General.cpp b/rSDK/ZlibStream/General.cpp index 4e2113c6..6b47b6f3 100644 --- a/rSDK/ZlibStream/General.cpp +++ b/rSDK/ZlibStream/General.cpp @@ -1,7 +1,7 @@ /// ===================================================================================== // // The following routines are used internally by MMF, and should not need to be modified -// +// // ===================================================================================== #include "common.h" @@ -12,7 +12,7 @@ EXT_INIT() // ============================================================================ // // LIBRARY ENTRY & QUIT POINTS -// +// // ============================================================================ // ----------------- @@ -27,16 +27,16 @@ BOOL WINAPI DllMain(HINSTANCE hDLL, DWORD dwReason, LPVOID lpReserved) conditionsInfos = getConditionInfos(); actionsInfos = getActionInfos(); expressionsInfos = getExpressionInfos(); - + ConditionJumps = getConditions(); ActionJumps = getActions(); ExpressionJumps = getExpressions(); - + switch (dwReason) { // DLL is attaching to the address space of the current process. case DLL_PROCESS_ATTACH: - + hInstLib = hDLL; // Store HINSTANCE break; @@ -49,10 +49,10 @@ BOOL WINAPI DllMain(HINSTANCE hDLL, DWORD dwReason, LPVOID lpReserved) break; // The calling process is detaching the DLL from its address space. - case DLL_PROCESS_DETACH: + case DLL_PROCESS_DETACH: break; } - + return TRUE; } @@ -73,7 +73,7 @@ extern "C" int WINAPI DLLExport Initialize(mv _far *mV, int quiet) // ----------------- // Where you want to kill and initialized data opened in the above routine // Called just before freeing the DLL. -// +// extern "C" int WINAPI DLLExport Free(mv _far *mV) { // No error @@ -83,18 +83,18 @@ extern "C" int WINAPI DLLExport Free(mv _far *mV) // ============================================================================ // // GENERAL INFO -// +// // ============================================================================ // ----------------- // Get Infos // ----------------- -// -extern "C" +// +extern "C" { DWORD WINAPI DLLExport GetInfos(int info) { - + switch (info) { case KGI_VERSION: @@ -105,6 +105,12 @@ extern "C" return ForVersion; case KGI_BUILD: return MinimumBuild; + case KGI_UNICODE: + #ifdef _UNICODE + return TRUE; + #else + return FALSE; + #endif default: return 0; } @@ -116,7 +122,7 @@ extern "C" // ---------------------------------------------------------- // Fills an information structure that tells MMF2 everything // about the object, its actions, conditions and expressions -// +// short WINAPI DLLExport GetRunObjectInfos(mv _far *mV, fpKpxRunInfos infoPtr) { @@ -129,7 +135,7 @@ short WINAPI DLLExport GetRunObjectInfos(mv _far *mV, fpKpxRunInfos infoPtr) infoPtr->numOfExpressions = (short)Expressions.size(); infoPtr->editDataSize = sizeof(EDITDATA); - + MagicFlags(infoPtr->editFlags); infoPtr->windowProcPriority = WINDOWPROC_PRIORITY; @@ -138,7 +144,7 @@ short WINAPI DLLExport GetRunObjectInfos(mv _far *mV, fpKpxRunInfos infoPtr) infoPtr->identifier = IDENTIFIER; infoPtr->version = 1; - + return TRUE; } @@ -150,13 +156,13 @@ short WINAPI DLLExport GetRunObjectInfos(mv _far *mV, fpKpxRunInfos infoPtr) // Data\Runtime folder). // -LPCSTR* WINAPI DLLExport GetDependencies() +LPCTSTR* WINAPI DLLExport GetDependencies() { // Do some rSDK stuff #include "rGetDependencies.h" - - //LPCSTR szDep[] = { - // "MyDll.dll", + + //LPCTSTR szDep[] = { + // _T("MyDll.dll"), // NULL //}; @@ -190,7 +196,7 @@ void WINAPI DLLExport UnloadObject(mv _far *mV, LPEDATA edPtr, int reserved) // -------------------- // For you to update your object structure to newer versions // Called at both edit time and run time -// +// HGLOBAL WINAPI DLLExport UpdateEditStructure(mv __far *mV, void __far * OldEdPtr) { // We do nothing here @@ -205,9 +211,10 @@ HGLOBAL WINAPI DLLExport UpdateEditStructure(mv __far *mV, void __far * OldEdPtr // Called at edit time and run time. // // Call lpfnUpdate to update your file pathname (refer to the documentation) -// -void WINAPI DLLExport UpdateFileNames(mv _far *mV, LPSTR appName, LPEDATA edPtr, void (WINAPI * lpfnUpdate)(LPSTR, LPSTR)) +// +void WINAPI DLLExport UpdateFileNames(mv _far *mV, LPTSTR appName, LPEDATA edPtr, void (WINAPI * lpfnUpdate)(LPTSTR, LPTSTR)) { + } // --------------------- @@ -216,22 +223,22 @@ void WINAPI DLLExport UpdateFileNames(mv _far *mV, LPSTR appName, LPEDATA edPtr, // // Uncomment this function if you need to store an image in the image bank. // -// Note: do not forget to enable the function in the .def file +// Note: do not forget to enable the function in the .def file // if you remove the comments below. // /* int WINAPI DLLExport EnumElts (mv __far *mV, LPEDATA edPtr, ENUMELTPROC enumProc, ENUMELTPROC undoProc, LPARAM lp1, LPARAM lp2) -{ +{ int error = 0; // Replace wImgIdx with the name of the WORD variable you create within the edit structure - - // Enum images + + // Enum images if ( (error = enumProc(&edPtr->wImgIdx, IMG_TAB, lp1, lp2)) != 0 ) { - // Undo enum images - undoProc (&edPtr->wImgIdx, IMG_TAB, lp1, lp2); - } + // Undo enum images + undoProc (&edPtr->wImgIdx, IMG_TAB, lp1, lp2); + } return error; } diff --git a/rSDK/ZlibStream/EXTICON.BMP b/rSDK/ZlibStream/Icon.bmp similarity index 100% rename from rSDK/ZlibStream/EXTICON.BMP rename to rSDK/ZlibStream/Icon.bmp diff --git a/rSDK/ZlibStream/EXTIMG.BMP b/rSDK/ZlibStream/Img.bmp similarity index 100% rename from rSDK/ZlibStream/EXTIMG.BMP rename to rSDK/ZlibStream/Img.bmp diff --git a/rSDK/ZlibStream/Information.h b/rSDK/ZlibStream/Information.h index 4c830222..0706502d 100644 --- a/rSDK/ZlibStream/Information.h +++ b/rSDK/ZlibStream/Information.h @@ -3,12 +3,12 @@ // -------------------- // Basic object details -#define ObjectName "ZlibStream object" -#define ObjectAuthor "Darkwire Software" -#define ObjectCopyright "Copyright \xA9 2019 Darkwire Software" -#define ObjectComment "Compress and decompress files with Zlib without loading them into the memory. Allows several actions at once." -#define ObjectURL "http://www.dark-wire.com/" -#define ObjectHelp "Help\\ZlibStream.chm" +#define ObjectName _T("ZlibStream") +#define ObjectAuthor _T("Darkwire Software") +#define ObjectCopyright _T("Copyright \xA9 2011-2026 Darkwire Software") +#define ObjectComment _T("Compress and decompress files with Zlib without loading them into the memory. Allows several actions at once.") +#define ObjectURL _T("http://www.dark-wire.com/") +#define ObjectHelp _T("Help\\ZlibStream.chm") // If you register your object with Clickteam, change this to the ID you were given #define ObjectRegID REGID_PRIVATE diff --git a/rSDK/ZlibStream/Main.cpp b/rSDK/ZlibStream/Main.cpp index 857c206a..8c09820f 100644 --- a/rSDK/ZlibStream/Main.cpp +++ b/rSDK/ZlibStream/Main.cpp @@ -1,7 +1,7 @@ // ============================================================================ // // This file contains the actions, conditions and expressions your object uses -// +// // ============================================================================ #include "Common.h" @@ -12,7 +12,7 @@ { \ Sleep(0); \ } \ - rdPtr -> threadsafe=true + rdPtr -> threadsafe=true #define ThreadSafe_End() rdPtr -> threadsafe=false //Macro for simplicity #define Terminate() \ @@ -21,13 +21,13 @@ rdPtr -> LastOutput = outfilename; \ rdPtr -> rRd -> CallEvent(1); \ ThreadSafe_End(); \ - return 1 + return 1 // Please note: Using GenerateEvent in place of PushEvent is not a good idea, being that // access to rdPtr is blocked by ThreadSafe_Start. Example code: -// ThreadSafe_Start(); -// rdPtr -> GenerateEvent(0); -// ThreadSafe_End(); +// ThreadSafe_Start(); +// rdPtr -> GenerateEvent(0); +// ThreadSafe_End(); // If the user retrieves expressions with GenerateEvent, the ThreadSafe_End is not run // until after they retrieve the variables. So of course the while loop in ThreadSafe_Start // runs without stopping. @@ -39,401 +39,416 @@ //Define struct used to export data from actions to threads struct Params { - char para_infilename [MAX_PATH]; // Input file name - char para_outfilename [MAX_PATH]; // Output file name - bool para_UseAppend; // If true, append; otherwise (over)write output - LPRDATA para_rdPtr; //rdPtr (must be given or threads cannot access rdPtr) + TCHAR para_infilename [MAX_PATH]; //Input file name + TCHAR para_outfilename [MAX_PATH]; //Output file name + bool para_UseAppend; //If true, append; otherwise (over)write output + LPRDATA para_rdPtr; //rdPtr (must be given or threads cannot access rdPtr) }; //Calculate file size -unsigned long file_size(char *filename) { - FILE *pFile = NULL; - if (fopen_s(&pFile, filename, "rb")) // Open file - return 0; // If handle has a problem, return 0, eg no file - fseek(pFile, 0, SEEK_END); // If not, goto end of file - unsigned long size = ftell(pFile); //Get position (Must be stored so fclose can be run) - fclose(pFile); // Close file - return size; // Return +unsigned long file_size(TCHAR *filename) { + FILE *pFile = NULL; + if (_tfopen_s(&pFile, filename, _T("rb"))) // Open file + return 0; // If handle has a problem, return 0, eg no file + fseek(pFile, 0, SEEK_END); //If not, goto end of file + unsigned long size = ftell(pFile); //Get position (Must be stored so fclose can be run) + fclose(pFile); //Close file + return size; //Return } -bool FileSizeCheck(char *infilename, LPRDATA rdPtr) +bool FileSizeCheck(TCHAR *infilename, LPRDATA rdPtr) { - if (file_size(infilename) < 1) - { - ThreadSafe_Start(); - rdPtr -> returnstring = "Input file size 0 or nonexistent."; - ThreadSafe_End(); - return true; - } - else - return false; + if (file_size(infilename) < 1) + { + ThreadSafe_Start(); + rdPtr -> returnstring = _T("Input file size 0 or nonexistent."); + ThreadSafe_End(); + return true; + } + else + return false; } bool HandleCheck(FILE *file, gzFile gzfile, LPRDATA rdPtr) { - if (!file) - { - ThreadSafe_Start(); - rdPtr -> returnstring = "Input file malfunctioned."; - gzclose(gzfile); - ThreadSafe_End(); - return true; - } - else if (!gzfile) - { - ThreadSafe_Start(); - rdPtr -> returnstring = "Output file malfunctioned."; - fclose(file); - ThreadSafe_End(); - return true; - } - else - { - return false; - } + if (!file) + { + ThreadSafe_Start(); + rdPtr -> returnstring = _T("Input file malfunctioned."); + gzclose(gzfile); + ThreadSafe_End(); + return true; + } + else if (!gzfile) + { + ThreadSafe_Start(); + rdPtr -> returnstring = _T("Output file malfunctioned."); + fclose(file); + ThreadSafe_End(); + return true; + } + else + { + return false; + } } //Compress a file DWORD WINAPI compress_one_file(Params *pDataArray) -{ - //Open struct and set variables - char *infilename = new char [MAX_PATH]; // Get input file name - strcpy_s(infilename, MAX_PATH, pDataArray -> para_infilename); - char *outfilename = new char [MAX_PATH]; // Get output file name - strcpy_s(outfilename, MAX_PATH, pDataArray -> para_outfilename); - bool UseAppend = pDataArray -> para_UseAppend; // G et whether to append or write - LPRDATA rdPtr = pDataArray -> para_rdPtr; //Get rdPtr - delete pDataArray; // Container is expendable - - char * WriteType = "wb9"; //User is using write (overwriting) - if (UseAppend) WriteType = "ab9"; // User is using append - +{ + //Open struct and set variables + TCHAR *infilename = new TCHAR [MAX_PATH]; //Get input file name + _tcscpy_s(infilename, MAX_PATH, pDataArray -> para_infilename); + TCHAR *outfilename = new TCHAR [MAX_PATH]; //Get output file name + _tcscpy_s(outfilename, MAX_PATH, pDataArray -> para_outfilename); + bool UseAppend = pDataArray -> para_UseAppend; //G et whether to append or write + LPRDATA rdPtr = pDataArray -> para_rdPtr; //Get rdPtr + delete pDataArray; //Container is expendable + + const char * WriteType = "wb9"; //User is using write (overwriting) + if (UseAppend) WriteType = "ab9"; //User is using append + //Check input file size - no handles to close - if (FileSizeCheck(infilename, rdPtr)) {Terminate();} + if (FileSizeCheck(infilename, rdPtr)) {Terminate();} - //Open handles to both files - FILE *infile = fopen(infilename, "rb"); // r = read, b = binary - gzFile outfile = gzopen(outfilename, WriteType); // a = append (or w=write), b = binary, 9 = max compression + //Open handles to both files + FILE *infile = _tfopen(infilename, _T("rb")); //r = read, b = binary + //gzFile outfile = gzopen(outfilename, WriteType); //a = append (or w=write), b = binary, 9 = max compression + gzFile outfile = t_gzopen(outfilename, WriteType); + //Check handles - HandleCheck() automatically closes handles if invalid - if (HandleCheck(infile, outfile, rdPtr)) {Terminate();} + if (HandleCheck(infile, outfile, rdPtr)) {Terminate();} - //Declare variables - unsigned long PreviousOutputSize = 0; // For calculation purposes - signed int num_read = 0; - unsigned long total_read = 0; - ThreadSafe_Start(); - unsigned short tempinbuffersize = rdPtr -> inbuffersize; - ThreadSafe_End(); + //Declare variables + unsigned long PreviousOutputSize = 0; //For calculation purposes + signed int num_read = 0; + unsigned long total_read = 0; + ThreadSafe_Start(); + unsigned short tempinbuffersize = rdPtr -> inbuffersize; + ThreadSafe_End(); //If using Write, output size should not be included in the calculation later. Otherwise: - if (UseAppend) PreviousOutputSize = file_size(outfilename); - - //This makes sure that the buffer is the right size - if too large, set buffer smaller - if ( file_size(infilename) < tempinbuffersize) - tempinbuffersize = (unsigned short)file_size(infilename); - - //Then declare final variable, the buffer - char *inbuffer = new char[tempinbuffersize]; - - //Iteration through the files - while ((num_read = fread(inbuffer, 1, tempinbuffersize, infile)) > 0) - { - total_read += num_read; - gzwrite(outfile, inbuffer, num_read); - } - - //Close thread - fclose(infile); - gzclose(outfile); - delete[] inbuffer, infilename, outfilename; + if (UseAppend) PreviousOutputSize = file_size(outfilename); + + //This makes sure that the buffer is the right size - if too large, set buffer smaller + if ( file_size(infilename) < tempinbuffersize) + tempinbuffersize = (unsigned short)file_size(infilename); + + //Then declare final variable, the buffer + char *inbuffer = new char[tempinbuffersize]; + + //Iteration through the files + while ((num_read = fread(inbuffer, 1, tempinbuffersize, infile)) > 0) + { + total_read += num_read; + gzwrite(outfile, inbuffer, num_read); + } + + //Close thread + fclose(infile); + gzclose(outfile); + delete[] inbuffer, infilename, outfilename; + //delete[] inbuffer; + //delete[] infilename; + //delete[] outfilename; //Set variables afnter completion - ThreadSafe_Start(); + ThreadSafe_Start(); unsigned long saveoutfilesize = file_size(outfilename); unsigned long saveinfilesize = file_size(infilename); - rdPtr -> PercentageDifference = ((file_size(outfilename)-PreviousOutputSize)*(1.0/file_size(infilename)))*100.0; - - stringstream temp; - temp <<"Buffer used: " - << tempinbuffersize - <<", total bytes read: " - << file_size(infilename) - <<", total bytes written: " - << file_size(outfilename)-PreviousOutputSize - <<", compression rate: " - << rdPtr -> PercentageDifference - <<"%."; - rdPtr -> returnstring = temp.str(); - temp.flush(); - rdPtr -> LastOutput = outfilename; - rdPtr -> rRd -> PushEvent(0); - ThreadSafe_End(); - return 0; + rdPtr -> PercentageDifference = ((file_size(outfilename)-PreviousOutputSize)*(1.0/file_size(infilename)))*100.0; + + tstringstream temp; + temp << _T("Buffer used: ") + << tempinbuffersize + << _T(", total bytes read: ") + << file_size(infilename) + << _T(", total bytes written: ") + << file_size(outfilename)-PreviousOutputSize + << _T(", compression rate: ") + << rdPtr -> PercentageDifference + << _T("%."); + rdPtr -> returnstring = temp.str(); + temp.flush(); + //temp.str(_T("")); + //temp.clear(); + rdPtr -> LastOutput = outfilename; + rdPtr -> rRd -> PushEvent(0); + ThreadSafe_End(); + return 0; } //Decompress a file DWORD WINAPI decompress_one_file(Params *pDataArray) -{ - //Open struct and set variables - char *infilename = new char [MAX_PATH]; // Get input file name - strcpy_s(infilename, MAX_PATH, pDataArray -> para_infilename); - char *outfilename = new char [MAX_PATH]; // Get output file name - strcpy_s(outfilename, MAX_PATH, pDataArray -> para_outfilename); - bool UseAppend = pDataArray -> para_UseAppend; // Get whether to append or write - LPRDATA rdPtr = pDataArray -> para_rdPtr; //Get rdPtr - delete pDataArray; // Container is expendable - - char * WriteType = "wb"; //User is using write (overwriting) - if (UseAppend) WriteType = "ab"; // User is using append - - if (FileSizeCheck(infilename, rdPtr)) {Terminate();} - //Open handles to both files - gzFile infile = gzopen(infilename, "rb"); // r = read, b = binary - FILE *outfile = fopen(outfilename, WriteType); // a = append or w = write, b = binary - - if (HandleCheck(outfile, infile, rdPtr)) {Terminate();} - //Declare variables - unsigned long PreviousOutputSize = 0; // For calculation purposes - int num_read = 0; - unsigned long total_read = 0; - ThreadSafe_Start(); - unsigned short tempinbuffersize = rdPtr -> inbuffersize; - ThreadSafe_End(); - +{ + //Open struct and set variables + TCHAR *infilename = new TCHAR [MAX_PATH]; //Get input file name + _tcscpy_s(infilename, MAX_PATH, pDataArray -> para_infilename); + TCHAR *outfilename = new TCHAR [MAX_PATH]; //Get output file name + _tcscpy_s(outfilename, MAX_PATH, pDataArray -> para_outfilename); + bool UseAppend = pDataArray -> para_UseAppend; //Get whether to append or write + LPRDATA rdPtr = pDataArray -> para_rdPtr; //Get rdPtr + delete pDataArray; //Container is expendable + + TCHAR * WriteType = _T("wb"); //User is using write (overwriting) + if (UseAppend) WriteType = _T("ab"); //User is using append + + if (FileSizeCheck(infilename, rdPtr)) {Terminate();} + //Open handles to both files + //gzFile infile = gzopen(infilename, "rb"); //r = read, b = binary + + gzFile infile = t_gzopen(infilename, "rb"); + + FILE *outfile = _tfopen(outfilename, WriteType); //a = append or w = write, b = binary + + if (HandleCheck(outfile, infile, rdPtr)) {Terminate();} + //Declare variables + unsigned long PreviousOutputSize = 0; //For calculation purposes + int num_read = 0; + unsigned long total_read = 0; + ThreadSafe_Start(); + unsigned short tempinbuffersize = rdPtr -> inbuffersize; + ThreadSafe_End(); + //If using Write, output size should not be included in the calculation later. Otherwise: - if (UseAppend) PreviousOutputSize = file_size(outfilename); - + if (UseAppend) PreviousOutputSize = file_size(outfilename); + //This makes sure that the buffer is the right size - if too large, set buffer smaller - if ( file_size(infilename) < tempinbuffersize) - tempinbuffersize = (unsigned short)file_size(infilename); - - //Then declare final variable, the buffer - char *inbuffer = new char[tempinbuffersize]; - - //Iteration through the files - while ((num_read = gzread(infile, inbuffer, tempinbuffersize)) > 0) - { - total_read += num_read; - fwrite(inbuffer, 1, num_read, outfile); - } - - //Close thread - gzclose(infile); - fclose(outfile); - delete[] inbuffer, infilename, outfilename; - - //Set variables after completion - ThreadSafe_Start(); - rdPtr -> PercentageDifference = ((file_size(outfilename)-PreviousOutputSize)*(1.0/file_size(infilename)))*100.0; - stringstream temp; - temp <<"Buffer used: " - << tempinbuffersize - <<", total bytes read: " - << file_size(infilename) - <<", total bytes written: " - << file_size(outfilename)-PreviousOutputSize - <<", decompression rate: " - << rdPtr -> PercentageDifference - <<"%."; - rdPtr -> returnstring = temp.str(); - temp.flush(); - rdPtr -> LastOutput = outfilename; - rdPtr -> rRd -> CallEvent(0); - ThreadSafe_End(); - return 0; + if ( file_size(infilename) < tempinbuffersize) + tempinbuffersize = (unsigned short)file_size(infilename); + + //Then declare final variable, the buffer + TCHAR *inbuffer = new TCHAR[tempinbuffersize]; + + //Iteration through the files + while ((num_read = gzread(infile, inbuffer, tempinbuffersize)) > 0) + { + total_read += num_read; + fwrite(inbuffer, 1, num_read, outfile); + } + + //Close thread + gzclose(infile); + fclose(outfile); + delete[] inbuffer, infilename, outfilename; + //delete[] inbuffer; + //delete[] infilename; + //delete[] outfilename; + + //Set variables after completion + ThreadSafe_Start(); + rdPtr -> PercentageDifference = ((file_size(outfilename)-PreviousOutputSize)*(1.0/file_size(infilename)))*100.0; + tstringstream temp; + temp <<_T("Buffer used: ") + << tempinbuffersize + << _T(", total bytes read: ") + << file_size(infilename) + << _T(", total bytes written: ") + << file_size(outfilename)-PreviousOutputSize + << _T(", decompression rate: ") + << rdPtr -> PercentageDifference + << _T("%."); + rdPtr -> returnstring = temp.str(); + temp.flush(); + //temp.str(_T("")); + //temp.clear(); + rdPtr -> LastOutput = outfilename; + rdPtr -> rRd -> CallEvent(0); + ThreadSafe_End(); + return 0; } // ============================================================================ // // CONDITIONS -// +// // ============================================================================ CONDITION( - /* ID */ 0, - /* Name */ "%o: On success", - /* Flags */ 0, - /* Params */ (0) + /* ID */ 0, + /* Name */ "%o: On success", + /* Flags */ 0, + /* Params */ (0) ) { - return true; + return true; } CONDITION( - /* ID */ 1, - /* Name */ "%o: On error", - /* Flags */ 0, - /* Params */ (0) + /* ID */ 1, + /* Name */ "%o: On error", + /* Flags */ 0, + /* Params */ (0) ) { - return true; + return true; } // ============================================================================ // // ACTIONS -// +// // ============================================================================ -ACTION( // Old compress function - /* ID */ 0, - /* Name */ "<> Compress a file (%0) --> (%1)", - /* Flags */ 0, - /* Params */ (2, PARAM_STRING, "Input file:", PARAM_STRING, "Output file:") +ACTION( //Old compress function + /* ID */ 0, + /* Name */ "<> Compress a file (%0) --> (%1)", + /* Flags */ 0, + /* Params */ (2, PARAM_STRING, _T("Input file:"), PARAM_STRING, _T("Output file:")) ) { //Old version of compress action: Notify user - MessageBoxA(NULL, "Sorry to interrupt your programming, but you have\nan old \"Compress file\" action in ZlibStream which needs replacing.\nClick the ZlibStream icon in your event editor to see all the events\nZlibStream is in.", "Darkwire Software - Old Event Notice", MB_OK); + MessageBox(NULL, _T("Sorry to interrupt your programming, but you have\nan old \"Compress file\" action in ZlibStream which needs replacing.\nClick the ZlibStream icon in your event editor to see all the events\nZlibStream is in."), _T("Darkwire Software - Old Event Notice"), MB_OK); } -ACTION( // Old decompress function - /* ID */ 1, - /* Name */ "<> Decompress a file (%0) --> (%1)", - /* Flags */ 0, - /* Params */ (2, PARAM_STRING, "Input file:", PARAM_STRING, "Output file:") +ACTION( //Old decompress function + /* ID */ 1, + /* Name */ "<> Decompress a file (%0) --> (%1)", + /* Flags */ 0, + /* Params */ (2, PARAM_STRING, _T("Input file:"), PARAM_STRING, _T("Output file:")) ) { - //Old version of decompress action: Notify user - MessageBoxA(NULL, "Sorry to interrupt your programming, but you have\nan old \"Decompress file\" action in ZlibStream which needs replacing.\nClick the ZlibStream icon in your event editor to see all the events\nZlibStream is in.", "Darkwire Software - Old Event Notice", MB_OK); + //Old version of decompress action: Notify user + MessageBox(NULL, _T("Sorry to interrupt your programming, but you have\nan old \"Decompress file\" action in ZlibStream which needs replacing.\nClick the ZlibStream icon in your event editor to see all the events\nZlibStream is in."), _T("Darkwire Software - Old Event Notice"), MB_OK); } ACTION( - /* ID */ 2, - /* Name */ "Set buffer size to %0 bytes", - /* Flags */ 0, - /* Params */ (1, PARAM_NUMBER, "Buffer size (1 to 16384 bytes):") + /* ID */ 2, + /* Name */ "Set buffer size to %0 bytes", + /* Flags */ 0, + /* Params */ (1, PARAM_NUMBER, _T("Buffer size (1 to 16384 bytes):")) ) { - int p1 = Param(TYPE_INT); - ThreadSafe_Start(); - if (p1 > 0 && p1 < 16385) - rdPtr -> inbuffersize = p1; - else - { - rdPtr -> returnstring = "Buffer is an invalid size. Must be between 0 and 16385 (exclusive)."; - rdPtr -> rRd -> CallEvent(1); - } - ThreadSafe_End(); + int p1 = Param(TYPE_INT); + ThreadSafe_Start(); + if (p1 > 0 && p1 < 16385) + rdPtr -> inbuffersize = p1; + else + { + rdPtr -> returnstring = _T("Buffer is an invalid size. Must be between 0 and 16385 (exclusive)."); + rdPtr -> rRd -> CallEvent(1); + } + ThreadSafe_End(); } ACTION( - /* ID */ 3, - /* Name */ "Compress a file (%0) --> (%1), append = %2", - /* Flags */ 0, - /* Params */ (3, PARAM_STRING, "Input file:", PARAM_STRING, "Output file:", PARAM_NUMBER, "Append if output file already exists? (0 for overwriting, 1 for adding to end)") + /* ID */ 3, + /* Name */ "Compress a file (%0) --> (%1), append = %2", + /* Flags */ 0, + /* Params */ (3, PARAM_STRING, _T("Input file:"), PARAM_STRING, _T("Output file:"), PARAM_NUMBER, _T("Append if output file already exists? (0 for overwriting, 1 for adding to end)")) ) { - //Retrieve variables from parameters - char *p1 = (char *) Param(TYPE_STRING); - char *p2 = (char *) Param(TYPE_STRING); - int p3 = Param(TYPE_INT); - + //Retrieve variables from parameters + TCHAR *p1 = (TCHAR *) Param(TYPE_STRING); + TCHAR *p2 = (TCHAR *) Param(TYPE_STRING); + int p3 = Param(TYPE_INT); + //Set bool for simplicity bool temp = false; if (p3 != 0) temp = true; - //Declare struct and set variables in struct - Params* Parameters = new Params; // Declaration - strcpy_s(Parameters -> para_infilename, MAX_PATH, p1); // Pass the input file name - strcpy_s(Parameters -> para_outfilename, MAX_PATH, p2); // Pass the output file name - Parameters -> para_UseAppend = temp; // Pass the append command - Parameters -> para_rdPtr = rdPtr; // Pass rdPtr - + //Declare struct and set variables in struct + Params* Parameters = new Params; //Declaration + _tcscpy_s(Parameters -> para_infilename, MAX_PATH, p1); //Pass the input file name + _tcscpy_s(Parameters -> para_outfilename, MAX_PATH, p2); //Pass the output file name + Parameters -> para_UseAppend = temp; //Pass the append command + Parameters -> para_rdPtr = rdPtr; //Pass rdPtr + //Create thread - CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)&compress_one_file, Parameters, 0, NULL); + CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)&compress_one_file, Parameters, 0, NULL); } ACTION( - /* ID */ 4, - /* Name */ "Decompress a file (%0) --> (%1), append = %2", - /* Flags */ 0, - /* Params */ (3, PARAM_STRING, "Input file:", PARAM_STRING, "Output file:", PARAM_NUMBER, "Append if output file already exists? (0 for overwriting, 1 for adding to end)") + /* ID */ 4, + /* Name */ "Decompress a file (%0) --> (%1), append = %2", + /* Flags */ 0, + /* Params */ (3, PARAM_STRING, _T("Input file:"), PARAM_STRING, _T("Output file:"), PARAM_NUMBER, _T("Append if output file already exists? (0 for overwriting, 1 for adding to end)")) ) { - //Retrieve variables from parameters - char *p1 = (char *) Param(TYPE_STRING); - char *p2 = (char *) Param(TYPE_STRING); - int p3 = Param(TYPE_INT); - + //Retrieve variables from parameters + TCHAR *p1 = (TCHAR *) Param(TYPE_STRING); + TCHAR *p2 = (TCHAR *) Param(TYPE_STRING); + int p3 = Param(TYPE_INT); + //Set bool for simplicity bool temp = false; if (p3 != 0) temp = true; - //Declare struct and set variables in struct - Params* Parameters = new Params; // Declaration - strcpy_s(Parameters -> para_infilename, MAX_PATH, p1); // Pass the input file name - strcpy_s(Parameters -> para_outfilename, MAX_PATH, p2); // Pass the output file name - Parameters -> para_UseAppend = temp; // Pass the append command - Parameters -> para_rdPtr = rdPtr; // Pass rdPtr - - //Create thread - CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)&decompress_one_file, Parameters, 0, NULL); + //Declare struct and set variables in struct + Params* Parameters = new Params; //Declaration + _tcscpy_s(Parameters -> para_infilename, MAX_PATH, p1); //Pass the input file name + _tcscpy_s(Parameters -> para_outfilename, MAX_PATH, p2); //Pass the output file name + Parameters -> para_UseAppend = temp; //Pass the append command + Parameters -> para_rdPtr = rdPtr; //Pass rdPtr + + //Create thread + CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)&decompress_one_file, Parameters, 0, NULL); } // ============================================================================ // // EXPRESSIONS -// +// // ============================================================================ EXPRESSION( - /* ID */ 0, - /* Name */ "ReturnedCode(", - /* Flags */ 0, - /* Params */ (0) + /* ID */ 0, + /* Name */ "ReturnedCode(", + /* Flags */ 0, + /* Params */ (0) ) { - //Deprecated variable: Notify user - MessageBoxA(NULL, "Sorry to interrupt your programming, but you have\nan old \"ReturnedCode()\" expression from ZlibStream which is removed.\nClick the ZlibStream icon in your event editor to see all the events\nZlibStream is in.", "Darkwire Software - Old Expression Notice", MB_OK); + //Deprecated variable: Notify user + MessageBox(NULL, _T("Sorry to interrupt your programming, but you have\nan old \"ReturnedCode()\" expression from ZlibStream which is removed.\nClick the ZlibStream icon in your event editor to see all the events\nZlibStream is in."), _T("Darkwire Software - Old Expression Notice"), MB_OK); return false; } EXPRESSION( - /* ID */ 1, - /* Name */ "ReturnedString$(", - /* Flags */ EXPFLAG_STRING, - /* Params */ (0) + /* ID */ 1, + /* Name */ "ReturnedString$(", + /* Flags */ EXPFLAG_STRING, + /* Params */ (0) ) { - ThreadSafe_Start(); - string temp = rdPtr -> returnstring; - ThreadSafe_End(); - ReturnStringSafe(temp.c_str()); + ThreadSafe_Start(); + tstring temp = rdPtr -> returnstring; + ThreadSafe_End(); + ReturnStringSafe(temp.c_str()); } EXPRESSION( - /* ID */ 2, - /* Name */ "BufferSize(", - /* Flags */ 0, - /* Params */ (0) + /* ID */ 2, + /* Name */ "BufferSize(", + /* Flags */ 0, + /* Params */ (0) ) { - ThreadSafe_Start(); - unsigned short temp = rdPtr -> inbuffersize; - ThreadSafe_End(); - return temp; + ThreadSafe_Start(); + unsigned short temp = rdPtr -> inbuffersize; + ThreadSafe_End(); + return temp; } EXPRESSION( - /* ID */ 3, - /* Name */ "Percentage(", - /* Flags */ EXPFLAG_DOUBLE, - /* Params */ (0) + /* ID */ 3, + /* Name */ "Percentage(", + /* Flags */ EXPFLAG_DOUBLE, + /* Params */ (0) ) { ThreadSafe_Start(); double temp = rdPtr -> PercentageDifference; - ThreadSafe_End(); + ThreadSafe_End(); //This casts to 2 decimal places - char sprintfdest[20]; - sprintf(sprintfdest,"%.2f", temp); - float temp2 = (float)atof(sprintfdest); + TCHAR sprintfdest[20]; + _stprintf(sprintfdest,_T("%.2f"), temp); + float temp2 = (float)_tstof(sprintfdest); //Voila - ReturnFloat(temp2); + ReturnFloat(temp2); } EXPRESSION( - /* ID */ 4, - /* Name */ "LastOutputFile$(", - /* Flags */ EXPFLAG_STRING, - /* Params */ (0) + /* ID */ 4, + /* Name */ "LastOutputFile$(", + /* Flags */ EXPFLAG_STRING, + /* Params */ (0) ) { - ThreadSafe_Start(); - string temp = rdPtr -> LastOutput; - ThreadSafe_End(); - ReturnStringSafe(temp.c_str()); + ThreadSafe_Start(); + tstring temp = rdPtr -> LastOutput; + ThreadSafe_End(); + ReturnStringSafe(temp.c_str()); } \ No newline at end of file diff --git a/rSDK/ZlibStream/Runtime.cpp b/rSDK/ZlibStream/Runtime.cpp index 97fe6a47..38983111 100644 --- a/rSDK/ZlibStream/Runtime.cpp +++ b/rSDK/ZlibStream/Runtime.cpp @@ -1,7 +1,7 @@ // ============================================================================ // // This file contains routines that are handled during the Runtime -// +// // ============================================================================ // Common Include @@ -10,7 +10,7 @@ // GetRunObjectDataSize // -------------------- // Returns the size of the runtime datazone of the object -// +// short WINAPI DLLExport GetRunObjectDataSize(fprh rhPtr, LPEDATA edPtr) { @@ -22,19 +22,19 @@ short WINAPI DLLExport GetRunObjectDataSize(fprh rhPtr, LPEDATA edPtr) // CreateRunObject // --------------- // The routine where the object is actually created -// +// short WINAPI DLLExport CreateRunObject(LPRDATA rdPtr, LPEDATA edPtr, fpcob cobPtr) { // Do some rSDK stuff - new (rdPtr) RUNDATA; // Call rdPtr's Constructor + new (rdPtr) RUNDATA; //Call rdPtr's Constructor #include "rCreateRunObject.h" /* - This routine runs when your object is created, as you might have guessed. - It is here that you must transfer any data you need in rdPtr from edPtr, - because after this has finished you cannot access it again! - Also, if you have anything to initialise (e.g. dynamic arrays, surface objects) - you should do it here, and free your resources in DestroyRunObject. - See Graphic_Object_Ex.txt for an example of what you may put here. + This routine runs when your object is created, as you might have guessed. + It is here that you must transfer any data you need in rdPtr from edPtr, + because after this has finished you cannot access it again! + Also, if you have anything to initialise (e.g. dynamic arrays, surface objects) + you should do it here, and free your resources in DestroyRunObject. + See Graphic_Object_Ex.txt for an example of what you may put here. */ // No errors @@ -46,13 +46,13 @@ short WINAPI DLLExport CreateRunObject(LPRDATA rdPtr, LPEDATA edPtr, fpcob cobPt // DestroyRunObject // ---------------- // Destroys the run-time object -// +// short WINAPI DLLExport DestroyRunObject(LPRDATA rdPtr, long fast) { /* - When your object is destroyed (either with a Destroy action or at the end of - the frame) this routine is called. You must free any resources you have allocated! - See Graphic_Object_Ex.txt for an example of what you may put here. + When your object is destroyed (either with a Destroy action or at the end of + the frame) this routine is called. You must free any resources you have allocated! + See Graphic_Object_Ex.txt for an example of what you may put here. */ // No errors delete rdPtr->rRd; @@ -63,34 +63,34 @@ short WINAPI DLLExport DestroyRunObject(LPRDATA rdPtr, long fast) // HandleRunObject // ---------------- // Called (if you want) each loop, this routine makes the object live -// +// short WINAPI DLLExport HandleRunObject(LPRDATA rdPtr) { - //Needs to add fixed value to vector array + //Needs to add fixed value to vector array /* - If your extension will draw to the MMF window you should first - check if anything about its display has changed : + If your extension will draw to the MMF window you should first + check if anything about its display has changed : - return rdPtr->roc.rcChanged?REFLAG_DISPLAY:0; + return rdPtr->roc.rcChanged?REFLAG_DISPLAY:0; - You will also need to make sure you change this flag yourself - to 1 whenever you want to redraw your object - - If your extension won't draw to the window, but it still needs - to do something every MMF loop use : + You will also need to make sure you change this flag yourself + to 1 whenever you want to redraw your object + + If your extension won't draw to the window, but it still needs + to do something every MMF loop use : return 0; - If you don't need to do something every loop, use : + If you don't need to do something every loop, use : return REFLAG_ONESHOT; - This doesn't mean this function can never run again. If you want MMF - to handle your object again (causing this code to run) use this function: + This doesn't mean this function can never run again. If you want MMF + to handle your object again (causing this code to run) use this function: rdPtr->rRd->Rehandle(); - At the end of the loop this code will run + At the end of the loop this code will run */ return 0; } @@ -99,12 +99,12 @@ short WINAPI DLLExport HandleRunObject(LPRDATA rdPtr) // DisplayRunObject // ---------------- // Draw the object in the application screen. -// +// short WINAPI DLLExport DisplayRunObject(LPRDATA rdPtr) { /* - If you return REFLAG_DISPLAY in HandleRunObject this routine will run. - See Graphic_Object_Ex.txt for an example of what you may put here. + If you return REFLAG_DISPLAY in HandleRunObject this routine will run. + See Graphic_Object_Ex.txt for an example of what you may put here. */ // Ok return 0; @@ -118,7 +118,7 @@ short WINAPI DLLExport DisplayRunObject(LPRDATA rdPtr) // in DisplayRunObject too, but this is automatically done if you implement // GetRunObjectSurface (MMF applies the ink effect to the transition). // -// Note: do not forget to enable the function in the .def file +// Note: do not forget to enable the function in the .def file // if you remove the comments below. /* cSurface* WINAPI DLLExport GetRunObjectSurface(LPRDATA rdPtr) @@ -135,7 +135,7 @@ cSurface* WINAPI DLLExport GetRunObjectSurface(LPRDATA rdPtr) // // Should return NULL if the object is not transparent. // -// Note: do not forget to enable the function in the .def file +// Note: do not forget to enable the function in the .def file // if you remove the comments below. // /* @@ -179,7 +179,7 @@ cSurface* WINAPI DLLExport GetRunObjectCollisionMask(LPRDATA rdPtr, LPARAM lPara // PauseRunObject // ---------------- // Enters the pause mode -// +// short WINAPI DLLExport PauseRunObject(LPRDATA rdPtr) { // Ok @@ -202,7 +202,7 @@ short WINAPI DLLExport ContinueRunObject(LPRDATA rdPtr) // ============================================================================ // // START APP / END APP / START FRAME / END FRAME routines -// +// // ============================================================================ // ------------------- @@ -210,7 +210,7 @@ short WINAPI DLLExport ContinueRunObject(LPRDATA rdPtr) // ------------------- // Called when the application starts or restarts. // Useful for storing global data -// +// void WINAPI DLLExport StartApp(mv _far *mV, CRunApp* pApp) { // Example @@ -228,7 +228,7 @@ void WINAPI DLLExport StartApp(mv _far *mV, CRunApp* pApp) // EndApp // ------------------- // Called when the application ends. -// +// void WINAPI DLLExport EndApp(mv _far *mV, CRunApp* pApp) { // Example @@ -246,7 +246,7 @@ void WINAPI DLLExport EndApp(mv _far *mV, CRunApp* pApp) // StartFrame // ------------------- // Called when the frame starts or restarts. -// +// void WINAPI DLLExport StartFrame(mv _far *mV, DWORD dwReserved, int nFrameIndex) { @@ -256,7 +256,7 @@ void WINAPI DLLExport StartFrame(mv _far *mV, DWORD dwReserved, int nFrameIndex) // EndFrame // ------------------- // Called when the frame ends. -// +// void WINAPI DLLExport EndFrame(mv _far *mV, DWORD dwReserved, int nFrameIndex) { @@ -265,17 +265,17 @@ void WINAPI DLLExport EndFrame(mv _far *mV, DWORD dwReserved, int nFrameIndex) // ============================================================================ // // TEXT ROUTINES (if OEFLAG_TEXT) -// +// // ============================================================================ // ------------------- // GetRunObjectFont // ------------------- // Return the font used by the object. -// +// /* - // Note: do not forget to enable the functions in the .def file + // Note: do not forget to enable the functions in the .def file // if you remove the comments below. void WINAPI GetRunObjectFont(LPRDATA rdPtr, LOGFONT* pLf) @@ -289,7 +289,7 @@ void WINAPI GetRunObjectFont(LPRDATA rdPtr, LOGFONT* pLf) // SetRunObjectFont // ------------------- // Change the font used by the object. -// +// void WINAPI SetRunObjectFont(LPRDATA rdPtr, LOGFONT* pLf, RECT* pRc) { // Example @@ -309,7 +309,7 @@ void WINAPI SetRunObjectFont(LPRDATA rdPtr, LOGFONT* pLf, RECT* pRc) // GetRunObjectTextColor // --------------------- // Return the text color of the object. -// +// COLORREF WINAPI GetRunObjectTextColor(LPRDATA rdPtr) { // Example @@ -321,7 +321,7 @@ COLORREF WINAPI GetRunObjectTextColor(LPRDATA rdPtr) // SetRunObjectTextColor // --------------------- // Change the text color of the object. -// +// void WINAPI SetRunObjectTextColor(LPRDATA rdPtr, COLORREF rgb) { // Example @@ -335,7 +335,7 @@ void WINAPI SetRunObjectTextColor(LPRDATA rdPtr, COLORREF rgb) // ============================================================================ // // DEBUGGER ROUTINES -// +// // ============================================================================ // ----------------- @@ -357,14 +357,14 @@ LPWORD WINAPI DLLExport GetDebugTree(LPRDATA rdPtr) // ----------------- // This routine returns the text of a given item. // -void WINAPI DLLExport GetDebugItem(LPSTR pBuffer, LPRDATA rdPtr, int id) +void WINAPI DLLExport GetDebugItem(LPTSTR pBuffer, LPRDATA rdPtr, int id) { #if !defined(RUN_ONLY) // Example // ------- /* - char temp[DB_BUFFERSIZE]; + TCHAR temp[DB_BUFFERSIZE]; switch (id) { @@ -410,16 +410,16 @@ void WINAPI DLLExport EditDebugItem(LPRDATA rdPtr, int id) case DB_CURRENTSTRING: { EditDebugInfo dbi; - char buffer[256]; + TCHAR buffer[256]; dbi.pText=buffer; dbi.lText=TEXT_MAX; dbi.pTitle=NULL; - strcpy(buffer, rdPtr->text); + _tcscpy(buffer, rdPtr->text); long ret=callRunTimeFunction(rdPtr, RFUNCTION_EDITTEXT, 0, (LPARAM)&dbi); if (ret) - strcpy(rdPtr->text, dbi.pText); + _tcscpy(rdPtr->text, dbi.pText); } break; case DB_CURRENTVALUE: diff --git a/rSDK/ZlibStream/UpgradeLog.htm b/rSDK/ZlibStream/UpgradeLog.htm new file mode 100644 index 0000000000000000000000000000000000000000..3f20e7509a787128c56e5294a7efbb9d14834ce0 GIT binary patch literal 31898 zcmeI5`%@H4mVoQm-H81kdUWUNT?ct7qIbL#JQaBef_QbjF@e10A<{gZnf=pu_xmzQ ztE*|MsTOc2!szI(s;tbDC(k=iW>x?1|NJ@oLpGYd%to?>>}@uijb*iLBRj};vhD2G z>_4)9&#ckKrTrR*qM%~m*H%l5NR)T(8NoNZ@Mv%6UjpWf_2_A~W9aQ6^6PqNKy zm*Xn6cKJP^h0r4G8qia3wd^GHx=TM#IIDAA50Gz#K6WXsXUo)I22DzNE?t{dRw)!7l-)4WR6Ufz)~m%mYT&1!V^+;k1yQ zf_Wn@2jG7IMOW$NZyY}{{t39Bk4Wy?^JW;|E3Wo9+ox3zeJ7sPXkYwH(_)=^OVo^Q zYguD!<*3*~&Uc5}5hHn2=lV3@_batqwP}WtuDi4UqQx+{t^h$vO_2V?)mj)sjWVU6 z##e4{g0ELA++BvsN`>V$V0BmOU0Ju^Dj5I0QtdR(4^VhH+X}Q+zjo>O2^inb#zjS#66Y+9WMT7hmsf(pP8W-viPLAMMq8z_O=9NMgSa3?Vt% zs&M`p_*X@mqWnLH0**mC^wMup3$$s;cFW~lAH-K&Ey*oJRV~<{&nh@~rUB=<)C+z0 zu%psB9`llP)|o`)@~cJs0`=r(ALHDEQk}tUrNPl>HR|3Ny`*oa{mA1e3thn*AAoc8 zjI}TVDRvuA)_eBt<61Ae%~)3$T{R1wEL5`<>4Pi1SSF91jpSRkDPfj#^B7L*uZ%q8 z=q{t)4>o7JB92#~sgdrD{_4D@-XcPazWE5uSF_^~326C@#Xd0(J)1hMjxTc^y>Ok9 z>U!LF1A3fuqfxhdv%zoBtsLgnaX3j&E4%aXtKF$(`T6&e@~e=<{vbc)l2|9|_;BWJ z8|6%I?LFi38vaDd+e0EhWgpKZQav*Y(BoH^$^ILa$*Y&2TsDjHuH1C$ORmZ?Ubk#t z#^)U%D>0H28zXZg$7;INsSY@si{4ks-R9%WFV3Ev+Zr2f1&KDERep0XS6!BuZa|WA z{Pb_P@xc99);>J_*bULtNd5z~lUjKkn*33<*y7+Ttm}_2oy+BMQyuMe#??3{s2u$_-f87>OHWF9)e;mJR1wdmVDFJ#|y08IRSdo22@DfY#eY5s4LcfDG%jdp#C{LEjynf7* z8V$vEmc=YvjX2)?qgT#9Q{K3GG;}}U8)-RpM#<~<80X`oZ_RaHES+P>e*BDfs9}jG zT_K-yb>5=7^ta;H6C^lE!1v%>r;%;4g%@*f9IN8zF`v$CxF!~3CM|^)#k$eL2*Z3p zwK>84FbY@C8pmXQ`}$=t(XH95(6ZzR(BafP*r%;Cv z;f(o2?`;LRhxqb*PVDM$jDj2Ic5#Lz7FDx4_nYvRlS_Xdw2hI!$-;S+B5Q5mF;}NS1`;0|Ib78O-fpsh#lCNvqj5yl_}MA#hk~WA zvGN}+og=SGz58EV&m)V=d}6#YhMo%5+{#MWN08T?;GWr$vN~@9$9KbQWWBWJ775i4O~6zbRM4|>Ra;F(Hv$qolJV(D!T51UhXV%w}LCM&OwW1 z)nu@|FLyAx=91P#p9DF%**L8zpJoc8)W^L@xvXB74qU%H#&~oFS{of}%SSnnYwJcB z>Y_PQ?-rw+onQlF9P%O5`h-;9r`80uQ&uIPpTz7)^n>p9ale;-SGZDAjf`vH=1-k} zB+r{_8B;aVd^31!_wCg}Tk|IFYSf<8Sj7-?af;_!kGOLz!HeshE5Qck7+c2?n`w#r zZmQb1B-fF)e?>?9{06*jM!X1Qb5HJulB!xZkM6VdP8a*(V&4Po$t>EtiLWDma)AxK zO>1{(X=QFhgYy~oF7D~YrJMYY`#|rW;j=_pe!m-ScURRf0h06(r#}ICo^vCsnE#ft zx7k1XOUM`+ZQag(2X?2FyDq#pq5d#?GF~ASJ=rAt)ZEK9boQBHRIic9F@D$2%7(w* z9m?jIvktM_Hq~FlZg&$GZhS2nfy={i<_*W`vr<ON& z^JDa|2yPE({h7#m0f~9dcZA

|=UP6xmCpwNAh9vKO=(rYHC2ZGzQX%11)q%RqjN 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

|=UP6xmCpwNAh9vKO=(rYHC2ZGzQX%11)q%RqjN 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 Date: Tue, 23 Jun 2026 01:54:24 -0700 Subject: [PATCH 2/2] Add VOLINFO Unicode --- MMF2SDK/VOLINFO/Ext.rc | 214 ----- MMF2SDK/VOLINFO/VOLINFO.vcxproj | 103 --- MMF2SDK_Unicode/VOLINFO/.gitattributes | 22 + MMF2SDK_Unicode/VOLINFO/.gitignore | 163 ++++ {MMF2SDK => MMF2SDK_Unicode}/VOLINFO/Common.h | 16 +- .../VOLINFO/Edittime.cpp | 113 +-- {MMF2SDK => MMF2SDK_Unicode}/VOLINFO/Ext.def | 0 MMF2SDK_Unicode/VOLINFO/Ext.rc | 215 +++++ .../VOLINFO/General.cpp | 63 +- MMF2SDK_Unicode/VOLINFO/MMF2SDK - VOLINFO.sln | 40 + .../VOLINFO/MMF2SDK - VOLINFO.vcproj | 807 ++++++++++++++++++ .../VOLINFO/MMF2SDK - VOLINFO.vcxproj | 678 +++++++++++++++ .../VOLINFO/MMF2SDK - VOLINFO.vcxproj.filters | 12 +- {MMF2SDK => MMF2SDK_Unicode}/VOLINFO/Main.cpp | 22 +- {MMF2SDK => MMF2SDK_Unicode}/VOLINFO/Main.h | 20 +- .../VOLINFO/Resource.h | 20 +- .../VOLINFO/Runtime.cpp | 100 +-- .../VOLINFO/VOLINFO Example.mfa | Bin .../VOLINFO/res/EXTICON.BMP | Bin .../VOLINFO/res/EXTIMG.BMP | Bin 20 files changed, 2117 insertions(+), 491 deletions(-) delete mode 100644 MMF2SDK/VOLINFO/Ext.rc delete mode 100644 MMF2SDK/VOLINFO/VOLINFO.vcxproj create mode 100644 MMF2SDK_Unicode/VOLINFO/.gitattributes create mode 100644 MMF2SDK_Unicode/VOLINFO/.gitignore rename {MMF2SDK => MMF2SDK_Unicode}/VOLINFO/Common.h (87%) rename {MMF2SDK => MMF2SDK_Unicode}/VOLINFO/Edittime.cpp (95%) rename {MMF2SDK => MMF2SDK_Unicode}/VOLINFO/Ext.def (100%) create mode 100644 MMF2SDK_Unicode/VOLINFO/Ext.rc rename {MMF2SDK => MMF2SDK_Unicode}/VOLINFO/General.cpp (90%) create mode 100644 MMF2SDK_Unicode/VOLINFO/MMF2SDK - VOLINFO.sln create mode 100644 MMF2SDK_Unicode/VOLINFO/MMF2SDK - VOLINFO.vcproj create mode 100644 MMF2SDK_Unicode/VOLINFO/MMF2SDK - VOLINFO.vcxproj rename MMF2SDK/VOLINFO/VOLINFO.vcxproj.filters => MMF2SDK_Unicode/VOLINFO/MMF2SDK - VOLINFO.vcxproj.filters (98%) rename {MMF2SDK => MMF2SDK_Unicode}/VOLINFO/Main.cpp (88%) rename {MMF2SDK => MMF2SDK_Unicode}/VOLINFO/Main.h (86%) rename {MMF2SDK => MMF2SDK_Unicode}/VOLINFO/Resource.h (78%) rename {MMF2SDK => MMF2SDK_Unicode}/VOLINFO/Runtime.cpp (86%) rename {MMF2SDK => MMF2SDK_Unicode}/VOLINFO/VOLINFO Example.mfa (100%) rename {MMF2SDK => MMF2SDK_Unicode}/VOLINFO/res/EXTICON.BMP (100%) rename {MMF2SDK => MMF2SDK_Unicode}/VOLINFO/res/EXTIMG.BMP (100%) diff --git a/MMF2SDK/VOLINFO/Ext.rc b/MMF2SDK/VOLINFO/Ext.rc deleted file mode 100644 index 99921718..00000000 --- a/MMF2SDK/VOLINFO/Ext.rc +++ /dev/null @@ -1,214 +0,0 @@ -//Microsoft Developer Studio generated resource script. -// -#include "resource.h" - -// Wraps str into double-quotes, like "str". This function cannot be defined via /D. -#define sub_asStr(str) "" #str "" -#define asStr(str) sub_asStr(str) - -#define APSTUDIO_READONLY_SYMBOLS -///////////////////////////////////////////////////////////////////////////// -// -// Generated from the TEXTINCLUDE 2 resource. -// -#include "..\Inc\ccx.h" -#define APSTUDIO_HIDDEN_SYMBOLS -#include -#undef APSTUDIO_HIDDEN_SYMBOLS - -///////////////////////////////////////////////////////////////////////////// -#undef APSTUDIO_READONLY_SYMBOLS - -///////////////////////////////////////////////////////////////////////////// -// English (U.S.) resources - -#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) -#ifdef _WIN32 -LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US -#pragma code_page(1252) -#endif // _WIN32 - -#ifndef _MAC -///////////////////////////////////////////////////////////////////////////// -// -// Version -// - -1 VERSIONINFO - FILEVERSION 1,0,0,EXTENSION_VERSION - PRODUCTVERSION 1,0,0,EXTENSION_VERSION - FILEFLAGSMASK VS_FFI_FILEFLAGSMASK -#ifdef _DEBUG - FILEFLAGS VS_FF_DEBUG -#else - FILEFLAGS 0 -#endif - FILEOS VOS__WINDOWS32 - FILETYPE VFT_DLL - FILESUBTYPE VFT2_UNKNOWN -BEGIN - BLOCK "StringFileInfo" - BEGIN - BLOCK "040904e4" - BEGIN - VALUE "ProductName", PROJECT_NAME "\0" - VALUE "CompanyName", COMPANY_NAME "\0" - VALUE "FileDescription", PROJECT_NAME ", " asStr(CONFIG) " build " asStr(EXTENSION_VERSION) ".\0" - VALUE "FileVersion", "2.00" "\0" - VALUE "InternalName", PROJECT_NAME ".mfx\0" - VALUE "LegalCopyright", "Copyright \xA9 " YEAR " " COMPANY_NAME "\0" - VALUE "OriginalFilename", PROJECT_NAME ".mfx\0" - VALUE "ProductVersion", "Build " asStr(EXTENSION_VERSION) ", date " BUILD_DATE ".\0" - END - END - BLOCK "VarFileInfo" - BEGIN - VALUE "Translation", 0x0409, 1252 - END -END - -#endif // !_MAC - - -///////////////////////////////////////////////////////////////////////////// -// -// Data -// - -KPX_MAGICNUMBER RCDATA -BEGIN - 0x9978, 0x8989 -END - - -///////////////////////////////////////////////////////////////////////////// -// -// Bitmap -// - -#if defined(APSTUDIO_INVOKED) || defined(EDITOR) -#if defined(APSTUDIO_INVOKED) -EXO_ICON$(EDITOR) BITMAP "RES\\EXTICON.BMP" -#else -EXO_ICON BITMAP "RES\\EXTICON.BMP" -#endif -#endif -#if defined(APSTUDIO_INVOKED) || defined(EDITOR) -#if defined(APSTUDIO_INVOKED) -EXO_IMAGE$(EDITOR) BITMAP "RES\\EXTIMG.BMP" -#else -EXO_IMAGE BITMAP "RES\\EXTIMG.BMP" -#endif -#endif - -///////////////////////////////////////////////////////////////////////////// -// -// Menu -// - -#if defined(APSTUDIO_INVOKED) || defined(EDITOR) -#if defined(APSTUDIO_INVOKED) -MN_CONDITIONS$(EDITOR) MENU -#else -MN_CONDITIONS MENU -#endif -BEGIN - MENUITEM "", 65535 -END -#endif - -#if defined(APSTUDIO_INVOKED) || defined(EDITOR) -#if defined(APSTUDIO_INVOKED) -MN_ACTIONS$(EDITOR) MENU -#else -MN_ACTIONS MENU -#endif -BEGIN - MENUITEM "", 65535 -END -#endif - -#if defined(APSTUDIO_INVOKED) || defined(EDITOR) -#if defined(APSTUDIO_INVOKED) -MN_EXPRESSIONS$(EDITOR) MENU -#else -MN_EXPRESSIONS MENU -#endif -BEGIN - POPUP "" - BEGIN - MENUITEM "Get Volume Label", IDMN_EXPRESSION2 - END -END -#endif - - -#ifdef APSTUDIO_INVOKED -///////////////////////////////////////////////////////////////////////////// -// -// TEXTINCLUDE -// - -1 TEXTINCLUDE -BEGIN - "resource.h\0" -END - -2 TEXTINCLUDE -BEGIN - "#include ""..\\Inc\\ccx.h""\r\n" - "#define APSTUDIO_HIDDEN_SYMBOLS\r\n" - "#include \r\n" - "#undef APSTUDIO_HIDDEN_SYMBOLS\r\n" - "\0" -END - -3 TEXTINCLUDE -BEGIN - "\r\n" - "\0" -END - -#endif // APSTUDIO_INVOKED - - -///////////////////////////////////////////////////////////////////////////// -// -// String Table -// - -STRINGTABLE -BEGIN - KPX_MARK "MF2" - KPX_NAME "NRG753 Volume Information" -END - -STRINGTABLE -BEGIN - M_EXPRESSION2 "VolInfo$(" -END - -STRINGTABLE -BEGIN - IDST_OBJNAME "NRG753 Volume Information" - IDST_AUTHOR "Jack Webster" - IDST_COPYRIGHT "Copyright \xA9 2006 Jack Webster" - IDST_COMMENT "Given a root path, will give the volumes label. By request of NRG753" - IDST_HTTP "(No webpage right now)" -END - -#endif // English (U.S.) resources -///////////////////////////////////////////////////////////////////////////// - - - -#ifndef APSTUDIO_INVOKED -///////////////////////////////////////////////////////////////////////////// -// -// Generated from the TEXTINCLUDE 3 resource. -// - - -///////////////////////////////////////////////////////////////////////////// -#endif // not APSTUDIO_INVOKED - diff --git a/MMF2SDK/VOLINFO/VOLINFO.vcxproj b/MMF2SDK/VOLINFO/VOLINFO.vcxproj deleted file mode 100644 index 3532a72d..00000000 --- a/MMF2SDK/VOLINFO/VOLINFO.vcxproj +++ /dev/null @@ -1,103 +0,0 @@ - - - - - Debug - Win32 - - - Edittime - Win32 - - - Runtime - Win32 - - - Vitalize - Win32 - - - - {2196C17D-EDAC-43AD-AF88-1D7D6CBD9145} - VOLINFO - - - - - - - - - - - - - - - - - - - - - - - - - - <_ProjectFileVersion>10.0.40219.1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/MMF2SDK_Unicode/VOLINFO/.gitattributes b/MMF2SDK_Unicode/VOLINFO/.gitattributes new file mode 100644 index 00000000..412eeda7 --- /dev/null +++ b/MMF2SDK_Unicode/VOLINFO/.gitattributes @@ -0,0 +1,22 @@ +# Auto detect text files and perform LF normalization +* text=auto + +# Custom for Visual Studio +*.cs diff=csharp +*.sln merge=union +*.csproj merge=union +*.vbproj merge=union +*.fsproj merge=union +*.dbproj merge=union + +# Standard to msysgit +*.doc diff=astextplain +*.DOC diff=astextplain +*.docx diff=astextplain +*.DOCX diff=astextplain +*.dot diff=astextplain +*.DOT diff=astextplain +*.pdf diff=astextplain +*.PDF diff=astextplain +*.rtf diff=astextplain +*.RTF diff=astextplain diff --git a/MMF2SDK_Unicode/VOLINFO/.gitignore b/MMF2SDK_Unicode/VOLINFO/.gitignore new file mode 100644 index 00000000..5ebd21a1 --- /dev/null +++ b/MMF2SDK_Unicode/VOLINFO/.gitignore @@ -0,0 +1,163 @@ +################# +## Eclipse +################# + +*.pydevproject +.project +.metadata +bin/ +tmp/ +*.tmp +*.bak +*.swp +*~.nib +local.properties +.classpath +.settings/ +.loadpath + +# External tool builders +.externalToolBuilders/ + +# Locally stored "Eclipse launch configurations" +*.launch + +# CDT-specific +.cproject + +# PDT-specific +.buildpath + + +################# +## Visual Studio +################# + +## Ignore Visual Studio temporary files, build results, and +## files generated by popular Visual Studio add-ons. + +# User-specific files +*.suo +*.user +*.sln.docstates + +# Build results +[Dd]ebug/ +[Rr]elease/ +*_i.c +*_p.c +*.ilk +*.meta +*.obj +*.pch +*.pdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.vspscc +.builds +*.dotCover + +## TODO: If you have NuGet Package Restore enabled, uncomment this +#packages/ + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opensdf +*.sdf + +# Visual Studio profiler +*.psess +*.vsp + +# ReSharper is a .NET coding add-in +_ReSharper* + +# Installshield output folder +[Ee]xpress + +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/*.hhc +DocProject/Help/*.hhk +DocProject/Help/*.hhp +DocProject/Help/Html2 +DocProject/Help/html + +# Click-Once directory +publish + +# Others +[Bb]in +[Oo]bj +sql +TestResults +*.Cache +ClientBin +stylecop.* +~$* +*.dbmdl +Generated_Code #added for RIA/Silverlight projects + +# Backup & report files from converting an old project file to a newer +# Visual Studio version. Backup files are not needed, because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML + + + +############ +## Windows +############ + +# Windows image file caches +Thumbs.db + +# Folder config file +Desktop.ini + + +############# +## Python +############# + +*.py[co] + +# Packages +*.egg +*.egg-info +dist +build +eggs +parts +bin +var +sdist +develop-eggs +.installed.cfg + +# Installer logs +pip-log.txt + +# Unit test / coverage reports +.coverage +.tox + +#Translations +*.mo + +#Mr Developer +.mr.developer.cfg + +# Mac crap +.DS_Store diff --git a/MMF2SDK/VOLINFO/Common.h b/MMF2SDK_Unicode/VOLINFO/Common.h similarity index 87% rename from MMF2SDK/VOLINFO/Common.h rename to MMF2SDK_Unicode/VOLINFO/Common.h index 40061092..5ec7b90f 100644 --- a/MMF2SDK/VOLINFO/Common.h +++ b/MMF2SDK_Unicode/VOLINFO/Common.h @@ -6,24 +6,26 @@ #define _CRTDBG_MAP_ALLOC 1 #endif +#define IN_EXT_VERSION2 + // ---------------------------------------------- // VERSION AND BUILD YOUR EXTENSION CAN WORK WITH // ---------------------------------------------- -//#define TGFEXT // TGF, MMF Standard and MMF Pro +//#define TGFEXT // TGF, MMF Standard and MMF Pro #define MMFEXT // MMF Standard and MMF Pro -//#define PROEXT // MMF Pro only +//#define PROEXT // MMF Pro only // Build number of the minimum required version of MMF #define MINBUILD 228 // General includes -#include "ccxhdr.h" -#include "Surface.h" +#include "ccxhdr.h" +#include "Surface.h" // Specific to this cox -#include "resource.h" -#include "main.h" -#include "TigsExt.hpp" +#include "resource.h" +#include "main.h" +#include "TigsExt.hpp" // Globals and Prototypes extern HINSTANCE hInstLib; diff --git a/MMF2SDK/VOLINFO/Edittime.cpp b/MMF2SDK_Unicode/VOLINFO/Edittime.cpp similarity index 95% rename from MMF2SDK/VOLINFO/Edittime.cpp rename to MMF2SDK_Unicode/VOLINFO/Edittime.cpp index 3ef1adaf..ac2ea78f 100644 --- a/MMF2SDK/VOLINFO/Edittime.cpp +++ b/MMF2SDK_Unicode/VOLINFO/Edittime.cpp @@ -5,7 +5,7 @@ // under the Frame and Event editors. // // Including creating, display, and setting up your object. -// +// // ============================================================================ // Common @@ -21,8 +21,8 @@ enum { // Example // ------- -// PROPID_TEXTTITLE, -// PROPID_TEXT, +// PROPID_TEXTTITLE, +// PROPID_TEXT, // PROPID_CHECK, // PROPID_COMBO, // PROPID_COLOR, @@ -31,9 +31,9 @@ enum { // Example of content of the PROPID_COMBO combo box //LPCSTR ComboList[] = { // 0, // reserved -// MAKEINTRESOURCE(IDS_FIRSTOPTION), -// MAKEINTRESOURCE(IDS_SECONDOPTION), -// MAKEINTRESOURCE(IDS_THIRDOPTION), +// MAKEINTRESOURCE(IDS_FIRSTOPTION), +// MAKEINTRESOURCE(IDS_SECONDOPTION), +// MAKEINTRESOURCE(IDS_THIRDOPTION), // NULL //}; @@ -78,7 +78,7 @@ typedef struct tagSetP // Info displayed in the object's About properties // Note: ObjComment is also displayed in the Quick Description box in the Insert Object dialog box // -void WINAPI DLLExport GetObjInfos (mv _far *mV, LPEDATA edPtr, LPSTR ObjName, LPSTR ObjAuthor, LPSTR ObjCopyright, LPSTR ObjComment, LPSTR ObjHttp) +void WINAPI DLLExport GetObjInfos (mv _far *mV, LPEDATA edPtr, LPTSTR ObjName, LPTSTR ObjAuthor, LPTSTR ObjCopyright, LPTSTR ObjComment, LPTSTR ObjHttp) { #ifndef RUN_ONLY // Name @@ -103,7 +103,7 @@ void WINAPI DLLExport GetObjInfos (mv _far *mV, LPEDATA edPtr, LPSTR ObjName, LP // ----------------- // Returns the help filename of the object. // -LPCSTR WINAPI GetHelpFileName() +LPCTSTR WINAPI GetHelpFileName() { #ifndef RUN_ONLY // Return a file without path if your help file can be loaded by the MMF help file. @@ -111,7 +111,7 @@ LPCSTR WINAPI GetHelpFileName() // Or return the path of your file, relatively to the MMF directory // if your file is not loaded by the MMF help file. - return "Help\\MyExt.chm"; + return _T("Help\\MyExt.chm"); #else return NULL; #endif // !defined(RUN_ONLY) @@ -161,7 +161,7 @@ WORD BmpToImg(int bmID, npAppli idApp, short HotX = 0, short HotY = 0, short Act // ============================================================================ // // ROUTINES USED UNDER FRAME EDITOR -// +// // ============================================================================ @@ -176,7 +176,7 @@ WORD BmpToImg(int bmID, npAppli idApp, short HotX = 0, short HotY = 0, short Act // If you need to draw the icon manually, remove the comments around this function and in the .def file. // /* -int WINAPI DLLExport MakeIconEx ( mv _far *mV, cSurface* pIconSf, LPSTR lpName, fpObjInfo oiPtr, LPEDATA edPtr ) +int WINAPI DLLExport MakeIconEx ( mv _far *mV, cSurface* pIconSf, LPTSTR lpName, fpObjInfo oiPtr, LPEDATA edPtr ) { int error = -1; #ifndef RUN_ONLY @@ -196,7 +196,7 @@ int WINAPI DLLExport MakeIconEx ( mv _far *mV, cSurface* pIconSf, LPSTR lpName, // -------------------- // CreateObject // -------------------- -// Called when you choose "Create new object". It should display the setup box +// Called when you choose "Create new object". It should display the setup box // and initialize everything in the datazone. int WINAPI DLLExport CreateObject(mv _far *mV, fpLevObj loPtr, LPEDATA edPtr) @@ -276,7 +276,7 @@ void WINAPI DLLExport RemoveObject(mv _far *mV, fpLevObj loPtr, LPEDATA edPtr, u { #ifndef RUN_ONLY // Is the last object removed? - if (0 == cpt) + if (0 == cpt) { // Do whatever necessary to remove our data } @@ -355,7 +355,7 @@ void WINAPI DLLExport EditorDisplay(mv _far *mV, fpObjInfo oiPtr, fpLevObj loPtr // IsTransparent // -------------------- // This routine tells CC&C if the mouse pointer is over a transparent zone of the object. -// +// extern "C" BOOL WINAPI DLLExport IsTransparent(mv _far *mV, fpLevObj loPtr, LPEDATA edPtr, int dx, int dy) { @@ -369,7 +369,7 @@ extern "C" BOOL WINAPI DLLExport IsTransparent(mv _far *mV, fpLevObj loPtr, LPED // PrepareToWriteObject // -------------------- // Just before writing the datazone when saving the application, CC&C calls this routine. -// +// void WINAPI DLLExport PrepareToWriteObject(mv _far *mV, LPEDATA edPtr, fpObjInfo adoi) { #ifndef RUN_ONLY @@ -401,20 +401,20 @@ BOOL WINAPI GetFilters(LPMV mV, LPEDATA edPtr, DWORD dwFlags, LPVOID pReserved) // Triggers when a file is dropped onto the frame // Return TRUE if you can create an object from the given file // -BOOL WINAPI DLLExport UsesFile (LPMV mV, LPSTR fileName) +BOOL WINAPI DLLExport UsesFile (LPMV mV, LPTSTR fileName) { BOOL r = FALSE; #ifndef RUN_ONLY // Example: return TRUE if file extension is ".txt" -/* - LPSTR ext, npath; +/* + LPTSTR ext, npath; if ( fileName != NULL ) { - if ( (ext=(LPSTR)malloc(_MAX_EXT)) != NULL ) + if ( (ext=(LPTSTR)malloc(_MAX_EXT)) != NULL ) { - if ( (npath=(LPSTR)malloc(_MAX_PATH)) != NULL ) + if ( (npath=(LPTSTR)malloc(_MAX_PATH)) != NULL ) { strcpy(npath, fileName); _splitpath(npath, NULL, NULL, NULL, ext); @@ -435,7 +435,7 @@ BOOL WINAPI DLLExport UsesFile (LPMV mV, LPSTR fileName) // -------------------- // Creates a new object from file // -void WINAPI DLLExport CreateFromFile (LPMV mV, LPSTR fileName, LPEDATA edPtr) +void WINAPI DLLExport CreateFromFile (LPMV mV, LPTSTR fileName, LPEDATA edPtr) { #ifndef RUN_ONLY // Initialize your extension data from the given file @@ -450,7 +450,7 @@ void WINAPI DLLExport CreateFromFile (LPMV mV, LPSTR fileName, LPEDATA edPtr) // ============================================================================ // // PROPERTIES -// +// // ============================================================================ // -------------------- @@ -536,7 +536,7 @@ LPVOID WINAPI DLLExport GetPropValue(LPMV mV, LPEDATA edPtr, UINT nPropID) // // // Returns a string // case PROPID_TEXT: -// return new CPropDataValue(&edPtr->szText[0]); +// return new CPropStringValue(&edPtr->szText[0]); // // // Returns the value of the combo box // case PROPID_COMBO: @@ -595,7 +595,7 @@ void WINAPI DLLExport SetPropValue(LPMV mV, LPEDATA edPtr, UINT nPropID, LPVOID // case PROPID_TEXT: // { // // Gets the string -// LPSTR pStr = (LPSTR)((CPropDataValue*)pValue)->m_pData; +// LPTSTR pStr = ((CPropStringValue*)pValue)->GetString(); // // // You can simply poke the string if your EDITDATA structure has a fixed size, // // or have an adaptive size of structure like below @@ -605,7 +605,7 @@ void WINAPI DLLExport SetPropValue(LPMV mV, LPEDATA edPtr, UINT nPropID, LPVOID // { // // Asks MMF to reallocate the structure with the new size // LPEDATA pNewPtr = (LPEDATA)mvReAllocEditData(mV, edPtr, sizeof(EDITDATA)+strlen(pStr)); -// +// // // If reallocation worked // if (pNewPtr!=NULL) // { @@ -615,7 +615,7 @@ void WINAPI DLLExport SetPropValue(LPMV mV, LPEDATA edPtr, UINT nPropID, LPVOID // } // } // else -// { +// { // // Same size : simply copy // strcpy(edPtr->text, pStr); // } @@ -699,7 +699,7 @@ BOOL WINAPI IsPropEnabled(LPMV mV, LPEDATA edPtr, UINT nPropID) // ============================================================================ // // TEXT PROPERTIES -// +// // ============================================================================ // -------------------- @@ -718,7 +718,7 @@ DWORD WINAPI DLLExport GetTextCaps(mv _far *mV, LPEDATA edPtr) // Return the font used the object. // Note: the pStyle and cbSize parameters are obsolete and passed for compatibility reasons only. // -BOOL WINAPI DLLExport GetTextFont(mv _far *mV, LPEDATA edPtr, LPLOGFONT plf, LPSTR pStyle, UINT cbSize) +BOOL WINAPI DLLExport GetTextFont(mv _far *mV, LPEDATA edPtr, LPLOGFONT plf, LPTSTR pStyle, UINT cbSize) { #if !defined(RUN_ONLY) // Example: copy LOGFONT structure from EDITDATA @@ -830,24 +830,24 @@ void WINAPI DLLExport SetTextAlignment(mv _far *mV, LPEDATA edPtr, DWORD dwAlign // // ROUTINES USED UNDER EVENT / TIME / STEP-THROUGH EDITOR // You should not need to change these routines -// +// // ============================================================================ // ----------------- // menucpy // ----------------- // Internal routine used later, copy one menu onto another -// -#ifndef RUN_ONLY +// void menucpy(HMENU hTargetMenu, HMENU hSourceMenu) { +#ifndef RUN_ONLY int n, id, nMn; - NPSTR strBuf; + LPTSTR strBuf; HMENU hSubMenu; - + nMn = GetMenuItemCount(hSourceMenu); - strBuf = (NPSTR)LocalAlloc(LPTR, 80); - for (n=0; ninfos.code != code) eiPtr = EVINFO2_NEXT(eiPtr); - + return eiPtr; } -#endif // !defined(RUN_ONLY) +//#endif // !defined(RUN_ONLY) // ---------------------------------------------------- @@ -951,7 +952,7 @@ HMENU WINAPI DLLExport GetExpressionMenu(mv _far *mV, fpObjInfo oiPtr, LPEDATA e // #ifndef RUN_ONLY -void GetCodeTitle(LPEVENTINFOS2 eiPtr, short code, short param, short mn, LPSTR strBuf, WORD maxLen) +void GetCodeTitle(LPEVENTINFOS2 eiPtr, short code, short param, short mn, LPTSTR strBuf, WORD maxLen) { HMENU hMn; @@ -965,7 +966,7 @@ void GetCodeTitle(LPEVENTINFOS2 eiPtr, short code, short param, short mn, LPSTR LoadString(hInstLib, strID, strBuf, maxLen); else { - // Otherwise, returns the menu option + // Otherwise, returns the menu option if ((hMn = LoadMenu(hInstLib, MAKEINTRESOURCE(mn))) != NULL ) { GetMenuString(hMn, eiPtr->menu, strBuf, maxLen, MF_BYCOMMAND); @@ -977,15 +978,15 @@ void GetCodeTitle(LPEVENTINFOS2 eiPtr, short code, short param, short mn, LPSTR #define GetCodeTitle(a,b,c,d,e,f) #endif // !defined(RUN_ONLY) -void WINAPI DLLExport GetConditionTitle(mv _far *mV, short code, short param, LPSTR strBuf, short maxLen) +void WINAPI DLLExport GetConditionTitle(mv _far *mV, short code, short param, LPTSTR strBuf, short maxLen) { GetCodeTitle((LPEVENTINFOS2)conditionsInfos, code, param, MN_CONDITIONS, strBuf, maxLen); } -void WINAPI DLLExport GetActionTitle(mv _far *mV, short code, short param, LPSTR strBuf, short maxLen) +void WINAPI DLLExport GetActionTitle(mv _far *mV, short code, short param, LPTSTR strBuf, short maxLen) { GetCodeTitle((LPEVENTINFOS2)actionsInfos, code, param, MN_ACTIONS, strBuf, maxLen); } -void WINAPI DLLExport GetExpressionTitle(mv _far *mV, short code, LPSTR strBuf, short maxLen) +void WINAPI DLLExport GetExpressionTitle(mv _far *mV, short code, LPTSTR strBuf, short maxLen) { GetCodeTitle((LPEVENTINFOS2)expressionsInfos, code, 0, MN_EXPRESSIONS, strBuf, maxLen); } @@ -1005,7 +1006,7 @@ short WINAPI DLLExport GetConditionCodeFromMenu(mv _far *mV, short menuId) for (n=CND_LAST, eiPtr=(LPEVENTINFOS2)conditionsInfos; n>0 && eiPtr->menu!=menuId; n--) eiPtr = EVINFO2_NEXT(eiPtr); - if (n>0) + if (n>0) return eiPtr->infos.code; #endif // !defined(RUN_ONLY) return -1; @@ -1019,7 +1020,7 @@ short WINAPI DLLExport GetActionCodeFromMenu(mv _far *mV, short menuId) for (n=ACT_LAST, eiPtr=(LPEVENTINFOS2)actionsInfos; n>0 && eiPtr->menu!=menuId; n--) eiPtr = EVINFO2_NEXT(eiPtr); - if (n>0) + if (n>0) return eiPtr->infos.code; #endif // !defined(RUN_ONLY) return -1; @@ -1033,7 +1034,7 @@ short WINAPI DLLExport GetExpressionCodeFromMenu(mv _far *mV, short menuId) for (n=EXP_LAST, eiPtr=(LPEVENTINFOS2)expressionsInfos; n>0 && eiPtr->menu!=menuId; n--) eiPtr = EVINFO2_NEXT(eiPtr); - if (n>0) + if (n>0) return eiPtr->infos.code; #endif // !defined(RUN_ONLY) return -1; @@ -1043,8 +1044,8 @@ short WINAPI DLLExport GetExpressionCodeFromMenu(mv _far *mV, short menuId) // ------------------------------------------------------- // GetConditionInfos / GetActionInfos / GetExpressionInfos // ------------------------------------------------------- -// From a action / condition / expression code, returns -// an infosEvents structure. +// From a action / condition / expression code, returns +// an infosEvents structure. // LPINFOEVENTSV2 WINAPI DLLExport GetConditionInfos(mv _far *mV, short code) @@ -1078,11 +1079,11 @@ LPINFOEVENTSV2 WINAPI DLLExport GetExpressionInfos(mv _far *mV, short code) // ---------------------------------------------------------- // GetConditionString / GetActionString / GetExpressionString // ---------------------------------------------------------- -// From a action / condition / expression code, returns +// From a action / condition / expression code, returns // the string to use for displaying it under the event editor // -void WINAPI DLLExport GetConditionString(mv _far *mV, short code, LPSTR strPtr, short maxLen) +void WINAPI DLLExport GetConditionString(mv _far *mV, short code, LPTSTR strPtr, short maxLen) { #ifndef RUN_ONLY // Check compatibility @@ -1091,7 +1092,7 @@ void WINAPI DLLExport GetConditionString(mv _far *mV, short code, LPSTR strPtr, #endif // !defined(RUN_ONLY) } -void WINAPI DLLExport GetActionString(mv _far *mV, short code, LPSTR strPtr, short maxLen) +void WINAPI DLLExport GetActionString(mv _far *mV, short code, LPTSTR strPtr, short maxLen) { #ifndef RUN_ONLY // Check compatibility @@ -1100,7 +1101,7 @@ void WINAPI DLLExport GetActionString(mv _far *mV, short code, LPSTR strPtr, sho #endif // !defined(RUN_ONLY) } -void WINAPI DLLExport GetExpressionString(mv _far *mV, short code, LPSTR strPtr, short maxLen) +void WINAPI DLLExport GetExpressionString(mv _far *mV, short code, LPTSTR strPtr, short maxLen) { #ifndef RUN_ONLY // Check compatibility @@ -1114,7 +1115,7 @@ void WINAPI DLLExport GetExpressionString(mv _far *mV, short code, LPSTR strPtr, // ---------------------------------------------------------- // Returns the parameter name to display in the expression editor // -void WINAPI DLLExport GetExpressionParam(mv _far *mV, short code, short param, LPSTR strBuf, short maxLen) +void WINAPI DLLExport GetExpressionParam(mv _far *mV, short code, short param, LPTSTR strBuf, short maxLen) { #if !defined(RUN_ONLY) short strID; @@ -1216,7 +1217,7 @@ void WINAPI EditParameter(mv _far *mV, short code, paramExt* pExt) // -------------------- // Initialize the parameter. // -void WINAPI GetParameterString(mv _far *mV, short code, paramExt* pExt, LPSTR pDest, short size) +void WINAPI GetParameterString(mv _far *mV, short code, paramExt* pExt, LPTSTR pDest, short size) { #if !defined(RUN_ONLY) diff --git a/MMF2SDK/VOLINFO/Ext.def b/MMF2SDK_Unicode/VOLINFO/Ext.def similarity index 100% rename from MMF2SDK/VOLINFO/Ext.def rename to MMF2SDK_Unicode/VOLINFO/Ext.def diff --git a/MMF2SDK_Unicode/VOLINFO/Ext.rc b/MMF2SDK_Unicode/VOLINFO/Ext.rc new file mode 100644 index 00000000..a4072c0c --- /dev/null +++ b/MMF2SDK_Unicode/VOLINFO/Ext.rc @@ -0,0 +1,215 @@ +//Microsoft Developer Studio generated resource script. +// +#include "resource.h" + +#define APSTUDIO_READONLY_SYMBOLS +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 2 resource. +// +#include "..\Inc\ccx.h" +#define APSTUDIO_HIDDEN_SYMBOLS +#include "windows.h" +#undef APSTUDIO_HIDDEN_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +#undef APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +// English (U.S.) resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) +#ifdef _WIN32 +LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US +#pragma code_page(1252) +#endif //_WIN32 + +#ifndef _MAC +///////////////////////////////////////////////////////////////////////////// +// +// Version +// + +1 VERSIONINFO + FILEVERSION 1,0,0,0 + PRODUCTVERSION 1,0,0,0 + FILEFLAGSMASK 0x0L +#ifdef _DEBUG + FILEFLAGS 0x21L +#else + FILEFLAGS 0x20L +#endif + FILEOS 0x10001L + FILETYPE 0x1L + FILESUBTYPE 0x0L +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "040904e4" + BEGIN + VALUE "Comments", "\0" + VALUE "CompanyName", "Clickteam\0" + VALUE "FileDescription", "NRG753 Volume Information\0" + VALUE "FileVersion", "2.00\0" + VALUE "InternalName", "VOLINFO\0" + VALUE "LegalCopyright", "Copyright � 2006 Jack Webster\0" + VALUE "LegalTrademarks", "\0" + VALUE "OriginalFilename", "VOLINFO.mfx\0" + VALUE "PrivateBuild", "\0" + VALUE "ProductName", "\0" + VALUE "ProductVersion", "1, 0, 0, 0\0" + VALUE "SpecialBuild", "00000001\0" + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x409, 1252 + END +END + +#endif // !_MAC + + +///////////////////////////////////////////////////////////////////////////// +// +// Data +// + +KPX_MAGICNUMBER RCDATA MOVEABLE PURE +BEGIN + 0x9978, 0x8989 +END + + +///////////////////////////////////////////////////////////////////////////// +// +// Bitmap +// + +#if defined(APSTUDIO_INVOKED) || defined(EDITOR) +#if defined(APSTUDIO_INVOKED) +EXO_ICON$(EDITOR) BITMAP MOVEABLE PURE "RES\\EXTICON.BMP" +#else +EXO_ICON BITMAP MOVEABLE PURE "RES\\EXTICON.BMP" +#endif +#endif +#if defined(APSTUDIO_INVOKED) || defined(EDITOR) +#if defined(APSTUDIO_INVOKED) +EXO_IMAGE$(EDITOR) BITMAP MOVEABLE PURE "RES\\EXTIMG.BMP" +#else +EXO_IMAGE BITMAP MOVEABLE PURE "RES\\EXTIMG.BMP" +#endif +#endif + +///////////////////////////////////////////////////////////////////////////// +// +// Menu +// + +#if defined(APSTUDIO_INVOKED) || defined(EDITOR) +#if defined(APSTUDIO_INVOKED) +MN_CONDITIONS$(EDITOR) MENU DISCARDABLE +#else +MN_CONDITIONS MENU DISCARDABLE +#endif +BEGIN + MENUITEM "", 65535 +END +#endif + +#if defined(APSTUDIO_INVOKED) || defined(EDITOR) +#if defined(APSTUDIO_INVOKED) +MN_ACTIONS$(EDITOR) MENU DISCARDABLE +#else +MN_ACTIONS MENU DISCARDABLE +#endif +BEGIN + MENUITEM "", 65535 +END +#endif + +#if defined(APSTUDIO_INVOKED) || defined(EDITOR) +#if defined(APSTUDIO_INVOKED) +MN_EXPRESSIONS$(EDITOR) MENU DISCARDABLE +#else +MN_EXPRESSIONS MENU DISCARDABLE +#endif +BEGIN + POPUP "" + BEGIN + MENUITEM "Get Volume Label", IDMN_EXPRESSION2 + MENUITEM SEPARATOR + END +END +#endif + + +#ifdef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// TEXTINCLUDE +// + +1 TEXTINCLUDE DISCARDABLE +BEGIN + "resource.h\0" +END + +2 TEXTINCLUDE DISCARDABLE +BEGIN + "#include ""..\\Inc\\ccx.h""\r\n" + "#define APSTUDIO_HIDDEN_SYMBOLS\r\n" + "#include ""windows.h""\r\n" + "#undef APSTUDIO_HIDDEN_SYMBOLS\r\n" + "\0" +END + +3 TEXTINCLUDE DISCARDABLE +BEGIN + "\r\n" + "\0" +END + +#endif // APSTUDIO_INVOKED + + +///////////////////////////////////////////////////////////////////////////// +// +// String Table +// + +STRINGTABLE DISCARDABLE +BEGIN + KPX_MARK "MF2" + KPX_NAME "NRG753 Volume Information" +END + +STRINGTABLE DISCARDABLE +BEGIN + M_EXPRESSION2 "VolInfo$(" +END + +STRINGTABLE DISCARDABLE +BEGIN + IDST_OBJNAME "NRG753 Volume Information" + IDST_AUTHOR "Jack Webster" + IDST_COPYRIGHT "Copyright \xA9 2006-2026 Jack Webster" + IDST_COMMENT "Given a root path, will give the volumes label. By request of NRG753" + IDST_HTTP "(No webpage right now)" +END + +#endif // English (U.S.) resources +///////////////////////////////////////////////////////////////////////////// + + + +#ifndef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 3 resource. +// + + +///////////////////////////////////////////////////////////////////////////// +#endif // not APSTUDIO_INVOKED + diff --git a/MMF2SDK/VOLINFO/General.cpp b/MMF2SDK_Unicode/VOLINFO/General.cpp similarity index 90% rename from MMF2SDK/VOLINFO/General.cpp rename to MMF2SDK_Unicode/VOLINFO/General.cpp index 670cbf39..986a4647 100644 --- a/MMF2SDK/VOLINFO/General.cpp +++ b/MMF2SDK_Unicode/VOLINFO/General.cpp @@ -4,7 +4,7 @@ // The following routines are used internally by MMF, and should not need to // be modified. // -// +// // ============================================================================ // Common Include @@ -15,13 +15,13 @@ HINSTANCE hInstLib; // ============================================================================ // // LIBRARY ENTRY & QUIT POINTS -// +// // ============================================================================ // ----------------- // Entry points // ----------------- -// Usually you do not need to do any initialization here: you will prefer to +// Usually you do not need to do any initialization here: you will prefer to // do them in "Initialize" found in Edittime.cpp BOOL WINAPI DllMain(HINSTANCE hDLL, DWORD dwReason, LPVOID lpReserved) { @@ -29,7 +29,7 @@ BOOL WINAPI DllMain(HINSTANCE hDLL, DWORD dwReason, LPVOID lpReserved) { // DLL is attaching to the address space of the current process. case DLL_PROCESS_ATTACH: - + hInstLib = hDLL; // Store HINSTANCE break; @@ -42,10 +42,10 @@ BOOL WINAPI DllMain(HINSTANCE hDLL, DWORD dwReason, LPVOID lpReserved) break; // The calling process is detaching the DLL from its address space. - case DLL_PROCESS_DETACH: + case DLL_PROCESS_DETACH: break; } - + return TRUE; } @@ -66,7 +66,7 @@ extern "C" int WINAPI DLLExport Initialize(mv _far *mV, int quiet) // ----------------- // Where you want to kill and initialized data opened in the above routine // Called just before freeing the DLL. -// +// extern "C" int WINAPI DLLExport Free(mv _far *mV) { // No error @@ -76,18 +76,18 @@ extern "C" int WINAPI DLLExport Free(mv _far *mV) // ============================================================================ // // GENERAL INFO -// +// // ============================================================================ // ----------------- // Get Infos // ----------------- -// -extern "C" +// +extern "C" { DWORD WINAPI DLLExport GetInfos(int info) { - + switch (info) { case KGI_VERSION: @@ -98,6 +98,12 @@ extern "C" return PRODUCT_VERSION_STANDARD; // Works with MMF Standard or above case KGI_BUILD: return 240; // Works with build 240 or above + case KGI_UNICODE: + #ifdef _UNICODE + return TRUE; + #else + return FALSE; + #endif default: return 0; } @@ -109,7 +115,7 @@ extern "C" // ---------------------------------------------------------- // Fills an information structure that tells CC&C everything // about the object, its actions, conditions and expressions -// +// short WINAPI DLLExport GetRunObjectInfos(mv _far *mV, fpKpxRunInfos infoPtr) { @@ -131,10 +137,10 @@ short WINAPI DLLExport GetRunObjectInfos(mv _far *mV, fpKpxRunInfos infoPtr) // Identifier, for run-time identification infoPtr->identifier = IDENTIFIER; - + // Current version infoPtr->version = KCX_CURRENT_VERSION; - + return TRUE; } @@ -144,14 +150,14 @@ short WINAPI DLLExport GetRunObjectInfos(mv _far *mV, fpKpxRunInfos infoPtr) // Returns the name of the external modules that you wish MMF to include // with stand-alone applications (these modules must be in the MMF // Data\Runtime folder). -// +// -//LPCSTR szDep[] = { -// "MyDll.dll", +//LPCTSTR szDep[] = { +// _T("MyDll.dll"), // NULL //}; -LPCSTR* WINAPI DLLExport GetDependencies() +LPCTSTR* WINAPI DLLExport GetDependencies() { return NULL; // szDep; } @@ -183,7 +189,7 @@ void WINAPI DLLExport UnloadObject(mv _far *mV, LPEDATA edPtr, int reserved) // -------------------- // For you to update your object structure to newer versions // Called at both edit time and run time -// +// HGLOBAL WINAPI DLLExport UpdateEditStructure(mv __far *mV, void __far * OldEdPtr) { // We do nothing here @@ -198,9 +204,10 @@ HGLOBAL WINAPI DLLExport UpdateEditStructure(mv __far *mV, void __far * OldEdPtr // Called at edit time and run time. // // Call lpfnUpdate to update your file pathname (refer to the documentation) -// -void WINAPI DLLExport UpdateFileNames(mv _far *mV, LPSTR appName, LPEDATA edPtr, void (WINAPI * lpfnUpdate)(LPSTR, LPSTR)) +// +void WINAPI DLLExport UpdateFileNames(mv _far *mV, LPTSTR appName, LPEDATA edPtr, void (WINAPI * lpfnUpdate)(LPTSTR, LPTSTR)) { + } // --------------------- @@ -209,22 +216,22 @@ void WINAPI DLLExport UpdateFileNames(mv _far *mV, LPSTR appName, LPEDATA edPtr, // // Uncomment this function if you need to store an image in the image bank. // -// Note: do not forget to enable the function in the .def file +// Note: do not forget to enable the function in the .def file // if you remove the comments below. // /* int WINAPI DLLExport EnumElts (mv __far *mV, LPEDATA edPtr, ENUMELTPROC enumProc, ENUMELTPROC undoProc, LPARAM lp1, LPARAM lp2) -{ +{ int error = 0; // Replace wImgIdx with the name of the WORD variable you create within the edit structure - - // Enum images + + // Enum images if ( (error = enumProc(&edPtr->wImgIdx, IMG_TAB, lp1, lp2)) != 0 ) { - // Undo enum images - undoProc (&edPtr->wImgIdx, IMG_TAB, lp1, lp2); - } + // Undo enum images + undoProc (&edPtr->wImgIdx, IMG_TAB, lp1, lp2); + } return error; } diff --git a/MMF2SDK_Unicode/VOLINFO/MMF2SDK - VOLINFO.sln b/MMF2SDK_Unicode/VOLINFO/MMF2SDK - VOLINFO.sln new file mode 100644 index 00000000..ed072de5 --- /dev/null +++ b/MMF2SDK_Unicode/VOLINFO/MMF2SDK - VOLINFO.sln @@ -0,0 +1,40 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 15 +VisualStudioVersion = 15.0.37327.16 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "MMF2SDK - VOLINFO", "MMF2SDK - VOLINFO.vcxproj", "{2196C17D-EDAC-43AD-AF88-1D7D6CBD9145}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug Unicode|x86 = Debug Unicode|x86 + Debug|x86 = Debug|x86 + Edittime Unicode|x86 = Edittime Unicode|x86 + Edittime|x86 = Edittime|x86 + Runtime Unicode|x86 = Runtime Unicode|x86 + Runtime|x86 = Runtime|x86 + Vitalize|x86 = Vitalize|x86 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {2196C17D-EDAC-43AD-AF88-1D7D6CBD9145}.Debug Unicode|x86.ActiveCfg = Debug Unicode|Win32 + {2196C17D-EDAC-43AD-AF88-1D7D6CBD9145}.Debug Unicode|x86.Build.0 = Debug Unicode|Win32 + {2196C17D-EDAC-43AD-AF88-1D7D6CBD9145}.Debug|x86.ActiveCfg = Debug|Win32 + {2196C17D-EDAC-43AD-AF88-1D7D6CBD9145}.Debug|x86.Build.0 = Debug|Win32 + {2196C17D-EDAC-43AD-AF88-1D7D6CBD9145}.Edittime Unicode|x86.ActiveCfg = Edittime Unicode|Win32 + {2196C17D-EDAC-43AD-AF88-1D7D6CBD9145}.Edittime Unicode|x86.Build.0 = Edittime Unicode|Win32 + {2196C17D-EDAC-43AD-AF88-1D7D6CBD9145}.Edittime|x86.ActiveCfg = Edittime|Win32 + {2196C17D-EDAC-43AD-AF88-1D7D6CBD9145}.Edittime|x86.Build.0 = Edittime|Win32 + {2196C17D-EDAC-43AD-AF88-1D7D6CBD9145}.Runtime Unicode|x86.ActiveCfg = Runtime Unicode|Win32 + {2196C17D-EDAC-43AD-AF88-1D7D6CBD9145}.Runtime Unicode|x86.Build.0 = Runtime Unicode|Win32 + {2196C17D-EDAC-43AD-AF88-1D7D6CBD9145}.Runtime|x86.ActiveCfg = Runtime|Win32 + {2196C17D-EDAC-43AD-AF88-1D7D6CBD9145}.Runtime|x86.Build.0 = Runtime|Win32 + {2196C17D-EDAC-43AD-AF88-1D7D6CBD9145}.Vitalize|x86.ActiveCfg = Vitalize|Win32 + {2196C17D-EDAC-43AD-AF88-1D7D6CBD9145}.Vitalize|x86.Build.0 = Vitalize|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {244770B2-A722-4976-85DA-F5FFB2A012A3} + EndGlobalSection +EndGlobal diff --git a/MMF2SDK_Unicode/VOLINFO/MMF2SDK - VOLINFO.vcproj b/MMF2SDK_Unicode/VOLINFO/MMF2SDK - VOLINFO.vcproj new file mode 100644 index 00000000..43cd5121 --- /dev/null +++ b/MMF2SDK_Unicode/VOLINFO/MMF2SDK - VOLINFO.vcproj @@ -0,0 +1,807 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/MMF2SDK_Unicode/VOLINFO/MMF2SDK - VOLINFO.vcxproj b/MMF2SDK_Unicode/VOLINFO/MMF2SDK - VOLINFO.vcxproj new file mode 100644 index 00000000..632b655b --- /dev/null +++ b/MMF2SDK_Unicode/VOLINFO/MMF2SDK - VOLINFO.vcxproj @@ -0,0 +1,678 @@ + + + + + Debug Unicode + Win32 + + + Debug + Win32 + + + Edittime Unicode + Win32 + + + Edittime + Win32 + + + Runtime Unicode + Win32 + + + Runtime + Win32 + + + Vitalize + Win32 + + + + {2196C17D-EDAC-43AD-AF88-1D7D6CBD9145} + MMF2SDK - VOLINFO + 10.0.19041.0 + + + + DynamicLibrary + false + v141 + + + DynamicLibrary + false + v141 + + + DynamicLibrary + false + v141 + + + DynamicLibrary + false + v141 + + + DynamicLibrary + false + v141 + + + DynamicLibrary + false + v141 + + + DynamicLibrary + false + v141 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.40219.1 + .\Vitalize_Small\ + .\Vitalize_Small\ + false + .\Release_Small\ + .\Release_Small\Unicode\ + .\Release_Small\ + .\Release_Small\Unicode\ + false + false + .\Debug\ + .\Debug\Unicode\ + .\Debug\ + .\Debug\Unicode\ + true + true + .\Run_Only_Small\ + .\Run_Only_Small\Unicode\ + .\Run_Only_Small\ + .\Run_Only_Small\Unicode\ + false + false + AllRules.ruleset + AllRules.ruleset + + + + + AllRules.ruleset + AllRules.ruleset + + + + + AllRules.ruleset + AllRules.ruleset + + + + + AllRules.ruleset + + + false + false + false + false + false + false + false + false + false + + + + NDEBUG;RUN_ONLY;%(PreprocessorDefinitions) + true + true + Win32 + .\Vitalize_Small/Template.tlb + + + + + MinSpace + OnlyExplicitInline + ..\Inc;.\;..\..\Inc;%(AdditionalIncludeDirectories) + NDEBUG;WIN32;_WINDOWS;STRICT;RUN_ONLY;VITALIZE;COXSDK;%(PreprocessorDefinitions) + true + Sync + MultiThreaded + true + true + .\Vitalize_Small/Template.pch + .\Vitalize_Small/ + .\Vitalize_Small/ + .\Vitalize_Small/ + Level3 + true + + + NDEBUG;RUN_ONLY;VITALIZE;%(PreprocessorDefinitions) + 0x0409 + ..\..\Inc;%(AdditionalIncludeDirectories) + .\Vitalize_Small\Ext.res + + + kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;..\lib\mmfs2.lib;%(AdditionalDependencies) + $(ProjectDir)MOX\$(ProjectName).mox + true + false + .\Ext.def + .\Vitalize_Small/Template.pdb + false + + + .\Vitalize_Small/Template.lib + MachineX86 + false + ..\..\lib\;%(AdditionalLibraryDirectories) + + + true + .\Vitalize_Small/Template.bsc + + + + + NDEBUG;%(PreprocessorDefinitions) + true + true + Win32 + .\Release_Small/Template.tlb + + + + + MinSpace + OnlyExplicitInline + ..\Inc;.\;..\..\Inc;%(AdditionalIncludeDirectories) + NDEBUG;WIN32;_WINDOWS;STRICT;COXSDK;%(PreprocessorDefinitions) + true + Sync + MultiThreaded + true + true + .\Release_Small/Template.pch + .\Release_Small/ + .\Release_Small/ + .\Release_Small/ + Level3 + true + + + NDEBUG;EDITOR;%(PreprocessorDefinitions) + 0x0409 + ..\..\Inc;%(AdditionalIncludeDirectories) + .\Release_Small\Ext.res + + + kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;..\lib\mmfs2.lib;%(AdditionalDependencies) + $(ProjectDir)MFX\Extensions\$(ProjectName).mfx + true + false + .\Ext.def + .\Release_Small/Template.pdb + false + + + .\Release_Small/Template.lib + MachineX86 + ..\..\lib\;%(AdditionalLibraryDirectories) + + + true + .\Release_Small/Template.bsc + + + + + + + + + + + NDEBUG;%(PreprocessorDefinitions) + true + true + Win32 + .\Release_Small/Template.tlb + + + + + MinSpace + OnlyExplicitInline + ..\Inc;.\;..\..\Inc;%(AdditionalIncludeDirectories) + NDEBUG;WIN32;_WINDOWS;STRICT;COXSDK;_UNICODE;UNICODE;%(PreprocessorDefinitions) + true + Sync + MultiThreaded + true + true + .\Release_Small/Template.pch + .\Release_Small/ + .\Release_Small/ + .\Release_Small/ + Level3 + true + + + NDEBUG;EDITOR;%(PreprocessorDefinitions) + 0x0409 + ..\..\Inc;%(AdditionalIncludeDirectories) + .\Release_Small\Ext.res + + + kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;..\lib\mmfs2.lib;%(AdditionalDependencies) + $(ProjectDir)MFX\Extensions\Unicode\$(ProjectName).mfx + true + false + .\Ext.def + .\Release_Small/Template.pdb + false + + + .\Release_Small/Template.lib + MachineX86 + ..\..\lib\;%(AdditionalLibraryDirectories) + + + true + .\Release_Small/Template.bsc + + + + + + + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + Win32 + .\Debug/Template.tlb + + + + + Disabled + ..\Inc;.\;..\..\Inc;%(AdditionalIncludeDirectories) + _DEBUG;WIN32;_WINDOWS;STRICT;COXSDK;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebug + + + .\Debug/ + .\Debug/ + .\Debug/ + Level3 + true + ProgramDatabase + + + _DEBUG;EDITOR;%(PreprocessorDefinitions) + 0x0409 + ..\..\Inc;%(AdditionalIncludeDirectories) + .\Debug\Ext.res + + + kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;..\lib\mmfs2.lib;%(AdditionalDependencies) + $(ProjectDir)MFX\Extensions\$(ProjectName).mfx + true + ..\lib\;..\..\lib\;%(AdditionalLibraryDirectories) + .\Ext.def + false + .\Debug/Template.pdb + false + + + .\Debug/Template.lib + MachineX86 + + + true + .\Debug/Template.bsc + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + Win32 + .\Debug/Template.tlb + + + + + Disabled + ..\Inc;.\;..\..\Inc;%(AdditionalIncludeDirectories) + _DEBUG;WIN32;_WINDOWS;STRICT;COXSDK;_UNICODE;UNICODE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebug + + + .\Debug/ + .\Debug/ + .\Debug/ + Level3 + true + ProgramDatabase + + + _DEBUG;EDITOR;%(PreprocessorDefinitions) + 0x0409 + ..\..\Inc;%(AdditionalIncludeDirectories) + .\Debug\Ext.res + + + kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;..\lib\mmfs2.lib;%(AdditionalDependencies) + $(ProjectDir)MFX\DEBUG\Extensions\Unicode\$(ProjectName).mfx + true + ..\lib\;..\..\lib\;%(AdditionalLibraryDirectories) + .\Ext.def + false + .\Debug/Template.pdb + false + + + .\Debug/Template.lib + MachineX86 + + + true + .\Debug/Template.bsc + + + + + NDEBUG;RUN_ONLY;%(PreprocessorDefinitions) + true + true + Win32 + .\Run_Only_Small/Template.tlb + + + + + MinSpace + OnlyExplicitInline + ..\Inc;.\;..\..\Inc;%(AdditionalIncludeDirectories) + NDEBUG;WIN32;_WINDOWS;STRICT;RUN_ONLY;COXSDK;%(PreprocessorDefinitions) + true + Sync + MultiThreaded + true + true + .\Run_Only_Small/Template.pch + .\Run_Only_Small/ + .\Run_Only_Small/ + .\Run_Only_Small/ + Level3 + true + + + NDEBUG;RUN_ONLY;%(PreprocessorDefinitions) + 0x0409 + ..\..\Inc;%(AdditionalIncludeDirectories) + .\Run_Only_Small\Ext.res + + + kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;..\lib\mmfs2.lib;%(AdditionalDependencies) + $(ProjectDir)MFX\Data\Runtime\$(ProjectName).mfx + true + false + .\Ext.def + $(ProjectDir)..\..\MFX\Data\Runtime\$(ProjectName)_Full.pdb + false + + + .\Run_Only_Small/Template.lib + MachineX86 + true + $(ProjectDir)..\..\MFX\Data\Runtime\$(ProjectName).pdb + ..\..\lib\;%(AdditionalLibraryDirectories) + + + true + .\Run_Only_Small/Template.bsc + + + + + + + + + + + NDEBUG;RUN_ONLY;%(PreprocessorDefinitions) + true + true + Win32 + .\Run_Only_Small/Template.tlb + + + + + MinSpace + OnlyExplicitInline + ..\Inc;.\;..\..\Inc;%(AdditionalIncludeDirectories) + NDEBUG;WIN32;_WINDOWS;STRICT;RUN_ONLY;COXSDK;_UNICODE;UNICODE;%(PreprocessorDefinitions) + true + Sync + MultiThreaded + true + true + .\Run_Only_Small/Template.pch + .\Run_Only_Small/ + .\Run_Only_Small/ + .\Run_Only_Small/ + Level3 + true + + + NDEBUG;RUN_ONLY;%(PreprocessorDefinitions) + 0x0409 + ..\..\Inc;%(AdditionalIncludeDirectories) + .\Run_Only_Small\Ext.res + + + kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;..\lib\mmfs2.lib;%(AdditionalDependencies) + $(ProjectDir)MFX\Data\Runtime\Unicode\$(ProjectName).mfx + true + false + .\Ext.def + $(ProjectDir)..\..\MFX\Data\Runtime\$(ProjectName)_Full.pdb + false + + + .\Run_Only_Small/Template.lib + MachineX86 + true + $(ProjectDir)..\..\MFX\Data\Runtime\$(ProjectName).pdb + ..\..\lib\;%(AdditionalLibraryDirectories) + + + true + .\Run_Only_Small/Template.bsc + + + + + + + + + + + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + %(AdditionalIncludeDirectories) + %(PreprocessorDefinitions) + + + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + %(AdditionalIncludeDirectories) + %(PreprocessorDefinitions) + + + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + %(AdditionalIncludeDirectories) + %(PreprocessorDefinitions) + + + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + %(AdditionalIncludeDirectories) + %(PreprocessorDefinitions) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + %(PreprocessorDefinitions) + %(AdditionalIncludeDirectories) + + + + + + \ No newline at end of file diff --git a/MMF2SDK/VOLINFO/VOLINFO.vcxproj.filters b/MMF2SDK_Unicode/VOLINFO/MMF2SDK - VOLINFO.vcxproj.filters similarity index 98% rename from MMF2SDK/VOLINFO/VOLINFO.vcxproj.filters rename to MMF2SDK_Unicode/VOLINFO/MMF2SDK - VOLINFO.vcxproj.filters index 794fd3f0..8b5e055f 100644 --- a/MMF2SDK/VOLINFO/VOLINFO.vcxproj.filters +++ b/MMF2SDK_Unicode/VOLINFO/MMF2SDK - VOLINFO.vcxproj.filters @@ -32,15 +32,15 @@ + + Source Files + Resource Files Resource Files - - Resource Files - @@ -49,6 +49,9 @@ Header Files + + Header Files + MMF Headers @@ -139,9 +142,6 @@ MMF Headers - - Resource Files - diff --git a/MMF2SDK/VOLINFO/Main.cpp b/MMF2SDK_Unicode/VOLINFO/Main.cpp similarity index 88% rename from MMF2SDK/VOLINFO/Main.cpp rename to MMF2SDK_Unicode/VOLINFO/Main.cpp index 8f25bdf5..3b94af8b 100644 --- a/MMF2SDK/VOLINFO/Main.cpp +++ b/MMF2SDK_Unicode/VOLINFO/Main.cpp @@ -38,7 +38,7 @@ short expressionsInfos[]= // ============================================================================ // // CONDITION ROUTINES -// +// // ============================================================================ @@ -47,20 +47,20 @@ short expressionsInfos[]= // ============================================================================ // // EXPRESSIONS ROUTINES -// +// // ============================================================================ long WINAPI DLLExport GetVol(LPRDATA rdPtr,long param1) { long p1 = CNC_GetFirstExpressionParameter(rdPtr, param1, TYPE_STRING); //Reversing the string. - LPSTR buf = (LPSTR)callRunTimeFunction(rdPtr, RFUNCTION_GETSTRINGSPACE, MAX_PATH , 0); + LPTSTR buf = (LPTSTR)callRunTimeFunction(rdPtr, RFUNCTION_GETSTRINGSPACE, MAX_PATH , 0); buf[0] = '\0'; DWORD w1,w2,w3; - char ignore[10]; + TCHAR ignore[10]; //None of the info is null because sometimes that crashes Win9x machines. - GetVolumeInformation( (LPSTR)p1 , buf , MAX_PATH , &w1 , &w2 , &w3 , ignore , 9 ); - + GetVolumeInformation( (LPTSTR)p1 , buf , MAX_PATH , &w1 , &w2 , &w3 , ignore , 9 ); + rdPtr->rHo.hoFlags |= HOF_STRING; return (long)buf; } @@ -74,18 +74,18 @@ long WINAPI DLLExport GetVol(LPRDATA rdPtr,long param1) // Located at the end of the source for convinience // Must finish with a 0 // -long (WINAPI * ConditionJumps[])(LPRDATA rdPtr, long param1, long param2) = - { +long (WINAPI * ConditionJumps[])(LPRDATA rdPtr, long param1, long param2) = + { 0 }; - + short (WINAPI * ActionJumps[])(LPRDATA rdPtr, long param1, long param2) = { 0 }; -long (WINAPI * ExpressionJumps[])(LPRDATA rdPtr, long param) = - { +long (WINAPI * ExpressionJumps[])(LPRDATA rdPtr, long param) = + { GetVol, 0 }; \ No newline at end of file diff --git a/MMF2SDK/VOLINFO/Main.h b/MMF2SDK_Unicode/VOLINFO/Main.h similarity index 86% rename from MMF2SDK/VOLINFO/Main.h rename to MMF2SDK_Unicode/VOLINFO/Main.h index 43918d48..821d95c6 100644 --- a/MMF2SDK/VOLINFO/Main.h +++ b/MMF2SDK_Unicode/VOLINFO/Main.h @@ -2,6 +2,14 @@ // and then remove the #pragma message above. If you do not do this, MMF2 // could confuse your object with another in the event editor. +#ifdef _UNICODE + #define EDITDATA EDITDATAW + #define LPEDATA LPEDATAW +#else + #define EDITDATA EDITDATAA + #define LPEDATA LPEDATAA +#endif + // ------------------------------ // DEFINITION OF CONDITIONS CODES // ------------------------------ @@ -20,10 +28,10 @@ #define EXP_EXPRESSION2 0 -#define EXP_LAST 1 +#define EXP_LAST 1 // --------------------- -// OBJECT DATA STRUCTURE +// OBJECT DATA STRUCTURE // --------------------- // Used at edit time and saved in the MFA/CCN/EXE files @@ -48,7 +56,7 @@ typedef EDITDATA * LPEDATA; // Used at runtime. Initialize it in the CreateRunObject function. // Free any allocated memory or object in the DestroyRunObject function. // -// Note: if you store C++ objects in this structure and do not store +// Note: if you store C++ objects in this structure and do not store // them as pointers, you must call yourself their constructor in the // CreateRunObject function and their destructor in the DestroyRunObject // function. As the RUNDATA structure is a simple C structure and not a C++ object. @@ -75,11 +83,11 @@ typedef RUNDATA * LPRDATA; // Default flags - see documentation for more info // ------------- -#define OEFLAGS 0 -#define OEPREFS 0 +#define OEFLAGS 0 +#define OEPREFS 0 // If to handle message, specify the priority of the handling procedure -// 0= low, 255= very high. You should use 100 as normal. +// 0= low, 255= very high. You should use 100 as normal. // -------------------------------------------------------------------- #define WINDOWPROC_PRIORITY 100 diff --git a/MMF2SDK/VOLINFO/Resource.h b/MMF2SDK_Unicode/VOLINFO/Resource.h similarity index 78% rename from MMF2SDK/VOLINFO/Resource.h rename to MMF2SDK_Unicode/VOLINFO/Resource.h index 01025157..8eb5246f 100644 --- a/MMF2SDK/VOLINFO/Resource.h +++ b/MMF2SDK_Unicode/VOLINFO/Resource.h @@ -2,7 +2,7 @@ // App Studio generated include file. // Used by Ext.rc // -#define _APS_NO_MFC 1 +#define _APS_NO_MFC 1 // About box information #define IDST_OBJNAME 128 @@ -12,10 +12,10 @@ #define IDST_HTTP 132 // Dialog Box ID -#define DB_SETUP 20003 +#define DB_SETUP 20003 // Help ID -#define ID_HELP 20004 +#define ID_HELP 20004 // Actions @@ -25,10 +25,10 @@ #define MN_ACTIONS 20000 // Commands of action menu -#define IDMN_ACTION 25000 +#define IDMN_ACTION 25000 // Action strings -#define M_ACTION 5000 +#define M_ACTION 5000 // Titles of action parameters #define M_ACT_P1 5501 @@ -73,13 +73,13 @@ #define M_EXP_P2 7501 // Next default values for new objects -// +// #ifdef APSTUDIO_INVOKED #ifndef APSTUDIO_READONLY_SYMBOLS -#define _APS_NEXT_RESOURCE_VALUE 101 -#define _APS_NEXT_COMMAND_VALUE 40001 -#define _APS_NEXT_CONTROL_VALUE 1001 -#define _APS_NEXT_SYMED_VALUE 101 +#define _APS_NEXT_RESOURCE_VALUE 101 +#define _APS_NEXT_COMMAND_VALUE 40001 +#define _APS_NEXT_CONTROL_VALUE 1001 +#define _APS_NEXT_SYMED_VALUE 101 #endif #endif diff --git a/MMF2SDK/VOLINFO/Runtime.cpp b/MMF2SDK_Unicode/VOLINFO/Runtime.cpp similarity index 86% rename from MMF2SDK/VOLINFO/Runtime.cpp rename to MMF2SDK_Unicode/VOLINFO/Runtime.cpp index 8f3f4a81..36a19b42 100644 --- a/MMF2SDK/VOLINFO/Runtime.cpp +++ b/MMF2SDK_Unicode/VOLINFO/Runtime.cpp @@ -3,7 +3,7 @@ // This file contains routines that are handled during the Runtime. // // Including creating, display, and handling your object. -// +// // ============================================================================ // Common Include @@ -44,7 +44,7 @@ WORD DebugTree[]= // GetRunObjectDataSize // -------------------- // Returns the size of the runtime datazone of the object -// +// ushort WINAPI DLLExport GetRunObjectDataSize(fprh rhPtr, LPEDATA edPtr) { return(sizeof(RUNDATA)); @@ -55,15 +55,15 @@ ushort WINAPI DLLExport GetRunObjectDataSize(fprh rhPtr, LPEDATA edPtr) // CreateRunObject // --------------- // The routine where the object is actually created -// +// short WINAPI DLLExport CreateRunObject(LPRDATA rdPtr, LPEDATA edPtr, fpcob cobPtr) { /* - This routine runs when your object is created, as you might have guessed. - It is here that you must transfer any data you need in rdPtr from edPtr, - because after this has finished you cannot access it again! - Also, if you have anything to initialise (e.g. dynamic arrays, surface objects) - you should do it here, and free your resources in DestroyRunObject. + This routine runs when your object is created, as you might have guessed. + It is here that you must transfer any data you need in rdPtr from edPtr, + because after this has finished you cannot access it again! + Also, if you have anything to initialise (e.g. dynamic arrays, surface objects) + you should do it here, and free your resources in DestroyRunObject. */ // No errors return 0; @@ -74,12 +74,12 @@ short WINAPI DLLExport CreateRunObject(LPRDATA rdPtr, LPEDATA edPtr, fpcob cobPt // DestroyRunObject // ---------------- // Destroys the run-time object -// +// short WINAPI DLLExport DestroyRunObject(LPRDATA rdPtr, long fast) { /* - When your object is destroyed (either with a Destroy action or at the end of - the frame) this routine is called. You must free any resources you have allocated! + When your object is destroyed (either with a Destroy action or at the end of + the frame) this routine is called. You must free any resources you have allocated! */ // No errors return 0; @@ -90,38 +90,38 @@ short WINAPI DLLExport DestroyRunObject(LPRDATA rdPtr, long fast) // HandleRunObject // ---------------- // Called (if you want) each loop, this routine makes the object live -// +// short WINAPI DLLExport HandleRunObject(LPRDATA rdPtr) { /* - If your extension will draw to the MMF window you should first - check if anything about its display has changed : + If your extension will draw to the MMF window you should first + check if anything about its display has changed : - if (rdPtr->roc.rcChanged) - return REFLAG_DISPLAY; - else - return 0; + if (rdPtr->roc.rcChanged) + return REFLAG_DISPLAY; + else + return 0; - You will also need to make sure you change this flag yourself - to 1 whenever you want to redraw your object + You will also need to make sure you change this flag yourself + to 1 whenever you want to redraw your object + + If your extension won't draw to the window, but it still needs + to do something every MMF loop use : - If your extension won't draw to the window, but it still needs - to do something every MMF loop use : + return 0; - return 0; + If you don't need to do something every loop, use : - If you don't need to do something every loop, use : + return REFLAG_ONESHOT; - return REFLAG_ONESHOT; + This doesn't mean this function can never run again. If you want MMF + to handle your object again (causing this code to run) use this function: - This doesn't mean this function can never run again. If you want MMF - to handle your object again (causing this code to run) use this function: + callRun-timeFunction(rdPtr, RFUNCTION_REHANDLE, 0, 0); - callRun-timeFunction(rdPtr, RFUNCTION_REHANDLE, 0, 0); - - At the end of the loop this code will run + At the end of the loop this code will run */ - // Will not be called next loop + // Will not be called next loop return REFLAG_ONESHOT; } @@ -129,11 +129,11 @@ short WINAPI DLLExport HandleRunObject(LPRDATA rdPtr) // DisplayRunObject // ---------------- // Draw the object in the application screen. -// +// short WINAPI DLLExport DisplayRunObject(LPRDATA rdPtr) { /* - If you return REFLAG_DISPLAY in HandleRunObject this routine will run. + If you return REFLAG_DISPLAY in HandleRunObject this routine will run. */ // Ok return 0; @@ -147,7 +147,7 @@ short WINAPI DLLExport DisplayRunObject(LPRDATA rdPtr) // in DisplayRunObject too, but this is automatically done if you implement // GetRunObjectSurface (MMF applies the ink effect to the surface). // -// Note: do not forget to enable the function in the .def file +// Note: do not forget to enable the function in the .def file // if you remove the comments below. /* cSurface* WINAPI DLLExport GetRunObjectSurface(LPRDATA rdPtr) @@ -164,7 +164,7 @@ cSurface* WINAPI DLLExport GetRunObjectSurface(LPRDATA rdPtr) // // Should return NULL if the object is not transparent. // -// Note: do not forget to enable the function in the .def file +// Note: do not forget to enable the function in the .def file // if you remove the comments below. // /* @@ -208,7 +208,7 @@ LPSMASK WINAPI DLLExport GetRunObjectCollisionMask(LPRDATA rdPtr, LPARAM lParam) // PauseRunObject // ---------------- // Enters the pause mode -// +// short WINAPI DLLExport PauseRunObject(LPRDATA rdPtr) { // Ok @@ -231,7 +231,7 @@ short WINAPI DLLExport ContinueRunObject(LPRDATA rdPtr) // ============================================================================ // // START APP / END APP / START FRAME / END FRAME routines -// +// // ============================================================================ // ------------------- @@ -239,7 +239,7 @@ short WINAPI DLLExport ContinueRunObject(LPRDATA rdPtr) // ------------------- // Called when the application starts or restarts. // Useful for storing global data -// +// void WINAPI DLLExport StartApp(mv _far *mV, CRunApp* pApp) { // Example @@ -257,7 +257,7 @@ void WINAPI DLLExport StartApp(mv _far *mV, CRunApp* pApp) // EndApp // ------------------- // Called when the application ends. -// +// void WINAPI DLLExport EndApp(mv _far *mV, CRunApp* pApp) { // Example @@ -275,7 +275,7 @@ void WINAPI DLLExport EndApp(mv _far *mV, CRunApp* pApp) // StartFrame // ------------------- // Called when the frame starts or restarts. -// +// void WINAPI DLLExport StartFrame(mv _far *mV, DWORD dwReserved, int nFrameIndex) { } @@ -284,7 +284,7 @@ void WINAPI DLLExport StartFrame(mv _far *mV, DWORD dwReserved, int nFrameIndex) // EndFrame // ------------------- // Called when the frame ends. -// +// void WINAPI DLLExport EndFrame(mv _far *mV, DWORD dwReserved, int nFrameIndex) { } @@ -292,17 +292,17 @@ void WINAPI DLLExport EndFrame(mv _far *mV, DWORD dwReserved, int nFrameIndex) // ============================================================================ // // TEXT ROUTINES (if OEFLAG_TEXT) -// +// // ============================================================================ // ------------------- // GetRunObjectFont // ------------------- // Return the font used by the object. -// +// /* - // Note: do not forget to enable the functions in the .def file + // Note: do not forget to enable the functions in the .def file // if you remove the comments below. void WINAPI GetRunObjectFont(LPRDATA rdPtr, LOGFONT* pLf) @@ -316,7 +316,7 @@ void WINAPI GetRunObjectFont(LPRDATA rdPtr, LOGFONT* pLf) // SetRunObjectFont // ------------------- // Change the font used by the object. -// +// void WINAPI SetRunObjectFont(LPRDATA rdPtr, LOGFONT* pLf, RECT* pRc) { // Example @@ -336,7 +336,7 @@ void WINAPI SetRunObjectFont(LPRDATA rdPtr, LOGFONT* pLf, RECT* pRc) // GetRunObjectTextColor // --------------------- // Return the text color of the object. -// +// COLORREF WINAPI GetRunObjectTextColor(LPRDATA rdPtr) { // Example @@ -348,7 +348,7 @@ COLORREF WINAPI GetRunObjectTextColor(LPRDATA rdPtr) // SetRunObjectTextColor // --------------------- // Change the text color of the object. -// +// void WINAPI SetRunObjectTextColor(LPRDATA rdPtr, COLORREF rgb) { // Example @@ -364,7 +364,7 @@ void WINAPI SetRunObjectTextColor(LPRDATA rdPtr, COLORREF rgb) // WINDOWPROC (interception of messages sent to hMainWin and hEditWin) // // Do not forget to enable the WindowProc function in the .def file if you implement it -// +// // ============================================================================ /* // Get the pointer to the object's data from its window handle @@ -416,7 +416,7 @@ LRESULT CALLBACK DLLExport WindowProc(LPRH rhPtr, HWND hWnd, UINT nMsg, WPARAM w // ============================================================================ // // DEBUGGER ROUTINES -// +// // ============================================================================ // ----------------- @@ -438,7 +438,7 @@ LPWORD WINAPI DLLExport GetDebugTree(LPRDATA rdPtr) // ----------------- // This routine returns the text of a given item. // -void WINAPI DLLExport GetDebugItem(LPSTR pBuffer, LPRDATA rdPtr, int id) +void WINAPI DLLExport GetDebugItem(LPTSTR pBuffer, LPRDATA rdPtr, int id) { #if !defined(RUN_ONLY) diff --git a/MMF2SDK/VOLINFO/VOLINFO Example.mfa b/MMF2SDK_Unicode/VOLINFO/VOLINFO Example.mfa similarity index 100% rename from MMF2SDK/VOLINFO/VOLINFO Example.mfa rename to MMF2SDK_Unicode/VOLINFO/VOLINFO Example.mfa diff --git a/MMF2SDK/VOLINFO/res/EXTICON.BMP b/MMF2SDK_Unicode/VOLINFO/res/EXTICON.BMP similarity index 100% rename from MMF2SDK/VOLINFO/res/EXTICON.BMP rename to MMF2SDK_Unicode/VOLINFO/res/EXTICON.BMP diff --git a/MMF2SDK/VOLINFO/res/EXTIMG.BMP b/MMF2SDK_Unicode/VOLINFO/res/EXTIMG.BMP similarity index 100% rename from MMF2SDK/VOLINFO/res/EXTIMG.BMP rename to MMF2SDK_Unicode/VOLINFO/res/EXTIMG.BMP