From 1961c36454464cb4a06c6635c714974d7011a4d0 Mon Sep 17 00:00:00 2001 From: Josh Coalson Date: Wed, 30 Oct 2002 06:13:28 +0000 Subject: [PATCH] initial import --- include/share/file_utils.h | 72 ++++++++++++++ src/share/file_utils/Makefile.am | 20 ++++ src/share/file_utils/Makefile.lite | 15 +++ src/share/file_utils/Makefile.vc | 23 +++++ src/share/file_utils/file_utils.c | 142 ++++++++++++++++++++++++++++ src/share/file_utils/file_utils.dsp | 115 ++++++++++++++++++++++ src/share/file_utils/file_utils.o | Bin 0 -> 23168 bytes 7 files changed, 387 insertions(+) create mode 100644 include/share/file_utils.h create mode 100644 src/share/file_utils/Makefile.am create mode 100644 src/share/file_utils/Makefile.lite create mode 100644 src/share/file_utils/Makefile.vc create mode 100644 src/share/file_utils/file_utils.c create mode 100644 src/share/file_utils/file_utils.dsp create mode 100644 src/share/file_utils/file_utils.o diff --git a/include/share/file_utils.h b/include/share/file_utils.h new file mode 100644 index 00000000..d3aca52b --- /dev/null +++ b/include/share/file_utils.h @@ -0,0 +1,72 @@ +/* file_utils - Convenience lib for manipulating file stats + * Copyright (C) 2002 Josh Coalson + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +/* + * This wraps the gain_analysis lib, which is LGPL. This wrapper + * allows analysis of different input resolutions by automatically + * scaling the input signal + */ + +#ifndef FLAC__SHARE__FILE_UTILS_H +#define FLAC__SHARE__FILE_UTILS_H + +#if defined(FLAC__NO_DLL) || defined(unix) || defined(__CYGWIN__) || defined(__CYGWIN32__) +#define FILE_UTILS_API + +#else + +#ifdef FILE_UTILS_API_EXPORTS +#define FILE_UTILS_API _declspec(dllexport) +#else +#define FILE_UTILS_API _declspec(dllimport) +#define __LIBNAME__ "file_utils.lib" +#pragma comment(lib, __LIBNAME__) +#undef __LIBNAME__ + +#endif +#endif + +#include /* for off_t */ +#include /* for FILE */ +#include "FLAC/ordinals.h" + +#ifdef __cplusplus +extern "C" { +#endif + +FILE_UTILS_API void FLAC__file_utils_copy_metadata(const char *srcpath, const char *destpath); +FILE_UTILS_API off_t FLAC__file_utils_get_filesize(const char *srcpath); +FILE_UTILS_API const char *FLAC__file_utils_get_basename(const char *srcpath); + +/* read_only == false means "make file writable by user" + * read_only == true means "make file read-only for everyone" + */ +FILE_UTILS_API FLAC__bool FLAC__file_utils_change_stats(const char *filename, FLAC__bool read_only); + +/* attempts to make writable before unlinking */ +FILE_UTILS_API FLAC__bool FLAC__file_utils_remove_file(const char *filename); + +/* these will forcibly set stdin/stdout to binary mode (for OSes that require it) */ +FILE_UTILS_API FILE *FLAC__file_utils_get_binary_stdin(); +FILE_UTILS_API FILE *FLAC__file_utils_get_binary_stdout(); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/share/file_utils/Makefile.am b/src/share/file_utils/Makefile.am new file mode 100644 index 00000000..d9258db0 --- /dev/null +++ b/src/share/file_utils/Makefile.am @@ -0,0 +1,20 @@ +## Process this file with automake to produce Makefile.in + +AUTOMAKE_OPTIONS = foreign + +INCLUDES = -I$(top_srcdir)/include + +noinst_LIBRARIES = libfile_utils.a + +libfile_utils_a_SOURCES = file_utils.c + +EXTRA_DIST = \ + Makefile.lite \ + Makefile.vc \ + file_utils.dsp + +debug: + $(MAKE) all CFLAGS="@DEBUG@" + +profile: + $(MAKE) all CFLAGS="@PROFILE@" diff --git a/src/share/file_utils/Makefile.lite b/src/share/file_utils/Makefile.lite new file mode 100644 index 00000000..f337baba --- /dev/null +++ b/src/share/file_utils/Makefile.lite @@ -0,0 +1,15 @@ +# +# GNU makefile +# + +topdir = ../../.. + +LIB_NAME = libfile_utils +INCLUDES = -I$(topdir)/include + +OBJS = \ + file_utils.o + +include $(topdir)/build/lib.mk + +# DO NOT DELETE THIS LINE -- make depend depends on it. diff --git a/src/share/file_utils/Makefile.vc b/src/share/file_utils/Makefile.vc new file mode 100644 index 00000000..86e62776 --- /dev/null +++ b/src/share/file_utils/Makefile.vc @@ -0,0 +1,23 @@ +!include + +!IFDEF DEBUG +.c.obj: + $(cc) /D "_LIB" -DFLAC__NO_DLL /GX $(cdebug) $(cflags) /I "..\..\..\include" -DSTRICT -YX /Od /D "_DEBUG" $< +!else +.c.obj: + $(cc) /D "_LIB" -DFLAC__NO_DLL /O2 $(crelease) $(cflags) /I "..\..\..\include" -DSTRICT -YX -DNODEBUG $< +!endif + +C_FILES= \ + file_utils.c \ + +OBJS= $(C_FILES:.c=.obj) + +all: file_utils.lib + +file_utils.lib: $(OBJS) + link.exe -lib /nodefaultlib -out:../../../obj/lib/$*.lib $(OBJS) + +clean: + -del *.obj *.pch + -del ..\..\..\obj\lib\file_utils.lib ..\..\..\obj\lib\file_utils.pdb diff --git a/src/share/file_utils/file_utils.c b/src/share/file_utils/file_utils.c new file mode 100644 index 00000000..54054e3a --- /dev/null +++ b/src/share/file_utils/file_utils.c @@ -0,0 +1,142 @@ +/* file_utils - Convenience lib for manipulating file stats + * Copyright (C) 2002 Josh Coalson + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#if defined _MSC_VER || defined __MINGW32__ +#include /* for utime() */ +#include /* for chmod(), _setmode(), unlink() */ +#include /* for _O_BINARY */ +#else +#include /* some flavors of BSD (like OS X) require this to get time_t */ +#include /* for utime() */ +#endif +#ifdef __CYGWIN__ +#include /* for setmode(), O_BINARY */ +#include /* for _O_BINARY */ +#endif +#include /* for stat(), maybe chmod() */ +#if defined _WIN32 && !defined __CYGWIN__ +#else +#include /* for unlink() */ +#endif +#include +#include +#include /* for strrchr() */ +#include "share/file_utils.h" + + +FILE_UTILS_API void FLAC__file_utils_copy_metadata(const char *srcpath, const char *destpath) +{ + struct stat srcstat; + struct utimbuf srctime; + + if(0 == stat(srcpath, &srcstat)) { + srctime.actime = srcstat.st_atime; + srctime.modtime = srcstat.st_mtime; + (void)chmod(destpath, srcstat.st_mode); + (void)utime(destpath, &srctime); + } +} + +FILE_UTILS_API off_t FLAC__file_utils_get_filesize(const char *srcpath) +{ + struct stat srcstat; + + if(0 == stat(srcpath, &srcstat)) + return srcstat.st_size; + else + return -1; +} + +FILE_UTILS_API const char *FLAC__file_utils_get_basename(const char *srcpath) +{ + const char *p; + + p = strrchr(srcpath, '/'); + if(0 == p) { + p = strrchr(srcpath, '\\'); + if(0 == p) + return srcpath; + } + return ++p; +} + +FILE_UTILS_API FLAC__bool FLAC__file_utils_change_stats(const char *filename, FLAC__bool read_only) +{ + struct stat stats; + + if(0 == stat(filename, &stats)) { +#if !defined _MSC_VER && !defined __MINGW32__ + if(read_only) { + stats.st_mode &= ~S_IWUSR; + stats.st_mode &= ~S_IWGRP; + stats.st_mode &= ~S_IWOTH; + } + else { + stats.st_mode |= S_IWUSR; + } +#else + if(read_only) + stats.st_mode &= ~S_IWRITE; + else + stats.st_mode |= S_IWRITE; +#endif + if(0 != chmod(filename, stats.st_mode)) + return false; + } + else + return false; + + return true; +} + +FILE_UTILS_API FLAC__bool FLAC__file_utils_remove_file(const char *filename) +{ + return FLAC__file_utils_change_stats(filename, /*read_only=*/false) && 0 == unlink(filename); +} + +FILE_UTILS_API FILE *FLAC__file_utils_get_binary_stdin() +{ + /* if something breaks here it is probably due to the presence or + * absence of an underscore before the identifiers 'setmode', + * 'fileno', and/or 'O_BINARY'; check your system header files. + */ +#if defined _MSC_VER || defined __MINGW32__ + _setmode(_fileno(stdin), _O_BINARY); +#elif defined __CYGWIN__ + /* almost certainly not needed for any modern Cygwin, but let's be safe... */ + setmode(_fileno(stdin), _O_BINARY); +#endif + + return stdin; +} + +FILE_UTILS_API FILE *FLAC__file_utils_get_binary_stdout() +{ + /* if something breaks here it is probably due to the presence or + * absence of an underscore before the identifiers 'setmode', + * 'fileno', and/or 'O_BINARY'; check your system header files. + */ +#if defined _MSC_VER || defined __MINGW32__ + _setmode(_fileno(stdout), _O_BINARY); +#elif defined __CYGWIN__ + /* almost certainly not needed for any modern Cygwin, but let's be safe... */ + setmode(_fileno(stdout), _O_BINARY); +#endif + + return stdout; +} diff --git a/src/share/file_utils/file_utils.dsp b/src/share/file_utils/file_utils.dsp new file mode 100644 index 00000000..fcfca0ea --- /dev/null +++ b/src/share/file_utils/file_utils.dsp @@ -0,0 +1,115 @@ +# Microsoft Developer Studio Project File - Name="file_utils" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 + +CFG=file_utils - Win32 Debug +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "file_utils.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "file_utils.mak" CFG="file_utils - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "file_utils - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") +!MESSAGE "file_utils - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "file_utils" +# PROP Scc_LocalPath "..\..\.." +CPP=cl.exe +MTL=midl.exe +RSC=rc.exe + +!IF "$(CFG)" == "file_utils - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "..\..\..\obj\lib" +# PROP Intermediate_Dir "Release" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c +# ADD CPP /nologo /MD /W3 /GR /GX /O2 /I ".\include" /I "..\..\..\include" /D "NDEBUG" /D "REPLAYGAIN_API_EXPORTS" /D "_WINDOWS" /D "_WINDLL" /D "WIN32" /D "_USRDLL" /FR /FD /c +# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 +# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 +# ADD BASE RSC /l 0x409 /d "NDEBUG" +# ADD RSC /l 0x409 /d "NDEBUG" /d "_USRDLL" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386 +# ADD LINK32 /nologo /subsystem:windows /dll /machine:I386 /out:"..\..\..\obj\bin/file_utils.dll" + +!ELSEIF "$(CFG)" == "file_utils - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "..\..\..\obj\lib" +# PROP Intermediate_Dir "Debug" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c +# ADD CPP /nologo /MDd /W3 /Gm /GR /GX /ZI /Od /I ".\include" /I "..\..\..\include" /D "_DEBUG" /D "_CHATTER" /D "REPLAYGAIN_API_EXPORTS" /D "_WINDOWS" /D "_WINDLL" /D "WIN32" /D "_USRDLL" /FR /FD /c +# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 +# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 +# ADD BASE RSC /l 0x409 /d "_DEBUG" +# ADD RSC /l 0x409 /d "_DEBUG" /d "_USRDLL" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386 /pdbtype:sept +# ADD LINK32 /nologo /subsystem:windows /dll /debug /machine:I386 /out:"..\..\..\obj\bin/file_utils.dll" /pdbtype:sept + +!ENDIF + +# Begin Target + +# Name "file_utils - Win32 Release" +# Name "file_utils - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp" +# Begin Source File + +SOURCE=.\file_utils.c +# End Source File +# End Group +# Begin Group "Private Header Files" + +# PROP Default_Filter "" +# End Group +# Begin Group "Protected Header Files" + +# PROP Default_Filter "" +# End Group +# Begin Group "Public Header Files" + +# PROP Default_Filter "" +# Begin Source File + +SOURCE=..\..\..\include\share\file_utils.h +# End Source File +# End Group +# End Target +# End Project diff --git a/src/share/file_utils/file_utils.o b/src/share/file_utils/file_utils.o new file mode 100644 index 0000000000000000000000000000000000000000..8578b1ed826ee861cac87551fd4473db687b0188 GIT binary patch literal 23168 zcmb<-^>JflWMqH=Mh0dE1doBiArvBG0;V(=cp11DLOY)}zo}?`!_n(HBjA52$BRGz z|Nn13BG7rD^+2h9x9f#Y*9qOOH#%LXG{52aU%KLdDGy8uSkr_6B$1PcCxFe%083$- z$JOn6r1QXQj@~kc9smFT{|{5o(fo!ZOCQDdPS-!pwSO2&l|fQ5Sfx0+T{$`ryyl+J z>-y(EL$~Xn&I2b8t>@!Gg7Dj}6M^wiM7U|?WiVL_+|3BkmX*|JD#%#qm0 zYW$JJJ6J$&J`R!wW0;w9z~TyEvCUw%BA9&&%vJ)k?}OROVD?uqTNTXaWd)h324*XR z*`O4_z+eSt8-c}xz-(hMI}^-? zAbUY6ih)52%(erI8-UsNV742W?Eq%SfZ2{>x1vB$yoxWD2eTux0>qV73>ST?J;RgW0uUc0HI4$-y(gY)~#{VAu?1w}920 z2eaG3>=$5m7nse&g-GYhNNig!kQ=~CzyvI<79ol60<$4$@*9{9R?6^$8>APK#zc5P zY)DCy2xdd#dM20+iPNoMHY6@QctPr;zy`H}*^sbZ3}*L$#X$tjJ;?0cU^S5Zavscv zxa|p;tpZZY@Ey#C z&vU_SNc!9iX8VBko&vKW>F_?79S#=%0%j+J*_`|!_dwE&ESQ}O7B>O2i@|JfFuMfI zP6D$b>7kq-5s%$SY>+}&SSR)4}XUFnb1=Jq66(2WGDVv-gA92f*wDVD>dI`yiP82FyMJX0r%_+;bGn zmI1Smf!QWtHl)1u0kcnn#Zv_l?yN>)gCt>LH5rFEvYK^BYEB@rk<~oFA^r=8xTp}q zZ3aRhe~E*PWAFvD<-u$a0dwb6us9?QuSL>(5G)Q-3BfS+f05LP2_x(Rse-975C+)` z5`kctcn(+`lK$JlY;&-J`CvAvMZv)E63m9AbC4uVFM|knyJST`c0B_rWiSP^UxC^F zVD>vO8$`g&$wV@z4vCGdW*QFh4PY}tDj^tV<{KpSETY)mDT71Y3`yKy6yz6(*&q^T zJ~CTc9AUm85*t~KCl2v+9O8{Q#CM5<-17lsG{Yq@`#YHZ8c98e1V{~7n4wh?!8XxA zutBmgzhrA5+>b1d%x*+dGYyH2tY#e!@#i?i88t!fft16FU^XP}nQJ24;>uo29T0H?R>V0I#y{SVB}1hbVb zK>$?KYD`213*Fy@fHYof&^e{klD3JY9=GGk=3lmA^rqx7bK2kEkW+d0%>Ci zx5RF50ay)K34^>9NIitT%nG4?4-y+B3v=@o9OB4oc&$NZu3!R*fiO(3wKc;0KqNM@ znoJzx$Z8fLsX2zkMpknlhxivHaZwwPJ0WdRJun;6{`3H|A??p(Fk2sFG(#_#vf(vLd>W<&aM&%ta+8=J`%WEUiz%YxaEbPh5M7Cy*q3tI*T6$VIpj<;oC zSiqpg02)UqfUhFk1F?-5wBTxt86Z7H zkhm#>F9QQZ6WDD!3^V@!|34AT)@7LR|NnoG7Dx*Z#A0B0z`(%Z4`G7M2C)}_-3;;9 zF|a$$!EOdAb76ppL)g|x?zBO2ryT>NMGtb1Jp-sFxej)NCD=V6z36TLsR4FvYN3(^D{qgwzf>C-ZEQsYZYGINUck{R?f@^e%5vy$@@bBgox^wV+@lOaTL zQL=t`d1A?uW%#fa(Y!siIpIeZblbWK(keOFvRia^_W2k9c1g5NYjSNl9 zO)QMfOf0P7Oml07z4QX@@k18YMgb8Cj2{JeApm_f!6Sz}F{29@R&XQt<+ zrogqBK(v@>S{on(YXbvgb2xxngQ3|JqS=%f%_t5v)3kLcHZ!pXdD~3W+Q1OmZaCZ8 z0PX^02GliR12LRrj%2bqhPw=r&4IJ68HzLVi%Q^OVgWM4&5zw2%nW-&A{EH!PlGz@f% z3^Z*a6oYaDZ4sgdt^xsg5yN z5NZS{%)v@cz@nxQrG=%5DPRjtbxgtH<{)t-Q8Tcp8AvoUufzhX)*LKqXaEu}MH07w zh=ZM%nO9*xi|VCB{Zj^@fIE4PbLX<|8B^9tHa;Gq1$V z1f~JvSFk%l8W0i???Swln37Ti(*W|Wsg9u;C`Fm-fHkJ1mce8}9s~smDD*R7A!G>h z9w=BD;^Wg1q9D&fMKkmAp(cQns3|1=a`RIlv1+Pg1o9YEab8YlUN%fQ$X`(L{IoQf zD8yIBpm57U5(fDR>gEEtJB&a+0@XAO@$tp*gk-8?1c^d$SQh1E=EBT|co7_uAYpij z89{srP9O-wkvy4J3>P*AWkgdQV?$6u5+7d%DoIRrjEyvH6N@xVb&SC!6qv?a_ke0T zYgiFvW@2s45Fej{6j{a~4@13{j4TfFvZ;w&Y-5lY4RpZ4S6ZB! zoS&Cc4E4P+$dl0QRg5kN@+(wZad}b>ERIY-o`s4h=j12D#X)h3EDjGI6Hu%|-3@XV zEb*B@;uRbv*{PLKH<=*$GP58#9uc)BAb&!$Nm5QWQskOIA{Xq%q@3*Jyb_pUNPdS% zz$4fMdVZ_ zM~H($0VlHm!ir+!UB?T^GXUz;F=&| z0S@ls{N(JM)I6wvO+i5cP6jCT2)K|hD9I>FO-#XBpMVt@x>*H zC8fn64aS;~N;y8hxF9nRtPYY-U{y2RoRrk!WKaXr0$dkZfC_&t4GSF;P1}lMR7LT{ zB}JvlB~}daaPh>FlA`!xuoFOS0%NoI_>|O=#N-T+OHx4&F+?~7arjC&j)c)d<#AI-;ftqJz3bx&v0Tu~h z|AXpX3ms4*vd}Trgv)`74RCU?&;g|*3mpqh+hRkb`1s^_NPK{zO~*jT%)}ZbR-Twy zl9`uor2&cvXb2!I0vU#687RA1=zwZLPPQsVU$ zDkDvXQfTF4r~?jjQyoJKO$J!g!4Mn+AeF|N46y3O5E96yI!30N3<%wz05;VzveaZi zG$sr|rrCn@n`ts2DriHHGeN?}CYlV0`q>cVPq475CIc)18^W4ECMKGwZFEotiQaAp zm$R@E7^DE4%nd zo-c)`FC$RKgd|v`vE`7kk z4wfuVg|x(sjKC$3krAlWDK<2+fVPs2j6g*Wtd(qSU~Oy&Y5|*qN@zm^BTyT-7;GEZ zctcPfW2*r+3~R0dCEVhI)MTp=4I^WaQ;IE0%HoStldV7{ojJ%nRsc7dfP+&a|ewjrpR1m!bha3?S= zB|bN?I2)7|z)ctpkV_fTQsP1NeTjx4xIqJ=K+P0zXr`qU$AjEv1rjwwbUdIzY6vn$ z$3O=frYPovG74B8H3+~dsJhNeV|;*$83)H0Cc48e{A zH7k6D9IZ&B0c}R2zdl zWU8rSW`JU)2~5}oY$Z&!DNNWLY$aOhP@0!nTmtIzphP|1#8Qx7oLLc{Ux1OszzGJH zpuy&mQ^RH=I(o+7qDaG3$JAVt0lA-NYyvKWO?6By&~hNy4axa=X?cmcsd^a<3ZPUA z?!TqR2RO(3c=~zA`#MHg8R&qxzK#*`&W?WmepZHXzNcS6Xo!^&nD6K4>k3wG4CV$n zhIoLvCJ?S?fNQ){sGF53nCtA}AMO_)SARE7WVUx4+#qObG9-EbHiLb zgB_iGT&*m?+~7z*=Xg(lD@!oX5ymxyxGx~c(;p;j2ytGpzcbkNAUh2qE_CzsaSis2 za&__y3AQqXI5WuAIo{LHIVe8D%{3?3^qC5*VE6+5at(Oc=#Gx>R7`9-$>IoH9pum-Z97>9C`*iAfB^_ zr;iJmZwTT0c*lo0dxJtg*g4+MJ;*;aAQ&uf43_r~aP2BgM&fdFoJ}A zu&b|QfQNsOYp|6OB=mzl9D`h4K&FEX@^|ubbq)!(GBN_2;^^rg@8cO9;^_|#ZzD*A zfJ8xA$q3>R5Em43@h+}DA&wA*5MQ~t`Zz{{Lk=Pe^;cj#JW7qs!S?tDg2Nu7$^tAD z<{A_X@{bY3KLL*J;N)&)4Dm=%NU$d)Q5i%1;p!Xj7wqZ_O*s(v2fO;lhdKI$Lh~}j z`N5vfi-N`xL$uStJ58`eo=Xe)SNWwFQINQlNKG@mO2dWCZdxSvTX9DqsYhb8nSiG~3V=z=0;uqJ5fS`Ck*WeIvfS5r1 z;^XNDvB(7CjUd-}m(T!+3Wz71Jsg7|X2COr3B)%>@vz`Df%wHJ-Z|dM)6d1q1mY7A z-^De|$^_yGqj)#}ppba52*d|ak)TjND^rNujpBpD!75B4jy8(-@dpKli>sTJDa6SE zo}N~w5Z4BHdd5eDcv_i4oC@NC3N_adD^rLQK_Z@hA+AAwATfw5L1O;Fo>rz1M+W%& z_*j`jTo~-?LZB%=CCj31VdiaW{&Ti+hlx zuaz0x`SJe2p7GB9A;DH=2!DXZd_ZCd&w#{yt;`^P35kbW5AjHdN06(dOR$w0#3K-H ze6XXNYrI>iA2{O%TbV(8=I$Ee9uyBLz9C+K_|e@pBp@7F+#KRlAAfgGzj%0zn?rmR z5)z3d2JsKnS{G1773v(~9~AEy;u_=#DmH?x%pv}Rs_}M>grrDwh!>&4!6A;IipbN? z${gxbu*c#d(oh}9UXFJR2?>e^YjbpQ39>Rr2>^s7xUMpX1OUV^aDjkc7@I?a0!c-@ zr=N#wkY|XM1tc_(rJ$vvl?60NAZ`r^@^^L(4vvQud{!2auJB$63rKh% zi~IZe_*q#%0wlmAGB_SwC|OxRg2FKjSqu^gjv=lQo{(H@0r5GgJO;FsE2Td|(tG8sKVW32{8cjEDetBP&Z}=SKv% z8(UeTxIMt##LCbB;%cxxPM#rFh6WHvg9Sh}h@k<*$q)fhgTesfT2DVns2LhS91G@y zgFS+vE(5i>K(#wq0IUMy)KDZ-AdU?MyB=&T#Id1Z=Ys

(a&nMmwq5=}Kem?QR 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