From 5a93e3ae7b2612a3cee5ab42acdb8c807af3eedf Mon Sep 17 00:00:00 2001 From: "David E. O'Brien" Date: Sat, 2 Oct 2010 06:54:59 +0000 Subject: Flatten the bzip2 vendor area in preparations for the 1.0.6 import. --- contrib/bzip2/CHANGES | 319 ----- contrib/bzip2/LICENSE | 42 - contrib/bzip2/Makefile | 217 --- contrib/bzip2/Makefile-libbz2_so | 59 - contrib/bzip2/README | 210 --- contrib/bzip2/README.COMPILATION.PROBLEMS | 58 - contrib/bzip2/blocksort.c | 1094 ---------------- contrib/bzip2/bzip2.1 | 454 ------- contrib/bzip2/bzip2.c | 2034 ----------------------------- contrib/bzip2/bzip2recover.c | 514 -------- contrib/bzip2/bzlib.c | 1572 ---------------------- contrib/bzip2/bzlib.h | 282 ---- contrib/bzip2/bzlib_private.h | 509 -------- contrib/bzip2/compress.c | 672 ---------- contrib/bzip2/crctable.c | 104 -- contrib/bzip2/decompress.c | 626 --------- contrib/bzip2/dlltest.c | 175 --- contrib/bzip2/huffman.c | 205 --- contrib/bzip2/libbz2.def | 27 - contrib/bzip2/makefile.msc | 63 - contrib/bzip2/randtable.c | 84 -- contrib/bzip2/sample1.bz2.uu | 722 ---------- contrib/bzip2/sample1.ref.gz.uu | 850 ------------ contrib/bzip2/sample2.bz2.uu | 1642 ----------------------- contrib/bzip2/sample2.ref.gz.uu | 1934 --------------------------- contrib/bzip2/sample3.bz2.uu | 9 - contrib/bzip2/sample3.ref.gz.uu | 11 - contrib/bzip2/spewG.c | 54 - contrib/bzip2/unzcrash.c | 141 -- contrib/bzip2/words0 | 9 - contrib/bzip2/words1 | 4 - contrib/bzip2/words2 | 5 - contrib/bzip2/words3 | 30 - 33 files changed, 14731 deletions(-) delete mode 100644 contrib/bzip2/CHANGES delete mode 100644 contrib/bzip2/LICENSE delete mode 100644 contrib/bzip2/Makefile delete mode 100644 contrib/bzip2/Makefile-libbz2_so delete mode 100644 contrib/bzip2/README delete mode 100644 contrib/bzip2/README.COMPILATION.PROBLEMS delete mode 100644 contrib/bzip2/blocksort.c delete mode 100644 contrib/bzip2/bzip2.1 delete mode 100644 contrib/bzip2/bzip2.c delete mode 100644 contrib/bzip2/bzip2recover.c delete mode 100644 contrib/bzip2/bzlib.c delete mode 100644 contrib/bzip2/bzlib.h delete mode 100644 contrib/bzip2/bzlib_private.h delete mode 100644 contrib/bzip2/compress.c delete mode 100644 contrib/bzip2/crctable.c delete mode 100644 contrib/bzip2/decompress.c delete mode 100644 contrib/bzip2/dlltest.c delete mode 100644 contrib/bzip2/huffman.c delete mode 100644 contrib/bzip2/libbz2.def delete mode 100644 contrib/bzip2/makefile.msc delete mode 100644 contrib/bzip2/randtable.c delete mode 100644 contrib/bzip2/sample1.bz2.uu delete mode 100644 contrib/bzip2/sample1.ref.gz.uu delete mode 100644 contrib/bzip2/sample2.bz2.uu delete mode 100644 contrib/bzip2/sample2.ref.gz.uu delete mode 100644 contrib/bzip2/sample3.bz2.uu delete mode 100644 contrib/bzip2/sample3.ref.gz.uu delete mode 100644 contrib/bzip2/spewG.c delete mode 100644 contrib/bzip2/unzcrash.c delete mode 100644 contrib/bzip2/words0 delete mode 100644 contrib/bzip2/words1 delete mode 100644 contrib/bzip2/words2 delete mode 100644 contrib/bzip2/words3 (limited to 'contrib/bzip2') diff --git a/contrib/bzip2/CHANGES b/contrib/bzip2/CHANGES deleted file mode 100644 index 6e4f65e2e0a6..000000000000 --- a/contrib/bzip2/CHANGES +++ /dev/null @@ -1,319 +0,0 @@ - ------------------------------------------------------------------ - This file is part of bzip2/libbzip2, a program and library for - lossless, block-sorting data compression. - - bzip2/libbzip2 version 1.0.5 of 10 December 2007 - Copyright (C) 1996-2007 Julian Seward - - Please read the WARNING, DISCLAIMER and PATENTS sections in the - README file. - - This program is released under the terms of the license contained - in the file LICENSE. - ------------------------------------------------------------------ - - -0.9.0 -~~~~~ -First version. - - -0.9.0a -~~~~~~ -Removed 'ranlib' from Makefile, since most modern Unix-es -don't need it, or even know about it. - - -0.9.0b -~~~~~~ -Fixed a problem with error reporting in bzip2.c. This does not effect -the library in any way. Problem is: versions 0.9.0 and 0.9.0a (of the -program proper) compress and decompress correctly, but give misleading -error messages (internal panics) when an I/O error occurs, instead of -reporting the problem correctly. This shouldn't give any data loss -(as far as I can see), but is confusing. - -Made the inline declarations disappear for non-GCC compilers. - - -0.9.0c -~~~~~~ -Fixed some problems in the library pertaining to some boundary cases. -This makes the library behave more correctly in those situations. The -fixes apply only to features (calls and parameters) not used by -bzip2.c, so the non-fixedness of them in previous versions has no -effect on reliability of bzip2.c. - -In bzlib.c: - * made zero-length BZ_FLUSH work correctly in bzCompress(). - * fixed bzWrite/bzRead to ignore zero-length requests. - * fixed bzread to correctly handle read requests after EOF. - * wrong parameter order in call to bzDecompressInit in - bzBuffToBuffDecompress. Fixed. - -In compress.c: - * changed setting of nGroups in sendMTFValues() so as to - do a bit better on small files. This _does_ effect - bzip2.c. - - -0.9.5a -~~~~~~ -Major change: add a fallback sorting algorithm (blocksort.c) -to give reasonable behaviour even for very repetitive inputs. -Nuked --repetitive-best and --repetitive-fast since they are -no longer useful. - -Minor changes: mostly a whole bunch of small changes/ -bugfixes in the driver (bzip2.c). Changes pertaining to the -user interface are: - - allow decompression of symlink'd files to stdout - decompress/test files even without .bz2 extension - give more accurate error messages for I/O errors - when compressing/decompressing to stdout, don't catch control-C - read flags from BZIP2 and BZIP environment variables - decline to break hard links to a file unless forced with -f - allow -c flag even with no filenames - preserve file ownerships as far as possible - make -s -1 give the expected block size (100k) - add a flag -q --quiet to suppress nonessential warnings - stop decoding flags after --, so files beginning in - can be handled - resolved inconsistent naming: bzcat or bz2cat ? - bzip2 --help now returns 0 - -Programming-level changes are: - - fixed syntax error in GET_LL4 for Borland C++ 5.02 - let bzBuffToBuffDecompress return BZ_DATA_ERROR{_MAGIC} - fix overshoot of mode-string end in bzopen_or_bzdopen - wrapped bzlib.h in #ifdef __cplusplus ... extern "C" { ... } - close file handles under all error conditions - added minor mods so it compiles with DJGPP out of the box - fixed Makefile so it doesn't give problems with BSD make - fix uninitialised memory reads in dlltest.c - -0.9.5b -~~~~~~ -Open stdin/stdout in binary mode for DJGPP. - -0.9.5c -~~~~~~ -Changed BZ_N_OVERSHOOT to be ... + 2 instead of ... + 1. The + 1 -version could cause the sorted order to be wrong in some extremely -obscure cases. Also changed setting of quadrant in blocksort.c. - -0.9.5d -~~~~~~ -The only functional change is to make bzlibVersion() in the library -return the correct string. This has no effect whatsoever on the -functioning of the bzip2 program or library. Added a couple of casts -so the library compiles without warnings at level 3 in MS Visual -Studio 6.0. Included a Y2K statement in the file Y2K_INFO. All other -changes are minor documentation changes. - -1.0 -~~~ -Several minor bugfixes and enhancements: - -* Large file support. The library uses 64-bit counters to - count the volume of data passing through it. bzip2.c - is now compiled with -D_FILE_OFFSET_BITS=64 to get large - file support from the C library. -v correctly prints out - file sizes greater than 4 gigabytes. All these changes have - been made without assuming a 64-bit platform or a C compiler - which supports 64-bit ints, so, except for the C library - aspect, they are fully portable. - -* Decompression robustness. The library/program should be - robust to any corruption of compressed data, detecting and - handling _all_ corruption, instead of merely relying on - the CRCs. What this means is that the program should - never crash, given corrupted data, and the library should - always return BZ_DATA_ERROR. - -* Fixed an obscure race-condition bug only ever observed on - Solaris, in which, if you were very unlucky and issued - control-C at exactly the wrong time, both input and output - files would be deleted. - -* Don't run out of file handles on test/decompression when - large numbers of files have invalid magic numbers. - -* Avoid library namespace pollution. Prefix all exported - symbols with BZ2_. - -* Minor sorting enhancements from my DCC2000 paper. - -* Advance the version number to 1.0, so as to counteract the - (false-in-this-case) impression some people have that programs - with version numbers less than 1.0 are in some way, experimental, - pre-release versions. - -* Create an initial Makefile-libbz2_so to build a shared library. - Yes, I know I should really use libtool et al ... - -* Make the program exit with 2 instead of 0 when decompression - fails due to a bad magic number (ie, an invalid bzip2 header). - Also exit with 1 (as the manual claims :-) whenever a diagnostic - message would have been printed AND the corresponding operation - is aborted, for example - bzip2: Output file xx already exists. - When a diagnostic message is printed but the operation is not - aborted, for example - bzip2: Can't guess original name for wurble -- using wurble.out - then the exit value 0 is returned, unless some other problem is - also detected. - - I think it corresponds more closely to what the manual claims now. - - -1.0.1 -~~~~~ -* Modified dlltest.c so it uses the new BZ2_ naming scheme. -* Modified makefile-msc to fix minor build probs on Win2k. -* Updated README.COMPILATION.PROBLEMS. - -There are no functionality changes or bug fixes relative to version -1.0.0. This is just a documentation update + a fix for minor Win32 -build problems. For almost everyone, upgrading from 1.0.0 to 1.0.1 is -utterly pointless. Don't bother. - - -1.0.2 -~~~~~ -A bug fix release, addressing various minor issues which have appeared -in the 18 or so months since 1.0.1 was released. Most of the fixes -are to do with file-handling or documentation bugs. To the best of my -knowledge, there have been no data-loss-causing bugs reported in the -compression/decompression engine of 1.0.0 or 1.0.1. - -Note that this release does not improve the rather crude build system -for Unix platforms. The general plan here is to autoconfiscate/ -libtoolise 1.0.2 soon after release, and release the result as 1.1.0 -or perhaps 1.2.0. That, however, is still just a plan at this point. - -Here are the changes in 1.0.2. Bug-reporters and/or patch-senders in -parentheses. - -* Fix an infinite segfault loop in 1.0.1 when a directory is - encountered in -f (force) mode. - (Trond Eivind Glomsrod, Nicholas Nethercote, Volker Schmidt) - -* Avoid double fclose() of output file on certain I/O error paths. - (Solar Designer) - -* Don't fail with internal error 1007 when fed a long stream (> 48MB) - of byte 251. Also print useful message suggesting that 1007s may be - caused by bad memory. - (noticed by Juan Pedro Vallejo, fixed by me) - -* Fix uninitialised variable silly bug in demo prog dlltest.c. - (Jorj Bauer) - -* Remove 512-MB limitation on recovered file size for bzip2recover - on selected platforms which support 64-bit ints. At the moment - all GCC supported platforms, and Win32. - (me, Alson van der Meulen) - -* Hard-code header byte values, to give correct operation on platforms - using EBCDIC as their native character set (IBM's OS/390). - (Leland Lucius) - -* Copy file access times correctly. - (Marty Leisner) - -* Add distclean and check targets to Makefile. - (Michael Carmack) - -* Parameterise use of ar and ranlib in Makefile. Also add $(LDFLAGS). - (Rich Ireland, Bo Thorsen) - -* Pass -p (create parent dirs as needed) to mkdir during make install. - (Jeremy Fusco) - -* Dereference symlinks when copying file permissions in -f mode. - (Volker Schmidt) - -* Majorly simplify implementation of uInt64_qrm10. - (Bo Lindbergh) - -* Check the input file still exists before deleting the output one, - when aborting in cleanUpAndFail(). - (Joerg Prante, Robert Linden, Matthias Krings) - -Also a bunch of patches courtesy of Philippe Troin, the Debian maintainer -of bzip2: - -* Wrapper scripts (with manpages): bzdiff, bzgrep, bzmore. - -* Spelling changes and minor enhancements in bzip2.1. - -* Avoid race condition between creating the output file and setting its - interim permissions safely, by using fopen_output_safely(). - No changes to bzip2recover since there is no issue with file - permissions there. - -* do not print senseless report with -v when compressing an empty - file. - -* bzcat -f works on non-bzip2 files. - -* do not try to escape shell meta-characters on unix (the shell takes - care of these). - -* added --fast and --best aliases for -1 -9 for gzip compatibility. - - -1.0.3 (15 Feb 05) -~~~~~~~~~~~~~~~~~ -Fixes some minor bugs since the last version, 1.0.2. - -* Further robustification against corrupted compressed data. - There are currently no known bitstreams which can cause the - decompressor to crash, loop or access memory which does not - belong to it. If you are using bzip2 or the library to - decompress bitstreams from untrusted sources, an upgrade - to 1.0.3 is recommended. This fixes CAN-2005-1260. - -* The documentation has been converted to XML, from which html - and pdf can be derived. - -* Various minor bugs in the documentation have been fixed. - -* Fixes for various compilation warnings with newer versions of - gcc, and on 64-bit platforms. - -* The BZ_NO_STDIO cpp symbol was not properly observed in 1.0.2. - This has been fixed. - - -1.0.4 (20 Dec 06) -~~~~~~~~~~~~~~~~~ -Fixes some minor bugs since the last version, 1.0.3. - -* Fix file permissions race problem (CAN-2005-0953). - -* Avoid possible segfault in BZ2_bzclose. From Coverity's NetBSD - scan. - -* 'const'/prototype cleanups in the C code. - -* Change default install location to /usr/local, and handle multiple - 'make install's without error. - -* Sanitise file names more carefully in bzgrep. Fixes CAN-2005-0758 - to the extent that applies to bzgrep. - -* Use 'mktemp' rather than 'tempfile' in bzdiff. - -* Tighten up a couple of assertions in blocksort.c following automated - analysis. - -* Fix minor doc/comment bugs. - - -1.0.5 (10 Dec 07) -~~~~~~~~~~~~~~~~~ -Security fix only. Fixes CERT-FI 20469 as it applies to bzip2. - diff --git a/contrib/bzip2/LICENSE b/contrib/bzip2/LICENSE deleted file mode 100644 index f420cffb67dc..000000000000 --- a/contrib/bzip2/LICENSE +++ /dev/null @@ -1,42 +0,0 @@ - --------------------------------------------------------------------------- - -This program, "bzip2", the associated library "libbzip2", and all -documentation, are copyright (C) 1996-2007 Julian R Seward. All -rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - -2. The origin of this software must not be misrepresented; you must - not claim that you wrote the original software. If you use this - software in a product, an acknowledgment in the product - documentation would be appreciated but is not required. - -3. Altered source versions must be plainly marked as such, and must - not be misrepresented as being the original software. - -4. The name of the author may not be used to endorse or promote - products derived from this software without specific prior written - permission. - -THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS -OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE -GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, -WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -Julian Seward, jseward@bzip.org -bzip2/libbzip2 version 1.0.5 of 10 December 2007 - --------------------------------------------------------------------------- diff --git a/contrib/bzip2/Makefile b/contrib/bzip2/Makefile deleted file mode 100644 index eb09753ce101..000000000000 --- a/contrib/bzip2/Makefile +++ /dev/null @@ -1,217 +0,0 @@ -# ------------------------------------------------------------------ -# This file is part of bzip2/libbzip2, a program and library for -# lossless, block-sorting data compression. -# -# bzip2/libbzip2 version 1.0.5 of 10 December 2007 -# Copyright (C) 1996-2007 Julian Seward -# -# Please read the WARNING, DISCLAIMER and PATENTS sections in the -# README file. -# -# This program is released under the terms of the license contained -# in the file LICENSE. -# ------------------------------------------------------------------ - -SHELL=/bin/sh - -# To assist in cross-compiling -CC=gcc -AR=ar -RANLIB=ranlib -LDFLAGS= - -BIGFILES=-D_FILE_OFFSET_BITS=64 -CFLAGS=-Wall -Winline -O2 -g $(BIGFILES) - -# Where you want it installed when you do 'make install' -PREFIX=/usr/local - - -OBJS= blocksort.o \ - huffman.o \ - crctable.o \ - randtable.o \ - compress.o \ - decompress.o \ - bzlib.o - -all: libbz2.a bzip2 bzip2recover test - -bzip2: libbz2.a bzip2.o - $(CC) $(CFLAGS) $(LDFLAGS) -o bzip2 bzip2.o -L. -lbz2 - -bzip2recover: bzip2recover.o - $(CC) $(CFLAGS) $(LDFLAGS) -o bzip2recover bzip2recover.o - -libbz2.a: $(OBJS) - rm -f libbz2.a - $(AR) cq libbz2.a $(OBJS) - @if ( test -f $(RANLIB) -o -f /usr/bin/ranlib -o \ - -f /bin/ranlib -o -f /usr/ccs/bin/ranlib ) ; then \ - echo $(RANLIB) libbz2.a ; \ - $(RANLIB) libbz2.a ; \ - fi - -check: test -test: bzip2 - @cat words1 - ./bzip2 -1 < sample1.ref > sample1.rb2 - ./bzip2 -2 < sample2.ref > sample2.rb2 - ./bzip2 -3 < sample3.ref > sample3.rb2 - ./bzip2 -d < sample1.bz2 > sample1.tst - ./bzip2 -d < sample2.bz2 > sample2.tst - ./bzip2 -ds < sample3.bz2 > sample3.tst - cmp sample1.bz2 sample1.rb2 - cmp sample2.bz2 sample2.rb2 - cmp sample3.bz2 sample3.rb2 - cmp sample1.tst sample1.ref - cmp sample2.tst sample2.ref - cmp sample3.tst sample3.ref - @cat words3 - -install: bzip2 bzip2recover - if ( test ! -d $(PREFIX)/bin ) ; then mkdir -p $(PREFIX)/bin ; fi - if ( test ! -d $(PREFIX)/lib ) ; then mkdir -p $(PREFIX)/lib ; fi - if ( test ! -d $(PREFIX)/man ) ; then mkdir -p $(PREFIX)/man ; fi - if ( test ! -d $(PREFIX)/man/man1 ) ; then mkdir -p $(PREFIX)/man/man1 ; fi - if ( test ! -d $(PREFIX)/include ) ; then mkdir -p $(PREFIX)/include ; fi - cp -f bzip2 $(PREFIX)/bin/bzip2 - cp -f bzip2 $(PREFIX)/bin/bunzip2 - cp -f bzip2 $(PREFIX)/bin/bzcat - cp -f bzip2recover $(PREFIX)/bin/bzip2recover - chmod a+x $(PREFIX)/bin/bzip2 - chmod a+x $(PREFIX)/bin/bunzip2 - chmod a+x $(PREFIX)/bin/bzcat - chmod a+x $(PREFIX)/bin/bzip2recover - cp -f bzip2.1 $(PREFIX)/man/man1 - chmod a+r $(PREFIX)/man/man1/bzip2.1 - cp -f bzlib.h $(PREFIX)/include - chmod a+r $(PREFIX)/include/bzlib.h - cp -f libbz2.a $(PREFIX)/lib - chmod a+r $(PREFIX)/lib/libbz2.a - cp -f bzgrep $(PREFIX)/bin/bzgrep - ln -s -f $(PREFIX)/bin/bzgrep $(PREFIX)/bin/bzegrep - ln -s -f $(PREFIX)/bin/bzgrep $(PREFIX)/bin/bzfgrep - chmod a+x $(PREFIX)/bin/bzgrep - cp -f bzmore $(PREFIX)/bin/bzmore - ln -s -f $(PREFIX)/bin/bzmore $(PREFIX)/bin/bzless - chmod a+x $(PREFIX)/bin/bzmore - cp -f bzdiff $(PREFIX)/bin/bzdiff - ln -s -f $(PREFIX)/bin/bzdiff $(PREFIX)/bin/bzcmp - chmod a+x $(PREFIX)/bin/bzdiff - cp -f bzgrep.1 bzmore.1 bzdiff.1 $(PREFIX)/man/man1 - chmod a+r $(PREFIX)/man/man1/bzgrep.1 - chmod a+r $(PREFIX)/man/man1/bzmore.1 - chmod a+r $(PREFIX)/man/man1/bzdiff.1 - echo ".so man1/bzgrep.1" > $(PREFIX)/man/man1/bzegrep.1 - echo ".so man1/bzgrep.1" > $(PREFIX)/man/man1/bzfgrep.1 - echo ".so man1/bzmore.1" > $(PREFIX)/man/man1/bzless.1 - echo ".so man1/bzdiff.1" > $(PREFIX)/man/man1/bzcmp.1 - -clean: - rm -f *.o libbz2.a bzip2 bzip2recover \ - sample1.rb2 sample2.rb2 sample3.rb2 \ - sample1.tst sample2.tst sample3.tst - -blocksort.o: blocksort.c - @cat words0 - $(CC) $(CFLAGS) -c blocksort.c -huffman.o: huffman.c - $(CC) $(CFLAGS) -c huffman.c -crctable.o: crctable.c - $(CC) $(CFLAGS) -c crctable.c -randtable.o: randtable.c - $(CC) $(CFLAGS) -c randtable.c -compress.o: compress.c - $(CC) $(CFLAGS) -c compress.c -decompress.o: decompress.c - $(CC) $(CFLAGS) -c decompress.c -bzlib.o: bzlib.c - $(CC) $(CFLAGS) -c bzlib.c -bzip2.o: bzip2.c - $(CC) $(CFLAGS) -c bzip2.c -bzip2recover.o: bzip2recover.c - $(CC) $(CFLAGS) -c bzip2recover.c - - -distclean: clean - rm -f manual.ps manual.html manual.pdf - -DISTNAME=bzip2-1.0.5 -dist: check manual - rm -f $(DISTNAME) - ln -s -f . $(DISTNAME) - tar cvf $(DISTNAME).tar \ - $(DISTNAME)/blocksort.c \ - $(DISTNAME)/huffman.c \ - $(DISTNAME)/crctable.c \ - $(DISTNAME)/randtable.c \ - $(DISTNAME)/compress.c \ - $(DISTNAME)/decompress.c \ - $(DISTNAME)/bzlib.c \ - $(DISTNAME)/bzip2.c \ - $(DISTNAME)/bzip2recover.c \ - $(DISTNAME)/bzlib.h \ - $(DISTNAME)/bzlib_private.h \ - $(DISTNAME)/Makefile \ - $(DISTNAME)/LICENSE \ - $(DISTNAME)/bzip2.1 \ - $(DISTNAME)/bzip2.1.preformatted \ - $(DISTNAME)/bzip2.txt \ - $(DISTNAME)/words0 \ - $(DISTNAME)/words1 \ - $(DISTNAME)/words2 \ - $(DISTNAME)/words3 \ - $(DISTNAME)/sample1.ref \ - $(DISTNAME)/sample2.ref \ - $(DISTNAME)/sample3.ref \ - $(DISTNAME)/sample1.bz2 \ - $(DISTNAME)/sample2.bz2 \ - $(DISTNAME)/sample3.bz2 \ - $(DISTNAME)/dlltest.c \ - $(DISTNAME)/manual.html \ - $(DISTNAME)/manual.pdf \ - $(DISTNAME)/manual.ps \ - $(DISTNAME)/README \ - $(DISTNAME)/README.COMPILATION.PROBLEMS \ - $(DISTNAME)/README.XML.STUFF \ - $(DISTNAME)/CHANGES \ - $(DISTNAME)/libbz2.def \ - $(DISTNAME)/libbz2.dsp \ - $(DISTNAME)/dlltest.dsp \ - $(DISTNAME)/makefile.msc \ - $(DISTNAME)/unzcrash.c \ - $(DISTNAME)/spewG.c \ - $(DISTNAME)/mk251.c \ - $(DISTNAME)/bzdiff \ - $(DISTNAME)/bzdiff.1 \ - $(DISTNAME)/bzmore \ - $(DISTNAME)/bzmore.1 \ - $(DISTNAME)/bzgrep \ - $(DISTNAME)/bzgrep.1 \ - $(DISTNAME)/Makefile-libbz2_so \ - $(DISTNAME)/bz-common.xsl \ - $(DISTNAME)/bz-fo.xsl \ - $(DISTNAME)/bz-html.xsl \ - $(DISTNAME)/bzip.css \ - $(DISTNAME)/entities.xml \ - $(DISTNAME)/manual.xml \ - $(DISTNAME)/format.pl \ - $(DISTNAME)/xmlproc.sh - gzip -v $(DISTNAME).tar - -# For rebuilding the manual from sources on my SuSE 9.1 box - -MANUAL_SRCS= bz-common.xsl bz-fo.xsl bz-html.xsl bzip.css \ - entities.xml manual.xml - -manual: manual.html manual.ps manual.pdf - -manual.ps: $(MANUAL_SRCS) - ./xmlproc.sh -ps manual.xml - -manual.pdf: $(MANUAL_SRCS) - ./xmlproc.sh -pdf manual.xml - -manual.html: $(MANUAL_SRCS) - ./xmlproc.sh -html manual.xml diff --git a/contrib/bzip2/Makefile-libbz2_so b/contrib/bzip2/Makefile-libbz2_so deleted file mode 100644 index 9a13c77e4873..000000000000 --- a/contrib/bzip2/Makefile-libbz2_so +++ /dev/null @@ -1,59 +0,0 @@ - -# This Makefile builds a shared version of the library, -# libbz2.so.1.0.4, with soname libbz2.so.1.0, -# at least on x86-Linux (RedHat 7.2), -# with gcc-2.96 20000731 (Red Hat Linux 7.1 2.96-98). -# Please see the README file for some important info -# about building the library like this. - -# ------------------------------------------------------------------ -# This file is part of bzip2/libbzip2, a program and library for -# lossless, block-sorting data compression. -# -# bzip2/libbzip2 version 1.0.5 of 10 December 2007 -# Copyright (C) 1996-2007 Julian Seward -# -# Please read the WARNING, DISCLAIMER and PATENTS sections in the -# README file. -# -# This program is released under the terms of the license contained -# in the file LICENSE. -# ------------------------------------------------------------------ - - -SHELL=/bin/sh -CC=gcc -BIGFILES=-D_FILE_OFFSET_BITS=64 -CFLAGS=-fpic -fPIC -Wall -Winline -O2 -g $(BIGFILES) - -OBJS= blocksort.o \ - huffman.o \ - crctable.o \ - randtable.o \ - compress.o \ - decompress.o \ - bzlib.o - -all: $(OBJS) - $(CC) -shared -Wl,-soname -Wl,libbz2.so.1.0 -o libbz2.so.1.0.4 $(OBJS) - $(CC) $(CFLAGS) -o bzip2-shared bzip2.c libbz2.so.1.0.4 - rm -f libbz2.so.1.0 - ln -s libbz2.so.1.0.4 libbz2.so.1.0 - -clean: - rm -f $(OBJS) bzip2.o libbz2.so.1.0.4 libbz2.so.1.0 bzip2-shared - -blocksort.o: blocksort.c - $(CC) $(CFLAGS) -c blocksort.c -huffman.o: huffman.c - $(CC) $(CFLAGS) -c huffman.c -crctable.o: crctable.c - $(CC) $(CFLAGS) -c crctable.c -randtable.o: randtable.c - $(CC) $(CFLAGS) -c randtable.c -compress.o: compress.c - $(CC) $(CFLAGS) -c compress.c -decompress.o: decompress.c - $(CC) $(CFLAGS) -c decompress.c -bzlib.o: bzlib.c - $(CC) $(CFLAGS) -c bzlib.c diff --git a/contrib/bzip2/README b/contrib/bzip2/README deleted file mode 100644 index e17a84e049f4..000000000000 --- a/contrib/bzip2/README +++ /dev/null @@ -1,210 +0,0 @@ - -This is the README for bzip2/libzip2. -This version is fully compatible with the previous public releases. - ------------------------------------------------------------------- -This file is part of bzip2/libbzip2, a program and library for -lossless, block-sorting data compression. - -bzip2/libbzip2 version 1.0.5 of 10 December 2007 -Copyright (C) 1996-2007 Julian Seward - -Please read the WARNING, DISCLAIMER and PATENTS sections in this file. - -This program is released under the terms of the license contained -in the file LICENSE. ------------------------------------------------------------------- - -Complete documentation is available in Postscript form (manual.ps), -PDF (manual.pdf) or html (manual.html). A plain-text version of the -manual page is available as bzip2.txt. - - -HOW TO BUILD -- UNIX - -Type 'make'. This builds the library libbz2.a and then the programs -bzip2 and bzip2recover. Six self-tests are run. If the self-tests -complete ok, carry on to installation: - -To install in /usr/local/bin, /usr/local/lib, /usr/local/man and -/usr/local/include, type - - make install - -To install somewhere else, eg, /xxx/yyy/{bin,lib,man,include}, type - - make install PREFIX=/xxx/yyy - -If you are (justifiably) paranoid and want to see what 'make install' -is going to do, you can first do - - make -n install or - make -n install PREFIX=/xxx/yyy respectively. - -The -n instructs make to show the commands it would execute, but not -actually execute them. - - -HOW TO BUILD -- UNIX, shared library libbz2.so. - -Do 'make -f Makefile-libbz2_so'. This Makefile seems to work for -Linux-ELF (RedHat 7.2 on an x86 box), with gcc. I make no claims -that it works for any other platform, though I suspect it probably -will work for most platforms employing both ELF and gcc. - -bzip2-shared, a client of the shared library, is also built, but not -self-tested. So I suggest you also build using the normal Makefile, -since that conducts a self-test. A second reason to prefer the -version statically linked to the library is that, on x86 platforms, -building shared objects makes a valuable register (%ebx) unavailable -to gcc, resulting in a slowdown of 10%-20%, at least for bzip2. - -Important note for people upgrading .so's from 0.9.0/0.9.5 to version -1.0.X. All the functions in the library have been renamed, from (eg) -bzCompress to BZ2_bzCompress, to avoid namespace pollution. -Unfortunately this means that the libbz2.so created by -Makefile-libbz2_so will not work with any program which used an older -version of the library. I do encourage library clients to make the -effort to upgrade to use version 1.0, since it is both faster and more -robust than previous versions. - - -HOW TO BUILD -- Windows 95, NT, DOS, Mac, etc. - -It's difficult for me to support compilation on all these platforms. -My approach is to collect binaries for these platforms, and put them -on the master web site (http://www.bzip.org). Look there. However -(FWIW), bzip2-1.0.X is very standard ANSI C and should compile -unmodified with MS Visual C. If you have difficulties building, you -might want to read README.COMPILATION.PROBLEMS. - -At least using MS Visual C++ 6, you can build from the unmodified -sources by issuing, in a command shell: - - nmake -f makefile.msc - -(you may need to first run the MSVC-provided script VCVARS32.BAT - so as to set up paths to the MSVC tools correctly). - - -VALIDATION - -Correct operation, in the sense that a compressed file can always be -decompressed to reproduce the original, is obviously of paramount -importance. To validate bzip2, I used a modified version of Mark -Nelson's churn program. Churn is an automated test driver which -recursively traverses a directory structure, using bzip2 to compress -and then decompress each file it encounters, and checking that the -decompressed data is the same as the original. - - - -Please read and be aware of the following: - -WARNING: - - This program and library (attempts to) compress data by - performing several non-trivial transformations on it. - Unless you are 100% familiar with *all* the algorithms - contained herein, and with the consequences of modifying them, - you should NOT meddle with the compression or decompression - machinery. Incorrect changes can and very likely *will* - lead to disastrous loss of data. - - -DISCLAIMER: - - I TAKE NO RESPONSIBILITY FOR ANY LOSS OF DATA ARISING FROM THE - USE OF THIS PROGRAM/LIBRARY, HOWSOEVER CAUSED. - - Every compression of a file implies an assumption that the - compressed file can be decompressed to reproduce the original. - Great efforts in design, coding and testing have been made to - ensure that this program works correctly. However, the complexity - of the algorithms, and, in particular, the presence of various - special cases in the code which occur with very low but non-zero - probability make it impossible to rule out the possibility of bugs - remaining in the program. DO NOT COMPRESS ANY DATA WITH THIS - PROGRAM UNLESS YOU ARE PREPARED TO ACCEPT THE POSSIBILITY, HOWEVER - SMALL, THAT THE DATA WILL NOT BE RECOVERABLE. - - That is not to say this program is inherently unreliable. - Indeed, I very much hope the opposite is true. bzip2/libbzip2 - has been carefully constructed and extensively tested. - - -PATENTS: - - To the best of my knowledge, bzip2/libbzip2 does not use any - patented algorithms. However, I do not have the resources - to carry out a patent search. Therefore I cannot give any - guarantee of the above statement. - - - -WHAT'S NEW IN 0.9.0 (as compared to 0.1pl2) ? - - * Approx 10% faster compression, 30% faster decompression - * -t (test mode) is a lot quicker - * Can decompress concatenated compressed files - * Programming interface, so programs can directly read/write .bz2 files - * Less restrictive (BSD-style) licensing - * Flag handling more compatible with GNU gzip - * Much more documentation, i.e., a proper user manual - * Hopefully, improved portability (at least of the library) - -WHAT'S NEW IN 0.9.5 ? - - * Compression speed is much less sensitive to the input - data than in previous versions. Specifically, the very - slow performance caused by repetitive data is fixed. - * Many small improvements in file and flag handling. - * A Y2K statement. - -WHAT'S NEW IN 1.0.0 ? - - See the CHANGES file. - -WHAT'S NEW IN 1.0.2 ? - - See the CHANGES file. - -WHAT'S NEW IN 1.0.3 ? - - See the CHANGES file. - -WHAT'S NEW IN 1.0.4 ? - - See the CHANGES file. - -WHAT'S NEW IN 1.0.5 ? - - See the CHANGES file. - - -I hope you find bzip2 useful. Feel free to contact me at - jseward@bzip.org -if you have any suggestions or queries. Many people mailed me with -comments, suggestions and patches after the releases of bzip-0.15, -bzip-0.21, and bzip2 versions 0.1pl2, 0.9.0, 0.9.5, 1.0.0, 1.0.1, -1.0.2 and 1.0.3, and the changes in bzip2 are largely a result of this -feedback. I thank you for your comments. - -bzip2's "home" is http://www.bzip.org/ - -Julian Seward -jseward@bzip.org -Cambridge, UK. - -18 July 1996 (version 0.15) -25 August 1996 (version 0.21) - 7 August 1997 (bzip2, version 0.1) -29 August 1997 (bzip2, version 0.1pl2) -23 August 1998 (bzip2, version 0.9.0) - 8 June 1999 (bzip2, version 0.9.5) - 4 Sept 1999 (bzip2, version 0.9.5d) - 5 May 2000 (bzip2, version 1.0pre8) -30 December 2001 (bzip2, version 1.0.2pre1) -15 February 2005 (bzip2, version 1.0.3) -20 December 2006 (bzip2, version 1.0.4) -10 December 2007 (bzip2, version 1.0.5) diff --git a/contrib/bzip2/README.COMPILATION.PROBLEMS b/contrib/bzip2/README.COMPILATION.PROBLEMS deleted file mode 100644 index 22b95c6cb668..000000000000 --- a/contrib/bzip2/README.COMPILATION.PROBLEMS +++ /dev/null @@ -1,58 +0,0 @@ ------------------------------------------------------------------- -This file is part of bzip2/libbzip2, a program and library for -lossless, block-sorting data compression. - -bzip2/libbzip2 version 1.0.5 of 10 December 2007 -Copyright (C) 1996-2007 Julian Seward - -Please read the WARNING, DISCLAIMER and PATENTS sections in the -README file. - -This program is released under the terms of the license contained -in the file LICENSE. ------------------------------------------------------------------- - -bzip2-1.0.5 should compile without problems on the vast majority of -platforms. Using the supplied Makefile, I've built and tested it -myself for x86-linux and amd64-linux. With makefile.msc, Visual C++ -6.0 and nmake, you can build a native Win32 version too. Large file -support seems to work correctly on at least on amd64-linux. - -When I say "large file" I mean a file of size 2,147,483,648 (2^31) -bytes or above. Many older OSs can't handle files above this size, -but many newer ones can. Large files are pretty huge -- most files -you'll encounter are not Large Files. - -Early versions of bzip2 (0.1, 0.9.0, 0.9.5) compiled on a wide variety -of platforms without difficulty, and I hope this version will continue -in that tradition. However, in order to support large files, I've had -to include the define -D_FILE_OFFSET_BITS=64 in the Makefile. This -can cause problems. - -The technique of adding -D_FILE_OFFSET_BITS=64 to get large file -support is, as far as I know, the Recommended Way to get correct large -file support. For more details, see the Large File Support -Specification, published by the Large File Summit, at - - http://ftp.sas.com/standards/large.file - -As a general comment, if you get compilation errors which you think -are related to large file support, try removing the above define from -the Makefile, ie, delete the line - - BIGFILES=-D_FILE_OFFSET_BITS=64 - -from the Makefile, and do 'make clean ; make'. This will give you a -version of bzip2 without large file support, which, for most -applications, is probably not a problem. - -Alternatively, try some of the platform-specific hints listed below. - -You can use the spewG.c program to generate huge files to test bzip2's -large file support, if you are feeling paranoid. Be aware though that -any compilation problems which affect bzip2 will also affect spewG.c, -alas. - -AIX: I have reports that for large file support, you need to specify --D_LARGE_FILES rather than -D_FILE_OFFSET_BITS=64. I have not tested -this myself. diff --git a/contrib/bzip2/blocksort.c b/contrib/bzip2/blocksort.c deleted file mode 100644 index bd2dec157fac..000000000000 --- a/contrib/bzip2/blocksort.c +++ /dev/null @@ -1,1094 +0,0 @@ - -/*-------------------------------------------------------------*/ -/*--- Block sorting machinery ---*/ -/*--- blocksort.c ---*/ -/*-------------------------------------------------------------*/ - -/* ------------------------------------------------------------------ - This file is part of bzip2/libbzip2, a program and library for - lossless, block-sorting data compression. - - bzip2/libbzip2 version 1.0.5 of 10 December 2007 - Copyright (C) 1996-2007 Julian Seward - - Please read the WARNING, DISCLAIMER and PATENTS sections in the - README file. - - This program is released under the terms of the license contained - in the file LICENSE. - ------------------------------------------------------------------ */ - - -#include "bzlib_private.h" - -/*---------------------------------------------*/ -/*--- Fallback O(N log(N)^2) sorting ---*/ -/*--- algorithm, for repetitive blocks ---*/ -/*---------------------------------------------*/ - -/*---------------------------------------------*/ -static -__inline__ -void fallbackSimpleSort ( UInt32* fmap, - UInt32* eclass, - Int32 lo, - Int32 hi ) -{ - Int32 i, j, tmp; - UInt32 ec_tmp; - - if (lo == hi) return; - - if (hi - lo > 3) { - for ( i = hi-4; i >= lo; i-- ) { - tmp = fmap[i]; - ec_tmp = eclass[tmp]; - for ( j = i+4; j <= hi && ec_tmp > eclass[fmap[j]]; j += 4 ) - fmap[j-4] = fmap[j]; - fmap[j-4] = tmp; - } - } - - for ( i = hi-1; i >= lo; i-- ) { - tmp = fmap[i]; - ec_tmp = eclass[tmp]; - for ( j = i+1; j <= hi && ec_tmp > eclass[fmap[j]]; j++ ) - fmap[j-1] = fmap[j]; - fmap[j-1] = tmp; - } -} - - -/*---------------------------------------------*/ -#define fswap(zz1, zz2) \ - { Int32 zztmp = zz1; zz1 = zz2; zz2 = zztmp; } - -#define fvswap(zzp1, zzp2, zzn) \ -{ \ - Int32 yyp1 = (zzp1); \ - Int32 yyp2 = (zzp2); \ - Int32 yyn = (zzn); \ - while (yyn > 0) { \ - fswap(fmap[yyp1], fmap[yyp2]); \ - yyp1++; yyp2++; yyn--; \ - } \ -} - - -#define fmin(a,b) ((a) < (b)) ? (a) : (b) - -#define fpush(lz,hz) { stackLo[sp] = lz; \ - stackHi[sp] = hz; \ - sp++; } - -#define fpop(lz,hz) { sp--; \ - lz = stackLo[sp]; \ - hz = stackHi[sp]; } - -#define FALLBACK_QSORT_SMALL_THRESH 10 -#define FALLBACK_QSORT_STACK_SIZE 100 - - -static -void fallbackQSort3 ( UInt32* fmap, - UInt32* eclass, - Int32 loSt, - Int32 hiSt ) -{ - Int32 unLo, unHi, ltLo, gtHi, n, m; - Int32 sp, lo, hi; - UInt32 med, r, r3; - Int32 stackLo[FALLBACK_QSORT_STACK_SIZE]; - Int32 stackHi[FALLBACK_QSORT_STACK_SIZE]; - - r = 0; - - sp = 0; - fpush ( loSt, hiSt ); - - while (sp > 0) { - - AssertH ( sp < FALLBACK_QSORT_STACK_SIZE - 1, 1004 ); - - fpop ( lo, hi ); - if (hi - lo < FALLBACK_QSORT_SMALL_THRESH) { - fallbackSimpleSort ( fmap, eclass, lo, hi ); - continue; - } - - /* Random partitioning. Median of 3 sometimes fails to - avoid bad cases. Median of 9 seems to help but - looks rather expensive. This too seems to work but - is cheaper. Guidance for the magic constants - 7621 and 32768 is taken from Sedgewick's algorithms - book, chapter 35. - */ - r = ((r * 7621) + 1) % 32768; - r3 = r % 3; - if (r3 == 0) med = eclass[fmap[lo]]; else - if (r3 == 1) med = eclass[fmap[(lo+hi)>>1]]; else - med = eclass[fmap[hi]]; - - unLo = ltLo = lo; - unHi = gtHi = hi; - - while (1) { - while (1) { - if (unLo > unHi) break; - n = (Int32)eclass[fmap[unLo]] - (Int32)med; - if (n == 0) { - fswap(fmap[unLo], fmap[ltLo]); - ltLo++; unLo++; - continue; - }; - if (n > 0) break; - unLo++; - } - while (1) { - if (unLo > unHi) break; - n = (Int32)eclass[fmap[unHi]] - (Int32)med; - if (n == 0) { - fswap(fmap[unHi], fmap[gtHi]); - gtHi--; unHi--; - continue; - }; - if (n < 0) break; - unHi--; - } - if (unLo > unHi) break; - fswap(fmap[unLo], fmap[unHi]); unLo++; unHi--; - } - - AssertD ( unHi == unLo-1, "fallbackQSort3(2)" ); - - if (gtHi < ltLo) continue; - - n = fmin(ltLo-lo, unLo-ltLo); fvswap(lo, unLo-n, n); - m = fmin(hi-gtHi, gtHi-unHi); fvswap(unLo, hi-m+1, m); - - n = lo + unLo - ltLo - 1; - m = hi - (gtHi - unHi) + 1; - - if (n - lo > hi - m) { - fpush ( lo, n ); - fpush ( m, hi ); - } else { - fpush ( m, hi ); - fpush ( lo, n ); - } - } -} - -#undef fmin -#undef fpush -#undef fpop -#undef fswap -#undef fvswap -#undef FALLBACK_QSORT_SMALL_THRESH -#undef FALLBACK_QSORT_STACK_SIZE - - -/*---------------------------------------------*/ -/* Pre: - nblock > 0 - eclass exists for [0 .. nblock-1] - ((UChar*)eclass) [0 .. nblock-1] holds block - ptr exists for [0 .. nblock-1] - - Post: - ((UChar*)eclass) [0 .. nblock-1] holds block - All other areas of eclass destroyed - fmap [0 .. nblock-1] holds sorted order - bhtab [ 0 .. 2+(nblock/32) ] destroyed -*/ - -#define SET_BH(zz) bhtab[(zz) >> 5] |= (1 << ((zz) & 31)) -#define CLEAR_BH(zz) bhtab[(zz) >> 5] &= ~(1 << ((zz) & 31)) -#define ISSET_BH(zz) (bhtab[(zz) >> 5] & (1 << ((zz) & 31))) -#define WORD_BH(zz) bhtab[(zz) >> 5] -#define UNALIGNED_BH(zz) ((zz) & 0x01f) - -static -void fallbackSort ( UInt32* fmap, - UInt32* eclass, - UInt32* bhtab, - Int32 nblock, - Int32 verb ) -{ - Int32 ftab[257]; - Int32 ftabCopy[256]; - Int32 H, i, j, k, l, r, cc, cc1; - Int32 nNotDone; - Int32 nBhtab; - UChar* eclass8 = (UChar*)eclass; - - /*-- - Initial 1-char radix sort to generate - initial fmap and initial BH bits. - --*/ - if (verb >= 4) - VPrintf0 ( " bucket sorting ...\n" ); - for (i = 0; i < 257; i++) ftab[i] = 0; - for (i = 0; i < nblock; i++) ftab[eclass8[i]]++; - for (i = 0; i < 256; i++) ftabCopy[i] = ftab[i]; - for (i = 1; i < 257; i++) ftab[i] += ftab[i-1]; - - for (i = 0; i < nblock; i++) { - j = eclass8[i]; - k = ftab[j] - 1; - ftab[j] = k; - fmap[k] = i; - } - - nBhtab = 2 + (nblock / 32); - for (i = 0; i < nBhtab; i++) bhtab[i] = 0; - for (i = 0; i < 256; i++) SET_BH(ftab[i]); - - /*-- - Inductively refine the buckets. Kind-of an - "exponential radix sort" (!), inspired by the - Manber-Myers suffix array construction algorithm. - --*/ - - /*-- set sentinel bits for block-end detection --*/ - for (i = 0; i < 32; i++) { - SET_BH(nblock + 2*i); - CLEAR_BH(nblock + 2*i + 1); - } - - /*-- the log(N) loop --*/ - H = 1; - while (1) { - - if (verb >= 4) - VPrintf1 ( " depth %6d has ", H ); - - j = 0; - for (i = 0; i < nblock; i++) { - if (ISSET_BH(i)) j = i; - k = fmap[i] - H; if (k < 0) k += nblock; - eclass[k] = j; - } - - nNotDone = 0; - r = -1; - while (1) { - - /*-- find the next non-singleton bucket --*/ - k = r + 1; - while (ISSET_BH(k) && UNALIGNED_BH(k)) k++; - if (ISSET_BH(k)) { - while (WORD_BH(k) == 0xffffffff) k += 32; - while (ISSET_BH(k)) k++; - } - l = k - 1; - if (l >= nblock) break; - while (!ISSET_BH(k) && UNALIGNED_BH(k)) k++; - if (!ISSET_BH(k)) { - while (WORD_BH(k) == 0x00000000) k += 32; - while (!ISSET_BH(k)) k++; - } - r = k - 1; - if (r >= nblock) break; - - /*-- now [l, r] bracket current bucket --*/ - if (r > l) { - nNotDone += (r - l + 1); - fallbackQSort3 ( fmap, eclass, l, r ); - - /*-- scan bucket and generate header bits-- */ - cc = -1; - for (i = l; i <= r; i++) { - cc1 = eclass[fmap[i]]; - if (cc != cc1) { SET_BH(i); cc = cc1; }; - } - } - } - - if (verb >= 4) - VPrintf1 ( "%6d unresolved strings\n", nNotDone ); - - H *= 2; - if (H > nblock || nNotDone == 0) break; - } - - /*-- - Reconstruct the original block in - eclass8 [0 .. nblock-1], since the - previous phase destroyed it. - --*/ - if (verb >= 4) - VPrintf0 ( " reconstructing block ...\n" ); - j = 0; - for (i = 0; i < nblock; i++) { - while (ftabCopy[j] == 0) j++; - ftabCopy[j]--; - eclass8[fmap[i]] = (UChar)j; - } - AssertH ( j < 256, 1005 ); -} - -#undef SET_BH -#undef CLEAR_BH -#undef ISSET_BH -#undef WORD_BH -#undef UNALIGNED_BH - - -/*---------------------------------------------*/ -/*--- The main, O(N^2 log(N)) sorting ---*/ -/*--- algorithm. Faster for "normal" ---*/ -/*--- non-repetitive blocks. ---*/ -/*---------------------------------------------*/ - -/*---------------------------------------------*/ -static -__inline__ -Bool mainGtU ( UInt32 i1, - UInt32 i2, - UChar* block, - UInt16* quadrant, - UInt32 nblock, - Int32* budget ) -{ - Int32 k; - UChar c1, c2; - UInt16 s1, s2; - - AssertD ( i1 != i2, "mainGtU" ); - /* 1 */ - c1 = block[i1]; c2 = block[i2]; - if (c1 != c2) return (c1 > c2); - i1++; i2++; - /* 2 */ - c1 = block[i1]; c2 = block[i2]; - if (c1 != c2) return (c1 > c2); - i1++; i2++; - /* 3 */ - c1 = block[i1]; c2 = block[i2]; - if (c1 != c2) return (c1 > c2); - i1++; i2++; - /* 4 */ - c1 = block[i1]; c2 = block[i2]; - if (c1 != c2) return (c1 > c2); - i1++; i2++; - /* 5 */ - c1 = block[i1]; c2 = block[i2]; - if (c1 != c2) return (c1 > c2); - i1++; i2++; - /* 6 */ - c1 = block[i1]; c2 = block[i2]; - if (c1 != c2) return (c1 > c2); - i1++; i2++; - /* 7 */ - c1 = block[i1]; c2 = block[i2]; - if (c1 != c2) return (c1 > c2); - i1++; i2++; - /* 8 */ - c1 = block[i1]; c2 = block[i2]; - if (c1 != c2) return (c1 > c2); - i1++; i2++; - /* 9 */ - c1 = block[i1]; c2 = block[i2]; - if (c1 != c2) return (c1 > c2); - i1++; i2++; - /* 10 */ - c1 = block[i1]; c2 = block[i2]; - if (c1 != c2) return (c1 > c2); - i1++; i2++; - /* 11 */ - c1 = block[i1]; c2 = block[i2]; - if (c1 != c2) return (c1 > c2); - i1++; i2++; - /* 12 */ - c1 = block[i1]; c2 = block[i2]; - if (c1 != c2) return (c1 > c2); - i1++; i2++; - - k = nblock + 8; - - do { - /* 1 */ - c1 = block[i1]; c2 = block[i2]; - if (c1 != c2) return (c1 > c2); - s1 = quadrant[i1]; s2 = quadrant[i2]; - if (s1 != s2) return (s1 > s2); - i1++; i2++; - /* 2 */ - c1 = block[i1]; c2 = block[i2]; - if (c1 != c2) return (c1 > c2); - s1 = quadrant[i1]; s2 = quadrant[i2]; - if (s1 != s2) return (s1 > s2); - i1++; i2++; - /* 3 */ - c1 = block[i1]; c2 = block[i2]; - if (c1 != c2) return (c1 > c2); - s1 = quadrant[i1]; s2 = quadrant[i2]; - if (s1 != s2) return (s1 > s2); - i1++; i2++; - /* 4 */ - c1 = block[i1]; c2 = block[i2]; - if (c1 != c2) return (c1 > c2); - s1 = quadrant[i1]; s2 = quadrant[i2]; - if (s1 != s2) return (s1 > s2); - i1++; i2++; - /* 5 */ - c1 = block[i1]; c2 = block[i2]; - if (c1 != c2) return (c1 > c2); - s1 = quadrant[i1]; s2 = quadrant[i2]; - if (s1 != s2) return (s1 > s2); - i1++; i2++; - /* 6 */ - c1 = block[i1]; c2 = block[i2]; - if (c1 != c2) return (c1 > c2); - s1 = quadrant[i1]; s2 = quadrant[i2]; - if (s1 != s2) return (s1 > s2); - i1++; i2++; - /* 7 */ - c1 = block[i1]; c2 = block[i2]; - if (c1 != c2) return (c1 > c2); - s1 = quadrant[i1]; s2 = quadrant[i2]; - if (s1 != s2) return (s1 > s2); - i1++; i2++; - /* 8 */ - c1 = block[i1]; c2 = block[i2]; - if (c1 != c2) return (c1 > c2); - s1 = quadrant[i1]; s2 = quadrant[i2]; - if (s1 != s2) return (s1 > s2); - i1++; i2++; - - if (i1 >= nblock) i1 -= nblock; - if (i2 >= nblock) i2 -= nblock; - - k -= 8; - (*budget)--; - } - while (k >= 0); - - return False; -} - - -/*---------------------------------------------*/ -/*-- - Knuth's increments seem to work better - than Incerpi-Sedgewick here. Possibly - because the number of elems to sort is - usually small, typically <= 20. ---*/ -static -Int32 incs[14] = { 1, 4, 13, 40, 121, 364, 1093, 3280, - 9841, 29524, 88573, 265720, - 797161, 2391484 }; - -static -void mainSimpleSort ( UInt32* ptr, - UChar* block, - UInt16* quadrant, - Int32 nblock, - Int32 lo, - Int32 hi, - Int32 d, - Int32* budget ) -{ - Int32 i, j, h, bigN, hp; - UInt32 v; - - bigN = hi - lo + 1; - if (bigN < 2) return; - - hp = 0; - while (incs[hp] < bigN) hp++; - hp--; - - for (; hp >= 0; hp--) { - h = incs[hp]; - - i = lo + h; - while (True) { - - /*-- copy 1 --*/ - if (i > hi) break; - v = ptr[i]; - j = i; - while ( mainGtU ( - ptr[j-h]+d, v+d, block, quadrant, nblock, budget - ) ) { - ptr[j] = ptr[j-h]; - j = j - h; - if (j <= (lo + h - 1)) break; - } - ptr[j] = v; - i++; - - /*-- copy 2 --*/ - if (i > hi) break; - v = ptr[i]; - j = i; - while ( mainGtU ( - ptr[j-h]+d, v+d, block, quadrant, nblock, budget - ) ) { - ptr[j] = ptr[j-h]; - j = j - h; - if (j <= (lo + h - 1)) break; - } - ptr[j] = v; - i++; - - /*-- copy 3 --*/ - if (i > hi) break; - v = ptr[i]; - j = i; - while ( mainGtU ( - ptr[j-h]+d, v+d, block, quadrant, nblock, budget - ) ) { - ptr[j] = ptr[j-h]; - j = j - h; - if (j <= (lo + h - 1)) break; - } - ptr[j] = v; - i++; - - if (*budget < 0) return; - } - } -} - - -/*---------------------------------------------*/ -/*-- - The following is an implementation of - an elegant 3-way quicksort for strings, - described in a paper "Fast Algorithms for - Sorting and Searching Strings", by Robert - Sedgewick and Jon L. Bentley. ---*/ - -#define mswap(zz1, zz2) \ - { Int32 zztmp = zz1; zz1 = zz2; zz2 = zztmp; } - -#define mvswap(zzp1, zzp2, zzn) \ -{ \ - Int32 yyp1 = (zzp1); \ - Int32 yyp2 = (zzp2); \ - Int32 yyn = (zzn); \ - while (yyn > 0) { \ - mswap(ptr[yyp1], ptr[yyp2]); \ - yyp1++; yyp2++; yyn--; \ - } \ -} - -static -__inline__ -UChar mmed3 ( UChar a, UChar b, UChar c ) -{ - UChar t; - if (a > b) { t = a; a = b; b = t; }; - if (b > c) { - b = c; - if (a > b) b = a; - } - return b; -} - -#define mmin(a,b) ((a) < (b)) ? (a) : (b) - -#define mpush(lz,hz,dz) { stackLo[sp] = lz; \ - stackHi[sp] = hz; \ - stackD [sp] = dz; \ - sp++; } - -#define mpop(lz,hz,dz) { sp--; \ - lz = stackLo[sp]; \ - hz = stackHi[sp]; \ - dz = stackD [sp]; } - - -#define mnextsize(az) (nextHi[az]-nextLo[az]) - -#define mnextswap(az,bz) \ - { Int32 tz; \ - tz = nextLo[az]; nextLo[az] = nextLo[bz]; nextLo[bz] = tz; \ - tz = nextHi[az]; nextHi[az] = nextHi[bz]; nextHi[bz] = tz; \ - tz = nextD [az]; nextD [az] = nextD [bz]; nextD [bz] = tz; } - - -#define MAIN_QSORT_SMALL_THRESH 20 -#define MAIN_QSORT_DEPTH_THRESH (BZ_N_RADIX + BZ_N_QSORT) -#define MAIN_QSORT_STACK_SIZE 100 - -static -void mainQSort3 ( UInt32* ptr, - UChar* block, - UInt16* quadrant, - Int32 nblock, - Int32 loSt, - Int32 hiSt, - Int32 dSt, - Int32* budget ) -{ - Int32 unLo, unHi, ltLo, gtHi, n, m, med; - Int32 sp, lo, hi, d; - - Int32 stackLo[MAIN_QSORT_STACK_SIZE]; - Int32 stackHi[MAIN_QSORT_STACK_SIZE]; - Int32 stackD [MAIN_QSORT_STACK_SIZE]; - - Int32 nextLo[3]; - Int32 nextHi[3]; - Int32 nextD [3]; - - sp = 0; - mpush ( loSt, hiSt, dSt ); - - while (sp > 0) { - - AssertH ( sp < MAIN_QSORT_STACK_SIZE - 2, 1001 ); - - mpop ( lo, hi, d ); - if (hi - lo < MAIN_QSORT_SMALL_THRESH || - d > MAIN_QSORT_DEPTH_THRESH) { - mainSimpleSort ( ptr, block, quadrant, nblock, lo, hi, d, budget ); - if (*budget < 0) return; - continue; - } - - med = (Int32) - mmed3 ( block[ptr[ lo ]+d], - block[ptr[ hi ]+d], - block[ptr[ (lo+hi)>>1 ]+d] ); - - unLo = ltLo = lo; - unHi = gtHi = hi; - - while (True) { - while (True) { - if (unLo > unHi) break; - n = ((Int32)block[ptr[unLo]+d]) - med; - if (n == 0) { - mswap(ptr[unLo], ptr[ltLo]); - ltLo++; unLo++; continue; - }; - if (n > 0) break; - unLo++; - } - while (True) { - if (unLo > unHi) break; - n = ((Int32)block[ptr[unHi]+d]) - med; - if (n == 0) { - mswap(ptr[unHi], ptr[gtHi]); - gtHi--; unHi--; continue; - }; - if (n < 0) break; - unHi--; - } - if (unLo > unHi) break; - mswap(ptr[unLo], ptr[unHi]); unLo++; unHi--; - } - - AssertD ( unHi == unLo-1, "mainQSort3(2)" ); - - if (gtHi < ltLo) { - mpush(lo, hi, d+1 ); - continue; - } - - n = mmin(ltLo-lo, unLo-ltLo); mvswap(lo, unLo-n, n); - m = mmin(hi-gtHi, gtHi-unHi); mvswap(unLo, hi-m+1, m); - - n = lo + unLo - ltLo - 1; - m = hi - (gtHi - unHi) + 1; - - nextLo[0] = lo; nextHi[0] = n; nextD[0] = d; - nextLo[1] = m; nextHi[1] = hi; nextD[1] = d; - nextLo[2] = n+1; nextHi[2] = m-1; nextD[2] = d+1; - - if (mnextsize(0) < mnextsize(1)) mnextswap(0,1); - if (mnextsize(1) < mnextsize(2)) mnextswap(1,2); - if (mnextsize(0) < mnextsize(1)) mnextswap(0,1); - - AssertD (mnextsize(0) >= mnextsize(1), "mainQSort3(8)" ); - AssertD (mnextsize(1) >= mnextsize(2), "mainQSort3(9)" ); - - mpush (nextLo[0], nextHi[0], nextD[0]); - mpush (nextLo[1], nextHi[1], nextD[1]); - mpush (nextLo[2], nextHi[2], nextD[2]); - } -} - -#undef mswap -#undef mvswap -#undef mpush -#undef mpop -#undef mmin -#undef mnextsize -#undef mnextswap -#undef MAIN_QSORT_SMALL_THRESH -#undef MAIN_QSORT_DEPTH_THRESH -#undef MAIN_QSORT_STACK_SIZE - - -/*---------------------------------------------*/ -/* Pre: - nblock > N_OVERSHOOT - block32 exists for [0 .. nblock-1 +N_OVERSHOOT] - ((UChar*)block32) [0 .. nblock-1] holds block - ptr exists for [0 .. nblock-1] - - Post: - ((UChar*)block32) [0 .. nblock-1] holds block - All other areas of block32 destroyed - ftab [0 .. 65536 ] destroyed - ptr [0 .. nblock-1] holds sorted order - if (*budget < 0), sorting was abandoned -*/ - -#define BIGFREQ(b) (ftab[((b)+1) << 8] - ftab[(b) << 8]) -#define SETMASK (1 << 21) -#define CLEARMASK (~(SETMASK)) - -static -void mainSort ( UInt32* ptr, - UChar* block, - UInt16* quadrant, - UInt32* ftab, - Int32 nblock, - Int32 verb, - Int32* budget ) -{ - Int32 i, j, k, ss, sb; - Int32 runningOrder[256]; - Bool bigDone[256]; - Int32 copyStart[256]; - Int32 copyEnd [256]; - UChar c1; - Int32 numQSorted; - UInt16 s; - if (verb >= 4) VPrintf0 ( " main sort initialise ...\n" ); - - /*-- set up the 2-byte frequency table --*/ - for (i = 65536; i >= 0; i--) ftab[i] = 0; - - j = block[0] << 8; - i = nblock-1; - for (; i >= 3; i -= 4) { - quadrant[i] = 0; - j = (j >> 8) | ( ((UInt16)block[i]) << 8); - ftab[j]++; - quadrant[i-1] = 0; - j = (j >> 8) | ( ((UInt16)block[i-1]) << 8); - ftab[j]++; - quadrant[i-2] = 0; - j = (j >> 8) | ( ((UInt16)block[i-2]) << 8); - ftab[j]++; - quadrant[i-3] = 0; - j = (j >> 8) | ( ((UInt16)block[i-3]) << 8); - ftab[j]++; - } - for (; i >= 0; i--) { - quadrant[i] = 0; - j = (j >> 8) | ( ((UInt16)block[i]) << 8); - ftab[j]++; - } - - /*-- (emphasises close relationship of block & quadrant) --*/ - for (i = 0; i < BZ_N_OVERSHOOT; i++) { - block [nblock+i] = block[i]; - quadrant[nblock+i] = 0; - } - - if (verb >= 4) VPrintf0 ( " bucket sorting ...\n" ); - - /*-- Complete the initial radix sort --*/ - for (i = 1; i <= 65536; i++) ftab[i] += ftab[i-1]; - - s = block[0] << 8; - i = nblock-1; - for (; i >= 3; i -= 4) { - s = (s >> 8) | (block[i] << 8); - j = ftab[s] -1; - ftab[s] = j; - ptr[j] = i; - s = (s >> 8) | (block[i-1] << 8); - j = ftab[s] -1; - ftab[s] = j; - ptr[j] = i-1; - s = (s >> 8) | (block[i-2] << 8); - j = ftab[s] -1; - ftab[s] = j; - ptr[j] = i-2; - s = (s >> 8) | (block[i-3] << 8); - j = ftab[s] -1; - ftab[s] = j; - ptr[j] = i-3; - } - for (; i >= 0; i--) { - s = (s >> 8) | (block[i] << 8); - j = ftab[s] -1; - ftab[s] = j; - ptr[j] = i; - } - - /*-- - Now ftab contains the first loc of every small bucket. - Calculate the running order, from smallest to largest - big bucket. - --*/ - for (i = 0; i <= 255; i++) { - bigDone [i] = False; - runningOrder[i] = i; - } - - { - Int32 vv; - Int32 h = 1; - do h = 3 * h + 1; while (h <= 256); - do { - h = h / 3; - for (i = h; i <= 255; i++) { - vv = runningOrder[i]; - j = i; - while ( BIGFREQ(runningOrder[j-h]) > BIGFREQ(vv) ) { - runningOrder[j] = runningOrder[j-h]; - j = j - h; - if (j <= (h - 1)) goto zero; - } - zero: - runningOrder[j] = vv; - } - } while (h != 1); - } - - /*-- - The main sorting loop. - --*/ - - numQSorted = 0; - - for (i = 0; i <= 255; i++) { - - /*-- - Process big buckets, starting with the least full. - Basically this is a 3-step process in which we call - mainQSort3 to sort the small buckets [ss, j], but - also make a big effort to avoid the calls if we can. - --*/ - ss = runningOrder[i]; - - /*-- - Step 1: - Complete the big bucket [ss] by quicksorting - any unsorted small buckets [ss, j], for j != ss. - Hopefully previous pointer-scanning phases have already - completed many of the small buckets [ss, j], so - we don't have to sort them at all. - --*/ - for (j = 0; j <= 255; j++) { - if (j != ss) { - sb = (ss << 8) + j; - if ( ! (ftab[sb] & SETMASK) ) { - Int32 lo = ftab[sb] & CLEARMASK; - Int32 hi = (ftab[sb+1] & CLEARMASK) - 1; - if (hi > lo) { - if (verb >= 4) - VPrintf4 ( " qsort [0x%x, 0x%x] " - "done %d this %d\n", - ss, j, numQSorted, hi - lo + 1 ); - mainQSort3 ( - ptr, block, quadrant, nblock, - lo, hi, BZ_N_RADIX, budget - ); - numQSorted += (hi - lo + 1); - if (*budget < 0) return; - } - } - ftab[sb] |= SETMASK; - } - } - - AssertH ( !bigDone[ss], 1006 ); - - /*-- - Step 2: - Now scan this big bucket [ss] so as to synthesise the - sorted order for small buckets [t, ss] for all t, - including, magically, the bucket [ss,ss] too. - This will avoid doing Real Work in subsequent Step 1's. - --*/ - { - for (j = 0; j <= 255; j++) { - copyStart[j] = ftab[(j << 8) + ss] & CLEARMASK; - copyEnd [j] = (ftab[(j << 8) + ss + 1] & CLEARMASK) - 1; - } - for (j = ftab[ss << 8] & CLEARMASK; j < copyStart[ss]; j++) { - k = ptr[j]-1; if (k < 0) k += nblock; - c1 = block[k]; - if (!bigDone[c1]) - ptr[ copyStart[c1]++ ] = k; - } - for (j = (ftab[(ss+1) << 8] & CLEARMASK) - 1; j > copyEnd[ss]; j--) { - k = ptr[j]-1; if (k < 0) k += nblock; - c1 = block[k]; - if (!bigDone[c1]) - ptr[ copyEnd[c1]-- ] = k; - } - } - - AssertH ( (copyStart[ss]-1 == copyEnd[ss]) - || - /* Extremely rare case missing in bzip2-1.0.0 and 1.0.1. - Necessity for this case is demonstrated by compressing - a sequence of approximately 48.5 million of character - 251; 1.0.0/1.0.1 will then die here. */ - (copyStart[ss] == 0 && copyEnd[ss] == nblock-1), - 1007 ) - - for (j = 0; j <= 255; j++) ftab[(j << 8) + ss] |= SETMASK; - - /*-- - Step 3: - The [ss] big bucket is now done. Record this fact, - and update the quadrant descriptors. Remember to - update quadrants in the overshoot area too, if - necessary. The "if (i < 255)" test merely skips - this updating for the last bucket processed, since - updating for the last bucket is pointless. - - The quadrant array provides a way to incrementally - cache sort orderings, as they appear, so as to - make subsequent comparisons in fullGtU() complete - faster. For repetitive blocks this makes a big - difference (but not big enough to be able to avoid - the fallback sorting mechanism, exponential radix sort). - - The precise meaning is: at all times: - - for 0 <= i < nblock and 0 <= j <= nblock - - if block[i] != block[j], - - then the relative values of quadrant[i] and - quadrant[j] are meaningless. - - else { - if quadrant[i] < quadrant[j] - then the string starting at i lexicographically - precedes the string starting at j - - else if quadrant[i] > quadrant[j] - then the string starting at j lexicographically - precedes the string starting at i - - else - the relative ordering of the strings starting - at i and j has not yet been determined. - } - --*/ - bigDone[ss] = True; - - if (i < 255) { - Int32 bbStart = ftab[ss << 8] & CLEARMASK; - Int32 bbSize = (ftab[(ss+1) << 8] & CLEARMASK) - bbStart; - Int32 shifts = 0; - - while ((bbSize >> shifts) > 65534) shifts++; - - for (j = bbSize-1; j >= 0; j--) { - Int32 a2update = ptr[bbStart + j]; - UInt16 qVal = (UInt16)(j >> shifts); - quadrant[a2update] = qVal; - if (a2update < BZ_N_OVERSHOOT) - quadrant[a2update + nblock] = qVal; - } - AssertH ( ((bbSize-1) >> shifts) <= 65535, 1002 ); - } - - } - - if (verb >= 4) - VPrintf3 ( " %d pointers, %d sorted, %d scanned\n", - nblock, numQSorted, nblock - numQSorted ); -} - -#undef BIGFREQ -#undef SETMASK -#undef CLEARMASK - - -/*---------------------------------------------*/ -/* Pre: - nblock > 0 - arr2 exists for [0 .. nblock-1 +N_OVERSHOOT] - ((UChar*)arr2) [0 .. nblock-1] holds block - arr1 exists for [0 .. nblock-1] - - Post: - ((UChar*)arr2) [0 .. nblock-1] holds block - All other areas of block destroyed - ftab [ 0 .. 65536 ] destroyed - arr1 [0 .. nblock-1] holds sorted order -*/ -void BZ2_blockSort ( EState* s ) -{ - UInt32* ptr = s->ptr; - UChar* block = s->block; - UInt32* ftab = s->ftab; - Int32 nblock = s->nblock; - Int32 verb = s->verbosity; - Int32 wfact = s->workFactor; - UInt16* quadrant; - Int32 budget; - Int32 budgetInit; - Int32 i; - - if (nblock < 10000) { - fallbackSort ( s->arr1, s->arr2, ftab, nblock, verb ); - } else { - /* Calculate the location for quadrant, remembering to get - the alignment right. Assumes that &(block[0]) is at least - 2-byte aligned -- this should be ok since block is really - the first section of arr2. - */ - i = nblock+BZ_N_OVERSHOOT; - if (i & 1) i++; - quadrant = (UInt16*)(&(block[i])); - - /* (wfact-1) / 3 puts the default-factor-30 - transition point at very roughly the same place as - with v0.1 and v0.9.0. - Not that it particularly matters any more, since the - resulting compressed stream is now the same regardless - of whether or not we use the main sort or fallback sort. - */ - if (wfact < 1 ) wfact = 1; - if (wfact > 100) wfact = 100; - budgetInit = nblock * ((wfact-1) / 3); - budget = budgetInit; - - mainSort ( ptr, block, quadrant, ftab, nblock, verb, &budget ); - if (verb >= 3) - VPrintf3 ( " %d work, %d block, ratio %5.2f\n", - budgetInit - budget, - nblock, - (float)(budgetInit - budget) / - (float)(nblock==0 ? 1 : nblock) ); - if (budget < 0) { - if (verb >= 2) - VPrintf0 ( " too repetitive; using fallback" - " sorting algorithm\n" ); - fallbackSort ( s->arr1, s->arr2, ftab, nblock, verb ); - } - } - - s->origPtr = -1; - for (i = 0; i < s->nblock; i++) - if (ptr[i] == 0) - { s->origPtr = i; break; }; - - AssertH( s->origPtr != -1, 1003 ); -} - - -/*-------------------------------------------------------------*/ -/*--- end blocksort.c ---*/ -/*-------------------------------------------------------------*/ diff --git a/contrib/bzip2/bzip2.1 b/contrib/bzip2/bzip2.1 deleted file mode 100644 index a313f2d5bedc..000000000000 --- a/contrib/bzip2/bzip2.1 +++ /dev/null @@ -1,454 +0,0 @@ -.PU -.TH bzip2 1 -.SH NAME -bzip2, bunzip2 \- a block-sorting file compressor, v1.0.4 -.br -bzcat \- decompresses files to stdout -.br -bzip2recover \- recovers data from damaged bzip2 files - -.SH SYNOPSIS -.ll +8 -.B bzip2 -.RB [ " \-cdfkqstvzVL123456789 " ] -[ -.I "filenames \&..." -] -.ll -8 -.br -.B bunzip2 -.RB [ " \-fkvsVL " ] -[ -.I "filenames \&..." -] -.br -.B bzcat -.RB [ " \-s " ] -[ -.I "filenames \&..." -] -.br -.B bzip2recover -.I "filename" - -.SH DESCRIPTION -.I bzip2 -compresses files using the Burrows-Wheeler block sorting -text compression algorithm, and Huffman coding. Compression is -generally considerably better than that achieved by more conventional -LZ77/LZ78-based compressors, and approaches the performance of the PPM -family of statistical compressors. - -The command-line options are deliberately very similar to -those of -.I GNU gzip, -but they are not identical. - -.I bzip2 -expects a list of file names to accompany the -command-line flags. Each file is replaced by a compressed version of -itself, with the name "original_name.bz2". -Each compressed file -has the same modification date, permissions, and, when possible, -ownership as the corresponding original, so that these properties can -be correctly restored at decompression time. File name handling is -naive in the sense that there is no mechanism for preserving original -file names, permissions, ownerships or dates in filesystems which lack -these concepts, or have serious file name length restrictions, such as -MS-DOS. - -.I bzip2 -and -.I bunzip2 -will by default not overwrite existing -files. If you want this to happen, specify the \-f flag. - -If no file names are specified, -.I bzip2 -compresses from standard -input to standard output. In this case, -.I bzip2 -will decline to -write compressed output to a terminal, as this would be entirely -incomprehensible and therefore pointless. - -.I bunzip2 -(or -.I bzip2 \-d) -decompresses all -specified files. Files which were not created by -.I bzip2 -will be detected and ignored, and a warning issued. -.I bzip2 -attempts to guess the filename for the decompressed file -from that of the compressed file as follows: - - filename.bz2 becomes filename - filename.bz becomes filename - filename.tbz2 becomes filename.tar - filename.tbz becomes filename.tar - anyothername becomes anyothername.out - -If the file does not end in one of the recognised endings, -.I .bz2, -.I .bz, -.I .tbz2 -or -.I .tbz, -.I bzip2 -complains that it cannot -guess the name of the original file, and uses the original name -with -.I .out -appended. - -As with compression, supplying no -filenames causes decompression from -standard input to standard output. - -.I bunzip2 -will correctly decompress a file which is the -concatenation of two or more compressed files. The result is the -concatenation of the corresponding uncompressed files. Integrity -testing (\-t) -of concatenated -compressed files is also supported. - -You can also compress or decompress files to the standard output by -giving the \-c flag. Multiple files may be compressed and -decompressed like this. The resulting outputs are fed sequentially to -stdout. Compression of multiple files -in this manner generates a stream -containing multiple compressed file representations. Such a stream -can be decompressed correctly only by -.I bzip2 -version 0.9.0 or -later. Earlier versions of -.I bzip2 -will stop after decompressing -the first file in the stream. - -.I bzcat -(or -.I bzip2 -dc) -decompresses all specified files to -the standard output. - -.I bzip2 -will read arguments from the environment variables -.I BZIP2 -and -.I BZIP, -in that order, and will process them -before any arguments read from the command line. This gives a -convenient way to supply default arguments. - -Compression is always performed, even if the compressed -file is slightly -larger than the original. Files of less than about one hundred bytes -tend to get larger, since the compression mechanism has a constant -overhead in the region of 50 bytes. Random data (including the output -of most file compressors) is coded at about 8.05 bits per byte, giving -an expansion of around 0.5%. - -As a self-check for your protection, -.I -bzip2 -uses 32-bit CRCs to -make sure that the decompressed version of a file is identical to the -original. This guards against corruption of the compressed data, and -against undetected bugs in -.I bzip2 -(hopefully very unlikely). The -chances of data corruption going undetected is microscopic, about one -chance in four billion for each file processed. Be aware, though, that -the check occurs upon decompression, so it can only tell you that -something is wrong. It can't help you -recover the original uncompressed -data. You can use -.I bzip2recover -to try to recover data from -damaged files. - -Return values: 0 for a normal exit, 1 for environmental problems (file -not found, invalid flags, I/O errors, &c), 2 to indicate a corrupt -compressed file, 3 for an internal consistency error (eg, bug) which -caused -.I bzip2 -to panic. - -.SH OPTIONS -.TP -.B \-c --stdout -Compress or decompress to standard output. -.TP -.B \-d --decompress -Force decompression. -.I bzip2, -.I bunzip2 -and -.I bzcat -are -really the same program, and the decision about what actions to take is -done on the basis of which name is used. This flag overrides that -mechanism, and forces -.I bzip2 -to decompress. -.TP -.B \-z --compress -The complement to \-d: forces compression, regardless of the -invocation name. -.TP -.B \-t --test -Check integrity of the specified file(s), but don't decompress them. -This really performs a trial decompression and throws away the result. -.TP -.B \-f --force -Force overwrite of output files. Normally, -.I bzip2 -will not overwrite -existing output files. Also forces -.I bzip2 -to break hard links -to files, which it otherwise wouldn't do. - -bzip2 normally declines to decompress files which don't have the -correct magic header bytes. If forced (-f), however, it will pass -such files through unmodified. This is how GNU gzip behaves. -.TP -.B \-k --keep -Keep (don't delete) input files during compression -or decompression. -.TP -.B \-s --small -Reduce memory usage, for compression, decompression and testing. Files -are decompressed and tested using a modified algorithm which only -requires 2.5 bytes per block byte. This means any file can be -decompressed in 2300k of memory, albeit at about half the normal speed. - -During compression, \-s selects a block size of 200k, which limits -memory use to around the same figure, at the expense of your compression -ratio. In short, if your machine is low on memory (8 megabytes or -less), use \-s for everything. See MEMORY MANAGEMENT below. -.TP -.B \-q --quiet -Suppress non-essential warning messages. Messages pertaining to -I/O errors and other critical events will not be suppressed. -.TP -.B \-v --verbose -Verbose mode -- show the compression ratio for each file processed. -Further \-v's increase the verbosity level, spewing out lots of -information which is primarily of interest for diagnostic purposes. -.TP -.B \-L --license -V --version -Display the software version, license terms and conditions. -.TP -.B \-1 (or \-\-fast) to \-9 (or \-\-best) -Set the block size to 100 k, 200 k .. 900 k when compressing. Has no -effect when decompressing. See MEMORY MANAGEMENT below. -The \-\-fast and \-\-best aliases are primarily for GNU gzip -compatibility. In particular, \-\-fast doesn't make things -significantly faster. -And \-\-best merely selects the default behaviour. -.TP -.B \-- -Treats all subsequent arguments as file names, even if they start -with a dash. This is so you can handle files with names beginning -with a dash, for example: bzip2 \-- \-myfilename. -.TP -.B \--repetitive-fast --repetitive-best -These flags are redundant in versions 0.9.5 and above. They provided -some coarse control over the behaviour of the sorting algorithm in -earlier versions, which was sometimes useful. 0.9.5 and above have an -improved algorithm which renders these flags irrelevant. - -.SH MEMORY MANAGEMENT -.I bzip2 -compresses large files in blocks. The block size affects -both the compression ratio achieved, and the amount of memory needed for -compression and decompression. The flags \-1 through \-9 -specify the block size to be 100,000 bytes through 900,000 bytes (the -default) respectively. At decompression time, the block size used for -compression is read from the header of the compressed file, and -.I bunzip2 -then allocates itself just enough memory to decompress -the file. Since block sizes are stored in compressed files, it follows -that the flags \-1 to \-9 are irrelevant to and so ignored -during decompression. - -Compression and decompression requirements, -in bytes, can be estimated as: - - Compression: 400k + ( 8 x block size ) - - Decompression: 100k + ( 4 x block size ), or - 100k + ( 2.5 x block size ) - -Larger block sizes give rapidly diminishing marginal returns. Most of -the compression comes from the first two or three hundred k of block -size, a fact worth bearing in mind when using -.I bzip2 -on small machines. -It is also important to appreciate that the decompression memory -requirement is set at compression time by the choice of block size. - -For files compressed with the default 900k block size, -.I bunzip2 -will require about 3700 kbytes to decompress. To support decompression -of any file on a 4 megabyte machine, -.I bunzip2 -has an option to -decompress using approximately half this amount of memory, about 2300 -kbytes. Decompression speed is also halved, so you should use this -option only where necessary. The relevant flag is -s. - -In general, try and use the largest block size memory constraints allow, -since that maximises the compression achieved. Compression and -decompression speed are virtually unaffected by block size. - -Another significant point applies to files which fit in a single block --- that means most files you'd encounter using a large block size. The -amount of real memory touched is proportional to the size of the file, -since the file is smaller than a block. For example, compressing a file -20,000 bytes long with the flag -9 will cause the compressor to -allocate around 7600k of memory, but only touch 400k + 20000 * 8 = 560 -kbytes of it. Similarly, the decompressor will allocate 3700k but only -touch 100k + 20000 * 4 = 180 kbytes. - -Here is a table which summarises the maximum memory usage for different -block sizes. Also recorded is the total compressed size for 14 files of -the Calgary Text Compression Corpus totalling 3,141,622 bytes. This -column gives some feel for how compression varies with block size. -These figures tend to understate the advantage of larger block sizes for -larger files, since the Corpus is dominated by smaller files. - - Compress Decompress Decompress Corpus - Flag usage usage -s usage Size - - -1 1200k 500k 350k 914704 - -2 2000k 900k 600k 877703 - -3 2800k 1300k 850k 860338 - -4 3600k 1700k 1100k 846899 - -5 4400k 2100k 1350k 845160 - -6 5200k 2500k 1600k 838626 - -7 6100k 2900k 1850k 834096 - -8 6800k 3300k 2100k 828642 - -9 7600k 3700k 2350k 828642 - -.SH RECOVERING DATA FROM DAMAGED FILES -.I bzip2 -compresses files in blocks, usually 900kbytes long. Each -block is handled independently. If a media or transmission error causes -a multi-block .bz2 -file to become damaged, it may be possible to -recover data from the undamaged blocks in the file. - -The compressed representation of each block is delimited by a 48-bit -pattern, which makes it possible to find the block boundaries with -reasonable certainty. Each block also carries its own 32-bit CRC, so -damaged blocks can be distinguished from undamaged ones. - -.I bzip2recover -is a simple program whose purpose is to search for -blocks in .bz2 files, and write each block out into its own .bz2 -file. You can then use -.I bzip2 -\-t -to test the -integrity of the resulting files, and decompress those which are -undamaged. - -.I bzip2recover -takes a single argument, the name of the damaged file, -and writes a number of files "rec00001file.bz2", -"rec00002file.bz2", etc, containing the extracted blocks. -The output filenames are designed so that the use of -wildcards in subsequent processing -- for example, -"bzip2 -dc rec*file.bz2 > recovered_data" -- processes the files in -the correct order. - -.I bzip2recover -should be of most use dealing with large .bz2 -files, as these will contain many blocks. It is clearly -futile to use it on damaged single-block files, since a -damaged block cannot be recovered. If you wish to minimise -any potential data loss through media or transmission errors, -you might consider compressing with a smaller -block size. - -.SH PERFORMANCE NOTES -The sorting phase of compression gathers together similar strings in the -file. Because of this, files containing very long runs of repeated -symbols, like "aabaabaabaab ..." (repeated several hundred times) may -compress more slowly than normal. Versions 0.9.5 and above fare much -better than previous versions in this respect. The ratio between -worst-case and average-case compression time is in the region of 10:1. -For previous versions, this figure was more like 100:1. You can use the -\-vvvv option to monitor progress in great detail, if you want. - -Decompression speed is unaffected by these phenomena. - -.I bzip2 -usually allocates several megabytes of memory to operate -in, and then charges all over it in a fairly random fashion. This means -that performance, both for compressing and decompressing, is largely -determined by the speed at which your machine can service cache misses. -Because of this, small changes to the code to reduce the miss rate have -been observed to give disproportionately large performance improvements. -I imagine -.I bzip2 -will perform best on machines with very large caches. - -.SH CAVEATS -I/O error messages are not as helpful as they could be. -.I bzip2 -tries hard to detect I/O errors and exit cleanly, but the details of -what the problem is sometimes seem rather misleading. - -This manual page pertains to version 1.0.4 of -.I bzip2. -Compressed data created by this version is entirely forwards and -backwards compatible with the previous public releases, versions -0.1pl2, 0.9.0, 0.9.5, 1.0.0, 1.0.1, 1.0.2 and 1.0.3, but with the following -exception: 0.9.0 and above can correctly decompress multiple -concatenated compressed files. 0.1pl2 cannot do this; it will stop -after decompressing just the first file in the stream. - -.I bzip2recover -versions prior to 1.0.2 used 32-bit integers to represent -bit positions in compressed files, so they could not handle compressed -files more than 512 megabytes long. Versions 1.0.2 and above use -64-bit ints on some platforms which support them (GNU supported -targets, and Windows). To establish whether or not bzip2recover was -built with such a limitation, run it without arguments. In any event -you can build yourself an unlimited version if you can recompile it -with MaybeUInt64 set to be an unsigned 64-bit integer. - - - -.SH AUTHOR -Julian Seward, jsewardbzip.org. - -http://www.bzip.org - -The ideas embodied in -.I bzip2 -are due to (at least) the following -people: Michael Burrows and David Wheeler (for the block sorting -transformation), David Wheeler (again, for the Huffman coder), Peter -Fenwick (for the structured coding model in the original -.I bzip, -and many refinements), and Alistair Moffat, Radford Neal and Ian Witten -(for the arithmetic coder in the original -.I bzip). -I am much -indebted for their help, support and advice. See the manual in the -source distribution for pointers to sources of documentation. Christian -von Roques encouraged me to look for faster sorting algorithms, so as to -speed up compression. Bela Lubkin encouraged me to improve the -worst-case compression performance. -Donna Robinson XMLised the documentation. -The bz* scripts are derived from those of GNU gzip. -Many people sent patches, helped -with portability problems, lent machines, gave advice and were generally -helpful. diff --git a/contrib/bzip2/bzip2.c b/contrib/bzip2/bzip2.c deleted file mode 100644 index 390410735b54..000000000000 --- a/contrib/bzip2/bzip2.c +++ /dev/null @@ -1,2034 +0,0 @@ - -/*-----------------------------------------------------------*/ -/*--- A block-sorting, lossless compressor bzip2.c ---*/ -/*-----------------------------------------------------------*/ - -/* ------------------------------------------------------------------ - This file is part of bzip2/libbzip2, a program and library for - lossless, block-sorting data compression. - - bzip2/libbzip2 version 1.0.5 of 10 December 2007 - Copyright (C) 1996-2007 Julian Seward - - Please read the WARNING, DISCLAIMER and PATENTS sections in the - README file. - - This program is released under the terms of the license contained - in the file LICENSE. - ------------------------------------------------------------------ */ - - -/* Place a 1 beside your platform, and 0 elsewhere. - Generic 32-bit Unix. - Also works on 64-bit Unix boxes. - This is the default. -*/ -#define BZ_UNIX 1 - -/*-- - Win32, as seen by Jacob Navia's excellent - port of (Chris Fraser & David Hanson)'s excellent - lcc compiler. Or with MS Visual C. - This is selected automatically if compiled by a compiler which - defines _WIN32, not including the Cygwin GCC. ---*/ -#define BZ_LCCWIN32 0 - -#if defined(_WIN32) && !defined(__CYGWIN__) -#undef BZ_LCCWIN32 -#define BZ_LCCWIN32 1 -#undef BZ_UNIX -#define BZ_UNIX 0 -#endif - - -/*---------------------------------------------*/ -/*-- - Some stuff for all platforms. ---*/ - -#include -#include -#include -#include -#include -#include -#include -#include "bzlib.h" - -#define ERROR_IF_EOF(i) { if ((i) == EOF) ioError(); } -#define ERROR_IF_NOT_ZERO(i) { if ((i) != 0) ioError(); } -#define ERROR_IF_MINUS_ONE(i) { if ((i) == (-1)) ioError(); } - - -/*---------------------------------------------*/ -/*-- - Platform-specific stuff. ---*/ - -#if BZ_UNIX -# include -# include -# include -# include -# include -# include - -# define PATH_SEP '/' -# define MY_LSTAT lstat -# define MY_STAT stat -# define MY_S_ISREG S_ISREG -# define MY_S_ISDIR S_ISDIR - -# define APPEND_FILESPEC(root, name) \ - root=snocString((root), (name)) - -# define APPEND_FLAG(root, name) \ - root=snocString((root), (name)) - -# define SET_BINARY_MODE(fd) /**/ - -# ifdef __GNUC__ -# define NORETURN __attribute__ ((noreturn)) -# else -# define NORETURN /**/ -# endif - -# ifdef __DJGPP__ -# include -# include -# undef MY_LSTAT -# undef MY_STAT -# define MY_LSTAT stat -# define MY_STAT stat -# undef SET_BINARY_MODE -# define SET_BINARY_MODE(fd) \ - do { \ - int retVal = setmode ( fileno ( fd ), \ - O_BINARY ); \ - ERROR_IF_MINUS_ONE ( retVal ); \ - } while ( 0 ) -# endif - -# ifdef __CYGWIN__ -# include -# include -# undef SET_BINARY_MODE -# define SET_BINARY_MODE(fd) \ - do { \ - int retVal = setmode ( fileno ( fd ), \ - O_BINARY ); \ - ERROR_IF_MINUS_ONE ( retVal ); \ - } while ( 0 ) -# endif -#endif /* BZ_UNIX */ - - - -#if BZ_LCCWIN32 -# include -# include -# include - -# define NORETURN /**/ -# define PATH_SEP '\\' -# define MY_LSTAT _stat -# define MY_STAT _stat -# define MY_S_ISREG(x) ((x) & _S_IFREG) -# define MY_S_ISDIR(x) ((x) & _S_IFDIR) - -# define APPEND_FLAG(root, name) \ - root=snocString((root), (name)) - -# define APPEND_FILESPEC(root, name) \ - root = snocString ((root), (name)) - -# define SET_BINARY_MODE(fd) \ - do { \ - int retVal = setmode ( fileno ( fd ), \ - O_BINARY ); \ - ERROR_IF_MINUS_ONE ( retVal ); \ - } while ( 0 ) - -#endif /* BZ_LCCWIN32 */ - - -/*---------------------------------------------*/ -/*-- - Some more stuff for all platforms :-) ---*/ - -typedef char Char; -typedef unsigned char Bool; -typedef unsigned char UChar; -typedef int Int32; -typedef unsigned int UInt32; -typedef short Int16; -typedef unsigned short UInt16; - -#define True ((Bool)1) -#define False ((Bool)0) - -/*-- - IntNative is your platform's `native' int size. - Only here to avoid probs with 64-bit platforms. ---*/ -typedef int IntNative; - - -/*---------------------------------------------------*/ -/*--- Misc (file handling) data decls ---*/ -/*---------------------------------------------------*/ - -Int32 verbosity; -Bool keepInputFiles, smallMode, deleteOutputOnInterrupt; -Bool forceOverwrite, testFailsExist, unzFailsExist, noisy; -Int32 numFileNames, numFilesProcessed, blockSize100k; -Int32 exitValue; - -/*-- source modes; F==file, I==stdin, O==stdout --*/ -#define SM_I2O 1 -#define SM_F2O 2 -#define SM_F2F 3 - -/*-- operation modes --*/ -#define OM_Z 1 -#define OM_UNZ 2 -#define OM_TEST 3 - -Int32 opMode; -Int32 srcMode; - -#define FILE_NAME_LEN 1034 - -Int32 longestFileName; -Char inName [FILE_NAME_LEN]; -Char outName[FILE_NAME_LEN]; -Char tmpName[FILE_NAME_LEN]; -Char *progName; -Char progNameReally[FILE_NAME_LEN]; -FILE *outputHandleJustInCase; -Int32 workFactor; - -static void panic ( const Char* ) NORETURN; -static void ioError ( void ) NORETURN; -static void outOfMemory ( void ) NORETURN; -static void configError ( void ) NORETURN; -static void crcError ( void ) NORETURN; -static void cleanUpAndFail ( Int32 ) NORETURN; -static void compressedStreamEOF ( void ) NORETURN; - -static void copyFileName ( Char*, Char* ); -static void* myMalloc ( Int32 ); -static void applySavedFileAttrToOutputFile ( IntNative fd ); - - - -/*---------------------------------------------------*/ -/*--- An implementation of 64-bit ints. Sigh. ---*/ -/*--- Roll on widespread deployment of ANSI C9X ! ---*/ -/*---------------------------------------------------*/ - -typedef - struct { UChar b[8]; } - UInt64; - - -static -void uInt64_from_UInt32s ( UInt64* n, UInt32 lo32, UInt32 hi32 ) -{ - n->b[7] = (UChar)((hi32 >> 24) & 0xFF); - n->b[6] = (UChar)((hi32 >> 16) & 0xFF); - n->b[5] = (UChar)((hi32 >> 8) & 0xFF); - n->b[4] = (UChar) (hi32 & 0xFF); - n->b[3] = (UChar)((lo32 >> 24) & 0xFF); - n->b[2] = (UChar)((lo32 >> 16) & 0xFF); - n->b[1] = (UChar)((lo32 >> 8) & 0xFF); - n->b[0] = (UChar) (lo32 & 0xFF); -} - - -static -double uInt64_to_double ( UInt64* n ) -{ - Int32 i; - double base = 1.0; - double sum = 0.0; - for (i = 0; i < 8; i++) { - sum += base * (double)(n->b[i]); - base *= 256.0; - } - return sum; -} - - -static -Bool uInt64_isZero ( UInt64* n ) -{ - Int32 i; - for (i = 0; i < 8; i++) - if (n->b[i] != 0) return 0; - return 1; -} - - -/* Divide *n by 10, and return the remainder. */ -static -Int32 uInt64_qrm10 ( UInt64* n ) -{ - UInt32 rem, tmp; - Int32 i; - rem = 0; - for (i = 7; i >= 0; i--) { - tmp = rem * 256 + n->b[i]; - n->b[i] = tmp / 10; - rem = tmp % 10; - } - return rem; -} - - -/* ... and the Whole Entire Point of all this UInt64 stuff is - so that we can supply the following function. -*/ -static -void uInt64_toAscii ( char* outbuf, UInt64* n ) -{ - Int32 i, q; - UChar buf[32]; - Int32 nBuf = 0; - UInt64 n_copy = *n; - do { - q = uInt64_qrm10 ( &n_copy ); - buf[nBuf] = q + '0'; - nBuf++; - } while (!uInt64_isZero(&n_copy)); - outbuf[nBuf] = 0; - for (i = 0; i < nBuf; i++) - outbuf[i] = buf[nBuf-i-1]; -} - - -/*---------------------------------------------------*/ -/*--- Processing of complete files and streams ---*/ -/*---------------------------------------------------*/ - -/*---------------------------------------------*/ -static -Bool myfeof ( FILE* f ) -{ - Int32 c = fgetc ( f ); - if (c == EOF) return True; - ungetc ( c, f ); - return False; -} - - -/*---------------------------------------------*/ -static -void compressStream ( FILE *stream, FILE *zStream ) -{ - BZFILE* bzf = NULL; - UChar ibuf[5000]; - Int32 nIbuf; - UInt32 nbytes_in_lo32, nbytes_in_hi32; - UInt32 nbytes_out_lo32, nbytes_out_hi32; - Int32 bzerr, bzerr_dummy, ret; - - SET_BINARY_MODE(stream); - SET_BINARY_MODE(zStream); - - if (ferror(stream)) goto errhandler_io; - if (ferror(zStream)) goto errhandler_io; - - bzf = BZ2_bzWriteOpen ( &bzerr, zStream, - blockSize100k, verbosity, workFactor ); - if (bzerr != BZ_OK) goto errhandler; - - if (verbosity >= 2) fprintf ( stderr, "\n" ); - - while (True) { - - if (myfeof(stream)) break; - nIbuf = fread ( ibuf, sizeof(UChar), 5000, stream ); - if (ferror(stream)) goto errhandler_io; - if (nIbuf > 0) BZ2_bzWrite ( &bzerr, bzf, (void*)ibuf, nIbuf ); - if (bzerr != BZ_OK) goto errhandler; - - } - - BZ2_bzWriteClose64 ( &bzerr, bzf, 0, - &nbytes_in_lo32, &nbytes_in_hi32, - &nbytes_out_lo32, &nbytes_out_hi32 ); - if (bzerr != BZ_OK) goto errhandler; - - if (ferror(zStream)) goto errhandler_io; - ret = fflush ( zStream ); - if (ret == EOF) goto errhandler_io; - if (zStream != stdout) { - Int32 fd = fileno ( zStream ); - if (fd < 0) goto errhandler_io; - applySavedFileAttrToOutputFile ( fd ); - ret = fclose ( zStream ); - outputHandleJustInCase = NULL; - if (ret == EOF) goto errhandler_io; - } - outputHandleJustInCase = NULL; - if (ferror(stream)) goto errhandler_io; - ret = fclose ( stream ); - if (ret == EOF) goto errhandler_io; - - if (verbosity >= 1) { - if (nbytes_in_lo32 == 0 && nbytes_in_hi32 == 0) { - fprintf ( stderr, " no data compressed.\n"); - } else { - Char buf_nin[32], buf_nout[32]; - UInt64 nbytes_in, nbytes_out; - double nbytes_in_d, nbytes_out_d; - uInt64_from_UInt32s ( &nbytes_in, - nbytes_in_lo32, nbytes_in_hi32 ); - uInt64_from_UInt32s ( &nbytes_out, - nbytes_out_lo32, nbytes_out_hi32 ); - nbytes_in_d = uInt64_to_double ( &nbytes_in ); - nbytes_out_d = uInt64_to_double ( &nbytes_out ); - uInt64_toAscii ( buf_nin, &nbytes_in ); - uInt64_toAscii ( buf_nout, &nbytes_out ); - fprintf ( stderr, "%6.3f:1, %6.3f bits/byte, " - "%5.2f%% saved, %s in, %s out.\n", - nbytes_in_d / nbytes_out_d, - (8.0 * nbytes_out_d) / nbytes_in_d, - 100.0 * (1.0 - nbytes_out_d / nbytes_in_d), - buf_nin, - buf_nout - ); - } - } - - return; - - errhandler: - BZ2_bzWriteClose64 ( &bzerr_dummy, bzf, 1, - &nbytes_in_lo32, &nbytes_in_hi32, - &nbytes_out_lo32, &nbytes_out_hi32 ); - switch (bzerr) { - case BZ_CONFIG_ERROR: - configError(); break; - case BZ_MEM_ERROR: - outOfMemory (); break; - case BZ_IO_ERROR: - errhandler_io: - ioError(); break; - default: - panic ( "compress:unexpected error" ); - } - - panic ( "compress:end" ); - /*notreached*/ -} - - - -/*---------------------------------------------*/ -static -Bool uncompressStream ( FILE *zStream, FILE *stream ) -{ - BZFILE* bzf = NULL; - Int32 bzerr, bzerr_dummy, ret, nread, streamNo, i; - UChar obuf[5000]; - UChar unused[BZ_MAX_UNUSED]; - Int32 nUnused; - void* unusedTmpV; - UChar* unusedTmp; - - nUnused = 0; - streamNo = 0; - - SET_BINARY_MODE(stream); - SET_BINARY_MODE(zStream); - - if (ferror(stream)) goto errhandler_io; - if (ferror(zStream)) goto errhandler_io; - - while (True) { - - bzf = BZ2_bzReadOpen ( - &bzerr, zStream, verbosity, - (int)smallMode, unused, nUnused - ); - if (bzf == NULL || bzerr != BZ_OK) goto errhandler; - streamNo++; - - while (bzerr == BZ_OK) { - nread = BZ2_bzRead ( &bzerr, bzf, obuf, 5000 ); - if (bzerr == BZ_DATA_ERROR_MAGIC) goto trycat; - if ((bzerr == BZ_OK || bzerr == BZ_STREAM_END) && nread > 0) - fwrite ( obuf, sizeof(UChar), nread, stream ); - if (ferror(stream)) goto errhandler_io; - } - if (bzerr != BZ_STREAM_END) goto errhandler; - - BZ2_bzReadGetUnused ( &bzerr, bzf, &unusedTmpV, &nUnused ); - if (bzerr != BZ_OK) panic ( "decompress:bzReadGetUnused" ); - - unusedTmp = (UChar*)unusedTmpV; - for (i = 0; i < nUnused; i++) unused[i] = unusedTmp[i]; - - BZ2_bzReadClose ( &bzerr, bzf ); - if (bzerr != BZ_OK) panic ( "decompress:bzReadGetUnused" ); - - if (nUnused == 0 && myfeof(zStream)) break; - } - - closeok: - if (ferror(zStream)) goto errhandler_io; - if (stream != stdout) { - Int32 fd = fileno ( stream ); - if (fd < 0) goto errhandler_io; - applySavedFileAttrToOutputFile ( fd ); - } - ret = fclose ( zStream ); - if (ret == EOF) goto errhandler_io; - - if (ferror(stream)) goto errhandler_io; - ret = fflush ( stream ); - if (ret != 0) goto errhandler_io; - if (stream != stdout) { - ret = fclose ( stream ); - outputHandleJustInCase = NULL; - if (ret == EOF) goto errhandler_io; - } - outputHandleJustInCase = NULL; - if (verbosity >= 2) fprintf ( stderr, "\n " ); - return True; - - trycat: - if (forceOverwrite) { - rewind(zStream); - while (True) { - if (myfeof(zStream)) break; - nread = fread ( obuf, sizeof(UChar), 5000, zStream ); - if (ferror(zStream)) goto errhandler_io; - if (nread > 0) fwrite ( obuf, sizeof(UChar), nread, stream ); - if (ferror(stream)) goto errhandler_io; - } - goto closeok; - } - - errhandler: - BZ2_bzReadClose ( &bzerr_dummy, bzf ); - switch (bzerr) { - case BZ_CONFIG_ERROR: - configError(); break; - case BZ_IO_ERROR: - errhandler_io: - ioError(); break; - case BZ_DATA_ERROR: - crcError(); - case BZ_MEM_ERROR: - outOfMemory(); - case BZ_UNEXPECTED_EOF: - compressedStreamEOF(); - case BZ_DATA_ERROR_MAGIC: - if (zStream != stdin) fclose(zStream); - if (stream != stdout) fclose(stream); - if (streamNo == 1) { - return False; - } else { - if (noisy) - fprintf ( stderr, - "\n%s: %s: trailing garbage after EOF ignored\n", - progName, inName ); - return True; - } - default: - panic ( "decompress:unexpected error" ); - } - - panic ( "decompress:end" ); - return True; /*notreached*/ -} - - -/*---------------------------------------------*/ -static -Bool testStream ( FILE *zStream ) -{ - BZFILE* bzf = NULL; - Int32 bzerr, bzerr_dummy, ret, nread, streamNo, i; - UChar obuf[5000]; - UChar unused[BZ_MAX_UNUSED]; - Int32 nUnused; - void* unusedTmpV; - UChar* unusedTmp; - - nUnused = 0; - streamNo = 0; - - SET_BINARY_MODE(zStream); - if (ferror(zStream)) goto errhandler_io; - - while (True) { - - bzf = BZ2_bzReadOpen ( - &bzerr, zStream, verbosity, - (int)smallMode, unused, nUnused - ); - if (bzf == NULL || bzerr != BZ_OK) goto errhandler; - streamNo++; - - while (bzerr == BZ_OK) { - nread = BZ2_bzRead ( &bzerr, bzf, obuf, 5000 ); - if (bzerr == BZ_DATA_ERROR_MAGIC) goto errhandler; - } - if (bzerr != BZ_STREAM_END) goto errhandler; - - BZ2_bzReadGetUnused ( &bzerr, bzf, &unusedTmpV, &nUnused ); - if (bzerr != BZ_OK) panic ( "test:bzReadGetUnused" ); - - unusedTmp = (UChar*)unusedTmpV; - for (i = 0; i < nUnused; i++) unused[i] = unusedTmp[i]; - - BZ2_bzReadClose ( &bzerr, bzf ); - if (bzerr != BZ_OK) panic ( "test:bzReadGetUnused" ); - if (nUnused == 0 && myfeof(zStream)) break; - - } - - if (ferror(zStream)) goto errhandler_io; - ret = fclose ( zStream ); - if (ret == EOF) goto errhandler_io; - - if (verbosity >= 2) fprintf ( stderr, "\n " ); - return True; - - errhandler: - BZ2_bzReadClose ( &bzerr_dummy, bzf ); - if (verbosity == 0) - fprintf ( stderr, "%s: %s: ", progName, inName ); - switch (bzerr) { - case BZ_CONFIG_ERROR: - configError(); break; - case BZ_IO_ERROR: - errhandler_io: - ioError(); break; - case BZ_DATA_ERROR: - fprintf ( stderr, - "data integrity (CRC) error in data\n" ); - return False; - case BZ_MEM_ERROR: - outOfMemory(); - case BZ_UNEXPECTED_EOF: - fprintf ( stderr, - "file ends unexpectedly\n" ); - return False; - case BZ_DATA_ERROR_MAGIC: - if (zStream != stdin) fclose(zStream); - if (streamNo == 1) { - fprintf ( stderr, - "bad magic number (file not created by bzip2)\n" ); - return False; - } else { - if (noisy) - fprintf ( stderr, - "trailing garbage after EOF ignored\n" ); - return True; - } - default: - panic ( "test:unexpected error" ); - } - - panic ( "test:end" ); - return True; /*notreached*/ -} - - -/*---------------------------------------------------*/ -/*--- Error [non-] handling grunge ---*/ -/*---------------------------------------------------*/ - -/*---------------------------------------------*/ -static -void setExit ( Int32 v ) -{ - if (v > exitValue) exitValue = v; -} - - -/*---------------------------------------------*/ -static -void cadvise ( void ) -{ - if (noisy) - fprintf ( - stderr, - "\nIt is possible that the compressed file(s) have become corrupted.\n" - "You can use the -tvv option to test integrity of such files.\n\n" - "You can use the `bzip2recover' program to attempt to recover\n" - "data from undamaged sections of corrupted files.\n\n" - ); -} - - -/*---------------------------------------------*/ -static -void showFileNames ( void ) -{ - if (noisy) - fprintf ( - stderr, - "\tInput file = %s, output file = %s\n", - inName, outName - ); -} - - -/*---------------------------------------------*/ -static -void cleanUpAndFail ( Int32 ec ) -{ - IntNative retVal; - struct MY_STAT statBuf; - - if ( srcMode == SM_F2F - && opMode != OM_TEST - && deleteOutputOnInterrupt ) { - - /* Check whether input file still exists. Delete output file - only if input exists to avoid loss of data. Joerg Prante, 5 - January 2002. (JRS 06-Jan-2002: other changes in 1.0.2 mean - this is less likely to happen. But to be ultra-paranoid, we - do the check anyway.) */ - retVal = MY_STAT ( inName, &statBuf ); - if (retVal == 0) { - if (noisy) - fprintf ( stderr, - "%s: Deleting output file %s, if it exists.\n", - progName, outName ); - if (outputHandleJustInCase != NULL) - fclose ( outputHandleJustInCase ); - retVal = remove ( outName ); - if (retVal != 0) - fprintf ( stderr, - "%s: WARNING: deletion of output file " - "(apparently) failed.\n", - progName ); - } else { - fprintf ( stderr, - "%s: WARNING: deletion of output file suppressed\n", - progName ); - fprintf ( stderr, - "%s: since input file no longer exists. Output file\n", - progName ); - fprintf ( stderr, - "%s: `%s' may be incomplete.\n", - progName, outName ); - fprintf ( stderr, - "%s: I suggest doing an integrity test (bzip2 -tv)" - " of it.\n", - progName ); - } - } - - if (noisy && numFileNames > 0 && numFilesProcessed < numFileNames) { - fprintf ( stderr, - "%s: WARNING: some files have not been processed:\n" - "%s: %d specified on command line, %d not processed yet.\n\n", - progName, progName, - numFileNames, numFileNames - numFilesProcessed ); - } - setExit(ec); - exit(exitValue); -} - - -/*---------------------------------------------*/ -static -void panic ( const Char* s ) -{ - fprintf ( stderr, - "\n%s: PANIC -- internal consistency error:\n" - "\t%s\n" - "\tThis is a BUG. Please report it to me at:\n" - "\tjseward@bzip.org\n", - progName, s ); - showFileNames(); - cleanUpAndFail( 3 ); -} - - -/*---------------------------------------------*/ -static -void crcError ( void ) -{ - fprintf ( stderr, - "\n%s: Data integrity error when decompressing.\n", - progName ); - showFileNames(); - cadvise(); - cleanUpAndFail( 2 ); -} - - -/*---------------------------------------------*/ -static -void compressedStreamEOF ( void ) -{ - if (noisy) { - fprintf ( stderr, - "\n%s: Compressed file ends unexpectedly;\n\t" - "perhaps it is corrupted? *Possible* reason follows.\n", - progName ); - perror ( progName ); - showFileNames(); - cadvise(); - } - cleanUpAndFail( 2 ); -} - - -/*---------------------------------------------*/ -static -void ioError ( void ) -{ - fprintf ( stderr, - "\n%s: I/O or other error, bailing out. " - "Possible reason follows.\n", - progName ); - perror ( progName ); - showFileNames(); - cleanUpAndFail( 1 ); -} - - -/*---------------------------------------------*/ -static -void mySignalCatcher ( IntNative n ) -{ - fprintf ( stderr, - "\n%s: Control-C or similar caught, quitting.\n", - progName ); - cleanUpAndFail(1); -} - - -/*---------------------------------------------*/ -static -void mySIGSEGVorSIGBUScatcher ( IntNative n ) -{ - if (opMode == OM_Z) - fprintf ( - stderr, - "\n%s: Caught a SIGSEGV or SIGBUS whilst compressing.\n" - "\n" - " Possible causes are (most likely first):\n" - " (1) This computer has unreliable memory or cache hardware\n" - " (a surprisingly common problem; try a different machine.)\n" - " (2) A bug in the compiler used to create this executable\n" - " (unlikely, if you didn't compile bzip2 yourself.)\n" - " (3) A real bug in bzip2 -- I hope this should never be the case.\n" - " The user's manual, Section 4.3, has more info on (1) and (2).\n" - " \n" - " If you suspect this is a bug in bzip2, or are unsure about (1)\n" - " or (2), feel free to report it to me at: jseward@bzip.org.\n" - " Section 4.3 of the user's manual describes the info a useful\n" - " bug report should have. If the manual is available on your\n" - " system, please try and read it before mailing me. If you don't\n" - " have the manual or can't be bothered to read it, mail me anyway.\n" - "\n", - progName ); - else - fprintf ( - stderr, - "\n%s: Caught a SIGSEGV or SIGBUS whilst decompressing.\n" - "\n" - " Possible causes are (most likely first):\n" - " (1) The compressed data is corrupted, and bzip2's usual checks\n" - " failed to detect this. Try bzip2 -tvv my_file.bz2.\n" - " (2) This computer has unreliable memory or cache hardware\n" - " (a surprisingly common problem; try a different machine.)\n" - " (3) A bug in the compiler used to create this executable\n" - " (unlikely, if you didn't compile bzip2 yourself.)\n" - " (4) A real bug in bzip2 -- I hope this should never be the case.\n" - " The user's manual, Section 4.3, has more info on (2) and (3).\n" - " \n" - " If you suspect this is a bug in bzip2, or are unsure about (2)\n" - " or (3), feel free to report it to me at: jseward@bzip.org.\n" - " Section 4.3 of the user's manual describes the info a useful\n" - " bug report should have. If the manual is available on your\n" - " system, please try and read it before mailing me. If you don't\n" - " have the manual or can't be bothered to read it, mail me anyway.\n" - "\n", - progName ); - - showFileNames(); - if (opMode == OM_Z) - cleanUpAndFail( 3 ); else - { cadvise(); cleanUpAndFail( 2 ); } -} - - -/*---------------------------------------------*/ -static -void outOfMemory ( void ) -{ - fprintf ( stderr, - "\n%s: couldn't allocate enough memory\n", - progName ); - showFileNames(); - cleanUpAndFail(1); -} - - -/*---------------------------------------------*/ -static -void configError ( void ) -{ - fprintf ( stderr, - "bzip2: I'm not configured correctly for this platform!\n" - "\tI require Int32, Int16 and Char to have sizes\n" - "\tof 4, 2 and 1 bytes to run properly, and they don't.\n" - "\tProbably you can fix this by defining them correctly,\n" - "\tand recompiling. Bye!\n" ); - setExit(3); - exit(exitValue); -} - - -/*---------------------------------------------------*/ -/*--- The main driver machinery ---*/ -/*---------------------------------------------------*/ - -/* All rather crufty. The main problem is that input files - are stat()d multiple times before use. This should be - cleaned up. -*/ - -/*---------------------------------------------*/ -static -void pad ( Char *s ) -{ - Int32 i; - if ( (Int32)strlen(s) >= longestFileName ) return; - for (i = 1; i <= longestFileName - (Int32)strlen(s); i++) - fprintf ( stderr, " " ); -} - - -/*---------------------------------------------*/ -static -void copyFileName ( Char* to, Char* from ) -{ - if ( strlen(from) > FILE_NAME_LEN-10 ) { - fprintf ( - stderr, - "bzip2: file name\n`%s'\n" - "is suspiciously (more than %d chars) long.\n" - "Try using a reasonable file name instead. Sorry! :-)\n", - from, FILE_NAME_LEN-10 - ); - setExit(1); - exit(exitValue); - } - - strncpy(to,from,FILE_NAME_LEN-10); - to[FILE_NAME_LEN-10]='\0'; -} - - -/*---------------------------------------------*/ -static -Bool fileExists ( Char* name ) -{ - FILE *tmp = fopen ( name, "rb" ); - Bool exists = (tmp != NULL); - if (tmp != NULL) fclose ( tmp ); - return exists; -} - - -/*---------------------------------------------*/ -/* Open an output file safely with O_EXCL and good permissions. - This avoids a race condition in versions < 1.0.2, in which - the file was first opened and then had its interim permissions - set safely. We instead use open() to create the file with - the interim permissions required. (--- --- rw-). - - For non-Unix platforms, if we are not worrying about - security issues, simple this simply behaves like fopen. -*/ -static -FILE* fopen_output_safely ( Char* name, const char* mode ) -{ -# if BZ_UNIX - FILE* fp; - IntNative fh; - fh = open(name, O_WRONLY|O_CREAT|O_EXCL, S_IWUSR|S_IRUSR); - if (fh == -1) return NULL; - fp = fdopen(fh, mode); - if (fp == NULL) close(fh); - return fp; -# else - return fopen(name, mode); -# endif -} - - -/*---------------------------------------------*/ -/*-- - if in doubt, return True ---*/ -static -Bool notAStandardFile ( Char* name ) -{ - IntNative i; - struct MY_STAT statBuf; - - i = MY_LSTAT ( name, &statBuf ); - if (i != 0) return True; - if (MY_S_ISREG(statBuf.st_mode)) return False; - return True; -} - - -/*---------------------------------------------*/ -/*-- - rac 11/21/98 see if file has hard links to it ---*/ -static -Int32 countHardLinks ( Char* name ) -{ - IntNative i; - struct MY_STAT statBuf; - - i = MY_LSTAT ( name, &statBuf ); - if (i != 0) return 0; - return (statBuf.st_nlink - 1); -} - - -/*---------------------------------------------*/ -/* Copy modification date, access date, permissions and owner from the - source to destination file. We have to copy this meta-info off - into fileMetaInfo before starting to compress / decompress it, - because doing it afterwards means we get the wrong access time. - - To complicate matters, in compress() and decompress() below, the - sequence of tests preceding the call to saveInputFileMetaInfo() - involves calling fileExists(), which in turn establishes its result - by attempting to fopen() the file, and if successful, immediately - fclose()ing it again. So we have to assume that the fopen() call - does not cause the access time field to be updated. - - Reading of the man page for stat() (man 2 stat) on RedHat 7.2 seems - to imply that merely doing open() will not affect the access time. - Therefore we merely need to hope that the C library only does - open() as a result of fopen(), and not any kind of read()-ahead - cleverness. - - It sounds pretty fragile to me. Whether this carries across - robustly to arbitrary Unix-like platforms (or even works robustly - on this one, RedHat 7.2) is unknown to me. Nevertheless ... -*/ -#if BZ_UNIX -static -struct MY_STAT fileMetaInfo; -#endif - -static -void saveInputFileMetaInfo ( Char *srcName ) -{ -# if BZ_UNIX - IntNative retVal; - /* Note use of stat here, not lstat. */ - retVal = MY_STAT( srcName, &fileMetaInfo ); - ERROR_IF_NOT_ZERO ( retVal ); -# endif -} - - -static -void applySavedTimeInfoToOutputFile ( Char *dstName ) -{ -# if BZ_UNIX - IntNative retVal; - struct utimbuf uTimBuf; - - uTimBuf.actime = fileMetaInfo.st_atime; - uTimBuf.modtime = fileMetaInfo.st_mtime; - - retVal = utime ( dstName, &uTimBuf ); - ERROR_IF_NOT_ZERO ( retVal ); -# endif -} - -static -void applySavedFileAttrToOutputFile ( IntNative fd ) -{ -# if BZ_UNIX - IntNative retVal; - - retVal = fchmod ( fd, fileMetaInfo.st_mode ); - ERROR_IF_NOT_ZERO ( retVal ); - - (void) fchown ( fd, fileMetaInfo.st_uid, fileMetaInfo.st_gid ); - /* chown() will in many cases return with EPERM, which can - be safely ignored. - */ -# endif -} - - -/*---------------------------------------------*/ -static -Bool containsDubiousChars ( Char* name ) -{ -# if BZ_UNIX - /* On unix, files can contain any characters and the file expansion - * is performed by the shell. - */ - return False; -# else /* ! BZ_UNIX */ - /* On non-unix (Win* platforms), wildcard characters are not allowed in - * filenames. - */ - for (; *name != '\0'; name++) - if (*name == '?' || *name == '*') return True; - return False; -# endif /* BZ_UNIX */ -} - - -/*---------------------------------------------*/ -#define BZ_N_SUFFIX_PAIRS 4 - -const Char* zSuffix[BZ_N_SUFFIX_PAIRS] - = { ".bz2", ".bz", ".tbz2", ".tbz" }; -const Char* unzSuffix[BZ_N_SUFFIX_PAIRS] - = { "", "", ".tar", ".tar" }; - -static -Bool hasSuffix ( Char* s, const Char* suffix ) -{ - Int32 ns = strlen(s); - Int32 nx = strlen(suffix); - if (ns < nx) return False; - if (strcmp(s + ns - nx, suffix) == 0) return True; - return False; -} - -static -Bool mapSuffix ( Char* name, - const Char* oldSuffix, - const Char* newSuffix ) -{ - if (!hasSuffix(name,oldSuffix)) return False; - name[strlen(name)-strlen(oldSuffix)] = 0; - strcat ( name, newSuffix ); - return True; -} - - -/*---------------------------------------------*/ -static -void compress ( Char *name ) -{ - FILE *inStr; - FILE *outStr; - Int32 n, i; - struct MY_STAT statBuf; - - deleteOutputOnInterrupt = False; - - if (name == NULL && srcMode != SM_I2O) - panic ( "compress: bad modes\n" ); - - switch (srcMode) { - case SM_I2O: - copyFileName ( inName, (Char*)"(stdin)" ); - copyFileName ( outName, (Char*)"(stdout)" ); - break; - case SM_F2F: - copyFileName ( inName, name ); - copyFileName ( outName, name ); - strcat ( outName, ".bz2" ); - break; - case SM_F2O: - copyFileName ( inName, name ); - copyFileName ( outName, (Char*)"(stdout)" ); - break; - } - - if ( srcMode != SM_I2O && containsDubiousChars ( inName ) ) { - if (noisy) - fprintf ( stderr, "%s: There are no files matching `%s'.\n", - progName, inName ); - setExit(1); - return; - } - if ( srcMode != SM_I2O && !fileExists ( inName ) ) { - fprintf ( stderr, "%s: Can't open input file %s: %s.\n", - progName, inName, strerror(errno) ); - setExit(1); - return; - } - for (i = 0; i < BZ_N_SUFFIX_PAIRS; i++) { - if (hasSuffix(inName, zSuffix[i])) { - if (noisy) - fprintf ( stderr, - "%s: Input file %s already has %s suffix.\n", - progName, inName, zSuffix[i] ); - setExit(1); - return; - } - } - if ( srcMode == SM_F2F || srcMode == SM_F2O ) { - MY_STAT(inName, &statBuf); - if ( MY_S_ISDIR(statBuf.st_mode) ) { - fprintf( stderr, - "%s: Input file %s is a directory.\n", - progName,inName); - setExit(1); - return; - } - } - if ( srcMode == SM_F2F && !forceOverwrite && notAStandardFile ( inName )) { - if (noisy) - fprintf ( stderr, "%s: Input file %s is not a normal file.\n", - progName, inName ); - setExit(1); - return; - } - if ( srcMode == SM_F2F && fileExists ( outName ) ) { - if (forceOverwrite) { - remove(outName); - } else { - fprintf ( stderr, "%s: Output file %s already exists.\n", - progName, outName ); - setExit(1); - return; - } - } - if ( srcMode == SM_F2F && !forceOverwrite && - (n=countHardLinks ( inName )) > 0) { - fprintf ( stderr, "%s: Input file %s has %d other link%s.\n", - progName, inName, n, n > 1 ? "s" : "" ); - setExit(1); - return; - } - - if ( srcMode == SM_F2F ) { - /* Save the file's meta-info before we open it. Doing it later - means we mess up the access times. */ - saveInputFileMetaInfo ( inName ); - } - - switch ( srcMode ) { - - case SM_I2O: - inStr = stdin; - outStr = stdout; - if ( isatty ( fileno ( stdout ) ) ) { - fprintf ( stderr, - "%s: I won't write compressed data to a terminal.\n", - progName ); - fprintf ( stderr, "%s: For help, type: `%s --help'.\n", - progName, progName ); - setExit(1); - return; - }; - break; - - case SM_F2O: - inStr = fopen ( inName, "rb" ); - outStr = stdout; - if ( isatty ( fileno ( stdout ) ) ) { - fprintf ( stderr, - "%s: I won't write compressed data to a terminal.\n", - progName ); - fprintf ( stderr, "%s: For help, type: `%s --help'.\n", - progName, progName ); - if ( inStr != NULL ) fclose ( inStr ); - setExit(1); - return; - }; - if ( inStr == NULL ) { - fprintf ( stderr, "%s: Can't open input file %s: %s.\n", - progName, inName, strerror(errno) ); - setExit(1); - return; - }; - break; - - case SM_F2F: - inStr = fopen ( inName, "rb" ); - outStr = fopen_output_safely ( outName, "wb" ); - if ( outStr == NULL) { - fprintf ( stderr, "%s: Can't create output file %s: %s.\n", - progName, outName, strerror(errno) ); - if ( inStr != NULL ) fclose ( inStr ); - setExit(1); - return; - } - if ( inStr == NULL ) { - fprintf ( stderr, "%s: Can't open input file %s: %s.\n", - progName, inName, strerror(errno) ); - if ( outStr != NULL ) fclose ( outStr ); - setExit(1); - return; - }; - break; - - default: - panic ( "compress: bad srcMode" ); - break; - } - - if (verbosity >= 1) { - fprintf ( stderr, " %s: ", inName ); - pad ( inName ); - fflush ( stderr ); - } - - /*--- Now the input and output handles are sane. Do the Biz. ---*/ - outputHandleJustInCase = outStr; - deleteOutputOnInterrupt = True; - compressStream ( inStr, outStr ); - outputHandleJustInCase = NULL; - - /*--- If there was an I/O error, we won't get here. ---*/ - if ( srcMode == SM_F2F ) { - applySavedTimeInfoToOutputFile ( outName ); - deleteOutputOnInterrupt = False; - if ( !keepInputFiles ) { - IntNative retVal = remove ( inName ); - ERROR_IF_NOT_ZERO ( retVal ); - } - } - - deleteOutputOnInterrupt = False; -} - - -/*---------------------------------------------*/ -static -void uncompress ( Char *name ) -{ - FILE *inStr; - FILE *outStr; - Int32 n, i; - Bool magicNumberOK; - Bool cantGuess; - struct MY_STAT statBuf; - - deleteOutputOnInterrupt = False; - - if (name == NULL && srcMode != SM_I2O) - panic ( "uncompress: bad modes\n" ); - - cantGuess = False; - switch (srcMode) { - case SM_I2O: - copyFileName ( inName, (Char*)"(stdin)" ); - copyFileName ( outName, (Char*)"(stdout)" ); - break; - case SM_F2F: - copyFileName ( inName, name ); - copyFileName ( outName, name ); - for (i = 0; i < BZ_N_SUFFIX_PAIRS; i++) - if (mapSuffix(outName,zSuffix[i],unzSuffix[i])) - goto zzz; - cantGuess = True; - strcat ( outName, ".out" ); - break; - case SM_F2O: - copyFileName ( inName, name ); - copyFileName ( outName, (Char*)"(stdout)" ); - break; - } - - zzz: - if ( srcMode != SM_I2O && containsDubiousChars ( inName ) ) { - if (noisy) - fprintf ( stderr, "%s: There are no files matching `%s'.\n", - progName, inName ); - setExit(1); - return; - } - if ( srcMode != SM_I2O && !fileExists ( inName ) ) { - fprintf ( stderr, "%s: Can't open input file %s: %s.\n", - progName, inName, strerror(errno) ); - setExit(1); - return; - } - if ( srcMode == SM_F2F || srcMode == SM_F2O ) { - MY_STAT(inName, &statBuf); - if ( MY_S_ISDIR(statBuf.st_mode) ) { - fprintf( stderr, - "%s: Input file %s is a directory.\n", - progName,inName); - setExit(1); - return; - } - } - if ( srcMode == SM_F2F && !forceOverwrite && notAStandardFile ( inName )) { - if (noisy) - fprintf ( stderr, "%s: Input file %s is not a normal file.\n", - progName, inName ); - setExit(1); - return; - } - if ( /* srcMode == SM_F2F implied && */ cantGuess ) { - if (noisy) - fprintf ( stderr, - "%s: Can't guess original name for %s -- using %s\n", - progName, inName, outName ); - /* just a warning, no return */ - } - if ( srcMode == SM_F2F && fileExists ( outName ) ) { - if (forceOverwrite) { - remove(outName); - } else { - fprintf ( stderr, "%s: Output file %s already exists.\n", - progName, outName ); - setExit(1); - return; - } - } - if ( srcMode == SM_F2F && !forceOverwrite && - (n=countHardLinks ( inName ) ) > 0) { - fprintf ( stderr, "%s: Input file %s has %d other link%s.\n", - progName, inName, n, n > 1 ? "s" : "" ); - setExit(1); - return; - } - - if ( srcMode == SM_F2F ) { - /* Save the file's meta-info before we open it. Doing it later - means we mess up the access times. */ - saveInputFileMetaInfo ( inName ); - } - - switch ( srcMode ) { - - case SM_I2O: - inStr = stdin; - outStr = stdout; - if ( isatty ( fileno ( stdin ) ) ) { - fprintf ( stderr, - "%s: I won't read compressed data from a terminal.\n", - progName ); - fprintf ( stderr, "%s: For help, type: `%s --help'.\n", - progName, progName ); - setExit(1); - return; - }; - break; - - case SM_F2O: - inStr = fopen ( inName, "rb" ); - outStr = stdout; - if ( inStr == NULL ) { - fprintf ( stderr, "%s: Can't open input file %s:%s.\n", - progName, inName, strerror(errno) ); - if ( inStr != NULL ) fclose ( inStr ); - setExit(1); - return; - }; - break; - - case SM_F2F: - inStr = fopen ( inName, "rb" ); - outStr = fopen_output_safely ( outName, "wb" ); - if ( outStr == NULL) { - fprintf ( stderr, "%s: Can't create output file %s: %s.\n", - progName, outName, strerror(errno) ); - if ( inStr != NULL ) fclose ( inStr ); - setExit(1); - return; - } - if ( inStr == NULL ) { - fprintf ( stderr, "%s: Can't open input file %s: %s.\n", - progName, inName, strerror(errno) ); - if ( outStr != NULL ) fclose ( outStr ); - setExit(1); - return; - }; - break; - - default: - panic ( "uncompress: bad srcMode" ); - break; - } - - if (verbosity >= 1) { - fprintf ( stderr, " %s: ", inName ); - pad ( inName ); - fflush ( stderr ); - } - - /*--- Now the input and output handles are sane. Do the Biz. ---*/ - outputHandleJustInCase = outStr; - deleteOutputOnInterrupt = True; - magicNumberOK = uncompressStream ( inStr, outStr ); - outputHandleJustInCase = NULL; - - /*--- If there was an I/O error, we won't get here. ---*/ - if ( magicNumberOK ) { - if ( srcMode == SM_F2F ) { - applySavedTimeInfoToOutputFile ( outName ); - deleteOutputOnInterrupt = False; - if ( !keepInputFiles ) { - IntNative retVal = remove ( inName ); - ERROR_IF_NOT_ZERO ( retVal ); - } - } - } else { - unzFailsExist = True; - deleteOutputOnInterrupt = False; - if ( srcMode == SM_F2F ) { - IntNative retVal = remove ( outName ); - ERROR_IF_NOT_ZERO ( retVal ); - } - } - deleteOutputOnInterrupt = False; - - if ( magicNumberOK ) { - if (verbosity >= 1) - fprintf ( stderr, "done\n" ); - } else { - setExit(2); - if (verbosity >= 1) - fprintf ( stderr, "not a bzip2 file.\n" ); else - fprintf ( stderr, - "%s: %s is not a bzip2 file.\n", - progName, inName ); - } - -} - - -/*---------------------------------------------*/ -static -void testf ( Char *name ) -{ - FILE *inStr; - Bool allOK; - struct MY_STAT statBuf; - - deleteOutputOnInterrupt = False; - - if (name == NULL && srcMode != SM_I2O) - panic ( "testf: bad modes\n" ); - - copyFileName ( outName, (Char*)"(none)" ); - switch (srcMode) { - case SM_I2O: copyFileName ( inName, (Char*)"(stdin)" ); break; - case SM_F2F: copyFileName ( inName, name ); break; - case SM_F2O: copyFileName ( inName, name ); break; - } - - if ( srcMode != SM_I2O && containsDubiousChars ( inName ) ) { - if (noisy) - fprintf ( stderr, "%s: There are no files matching `%s'.\n", - progName, inName ); - setExit(1); - return; - } - if ( srcMode != SM_I2O && !fileExists ( inName ) ) { - fprintf ( stderr, "%s: Can't open input %s: %s.\n", - progName, inName, strerror(errno) ); - setExit(1); - return; - } - if ( srcMode != SM_I2O ) { - MY_STAT(inName, &statBuf); - if ( MY_S_ISDIR(statBuf.st_mode) ) { - fprintf( stderr, - "%s: Input file %s is a directory.\n", - progName,inName); - setExit(1); - return; - } - } - - switch ( srcMode ) { - - case SM_I2O: - if ( isatty ( fileno ( stdin ) ) ) { - fprintf ( stderr, - "%s: I won't read compressed data from a terminal.\n", - progName ); - fprintf ( stderr, "%s: For help, type: `%s --help'.\n", - progName, progName ); - setExit(1); - return; - }; - inStr = stdin; - break; - - case SM_F2O: case SM_F2F: - inStr = fopen ( inName, "rb" ); - if ( inStr == NULL ) { - fprintf ( stderr, "%s: Can't open input file %s:%s.\n", - progName, inName, strerror(errno) ); - setExit(1); - return; - }; - break; - - default: - panic ( "testf: bad srcMode" ); - break; - } - - if (verbosity >= 1) { - fprintf ( stderr, " %s: ", inName ); - pad ( inName ); - fflush ( stderr ); - } - - /*--- Now the input handle is sane. Do the Biz. ---*/ - outputHandleJustInCase = NULL; - allOK = testStream ( inStr ); - - if (allOK && verbosity >= 1) fprintf ( stderr, "ok\n" ); - if (!allOK) testFailsExist = True; -} - - -/*---------------------------------------------*/ -static -void license ( void ) -{ - fprintf ( stderr, - - "bzip2, a block-sorting file compressor. " - "Version %s.\n" - " \n" - " Copyright (C) 1996-2007 by Julian Seward.\n" - " \n" - " This program is free software; you can redistribute it and/or modify\n" - " it under the terms set out in the LICENSE file, which is included\n" - " in the bzip2-1.0.5 source distribution.\n" - " \n" - " This program is distributed in the hope that it will be useful,\n" - " but WITHOUT ANY WARRANTY; without even the implied warranty of\n" - " MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n" - " LICENSE file for more details.\n" - " \n", - BZ2_bzlibVersion() - ); -} - - -/*---------------------------------------------*/ -static -void usage ( Char *fullProgName ) -{ - fprintf ( - stderr, - "bzip2, a block-sorting file compressor. " - "Version %s.\n" - "\n usage: %s [flags and input files in any order]\n" - "\n" - " -h --help print this message\n" - " -d --decompress force decompression\n" - " -z --compress force compression\n" - " -k --keep keep (don't delete) input files\n" - " -f --force overwrite existing output files\n" - " -t --test test compressed file integrity\n" - " -c --stdout output to standard out\n" - " -q --quiet suppress noncritical error messages\n" - " -v --verbose be verbose (a 2nd -v gives more)\n" - " -L --license display software version & license\n" - " -V --version display software version & license\n" - " -s --small use less memory (at most 2500k)\n" - " -1 .. -9 set block size to 100k .. 900k\n" - " --fast alias for -1\n" - " --best alias for -9\n" - "\n" - " If invoked as `bzip2', default action is to compress.\n" - " as `bunzip2', default action is to decompress.\n" - " as `bzcat', default action is to decompress to stdout.\n" - "\n" - " If no file names are given, bzip2 compresses or decompresses\n" - " from standard input to standard output. You can combine\n" - " short flags, so `-v -4' means the same as -v4 or -4v, &c.\n" -# if BZ_UNIX - "\n" -# endif - , - - BZ2_bzlibVersion(), - fullProgName - ); -} - - -/*---------------------------------------------*/ -static -void redundant ( Char* flag ) -{ - fprintf ( - stderr, - "%s: %s is redundant in versions 0.9.5 and above\n", - progName, flag ); -} - - -/*---------------------------------------------*/ -/*-- - All the garbage from here to main() is purely to - implement a linked list of command-line arguments, - into which main() copies argv[1 .. argc-1]. - - The purpose of this exercise is to facilitate - the expansion of wildcard characters * and ? in - filenames for OSs which don't know how to do it - themselves, like MSDOS, Windows 95 and NT. - - The actual Dirty Work is done by the platform- - specific macro APPEND_FILESPEC. ---*/ - -typedef - struct zzzz { - Char *name; - struct zzzz *link; - } - Cell; - - -/*---------------------------------------------*/ -static -void *myMalloc ( Int32 n ) -{ - void* p; - - p = malloc ( (size_t)n ); - if (p == NULL) outOfMemory (); - return p; -} - - -/*---------------------------------------------*/ -static -Cell *mkCell ( void ) -{ - Cell *c; - - c = (Cell*) myMalloc ( sizeof ( Cell ) ); - c->name = NULL; - c->link = NULL; - return c; -} - - -/*---------------------------------------------*/ -static -Cell *snocString ( Cell *root, Char *name ) -{ - if (root == NULL) { - Cell *tmp = mkCell(); - tmp->name = (Char*) myMalloc ( 5 + strlen(name) ); - strcpy ( tmp->name, name ); - return tmp; - } else { - Cell *tmp = root; - while (tmp->link != NULL) tmp = tmp->link; - tmp->link = snocString ( tmp->link, name ); - return root; - } -} - - -/*---------------------------------------------*/ -static -void addFlagsFromEnvVar ( Cell** argList, Char* varName ) -{ - Int32 i, j, k; - Char *envbase, *p; - - envbase = getenv(varName); - if (envbase != NULL) { - p = envbase; - i = 0; - while (True) { - if (p[i] == 0) break; - p += i; - i = 0; - while (isspace((Int32)(p[0]))) p++; - while (p[i] != 0 && !isspace((Int32)(p[i]))) i++; - if (i > 0) { - k = i; if (k > FILE_NAME_LEN-10) k = FILE_NAME_LEN-10; - for (j = 0; j < k; j++) tmpName[j] = p[j]; - tmpName[k] = 0; - APPEND_FLAG(*argList, tmpName); - } - } - } -} - - -/*---------------------------------------------*/ -#define ISFLAG(s) (strcmp(aa->name, (s))==0) - -IntNative main ( IntNative argc, Char *argv[] ) -{ - Int32 i, j; - Char *tmp; - Cell *argList; - Cell *aa; - Bool decode; - - /*-- Be really really really paranoid :-) --*/ - if (sizeof(Int32) != 4 || sizeof(UInt32) != 4 || - sizeof(Int16) != 2 || sizeof(UInt16) != 2 || - sizeof(Char) != 1 || sizeof(UChar) != 1) - configError(); - - /*-- Initialise --*/ - outputHandleJustInCase = NULL; - smallMode = False; - keepInputFiles = False; - forceOverwrite = False; - noisy = True; - verbosity = 0; - blockSize100k = 9; - testFailsExist = False; - unzFailsExist = False; - numFileNames = 0; - numFilesProcessed = 0; - workFactor = 30; - deleteOutputOnInterrupt = False; - exitValue = 0; - i = j = 0; /* avoid bogus warning from egcs-1.1.X */ - - /*-- Set up signal handlers for mem access errors --*/ - signal (SIGSEGV, mySIGSEGVorSIGBUScatcher); -# if BZ_UNIX -# ifndef __DJGPP__ - signal (SIGBUS, mySIGSEGVorSIGBUScatcher); -# endif -# endif - - copyFileName ( inName, (Char*)"(none)" ); - copyFileName ( outName, (Char*)"(none)" ); - - copyFileName ( progNameReally, argv[0] ); - progName = &progNameReally[0]; - for (tmp = &progNameReally[0]; *tmp != '\0'; tmp++) - if (*tmp == PATH_SEP) progName = tmp + 1; - - - /*-- Copy flags from env var BZIP2, and - expand filename wildcards in arg list. - --*/ - argList = NULL; - addFlagsFromEnvVar ( &argList, (Char*)"BZIP2" ); - addFlagsFromEnvVar ( &argList, (Char*)"BZIP" ); - for (i = 1; i <= argc-1; i++) - APPEND_FILESPEC(argList, argv[i]); - - - /*-- Find the length of the longest filename --*/ - longestFileName = 7; - numFileNames = 0; - decode = True; - for (aa = argList; aa != NULL; aa = aa->link) { - if (ISFLAG("--")) { decode = False; continue; } - if (aa->name[0] == '-' && decode) continue; - numFileNames++; - if (longestFileName < (Int32)strlen(aa->name) ) - longestFileName = (Int32)strlen(aa->name); - } - - - /*-- Determine source modes; flag handling may change this too. --*/ - if (numFileNames == 0) - srcMode = SM_I2O; else srcMode = SM_F2F; - - - /*-- Determine what to do (compress/uncompress/test/cat). --*/ - /*-- Note that subsequent flag handling may change this. --*/ - opMode = OM_Z; - - if ( (strstr ( progName, "unzip" ) != 0) || - (strstr ( progName, "UNZIP" ) != 0) ) - opMode = OM_UNZ; - - if ( (strstr ( progName, "z2cat" ) != 0) || - (strstr ( progName, "Z2CAT" ) != 0) || - (strstr ( progName, "zcat" ) != 0) || - (strstr ( progName, "ZCAT" ) != 0) ) { - opMode = OM_UNZ; - srcMode = (numFileNames == 0) ? SM_I2O : SM_F2O; - } - - - /*-- Look at the flags. --*/ - for (aa = argList; aa != NULL; aa = aa->link) { - if (ISFLAG("--")) break; - if (aa->name[0] == '-' && aa->name[1] != '-') { - for (j = 1; aa->name[j] != '\0'; j++) { - switch (aa->name[j]) { - case 'c': srcMode = SM_F2O; break; - case 'd': opMode = OM_UNZ; break; - case 'z': opMode = OM_Z; break; - case 'f': forceOverwrite = True; break; - case 't': opMode = OM_TEST; break; - case 'k': keepInputFiles = True; break; - case 's': smallMode = True; break; - case 'q': noisy = False; break; - case '1': blockSize100k = 1; break; - case '2': blockSize100k = 2; break; - case '3': blockSize100k = 3; break; - case '4': blockSize100k = 4; break; - case '5': blockSize100k = 5; break; - case '6': blockSize100k = 6; break; - case '7': blockSize100k = 7; break; - case '8': blockSize100k = 8; break; - case '9': blockSize100k = 9; break; - case 'V': - case 'L': license(); break; - case 'v': verbosity++; break; - case 'h': usage ( progName ); - exit ( 0 ); - break; - default: fprintf ( stderr, "%s: Bad flag `%s'\n", - progName, aa->name ); - usage ( progName ); - exit ( 1 ); - break; - } - } - } - } - - /*-- And again ... --*/ - for (aa = argList; aa != NULL; aa = aa->link) { - if (ISFLAG("--")) break; - if (ISFLAG("--stdout")) srcMode = SM_F2O; else - if (ISFLAG("--decompress")) opMode = OM_UNZ; else - if (ISFLAG("--compress")) opMode = OM_Z; else - if (ISFLAG("--force")) forceOverwrite = True; else - if (ISFLAG("--test")) opMode = OM_TEST; else - if (ISFLAG("--keep")) keepInputFiles = True; else - if (ISFLAG("--small")) smallMode = True; else - if (ISFLAG("--quiet")) noisy = False; else - if (ISFLAG("--version")) license(); else - if (ISFLAG("--license")) license(); else - if (ISFLAG("--exponential")) workFactor = 1; else - if (ISFLAG("--repetitive-best")) redundant(aa->name); else - if (ISFLAG("--repetitive-fast")) redundant(aa->name); else - if (ISFLAG("--fast")) blockSize100k = 1; else - if (ISFLAG("--best")) blockSize100k = 9; else - if (ISFLAG("--verbose")) verbosity++; else - if (ISFLAG("--help")) { usage ( progName ); exit ( 0 ); } - else - if (strncmp ( aa->name, "--", 2) == 0) { - fprintf ( stderr, "%s: Bad flag `%s'\n", progName, aa->name ); - usage ( progName ); - exit ( 1 ); - } - } - - if (verbosity > 4) verbosity = 4; - if (opMode == OM_Z && smallMode && blockSize100k > 2) - blockSize100k = 2; - - if (opMode == OM_TEST && srcMode == SM_F2O) { - fprintf ( stderr, "%s: -c and -t cannot be used together.\n", - progName ); - exit ( 1 ); - } - - if (srcMode == SM_F2O && numFileNames == 0) - srcMode = SM_I2O; - - if (opMode != OM_Z) blockSize100k = 0; - - if (srcMode == SM_F2F) { - signal (SIGINT, mySignalCatcher); - signal (SIGTERM, mySignalCatcher); -# if BZ_UNIX - signal (SIGHUP, mySignalCatcher); -# endif - } - - if (opMode == OM_Z) { - if (srcMode == SM_I2O) { - compress ( NULL ); - } else { - decode = True; - for (aa = argList; aa != NULL; aa = aa->link) { - if (ISFLAG("--")) { decode = False; continue; } - if (aa->name[0] == '-' && decode) continue; - numFilesProcessed++; - compress ( aa->name ); - } - } - } - else - - if (opMode == OM_UNZ) { - unzFailsExist = False; - if (srcMode == SM_I2O) { - uncompress ( NULL ); - } else { - decode = True; - for (aa = argList; aa != NULL; aa = aa->link) { - if (ISFLAG("--")) { decode = False; continue; } - if (aa->name[0] == '-' && decode) continue; - numFilesProcessed++; - uncompress ( aa->name ); - } - } - if (unzFailsExist) { - setExit(2); - exit(exitValue); - } - } - - else { - testFailsExist = False; - if (srcMode == SM_I2O) { - testf ( NULL ); - } else { - decode = True; - for (aa = argList; aa != NULL; aa = aa->link) { - if (ISFLAG("--")) { decode = False; continue; } - if (aa->name[0] == '-' && decode) continue; - numFilesProcessed++; - testf ( aa->name ); - } - } - if (testFailsExist && noisy) { - fprintf ( stderr, - "\n" - "You can use the `bzip2recover' program to attempt to recover\n" - "data from undamaged sections of corrupted files.\n\n" - ); - setExit(2); - exit(exitValue); - } - } - - /* Free the argument list memory to mollify leak detectors - (eg) Purify, Checker. Serves no other useful purpose. - */ - aa = argList; - while (aa != NULL) { - Cell* aa2 = aa->link; - if (aa->name != NULL) free(aa->name); - free(aa); - aa = aa2; - } - - return exitValue; -} - - -/*-----------------------------------------------------------*/ -/*--- end bzip2.c ---*/ -/*-----------------------------------------------------------*/ diff --git a/contrib/bzip2/bzip2recover.c b/contrib/bzip2/bzip2recover.c deleted file mode 100644 index 5f6d6218095e..000000000000 --- a/contrib/bzip2/bzip2recover.c +++ /dev/null @@ -1,514 +0,0 @@ -/*-----------------------------------------------------------*/ -/*--- Block recoverer program for bzip2 ---*/ -/*--- bzip2recover.c ---*/ -/*-----------------------------------------------------------*/ - -/* ------------------------------------------------------------------ - This file is part of bzip2/libbzip2, a program and library for - lossless, block-sorting data compression. - - bzip2/libbzip2 version 1.0.5 of 10 December 2007 - Copyright (C) 1996-2007 Julian Seward - - Please read the WARNING, DISCLAIMER and PATENTS sections in the - README file. - - This program is released under the terms of the license contained - in the file LICENSE. - ------------------------------------------------------------------ */ - -/* This program is a complete hack and should be rewritten properly. - It isn't very complicated. */ - -#include -#include -#include -#include - - -/* This program records bit locations in the file to be recovered. - That means that if 64-bit ints are not supported, we will not - be able to recover .bz2 files over 512MB (2^32 bits) long. - On GNU supported platforms, we take advantage of the 64-bit - int support to circumvent this problem. Ditto MSVC. - - This change occurred in version 1.0.2; all prior versions have - the 512MB limitation. -*/ -#ifdef __GNUC__ - typedef unsigned long long int MaybeUInt64; -# define MaybeUInt64_FMT "%Lu" -#else -#ifdef _MSC_VER - typedef unsigned __int64 MaybeUInt64; -# define MaybeUInt64_FMT "%I64u" -#else - typedef unsigned int MaybeUInt64; -# define MaybeUInt64_FMT "%u" -#endif -#endif - -typedef unsigned int UInt32; -typedef int Int32; -typedef unsigned char UChar; -typedef char Char; -typedef unsigned char Bool; -#define True ((Bool)1) -#define False ((Bool)0) - - -#define BZ_MAX_FILENAME 2000 - -Char inFileName[BZ_MAX_FILENAME]; -Char outFileName[BZ_MAX_FILENAME]; -Char progName[BZ_MAX_FILENAME]; - -MaybeUInt64 bytesOut = 0; -MaybeUInt64 bytesIn = 0; - - -/*---------------------------------------------------*/ -/*--- Header bytes ---*/ -/*---------------------------------------------------*/ - -#define BZ_HDR_B 0x42 /* 'B' */ -#define BZ_HDR_Z 0x5a /* 'Z' */ -#define BZ_HDR_h 0x68 /* 'h' */ -#define BZ_HDR_0 0x30 /* '0' */ - - -/*---------------------------------------------------*/ -/*--- I/O errors ---*/ -/*---------------------------------------------------*/ - -/*---------------------------------------------*/ -static void readError ( void ) -{ - fprintf ( stderr, - "%s: I/O error reading `%s', possible reason follows.\n", - progName, inFileName ); - perror ( progName ); - fprintf ( stderr, "%s: warning: output file(s) may be incomplete.\n", - progName ); - exit ( 1 ); -} - - -/*---------------------------------------------*/ -static void writeError ( void ) -{ - fprintf ( stderr, - "%s: I/O error reading `%s', possible reason follows.\n", - progName, inFileName ); - perror ( progName ); - fprintf ( stderr, "%s: warning: output file(s) may be incomplete.\n", - progName ); - exit ( 1 ); -} - - -/*---------------------------------------------*/ -static void mallocFail ( Int32 n ) -{ - fprintf ( stderr, - "%s: malloc failed on request for %d bytes.\n", - progName, n ); - fprintf ( stderr, "%s: warning: output file(s) may be incomplete.\n", - progName ); - exit ( 1 ); -} - - -/*---------------------------------------------*/ -static void tooManyBlocks ( Int32 max_handled_blocks ) -{ - fprintf ( stderr, - "%s: `%s' appears to contain more than %d blocks\n", - progName, inFileName, max_handled_blocks ); - fprintf ( stderr, - "%s: and cannot be handled. To fix, increase\n", - progName ); - fprintf ( stderr, - "%s: BZ_MAX_HANDLED_BLOCKS in bzip2recover.c, and recompile.\n", - progName ); - exit ( 1 ); -} - - - -/*---------------------------------------------------*/ -/*--- Bit stream I/O ---*/ -/*---------------------------------------------------*/ - -typedef - struct { - FILE* handle; - Int32 buffer; - Int32 buffLive; - Char mode; - } - BitStream; - - -/*---------------------------------------------*/ -static BitStream* bsOpenReadStream ( FILE* stream ) -{ - BitStream *bs = malloc ( sizeof(BitStream) ); - if (bs == NULL) mallocFail ( sizeof(BitStream) ); - bs->handle = stream; - bs->buffer = 0; - bs->buffLive = 0; - bs->mode = 'r'; - return bs; -} - - -/*---------------------------------------------*/ -static BitStream* bsOpenWriteStream ( FILE* stream ) -{ - BitStream *bs = malloc ( sizeof(BitStream) ); - if (bs == NULL) mallocFail ( sizeof(BitStream) ); - bs->handle = stream; - bs->buffer = 0; - bs->buffLive = 0; - bs->mode = 'w'; - return bs; -} - - -/*---------------------------------------------*/ -static void bsPutBit ( BitStream* bs, Int32 bit ) -{ - if (bs->buffLive == 8) { - Int32 retVal = putc ( (UChar) bs->buffer, bs->handle ); - if (retVal == EOF) writeError(); - bytesOut++; - bs->buffLive = 1; - bs->buffer = bit & 0x1; - } else { - bs->buffer = ( (bs->buffer << 1) | (bit & 0x1) ); - bs->buffLive++; - }; -} - - -/*---------------------------------------------*/ -/*-- - Returns 0 or 1, or 2 to indicate EOF. ---*/ -static Int32 bsGetBit ( BitStream* bs ) -{ - if (bs->buffLive > 0) { - bs->buffLive --; - return ( ((bs->buffer) >> (bs->buffLive)) & 0x1 ); - } else { - Int32 retVal = getc ( bs->handle ); - if ( retVal == EOF ) { - if (errno != 0) readError(); - return 2; - } - bs->buffLive = 7; - bs->buffer = retVal; - return ( ((bs->buffer) >> 7) & 0x1 ); - } -} - - -/*---------------------------------------------*/ -static void bsClose ( BitStream* bs ) -{ - Int32 retVal; - - if ( bs->mode == 'w' ) { - while ( bs->buffLive < 8 ) { - bs->buffLive++; - bs->buffer <<= 1; - }; - retVal = putc ( (UChar) (bs->buffer), bs->handle ); - if (retVal == EOF) writeError(); - bytesOut++; - retVal = fflush ( bs->handle ); - if (retVal == EOF) writeError(); - } - retVal = fclose ( bs->handle ); - if (retVal == EOF) { - if (bs->mode == 'w') writeError(); else readError(); - } - free ( bs ); -} - - -/*---------------------------------------------*/ -static void bsPutUChar ( BitStream* bs, UChar c ) -{ - Int32 i; - for (i = 7; i >= 0; i--) - bsPutBit ( bs, (((UInt32) c) >> i) & 0x1 ); -} - - -/*---------------------------------------------*/ -static void bsPutUInt32 ( BitStream* bs, UInt32 c ) -{ - Int32 i; - - for (i = 31; i >= 0; i--) - bsPutBit ( bs, (c >> i) & 0x1 ); -} - - -/*---------------------------------------------*/ -static Bool endsInBz2 ( Char* name ) -{ - Int32 n = strlen ( name ); - if (n <= 4) return False; - return - (name[n-4] == '.' && - name[n-3] == 'b' && - name[n-2] == 'z' && - name[n-1] == '2'); -} - - -/*---------------------------------------------------*/ -/*--- ---*/ -/*---------------------------------------------------*/ - -/* This logic isn't really right when it comes to Cygwin. */ -#ifdef _WIN32 -# define BZ_SPLIT_SYM '\\' /* path splitter on Windows platform */ -#else -# define BZ_SPLIT_SYM '/' /* path splitter on Unix platform */ -#endif - -#define BLOCK_HEADER_HI 0x00003141UL -#define BLOCK_HEADER_LO 0x59265359UL - -#define BLOCK_ENDMARK_HI 0x00001772UL -#define BLOCK_ENDMARK_LO 0x45385090UL - -/* Increase if necessary. However, a .bz2 file with > 50000 blocks - would have an uncompressed size of at least 40GB, so the chances - are low you'll need to up this. -*/ -#define BZ_MAX_HANDLED_BLOCKS 50000 - -MaybeUInt64 bStart [BZ_MAX_HANDLED_BLOCKS]; -MaybeUInt64 bEnd [BZ_MAX_HANDLED_BLOCKS]; -MaybeUInt64 rbStart[BZ_MAX_HANDLED_BLOCKS]; -MaybeUInt64 rbEnd [BZ_MAX_HANDLED_BLOCKS]; - -Int32 main ( Int32 argc, Char** argv ) -{ - FILE* inFile; - FILE* outFile; - BitStream* bsIn, *bsWr; - Int32 b, wrBlock, currBlock, rbCtr; - MaybeUInt64 bitsRead; - - UInt32 buffHi, buffLo, blockCRC; - Char* p; - - strcpy ( progName, argv[0] ); - inFileName[0] = outFileName[0] = 0; - - fprintf ( stderr, - "bzip2recover 1.0.5: extracts blocks from damaged .bz2 files.\n" ); - - if (argc != 2) { - fprintf ( stderr, "%s: usage is `%s damaged_file_name'.\n", - progName, progName ); - switch (sizeof(MaybeUInt64)) { - case 8: - fprintf(stderr, - "\trestrictions on size of recovered file: None\n"); - break; - case 4: - fprintf(stderr, - "\trestrictions on size of recovered file: 512 MB\n"); - fprintf(stderr, - "\tto circumvent, recompile with MaybeUInt64 as an\n" - "\tunsigned 64-bit int.\n"); - break; - default: - fprintf(stderr, - "\tsizeof(MaybeUInt64) is not 4 or 8 -- " - "configuration error.\n"); - break; - } - exit(1); - } - - if (strlen(argv[1]) >= BZ_MAX_FILENAME-20) { - fprintf ( stderr, - "%s: supplied filename is suspiciously (>= %d chars) long. Bye!\n", - progName, (int)strlen(argv[1]) ); - exit(1); - } - - strcpy ( inFileName, argv[1] ); - - inFile = fopen ( inFileName, "rb" ); - if (inFile == NULL) { - fprintf ( stderr, "%s: can't read `%s'\n", progName, inFileName ); - exit(1); - } - - bsIn = bsOpenReadStream ( inFile ); - fprintf ( stderr, "%s: searching for block boundaries ...\n", progName ); - - bitsRead = 0; - buffHi = buffLo = 0; - currBlock = 0; - bStart[currBlock] = 0; - - rbCtr = 0; - - while (True) { - b = bsGetBit ( bsIn ); - bitsRead++; - if (b == 2) { - if (bitsRead >= bStart[currBlock] && - (bitsRead - bStart[currBlock]) >= 40) { - bEnd[currBlock] = bitsRead-1; - if (currBlock > 0) - fprintf ( stderr, " block %d runs from " MaybeUInt64_FMT - " to " MaybeUInt64_FMT " (incomplete)\n", - currBlock, bStart[currBlock], bEnd[currBlock] ); - } else - currBlock--; - break; - } - buffHi = (buffHi << 1) | (buffLo >> 31); - buffLo = (buffLo << 1) | (b & 1); - if ( ( (buffHi & 0x0000ffff) == BLOCK_HEADER_HI - && buffLo == BLOCK_HEADER_LO) - || - ( (buffHi & 0x0000ffff) == BLOCK_ENDMARK_HI - && buffLo == BLOCK_ENDMARK_LO) - ) { - if (bitsRead > 49) { - bEnd[currBlock] = bitsRead-49; - } else { - bEnd[currBlock] = 0; - } - if (currBlock > 0 && - (bEnd[currBlock] - bStart[currBlock]) >= 130) { - fprintf ( stderr, " block %d runs from " MaybeUInt64_FMT - " to " MaybeUInt64_FMT "\n", - rbCtr+1, bStart[currBlock], bEnd[currBlock] ); - rbStart[rbCtr] = bStart[currBlock]; - rbEnd[rbCtr] = bEnd[currBlock]; - rbCtr++; - } - if (currBlock >= BZ_MAX_HANDLED_BLOCKS) - tooManyBlocks(BZ_MAX_HANDLED_BLOCKS); - currBlock++; - - bStart[currBlock] = bitsRead; - } - } - - bsClose ( bsIn ); - - /*-- identified blocks run from 1 to rbCtr inclusive. --*/ - - if (rbCtr < 1) { - fprintf ( stderr, - "%s: sorry, I couldn't find any block boundaries.\n", - progName ); - exit(1); - }; - - fprintf ( stderr, "%s: splitting into blocks\n", progName ); - - inFile = fopen ( inFileName, "rb" ); - if (inFile == NULL) { - fprintf ( stderr, "%s: can't open `%s'\n", progName, inFileName ); - exit(1); - } - bsIn = bsOpenReadStream ( inFile ); - - /*-- placate gcc's dataflow analyser --*/ - blockCRC = 0; bsWr = 0; - - bitsRead = 0; - outFile = NULL; - wrBlock = 0; - while (True) { - b = bsGetBit(bsIn); - if (b == 2) break; - buffHi = (buffHi << 1) | (buffLo >> 31); - buffLo = (buffLo << 1) | (b & 1); - if (bitsRead == 47+rbStart[wrBlock]) - blockCRC = (buffHi << 16) | (buffLo >> 16); - - if (outFile != NULL && bitsRead >= rbStart[wrBlock] - && bitsRead <= rbEnd[wrBlock]) { - bsPutBit ( bsWr, b ); - } - - bitsRead++; - - if (bitsRead == rbEnd[wrBlock]+1) { - if (outFile != NULL) { - bsPutUChar ( bsWr, 0x17 ); bsPutUChar ( bsWr, 0x72 ); - bsPutUChar ( bsWr, 0x45 ); bsPutUChar ( bsWr, 0x38 ); - bsPutUChar ( bsWr, 0x50 ); bsPutUChar ( bsWr, 0x90 ); - bsPutUInt32 ( bsWr, blockCRC ); - bsClose ( bsWr ); - } - if (wrBlock >= rbCtr) break; - wrBlock++; - } else - if (bitsRead == rbStart[wrBlock]) { - /* Create the output file name, correctly handling leading paths. - (31.10.2001 by Sergey E. Kusikov) */ - Char* split; - Int32 ofs, k; - for (k = 0; k < BZ_MAX_FILENAME; k++) - outFileName[k] = 0; - strcpy (outFileName, inFileName); - split = strrchr (outFileName, BZ_SPLIT_SYM); - if (split == NULL) { - split = outFileName; - } else { - ++split; - } - /* Now split points to the start of the basename. */ - ofs = split - outFileName; - sprintf (split, "rec%5d", wrBlock+1); - for (p = split; *p != 0; p++) if (*p == ' ') *p = '0'; - strcat (outFileName, inFileName + ofs); - - if ( !endsInBz2(outFileName)) strcat ( outFileName, ".bz2" ); - - fprintf ( stderr, " writing block %d to `%s' ...\n", - wrBlock+1, outFileName ); - - outFile = fopen ( outFileName, "wb" ); - if (outFile == NULL) { - fprintf ( stderr, "%s: can't write `%s'\n", - progName, outFileName ); - exit(1); - } - bsWr = bsOpenWriteStream ( outFile ); - bsPutUChar ( bsWr, BZ_HDR_B ); - bsPutUChar ( bsWr, BZ_HDR_Z ); - bsPutUChar ( bsWr, BZ_HDR_h ); - bsPutUChar ( bsWr, BZ_HDR_0 + 9 ); - bsPutUChar ( bsWr, 0x31 ); bsPutUChar ( bsWr, 0x41 ); - bsPutUChar ( bsWr, 0x59 ); bsPutUChar ( bsWr, 0x26 ); - bsPutUChar ( bsWr, 0x53 ); bsPutUChar ( bsWr, 0x59 ); - } - } - - fprintf ( stderr, "%s: finished\n", progName ); - return 0; -} - - - -/*-----------------------------------------------------------*/ -/*--- end bzip2recover.c ---*/ -/*-----------------------------------------------------------*/ diff --git a/contrib/bzip2/bzlib.c b/contrib/bzip2/bzlib.c deleted file mode 100644 index ef86c91e6953..000000000000 --- a/contrib/bzip2/bzlib.c +++ /dev/null @@ -1,1572 +0,0 @@ - -/*-------------------------------------------------------------*/ -/*--- Library top-level functions. ---*/ -/*--- bzlib.c ---*/ -/*-------------------------------------------------------------*/ - -/* ------------------------------------------------------------------ - This file is part of bzip2/libbzip2, a program and library for - lossless, block-sorting data compression. - - bzip2/libbzip2 version 1.0.5 of 10 December 2007 - Copyright (C) 1996-2007 Julian Seward - - Please read the WARNING, DISCLAIMER and PATENTS sections in the - README file. - - This program is released under the terms of the license contained - in the file LICENSE. - ------------------------------------------------------------------ */ - -/* CHANGES - 0.9.0 -- original version. - 0.9.0a/b -- no changes in this file. - 0.9.0c -- made zero-length BZ_FLUSH work correctly in bzCompress(). - fixed bzWrite/bzRead to ignore zero-length requests. - fixed bzread to correctly handle read requests after EOF. - wrong parameter order in call to bzDecompressInit in - bzBuffToBuffDecompress. Fixed. -*/ - -#include "bzlib_private.h" - - -/*---------------------------------------------------*/ -/*--- Compression stuff ---*/ -/*---------------------------------------------------*/ - - -/*---------------------------------------------------*/ -#ifndef BZ_NO_STDIO -void BZ2_bz__AssertH__fail ( int errcode ) -{ - fprintf(stderr, - "\n\nbzip2/libbzip2: internal error number %d.\n" - "This is a bug in bzip2/libbzip2, %s.\n" - "Please report it to me at: jseward@bzip.org. If this happened\n" - "when you were using some program which uses libbzip2 as a\n" - "component, you should also report this bug to the author(s)\n" - "of that program. Please make an effort to report this bug;\n" - "timely and accurate bug reports eventually lead to higher\n" - "quality software. Thanks. Julian Seward, 10 December 2007.\n\n", - errcode, - BZ2_bzlibVersion() - ); - - if (errcode == 1007) { - fprintf(stderr, - "\n*** A special note about internal error number 1007 ***\n" - "\n" - "Experience suggests that a common cause of i.e. 1007\n" - "is unreliable memory or other hardware. The 1007 assertion\n" - "just happens to cross-check the results of huge numbers of\n" - "memory reads/writes, and so acts (unintendedly) as a stress\n" - "test of your memory system.\n" - "\n" - "I suggest the following: try compressing the file again,\n" - "possibly monitoring progress in detail with the -vv flag.\n" - "\n" - "* If the error cannot be reproduced, and/or happens at different\n" - " points in compression, you may have a flaky memory system.\n" - " Try a memory-test program. I have used Memtest86\n" - " (www.memtest86.com). At the time of writing it is free (GPLd).\n" - " Memtest86 tests memory much more thorougly than your BIOSs\n" - " power-on test, and may find failures that the BIOS doesn't.\n" - "\n" - "* If the error can be repeatably reproduced, this is a bug in\n" - " bzip2, and I would very much like to hear about it. Please\n" - " let me know, and, ideally, save a copy of the file causing the\n" - " problem -- without which I will be unable to investigate it.\n" - "\n" - ); - } - - exit(3); -} -#endif - - -/*---------------------------------------------------*/ -static -int bz_config_ok ( void ) -{ - if (sizeof(int) != 4) return 0; - if (sizeof(short) != 2) return 0; - if (sizeof(char) != 1) return 0; - return 1; -} - - -/*---------------------------------------------------*/ -static -void* default_bzalloc ( void* opaque, Int32 items, Int32 size ) -{ - void* v = malloc ( items * size ); - return v; -} - -static -void default_bzfree ( void* opaque, void* addr ) -{ - if (addr != NULL) free ( addr ); -} - - -/*---------------------------------------------------*/ -static -void prepare_new_block ( EState* s ) -{ - Int32 i; - s->nblock = 0; - s->numZ = 0; - s->state_out_pos = 0; - BZ_INITIALISE_CRC ( s->blockCRC ); - for (i = 0; i < 256; i++) s->inUse[i] = False; - s->blockNo++; -} - - -/*---------------------------------------------------*/ -static -void init_RL ( EState* s ) -{ - s->state_in_ch = 256; - s->state_in_len = 0; -} - - -static -Bool isempty_RL ( EState* s ) -{ - if (s->state_in_ch < 256 && s->state_in_len > 0) - return False; else - return True; -} - - -/*---------------------------------------------------*/ -int BZ_API(BZ2_bzCompressInit) - ( bz_stream* strm, - int blockSize100k, - int verbosity, - int workFactor ) -{ - Int32 n; - EState* s; - - if (!bz_config_ok()) return BZ_CONFIG_ERROR; - - if (strm == NULL || - blockSize100k < 1 || blockSize100k > 9 || - workFactor < 0 || workFactor > 250) - return BZ_PARAM_ERROR; - - if (workFactor == 0) workFactor = 30; - if (strm->bzalloc == NULL) strm->bzalloc = default_bzalloc; - if (strm->bzfree == NULL) strm->bzfree = default_bzfree; - - s = BZALLOC( sizeof(EState) ); - if (s == NULL) return BZ_MEM_ERROR; - s->strm = strm; - - s->arr1 = NULL; - s->arr2 = NULL; - s->ftab = NULL; - - n = 100000 * blockSize100k; - s->arr1 = BZALLOC( n * sizeof(UInt32) ); - s->arr2 = BZALLOC( (n+BZ_N_OVERSHOOT) * sizeof(UInt32) ); - s->ftab = BZALLOC( 65537 * sizeof(UInt32) ); - - if (s->arr1 == NULL || s->arr2 == NULL || s->ftab == NULL) { - if (s->arr1 != NULL) BZFREE(s->arr1); - if (s->arr2 != NULL) BZFREE(s->arr2); - if (s->ftab != NULL) BZFREE(s->ftab); - if (s != NULL) BZFREE(s); - return BZ_MEM_ERROR; - } - - s->blockNo = 0; - s->state = BZ_S_INPUT; - s->mode = BZ_M_RUNNING; - s->combinedCRC = 0; - s->blockSize100k = blockSize100k; - s->nblockMAX = 100000 * blockSize100k - 19; - s->verbosity = verbosity; - s->workFactor = workFactor; - - s->block = (UChar*)s->arr2; - s->mtfv = (UInt16*)s->arr1; - s->zbits = NULL; - s->ptr = (UInt32*)s->arr1; - - strm->state = s; - strm->total_in_lo32 = 0; - strm->total_in_hi32 = 0; - strm->total_out_lo32 = 0; - strm->total_out_hi32 = 0; - init_RL ( s ); - prepare_new_block ( s ); - return BZ_OK; -} - - -/*---------------------------------------------------*/ -static -void add_pair_to_block ( EState* s ) -{ - Int32 i; - UChar ch = (UChar)(s->state_in_ch); - for (i = 0; i < s->state_in_len; i++) { - BZ_UPDATE_CRC( s->blockCRC, ch ); - } - s->inUse[s->state_in_ch] = True; - switch (s->state_in_len) { - case 1: - s->block[s->nblock] = (UChar)ch; s->nblock++; - break; - case 2: - s->block[s->nblock] = (UChar)ch; s->nblock++; - s->block[s->nblock] = (UChar)ch; s->nblock++; - break; - case 3: - s->block[s->nblock] = (UChar)ch; s->nblock++; - s->block[s->nblock] = (UChar)ch; s->nblock++; - s->block[s->nblock] = (UChar)ch; s->nblock++; - break; - default: - s->inUse[s->state_in_len-4] = True; - s->block[s->nblock] = (UChar)ch; s->nblock++; - s->block[s->nblock] = (UChar)ch; s->nblock++; - s->block[s->nblock] = (UChar)ch; s->nblock++; - s->block[s->nblock] = (UChar)ch; s->nblock++; - s->block[s->nblock] = ((UChar)(s->state_in_len-4)); - s->nblock++; - break; - } -} - - -/*---------------------------------------------------*/ -static -void flush_RL ( EState* s ) -{ - if (s->state_in_ch < 256) add_pair_to_block ( s ); - init_RL ( s ); -} - - -/*---------------------------------------------------*/ -#define ADD_CHAR_TO_BLOCK(zs,zchh0) \ -{ \ - UInt32 zchh = (UInt32)(zchh0); \ - /*-- fast track the common case --*/ \ - if (zchh != zs->state_in_ch && \ - zs->state_in_len == 1) { \ - UChar ch = (UChar)(zs->state_in_ch); \ - BZ_UPDATE_CRC( zs->blockCRC, ch ); \ - zs->inUse[zs->state_in_ch] = True; \ - zs->block[zs->nblock] = (UChar)ch; \ - zs->nblock++; \ - zs->state_in_ch = zchh; \ - } \ - else \ - /*-- general, uncommon cases --*/ \ - if (zchh != zs->state_in_ch || \ - zs->state_in_len == 255) { \ - if (zs->state_in_ch < 256) \ - add_pair_to_block ( zs ); \ - zs->state_in_ch = zchh; \ - zs->state_in_len = 1; \ - } else { \ - zs->state_in_len++; \ - } \ -} - - -/*---------------------------------------------------*/ -static -Bool copy_input_until_stop ( EState* s ) -{ - Bool progress_in = False; - - if (s->mode == BZ_M_RUNNING) { - - /*-- fast track the common case --*/ - while (True) { - /*-- block full? --*/ - if (s->nblock >= s->nblockMAX) break; - /*-- no input? --*/ - if (s->strm->avail_in == 0) break; - progress_in = True; - ADD_CHAR_TO_BLOCK ( s, (UInt32)(*((UChar*)(s->strm->next_in))) ); - s->strm->next_in++; - s->strm->avail_in--; - s->strm->total_in_lo32++; - if (s->strm->total_in_lo32 == 0) s->strm->total_in_hi32++; - } - - } else { - - /*-- general, uncommon case --*/ - while (True) { - /*-- block full? --*/ - if (s->nblock >= s->nblockMAX) break; - /*-- no input? --*/ - if (s->strm->avail_in == 0) break; - /*-- flush/finish end? --*/ - if (s->avail_in_expect == 0) break; - progress_in = True; - ADD_CHAR_TO_BLOCK ( s, (UInt32)(*((UChar*)(s->strm->next_in))) ); - s->strm->next_in++; - s->strm->avail_in--; - s->strm->total_in_lo32++; - if (s->strm->total_in_lo32 == 0) s->strm->total_in_hi32++; - s->avail_in_expect--; - } - } - return progress_in; -} - - -/*---------------------------------------------------*/ -static -Bool copy_output_until_stop ( EState* s ) -{ - Bool progress_out = False; - - while (True) { - - /*-- no output space? --*/ - if (s->strm->avail_out == 0) break; - - /*-- block done? --*/ - if (s->state_out_pos >= s->numZ) break; - - progress_out = True; - *(s->strm->next_out) = s->zbits[s->state_out_pos]; - s->state_out_pos++; - s->strm->avail_out--; - s->strm->next_out++; - s->strm->total_out_lo32++; - if (s->strm->total_out_lo32 == 0) s->strm->total_out_hi32++; - } - - return progress_out; -} - - -/*---------------------------------------------------*/ -static -Bool handle_compress ( bz_stream* strm ) -{ - Bool progress_in = False; - Bool progress_out = False; - EState* s = strm->state; - - while (True) { - - if (s->state == BZ_S_OUTPUT) { - progress_out |= copy_output_until_stop ( s ); - if (s->state_out_pos < s->numZ) break; - if (s->mode == BZ_M_FINISHING && - s->avail_in_expect == 0 && - isempty_RL(s)) break; - prepare_new_block ( s ); - s->state = BZ_S_INPUT; - if (s->mode == BZ_M_FLUSHING && - s->avail_in_expect == 0 && - isempty_RL(s)) break; - } - - if (s->state == BZ_S_INPUT) { - progress_in |= copy_input_until_stop ( s ); - if (s->mode != BZ_M_RUNNING && s->avail_in_expect == 0) { - flush_RL ( s ); - BZ2_compressBlock ( s, (Bool)(s->mode == BZ_M_FINISHING) ); - s->state = BZ_S_OUTPUT; - } - else - if (s->nblock >= s->nblockMAX) { - BZ2_compressBlock ( s, False ); - s->state = BZ_S_OUTPUT; - } - else - if (s->strm->avail_in == 0) { - break; - } - } - - } - - return progress_in || progress_out; -} - - -/*---------------------------------------------------*/ -int BZ_API(BZ2_bzCompress) ( bz_stream *strm, int action ) -{ - Bool progress; - EState* s; - if (strm == NULL) return BZ_PARAM_ERROR; - s = strm->state; - if (s == NULL) return BZ_PARAM_ERROR; - if (s->strm != strm) return BZ_PARAM_ERROR; - - preswitch: - switch (s->mode) { - - case BZ_M_IDLE: - return BZ_SEQUENCE_ERROR; - - case BZ_M_RUNNING: - if (action == BZ_RUN) { - progress = handle_compress ( strm ); - return progress ? BZ_RUN_OK : BZ_PARAM_ERROR; - } - else - if (action == BZ_FLUSH) { - s->avail_in_expect = strm->avail_in; - s->mode = BZ_M_FLUSHING; - goto preswitch; - } - else - if (action == BZ_FINISH) { - s->avail_in_expect = strm->avail_in; - s->mode = BZ_M_FINISHING; - goto preswitch; - } - else - return BZ_PARAM_ERROR; - - case BZ_M_FLUSHING: - if (action != BZ_FLUSH) return BZ_SEQUENCE_ERROR; - if (s->avail_in_expect != s->strm->avail_in) - return BZ_SEQUENCE_ERROR; - progress = handle_compress ( strm ); - if (s->avail_in_expect > 0 || !isempty_RL(s) || - s->state_out_pos < s->numZ) return BZ_FLUSH_OK; - s->mode = BZ_M_RUNNING; - return BZ_RUN_OK; - - case BZ_M_FINISHING: - if (action != BZ_FINISH) return BZ_SEQUENCE_ERROR; - if (s->avail_in_expect != s->strm->avail_in) - return BZ_SEQUENCE_ERROR; - progress = handle_compress ( strm ); - if (!progress) return BZ_SEQUENCE_ERROR; - if (s->avail_in_expect > 0 || !isempty_RL(s) || - s->state_out_pos < s->numZ) return BZ_FINISH_OK; - s->mode = BZ_M_IDLE; - return BZ_STREAM_END; - } - return BZ_OK; /*--not reached--*/ -} - - -/*---------------------------------------------------*/ -int BZ_API(BZ2_bzCompressEnd) ( bz_stream *strm ) -{ - EState* s; - if (strm == NULL) return BZ_PARAM_ERROR; - s = strm->state; - if (s == NULL) return BZ_PARAM_ERROR; - if (s->strm != strm) return BZ_PARAM_ERROR; - - if (s->arr1 != NULL) BZFREE(s->arr1); - if (s->arr2 != NULL) BZFREE(s->arr2); - if (s->ftab != NULL) BZFREE(s->ftab); - BZFREE(strm->state); - - strm->state = NULL; - - return BZ_OK; -} - - -/*---------------------------------------------------*/ -/*--- Decompression stuff ---*/ -/*---------------------------------------------------*/ - -/*---------------------------------------------------*/ -int BZ_API(BZ2_bzDecompressInit) - ( bz_stream* strm, - int verbosity, - int small ) -{ - DState* s; - - if (!bz_config_ok()) return BZ_CONFIG_ERROR; - - if (strm == NULL) return BZ_PARAM_ERROR; - if (small != 0 && small != 1) return BZ_PARAM_ERROR; - if (verbosity < 0 || verbosity > 4) return BZ_PARAM_ERROR; - - if (strm->bzalloc == NULL) strm->bzalloc = default_bzalloc; - if (strm->bzfree == NULL) strm->bzfree = default_bzfree; - - s = BZALLOC( sizeof(DState) ); - if (s == NULL) return BZ_MEM_ERROR; - s->strm = strm; - strm->state = s; - s->state = BZ_X_MAGIC_1; - s->bsLive = 0; - s->bsBuff = 0; - s->calculatedCombinedCRC = 0; - strm->total_in_lo32 = 0; - strm->total_in_hi32 = 0; - strm->total_out_lo32 = 0; - strm->total_out_hi32 = 0; - s->smallDecompress = (Bool)small; - s->ll4 = NULL; - s->ll16 = NULL; - s->tt = NULL; - s->currBlockNo = 0; - s->verbosity = verbosity; - - return BZ_OK; -} - - -/*---------------------------------------------------*/ -/* Return True iff data corruption is discovered. - Returns False if there is no problem. -*/ -static -Bool unRLE_obuf_to_output_FAST ( DState* s ) -{ - UChar k1; - - if (s->blockRandomised) { - - while (True) { - /* try to finish existing run */ - while (True) { - if (s->strm->avail_out == 0) return False; - if (s->state_out_len == 0) break; - *( (UChar*)(s->strm->next_out) ) = s->state_out_ch; - BZ_UPDATE_CRC ( s->calculatedBlockCRC, s->state_out_ch ); - s->state_out_len--; - s->strm->next_out++; - s->strm->avail_out--; - s->strm->total_out_lo32++; - if (s->strm->total_out_lo32 == 0) s->strm->total_out_hi32++; - } - - /* can a new run be started? */ - if (s->nblock_used == s->save_nblock+1) return False; - - /* Only caused by corrupt data stream? */ - if (s->nblock_used > s->save_nblock+1) - return True; - - s->state_out_len = 1; - s->state_out_ch = s->k0; - BZ_GET_FAST(k1); BZ_RAND_UPD_MASK; - k1 ^= BZ_RAND_MASK; s->nblock_used++; - if (s->nblock_used == s->save_nblock+1) continue; - if (k1 != s->k0) { s->k0 = k1; continue; }; - - s->state_out_len = 2; - BZ_GET_FAST(k1); BZ_RAND_UPD_MASK; - k1 ^= BZ_RAND_MASK; s->nblock_used++; - if (s->nblock_used == s->save_nblock+1) continue; - if (k1 != s->k0) { s->k0 = k1; continue; }; - - s->state_out_len = 3; - BZ_GET_FAST(k1); BZ_RAND_UPD_MASK; - k1 ^= BZ_RAND_MASK; s->nblock_used++; - if (s->nblock_used == s->save_nblock+1) continue; - if (k1 != s->k0) { s->k0 = k1; continue; }; - - BZ_GET_FAST(k1); BZ_RAND_UPD_MASK; - k1 ^= BZ_RAND_MASK; s->nblock_used++; - s->state_out_len = ((Int32)k1) + 4; - BZ_GET_FAST(s->k0); BZ_RAND_UPD_MASK; - s->k0 ^= BZ_RAND_MASK; s->nblock_used++; - } - - } else { - - /* restore */ - UInt32 c_calculatedBlockCRC = s->calculatedBlockCRC; - UChar c_state_out_ch = s->state_out_ch; - Int32 c_state_out_len = s->state_out_len; - Int32 c_nblock_used = s->nblock_used; - Int32 c_k0 = s->k0; - UInt32* c_tt = s->tt; - UInt32 c_tPos = s->tPos; - char* cs_next_out = s->strm->next_out; - unsigned int cs_avail_out = s->strm->avail_out; - Int32 ro_blockSize100k = s->blockSize100k; - /* end restore */ - - UInt32 avail_out_INIT = cs_avail_out; - Int32 s_save_nblockPP = s->save_nblock+1; - unsigned int total_out_lo32_old; - - while (True) { - - /* try to finish existing run */ - if (c_state_out_len > 0) { - while (True) { - if (cs_avail_out == 0) goto return_notr; - if (c_state_out_len == 1) break; - *( (UChar*)(cs_next_out) ) = c_state_out_ch; - BZ_UPDATE_CRC ( c_calculatedBlockCRC, c_state_out_ch ); - c_state_out_len--; - cs_next_out++; - cs_avail_out--; - } - s_state_out_len_eq_one: - { - if (cs_avail_out == 0) { - c_state_out_len = 1; goto return_notr; - }; - *( (UChar*)(cs_next_out) ) = c_state_out_ch; - BZ_UPDATE_CRC ( c_calculatedBlockCRC, c_state_out_ch ); - cs_next_out++; - cs_avail_out--; - } - } - /* Only caused by corrupt data stream? */ - if (c_nblock_used > s_save_nblockPP) - return True; - - /* can a new run be started? */ - if (c_nblock_used == s_save_nblockPP) { - c_state_out_len = 0; goto return_notr; - }; - c_state_out_ch = c_k0; - BZ_GET_FAST_C(k1); c_nblock_used++; - if (k1 != c_k0) { - c_k0 = k1; goto s_state_out_len_eq_one; - }; - if (c_nblock_used == s_save_nblockPP) - goto s_state_out_len_eq_one; - - c_state_out_len = 2; - BZ_GET_FAST_C(k1); c_nblock_used++; - if (c_nblock_used == s_save_nblockPP) continue; - if (k1 != c_k0) { c_k0 = k1; continue; }; - - c_state_out_len = 3; - BZ_GET_FAST_C(k1); c_nblock_used++; - if (c_nblock_used == s_save_nblockPP) continue; - if (k1 != c_k0) { c_k0 = k1; continue; }; - - BZ_GET_FAST_C(k1); c_nblock_used++; - c_state_out_len = ((Int32)k1) + 4; - BZ_GET_FAST_C(c_k0); c_nblock_used++; - } - - return_notr: - total_out_lo32_old = s->strm->total_out_lo32; - s->strm->total_out_lo32 += (avail_out_INIT - cs_avail_out); - if (s->strm->total_out_lo32 < total_out_lo32_old) - s->strm->total_out_hi32++; - - /* save */ - s->calculatedBlockCRC = c_calculatedBlockCRC; - s->state_out_ch = c_state_out_ch; - s->state_out_len = c_state_out_len; - s->nblock_used = c_nblock_used; - s->k0 = c_k0; - s->tt = c_tt; - s->tPos = c_tPos; - s->strm->next_out = cs_next_out; - s->strm->avail_out = cs_avail_out; - /* end save */ - } - return False; -} - - - -/*---------------------------------------------------*/ -__inline__ Int32 BZ2_indexIntoF ( Int32 indx, Int32 *cftab ) -{ - Int32 nb, na, mid; - nb = 0; - na = 256; - do { - mid = (nb + na) >> 1; - if (indx >= cftab[mid]) nb = mid; else na = mid; - } - while (na - nb != 1); - return nb; -} - - -/*---------------------------------------------------*/ -/* Return True iff data corruption is discovered. - Returns False if there is no problem. -*/ -static -Bool unRLE_obuf_to_output_SMALL ( DState* s ) -{ - UChar k1; - - if (s->blockRandomised) { - - while (True) { - /* try to finish existing run */ - while (True) { - if (s->strm->avail_out == 0) return False; - if (s->state_out_len == 0) break; - *( (UChar*)(s->strm->next_out) ) = s->state_out_ch; - BZ_UPDATE_CRC ( s->calculatedBlockCRC, s->state_out_ch ); - s->state_out_len--; - s->strm->next_out++; - s->strm->avail_out--; - s->strm->total_out_lo32++; - if (s->strm->total_out_lo32 == 0) s->strm->total_out_hi32++; - } - - /* can a new run be started? */ - if (s->nblock_used == s->save_nblock+1) return False; - - /* Only caused by corrupt data stream? */ - if (s->nblock_used > s->save_nblock+1) - return True; - - s->state_out_len = 1; - s->state_out_ch = s->k0; - BZ_GET_SMALL(k1); BZ_RAND_UPD_MASK; - k1 ^= BZ_RAND_MASK; s->nblock_used++; - if (s->nblock_used == s->save_nblock+1) continue; - if (k1 != s->k0) { s->k0 = k1; continue; }; - - s->state_out_len = 2; - BZ_GET_SMALL(k1); BZ_RAND_UPD_MASK; - k1 ^= BZ_RAND_MASK; s->nblock_used++; - if (s->nblock_used == s->save_nblock+1) continue; - if (k1 != s->k0) { s->k0 = k1; continue; }; - - s->state_out_len = 3; - BZ_GET_SMALL(k1); BZ_RAND_UPD_MASK; - k1 ^= BZ_RAND_MASK; s->nblock_used++; - if (s->nblock_used == s->save_nblock+1) continue; - if (k1 != s->k0) { s->k0 = k1; continue; }; - - BZ_GET_SMALL(k1); BZ_RAND_UPD_MASK; - k1 ^= BZ_RAND_MASK; s->nblock_used++; - s->state_out_len = ((Int32)k1) + 4; - BZ_GET_SMALL(s->k0); BZ_RAND_UPD_MASK; - s->k0 ^= BZ_RAND_MASK; s->nblock_used++; - } - - } else { - - while (True) { - /* try to finish existing run */ - while (True) { - if (s->strm->avail_out == 0) return False; - if (s->state_out_len == 0) break; - *( (UChar*)(s->strm->next_out) ) = s->state_out_ch; - BZ_UPDATE_CRC ( s->calculatedBlockCRC, s->state_out_ch ); - s->state_out_len--; - s->strm->next_out++; - s->strm->avail_out--; - s->strm->total_out_lo32++; - if (s->strm->total_out_lo32 == 0) s->strm->total_out_hi32++; - } - - /* can a new run be started? */ - if (s->nblock_used == s->save_nblock+1) return False; - - /* Only caused by corrupt data stream? */ - if (s->nblock_used > s->save_nblock+1) - return True; - - s->state_out_len = 1; - s->state_out_ch = s->k0; - BZ_GET_SMALL(k1); s->nblock_used++; - if (s->nblock_used == s->save_nblock+1) continue; - if (k1 != s->k0) { s->k0 = k1; continue; }; - - s->state_out_len = 2; - BZ_GET_SMALL(k1); s->nblock_used++; - if (s->nblock_used == s->save_nblock+1) continue; - if (k1 != s->k0) { s->k0 = k1; continue; }; - - s->state_out_len = 3; - BZ_GET_SMALL(k1); s->nblock_used++; - if (s->nblock_used == s->save_nblock+1) continue; - if (k1 != s->k0) { s->k0 = k1; continue; }; - - BZ_GET_SMALL(k1); s->nblock_used++; - s->state_out_len = ((Int32)k1) + 4; - BZ_GET_SMALL(s->k0); s->nblock_used++; - } - - } -} - - -/*---------------------------------------------------*/ -int BZ_API(BZ2_bzDecompress) ( bz_stream *strm ) -{ - Bool corrupt; - DState* s; - if (strm == NULL) return BZ_PARAM_ERROR; - s = strm->state; - if (s == NULL) return BZ_PARAM_ERROR; - if (s->strm != strm) return BZ_PARAM_ERROR; - - while (True) { - if (s->state == BZ_X_IDLE) return BZ_SEQUENCE_ERROR; - if (s->state == BZ_X_OUTPUT) { - if (s->smallDecompress) - corrupt = unRLE_obuf_to_output_SMALL ( s ); else - corrupt = unRLE_obuf_to_output_FAST ( s ); - if (corrupt) return BZ_DATA_ERROR; - if (s->nblock_used == s->save_nblock+1 && s->state_out_len == 0) { - BZ_FINALISE_CRC ( s->calculatedBlockCRC ); - if (s->verbosity >= 3) - VPrintf2 ( " {0x%08x, 0x%08x}", s->storedBlockCRC, - s->calculatedBlockCRC ); - if (s->verbosity >= 2) VPrintf0 ( "]" ); - if (s->calculatedBlockCRC != s->storedBlockCRC) - return BZ_DATA_ERROR; - s->calculatedCombinedCRC - = (s->calculatedCombinedCRC << 1) | - (s->calculatedCombinedCRC >> 31); - s->calculatedCombinedCRC ^= s->calculatedBlockCRC; - s->state = BZ_X_BLKHDR_1; - } else { - return BZ_OK; - } - } - if (s->state >= BZ_X_MAGIC_1) { - Int32 r = BZ2_decompress ( s ); - if (r == BZ_STREAM_END) { - if (s->verbosity >= 3) - VPrintf2 ( "\n combined CRCs: stored = 0x%08x, computed = 0x%08x", - s->storedCombinedCRC, s->calculatedCombinedCRC ); - if (s->calculatedCombinedCRC != s->storedCombinedCRC) - return BZ_DATA_ERROR; - return r; - } - if (s->state != BZ_X_OUTPUT) return r; - } - } - - AssertH ( 0, 6001 ); - - return 0; /*NOTREACHED*/ -} - - -/*---------------------------------------------------*/ -int BZ_API(BZ2_bzDecompressEnd) ( bz_stream *strm ) -{ - DState* s; - if (strm == NULL) return BZ_PARAM_ERROR; - s = strm->state; - if (s == NULL) return BZ_PARAM_ERROR; - if (s->strm != strm) return BZ_PARAM_ERROR; - - if (s->tt != NULL) BZFREE(s->tt); - if (s->ll16 != NULL) BZFREE(s->ll16); - if (s->ll4 != NULL) BZFREE(s->ll4); - - BZFREE(strm->state); - strm->state = NULL; - - return BZ_OK; -} - - -#ifndef BZ_NO_STDIO -/*---------------------------------------------------*/ -/*--- File I/O stuff ---*/ -/*---------------------------------------------------*/ - -#define BZ_SETERR(eee) \ -{ \ - if (bzerror != NULL) *bzerror = eee; \ - if (bzf != NULL) bzf->lastErr = eee; \ -} - -typedef - struct { - FILE* handle; - Char buf[BZ_MAX_UNUSED]; - Int32 bufN; - Bool writing; - bz_stream strm; - Int32 lastErr; - Bool initialisedOk; - } - bzFile; - - -/*---------------------------------------------*/ -static Bool myfeof ( FILE* f ) -{ - Int32 c = fgetc ( f ); - if (c == EOF) return True; - ungetc ( c, f ); - return False; -} - - -/*---------------------------------------------------*/ -BZFILE* BZ_API(BZ2_bzWriteOpen) - ( int* bzerror, - FILE* f, - int blockSize100k, - int verbosity, - int workFactor ) -{ - Int32 ret; - bzFile* bzf = NULL; - - BZ_SETERR(BZ_OK); - - if (f == NULL || - (blockSize100k < 1 || blockSize100k > 9) || - (workFactor < 0 || workFactor > 250) || - (verbosity < 0 || verbosity > 4)) - { BZ_SETERR(BZ_PARAM_ERROR); return NULL; }; - - if (ferror(f)) - { BZ_SETERR(BZ_IO_ERROR); return NULL; }; - - bzf = malloc ( sizeof(bzFile) ); - if (bzf == NULL) - { BZ_SETERR(BZ_MEM_ERROR); return NULL; }; - - BZ_SETERR(BZ_OK); - bzf->initialisedOk = False; - bzf->bufN = 0; - bzf->handle = f; - bzf->writing = True; - bzf->strm.bzalloc = NULL; - bzf->strm.bzfree = NULL; - bzf->strm.opaque = NULL; - - if (workFactor == 0) workFactor = 30; - ret = BZ2_bzCompressInit ( &(bzf->strm), blockSize100k, - verbosity, workFactor ); - if (ret != BZ_OK) - { BZ_SETERR(ret); free(bzf); return NULL; }; - - bzf->strm.avail_in = 0; - bzf->initialisedOk = True; - return bzf; -} - - - -/*---------------------------------------------------*/ -void BZ_API(BZ2_bzWrite) - ( int* bzerror, - BZFILE* b, - void* buf, - int len ) -{ - Int32 n, n2, ret; - bzFile* bzf = (bzFile*)b; - - BZ_SETERR(BZ_OK); - if (bzf == NULL || buf == NULL || len < 0) - { BZ_SETERR(BZ_PARAM_ERROR); return; }; - if (!(bzf->writing)) - { BZ_SETERR(BZ_SEQUENCE_ERROR); return; }; - if (ferror(bzf->handle)) - { BZ_SETERR(BZ_IO_ERROR); return; }; - - if (len == 0) - { BZ_SETERR(BZ_OK); return; }; - - bzf->strm.avail_in = len; - bzf->strm.next_in = buf; - - while (True) { - bzf->strm.avail_out = BZ_MAX_UNUSED; - bzf->strm.next_out = bzf->buf; - ret = BZ2_bzCompress ( &(bzf->strm), BZ_RUN ); - if (ret != BZ_RUN_OK) - { BZ_SETERR(ret); return; }; - - if (bzf->strm.avail_out < BZ_MAX_UNUSED) { - n = BZ_MAX_UNUSED - bzf->strm.avail_out; - n2 = fwrite ( (void*)(bzf->buf), sizeof(UChar), - n, bzf->handle ); - if (n != n2 || ferror(bzf->handle)) - { BZ_SETERR(BZ_IO_ERROR); return; }; - } - - if (bzf->strm.avail_in == 0) - { BZ_SETERR(BZ_OK); return; }; - } -} - - -/*---------------------------------------------------*/ -void BZ_API(BZ2_bzWriteClose) - ( int* bzerror, - BZFILE* b, - int abandon, - unsigned int* nbytes_in, - unsigned int* nbytes_out ) -{ - BZ2_bzWriteClose64 ( bzerror, b, abandon, - nbytes_in, NULL, nbytes_out, NULL ); -} - - -void BZ_API(BZ2_bzWriteClose64) - ( int* bzerror, - BZFILE* b, - int abandon, - unsigned int* nbytes_in_lo32, - unsigned int* nbytes_in_hi32, - unsigned int* nbytes_out_lo32, - unsigned int* nbytes_out_hi32 ) -{ - Int32 n, n2, ret; - bzFile* bzf = (bzFile*)b; - - if (bzf == NULL) - { BZ_SETERR(BZ_OK); return; }; - if (!(bzf->writing)) - { BZ_SETERR(BZ_SEQUENCE_ERROR); return; }; - if (ferror(bzf->handle)) - { BZ_SETERR(BZ_IO_ERROR); return; }; - - if (nbytes_in_lo32 != NULL) *nbytes_in_lo32 = 0; - if (nbytes_in_hi32 != NULL) *nbytes_in_hi32 = 0; - if (nbytes_out_lo32 != NULL) *nbytes_out_lo32 = 0; - if (nbytes_out_hi32 != NULL) *nbytes_out_hi32 = 0; - - if ((!abandon) && bzf->lastErr == BZ_OK) { - while (True) { - bzf->strm.avail_out = BZ_MAX_UNUSED; - bzf->strm.next_out = bzf->buf; - ret = BZ2_bzCompress ( &(bzf->strm), BZ_FINISH ); - if (ret != BZ_FINISH_OK && ret != BZ_STREAM_END) - { BZ_SETERR(ret); return; }; - - if (bzf->strm.avail_out < BZ_MAX_UNUSED) { - n = BZ_MAX_UNUSED - bzf->strm.avail_out; - n2 = fwrite ( (void*)(bzf->buf), sizeof(UChar), - n, bzf->handle ); - if (n != n2 || ferror(bzf->handle)) - { BZ_SETERR(BZ_IO_ERROR); return; }; - } - - if (ret == BZ_STREAM_END) break; - } - } - - if ( !abandon && !ferror ( bzf->handle ) ) { - fflush ( bzf->handle ); - if (ferror(bzf->handle)) - { BZ_SETERR(BZ_IO_ERROR); return; }; - } - - if (nbytes_in_lo32 != NULL) - *nbytes_in_lo32 = bzf->strm.total_in_lo32; - if (nbytes_in_hi32 != NULL) - *nbytes_in_hi32 = bzf->strm.total_in_hi32; - if (nbytes_out_lo32 != NULL) - *nbytes_out_lo32 = bzf->strm.total_out_lo32; - if (nbytes_out_hi32 != NULL) - *nbytes_out_hi32 = bzf->strm.total_out_hi32; - - BZ_SETERR(BZ_OK); - BZ2_bzCompressEnd ( &(bzf->strm) ); - free ( bzf ); -} - - -/*---------------------------------------------------*/ -BZFILE* BZ_API(BZ2_bzReadOpen) - ( int* bzerror, - FILE* f, - int verbosity, - int small, - void* unused, - int nUnused ) -{ - bzFile* bzf = NULL; - int ret; - - BZ_SETERR(BZ_OK); - - if (f == NULL || - (small != 0 && small != 1) || - (verbosity < 0 || verbosity > 4) || - (unused == NULL && nUnused != 0) || - (unused != NULL && (nUnused < 0 || nUnused > BZ_MAX_UNUSED))) - { BZ_SETERR(BZ_PARAM_ERROR); return NULL; }; - - if (ferror(f)) - { BZ_SETERR(BZ_IO_ERROR); return NULL; }; - - bzf = malloc ( sizeof(bzFile) ); - if (bzf == NULL) - { BZ_SETERR(BZ_MEM_ERROR); return NULL; }; - - BZ_SETERR(BZ_OK); - - bzf->initialisedOk = False; - bzf->handle = f; - bzf->bufN = 0; - bzf->writing = False; - bzf->strm.bzalloc = NULL; - bzf->strm.bzfree = NULL; - bzf->strm.opaque = NULL; - - while (nUnused > 0) { - bzf->buf[bzf->bufN] = *((UChar*)(unused)); bzf->bufN++; - unused = ((void*)( 1 + ((UChar*)(unused)) )); - nUnused--; - } - - ret = BZ2_bzDecompressInit ( &(bzf->strm), verbosity, small ); - if (ret != BZ_OK) - { BZ_SETERR(ret); free(bzf); return NULL; }; - - bzf->strm.avail_in = bzf->bufN; - bzf->strm.next_in = bzf->buf; - - bzf->initialisedOk = True; - return bzf; -} - - -/*---------------------------------------------------*/ -void BZ_API(BZ2_bzReadClose) ( int *bzerror, BZFILE *b ) -{ - bzFile* bzf = (bzFile*)b; - - BZ_SETERR(BZ_OK); - if (bzf == NULL) - { BZ_SETERR(BZ_OK); return; }; - - if (bzf->writing) - { BZ_SETERR(BZ_SEQUENCE_ERROR); return; }; - - if (bzf->initialisedOk) - (void)BZ2_bzDecompressEnd ( &(bzf->strm) ); - free ( bzf ); -} - - -/*---------------------------------------------------*/ -int BZ_API(BZ2_bzRead) - ( int* bzerror, - BZFILE* b, - void* buf, - int len ) -{ - Int32 n, ret; - bzFile* bzf = (bzFile*)b; - - BZ_SETERR(BZ_OK); - - if (bzf == NULL || buf == NULL || len < 0) - { BZ_SETERR(BZ_PARAM_ERROR); return 0; }; - - if (bzf->writing) - { BZ_SETERR(BZ_SEQUENCE_ERROR); return 0; }; - - if (len == 0) - { BZ_SETERR(BZ_OK); return 0; }; - - bzf->strm.avail_out = len; - bzf->strm.next_out = buf; - - while (True) { - - if (ferror(bzf->handle)) - { BZ_SETERR(BZ_IO_ERROR); return 0; }; - - if (bzf->strm.avail_in == 0 && !myfeof(bzf->handle)) { - n = fread ( bzf->buf, sizeof(UChar), - BZ_MAX_UNUSED, bzf->handle ); - if (ferror(bzf->handle)) - { BZ_SETERR(BZ_IO_ERROR); return 0; }; - bzf->bufN = n; - bzf->strm.avail_in = bzf->bufN; - bzf->strm.next_in = bzf->buf; - } - - ret = BZ2_bzDecompress ( &(bzf->strm) ); - - if (ret != BZ_OK && ret != BZ_STREAM_END) - { BZ_SETERR(ret); return 0; }; - - if (ret == BZ_OK && myfeof(bzf->handle) && - bzf->strm.avail_in == 0 && bzf->strm.avail_out > 0) - { BZ_SETERR(BZ_UNEXPECTED_EOF); return 0; }; - - if (ret == BZ_STREAM_END) - { BZ_SETERR(BZ_STREAM_END); - return len - bzf->strm.avail_out; }; - if (bzf->strm.avail_out == 0) - { BZ_SETERR(BZ_OK); return len; }; - - } - - return 0; /*not reached*/ -} - - -/*---------------------------------------------------*/ -void BZ_API(BZ2_bzReadGetUnused) - ( int* bzerror, - BZFILE* b, - void** unused, - int* nUnused ) -{ - bzFile* bzf = (bzFile*)b; - if (bzf == NULL) - { BZ_SETERR(BZ_PARAM_ERROR); return; }; - if (bzf->lastErr != BZ_STREAM_END) - { BZ_SETERR(BZ_SEQUENCE_ERROR); return; }; - if (unused == NULL || nUnused == NULL) - { BZ_SETERR(BZ_PARAM_ERROR); return; }; - - BZ_SETERR(BZ_OK); - *nUnused = bzf->strm.avail_in; - *unused = bzf->strm.next_in; -} -#endif - - -/*---------------------------------------------------*/ -/*--- Misc convenience stuff ---*/ -/*---------------------------------------------------*/ - -/*---------------------------------------------------*/ -int BZ_API(BZ2_bzBuffToBuffCompress) - ( char* dest, - unsigned int* destLen, - char* source, - unsigned int sourceLen, - int blockSize100k, - int verbosity, - int workFactor ) -{ - bz_stream strm; - int ret; - - if (dest == NULL || destLen == NULL || - source == NULL || - blockSize100k < 1 || blockSize100k > 9 || - verbosity < 0 || verbosity > 4 || - workFactor < 0 || workFactor > 250) - return BZ_PARAM_ERROR; - - if (workFactor == 0) workFactor = 30; - strm.bzalloc = NULL; - strm.bzfree = NULL; - strm.opaque = NULL; - ret = BZ2_bzCompressInit ( &strm, blockSize100k, - verbosity, workFactor ); - if (ret != BZ_OK) return ret; - - strm.next_in = source; - strm.next_out = dest; - strm.avail_in = sourceLen; - strm.avail_out = *destLen; - - ret = BZ2_bzCompress ( &strm, BZ_FINISH ); - if (ret == BZ_FINISH_OK) goto output_overflow; - if (ret != BZ_STREAM_END) goto errhandler; - - /* normal termination */ - *destLen -= strm.avail_out; - BZ2_bzCompressEnd ( &strm ); - return BZ_OK; - - output_overflow: - BZ2_bzCompressEnd ( &strm ); - return BZ_OUTBUFF_FULL; - - errhandler: - BZ2_bzCompressEnd ( &strm ); - return ret; -} - - -/*---------------------------------------------------*/ -int BZ_API(BZ2_bzBuffToBuffDecompress) - ( char* dest, - unsigned int* destLen, - char* source, - unsigned int sourceLen, - int small, - int verbosity ) -{ - bz_stream strm; - int ret; - - if (dest == NULL || destLen == NULL || - source == NULL || - (small != 0 && small != 1) || - verbosity < 0 || verbosity > 4) - return BZ_PARAM_ERROR; - - strm.bzalloc = NULL; - strm.bzfree = NULL; - strm.opaque = NULL; - ret = BZ2_bzDecompressInit ( &strm, verbosity, small ); - if (ret != BZ_OK) return ret; - - strm.next_in = source; - strm.next_out = dest; - strm.avail_in = sourceLen; - strm.avail_out = *destLen; - - ret = BZ2_bzDecompress ( &strm ); - if (ret == BZ_OK) goto output_overflow_or_eof; - if (ret != BZ_STREAM_END) goto errhandler; - - /* normal termination */ - *destLen -= strm.avail_out; - BZ2_bzDecompressEnd ( &strm ); - return BZ_OK; - - output_overflow_or_eof: - if (strm.avail_out > 0) { - BZ2_bzDecompressEnd ( &strm ); - return BZ_UNEXPECTED_EOF; - } else { - BZ2_bzDecompressEnd ( &strm ); - return BZ_OUTBUFF_FULL; - }; - - errhandler: - BZ2_bzDecompressEnd ( &strm ); - return ret; -} - - -/*---------------------------------------------------*/ -/*-- - Code contributed by Yoshioka Tsuneo (tsuneo@rr.iij4u.or.jp) - to support better zlib compatibility. - This code is not _officially_ part of libbzip2 (yet); - I haven't tested it, documented it, or considered the - threading-safeness of it. - If this code breaks, please contact both Yoshioka and me. ---*/ -/*---------------------------------------------------*/ - -/*---------------------------------------------------*/ -/*-- - return version like "0.9.5d, 4-Sept-1999". ---*/ -const char * BZ_API(BZ2_bzlibVersion)(void) -{ - return BZ_VERSION; -} - - -#ifndef BZ_NO_STDIO -/*---------------------------------------------------*/ - -#if defined(_WIN32) || defined(OS2) || defined(MSDOS) -# include -# include -# define SET_BINARY_MODE(file) setmode(fileno(file),O_BINARY) -#else -# define SET_BINARY_MODE(file) -#endif -static -BZFILE * bzopen_or_bzdopen - ( const char *path, /* no use when bzdopen */ - int fd, /* no use when bzdopen */ - const char *mode, - int open_mode) /* bzopen: 0, bzdopen:1 */ -{ - int bzerr; - char unused[BZ_MAX_UNUSED]; - int blockSize100k = 9; - int writing = 0; - char mode2[10] = ""; - FILE *fp = NULL; - BZFILE *bzfp = NULL; - int verbosity = 0; - int workFactor = 30; - int smallMode = 0; - int nUnused = 0; - - if (mode == NULL) return NULL; - while (*mode) { - switch (*mode) { - case 'r': - writing = 0; break; - case 'w': - writing = 1; break; - case 's': - smallMode = 1; break; - default: - if (isdigit((int)(*mode))) { - blockSize100k = *mode-BZ_HDR_0; - } - } - mode++; - } - strcat(mode2, writing ? "w" : "r" ); - strcat(mode2,"b"); /* binary mode */ - - if (open_mode==0) { - if (path==NULL || strcmp(path,"")==0) { - fp = (writing ? stdout : stdin); - SET_BINARY_MODE(fp); - } else { - fp = fopen(path,mode2); - } - } else { -#ifdef BZ_STRICT_ANSI - fp = NULL; -#else - fp = fdopen(fd,mode2); -#endif - } - if (fp == NULL) return NULL; - - if (writing) { - /* Guard against total chaos and anarchy -- JRS */ - if (blockSize100k < 1) blockSize100k = 1; - if (blockSize100k > 9) blockSize100k = 9; - bzfp = BZ2_bzWriteOpen(&bzerr,fp,blockSize100k, - verbosity,workFactor); - } else { - bzfp = BZ2_bzReadOpen(&bzerr,fp,verbosity,smallMode, - unused,nUnused); - } - if (bzfp == NULL) { - if (fp != stdin && fp != stdout) fclose(fp); - return NULL; - } - return bzfp; -} - - -/*---------------------------------------------------*/ -/*-- - open file for read or write. - ex) bzopen("file","w9") - case path="" or NULL => use stdin or stdout. ---*/ -BZFILE * BZ_API(BZ2_bzopen) - ( const char *path, - const char *mode ) -{ - return bzopen_or_bzdopen(path,-1,mode,/*bzopen*/0); -} - - -/*---------------------------------------------------*/ -BZFILE * BZ_API(BZ2_bzdopen) - ( int fd, - const char *mode ) -{ - return bzopen_or_bzdopen(NULL,fd,mode,/*bzdopen*/1); -} - - -/*---------------------------------------------------*/ -int BZ_API(BZ2_bzread) (BZFILE* b, void* buf, int len ) -{ - int bzerr, nread; - if (((bzFile*)b)->lastErr == BZ_STREAM_END) return 0; - nread = BZ2_bzRead(&bzerr,b,buf,len); - if (bzerr == BZ_OK || bzerr == BZ_STREAM_END) { - return nread; - } else { - return -1; - } -} - - -/*---------------------------------------------------*/ -int BZ_API(BZ2_bzwrite) (BZFILE* b, void* buf, int len ) -{ - int bzerr; - - BZ2_bzWrite(&bzerr,b,buf,len); - if(bzerr == BZ_OK){ - return len; - }else{ - return -1; - } -} - - -/*---------------------------------------------------*/ -int BZ_API(BZ2_bzflush) (BZFILE *b) -{ - /* do nothing now... */ - return 0; -} - - -/*---------------------------------------------------*/ -void BZ_API(BZ2_bzclose) (BZFILE* b) -{ - int bzerr; - FILE *fp; - - if (b==NULL) {return;} - fp = ((bzFile *)b)->handle; - if(((bzFile*)b)->writing){ - BZ2_bzWriteClose(&bzerr,b,0,NULL,NULL); - if(bzerr != BZ_OK){ - BZ2_bzWriteClose(NULL,b,1,NULL,NULL); - } - }else{ - BZ2_bzReadClose(&bzerr,b); - } - if(fp!=stdin && fp!=stdout){ - fclose(fp); - } -} - - -/*---------------------------------------------------*/ -/*-- - return last error code ---*/ -static const char *bzerrorstrings[] = { - "OK" - ,"SEQUENCE_ERROR" - ,"PARAM_ERROR" - ,"MEM_ERROR" - ,"DATA_ERROR" - ,"DATA_ERROR_MAGIC" - ,"IO_ERROR" - ,"UNEXPECTED_EOF" - ,"OUTBUFF_FULL" - ,"CONFIG_ERROR" - ,"???" /* for future */ - ,"???" /* for future */ - ,"???" /* for future */ - ,"???" /* for future */ - ,"???" /* for future */ - ,"???" /* for future */ -}; - - -const char * BZ_API(BZ2_bzerror) (BZFILE *b, int *errnum) -{ - int err = ((bzFile *)b)->lastErr; - - if(err>0) err = 0; - *errnum = err; - return bzerrorstrings[err*-1]; -} -#endif - - -/*-------------------------------------------------------------*/ -/*--- end bzlib.c ---*/ -/*-------------------------------------------------------------*/ diff --git a/contrib/bzip2/bzlib.h b/contrib/bzip2/bzlib.h deleted file mode 100644 index c5b75d6d8ff9..000000000000 --- a/contrib/bzip2/bzlib.h +++ /dev/null @@ -1,282 +0,0 @@ - -/*-------------------------------------------------------------*/ -/*--- Public header file for the library. ---*/ -/*--- bzlib.h ---*/ -/*-------------------------------------------------------------*/ - -/* ------------------------------------------------------------------ - This file is part of bzip2/libbzip2, a program and library for - lossless, block-sorting data compression. - - bzip2/libbzip2 version 1.0.5 of 10 December 2007 - Copyright (C) 1996-2007 Julian Seward - - Please read the WARNING, DISCLAIMER and PATENTS sections in the - README file. - - This program is released under the terms of the license contained - in the file LICENSE. - ------------------------------------------------------------------ */ - - -#ifndef _BZLIB_H -#define _BZLIB_H - -#ifdef __cplusplus -extern "C" { -#endif - -#define BZ_RUN 0 -#define BZ_FLUSH 1 -#define BZ_FINISH 2 - -#define BZ_OK 0 -#define BZ_RUN_OK 1 -#define BZ_FLUSH_OK 2 -#define BZ_FINISH_OK 3 -#define BZ_STREAM_END 4 -#define BZ_SEQUENCE_ERROR (-1) -#define BZ_PARAM_ERROR (-2) -#define BZ_MEM_ERROR (-3) -#define BZ_DATA_ERROR (-4) -#define BZ_DATA_ERROR_MAGIC (-5) -#define BZ_IO_ERROR (-6) -#define BZ_UNEXPECTED_EOF (-7) -#define BZ_OUTBUFF_FULL (-8) -#define BZ_CONFIG_ERROR (-9) - -typedef - struct { - char *next_in; - unsigned int avail_in; - unsigned int total_in_lo32; - unsigned int total_in_hi32; - - char *next_out; - unsigned int avail_out; - unsigned int total_out_lo32; - unsigned int total_out_hi32; - - void *state; - - void *(*bzalloc)(void *,int,int); - void (*bzfree)(void *,void *); - void *opaque; - } - bz_stream; - - -#ifndef BZ_IMPORT -#define BZ_EXPORT -#endif - -#ifndef BZ_NO_STDIO -/* Need a definitition for FILE */ -#include -#endif - -#ifdef _WIN32 -# include -# ifdef small - /* windows.h define small to char */ -# undef small -# endif -# ifdef BZ_EXPORT -# define BZ_API(func) WINAPI func -# define BZ_EXTERN extern -# else - /* import windows dll dynamically */ -# define BZ_API(func) (WINAPI * func) -# define BZ_EXTERN -# endif -#else -# define BZ_API(func) func -# define BZ_EXTERN extern -#endif - - -/*-- Core (low-level) library functions --*/ - -BZ_EXTERN int BZ_API(BZ2_bzCompressInit) ( - bz_stream* strm, - int blockSize100k, - int verbosity, - int workFactor - ); - -BZ_EXTERN int BZ_API(BZ2_bzCompress) ( - bz_stream* strm, - int action - ); - -BZ_EXTERN int BZ_API(BZ2_bzCompressEnd) ( - bz_stream* strm - ); - -BZ_EXTERN int BZ_API(BZ2_bzDecompressInit) ( - bz_stream *strm, - int verbosity, - int small - ); - -BZ_EXTERN int BZ_API(BZ2_bzDecompress) ( - bz_stream* strm - ); - -BZ_EXTERN int BZ_API(BZ2_bzDecompressEnd) ( - bz_stream *strm - ); - - - -/*-- High(er) level library functions --*/ - -#ifndef BZ_NO_STDIO -#define BZ_MAX_UNUSED 5000 - -typedef void BZFILE; - -BZ_EXTERN BZFILE* BZ_API(BZ2_bzReadOpen) ( - int* bzerror, - FILE* f, - int verbosity, - int small, - void* unused, - int nUnused - ); - -BZ_EXTERN void BZ_API(BZ2_bzReadClose) ( - int* bzerror, - BZFILE* b - ); - -BZ_EXTERN void BZ_API(BZ2_bzReadGetUnused) ( - int* bzerror, - BZFILE* b, - void** unused, - int* nUnused - ); - -BZ_EXTERN int BZ_API(BZ2_bzRead) ( - int* bzerror, - BZFILE* b, - void* buf, - int len - ); - -BZ_EXTERN BZFILE* BZ_API(BZ2_bzWriteOpen) ( - int* bzerror, - FILE* f, - int blockSize100k, - int verbosity, - int workFactor - ); - -BZ_EXTERN void BZ_API(BZ2_bzWrite) ( - int* bzerror, - BZFILE* b, - void* buf, - int len - ); - -BZ_EXTERN void BZ_API(BZ2_bzWriteClose) ( - int* bzerror, - BZFILE* b, - int abandon, - unsigned int* nbytes_in, - unsigned int* nbytes_out - ); - -BZ_EXTERN void BZ_API(BZ2_bzWriteClose64) ( - int* bzerror, - BZFILE* b, - int abandon, - unsigned int* nbytes_in_lo32, - unsigned int* nbytes_in_hi32, - unsigned int* nbytes_out_lo32, - unsigned int* nbytes_out_hi32 - ); -#endif - - -/*-- Utility functions --*/ - -BZ_EXTERN int BZ_API(BZ2_bzBuffToBuffCompress) ( - char* dest, - unsigned int* destLen, - char* source, - unsigned int sourceLen, - int blockSize100k, - int verbosity, - int workFactor - ); - -BZ_EXTERN int BZ_API(BZ2_bzBuffToBuffDecompress) ( - char* dest, - unsigned int* destLen, - char* source, - unsigned int sourceLen, - int small, - int verbosity - ); - - -/*-- - Code contributed by Yoshioka Tsuneo (tsuneo@rr.iij4u.or.jp) - to support better zlib compatibility. - This code is not _officially_ part of libbzip2 (yet); - I haven't tested it, documented it, or considered the - threading-safeness of it. - If this code breaks, please contact both Yoshioka and me. ---*/ - -BZ_EXTERN const char * BZ_API(BZ2_bzlibVersion) ( - void - ); - -#ifndef BZ_NO_STDIO -BZ_EXTERN BZFILE * BZ_API(BZ2_bzopen) ( - const char *path, - const char *mode - ); - -BZ_EXTERN BZFILE * BZ_API(BZ2_bzdopen) ( - int fd, - const char *mode - ); - -BZ_EXTERN int BZ_API(BZ2_bzread) ( - BZFILE* b, - void* buf, - int len - ); - -BZ_EXTERN int BZ_API(BZ2_bzwrite) ( - BZFILE* b, - void* buf, - int len - ); - -BZ_EXTERN int BZ_API(BZ2_bzflush) ( - BZFILE* b - ); - -BZ_EXTERN void BZ_API(BZ2_bzclose) ( - BZFILE* b - ); - -BZ_EXTERN const char * BZ_API(BZ2_bzerror) ( - BZFILE *b, - int *errnum - ); -#endif - -#ifdef __cplusplus -} -#endif - -#endif - -/*-------------------------------------------------------------*/ -/*--- end bzlib.h ---*/ -/*-------------------------------------------------------------*/ diff --git a/contrib/bzip2/bzlib_private.h b/contrib/bzip2/bzlib_private.h deleted file mode 100644 index 23427879b180..000000000000 --- a/contrib/bzip2/bzlib_private.h +++ /dev/null @@ -1,509 +0,0 @@ - -/*-------------------------------------------------------------*/ -/*--- Private header file for the library. ---*/ -/*--- bzlib_private.h ---*/ -/*-------------------------------------------------------------*/ - -/* ------------------------------------------------------------------ - This file is part of bzip2/libbzip2, a program and library for - lossless, block-sorting data compression. - - bzip2/libbzip2 version 1.0.5 of 10 December 2007 - Copyright (C) 1996-2007 Julian Seward - - Please read the WARNING, DISCLAIMER and PATENTS sections in the - README file. - - This program is released under the terms of the license contained - in the file LICENSE. - ------------------------------------------------------------------ */ - - -#ifndef _BZLIB_PRIVATE_H -#define _BZLIB_PRIVATE_H - -#include - -#ifndef BZ_NO_STDIO -#include -#include -#include -#endif - -#include "bzlib.h" - - - -/*-- General stuff. --*/ - -#define BZ_VERSION "1.0.5, 10-Dec-2007" - -typedef char Char; -typedef unsigned char Bool; -typedef unsigned char UChar; -typedef int Int32; -typedef unsigned int UInt32; -typedef short Int16; -typedef unsigned short UInt16; - -#define True ((Bool)1) -#define False ((Bool)0) - -#ifndef __GNUC__ -#define __inline__ /* */ -#endif - -#ifndef BZ_NO_STDIO - -extern void BZ2_bz__AssertH__fail ( int errcode ); -#define AssertH(cond,errcode) \ - { if (!(cond)) BZ2_bz__AssertH__fail ( errcode ); } - -#if BZ_DEBUG -#define AssertD(cond,msg) \ - { if (!(cond)) { \ - fprintf ( stderr, \ - "\n\nlibbzip2(debug build): internal error\n\t%s\n", msg );\ - exit(1); \ - }} -#else -#define AssertD(cond,msg) /* */ -#endif - -#define VPrintf0(zf) \ - fprintf(stderr,zf) -#define VPrintf1(zf,za1) \ - fprintf(stderr,zf,za1) -#define VPrintf2(zf,za1,za2) \ - fprintf(stderr,zf,za1,za2) -#define VPrintf3(zf,za1,za2,za3) \ - fprintf(stderr,zf,za1,za2,za3) -#define VPrintf4(zf,za1,za2,za3,za4) \ - fprintf(stderr,zf,za1,za2,za3,za4) -#define VPrintf5(zf,za1,za2,za3,za4,za5) \ - fprintf(stderr,zf,za1,za2,za3,za4,za5) - -#else - -extern void bz_internal_error ( int errcode ); -#define AssertH(cond,errcode) \ - { if (!(cond)) bz_internal_error ( errcode ); } -#define AssertD(cond,msg) do { } while (0) -#define VPrintf0(zf) do { } while (0) -#define VPrintf1(zf,za1) do { } while (0) -#define VPrintf2(zf,za1,za2) do { } while (0) -#define VPrintf3(zf,za1,za2,za3) do { } while (0) -#define VPrintf4(zf,za1,za2,za3,za4) do { } while (0) -#define VPrintf5(zf,za1,za2,za3,za4,za5) do { } while (0) - -#endif - - -#define BZALLOC(nnn) (strm->bzalloc)(strm->opaque,(nnn),1) -#define BZFREE(ppp) (strm->bzfree)(strm->opaque,(ppp)) - - -/*-- Header bytes. --*/ - -#define BZ_HDR_B 0x42 /* 'B' */ -#define BZ_HDR_Z 0x5a /* 'Z' */ -#define BZ_HDR_h 0x68 /* 'h' */ -#define BZ_HDR_0 0x30 /* '0' */ - -/*-- Constants for the back end. --*/ - -#define BZ_MAX_ALPHA_SIZE 258 -#define BZ_MAX_CODE_LEN 23 - -#define BZ_RUNA 0 -#define BZ_RUNB 1 - -#define BZ_N_GROUPS 6 -#define BZ_G_SIZE 50 -#define BZ_N_ITERS 4 - -#define BZ_MAX_SELECTORS (2 + (900000 / BZ_G_SIZE)) - - - -/*-- Stuff for randomising repetitive blocks. --*/ - -extern Int32 BZ2_rNums[512]; - -#define BZ_RAND_DECLS \ - Int32 rNToGo; \ - Int32 rTPos \ - -#define BZ_RAND_INIT_MASK \ - s->rNToGo = 0; \ - s->rTPos = 0 \ - -#define BZ_RAND_MASK ((s->rNToGo == 1) ? 1 : 0) - -#define BZ_RAND_UPD_MASK \ - if (s->rNToGo == 0) { \ - s->rNToGo = BZ2_rNums[s->rTPos]; \ - s->rTPos++; \ - if (s->rTPos == 512) s->rTPos = 0; \ - } \ - s->rNToGo--; - - - -/*-- Stuff for doing CRCs. --*/ - -extern UInt32 BZ2_crc32Table[256]; - -#define BZ_INITIALISE_CRC(crcVar) \ -{ \ - crcVar = 0xffffffffL; \ -} - -#define BZ_FINALISE_CRC(crcVar) \ -{ \ - crcVar = ~(crcVar); \ -} - -#define BZ_UPDATE_CRC(crcVar,cha) \ -{ \ - crcVar = (crcVar << 8) ^ \ - BZ2_crc32Table[(crcVar >> 24) ^ \ - ((UChar)cha)]; \ -} - - - -/*-- States and modes for compression. --*/ - -#define BZ_M_IDLE 1 -#define BZ_M_RUNNING 2 -#define BZ_M_FLUSHING 3 -#define BZ_M_FINISHING 4 - -#define BZ_S_OUTPUT 1 -#define BZ_S_INPUT 2 - -#define BZ_N_RADIX 2 -#define BZ_N_QSORT 12 -#define BZ_N_SHELL 18 -#define BZ_N_OVERSHOOT (BZ_N_RADIX + BZ_N_QSORT + BZ_N_SHELL + 2) - - - - -/*-- Structure holding all the compression-side stuff. --*/ - -typedef - struct { - /* pointer back to the struct bz_stream */ - bz_stream* strm; - - /* mode this stream is in, and whether inputting */ - /* or outputting data */ - Int32 mode; - Int32 state; - - /* remembers avail_in when flush/finish requested */ - UInt32 avail_in_expect; - - /* for doing the block sorting */ - UInt32* arr1; - UInt32* arr2; - UInt32* ftab; - Int32 origPtr; - - /* aliases for arr1 and arr2 */ - UInt32* ptr; - UChar* block; - UInt16* mtfv; - UChar* zbits; - - /* for deciding when to use the fallback sorting algorithm */ - Int32 workFactor; - - /* run-length-encoding of the input */ - UInt32 state_in_ch; - Int32 state_in_len; - BZ_RAND_DECLS; - - /* input and output limits and current posns */ - Int32 nblock; - Int32 nblockMAX; - Int32 numZ; - Int32 state_out_pos; - - /* map of bytes used in block */ - Int32 nInUse; - Bool inUse[256]; - UChar unseqToSeq[256]; - - /* the buffer for bit stream creation */ - UInt32 bsBuff; - Int32 bsLive; - - /* block and combined CRCs */ - UInt32 blockCRC; - UInt32 combinedCRC; - - /* misc administratium */ - Int32 verbosity; - Int32 blockNo; - Int32 blockSize100k; - - /* stuff for coding the MTF values */ - Int32 nMTF; - Int32 mtfFreq [BZ_MAX_ALPHA_SIZE]; - UChar selector [BZ_MAX_SELECTORS]; - UChar selectorMtf[BZ_MAX_SELECTORS]; - - UChar len [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE]; - Int32 code [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE]; - Int32 rfreq [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE]; - /* second dimension: only 3 needed; 4 makes index calculations faster */ - UInt32 len_pack[BZ_MAX_ALPHA_SIZE][4]; - - } - EState; - - - -/*-- externs for compression. --*/ - -extern void -BZ2_blockSort ( EState* ); - -extern void -BZ2_compressBlock ( EState*, Bool ); - -extern void -BZ2_bsInitWrite ( EState* ); - -extern void -BZ2_hbAssignCodes ( Int32*, UChar*, Int32, Int32, Int32 ); - -extern void -BZ2_hbMakeCodeLengths ( UChar*, Int32*, Int32, Int32 ); - - - -/*-- states for decompression. --*/ - -#define BZ_X_IDLE 1 -#define BZ_X_OUTPUT 2 - -#define BZ_X_MAGIC_1 10 -#define BZ_X_MAGIC_2 11 -#define BZ_X_MAGIC_3 12 -#define BZ_X_MAGIC_4 13 -#define BZ_X_BLKHDR_1 14 -#define BZ_X_BLKHDR_2 15 -#define BZ_X_BLKHDR_3 16 -#define BZ_X_BLKHDR_4 17 -#define BZ_X_BLKHDR_5 18 -#define BZ_X_BLKHDR_6 19 -#define BZ_X_BCRC_1 20 -#define BZ_X_BCRC_2 21 -#define BZ_X_BCRC_3 22 -#define BZ_X_BCRC_4 23 -#define BZ_X_RANDBIT 24 -#define BZ_X_ORIGPTR_1 25 -#define BZ_X_ORIGPTR_2 26 -#define BZ_X_ORIGPTR_3 27 -#define BZ_X_MAPPING_1 28 -#define BZ_X_MAPPING_2 29 -#define BZ_X_SELECTOR_1 30 -#define BZ_X_SELECTOR_2 31 -#define BZ_X_SELECTOR_3 32 -#define BZ_X_CODING_1 33 -#define BZ_X_CODING_2 34 -#define BZ_X_CODING_3 35 -#define BZ_X_MTF_1 36 -#define BZ_X_MTF_2 37 -#define BZ_X_MTF_3 38 -#define BZ_X_MTF_4 39 -#define BZ_X_MTF_5 40 -#define BZ_X_MTF_6 41 -#define BZ_X_ENDHDR_2 42 -#define BZ_X_ENDHDR_3 43 -#define BZ_X_ENDHDR_4 44 -#define BZ_X_ENDHDR_5 45 -#define BZ_X_ENDHDR_6 46 -#define BZ_X_CCRC_1 47 -#define BZ_X_CCRC_2 48 -#define BZ_X_CCRC_3 49 -#define BZ_X_CCRC_4 50 - - - -/*-- Constants for the fast MTF decoder. --*/ - -#define MTFA_SIZE 4096 -#define MTFL_SIZE 16 - - - -/*-- Structure holding all the decompression-side stuff. --*/ - -typedef - struct { - /* pointer back to the struct bz_stream */ - bz_stream* strm; - - /* state indicator for this stream */ - Int32 state; - - /* for doing the final run-length decoding */ - UChar state_out_ch; - Int32 state_out_len; - Bool blockRandomised; - BZ_RAND_DECLS; - - /* the buffer for bit stream reading */ - UInt32 bsBuff; - Int32 bsLive; - - /* misc administratium */ - Int32 blockSize100k; - Bool smallDecompress; - Int32 currBlockNo; - Int32 verbosity; - - /* for undoing the Burrows-Wheeler transform */ - Int32 origPtr; - UInt32 tPos; - Int32 k0; - Int32 unzftab[256]; - Int32 nblock_used; - Int32 cftab[257]; - Int32 cftabCopy[257]; - - /* for undoing the Burrows-Wheeler transform (FAST) */ - UInt32 *tt; - - /* for undoing the Burrows-Wheeler transform (SMALL) */ - UInt16 *ll16; - UChar *ll4; - - /* stored and calculated CRCs */ - UInt32 storedBlockCRC; - UInt32 storedCombinedCRC; - UInt32 calculatedBlockCRC; - UInt32 calculatedCombinedCRC; - - /* map of bytes used in block */ - Int32 nInUse; - Bool inUse[256]; - Bool inUse16[16]; - UChar seqToUnseq[256]; - - /* for decoding the MTF values */ - UChar mtfa [MTFA_SIZE]; - Int32 mtfbase[256 / MTFL_SIZE]; - UChar selector [BZ_MAX_SELECTORS]; - UChar selectorMtf[BZ_MAX_SELECTORS]; - UChar len [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE]; - - Int32 limit [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE]; - Int32 base [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE]; - Int32 perm [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE]; - Int32 minLens[BZ_N_GROUPS]; - - /* save area for scalars in the main decompress code */ - Int32 save_i; - Int32 save_j; - Int32 save_t; - Int32 save_alphaSize; - Int32 save_nGroups; - Int32 save_nSelectors; - Int32 save_EOB; - Int32 save_groupNo; - Int32 save_groupPos; - Int32 save_nextSym; - Int32 save_nblockMAX; - Int32 save_nblock; - Int32 save_es; - Int32 save_N; - Int32 save_curr; - Int32 save_zt; - Int32 save_zn; - Int32 save_zvec; - Int32 save_zj; - Int32 save_gSel; - Int32 save_gMinlen; - Int32* save_gLimit; - Int32* save_gBase; - Int32* save_gPerm; - - } - DState; - - - -/*-- Macros for decompression. --*/ - -#define BZ_GET_FAST(cccc) \ - /* c_tPos is unsigned, hence test < 0 is pointless. */ \ - if (s->tPos >= (UInt32)100000 * (UInt32)s->blockSize100k) return True; \ - s->tPos = s->tt[s->tPos]; \ - cccc = (UChar)(s->tPos & 0xff); \ - s->tPos >>= 8; - -#define BZ_GET_FAST_C(cccc) \ - /* c_tPos is unsigned, hence test < 0 is pointless. */ \ - if (c_tPos >= (UInt32)100000 * (UInt32)ro_blockSize100k) return True; \ - c_tPos = c_tt[c_tPos]; \ - cccc = (UChar)(c_tPos & 0xff); \ - c_tPos >>= 8; - -#define SET_LL4(i,n) \ - { if (((i) & 0x1) == 0) \ - s->ll4[(i) >> 1] = (s->ll4[(i) >> 1] & 0xf0) | (n); else \ - s->ll4[(i) >> 1] = (s->ll4[(i) >> 1] & 0x0f) | ((n) << 4); \ - } - -#define GET_LL4(i) \ - ((((UInt32)(s->ll4[(i) >> 1])) >> (((i) << 2) & 0x4)) & 0xF) - -#define SET_LL(i,n) \ - { s->ll16[i] = (UInt16)(n & 0x0000ffff); \ - SET_LL4(i, n >> 16); \ - } - -#define GET_LL(i) \ - (((UInt32)s->ll16[i]) | (GET_LL4(i) << 16)) - -#define BZ_GET_SMALL(cccc) \ - /* c_tPos is unsigned, hence test < 0 is pointless. */ \ - if (s->tPos >= (UInt32)100000 * (UInt32)s->blockSize100k) return True; \ - cccc = BZ2_indexIntoF ( s->tPos, s->cftab ); \ - s->tPos = GET_LL(s->tPos); - - -/*-- externs for decompression. --*/ - -extern Int32 -BZ2_indexIntoF ( Int32, Int32* ); - -extern Int32 -BZ2_decompress ( DState* ); - -extern void -BZ2_hbCreateDecodeTables ( Int32*, Int32*, Int32*, UChar*, - Int32, Int32, Int32 ); - - -#endif - - -/*-- BZ_NO_STDIO seems to make NULL disappear on some platforms. --*/ - -#ifdef BZ_NO_STDIO -#ifndef NULL -#define NULL 0 -#endif -#endif - - -/*-------------------------------------------------------------*/ -/*--- end bzlib_private.h ---*/ -/*-------------------------------------------------------------*/ diff --git a/contrib/bzip2/compress.c b/contrib/bzip2/compress.c deleted file mode 100644 index 8c80a079700c..000000000000 --- a/contrib/bzip2/compress.c +++ /dev/null @@ -1,672 +0,0 @@ - -/*-------------------------------------------------------------*/ -/*--- Compression machinery (not incl block sorting) ---*/ -/*--- compress.c ---*/ -/*-------------------------------------------------------------*/ - -/* ------------------------------------------------------------------ - This file is part of bzip2/libbzip2, a program and library for - lossless, block-sorting data compression. - - bzip2/libbzip2 version 1.0.5 of 10 December 2007 - Copyright (C) 1996-2007 Julian Seward - - Please read the WARNING, DISCLAIMER and PATENTS sections in the - README file. - - This program is released under the terms of the license contained - in the file LICENSE. - ------------------------------------------------------------------ */ - - -/* CHANGES - 0.9.0 -- original version. - 0.9.0a/b -- no changes in this file. - 0.9.0c -- changed setting of nGroups in sendMTFValues() - so as to do a bit better on small files -*/ - -#include "bzlib_private.h" - - -/*---------------------------------------------------*/ -/*--- Bit stream I/O ---*/ -/*---------------------------------------------------*/ - -/*---------------------------------------------------*/ -void BZ2_bsInitWrite ( EState* s ) -{ - s->bsLive = 0; - s->bsBuff = 0; -} - - -/*---------------------------------------------------*/ -static -void bsFinishWrite ( EState* s ) -{ - while (s->bsLive > 0) { - s->zbits[s->numZ] = (UChar)(s->bsBuff >> 24); - s->numZ++; - s->bsBuff <<= 8; - s->bsLive -= 8; - } -} - - -/*---------------------------------------------------*/ -#define bsNEEDW(nz) \ -{ \ - while (s->bsLive >= 8) { \ - s->zbits[s->numZ] \ - = (UChar)(s->bsBuff >> 24); \ - s->numZ++; \ - s->bsBuff <<= 8; \ - s->bsLive -= 8; \ - } \ -} - - -/*---------------------------------------------------*/ -static -__inline__ -void bsW ( EState* s, Int32 n, UInt32 v ) -{ - bsNEEDW ( n ); - s->bsBuff |= (v << (32 - s->bsLive - n)); - s->bsLive += n; -} - - -/*---------------------------------------------------*/ -static -void bsPutUInt32 ( EState* s, UInt32 u ) -{ - bsW ( s, 8, (u >> 24) & 0xffL ); - bsW ( s, 8, (u >> 16) & 0xffL ); - bsW ( s, 8, (u >> 8) & 0xffL ); - bsW ( s, 8, u & 0xffL ); -} - - -/*---------------------------------------------------*/ -static -void bsPutUChar ( EState* s, UChar c ) -{ - bsW( s, 8, (UInt32)c ); -} - - -/*---------------------------------------------------*/ -/*--- The back end proper ---*/ -/*---------------------------------------------------*/ - -/*---------------------------------------------------*/ -static -void makeMaps_e ( EState* s ) -{ - Int32 i; - s->nInUse = 0; - for (i = 0; i < 256; i++) - if (s->inUse[i]) { - s->unseqToSeq[i] = s->nInUse; - s->nInUse++; - } -} - - -/*---------------------------------------------------*/ -static -void generateMTFValues ( EState* s ) -{ - UChar yy[256]; - Int32 i, j; - Int32 zPend; - Int32 wr; - Int32 EOB; - - /* - After sorting (eg, here), - s->arr1 [ 0 .. s->nblock-1 ] holds sorted order, - and - ((UChar*)s->arr2) [ 0 .. s->nblock-1 ] - holds the original block data. - - The first thing to do is generate the MTF values, - and put them in - ((UInt16*)s->arr1) [ 0 .. s->nblock-1 ]. - Because there are strictly fewer or equal MTF values - than block values, ptr values in this area are overwritten - with MTF values only when they are no longer needed. - - The final compressed bitstream is generated into the - area starting at - (UChar*) (&((UChar*)s->arr2)[s->nblock]) - - These storage aliases are set up in bzCompressInit(), - except for the last one, which is arranged in - compressBlock(). - */ - UInt32* ptr = s->ptr; - UChar* block = s->block; - UInt16* mtfv = s->mtfv; - - makeMaps_e ( s ); - EOB = s->nInUse+1; - - for (i = 0; i <= EOB; i++) s->mtfFreq[i] = 0; - - wr = 0; - zPend = 0; - for (i = 0; i < s->nInUse; i++) yy[i] = (UChar) i; - - for (i = 0; i < s->nblock; i++) { - UChar ll_i; - AssertD ( wr <= i, "generateMTFValues(1)" ); - j = ptr[i]-1; if (j < 0) j += s->nblock; - ll_i = s->unseqToSeq[block[j]]; - AssertD ( ll_i < s->nInUse, "generateMTFValues(2a)" ); - - if (yy[0] == ll_i) { - zPend++; - } else { - - if (zPend > 0) { - zPend--; - while (True) { - if (zPend & 1) { - mtfv[wr] = BZ_RUNB; wr++; - s->mtfFreq[BZ_RUNB]++; - } else { - mtfv[wr] = BZ_RUNA; wr++; - s->mtfFreq[BZ_RUNA]++; - } - if (zPend < 2) break; - zPend = (zPend - 2) / 2; - }; - zPend = 0; - } - { - register UChar rtmp; - register UChar* ryy_j; - register UChar rll_i; - rtmp = yy[1]; - yy[1] = yy[0]; - ryy_j = &(yy[1]); - rll_i = ll_i; - while ( rll_i != rtmp ) { - register UChar rtmp2; - ryy_j++; - rtmp2 = rtmp; - rtmp = *ryy_j; - *ryy_j = rtmp2; - }; - yy[0] = rtmp; - j = ryy_j - &(yy[0]); - mtfv[wr] = j+1; wr++; s->mtfFreq[j+1]++; - } - - } - } - - if (zPend > 0) { - zPend--; - while (True) { - if (zPend & 1) { - mtfv[wr] = BZ_RUNB; wr++; - s->mtfFreq[BZ_RUNB]++; - } else { - mtfv[wr] = BZ_RUNA; wr++; - s->mtfFreq[BZ_RUNA]++; - } - if (zPend < 2) break; - zPend = (zPend - 2) / 2; - }; - zPend = 0; - } - - mtfv[wr] = EOB; wr++; s->mtfFreq[EOB]++; - - s->nMTF = wr; -} - - -/*---------------------------------------------------*/ -#define BZ_LESSER_ICOST 0 -#define BZ_GREATER_ICOST 15 - -static -void sendMTFValues ( EState* s ) -{ - Int32 v, t, i, j, gs, ge, totc, bt, bc, iter; - Int32 nSelectors, alphaSize, minLen, maxLen, selCtr; - Int32 nGroups, nBytes; - - /*-- - UChar len [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE]; - is a global since the decoder also needs it. - - Int32 code[BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE]; - Int32 rfreq[BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE]; - are also globals only used in this proc. - Made global to keep stack frame size small. - --*/ - - - UInt16 cost[BZ_N_GROUPS]; - Int32 fave[BZ_N_GROUPS]; - - UInt16* mtfv = s->mtfv; - - if (s->verbosity >= 3) - VPrintf3( " %d in block, %d after MTF & 1-2 coding, " - "%d+2 syms in use\n", - s->nblock, s->nMTF, s->nInUse ); - - alphaSize = s->nInUse+2; - for (t = 0; t < BZ_N_GROUPS; t++) - for (v = 0; v < alphaSize; v++) - s->len[t][v] = BZ_GREATER_ICOST; - - /*--- Decide how many coding tables to use ---*/ - AssertH ( s->nMTF > 0, 3001 ); - if (s->nMTF < 200) nGroups = 2; else - if (s->nMTF < 600) nGroups = 3; else - if (s->nMTF < 1200) nGroups = 4; else - if (s->nMTF < 2400) nGroups = 5; else - nGroups = 6; - - /*--- Generate an initial set of coding tables ---*/ - { - Int32 nPart, remF, tFreq, aFreq; - - nPart = nGroups; - remF = s->nMTF; - gs = 0; - while (nPart > 0) { - tFreq = remF / nPart; - ge = gs-1; - aFreq = 0; - while (aFreq < tFreq && ge < alphaSize-1) { - ge++; - aFreq += s->mtfFreq[ge]; - } - - if (ge > gs - && nPart != nGroups && nPart != 1 - && ((nGroups-nPart) % 2 == 1)) { - aFreq -= s->mtfFreq[ge]; - ge--; - } - - if (s->verbosity >= 3) - VPrintf5( " initial group %d, [%d .. %d], " - "has %d syms (%4.1f%%)\n", - nPart, gs, ge, aFreq, - (100.0 * (float)aFreq) / (float)(s->nMTF) ); - - for (v = 0; v < alphaSize; v++) - if (v >= gs && v <= ge) - s->len[nPart-1][v] = BZ_LESSER_ICOST; else - s->len[nPart-1][v] = BZ_GREATER_ICOST; - - nPart--; - gs = ge+1; - remF -= aFreq; - } - } - - /*--- - Iterate up to BZ_N_ITERS times to improve the tables. - ---*/ - for (iter = 0; iter < BZ_N_ITERS; iter++) { - - for (t = 0; t < nGroups; t++) fave[t] = 0; - - for (t = 0; t < nGroups; t++) - for (v = 0; v < alphaSize; v++) - s->rfreq[t][v] = 0; - - /*--- - Set up an auxiliary length table which is used to fast-track - the common case (nGroups == 6). - ---*/ - if (nGroups == 6) { - for (v = 0; v < alphaSize; v++) { - s->len_pack[v][0] = (s->len[1][v] << 16) | s->len[0][v]; - s->len_pack[v][1] = (s->len[3][v] << 16) | s->len[2][v]; - s->len_pack[v][2] = (s->len[5][v] << 16) | s->len[4][v]; - } - } - - nSelectors = 0; - totc = 0; - gs = 0; - while (True) { - - /*--- Set group start & end marks. --*/ - if (gs >= s->nMTF) break; - ge = gs + BZ_G_SIZE - 1; - if (ge >= s->nMTF) ge = s->nMTF-1; - - /*-- - Calculate the cost of this group as coded - by each of the coding tables. - --*/ - for (t = 0; t < nGroups; t++) cost[t] = 0; - - if (nGroups == 6 && 50 == ge-gs+1) { - /*--- fast track the common case ---*/ - register UInt32 cost01, cost23, cost45; - register UInt16 icv; - cost01 = cost23 = cost45 = 0; - -# define BZ_ITER(nn) \ - icv = mtfv[gs+(nn)]; \ - cost01 += s->len_pack[icv][0]; \ - cost23 += s->len_pack[icv][1]; \ - cost45 += s->len_pack[icv][2]; \ - - BZ_ITER(0); BZ_ITER(1); BZ_ITER(2); BZ_ITER(3); BZ_ITER(4); - BZ_ITER(5); BZ_ITER(6); BZ_ITER(7); BZ_ITER(8); BZ_ITER(9); - BZ_ITER(10); BZ_ITER(11); BZ_ITER(12); BZ_ITER(13); BZ_ITER(14); - BZ_ITER(15); BZ_ITER(16); BZ_ITER(17); BZ_ITER(18); BZ_ITER(19); - BZ_ITER(20); BZ_ITER(21); BZ_ITER(22); BZ_ITER(23); BZ_ITER(24); - BZ_ITER(25); BZ_ITER(26); BZ_ITER(27); BZ_ITER(28); BZ_ITER(29); - BZ_ITER(30); BZ_ITER(31); BZ_ITER(32); BZ_ITER(33); BZ_ITER(34); - BZ_ITER(35); BZ_ITER(36); BZ_ITER(37); BZ_ITER(38); BZ_ITER(39); - BZ_ITER(40); BZ_ITER(41); BZ_ITER(42); BZ_ITER(43); BZ_ITER(44); - BZ_ITER(45); BZ_ITER(46); BZ_ITER(47); BZ_ITER(48); BZ_ITER(49); - -# undef BZ_ITER - - cost[0] = cost01 & 0xffff; cost[1] = cost01 >> 16; - cost[2] = cost23 & 0xffff; cost[3] = cost23 >> 16; - cost[4] = cost45 & 0xffff; cost[5] = cost45 >> 16; - - } else { - /*--- slow version which correctly handles all situations ---*/ - for (i = gs; i <= ge; i++) { - UInt16 icv = mtfv[i]; - for (t = 0; t < nGroups; t++) cost[t] += s->len[t][icv]; - } - } - - /*-- - Find the coding table which is best for this group, - and record its identity in the selector table. - --*/ - bc = 999999999; bt = -1; - for (t = 0; t < nGroups; t++) - if (cost[t] < bc) { bc = cost[t]; bt = t; }; - totc += bc; - fave[bt]++; - s->selector[nSelectors] = bt; - nSelectors++; - - /*-- - Increment the symbol frequencies for the selected table. - --*/ - if (nGroups == 6 && 50 == ge-gs+1) { - /*--- fast track the common case ---*/ - -# define BZ_ITUR(nn) s->rfreq[bt][ mtfv[gs+(nn)] ]++ - - BZ_ITUR(0); BZ_ITUR(1); BZ_ITUR(2); BZ_ITUR(3); BZ_ITUR(4); - BZ_ITUR(5); BZ_ITUR(6); BZ_ITUR(7); BZ_ITUR(8); BZ_ITUR(9); - BZ_ITUR(10); BZ_ITUR(11); BZ_ITUR(12); BZ_ITUR(13); BZ_ITUR(14); - BZ_ITUR(15); BZ_ITUR(16); BZ_ITUR(17); BZ_ITUR(18); BZ_ITUR(19); - BZ_ITUR(20); BZ_ITUR(21); BZ_ITUR(22); BZ_ITUR(23); BZ_ITUR(24); - BZ_ITUR(25); BZ_ITUR(26); BZ_ITUR(27); BZ_ITUR(28); BZ_ITUR(29); - BZ_ITUR(30); BZ_ITUR(31); BZ_ITUR(32); BZ_ITUR(33); BZ_ITUR(34); - BZ_ITUR(35); BZ_ITUR(36); BZ_ITUR(37); BZ_ITUR(38); BZ_ITUR(39); - BZ_ITUR(40); BZ_ITUR(41); BZ_ITUR(42); BZ_ITUR(43); BZ_ITUR(44); - BZ_ITUR(45); BZ_ITUR(46); BZ_ITUR(47); BZ_ITUR(48); BZ_ITUR(49); - -# undef BZ_ITUR - - } else { - /*--- slow version which correctly handles all situations ---*/ - for (i = gs; i <= ge; i++) - s->rfreq[bt][ mtfv[i] ]++; - } - - gs = ge+1; - } - if (s->verbosity >= 3) { - VPrintf2 ( " pass %d: size is %d, grp uses are ", - iter+1, totc/8 ); - for (t = 0; t < nGroups; t++) - VPrintf1 ( "%d ", fave[t] ); - VPrintf0 ( "\n" ); - } - - /*-- - Recompute the tables based on the accumulated frequencies. - --*/ - /* maxLen was changed from 20 to 17 in bzip2-1.0.3. See - comment in huffman.c for details. */ - for (t = 0; t < nGroups; t++) - BZ2_hbMakeCodeLengths ( &(s->len[t][0]), &(s->rfreq[t][0]), - alphaSize, 17 /*20*/ ); - } - - - AssertH( nGroups < 8, 3002 ); - AssertH( nSelectors < 32768 && - nSelectors <= (2 + (900000 / BZ_G_SIZE)), - 3003 ); - - - /*--- Compute MTF values for the selectors. ---*/ - { - UChar pos[BZ_N_GROUPS], ll_i, tmp2, tmp; - for (i = 0; i < nGroups; i++) pos[i] = i; - for (i = 0; i < nSelectors; i++) { - ll_i = s->selector[i]; - j = 0; - tmp = pos[j]; - while ( ll_i != tmp ) { - j++; - tmp2 = tmp; - tmp = pos[j]; - pos[j] = tmp2; - }; - pos[0] = tmp; - s->selectorMtf[i] = j; - } - }; - - /*--- Assign actual codes for the tables. --*/ - for (t = 0; t < nGroups; t++) { - minLen = 32; - maxLen = 0; - for (i = 0; i < alphaSize; i++) { - if (s->len[t][i] > maxLen) maxLen = s->len[t][i]; - if (s->len[t][i] < minLen) minLen = s->len[t][i]; - } - AssertH ( !(maxLen > 17 /*20*/ ), 3004 ); - AssertH ( !(minLen < 1), 3005 ); - BZ2_hbAssignCodes ( &(s->code[t][0]), &(s->len[t][0]), - minLen, maxLen, alphaSize ); - } - - /*--- Transmit the mapping table. ---*/ - { - Bool inUse16[16]; - for (i = 0; i < 16; i++) { - inUse16[i] = False; - for (j = 0; j < 16; j++) - if (s->inUse[i * 16 + j]) inUse16[i] = True; - } - - nBytes = s->numZ; - for (i = 0; i < 16; i++) - if (inUse16[i]) bsW(s,1,1); else bsW(s,1,0); - - for (i = 0; i < 16; i++) - if (inUse16[i]) - for (j = 0; j < 16; j++) { - if (s->inUse[i * 16 + j]) bsW(s,1,1); else bsW(s,1,0); - } - - if (s->verbosity >= 3) - VPrintf1( " bytes: mapping %d, ", s->numZ-nBytes ); - } - - /*--- Now the selectors. ---*/ - nBytes = s->numZ; - bsW ( s, 3, nGroups ); - bsW ( s, 15, nSelectors ); - for (i = 0; i < nSelectors; i++) { - for (j = 0; j < s->selectorMtf[i]; j++) bsW(s,1,1); - bsW(s,1,0); - } - if (s->verbosity >= 3) - VPrintf1( "selectors %d, ", s->numZ-nBytes ); - - /*--- Now the coding tables. ---*/ - nBytes = s->numZ; - - for (t = 0; t < nGroups; t++) { - Int32 curr = s->len[t][0]; - bsW ( s, 5, curr ); - for (i = 0; i < alphaSize; i++) { - while (curr < s->len[t][i]) { bsW(s,2,2); curr++; /* 10 */ }; - while (curr > s->len[t][i]) { bsW(s,2,3); curr--; /* 11 */ }; - bsW ( s, 1, 0 ); - } - } - - if (s->verbosity >= 3) - VPrintf1 ( "code lengths %d, ", s->numZ-nBytes ); - - /*--- And finally, the block data proper ---*/ - nBytes = s->numZ; - selCtr = 0; - gs = 0; - while (True) { - if (gs >= s->nMTF) break; - ge = gs + BZ_G_SIZE - 1; - if (ge >= s->nMTF) ge = s->nMTF-1; - AssertH ( s->selector[selCtr] < nGroups, 3006 ); - - if (nGroups == 6 && 50 == ge-gs+1) { - /*--- fast track the common case ---*/ - UInt16 mtfv_i; - UChar* s_len_sel_selCtr - = &(s->len[s->selector[selCtr]][0]); - Int32* s_code_sel_selCtr - = &(s->code[s->selector[selCtr]][0]); - -# define BZ_ITAH(nn) \ - mtfv_i = mtfv[gs+(nn)]; \ - bsW ( s, \ - s_len_sel_selCtr[mtfv_i], \ - s_code_sel_selCtr[mtfv_i] ) - - BZ_ITAH(0); BZ_ITAH(1); BZ_ITAH(2); BZ_ITAH(3); BZ_ITAH(4); - BZ_ITAH(5); BZ_ITAH(6); BZ_ITAH(7); BZ_ITAH(8); BZ_ITAH(9); - BZ_ITAH(10); BZ_ITAH(11); BZ_ITAH(12); BZ_ITAH(13); BZ_ITAH(14); - BZ_ITAH(15); BZ_ITAH(16); BZ_ITAH(17); BZ_ITAH(18); BZ_ITAH(19); - BZ_ITAH(20); BZ_ITAH(21); BZ_ITAH(22); BZ_ITAH(23); BZ_ITAH(24); - BZ_ITAH(25); BZ_ITAH(26); BZ_ITAH(27); BZ_ITAH(28); BZ_ITAH(29); - BZ_ITAH(30); BZ_ITAH(31); BZ_ITAH(32); BZ_ITAH(33); BZ_ITAH(34); - BZ_ITAH(35); BZ_ITAH(36); BZ_ITAH(37); BZ_ITAH(38); BZ_ITAH(39); - BZ_ITAH(40); BZ_ITAH(41); BZ_ITAH(42); BZ_ITAH(43); BZ_ITAH(44); - BZ_ITAH(45); BZ_ITAH(46); BZ_ITAH(47); BZ_ITAH(48); BZ_ITAH(49); - -# undef BZ_ITAH - - } else { - /*--- slow version which correctly handles all situations ---*/ - for (i = gs; i <= ge; i++) { - bsW ( s, - s->len [s->selector[selCtr]] [mtfv[i]], - s->code [s->selector[selCtr]] [mtfv[i]] ); - } - } - - - gs = ge+1; - selCtr++; - } - AssertH( selCtr == nSelectors, 3007 ); - - if (s->verbosity >= 3) - VPrintf1( "codes %d\n", s->numZ-nBytes ); -} - - -/*---------------------------------------------------*/ -void BZ2_compressBlock ( EState* s, Bool is_last_block ) -{ - if (s->nblock > 0) { - - BZ_FINALISE_CRC ( s->blockCRC ); - s->combinedCRC = (s->combinedCRC << 1) | (s->combinedCRC >> 31); - s->combinedCRC ^= s->blockCRC; - if (s->blockNo > 1) s->numZ = 0; - - if (s->verbosity >= 2) - VPrintf4( " block %d: crc = 0x%08x, " - "combined CRC = 0x%08x, size = %d\n", - s->blockNo, s->blockCRC, s->combinedCRC, s->nblock ); - - BZ2_blockSort ( s ); - } - - s->zbits = (UChar*) (&((UChar*)s->arr2)[s->nblock]); - - /*-- If this is the first block, create the stream header. --*/ - if (s->blockNo == 1) { - BZ2_bsInitWrite ( s ); - bsPutUChar ( s, BZ_HDR_B ); - bsPutUChar ( s, BZ_HDR_Z ); - bsPutUChar ( s, BZ_HDR_h ); - bsPutUChar ( s, (UChar)(BZ_HDR_0 + s->blockSize100k) ); - } - - if (s->nblock > 0) { - - bsPutUChar ( s, 0x31 ); bsPutUChar ( s, 0x41 ); - bsPutUChar ( s, 0x59 ); bsPutUChar ( s, 0x26 ); - bsPutUChar ( s, 0x53 ); bsPutUChar ( s, 0x59 ); - - /*-- Now the block's CRC, so it is in a known place. --*/ - bsPutUInt32 ( s, s->blockCRC ); - - /*-- - Now a single bit indicating (non-)randomisation. - As of version 0.9.5, we use a better sorting algorithm - which makes randomisation unnecessary. So always set - the randomised bit to 'no'. Of course, the decoder - still needs to be able to handle randomised blocks - so as to maintain backwards compatibility with - older versions of bzip2. - --*/ - bsW(s,1,0); - - bsW ( s, 24, s->origPtr ); - generateMTFValues ( s ); - sendMTFValues ( s ); - } - - - /*-- If this is the last block, add the stream trailer. --*/ - if (is_last_block) { - - bsPutUChar ( s, 0x17 ); bsPutUChar ( s, 0x72 ); - bsPutUChar ( s, 0x45 ); bsPutUChar ( s, 0x38 ); - bsPutUChar ( s, 0x50 ); bsPutUChar ( s, 0x90 ); - bsPutUInt32 ( s, s->combinedCRC ); - if (s->verbosity >= 2) - VPrintf1( " final combined CRC = 0x%08x\n ", s->combinedCRC ); - bsFinishWrite ( s ); - } -} - - -/*-------------------------------------------------------------*/ -/*--- end compress.c ---*/ -/*-------------------------------------------------------------*/ diff --git a/contrib/bzip2/crctable.c b/contrib/bzip2/crctable.c deleted file mode 100644 index 215687b2c054..000000000000 --- a/contrib/bzip2/crctable.c +++ /dev/null @@ -1,104 +0,0 @@ - -/*-------------------------------------------------------------*/ -/*--- Table for doing CRCs ---*/ -/*--- crctable.c ---*/ -/*-------------------------------------------------------------*/ - -/* ------------------------------------------------------------------ - This file is part of bzip2/libbzip2, a program and library for - lossless, block-sorting data compression. - - bzip2/libbzip2 version 1.0.5 of 10 December 2007 - Copyright (C) 1996-2007 Julian Seward - - Please read the WARNING, DISCLAIMER and PATENTS sections in the - README file. - - This program is released under the terms of the license contained - in the file LICENSE. - ------------------------------------------------------------------ */ - - -#include "bzlib_private.h" - -/*-- - I think this is an implementation of the AUTODIN-II, - Ethernet & FDDI 32-bit CRC standard. Vaguely derived - from code by Rob Warnock, in Section 51 of the - comp.compression FAQ. ---*/ - -UInt32 BZ2_crc32Table[256] = { - - /*-- Ugly, innit? --*/ - - 0x00000000L, 0x04c11db7L, 0x09823b6eL, 0x0d4326d9L, - 0x130476dcL, 0x17c56b6bL, 0x1a864db2L, 0x1e475005L, - 0x2608edb8L, 0x22c9f00fL, 0x2f8ad6d6L, 0x2b4bcb61L, - 0x350c9b64L, 0x31cd86d3L, 0x3c8ea00aL, 0x384fbdbdL, - 0x4c11db70L, 0x48d0c6c7L, 0x4593e01eL, 0x4152fda9L, - 0x5f15adacL, 0x5bd4b01bL, 0x569796c2L, 0x52568b75L, - 0x6a1936c8L, 0x6ed82b7fL, 0x639b0da6L, 0x675a1011L, - 0x791d4014L, 0x7ddc5da3L, 0x709f7b7aL, 0x745e66cdL, - 0x9823b6e0L, 0x9ce2ab57L, 0x91a18d8eL, 0x95609039L, - 0x8b27c03cL, 0x8fe6dd8bL, 0x82a5fb52L, 0x8664e6e5L, - 0xbe2b5b58L, 0xbaea46efL, 0xb7a96036L, 0xb3687d81L, - 0xad2f2d84L, 0xa9ee3033L, 0xa4ad16eaL, 0xa06c0b5dL, - 0xd4326d90L, 0xd0f37027L, 0xddb056feL, 0xd9714b49L, - 0xc7361b4cL, 0xc3f706fbL, 0xceb42022L, 0xca753d95L, - 0xf23a8028L, 0xf6fb9d9fL, 0xfbb8bb46L, 0xff79a6f1L, - 0xe13ef6f4L, 0xe5ffeb43L, 0xe8bccd9aL, 0xec7dd02dL, - 0x34867077L, 0x30476dc0L, 0x3d044b19L, 0x39c556aeL, - 0x278206abL, 0x23431b1cL, 0x2e003dc5L, 0x2ac12072L, - 0x128e9dcfL, 0x164f8078L, 0x1b0ca6a1L, 0x1fcdbb16L, - 0x018aeb13L, 0x054bf6a4L, 0x0808d07dL, 0x0cc9cdcaL, - 0x7897ab07L, 0x7c56b6b0L, 0x71159069L, 0x75d48ddeL, - 0x6b93dddbL, 0x6f52c06cL, 0x6211e6b5L, 0x66d0fb02L, - 0x5e9f46bfL, 0x5a5e5b08L, 0x571d7dd1L, 0x53dc6066L, - 0x4d9b3063L, 0x495a2dd4L, 0x44190b0dL, 0x40d816baL, - 0xaca5c697L, 0xa864db20L, 0xa527fdf9L, 0xa1e6e04eL, - 0xbfa1b04bL, 0xbb60adfcL, 0xb6238b25L, 0xb2e29692L, - 0x8aad2b2fL, 0x8e6c3698L, 0x832f1041L, 0x87ee0df6L, - 0x99a95df3L, 0x9d684044L, 0x902b669dL, 0x94ea7b2aL, - 0xe0b41de7L, 0xe4750050L, 0xe9362689L, 0xedf73b3eL, - 0xf3b06b3bL, 0xf771768cL, 0xfa325055L, 0xfef34de2L, - 0xc6bcf05fL, 0xc27dede8L, 0xcf3ecb31L, 0xcbffd686L, - 0xd5b88683L, 0xd1799b34L, 0xdc3abdedL, 0xd8fba05aL, - 0x690ce0eeL, 0x6dcdfd59L, 0x608edb80L, 0x644fc637L, - 0x7a089632L, 0x7ec98b85L, 0x738aad5cL, 0x774bb0ebL, - 0x4f040d56L, 0x4bc510e1L, 0x46863638L, 0x42472b8fL, - 0x5c007b8aL, 0x58c1663dL, 0x558240e4L, 0x51435d53L, - 0x251d3b9eL, 0x21dc2629L, 0x2c9f00f0L, 0x285e1d47L, - 0x36194d42L, 0x32d850f5L, 0x3f9b762cL, 0x3b5a6b9bL, - 0x0315d626L, 0x07d4cb91L, 0x0a97ed48L, 0x0e56f0ffL, - 0x1011a0faL, 0x14d0bd4dL, 0x19939b94L, 0x1d528623L, - 0xf12f560eL, 0xf5ee4bb9L, 0xf8ad6d60L, 0xfc6c70d7L, - 0xe22b20d2L, 0xe6ea3d65L, 0xeba91bbcL, 0xef68060bL, - 0xd727bbb6L, 0xd3e6a601L, 0xdea580d8L, 0xda649d6fL, - 0xc423cd6aL, 0xc0e2d0ddL, 0xcda1f604L, 0xc960ebb3L, - 0xbd3e8d7eL, 0xb9ff90c9L, 0xb4bcb610L, 0xb07daba7L, - 0xae3afba2L, 0xaafbe615L, 0xa7b8c0ccL, 0xa379dd7bL, - 0x9b3660c6L, 0x9ff77d71L, 0x92b45ba8L, 0x9675461fL, - 0x8832161aL, 0x8cf30badL, 0x81b02d74L, 0x857130c3L, - 0x5d8a9099L, 0x594b8d2eL, 0x5408abf7L, 0x50c9b640L, - 0x4e8ee645L, 0x4a4ffbf2L, 0x470cdd2bL, 0x43cdc09cL, - 0x7b827d21L, 0x7f436096L, 0x7200464fL, 0x76c15bf8L, - 0x68860bfdL, 0x6c47164aL, 0x61043093L, 0x65c52d24L, - 0x119b4be9L, 0x155a565eL, 0x18197087L, 0x1cd86d30L, - 0x029f3d35L, 0x065e2082L, 0x0b1d065bL, 0x0fdc1becL, - 0x3793a651L, 0x3352bbe6L, 0x3e119d3fL, 0x3ad08088L, - 0x2497d08dL, 0x2056cd3aL, 0x2d15ebe3L, 0x29d4f654L, - 0xc5a92679L, 0xc1683bceL, 0xcc2b1d17L, 0xc8ea00a0L, - 0xd6ad50a5L, 0xd26c4d12L, 0xdf2f6bcbL, 0xdbee767cL, - 0xe3a1cbc1L, 0xe760d676L, 0xea23f0afL, 0xeee2ed18L, - 0xf0a5bd1dL, 0xf464a0aaL, 0xf9278673L, 0xfde69bc4L, - 0x89b8fd09L, 0x8d79e0beL, 0x803ac667L, 0x84fbdbd0L, - 0x9abc8bd5L, 0x9e7d9662L, 0x933eb0bbL, 0x97ffad0cL, - 0xafb010b1L, 0xab710d06L, 0xa6322bdfL, 0xa2f33668L, - 0xbcb4666dL, 0xb8757bdaL, 0xb5365d03L, 0xb1f740b4L -}; - - -/*-------------------------------------------------------------*/ -/*--- end crctable.c ---*/ -/*-------------------------------------------------------------*/ diff --git a/contrib/bzip2/decompress.c b/contrib/bzip2/decompress.c deleted file mode 100644 index bba5e0fa36dc..000000000000 --- a/contrib/bzip2/decompress.c +++ /dev/null @@ -1,626 +0,0 @@ - -/*-------------------------------------------------------------*/ -/*--- Decompression machinery ---*/ -/*--- decompress.c ---*/ -/*-------------------------------------------------------------*/ - -/* ------------------------------------------------------------------ - This file is part of bzip2/libbzip2, a program and library for - lossless, block-sorting data compression. - - bzip2/libbzip2 version 1.0.5 of 10 December 2007 - Copyright (C) 1996-2007 Julian Seward - - Please read the WARNING, DISCLAIMER and PATENTS sections in the - README file. - - This program is released under the terms of the license contained - in the file LICENSE. - ------------------------------------------------------------------ */ - - -#include "bzlib_private.h" - - -/*---------------------------------------------------*/ -static -void makeMaps_d ( DState* s ) -{ - Int32 i; - s->nInUse = 0; - for (i = 0; i < 256; i++) - if (s->inUse[i]) { - s->seqToUnseq[s->nInUse] = i; - s->nInUse++; - } -} - - -/*---------------------------------------------------*/ -#define RETURN(rrr) \ - { retVal = rrr; goto save_state_and_return; }; - -#define GET_BITS(lll,vvv,nnn) \ - case lll: s->state = lll; \ - while (True) { \ - if (s->bsLive >= nnn) { \ - UInt32 v; \ - v = (s->bsBuff >> \ - (s->bsLive-nnn)) & ((1 << nnn)-1); \ - s->bsLive -= nnn; \ - vvv = v; \ - break; \ - } \ - if (s->strm->avail_in == 0) RETURN(BZ_OK); \ - s->bsBuff \ - = (s->bsBuff << 8) | \ - ((UInt32) \ - (*((UChar*)(s->strm->next_in)))); \ - s->bsLive += 8; \ - s->strm->next_in++; \ - s->strm->avail_in--; \ - s->strm->total_in_lo32++; \ - if (s->strm->total_in_lo32 == 0) \ - s->strm->total_in_hi32++; \ - } - -#define GET_UCHAR(lll,uuu) \ - GET_BITS(lll,uuu,8) - -#define GET_BIT(lll,uuu) \ - GET_BITS(lll,uuu,1) - -/*---------------------------------------------------*/ -#define GET_MTF_VAL(label1,label2,lval) \ -{ \ - if (groupPos == 0) { \ - groupNo++; \ - if (groupNo >= nSelectors) \ - RETURN(BZ_DATA_ERROR); \ - groupPos = BZ_G_SIZE; \ - gSel = s->selector[groupNo]; \ - gMinlen = s->minLens[gSel]; \ - gLimit = &(s->limit[gSel][0]); \ - gPerm = &(s->perm[gSel][0]); \ - gBase = &(s->base[gSel][0]); \ - } \ - groupPos--; \ - zn = gMinlen; \ - GET_BITS(label1, zvec, zn); \ - while (1) { \ - if (zn > 20 /* the longest code */) \ - RETURN(BZ_DATA_ERROR); \ - if (zvec <= gLimit[zn]) break; \ - zn++; \ - GET_BIT(label2, zj); \ - zvec = (zvec << 1) | zj; \ - }; \ - if (zvec - gBase[zn] < 0 \ - || zvec - gBase[zn] >= BZ_MAX_ALPHA_SIZE) \ - RETURN(BZ_DATA_ERROR); \ - lval = gPerm[zvec - gBase[zn]]; \ -} - - -/*---------------------------------------------------*/ -Int32 BZ2_decompress ( DState* s ) -{ - UChar uc; - Int32 retVal; - Int32 minLen, maxLen; - bz_stream* strm = s->strm; - - /* stuff that needs to be saved/restored */ - Int32 i; - Int32 j; - Int32 t; - Int32 alphaSize; - Int32 nGroups; - Int32 nSelectors; - Int32 EOB; - Int32 groupNo; - Int32 groupPos; - Int32 nextSym; - Int32 nblockMAX; - Int32 nblock; - Int32 es; - Int32 N; - Int32 curr; - Int32 zt; - Int32 zn; - Int32 zvec; - Int32 zj; - Int32 gSel; - Int32 gMinlen; - Int32* gLimit; - Int32* gBase; - Int32* gPerm; - - if (s->state == BZ_X_MAGIC_1) { - /*initialise the save area*/ - s->save_i = 0; - s->save_j = 0; - s->save_t = 0; - s->save_alphaSize = 0; - s->save_nGroups = 0; - s->save_nSelectors = 0; - s->save_EOB = 0; - s->save_groupNo = 0; - s->save_groupPos = 0; - s->save_nextSym = 0; - s->save_nblockMAX = 0; - s->save_nblock = 0; - s->save_es = 0; - s->save_N = 0; - s->save_curr = 0; - s->save_zt = 0; - s->save_zn = 0; - s->save_zvec = 0; - s->save_zj = 0; - s->save_gSel = 0; - s->save_gMinlen = 0; - s->save_gLimit = NULL; - s->save_gBase = NULL; - s->save_gPerm = NULL; - } - - /*restore from the save area*/ - i = s->save_i; - j = s->save_j; - t = s->save_t; - alphaSize = s->save_alphaSize; - nGroups = s->save_nGroups; - nSelectors = s->save_nSelectors; - EOB = s->save_EOB; - groupNo = s->save_groupNo; - groupPos = s->save_groupPos; - nextSym = s->save_nextSym; - nblockMAX = s->save_nblockMAX; - nblock = s->save_nblock; - es = s->save_es; - N = s->save_N; - curr = s->save_curr; - zt = s->save_zt; - zn = s->save_zn; - zvec = s->save_zvec; - zj = s->save_zj; - gSel = s->save_gSel; - gMinlen = s->save_gMinlen; - gLimit = s->save_gLimit; - gBase = s->save_gBase; - gPerm = s->save_gPerm; - - retVal = BZ_OK; - - switch (s->state) { - - GET_UCHAR(BZ_X_MAGIC_1, uc); - if (uc != BZ_HDR_B) RETURN(BZ_DATA_ERROR_MAGIC); - - GET_UCHAR(BZ_X_MAGIC_2, uc); - if (uc != BZ_HDR_Z) RETURN(BZ_DATA_ERROR_MAGIC); - - GET_UCHAR(BZ_X_MAGIC_3, uc) - if (uc != BZ_HDR_h) RETURN(BZ_DATA_ERROR_MAGIC); - - GET_BITS(BZ_X_MAGIC_4, s->blockSize100k, 8) - if (s->blockSize100k < (BZ_HDR_0 + 1) || - s->blockSize100k > (BZ_HDR_0 + 9)) RETURN(BZ_DATA_ERROR_MAGIC); - s->blockSize100k -= BZ_HDR_0; - - if (s->smallDecompress) { - s->ll16 = BZALLOC( s->blockSize100k * 100000 * sizeof(UInt16) ); - s->ll4 = BZALLOC( - ((1 + s->blockSize100k * 100000) >> 1) * sizeof(UChar) - ); - if (s->ll16 == NULL || s->ll4 == NULL) RETURN(BZ_MEM_ERROR); - } else { - s->tt = BZALLOC( s->blockSize100k * 100000 * sizeof(Int32) ); - if (s->tt == NULL) RETURN(BZ_MEM_ERROR); - } - - GET_UCHAR(BZ_X_BLKHDR_1, uc); - - if (uc == 0x17) goto endhdr_2; - if (uc != 0x31) RETURN(BZ_DATA_ERROR); - GET_UCHAR(BZ_X_BLKHDR_2, uc); - if (uc != 0x41) RETURN(BZ_DATA_ERROR); - GET_UCHAR(BZ_X_BLKHDR_3, uc); - if (uc != 0x59) RETURN(BZ_DATA_ERROR); - GET_UCHAR(BZ_X_BLKHDR_4, uc); - if (uc != 0x26) RETURN(BZ_DATA_ERROR); - GET_UCHAR(BZ_X_BLKHDR_5, uc); - if (uc != 0x53) RETURN(BZ_DATA_ERROR); - GET_UCHAR(BZ_X_BLKHDR_6, uc); - if (uc != 0x59) RETURN(BZ_DATA_ERROR); - - s->currBlockNo++; - if (s->verbosity >= 2) - VPrintf1 ( "\n [%d: huff+mtf ", s->currBlockNo ); - - s->storedBlockCRC = 0; - GET_UCHAR(BZ_X_BCRC_1, uc); - s->storedBlockCRC = (s->storedBlockCRC << 8) | ((UInt32)uc); - GET_UCHAR(BZ_X_BCRC_2, uc); - s->storedBlockCRC = (s->storedBlockCRC << 8) | ((UInt32)uc); - GET_UCHAR(BZ_X_BCRC_3, uc); - s->storedBlockCRC = (s->storedBlockCRC << 8) | ((UInt32)uc); - GET_UCHAR(BZ_X_BCRC_4, uc); - s->storedBlockCRC = (s->storedBlockCRC << 8) | ((UInt32)uc); - - GET_BITS(BZ_X_RANDBIT, s->blockRandomised, 1); - - s->origPtr = 0; - GET_UCHAR(BZ_X_ORIGPTR_1, uc); - s->origPtr = (s->origPtr << 8) | ((Int32)uc); - GET_UCHAR(BZ_X_ORIGPTR_2, uc); - s->origPtr = (s->origPtr << 8) | ((Int32)uc); - GET_UCHAR(BZ_X_ORIGPTR_3, uc); - s->origPtr = (s->origPtr << 8) | ((Int32)uc); - - if (s->origPtr < 0) - RETURN(BZ_DATA_ERROR); - if (s->origPtr > 10 + 100000*s->blockSize100k) - RETURN(BZ_DATA_ERROR); - - /*--- Receive the mapping table ---*/ - for (i = 0; i < 16; i++) { - GET_BIT(BZ_X_MAPPING_1, uc); - if (uc == 1) - s->inUse16[i] = True; else - s->inUse16[i] = False; - } - - for (i = 0; i < 256; i++) s->inUse[i] = False; - - for (i = 0; i < 16; i++) - if (s->inUse16[i]) - for (j = 0; j < 16; j++) { - GET_BIT(BZ_X_MAPPING_2, uc); - if (uc == 1) s->inUse[i * 16 + j] = True; - } - makeMaps_d ( s ); - if (s->nInUse == 0) RETURN(BZ_DATA_ERROR); - alphaSize = s->nInUse+2; - - /*--- Now the selectors ---*/ - GET_BITS(BZ_X_SELECTOR_1, nGroups, 3); - if (nGroups < 2 || nGroups > 6) RETURN(BZ_DATA_ERROR); - GET_BITS(BZ_X_SELECTOR_2, nSelectors, 15); - if (nSelectors < 1) RETURN(BZ_DATA_ERROR); - for (i = 0; i < nSelectors; i++) { - j = 0; - while (True) { - GET_BIT(BZ_X_SELECTOR_3, uc); - if (uc == 0) break; - j++; - if (j >= nGroups) RETURN(BZ_DATA_ERROR); - } - s->selectorMtf[i] = j; - } - - /*--- Undo the MTF values for the selectors. ---*/ - { - UChar pos[BZ_N_GROUPS], tmp, v; - for (v = 0; v < nGroups; v++) pos[v] = v; - - for (i = 0; i < nSelectors; i++) { - v = s->selectorMtf[i]; - tmp = pos[v]; - while (v > 0) { pos[v] = pos[v-1]; v--; } - pos[0] = tmp; - s->selector[i] = tmp; - } - } - - /*--- Now the coding tables ---*/ - for (t = 0; t < nGroups; t++) { - GET_BITS(BZ_X_CODING_1, curr, 5); - for (i = 0; i < alphaSize; i++) { - while (True) { - if (curr < 1 || curr > 20) RETURN(BZ_DATA_ERROR); - GET_BIT(BZ_X_CODING_2, uc); - if (uc == 0) break; - GET_BIT(BZ_X_CODING_3, uc); - if (uc == 0) curr++; else curr--; - } - s->len[t][i] = curr; - } - } - - /*--- Create the Huffman decoding tables ---*/ - for (t = 0; t < nGroups; t++) { - minLen = 32; - maxLen = 0; - for (i = 0; i < alphaSize; i++) { - if (s->len[t][i] > maxLen) maxLen = s->len[t][i]; - if (s->len[t][i] < minLen) minLen = s->len[t][i]; - } - BZ2_hbCreateDecodeTables ( - &(s->limit[t][0]), - &(s->base[t][0]), - &(s->perm[t][0]), - &(s->len[t][0]), - minLen, maxLen, alphaSize - ); - s->minLens[t] = minLen; - } - - /*--- Now the MTF values ---*/ - - EOB = s->nInUse+1; - nblockMAX = 100000 * s->blockSize100k; - groupNo = -1; - groupPos = 0; - - for (i = 0; i <= 255; i++) s->unzftab[i] = 0; - - /*-- MTF init --*/ - { - Int32 ii, jj, kk; - kk = MTFA_SIZE-1; - for (ii = 256 / MTFL_SIZE - 1; ii >= 0; ii--) { - for (jj = MTFL_SIZE-1; jj >= 0; jj--) { - s->mtfa[kk] = (UChar)(ii * MTFL_SIZE + jj); - kk--; - } - s->mtfbase[ii] = kk + 1; - } - } - /*-- end MTF init --*/ - - nblock = 0; - GET_MTF_VAL(BZ_X_MTF_1, BZ_X_MTF_2, nextSym); - - while (True) { - - if (nextSym == EOB) break; - - if (nextSym == BZ_RUNA || nextSym == BZ_RUNB) { - - es = -1; - N = 1; - do { - if (nextSym == BZ_RUNA) es = es + (0+1) * N; else - if (nextSym == BZ_RUNB) es = es + (1+1) * N; - N = N * 2; - GET_MTF_VAL(BZ_X_MTF_3, BZ_X_MTF_4, nextSym); - } - while (nextSym == BZ_RUNA || nextSym == BZ_RUNB); - - es++; - uc = s->seqToUnseq[ s->mtfa[s->mtfbase[0]] ]; - s->unzftab[uc] += es; - - if (s->smallDecompress) - while (es > 0) { - if (nblock >= nblockMAX) RETURN(BZ_DATA_ERROR); - s->ll16[nblock] = (UInt16)uc; - nblock++; - es--; - } - else - while (es > 0) { - if (nblock >= nblockMAX) RETURN(BZ_DATA_ERROR); - s->tt[nblock] = (UInt32)uc; - nblock++; - es--; - }; - - continue; - - } else { - - if (nblock >= nblockMAX) RETURN(BZ_DATA_ERROR); - - /*-- uc = MTF ( nextSym-1 ) --*/ - { - Int32 ii, jj, kk, pp, lno, off; - UInt32 nn; - nn = (UInt32)(nextSym - 1); - - if (nn < MTFL_SIZE) { - /* avoid general-case expense */ - pp = s->mtfbase[0]; - uc = s->mtfa[pp+nn]; - while (nn > 3) { - Int32 z = pp+nn; - s->mtfa[(z) ] = s->mtfa[(z)-1]; - s->mtfa[(z)-1] = s->mtfa[(z)-2]; - s->mtfa[(z)-2] = s->mtfa[(z)-3]; - s->mtfa[(z)-3] = s->mtfa[(z)-4]; - nn -= 4; - } - while (nn > 0) { - s->mtfa[(pp+nn)] = s->mtfa[(pp+nn)-1]; nn--; - }; - s->mtfa[pp] = uc; - } else { - /* general case */ - lno = nn / MTFL_SIZE; - off = nn % MTFL_SIZE; - pp = s->mtfbase[lno] + off; - uc = s->mtfa[pp]; - while (pp > s->mtfbase[lno]) { - s->mtfa[pp] = s->mtfa[pp-1]; pp--; - }; - s->mtfbase[lno]++; - while (lno > 0) { - s->mtfbase[lno]--; - s->mtfa[s->mtfbase[lno]] - = s->mtfa[s->mtfbase[lno-1] + MTFL_SIZE - 1]; - lno--; - } - s->mtfbase[0]--; - s->mtfa[s->mtfbase[0]] = uc; - if (s->mtfbase[0] == 0) { - kk = MTFA_SIZE-1; - for (ii = 256 / MTFL_SIZE-1; ii >= 0; ii--) { - for (jj = MTFL_SIZE-1; jj >= 0; jj--) { - s->mtfa[kk] = s->mtfa[s->mtfbase[ii] + jj]; - kk--; - } - s->mtfbase[ii] = kk + 1; - } - } - } - } - /*-- end uc = MTF ( nextSym-1 ) --*/ - - s->unzftab[s->seqToUnseq[uc]]++; - if (s->smallDecompress) - s->ll16[nblock] = (UInt16)(s->seqToUnseq[uc]); else - s->tt[nblock] = (UInt32)(s->seqToUnseq[uc]); - nblock++; - - GET_MTF_VAL(BZ_X_MTF_5, BZ_X_MTF_6, nextSym); - continue; - } - } - - /* Now we know what nblock is, we can do a better sanity - check on s->origPtr. - */ - if (s->origPtr < 0 || s->origPtr >= nblock) - RETURN(BZ_DATA_ERROR); - - /*-- Set up cftab to facilitate generation of T^(-1) --*/ - s->cftab[0] = 0; - for (i = 1; i <= 256; i++) s->cftab[i] = s->unzftab[i-1]; - for (i = 1; i <= 256; i++) s->cftab[i] += s->cftab[i-1]; - for (i = 0; i <= 256; i++) { - if (s->cftab[i] < 0 || s->cftab[i] > nblock) { - /* s->cftab[i] can legitimately be == nblock */ - RETURN(BZ_DATA_ERROR); - } - } - - s->state_out_len = 0; - s->state_out_ch = 0; - BZ_INITIALISE_CRC ( s->calculatedBlockCRC ); - s->state = BZ_X_OUTPUT; - if (s->verbosity >= 2) VPrintf0 ( "rt+rld" ); - - if (s->smallDecompress) { - - /*-- Make a copy of cftab, used in generation of T --*/ - for (i = 0; i <= 256; i++) s->cftabCopy[i] = s->cftab[i]; - - /*-- compute the T vector --*/ - for (i = 0; i < nblock; i++) { - uc = (UChar)(s->ll16[i]); - SET_LL(i, s->cftabCopy[uc]); - s->cftabCopy[uc]++; - } - - /*-- Compute T^(-1) by pointer reversal on T --*/ - i = s->origPtr; - j = GET_LL(i); - do { - Int32 tmp = GET_LL(j); - SET_LL(j, i); - i = j; - j = tmp; - } - while (i != s->origPtr); - - s->tPos = s->origPtr; - s->nblock_used = 0; - if (s->blockRandomised) { - BZ_RAND_INIT_MASK; - BZ_GET_SMALL(s->k0); s->nblock_used++; - BZ_RAND_UPD_MASK; s->k0 ^= BZ_RAND_MASK; - } else { - BZ_GET_SMALL(s->k0); s->nblock_used++; - } - - } else { - - /*-- compute the T^(-1) vector --*/ - for (i = 0; i < nblock; i++) { - uc = (UChar)(s->tt[i] & 0xff); - s->tt[s->cftab[uc]] |= (i << 8); - s->cftab[uc]++; - } - - s->tPos = s->tt[s->origPtr] >> 8; - s->nblock_used = 0; - if (s->blockRandomised) { - BZ_RAND_INIT_MASK; - BZ_GET_FAST(s->k0); s->nblock_used++; - BZ_RAND_UPD_MASK; s->k0 ^= BZ_RAND_MASK; - } else { - BZ_GET_FAST(s->k0); s->nblock_used++; - } - - } - - RETURN(BZ_OK); - - - - endhdr_2: - - GET_UCHAR(BZ_X_ENDHDR_2, uc); - if (uc != 0x72) RETURN(BZ_DATA_ERROR); - GET_UCHAR(BZ_X_ENDHDR_3, uc); - if (uc != 0x45) RETURN(BZ_DATA_ERROR); - GET_UCHAR(BZ_X_ENDHDR_4, uc); - if (uc != 0x38) RETURN(BZ_DATA_ERROR); - GET_UCHAR(BZ_X_ENDHDR_5, uc); - if (uc != 0x50) RETURN(BZ_DATA_ERROR); - GET_UCHAR(BZ_X_ENDHDR_6, uc); - if (uc != 0x90) RETURN(BZ_DATA_ERROR); - - s->storedCombinedCRC = 0; - GET_UCHAR(BZ_X_CCRC_1, uc); - s->storedCombinedCRC = (s->storedCombinedCRC << 8) | ((UInt32)uc); - GET_UCHAR(BZ_X_CCRC_2, uc); - s->storedCombinedCRC = (s->storedCombinedCRC << 8) | ((UInt32)uc); - GET_UCHAR(BZ_X_CCRC_3, uc); - s->storedCombinedCRC = (s->storedCombinedCRC << 8) | ((UInt32)uc); - GET_UCHAR(BZ_X_CCRC_4, uc); - s->storedCombinedCRC = (s->storedCombinedCRC << 8) | ((UInt32)uc); - - s->state = BZ_X_IDLE; - RETURN(BZ_STREAM_END); - - default: AssertH ( False, 4001 ); - } - - AssertH ( False, 4002 ); - - save_state_and_return: - - s->save_i = i; - s->save_j = j; - s->save_t = t; - s->save_alphaSize = alphaSize; - s->save_nGroups = nGroups; - s->save_nSelectors = nSelectors; - s->save_EOB = EOB; - s->save_groupNo = groupNo; - s->save_groupPos = groupPos; - s->save_nextSym = nextSym; - s->save_nblockMAX = nblockMAX; - s->save_nblock = nblock; - s->save_es = es; - s->save_N = N; - s->save_curr = curr; - s->save_zt = zt; - s->save_zn = zn; - s->save_zvec = zvec; - s->save_zj = zj; - s->save_gSel = gSel; - s->save_gMinlen = gMinlen; - s->save_gLimit = gLimit; - s->save_gBase = gBase; - s->save_gPerm = gPerm; - - return retVal; -} - - -/*-------------------------------------------------------------*/ -/*--- end decompress.c ---*/ -/*-------------------------------------------------------------*/ diff --git a/contrib/bzip2/dlltest.c b/contrib/bzip2/dlltest.c deleted file mode 100644 index 03fa14620e5f..000000000000 --- a/contrib/bzip2/dlltest.c +++ /dev/null @@ -1,175 +0,0 @@ -/* - minibz2 - libbz2.dll test program. - by Yoshioka Tsuneo (tsuneo@rr.iij4u.or.jp) - This file is Public Domain. Welcome any email to me. - - usage: minibz2 [-d] [-{1,2,..9}] [[srcfilename] destfilename] -*/ - -#define BZ_IMPORT -#include -#include -#include "bzlib.h" -#ifdef _WIN32 -#include -#endif - - -#ifdef _WIN32 - -#define BZ2_LIBNAME "libbz2-1.0.2.DLL" - -#include -static int BZ2DLLLoaded = 0; -static HINSTANCE BZ2DLLhLib; -int BZ2DLLLoadLibrary(void) -{ - HINSTANCE hLib; - - if(BZ2DLLLoaded==1){return 0;} - hLib=LoadLibrary(BZ2_LIBNAME); - if(hLib == NULL){ - fprintf(stderr,"Can't load %s\n",BZ2_LIBNAME); - return -1; - } - BZ2_bzlibVersion=GetProcAddress(hLib,"BZ2_bzlibVersion"); - BZ2_bzopen=GetProcAddress(hLib,"BZ2_bzopen"); - BZ2_bzdopen=GetProcAddress(hLib,"BZ2_bzdopen"); - BZ2_bzread=GetProcAddress(hLib,"BZ2_bzread"); - BZ2_bzwrite=GetProcAddress(hLib,"BZ2_bzwrite"); - BZ2_bzflush=GetProcAddress(hLib,"BZ2_bzflush"); - BZ2_bzclose=GetProcAddress(hLib,"BZ2_bzclose"); - BZ2_bzerror=GetProcAddress(hLib,"BZ2_bzerror"); - - if (!BZ2_bzlibVersion || !BZ2_bzopen || !BZ2_bzdopen - || !BZ2_bzread || !BZ2_bzwrite || !BZ2_bzflush - || !BZ2_bzclose || !BZ2_bzerror) { - fprintf(stderr,"GetProcAddress failed.\n"); - return -1; - } - BZ2DLLLoaded=1; - BZ2DLLhLib=hLib; - return 0; - -} -int BZ2DLLFreeLibrary(void) -{ - if(BZ2DLLLoaded==0){return 0;} - FreeLibrary(BZ2DLLhLib); - BZ2DLLLoaded=0; -} -#endif /* WIN32 */ - -void usage(void) -{ - puts("usage: minibz2 [-d] [-{1,2,..9}] [[srcfilename] destfilename]"); -} - -int main(int argc,char *argv[]) -{ - int decompress = 0; - int level = 9; - char *fn_r = NULL; - char *fn_w = NULL; - -#ifdef _WIN32 - if(BZ2DLLLoadLibrary()<0){ - fprintf(stderr,"Loading of %s failed. Giving up.\n", BZ2_LIBNAME); - exit(1); - } - printf("Loading of %s succeeded. Library version is %s.\n", - BZ2_LIBNAME, BZ2_bzlibVersion() ); -#endif - while(++argv,--argc){ - if(**argv =='-' || **argv=='/'){ - char *p; - - for(p=*argv+1;*p;p++){ - if(*p=='d'){ - decompress = 1; - }else if('1'<=*p && *p<='9'){ - level = *p - '0'; - }else{ - usage(); - exit(1); - } - } - }else{ - break; - } - } - if(argc>=1){ - fn_r = *argv; - argc--;argv++; - }else{ - fn_r = NULL; - } - if(argc>=1){ - fn_w = *argv; - argc--;argv++; - }else{ - fn_w = NULL; - } - { - int len; - char buff[0x1000]; - char mode[10]; - - if(decompress){ - BZFILE *BZ2fp_r = NULL; - FILE *fp_w = NULL; - - if(fn_w){ - if((fp_w = fopen(fn_w,"wb"))==NULL){ - printf("can't open [%s]\n",fn_w); - perror("reason:"); - exit(1); - } - }else{ - fp_w = stdout; - } - if((fn_r == NULL && (BZ2fp_r = BZ2_bzdopen(fileno(stdin),"rb"))==NULL) - || (fn_r != NULL && (BZ2fp_r = BZ2_bzopen(fn_r,"rb"))==NULL)){ - printf("can't bz2openstream\n"); - exit(1); - } - while((len=BZ2_bzread(BZ2fp_r,buff,0x1000))>0){ - fwrite(buff,1,len,fp_w); - } - BZ2_bzclose(BZ2fp_r); - if(fp_w != stdout) fclose(fp_w); - }else{ - BZFILE *BZ2fp_w = NULL; - FILE *fp_r = NULL; - - if(fn_r){ - if((fp_r = fopen(fn_r,"rb"))==NULL){ - printf("can't open [%s]\n",fn_r); - perror("reason:"); - exit(1); - } - }else{ - fp_r = stdin; - } - mode[0]='w'; - mode[1] = '0' + level; - mode[2] = '\0'; - - if((fn_w == NULL && (BZ2fp_w = BZ2_bzdopen(fileno(stdout),mode))==NULL) - || (fn_w !=NULL && (BZ2fp_w = BZ2_bzopen(fn_w,mode))==NULL)){ - printf("can't bz2openstream\n"); - exit(1); - } - while((len=fread(buff,1,0x1000,fp_r))>0){ - BZ2_bzwrite(BZ2fp_w,buff,len); - } - BZ2_bzclose(BZ2fp_w); - if(fp_r!=stdin)fclose(fp_r); - } - } -#ifdef _WIN32 - BZ2DLLFreeLibrary(); -#endif - return 0; -} diff --git a/contrib/bzip2/huffman.c b/contrib/bzip2/huffman.c deleted file mode 100644 index 87e79e38af0f..000000000000 --- a/contrib/bzip2/huffman.c +++ /dev/null @@ -1,205 +0,0 @@ - -/*-------------------------------------------------------------*/ -/*--- Huffman coding low-level stuff ---*/ -/*--- huffman.c ---*/ -/*-------------------------------------------------------------*/ - -/* ------------------------------------------------------------------ - This file is part of bzip2/libbzip2, a program and library for - lossless, block-sorting data compression. - - bzip2/libbzip2 version 1.0.5 of 10 December 2007 - Copyright (C) 1996-2007 Julian Seward - - Please read the WARNING, DISCLAIMER and PATENTS sections in the - README file. - - This program is released under the terms of the license contained - in the file LICENSE. - ------------------------------------------------------------------ */ - - -#include "bzlib_private.h" - -/*---------------------------------------------------*/ -#define WEIGHTOF(zz0) ((zz0) & 0xffffff00) -#define DEPTHOF(zz1) ((zz1) & 0x000000ff) -#define MYMAX(zz2,zz3) ((zz2) > (zz3) ? (zz2) : (zz3)) - -#define ADDWEIGHTS(zw1,zw2) \ - (WEIGHTOF(zw1)+WEIGHTOF(zw2)) | \ - (1 + MYMAX(DEPTHOF(zw1),DEPTHOF(zw2))) - -#define UPHEAP(z) \ -{ \ - Int32 zz, tmp; \ - zz = z; tmp = heap[zz]; \ - while (weight[tmp] < weight[heap[zz >> 1]]) { \ - heap[zz] = heap[zz >> 1]; \ - zz >>= 1; \ - } \ - heap[zz] = tmp; \ -} - -#define DOWNHEAP(z) \ -{ \ - Int32 zz, yy, tmp; \ - zz = z; tmp = heap[zz]; \ - while (True) { \ - yy = zz << 1; \ - if (yy > nHeap) break; \ - if (yy < nHeap && \ - weight[heap[yy+1]] < weight[heap[yy]]) \ - yy++; \ - if (weight[tmp] < weight[heap[yy]]) break; \ - heap[zz] = heap[yy]; \ - zz = yy; \ - } \ - heap[zz] = tmp; \ -} - - -/*---------------------------------------------------*/ -void BZ2_hbMakeCodeLengths ( UChar *len, - Int32 *freq, - Int32 alphaSize, - Int32 maxLen ) -{ - /*-- - Nodes and heap entries run from 1. Entry 0 - for both the heap and nodes is a sentinel. - --*/ - Int32 nNodes, nHeap, n1, n2, i, j, k; - Bool tooLong; - - Int32 heap [ BZ_MAX_ALPHA_SIZE + 2 ]; - Int32 weight [ BZ_MAX_ALPHA_SIZE * 2 ]; - Int32 parent [ BZ_MAX_ALPHA_SIZE * 2 ]; - - for (i = 0; i < alphaSize; i++) - weight[i+1] = (freq[i] == 0 ? 1 : freq[i]) << 8; - - while (True) { - - nNodes = alphaSize; - nHeap = 0; - - heap[0] = 0; - weight[0] = 0; - parent[0] = -2; - - for (i = 1; i <= alphaSize; i++) { - parent[i] = -1; - nHeap++; - heap[nHeap] = i; - UPHEAP(nHeap); - } - - AssertH( nHeap < (BZ_MAX_ALPHA_SIZE+2), 2001 ); - - while (nHeap > 1) { - n1 = heap[1]; heap[1] = heap[nHeap]; nHeap--; DOWNHEAP(1); - n2 = heap[1]; heap[1] = heap[nHeap]; nHeap--; DOWNHEAP(1); - nNodes++; - parent[n1] = parent[n2] = nNodes; - weight[nNodes] = ADDWEIGHTS(weight[n1], weight[n2]); - parent[nNodes] = -1; - nHeap++; - heap[nHeap] = nNodes; - UPHEAP(nHeap); - } - - AssertH( nNodes < (BZ_MAX_ALPHA_SIZE * 2), 2002 ); - - tooLong = False; - for (i = 1; i <= alphaSize; i++) { - j = 0; - k = i; - while (parent[k] >= 0) { k = parent[k]; j++; } - len[i-1] = j; - if (j > maxLen) tooLong = True; - } - - if (! tooLong) break; - - /* 17 Oct 04: keep-going condition for the following loop used - to be 'i < alphaSize', which missed the last element, - theoretically leading to the possibility of the compressor - looping. However, this count-scaling step is only needed if - one of the generated Huffman code words is longer than - maxLen, which up to and including version 1.0.2 was 20 bits, - which is extremely unlikely. In version 1.0.3 maxLen was - changed to 17 bits, which has minimal effect on compression - ratio, but does mean this scaling step is used from time to - time, enough to verify that it works. - - This means that bzip2-1.0.3 and later will only produce - Huffman codes with a maximum length of 17 bits. However, in - order to preserve backwards compatibility with bitstreams - produced by versions pre-1.0.3, the decompressor must still - handle lengths of up to 20. */ - - for (i = 1; i <= alphaSize; i++) { - j = weight[i] >> 8; - j = 1 + (j / 2); - weight[i] = j << 8; - } - } -} - - -/*---------------------------------------------------*/ -void BZ2_hbAssignCodes ( Int32 *code, - UChar *length, - Int32 minLen, - Int32 maxLen, - Int32 alphaSize ) -{ - Int32 n, vec, i; - - vec = 0; - for (n = minLen; n <= maxLen; n++) { - for (i = 0; i < alphaSize; i++) - if (length[i] == n) { code[i] = vec; vec++; }; - vec <<= 1; - } -} - - -/*---------------------------------------------------*/ -void BZ2_hbCreateDecodeTables ( Int32 *limit, - Int32 *base, - Int32 *perm, - UChar *length, - Int32 minLen, - Int32 maxLen, - Int32 alphaSize ) -{ - Int32 pp, i, j, vec; - - pp = 0; - for (i = minLen; i <= maxLen; i++) - for (j = 0; j < alphaSize; j++) - if (length[j] == i) { perm[pp] = j; pp++; }; - - for (i = 0; i < BZ_MAX_CODE_LEN; i++) base[i] = 0; - for (i = 0; i < alphaSize; i++) base[length[i]+1]++; - - for (i = 1; i < BZ_MAX_CODE_LEN; i++) base[i] += base[i-1]; - - for (i = 0; i < BZ_MAX_CODE_LEN; i++) limit[i] = 0; - vec = 0; - - for (i = minLen; i <= maxLen; i++) { - vec += (base[i+1] - base[i]); - limit[i] = vec-1; - vec <<= 1; - } - for (i = minLen + 1; i <= maxLen; i++) - base[i] = ((limit[i-1] + 1) << 1) - base[i]; -} - - -/*-------------------------------------------------------------*/ -/*--- end huffman.c ---*/ -/*-------------------------------------------------------------*/ diff --git a/contrib/bzip2/libbz2.def b/contrib/bzip2/libbz2.def deleted file mode 100644 index 2dc0dd891dc6..000000000000 --- a/contrib/bzip2/libbz2.def +++ /dev/null @@ -1,27 +0,0 @@ -LIBRARY LIBBZ2 -DESCRIPTION "libbzip2: library for data compression" -EXPORTS - BZ2_bzCompressInit - BZ2_bzCompress - BZ2_bzCompressEnd - BZ2_bzDecompressInit - BZ2_bzDecompress - BZ2_bzDecompressEnd - BZ2_bzReadOpen - BZ2_bzReadClose - BZ2_bzReadGetUnused - BZ2_bzRead - BZ2_bzWriteOpen - BZ2_bzWrite - BZ2_bzWriteClose - BZ2_bzWriteClose64 - BZ2_bzBuffToBuffCompress - BZ2_bzBuffToBuffDecompress - BZ2_bzlibVersion - BZ2_bzopen - BZ2_bzdopen - BZ2_bzread - BZ2_bzwrite - BZ2_bzflush - BZ2_bzclose - BZ2_bzerror diff --git a/contrib/bzip2/makefile.msc b/contrib/bzip2/makefile.msc deleted file mode 100644 index 799a18a5f1a7..000000000000 --- a/contrib/bzip2/makefile.msc +++ /dev/null @@ -1,63 +0,0 @@ -# Makefile for Microsoft Visual C++ 6.0 -# usage: nmake -f makefile.msc -# K.M. Syring (syring@gsf.de) -# Fixed up by JRS for bzip2-0.9.5d release. - -CC=cl -CFLAGS= -DWIN32 -MD -Ox -D_FILE_OFFSET_BITS=64 -nologo - -OBJS= blocksort.obj \ - huffman.obj \ - crctable.obj \ - randtable.obj \ - compress.obj \ - decompress.obj \ - bzlib.obj - -all: lib bzip2 test - -bzip2: lib - $(CC) $(CFLAGS) -o bzip2 bzip2.c libbz2.lib setargv.obj - $(CC) $(CFLAGS) -o bzip2recover bzip2recover.c - -lib: $(OBJS) - lib /out:libbz2.lib $(OBJS) - -test: bzip2 - type words1 - .\\bzip2 -1 < sample1.ref > sample1.rb2 - .\\bzip2 -2 < sample2.ref > sample2.rb2 - .\\bzip2 -3 < sample3.ref > sample3.rb2 - .\\bzip2 -d < sample1.bz2 > sample1.tst - .\\bzip2 -d < sample2.bz2 > sample2.tst - .\\bzip2 -ds < sample3.bz2 > sample3.tst - @echo All six of the fc's should find no differences. - @echo If fc finds an error on sample3.bz2, this could be - @echo because WinZip's 'TAR file smart CR/LF conversion' - @echo is too clever for its own good. Disable this option. - @echo The correct size for sample3.ref is 120,244. If it - @echo is 150,251, WinZip has messed it up. - fc sample1.bz2 sample1.rb2 - fc sample2.bz2 sample2.rb2 - fc sample3.bz2 sample3.rb2 - fc sample1.tst sample1.ref - fc sample2.tst sample2.ref - fc sample3.tst sample3.ref - - - -clean: - del *.obj - del libbz2.lib - del bzip2.exe - del bzip2recover.exe - del sample1.rb2 - del sample2.rb2 - del sample3.rb2 - del sample1.tst - del sample2.tst - del sample3.tst - -.c.obj: - $(CC) $(CFLAGS) -c $*.c -o $*.obj - diff --git a/contrib/bzip2/randtable.c b/contrib/bzip2/randtable.c deleted file mode 100644 index 068b76367bcc..000000000000 --- a/contrib/bzip2/randtable.c +++ /dev/null @@ -1,84 +0,0 @@ - -/*-------------------------------------------------------------*/ -/*--- Table for randomising repetitive blocks ---*/ -/*--- randtable.c ---*/ -/*-------------------------------------------------------------*/ - -/* ------------------------------------------------------------------ - This file is part of bzip2/libbzip2, a program and library for - lossless, block-sorting data compression. - - bzip2/libbzip2 version 1.0.5 of 10 December 2007 - Copyright (C) 1996-2007 Julian Seward - - Please read the WARNING, DISCLAIMER and PATENTS sections in the - README file. - - This program is released under the terms of the license contained - in the file LICENSE. - ------------------------------------------------------------------ */ - - -#include "bzlib_private.h" - - -/*---------------------------------------------*/ -Int32 BZ2_rNums[512] = { - 619, 720, 127, 481, 931, 816, 813, 233, 566, 247, - 985, 724, 205, 454, 863, 491, 741, 242, 949, 214, - 733, 859, 335, 708, 621, 574, 73, 654, 730, 472, - 419, 436, 278, 496, 867, 210, 399, 680, 480, 51, - 878, 465, 811, 169, 869, 675, 611, 697, 867, 561, - 862, 687, 507, 283, 482, 129, 807, 591, 733, 623, - 150, 238, 59, 379, 684, 877, 625, 169, 643, 105, - 170, 607, 520, 932, 727, 476, 693, 425, 174, 647, - 73, 122, 335, 530, 442, 853, 695, 249, 445, 515, - 909, 545, 703, 919, 874, 474, 882, 500, 594, 612, - 641, 801, 220, 162, 819, 984, 589, 513, 495, 799, - 161, 604, 958, 533, 221, 400, 386, 867, 600, 782, - 382, 596, 414, 171, 516, 375, 682, 485, 911, 276, - 98, 553, 163, 354, 666, 933, 424, 341, 533, 870, - 227, 730, 475, 186, 263, 647, 537, 686, 600, 224, - 469, 68, 770, 919, 190, 373, 294, 822, 808, 206, - 184, 943, 795, 384, 383, 461, 404, 758, 839, 887, - 715, 67, 618, 276, 204, 918, 873, 777, 604, 560, - 951, 160, 578, 722, 79, 804, 96, 409, 713, 940, - 652, 934, 970, 447, 318, 353, 859, 672, 112, 785, - 645, 863, 803, 350, 139, 93, 354, 99, 820, 908, - 609, 772, 154, 274, 580, 184, 79, 626, 630, 742, - 653, 282, 762, 623, 680, 81, 927, 626, 789, 125, - 411, 521, 938, 300, 821, 78, 343, 175, 128, 250, - 170, 774, 972, 275, 999, 639, 495, 78, 352, 126, - 857, 956, 358, 619, 580, 124, 737, 594, 701, 612, - 669, 112, 134, 694, 363, 992, 809, 743, 168, 974, - 944, 375, 748, 52, 600, 747, 642, 182, 862, 81, - 344, 805, 988, 739, 511, 655, 814, 334, 249, 515, - 897, 955, 664, 981, 649, 113, 974, 459, 893, 228, - 433, 837, 553, 268, 926, 240, 102, 654, 459, 51, - 686, 754, 806, 760, 493, 403, 415, 394, 687, 700, - 946, 670, 656, 610, 738, 392, 760, 799, 887, 653, - 978, 321, 576, 617, 626, 502, 894, 679, 243, 440, - 680, 879, 194, 572, 640, 724, 926, 56, 204, 700, - 707, 151, 457, 449, 797, 195, 791, 558, 945, 679, - 297, 59, 87, 824, 713, 663, 412, 693, 342, 606, - 134, 108, 571, 364, 631, 212, 174, 643, 304, 329, - 343, 97, 430, 751, 497, 314, 983, 374, 822, 928, - 140, 206, 73, 263, 980, 736, 876, 478, 430, 305, - 170, 514, 364, 692, 829, 82, 855, 953, 676, 246, - 369, 970, 294, 750, 807, 827, 150, 790, 288, 923, - 804, 378, 215, 828, 592, 281, 565, 555, 710, 82, - 896, 831, 547, 261, 524, 462, 293, 465, 502, 56, - 661, 821, 976, 991, 658, 869, 905, 758, 745, 193, - 768, 550, 608, 933, 378, 286, 215, 979, 792, 961, - 61, 688, 793, 644, 986, 403, 106, 366, 905, 644, - 372, 567, 466, 434, 645, 210, 389, 550, 919, 135, - 780, 773, 635, 389, 707, 100, 626, 958, 165, 504, - 920, 176, 193, 713, 857, 265, 203, 50, 668, 108, - 645, 990, 626, 197, 510, 357, 358, 850, 858, 364, - 936, 638 -}; - - -/*-------------------------------------------------------------*/ -/*--- end randtable.c ---*/ -/*-------------------------------------------------------------*/ diff --git a/contrib/bzip2/sample1.bz2.uu b/contrib/bzip2/sample1.bz2.uu deleted file mode 100644 index 544568031af1..000000000000 --- a/contrib/bzip2/sample1.bz2.uu +++ /dev/null @@ -1,722 +0,0 @@ -begin 644 sample1.bz2 -M0EIH,3%!62936``^"5D```4[8=N[8K7,-JP,#+WT`WUMF`[!Z#H>Z]G#Z!`$ -M``&]F(!NO=V[[M9NCTWNY[8+SDJPX]LV]K.-S+;KAZ-ZL2V8*;.;77MW;VVY -M![U3J;CKVY> -M\YVVWMWO&V7L-Y[M$'&]!PCH&04`HUY\]VFG;-C"?8WPIWN^ONQOM?6^^^/1 -MO*SK10%$ADGQ7`:;'-UKT/24A0V\]MZ?7OC;Y];=[SO;W=U-O.57L]5/ -M=N>K8(O1\OO;P^M\^0LKXN=W6^`!YY0>;#);![[YOO7VNVSU#H^@*`Q5;8S' -MUIUUT((&@Z``&]M7#[83W@`6P'U0KW6XQ8:T%="V!09>]R3<%]5![-K&A-C` -M`"]C4^]W,$;9@)6UCTU="4TB!`$TTT`":!HT$P$TT&F09$PTT9#0"9,"8FFR -M4ST4\`*GY,3*>:%/3313\(T4_(:1Z8B9B:9/13::,4\B/(GJ;31IHF:-$84& -MIZ`@(($@!`D>A4]Z2>)ZC$8*;5,U/4_43U-J'J``&@#$T`-``>H`>HT::`&@ -M'J`````````#1D```TQ$$(")IJ8(;5--&DGH;4/29-(T,T&D>IF:IIIZFCTF -MGZIB&T33U/2,@-&GI,``"9,:$8AH9&3$80R8F`3333$T-`&C33$T&02:2(A` -M01H"3$IXD_3(:!JF]4\HTT]3TTTCR>BFC$/U(]3R@>HVH:::9&CU&F@_5&F0 -M>B::>H`-#0;4`!Z@/4T/4#0`]0>H>H:::8CTF@`(E(FA">DPFJG^FJ>U,)IH -MTD_0--39-$\B:GHT](]3U)@--,RFGI/4]3:*9/R3U,DVIX2'J;:1Z3TIZFT, -MRIO2-1XB>D]&C3U#330:`T:>IM)/4]/34TT)ZC1[13-,U$$B(0(!`"$\DP!- -M&43RI^FD]&IZ:IX-&)I3TG^JFQ,1/:DT\2>4-'HRF90/%/4&T-1M1^I-'I/4 -M>4/0TT8AJ'J9E--`TR:>4&3]34-,AH/4R>HVH:=\9D)$$ZM>S:PQRS9]&G5H -MU[-K:V(2/Y"8\C(Q)9!V$HB&:-'42&;`39!PD30DX(`'VXR!]S]4?EFN`3TR -MZI#2Y485N#3[NW+I^(*P8* -M+%6+"?N\S$"NN6K^!G2+PF?**'^9`UY!,:(7CH3J3[A6#WQZ4J-T5H'2G.&> -M-2=B7#IC:(I<#LF+;AA'-E`S4$.`0-1%;3`.JA(I(#(C(FAB`!=^50!=C)$: -MH"I;(BF^4A`6*AN8B7("'&P6M5@%N,HM`DI;!"0/Q)*,&`L!$0()&04("@A_ -MOV%D2$D5[-%(JQ108Q09(10D"1A(WT%.P>Q6B\E!>^K6O^R""3OW/_[ZS0'# -M4-22"H@",@XDJ31#1\`)/HDQN>')A%TJ]$V1+&-)*&>W?PP0?X?+7I+[+[VP -M3PC6GVWGC>+*F46#Z6^(-:L&)_:@J<*EMI^3EQ&(A^YY(&L#0Q8JL3K^4S]I -M#>_8,KJU:*E_@DB8.E4=-4ME5J(UBE%1&VPK5&,MA1506(BHQ+;+8(V*U610J -M+6*VHA4H*T?UR5$9@Q1JREI2L6L+:-**1+18I4JH*%L6I4%B4=X8F);0J -M5K1$48%92T;0:T4$9*Q&VR5@H)0MHB6+`:-%X,IE6@K2UH:$S/VUS+:N[1$1 -M$14RRB6MK4&,;8VE+%;:E%*E$1JVJM8I6*"4A&D4JMLJV86IBN$2X5:,LME& -M4M:U:WTY`PQ$:E11:J6V5;449+,+\U,1-62]1+/N;K$*VCQEF)RU3/\+6]?@ -M[X)#"F_D^[8!_T6KS/*A2S_2##C82P;;N0TM7XA(!X3^(([YDGIB5D`1#U]` -MZ?3G,`]G$@Y^6Y,_MO@S(;S-8F)M-B(&`-RB0J*L*D[ -MX2=IW3O.[H:?RO,DZ2(2-IU8"))B!1`EM"L`;8H12$%!&$@R`R`L(H`L@2H" -MR5@19%(L%)$C(H2*0K(L"02,"0)$)"2<[:WY?BIW:8'Q_`]W\82"<2#X(X38 -MTW)^-;\@+GF2)/(-P_R>>J:4:4E,.N)1M%VF%>$DEAF*Z&1TGC@])U7NFCU+ -MN>`[7?^W3>OO'<3HB]U2E#[5*?*_?.[/3N@K(B@OW%#YF82H^O80Z.&^PU"7 -MW?_R[Z6Q?@$YES!1'*,-Q:OO\]#N,$&6I9_/F;*6,T@9!,3_1(URE_OYGI_" -MY<5`;Z@-S2I$*GA,L]#XW4S2?!DU_O]QO_9AI!Y\>Y1!J>"31EX>WE4+!V$\ -M>613_ON\Q']NN^YSVZYS[UJ[O+#'=(J=:GX5$K*#,P97R/#:USLO6?(H@>/M -MWIF_9J'IG<$7^F$E]%@/WG=R&)]J%Q!C>'ZU#IS>Y'(F-W92NO[];">J.WPY -M>:CX^4,,2G](D8=DW.N`>)OM%+S&;1)4X:`R3_Q9%63GFS$DTD6#$0!!FTPT -M(C^`FFR:$.)W9]47GR3R96]+1^%[M'![K+?@<:(D`)`&09%9$0UJ0:1"D615 -MD0&D4D0H0&0$B,$)BY6X\Z&:PLYX?M_C>@!&$)"?F4%BD6+"*H*L%BR180%D -MD!@H`P@**1!6"PBD%(I!2"P4$!@Q$(L404$9%%"10!818HLD$3"9@8"6E=LC -M=ZY$MR2016]73O"\R>!Y:>K[G^FHFKA?H)!21$R`"(4DB%SE4]R9>JY?E4X& -MI\XGESTX-"[H/;_T,"%:]7P,3@-S5ZTXV'+3TZX^BX)@?N13"Q]R<6\>WJ2J -ME=AB28A3W4U`3K>S\+9S=EPX0#/1D#A8LBR((R06I(5"%10HDJ+!MJ$4%6$0 -M18"@I%50B@H2I(*2H5A*P%DBQ0BP*J2LA*0@RHLE$*P(LK`44(H419)1JI%@ -MB(R4+)81C&("P1("A*J*L$9$8"?@!^+Y6,K1(3B'3Z'IN*\WM_1.)S9:QJ#V -M.UX(P-9-;H6^$I0T`0W9>9]S#+.@--Q^NL4@RVBR1W]!.:.+^0H9W.2O'GTT -M#,`&83,V914O]3MOSE7G(#1\0 -M*($#9<1&-`[,Z.F3H`4'!R759LB%L+C7R@9Q,?8/(T -MY/?['L,W\PE4_\NZ$[_H=_CG'(`!W4NY[Z>IS^)YMA'WF+CCR584:K[\+[ -MNWNE?U'YVR>\7?&/T?A7%?'#R;1?/H]UW!VYCE])@;%D/K[Q?:R;62DEJA&1 -MU3=%4)4^XQ+Y-(?*ZFZP7CEQ#LZ[L,Q\4L9;):%S'2$FXK_BU^\16NQ))N=?`@(NB\EAP;YC&WJ5^<0NFM$;/LFN9F9L1V!#U:\U -M(5H?SO]&9_M??V\["^4:W!77DH<\;](V?F]5I<1VDHW[#LD0.RJ)L[:*6")Y -M*)DL7V)(\H0#](ZFBD&:I8DTQE#M*^A-;;*$?T`R>72#AEPSH^>V'F0M6#?G -MAUYBGV06[9Z6TW']6,^:-#7U\MGU=F`:BWF+VUA7=.XSX9E2POZK2TLW/+P7 -M;1AN1P).,)2(^DZA\O??]XKL;O -M'&WO(R*^!FM//G(39;-4I:,_"G//K=7/4C3HU>+8F?'6-=3+%/O/AK\5H$4L -MM98SGJ@\'QQT3QR7[D?4;6+X3`M]Z+#YB4C+??UJ]+/:3A%M1]_)N,/FNRPM -M4P:9(^S3['^Q[_W/*+V^/RTK[%(?Y54,4\*%6RA$L@^7C$#X.WK7Y*[PTE`9 -M+A=+OGSTHNWHO,N4].&@X+Y$NW!M"6=?0PGX4#%[]9C_*F?6#KR#><\9^YYE -MU9.8G[+H:;3=/4WZP.V.OGCZN?=GSCB/*R*5?G*J>ZW6'J^NIF`?+BKJ]!:F3M*?2O -M+/R!CC;QWG1>/IPZY'BOK23*U&M4@L[JM0CRM!OE$YO"TF-B'@PE -MJRF\H6CF47?M;OPF*J;YI;I'*2&NIU)!JON`FYA#%^'88!SA&_M51OR0;8[O -MOVSANL(J,8P?'^%@O/4WJ4^S$]8N?P,M*2=CY\F8[[#@2SW!X9Q^83.(=).O -M@)TD"A\Z%$S8_P\TRPQG&/1_?_B^V>I/O.X"LY[`P -M4P4`UUA9ZR5VPZ1?8`P<-ECJ:G1]55S.FQBFIJBK63-X./#&=5)S\5!+)X5^;C`5L?JL-''I3OW]VTT_EZ_ZN;>&V_`N_ZS'Q*DDD -M]PBJ6SH,G]4\Q\#?I^4Z;T:Q>&%@W=Z484,:,R,8?@2Y^?+8V) -MPLF;5DO9+''%(L7O\N3]+^G_$8U3PJ&JU![?#;%:1H/!6;V?!O[13VPM@(XV -MX(?,3\=^;BV;T7IMP'P)N7R-T+INPM9P/H,S:-E#$G2X*^M\PR&YLUOQ.NYM -MR$&BT>,V,S%&7YA2@[F6EE`QRKF]?QY_9ER<6H5M=Y6!T-;8*9,VKTW%WV]T -MV)+@/H=UG^/I4OL2*R(LBI)"$C(DD(C(@V#:$VOH,3<-)7*SZ73W_(['F.S2 -ME*4T>4;QC[/<_EGB#7S_[+V_V78B`B1@?>E1#<^0IFS= -M=/!Z]!-QCG^QZ40T7/XWWC^W8\=4&4(.;SAOK]-IQR='][GO./,,[EKJK?EW -M]?(3,&Z@Y\XED)))(4/^+AQX7\ZTJ/G=Y/U9D_C^WY4^W5-@^-R]9V$QI%)Q -M!T2@C92_ZF^CN9G==UIR5,]Z'XPB,'JG99HL?E.O#:LP[0@D;S7_?OAJH$I+A -MU-&>&;=7EYBT4+F.AR=EF42;C-L\]=Q/8=X.[F?OWM1'.D3$J8AX=U=#R1]. -MF0S\N1TY6U9\L#`5U8Y#*3&!IC_[8/+_#PMJ-*Z3YJ.[0T\H[2K(VNE)MA:T)% -MKJBC*RFZLA&^?=U7@_[Y+2T$2F7UO?#LWI];]3?*&"G4E7]DY%G75>QUD.YW -M1R[G?U_:-)L`:W>%0J\=3#ZD9?=X_LL,8;1 -M&7$_7?\Y?XW!U"L>&GN+SNN_OYW#DFSV1>-)4_]X6SV]ML'(J5O0%=OMQ4*Y;]@F.4,$S"FP -MVF1P@VWQR7T?!JX&)3\:W(\-TZF->+_DQ<:Q))[:!Z3OQR;.I/&M:QC*J2U4ST/Y^3DP/#5+Y>A@WR)7Z:(G; -M[\"U`9="@Z0SW]Q!CO\XV$7+F2=.@A`J^I-G(78]Y"_4(F%"A43=73!@T/L? -MS+KJ"@X*7ZGBD?R6!V[&T0.5C#AMR\.=K-+^V^R][>N[U=QSQG*53?KF\/QH -M1S*ZV?R=-$MWM&=#PHDC;'HMZ6;V%5B5OX)NC3',UL?.X5+KY'7.Y>R:[_-\ -M>K>6^`-1QB]#<>3:O^$?/5L*@S1Q/5&V`&`VY$Y;!V=]H_3^7_O+;)`U[Y6#?M2\YZ*:\[G)8;OX[UN6>JDM2RXSDM1;*R-T7/UOK+$I3 -M0$/66BLW?"XEE-21P+YC@VZRJ(S";ZZ!DF$O61B8-?F,#:"L!Z>""ME>%#BL -M7`QMO4T2PHXL&V?\BL^,[^!T=D$-BYL=J5[>:]:ZJ9+S#JL&,;:$($O_B*AR -M\U6)XZ-1LI*2ILZ5-KN;K.U]R.O4IB8D&Q,$':/W#41:,S)2\++WRK6;)#)3 -M1XO@M;`/\)LUDXLGU;-62J?X[]-HM^,(H1#8_V4#C>D[1Q>6W^]R/V^B#WF -M0UUOASW&>+K?$3?SP\,1'_]"_6'K_0,2E<)2PF)M=L2K`[WVJ".&]SO.$K7@ -MQO>==F9CPL&SS6+QP2_#](ENQ'`=`^5W])JFDWW^U9M.FKGSW^0Q^2"=G=D( -M2H-7N=$PUC#(P!NU46KTLB!3EIU*90#-H$))"$S84]Z:_)SOQ.4NR5$UO^<8 -M#7_>O5]AY=E8GBD;/Y;^Y&K6!@Q/CU+/Z:/T%]0=/N$!TD3Z^ETLDD2.^Q_7 -MC^W:CJY.=\)"27&[1=U'LOD^!!^J[Y_@TGHE)/!BH3J!\O\<%"2W$L^K2Z2- -M06FP'@][+)/XWO8/^%2F55-#T*FTEIS3'KY!6O9,#\!(7-7I_!B:)CSSZIQY -MH-4FX#2TNSAQZZXWK1'T9F!JYT7W3GO2JU/]80%ZA.Z-HD5<>#ASI7 -MKY[AM$6/UZ5=O01+ZND-^Q71\K'STG&N#67*:F5:'S(-"<>;X4TY:%5%":D> -M0T4+,U&/T5&TY_X=CDOQM:%M]UZ$3EFZ7BG-XL$ZF,"VT`R+^4E%E))'416% -MDDHHR%0[ID8PIOPIT8[SQV7R8\&'#!\8FOO\@JAA?HY@R-'P\P'M7\VO]+(^ -MASL%!$)THNPQS'QY\=>E5(J'!""\(AR)W:O?NFQ;"P2_H.AQT5&?46B>>M-I -MUX\.X]/7CD0K_IE_IUK:Z,*6L'CYBL*&!JJ44H?',`5:&VO#P%CEM]MGL7LD -M?[Y#!X>S2`0:@$1I,$>XB4/W['-;EDTJ\0SG_?4O0&IESL!1BZ3!_A-0@/1P -M8B8]6@(<#FA7'I3X@8UZDQ'(T>DT^#FR'5B\W=,5"R&,QVQ<&DJ[[3[/!)2/ -MJZU"8^#DPMH?R5[S+85MA39CH"";(QBM3KNZFRTR@H$X83IK5M=[P05XX5>= -M7?)/?U,XPQ:J_I,]CV:7T8T>@A'`Y*0.'"IGWGQ8,T/`SSL&L40220A&4G+# -M7R9\)EJ,.7B?S_[U@EG,0HS3-R?4XNU=3V<(/CM+V;+/F,O>+#C:?-@7JGZ] -MEY;F-=+0MY>MIDS94]C,%[?FLK)TJ/1/84EG=V$Q$R:ICUZJ_?X8N>X0J(,2 -M'>3T]H2-C'/!0_V?Q*3HS^+9/UK\]-)!9.HJATOT9X8>IT[N6D\UEWL='R/& -MS-=(WE',9&)`L]G4O['P;!^C\U#&]JX7(47EUAZ?NYO27U97&A.F>,YV5]*U -M5Z^=[J%YU].X^\QBE;T8%!-I=C,5IFGP)V]_SF4>G,V:CBE%'/:"K2,?.$8# -M!L8%AN98RB:5,B?S';Y#D@"U**:2I^_2#!`(-7E&O1"BZ6_(Z%7%TZ)T9"9) -M6'*$?J1&ZI@%IDFBB/*__<4V:/F\HCFYNI`V2 -MQT9Z6O=,XN81D3$<$>SOPRLJW0H9^AT()I6"5CXM`.0BD@2:NE*\&4RA`>]C -M'8W^178I+B50750'[[^+O_0L.1\CQJ?+O-ATF4CW4$+45$,BA-@(];ZBU`$P -M2)W0(],.=5WY'LWM7FM&WAWF=]$DR4/.GLL(6GTIWH-$4)H/DFG!%K5B.Y];P=Z;6(R21Y1UUGHG#= -M!62:?,1:#JT^':71*Z9F4)A-X1T*$T)G)N8L](9L03'D;YUFAX#\\N4BS;PD[.+M+<5&PH/F9KA@KA9#NT$Z/>7P -MTV),..N_1(CHNMUD.W3#%JO42$M9%N)1A>^[6[#EY!D\%/F'=9.=@9,<]@/% -M`A5V7OH;==0^9JW<)M)8T9`BW?&3YQKX_6KX8R7#;&P:&-IM(L1@B@B**B*,$145%%T[,0X -MIKRW@E;HK/F&TG;?-O->IL`II,%\=%[<-J;++)H$_I/`[EYG:_(HJ\LY#.M.)1MFMA"YM(_^ZZGVV?59%'SW'KI\<#AI4&O1C( -M1O.'V]**9"#4C3/1#2'E[+Q\[?+_.?;8]+['_*XCI'LONL`X&[BQTKC_%4E1 -M-[NUC+W%U*U=2(,@')=9'!"ZBB/BC$3!]B:-[4"`N4Y@R?KRHZP$98<6^1:^ -M^^E[:%XJQ/(AEZU[\JF8T3#:8Z$I:<.B8IECP3(]$".]XL@6-\KMJ0P1=#&Y -M=3'LF>JM@J<[A.@L;2+0NQS\"+2G3.5W:ZHG(!66U1/-2@#P<52:':)J<#Z^ -M\>?U)O'[A`P>(;N;\07TU2^5G#Q'B>V$&Y6]\-QUH57,?L_>TOS),A%%+1!Q_)QI(GS:89,7-HV"`LKL>"Z! -MABCITF]V[RF1%L$7CVNV;U2O;BBE3-4$0[<^';@O'&-/V]G5.C,RX5NQ$2]< -MN3B(56G!DD[R%[P1A9%FS"Z4XP%FO%5A]58\JZ/9-$7?42KU>_*%\$8,.D*" -M`8P8SX6"N^)RHGPOWCO]NV&OT5A<@_Q.7/Z_*(?(M=?U>&*FF5DHP20>4-:^ -M1(\J1Y/^T'ZS,VSZJ7(\=`U<\0X28SR:)'BLP9THK=[39B]1E?P6M6=T+WC,B&C4 -M!(9G80P&Q#[KU^OW5;T8800\(E"J"JX-'!^9^>.[6N.O3/LVNBC"70]9UUK` -MZ;+E+$ME#4.%;.([)D=R7"IIF]!4A-3HYDMPLHL,:6Q+BY#"%@8%29);6HF# -M)TV!][T0^9M/A-=:D'G1*=@/?ZAX?-M9I]5!#!JHDCBC**FE2TBE9#43SZB" -M==FB;3KE[R\7CG'H=+:BJE:(HM3J]'8JCB+)[77IN?Q^=7M#PS.U.,*!HV^]#Z[_ -M5N[9'OV8R^DON%0=Z@<7C$B8P@5*9@EX^.[5$@9!#!HJ[%[O#&B^UST0_TLA -M>QHW?R(=+U!WC.7H(/>S#+)(H`^N00CN:#GRY!QAI^PJ\50MOOOJFD>FI.)\ -MWUDZX;M7AI[=\G)W]IB&5.UHBI^NI.`:\* -M9;*SI2E*K5/!-M>.I3$VG]/]Q.I.A\_G&-(;H$RM$E3+)&E%R6Y":(!`_!8G -MV]1CM&]]2/Z?.\,"F6(1WF;A.(B$SNN$? -MF$_QOE:'Q/YRQMAIC0`.`Q,EB9!0(],FXW'HL&)6PL!]06*71A"ZI@@A@H8' -MGES+8SC68AIL<4RZHVVVX9C+<<.:C41<-7(K6H]3NXIUM#6Q%Z( -M57PYW4,RL^M?!G"^#QB\+A?!\J43)V;:5@F;)$@I27)",FY%]$S`QJN14Y2L -MB**HZ:]6>6ZB#-VQ446=UO.:>=[NKB,RS5UCJX[5QDRQ=G)GK,II2P(!L8 -MZLCV'7@6;YE=*S93:)P>BTZW*O?9;FB[*V*>#%??>8)'D>GX6@2O3Q_(X(Z& -MOC9])U^EMROT+"6UQSFB6`B>JS81_52!(ZITFM,,4;A593^[(ZIB`T!:(NTF -MTCZ^Z6T_'W&5W&%35H$##=)KG90\J0Q:J#4,+#91.%%55?&YZ -M$O%/4HX*UG;`Z;4]UE70A6D"!Y-+/A"R'CC#7W\+#`MJ"Y5:5=G>LRB!WV6V -M%1M[J9._6B""E*8-,L74UK=5E,R^UT+=9^"\P7%\G+P\Z3*)2\TQS-F:)5C*!"SD)67`)`9S*@A`!$DHXF1_N -MV<#/=2\!`7680(GCWV##+Q#+5K(-A -MUF'+$7Z$N'$WRYP@H=5,UW4',Q"U?85SEG3.!K-%[5827G8M;GJXBG9GNWR8@T4M@8`56/V\EC"R)^J:1A6N!@32Y%N+6O+S4=2]=Q2] -MUY]_8N+FWT)^+8'K.Q3M'Y:&\>3M8H;^T,15I/QSGP]_,]%V!NYUMYMM`-MAU`Z!\.E*I)M"-KI#+R[-:J`H0J*# -M#KU,4<*5@EW(*):G?X[0:6P,*X#PPV.A5E8&.I"@)&,,DI0LU)/JC,V71-HL -M!2&V;'&2>P9`1`C2;F>/5`RH%S0M91!"0)$M'1&F.!M5F@9XR"Y,L2@2:Q6_ -MEI46UT0P,6X1*!$#O&+!U!+PF1WF=#\ODM!=K -M^8"HVD2&W9RWZ(OB*@A$,L&+3:E1F9CET!:$RCIO$#6C(VY.7*6>*)F=IX9Y -M_'OZE.WKOYO.&UY(]TJC>[VQ`@FCK`8ED)([4]KVQ298Y]3+01%+>0[K`7LB -M&[IXE]F]2AB)$H_F2HG%&K6>/4*JV4N'&5B+PD/13=$JP6!.Y&U@E9265((: -ME2V1%'U=EA-LLBAPZ7,Q8+'LA5D'"A2E("XH*W@PY7#3E02Q+(A6`U[&Z.S( -M_:-U*;X:];VNJV%F1$!;+7@:NFKO<-05(%&P#%JDHLX>M18-(4+?"BVAFH"W -M`<$HP(-"`RI:BD7"L*`DA0XM"LQRQ3;&G:V)-3#M!!!4ARIA@F8DXTE2J0+) -M#J:JQ4,UQ=G>(7-2$+ULZ_:OF]GBUY0DEX3,IIXLP.U,V#0^+-B&A6H#:SS` -M@+$76JUV%AS?T_;^KZK`?(/PO2/&=]^G=N>_D\#OJ_3?P]R$Z7:`M+1,O1[6 -M5X]0FT-3`O[B-)%YHG082Q*WP)=TN%-[]KT,T+`$>3UZ3.3IB:.73JD`X(&K -MH7FC%TI*.AA60P/(L]MXN&)"L](/$Q?S5C-R;F6'44PDB(6VGJ8+DRB,Q]J5 -M]ZL+B;(=B&'!P+I06,I4/85-$)()*-H47?F**"]SNQ!:EDN4&'*B5>,/]XBQ -M".C37WXH)6%B&N2(,BG&C*X2\#%6=(WLA9.%('`W!(LJI*SJ1=MD8F]"KV=3 -M!(<4R*-]X\6O&ID2)LB-)T('L!H$,'Q@;>K:QT*@^%31=74="2U#U -M(10@Y7F&*N5R"4)V5VL4`MR\Q2%2U@B%\-&F-F!#"$!O1*DV%65FPS3$0A#L -M"TNYJ.LGJ&KXE05%RER`40KC"8I(<$AH#59V2L*O?->7K+&68`_P_XGI*VO6 -M5K9%8+AX`GIZ/(@J'"FA(GA18@5ZQ3%!Y=/P)T^+P!L,RGQ*OQ(CYVO4T'@K -M`N"(>C@*@H("!"Y\\S/4P$M[6=W(Q9%+!%22[QMZW4S>PGWG>R-9:N^V&[M0 -M;D*7'JO/5^(=CQ0Y.^E9/!^@F*]/-OX>SWL/$[4O"6M%-F#;-0FEU0(26(#% -MB![#D&*O'#T?41T<9SE;K922:+@D@UQ!:)A#(%^$'V(F0P4B_N0#!T(HV.@6 -M.K:@S$D!;T,84304!F2,2$CN5JE((+7"G>JO6WP3B(1-LRH5[H[9(I@X$&JE -M\M72-A-VR;)O#5?VE"PMG#,U?0RUS<)7.O+E#^4F8O(.Z!)A`C,:8P45H -M6&@L^:*CH(!8$/U(J+Y5+0M&2R+8PX)6!!=# -ML)&DC[;VJ6U'A1%%NZ:3(T3KZ9H7*S4Y+!28D`D]<55!0+<1!NL,]?^9QOV^ -M(%07\TP/WJ9NH62OSIN<00W]P_6FL#>738;"0Q6#QUD@32&U@QET2S2XY7QKI\>)W25[+T\DFAG:6<'(H&A#:H8YC -M[NND_EDRPG-2CB/JQQD2@UZ]XZGS/C]C@$DPJN6A&\):,!L9EJFCHO<,^:_: -MT5N2D'0V=.Z2/@?^J\>.3Y&SDJM_6,#!`G\-#D8;LC9I2B'1$1<6+)@0)%"D -M73P!N)"H]Y.GMZ`]!T+B2;2&T#HR0L2'+0%6B=T)G@^^:L61I\V6-F? -MUC[MEZ=XX(::)ZE$&@QOO11BS&(QH1/YUN7`^M#7?WX9A83 -MN`-,,T+UM/-E>DSUY=0[B0O8*##;32"=)H?@_N::7% -MR(&I?)`-RRJ;'>="11B`3#(1!"`HC%%445&%K9!]NXR*'P)-/+*)+HI3+>U* -MDKUZ;PF[25)4+&"QM+TI58JBS2:>:V%8?IN@?II`E&\GH,>D5BMC8=_C:.#S -M#JR5_BC5CO,QP!3\AG"IOHRJU"HEH58QVB?=LR-#S$-4LH%3EB)"697$,H:O -MSGD4NRXF:!W[]$#"DQE42MC'"'>P81!@B$8D8>VT3''/`T(OLD9U)F"7\TPOH90OI(\.PW8O!.BLXX`Q8A"4OQU% -M53B"R4",%(*.7G*N6KDCB)HJU*.6SC"FJ:\._4-+L]G8*`DZ],AL0ZL35V%< -M("2*?T'X,-\XC<\)-O>--'!/MBM.'J#%"Y[]79R/'-GI8?JV'6>0L8/?<58I -M^*]>U-'JNG#2')H,')J:#G#-)8&+UH7_==CBX(N2^D,A^Z<# -MN860=E*]4S*ARF2^/'BS#8LAWX4.;2!8<[V65T8Q0F"+%""@HI(+%@LK(%B* -M"V>^A=]7U.998Q51=9A7"Q42VVO$M^TLZOQ'L=S>7:(G/T=VQW2L4*E&+44H -MQ46I:-54*[L"YY=M2DY0W?4F2.'J!YE);6LN"2=N4^^=%ZLI[*/47-MLQYPC -MVW0?9#2/8=*U7-'LI2#Z]`$LAS(0MO`XB@EMBW$7*LT\P+B@+(@H,Y\YV55) -M`#$#U2+?#LU%-H.1S21E5;%,L9AQZE#=G.S66Q,>43+Q]6458?S -M_AU`['K3N#XTH()E+[P%\6$)&)C;45N069CF.VWF2^Y/L<'+]H42J--^T<+WK(+<[\68VHA@G3_"O&MYC -M\TP[SH8E#CU6'13`)%`IM#:.G:S32>W/TQ`_-6(DL9:FV=DP\_S/'Q6=X==B -MA&\1!'1ZXF-B[QE*PCF:A^0C"W'I,C"EY?&`(DD^0E[2PF]$PS40BB0?<#[P -M_25&J5>BS:=Q7^.S=!F`48]:PW\PD#N]@PS[O+`'BF!_Q_>S80/K.>LYIV6O!9B?2>FLS\[-0+`MO[KAHU(I -M*X\"["_;'3PDJ7Y-%2R86"8IQ4=>7AGNS<7&6M??G]=EH$?DM7ST"*EA$7B#4#.*4/R)0.!TPE!E`-$GL'$<3KO]`=PX; -MPLT]IW\J>*]JWB.FI/+Z3.(+E$7$/!+S=XS2;?L8&Z.K30J;HN)K55@YQEAJ -MAJ88V("(,;F1((P453CBF.RF]X:TTJT$-EJ.+6V[LIQHL51W:@LI;%!8JG#" -MHZ9QA6$1`>%%1&5O%*I)IA59P*E8`LFZ;=[G;Q!?5]0>:T7D[NL6J2=2T6>= -MV\^D0Z1"G/WW#AA:R//^7%9[;-'P,-$N_N5+>&Q;8H:]&36D`%1#7E[4A*8; -M7RJ;M$>7XSW:%TP%R*0#&4YS@SZ)=R=M\7-GNJG->498T5""1=14@K&'B>-) -M)7G-T_MZ,.P38"OT=)2?$5YD.7QFF(I[3`]5YN&[FWB$2F5"LD%P85E;40Q8 -M-781BZP#*E!DF6"6%L;',+9O4G5[=7K3(7<%_35':-F8+>4[V-@=[9/_DS9( -MY7(WE2,\/9T3(!=@.D7(JB^HMDJB;K#9=?%"QU!0E@Q&K\'$V=#-7U._!;JX -M_DXGG)`)-1C@9-AN(T0"**#_LK@=3EC4G9+(&/*_ -M"V#]N(GV?H*D$D@E*+L/NR@K,6^5JWBQ(DX[.M(F[E'I\L[47=MJ%`>APHJ" -MJ!IOUZGX=/I/7>KDO"9CGN:P]S1]&Z+V/@9)HUSTQ+P,,VYSHN,8!2.PP*M7!FLNF-UXT#9_HK%UJD: -M&9F?(_*"JK!DV^&?@]-?1TLT/Z-DZ*G1C^9I_WL`D&GU'"*:0V/3=CP-]U+> -MG"`T(45\*I#5KWEV85=HR*%6-JF,Q,#;&^QY'U&WGLXRQO*GSXA+U+CL8.&] -M41S9XQ9_>C+[DS*B6I$(E&9?JK9@T-F('LO$4 -MOL>8QE&.CY$MQG?+Y&010@2S;T^HW&8C0T,('/;0'^4ZUG+,@&2C`U;0JM[\ -MPU#74+G[;UFSY?ZLM%.:4$8EI4%N7!7,ORM'I7>MS17ZL0W#95M'4.J895BN -MBF3/3T-$JC*2[_>]/P9*6=.SFZ\OJJA%)JKEXP3$XXMBS!7FU1F@=+5WJI*O*1RJT1OB3@T6A.("1BEF0_9=U),-U9>ZR -M=IR(+//G4G\JPWW4"U!V<51E)/.H\UJR!G_8G`HZEK]KBUD[RMBK>0! -M%!I:V!6^]=%J#:NNZ)W:PD9N-5.!MK>##J30?]=6-B-3_#SI,]OK3P^Z[S-> -MJKT9RPH_3M`5#RH2D3OI][250BZ4T+8<2>QJ9-"22Q`"(T.(L7.3`:I?B6

)X\C>$B*QGS/!1U)@O&1RM>28%^ -M7ZO*5#7]\M8KVK4@YK*-E.$(D&`NYWA<,4+#0,&Z)>B"D/B$A8BB-1$HF6N/TES(L1!RT5!B5@F3IXQ' -M8@L,.>5GK*"F)JM5*?EWKB2]7-W1H;#,X2=-*#N#%$FJES*C;7BP%S($,!F" -M"+-)*[I(:AWBK2<^F8T\F!L=G3IE\\SQ3P9]4R!UB?*>L)/>0DB@=CKW5$[T -MJ=Y?6.N0U*7B*QIK0FZ2FRGMU4D2W9^%SQG`FPHF:.6;"N0Y?PH8@V=?%79I -M9Y*OD][CQ2QG6EV7V4#0F9;'-<:E1!DRML-4JBKPU -M$CJPJAJFG6J,5)C15%`=1NG"."@C1E1;:I+;!NKD%!!$QM2L),%*QA%TG#`; -M1)^6BV[@D2#3<#J+R_0N2UG,MS,1$?6]%:BG"!;-!\SP@W@[[?6P.&J1-1_0 -M>FSQ;S.Z34]FBQ<)L;4M.I%_TM(4!5&,4D\'4'L]P4]52+%AQ.Z31F$1/_(L -M=0M[0=Y(3[6_'\BP%6**1$%@C/5Z/1'VCMSUS6ARGRL;2M^JP)S5(HT0VT%! -MQ*Z+,Z21B;$KH')"?W>JP/+,\@#4)0B440+!W$TF-+32*'L`YQ.!^-A0RS1' -MC5=%E"H(EIF5F6E9MNJKK3BALA^T_B#C^6/H+=-T&&;+.:N!_A3_/8;5%65B -M\E>U2KXZ!7\RI#3L#:]V\*+]/\V+>=:A+#%(S`0,`O-:"PR(@"P<5-%#?O_8 -MN/T7SG?BHL++5!#:;#=[,2,4E"%56Y))&.A8GJF$!0(0R%A<]=B*5' -M:Q3QO+72PN],XVO#A5K$U>=G:HPTUS*]BSII=*A/Y"'`1DC^$@B1A$HJ,44< -M+G(D\[52G3J6=="<7;.!!=-;=/&'?H\6I@H)$ -MK\I8UXDB/7%:9=:P%@X_6]K?&?TIRD#\O8T;9^C\/@=!*XJH&7/N=>Q/2AEUDE?P/?]K`V1>J,K>J8)BL59;6(BJ8A;4_"+F4K+8 -MT+#63&K]7=86<@=W;JB^QE<&3;%AH3,LF,FHDU>>4-=;K,-C.?NKSD)V0K:$ -MJB8*]/MB["A3XK1#]#6+UM16+K-TX>67.)1BZUES.V)89EAD&(2*YCH7S**@ -M,=@<4K4/.#M:SKOQW_C^5(+UUM6Z>J^SI-'B]HIGDV?`@H/3&Y)K5P:`E48Q -MHDK`'@1+0R8'%W:IX8;RX^0AA-025]SDATLO=,94E[]8$+"+?@;,\T#ADB10 -M614B+G$R85LA084?CI@S$.-S,MI/CLE=:*`8DJ4,$@('`$.TIP^(?KHM&AN4 -M9&4!>B9W4Q4L3?@<';7$^1F!G"S;4PK1G?T*9-(*-X32'#"<(`;XE%E+0H6F -MV2C(H@K';555BBCHMK601;*"B:RY010L+85WE9EE(&C5DP,?L2V!FRM+"H@9 -M-FB:D=!:,*QK;!+2JHI\:DJ%I5$$2&].4A+`8S!D%-ZIE1:97NEIUWT=C1%K -M%`@J8H=8#HT"FHJM*L]]GU+TZ<<&%TSDF!%- -M3UJKQMD704#;9OUI)>=)RVWOJ"$,QC":AF8Q)!MH4,K]TK.$X*RF&-Q'BVE'+6 -M"\-3U.F;-728\:,AF;89E9;BYAEN#3%\&FM88(U;1'*LQAE>F33(54`TXD%E -M9,4J&N@;R.7W.X3OVN4J^_A[.8"][SOL9V%$MZA.X6O2E$6':/0P,PA+AA>Y -MA=:Q&LG"!B9J^>C6(A2VVQU3,@KZ*&W0,=;RAB*+SJZFJFYK2>IKKDF8R<57 -MWQT1N[=6HID(2"B`&1`3H:#JX1@32O`%^-L#7$L9"H%:UI[;SR7=WXY\0]W2 -MCQ]\GX/RZ](5/?%V=@C!]@Y!5/L]M!CRC`&P%!IE>X4(#"?RH'GZEJ,>N4<5 -M-K_DQA4=-53MS2<0FZA?`1EDQOJ-%=>A`Y],]MF)I1BE5$D)$A%&0A"2,&"*K(&H>GQR?Q0]0,VTWH&&X?3H6`D -MU0IH9IDP9G!M68@?-9UBP-FJXU!2-+%;A`BP9--E&,VJ9!V;![EX[]>D:>YD -M_9JP[2$,@=Z105C0!21KYY`K!!%D%@:>4.KJ=M45E.R>?Z_SY(%D!-T][0H, -MT4#$Y:7$(A%,^'K(P/[=W*-8.33>_B1]3KVEN466MPA(_YO0Y::64$VBC6ZU -MP-318U+@KN>E.B>#[B3&"G1B^UK,-%I,.W3W!WO1TG:4P\4-HLZVD!2*B'+[ -M$,PX//7*`T7"61!Q]C+5'$^7NR]U/>M!.Z -ME0#C<-'J&J,#U#[9Y6,<,J\CJ8,O$W?$-YY<#+G#:Z=/=[SVWGY*>#%/%>^EB=+/,++/ -M#Q_-_-_1>!V.XE*=O4>,3JGV7=,9IJ(J)2^8KASUZV;E+(T<:UH7K'>VZ\D2 -MVUJ9#"(F031IW/3&1>P\1H'=RLVQLT-5;!3*)2UB`>V6:("!.G3,Q-U43,DR -M+`$>ERXUFP,19*!20+4(DD&$EDQM(]@0.!&)H0]MNV3$QZ,[OJMRJ58DXE"[C<8@/QO2@CPC,A?FGZTSOYO3.C28CW>'BSHZ3*900R&NW9F -MRALS:X&C8IE'0:*.")F7?@@&3O%=/&I!O032[7O*"K#BB//RHX\$38'>1?4* -M@=TA`@-K3;0!XB>L91L8B$ME&9FL0JI3-EYSR#0102$P$DWP"GNY)L:[RJ0;9EJ+[B7Z"5EZA3V^ -MD,!X^5G6ON&Z4B/W;W.I'(_0[=\OZQQHV)"*M=NT*O&9ZS<;#\9*ZX/]7@V/ -M\&U1#=*>-O^O2OX-I]ZV<-F0=H(W[?'+<>9NHP17OX-G?=DB$KRIFNR8Z&J. -ME&GV%S-A14]+0"[DR7&>_OTFBM1P\Y$.LMO)^AH3J@Y!-"\$;AA`0Y<2X,.? -MGZ!W:H=;-GOI![4*I=NU$:D$S2UP:9/O]D8XCB]W59(!BT49ML*5A1PUR=#F -M;?K;^]X\NW,)\S1PF"ZM8GY_5@_?6320H]=0>\\]"%+B&V!AH..\0,_SE8&" -M/["1%@:/N67G$Z[H,W]PA"5FA/1"&T<0VS(I&F:QPR`W00=1,Z1)!A$D1W16 -M1C:X8F-A<2IF9"&!%".8@+`_FS6F0#0&D0FLN]1/#Y"%""+#7$#0A&Y>$/98 -M4 -M'[O[`$EP.I5RW='\]I54O%G<,P'K?MPB[V -M(4N!;IL=X,H01B&!&(A$CC[S&E#SH4\T*.W;O1K#2>IPU"GQF?"3J1+S]GKC -MZZ2SZDL`6!#AHA>,,G1UCO/A$"AX-(V(1,.#,G7775#U904R8A9UC1YXIZ>7,- -MA2I:VB+)Y@^9!]8A\E#N8C`BH$%)TL-,F((HGS^[NZ:[%T:UQJGM0/D=9S,E -MC8Z@S^1"Z"IO+G)P20D^>>$:"?V]#3B%JP\+B:J0@B(]6C8]HS[%%CTG>7FU -M5N[.U0^NA7O=<-%&1L^]CP:TTG>;*6XH+8:9+_10KDV_1TGU9``J,%8Q17M^$',M*4(6D=TS\K`E&2P9M<17BS\OH9\'HQF6QWD= -M7#,F-A\F*LWV1]M?`RPZGJOMR3N.PQJ[)G''@L892ZNL*:3C)K87;J"9;K]U -M9H].CCAY.(B''RU'.8+W^5\<#AL!C&A4+<#"25E&"R00*H2K4B:COWT?9S># -MF!W,GT;`/U">]).X@\6BL9(/%JDI!1"0AQ7?-Z!4-`,+[7CDT.&DRR>KRY'E -MNKSNF:LH,HA=V!EL%A57&`1@TH4I:8X1,;&D0LM$[F0D.]5(<(3L99W(10O+ -MTHI%/JD+J!F=*!P]6FQ@&.)#9ACU0T;BQ#65M-R$,Z`IQ$ZL=`2H'>DAY.#( -M8PE!.YA8.J'K>-`%8*`(K)$>?"F#$ZMAU\))#T^K(2B1&!60J07ZCUGL(\.+ -M?:RAM/5G'\[Q=SL9NAB$[>U!C4,\'7&Y%KA7-$D0 -M((*QL,R#6UH`,^MR>IUJ]C+MT6'3333A2MK?2F"8<6H,[IZ0&>[(>'0Z.DY\^QK2"BO\EA0Q_6YF"/)QXPT!IF -M--(G3"O&CPWK:;FZ\-&"LTV&D^(AIGP[YSG"CE.69$%^&E#HP -M-^*?%`9@F(DP$8$E0OX+=*M0)%(*L2[* -M4C(JK`)0T'0#%%9A^7`H%+1U,?2>/R<-&&E"SD)!E/IT:-`:+H(1ZY^9E6/Y -MFJJ^X@J&7N^@6W5I`1S)N6[A+6YLK1B]3"JEPE"3\CPH7SG0WH4)*[7S.CJ` -MX-1:8I,09X5^+1+,65;?]VE9U>XL2QC;^!ZB">)A#3Q38VM#D;]9Y'4FG:BV -MC.U-2`\Y,OS?.Z)YL,GXEC=7!G7*SER5;]J!ZIC5 -MA1L-]N/HIX%*E)7:EDJQ"FM@KHL4;PX8W%KPI"PAF`G3 -MBID%)2T%W#0H@IOU9QX<\[5![#2%EV=NFD)(0H!LVVOR2O^E_X+1022.D`3) -MEP&;$ILL7RB!NF=%[1#&V.GY]2"ZH?.FX/1-^,:&%%PE[%&`%1%*U1E50+)* -ML8ARY<.)*AA;-I[]YZ<V1XX[>J,"-E8[LD$2DE.0 -MQ]*A;49:/URREEL9!G=;?HDQ7LOCO=0QS,E5?Z:IWZ(O'$I9+IRLTCA>2+:0 -M=F2BGI>R(@D9[(N&4WLDFR/!D%6RQ=W+M!EBDJQ=VU&;S&ZO?N?OO5-]Z0W! -MG3I79M=QNI/*C[S>Z_D]K@#RMCK\HXCR=(8X\,WEI1%YY5JD(22"*FGG9+S# -M6K7Y?164U-F164..B.OF0+2VR:W#<\]K3E40)E#A118102R%1!-NLOKYH5*VT5(2S0TX]L1N$!7P'`%B"\,0&8` -M'5;=936BUF.MZB46]H""W-F+2M+`B4 -M9F=M^'4"Z6L/*_X)UK4+MAE'.SM6(]'#\T8\E/8!S6QDH2KA2E?=#JF54B]V -M5F7S^QPM+(8PS4PU^R"3`AVAU8'">N:>=4!#R@)`NJ5:S65^6"T1PY`*$H?9 -MFU1>_#06H=YAG7]%=,:\\M57-?"2M=S;1 -M@EF?7M?Y")'R1M4#?J.8M9!IY\(ADD,"-NU*G<7P?QG<_79MI^><#S;JM`SJ -MHCVO6A1%#M:'&%/989TT8G3K3)FY,,JLWS?W8*FM6TBQYGDU%1]/@-%W[[3A -MZC;UG7NS;N?+M'6%ELNC"0(^L8KVI!!AJWSQ_)V<=`[M@0G5D]QFD(:B`L4] -M3]PR7G$_:N?/MZ?&]D*=)ZXJQ/8/E\6'P%"U\W/\',G4+N`:$C6/H1"CA$W56["/IB['XC7689TF+[-^8?]5ZL1?(G47JBE3+<1E-*+[-_DLH_&:.J -M_V'@56#F.U2F896VU;0#V04VW2D"D#94W1C^2P+Q0_9LA?(AH)":/I8-9O;I-!:9+3*]=R'6R2&O^YZD<>1:Q2*.H3-D?6>L5PH$&(DZ=H.[,\!P$ -M/-N(=.2ODO`GM41E'<'0;WY-9O@WF]J=FFKFI*^+A(,\-3K4(TR.SF;%QAH5 -MV$MC;/[JS!D6+JH]Q[VM37W]?NK/X%.TV5HSB2.(`#$:':-NAP`3%4)J5B6J -MI&RC9E`6!XMV,@D03<>I0M8Y32N&DE8*'\\\`&1L8PU892D,@Z)97=`-&6`8 -M(%/_HU8MJ9N)?5,8DR"Y39HYV!94"0#7 -M](B"40'?.&Y&0B&ON6"W&'>?"CF]?K3>FO\S02SE,%DI'L`F!N[[AP"18"4C -M6BV8;,_9X6#.245!L%-?N_*)!E60;"-("2YMW:EJJ)*D27)@*94M!Q(6J"+0 -M0I(D`F`DN1DUA#>9MKLU%Y[Y2)JQ896UTHS1(9P:)G\P_X1*+>+!K; -M%3BC?]/OS5%$$4&(CY\4Y,Y[9GQ_+1T[^W+4JX0,R:F=$IFMIN]+.[?H<8(: -MC'-!7&X1YC0N0/%&,ZBV;HX(0IW@ZHTVW"F;`HI4)E&V/JJ'FDVIV9[/=`TB5*%H<]X -M=J4"CD:A([0>>6L0AC3-,$5F4UZFV.VL\/,S55?6'XP@QQN[O;L\-.T:*-#9 -MD=*5F0Q&2$"##!@ZU(3D:;0QK(0F?`.^MY'R7^^/H"MRE/=LA -MXL=-9'Z6DF*:Q%LQ1%A*\,QR-K#2\.&#`&V4"[1=Y7^992 -M"""0(1"-@G;J*BHNB#!MC(R(RPJB&MK6F@(>W>R1"4=0%ZIX5`'&8P"-[/2B -MNW[W'ZGB46%A(P%+T,0XPUNAI(+(TO9,8`*PQ;8*TQ-*AS)W["B,YLS`D\T@ -M2D@2(E*#V2HLG#VR@J,8L%'BE;UMRQBL2U3O9SS>Z"G`<-UUWJIZ9-]T3-G1 -MR:W>L""E;46%`JVN:O-JK\-J#WR)(%.Y""N%L@VI;)40"8DE$EWW*+`FH>*S -M,E5BM%""A!+TT;'CCOV<2>SDNGO2%5"L[B'1ZO@DON7@=3D']>:#\@T64(S8 -M48X56#L:?`1?B.S):DQ0>?;M-\3X>+>>4F!G:%1:T0&C>7IA6)`+N&+JSQ86 -M%CMWZX6R&F%UAA_@:S0D?L1H`XOR56PV0W[0F>`#.ZRC&"(P=4BPYNLT`];+S3#+HM -M,:W])..L&L;.2_Y4;Y".CD%NW[ON)_48<>&:5I("_EW52(0:1 -M1)_H)!H(HH)`76G&CF5LW$BDL>O!=]&D+!:17N$F:TFBR6'WTN']F4+%V%B] -M",71U] -MUY>,^UI]-.Q#J_9'K]P\D5]#1^"W":/)41?;/`-=>R>3`IN>6U^:*(S.EP58B>EH;:@C:(O-NL2QC3MAGCSG-I4L9N>X.CHH/3"`_U_ -MLN,P9F-\O=E+HM&S46!>@?P>CPH-%R#&!S*8TT[G -M::LD\RU1C[4'DM?XOMX1_9^GC-B(AI0H#TJ>A,?&?#Q/AU&HI1L?M.->N2;0 -M"[,$^)7'[@4XRB+T/7&FNT0VD1UWN/+5#^J1&LK;AD@XH5FCY3GT*?5?>7\Z -M]>YY$C/T'RK./J?5ST/0CO[!F>GIZ2QE -M$I2Z^^0/`Z\\&I'I9/U22I5$8,2Z%_\V]6]3J*6IQFM.XO!R9(/$;CL[_=V( -M!ESCYR!KEO)BF/4N/90N$2)R,H#$:@;L0((2P:4"P09&#,.GZ3PIL.4)S^XT -M>7Y*<3JEZSQ]!.S1;T844$@Z934^?T*\,Y#&NUBB6;N.98;3$V\;M&;Z?QN5 -MA%UY1GI,4@'DO#&4SVPF=7)>-$Q&(89H,#@;$`D5:$2E#(HVJJ431DS-4A-7-550, -M%G;NJM\T7,D'"W!"D8A#5E0/!V16I(U8+.9N&$$:$R@+;D,5E0FB"19%0L2B -M6!?#3%%@VS,30ET/&4Q;2Z\G!XM3A^`.1D.K[FP>OV&+Z;X&G??_A;ME?.E) -MO.G!,$_%`-'\B?7V=CM+HUWOS=C^OA)XF)XI>G"$^#OIX%!1FFO3\ -M^R#YX)A,)A,)`$GUM?SY8C]BR<(5:8=-H57N?']'C9@T5-\0\K!J]S9^I9)( -MR'\DA0`XC7<+Q8I3M###9B-^&,8&FUW(&H+&UW.Z\3FSRMUMY,$N[SE]P@>' -MM;6U.U*')>7V%1W!QB!D');WNZ^[!/R*)F(:4!_A&?QHHB&>I1$1+`$\$\K- -M:+H>(M38RCQ7`VE3M<:&KM`&RY^B-WKMQ5;Q[H&""S7P2[@2;9Y8,/[ZV?Q% -MJ.1BQ^U]R3EI2,BD-VZ^^SS^=8>Z\PC`J2"D(H*$4!8L!9(LFDDJ`H5@+4%! -M1M%(?X>OY_61OT(XR>$DDLTW^TK4N=Y#ZLN/].TT^MKNA"+*[Y>7:[:>8/^- -M)T819#S0GT3+"(`8A!9`46DAL20V@2YE<3]J^_?P:QLN:;B!S-:S3Z79OQPR -M/"T2@*,`IFHB!I%6"#,4^Y -MI@5-KX&$<&F^-W=V"(K"!:VDJ08YQZK@EGQ-A;[C%FW]SME?;124**R*(22' -M?2P3!55"9V0PRRZK?%^K^#7E7YF74CB&1V]N9S.5S7US.]0[85ZL=D=6EJ+O(_HF#'.;"J-BL+-MGPP=2*I5?9 -MRSVF5FARC(89)Y[51=6&TVPZZL\,&1-533*N%OI'][Y>O6_`QX`?KG.(XLG: -M]'Z]/1LW3&D4'IH0PSV5^0BS#5-,[WM$WX0(^TY9;'=LVUY)6VL+:_YCM1YT -MEL[).(>M2$X5E;HFKO>&E(-E9)IN6?.=]"+/DKN>M[!7Q&&S&%):]0E""^B7 -MERBK,R[,7*MH**S:TC`=:Z/)%;;NUA"_;@;+8WO5;IMLXP2;O4)GZF&7:39! -M:K;OV\-RM=9-J?FID@G!B:4'_L/2@6H?JE/@Z]R^-%#.]6:>^V,IV<7K'5-+ -M1)-/!_N3MM/^A];T!/]I!\?S>E/A/HOXWZ^7`=VX0-UCT_%BA(HU8\51FKV\ -MLQYSUP`/5\Q!2FPQ0"C":D]-W_BZ[H\OU>PKKT9HO/".*J$16`H!(Y<44#IH -M-`R\8)FZ(N9JY2S$T(.J5CLHL*)%)I*A1"I!-6%-9AI# -M0AA2KGD3I"2)Q)W>@TA<6.@)/"J1`1N*8F`[L,8+`;NB-%(0U@G`-S -M$:#`1>9JYZ9[GY;4A(2--,P(4@(JB00@"L&#$%@R2140$5(1!D1&""V3H22. -M@`Z7U5DDQIL8--CL'RB@%>OLS4-]%02$L'&*DJ0+V/1$P;!!2P52V(B2^C"$ -M6*((C!&(P162*([#4"60U`$)KMVZ20-R!)ULE)J9H;`54$5@C(P1`62(HB+! -MB(UHE:D5C!61140A9!A6R0+"L64L**#*$^#X6>U$D@10@?!))$:Z#(PX<$[, -MWV`<-#INCQXWV!4^A:DZI8&+KO7OL>G@V*V(J]/#5=Z!R2(\7RX<^-2F.^6. -M\8\]D7[%&?<];[5J;R-G@'+?2+$-;V*WK+ITXTP=_+SL%OOMC$NWXW_?=;?1EUQ)WEL'QW6\]3:-[1U5$Y' -M;5FG#N[O-07\5O+[_%P.SS\AI'(+(*'TPWQ[\G;+D4[6H(@A\"`VQOBVC@(X -MB7%BJ436M$58=(.NQP$O-YWSLH#I$4-+%*XUY2@VQ`605H32B5448P@,C^:2 -M0DE&$#"#"Q$1&(**))((!!)K9<_977T>D.KL+5MD822+&,&#V3Y.XYLT\WVC -M:DX9:GR8A:AF&T0/T#1A!$($(`Z(!2(&@/L[HV;P8*,_(#4S%@?3'2(`0T*G -M"1J:E-'@`IEHI#&NGZ/=5:LX@-/Z+34\]>;X3:?1O+G)'G>73E&FG8GV;R44 -MT[.+35;XC)K:^@H,"M8W3B[#:`J3V'NKN[L$M6>W/6*^O%&ETP.A*LA/J8)" -M/'%LJ>"3X5!+SGS5(^MY^WT_0G=`":_70(H-$.^L#GL$993L4M5J9;LG5JE> -M7=[*F"FL+`LD(JQ476D2O8MFQBJH38@?EFGYMT%K(*JP;N=TH%W;O7>W7Q`3 -MHG/%GLT4,4J5/)@'*`9SZNF*:D)1(#MI_VMP.FD;\7X=_3Y*.9SL=P?A1VY? -MNK=T@]V\O'T/#O?L0J$`D`>@V]#HOL6.W`9KP,F:50^20QR`6&4`N*"#6B4_ -M1T%1RS6-/2F,#G>):V/19K?,?:@9:UK-$PW3IIFTP@C'?.F\S%-[.A)TUR\5 -M3CFVFKLR:T@=#(9&R65!)B)H[$T(9*=%051,`O&'L\J@^9=%T^L#"DR=LL2E -M69Q`W6W2@HQ&J@!BSI<@-E'&-_6ER)G:TFJ6K- -M=LUT17`6W6MEOM>K4H][UO14M4G+NJ!Z'P@%S8FAN0^.BWO>K4\W1QZM^E9" -MJ;<,.AIH^NF#.\Q4\1;2-I@1'*IW'3CDQO*I>][;R.,#WQ!,85Y20KH=LRH` -M'8TX!H+3:+,BZV\8[M$GO902%#'&,,4*%DHCIU7JS1>8Y;)@-MV:31Q;ML:4 -MD$%UN-O!Q8 -MEN2I%C4%]WHVY0D82FD>?"U-T#$PB%AZ%JI%_J+#[*,DBT]=%]E@H8R%5DC!/'OS6L]'ENY[WUY? -M:&WGPYP\N=(LS9WI//RY#WN58+*=IZMTM5<^&XVBU*01)J:5;3"(46%&-*,B -M9E*&;4JC2'#FLSH9.._?;?:F'%K*^K0F>=ZL&=4!48'.U2VF7P\-:+`#FS"2 -M2)-,(B79&7)L&5G7'.]^9XHST.==%A&+4Q.P(%$6N0@2 -MYWPQ5BA22JZ!81@.4E3F,N\$LW/)HH[&&3(8 -M/CVN:U=RMT=Y/;)U\CH(P[^W7D377J-WG!FD#LP\DTZRE-CX.*1YYN,UF-S- -MM'33PNDTE8+I%.N/H;SN@)*(`Z2Z1,J<"*H"34RE``8L"-N*@57+$ZTF2J(8 -M@DM20C)4\NR((S;P;;XXT@-EH^#3RV/0=_59:7!1.E1!O3NG4UP;$P@MZT@\ -M\+L<6J%Z&NFJP^^,$!2&0R8OLCWQB1TJJ@SLE>F1V`GM&]85XH*@-YG4_@,N -MV5':_JJQZU#Y+$CU!A!?LFKUM1A$[,9OSQ<7I$`QK4-(&:T8WUVL-/A^%JY% -M,T-`-"VD8@#4#&V%O7.V:4#[[)D`-)#/"7+F.6^AQ\>UYO`QC=/6#411`',] -MM)Q'(B^KU-R]-J$,J"40><(G9[LRVJ>;-%$JDP:``LRG#[M)-)*RF8021)JT -M2CSRRFM4[)+T0V1%KE,4\V=7:*046+O>!9??Z8=YN<>-)=%*D66%COU?/AK" -M+6MA)F_XWXX_/5ZR$YY7G'FEN:C -MP:*)&D?J.%N#VE>?+,P)#NE52-JY=9AKM/1>MC.5V*U2B#,WB8"(36=F1T*1 -M!6!^0O4WF(X0;B?A"ALI`8#NWIZQ*;=5;8\<*S2!&^D.\0\+@0&#@JY*0H<= -M[=KY[HP.]?IJ5S#.](TIE2`>N7:UHFTT9<,-U'5423:11`HS2!!2!JN4RR*. -MJ"82&"*)1D2I2,'FJU7H?$0O8VQ5,QA4/#$=T#=(KDK*[Q<2T&;[[X(T:*;3 -MH8G,9E"^(@\ICM*X(@`XSXNKWE4H,;)7`]4YOG`MC;`Q`2Y"]+8A.*9^`\_J -MDQPE>+$>>NE:HADHC4R0@T17P$W`Z*%4GS=5B.O%=9`NC("=O5WQS;H-Z\0@ -M#VKNU-CG;W4S=Z;LFRPBH+IMT2Y#T:UZZCS)1@=FZIMRSD;F^LIR;X`)V-#7 -M]!9`\5II+77='8\FU(@)BM58AYF-E>:[6MBTT$3AF'3&E9=**+:!2[7-4'9! -MBJ6Y:M=14*!DZ,PNB;0*MVG/1%F<_1?X=!"KT@(;&-C8R*;C06@XI?96Z&]% -M*Z"C+I%L7*[PA7QA>-%GAA?K"`32T+91.R"#0Q!S.VS[-\6V*Q[<(%VVZLA& -MJPN=MPMC7:U46KBI'3)`F+/]WTU?P\T!-\8V9:S..Z,NWE5]P0T8"C!I1!09 -M57ZI4'D.LN,12FQWPE;GJ;5KXVSD;>)\^>-MSK`/OG//6TR""-;+45NS5"HZ -MRA@L1]%#5N^._@UPA6+)5"#"*5)!!I%54^^'H`>Z<#?/35OGEV::Y0#\5$FR -M;V[EBF0ET3H1Q+,R*;*:NB[3CYW3#+9^QY#VNV9F.CQB->W4'<' -MG9`Q:;!'9*IAG/#89I98,E51]L)@M@V$JZCKO1!?CJ5`O*@)9--8VD;5"4)4 -MG*0ZJY=<1UO:;#/W97.M<,+8E8=+5F'>Z!25#'6Y<$:&[HE:9WTJ!2B%`;LU -M6@GA9S9:DS1,LF>PC4.2\IGA!LV=TK6\:X06I;;56%1C%"L]BS./GL*#GZ*! -MH-!0C-B-[.*J(2`$#;[\7%WD[B3@X@0(@BZ8L*-/-46)JKH,\\FD/I<30M1+ -M606@TH'1`:4))H$BKQ7'WM-IQJ;B]W'A0$UB.$:=A/%W"ETM`=@MOX5?'S7J*_/$0MO9Z=4?T];^KU?`Z] -M4GL?Q/,]LL\'GGE0];>NQL[$!J[W"_/GY*V],D>%>3H(U1%U(ZKFO4.OU_G; -M^_-?-;)!`-0ULW@7%:RRU'Q>_4"X)O]OC]#_R*#[$!!P$D/I20YKLL#B`0Z0A$(GE -MQ..[WO?@BITG/H/]1`WW>0^"9%%P+0XB"1C?A$1Z9#",V1(7%0OS$7$&@+)- -MHC'..^Z,B184:(>9!STU0%K!&('4@!L"GJZDAEED';A0&3H=(9RW@UH7N8?, -MRV#03EO3SJ$^.^`^`IYJHI2S(4U)2>9)$O,(?EF1(E%6$\\\/F,/A?"MMTV' -MT4N!OOZOI5##>`AIQE&W?P\PG1?$VZ:K$Z12[\Y1D=KWM/5'C!I:@M-Y?/U[ -M8&XN$%?J%\5ZLU3K6;P_5YSL94XG\?27$/DYM*""^$7`51)#U;FP\Q>Y:U2L -MVP_W#N:*-)YHMM!>LIF+(IG9L*)M./9*VFTO7=L94.]:B8M5%L3!.5N2 -MWCT]K5U5<[JYUIEVJ)'"!,SMS=\;Z:-0.)V2J2]994B04RH*S/-LG&(C`6AV -M:^)"Z'7=HNF>-*PUPNWU3K6EJ<[5=VP/5"CI>S&5TS>,I$^HR)KNLXZJV2_2 -MO3?',/G90J'#\POH@9G:\7#4@Z1%;";6=5<($0X>RTVL/57RO$2GAL+SC[M5 -MO2=)5=L)8Q^'7'X=;_G[H+RM_SN7\[=O7H/;*56_?,W8KA&>#YE_&(D6D=?- -MK(\V<_H`/L]O='LFU9G-5QF[>]J3=^(C-IM)O[Y_T:OF(,SM^J] -MZ6V+1R?ULT%>;#1@/F(9]+JS"K/2D[#*.W7BU"#DK,EN^IA@5=G'1KT\>:7& -MBO8BPWQ/Y3R0QMGXI;YYI\A%3*;60]+D_?!8#.CC]ZFJF\U*BS^\/QV5ZZ7Z -M#?16/OT^3C6#`P89S3FL3\^2B;\4H!$;#A2@CHM[A,'8[M`*S58H200"?$2MPAJGI49) -MP+Z*.EE&4H`E`!4WWFX%!I%4"B8Q0091=)%]>+XSOLU(Q1OA-2'X-%#T*7OZR&V2(@ -M=YBQTDA2A2G.#KA:C)H`;H/M#:WFW[Y[Y[^I,XZ;,(3HO%T@YRC#KUQ@1U\O*O7"09[& -MDMV?10NVEM'3[4K'5PQ`S\:"V-M>A0X&B,[5\FU,;FIQQ-&H(2E!11:_:JZ: -MB.!:L.!3@VAE2]4CFZ]!U%N>E6Q,L+5:@Y\BE.J-JPJ8I0F**+JT`20,Q-=> -MMU/6SB'J;ZD*3IDL`A4L*`@RE[J%;HY8)$`8%!@BE=*EC@F):Z9-[0FFO<:QQ2!?;0&QF#Q-QDZ66K,*EL -M4X11EE;GVGY+R4TE1>H:PA_N*E8C^]%RKCWQO\0EOEJYGCH -M++:;IOTF2KB=POSK`,`H@[@=<L9$Y&*CH&2I#Q1,KY+;5*CQ[+\<9&PR*X1"-T1P3 -MEN_JB5'+M=QAUL`+W..:7*BS>EL"E,H@R(I"REDS9W;HH":'MMQ5(I;N1CA< -ML+5HQS#O>:0-!P3)Z!2"!*('2RTJ0IH"=I10:%R*("!:U2(WOS/8R)ZEWLE5#QZD7VX"W -MQ>.T?3I\53:U;XP9B):=X570XO-=WS+DA;>9@YV==;KNS0V%SAY$.& -M;97K!K?"D5;2U?CMF^R2!9.40,=GZ#L*]%6'TCRX8-3EGBIO5JJ$+34R% -MS4LK%L35(FI:XRP1D&-)9D+U?X]+=^U>%;968:,^^J,+3VWHS5$F>*L-V0@2 -MK$=SR7L$=H45="`H"**I#29VVN02A.D$%T74M-4B2(<$$#" -ME3+BFGF0Z!EX/'A;4=!`;A>R(AD+/`LGEEEWXZ,,]"\1CW[4 -M><,@5KT-L7=X%-'&Q%D"V"P`;*9P("("%3LW2,4*,HJ4YKZNLC1R8$1]'H[+ -MOF+N6!6THB?"B2BNR6U*NYTCCOZGQ6XNG?$+1T%6RT2UY_.&S`SLNNEN/9A[ -MY0'YF=\;G#6;B[6$#S/JMF2S-;.$0CZUTSB>TUU*XBBX1B(:P^I6#:<=:WDM -M*L&O=VP5>)7QSA36O%\Y#1OB`W+MWKC'!X/`N]D=510<%-'1ZB-1-[O]OG,Q -M:^E0V#WQBVS5KX+MUWM35J2G24]U`GK4Z+%$*=B[YG_I?PRJAQ'!Y@B;GX7% -M;LJ9)_X)M&!K()K(H:#S3U7G];#'OZ:O^CR6HGSZ7CU0CWA`/06*Z8$S&H[D -MLFKY%_EL[,%^@-R@8>1ZH8-T<_+$KOM7OX52,NA\N@U@&8@`2!DP#OSF*5&\ -M$/C[#MNG_A\[=L78?L_\]2&KX#%\SSL"EN<*EY1MC^TN$#!DFXYC,L##-Q2$ -M@00DA!`.$8E=[9WCLCMSK/V3YE]Q>[ZREV^RB)D;,\;F]/Y6]ZRG^`HC2SM?D=%_%])D*!?1`M_+NA\X_+@'D;T+>O/6T -M^Z9[_W1_PVEI,D,#"5O>P^'XF:I7M/7=`83?>]QP-3RJ+@Z#]WOJQ3I^VS-K -M5%H0D/)`BTRENBU#P?KU\C7WL..J$ZJGH*A&Z`J;+>5.UHH&D4D8&622P8`L -M"`,@)(!!X^UP^[[/2\T-M[58O-BZ?]U[=DB*'"YWIT)O49>+FA`1D!R222RX -M@7\N77FVIV/"5"#=.^X48.JC#A=/&%@O24G:'8P/6&.8#[XS!VT0?YLDT691 -M9Y)RYQN2@&3%#@H(-9*P&)%!$J0*DJ`L"H$&*D8*0@I2(B>0Z@W'VM-O. -M=,QX^K[NO@7U-G#7PAW(YVVIGKL1)P^\&\F9[MQ_M=^_9^*_<<3R,\RO"9YJU,[RBI(_7E7XD2$>ADC-^Z17UM=E4UWY=21X/0UD)""\0Z%%/S"4RA41(/ -MS_VMQ404%/RO_UA].PB)!A'7(P3V]'\K\;G`2<1^YPZ!7WLO66V7#6*:A(JJ -M:DC>;$L"93&MB.=A&$B<2@3HBHQ'-A -MYWXJ<2:=T)*`/Y'%<6FZWF'#ZY^O4K\Q]/D+UIN\A[7(\E])S<\\:`H;AM^\ -M%N!O7'6M>!]5,&GPW5+"A_W;))]X,)]X@L4D4D%""@%0*RJ1"I`*D`J"@5(+ -M%B,*,D*0"0`D5:*$3LC\=V%LAJ]E*_6VOR3;:BEJ72C\"2@R;^-B!=FLX&63 -M`ZLM6CE31ZV]_;H->V7,RKKJ*U0&PTP,\\C8M>')[>W&4/,306L,)'L0/=OV -M=-%#M?NW%VNS^I*4LFIG0^TJ=WON.H_@#\@,L8J*3VK! -M446A;&V5M&HT%1@(HRJ((6B6K1*UK6RQDHVV):,2E:_D?DOX_X__7Y<=C^;. -M.QGL/U1]W_/Q3])['QO9*"YR8?'''<<9V'5@&+RN.`,Z<8LA1`J(R5E10BR0 -MD6!"5`;_(_YP?^1^[$5S2\IYF7-?E.4GUGVX_]"AW"=D2/QZZ%1\ER*@CZ3O -M6UG7QY[+NE,M-.SKW%)(YBP]F6*5=-M8=O+$M)2VC'Y?W'NCJN@L'VU+_V@J -M4+Y)LO1_`>Z+OC\7UD>Q)/I>K_%5C%9]'0W=T>=.)%XJ`2#Q<0&2$$9`&161 -M82I`M*18!619!%96!`=,PD,D`-T1L*4^QX@N<)H;\_+>WW0;8G]&@:4Y#R+X -M(2[_RM2EML0[SM[XP$8"!FX&6_//Q_X8I];YO,G.HFHZ4G]5\ALW(#H.9`4< -MKX)\8G@2T>.\UK:C8$;X#A\R:3![4`9$2?6MPD1UD7T*"-<5!*-*B@JT@O:B -M%]%44MX>'=:"N;BE`[3I?HTY7V7.?6XSA6'K"_/%PLKS]LSS8!VV%G-[SV]; -M[QO1^`;CRSFG#A0[?[L4-\(9W6XL?3Y!I>S=02`!,9Q_-L+O>['-5X1U -M_1VSE,YU56VO"NLZ5O6[,#;]E\7>/\L(X/C1QQ*7O8=A"+KL-+^3^,#J(RV" -M9']V?7^OWG]_U),8GXTX&=^._)'R-GS+S3^][UCS:E7]/VTNUCLSOC/:&^/" -M,"UW7VCK'4NWSQGNT43>KL/H<+UOZU#S]E+?\6FYKW:ER/4URR*1.X(`XY(1 -M?HE9)&E(LA"L"H"P`K`K"5*0"15I!2I?![G@2IMPT1INOWW?6BPZ9I?I5P^A -M\,VC#!,^3_I1.7AS\"\(]5TKUAF%4#3X<.P>K]-=O5NQRE-/6RWS7^<=8M'! -MB[2FRH4M3UZ-3O>NV$Q2QCO&\DGZ$C,TBB?Q/E9J+#:.CR#AHMC\+3/N>K^R5N_CW=?>-_M>?BL-BH4=Q_PX5!'5KGJSE1L6DT($ -MQA1JM;O/GZ`Z;^:CYE,C_3[^?\I/9[J;/G?'V>RBS\->6B,KN8\$ND:0DD-^ -M],VR&9A)B1K^1G;Q4^T=>R9[W'P#4:OCI_P?;X?11/D'$8]#5I/M#&\H60+P -M&(#2P%#$D$#24,9A)F/DR-[)R'X]#ODAASL,%@(QZOYG6^'+"$-E"X1C]SX6 -MVAOZV"VU%6CD_Y+<PH<,*[+@3I*9WZN)\X?A7.P\_S-F8!-?XU$[+/]%[OMZOW[:^XS2& -M/_N;0^1F)GVW3)?_9,CJ?,A%],5ZI6ZKRX;`KQ^R4V*K,(;Z,@O$EOCU#?,X -M(O7&I3N+30.D@RM96[&_-)0)/\49"=6$!810*A/^FW$`K -F"+`&FNP%5J%=[MCO,A9%D0D'L8&%51TCE#9?_B[DBG"A(9GC:TH` -` -end diff --git a/contrib/bzip2/sample1.ref.gz.uu b/contrib/bzip2/sample1.ref.gz.uu deleted file mode 100644 index 6c36f44d14df..000000000000 --- a/contrib/bzip2/sample1.ref.gz.uu +++ /dev/null @@ -1,850 +0,0 @@ -begin 644 sample1.ref.gz -M'XL("%<.FT4"`W-A;7!L93$NZWW'?ON>>>Y7N^ -MYS>)(]YRXZ=./&\"_DG^^PDG[\C_\;IV\=L.&LS)KSLFL6;MQ[5EK -MSWD'7''$Q!/XYS'XY^9$\5]V[;_Y]Q]9_[Z;$^OHCX]\N[^_N^N*^J&G'?$/ -M/[ELXJF%`OW_R&QE=M_:,S]^8;[36_AYK:IR@U67?_ZJ1JVU>/]\K:4Z]<5S -M_SRO+ZW4%[]\7SE?4?GJXEN66BI8[%_04J5:M;EQX7U/_Y"+I>":C?YX([M^?G%VS<$C=S"+9,3$W#3^Y_VLT-_\+W_ -M>.D^_Z96:^V:Y69^'JZ[[H^RS4PEJ&:";*:]9V'IV;\NP5WAOM<>>E'MH^^X -M?^(8N`/_G\I6&AL>N#A?#QJMWBM$K2XN__'JV!5?5&HNG[2L%`[AW9[6T -M%QY']RP>^3?-Q9,?*<&\ZUI!;PNJ636G\HN;[V_"K^RC:<+>^N,_N7(?3%D. -M!W!U+UZM>&JR]-JYV69A:475/;LW[^_N[7YZ*$7MR;_ -M8J/]S%4XHQN^M+G[V-Q?S"[^X67-Q:-N;#6";"NSL-#==^#8!RYLE\JY4A6^ -MHCA(Y7Z;/Q:6%=Y:VJOR.E"SB\^_@EZ-M^@235$/1M&'4=0;^19<1)\9PJV- -M_/7M4H,&J[)!(U]HET&P[OE":P:^$(=&XZ='+,(+:M4P=?6W:?K@-9OOK[7Z -M?[MC3K7T7!_FK];HJ*"J<[`L/1A:J:KS/*_=T(5I*.EVKJZ^-GCZ3:ZRY:#![R_!M*ER0/+5#HIYE86=52K++VM57+7(:P.>893R -MU.(SFW/PM35X^7S33C3]MU3=PT(+WX?7/W@!_`C$Q5Q$PZ!]`W-?K+(LE4#O -MP5#S%2T39H=!LB)#F&ST0*)5:P9V(SX%93T=)G_P19H2?(!1B+#]51VUX5L6 -M4!NR5,.K<(5`'RYFCH7M0;."JH^%*0U[HXYBB0/!U]([(EN$-R!OR>3P3:@` -MGG]%D-.\BBA8I'BJHAA@>5%(5$X6GB8O#V_-ZV8;E`^*`+Y,PX_@)W5%WP&R -MQ*_0L*QZ3[6FYJLRB/A[X+OR/7G33"-?#OHB?2H7)FZ]$P2KVH1G5_"S-4D* -M'"09=;'9,F:Z5;9=KI0B\HL["<8!8VRV=39K/\C,!^B0,'755W@T01DN;?9A -M<+A=RV6W8^$2>,C>15&\FE8=EF)-9NT&G&.:&)Q_Q<>1=H<1J?I2F>Y+RUL# -MWHK)C[]?9E0W.U8!5S3LK:8FL8/-UF[V8)GQ.S3I,FV7'Q6H;K#HY_$`P%NZ^!-]\U&6_>$W'GKMPM#36KAG" -MQ![\03Y,G?J6>@"GRTDME>L]N".?#4!WXT])Y347U]X/LP7KG(//7OS,0K#X -MJ0G8>8N_N"^+V[)1TR`L)"AWW(^2"4O6VXD;N;YXZO[\XE,^U"`)@QOA$,9O -M+P>O[2Q\@,95:/>^W:C"_COX`Q@O7E,>)&]?`*VC2.H_+[=L,.1.>?BI9$#]_2VPD#@:5L -MP?AKFB>O!A=EX=8].FC`[;#$!W:BI=5NT.T9?04.`R>$9@A&1#]?//%Z^$;Y -M44>>50);B\?5:,,8JF'BWGMA4D"O]>%K\!DXDS3F8K6$\]?.P90WRS48P#R_ -M90#W\&.#JGD^O+#4H$F3M:'55&0S9&OT*II%&#G^%DVLQ>]/B)9*P[3QY*), -MI&6`);"\OOJ*,GY];0](;FD/2M7AI6!$;O`E"BP/,"*"$FX$F'=5.S:C+ND^ -M]I);VPUY>X[#B8T1.O#V@8.(7P(QE,O3?ZMD'RE1\E(:CC27_P!SE8.#T) -MW\.O\65!-_(D3D$6IT/554>NF05#L%U'T8&_TISA%,V4JC/F>IXB&0:*>)A\ -MUT?S>[N/77]_4&[3+7V2`3,D`@V_1?.E"9H' -M]HT[5D1;D'\"NR*OY3-+.=!LD\^=V-\];^*([6V8&#Q!9#/@R9&\ZHHVO1O% -M/#998*>92]DX:(*BHE^SV`35?G3L.!%9.2M@L"C`B@2B@M\)`L%6[XQ52N4P -M,3PI"V/&&:RM8C/AW'`=:C>0(./2@Y(0?1[\&*XNCI -M^W)X)8L$_!4V7-`7Z3(&EQ;U:#9<0$(,4OTCE$K9V+I7MNLM1NP_6`MX!&\%O`")4*EMXMCV$U.3*S##B38-646'4'M//P-<5\5?G:B/<<"P"L -MA@;ESNN/L@FB6.*Y)Y&$N9FS<@U;>)#ZZ?%!LR?32\L/@^_#E"NSA4#!T)2" -M<1#"U6:;+*+:HC%JN@YLSV8==G9&7]")<$GX53D.@ZW"(X!DG5BI\;5K/!G2HP%PU -MC6/!WZ)%P^-2Y(E_)Y1VPOM -ML[39?O`<^"7N1D5'"#@GM)WI&ZMV)HQTAHD[U];M-^1GQAX1WG;+X'R24L19 -M/!,,=_YH&+;;5V8[\N_:95P2^H79JJP%\_OJVN[3"DX%JSW\$ADGB"^:=+3M -M\=P.DU=_?C,_#QX#NJ76+L[!HC<4?P1H$7!9\2YZ,+RFBLIV1&TMRDX1Q263 -MK_%2&"/Y&7`%^AGFM)./-'N-AX0''PC2^7-D$^'!/>]TE`[020`1XO-`D:R3 -MEL#3#?T%W.VX.6A_9ELSI>B!SVZEZ&R0O6:/=U'.B1>+'`K7PL+"7V$\+#'Q -MQ/YYR4KQL*LG)H;C;,'$PS5K"_;(%F2%K5GFVN6-]FM.S,(5.@[*E6V'M`^8=>,+%_,+[,'B%`RRB=;ASYRP*:XNMK+RUJ\Q_ -M:XT..W1UG%S%`DY[.SKM^G#3GEFX97*^M[\;3!QQ-:UW&9S8Z2^UFP$(".MJ -M-7)`@SES+._B`HA5V]UX%.:,TI?QD*Q$WK)HWC)(K:N5JO6VHNU_ -MG@;CR$G+KLG6:G3AX&JK=6"I>35435O3"$XY-G/(&N<#R;,A-$UR`!\Q(R/" -MHP",X^]/[$D/DOL>VDNGYDPPLQ9@P^IB#:T% -M^-5UM5G2Y["(8(3C+F#[O^2IAHCY3H*D1#2H.2%JA.<^68AN$NPPV!ZKK -MRDRM,(-S@KL#1D,!WD\_J!W;M.8"'9XU9US0N_-_ND3.=1Y(D=/5:-D -M2BV)WHZ\X#1027V9(S&GP$6592!G3X8PBQ).DS1(?/_'8_4Y;A+>@[1-]K*9 -MA$H`9*;6AG-A%O8[!@K@`(2+X>OE<+:^F@;ETL,GIG43_;P"?I0(EAR/,'UF -M3/;\:.!A/TAN/J[5L%L*7F###6C:HF-C`K@]N(_NH5U,=N$-H/=(VO1DHX>^ -M1TO3DL&OX&#(XJ%,.PKUTJS5EO94G^\>.?/9X0XV_0>I#;]RUG^NM+?D9)^]QY[Q'O'L7F3_ -M47EG!,;@8!5Q&2I-<_1AZ$4FFT[3VB"Q];UT2M=A3$%9F^##1HRCCS\_>_#$ -MOCD_\[J1#N$9\[P%0)SG%'@6VGD68H`V8>6S;0YDP`!Q#X&6<8>A46/H(YE0 -MRFO>2;%]4,JB+TSD-M"3^V@YHX*;UC(,\(<:<-*1IXPS%GDUF%BRD:PA849" -M/G/:S%!?CB7:$S#[X/F%B:^?16/9(WXOYE_@DHJRCI.B68[[OAFUN0G7P!2# -M`T-[F[(_5O&Z3Y3[R>0QDU((DXFS)ZNE5A_/Y3EQ_^`,4"W\#=\!YU"#)0*\ -M8A@8O1LM*PD(."\Z,GF:OT144"$:]A&C/QHWD0LJ=MO"VW%7S/;1X,F5/']I -MEG8/:A)8"K3DRBP32X\9.\U7!32QL!R1\1E#0*)/L(`T-'.F;,_OQ6W8(_MI -MD'S@A6B2H9:A;R-MCP$4A<'*GIC0^`(ECW=:SL0N:>;))@)]%@T;9/0.-E0H -M0M:HR0#M*ANU42[6.$2$,U4)$[.G9)6R9(58(<:EZ> -MO:6@3.K&3+(SQ>3\YF@J[AE0FW9=>J*%,_I2/(9K8*_DX*ZV`KL[A^_!(,E% -MY2"K]O"&O4KE._R!,JJ7UVP0@_7F51>=>\Y"][E'G;P;!OKNMYF=&9M*DTS@ -M%:K`SR3ZQ9.AV&MR(3+S&)AQ%!]:)'[?MJ"Q8=U"]\3G_$EZO]Y*=V]8N]!] -MP?&UW48!2,PG]=1/11(U)(<(O*6#/XQC_8+!XS_X;M-Y)/=DOA8M[WMZF1]>J -M<+)1=(I,";'MG6[3,"#<'/PEN33&:CE61X$!G`64?'LL8JB!#77XJ##UWVMY -MB8JHO237$-4Q?3-H"C=3PD/-\J=B;@\]B#0^A]4%Z*YY6$->,9#S4=F.GQKP -MU##U3_?FT.[.R\XQFO4B,%5JM&R\\!===,ZY(&C7?VXW:SR^&N21#5S^X;9. -MME$KM/B.EV\[]VRXXXKS=V?4R_;1_%7E)&GZ.G"0_,\/HF08?33S>+)!1@P; -M?6J^2O%N4BRT*D48=I5WSU:,?7A[Y9*M&];C7CEEMYR'<*<,Y.I:7[05^>Q@ -MK`5JKLRW75W33;SQ^==]>'VZBL9#O!P$_!'Y-HL<1' -M+080!V,)PSQUPM29_Z=-:RIBJNBHI1,4ACTO`7^PC-FJ@M//B)F)NRLOJ-_W -MS#)2U7C:2Q@>#59E39:*G/+#\.X8=5"=Z5 -M,6U>`2OC(G'@Q%5ADDO]EV -MY[CY3HQP2_H``T3Z52C)\+D4#.V1FR,;L$::]H3[K?BZ>`X>-VJ.#C4,5#=U -M7O:;=?URVI^OFCVPV&+\\>?'&QBEZHAUGK:1=WU61E_MS\',+#N3J!)]6P%_ -MUY.C'GR(*AS::?S48IZ#6V"!F+.C2<[27I/P<0>&IQ2,U=F3`UJS^J,X_3S& -MQN`X`#^%0V22K62%3L9_AUROBG(K(#?'>!5#U9!33- -MJ\W*<4V^?0M/AGU@S[.T>%D$ -M`0DHV<>ZB&XTJ0\\8[R!\4XU@NW2<$:2FYEPU8FY"SND08)&'PU?&`6F!S$` -M[?8NC5AS7H-&K,8.-V)*C:@A-+Q154><8',RAZF9O:P2`P4F))V(UL*F1`R4=^,XZ]NS,JM:J,]$H)!]4 -M^,*^>6$6@ZZ(ZY/78HA88_C3V&6!/8?JVAX_5R^-:/DTQJK1N;%QGS&G/2([ -M1CPE:YO"H.M5V:VL%,`&HG_-L_.Y1\WQ'W(*S]V^/7?5U#5;K[ADNIN\NA9) -M<8O[3%.995PGII3($2R#S?&>/F4`#I-HCX3],W@'&8AP/`>1M1A-QT?N3..= -M&':H8-RX)0H*GK'>#,J;K<&J4QYAGSDH5=/L",!)8US$*@?R6(2R@A;*[T.A -M-0"=?.0*<\B#;JJ!I6DC?K0:T0=EPN3=A[;;C^*X7$1=@%88P#7ETAZ7_S'+ -M2>9T@P.`&(Z&.=9.%>-!/2:_8%*U,J)8V"9NL:3W=Q.W_?:JEY/]_>Y[T8R^ -M[;=B1GOKX;QX#[,04WVLX3CFH1G7HNJI>+#5Q0],NR -M6;0?P:O#=#U\,L8H32C:$V&2@WTE5&Z@9X*Z$4,_.QMY11J,)>5%_O**S0Y0 -MB$%CM@0CQ'0[+D)+U8[%1_I&`BCP#DPXAC>Z\"L;A?5/A,LOYI7ONUR$*A5! -MD;I3IN:''M$KS373XP85^``M;;$E'7P)09?08,8`J8DY\`>@>BQWC$"!T`:- -M0?)=O]J%80O>&*NUA9JA"V9D2?F`0@*XYM!A)[EG[`J*/QT_)N6$QY`)<)%N -M&N^79`,QNG*P/?)&V&VD$+[HQ?=32MQ?G[AV[\)%LRJ?Q:01!PE>?']^'P+O -MX+OV:@2NO?A^D]/'6>YEF;*^9Y0*!QU%,N6`?HON4PT -MAXIO'%+>WAX18"0'D*VCEJBN7$9H&/Y^EUP=J@_)W63FN1M)J:EUXQ+>N.73< -M*:O3?;_"I]E9N^9@0@W7*?KW]/ZE(][PV*')*T]Y^*T31\$E1S$@N=DYYY\V -M+72/_-010VN]Y7+&^[KP'Z]K"\J6_5L\"]0R#%X-T:]A:`['9]IR9+L4*0A$ -MKM8&_31KK463+1G]$K/@:06'A#64:/L.4M<6X#,3C_:\#_(_RWR!#'[7*(@,A:$[@C;C[Z&%@S+A-C3_(Z"UY:U2ZH.(@\=9G14`:8A7H -M<8@O30DVAHCT.%/&>:FFWC7?,^`*QCF*Q;0:=G[@&Y`X/EE#_Z!+WZ*^L0F$\AL&/> -MR>B$L-!:_.KGFV'JC1-P.NTM!8LW3\PN?N.=N-,6[P/K\S43S<4U$W`0-1>6 -MGOO-:^@Y=ZW+K.T>^X;?;6?XR,<*E+7%^KJ+#()D\?8-!/9_MMPRO*A-YTNM -MW43+?ND0F,SMXESZ<`A32"XDB38^`TFI",8#3-ICWX$R -M^B8_TTU>>0N8<5?^?98T'Z;+2QA#',#/"0C*$"+,/H/.IKA1F>$Q,Q7"IJ@V -M2@Y;/9)-(!1I#H0D:P.Y1GDT:@PK(+\W/4C\]K=U)<=TS^"H.SK;R;*%K.&I -M];FT-=V"1A8E\+@\VWDL6]9)UH1LL'AR\!DX!D'O,>&.Y6WP^3*:(7\")@7* -M^3"YY8\4"I@J"4G$-WX.GYC@=(;Y71/EW>-I2IS*.ZR-8,&E7* -MR5@LHR]6\F(*.<,#T`[4\8MD2'`I;HPP\;FCT7AL&WPPGY8.PF3G1[7ZDHHG -MR=:<7;7CMP`;;4&K?";TXV<"?D`$]Q=D&R+78Z:KFSSI@5E07^BQ8`B!%(/Q -M;T]ZP`NG&!<`C3'>V5%OB%%$8$L9;PCAA%HB2U3M:?))&)#3S32^VM.89N8X -M#9-X^"=!&1,J00=MZ&90@!'0(4.(M#J_3O0UN"!H/''.@`9$2TD%B%J@2$$% -MYTU`,S!^-ITH/3&6I91ZZ=FWW[8?ZW+7_5'BKAL68.^< -M#YO8A!9;)XZ57"M`J&XQL]*WZ`D5@>=3*#90D:/103NM_>'[(.[`,2N&HS\_ -M$B4($[L*-#T=Q8$>!N@%JEQKL0%9$BP7[E&#&A$$Q7B+<@3X+6]%^/=IL(RW -MG^$T4VQ.^CPGN$(K,''N -MH_^Z])3+OX"+G9@X8NEW,^?9747\>L^EW#UQ*A>9< -M98PGV2H=A'&@+8UEAJ2#L-Z6ON] -M]UTQX1>`MUH;OBWS^T#&1))33Q!L_>H5(LGXI7]LQ#H+8GUI9*.;D*[^.N;J -MU7&$[(<)A5-9G&!4]/PW16?NHL"`/"R^3#Q -MBK/9\)"<.D6K_KB;N.I7Q9HD,W##\$9R4;1-<%IR3I8RNE2`P_4*(WJ+/P(< -MV_DJCQQ%"`8AX*LNB(]\"?QB9'YVT,>%R7L>%I&#+>6?YWS:H-@:[*YJMI^: -M-=$7D6T[#V-U1]\H4`@Z(=7W"_Z -MH7OD2\\;OLQ%9YTWD[KX1_%R4^75M[D@H$T`5!3#7&`]\=V2NHJB#W%INZGL -M?;Z."N'O6)8DP$CX&Q4I8OH&UT=`.KB:(I$ZKN7D"0&&'-IUED239BSF[?Q2 -M]C1,/?TS-J>'T&D"UQ**@0H1@Z8R<0F32;?GP6E-M2L;,R@9#$:&S&I!!_M' -M612/\.(A+,IF=3[+P_4Y#X.YM@,$+,@H/+B`"S.H/&@R,\"FZFERH(8Y`!& -MGP,8]N/F2W`\P.58$#L&!NQ6SDK8$3'[(0_NX'K'3BD,"-I-QTQX01+(&'*=AU_10JR -M%2LMI(BE9#9I/=-\>LAL+7[OY8C\ -M`;\]!+\==7RI"I=__/68LT/EA,D$:'-30M+SQ3M-;RD-!:O-5BU=C>" -MM/A1^&9M,IP4L^`'L3]XQSJT73[\P'!JVR5J2W-:$Y*S:?6]]PS6KN)Z$9JM -M2"A[6R@W8QP5A/M^[:_J08GK:0\]Y=B;9R_PXWZ5TMHU![:H(9[+#M"'-[&( -M1TN>'8!"Q_!1HF(#L6FS8!0J'!8*F10RR6`/[./8XO-;K]_U.3^VV"J=]R=QP\S82)[AB3*\*<:Z2EHOB3^<;`PG))GN=L.G-<]XM8/'KQ@.'VP -M*-.ZWKK4FV&/L^("7\6!E[QB;C-M?5M`@8E3V/?X*9HB;7$T&!ZSZDQW%,*A -M83+E/-H#6_A[CUF3OZGA?V^E=,Y'J[#DJ>$0O=-&?F9TLAFV4"SME2-7'O;1 -MZAVGKUWH/JW[)OBL:Z@"'8.0F(2W585>Y,"(29CX[\T%M.YM7HQ,MB;'$.,? -MJ0[L`W=!3#XP`W2TYH.'YMD`[C`VF:G(!."W'GW=W?)$5@R(3H'%8'B&5^N2 -M;'X+CKI:@XO,ZAQ.SAE]T?P6QAO1"\_@E9<6N-K79%*\<6,6.IZ^3]N@LE\N -M8X)JA!NLXF%Z\`(UI'I3#V;#CN4_;\`-I4#ZK+3)[:6J+:QQ;J2KI!B[?'3R -MUBD0AB%<#!(,X!7(<8`ZCD4!=9X],U&]E/6!+7K(9Q47D)JSD2)<$>`4+1?Q -M(B#YTLZ=![:,V3GP#9Q2*.UUAXY7K\O<4_@]1DCS5**`3"J>*SJ2-MZX<,OI -M%_\>]N*C=X+)?N/$7YZZ[]#S?C]QVL8(OQAHH7L*"_C[_B>_--RX<6$!J'2W[5N0%YX/K]Z_].,W_(K?>FCBMW>TG^D/ -M,+]O[9H/G;NP=,S$D7S)2T'Y3TSRGW&T2X=^E,-G?^1=_W!P$W[($>=\KGE/ -MJ;!PXQ$7?GG3@7TA#'-XOH+?D>]"%]Y3+A5:X<0O'QI.T1_5<.JN-?+ -MP_/Q#E3T(^/S%3ULHI?%F#E8_\#@]W=3Y_Y,;GY&YIU\\S1J5.W;);XJV-]- -M+/_'BFO3/?,3.:ZI#.&R`!W:><7ZX."F`^<-9%24?C5?`WO]J(O>`5\#2X)? -M@Q=JO`K^,_;;]$JOIZ^5,5\:/<$<+&G5F=\.BE@L:;_2CF0=;(C93\)(5OWH -M,C.2$(=,KU5C!Z,.,QA\%VE)^X;UWAN\M^()C'-BC(#Q*@AE-B:RD0&MF9ZF -MKQ<(^,4G.)J'B!9R&MZI+;#XY[7'H%";118;@082W4M^K!#!!EAUS:TFHH^% -M!@9*3'&R,'G?\4P5Q?9"N^&?HQC`-BE9#AKC>4V;Q,5THV;2:*Y3@&]2RF") -M,#"(T<2Y;WI57[L_/((6=44,`"?N&5B@3K%0 -MB7_6$$/\N5OK\!\5F^:,NJ+FP1%,7:Y=XVA5DI@+L7`SF0@F`;R`0UHZ:NE# -M*\4_O[I.8IV;,9Y90+)$!$X2.]QI36LJ8P2T6N-,/)/WH:6(N98?WE$NF\)C -ML\#?.\&0RJ!@?3'D?4.W0WMWV(#KJB<6)M[QY%(+J!;3\$E;A -M`$)`-1O8&%>T_CI5B(W?37PC?0^%.$M%PF]H../>\F;!U;+C7N(M"P.\(K_7 -ME%&,,J4-$F^_%QU?5XWAUPO"+B1\*!<)CFS(#MU-NY'AZ1HWHBEJ9_@3)8M'2 -MIB+*A)N\-!S/3411=O;TX+ -M;/9JFTR#OTDYE\,R]VU-8DC9&$2@ELH!%NYJCSG`U'_AHVP%&#[EO(DCF.R- -M-T;/IP1,G!U!3<;1&QP*S=4(00.>D@-@UK`HI4HT+S&U&BER')7?*/`G3-4_ -MC2E(/@$XYP#>"4*OX:3T<.Q92G.,W\RC$.KZIUFF-$N45WT!;T:AI*'G>X;) -MI:N6Z=?#*';%(B>XJ!A%90:C&$C2D.O"735=]SC',%/;R.#/=S8I2H@/#M2% -M6S?/T+V8UB_3VG*:(]"S1D*L&`Z2'S@PBB/R$\LL^_#0<\]:Z)[\G&MW:V=& -M-CDJ9TNSZ%^NV!^DSO_JM7>=&:9>WCMXBKKK -M3$7_'NY6[F]GR\\P+,N)A"+G('AG5;4Q&DWJ900M2G1&HR"TL]>L2:]9LR9, -M/;16]I&%_@@I-Y??V]G`*RT8F',]#$1JX)G%6D#;H*@$4#B_[DQ<[UB5<:"M -MVML"VY/MV(;RBRF=Q/\B8P -M:AF/`!?#Y+M.'<4]&XX+1:8JO`^\2'2]&L[M=!CDV#43XZ<(AV:I93-L7#-@L@%($`7WFCU7S+?"U,3? -MNM*=!@)-$4=C(3(!^CL1*/DXO@M%=;$8K*P@1)]R;'F_'JW8B*"U0-:ZJ8GK -M9QW-D$$E[:-3.)8JZ"8SIR.!!!X?3?Q+"PM3#!B689<#^#'3;R'^3K@+"CVF -M)@DB#',%%0/;<(*'J_<#B_,QNP]8.9 -M(\1GJ$M*XJD0[(/2>B$]1CGJ4:9-,J@KSH(CF"`:]`F8@BA?QUUDB(C<$*E2 -M/O'=5U@+5"/[A6-1&D.#BKJO"N8G5J;G,AJW/:(05R`M`_N#CN8&(7?K;900 -MB]+RWY0)D^=]Y$+?[;09.]KPZ/QZI6B296=#G-'DCAFD9XU>;@W&N6V -M:#3FPG:4@)9LTA-&PY.`GQPF?Y^F3':,@PP=$TQ"!IT!2`A(#1C*UL>=\/OJW4P4,D)4;7**XU@_M4??Q>D4"^R/L6RAKC1G -M$'_D>!7C)=!'R3R]?*]1K)N[B9L^BYH\3-ST7Z4*Q9SZ$0"*I!:_`_S-3XB%YE4\#(S-]0I -MP"=G\:2$SQ>FN/)_7J#B,Q,%J-:L5S0&,9;\\M&\RH&VU,*&445934!\%?3])HV?E>1HVPF2$;J"M4G1@IY&: -M/_?!]Y2:>ABH$:9DWU_%I.(O3_%CQ,+,*HEZ^F6D"EL?V!(F_^4Z3-JX3/,= -M:Q?"U.N:'.O68?7'"SB0(;,22PJE6&C9@5OUZ?97)&Q_F.O6F<3Y]A*ZS#B*#_U.0:'V\:%PB!E -M#:EY]OVX&+'=8%O#F&U@1W'8S\0Q4/_!\0RV*Z)HL!.'H)D10C"V*T#:`L:, -M`Q"4J@:Q]3_/M_X/G&=U9@S'HPV4(590PY$8CY`)?Z4Y+$U:2.6:3%R)L==( -M/P13E4J?8#A-I"+67D1U$ZGU5U(BD>4U0F,(IDD-PY)CY)#"TAF\^1K6O+87 -M!1F8.#<>!XNN12EA#VR1(0VIJJ(3)D_HQ3'%>!TX/'M&P@5,\J2]P:`WMM%7 -ME>X(,$X@^B#LD&#R(9*3L=271-:UW1UWT#M!,\/L#G<5KOV'RN@$:=:D+?N@[^NDPM>D4Y/XA -M#C\J$F&8<:^G";P4-JNA[\7*13ZIML.86S3^E^6C3S;9URUN*AF6X\8&O -MS$/_\RV6;S+"PFD99JD-!A82X/;#^H4;%!8I[-5>HE/*T:3,R-6-^/FW(L$Q -MPV3N""_B!"\TQ6^,E[%]-W#3,:^2Y'Z3?@6YF\!+P#+IS6*HGF -M5//5C?C;:DUC*R=X*Y?\QGB')37A5Y9&"&`-(..B./8I3'SA)B^6*6:1GO?U -M5B.?C_A3>(]U/NBR$1I4Y-8R2L$=@=#V"T;'%NW-G -MA,56+Q=.!3MJN7BJYKJ_Y;E3AQL7;GG6^RJ@EN[^S7*EEL.RR%6;?G_)5&$: -M-F`>U.4-W8LW?:.@SE>93$85\-_=%][]X]>3*KO[-^Z6+5-%>PO6I*$VNN2\ -M[M/N_DU1;BZZ1ZC1^[=.S8W'#46`ALIG4W<^5N8C\2=7QGF -M:J3..6@DER&^2P!L3! -M],?7Q82)A_:;8^GQ:G>V(K"Y2IV)7'C:J\FTA[\86(>394,?6R9],4@^^"Z? -M;TF9_A&%MK*I7VH9%-&,D?H6>$2S?6P,3\KD1V0EN.A41FV#8?'+;`U.J5I& -MVYC8)9*;=L?9GPB]7(N4R<3V+B\L78O''LQ.N4ZE,AZUR3A&)778ZJJX]4ZZ -M5/R[#C_90RF5O8!.17N)P3G.:%$?.B4]-DCS8H@_"[Z)5_>?>,33\$.1NC;%;0-H=[#+79??]C#_`U>'W17!9Y>/OJ&&A2<25>[__/U9J3[99C,/.KO)S,U55#D;V$Y;N,?#Q/_WRGASB3ZU -M_J"BWJJR?`A]TXTDTG_.JSDR3'LJT@J`>AC:TGP.6AH5/ZXS)'*V>YTA,]JD -M_S"([H^^)V2U.CY\E;6GBFF\,L^M#\NYC29\<=03"U_L>?EA"FPC=>-7TTE8 -M"U.?_H[G44;A(/A+A([8,I(8.:)MRR5A_4A&T);8>O8;6=VV\Q\'*7"#E$+I(D,0QE*;&6F:D'YJ=-D?!R^FGM:126\9./6OD'#(< -M_=CL-MH,"[L?W?N-T4G<[*<^PM2+/^K9OWZ&&3M("/>#9-+&-DB!;^1IX#8A -MU'(L7J-C&5,I22$?([6=*(VQ):)&0K8,W3`[F;@'&^*&B\!CGR8J(##UE_[@ -M%>_@A$H&T.UA1>4JLI%$W$G -M@#8'V\Y/9XK$9]05IBN6C,E#(QJ*/'J7R1::^'^M#7Y:JY"K]7U+P3"+4T+I`T0=#!YUW]^-SR[6'3AY8!Q).QUYF+] -M6/V(V..MW2S!67*&\S3U$:KMQ4\0MOM:%8$WS[OC7W:/ZP2;YHA3L^^1CY:% -MD'B&%@%,'L$_#N#I4>N2>3N7*[!-R"N5,3',:I#<_L&AZ[`7L*&DQW\0A@Y\ -MM-:B=*I#``!C4GQ/AEF\8'>3NZ/)$!7`A7#GI[GW#!65^BTQPL0__#3>QY0C -M"%@=CM.3P4NVUV):V'5$E:,&+H)MR_&:@##('`%$G:B-YVJ199;`>Y!\VHM` -MJ<8J`0W8UL%!KK1,,CA,FK]RLQ:)QG"T,YO7_W^XH3UJ(.:U,Y9XF/CZK\W$ -M*E)<)$R^CO*8+*.]&=AK&,-KY\TEJE]W[#HYQS:)-+,>!,WTE^G[O/1<;Q%H -MBVYP$"=T:FBP=`I+3P%1W$TZJS-X8=,F'SUU8[RU_%4**1T>O650]*T#<\X'@O9 -MB`+?.<8T3XE&W@4E'RT5@3O8#1HF?O:_I&K&AOP%J>(P:8PV;W%Q/88\+4<3 -MEYAC$)G90_#-<$"56E'N`.%LL>&S+KPUT!*1Q;\L;S/D7MCS(_'/_^A%/4QS -M/%:,_E?`%ZMAC:MJFS/1XN@!/,3*4D9?6#,TLG[['/#;0Y -M(I`)Q/9I=0K)Z@V;\PV3G[T6)9S2&7U#"I:VZF@4JEK0F(V)F;Q1:K8,/M6D -MYM!.09OE0G#,]I327I&$S3=S3Z/*\R\WS>VJ&*^8;3LFUWHGG+7'^_64]*ER["P4*]:Z;NB"_GY:<9<.?+"B(@A[+`+KS4]/LR> -MH5X?G)Y<\+D1UXTVN,5.[98(J$*X_],(>9(B\AYPG;Q9A,S54KY3;<: -MTU99G64/KI'>)(/D,S^_4I(*^:O9-"#@>$RL065D* -M-:2YN4;$:D@,B.AXZTYPQ<9"4`>I<]?%EG"CXWKLT)%#W/JP8$(.5+4\CV-9 -M;6T94H"^39#M1%W*Y"-?$&X\6TK@0.1^UW.\,L9Z:%U,(@HB_NZJ5-SD/<:X -M.!P4.T3"P^(AVHX/[1LD[W\F##A?]XZF?$;+P*(1Z9$=FG:D*OB;8A6M"GZU -MY;RQO3ZE&3.I*@)(>[T[9$37MQW[XZ34M2Z=\IV7&F[8,S'6MQ4+P6[?D.]/ -M7MR0&!]\^-&(=NW27W.+7_P9?/NFA:7CY=;AUDCQV" -M=39$+UHE2^FILA0T]XS5JST*;0(/11([MB+`P.J9(SM,G/L#[-,5U$NYL@_Q -MC1!>C_:LZ(_MLFYZ3\!#<8MZQ-BF.?;RM9=66[LQN(S%2/AG2]TJ*9A!\FUW -MK%AYQOD]C<4WR>?MDK(;6T&)QANO\_JSX@"/C-ZS(==%_LE5)M/YJ_+.^*X$##B%P6E\3'&Y%]W9OKL#6='03-IBO%&O'M[ -M3@R2G_RFUR!5G[-FC;3W]JCI5W:7XR`7,W5[?^T-T0Q49$]8[3@Q4N[8)(8) -MVQ[]Q,*VKSOF<%WHR<\'.^;3M6WB,_I!,6X;0Z%FKRJ''''+W^7US8Z6PD09 -M7_$<-]PR59NIM!V8+*@L&Y2STN+,:P_#!>^':RGGQ6%@**4&LM5H2^\JI#*5 -M.%)#@$(KD4XE_^MK6'OKZI&T;91E"GX]%F_>[YC@*I6;?GK*+SKF>C)?(]`D -MFU9O.-41V:<.MF'B_2=[(42OD-9V`!I?@VER>%)VK03A(R>XG[2W70*LF1WO -MBM7#:1TD?_1"WHW+MSRS*W?X#0M_>34J>KTX&EW_^9\/+)V<8DMUM$RU&6JT'WV -M8[_"/T\5U,NF\:=ZVD_`FF>.XHGP(+GVXRO*BYS-8W=> -M1F_E8:?UY6-C?/?I')R_];E<=J=Z>\?Y98GS:=L\]D_O@5\]\YGO@DN[Q5[^; -M>(#D_=B(&DS1;)X>T)U<_P@R_M`-3[WG._BC9Z>^.9Q6U',5B:MPM/S[UURP -M%G\_]Z'O#R5&D9P9^E3FW(`=L3HJVEQ>6ZVIJ0FJ5TKB'0I8C!AAD#'=RC1% -MH&*B*A/),*?4S8&JX:RSI0:H``]411GPY.F<7_]MT0*^<@]3W_XP>15H`\48 -MJ>%KL]'"@NA8$>#+WO6>$6H=G!1'F&CPJD5J-*%`2-[\%]X1.*X:@T1DA0.? -M_2!8?>XB1S#6C+ZBE"_;WLOF+V6,JM;V4!@+7DJ/-NMA6:O"Y+M_YYQ,Z;%Z -M!67T)E*[$:(M_:WGQ&,J-1S7"/4J(D0H=G\Q[I2@1.WV/$S=!+R<&RUXE0"8 -M%;GOVB@S$6MO9QT3WV!+23(++M_<3=YW`6E01H0PH[V!F&@D^[GO6OS./E*^YQH>$O+)#V<# -MNV1]KD:J(++;_#S72GVK8653>JU#RY$PK>PW]3UK%@MTY)21>G;"^(VM(37B -MV930)DF8S?1'S',I52$R@S#QID=L]P/.P&GIGFE+8@PVHAIABQC/$9%1VSF: -M&@4$.LB!XB8>?+3)DX -MY"ON-'M3CV"?MR.?E1CN8/[F0>I%'ZK#8#C\A_0ADD:R!3[:R*'RPH/&8O%# -M:";/>.\UB\%#.3J7#U(:-',*DYV:4 -MB>O%_%ZS&:5G)7]ZP9)J*(LJRDJSNAH;+"C+AHO+T=C`2R.YDZLE=T(1T##U -M)W];+@E)DN7YHRU'ARI"#$JY/O>-3"M8+XX.88#[X`_V$?9,6/'&<"/CM#3R -M1;)D>C*IS%"2[L*+,.X3I#C=>;QXBE8#J6K>ZH4BJPR -MA9J9O(S:',) -M6(2R^ZDG"BSE5#Q.5)AJ7QSC%/0.=DG4/]%89E"NL?R@V'/[9:Q,H%.L"R\B -MZ)2#E.)1A,LXE&TK(8LT*6PB!1>HF"F-HR`2A96:=*76O\N/PK%&QL'4'-P+U`%J -M&MH@)B*H0X5P+R:2#`D=UY*=CZ>*,_D&J6]^UJ\8`=]KB@4(@1=L[E^$ -M+9,KRL["M*/LDAXN&+,H-O(]T>*BLH.R*]D53^W\&%M@JKW%)7SH_*!E+E5- -M78#'_$@OK!5:/8*KL2"A`Y(58`9R^,#S3"+A<.G/9A=?7)`1>,*4O9KKXIRR/1.-,#`^K`LOL%@X?X4QX4E$8N!(E(XRT,\8$>P, -MF7=]8I$I'27Y!W11N`9)8PV2P?B/U)I[S^4^H6+.FW@*(SP86G/N>FD<+/!G -MG@,S3A9#C%NX?O-X#XQ$4CY$35S*E>+SB["MCJ_G[@D:W<=>?QJV2207$:,@ -M$EWP&3#,!&!B8]*A&,/$[R]N$YJ4SV`2P-,D1QS=(`*V_/W%7-FZPA7I`5SA -MSAC%6L6VF$3V&.4\:P\W)=5)Q$D4)C_:=;Y%@SNBD!\$'VW;QG6\=K=(6HX6 -MI+R(9(C(AL6W`0-KA1E(#^!E=-H3;-6#67)WECRJYIIB9*JA+*6/RDJ`!X$= -MA)8GA(#Y5"G-A=]I3\L9>T-T#--CC>U3&\%-(,5"\H'-P4CJ=SS.1C"O<(=U -M*7$?(L]9VLX#_MI[W[B[R4PS%'JT",309,GT(L#\10+FHS1O7%AZ[DG/'CV= -MHBDVK\W0P:]RF(Y/$O$[,3#V)&@+58.K4*,M!K5(BHUPP9\+//[SW:8($[^X -MVI\*9V89@MMQ;J;`.==/FPZF8Z/'*_GX]O--P0A'L'[V;\4VV"?6X1'C@>QU -M[C]$@&.FE]3\%#V>_]B@>+@OCM1M]0TFOUS3M3WR[NL%!A^F4I\#7W,VR*D( -M7-[.$_S>GR>;>*3OS]5,]+YFRP`E)>QYM&(M@(R9*(0HJ?,ELXOC)B -MZ4:MP-XXG.'9GW7QZ;(#^G(Q+>*$J,DR(7HT=STQ"*&,WK8"#9X@NQQ/+:Z5 -MY?RU0%3'A?!M63T/,PEVN"M^402\],"-7AA%/$5K-#JR2X[<@JGPHK^\F[LM -MK\=NR^#*W#P!IM4;)R[.+SZUT%C<\$[ZSM=,Y/3%J&FIN?+"TDDO?!7C9]9S -M;^4K]R)Z!L,0V,(6+78I#X^3-L?)$V@.*V56X#Z,E]K*.C6>H* -MFPO$\848.*BM/U/SSLN= -MPQX)PJ+F)@O<5]891&ZQ&57I.%(+O0*Q[J-[0(BX/%AEI75B.IJ?2'SXX1+V -ME%UT[K9I*INEL[%#@"R`-@N8P,WT3 -MCI9&/D/_QH(`[C]KEU[3PGNI;A\S.462T_F50?O&)J&5Q5.9L*T[7^+F#55FD?_99[M.&]3QZY%@-4E.[ -M4.WMJ7(EA(!N4`Y@P^4-Z:3P`_EA?OM"VP(]9J4J^ZHQ,RKC<1K=)`\&R>57 -M&U0`:'C,FZ)#&",FE&";5PH(4X[0&N[_:C1%9`TE-N00K$*/Z($GK/+JB2'6 -M=\P%,W4^%95/.#S['/:(%/E#AB\IA)\W#:V"I*6B!01X!6IEBGU&J90MV#$V -MG6;TBYS -M13F+VV^NL''.LN.3(C!WTYDQ2R3!#K%81.IKBTN,=*P(D\^_,&CZ91(,X98B -M"0[B;&T7-ZQ9Z)[XU`O`9V`',<:L8IG62,-CCCZ0I)2Q&3%P2?A^JD,V<74/ -M@!TF_T>;I"F5!]#&:#>!D!!2MCP62M>8BO1Q]P.XX4E(%5%CZP/5X8SIZ&0S -M-T+L$ID0Q)8LMC"Y=3WFWVDBZWVJKA;KB(!U.C!@_TA3JS2?@/#IAI(# -M#W\V@CA[O7+_2K^3E'<;MV#[Q5VUJF-CB+V5&A1Z+<(DZFFJJ(PL,V9!QQ`+ -M\.@X8YOK?%XR(#&3Q?*P7)PU>@'""%RAZJ*#V:?9NN4R""K5`L]N3*CWRBYSM5OZ$N:4O9R9YK,,"3MD)4QRQ>I2PN3+WG4ZW*CJ'\'H^,E -MUR1H;6FN1IFVD=I?ZET56ZB(='&XU`\">+K%8`/9"-ZYD_@R#796PZ'-49!8 -M/9CU!.P,HD*-S:%T.)^\ZAJF=21=VG.Z=)#Z\+>D$-.%TWS@%\?*>B,[6<@I -MYDWB)(I6`NV.:J%I3;1TG,:"/L[(!Z5?RC55MT0WJ1MV$).`P0V)B>;KG%&U -M8OU4I`^3T!5>;DMPX`E<]Q1PH8F)5KF<>*:U"M%#: -M`-GJ#0N[1)IR`Y`2JA\346=8`1,ZD)4!L\UVRYAXF0S*1< -MBZ9<"#_)I0` -MH4W$CF^\7)U8RT!G/+AVR&,XQU.79(1AQ)SH0D&.&X593>ECB71D!R4/]S!Q -M*'QW,1\ADXA37E,%J.O)8P%_$7$ERN0GP5V@C>2,;U)"OC-LZ>T(!ARD'IDE -MN%S4V,,N;)+UU2Y6GV-+SK;&,+0,-G3_I"@6#.IT>_NIV(_EDW>46J:2-.A$ -M873$@DIQ'CC_2UAX:I-5MCB7=O3&`3S'*!/[];!(L<9CAJ]:<<,9["1(EY&!8]-`2(E.AT5FFY"'0QN`[N3TD+*)_TP -MAFB9@D:4\8P!;`QPP<":(QL -M2I'5RL@;C!PHS\XUG''5:&&J>.9MN"VC!Y]->=H(^Q2?0XP49H=22: -M2Y(=75D&TG!H"MR/D-R/5HS*@O%7:7_+<^[Q6:]:N5TE\I$S,X)VYOBDA*5( -M&UC5$Z6GH1"*?8HGKVE-79-:E1H=L -MIQG)>*^82'#K.M\5B8XDFE&;6IPE$%'V)=2I8M92PDD1A6U1RQ$$VK*.H-W\X7!_.A+BAFL] -M9@Z3S6!L+ITVAO'2H6BU,.>N0,M.SQ]EXHL6P3SN")MCPR=AXM%WC28-A=1K -MT02*A>JPSWR2>N6`8F8`S[MJM"T55EA&21.YOC=;*L_8K85:!LE+)9O7[";T -M-RRK*<+]!_"#&*EI&INHC>ONQA3258W+;%IHKLNLEZV%,U>F)J^22'#<%TPY -MX)6>_.7-ODGE,$Z1[DVS5/(]Q2T'/)?`XFYA?;L3]Y\T_:0X][TF:'[RV^\# -M@59#F/C,V>/(K&)E)A%B3VI8T;>((([(Y$Q/]X:$4NCQ(P6J##H//H^7L)M_[DM&/)"-7`IJX-^61YYZST/W#B56[TR'=Y4&T -MQFT*DB4M&`(R -M+'SHX<%-0]@3<[>[?>Z7R)NXK"G7?RV]I1;UA,!@0X*Z.8(YB@L&UETGDV(^C#1-`?;X'U1+.3!891*KB28[N4W2^8 -MX(5]=-\+0=:C-,MA(FKE -M28?-R+LC6$`.TS*H!"/81IL`)^:1S,+2']:?Q2"O'7/]VS?DPU5?NV9K?O'D -M`T%N9CNLZ=IGE!9__GY0ERN!6Y -M=])(*@'K&!R*CTY[M]R\1;U^6X)>-05:Y!!8]]X'TF1!#*-^R2\_'SB(C@&! -M2_4_'=;C<:<\/R/F2]16,7L>O>0P^<4ONZUI:A!F*"9J)N6+7VY0<0H=T7W_ -MW/6,CD@+9KN&-B47+>(<;4MJ4#U25^#8;<+DQ3^]KDW5?:IL>/EA[B7,N!6+ -M%KC<>NRM`6R5,EM?D7V$S9\^159$H-P2:*^P1^@BK,8QX84^8GJPE4:CF_B7 -M_QC-+\,/_6:[[!S%>/KI%_[9K-W)3+2IP6CCH&Q@J0:CRM"90G#L[3IFEH'H -MU9K$`711@3>*8N$E2M:.\>W.-OF1QW?A6+@L!@QW$*,TNS``_RR.CD/1'ON!SX$VMG>:2?1)]F_48EPF"'Z2]<@'#@T#-RJ>J#B<692'DYH.= -M&9/\PT-N>I"\X::LV"?2I;+H=*,8"U/KICVSJN>!]CP$E&UO82!,=65:^4I? -M&VY=2G"L0>K:R96MYQC">!3W9"C`;XBCRRQ9+(;ZX0=H>.9FQF,@M&U0;(". -M.U?Y7(MC7'TK!H\OPW2OV*!.=8VG$F.ZJF:-HA_$=]QJ="("91(RU/[6?*SS -MLVPTE=JH6?W7=*4J5>W\1CA<)__@.H%XV -M"6M9N@BM64U7#&46(J(^PM2E=?$6!0/?]Q!++D\;+R>@:W<"2,U@>+UNK.&P:DCX2F[D1K6AJ7&?\FC/^+Z7?5,>+ED^0259?>9,ZWO -M#B.&(3SN\SS:1B_?Y -MH.AA#):RD4+A]-I!S21THPJ6)"1)67UGO;@?;!`+;5\S;7! -M[F':5]3P%(^([C_/&2<:-'N"#=E#3"HX5@&!T!IX1;>GD[?/.UL_#9VGRP -MBKAFXV8N3)TY],[O6.E+-$GC'_1E"WQ+QU8DWE/&?$X7WN1U]S$V/0=,PM0S -MGK,<*%,!3-:`-LT_+1,.7`R+LCP[I.Z5TJC:9Q/Z@%F!-4#0WU -M@S857<]^U2W[;YSXQJ:_A35;NQO^1RVJOO+8S6=@C\)=]+<[[_X(_7+-[N[S -M-_UB._S77/?)QVX[`^G9=G5?\(:?G4$_NN6Q@]?`K^V5:^R5N_!*ONB>3;=< -M8W[SQ;O_[G7F#Q?"@"[:1`IY:%J2)[YUHA_I6\:G*Z%F"Q@:M#A.JR@S:=[4 -MHH1H^Q/<@]S2'MM<&I-ICQ)*E9QC#C3:#_=.H3CO'"L@7Z:L&U4^)=8E,2!9Q\8E'` -M+__N<`RJ3**<>DF6#C:I1L%UYR*D6>.,23F6_;PIP$$[\DT'6_N[1ZR_S[Q^ -MH?NB0W<,IZE-4<1U1/P7HOY\`FDMJ8<1N9Z):R=428\15?.7/#O/#J -M&&HI2RIC>3`D@Q"ZFD,$T"YOQWZ8(Y*-(,1GO-#G$4E.W$H9',7-*G2\!K$G -M.&H,X&#S$TLN4Y;NF%)U_, -MVDQN`T-N)E('UHT:4[I!!.I@R9RQ?`W\'S9\1@V=-60._A@I5EI'V^2Z\&5J -MZN#R-=W4U)NE#>YV^K/5F**TKS=N+>IE1YF3TDB02.L[>]5D&C8Y+P -MHX?$LQ.GKVM;M>@F,-D\ES>:FED -MG2P5RXJK6ZN46KY^I+W<3=[9-E-E:)G28?+.OQ8B.RSTJD60AO.V1$'9LK6^ -MUY3ZHG$P+'B@[2!D0,*[3'Q%//[5$=-?1GA#F'K3"T>[9N!>]8*%(#%BP>+5 -MAY%/FH@;N.Q2L$Y>9Y"T)O]4FE.-_E[;!M9^S#7QO6>.%%FM]&I:^I%EBG>Y -M\LU>^TA$`O0,'E;/MBV5'B9RF\J%]A$,9OAAP]3;_CZ"3M@5#0=C303/7'3V -M,VH;Q2TLQ041A.7Y_*L1E2IS%PD>5-YKOPR=)5)"W63S`?P$;4C(F@]L-LV% -MN.LR<19G35L1#T]K6XWE=2Z--ZY8W-*QM>!>2"B?M8(:(4WM4WN,9IAZZ5<\ -M<_SQ8P=/(FK@>(P?][%I&U!`E89Z!/Q-"B>(LASCW^<.&]-/&T]K3&\+RJ'% -MT09,A[KTASL_:FJNJ-4I,2F\XOZ:5%C=O@'^\/43BF`4RX7#*ZN(D+AI!_=[ -M:N2+6-IC)I111XN?N[7>1O*#FW:LC.!0*R6;;MJ!#>R5I&4JU)>@1@:JVA5[ -MABE9BE4/AZE7O=`4$*].^S2J7`M'H1W1/Q)IQ&4-&A;;XB4EF58W6@RL;4-. -M:6L/)@*&RZ4R[_Z/E5H.U6ZQ>.`VVA(-Z@[GD:D61ZWM.$X4R3QU!Y\.DQK! -M4H\?7G/&HEML_I)VO^G4_/UWC@3SA-@ACZP&5))B([3,8$H]`EVG-L\=99`J -M\ZETE(FIJQLB<"AO)Z;1*.(Y6@&(1/OO3$3481&,!0OI8%P1#@P%7Y -MRPBI;NNR%T['9<;IHY/.!)5A#MG/*O-DEO-^C[<(Y%`SJ]#E,:$#2W:%.+^0 -MF`G]<>+"9Z]0'BP;O%%SV6XY.0IB8Y"5O\(I(W$0\^S."+PN0M0E8S*Z)TQ= -M^EEMTI+"'&5,`LM4:=6%]Y0CEM3NIGNTINY -M;V56K$Q'QYYXP_E$EPERTWAV3/:;7)OQ:(FUXU-ILX^--GLNH6737(N>^ -M"BVFPIL94Y@F(XR9I&'R#_\']10M@.W#5O/7P%`I6/'FHPP>4_6!WS;+(@L@ -MAL$E)9.SX/S&=?#RF&##?@:S*>]U8G#`#G00L-9,S2MIO#.&9%!"_ZG+<_XT -MD5:FN:PQWUMGQC3`YEA]&S<.28E'1Q%4#'FI;3X\EGA">-8="YA\$X+U'W0A*)VC1F1S;A/H-_1)/H -M&&)(DH-F0#(6^4@\KRO=Y+7K2P3%P!A3PW#7@1A>NSY`,]VI3F,+V:C8^!HQ -M>>>HC3!C-=6(H?#5GPCS>TTJ#[U(`F,/8]6L8]_L]]@5S(5ISRWLL)+D-+LN -M_H`P=>SG(Z1&\8_P*2V\7>]:"ZW(4&,3E%UX!\ROF0RO1`B`A!< -MUV'WUZO61Z`O9-92*;3E\V4*%Y?KH.)-Y;7.Y!-*RG:Z\$17WJ.;E?0`?N*P -M7%;CD&9HY,U7D*;7S1:3,>F\.H22C#8R'R<&W4MRK0 -M/FA$VF"@@V?KZK551)P>1MB+F&E@?F<&B7]ZV@Z3$6#EVC/5\>2>31:07-9\ -M>=JA[DR(P>8V]FF'XZ)H2:XD82,9P'8D`0Z3MP\=>*0A76Q)-QMV8TW47HAD -M(;^S;`V!#GEW;5.)):W5VXAV(6;Y>6U)I`T.QGP[Y[=C+"TS+L5M65HR@V3J -MISMX'63M36NY)Y,8_N=FC26T01%#U80[!#YE0_E#I)@ -M[T>Y!Z9*V!H$@TMG$.X@V(%!#3BVI_TTD;5J;%MR*M/P%(D,@_OA1(NF<6LP -MZ`%[4LS%F@]9IH[CGEA\^M'$85"J=VVCQBK@((;)9\"KW\KX,-Z`:Y]1LC@P -M+O;]UKH]?-AU4X7/B2/YH1.#>'LD(0M7+0C^@`/XE-RRU&1-3B$\B`^&8F-S,) -MSB]?&>]_E5'24UG,,\=M8GH]F`)O[C#@>+4C&"EL)&!RTQQ^#%/O_[_`^OD1YK,P>6^5 -MYKF`+%\F=(C&F*5PC+N!-`V"'&G.\1FX!Y,J;+2[.#3Q_%HWW<2'T'+TV%X) -MBA4F;OT%?)\U:+RSDX"2.?A7($Y%&Z9_2]XZ6>Q)--![<`E6">M99D7E=?C& -M#+#NS#(?NPRBD7?E1,*&^ZH'XKND8VQ!TM)L(#OCAABID)=Z`+=2[@[9I4PP -MUS493DNDJ?=PMC(4H[J"4WQ)@=K667%^YJO -M5,++EA+W(S:!2P-NYWQKT4$]2A$3.RU-=Q:%YB,2SU6Y#AG%%8YN^64D#GXO -MA6>>0X;$<[%6=/X9Z:4\#0TRSQG2:!,QR*(?3E\1KAEFX?3G%Y.`_;-#:M9]NJE6:P-@:)0!.)CV?6E(@>=_;"\CBL/%Q"0SBNNRT)MZ\:R^1HB*MGII%('UG==3!GQGE -M_K=1)MR3HE\-&#Y,ZK?:2+D-;4BG;0(D:QM19W@]-66U6]]E#0V^AOBL021P -MC)*,X"[R)L[D6J0GM;)\"=Q6):.W4WVER[^8<*GFYTJ[9NS01JDZ[.*`(7?I -MDBXW=23*T:S9?L-L?83)XW\]6\+SLH1`#U,UQR$E3O-$-%2Y1-8\-V\Z;P!W -M$\D!.8+&!7=]F3V5KTRXA3B0;!F.Z07,N9E!\K:_=DP75.0=,;%U75F=V1-_ -M0^^PD14-&VJ/]7Y*`OC&![##SCVSJ:-%4&<*BB:_BN?2TM^%R:\^)@)<0FYT -M"C?/1YUE\NJ"G*14'\^_PXXU#0G*2;VIA<=S*2JBZ6?MJ96K51EK^N#/FW7/ -M^3(Q+B;XSCJGY3!=_$8:VHSZ&]JOBJ1TJ(?]<3AYAP7#V.P@\955%<4@6"]C -M/:;_2K0*.-JVW$TJR#I?O!D[[5.AL=U9S70:4^7K*9J]R8AB+'FCP=!Y;$YZ'' -M#H8#'9OE.@+5I4L@57^7.`"#,%SW^]8:+%,+)W/NK'*;W^:\Z%B.1A -MV$H0MA&7SHPF*%#&J@,NY1N-%6A)AMMSTEAT6O%<+$95]^DEW;+_NR[86'GV>M(5(MV.B1 -M,`!>^PYLHDJ)!:L0#VY20VQ"%5#'ZUB6V[([[JI&BD-8'^`9O#HS2'[NESL8 -MKNOAFXR[H#H2FQ'I%'"V8W.&$[G0,D>X-J?()(/B>"%XOD$35J7VV%*DR9@0 -M(?;-UQB#YS6L1DN62?(Q`)%5*\3HZ)/.&;HKX:Q'WY[UH9C9P%?8P:F0J -M1$.:0G\L]CK;8)XI2=4;0"<%;`WQ!IWH@\0C0W)C4/OMI:ID-C0<58G&I)NU -M*\FX)WC+7MMSIB3O:LXI3KSX^9B,)L%J-SQV',=+R[U1QECK8,B\S^L0AVUJ -M#>L1-4 -MW-KA`"5V39L1TE_T[O.[>!)5-XN501J;XE[ -M]-+M<*??)F4%9J##N2B5MT>`)Y[O&NVR*1M`!CA%GA!R4PR2GZBLZ,5-VS"P -M:8/->B"C+RVLT(L^&GJVFQ(WC&@M,!RY=A`KZFJV^-`=M&'J?WV@YK>07O'K -M\4+_ZS/Z0IP#HZRU'SL"U][-S0JF#3Q/`OE,\6Z&AL08AA0#;,'5WRD95C'- -M:GTF9^!*U?0`?N\^E\C5'=EMK7KX>3NMJ2E\W@QL4?SX<(,[!I/Y*0QKH;`) -M2M'/R!V>3X1,R#Z5MA.A:E,3;L<['(FGK^_S])F"C'$&KPT"]6S]&KYAD&IO -MA5-6U1J66`]O+G/_'E)L*&E&0@PB4<+@FFC&\H(%2V,9CL:_53VR(/F=B?`_ -M]8E%^'__WL,AT`F/!U[SGG/,DJUD$>\YQT3LYQM]DCC3O83;;_)&UA*K+G.) -M+FJSM-J^[?(XH8K8/FT=@:$Z0'H4UH)KA;^)`F6"!CZAW-HOV.E!X=*HL`Z5\ -MF/K=IP)UV.;,<(4#EW![E..">2^CS.V@,5_+3!]1L=S(T`_N'%EK-Y7K/(,H -M-BFA8W@JS\0K[D3KP7,1RP:/)J7Y$AB0.,D,PF)HU1TQ@Y?WW\/,LK2=9TM% -MS;C6Z!C!EA-=BVU]ZJ@M+(BM!P]B?!DXL)TPS:`I9EI+\FWTR/I-DR>ANE3=VI%&UTS2[?^5\RFGIL_G_\AAG`;?*5 -ML;2D%\BA&@)'Y42CK7A!-M.]1V\N2Y,[#P8ZTEI:JA&_^=F`HRT^,@*_=3?AF'RM6U:0M^)IDQ4 -M@THA]V`RVROI'2E)1T=V!MRE&23Y)BLKUMW$H%*ER#O6<]%"@HW2VGS)MOU+ -MOWOU8W>]N#NW88%:0O67-30_[S@]'%;WD2I;5,7Z4"L -M3?]AZ;]TP>DC:17+4P(?G:]'V7`J-A3K0Y@IKF-9"P?),UXJM-EDY/NP16QH -M(MX@AMO0+(&==JF+@4D$3ML2"T-!1AM1/;D(MJG$B$"34Y>\K3G7-R%!\B7@ -M$*4^,Q03(#6!.O>2MPGFE1`GM@UVE,N*?Q0!#T68.1S-W"P#-3";.TCI+Y&1 -M'T]$<.(MHZ\PMH#M26^*\J6H5U*LK.!&.DHPXJ,,4\D+YJ6_ -M3Y`S`22O7YR+.'#KWY9F?A8DX\*;O7!%L8;E(9M1G")T:5>!M[8"9YKM\%SB -M]A1A,EC-U&G,\3>F4Z$7[M`NV#&`&SW0$ISI8WG5]/]K[5J@(ZWJ>W9FLNO" -MRDN@+4LMT*.[E,F8F3QGU=HAV279379#DF51UAZ^3+Y)ALPCSF,WXTK5:D&/ -M$#->,GS.%(,M*@\+9>&`V'8K8L4JUBB<8BL-?:REQZ,42=MC?=#^'_?>[W[S -MR,:>XEEA9[ZYWWW\[__]__UG9.U'9F/8'-A90E:3TVN*KU;QV4-F=9R&^%%! -M5\<$X!>&E[(>1V@C:#1A9$!2NIY+8SG9+$[5#P!)5'S_L)PDSYT'?YU*\^&$ -MI[P]8?`=2=?\U[4@NUOI4#VA_BM#XE`QUQS2^_MO8"@+V'WML/@_U"H00#*& -M&U2W7J-2DZP%H8-(0%@[^:Z9)'F;";NG2;,$ -MVJVL,X_Y"G4E(D6W%W$K(2AG-"DEWK'OF#AE2G>0G2KU'1$,J&!8'4&9X&F) -ME$Q82*',R<%U2CL2_A5'-R*C1X'NENOHCC`\J<^$5F8RKDN%V_PFI8*@&[@1 -M!@O'15Q@5*,WDH=44\U#[U,.9]_LD$[[E^D5]<^=4/?INK4[JYN>!P1KMLL,L@BJ$OWHQB:.5"^>1)A:+1>USW*):1 -M<@GKUZ35,4($`5?FB&$%?GHE!5J';JN@%WO -MQ$,5.R/IXK9OZ+BQX5[(QEBM[HNE.C:(N0XT,CJFDSE,\],N)M'@8&K06XV6 -MIY7`F_]*-8VS5'.XJFPHA^Q:]I1VC([2'3*_%'_K;8Q54/E[*OO/W6R24>@F -M+\.O3`#ZQ#+#G5+QC'85E@,K/P6JY:`X*;P-V%(A?"8&_W@ZU=:Y]@[51RD7/T)E//8]M\^BT:MJ0U<+^12,_'A>!+3&K,EDY%S9DP):JXM718&I2I=,XFFHSG(;DZQ"^D2=;S'GB -MCJHN5+\;VSJZ=2I8D33SO89$[">M8ZE)N$38^QR!F'4LR4B;9_=C.B_X4V -M4F+G(6QCE0I:R=93%S4H$@Z:54/`G=`T3.V2R7L9RI5RFW8SWK/4ZH9&HA%K -ML7SIE]K?#5L3"AI,M;X,$`9&?TD[@;BNY"!A1.`OU#Q82MQZ@EV -MBVN+65<@*>ZF')5;+OIPHZ?RM9N>:KM]Y:[;O@GGNG+Z -M':_!OS[1=N<#MWP;Z.S29X`O+3TZ0(UO%O&+?_Q3WUZ0"[,?M5*3^#U2''VS -MY;*/'1^RE]YXP)I&1,N.]R277OG[>`$F>,_9;6U`,N_ZQF.K8\S$RX&A6U?\ -M(]_Z,"/])A+E+9^LZK\LPFN6CE8FX9:'@DKS3'EOQ/]+S47Q@2]OA -M+2O;'@GC+?+-V2](5K98WOU,^T9O+;_UNAM7HZ&>_B:O+,>#?QWN"7>?>2-N -M_=27.T.1KJ:[\/DK_FN]Z\]O*C_1MAT^PS_M\70A&5T+1_O.//(S[WAH%8;N -M:SKT*T_]RUJDLW,1;@\L>_L'O_H"7N4SKSER\?1J5T\T%.ELMNK?O>T;X7"D -MLVM3RXZ$.L/-EYU^M#?2OZD%1D+1UNOK#??(]9V]5GX!^-.9E]?[V-1JI#_4 -MU]ML=5-_??E:N+MO=VN=N.F>3P^`)]K<:YH=G_6PMW!/I-I8( -M7'=S2XQ&.J]JML(C-VSKZ>[L;/)ELR5&0UV1UBOLB_1L;H5]H;[.UBOLZX(5 -MPC\K>Q[IHAC4MXG+6<`#IY;^Z=$42,H+;PF'*K[/O[@Z5@4&L+1]C2VTK_V* -MZ@Z*)NPE!_-+6^_0WNO'[RDL?_%ENPH/*[<:?)VOP3"["\NGHIC\1!@T2Z&S -M;:HA0HP4>UGQD*7OW@JB.XG8Z_#4@2E@/:7"$HPH4$`2@\7)#A?@"_2#O?I\ -M/`D_I.%@D.F:[\'(CAD$72./^*GH-#UC+7WEFS2,,P]/VS!K"R,RHN&E]-\[ -M\(<<=8/78^,O!-V.X^.X7/A)9NG%G3/._"S.@MXM&.H%WK)\UR1^3/M%4"_P -MB$J.LV`'/%M6\_WHMWG7<')+:M=H(%D;1G'/&.4.P&."7RW-OWK)Y:R"A(7S -M07T49LG-09%\G=7IY#1E@E"RX?*-&N,,3!HOYHDE0S7JZ$5UI!D[7 -MX;U'#D^2VJ&=FP\!V5QQWCHG+WB03MYZK!ZP"PV-'3I,F==8@=)OM[C`H!2/5$Y18+B;``HR+<.=; -MNL("\WPH,4>^9H*&.311"1QK[PZ%0UVA6N#8H9@*..AZ*S>=9<;*36$JBP&( -MB;!!G!/CVE"27&3BR+P*!'@,6@U!AWZ(BK]D2V\]`;>Z00PA7UF?/^XV)*'8 -MJ8S*P^CASC>IYLI&L02Y1RA>R-4K-)<.G2E+*4OQI`P-_DW(\.UQZO$]WEC^29UD'JEBJ^ -M`XED1G4[-#%S,/)QS:_'I5=0>S/+\`.NS\*6>@<27,VM8GX4OI=N'@+JG9$A -M0P<^10[!U>.4EA"GK,69((Z(EG:'3G=15=0&E'#-/_,I.G,/MXD;4#R/C1L/1ZBTBHU2%9LB@#".@05XF*-75 -M^>:+7$%#Z%'2_ZM2:S!/P.U2M,J#8T#-JSN')Q[5XR5"/*4'T[ -MW&1&W#^T1&NP[:#'J[*AQ[N)_MVI)UM3A_MKJ,YLKN0=C-YG/R?5U0-C*J]W/1\*6$DK;*++;>QWA#O -MQ(2Y"W+&AJN^XM\UYX;L==.&JLI62#BRMX"2:F7X@7<_'.4^QJ\,#W(0QY;@ -M[/*-#J/TN-TGR$!G3XQ.HG5R'6IGZ4J8L(8[)U1/`:=9+\PJY5;*5ANZ)J`J -MP0'@W6Y7BE1=^`+&O<;.GBTT:K38J\J/U72,RXD.+KHLS8"C&P]]'QXVJC(/ -M1O%`X<@#EW[)]!?FQ=5#L0[M@6V1*Q'$GZGSU0AA,D,)[NF"UC+][TH4D]K6N0C):.G34@0$3JO>T2K9T&_L9RH4.I7AN#TQ6-1^B -M2NZ$.(I%=O($;`F19R8[>3H#,-.`7ZDSTV<36ERYZ#].$7/;RX7@95_E_%8* -M4N7\XUQT+1$X\[Q;KE9A>4L35+ZS0UFP3EW^GMY=\OQ3_!X8DZ[UT;G^"<36 -M??#A9$%O<4/R)55RH=33Y2-\B["9K=1@,#W=C,%IMSX5C5&Z/.Y0T^"=68YT -M^#`7S5/<%B'".`G6['3>`#A7[Q9OWJM#NKU5E0J'J%3U3LWW=V'9<@UWW9-X -MIISPF#G*"("J2$?#%6#`>YH/7SIP9UP(?K=3:[XNM-VAZS_JA$_-?\Y;5.KA -M"3U0`WDU]+;%X#AZ19R34OMPK)31A:=`^0%9[OI$&N>T+-IT:V=T1CSLEDXT -MYJA*[WU-E'"5T-.DR`%^0+1!B8<<3XLW@''GL2^T!)YI(C0T:=3+('._*OZ. -MG2K>@)FC0.^HJS#[Q61^D4\9O6O*\#A%<#/JOVPC2KD%,LXO -MC"HS98'F*X$MN\`82LI@GJX!5>(\2)8S&O@4UY6Y3T*FS,8I+LXD[FF0Z9;L -M4V*BVR,GZ*VI#*3^DGM;.1Z$+,I=XQR?DI.B]"/2#ISAC"I=9?F&U),M"I6= -M(W%B&,^6NN9ZHOU)LQ(BLZN@JYJQ&L`J8=K'_`["0FM>HTQ`MZVR2$1>9QT! -M!M$H;B#1+&R#C;7'E?/G8 -MR5A"I^G6_(L?MQ>P?M9-A`4JT`4]ND[#A>E$^%ZX-QI9O"%\KYM0.[N;I;Q< -MJ0Y3)0J8AUH.E&YNE:=?NEDBW,FDWX9<>B?'?0'0*2;3B5#*IZ3'`-:CG`6N -M7X$\!&:0WLHON^U#\X3J>Y71"0N1#AF9DG%JB%NT[OC3V'GGB:N.&K%X.IHK -ML.I1=R_(N;JJ-:W[1ZO954WCE*N& -M`G.4&<>U-4W2)((X3K+I!I"C*&>[$5#LIZS4#*DD9%2H7)40^[_V.L7'5-XF -MOQ$%,W!>[#RL#&S5S8=]=L9."-TM7;68D.[*)L\T)K"X(*#D,9-X`$8+DK=W -MS&.W(V_C/<=;6TJ^4P9Q01Q!L&C2U+97$"@8CD&^([<9C-%KG+!-N`X.H:=T -MGJTIVV7W#.S!#%K9IX[6D>I;'5E![U:O&&C1&G%\GNT,,L)D-NUT!48#(G=; -M<%'G71%[(,SLV"1C5#%B(0%H0S -M17N63;L^1H9B_#2%IP>(0!6DY=VGF#4@&-&N_`9MWDR%2C.1)\"/A -MGF)$!G,1E(H-S[M=-[F/-C6+9-DH4V8SW*1O7/DQ:_[''R!OYX1'V7.&QZX/ -M.K)^';2+Z6QQ&2/AA%/*L&T)K3)DLAWU`EF5LX.R4/8_7J[W:1H9+E.3D6Z& -M.I\!M4Z45+@_7X:O9+-0("OX"REFBLT@Q"51_7O<[AUL)2&2$-Z)P&M2D!4.],1]#P#R2QK*N*0M';`5T)Z3(\X^%2SEP0/U,Y -M?Z@/LP,'UX(CAKN`L%1JAP*;C?13'U-F&8[.4:(Z>V!('WLPSP0BB5E5^0K& -M$$%Y@!7+(2?20TR8QY$=BN5%K*7UVJ!`I]Y"(O-80:\D$ES5MP)X,'*"^!S&0WA1T;\!1ID%\J%#V\ -M^Y@25PG,G)>R91&'"8PHXCQU!7U=ITK:9%DDB4REYP[65H;1&MQT528\^$JI -M&FA(N>Y*<6A*3-WV@.Y3]Z@<'K6E7!';U`*F7-M#&L'=,0H9R-E@ZMK>=@2Q`0Y&G84"*,S-& -M23=*>%3U$YX*\.;J+&^Z=")XDTGYT*3?2N6#\VWN)F<'Z^`$+#^0Q=!#?FGW -M:7*[N,JW2MB]\<\V&8:"I:WYK_X>MG&P\4EF";$2+Y<&3<,0%V?'0-IB*HTQ4+2Q5K' -MU+$2P:U(MB"!)TDRY>E%.JG.D`W7_H5;FZN*3N*D")%6)F):87>D328=WM?^ -M14N]'7;F...[.EC?XZB"(<:NT,5!]H*Z)BI)G:)U2'X*B;2KKE9C -M(B=[1Q%4!.Z@)&^^"R&AZYE@1,:@7U)9Z#*TY$%>RV3=-BNI4LV_KYPOSILU -M/+(&D8DVFRLY)U!"&UW&55S;1B-9QWJ`Q?)?$RF29PT^K)`\USZHM$`)VJ,Q*IAV*C:BA3 -MQU.R\;!Q)K:DME?\3Y\KO>:-`[*%Z;:E#0I0&8JR12%0D>Y/@#WLBSFXN!E2:&;D -M!2S#X/(&FP4<6L-1?K\'[F2`%&F-N&%[L_/L,J/LY&1#2M+P*"+!IP/&,@93 -M1=;3A6(9[3^71D6\/@R,A*]@,-SZ.M(H;N>BR>[%Q7+@??F3L%6/7CLL@=-3 -M5BDO98*PW.AUE>NIE32NB]NX^.@M:X-0$#O:/E+[U(AO5_'_Z#%#73*!VLG_ -M(!M[`*0N5 -M-V9'H45\\\JV\TY3*FM;_TO?6CEKY)N4RMJV9>7G'6]_#DEF^SM^OCIH9R@# -MK>:_:'(HNWPJ>AP3EP9MJICQ>PJ<(9^>+U9?W,F&0A"3K8;3G(ZV?2VW -MM&L!Z6,@B\E9*1NA#D:RE,"&C$9ZB,_?G(#0M]U_K"NVQ*+:OX5G?%:+8T4RLH -M1CFY[G-=A:6[)F>3P)'@?/<\@+W=EF)/)ZLR.R\3%/NSLQEX/&=A-]RM=Q3P -MMSG,Y`,:.D29=Y0TEY\KX0!HC>+ZJ?XS.2^3_ZZW3A[!;ZD4%)X.E0/^T5C9 -M]]TL5U3#`90Z4%1P-N!WWY^RTDNWC$T!A;VXTW)4537];#CCK$4B&5!++SX\ -M48*SN'5G-I\L(IJ_&,L1PT[9)(O@K=E$S=_[D;'<,CP$VKFPTNED9L89@5D2 -M-$5^-5CQ_>RC$Z"RT/ISP`9Y\?]U>3P;%`,@PJD/6Q+V;#\L[:[)(O:_"4>C -M/:")P4H'1N6KQG*<5'W)04K,X:.Y(5;^G_?EBC/1+CP0>&K$SM")8`'U0R/R -MVR*E%B[]5/[:?_:%BF_*67,X)+!&`BA5F[XGOLWV'5^^\O9N(%X"=`R?4[58-'W,T" -M;C#--Z)@YYP8W$6PX6:3!=!/"\4<:"Q@!"1LCCW"*X!6831$WSGXMH'L/-RJ -M61@E@_W@X`Q.>AQD6K((4+6-9)<7CSA"H -M,##M0\#1[)RKZO+UTCL'C`D+2EX:2:9* -M4U9F3EP#9AIEOH(ZHIW[UX0CHO_::V'0`T%YCVFW%*EVP<7Y%9$.:3^VHQ26.ACV#9!#<7Z>]1! -MA49"%5_F"YAN`D'??NUFJJ:#\)H02;F*?=H?O/J[V. -M#D[D4A8PNX,#$TXD;![8P$!?OSRO`3!%LX6*[TOGR[/A#^`L?CHP@NS>T/R0.VL59>`')L.F@P`&GD[0QN:!8HQL+ -MRBP""KSRQX-V/IY+SA?DU.H9FWPG>BW@H.QY.*D0WH"#Z&8'XNL88IG.T@R. -M(=K7;VY@-A,-JQVD;/$<"4ZPE>]=H\Y:R*-@$W_\(-U'BT0GNH@-.D;:K+:@ -M9!P';'B1+Y$@=&@VO*\J(8IOR()?I&C*W:P-@FL`.T3;-6AZ_I-1HV]G#?D.;NL92]4/%] -M_EK)N^`G(!/)DB*2)!5D"%VDM,>POE?_4VXKLH86)0UFV' -M?\PG`MQ#J:KXX$;R!K+OCT -M&=0HU#*?.TXJ<);X>I[X&,QBGM8+KZ>C6X:CS9DJ;G0&[C%] -M#C/>OO5JN&1BUI7;:"R68:BD4N+E/76+A%P+I1+8G4!(4)%`0U,K)G0#$$;/ -M(>6[2HQOV^B'I4Y&UY'+I%(([HM`GXI5FXP!!F_&&.3;)TIL>L"G:<0._L$I -MYJM@;A%W![L,V?VHM8S2A90R6J20.D$>?\+$\LNKNB*6UE2@9H'T2S<['43- -M9M".NZ($=#O`\MWB0#'.Q4('47ST[Y^DCTYI9A!:*@IBVY'2ZMXGOMU5=S\&!PV -MS1/7)A&0(F18::6SJS-\HBO2BTJ,=_=&H]V*;X,>V=8&FKO_ZBA?=76?!X'D -M;3&Z=.K^-Y1_]NGK;20NJR3HH!"FX\Y!.)=E6/(QYD`U&(%$IU""TP&-+YMV -MD*Q+=-DQ[8/VS)9@FD@`)B'NJ04JN\DZF$<-6:L^;H4=,6>G?K^%WFVG8;=? -M=\>=+93\P$-KJ"`>&AO9%>W6^PI[U6WN%=CPG0:EU?S.'R*E+TZ2L3]D>R^X5=Y17DX:`.0XB?.XT&4A*BM&=9X-*52D&*^WK9]5I -MP.-H;N=M8:%97FE_96&RABKQ?#).(F:?LP$3A;>OGQ6;GB9VG]4*T9$::62P -MPI0-"L&]@V-UVJ04Y[ATHIB20W36">-]Z\%]#J/GR>I*^**_3[R3"Q)SK);3 -MVM,\BMI[9!C+87=4T/W*A1#XP@5-7`A>N60XE?;P5[#"M#K`61O5/&S=_HY$(0OK=F#<9-RQ -M8>.W[5HCU\+.#^B=,EP+M<#.KPRGY_G&L3OY>5=OV#_:WXM[^WO6R8/HOTNFD'0'09+> -MO7-_EAT[>25+8RC/1DOQ7#:!)N;+\X-\IRWG]5ENV5U_8ZRF+`!5575OI(\1 -MWB]5>Y3/8$T\#E253+,8312=#"N0F*5,"*][A/0_X)Y.$ZN<%G5RBFRI]4M0 -MZY^<3>8*:-3;F<)LV??R)4@B`Z/P7[Z)$LLQF,%\57HC*_YGW^)Q2#*U.UEG -M!HZ>KIP8<13!@)I7"(DQ&T@L#Z()*^SVI;*YY+3%_`A'EMP<+T$DVGNBJY,8 -M>G^O)'4XBQM@NUD3A^='61'!LQ@C25?S/3`"#[@,R__J'6."@-6`HFQV!Z6* -M+H]%OR<78G-5)^HVI0[2[VR[N>L1AI3JB=#*B9R_=B!5`N<_/S[>$>V)-E57 -MSG^^7EVI>I0)C\&*B_&8+&2P@F1]GJ4'G:V:@>%=Q,TZ`,I#6&[6.`B^MK8# -M0!_$W9(69@O=^M3^D&%U@DR]]2G6)\A[Q0K%8*L^0ESF2*0&+2AG*4`85A\GT"^*>Z/,Q'R_Z#;VNBXGL4FDCD1%=W%]R: -MN1*N2PD"Z4@7X:X3X1Y3[\?SA@L1CA&[,03FR -M1')$KE.*$N0E+$Q`!FS]HW-1!OA?_DQ3&>!_^1]^>1D`/S)D@&!'.[O;^#I$ -MC.TA##2Y/=?8V=P,:9*@%_HF/T%0:7!%OO/^M7W)7+Z0W(%.,SEU@?/V35K- -MYNUPT.F]S#V<"5(>-:H#NQP\=H&\P4[=V1T\J(]N']'HP:2=(I2RP5^7/J*A -MT'A(R(]!I-Y]"1P(>\=,?S&562<--7^':+I>,A?S*AK5`(_AY%B6JMZ(-'"KB-2% -M9O%2KG5('ITZHYQ;*"_3ZYI(IE&AU/Y24)W*1'GRH"!*VF\ -MT6\SD,)R:Z#T)B -M;RHE?658$`U6.2A[%#GH[S,/<[^^CT2@_LP;#`+EW$XZ96>$=G-,J&-V]F?E -MI83CO&+O**@>9$CEB^S_H\Q$X,'$0]R4,=,J1GU:+H$8C%1(*KY_LNIMZ6I3 -MWP5I(LPLME:&,Z+!L>J-?L-*X8^1)&$OO"W<;BJ8Q>KASV+HG] -MBJ]Z%CXEDIX&7GGDB_1:G6%L;_'XJ*5]3?B.77D5;S8TES+\U.NW%&Q7+[]`_E!2 -M^GGBQE#-8F5R5@T\J>*O/:.M&M)WRNWWWQ+38?DJBE6\G8A]T=*%VFHF;NB^ -ME1U&09_1@8F.:*0#_E=WJ-V>0RW[JU?"ITOR4-L__Y_DBHV.+!#"T!BTVIS -MP)8EOS,^#R0\*SR_P#OAC(:[G.C8""C=!X*.BLN[[FGS=LB<)RV]QS"2!I*P -MYON3#QX1;C*4?]V>V*RMAE:3!,M'KC"=)<4%\6]W4QH5-0 -M*4R'@LX`F\Q\XLOU-,(BQN8HHS-1S"O.OA!T]I)\4&D"#@O[E0-=,Q(0GMY+ -MJ34YS852L@9+)SSH`;%XZJ)),T(M.9,8N7WE%^L]MY=__L"MS\6`FMKN.WMU -M\O;R:\78RI9__Y^]BV6_LW*]H-.*8Y4_:GWP+D3#.LZ.>#&"[%LN`L&P%Q=O -M^TG;EKDO;_G0)[YTZ5O1V>?_-W3U;?F3W[B[;4?;!4W1-M?#+]YSL,WS82&Z -M'KSOX:6OFQ_F2]'U*Y^(6?>V;84/\$\@GL[UKN_^\M\>Q,';Z,_6>'IJ(1Q9 -M?W-AQT?WF#^?6HBNORG[Z,>>UA_BSZ/KEQ1N/OKUMFWP]VUJ1GWKO_:+MEU[ -MVLZ"#\[B,0O)<.?ZQ2_^X&T+GD\+\.EYE[QZQ77FI_#^SO5SM_SI#P^TG9-( -MT!_^M'O]]9=?$:R:S^9+\.R.0Y?_\Q^84\B7^M;/.OONJ=\V'TWC%+9WVG?F -MS$?3,-MM!WY\8TD_"A_FX,FM?R?N'M=/XEK[UMM^^G#Q`G-,&Z;ZWVU;WO]U -.WXO\S_\")"$UH(B!`0`` -` -end diff --git a/contrib/bzip2/sample2.bz2.uu b/contrib/bzip2/sample2.bz2.uu deleted file mode 100644 index b0610ea63c91..000000000000 --- a/contrib/bzip2/sample2.bz2.uu +++ /dev/null @@ -1,1642 +0,0 @@ -begin 644 sample2.bz2 -M0EIH,C%!629367PQR6$!@_U_____________________________________ -M________X3T-[WV#SN>48``!H*!H`-``'3:NO$JCVP/N!K+L'U2AE -M@`!.QH[YW>@&]ZXY```0:`^@``,G'WQSWQ[NC('@`0T7L!W84*!XU@`/30*N -M[JV[@.%Z`#H\>Z*W8>[/KW+>DO>7W.S?!J:CLQ5(AJVW.\ZI5//IW?;X/OMW -MAWKSFQML]N[8.%BXM6SU/6TFS%+WG3TWOH^0``9SF^ -MWO>C8-E5;-@)@H+)@#>YWOMW=KZ\#D`4`.@38`4`!3M[>V9!6#K@EUWW>O8Z -M:F;UP?`)][?1J[,$OM<9SNJF]:\'RTI'V5 -MN1HG8^4YY53O*^..*#[.OO;;17-W-:^[`D&TW'?=O?6K[W9W!K2@&5&@!KWW -MM\4/ON\\];WMWL68NW1UZA!VP/MB35DV^V]\[UIU2ANWKK7VMMY]U>^5&J>S -M#JL'J[N3AS#NT<[@[(RM[X!U\:\K70[CW&-TF/O;HQ\WW9N`Z[9)5````=V! -MS1C6W1J^)OGJ[G="J#1>\^^C<#UC=?>WN^NVU:[X3.YZZ#T*`]4#M>]8B(AH -MJGWO/KW61]*=T-A=.AV+5?7+.>^TP$M?&OH"@%%SOM%MWW."O6]FWROE=]N( -M`"0``5IT5WP.WN=GUO(>*G;.M[WJK)>85X````!$````1T4%``+```80C -MH'U>AII"`@`(`!,FAH`"8`33`$PADR9&@#3(R::-----`T:``:`` -M*>T```&4S0&0#30`$P"8``*#4\@0(00@(!$Q,@$:--$]$RG@2>IY(-'HC3-) -MY(\H]$9&GJ:>IZAH!H!Z@,@``T,F@``]1H:`!H``#0``:`2"2(3("`FF@(0/ -M53S:2>U3&B-/1-/2GXDFGE,GZD/*?J3U-'J>D_5/4>4/49J>D#1ILIZ0-I&3 -M1C4`T!ZFU#3TFFGJ'J&C)Y-0#/5'J>H]1IM08FC0T:"3U2D4342>TI[2IM(> -MI^J>I^E/2/4>D:8CU#0T`TT`&TGJ9!H-`9`!H`:````!H``#U`:``T:9``:` -M`````!$DA"`(&*8$T-)F0T`3``$:#30R384P&FH;4VA-IH&J?H---5/P&J>3 -M!H5/>ADGD3">IZ:3!-HTTI^4S1-3VA4_T)M*>:4_28F,@!JH)-1(($`FAHF$ -M$T------3!3PFFF)3>3":,4T]3T:-";13:GJGXJ?J>J>&F:-3-4],(GZ:3&I -MM)J)[U34?DGHQ%/8(]0U3]3TGH9/1":;*GZ>E3TU/]*GY-333(Q-,'&@1`@5 -MDB3*ES)LZ?0HTJ=14U5765M=45-55UE;75E=6H$0(->A?#APWS"&_JVK-LT7 -M9QZ$Y(D&XDA+]"T@>I>G@/M3AKE!**H13./4!UB#^^MC$S1)/N7V_G%;+2^[ -M=K[K:W=38BF8P**,;JEC&3HV!1ZV$CC>=D@$8'S_U=*?`B\]3ZFVMG]Q#4]_0NL@KRI7R-*M[QONOP>HR*`/YLW%D]-`U.0\/ -MKCW0@>[/H<\\E8UQGB@.,Q7=6*&0\TED]U(^#C1<$6Y*T916G0DE$/@00,S\ -MYQ%E1%;X#B@"B:J*@W16KMCBN$DX>.>13W\#%`YZ/[8F=+CMX8V!.5J%3OJ: -M($3ZV#P(BO'`S[7T_.SSD$)2$XXBG`BVEBE=5P7^Q1$#Z!E2%2%%IMFVS&B_ -M.JH$@"+!8?O`^ZP`%41Z5S8U%Z7]OYU8N!=+7GG5O&B*JC*8&J%BL%PTGX*< -M-*#1M,DMH*HIC5!0,/XJ4@VSXS9^T+QWZK1J+25&10 -M*>J$B2MN"U;@HP;0V>NIRI&GD;FR$H7SS+&Y&1.LEDC40F.200]2??L@VL9(Y2;D2Z=;FE&7*YSEFO.%=W"*3/-W307=N^"Y@'G:+D83D;H^';O+K=<[^%_E.KP!Z1CF3.ZY&I-( -M`IG=QDN[M=UVYNW=TDN[HMW; -ML&.:[#&P*69`(@"-O2Z">0*1C*9*::2**-(4/_E -M_TXOXV_?7[Z]KP!UW4F_B&[^[_T?/&3>V -MY;,1$,HO.Z,=?-Y=2,A#SM7*Y73)DT0YNP9-SH@D[M%V3G -M/'(09>+J9G+DF(5W=E)=W+NX29$4*,ER1LYQ -M(7=T85$(RQ3[9U%*&)FKQ<=SJ*8SG*=VZ[J=V(EMM.7"^;NH7CD@J:^_[L>=O\+SME4LH&;X]CAH -MWKNW?8\O`%\%R+U\W7+SF-^@):L6_AZ8P?O_P*S<<0-?NU0C^KU,A^Z=7-]9V]=WS]U/.T[B)SN="8DS1)G.CNN8)?.N9S>- -MX>=]%YR!&`DO2XGQ\Z\9&D31]'.>*X;F -MYC[33AYZ\*9`!^J/EF#<\8\P#<,_ZUI,PA6G?^_^X -MP7I%<-BWGUM__>5Z1KTU24TJ*O835M%!Y:U8?`Q^IG@_L-)_*2:??J.9_S/Y -M7A+.>C[H%^NF'E2LZ*2"BPR=#TYPEF>5& -M:6@E2"0^U4?SKF?":F2O"`H(",E\"AASQA&X]3YSO_R7L,[+D<%R2YM+R,;Y -MLK"L/'(%8O)]]>FB!SA#S%@L<0&0$)&4)&0(JO\B8G,\,LL^D;/N -MGF5\M43[+++LFKCH0M]P-47[_Q?98G%-$7"@DMJ4<7Z;]VLN$UY,\"(@4D1T -M\GV>)N_[AR_$9,]ROBX6R@WRBTA;D]6H*:M'FX"LB0TRL$%VV.JJM.O,\1EY -MF!F_=[JVQ\AO^TWIPRVW[G26?T]8_-)H?T5#%SOF+6I6>-N;[A`%O%+OX>$S -M[VZ:1$'GB6B`W3Y?.^NY/@/3(N8W'G_^#SB*(?.747IG4ROM@""DA?>J"+:S -M0^M;H$1"KU]^,Q4'VO0U7U?9\O<&*9L?\( -M'G($]LA!\Y`#R#M\MHVIHYB/",%6FYK5[]E?\J7=C=5[H_R4$L.B([Y!/J;)2*#>O- -M?X?4]CF*C62.0DH!%-A_A=R]V4&5B&\:*LIG57+XCHAB!(`_>Z'#^7(WW>6[!L_.K]$-$(0"3!NH02Q4S(,1,Q^UWKEO -M`UE)Q109Z)$5O4IDD4G`FM8G-_=]T+SOC]/2X?K/@'A`(C\NV,076YG`-G4/ -M-H\'GM?94N__>/LLK1];O>%V=0!`:B:N/;4TOLK%#JA?.#T(@(4-'`YBY_/N -M=;PH`YK%R)'T:OGO\;RD.HLKI59FI7W#==:*J1K+>">&UV2^/)@``.TA>DK) -MP^0W[\G3,J_YFZ<)<(@H0:SP\7V=11'=4.TAKS("!,F0GFSFQ5M'PP&]A61N -MQ[ALV>F;+"XWZH?)\UX80!`("`.5D?\RHY=DON88"E2$1PB:U9YIUP:98?]. -MG -M>-TOX9P\[7K0:$$TE5[_/]OB-O)CHY2N&53N5DYX$9E54QH5E4TP4[XV@Q1_ -MOX0`(@`1>'\ME2S$?O(]OH.I@3%'_!*3VY^[/]H6K+P7Z1MO& -MMO_?^UZ7GV$D32$,:"4:W/\.YI%Z2U9"8*&^1TX6E@00'.*T?L[&;YG\KEK2 -M"Y;;,LQGLR,C-"N5``OD*EJPM%!6M3Q%1%#%RWO>'EN$\W;[&3[?>_[D9;AO -M^80D("9@[HM<%^*!\3:_57?P8^*OW:56^_]LO['1X9$1`9AE`S\TB`>@`P`)#0D4($7V%.3%BF\T;GH7Z/B:>D@ -M^\ZK%]JKENTOFYVP0,[/AHA"HYB\#ZP8'4:V"!HFGX^NS>RZUP@`"88A_)]- -M.E;;%:S9X40\/M7VCMS1"(!BFXZ'((@`$V@_5"C6X%&@,>`GL83Q+_IEX!KA -MH>5RW??CXWD7/0K=NEYS]&.QH@NV9XTS^7H)00&29:($N8;I$,FI]7BX-M\_ -M;>BV=[_@_&&MDJ)2)/4,!_L>P$ZSH.?V-S@AVO7'J^MH`3X"<`J7_TB78MI1`%`K/_ -M70!W_T7_LUZW(_;J.G]=Z`7+GE[NARHGA!P8YG!TMYJ>G&^U`JY2^/TI(\D) -M/1)O,-[YSQ>7KTBW'.;1CR)!!KJ$7KZT>,4,U1E>1R.)#1I"@&=YYH1^XW:? -M57*JUE)K)C>21KEJ&/EE%M0W0.?C8\1G@RYFQ3Y@5:@$H6Q%-&[$"DC$4`J" -M":Z`^OSO.[;[;[A>0Y?Z+Q_'%VN[9J=3O92@/^T?(ZFC=P_F8.V,#5]S@;C&Q=3=V_%GI*[_XVY -M2.PNV"04;_NHX.\`41O/R+,J`I$8%^^,)K6[GU59VH;U$I$Y#C6O2>:%R(EL -MLGM`;DT*WXCJL.O\.&P1*^<)`N>ZO?;[IPLD7KYX\,(W>VL>W+L8;;Y?E3CK*S;*7AJ']+M%K5H?M/XOX&R/VG(7V;@2QSN5Y,)N`" -M"02:T8'[TWRYSZ@,$J?)%YB%DSX+D+H0"![438I[)*'^H">$76^RA,TLL88X3VFO-[ -MI!X#GQ=@6-4GZIDOJW]]3+(048>9?2GLPT^639\;[DJ_9G:W^/-TX#!LHBGF -M$+6Q%O%J&AM&UM7[)S[!A`>$LPY&1$50F>[*:XW,/4.4#>HZ2-A`(1YQ*2$% -MTKD=JK-\I5<.[,E/*Z11.'_>^9XDD+5&O*.Q-^L;M=W.OF90WTHJK0.S9XUX -MSHZR'?NJ]D[+4&$"XJ0*(O&9\X7)NOKOG^1#RIS>4/OYJL?KEA?0O0&2UFA+ -M`I&2!"OWL/^:6J[I&03&Y`F7R["-S42=[OE_,UD@?" -M_VUV4**2@R8F/+-#'Q(`;=2%EVY#$NHWKNV.2X(Z;49Y@A>+ZK)M[#KJSU8] -MRYO@O*>%$6*`RE0@1CZ/5QN]Z80BYD1>-5L;9.D!ZR>S&Z7-@%6^+O/4-1(+ -M*S8^'3`R4>1->1TO`J+F8+A9,+62+HMTC6F(G@_-NCT;^;>`:CZA0";00WK, -MM>)2_WG(0US7'[5=<\C&%M;&5;^%Z_7\??VG+5>E1S'G$T77IC9=YD:!PF0J -M(XXV89)X<2)E.-*\I`"`GV(2*Z&A]7/T_3L>?8#7?*&2!&L]J[$U$GD"`X`D -M".ZP0U268!$(P\H4+W(ER8'63I8J@QI?0A7"]ZL3U,)5Y2C)*JJT6!X3;9]M -ME$&*ZU#4AG`:Z=45;U7(G4[6.LF!T@)SV/;3\?7_<<>Y_?C%=?>'GY9^`5[E -M.?8M^57BD@SY@SN(+$"#%.FPR)]QQ.$1!A94NIC\NA+E2IU2M.A&9[U"?+=* -M,="YULT,=VF21,G,NLJE7T73)XW7\_CZ?EN[\K850%#%B>!B]XH@*!BMCP\&(YBRF54E$DB0 -M+@@$%!72KTG'X[VI<"[3VL[UVFP8NFC\#BWKQ2%`417!4W.E.(#4OOM`@2'( -M:W+BIL_;*/4UX0AUY4[EE`\F1>"A]F]MWHQ/*=`QC&ZMC(3 -M"QC0WY/5PB1NW.?ZPU)+ -M:G\>''51X=N_4.,],PY+/MC$GOW>\Y_IT[1Z*_?X51MUS?A[WYX#T6][2QS. -MZ[UXD9UF2#&:O6W6.F#G4D+5?R,/.Q,UIZI?PS`E#++=1A[Y1-2[\O'/)R9$ -M1@PX1.)PP>F=\L":+3ZJ'6),TH993>E5=XG]3F/\!BH':%/.A/&L7O'%1(BLWO'%ZM=^&SSJNC&LEF\% -MC8[!/&M\<1."KYJN?SX%1V:S#UQAXB60S+Y/:IATE)-4&4`5+L9EI*Y8?!_= -MC&K@YEBE<*5K2J]]WD^]FNHN-7R<"[*9`48U#PAW0JHE,F=W9F+R+]IA_'/C -MO7HV7U.=0^L][VWBIP'."B0CSS#]T=XMP1?Y[U>=Z=*F]9ZI"NVFH9*&%V:F -M?H<@?O;=O-Q^V,5A,R#9U$;2D;ID'W41?N?-[@SXU61-AK,.KVB`RCOR^Z$X -M-]<4XP7GTB-2)C[SP1B4P*J>7M#8T9R-C")40&`DN1]@97]96VZ`2D`F*,^R -M&!(9--!0>8T(7GO^\$\C@\YC`#/JX33E7.RO)>(ZMO>>UWN;N8XQ=NS9KPJM -M#(Y9.4F=O5:058'1-B`,VYO]GC#F"W9#(O]Q8<_/D+7C[OPW&QK/[:&G3MS) -MW=^T(V)^]S2VC;PO7D"P^WO[O4Z`%&WYOO9NPG^Y3ET.P\.G!21HN/5"#XFO -M>]%P\,/)?41Z.<6MA%B0IKA2M2!3AHAZF8?A6-Z&+KI-07W@JDW."C0>H*:& -MF"_)Z>V;?6;Q[>[&(Q&?IC'V)#FS($`\TAO^XRJX5[27!]%E1O*\I@9P5V-N0"#[7XL]O]%_P.^(ROY_S#LNP -MC.42?Q\E^T+77B^<\?N@?"CK\S=]]?X_MQ(>4V"D.XR/I[17048Q8P,>+X99 -M(]]_IUU!"M65;7[U7+Q;T5*PY\/9)@RGNU -M-G0)()))(PQCM%MB5W[T*'?M8>?%X<]`-D'-Y];MA,V -M_/H,[UL`VW#@^'C47$^NJM@6'.UY[JFMW+BR"!"S3S'7A"TX];6 -MS8%2/'(MOS?]BS\\4TWMVMX5:NRZZ`+OZ8[EDF"`3'H*="@9!;>QBJS\ -MKLFNLA@AUZ_3\E9S#7CJP,.$*`80HAENZ0AO])ZN120O=^NU+^KGN8.\\3>= -M:8F_U<4RWC49,II-BF1J*9;7R^GX4S-/&8GFHXQQ -M1D&^6_@XP]V.(="07!%,3)5A90+6JQ$*<5!H@$$`3%!"\W4,9M_9W9Z5&8)` -ML&:Q$(-:GEX):`6MAU-C,96?C4&JDAP4K6`<5:(9R4"2PL(?M6\&ZW%TNUQ=K@J]GM_%[_?._W'@?O]?NV\75E?*]7L2 -M3F(^$57I=Y9V]&_?0\9CF/XLB)77-VYND?/\3$]>-=KY83>\6;GX645`0,@U -MMD0W;)3O=OX^M0^--D7'$KNXB=M>D<`>YU87XK6KC6T*'KQ#2[M>.>W345RFGLX?QQS:'SXK$B(=Z0?E.P -M^0^,ONN6N.#S\AU??;-8G,_L;^Y_X'\8>.V8Q\OS[\=_HZU\8TW7?BF'%JGF -M$^%4S$&0S_JWS*_P:R/E2],=3HCLNFW]+X+.VI&>O::!'1^#&EO75ZW/)]/O:88UC*=]:'*^Z_I%S<_+.#CZXD=;;L:.C+-#CEN -M=0U^-^BZ;.G88^EHM[;1Q=9O3\9/4O'5^EUR\$3BM,_'`-ZQ,2AG -MZ\:VA)G+LYSB@\U$<1]#*V/FNL#0OJ[3&F=Q"Q=@Y%.0U,[-+=-?;8J8HGI\ -M^[-/OU'R=Z$<+6=J>Q]L=NW9C>4RM?*2=MP.34<9QQBY;B&[G?96*VVCK$\7 -M>^*W>R]-14:E[RVNG^9AJO.KBN)NZ\[P^JRR[ZX%#;R^/7`K?N58&4L7ASC$ -MC*TT]$=<%%\:?DZSIE?&'&2'?/EGA.F@LX-^DF](#R._51P9'@ZY7/:0_VU+ -M[*//2S'G&Z\'E[RRXH(>E(E\-MIPS/-]3_!E=]YQTOFWC?))0PKETEY4F_37 -M-E9H@\9@J;/'26U+ZE$0#(%$:0@03(JTAX1V>Y/B;)?LI\^@^(V/"_--V)XH -MCD\J`,)X;SL;C#R@`]+=7:F\_-#-Y#7<;NWQ7NSY/,OV\OB!P^(X5LPBD%K5 -M8S;HN;3AB!>.BV1SNF(N`[XAIQ:;3Z7#%B[7IX*VIT!NW%T1I"**)1))^3A& -MI9CKNOZ@:18-;7WR72,^=/0<%;UU`INV7JH4CZ`4\2UP,B$#=`UYY\;V(!;8 -MO-L%'D;AF[@#F`0.(('&SBS?J]T3"@-9??.2+.%C=5T].XUAB-7Y`;;@0++& -M0&_B0X#.RA>X/#"8`1=; -M);FC0IN85"*[%F)HH -M71M2CB)$BS@+P0<"^'X4`LB--:($OX$A#Q`J@+(8O%R@'S!#/)!F]+,$D.1] -MPHB:%>Q3M-A@@&"YTN?'FO3K5SS,CSK+V^0 -M*O?.B7B?[OAGU#;FTDR2H)WS1%]Z*>@ID5-5B`,-W_=\)_?&(!U/(OU>&#-[,8>:&/$3P-BM^?*$IB5>DR0#A&/V[@)01XC$8BAB9<2)1EV^$:DH5MZ -M9-,12&6LN8),-F(F2.*#MYWI$$VE!-25>E"`=)AK4OX[K;-V^N12&+=F*:M5 -M3V,#"QI1B^IS:M(,,++OA<5-O!0=_7"'-]]4U^Y^C#P80`#M@-YCPE"1FH*, -MD>&_]_/^?1M/\SGX=GA?2Q','PIGQ=5>KSA*:'(5E2U!01!;J*VP;@V/X/&, -M+\+!B[S\GNC1)6#440I81)*7QP#G*#'F^XIMH\? -MO<'AZ=(BE#R?:^-^?R>ZX;(HG_W:Z/1=(+)!;U%.4E:0,G;J@]#W\;0V0R^P -M8I&O5<8$2W6ZWWG)6PN8OTV[$%II2I0I$9[9XNDYP>4OJM4U(67%-MH155:C7=7-Z*RPS/Q\A?IJJ%XI+ -M)$T4E#)K>1MDIR#:6C`P2>%R^')9TOVP'T4,/)M&2I@1*!9NS%JO_<-9SM3:`87>N6N=OC98Q#+7*XO( -M!9UM1U<^WAY5EXCQC![PT+`20]VUD/V[/_M?F;*:^&]3:(O&)X$0#'QRS!]#Y<,[!! -M;U,B2UP"B6!?G![IKUAZ2.*!QI[Q\V!JZ=>B670O[^I%.[BH'RXH@/NO@T*H -MZ6?0B3ON*QW(JO"=G2@/:UVIZRM?N:TION5O$J-G2:JGB"T?* -M7AQ`20+/7*A0(4YK@P_KMU\Z?R?->#]8N]1R+!W'J]']U4@050!`J+>'H-RK -MF[EV&>\F`=<7X8"Z"N"O!LD^`Q\R&@VMQN`_XU^LIIYXAQ)_FSGI5`HX29*Y -M#.7#MU,DUJZY?M-'&5%M<=G>%;7[5"\`K6'MR,I\*"/^5N_0?.[S]2!_)NC. -M&HBS'@.&=V2[X/\]`1_A1OVL/8)!6`SEZQZDX>+^G_<]Q))`.W@/R%41!$&, -MLAL23("*$L$L9HH9BA-%$2R)-!A2`HDT@V$6("`A(0$@\?I6W9N\_)WN[9+2 -MSL3==MO%M_%_F<-]*I?8EG&]$*-=H\1:TUPXM!NWO:3M**WG,3C -MVX360[2,#5'@'A]PL*8T.$48AHP;)%$L/N&JR8(T3]UK0?N=%WWRJCK3S[DL -M&Q9MOPPW\^M_6-?*NAK#CK=8XRT*O5X[/-^V\K\/Y?P-#YF`<$]RG#(]=8&;1E9^MTQG3_QXWV -M!.'F?E+^7PZ/*,]:G5U%U(0$`H`$81D&$4)$.BRKYLO-HM6Y.O_%N@_[ZOV_ -MJ.K\-[3*]S#XF5W4;_HL%PHX0;L17N=HR'C1$@GW[Z-U`!O8X'+V8['3PX"- -M3H%9Z*-C][RL%S/\^?N.0ZW]=-L<;,$L2^\]3_:NII7Y^#1#I$3>+^-X48M5 -M"A55(:GD'.#E`RRY@AAC5P9YOQ[N'!P)J?.LNPP"-SWN1I<]N'Q-9JXJA1J@K4OK?T;_>Y&<:!Z*)N_ZYPN5F32)LP2BV"L#@;*W_^8G[>DJ7M>08DHZBU[V0R2 -M9.2NWY]/H_XJ(C:J(P!21,QO![U0I"@HH*`E"5=Q=?4WBPYS6RA`"$ZF53O^ -M?%I>"7]=^UA6"') -M_$[NWORSJUO5>)V0?@>/,%K24-J"@6D46[$/O+@`X!0@KM9QKP;[_"?D_/'W -MWYO^$X,J9K^':9JW-$:B#;ENN<[M\[Z\#;^ -M=`P_'/&3'$#!6-[:+S>PU:TXKE-!^NG"CS(K(FY9L,B\FY[P_7`N8`MX)0PA -M%5&`@,`X&ZM0,`7J5;&H_Q_@8KD+\@S^;V_P[I&!-C$T,0<\BL]4/QKXO_.Q].QDR/.-64221CN/E(JHK^\;B\9^?1M!`RTD57<+ -M]G+\!?FAY>)[NZ_@\DKRUJ<;:%31%VV`DT!:(*60`J,H)(!*5RJ%!KWD"FX$ -M7HS,-W,UA[>E$`TA!#5@\YG<';`"XF4(5%N6*H(**H"D^3F'>S[GE^A=/E'T -M_CT6(*?/2@60108`:].D6&AZ;$UB\>?>A0B7YOXD^[W.CO'IUZ-9^?VAL[&1 -M.$:)*#%01$!$]3GL'SC[4'@*+*UNPVN78VS[^8)57%=VH&M**!WMMD&/V_Q. -MS[$\XBHMP)O+?EL8P$E@`D%!F>QI082S>HZB@048&1!B%-ER_^L0/`>YDORI -M8I)E.ZCJ]_N#,1N`>8EVHOEYQ$%PUI]N"D9Q?(BV]UZNI1$>V?W[*GT513\; -MV/W9?-/WK>RJ^#P=_P(R[_M15M;6C4>>S4WB>*@_=49IFJ%^NRA`O9W77Z47 -M%&L6X[4MV+DK*(`J20H*D/+4DX_3!S?Q_[X><1->0$B>J*KIN(5AVQW;V6HS -M_.)7JV]KR'<=+ELGP'PQ0CR2MWKA64LF"48"4(()10J,(`4&E-LEAY=7Z'UN -M]->LUXV@M+W'ZEP])FM98[OQ+_R^)GHR8-R5+0*4NBBRC'5_?_,?9>A6[?Y_"O'85N/'`X[^?GNU -MW(WV4D--2$]7`JFD>6Y97+&9NS"J`\/PWB3W7F)YOPKGF*_051%8HB@B+KGA -M/F,4_4:V.Q&E`9FA:>+0`P@&0BR;?1`(C``,8$G`02N:W3UJWHBEGE3UC+4L -M*(16,%Z:`!HC\%!0_:X2H[JS>NR?=?K*J#0Z@!PU3U6RK_CX*#BO96,;J]#` -M@E_YWW*_M66 -M0!VY5*@WW5+O\#W$[WRV]/Y?FI^E^YUU0-1""4&7)3!2B'MY"CXV_^0]7R^1 -MJSMZE`7C\AL"T5!(#R!2\D2A&EI0@DD%)G[8#E?9Y6^>]T-M^^AWCV_9V&`Z -MRY?=MNX]RT[^Z`7.Y]#I-C873[,-#>SRG?S.;>^[GW^NXS5VT/=>Q[FC]_PU -MM_DPDH#S>)>8*OS/^KQ\H3]OL -M80P0H$6RU#4&C@X&C@M5^LJ#)\LR$5LZ+0`?6YH.Q7)OON55$\#I<+NN0N4B -MQX:_XVXS_E?#+XM'Q0&23-R,)]L%WO.F(JL`B.`K_K0`5'6-Q<3?L,[^%BCN?REN#OHP1':_11`-WADB?`O*%`X*`@.$$6\B"#NM>^LJ5 -M_QSNN+C7WZ^QNG)T"!VL4?@1"[L-0/7104520QX/9H`)N9`33\#U..\PQZKE -M\U]?LS75%2:LLB\_Y^OQY?BYH^OZ3E,9?C5`\[`$]+%^]%"`48EWXH*90(EX -MJL($%M=+94S/E(1XNR>O)+P\P^5QLJ-KXZ,*T)FRB8U(B$4%$T-(/"#)=X_4 -M8=$_"X:!1/@GX/RNMXEIE+;J/)QV$RGOS[Y+X24)0K`VY^C@P$F19)B#EB$1 -M"42(H`*E?OOV@OT)FO&\,',\[[G_.JP<0NI$`^H][4$WTAW`@?"G?5MZO1/C -M*`N\Q1#?Z&AO?'[E73[CP-Q=>C=L=_L<1L(W\K84QI_19O7\ZG*>^[@ -M84$Z_J@_J]ZG':>MYB,7L7(72J%VU*!`&^LAN,1^!RE+L]6+:F@`$.7093E> -M,4#&&/"-%E_^3@^*WN&2G\6\&"B -MZ=^M1P;CM!=J>2KT1F(\C(R_CZ"$1MXS8#@?'[1_%\R_^W;.`B.R];@V-J:] -M"4G]CY#>*MGAK?&=89`=%@)N!<+N?8\;A<%'HB$VB*`JJ2"4*`!"4(!!0G1E -M)0#!TEXG2>+CVVSI)_.HRTS^;"PO9.F[G`[AE\TW!\1U&ZO0H=5J,)ZW`/4>!S-0)C75L]^ZS=/W8JP0I'#3*-MV!`:82&8,=N1[^YW_[H?E6_A_I;X$ -M?`%\E%%4`A200I(&(^#>8?]K*#,Q"OP/XO%8Y:'$LN@[?4L8]T)QH`4(VP47 -MNE,8@*J(M4(GQ$[.ZI`450Z&%L,QQ27[W;[N5>V(0&$'CH@8XIF1%[#QW9V! -M!GS`4L8!+!8B(.1*(*_I=RNV/;Y!_?7VD(&.]BQO.FTG;:[WY(!Z;+8 -M#E.NU^!\N9UM3Z\D=V4R77XKMK#H/3[[']=/_G,8/\L9U']_#S&5Y'K;W]_4 -M1=SQ6]YG!:+3]=T?H7K]-+E=9_&(S^8E?%=[6W]C]>\PW=<_?[3#\!I_E[78 -MSO4^OT>>^S%4R23DE4X@KC.=4=FT*"(2H,A0BS*CABQ-$Y2;/7*.:^17=80J -M2EY'EVLY@W4HPE#S/CVS-3DLH^T;V%\O-_![^/\3>O"[#^_<[?\/T_;@?$PO -M)^+2V>LSOZ?3PN&ZGG.D\#`<3DMM\>XM0)R'F/N7/:)W<%+(N(*$&RO6)]OU -M5>O-?I\9]&X3OYVD$/W1?#0?90`]%Z^A<7)((MP0MT"A2QC*+4)%=`)091*`Y\[;/I],2 -M7FTBMHI0FTV4H#0/&HT&\#9R7ZSS&Q5_*_,_(IH^>^XVBOR4!\;>07ENTT;; -M.N5MBNTI)+7!+BRV+%HTI[`"7*+&\WOV1N8Q5OMV=$*G#\-QL4C. -M2\7`/GMHNBXX5U$?4771`I`COV"\_D_SV5;ONWJZWM%6J4==^P\&GIOJ@U4> -MWBN7\I\OXX#^L_G -M?*M*)MA^NBQN]MY#D?,]SKO#M17\AZVR9QGPO,Y?0(,>"#P"\-EFJ@1B[%B9 -M@@#HSH'[Y]#&@=8<+X_O>@T6\J7@D^96V9#@Q1K+TV:X;+L=IX]/8^SWG4:_ -MW+EUOE<9+F>BB!/N9;2/UM\#5^=S206]AI*UOZ&9XS9G(8W6V\`RVQZ$4^5U -MFM3\NW_/IZ0WF?(K_/G=NLZHE(']4B<7/:B!Z36;\&-CO`[X$$!"2,I-\(J( -MZE-[W4JP).C"DC+ISSB?Q7[>J#)LAN9"[145-GH/3V>[$=O,N_43V,F! -M:X!O1V/:F^8R'^.UA9=0@M@0!2GW@L0%"`$*8R0Q`(%;[!%Y[W-,`_O=JQB# -MTGU&[Q*+_=]%=NKC>FD2"J;>NP^^+8X(A7]F5##N0^$$#TML!=O7#?;:T^R& -MH`00%#Z\+\,SC<=Q&ZM^7-2Z)`3;'P99FL'X%)F]\76 -M>W(;+G3.T'B>"YJ>.@W:??4@$50B[(OQT!`W@:MF`?-0P,K[[) -MB+O\>41J(4%XP&GKGA,IP7`:%3VJ*QB0X2J08P@Q.>8.^48L/O/YTT&*8!#] -M5.1+;(P$+H(S+'ES]Q"@`E&&HGR(9)LGFB,X:_S3>ZR\RDHB84?OD -M81NL?C%6*D,H_?42;23.%5'55,52%(1]C)116QPU0(*7*DZXTU]9,)?BE$++ -M=)E.89,#T'';+&C/M67@DK&$L_@JGN;WR+R-R7)>OR&LB!E9IFKAO#EH:%M_ -M>6]\%KO=[H\8>#O*<&QL;^I9W5TR-)KVI7W";!MDY1TJA="2,Y@OL_%R[?\)GLG>=$H'Q!^'K)&2,-L_,F`9%X'Z?Z/B+D:Y -M`Q0YSX'T-[$L0TKJ -MOX7T'^BPG]GPMAY)K4$3N64*KL*2JB*M-?-77-R^$;C[WDW:B0/$&>%GK?M5 -M#.%95C):,"E\4#-L4JEHJ2".7-[-\,^O8PJ41*3CE5;&PR3&-L\?,N9!_B5T -MTQQK1J;"[-70$9"0C'ND=[FV((UML2:RA&&[7B[2%O('77]X=SE1IV!M\ER5 -MB8@8`I!(=&@M+9E61IB^+X:/LDHGG11$5@=#0P.=ZB3[3J-/V/NZ^LX_"O/9 -M)W/W-X&7-_;HIV,^\?R.\>*!,T`5?!GJ#L=)6%$.NGG3SEPL2&IS_WJ-\#CCDE"`*M&:+A`M`3EJNM>^ZO7=@I)YU[: -MYS>`%!%?>U6QHI`D<'!@9J8-+!MBQ,+8&8;$/\C*5.@]2S>=1R$*@44//9NH -MW;H>'EC=EE"UE%5ZJ\8A2"H(G.TN[IVA1"-7PT(%(A6O^!8H=Y4*/P9_FVL` -M/YMOG\[[SSJUN>7/D[!@-C[?O>DV2>`D]5ODX0+1=S(5=M;C&5UG;(GD)HL -M'+JDN&$6,J(Y3'1E3['9K.W(]'BZH<7!YDJP%\I*([\A7!U6*))4I'DU36(8DW^%ZBSV/2D^!N.HFM0_@=VM][5]W -MWUNZYPK?D6YS7Z4USIA-X0I`4DI!XFTV?;%>$A_M9Q"I[5#UPN0I-O@MO--XUNFX:QSK!"3QO&7>2O-(=[@2&>1BUSC*Q^2Q1J)M -MJ(LLH2\SEW9K"&)!%6`!`WM3J-MZK^@^%HV-]&PJQ*M;O;;'3C%K>_2ZV>#U -MK,-J9DR9U79W9(VXW71AI7<$BX'\ -M"Q3B^`RR0L1#6\\4MD0+L^'%182HW$0M((CT$V!@<(5U.09'/IM<1% -M'.L6A4%DY22QQ5F1NDQ/-T*Y&=][--<(D;!C)/;LJ'EL7V!AH1JBE<5^H,EY -M^O6L*!_8KR;(KQ?G7@['4;NP#)'T(5']'08_YY;9J9.%@%#?:+*#X>9INS>9#T_^L$%S&/9HNMJ6>.8[C/= -MOH9'B/J@*<[_Y:+4]3U.>=ZUR4?>4U6._3W_%=WY3"'D]QI]_[QW4XJN#.N[ -M96=U_-7I+5=^\N`9O@['6L;S<"G6?"R[F#6_0U0;&^E&020D&3I,*5YJ1F55 -M<37AK5?5-4/?9F#?3:[3J^9Y-T)B/%[-K6G9RD#=M/8XQ%.]>1(",M"J,W[1 -M<$G1,:8Y9YQ\=,ZJ'WWB8X8>D1A2&P):PYOG,H.N(.??5PD#_3]-_U==E.BP -M@(:4'&%@-8UG0RS2K6RE#'0S1X'A9Y99)[^J5<8SY=2E8*])CMN(Y9I48OB4 -MY3G4G]5J.NJH8XJR$JO.T>E@V?JVO/?J7<%_JU#K[,+<:&--0*>\A<6CK]?/ -M,Z4T2VOU/;\T]ID>K3>[NV(;>Z;G)#,NO`O&.UEU:=K@9IK5/Y)E0/,13Q6.OK[Y2<[`*@JQ8/[?5Y5'Z5=?^1@^A3 -M"?5I3Q,V)]^F&?8>BHMG>]%IC$WMW\"SK%UW*0\-I)XB>S3,V$.U=C6AR")F -M4#APNKX4Z03JBH1T-UC_.!FPR1]E&OU4.A,["'N,#J/?4881371![CRE<1/S -M1P=9CXH)/>U1?$L0;07XI)MJ"HR/"=7P&80X76\'PA6TMD<6GGF!,<5FGS]9 -M&D%G<4UK?9&^M;;!X9XS/4GE'Y5R8WLPGYX20>JEX,P3""E5U98@8$PJM -MCG@JK*4%@+-0-5(G)"T(VT-OQKU!!R81B,:%I#=IAK"J'6K#U\7*-F4G\\,4 -M=UC]#M*,4FWVN'A\H#^E&K#9E]>$M\,G_[JAP@IO^GC:*HYW&*S_XYIRDM(Z_=E$J3[DA]P7Z -M%69F&1M58%#&/CM]S5P<1_'77F4\XD`$W,B*-1(+@4B1(B`C=+6J9S9S+D2R!+WDX;E+ -M(9YM"-&/5/[(V,2#X+YAS;?-=?/1P#:=AF$G!&BL>V).&=N"J691=28T"`&U">"S)#,LYN8+R20Q8DNN&T-:<9MJ.G+>/+9FK4Z]JJZR5LT]/$ -M"0(#W50)-LQ+S1)JB1@B"`\2^*E73U2J7*RPQ-8>L*6L.<085H=.202`R0;] -MD,0R04GX?3\JUV-G-)U?N5)+P5XD^N6(*`02,:^P:06BB`_?,M -M@P^CBZ23\;_WJ\'CX&)_E#=)^/JJ4XB&*`\1.RCG1'A(B?;FI!V,0_=K"AXJ -M@S[&9!Z_\?<6&Z`?=C^&`=Q`W2*_LWJ@]_!^?'<$4SY[OH:;0?7^&I]O/03G -M9WTU<,?=T];=2>^JCS,.?@[Y,)[6='!.)CP;)DH.JB;"?NB?2Y+`LAB@$(%1 -MX8R4'B8>/N78SDK@]O!_/-.'(PJ)P.1.?K4VX&+MUU?+\)^CKHL`Q*]0#V/) -MR&!20Q[1\"JGS.Z6>`]KR:FKUJJ*%[:#.&C$Y3NIH2&-?N[HCW67I:/4Z],V -M(>:E0D4RO)0=&SS>$!-@MN*+Z\#Z?S<-.M>9QK,,14S(AA5:ZKA$93LX=Y,0 -MB0`FI%_?`B(J"+"8QB:_=R?`'X3^`8(D1!FLF-O2`)"$Q>Q'VA']PCNN/A8, -MN1+09113(YPB[%`&&ZUK&7B("\^MHG"^$/R2T,"E*5[KO^_/WM<^&I_]VJ5[ -M8R,T4D(@(OI'TD<*0,)3=/T+F1(5)1:8%"I`&B=O$*J5_%XYA51]!S6-U%&( -MM-.[3P``L(&]F4J,A9\.KF()YV[SNSQKD+%V:T:8H!9*_#&>]\D]-.YCRCB/ -MK+/-7Q692`&AH#-%(R0E)G%U(E*E,%D19`!.IL6+AT;`0Q!(ZJ)E6KV,"UCK -M[.NVWC^_TWK.DX7_/_]E\49'^_#U>"ZWG,7F;/$\]]WT_5VO6S,7LM8OX[#I -M=1II[^8S`C1`*N]`D@A=R/.FRNW(:]J=T?_?E?Y#1ON*BWSSG)]C52;>D`40 -ME!H"/X*&'I&?`?ZVVO[V>MTB[."!4)_XI@_ET&.?H"Z=/'50 -M.'@='`.OAUL^O$Z5XC@JJ\E0'`JKVS&BR-3,-T@^'_8+I?;2.Y,9^OJ6S39I=? -M7I<2&(DNNOU.:T`#+B($U-XSE-OEW:!\Z#K-71Q>[?1)%_GOV*7I4W/3$.O- -MDAWTLIS9\TE#`(#Z.0#WGNY>#KFHI%.L8MR(?*">/=SG+ON:5('O%+Z1[V`_ -M3B=QET'Y(^)B9)VD,GUZ3LH]1,CK35:T+7&TJMFZ[^J2F+?+=6OS7P;N?GN7 -M?K#!5IGBDB_T1DXW][)WX&HF?)4G*"J.E4+`6(QB14!>^T(@HQF`RAEX-?YJ -M_)2V$F*)Y?C1(D-H8:X!_FV^A<(2JHBQ3>;=,;$1CAH1?1XS"G#U;=2T,8]? -MPQEHP_[XM)C/!0?5>X@4Z/D2`YQJYD!=O4'BS#F0UJ5FM@[&^#1VV--IC*,+ -M8.,Y58WD1&QCP)"BDD"W,2Q5IMNM`[`98JZTKD5N4C`;QIDM(WDSXT5L6I"R -M*(_`[4&_'%Q!A-"7&$'%">IIPATG,A]\A;.'J*L$\RG -MJT#(0_&_D7<WF)7D-/:7G1&>U(]*J:YEE7A8L"P" -MZ$(`^ED(E1_P5&,/RGY#\F6DVK0IU'9K&"B6!0<*6%$MZM%08DI">"J?+KX.>:DY_?AMJ`?[;H?=I+8%H4)/_PP/T&'TJ?]J -M>&Z?TDX%G51U/.4^U[GQ=CR^@3PG&E;* -M.>Z[%%?'NS-#]=/T7P4M#@S\S8;683$Y* -M)W:O2N;$>EO2W2N&W47?HZ`A1;`60I8F3):"A<3)@>96\YNFYR2T=ZNK%O.X -MIZNKB[A;&K^^OM/AMO:Q[&+EMTW(VQM*1LDB>T-F8F_U^@@D60,7E/J\3=D#7B\?TR30KO55;= -M33>9CN24*)H`TD5@BM42RF[!N0VV1LTH?.?/_+Y+L.P-&S3>UD'6G-W.9SWU><1UWTLO)HRU^FOQOGD6^&ZILX7:(KPJF`KM3E0S/.(3A#K3YWKXP2,002#,VJW;=V#A -MF.(8/`Z">/=ANU=!L;/;?:&[5I!R)MLK5JC9(X4OEQ1K%&HV#A(-QPOJ\GB -MMC6\B/ZC[69\SARYYHT^^]SL?MV";1&1LV@X11K7:+;:&QI[*2+V]Z2AB"L0 -MV$T93*04*9%!?(,!0I;#Z?_#E/3;=D#%*2@?%_CS[&Z9M!R.>:TBP-E&0/A) -MMA-:<-(E6\F8K -MU$-"M0^CU";(# -ML8<80*A/X4*08>'8KZ(*3(P4%EHU>+70,-4C%?-MT[U3>5#>%$+6^H\EGG0$ -ME\H%*,+OB(Y4BOY*/SXG):D98[Z4X@N.LGA910-I\E._-R2BA*5Y?-(A.IV" -MIKL9]D/,.&(%Q?770**];`3@"05V:NKCN9:V644FL]^'%>7\'PJZGQ@,+5^U -M?V+HF>S80VPPI-AQ9T<)PXM!G45":QVIDP\_\Q1%&(#D,4@D=PJRI8H$V%J( -MHL27LTL+T=AV/R*A^*PXGY=/9)-FE>4S\9O[:M6'82<-8XNY'BX[&"!GCCLT -M'+GEFNG-K#U@G;?X[/;R/L=*]I'M_>;B\DZZ6VGQT_:9?F:GODWI/UTGE,GS -M;)IE-IJ[JTJ>U@W1NTQY&R=S`Y&/F8:$#8S//Q9S,X3*J*SNP43)BT@RMMGVG[GG_\ -M^7CP5;)L2;-]W2F\'# -M:QCUQM'M$MG55-75*]F\(VQE==8P:&/:0;)L1T:B9";Y:`RQH!<-0!8*F:5T -M54=&J-6Y7*(B:YN:\[AIIEWFLTTW656TD-LP49CPVA!C;8:<>11-H;C( -M3:D:J:81QV<71H,43UUZO+KWO5YX])-P1$0]^O+QZ]=Z:](P0E#WU[WL8O&/'N@SNL\B*!$8+%`60 -M4455BG?#KS3#X=<2EWJ%@QHDX0HV8XWLX,(J+7OKFOW-O7OU7B; -MNZ'C=RQ-(IP@?$:37I3`&N>X#X560.#8J7\_X1UG++2E$(DTHA.W5D$N^,RG -M@8H?J">37-[V:SL.'=_J[!K#,/Y^XIFN*ACN-4AZ@S)ZP3-K^+5_I?#O>G?,[QK[FF[\7R(N*,J8884"$X=[ -MQ.A+')]2AB_^D8AV,D#DB`4W*TW(Q*>>?S(M-J$#S;V8@_V$^!P1X] -M;"O[*SFVI/GCENR)IW\5W9SHR["^_"IBMF3#%M;9"SW=Q7&-/'JV?"3.6U'BW&PA=0B$.'!28DPH:,@;Q*VUNUV54JCS6+C -MRSD\7[;_%STPTS`W\W,2FD!&+R)4=P9"<,,/T/?(C42)[1PJ['&R-8O"=C=\V99.#8UA,S)G-D0K<"+XJ -M!AD=BAW:CXGFXMFQ#04>$'L1@@9(32+:(KRE(HA@QV5;!&!;9LF:NBSQYEGY -M[,&-I-N3;F(+:0@T\D,Z`X]4=W@.*6+\18]NGX\R*R'HO@XOOA\&H9A7#&87 -M:0]T=PU5%QR:EXY]&WA>C;)%^\##+A;*[(/T<-P4SH4;6U?:-AT0"<%RI@9# -M8PBPT.?*B`H9[6+1#NM,VHC`W(HHW!# -M>6`-F/C#SI`SU,0E^1UD3.SLBK'(-D[P_G/)STT=;VY^0)LFA\34F5(R -M(<*9_DKKF1A#ZVM1.FOPY?4H>&K>\G+.=^/=30UCLB]V"`?.S3/+MA$=CK=K -MO`8G+7*B5^:#T/_O67HFTZH&\.$AB$.DK8)X!!RG2="KRM)6=5CK%MGG==B) -M7TN[,S#R;W;GQ>1?X'O*)$Q+T/1R:_89/X:09,O5YN&J3/3>L5)BE2Z6"0;( -M?F'P9=1"#EKB&@N&>G^]#EE4.T0QQ9?1;+^VF*^A1R>OH\='&X^JT;LG4!FP -ME[]H3&`NMR)@,C.&MG=V)NF -MK-_CY>"GZ/)9"ZC7"-ST+6-"BHO4XG5CMWR!/TA(0Z-,V;#/O!Z/KY',2#^" -M\OQJ^`G)Z/AU1BB'!!G$):JN9E=G@3/PZF9X)UO9%%TE!/2>YJ'A>'V*K.[> -M"8B<>-P;^%+!51.L:X?"$QD_)W3N\O?U&G&9HR+`3CJ-9WS[:FYNO`L#1Z[4 -MNX[B%K.YX7$X9)29BRXYA'*K(.6<$((HF+`FT,T((@LLXU6P>;95H(&8-BK< -ME5TU@&_F?\[_B\6UUTS7&0,6&@PX!??P^VA'6[=0R$?4:@Y%),QXX]'!\6(C -M%'?(4[QX!8&X"\0;\XY(`N022!U9T*)--3>2@:>&LB6F\AMF+D+!:9Q:Y,+Q -M@V]8K1A8H3.!$R11LBB$;43!5CHJUO4UQT5]O\[7_@O;PM/GHZ+WW(J$QI+Z -M9]AVM"D0GVK5A791RN*0Z'I?EZJ#'QW&^:H%T$$G\#/C-G7T-YC&R^Q_2\A/ -M[0TFI4X.V'N.I>7P!](<3@6%L3HL;8\X8-M64(G^@`([D/_AT((D:"DV5R]< -M]IX(>:Q>.:X,XOT/?KU.&P<-CBKLRE2[V+M.:&!%@BQUJ&B!FD,*512*LIIP -M4/,F=66:^LW0\946!X^9Z3@;+NTYP46*PP(ZR#)FDY1`U84@"U50HTJ%H -M*`.&B90X3-!]3G9:(Q&9W5H;/?XX]LF_TVDN=.=S,K;MXN'$Z@R&@:;30I$V -M96P"I4(ZRH>78]L0XGIJE!U* -MKDT=(97MMGHA!V%=&];%OU,-FC-IV@6/1Z.7'AB4GEGV=M;0T14;2RZ4JUK',"-WF0*=V$-IJ" -M-5FG[-[-YMI$\6^&(1!BE*%,S!8W5#L3.0PI7+.\D0\7>27LGL6#0&ET\$RL3$NM'P)_`0W:N -M^^#,(4\+54FPWEXA\/=[M=U+MJ7<=EJC$-*$7PS@$OFE;M<0=PMSAB[0^/>L -M<=5TRS>LF^VKF_#+J!?#U=7(;KB<&]'1PE.5PVD\;EVAZ+L!N))?F<.G#J7SS<_#S+4 -MXXR.GC\7%8C7HV>V<2+W1?UE@].(NXOH%7-FU&YMD3)LD05Y#-W0=LL6%Z6\ -M5GAB0;G#UEEH&ZA-B,K.'CBH8[S40'310>,-MX>]32WAZXM0=UK.,7%RU&&: -M`]70RT>'4QS-$#C*SOE"^NL -MM-XOJ\TPGX\M<0E$A8G@7BG.8*=8XS&DP8@F\MQ$]1Q(Y<46OLT=">RS8QG2%-L0[S -MJJ&+JXUQAV:C4M&G'Z86`3=>;-QSA&$-E3J89AC?%BQ&(J&,1K;;R?3[DA)D -M3,KWM\V^JS&S]ATA:79#9(O-&S:ZI'TS1V^)H;;-=F30A/?UL+7:>7(4XR`G -M37R^7BQ>31!+'!,V/1>KB,M*5?OSR>E$D_-4;@6#]GM(':9<:';G]L/;V^($ -MEY#4T#"P%@N(;+P,CJLK(FKGX85/@^@IPNI#H9\^Y6D#`$(QB+B2!C+XZ:`2 -M@Y"@)XXZ*$3O[6RH00!L8IN9)&W%?+\,?X@C@<*V<@*^-D:H1;Y"@.+Z@5`M -M]1CXX'K_?7FD`>NPV5V?SJJ7`:3JM16(I'UVJUQU06ZAW?_CN[VB(#BB&A,_[-YYY!(*`N*J7P -M3)4QR=TB6,^NDZ\BU[TUYH:'6C[*1[-1IX(6=`WQ"&G*$!YFY,@[90XI?-6O -M*=B+P$2Q*`1N`$!32_'4\GBHR=`@:H120(B+`@C`.U#9@@G&WU$8R\OM"#%% -M%>?#'F*^U7E]S2W>+`QZ5D+MV.Y"^O!VCU*%T4_(8.X_?=;:R/>+]YS@_O%- -MT0Z-?LVU//%^^_WVF'1Q(YE9+[1A7=6Z!`+3P]NMQG/?%X_G([L7&M#KE7?S -MU,`UG;COI6Z:'KD;IR!G=8#VR-(E'(I6OS1LQ-=L5$6H][OQAT\#M.N'HVMK -M1SI";Z-Q<8?#`10SEMZYH9G)P>B?(83D@UTQ-]UJLYK*?`_HFR6UVOG.'S>< -M+HU_45W!$7%LX#6)V,75Q., -MW:[<@9W=5X\I>,1V;00%9R:21L*TNJ;`9RKW<]OY]G`(UU'?VO)MM6$FPHN- -M((X(`WPZI<6VVNC8 -M2;FTFS""LC)M,W:KM$/QZ-UV\D>H[5=^.Q#!LB204S -MV#AG> -MPX:W0DR.^;.>IN&MND!DAT$;LUK5FVTU@.;6-JO"TE6M.:%K239ATLU4NQ2- -MG2N>&NV81W8]2`XV"^T+1WZAR&C`YYWJXV16'8(PI+`4=L@+C2%9=J)&!P[N -M7W=S(WSC9W5+MOG,7D7KAM(*Y"`+HP.=3:#;B#?2M`69P1$B9<,7-+OQ -MALWN,'-=6YK'!8.23*)C-V)#&UAP09:+,.(%K8*:Z:"!AM[M5HNRKHV0UO)F -MK]GXN`YWRL&VP8()&Y*09@UDI?(=Z5E*(91&2YE4;>)-JI-][VR9Z5-DUV48 -M$QR,-KQXR5N'#+4&/'%XSPJ%,UU4/+@,[MPT'M/:(+!JQMP)P*+O1@J"QFS3 -M`M1'K+%[Q3/MGF,M8(@,&`7*T>^ -M'FL(`4@,U+:TJY.(0YDAN9P:9J)3K.+,`I(9[Z-=E!Q,)QJ\@ZC%W9RITZ&;;Z.5QHK6\",K-[SU -M@&$/'AHP@+9OC+@9S+7#0]X`(?+79&Q$B$QNAAD<-MJ,88-:PD$"70O*%[.A -M9S+(`Y\,+D`9Q)`NKUO=5;CCGCC.BAR4>&3E87&7J(%93@N;IM&81RD\4FE0 -M@(W`>Y2A-E,9Q>0T8+.X))9N6K(.I-T&C4D(HJZO9BB!B\43-Z$I!GU(4DQ% -M&,K`VNBP(WO1;/L+3D@4D+00C)LN6TX-B92!9)(,UM4$>CK0QP'!I(/SIF?! -M<,UAGBP]]<'%56&Y)>SD#TJTR@_<(@SM,]B2#$C%^SY5C,UA:7$V\M0V(MW-F,I!IEK06(P1WUEL@S<:E&(T#1V1Q=F&>8S5Z:F -MX6WH,*.7#[OI]M0$#,!-:"+DXIN#L@46-J,S=WJ-\II,$X(:LLCCA,896"#! -M7]`A)L=8!WRECJ<,:%T(`(86["`N1I?T%_1[D>>[O$6? -MTQY;SJ^;L0Y8CR6TA;0JK_J^46M"`7UO?9^ETHTX$V8.0`./+@E%6#MF!]/IN2$!*`Y?`&*D8 -M3Q1030:&K>0?`F_VLZ:PY'>Q'VY$(14.HUWR+(^LGK9M?IUK%"U&5L]FFA^; -M-HVL;R`5GZW]@B-^-6<-WBICW*-[+X&JR>3;Y:)8%1T)HBH$+!+!30/%\'HT -M@;4E)**HBS%AD9PX]<84F7Y)]\`;`S.];`(WD`0D98^DHN9L@W+S=8;T=UUG -M>ZOXY\F,AHMLI5-J,E=;O`040WE$**E]4!A1&/5JI]5LJ#USY/6>8P/D('MF -MH8;29>1(2D1;//V`12``I41$2B!S[YLETZ@34;F%DM:*$!B(P^HK!4RLB)E1 -M6&CU*&:8$R3=5&;/=U09;JEJO];Z#0M0<8[-D_I\`P)'Y*H@\<@#>R."//D7T[`H@_PB00!F^T9`U-_5G.M%T,_G -M[IL6V!""`$)Q!'/<&H\'6JGN2?N_QJ'V]'FGVXP+"Q1V!Q`R:G&6K$[0C^):U1"#R*7=HMH>XBVC<0'J -MH'U>GK'$,;@4&A`[.%3E85)I5X&W*60`V?S*/!@=%MJ_ZSDW;,+C/@=M#IO[ -M*/+Q3OHZD0Q0XV6@3H(9& -MU#>QT@E!I+?(88J1+H5=02('4L5L1NB)0R7DI2\A@9(INHK+CNP!13.;LKF3 -M"9)(I(L1@!FA(31D-4DI(3`9ZD4BAC?O83,@&K`#16-%!;=R@4%J,*5JJ@+J -MG099F[=KA/^>N)XHFP";\Z4RGP#*%;*=W7Y@_J?[WK%SK">I--ZH?Y,'2?`0 -MP!*]+09\5>COK&0U[#1TK6&Z$(ML6I%&(92'J+`79^:S7>7L>%?M'8Z89,PY -M"2(VWN&>>!NVSNNB:H#$II$(?@949H"A]OST=6SY:SB%,+2;L6;`V"!RYZ`I -M)*`7DB]F\D)@';VSA2B/CN\%"V&#>L;.G@$ID#.2H4-2RRE*-?,R:UGR\\;221`H -M6`$LJ$#Y1_Y;G.3>.;G3:HAT"=R6?1A7@TH6F^?A!"GZHW[*?@AM8\ -MARVQ#/]K0!GQ/J'W>YOS-V<#)%,H-'M;ZATEVZZF*\0PB*R#(Z9X@<(26WAY -M;G]EPFN#)XG1!7-,D!,^"!T$=I&S(OL3FJDK:^JV+&VO+SM5;YVU)<15D+-T -MD:>#XJJB*["(EHBAR8P1M!;0=W^Q_`()"X\6?XQT^4/@,)R.]\9<:$XB^%4Y -M(E6]GM&=;=/>>^_&Z3AZ?7B).(2!Q'<.!A-C.DOHWCX(4XUO=MACT^OQ.]3< -M0V^(Q,9&$A)#=M@0YG/M@J,NN7[?^I^+3B(W]CBB`C -MQ,,'^QRI&WW8@:M<'GV&5'CY8W)PEC=6,U?`9ER7&L";<)`GH]OK$EK9*"U7 -M&2/9A+!OZO1B0=C&<*L^VTP=U,E(4E+%*::$6A#.I#FD(K"O0T<.;:IH(9S* -M=@=F4*5!,(I5?^%*JL-O2U#$?BR5B@:/%5*I!HF-'1@5S:[6:V*QE]3J]TL1 -M!0H#`91FJL!2"R*M&QK%HVQ:-%L15%J"J+:HVMC46T6L:B-J -M-K4;;&*VBHU)L:350:B@UBC5):BM&QM%HM$:T5K%1;)M%45:BHVP;%HHU8VH -MT6E&"2!HAB@1HT9($@*620S,A(A"8A1((DL"*$%""Q02>^Z.^9>E\#WS4NZZ]+ITB)6.RUEI+(W;*W-84 -ML&X/!DK(-MJ(31IH;&SZS3]/UY.G_##ZU_:)';^>]U-+9*57M3)_*QW>D] -MUY6L-S)`4%A]=4TXNF0"B-E*"R@:0$2+2I,CC4R1?-OUF#/1`:,U!092.DJN -M8[$`+D#CRP[`$[Z!SM-5/%8-XVVER!C8@*PJG*3W2QWEI950-F@#=E0CBVD! -M)&N#(D4_2;TY:T6)DKY:BU$DA89MUG9B`#9Z@G4>%R[CD.+C.?FGP_\%Z=`[ -M**'Q73=)E\&OML0ADL8BY./OG(W?@Z&4B[YV"4)ZMGK63B,"]2 -M4^9922"_9A]\%\TAX`@C3^_UFG.5#(JJ1;%'NU.BQ9H-Y+*YFJJ[KL^7GEWH -M/3(?A;#7BR\<-?S@"X#"&Q@5>=:(BJ56E5USPC^*"+6,85(&@U>EO[3O#S$R -MAX10O14^UNZCHY21S*V<%%Y%1HB@0%H1ZV/X([#Y\#/:NFB6YGYQT%I!\7P( -M!?YTRQV/!;?,1#\3=+TU)<>.OK^Z7<_HL^XS"!]*WZM]_K@AR -MH068/]'/06/.D]^V!&,Z2=;*\'W.4#TZ>92'@Y-!7JTXG5P"R=]H_7=>GT]' -MC21#P4M*BP.TDV];^M12(K%!%!-E:`1$2)5U^]C42[1K-Q27'9-$4N@P1-#P -M0!Q`XIR#8O7D/.&RWV)/+B^"-%%D8YD$FPGRW[ONA_-3L4=5JAJCR,Z',R.S -M+KU#*#P!^Q\7D/]J'DO7IH/X1#B!X!%.4)%O7$WTAMDL['P4V*T$K4O,#[6A -MD!:JPT%^G^PEL+Y2=G1L!19-=[+5V7Q/%9; -M,U+RP5G/'W\5S-=S<*1S/$#NE6PW8K/;JM+'4BCS6`6XAVN28)\1)Q73OI -M+%<'(<;([=3/$/PA@="7B!D[-JGAKH<89]9BCM1FFLU%"[KB>1+\5;G<:TP?&YO7I_:?&1^$V'H/J`1`'UH5PUD -MZ)S'-G#YZ>LS\#\6C7O4:&X/RKAA,0ZAE3H0T_'K\1^[Q1P%0]F]9^?2@^31 -M\E)HGQ'@<3/%8!9VDH%0_6HYBQ7S]EOK2J[E=RH7X%&(<&&OZ;1,2)VT#>YC -M#YG((;+KT0'\EQ?KJR=E!Z?^-1O^_K4THJ/P'B,%`O70_QI/M4F/FZ,V=2?M -M)D*<25IZ.IR/L,@J(/:^B^TLPI\&J2?BLJ"?TDXNL8_6^Q_@U?:-+P8?J=Y> -M$*_/./HQC6L(]H?(8%HVB<)5+]^5"Z)[R=_`_VFE/^H=;Y?AO,7(:I,OK/@< -M_.S)S_7;AI/5">IY]"X>E_K_J;#`9C%*YVS?5??529'II\I.+Z7*B_?>TQ9H -M@O<92I_03SMTPU*GD\^$=:I%#*%0UQ)#\Y#+B89A=H?PF:,Q3/7,IBEPS+M0 -M2_T'_J8>EZU![KW%!J'C)E9^BPYIQM&$,H&_"L*17_/]]WY[9D$8JB,1L:"3 -M&VBQC8T;:I+$;!HBQ1L&L;04:V+%),,1$%1M)HHVC%HVDK0;16T:IFPE5&BP -M:C19-1):*U^IMR0WT+EC4:DM@U3\QUY>`Z,O9*`4$B8?&RR>()Y>Z_>2'A -M-$[0*HH*"A($\)R#47:3WMI#5+.$$4;6+M[U&R?>!F@9G#;GO9<:HH84/+/A9DW:1\_X -MO/IMGO9R4>2AK1T&LS:N1R3UY/O8&5O^GG_CGPKHLBION4Q/N&A0?Q_-T0OW- -M2'Y26@?H_5[?EG#1W5V/\2U7_^1;]#1DF:&+JC<_!9HF$S8LH0,WZ>Z/I$CR"?X?U.9B(09O0I1J<(5+'^K -M:*_NF8ZMHH^;_[[!ZD9I351^__#V/>^LT<,@P^2T1)L;=XOCGUS#&E^=:(>[ -M)^7.%BB9_%J_@7_(L]Z(_D/IPFB>2$*23ZC69?CZNB8,8V0<:82$C3<&-DD; -M3D"#'8IVB,^\F/654;#1H3"4HOIV],C_W:RTB-:>KR]=/6O"]*J4:R>O@PE9 -MSYCKL`UR2&/;-S4W=O,9Z[$PBF(&W]!#F[PB=C+"LIWN-_5:M`)+22*,A),U -M#E$8?)O0KKHJR*`Y^4)=GR@[ -M0])$)"Z`:$?RRV',VV!EZ.0H-$7%1%#/=!T0!&L2<9KU@?$$-2JBL>Z`CI2- -MZ*3"@TO;JE^.V*=AR.],'MF;I^P8,>97M\?PC1Z=;VM,-Z:QMV`5`(%MP?=L -MUO^O63!;VJ1=0E9:BVOC+L9+;_=WZ*IV&_:E@N]7-(O)$(CT>` -M8P`SEF%6OG[Q=Y857F7_5GX./J;`J0]&0])";3"XE0*2R?QQ5=J2Q,!DEL@C -M;-$\23+(RT81L>B21O;JAC,8QC>R:CJ1D(*HU;5&K"5IIH@T--S8X%*#P;1I -MUH;0J>%MADW0+B]U\#`@%>;^&G"5#@KK1;9I>NCX2M9D2++.U:4&C -M0&"[*$ZC^864EE)IM=/`82`+&,T&L:I[6>(QY]H@4DAD\`&]QL:20JN]#.V& -M-N4H0D3*Y%$SMZ"#2-).9["-E;\\ZB]GQL6<"-&+5>UNW(`UI8C#]PY@VT-39O>;@8Z04'Z.4-*` -MO[S+6%;2[Y?F,>U+Q0`D=68BPU,T`*"%8I1MH?8V0,8JV&/3KNIC%6%6*,E2 -ML4U1E53)%D51`1800A\FHF7=T,I[.$.?F.^9F)BF>&P3Q]UG0^>ZO1V=O@FO1(]>)2"B,7FJCVI)D&DX!@8K1GTT?S=?"#,'2I;= -M:7@E9FCK.O49EZGL??W7:K;NMBQ62`EC8+:6QN@):!MIQO(:7CMKQK\9^0?2 -MA&'BO:\7-S'BYL4/+KXWX%UZO;E7.=W.X=EV9S?V8\1O5AX`DTQ_Z)/]*!S= -ML^GJ^3DB+;""8R/LZ\/ZP(H?);D#U)&T=\4VA>.'![+J`>6Y$R3CA1\>J01B -MD1YR#&Y$[QN^MB\7OQ(:,C&%M"2FT,1'F,9BTJ\SCI/*5IEB -M@WIZ"@V3AG#E*AFG:GZ_];OX#-AW;WJ%\6M3GC_?0Y>S -MTZ7.0MJRL726L60V,"1*B%YNE%T$BXD*2#E=O2?V1.C@.<:9GF6[6:NP6(;HB4J#!C"1L8STU$LE5_V>Y!H-,C`PD2UY-.W-01@V$ -MJ6NL-Y>^V-K&L;:C%X\=R[OSW>+EUX:A%!1D1E"$ECE8&5%LC(E&20;8FB)@ -MW;$HTHQ1@162P>6V1$:C4'C;K+F3,=9!D@H-(@;^^SK]@]JP\,-W!-L&.P#9 -M*UB#^+13Y_<3,S^RS+!.[(C\7;U>_/?#]IAP'V,G\3[S,XG$2^N5#X=S@EO$C&&FC>2%C.\$),&*2-)^>!!(C2\XC"9945P:34D<>2&$ -MDH`\KT_)J3#'*`L!GHZD-$P,I8D)@/$JT1M0('W^[K@I+)"$XZ\6L\[C.-@H -M/N&[#76PWRZX5UMRFD@2^-]$<-V<+>#QPO;[%]5UAK()RE)(:><1Z-&0Q -MY*\'EGLZ3D2[Y&6T]'#MBAI!ZAJ-RT2@&.KAZ+ZSG#/BZ#F[A0TO!O,RG3&A -M+0@8@/9G9++U3&86DN;'"9CW'A#-L>I";S*YI:N%F#*XP&@%KXH,Z-8P`QN% -M37!I*I(=$N$KU!8G]I350B]"'D680Q8IB[/=,U2)IF:9YY8+SATG'=9VZ+NWR\YRU< -MIB,A7E-X\2EQ\.WG->E>+U6(YN+N6L+@"R*C$48JB(8Q=XF4D"25>_.-7G77 -MIO/;;C$9$,"$H5,55UHW2&;(XJ841"%[[F7I>><)H90\[L#>E>,-47L:+24H -ME51HA2J*(F?K>M>3#=]EW/8YZ>J88:4D9EQV?L:?;30]G*=$3Q:1 -M#%'*2`R,(5)'NX\EAL;"FVL4%Y?28%54>`TB:<,MU&V9_S_B3WMXGP<0F^\[ -MPK4!'8B%I(9VCA9!NCFL*A`0;"Z/LE%.S`-,=8J9 -M0790T-4-!H'A,&H2IGP8LJJAC;#>]"S$S`H$TA>F4"4,?YK+Z6=^NI0TB@3< -MY@D22)PG>DX]!:/@MV`:4!!6"(` -ML%,AJM%.V_LW6Z?#K+MTIEQM'YK+GXO361@F:K]]_2L/SLO8'/[_EZ+`:Z+* -MJ-%6:D-R.OS_+C#RH4/&K/CL\7Z+%R?D[N'9.P'%5,Y&8];0^ZR\5OHG)S9; -M#A-2<6<,Q/]$0]?01IC336-$&C+GO:_0[0VZB4VA)ID6%&([V9FRC]VN+,Z-V:WDA3*5&N2R\YB+88_1)AS<80? -M5P?<^&\,P8^%ER$(XS#)6$$DH+[_8Y=\,-);M[DD'$V.T&K&#(-Q6$L;'7;' -M$TW+*F!&1U\)1NC3')"8.J16H;&26MM\IR-S@,7FY;\4)HWANQC:*.%6R6GA -M=$"<8<3+5E,G_ET/Q?X1"^,6;CQP`(<;:P]"`_Y?$,;">QQUN2MD-`Q=]VY@ -M##/E==JO^14/>/Y^[K&XW*2RB2CK>!VI! -MUB_@$9SJF^;J(Q#OU6$C;/C4$6DS+L\8VT"V.>6B)0`C8B*"4--3*=]RA+B$ -MA?$$F!&,5GM\44@([R2KRJ=W(S[V\\+QP=VZY=NG9S=0B9(XX;+YQ?S -M/F_$#[+N]SGR[7U#@S)9#B-5F:A(S6,N&[$M\C -MU(;N;Q*#$-DS(L9Z/]AEU#;@Z;1\=HL/"QE\A-,Y)B"?:8Z#E#U?/^O96W70 -M^MX;N;!QW58ILALHK)J*)=8/PVW=#%&#ZU;L:L\?1+57Q*(>8E,H$NY`W?2G6]]>LSR -M-G)(ZXXR?%BA2( -MPMD*%2A:J=(!R5)).GSWR-OP6#L9]O9=WV%/XQU"YHUL-BCW^V\`S,1",`^S -M?W/K7-JKA:T;U>I1H9ZE;=N#)!HC"31_M,X><9[,*O.P^8]?Q^'7U3CKSH*` -M:@70"6QFI'&.$%D&Z?V4#UZ(DR!E)RA2J:+5"+:I0)=P,8Q`4!48JXUC;^#* -M9A&AUP8TVBLE%D"%:)(QDD*\96\LBQ-J"&X3&LN,:OU&$5D-,5'2314-UH6,:5-A&! -M6@"L05H58C36-*LQB(Q-HS(LR1AIY@E&800VHX]LM0,:6,9K>:33V78#E0FXH.R^Y1\:!]_HJ3^$ -M/">1KT.K,P+]=Y'-RD,^:IV.Z>P#KU!DA$#(9E-&U/G8N(KIQ/#%5=659S4H -MNQ1CC@<1^7SF+,CKMEE<]]N222\M04I="X;%'^/KJZ2/Q/3UJS1T4U4J;S:K -M03;R25B$U+0HW(QA?C:T80A]NQ"]$5Q:WO6VYHOK_#73R3+!Q-X+4J5.(KH:%D%D)AAN$)EW^V"^2`?@,,U1Q!C4A+48F*R"6U -M9$R"&N^_WE&A.2OKS9ZX@7%%=ZQZHCULHBTZI]!A)/![NN5R'K,2HE@*$',^ -M.H''D,[U^+4Y"_7B82B0FZU@%0#:3JHEB<3?M$.-K[.^5-KI&>P^3U>"9F0O -MS2%3/NW=42E0/G?H:GIOV<[_<8?X3]'NM2M.LS0:U0G"CC;J"H=E0EHD@6)5 -M-X49V!A^!4J8_`LN/F&=YLU>O@#R@H\!G!F%7G79<*,:N:NM$8 -MB)&`@L!@BB^NS#!,%!9?IW``C()(G$A02JB\[`0*B8&/$%AXN)N6UV]NUR-& -M]MMRO3Q;>[WWM[5SS<\.]+TDEYW>VWBC:Y7C4$4'+QFK%-9(9L#,9((X,$@> -MPQ_3^YSE&;L!#>UB`/UL`#YG0Y&P+KX6H@TVICVS'7^9ITS1":P;RNGA3(6C(VG!D -M(R+R_G]:Q)/871[YTKT'PV3)8.-+OYX^Y:8N&HT22"@N+E4YC-QX=FHJENQ2CK./`T7-S:LWIHL>M9<*YP<5-K& -MV-YD;`--(C`@P>,=NGC,>;&.YF"Y4P&4R%@-+&CDVQ"TP8T-Z)I&M:6<7JFM -M['OM;IMZ7XX`WLQM:+!L3;;7J:AXC -M-G69(VI+*5R.(ML@16LCC%8R*O9E9D)(8XAIA7&E"-A`;542%S>(0NK5*VQ\ -M9'O@C<;#)N:(QK!I0#&8X-IE2=A&VQI&I-#;3D"-IC(3+:22-%I)(@KKB8QA -M*0O1!A18;&T1-DA1<+H*T,:>3T$Q8T\!4A-X)L2Q)*\]1/7KI!R+!.L(TZX4:C`]GCYK-M"#?&]TPJFR'!24#4>*5!4RWU817/B"LR\D9 -M.2J58>T5D$PY;O5EQH/W!(R6=@X6'/^-JUH^G^D_0?!M@#"$Q#3\Q-T(R[P/ -M<:W##Q?<>NZRZK]H0$P*5 -M`P5N@AY&KG,38UBA.++H3Y%!4609!,D?03RN\T>$CIQ>:B-HK]7PE!?`]%#S -M$?B_"K_[#\<0Q0#OX.S@AW$-*/`S"'_$3GX\A`_%K*WJ'=SCOD4G:Q3G(?D_ -MA0\#/ZHG)^!2=CMJ1DC]Q3Q"@TI\HVQNAUN7K&(/>*2J:A!/(R)'&>&H3/%* -MZJ5#Z$_A'IHGK)Q/;TH;?![.!Q4] -M+Q/D+?/F3T=`^;C^*'[H!N9Y2;.=O$R3C9=!,[*IJ"D(>'4/2Q'?YP@#.=?( -M+SB',*ISU!P0<\78\N$-$E/.91QS`V=7:5CQK49!R2Y<6%#(`9T`M$Q:E)D576X@-,$A-8:\538 -MP_3^ZRZ,!E$J=,44F+A](EL%Z&0U$:[F_VLZF7PG0/1Q2HUX$]/52V)[E@T. -M(^[U%C>4@H-JJ*C"Z6G13N<@J#!10[P];P-YY">@9#Z -M-A[5/UWRV>?^_H-F_EY0USH@[RIZ"!)[N.J`77.N*HJ0(1"36*M@VP)EE=J^ -MNJ+5&@19"%A<&0$8*:7(&&9,WI%%)LJD4923,T%`%(LA#0RHH,3>P^O80,C_ -MR[%[E<,-SYR),*DPBG&E!_K2[:BV_%MKVKQ3X]M5RI^:=HJVM"B(>2@YD;9= -M%?QI.-B:)+J5H*`W$'Q71TO,SU,-VG%:/#\I=OL_)$S7"./GZ'/(A?#953A) -M"A\-J,TNR77ZM6?Y6?$89(8-D@P.A.^R*+!2"D62/8J$/1N$6';0U2'#PZIE -M,BP/#VA.1(*22\&:9;\9$Q523-(`QH-V_Y>B4SE,D(D%"(K!.N(':0^F>3&CZ -M]G[Q>U*V.D%E\^N54UZJ_PWTJ^N[/@Y0^_J&$=)\N95Y>^%&FS4,Q+#N' -MQ;#@.MFK9,($Y>GAOP+EZ\4^=QU'@PJ=[#G3-L;WS/V$,:,:#$%UM@E"!WGV -M*9LS0F6V[A<46144F>1@LR#AA&:R*9`K?&E`,8!/ -M4<3&`^A#L*P@5DDXSU7,W=YY#QJIUIE8KVJS7H7(@SUF&UQED7"A+A98G=YC:LC,!"A"0>_ -MHT;)^^204\.X;1RS$>&.;=64,FM6[AX#NXSN8P/%5.3#S3)3,;J79/$YJS9_ -MB?\:?E/@9UTIR,*IY!2Z0:&D%,795%3UR8DMS4K+H1+UGJ9'JKGQ*, -M.;"VC.I.PX3=$I4KCUV[M@&D-IGUC/LRAAO$:DT(1.RANAJ0WS?)%4VXB&@` -M<#`NUKH?"6$YJK/\[9L+-%M,-`C/[*G<20?RX5%X%:76<=0T9."%(IJR&5$J<*H!9! -M0I@$I,LQ+O;14BA3"GB=_X\]R'],:OMB1%N]G23C0+,/0,%XBB+\#K#,, -MDBR!B9\1)NY<=.XJH)S]E\W[BISL1<44/,W-PE*6;'L!R.R`N;#X!B%YH'L* -M'L;>'7-K/$:N?+U5KQZMC'/59CTPQFF=K4:?&&F'H&;L6[4?2]QP)#/!^!RL -M1MB[]A=BH8]W9F5XP+>4]I(UQ3"UB8UGD-DR+<`V$V@NBI]]7,%R"-'E)W#M -M+)W--3XC>F*+%U]_4;/P._(=BQ1_)K(,F=&1Y-U3DLR0H;>"B]Q>J1%` -MXF!:O\83'&APB(2#ENLZYQ&PFU=UVNE<;\/?/\VKWA0&"$.\AZZ.)#&JP"]" -MQ643=QU\'.L(EW+^UI-_A]B#UWR9Q=D]Q]?H>$ND7.APT+0#5SA$EH+]S^%7 -M>^%4#))RLG\M"QU?Y+]Y1N?**QDFT+Q1J_45HVYXY:N7T*\;E-RH\AWS.U&VC(@;X7)*"PDPE+MHI58,-64EI*( -MH)@:D1AK-D\?TI*%.4)A(3\5)%G!$;:-=MFKD1A-%JIL71*0WSGVZ;^L4'4_ -M&:TA7_T?S.7_-8?!VTJNKDEJQ8TZD@4A#$P/HDXD.3L43,$3BH -M>3]/3A!^7.!Q%).:SO][G6(3'A4@[*#4V?_-'0%V[K.*",8799W_7)*#RYTA -M;9HLICFA54%(RB*41Y",X>/KB<_V>86Q&+$/. -ML7Q&1L9Y\&Y/WGMXCJ;,)(M**"HR0]XZIR)_3>SZ0=V3LH:/%PFNNW*X,HX6-E9V(0JTDNK=O7\">U>J@UK,/MM(@.DAAM85_H -MNU\BC:S^&GK_G.F0YIJAM[6EA;.QSDP6'R)JR:3;?>@23_;GR0Y`OZK]^[>P -MM$9V-5L?NNAKEV*!*:UJXQ=H:WU-@?;^%TG'K:Y/J37SM;`C;(*P$`A_*OQL -M33C[:OW_>KS*X,DD<$60SH1+:44*1-OSW'Q&*_M/O>=1R.XWJ)E+)1%G/ -M;BO$9S$0AX'$[P.J0CFX%?+26CUI&Q_)_HU;5@?>*&V9E;\\VX-ARN+<\V&! -MD0T4`/5^]G8?[<^^G:N,(-)D-X>O%S`1Y!+1,[5?=JSLJ]=?T -M7V?O&SW0/?_K->KZD/2>1^/TFU]&IAZ+U"]P]H]Q*=2U=#>F2^CK -MR5XHY>.&/!N,?E^W96I7!N$B/1IPJD#!U)A7&.D$1UI%ML@JRF6EH+)55'PX -M63`I6`O.KKZ)[>X$\AZ;*\9B>5R>J/J7!$EP-P&@46@JAU.6YQAJ$B%>CJ3^'EF(T25*"^C,^UOJP%=A[ -M$,W)&%5*+/7#$^ERNZH_B?@XL6?9)ERS%-BBJ#%!7W_#8$:"2"1M%F!.E-D%L:UDIS/9^6AD^%2-66IJIL&D[9+ -M0:MY+V6OZ9AULW[CMS%67[;.L64F,J+8\5!XI]UBU`PF:?[.[YOT76LZW6.* -MG7XSOW5U,OCZQL)CE&9)HD%-DY&0KRV[.(%8HB7VD,TU0?:-.RL72Q.2C"=3 -MD(B10^1GM)PFL&,-4`T2#T5%-3G363)XB'XS<1+1P4=:14-!2\IDW[(4?7I,NS5 -MU#[U[?ET;&HO\GP\[]ED4AZ80I:0J;AY;C>9+70:'6BI,,9&&9"-L]$@/TZH -M5C8Y(FFA[.4@R,BV5@W4*P",N2M5B),2HTX-8S+$_DP"LJ8$<>(9&F$FE88U -M'E4I71UIE:K"S"0J;;ATKDT7.\73+X7=YUZO(ZF[H5EL1"1Z<+(1N$8XXD(D -M@S'!MY*US9R[;;VUK7%\MKZ\^L'7#O<-=^>E-;`O6)^0]+1A&H%B)E;"(CEP -MJ0?)GA`%T20P,B]Z)YPYN;4VFB> -M5ZIK0V3CJMVNY\0X?(88M-CX)E:577PL69:07P1)+0-0&"R*(BBQP=G\+`8,2.L^2[/!"%[LK@*`4PZ\.;?U?=5QV0PA5`51 -MYC"I!D:SZ2EM"F/`UH6!AM/+KEZT7CKKNVI6U=7;[_[%G!A<$"AB"`I)!9*R -MXM+9DT1JM>G'G!M\>Z>=:NNC(#X&@'Z-C9F*LC4RNK5B;!C;EO% -MF+$PDH48)/ESZ*@R\FJ&,8*(B"@Q[U1:8@+#.BF=Z_,7A;:2IOW5/49:G?C1 -MF9&C8P?1L+12V49(-0H1/&:7##%PJZ"F#-S4Q1@+7S(%U%%BBB*V;DLSQ]!I -M@;I9E35+,DI&6E,YUW6GVO?7OO7I.;L7D]+ -MRI/.G=B**Q!MW6YS7.5S72NW;O'GCNG`H713+8,FZM.SCS;;O&LKTQ%W8L(L -MBP4%4#'#=CD!TS*%PK555I2JJ,*&)B;NNN^TZ_`;SO6G#==W2)2-4L46&3"D -M;AMVW1B5%Y*I1->.;X1*-1C,BC;5LK&K%_5'OON?['[;R\^'208'H'<,9$`T -MLJ*5FF4I&"? -MY*HT54D,1]"_'733E3=75S#B^/LQ+7:=0&-.H=!)I(N7F##B'0M)=2TM*33W -MVPJ$%=OB[5S+MA'^1=@Y4:Q&)NSFNJD,>^)$#K,N01S.J@X>7?.,3%[W$)`D -MOK#5,6K@9P@:'OD!A+2SCJ8_+W#SF[Z!)<0-MEW8AR5%CHW:2T%$/*LW-)WI -MCE7=7F=1#N6;P4:BF"HQ%V:A.W0;PD;&]8G4J0@5=)J -M-L\*(Q%X;59N;K=WAN,MRNN6J7-QX9H,GF$/%/`-W6UW[*&*1T6T=%H*HH%( -M!=C5R`7OU_79HQ^\L`/]9_2)'C?H]_^G>[T0W@WCP,S,=7X;3#A8<*3Y$782W%XK0X;E;;S05]R -M.E@NM`);7TH9+!HSO^5H'S>/>N`FXVM4F+IZ#H;AV,RC)KGHD@/>-PQ`XLUV5BL.]Q#>N09J&H;=S2YT6?0(PTPY-;(;MN]4,V7=%,V;DFY(<3#TE9R8_6ZIK&/*)NT -ME'H<-8FPKB?;%H$:RZA)+K'D,&/133U",U -M+1UT'#0./#:;L05/6T*4NUMF#;RZNG]-M+JQ4B!JS;A>PADSP6NJ -MNB-Y9IK5MVR9$L#Y*9>'7UHR=9[R'S:?IZ5#XZ'190'[]@:I[).1#G='.J-! -MTW\)?C"5(`>L/3>7Z7+"'F-M[<'Q^/_.BP7NV:6)O)A"#HR+5@(O)+S$*L4O -MWV;V#>:8G$3W8XMJM.C48TMFMG&D1@H+(1AZ!XRL;1GKTHB#A8MG6B:MV"0^ -M`'OS&1I'$XHT.@%:&T(;26R3&O3O]"V)MSFY'2J(;1`62TI(*%)%E,1,-*DB -MQJC(FHS_-^W5_/Y'";3TQ1`]W=$DW$TUPGC._F.)F1*LQ\5^S<@#H'C.,0D[ -M9?X0R -M1(0?:QB'_G]8AH:4'*JI%B=,P*#T"KJ?.4,))J5?T?Z>1T%Z>3D]TQOZ[9ZO -M?.H^6WH-Q?L"YA6+5CY2'9;T5[`G'F+;DCPMQ+4[B+X,3+NI,('MH;GCK[V0 -M=_OM99'/-S1:K@++)]2J?\CTA^;/5=EMSC_Z6;]2+#B:$!$(_,59<2JJ1&JD -M0ZXT2-UJ:RQELA]#K,/5C:-:6K,I,',-:)K,QQ.A@9HS$:CABP>:0:=)II"+-9$.1*#B$BH>+ -M,ZEY+P$[V-15JBGL:4&I",M=U8HU90'B#3V+"4R;OD"(#S3GKG-Z9GN$A06R -M+X54?:LI\=-]^-C=NE, -MXN["I!PZSB5#&/%E:JE#TC;A_@VS'0F"_8F)3#A)2+9PCM6K'?M3X(KM+/1G -MBJD6G,\L"]W",KKD?I*W.+0"1&N<9;]=.W7)1ZUILH+)Z(9M0SN6[4T9E27P -M"0NS"CC4M,)CJ_'?/:;&PO)+;_K<_Q.8YY\-ENXV$1@V$,="G>DFPP$QTULU -M99QBKVDT.&I$88>F;7ZU5G(E0RL#Q96#P_#8>G#@LB86G7F),N9 -M+FS&^.JQAU[0-L7[(XS49,L;5:@SI"!PS3>U(,@K%3N5!].[[Z0[$,:LK+%W -MVEHOMZ:*FO)2.Q75T3*Z,L%24(IU]*S0S1R[&S!F.$DZ-1U:?&PYN#U$V.0& -M-LQUKOCER[:3;6CB;6YOR9FKHD"8X;<`<0Y#0ER^B&$#RLY9#=QPN"P!(!!A0$,8VP\79A-,7#EEA(=I5A@$(DT+,AC0T -MU4NK2Z$04T+NP5KFW8AI/3,02<\,C1)U%M,+P47N@UB2?!YI-DY@)F6,B\Z97O3!P995C#!Y*3!&6#O26"]S+"X\ -M90[$@@3I3DOH"'"AX&\>.KVOXJ^&RK/PALN0!R82\.P1P@UF -M4PK07:8D0YRP#AX;.7IY;3L#20=ECAZ`Z@/AQDV#BST4<*'IWN."H#+.+*"@ -M-E/B'97&"I,T7P=*X-AV!HGF*D=5)(Z!I*+W=/`B/2*+^3/=VT9NX:3EH+99#;9A[HF2P+ -M,ECV41"T,1@B@](3DB#:"?*KI08(]=,&PR8<+C<1!CC2'#KMNY#WNB? -M7_?2V8Q?@PD.\._A>+\,+\::P[',3=5OMGXX$@Z69<46PK -M*:^O'%#S>_.DT@R&8J#GI\Z53D\Z@,8(I@VN1-S3>:1HNUFRS6#$$$'T\RVA`]Y&^-IIV4;'DJQ] -M$,[0<];9B,PW#B3R9P$)CMD9C!EP;YW$/1:<>6F()&Y4103<5IKFKTC>1`\U -M_L!SU95TXWF0%AO(;,'5YU3/+A -MN/,+%R7Z`?N[-O&FH<6)+U8H4'(.^NS6@@?L'>$X>BU^DTOS<[,W\$W -M=2Q@.9Q]+"]%T4R:FK0!O4G!#M%@X\$-Q!48P3&=&\9M88Q6BB\$'""F\I3" -M#6):;.!'W5QB+F[1S+%PY%Q4)F.CK%X5Q-7UEIR'(1DW#V2B@YFQ/ZZ_X1]. -MW(\>+6'JX"L#';MC>O;7`?GM.SV&!Z:`(#D`=NOR15AH$8]L('?M:FXUP-YQWT>MY@#%^FH"T,8C2D::&UQBFQW>>H.Q!Q -MWY((C]ZU.)R]/2^UAEA/CPU_HX80=ESPR5U8'2LU'.&P[1;)^HH>FY&'CZ1^ -MCFG5F7)OY=JA++K@AAW;R5.3;9-6"PI.L;OM[5==@;#1F-0X`^WKD!JH`9L; -M<$&!Q:VK,=D*^OV.HZ6VDF;<2(X?#\WWK$R[UN`(X2D47=T[(PX2,8/ -MQHBC1%8*M#[8VI3*UO+E'G>:]=>GFRKH,`!$3&B2I,3-+KMZ\\KUZ\13WPRR -M4'J]U<'>WQWQ?2.W85/P\]G7@2'S(.WBZJ"=-V7>_=^Q?UO^E#ZSU -M/6_L\CZO!-2/Q)KH]NM!A'^,!O[3;6>)]9OOI"JN.H@.6,,87YC]\O#888@*Q -M>0>E$1%$^/Q5[/Z%$L\R0^/Y(^KUI@P?8=PVRL[OJE:QV1L8TZJ6F#Q0M99* -M;)BP:PN"M0.#B:J`:,-7#^,3)$,/?$=(=^ -M(`R1"2B.I/9=(OZ?*O]$4R@X$C#2OU8$N1`%&+[>)^Z'GO[J7S$#HHC[*'-= -M=0=]/[IA`_KAU'U-X_A=U\/`^K7N9S.YZ2W^<#Z,NB!^6<''GIL8$CDBXX'/ -MXZ+Y_ZB+_\ET+IZ;O;6//;M0?HB'_OO*>4@\U$\I,D7Y4$[3O=?\VYY:+R,' -MVG54F_Q#TGG:#KXGIX)]3V_RK+M/XTF.('4:]9Y"6AK"`'CROVJ@30E,<0.4 -M('M7C=.#Z)UIL_$8!^>\U(!H07V&[T;7Y_*:=R=Y#P(IZ>?JC461H%*HH.;]!4WHCG2$QIZ*??G>P3YD/2']$. -MWUE'+_^:`T(!\>'-0\"!GSF(G_F"_$ET\;'JX;6+[2;UO7JK!H0^U/%9XAW,3U?P?BT'P>\H'PA%>@GJ(_?@_-C^C?Z_GKZ?%P/53NH=/$V -M2&[S[,!'?[N_[BGK-2/O!_MMX3#_-7#;5E73?X0D,D';0?4L*3X,"KJ'C8)I -M_QH[B!U4Z.'Z8/Q\VCHIH]]0["'\H'JX]/N?+=)P?H\!YF?J@ZG-T??CP4.` -M^M3T\V;T\R#Q&HA_E@A=\/M=*X@2)=*/\YQT<8F]+2;6+F1?4SB;$RJM::$/ -M.(C]'E7XJ8^@HE?,U(4U&8;5D%@LJ6Y6"N1VO/.-Z;E&CWD-QO:?VZ%X= -M7T@W49_!SA2:-[PUITG[IFRP<>*.C>L"9O3HOF/6'%'-I+?? -M@AE%-(,G3N-6N"/9)`JRRK/4D6"`0(F2^(//SBQ5[@NE44BZ,QL^,BYD>^0) -M!Y4@-?1M\03)HI4=V)]O3X#MQ4Q43<,X-8:3_;0CGWA/?UXK9>U\AFP1[P,J -MGRDZB=(5P#-+%WO3RUA>,3')#C!X=CEW,EBJPCVB#==1SSC6ZPRY#ET1M,SX -MR(,O#1`-5J)LC"*-08Q]4C:U)S8M9G/1ZKF&\;C".4[; -MWP\NB>-UC>EU)W<@)*1I,D-*69FCEUO3F^=>_+N='/.\B]^N>+I@U&^9790A -ML/7>O&73:I5\.T[I,5S=Z=L:)$?'MU$P-*QAGI>>!1E5%5!X)2!3%2BIH[NX -MC=EZ6=N[NE>=<+N\>:@A@VQA(E'PR$LSC%F)D;(W'JQ@V0L*I%(R-QXZ-T@1 -MA)!IEF5$9IS9FU;SD'+LUQI1K9#.9S`(+`X@M/<5N:437%&QF+:*8#&FA*.$ -M@;Y@V)QK08YA$0]Y#N7#EB&02$)$@DVE($$4[&-,!)E_?X!KPYC):8\]>0B^ -MX?R//;9N,="(NK-60UOW8.`S)X,4U,^A.1EY$-VE20Y>(:< -M>>@GX9\OY]&A`754E"`FZ@_P/FO0^\_-Q"'X+-4G]E@%(H$)`N/!6B7$D?]L -M)8TGB.80$K2@[?;?6QQD1J.^,YBH75\B+Y>(>EB^%G!0<1"^/PK!28^@K6W' -MWK%1+Z.JRF?S&>8+RJ&]*2T%*8,932>LV&&22!@1"2$(PIFRMM#`U/#H9+WD -M%WW"5X>*,I@`*$6`;6!\MG4FAOJX:KX5'\-JZ/-\UPK*1'&\ZM@1HR$T)';G -MV#E`!.6:!115Y=9I3+9E$4(PYUV->SL)`[B&F7]6B'4W@UNF![=V91*P3=U6 -M8$V:W<7NK-T`+YN5T7<,V]?MU4T>]DUKNO!V_]%SF(S@M9B';+`.8C#!Y^Y" -M_]"M6`&7$N2(1A,@[&[B`\,IE$A[90P13RRI\,X2;K(ZW)9(/#6 -MG]F3ZU;`VVA13HT*,&(WF5/&"/J0,,5S=FW,=Z8#MKRZ1KE7.'.K#!^\W&-E -M,I()BH6-["H6HBE.X,E40]@P*@@NS!N#DV4"BD_;_<)W8$Z%]$"A9%?>$\\+ -M*1,\%J.IV7Q8*D)]72@FL-)JBK5R(\,X6`W$%"O=B2X[/7R^>GD$V0*C?TRI -MTQW]9=W81):Z"GB4;3EJNP2ID\@,+L$#P[:BUL_9&3W'8@0._3^P\-?Q\-A_XX'O]_P:UK -M@;//`][&`/>6O2RCR-,.QSQ18;RH@YX/$P+.0C:D2B,8%WW%F&`J13.%:\5G;#6T$@7AW(?2L'#27^6()9-=7OD"2%4!Y -M4H1IK;AB,Q(:C3C>F>BY:HH,%F`G$)MZ:1 -M*HTDRO3C6FR]\7:M-1#U1"O;L0$\B;<0G!B&6R+PQ;C3/3-,`MR -M3RUP]"KX:S6?";!9G2,UWF\->'][A$#*Q=T6)8&Q<%(V!:JHE7*0`E+/L_Q8& -MDWM>B*5L40E2&J6R7GGK"K8\'H*UM/Y.`R[X'[?#W];ZJ&E^-5 -MG58!W+>^M!F9FJCD.F&!?;UG>/4J_M?>L[=Q=TYI]$':M.S_J/AG`QAKTT^9_/LGU-;5W>90O^)HD]_&\:A8DM0U5-%I`C:I;!PGS&C0F`;)(8D -MVS)!$9[-@KR^,^AGI0`[T,7+!"H!`@,$6`A(P7NV&B=!'Q$:4ZKG2K$154H4 -MRXAALIJ+.]]U]'<)R.K(*!N;D.XU)@2DYDJ,);"D%B\[),9W84A_TL,F3%4" -M2`0@*5$>LB)F>3T=')Q#VY(23-`OB?A-(+Q@J;4P@QMG)G''XAD`D4K-N4M0HRP>QU5"AX2'U@@KV$1`P@/E(B!1I!3E59FZM:J!]C+K -M1P4#4L[6U:V&C#WLV+U)1\_QQXD[L[:S>=C'88=H0M.*N?YTO3F*BS_DZC4[YND-K#B88GUN"@BBGLVD -M,TA2#UZGX=E+YFN)Y?2F7K//^=OS:5[/T)+G.,)$#F0FA1*#J6+14X-L4Y=F -M5D,$(R.=?+;6HSW/T0>1IMQLDAF2+L,4#,+2N'&S%@^/60HJB, -M%BO-G$8&46?Z_QMV\FW<:32MXVJEM'12E2S!9:I;.7)IN$I3SJZ05=W;0\>, -M(4E%+0U0W=/(E21E[;*B_2+[&H1Y]'QM?96S"":F$%MO%*M":Z>@GA`DL?Q]!ICGCP9K%LD/,X^?A93`*G$5L;L_;S -M"&G+H1:D?C(!'Y%`F;*?D&!9!%V08A'%T[FC01;B409C*@55%7%@I+-I,#D> -MDL;"<#Y`['V6G@]]^C=>+VYY4WE#QSG9T',%0BD%,0Z67'7KY8TH`E'R$"$D -M]NV&QZ^QAWN.J$G$Q*)`1Y4][Q;%@@B]N%(R@3B%212$Y_)U*FA13]]6E]Z" -M2LJE,/9^Z^WOZ],G]A0YKFI3"9(!G$4J!K8A/T\WKAOMW83K?%E$<%\:R+X?5K_MS]'^A]S>)G -M_&TOV?7?Q.@1CW#\+AV-.C\.Z)7S0A$[?UK"$:4+%5@4,@:`&+#C, -MGEZ(8M?^@L/[,AAF]($,X@?DB]#V_$V#;_;I?$P/:PVALHPQ/$/S8J_L`Y)F -M]:QJ,B>!6%P4AWMD!A!/BUC`!W[_I,1X=R;`ZF0,"SWB_ZJCGLJJ"P<<\.FL=*RN]S!<5\,0ZK(B`#Z"C3 -MU3RI^U1_]?PL$L?ZZ32ZY5.<%BHQ062A^:+[5+M)3W4'UH7!CF*/-QKTG9Y+ -MG=L6.P5X%E^E:[Z&6;%/?QK)V&\!_?(6O+,D(698YKSO4YF*]Z7"W< -M5=`62&^2@#\U4)?`:(B)^7W/_;G,&?$*Q^Q_VW:HJ,&*LQ/UMOGC(C;)HTYC -MQBGPNUHV78^[YD1T^CX:Q9.)RS^>D\?VM>9[U!_,?TV>)YO]SAQ3?])H`7NJRQ`[CNRHQB_R[^LR]789>' -MQSE$VI]0EJ:@\2INQ@L^60\A_M/COGLWT%@[ -MGAJ.>A[#KZ$['Q=/91-!(.C"0=7%D;`E0J;[4I6`@$]&U.JQ=>.S+=?6KM;/ -M^&#G/=SK!BCC^$HLY\CTNIJ@GM;OU-QDR+^RI.>N75Z%HA-N;$)-28@KB#R(TPF -M*E0)((0C<+=>?[&;06@Y*T;\B#HYJ^^B&3C.2-\N$R9A2F:I\5D`6`'O_BSF -M(MZ)[\\OG3N4S\F:?7:`9'KF8B#8$S&*+(A%(`89<4*&T*0D0NI^5D>5"')0 -M':15@'OZE11!CVB&@#CB944Y[[-!:"`7110ZG[GS?#_*SPS2QUE9JLA;Y?4[ -M)(BS[*Q/[B=JWBUX\JF^*E$,ZJ"THFI8HVQ+N,JQ9=\[&[,$.'L_^5377%Y! -M8`]=$_M>Y9SKPWWF@2+?B1(G$$U*7-SX4%KDFSZCB#GNNY/9Z1K?,36:6F[6FO,UOD,5D.$![54QFJI8"]![RHOU(#`]E)N7`/TA&X=T20(.B&3"+% -M-6V824PT9DADEN&!:0ME&,H*9_C/#TN)&WER$;$N:F\-=H])8-D_@!`N/T?P -MH#JM](?S>&_X/I,FQ)?0!8,.0ZH(!V46#YGX#U620CSQQ>+PVMD&]FTW'$'" -MQ4C@\BK>Y^+J8-VQM#>2#9(Y!F-M6^FX.F<,AD:9(8PKX6%D$WVLTZ^#7.O+ -M623:6CD)-4W>-O&+X^U+(\C*X]W69A!NS:1GCV6L>S-;9;)W$.K&S&(K(,C1 -M(W&=9-@U(;["P'D!B1>215.E_8^CW-K\+!D4 -M;WL9*ML(F\89K(6#T],N;9,CO"RW(:+2FZNRU!1W8YMF`F2IZ!RWMG?<;`'>K -MKI"5+IP03"%#*Q1G.Y1H;6RJMG"6H>8>UC3_@('Z#$`**(,OI,B8O0QQ#Z-A -MH+(GKV@&)L8'_P_0H]8]Y_$?G/L?@^KU+DH3M"P#$$,08;DZP:6G+S^DO -M.1]G8=QY/'2_(F_FB!$"#+93OGN@W4(3$!6\02T#6<:4^TV>.^&LU+>;Z_[Z -M>K"[?3QA\5.GLH(`*1\IQ,AEUA9Q_#YC6>3P]VBY;R)TS/+W\3[2MA>0PD2&O5IO:KRY#3G=PK0U1ZDIFT -M\:7#Z&_;I=*>BK8SQFT_6?YKM\F;7.<\*@)I\H*I'NBF9ZMW(/)JB)1<]N?I -MVV]_\[[LY.LS?8F3J/VX4>_,]TAZ+<(.M:-T-$]S]HZO\`@"6833]!)$'6H# -MW"CFMX\AW[Q^R9,3P&+?4"LVOU9#SOHP=&X8K?OK]#Z_2DX#U<#G.;[+S+_!> -M)2I_'1KP'ZU72]!69WJX!U7@V;'M]$H,NHG1^M>K("^$/XF=W-T -M.U?Y_HEY[Q&\)M&3=GB&%GRI8;,E02"5(#!<\X\-5_>S>QN -MMXJC`Y;E0Z.@X3O$&2"%"00004)0@A1:\$%='TC%H6S':_&ZV+>^#OU3DL+5 -M8)L9T$T2DEDF_YD^=Q/A'-+;.&9S(C'O(TA/.'6MK]VF20&Y*NXR??MQE]=* -M%^NCXDFV'G?/UW9L[J=%8:+_G&R)*/^C=V"1?.*P(")O@A$+ZV0+W'NX?MK3 -M9<-IB\)D6.D21T=JH?+W6F4_V_;Z)US%[?TOK;K,/SKJLH^;'TYR2?;1`BK< -M>M=Z;=TT#&;EOWHP0-G<>N]7S:/@Q#T\%#UL0Z7SWL^J-L9_]%TU^EH@(`,O -MM_#0&>[RRF>_*PE,# -MJ#F6WOTR&H&:CB4EUKF:;/OU&SP;R!OVZ#H_*;'QH,V:LP?^C/P?SQ5]\EX? -M41S\*C^3+D5XKBC"E^50&"GP59R*+N,GTB[&'31,J(R(DDBCND<^9D"G%?95 -MQ@#:(-)1B'P40OR\"&-(R1(;2!M*C"--CD05MH)U!!DRA`JHP,//70G[E%1R -M:@S-"DI`S#!^]OY"BCSC=V2Y-NDF[O//T7U=Z`X=')(X*$D(0(,>B@&S2$V" -M3:#8V+8T:L;:>N,6MRUBUS1;7-K^HP[KX/$_X^KO3M6Y]5K%\5-0+0NFE1F6&X(+(K:(N_3MOR9"?EQ -M73%/D4MFU[]BP;_DH:-$N!]3#U=4;RK,0/Y)'Q?W0XY2BG;DZ0V3SL@[X]:KQ5O2W- -M6Z8U4:YMFO3Y-XG -MG>U^5\N9>I))Z''7RXU%9[W"*L(R-#)#C3TN@#4:C5XWU:>=VN;>VHL#9L?UV.^^7K=K#################$$"8@A`!T^7%L4RWK/-' -MS[;<>QZO>Q+SSI$@;0NO>_)`])]50^6CL^#AJ]U\][00SY$%."0!V -M^Z;WL$<>>2_/;D&&\=QJ=S>W!^R(>OCAR&H$BM;:VN;9:M5AS@FV,RYM,S^25*L0HD,7(9*@V;,),@1('T_0[ -M_Z$?5V_K.Z'<`@_C0S1SLHRH5K40T5 -M`ID.A282'GMF[+SVW(\7RM_29_RMN,9:>+SUJZ'\:'T'HRM>H^NQKJR2NU;Z -M^'0C.DY60YWQ_K,Z_#W#CW?^B4$#W.`$B1[5W@4#]_\0@/:(7Q[`*V+?G#2% -MJ>%(IU%&`V`C$0W$8+ZR'TJ&JFCD!RA4FS)[XIN1M>5JUFBYM:^J5`J9E3U$ -MBK]F`3I0_6\&J\EX58^Q^!MN46J%30IOO&K%)$M2E;3M;-J6!1%(2"2D=K)K -MY-20PO*\XL8X&Y*5>B@KQ+(,6/9V%XKF/NFQ=*VZZ:+YW(',:(%#$SQJ;6 -M[J6YP*>%+7:@+Z6M)B_/IS$`,E8E^D`%7C?]=6>_;K#=$8+-B2;NRFYAQF6G -M0SU39HTP5*TSTRZD)K?!J_3<6;#LQ[^7@\0,$0X3*WFZ#4UMWEW45U_&[>65 -M_.[DV9I-_KC.KB!8@@&TG)?SQ-_120*-G),=TF[X>A$*'5]87$1:W.S;5M7X -MJ=H7[I[Y+`"([%-ET+)D*3-=N&%@ZG#1Z&;9OET1<@G!Z'-#33S*C&C?LM(E -MMWO`TP>P`3,UDSXXF.T_G9IKFCA.5V-K*SK)HS6H[Q@=Z)SQA^RR8,9AD>CM -ML3J]U:GRWP^5OE"X^3=2<+Y3NYGW,6_`WY__C.F)^-\>[QRWM\&XGV9I^AY+ -MB<85C?'ME19>[TELYQB&&KDO287I2B,AQ>8E)(BCKB;-I$TZ>!:&"V#15)4$ -M]V\R0YCSU&8JD5)9.E6Q-M08E8,.9I2P[KK[A<#_'AK-A?9L*[2A).N='JZK?&L';P"AAK -M^(IJ!M/7-Y[:9MN@YMG-F2Z+])F)N\[VRF50!A@!3(.2[??WO$16/DF-2L+8 -MYJ!![)*#NE?!N,IP0K*KU!![RN6YP+X!!I -M!9Y=[!\\L.V5&[A@&)9:-,[!V9W`N,XG@:%V#Z036?CE4^BYPUW<-):X5DYT0_@.Q''6FO+,,NCQS7$>6G50&+EF5K.1S=^N/,ANKZ -MW#FVS9C!`&*CM&CZ5'<7SWSVAHA.(V^NWYSIL8FI&&XCR?%S$7(DV5C7;%=-R:A3TUWQU6]5(ZBS>_V]?K_1S\.Q](7=O;Z/,^? -ML^Z+X0W2/HKC??GV?BBO[`^:]T^Z']^M(//90-8&ZB:#]_;W(50\V)%[6^C@V#=_;Y>']8BLU0Z-/=@B%[GD0]&4SH83GZ7VP^6R_1 -M'[A^%=U]!S]B5F/ZOZGZ[GM\NW>S.?3,( -ME\FV>E^!%PRC,%[$EC;DCG&*'3SLXSA/6]J]* -M9_O3CZC>I9H@H@B4UMUCW]^V=EP- -M!(SN<5PW9['T>L7P.@?D_O(JH=EC7@57Q^ -M_''OJC\"\+MA@2!^W>5`?V,`GY&3ASA/YZQ1S00IM`V@W=$T9A$=AVL>CVG/ -MEU:XX':V=?3[=J%[``HS7&RJW$0]])^#U<%)O,4]]N]4%^DA[@+[OM_36OPNIK;>!PXX>]SSA;PB!F$E3Q0#`0I"GI3>D#LI$B+]O[('Q[T(H$D -MBC;;&(&D#8C*)Q+=-7B3?K+QYW2NNYR[2HQERNG=)=$'=WZE;5O.MO7SV_&* -MVU&$`^;:5D6212;&J"A(T5PG'#A*R:T@::$I.L2_2-`&VVNZ!,4#:P@Q.0?JYQDG(]WQZMT -MTHK42HMVEC$9VD2F\#VF'AUQ?8-`<6$L0+RM*TU2129I*?!:23U/RE$+2/N* -MT8*2TDT@(Z`*``^1GMTWG#K7HS/N-L7GF[Q0H76>9E552WTJV3LLZ$-,+G?O -MA:3N,#_M[U0+9Z+*@\E\-A-[6A1R/.]I#/*HLRXSAV]33CT`T0V)JP]HP/#3 -MVXAGYC@6>X3G9P<-I+N@\-DV-\E0U9,T+V4&K/,L#1G0\C?AM0.1ID4FW\JH -M&Q@>E]#?4U\_=#V[YUU#$?;+OV/JZ%%\NN&?@^Y"`/H7"]]S#N]>>/(YV*?B -M77BZ69K^S=+\+W9$V.Y59-(E5"D46<-E%M-,WU4R0I%`WBY&,\=8C&Y'*`J% -MID1(*+)AH$N'+=6P1CP7DO#,#%55A2=8/FI%&0@,6N+#SWFM6J,79$1Z9#J1.R;QND:?8YW(WS\<_0GN\NV(YFRU5VU5IU[I1.)I -M$0=U4D%72JF=-5@/$>'-?[ST7$'[[N;\>Z[P(KY519R%T'$2BGI7B"PR;JA! -M,(:+RR&.TK[)K<'4L3>*%D%D3D>HAX)DV79KT3X5GY?,=O3/O)W$511C.ZTB -MO*A0]ZL-AZ[;IEW5TB,?<7:Y$UZNMP^YVJ;+>4WJBR0B<%LN!X$NX-,,:8^> -M'5ZT#;:[.V6@;S![_)%V6-IM&R7BKH$(Y9#3%,@>JS&8X"BX9UZHMBQ5PDEL -M(U1)=XLA3KQMZ\Z-7A-H"BKFOM7W"KTU/?;VVYO;TN7ZPKTJ],:T6V-9V(1# -MQ=R7K?/KV/9]KLQ?*^!Y2E/B.(^4/\U[[>YFJBTU`9%'-I`7`GC.BMH[[$(; -ML*+J^W3T=W0.M1))VZI1@=%!T=;F/=I#KLZVSG3BZ_SWG.(. -M$'AT-!QV37W:J\388PT,_/T,%Q\CAA+MUD/[( -MEOA8*B@[L1`5^I_2C0B!8,/$==XS>>++BD!/(1%*?+]4M5B38S&B4N8@#`;$ -MD42@V$2-3='QVR(JA,M!Z&"`(YD5`$P521EAO[&(D(+S"78% -M>8($E+6IJFLK*1!`+%K`8J8:V=1GMM2M1/GBQJ!3(0"RM;*T;+M)E(9."ED[ -M(48XU#T$L.:;NZ155,D(U^D'EDBG,IT$(7>Q1:]83!)I!:%519/SEM,%O$!, -M*,FC>!3><(B%`S(LZ;#7!\"6%D0O'$4)%0!$O\+$0#0MP0$W(;[@@^FIZZ3J -M;U#.`5D(61(CL35D/@V*U]GEYDBP@$U(N&$B$4<>*^C/!0(IR.4.>"T,>A0@ -MP[P1/2;!ML>IR]\NSJXR[W\/>?=ZX'RRP;?Y8#\<=A)L.`!_2\O>T"FFUM\H -M`)GX;O#S.76B')65;.SMZO.1*"J8C;Z!^#0MDZWY[/''7FV1Z=:N[)> -M(9RX:_,WH\(>$U"49[BQF?IT#<$6!\/*T="K@WP';PH]"_IIZV7FTG/CX"2` -M3,$I4WN0K9K1]YR3E:"FF4+4V(>.,3!R,6=_+*37'D,G);N=.K=6SL;39 -M`\(?-(;;G@^$MD->R%(ZB7-IL=+=/>KRA;8"98HE.-U$5ZJCJH/@"D%W4V3:;6PPXG=,]QX&KNV90T4[,%^5]GV4"&Z]&9+V8^9\- -M`]_"O1-9(;]%9REA!7M\!7Z;<=4.Q\?6`=?+WKR1QQ\GC[N8POH\30\Y56UK -MSSP3V4*5W,I45[?:ZW=./FY#RV-]MU:@]GPO->:;W[_(]SW->KI[$IE=?N=& -M&Z.O59IKUN6[3+*L3.B:L$TD!:BOLRU$8N]XO/SIL?1"-@`0;LK<1]E:OJ@G -M(^FDSY0$[N&U-OC]KZ<38K&>G4RUA"S&'SV"K*X8/EBKO]0E`?F@?8/YY^#' -MZ'C0;OP..,(-R#'=69\`W2>B&9I@%W.-&1FYPX'AOF1\OD0M0(DUD9E3@!6J -MEJ'+(D5Q8()-[99,<;4"I?F3B7&B:%%HGMI_-E$_.K>?I-1AINWQ^5,>#K1# -M_+[0OE:9#%D<-VP/=QZO]PUG26O=@7`SXOEJKBCJ7:.RD;W3:"J7@7X]8?F;]Q:PP&)(_*!5S?0?DV=DC9]( -M,;?PR!!;[O/-1!'?"A@KZ-15H&,UUD<;;8P-%]:)HNUZ^+-1F!NO6\;F,Y -M889('+HU*N[F7MD]B.#>93?UH_D1L9"^"E^+<9:+9@F.@FOSFJ/18'66EQ$% -MQVVYL;,V9O?\K(!P]/]7+$#U?[06< -MLQ.3[UXG$6F(AGO=_/V[Z&[0&''S'W?0+3S@8';OQOX/!+4[ADGB6XB&[&Q@ -M5+J(:!U"R8*3B[Y+ZUR68UL3I]N&EY6Z=SO3 -M@7>US;92BGM:,K)&+84$2L2-/$FWH9/R"AL`CA.6&-.PRVM[4,S,E)85EE3V -MX;5YN%55`6:Q3!VRRPZ)940TJR=(T73%.[,6HNT0X -M9[1=NQ#@F(FBRB!LN6$,;G'C6-S?:15DX6K=QA'V(Y-'=&>2H^DCYD6UH#Z& -M"UHZ8J2Q((9#P)0\^DSW[X[LBZ(210203,YB]KL&$AR&21CX(02'WNE`\?0K -M#'/NR*^7MH:@WP.Q/!)%G]SB9S'^&B(7P*-^?.=/GVXSH8>SJTQE(@K`S4#O -M8[%['BX=G6SH).L]PG/EPB1[NR&+$L@)..J;NE!NBG9[E*UW7BUAC#3 -M.IIR.R/;Y_A=:Y%J!PR-:V0R8IB_I#GC+9PZ5W]_\X-#MO8QK$Z$\1>13EVB -MVU1NOP_4,1P-XPGT-.O+":9B0 -M;L^.H&\1`UC$;9ZF]@QI7K39C`IPC\"*9'7W?25WC4U?M[ACFP-6Z:]R,YY/;=Y%_7 -M(H00>\)A>D0M+KV7I"G^44=>G3CM\I#2;LUK9_'C<$@=7HZ+V[=4)]8OBXY] -M[5XH=%OKEKD':"AB56X!L_TKIP\@-U!B(0')`46NFHQQ-\A&P:E..$!Z-#$L'\ -M^H)!9F:E)MO[/HL2K6DR?@8*'4LQ-@&^&=9UJP"UUO>31=";MDBD4(H(K,TJ: -MU*B@PVH<'?XW:D\!(]\\+K\WA=NITG6RO(P#\WR-]=-IZ>!ZG&.>CI[-[#XH -MQC.*7(X^L.AY[M+?:]?!2)!N8Q`=X2#WPT;FX57'[GD7%'./9T2=%X1O"1#`Z+%,%9F36 -MPS$M`.61(9+"$-M;=[+/;KMA&49,F"A''?_&9R7X5I-@3L>$_43Q.VJ*)+EK -MQ(:!"VUEOZ_?^43^#\9'F]R-]=V0Z2\J@_="7L@>NS8+^,ID%17>FB\-IMM! -M&L$0&@ZQ#"[X#0D#D@?9D.'=B!ETUZ8<8?+R6$\<7,&3;#LU@Q@V;(AFA)I? -MB&;+:8%V8YKX,\\`Z^O]SC=C[>W/SMTXW:WIHI!*\(`%DQ3*-* -M@*!W*<*@SZ<9E-60"5:C\CZTN=67I<-?4AN#&OPKP,]R%+YK,[=7-#2#5`+" -MA+G2"D2PQ<`H!L4PM]6%[8NP1)))4-SNUK##M.U/0,Q&)BJQF7J//TQ.N=:N -M[@[,#Z1Y^WO\M6].R=@NO1V@87;O*PVM3"NTX5.S#)7P-SN%\3/O0R4S>Y_; -M6#A<,TJX?F[>^W7MZO:>$/-N!@<;+AOASX\O3"FZS1;%NMN5O@8F0)"\ZZN\#3U)>$CY2M`*_5^+N!NI^6%`]66F<@IZ:+=$D'U7 -M$K5^S$[+]+(-&?RUQ2_QUU(-KK/V4,N$_"M-(*=U:"95@.)Y;U,X&3/CR(9[ -M&Z]5PSPR3+"1#+160X08F0S!D#N[U]^&X3TAC"(Q4GF$B55M&P!*U[E)ME7( -MP:RJQ?#E$&"TA%C`AU#^LPY)?V5RPFKL]C@7BDK#8IJ\H8D<$`5(9@L\5>L' -MAX+>J1G`1`-*^#;*\:O>U#9)#F7''Z_+ZZKYM=B1I$M*64W8^#1A,1\)`4:9 -M@T%I*<]\(/6MYP.\BAD@@Z5EDH%+Q#\1`+`%PS%@Q0^S'4U,@-EF>_FA6X1OM5A\N:SK'4T.*S7QO](*!!T-T$MEJR%GJ<-N-O'U:C%Y9>E -M.&M5K`KN&!AL'UTH-O0DDZY0OI;+!*$KNK1<0W"5K&Q!-&US=Q7Z->1+D#/N -MS8>_*@^]MIMP%'Z\_R$X'L;?&MW[Z?45;T7=D2(/&'8EAI6!(#FW;V"N;P/1 -MK"0^QRVL):,8J=TS+U_5%N8Q@\?FI'N3E#A;(1OL$-P`X#!(8A<3!O:F&EV< -M\2UZ*FWR8_E>;&`R-C\?2\6P]FP#>^MS7!<%-33.:89P))-V6D1S?7:=M,C# -MK@7J<2,=^U/@CQ9-]N:NGK7CE@Q1Y/U]?.,8%LBLK+2P0OPH:\,_:7:\+&&E -MXC%54VP<-QEVRI09-9LX@%^&CJ+ZUMM[B^@QRF/9L^Y2#"!7'S>BQMR'Z%6^ -MCT&@QXW*PR;E/)]Q94_(21ZFS"Y"`[ER(-S8.XK\S+//E7H&Z,G!!LP4&U[C -MLUT[R!YD4XR1$LVVR'&5?F]0\$39(!C$K?YL2^B!C#YA!KTU&-*SFY%KF8)4 -M^7YA1:^/L33DR&T$#GXX,?5[J8^OX+>PQ$`D==^/1ZI"2*Y]1Z@/W,O+$V!L -M;QW-O3.9?MY8%M;UXE/@T)J)6$SQ#?QRNX@207O"7VEAH4=R0MEML,S@\-&,U&7N)P0IEK*T*S0HO-WMP:N$`DI!G!L]&2P -M.YFGF3@SK2NVRE)(..LJCG&U&/&6\<.-QZP^B#CX`5E&8DYXWAA>GOG'4RRBTLN"Y[,G\PJ([3Y-3]DH:U+S`[AA&5 -M@U)EA9C::AQ>`B&X9B293AA(9M4Y98R;-DQKR8#)6*,3!X''MAES$X_%W^6# -M;'B^@PZFX_T/NKW^_SLN&\Y9^K?K[=Y-QE7KT\AL@&_/>/;$RM>"<0R@E:8< -M@%R-Q[-0ZJULD"(DV[_/)WSQ6+#W6^P[E$@]H'S=>1 -MZ5@;+^AXE"$[OXHTP)N;FP4&#*Q`V6HD-#I[&\+;* -M=L9D,LH>U2:"RS5)&2(LS3$8O5_2WH!+6QR%8-Z=\C4?BWQ=^65W':-P.O>I -MA6ICRUMM=M&R+\&F`-($[5J9I<+:=P19]JSLJN1EZ$.0J_&XIQE$4*4;;#,0 -MQ9(KS-W=-+4(]YGVE-CI/TLXFI2[R)!O*'JZH4R;9L%EY:8LG_-*#"Z0DIX+ -M#W7@=O$,`=0@,+LX<\%"4NNZ!/5YKTCTTADB]JRRMU7Z(MZ=Q:1/2\T5XXE@ -MZ&>L]#Y6II0\I$$7:S!NVEKS'=VJ6X/@C%VRYJ<"O,7IRD6#6%7Q,B`3VANG -MG`O8D2"#I,Z[*Y(88@<]B(B3DNJ.>*9R>9#"S$N*YN(; -MA(OE5$7L^(DRZ'.:FY[4.96\!'"3GK(6/K.:1?85]V3\9##)TZ%H(P1BZ6T1N1WIPXDV!AF4UC'K\HW/&Y<# -MV^Z&714R1\4,./C:P)MD -MV`^.$&5Z"][:GZI6[?.WXAA_@8XZ;B58`D"P[3W%*(IK-=/)'-H9T^%M9"FQW3-`CK[G^D3KLL\2W;CJJN;_1R -M^;9ZJ@$LU!P$!1`,S'6@):2U-7,B0_Q[?(=IX_!U:S`AATS=M?9N?2IZ>`SH -MW[*<*"&#N@>_AX9)""R"?M4K+>N,7&CDY(UKGV4$7,&P113MY;^4_&^O-=LK -M%VT!=.O+"LJPN0.Y'7=`E@BOK-3OU9KQW=F22[JS-T6"R7[W!'FA! -MY%&]VHQH77IX2&Z=& -M.\^-T+U?5A>IQ="JRE;O8(^>MO9R3-#\ZU=^]0A1NPBX3\$K=5*8'!9W0:L: -MX=+C><0)+/IG-U8:(NJ(8]D<6?DL];KAU;P?.EZ[45B'U^S)K>6MN%Z_5N?4 -M1-H/JAWGIH\-'CQ&*G>`8Z=7/1K]3#7*>[LPU?%#4H7S3NQ"!Q36T+K,HF[= -M,*XN36(#76,A`J,]<3;75][LHNM0%QJ(G$CN[0^.,W0ZE!MRX-*[:VR@',R6 -M#G4&5J*ETUQ(0D$GE, -MQ,FYI4"V`CS3V-U*4Q$1#-=8,->Y.,EYAVS9W;+L\>8IX#(A*F -MF-8H)0W9KR0\/D7`=[I=5>[ -M!PI+0';-Z@E<$RS23-W6:NHNUQC$LX?DQ -M7H(5RZN>+\UV-ANIT0D35QS,6:*?SR@8%VV.*NCC)LT-C]!6;C5\\W63"LQ1 -MK*IVAR1QXP\UPRK.(D$=AQ0H214L;K(-NHXAG<1(=EL@$[E6-%0+#9M\7C2M -MP.7Z:H5_Q#`^L2P^UP^-VE>W`YZ3GS0Y-%2#Q>&)$*^8.Y0V;`?U9L*E98Y:2#%"WZYVM[/<;0)5TBHA$8+O/#1= -MV?FF'$C%.";W1I&,MBKVJWH0B2X21L2G0\$++)0)HV3%"^89WPAG:L.2-D6]Q%1>GMH -M*+BQ%AP98A&VZ%R-&&2#P%/)9'TPK+<:B)DM?F]/GDE!8&/L#"(*CY@^XM&& -MWF\B=-WHE3&S;N7.GTVL7+8+7&VS/=A!/`5'!NT$]\0].$P8'*1:0AR11YKN -M,"6QNLI$!PN.YB,WAWF:[.)XOF'8"1.6V_ZE7BBS*`^G!!5V7PUD6Q!$*U&Q -M9P&>(W@3,B.\!USL.IC!$0.L!6_#`LC)&=N,/V,8_SU/*FJOX]NW.ZT"SM\G8GACVP&G/FB_@S$*S0=7N]"W,35PE1\FS=Q")-[7NS/(8F7MHCL -M_;&'Q<@=@/RSGG0^5K?($8UZ)^;_3YG\+FWO6/F\_V+-=1=YGWBBKAY_$CA3 -MB?"X:ZU]29+Y9MONRI<>)V"#\T!.[-D.G.$,LWSYZ0\EG3Q[,SF]!VC'43J[ -M?\SS]8FUNP;9Z`]BCC^8Z%!5%$$%&(7Y#,30Z.QQY>N[?G.[X: -MR91Q#^2&U7?$'8%$%XKHIF;`KE;;(+,7HW.NFSZF*SLJM\+<*RX1L924);+8 -M9..39+)BC$#895S%:)"6MLRYX^&^&-L<$^KHAC#:T)D4$G`0VAJ[W6ULNWIS -M7"6:B*:'EJ#,HD4JDB4)#*VE`ZH@@@9[KX>XK.CC,`@6Z/TGX/T?HW>5V[+X -M_H1L3\CU^M#^?*B)^!@?MS+91@8605-07WYX*3:%&E7U>HAO$R*M-;3FRZ0J -MWFARJ#!-HF!^A)?%E2FP4WJ=A##'16NF*9053.HLDMBKZ^M>HTK&F_GZ^*^> -M?5>@]_EQ]7(&^BGPWSKS/:*KE-]6/?/P$B.\>^^^V=+MX<$3UR/HZT++'7]Z -MF/:O4;WRO5)N(UV7Q_2O]+\8/YGY+9'L?BO;O@1[)23*$3]'HXCXXP/:!+)\ -M4[2>S156448AR3""LIO1N79)`4D"9P[DO]],-9C-[S2>,^BP05(G+,*-ZMEM -M%K!FRWK.WWN[PU00_X>FE[%&M].G?GG32C>`I5;(ZQ8B%>T'#)\/C[_7 -MYU>N[COXUWW$NFWSSU#F0\=S=[-C@%R^P;AUE,P<2A>>[9&Y!JFPE>]5J1)P -MD2Y4-<.@])SCJ]Y@7HC$N-QO,$FL!EV@(\N"1(I!\76>RQ8B.;IQ?#Q;'#-< -M$(@=,\"(%)&"%H9P&$98WJ]*,R':E,D0KDD2'*HPXK\@[R]#0K&-S9-DT&B- -MX#5&]:FV1ACFN$L'`;9:[G#+[RW5Z/G'CJ3S",$J -MI=6W@7%W`T6GL.EH17>Q,3X@9&+K`K@886-(IARRGJ8W,T".'8.L.TX=W=-7 -M.>E^`'-^'I/WJZUWR1ID@*H2;.IQ#.)?%+_4#4P0%BE4BH"%4!2I!!`*("BP -MZK?7F5.$JM!)A?TO%=T\_)N@M2IP!`CBE3U=>-0/T"Q+]F"VINI[*0RC8;.UU\ -M>)>Y^6;D.\'ATX=F(XWP;Y%Z-$E8_:<4&Q*H5&%'E,Z`?M.V#@LL$X=W7`/9 -MD,YB7">2W[2H.`R\.U&8IJ*9,6NSO -MZ2_IWJUQ&\D7P])7M-X6IUB`Q2?0?5(9;,.KRA=Q#\,8%TPGS -MG4$1._GWK<[.^,57+_N_2_&,B1WZF9Q=^[AT.&OSQ5?MU!@D.N+:C[&B,EEE -MB=:NUSG'C7,1;>NO5/&$MZF-R3*TV+>6Q*RJ,\WY9_/7H9>EFN&AM(Q/:-XE -MK/WRL16`6^O.L%S1;E;B+->[Z]$!Q=+67G]9^>!?9YCEA[LL;9/@53QQ<(D@ -MZ1OJ\2%6GNUYOX51FJ?$Y+1"R&S=GB1?G,=9&B&RM8.-&%HN"3GQG+8Q?.%# -M25M-FX\),YXNM:JUR+PZR6"-#"+-EKPAQL1P]X3D3NKYOTT\5=7Q@>;V5YLN -M5RY,8V?L<(:\7[Y^@XQ[Z15VB -M+RUXV[!;Q[WR#LBXT5?W-HOOHLPXIF/SSAP[W7T]5P_G..'2$NFC1^(W$>6P]*+\*2/H -M/8LDKTOW[K@JUU#`*GGOV[[V,9Y\G&ID410Z/(:]F:-[O6*KQQ.KW -M[AUW=,(9Z-/=?7Q.QS5QQ>6[=1#*93UX@-F>/&I!^KX-KGSB]P7,CMUOQS&7&'T8=QS=\E&.VE4X&. -MT\X$M=HI`FW&-']SJ\OG>/7'?SG/9\:SU+$[;LG=:=WX![R':3VPT<1>I8*E -MW6=-?F?*I/@7WC,XR+D:RL5,W>!C:M-NJ] -MLAXH(XI[1B6N41HY[NPZZEAML[P^SU=LY-<(ZDWOW^:N\4]8W7>_!WEX7)<" -ME@T,NW2^303"Q>0R==NS89HB9NVY0X,<9P_3/<5E//?.)S%M7X&^QO/G"#OP -MW&7'=]5E1L0F]\AHG`B07<*]/%[UX?NRSEJW7R^;\\7A^%<1"N^NWQN_5+*X&YT0XGUD/T:'CB^9JHSYS5_-IL0!]OO'Q -M^EHM\G&VGY7M%"Y!/S_NP3$FKW[>]]0T1$;MLK<;^F8ASGA0Q#NY9')9ZW:= -MIEC$<^H.4QL9.O8&$[)VO.[:>5V'9K;('-.Q$1>OO[YVW1W=J;(91QO`:P^$ -M^7S]`P!$5D?>&+V]A'I8[OOF6_B@?`@&WZJ#J%W\W6\PN)8L9X&[BY%RS',: -MZ-`\2_!K:(\*U#+4I4[$U+IAXC-KNY^*"I6X[1>##-U16K-6D(C9<6QD]L.O -MGOYA#/H>"UKS^;CFO6X'-MHR[A.M89O$99Z^WF.Q??UH[Z@G)*`@#"`P*L++:T$RD"E`Z#F[9['P.!](.!8XW/.O4 -M>\:<6]0NY8W]?;U'TN!/P[_,8,6*'G[:%/"\MCP%OXHC`.PW6^'M<.KM[=LI -M>N1\N6?V:_T.HBH;`GYKJ;L,33:]'G$$L#5(,KL_XO1HB\Z>_OGQ?,WZ?[-\ -M_E/;;\X8]H6&UJ/Z/RA$+Q-)D%*V -ML&D(0(B"\D17L8@FI$':0.9B`9(`CT2_;29 -MT1/P1$>-.+T\+DN8I2+]6W$(O8P061>!(%W%]F3)XO3[IT0O;?L9#@I*XM -MDA\-A?61&X@]!NM5:##B>E+`X1FMP($H,(IOJE28+NVQG^IF?S!UX=S;UBUK -M+^`[GA_M.XE^._T#_?Q>]VUA!@?;Q[X@^)Y('1P6/84-VYU8.3DQ>[U'J -M'_K[^&E[CSCZ> -MT;.WFT^LI:V[".QP=EC;0N[INN$1./(W59'"1J-&#& -MT,:@PLF.)@[687%J[+Z.R/GR8\=I>_M=_)]UP@3XRAK"^F!K&^EXA/C$'1AQ -MZGXSCORV2(Q2;42V[8@2.A`Q'5W9O9=GTU^!=X[\L*<=N;PM`?$P8SJO^DLMO,L;J=J -MF!09?&Z^(MP+`<"WR!:S!ASIK"1G>PBM(,=B]#!6[K-K/:_00`V8&<"W'^5P -M+`,_E#H#<6HVL2+^U+-_C_9WO[5O>T>SV@AW/>YF/!CT5H+F*,/5EOOZQ>P?77NOB(0.Q*X?++F=6;#\75V\-UUSQD?\W^URP.>SI -MPY:R/*^Q)'6P11@MGNWRYU`!L$Z7B/[CRU\^..()[Q#KQ#92^IK##R5T\W'5 -M(M#5TAY3"(2Q=<),:H31O.Z[1B%UWQAU#;X9M<\F'?C;7S86'W&UK.0\%9/1 -MR;6)Q9NHHY#M>EU-G9.\-F,M>MIMQOT[6>?&D@9*BD4@HL%@BA>LT$:C0KRR -M\.?7K%W@,8-C2Z:V(\JY/G;D--#8:8)UMS)U&9*V8O7DZU<7#!+R<]41C94( -MC*1@LBD6"R45->;GO;LVZ;';^DE6L;T,,CZ=389UX:UAR;6'(!%HU3"%++'. -MG0^[8\=$DHE3W^H[",(TYB@P;=3+(ZR!41 -M&L)6W,L4;9,9W9-2:I&R6=,$W,P90JPL4ABA809LAEL-ED1"_8RAA+ZZWM:S -M!I8MF;QFY&"5_(%:]D3()@O!?#;`BF<>UA'$41BK&KLK2?+%HVRD*(*J&BTD -MOV2ODB""R"P-1@#P#:8"!J8$X49DFTMC)7$QUC!(D -M52JD$&1IH"B4#`?9GQ>Q^CW-FSV?6]=S_L[P].*@Y@3;&H'.7RZ/E85IP"D0 -M4WJY($RI1,*@0XM`3K];W-NLB'96N)7KKEYPQSIL8Q08MW=N75S:[-;;$6UBS$VQK\;*^4B&UY?3K\7D^SD$DVA-@)_FRL$/ -M8BA2VE18VX[;2RUC9&3:`86#R*[/!JK+C^B\73IRX\?`_(W[#L/P#]BT+^<= -M_/:B]R#^IS)NV'//KP&JU:5,&;.#9.EMVF -MK&@X(P^*=0[.NP_>/KQ -M=NBM,W-]-.BF2'1M^U(:CR0QMR^4U+M+XVP%]LW%_C?]W`HYUG+-2W,0-<&R -M&*[$KN@JBZ8VF91:8HUIH9,UZX+7B_4T9.YC?ECQXG5MRL>T9X&*P>ROWY]U -M%=#'ABHCYY@T.]#*[O>4"!_T2(;]#\F,_YS71:F#K,IJ+'N_(P(BF_!;_+)? -MVE"C3&D4"F1/8RM1``&>KZ/D/ZKRM5[FEHVKKSB_=\S82*)$PZN=0I#\F.`) -M?*M4.*=HV^$<7Y/6]#R'CPK%>1E=7NTC%-J_?QVS/.^3Q]3?J_]5VN%BV_,%!,I=A"$# -M!D`*06:4'X-16]SB>,,'U\-?,_[GRO:SS?(N^/\:Z;#A.`X3HJGK;*I55L&5 -MY\]C6.JN>\M``U.H&#NJ(.KE2HE64)!HK\'>?G\F]V/9>M=_>N=Y_"_=[WVR -M_?%[?S_A=IUW2^G[O[/*?*\CS?(%''/!SR -M,"05#FXK"`$DD(V&4A6MJREK6(DQ9*33-OP3H-+6VVB0@Q1,#&QB:5:HM636 -MH@@2MPJHB(E0/H;Z3:Z[;W]'@?*S2\OI]592<1<<*?'O/0;4TL!U/]YO^/)E -M2\!;,OS;]=5"(E^*7+HEJM/F(6]5'MJGQ*>O(SD"W/((@NFF!840(#51\1$' -M%'-H[Q9%71[#IN/N9K:PAQD3;0/#S"$A(Z/L90N9!_UBMHWA!D7X4!/Y9?ML -M*[&%X`8H(1C"(LBJW6(9-U_?];==G_AF:WJ/'^TS>SW?/8FY3&,-@&!F`;U_ -MH0\NF`_FXP%3D.0F$_-CY0Z_XU[/1NXO_?ZY/C]5_F^W;`(H!YN2`H$82`)( -MASD7/VDTB=<6-K8/L^UY3G??R.?Z;Z-%^/WY_@MG6WO-W_RJKP>_N='1U13= -M34)X+OHQ&N\G&_I^/)>#W&_=#^5KZ$L3];2;GHO@_/$=WO^Q_7SZ7<>AU7ISZ&\/1UL#-2O="I:-,#,[JXX'C<]V$=1X7\[;RL]X79V7>/^G -M/O^.[2H\%PF[DHK?B:R_JBO]@NFU"^_FN2]/Y+(]ET -M+)6UY!@]#SGOG=OCPT7N<*L?R7C#>0/=%11NFKW$-8M;Z6-&ELV>E60`-VF]C-`4K#SNLF-@AFL^W\<)?L0,G^#XBOI681 -MT0_[DG-R9695]@QOU#DF:G';%X>Y[?X;&MKM(X?4V_-^.?&+Y,77E00TYZK: -MPV.0Z;QA!-&`(03#FYGUU:>HA!!!)(*02,=NWI,R\X?'P6)OKR1?^=5!YVKSTOVN>V?V1?(ZWFYN?>FQ/S?:G<>!!C -M7HWUX_S-RQG?=[A_PAI;]0Z.5.LVO96'D^#\?!Q492B)F$/G,"M\)448/@]& -M!R6/OC$[$C!E$2@4_D_P8SW/U:GBH+SJIPTCHNCL\UD><6\;S2@H@2*R^MSA -M%A7<^&=U?K3M.FD2;]`/@W^1?1BLK5/Z?:R$8*G-+PV33F@`$]*J7B'LDRH( -MC:.9SO\[]^WS[+L9H``0!/,!N2:)1(E0HA4IA46\\GE8'_W -MC>'^=B]GF^C_XGC;NY9[*1XI!QF6PU9W'R_`?L9\EU7",CZG;WFJ[E=ZDTZ7 -MVEP$$5'`G0K*G0S)/B=W]\?72QS>F=4; -MG\VU?L8H:B9\$R51=*@?I-KFNB,57/259!TZPHU44$V.:R.LLJ$FO^SXMJ_G -MM]9Z[?V7T8'7P5NC/*W/N]U#\'K5NP\?S&^)#\[TY5Z=2:N8S30!L:T[1K(5 -MGTY,\L,,IQA5M&:Z.KM)-6Z@\^OWK$VG^;XO/4MV]5YS#?@]^/2%1S?\$"GF -MMF[F;SX:WA?9]OY"ODWLNV>!2P`8J%+[VZ@S+";*B),^0M`/B1WWWJ&V-C(? -MQP0&"GZH!BGUHGZ(Z<#LXOV(JF$<(O6QM)`?HP%J/510U/8%'>.T*P3MO9UM -MN0T=3W-]0X3\%K.5_Q7ZSX13US[?$\RP#?N\G,&SSF5VK0.,.6(M<=?FX->X -M>2JXC8,``OQ0?=AMJRM32E!7HG`,ZS@7!X5:J*@\"?0(B.DV"HPIF3`".GIJ -M!:7S:Q;/;5T,;1];[.K8Y0./W/@V>=A=)%X?J?@6/I$-G\[0LMA3\1/]:?Z6 -M3'S=!^@_\03W>RN8%:9^X9OA'V;90`)9YHI.('IT!=S1!:-^7R.9:P_T0%M54%"**B,C4D7C# -MJ](VC&>)O5'7N".UL#"1Q1:>HK^F8W6OL&1+3QA7GE4N*GOJ+"QK,AV38BXA -MQ%UX_4U;<]]\<`X@]>]>B&$01Q[N=9)?_:#(W3]G=[PVPJMG5J\20*T[E77)W"\'> -MM=T4GOL]X.D5Z8MYWA?99C_X'+[/IE[R9%!&"A]$!4E%A$5IL1B?X&E"4:K5=/@*F_^MKN#\J[6F@7B- -MQ['=)439VIZ7CK7!)M20'AL*?6WE`=U$][`MXNA-QDH/(:S**MKNA,.(_R?P -MK[WXIG%)(:"2PV0?+.!,#W?H7KQAN?]K4ZJ!_ -M9-!^.I=E^-4156_LE!O\G>F_-^G493AN.^/ -M2]AJ/ODMD#*Z?A>)GN-&V7;A?L8X^1,WWZP[^>G`#\^`I:*(B?Y>:],>GN#M -M(BJ'=9?WL\ORG@98-Q5K1_KH+IC=1?(?M=F7-SJQR=982^;;O&1)!)'$54*. -M,"HL`HB:/5USGNNO_9_KVN[;'LO=>ZK4?US[VK^^6+]-D3H""27;S -MR\5_8<9>C[F&[P#J.]@54MU%6=R7*_55Y/#+,MY*#`8]6@_`EM8LLK\$)!*(A(0;"MM(84';\KO'6-%K77C(/EP2%> -M<\GMG#Q?D9B**5$%ZC:"0?Q%S5DR0`5GPL[[C=:]H_YYX]EC;>XF#*36D1"@ -M05665!K0+ZH83^/N/>Y>G;%LR"\E'-J&(P?V\H8/B^I=TU>JWWOOU1QULOO@:C2ZWN?([;NLE]F@J,`ZD_[N2GTIP*@=P0HO6A_ -M^G<9U."@[_U[1F%Z^XU\OU:2OBY%'>PUFU6AM?TY!E3QWK_GF?ZD1;R?3VVW -M\*3ZG&>C_$V1P)%'*"%UPUA&BW^M@Y6QO;/V\W;>]YNY]3S7Z;Z?%BO^<7Q=]HUNOPW2=_A.3V?R48Z2H8P8 -MV)V[!47H573<5TNQ[K\NOH/7V1D^JD=MTVG9/HC*;?:@QUGBK_PPFI*:\76) -MCB.3]9YGK;=;E\N_0=1T>JS4Z7-CU>OJ1/;AD+`7VOM#1C^(P+UY]S!8)Z&U -M^EG_PZW#W;6-X*&=%/GM]- -MRH;##R6@;L1I:?5]MVN$^1G=<#S,J,39@W9D]P5RN'IT>0R7'73-?GC(9`,A -M0I).+\2Z;C=]WV\':'S+E_]_6305/4O_D)HSZ!GSVO$^CV5GFIFA$8')EDE5)-!/<+&#&LS_D.NW,YWH_B[/POHW.__KEXKZL[ -M=<_9X4'?>\%D/?XJ4M$^9%:@>0JF09)`)*2H-&C8-BO@MS1MDK1;^+;EJC:# -M;\@YLE'W?<;11LE)JBWWJVW+9-HTE^16Y:+18U&VQH@MC\>MN80+?<+:Y1;[ -M3NU!6-43[EVQH36C7[,JY5%16C1:-8,5%%I(VL8HL;;&U&VBH+8U$5@-1C:P -M:+25&HVL!45%HB-)BT6HQ4141:DVP46DT6(F4$:*M&HQJ_L.[6C&J*LFQ1BB -MUBQC:U_/K;FQJ+46T62-8T)DV(BU[[M16-016C$8U&^RN:*B$L&U%15&T;_N -M;?BOY7MJOK?3[;6^#;%DJDQL;%1MC6C5%BL48UL;;&QM4;O.M;Q8MHTE&QL1 -M6WVS7;$!C?_D:47FO@Q_UZD"VZ;`9.$_[`IJL9;?YX%6^.X(%N\)XCD`-._` -M)M&-S$=1G-V[WIL4O([&5N#Y7D9;2MHRJ"(9[1<-1`BF=Q8S"(!E>%W7$>3> -M.(QN5N6L>\;8(`!N("S\/VJQ.YC.QQI8" -M8I\[#,8)1Q)T;5O/[X#Y^+_;VY0`[;?+EV<7VY.6+5";(Q139%FE&264RF*: -M0"11FDTRB408"5(9H2F+-&"T"(`R0$(44HIB"!,!--46FJ!9M9F&YWK?5Y1D -M'R7ZK^CGK>.7`%M&="P!H*;KAKPS56O4_^;]OY]GSFB^EZ1*$P$E@!+#02EY -M/EYYMJ]O\7197THX-TZ)1Y-X7PZI9,_T5`96++&N#U(8+3@53N38E,U%^4/$ -M,NO.;!KL=A6)>G_'_\W@V45'_,@A.L+WBV,+X=WW0+: -M$-/440$(WBB/\($)0EI"'AE'?G(WI1IWUL2.U8.*T+0'&,`.[YC-X4.(#N -M14*[C&;AB@0EQLD)_]"\&_']JLF*.N*0AA%3VO0N?HJO'CF+]1^UY4:4&W7*.R+KY[T_<_BS9_PM[NC"O@S -M';#'9/^*$SZO"P$_G1=+VJ.,YO.M^;O,18Q1]=5))S,#I.K[.V=M,BXRXD>E -MA4]W<5PT*"-TYK'=8[C<4FF3F('OYYN8H^<9,T-CZ"JM/*8=A#&DG%86_$Q\ -M?OX/NGZ%/V'5_Y.&PF$65@L9X%?JWAA^ZR89W4#CU_L)8*?$2B?3F*,Z^D/, -M]+1\:7F)*RHLC:J)%JP4'Y8'(A^XG\]S0^3I*1_9Q7Q4/\;D_P4F2#])^I06 -M&5N%VQRI2]&>^%^O=.Z8FHL?M?1O.EK)WGD;F[8%-+&H\=X*1`I2%)550)2+ -M^6[4_G)DPR:8[J^R0N8^OOC:]4]<\GD53RN/JF#?\DQDDIU\I=29Y&Y\6^(' -MW(![A"!\N.3JL[Y'O."69$1\-RH@H$-.2N2WZ9,#P;>E"\:J*+$AXIQ9RA2I -M$%)CQP0($-W^5G7?](00E``P?G_=[SFUI/:_,;U_OTNDF;>[?U^H\/D^Z^/V -M7QPN,5($ZVM'M!NWEWE]=F4'\WKC\:+^)_S<3%-`?RUVZ8!`$``:GDZ_A?;A=\(IE+H4 -M$!3$Z!]]HR!S.+RG>:WY.%N_;]AK-5MM!=-W6&?-GB]L68HN"P&X*]A_\O;> -M/P#$S]ING!?WJ(?7R+L%?(*F0"9]8L_C>+XO<\-JO'VW[P[);UCN5PSTXL,P -MDF0VS_KPI;W1VZ_[VWN2/[/:%[L5JC3;+UU/ULY?&0#R_29=N4X;>Y,&1"2M -M];;URID)&[V+HNJ]@Y?@AU'!/#DX40O,PHRZC()E+!?W7\/V;%ZVHAJM__ZP -M53E=&:ES4\(?Z20&5:G%;#^=3+W;A^661(*`V'O,D!&ILZ+;8B][#M_GP'=9 -MC=9_L^#757Q3HDLBG(`P#N$,XSQX;R@,'(RA;$7&&U.;K/ZZ:)9RZVY+*C9Z#1";[GGWW_/ -M#WCZM>1?\_'!6]Y?F8"+D^8UU$.YSU(!-,C+`_`.P!'0.:,1VF#!))))!)(M -MPVZ@/5]!O$GF_:U?5]#[/JQPI+RX_WKGI+XNW'U31/"!``8'7.^_J_6MV3T`X(J4&])4 -M3&!LA@B#CZC/@Z!H/-1H3L$HZ=A@)Z5))!&"B(LC"1_7%)!%DH@#41)$6^!Z -M'T?`W7'^^GZ;\.CSV+$'479W,=I_?AHP'1@,@LBJ0@C)4E=6U%L58),5&QBV -M*D$9"1$R8M6SQVNZ`Z!X>00T00F@"8IM&0#0T4T\IZ-%/ -MR)ZGJ;4\4]`T&TDT]`:*>4\DT_1/5-&U/3U-&IZGJ/(]4>49J>38J:>:93)Z -MF1/4QY%#VA3R,H]I1^HAIZGZ4]3RF!J>*'ZI^J#00!`$"::GD$31Y(GJ:8-" -M>0AFIZ:FCTGE&FU&@`-`&F@&@``:`:#3)H&31B&@#0```:#0``!H-`U/0*C$ -M)JF3VJ;R"FU/4-!H-#U'J:`&@`!D`9/4'J:&@TT`-``T!H::`!D`!H#U``#0 -M9``:#0```"4]*4A3U-,F@:``&@&@`T-`]0```/4```T`#0`T&@`&0:'J```` -M```&@```#0`(`T!H`````-````````T````#0```T`````````-````,@``D -M2)D)D1DCRA,CU&:DVF4:#3U&C0#30T>DTT!A'J:``:&C0!H````TT``````` -M`:``````2(IA9+786M6+A+`,6XY.Q"S*;@QTUX5+7*EU:[L7"T_+^Q' -M5,"J->&RER$$"0",A[1.LF]4'NYV'`Q7D!TT$HHMWNK_LX"..7ZJF*,C@TK^ -ML(A,#Y5:P-M7"\(MBF2WU/?P!DB0"23*2BB(@(*@@*#2+2-"E(TJM-`BM`JB -MTJ#0(BJJ*&9F1F%`B+^-G(DXLC%2R8R>0[_OCNYLH9``!>`1$";Q/N($6(6H -MY'UE!9&'\/_"N4,RFQR::PQ?^_K5/[X:9#;7FW'@49^#VZ? -MU_T,M..EJMPG\>O>)'P7/`NLUQ>@-W$T)\1$6O5DK!6?93IV@IPMIR=3I.3N.ELC3)'M\HD. -MFHUM%^9ZA6:2WVQRZ^V@Q=K4B]5I-#ZWJ:&YYH`B*O54\E;;5>U5!F-G=Z-: -MMT\$#NQ-$&/=-HK-14;UZY<:S5#]E4M$-BIX:(*I-8FV-!G&)ZW##J)GZG4) -M!JMG3'M]&='W5Q=DW-3*6N$ZV(G67#Z5BMO757[TS24!#9_S4,OD*60[1RQU -MHD`1KME+B5]C=.L:M^QRK.H_[.6,*0N[SMO+T:S'=`B`XY47ARA+%`W>8+!V -M0NA)0H*+<2U&Y1[5Q:;C;A)7)"D!IQ-0E71>1D&>?](D!MC[DT<`:;+=N@M, -M;,AAHZ$V@B]K.L5^]W<#N>Z@0#^I?CEOY<_1',8%DY6V``AVEYD" -M(D&"(";HDJ[;T5C?,('I;K2!(T?,0$G>HVM0^7HAS)1D*@G=GK3??K\ -M[@Y_&8%_\!!LQTS!$9D1E.\EAUJ1XGU9"QLN[;^(X<9+ABP<90A!C):J8^`H -M!?^D"WK6O?4!@&7CJ"`_,+WZ-PJ4N/-Y0/,^Y]CMU[7_EH&2A0 -M#_-UYN&T\<&9\V?GTY5WAT_$_G-\WSU1/5G52J'+&0[\@*;89D\`P:7TH@-- -M-9LIJ^O9AB@9`3.*?W7-F+CTZ?)-ZOU\3H3B_5E -M/^5D).';76]PO]_UNZ7C>1T9;^$]371WYS%,-O+0Z1PD4&3V='4A2TB0_2V0 -MN5I*59/6&N+Z($:_+F>[W-QR]V;I9\2[H=/)L[DT<)5#W=8#C7RQ[)W]_J6Z -M0L!_$DO%ULX\-J`8B]YR@X?F1&%'+];6>ZM2]?`&]PM=/`MV0:0T9S[:DE*' -M7?YU#KN&Q'#7]#'";*?-T#/TD<4Q/&U:Q\&.@B6!T/<0'QAUC(!9!\6`C@:Y -M,'?K<-_0XRB@L:6]P8LYF;7CIH)>EI7;O+(C4EX8`Z1D`.)\36$U?]2/"S-. -MP324)T%:L*,;0P@R_[5)"1B("4[^A+1\.+SFF0'>@137VA8&*`1&S0TVUM_+G0SX+3@:*^2JX?8.B7(,/YZVLX?RVC-7WD5$ZTF;&R[_ -M:*B'U:5$729V$.FU[K,\1KH.1E>'9N&:CT>PGOV@AME"?FNTO'G$3C$;KEL]=9Y3`"Q$'[T`'J=XWC-^RL,WZ&S;H_D&!!K8R+1*]ME65OF22)2PB3&ILB<+"E]NNY-MP\ -M24*&$"\7$/7PE9.;AKI^SQ)X."F[OW"N*?/8X)EO.S0"1D7`/H.SY0FWTT*\ -MT50*<`&3#<73(O>-1D).'&XT-&O4..(2O.)0ET_',,TK!J386J@@O?65E`V\ -M((P7>D2@`:N"PQ8*K!\YS$V-C(PA8!5&T.&WT,%[;TXG)PVMH#0T<3:1WM:Y -M0@9IH0;-#8_*N+I&;.H(XCG:++*A%M&P>KV-DHZG+\]#?:@QY.9"&8*N)-#` -M/A%`-&_R_!D.(YHR%U42NG$CJFO9I2]O3XDQ>.:RT`A/.U#WBQ=NC<^4:"A= -M2G-]E#,'F)23>W_'2UE_QM!K(S+7S)*4(8%5KV`3L#_W#OI8#AA(0+V&%1@% -M4)2"A5DHTE<<&8BEB9F'*.ER*+S^^!AQL4N8V\;3"5PQ%DMJP,M`IK4!\"T4 -MIMW$;II7,2:8P8-OEK\EP;/<(1R/(1CCD$-3TUK\Z#&#%-&!H<^,4N;AM@E& -M>6Y9CUK:OO9'BM17[BJ'AFE,K98+)-W6[@PG0AGSXS!ZPLSF>45(0\,PAG._ -M1.4J#("JS;!G+:BRGMM4/Q<@)@XF1:9E#!XTQ$BQ$(#"**(">1"C4GF)%-*A -MLE7/ANEOK:H+MLMS-H--E]\;$YJ4.$TC+CJDV/-;A*9K5FXAED$G)XRSF>8: -M^C7=N#0V"5H#8$3`L9O#0#,BJB!*5,&-CF_JL -MMH1QZ#$#*")9?&MN5X#.E,$$;AKDT8V!%+L,65V*+"MDBYZG<\Y%)9]W6S%; -M_BCX7C#@L2038(U!^4A!S32-IH6I6=/J/FXJ*(QE^'_DT9#JT-BWS&P445HR -M25@A&;!::P&9-[[9EIVJ20Q(GBJI3PEJU&VT,+,TFE\J)"3SJY"AH&R]70!@ -M#$BT\_VDXD^'OC".D@PS([;I8]Z2:4!;KLE6:"@V#;?-J]W=LRE;LA4=O'A? -M9A&`P#*8+$'.48U$08TVFB/,U45F`**Q8-$O>+_HZ.&N"EC2+490RM) -M)L$-[PW.>KS1NJ[#2K0#8X4RQ9_W2"C3PVV)F\WPUQL)=R$`.P8FID'+JPGK8DJ&X(9R4X/8*\.`N+,S:>:DE>;;+<8%P&)>K6=,1#L9 -M$.DB_F)J\&)765DKFH1"-4+80B+9(A$EH:HWHU>:!EWMW7$T&2^'N8>S6)C@`4&9PS\92RA`Z$FW6V5BD06 -M1*3"QA;$YCFQIMC181$`Y"(G0F6241!*1.PB4X"Q6--P,S#E-4-@VF37%A5Q -MN7T^%*BS3"1Y]=F+&X_/A*Z,*7PX"G.<60LC%]\7=T/2M>?KQP<4+2!T21IL -M:?&Q#'ULT--@%.+-[N^4@;ZBU#8YTR2`79.3OYE6"H2?!J0TK\#$Z-R!]Z\- -M%%F,ARZH0PUX0I3/C\51[)E40X3.1G+C,N!-V7"(S,X5M^2@6,38AZ1*]??E3)2(+(J6;!W>[)SJTWVI7#0LBR/%F -M$\,BG?=%C::R[4;V]\>;,L9%D-2@J%0L4())#EV106-PW]4W<4Q3;,U*`L1$ -MC(5`CGT655\.JM!M!NI",Y#(RRR(IDLYZX;VTM#M>24T)6*$!%`ZE"$\]PU@ -MA/:`5HXQU=JAI1>4#?(GV>9?EUTIJ:BZ;VK?0@G3`G15\">`Y7(VZ;PCU.@Q -M#SH2RP[5$5E1$6R@0@AV%!,*Y1$#A"!P(W-(WE,CM*D>OC0Z^(X]H5J%`UJN -M:O.!O:NQ'*>N062D)'-@L32(VE9(1,$(&*%3-.9D8"HCD^MO9E]2X`PZH8C@8:9(1F`22B2F#!$"(7J%LPPA@P+`9 -MN9Z&470-8C#(;$`QX-;IH;4]8SEVM+$(=F^PR3S7IW.XE8T!5>0%[9P=&:(( -M,A&O11.FX@4[R#/RJ'&L^A&@Y)C8T&W9%Y3/K]#B -M2[5XH;$"H=H%()HMB<8GDW"C!Z:VH1$1F(B!N)O+.XA--B8-@[%2Q5?3U@G` -M26D$DF5T&@#9,/.UN_QUD5A?PDSR#R>^I5-#DWXB,5\L$F:#9ZS-6ZC;H<#Z -M+AEL@8B#-['3#2(7F3H@8ZAL4UO:SR5B"]11DBPG5X"D31"PF8M\7+:+S2LW -MFL$:[C1;[X2N^:J8<4=2>1@D'^W.`40+$DH(^=8Q$CL`>WV%BBWU88P>M`:C_*Y!@."$AM0TI"04^ -MF@L8";24DE":2(!&Y8A*37M"<[%Z]'LPE`*275>#R4@\L/V*H(503$XJ&2UI -MEQOK22,U_8T"_;C=ZOOM@%7S$7\:<3$)\FH3PKE9*EU1MJ6B1OPJYH1#S,8@/8]YZ;6.'D;&@8+3ABY/F'$:NUAQ!:.P\":9 -M0".Z;A',LM-.LV,U:]D4`#-0!:47=W9DI"$7'.*Y&(+EQNZK8(F+X"."+,V( -M4%4DPMJ5>T[J[L[X\AVK*`A!)(G2NH:K>.)W`0'RB22&-IDO:+-LTIHKJDZ2 -M0T&5>LRN4)(!($:4(QHT4PZ4HE(H@B)0&-U7`M55MPXQM]SZ\']@AO=A+>)S -M)$3('-@&]1:"#!H6D1!1$%H5%1JJ*QF)TS#&'T+,LKN;EM,BZR:;'X64:6E?+"DA8"*-BT -M"J8!E=%**#-]+:H!AF*Z>*"%/C`G/'`MB^C:0KFC114NY1!*]KY0'1L7`,&' -M`PL0!F2'@4"+!E.IE$2`G_WD$:,`,@9F8W>^V=)\@G;<5C(:[D+![.F5TTD5 -M#<+9041F-FJT&U75&FN1TU196A%T\;HY&)T#]XP/CH/,S5;-4<>97/W9P:FU8*Z448<-FZ^DV^U,"X.8.AP<*,06%C6FR -MV`M,M60#E46C"VYLKZ-')9GXTR9S'/\=KL\J^8]O-:LMMXZ^CY+(U -MA\L^9>(B0K9+^^5J52;!_5*'6.95CGY0;J_#/-5MH>F>*)>;-:30++3H3(/G -M^2,OVZS((AP2(&M4,$T[<=BP6:5C*O*XZ(U2HDH&H(,9(0(+(,E$I08Q%J4B -M1A$/*^#-KN2]+;9%Q02['JY[,N9Q#T@^,B"MKI$?#H*J#:$0"3(B_E.-K',^H>.I?7T3LE&= -MAY6T4D'(:8^7=?7_<"!"UYY,N-:5YL.UK';)LA[)K@/D[5>DA39Z*DM/.\M( -MCP/<2[?<@'172;O\%SKD:8B*5RN1YZ=]Z>]J%!]1N:86EL$>L?""B&1Y;??$ -M1#Q8OPJS'!FKK$72:[U$:6%N38M[R6T9L_-\?S]GKCP'*"/(M^Z'HE>*F.:1 -6"B*@22E%*JXT83_Q=R13A0D'@N8^0``` -` -end diff --git a/contrib/bzip2/sample2.ref.gz.uu b/contrib/bzip2/sample2.ref.gz.uu deleted file mode 100644 index fd78424a8c31..000000000000 --- a/contrib/bzip2/sample2.ref.gz.uu +++ /dev/null @@ -1,1934 +0,0 @@ -begin 644 sample2.ref.gz -M'XL("%<.FT4"`W-A;7!L93(NX1)(!DVDX@UW=4SY717#5W=F4P@""XL2L8T!?44&2#L/(`@"(*, -M+`HJH.S*PR(*@H`R@DL0?%#@/"?-_W?OP4DNZN6W,V7#%A^/@WYLO^.I[&VKYE_);)CWP -M/TNO&+-#H3!F(CPR+E?J7-O2>L^*2MG+57PW#..&0J'-=XK]H1?6&I9>ZY6Y?V:MX?A<^6.EVHW*UZ(91 -M4(CP+PO6U#[:_1*G6'4J7N!'';4/KRO`2&$A*)?<P -M?I@1G"9,V;+#WWK:%H_91JQ]`JP]A&.??G=;9U@I.[G* -MP`V[G','_W3'X(YO/T0_Q?]G8/6SACJZO3"VB_?U.KT;VQZ"%?66W=#U-]XW -M"S8;CSGOAEZ7CTMRHE"14N00'='OO::!:[85TRDY9:_8'V>JYWO^)AC#! -MZ>AV8^NTE]4[NUS?+3M`KC"[BN,5X14N4.,9946-%:3$)C$64V1LOS+5\_'/ -M_).PZE6OMA?^VCV3=F: -MW?&;/M@M-W*`9CP7""GJ"BYN>RB(\H/PV][(+=.\@=*2X.+[9JV!#Q(G@35V -MP0<%,7;9=6!#*UXNMM\]$S8'=QNH-,S6,LT/PPZ'WCK8L6HO'0?,-:B&,,.H -M".N`;1YW_]O'P:K=&&-#NF^'!A'KAO%RB-'C(J=";%9G`#\+J#GA#DTJQ -M/SJMZN62'C%8)8CMEZ[MW`0TCZ.4`WFF//O>)/!HD5%?MUM&VL@%9?@0J`Y_ -MXN'>XM>PDV)`7`SN7[$8VY,[Q$IH#DZTQB-"@[?@)0N`20`E-0]LWOZRO>C9 -M9=5RG/GZ6:-=+V"1N#K'\_$ZEETW*CFU,5\?^`H0K>?[0<)TCP.&S6(J"[UR -M6%&T]7;4!R3C#MH/[N>6>HM!U`^D4_+6NOD$CK@/#C6?`!TDG4XNZJ&_A@F] -M7NX[7%P@H>+V?=U>#D;J'LQ,_1K`!Q,7 -M:-5//#B!;E==;:0@)*Q[%@)9=GM=L,514,[#OPM5/\=KJ8V;M(`EA%K)ZQ;? -MDC`HXA71(\*`U2()*ON9N\MNK@I\>`T>1I0/2K!UD7L:\P4@_Q#/#UA9T-M- -MEP782%[2A%LNQ=9>MY6EW(O"?F#@I6QL+2WBZN'MW5E@9?BC@E.&/Z$LBGK@ -M&/JR-?A1-WSB='I%>-H-Y3UR@/7,.K,3V6L_C``KPDNTQH/[%_&KW*@3^$)> -M+`QD)[(BP;\CW#M]*^')"BTEMAX>R].#OG0?.^T*G">;MP. -MY+)R-X$EE-U\;'_U2@>.`I@EBP:4"#1;8@=!$D3NVM[$]255&1+#X$]20E@/ -MA/+ZX]&,>1)E+#."7J\"TY&']*OQ0(PY5QQ.6`7FK[=+#$IDT^TPTX_M5S\% -M[RR[19CG&CQ@.(S0@UN-2I&3].-%W>5,)%48*JQV=8$4(#'NP8EVJ@M-A(4G -M18OL=F!12([(;:K%/)X*T,@:D`OYJ,]#05&)2C"#:B[JKL%3@GXB6H?)QGPW -M'K?GJX+*Z.+!'TJP\?+R1#`O!U_NECTD>-8%0DE`>3?GY-VI89S9_!TGSYP- -M-HCN`SR71YIVB'[PKA0J"2P:11)I+E)>2:$#8G;FU2048$(LF]P2RXJFHNOD -MA:2&$UJ_BDXHA,D%R)^+?%&":E=W(J?628([L]MS4A_R#7G7AV^1&@OPG`AO -M`@P"ZD]6/`]3CJV3CB\Y/4+$A%(S`'*$PR2.@0RE`-N!_V5)$7H@.(!4UB]W -MB?2D'@$4GXG_@ML'E(G+]V$\E/'%`!;8A^\`IMSG1T6\#N)%`6]46EATX%3B -M3/;77A[6`_13O@/("\D.A1V<$>S]8M?':]4??2Y"'<&IP/F%,.#*#8N/FS5] -MH+;+NO=79P=PM,WC?SSF_#%C0-$_]:,K-D^8<3`HJ[5M#^S<_.]_E;=L=^N+ -MT_TQ#:AYL_8=]L^\$[3TV@ZG7+9EW//1%L3#@JZF,IY05-GX\*O]<#M#MX(\&Q3&,QZ@\^SS0+5`6IZX -MEI8QL'D":*EP=4`7M&Y[>`T\APH[LB9!LJ@$'[J76P::WKO0/3`@%>T+Q_P# -M>$]O$:]A?P0,PWK[FTZ48V("?3$J!T57ZK;+EZR85[/>/AU8?!(4J[C9<(#O -M+D:B%0R(+C6<):G--+A0CD"]?&);T-!`A@FEI1,X`XXJ^0*\3!`:,5\\V:2* -M%YN&\9F_X-5>N>&XQ7`Z,P9J!_S@GZOAJ(Z#NS*K=:"VZ[D/K6X>N`$O+3US -M$MYBT*]O^(U6[;*#UOU?A/6P>IU-Z@T!(M)1U!4Y#SBE.'/12UHG`KIZYR=Y -M5%#QN@!/$6*_J5Y(X"Z!>J]6Y++&%=MK_CF:BL^J??1Q>KT -M<&TAZD/8J+G5\F&'#@SN-O#J:O[;K):!9#4H)*^&Q[$]0.,5/3@!IPR;/?-; -MXA*6/<%@PKJ3!AT(6&O9Z2("S:R?1$HSS,]=ZR#WSLI!RU7?I^5NV`VV7XB1 -M?*0W$AF/$ZVH^M$*6$JNJ64Z*$8W;>-$A[0<1JJ\'$E026RO/[D/[ZPZ)+K1 -M!Q\#W)"421`.M",@,>#_/?)7[EJU?9)K`5-=/DG)!Y*$ -M2GGN2T@>@9"LEIMKXY_^[S84HKZ#IG8TL4QR@\\6-['$M.OPC(82&I%7:C)VCL4M#!A5FD'UH(_)4K9.'JLL9:?< -M56795&#Y#">,/Z`;,IK`$79&TFU>$_NJT_!VR15LDBL@;NZB:@!:5TJA2:0Z -M`X^KD11[B*V7K"(8AE6G"\VZS+8GM-6LW[VCK08P`D!-98T$[)>"*^0POD+M -M`5[FV#[V8?P"3B]/+%)).-J``#<4;4Z@%5)B@7J^>"U<5]3]0.[Z`(2RRX,GO%5<3ISN.%!JT[D8P:$%U*ZIT,>+,4;\CLIF8_\X:P"K^7RWMP+2+T*>"U[G83U-P2 -M9&],B8FRY]QRPK3?9%"PE!-/4LNAB'*-8 -M]+K0$AZT/UR$VD.0H+Z:T'C`P0[[.LXMP9Q#FM/Y.;BU,&%%8G#21:>LS.SNFTGW+/;#C-%(!AER -MLN6AK\T!I9^$-Y\!;E&N7,W#VI`K.88:@@_M^1/FA($?B)'$=L%)LF!,&8/` -MJPZZZSAA&)N")R@#3RB'V4'[DEZ8?+&*:ZK97VTH14"2Q4(V$:0!=EQ#A30_ -M(?"B59T.,C?X_10Y8F/H@K)S_[?@+BX&P5[;==\C^2ZNW+#"[4-]:?>#)JV> -M!B3XY.WX<:]A_.!S[G9!67M_0!QZR-U25"QW+A?;DZY2G+OD@DF1Y$G#<%"G -MJ.VVW0F@5F3VG'D*J6!\;0HNF#1Y.,,DK\@%U(MB@!PS&UM/#WJ50>LG;\$R -M2F&6K;_^)(_N0C=,X/+!0?3V@L*!IN?5[4H,T<52+)FT1&OPB';@6-$7`M\- -M6;%HF3%]^G32([1W3K#]Z'2^0"#EL0VC7U>G(I%"K!=[. -M=I@/[-F)T,71#^OLBP2=*;I1V[;H7*41PK%W?+J@5:5H2_M+URP=H]S8#>@V -MGS7<7G)ZHR$\L.'V0E#,EX>R9!M64>%QE*+@`"<_!XB]"_@3'FJ)";&,'\," -M/#^LD,4)6M$/QLUSB36KBW'_A?6T+(?-HT@";F_U/8[L+^>@[')\@>0]A6^&SDC1I/'4X<@-A#@?\L*UFE\8H^K-+N])\T0!#V1L*9P6P\*)' -MEJ6>8:YN/)C=MP]`F2_\I.@YZ/*]B3E'2D[4NXKD$0,**+CH^@0KETY8'5&U -MR$(-:`PGXI25D`6+!7@*_W,!!K:L,9_LG\^/"&QAA..#L_`/[!%JALN26737 -MLC5N>8WG]H%B\CBJ(Z"(+2R`T;%YY](>[!ZB0,$Y2X#@X=S0L!`\GGFV9,O$ -MA8BA@856$?$)4+A08Z<7Z'@&>L8F=YA>Y2QHM'!\L.L5E,+P_K*,<$1;EE8F -MGC_;),W.M;.&E[;YOC,D3"X<=(4K0@G11:W$54/FJB`2-Y*S*D=6GBLL#(_( -M\;\.6H*LLPS$5`4"EGX%A2WIN*(U2OK7J*N/-@`L# -M](A3ESZ%3ND8VOYA]IN&:6.*^'U`U%)F)XFRIK1M)IU,[.*^3OH8P+`]TW!I -M;JP3H71-\6J$]1H;Z\$Y<]@XXQXQ`^3MQ*EMM4S^-7YUV6,Z5K9\RB&M%6C0 -M07-ECVX1.06$2TP<22;[YB$X`DB':A=8@;7=MTQ=C4Z1)UE5T-Y$=NB1'SWJ -M!)6L!WU1^=!P]V0N?1D=[*3BY;5/$D;[\`$^;R0KKT0;J5Q8>(EIO";CA'&` -MV-[N8$-6[OZIN>@S[`7NCX]\I0I:J^N31V05OI9F,X4M8SE427B.BV\#O5:J -M9=\PO*5$0[,JRA511N>\"J@>/JIC`Y?I.^"%RET'I!O;#XT)T37:B7;`UBU[ -MX)];>HA^@;B!])#1F(?*7`7XMSFET`/E(N]4*/0(%Q>C4)*HU"UZ]Z&#S:AE -M=C!ST&?J?!>F1XL4ODCY^"4!D/D?VV<7B11)M`L5%?Y*@LH3IKVX4C+.D,@H -M@QA)Q1IP05JMU"I3G63%`YWLGL"3R -M#.:9L;-LPWTVG/O6NF^)*\'V&W%_#CP`]V<1B#H<FS&.'Z(A`11U!YLY0 -MC@G@^4YO6$7OH<&%!VMM)*:??I&9+^5,FCL -MM-$@K83#(0]\?M*C"S!DAL^@Q2"#-?PFR?5!V!/?MX_[#+G:@5;R:`KR419) -MDI&?)\;0T][P_68VR0*Y:'@!R_.;!AFDW+F6O,X@Z -M%QW),/EOGHT&9VP'.^DH4L3RMCE94<>GK0>"F:B;Y*IAB-[M8I%51'4[44=] -MG!V0\"W,OT@.^)ZH$Z3>]J`L5HPHGZ%\&??%"'O!Q?^^!SOWWBS!SJ-#0`FD -MEZ*[75*=AQK,>Q1(`',*UM>'IE>7BX:CY+G`QV+KZ`L=.7OAD"'91)QB:E@7 -M=@`FV;,O\B\BAJ(15D19`*R@4"V3:P2-$S!IF@B$HU'F01>Q2 -M`0I:9I%9I38O!,V^HF-K(Y`;@IE:/_J;&%$MRGKLZ=XR=3K=3HSGP^$TU\;]X";8:+@"H#HQ@6_B59.2E("Z+K46W`[S[;,]CFHRVE&^B*!M -M(M4*S&R08R'K#(J*[?&6'%+*1]P!W)O,&8\AG=*W>=@9WR'9*&8&'#,0CBI! -MR12/K4U8_@)>43%6CT\106!Y7SX%UDODPLI0E1T.AIWO%JMY=`Z&>^`5926G -M*%1[7X5"2;F(K6=VEA9_!;V!C_4[X_MZQX;0M\AQ6X4QH#IJN')%]IJ]G77"U//RRMS -MLI2@]<'&B`)$=7H^7_`?[8C&(WIH/'\(N?;>G4!Z55\H,<`HZEU-]",BK1+P -M*F8,!E0%[036IA->IN2T\V'FH-3&&>\1?MIUNLIHLX*-FI-!%4E$!$8#=G+? -MZR30",2C+K.X(*!G-XA8/GOZJUZQTH01<9CQ)N:$RM:&69^_BW)0PC4(DJ#H -M@C23E,+Z-<,?PFQL=WP#I8O?%68C!.[!%5WT>[IX58QTP#VY8]>V(N,0A)N_ -M1-(,[#F*39.+1(2/Z9K%UHL_`G%!8L+$5+*]S_($9OG'[86-C8('D5RP\(A8 -MAA&0#N+,['G,D@MNG@(]36B*!N5B7G-_>`GI%:!`DYN`7$CN6O3ZI]S33I&& -M\@AUXA30?44K2CV,O)%#I$9X^CA@=O`M"("N:70$Q+TK2GCCQP'Y>(GMTUEZ -MA*1P0&%R2J[0MU(QMRN75,K]`KP$?*LO%5_;J`!#0/,_7KJ8`+XU^Z<+M?:G -M8L!!%UM+L?W9WPH%B]$$9+X$^#&QR]FUS)ROF2:T!`,BC,F>]I'@MSIXU,LG -M3;'O3/4)7LDFUAQK$^:\W-$MHSX%)R=V!?$P%*%"5P7\.8BT4Y&=A;21UH,G -MYI`N$8%T#^C!.C-N_J\P?)H(O3PIH$ACJR#17E12N29WI!:?.D,5LE!:R[-3&>?6EZ"` -M0NGCKG7+.;`03.69G-MI!(5R:!(=QU;'5-+;!8*6`D2P/^M^P3=E:Q-"2N,X -MEZ-C8@B`MN[Y#2OC>+#B4H#E^>'?E_AY$),P].,;TN3@8%0!=KE:+LM09FI? -M_GAG6$)?F_)I"A*#S8TO!FH8A%_PU$#+ZP'9A9%*$,.@R4C#1X^(;XOMG^P. -M0_6Q9Q[Y0UZ&VS;^PO2/AOVSAH_;$=C9A6,GSGYEB`.6P)$V -M,H@ISLS95N#%21<&8Z(+(V/GO*?Q!K3%O81)(DK"@4!+EW#>V)[^JC9LM5Z1 -M`T78`\8&E`N<-MB;<%"*,G"0?#4'HN2W_<-+YX&Q!)*K8=G7T./G>W`0)CDI -MS9Z##:$

@]P'M*'-!(*+?<6G^>]M=Z^/(WE0331*F(8 -M*`1[R5NL_-Q)W9O49`CC^81I&05DCBJH(O"A^!8ST((#@GI01,^3'$5;`$US -M:_:=Z^>)IV/[SNM7;FC3/E,@RS'=;47<)S9[]1FH];%AE]GQ[R"2D7J":#0( -MIV*4=&QX%$T5?4CX=S2[ZHX8),@D`I\QX9DTUE;+M#^:=QE_D@?3O3_.+-U+ -MOPZ#KU'86_1$`H14Y^- -MQX7H`+61B%N5/V573ON10F,BX44>)"#,GS;C)I*L1HP#\CAI(-,XIH4\-X,[ -MA&`(3\0D4.7:R/#Q*+5D]GDA/QU]BZS'UE%D-[8>NP"U-?+2\4SI"-@9@,$C -M'=)%/Q8:GVJ-5=PGO!.QO>V07!R0V<3G",`):ZIXE6J%HQ0H/2O$Q.4O%>7Z -MR%!WFDVW"^PJ%QCISW=[MK'8I8:F#=?:O?B?$$G!+ -ML89(:[YRE*$2;0KH:M&?6;TBO=DCH7#SX\1">6_15X001D1ZP+Y4E;,0-UGQ -M&+1HOGJ'(ATT:4&,L4RGP`VB5(3R#9-\<^.20GV6A!PK!.4AMFIW$^$4)8.# -M:7UWHO8!$"D*ZT-QG5["@#/3$K@S:^]=M&\9O6A.&5.!A'W,WG`$#6B]HY.E -M5+_)L:[=6=D-]B-6E7T]119:['4D'!.)1AG^H.GWZ"U2!X9\@E,QMD;XRV%W -M-R$8&N3&^&80[2':L+#[:[QRX)?P&$(>/#3OI&)H:2846]XM2.E*"V$/&M+* -MJ[,8A,0&-$&/K`MLH0&:VVA;)\(/MD?QYK.T$GOGB,@LT$D^^D+0[8>@WS6% -MH'@7U2!%!W4R/(*\TU3T4.T>M,[?>>4&^/UA,P=JN_YT%DJ3:_XENK\P5OY'L$S4E\D0HJPWSXW()["4L -MOL&^1V5F"(>A?%^[5_3=_@J;S-ZN$=9@J:"WHP8\0>>7VH^#:;?&-(+@:BD\O8(R" -MS^@&*:WG"00/'[4+/'NGPRGC0TAB(G70GLHN.XSAT!"KA6[]S)[=RI1STD*^ -MZ(+%:N]35=%#Q,H;N9]\(MV.]VCQ1%S-5$;""J(HP#I"LLB1*YOCPA -M]V//R/YP*>X\(90P]*=``/DH3<^(2+I`Q%_4'44Q$F- -MY-8GXYI<.,*UX#E%`T+!(\69W==A]%%*E6F28(@ZP49MKHUO1&^JB/:!J!!0 -M4"^UG2DHOPOGAH&%+38/OX2931KOI@*_62>.I*S,8^_)+WQ -M!HLV3B>V[N[7047I?"/L'LE[>O()LFZ\/&5S"#/-@0*SK2A+UI&+` -M1C`T`X;"=#Y8/EQA:S-R69$5DV!.3"_"=CA@-6X5R<](73[@N&4D;0_U.1RH -MTDV0Y]C^U<6L&)AZ4CJ9T+A<)(N;Q!"L<8'2^>G=GB=7#Q%,YIRKE78=D?&. -M:&9MJL*5[Q)Z-JLG@JA4>%UH*+$ULTPQ/`S8YKWM7)GRR#D_.)0,1J@@5PV> -MR6$0&X3-4T\((*B.(Z!C6IW"4Q/1+W/3V>`/5]4V<29QP\)$F:*IA6$>/9&(FR-\/J>B^D7"8(%HAX,2E`NJAB1=9/8[MVL -M%L')UM5>.-)SRV'`@("1`2RY.D9/3.XPV5&1L0JD/_:(Q;*IQ.(XW:EAEG9H][8*OYOI%#ERA99'A"9@),)H -MLVO(7G0>(H>`"`UA`TSV]HEH4*&<&9E[HC:7!$R9*`Y8T+9=?2))IJ'Y1#:Q -M2!>G%2GH-0?<22&1.TP>C'-.WGKBBLYG(MA-'1!!G!&Z(3\SS**AM-X3V%FV -M-/A:E<@%`A?/Z:+S%90>B3@/2CO3LY&+P%D1N&JGDWEF6TO^*:&W/"I7B<&*_/$, -M>G-\KQ>A%SA(P[,[P+E^S)9F:^/./0/42+9IZ:MN8ICCH@HK2OO`%,_ -M[16#2_*3C4N0]8!LD`$L=-L_2FE`'$ND!'IVA4O9U=_W_1]]=%/AXN]]CSJ!1BXT`H-.;Y[>.HVG#*.!Y@RGRS@T -M4FO(F]Y+J-><4$WS[AJ4*L6@5R0WW2`Y.ZRC5:[C!$I/\(J#F:Z%E(H8J7(" -MF1\]B"DB*A^D#P@B$:I7!+PD*;@NI:S"#\/`F(KU_MU21Z64(Z]BN-M'`Q:@ -M914(W2!#NKA4O-"NP;BLZPN[!B<_0TZ>,,#??(*,&1DPJPAL*!]]-K:N^CKK -M@]D(\0K??`()=7;-_O7-=$[=3EX*E(LIZ6?0>C.3%Z(?M``PD\E:31`^G[!) -MF92<,N]M$=A.@J<+&IG!R.G+0>M[1\%V2G="!!1J/7CCHJ!`7H'WO7:WC)X* -MPM@D,B7$39`6Y$A=:#'T#=H_W@]W#?:\F*#+OYC'_P`32;H=3.9)D)F"$0KB3J@(ZD+R$02E'M>0VV/N?G<578Y.0["%#DXC1XA]Z -MJ>))'Y9`J:+:]4P?C#\(CR$D`UZ&9*>1A7AK02G:92I5Z&#H`8&5C#5VE=F8 -MS.SSILS,S[L38?XNI2<@J,(H"('$%B@T,CL;L%[!-AL$=JN5ZA5TU#[*/NKF -M&+Q=LX]]O/?BNR^1$.X(,=P#F[$0#SW3*@#M*V"]^%M\C^=CBG-_'9C=WONC -M.@`8AVA8PC*<'9%U$0@5-5#0][^:>P -M-$>Y/Q%.#E0_\W`"!&DB6DD(N"D2.6&[GKZ68GCPOP+E?VJ.'&?&!<-+):ZU -MEKD*5%*<@P2W1D-&M#,S]PO/+%W]<7]QAJKHT_+PO;E@POY0,XGM@;/&D)X#9>B -M86"@K@Z"V=:'+0^VD1!I"%V -MF>%]&UY*J6*,:M:12/1Y7O`+UF>&LA)A+7`M]"A*7!Z6PT6BG(/(>*7\662V -M;F389BHA5"&97188JB3$#6;4SW`X(97R2:Q%")%K#>5!S%?PND=.*:@J!'^] -M?D>63#>R).G"X!ATYN43'/:>7"X:68)@&'`<=9LR_=1BT3V$AF_N<[*-FE+,!0(I&R#O9#6ZZ=<\/M -ML&TG.L6A=,YXPU'WJYQQCT%LI+832!"]AEQEA8(D$AV)-Q>>ZPZB/H4)(:1M -M;/^V4<6;C=HZZ3(QOVUL28C4ZC)E -MT0+R?/1__T\A!";TO4>(ZVEJ9P0<[S_0OO+'<[!?A6A.U[ -M+XZ:FP$B`?-,I:)`,7X3K2,7AKQQN/V+T1`JX\+!/*/YD.86$\]D+#RVSMLS -MO7;!]'C6V4'KFB\2]@+S:]QL`K\"W013,Q3`+]\L)['`8<%N73V7L!_P`KH5 -MH`?*)$>!:U79"XG)CFKV-E46J$,:M85%:_P5C(!+(3,#WZ0KVF/RAJ#2";0+ -MJEKD%5AZRL'D`,!08^NCPU+P>W*_&6D5(OT,+N+D26UUNZ-3$1''O^Y1PD*C -MW3SJ]M0:CGU615ZX<`Q'#=%X'26_>X]J_2%D5M[#/C0T5SGID>I9)*8GEA8` -M.Y+@?NBL4'H5G./5#Z#]#OSOW-7,';M\4G)''+Q>N?W6/DM\D-M./IO0PVH? -M,1QN1Q](Z)QQ$/)IN":W7[^5-,70K'2!(XWM8%G'CZ*^V-#!'AP7RS>R["53 -MGZ/*LJ8:F]5&VBKY59P2A^0T(I7WG@AFG=<@+TI/J676'[@$+NG,"]E;#M:$/>M3>V+[C1>$>)N`3[PU0W;\F=%!4!@Y%L@+B'7@V -M+]ZGLO+$..ASX9I@/ZVA^35HW?IES,_D>D;O/W(2VCAPH*#@P1BB2`-]G81% -M@=L"V]M34#J9SPA'TMK,W?;P,_?#1^A -M+K#HKOE,%YB14@@V@4T#%EDYJ$^K9+.%ZR2UU>RC]V4I!^1U].=%BB/KVBH6 -M[J7C%D9RA;K?A+X`G>-]X6B2+D:C2F>)*81*<6;&+Q\95'_E.E1)C#)`@L[C -MS*S;==69LL:58OI-PBS>$=,SRY0:;#^MH\;6*W]*>7;KU+4\&1=S,>E2EABJ -M88DAF/=V5RF]E"X2*]VC/B^P6>3W4`<%UN2%8W=^_ZVY3LCFY,:[+^FGW.C4 -MN>#7L77M>

.3V8\.%2>B(6'/Z2/ -MNOX$NK%PSO7&1D#>5F#S43>6[3',HZCQI,5+%TZKV_Y6WOZE!J3+Q?NB[!#8 -MR-&/9)[@X;$U_QF=IVXF1HMR6\`X/3@<$S66N&SH*#9";XKMTEQ]P+-KF4?; -MA]L;X9!!6[X[AO].&\)PPN$BZ4Z%C;'<1)%=-WHW@G*8@DWO<0VG@+-7S9<> -M7U4]#4SE$*LEF\'%/?])D2B7M3"X8!+-+X7&@WN"*;R)$_,CCU,=P$"/W/SL -M6D/?1S![(JVU42M.?=QG?][FXT.I:=:Q_KJ`]@P1T,Y\LH#V$0]N/:!-CAFL -M'=OVG,A!X+*-*LM,.LXHGB/<9HA*3E.[V*Q<,3!J)V.ACM@^[?[7T)[!A -M=((89XC@5+#252>B%%W5%4B4)._[T!1@EF>?*/.]AMO72FG0SZ*@+@O,6#9F -MSO&U';3W_A&27F02WLQKT1/'A:6`"A*=A8-V2)K+)*JF0`5UF2JH&U\\42YX -MN/WT4[-('R>LG)Z=OCH;X7];Z+\MXN\M\/?U-7AF2#JYWU+I!`4#3\Z>!OC# -M;'91U4[=[^^XA_@\/O7%KE4'U?8ZY1NK\"]';O\)WZS"WQR$ -M?X'G>5;XEU+['6>(_YZJ"M92!"?.[+=*7A>B+*58<$4LA:[<&H.7V9_Y0?NS -M.Z)`%AKI4;7,,5L/1Q;2(GW(L%-YRY+T@E(9 -M]2Y!M>Q#_D+ZI-B].G=I+7-V&X?W#_D+S0J#$LS(15D4WN2JK@+-W\7V-S\- -M.TXN*8*2<*VK,-+9/DA"CH>%;&51$!#_/;>F*\/1\D5AN,D=71SD\&DZ(P6.4:1W<-R*FV$T!V77$,(2HS=^TND*+R&L",(R4:I[65Q_BG,)3"B=KGRZX:GSE3]@ -MXO$[H`Q*Y7:FIHEK5W,5(XVZCFGQ#MXM0PQ -M`%I#\.S+#5Y!*%L.O)JOZU`VJ1]?C(A#Q?;I,Q'"(@`AL`%+=UJ&G+S/P]H" -M]D4WPWB&*4`#U]UW=2-#N,Z?6S!B-31E1G.8J+OQR^8+NX88K_JI2M&G66VD -M3-G'-Q`K$`QH2"I`QLC$4>HF)K4J+.KRP_PH#!T_UB@TKK3C4(1=&2B1X3!* -MB5[.JIS<81(NII([0UFI]>7=7-%A)RQ<-_+7U0&D= -M*\"4.?[X@H-9J%\^7D@/`7&KDR"X0MDP`D36D]USJY4:/$RQ!ZI43D^0Y2BJ!D;6D-,\>E1KL.=]=B -M51*SIC!Y2?[R/RG]F:MJR*D!J]GFMO^L%:IX@M#H8_O:`X7U`2SFD?TPW<'M -M+3HYI6DZ((D0WRM'S`JYVXK.BU_^8RG-QZQ]NI&+IW.IOM[0K>:#)N.NL+9_ -MX5C;U&96.JM!`UFYFL)WS:4W2?%PHMD1?"&=T4.(C.Z84(>,5N)+V'>X"(EQ+Z@'$`68B>K4L!,QQ6#_ -MW?A`1O-;VK\Y -M'8;;>%\P0*&,P%/!X`.;:[5R$U)]I=_>`D(5I.IJ]#UF=OQIO;[!$`J!-MBZ -MFTLB4Y"4:,V(AW31'#Y]P71Z_X*6;+2@%;\7=O*"&>N'9H^>7X-V/=R1O7KG -M!_+BID09>TRB1AAD^M"TK>>LPM)HH$_?O&$641CXSJ)3GV(MI[7E5Z,GSW6+QZ9==$83`Y(-:/ -MAF_]^.%;'HI[S"Y4U4=J2)BJ6;!1:\ -MMB5I;FY.UOI`O"!9/WUS![MPS&\4M9M8H]A>-BA(VO1AB^M(Z6'F3@$?^E)6 -M*#I82]R,`W(IIL5IK^IP^]H6!)*HT)^A18[`1@@>99;E5UL$YW*2!:.UQIE= -MOHL#CF)ECQB)&Q2`@J?F*4<;S-P^CQ#%7UX78EDET/P^$'TL!.;&=;.)D>9U -M<#81/%L'`0A]T8NP`-#9+B-%'G\KY!?>R]3Y"U:48E+B2O$I8T*@=?D!*CD6 -M_9.P\9X6O:)HA"$A1Y2B9#[)M2BM2SM'U*(T3Q\X\#O[UA7OMNX81>A5&&PXX,B@['6)^FK`EBM*U`LU#003I>+I'96HI;@A -MJICU-M,J$PFW(K=^D:5CFT;G[9X?-TR=1O<*I@^2VHCTR_P7=H%?S.F#Z,2% -M)R1_<;'I"0-`5`A0]6R(QVWY(_W0J1C0(%D"3US`YMJ./\PN*6&-&W),R6$4 -M<&?<#<\XS"=QK$V&T;'2GT`DAX_@!E1^?G4[ND`'VP;NT-7Q]:MFX>\4*XM\+'-%"\=C/977-++PCEQ-;>[Z$ -M"TGS=;A@[3\E,(,P%PC'+F8H*1SNY2-+3DHM-[;?64PI[ILXR)QFLVKG,!!A -M^`,XK[./%G"4'&P)[->R]3E*ZA1[['JT3D&GV!/2_BJF -MI?<9].JIBPD$Y2\BO`]O) -MDFK,_G*DOZ_-X="@BKW+C:BK,[3KQKI-H1,E_U5?=U"4XS)]TJ%RJ7J"[6JL -M6U@9M`N/%"6?>H)S:\T"99*E(X` -M:NA%*TAO%3TJ*E(8HZ+'LT:ID.Z!M@HXF&Y7`:1RW?,FJXDTCYE""98(9-\>YG''KB9:Q`5WM=(5P46,,#*$E7Q5-YS;5#Q-SIN8&5^NY -M,SNZ56]0(6"4(:BB*F%LK?@U%Y11#A`#$T@./-B".M>A5NFTR4J58+^TP=RL -M)D5#39*&!N$GN4AOL6B]4OITK\J!D2II+O5W4-.IZ#^W<*'%3 -ME-EN+?REN&9<5T+VP1`E_G6U9YRV+L16C*V_;J.)2H7O:4L-T46UMTTPM91F -MZ+9*!]@/%@'VAD\68%]YT7\(L*<+LTZ\;&&$E/+:B[);5LWZRTJO$LGE$I7K -M/">JNZ*0L;QZ%62G]?_Q,7/]8ETTBMH(2JT6$]@^61C)\?!A*AM:A.^UVXM* -M<<;63_85A=TIYD#Z#0OGJ-/)PXD]]1[>8+Q-V82;EE*'R"])',CL@6LH+$E1 -M%PQ[D>!>.WMM."V:$ZV50=*A)878OO]+HL4G5UV,A.T4#=5=9?1R-N)8J#RL -M"TGR_^GE/BES4`U1N^.F3*X+/CO=P. -M:;AE$REP7"D:J'2S4)+L*7L0;?+BP+3HIER\%LZ-BC!?L02=ZH!-Q5V5DE>8F?$.)I)6>\/N0'Q%'=WVW8_0L6@EIBOJ9@Y:;BC? -MM4SU:=D=1+ATC5N4][A>!`D.46S-Z"H@0'A=<6:;9].U20CC5U%E"?`'BO#' -M_>_[2T2Z&%]LL^)>\[LAB`V1(E%+72X52`.:#U -MJFMMG`>3YU*A[!GJ=D31'_*8)NPO-1+G5?825CL7V2U\1_$=Y$MB6PX/39(BTK6;]?HL(;<76*V/R;@'-2*&Z -MPW6A5L7$IA1`4^*CL:B6TXN,WXP6'7,TMK-A%Q^YCO0N`07>-Z.M9A_3:GRA -M<\TY7\!(0Z.V9M;/CS1YCN'&@L,I<>5!8LS8BX:+!WAI)UIHIJ%-G"I5PX_S -MBM4R2WY#36Z*RP*Z=B[3,8LALEOHWK-U<^UVW3D"?#1:-@-%]BH>-R*A]P*HD\B=?82 -M/?5H7MCQ,'&C^N9,$NRK@D<'4_"HG5HN>P5R!R&2U/#JIC,3!R=D?VRBG10> -M&>M;=_EAPJL0?GORA',`';B>#!5QE%7D%`QN;3#8$MK5=YVQ4P@5C(&5< -MHB!53J*ZUM*CCZ6304XN!(;G1F=$'65*YAEWQ!'+5)N,V/Y%(D20GAA9@5ZH -M2MBK/E3?>4?6_F`,;)-PVD<5_$ZXA&3O&FKBK2`AR'ION5276@9+HELK>R'B -M7/;J;:-*N+`E65+K21/.1MHS):0LFP(#U^R"?">U8A1T*_ -M6N!?T^'_^%_\8`;^0$4NN1L!Z0Y3\[)!!);F4&4_':X>VZ3A=D:]BKLG6P69U0WDMXKKF=7Z#=#)@+9I#0/]D]:=YY).2>7/RQP8'7U9G15 -M2$[)01?8GX7C#R:'DD:6;E;5WO%U<>;RGPRWMV(-S[%[.532E%(K$!AB'MO& -MK8&B%5M@LADDLL%(P]F_(@LA<]A;!HY"A"N2$U:N7A\-<6R+%9/3IV>3%O3R -MCC_W<"HL;'0ZJ'1+7S4:_68Q,-Q(\IBKZSJ3KNL*M#PWWGU)V4P;/M:MQ-:[ -MWQYNG]]8`GHDJJ*#K>:!K_TM_K+M7AZ2$RSF+[Q)E<'[C$ -MO:9QC%2$F2D?"+]0XLVKN,I;"$RN!@,,=:I2#MQ(!+-+)?K-F)`NHQ;238'E -MT"U5"5BS!S;OHL3P?/2.3:OMD'U@#KZ//5W3A"R>WXAGR$(X]:W\6JX6OX09 -M1V*Z]/RVGRZHAW"$1OBYVX(`&'*!1OA7?QK]=.=S+_0*-(883X2;J&>MB0V/ -M\`5'=2S;OLOQV$3B@N@B32H*Y"&"YD,Y- -MRO>1-].)J,>@+J?I^&9F,:4-RI1B.)FB6Z@0S(<.2-1P*1J)<*V(6-C_"A,Y -M?P@CYY<+59N[[AS[>.!'_QD[3][F30\X(980I7XD.$G.XQ&V`[?>RYLJ9B@8 -M1+)F%/>K=?DATMP0BY9&`&:2V>_\*-V"#=C5MCXF0;+@+HFZ$3*Z@-%']"0/ -M6L^=J20;R$>L_R6@*,!H423Z47^2`N!D)DR;6ZTD9K@B]"HRT>2!0SW9TYVB -MYC"1IY\U*_<*Q4?P,=4_H-^(,70Z1 -MI,+%]E\]S`Y/A9V9K36)5"()[63]2:IWVE;)(1;"=>2'NJ,R3U2[GUJHA9I3BK6%`K18E'W[/6R!M]VUI'[AO^ -MMC']7'KGY(=R\]3G4F'`+^-][VT<(H4P4L);=8S4KK+8CE:S!T$,PAB)3O(B -M?/\EIT(_,+U'Y,8#)L^)6@H@:^!*5`T*JW(!9B5PZ*&;X@]!(C/"Z)8(=U9!(:(>D.R^Y:.5AEA"*(ZS8+*I);) -MEK*NR/JE%F:B/U`ZJI6-C!L_"F5I?*X6+0JURV#11O&W:?I/^L91+&#^66%0 -MK'*F7S[HK:0A4**8'LW9+0G[T2L:$8$N*OZ?>4R6,OCA/J(Z-?D9$%_X)!E. -MQGTQV$PV,1![:#ZFF"OS2I`7[A3<:Q$$X5M^?0 -MM&R".<":P>*3L?V3/ZLZ(^A>DRUAC>*'PA_*H];LMW8:;A>X8]A"A!5*A -M&);ZL*]LR#<2JFBJP9]3YB+CY!Q=`*$F'&3D25LQ(J#9E@ -MRU/L_)N7'5WADV3EAF,6'XO=AO=N_/7J>@D\@W,\Z:R/?7P>Y7=RPT4B61"Y -M]1+7GKFS;-?%O6%$%CJAX:S`%U0A(D -MOK\`%.P1#**Q,QN)[Z:R#+GR2GY6"2SCV[2X.M$IUW;=_+:C)!9].H^N*FK. -M=5\R@= -ML!B:*2(6XSY9Q&+=/SXF8@$FPG`[SV8>9N#N]/K)Z>GCO-J*)'=7"XMW6S5_ -MIX3S1RQBW2K9.C%.3"[--$L:'75@6WM,O+G^J49X9?K9:0.;)XU_Q6BD_/!V -MY#JC8OT2BZ,Q\'@A4+L1(PP9/!SYLVAN=CT[=\B!97V)KN*ST\(DYN%/" -MIF+K%@JUBMQ/GI\WEFZZ&.HR.R9WP!%R600SDT!U;G0J@YFS0*,1HCRT`X"4 -M%U$:&%2?,<=H8)%JQ9'0@:@P#O9.G?"D4<#>\W4%7E&<4]8:3GOYX(;N-I_$ -M:EWSM\R*/P@C(R\T';S]F/PLJQ[A_=%97&R*R:BZZCL,2N2/3T7F&MOO7F.X -MAK*#F>;WV/DA\61(S?!#:M\GR[2B,@TOT]/30P!=1LO))[IN7[U#.K$`P5$( -M_/C"4[`\[&T%/U-?1E0USU')?AXID)?>)KJBF7<'M9;SS`]3JJUN_T4TB\7A -M>C&#`)CPX)JR*/#1U$VZF`G/V&FN/PP;FO()=2-9#1A_*.=%%4D -MT"#'.'Y$Z57+P+A"W5>[#3&SFPZE/CB(*<,P'$X;J\;*@*/#J`G554)6YY`6 -MCVI]'%9+O<*MT[1GJNTDX6%UH@"7`\_D?M[1+1H1>.D,,%G#,[:RUSMEC<$7 -MII8?R%W@^X2%;*R5TQ527[Q"\>+8/K\P>E,<.*GK>I2`@'%3I(O>6%^!`"E# -MB]@(IXI4O%XJITPN,`,O06$8[E2X>??^MS"5@9PG2W2B$MY+#EVN;I*C -M<(QK.'<7I&N.V+_Z6:KF"`D+A8C+LU/+C_E)X*A(=?DV&R"(7Z0N0P[ -MY0)[R#_&63\0.:EU`V8V-\"[(F%Q-XP]3585Q9I]B8P'2.8(')H<":*1:U[' -MWP@O//"\JI*MJM*G\_J(--62,V_-UA&<"@K@:CAH;Q>:[Z!RN-*=ATW.Z1/, -M&T@,@*T9LLR;(49L3AY;K_^)]`BNGS#Q/5G5!)N"($5:?VVMJ_(M(@/""B*% -M118LC^V.F\T(*%KJU!:&G/:H<>5T'$4TLS'*Y$DIOZP09[YZ>0ZL.LH0>F&Z -M;M^-;,$GRPFX1UCU%!)!FC7PTQH\W!4XQ=GJ`-9Z)2\DBG/.=%1U>*](.=,& -M'@*X[9BWVKBN)QJ/1A%?K/R@-;0JVO2M-P'WC^WL8[+/>#XBNQS!Q-VBX4P0 -MH3\X\/(19CF)!KQP1YN`)2AF9<[`8(7C3FON$R8>[K\$,F1KXQX7L3 -MWZ$ZLN#E)?N2;J"I5<8-:Z\MNY2?@I$!1T":R68E#)TXW5(O0;URZ$/9;F'G -MO,!O,E`KH#]N"K4''YA.D0?BGG@2"J$T5*R,X5%;>*GPZOZU1D+IH-5Z02J3 -M.*)OHU0"<3*D-ELR5.!%-[]MUI-JA6-\_<@5"@TD@D^8*J&3CF7%U%]_VI.5 -M4[0,1`T;\VF_6I:USOO9ITOW/YHU/>+F]*'9BRJ'-0M@Q$O^-RAY%9WJBZZ! -M-]XD94,])++Q9,EZD8TC:JMP%41$?[5C(M#44/&E,H9PS_V.Z,8IO6!4"9D7B<(;!F25I -ML4XL%RF:D-3&'>HRTFQ]4I8;-"G,S]Q6YC"(/4GC*V)VE^H/1^K*&V.4T*.S75M9J-GR1 -MV?W>JH^XR9"][R)-@+2Q[4BQ0953EAPE'Q2ESIG-@?'^KO$8[7+73@S"-?>? -M>%F1P$.*D/!SPIO)5NSU^9Q8W67*BRD<%S/*B*^;(K^TO&RNC5\P@;*H:YG" -M'(2OF-UUT;S^Y=NZTJ:3`LI(L%[]4SH@LD@EK@J -M6`?MG1V)]F7E>,YF%7"O^GZ>($%Z'%EU0B&$Q2W!L!\^YIN])_JXGH'VR$E: -MS-Q\TS+#0[[@7J60P1H"C]VJJ31>C\OOTY77#CXJF#IHS?A4E3KS9F/KR\<# -M]\W*]NU<\17T<;ED5#ZQGC9`SRP$I'2&V#W[&`QO"/N).++A4LP]^ -MC-A5$HBB]Q=3FSF@HV123N*K=[/ -M(CB-:^@O?$X8X)+&0I-9UTVC@$'."4N#9;X;9T[O8'!=2+U'`J)@LKO@R*CD -M#?Q"EL*']8)6T%4"ZDIT]*2=DYHPNK,&:,ZZ6M:0M![Z,RHL[2MR"/;"EO0L -M6U=N@$=FM0[4=@\NP0YXSW:90]3@,6K_8%0I^_W1P.U@GK^Z744G'Z8)[ -M^GQ1\@8.ZAA9;PPW1M*AVM8Z2J^2V#5&0+1"CZW]?\T]S;$K+"S,7 -M?OEY));+KG9Y;^+B4/]]%>4\],&U1^PSNY0ZN9Z/'[&\!ILKZ0:%"A;^/RL7 -M^'C_U'JIR[B",/_E,ZY,('_P(G)*A-BDHJ\^XI:81(*_+7#-(B/5A^*&'/;W -ML%+[_3&5RT;#("@DDEX2U.O68+D(Y%E`RC+HB9SZR7OJ"]UZ>1%AONMSA.%# -M]P!;1R#LQ[ZV7';HP!]0+0,M`<)J5Q>;Q>8L@9X/^!7FH<-2C<**P/%5$VCV -M[<"+)E:H"`0?)M;DR\SRC:J*JBIM(;8_.(;33C>-EJ+KF)UQY2G#_3AT"4+B -M_6#4!!%B5.U7*-TN77@0KOK/5G1T:RO&#T2IY$%[Y>V!XKE&7518^2D=6RW` -MD(WMKW0$Y6Q*(DD,'KP6'T8MI.QV.65*_7(4#\*XIMA*F09%'!8GCM)%E:+$ -M\3VC:J5*\FBKC6M^5[1+CL<=]%.S9Q&5D!M%E^M-@F)_R:@E2[C%AG-O-HJI -M;Q>>(2!R`ATCF3+S'LVOT^5-A]O+[AKX"E9]X\0APPWPQ&PCD94*'X_,IU?1 -MTE2U8DO=$19-.30:I6;E((8V]8D%3_WN)N-*13KS!=YEB820QUC;/_U7IQZ7M@G -M7KE^QPG61T8D.L_$`L-T+>\'J"@-Y>(1%X&MECTHH@HV9"7M*HS4F\#HS"%( -M,C1BM]8?OHR>2-&Y<,2>XK6N3H[:+W]^5!WW33P -M((X?6T?'C)Q4AH8HQ*K>CYW&SFGO'TV4KW#[\"V['S1IM18]PAL$C.YFT<=0 -M#45FDX9MERB;@4\`N2DH-.DZ8*[:-/0LQ?8)OU$. -M?M)#^!W"YST2T')4+?.[!@V(KMGNOTW\FVH[`2,_ZQ`;9$<'UP=T\\JG!4)E -M_&O$4CB]B'[&"48ZMQS;F+5%U715> -M.I6C.FA_X3ELM4PZ.38F)8Q1@G8E.@2Q/U,/]]2A,$I2P!K3Z0J8H`B8!:"M -M_UHEN@Q*:(1L,0@WX>_A4LJ%4,T;K%L'>#N,1%_4\S7>3Y:.$>+2[3I:6)SK`,?3D4O.,0`\KT\0HKTED[C-<,^\5=/V:'"P(R&CW -MPRF\LUM87V`9^ZOSH>HZO;(.@*P]2MO1VYPSE%A+?JJU%1%Y -M%#Q`PI`R%[!E#7[!"EJ>/,&"&;H;SG02>2=R'S.'$_5 -M6^;*^6;R$OZ4'?M<7R,HN77*G(9"Q=:#YQDA#T9F;9VP@+?\Z@\&ZLCLWPVJ -MT`Z'$_#9R>7@.6U3U3+'5@P\KM%M513Z:JH#Y!PB\#CC/QD>)[K^/V00EY2) -M,.Z8?PH@4%5FNPCKL1)TP"!N'K3[+%:G8 -M2>J5)*A\`651K8U=E>VD.U)>13:V?GT=.U(JE$_STW5U_;^Y\Q65AT#@(`9L -MR]SH52$\*`9)FDRD#!]1+RS0V9?4$%XNFKB,[$^-+>V:9$+8#&YIQZA`@V4W53<)'&0DVD^`+0G1+>J0!T;* -M$>=T#=J_7I-S2KWA[%K#IMLEO@91^OFD$SLO\]^!DDYYAOM+)#`J.=>09JH> -M`0%4FA^W+&!@"67@1JI1BZ&4&2B85,YW8X%KW?='ZV0-UZ&V6N:/.^"\8-T( -M$\[\\5P5OI..@]!LH*%RH,#\*6!9XHXZGR]2G4`^@>3P\;;A][1#6N.S'IT7*U3JL\O?( -M-4O\5"UT^_E-;'?F4K]3N'K,-L`S\?T.N5/%F -M#2_'S73*&\_=4Q.6:@)_XP\,T[GAQ4BX$JG_;CFO^Y=P;YQ`U*T`P9B0`B3D -M'6=9ZVZ\3]Y%E4!UAR[X(#`H`QN?)E*?E[J:(YM[)2K&PS2+'4GM[U^EH\XP -MTW=6+O.Y9@GN%FH:Z`9\_MW`1_=2!0%%7!INTL[F2/1-61,2;"-)E0:E) -M-ND?Y0;H**EQ#S!7;O>_=9"4WOY92K/?\41LBZSW)L1O1J-/U1G[+>J_!JL: -MM&XY>'AYY\7G[HDL#]M?A8DDR,2@1OO]3\TUWB";\(:$,Y!$A]CP0:MU,VTD -MJ,YHAX`)D@]@,T[%\A-()/T)1Q<25*&3+D(RH2612&-*5:<0(3IERKYV-G8" -ML9Z_0'11EMD,7':M.^#RK:I-.VRD4^:Z,/`H)@ZHO$Q29F+K9U6,MXZCRP'`O -M3]\UA4O7^$:L7'RN0$PR%DZ]:GND)3U5WL=OL,C?.46T:,(+0;.)P!! -M!;OSK3M5E?HW;7QP`-:C@M"VG3NGC@;H16Z7`B# -M?3.="1-4DBD;CW->.!UC%_D -MJ%U!,\5&;J1&T`3:-Q`4[UUA8$,)F:BC^.X:L+;59><4'+[NW!Q28M<0^HAN -M[1=6&MTB1Y@^M7$]YR!!"$R"%_AJ;-DKG5LF6^'KE-86]>&5Z4$X)X81$O(9 -M)UX![W\U@<_=7N"6%*).6$E)S#X!G;+1X9RUQA)350S9!ZEE=L@T0A:BXH)9 -M70RA&)*[V""5T<8S2(S&2U6`1O6JE=2K-NK55?7SF-U4P>`BIG4P(H'VD30K -M6"&.DV[@1:)P;HJ+-3S7/%K^-:$?2"DE57I$EP&U./)Q`O&14#V*N7+Q%ETKNNB;DPU*WA=HI5#:44+/H(&7DA6AO- -MB>#?4@-8I*H(=[]#@D'$ME&?DNYD>EI$C=:_"#)!#=<5]4\;RB8H/;6FQ2/$ -MF8DK4_WE%%<2[0CZT;L\]ILGL7W!L@F%;[=6KX;;0:?<_;`A@Z&)Z6'7&^K` -MJ"JN`Z?:HX7+Y:`Q2,Y>/P2I5U8PC,',@G&K,+@XI;DV_J9S%XMZ5J@@@&ZU -M\>^4DD<]P[$@(+P\&4*,'5HWB+!SHC54ZD'GKI-!#PJ!]?L?;(_8N*!@RGM, -M79G@D(^K6,0,6-13M&Z=B$>D:.!=$Y4MB$-BDA/1K@$9\;N`X0_=)'P645<9 -M(YME*A0B\`B(K3"\$5S1"A-9-*_B^!3G,9-E.#'LYES>H,J9#R+>"1_-YG*Q -M3$>4UWX@YH`Y^6AMV']@R;5H]=H1;\@S:][X&ZDB(C\R>'6&=:(PO8+EH -M+$^QRV>HT3+&\O'DN?85X0BIM[NB*%$Z3&Y.SKA^(RFJ/H9OO[6W"D4(QR*> -M)9J]GUB?7?X`Y5SWS)U -MM>HDJ`.\Y)ZPEITOIH&W;VHH0'$:^JD*7,#`HGBI:DSEDYG&ROE\PU?*FG5HCZ"F\U*?';12*J7>+:$J(&`!K] -MNP^](=,!9\B6CPO!>!?7!ML)YKC';BKY?CZ0$.'[F_Y)0^MKIM1IT0TVC&3X -M@:Z5<$DHYR)ZAG)%6&N<>:"8`[UGG2N:LXJ6-P++'&ZU'[$.U9!/%\3#KN>O -MD.TOQUW>VMP::6BH*&@C_`Z"A3826M,LB[D6-)C,\0<1ZT^W%`=^^>18V3R/ -M`TNVLA4%<441#C8\-@*)S!!)&-[VU\X9ND%<4=U8001>:,:PH0&J"FX^J-5SWY-PJ`OA5H=LHKQW]B(V/[7L.&'UR5-43$QG@ -MO:\]2[!544'4//PT;@7TK]A>_H(DD)0D[#Q"=O:0W7D5<6F$K"YT:1A^<6:7 -MG]0!PN'P][MK+J:\]J@9R>M/4#-U[%CS$9>Y9@8%R'T&(M-A#?10J1_'3YO_ -M^@8Y(04DS%H;L?7ZX012)#R0]J%@J/5>;M5B_>5Z(R$ -M\2H>EAM!8.[FZ#\628;I7^_RV+\%`\+?DO3"8^,T4'BSSEA?4>6:8O;Q-SH2 -M_",C/"#[9/\O".43B#+ZT9.W__S1$2.Q!>VE3-C#,Y\_=T^F2`YJD&L$!XTXVQBUA4VHPV/ -MW:DF=%0MDZGI9G76B]N("I9E5Z*HT4#@V*`,=^K2N%DNG"6;AE1 -MK*J^+8KUZ&\9L5W$?@=HL&\23HH076\4:$*MARM`8OVK2,8Z6/AH6V]KW1Z6 -MSE/=U,/8JMTVU$@12M%"(N4<&H2OU\3:MV!]MP&T;Q4,9G`$#LH4%$X#0CA^ -M,W:OGKI#'S?D+G(56G1,'+B^#WV*4W<("ABT#-G86"6/>4JDQUNE>6V<.?#2 -MP)_"&K/"WYLUATQ@\J2FQ]?*3V%-2&4I3L-_H7XA<==Y9Q$5K -M7G[2P*6I_@Q<5"*VG_JYT;*/)%>?AYIX8+A,G_JY8H&4Z5K0JQ+]"6IL0Z-N -M`\<_\5]O\[?SM%D=V^439%=+NBT]'D=#%8$3(K="P'UNFB[?`;]M+#&Z!$FNDXRIR_BOM`,9*1%@XSB<[4>DE=,^Y:0_R6'';4(>W; -M)^"0:CBPL#.+?\R24SNF4-!P?Q7JH-*XT,]QE8H!.9)S5XKU&%#5U4G6:G/";? -MFS&"?QCB6C2`SLGG-9\*%,50G&'6MBP$@-S.K2U6?>YA6]K>2U?^(/V)`UVJ -M';UQ&XS+0/&SWE!B`:;FIHHR2K"A1"E%*C$*=+7C>R^.?OW;Q#IK]C9'PS2Z -MSZ?#BJVK)Z@U^.$FYN4CM' -M$G_LFT2VF`)F=`7&E?!GO,E4?F;XKG( -MM-L -M8S0"FW2@X9(3W034!3*;CN#"G:(PML,:/.C!92^JW3+[W<;6-:\*)#)UDMPD -M.TDZ*'>2=!,GX.4_^G(?.8A#4?(;QP,%.[86W6HV??($>5+.Z@$8K.A]6NJF -M%#GF*DI`%L_^H<-4?M.A\T-%Z'S")PN=WW7HB-#Y%1_\X[K\ALT/%!_?P,[$ -MS?>M./C\,6,*A;'O/OKH->,^^G##AHL??6QSW_.;OC'FS.<3_&;#YKMFM.+/ -M#YMTV>87+GB,?W[.O.R5&S9$U]ACK&^,V19?5RC4QA:Z]%\:9LS8_.^//@0# -MDDH,(\?&/#_B)GM-.?%*]K]XUWPL1H(#9M7B?&8?7W-QZJ0&!FZP"]VI%6S]Q[7NU_=)O?7Y?U7J -M9S+V&_.R'_*(O)_5]93-K4#GS#QJL=MWSL__OY -M#^KY@ZG21@54\$]1+G*P++N3?,SUS1NQMMS_O;6-D+6T)F&$4Q-L6ETR\H!'6='_O_?S.L4+D-,>_NBCZ")+ -M)G50U,$A9/?DCA::_PH7FYH')NRM8/P-=E(4#\``)0P&[P!UX=U"07%2^'#M -MT6,4NT7F?H6U[2F7$J+IPTG`F6N9V8:YEVG]7%WMSH0+=QK-N5!70X5#*(2- -M8-&)J`0,1<7"XH9#WTZUO:7;B5W-P&*?EJTU_/@BW7^=2`)I`ZF"Z]S#.`P! -M_<*53#N1T!I1`:B&HZB,ZC9;5W_%,&9QI!-K'SXUJ>U8KM8\/`?+2V#=;M(TV@TITP,IP?$6.AKC9HKXF-IW#_P7@<>!UTRZ$L8E5&!Q1?4B'K/%7IX[-G#H]DL-*, -MU;<+=QYI9;8'L1-&"BBRJ!=N,H_ZS(AY'0);V>V+KW`\WMP&(E$RU- -M"PEFPUM/5$4#'5^VT:2@N]$1NOL1@\&8'9`;=GF<+`CEXN#RRD -M]=>%@5F`V3JR56O8W.6%0K*@=OYZ:"&Z[V!&WBRJ:1)ASA@8%)2A,-(_&\)=^,/-R&`,>)GU -MO4O)LA'@2YI*-YD6,.>.0<&:HQ8$RIRWF*,0G``,HSWX#A,S5<0CM(I1-H,+ -MPX,PXP)*R,94/RVO+%WD!A+J6+%\#F>I/`>5?Z.SNLQY=2C632/(Y`$IL]$;PN?CX'\\_+" -MCD8\5T4ZV,SZ)R,L;`H.HY/DX*LUI8J?&2S0B#\2^%$TO!S=DD-F?`:6&[Q$ -MA:_Q!RAK==2??AY;OSQ]R,QX4+P0QK6?IG%I!WCU)O*#[>^$$4,BWCT77;)G -M/XN'.943Y'5'E;.?9=[47)O@O"]"4Z&#Q4Z<; -M%%,8Z=]%S%T]S\S,:%T1R$P]$^$1VSHL0/ -MJLO6ZAL)B8M[->J%I*V>FKJ4]DN'MM4%OJ3\`'[QWFWT2';0^N#RCSD)L?NR -ME6,J8)?P-8`!3#A9;/_S1='IMM[;V'(?>1OQ%Z:/KQ,]SW@$4SDQ`]4#BD%J -MS0"3R?;Z7!=G%XG"A,PG\/Y0EJ>^X2B"^(WVWB]@DY6]/@,(&GCJJ-&[\8B%'A6_MDL@EJ -M,!KE(:U`^Q2MQ=`Z^9P%5W,SOO"?>J,[+K[U9C -MNZ!/_&.S\)0-6F]]GYQE$=7W4&$?=(*J*N&9'6>O".B:Y0-_:@6S[4GM-,K[ -M@C;QNZ.-S1\MNJ6NQ.DH/S%@2X*Y4Y1U/P!1Q;@;*NPEO(D,&1EG!8P/OJN# -M8!!`CR_]F@B;=[A8K`]JITE%=R#DTBFG;&;`#XO0=,M/"@819@S>\I7O.T4$ -MDG5U&_$YLQ4INM"*8-H5A=3#MG/4TDI$*Z.;I$\/^C -MYPXP:OL7XLSG7NFG+D:&NHI<,=.SH`M;E\EF(9OZ,C1(<^1$WA4:/!1LU@9 -M(*Q[5,484K&NLYDHZD+BADK!$NS4#%.V!R*K2#JPJ/#^@=-&:(OB/SC($#=# -M,VH\BP?T.;2H@VCDXVCY/[2]"8`<9;4V#%T]280$%)`=KT0T,S`S,),$)-X0 -M)@E+1NQI!#V.25$3(LLT4UJ9* -MB7(F>M>M8`UF9%`*D.(5;1<&D`C^I0V&]`2Q=WWEB:JJ)9WVI#V[H>%-D66\ -M:\A'82D,*8L -MMW/%&"\,M%"W-'&+D(2RU5MF']JHW%+(H\P%R952+@X0VVYLF,66JS[K6S-M -M7YH&8<46NVG&RD$>S[[W*+I9N^RKU>PA51,\O6>PNM%_O+2HWZ#<8).T;,@P -M[DC+'C3_L-!Y&2PY.$*3CGRACQG?*"G?5P2G'H!CJD^ED\-&!A;`[UEM/Z*>-;A13W>/BSLDFMD#1H+%UAO8\<&Q3X -M,09QI1BCQ*!TDW)38-#2N(5,1G;2Y>+O[,([71'F>MGL>YG[SZ+&CN] -MP^E-O,JM#'/2_B[\0$K[HW[CY^EN&[G;T'F#%&/?O_3?DI2:E"4(8]!M;!6_UT76(A.0.O0H[!SXT*RBE,,)U\RZTD -M#WIK8A[:DO*X;E5^0+GXQ$.J(`_6Q'0#7ZK+J-(ZF""-QA?M,[<<)#:^M1-L -MS#K,Y0$OU(EI"F6L(G/BL"TF*>'N'R7U]T"D,9(@K64#&)P;TN2]_#,Y'YP] -M;=&6BP>9'K0*@";%;(%23D&R?W05*\"_N84$+`-AL4T_S\1,B-B@`RYCSY=B -MEM62W^$'!M^4L72N1=ȴ[%5-\O -M,=6W[5I,]6?E':0C)],.&J]E.M\]]MW,GH3RY,5-A!U9),>OF#_1Q4VN^@6A -MVT57]VXW;MBD3B+_C-SIN]W=<:$M+*G9]=_\M77/4TL]V%+HX@-;]G/.8S.7 -MO()1RZG]Q-U7`-GVTR.U/J65:MM85"O)8M3ROL%AC9S]9W(B(&IQ+ -M<6E=J.SS6O9='2Q5L/:>NW:P1#,6OR?.K>W'FCQMVK,C9N8E]\&TXW/U:DJ3 -M:.4*OH+!:&O4+!0LCJE#.=15CPVP3G`J_,,[$,()_Q7Z;1]ZERN(0M9(FWEQ -M%<QF=F';M$B@/U9R;EJ6OYH9])'^F]@YEQX,&$#G/?R#M13!G -M*>V)2R(+E6G>`ZW$8R;4TVPXB!^>[Z/6P9HO,W2%&E?4P,@>969-1?T>"?CX -MZ+OB(H8;[/&SEI<8U,@%K,V4JR1+M6X#3`/Z6%')MR9]FU?+MHQ9@,3_.;:Y -MQJF<4;PS(^1\X7X2W`*QK3D_OIX!R[Z%#0I; -M-:2+W%C&!JVWT=TRJG8HR^U^+!92;W,CQ".RO[U]N!];PIT5>417KAKH$4?;3 -MN1TO?/,CT>+,2*4HZKW5,EUYVY)>S.P!>RPOJ5@LB6V4S'5EPY`!ZPZKPD.F -MRG?F^_D)EPF/!C)-8!`X<>29J-@40[9!H_O<+R&`I/T%2O]^7U@AO6"60L7& -MEEI_YYFS)T#^C\2N.O@F]I7SN$X!]%J?;:3;A)WZ@U(TDL3MYD`;AMWR.U]YN_ -MG7@'))QUF\E9A[S0M*<[-'WV0)3]X^*)O4$[W$[62<`K6_8&"I-W1.@+>?O6 -M711.#0VZW76=<8?>K=*XT_,N)"8O80V^(1.0M_GC:]DMCY**H&=IR=L3$=RT -M7,6;\:B]K;E2?F>QE(VT@[:.N3#0G.+*'HZU1U)HM-4%M9Q&IDEIKIZ""KE? -ME/R.!1=J_J^I15\E!7%0LY9=<(P*7,(>4C=GP,%NN/>J,Z2,=$J_4M\IFJCL=)MCH&P``1#)CG5.KN@`'Z>?A -M,ANE@[%MI#N;B(2;SW -M'W5SSFBB:9K+'56TO8ZHL-8\]2RZ[?C(&6Y\"F.Q%G$46YC,J<'E;U%W'-4P -M`!!SY,-\U^J*;&8Q*.7`X.!(:<8P)N>60P_>?1/E(2C2NXK>,YCE/LW36>XS -MB6=H:8EXB)B?:-/)_92MJP4<>66MC'8,2F3FE!)!":N*4#CF>X5\V#1:RQ3L -MU:*?+"C>66OY[YF)M.G(>?C#^JUQ9^N)'*;`^QBYR%$`*IQ%S%%ZWF\P](<_ -M#&IP*G.8LU\CYX=3$5.%J&Z66V02S+U>%1_<),4'3=%,IG]4L1034C+N:I0W -MFNFMU2T@&6*;,K3HI"3C`9@`227[^H(/LE/)%/U;5BJ>X>6PO-]J_KHW6>4/ -MO\3R=NDOJ4(IK!-^N8`CK*%J/]$`?E;&PMZ+\LG"?WT!ELZC+\)DS]3W/<-8 -MBH^_:]HXR7G3@43/^2;5[R?:7NX5>J1V8?JGJ<]+/:^"K^I1VS55)]_R]FU+ -M<5X4*8W,(>MY4N"\693!XDZ/6EZ9F2`PEJ/8D:)8OHZ)M"?=^6<,M8545D\1 -M&G?6IGYWVB+M"94BE-&DS!>D,/*D!W8GL0QZ?YRCH@JZ/!9TFD969\B0BE_> -MG`A>3LKNE<3B-R^V8]QKT*-G;U)8`39IA/F3ZORU?.1--VK9_1F20_BR[9=C -MKMZ:IN^MHXN^J2&GG&HPY;B6JV7V]7][VT/]9V\O:5%7W#^@N2&&]Q8I)H4K -M:5WQ8EMV0IA;7(--B@&LNI9*,.C#=VO[-V*J<'N]';9KR'BY!5Z`F\ -M;$SEF\T:]$NI[<9^MD45%OI!Z8WBRBTK[6MO!#G$UMA1C\I>^S"E^9UZT*`R -M7O-8<<+-6XD/2,&A\$.FX)N";^D%ZD,6J4QX(76/-B16`ZD$JA](D`E;$1&9 -MZ.\4E-L7U[L!OL77J<\%7JWD2X)\W7-ITQ*QKE'6<+>&=:H5PA$,L.)>OWB! -MJ;1FQHWG%H4?WCU4`(.#(,C11@J,!`!!^NUOI!^]!"M4#%M)FN&Y!J.PL[,3 -M5YG^LZZW#27@7,DCQO?LM]1VVL%;(B`(^P8K-GP/*Z&1<\[J.E7_/:9>3\Y0Q[ -M7/7V\>P1UXP,>HEX+Q$QHS5(\R8U$8TTZRMS29EQ*=[),T:X%J\-X8P4`7-1 -MH?;P#)L@Q0)1ZU#%HV@'\]#(OIJ`0.3F!'%(MO+3B8E#ILS9SFID+`2\.:1J -M&0VH4Z98M&1<&DU`>3&B[!-'2"1T*R3S#@J1Y08%3*NEI?:0QNCF%@0GN:YX6H_WQ[Z^=Z0`U9^ -MGHB"1O7*2-WEB3`CL)1UHT+/40*![WRZ]/1'Q+[?IMJ6TG^IV-2%8XY&R.QRR+,/;I@M](>3(VFJ%:)U+7\:[ -M%99IRQ:;X4`/=+P!'(,DINMC5<.-)DPUZ5>8BP3,)8\J_,'\(]Q(N!#:,?@E -MLQ5[94\53>2""DU6A&IGVHN"&ABN"P(?AJ]]%WU/-A-+U5G=Z9K/QTM09X]= -M"^J\^+V=<,P*,.9SP6U:MD?>Y('3PYAMUQ&:FD-Q'/A'-W]$?*0G;N"77!4 -M^RDP+1.J>F2P5-#=*R7*V1OXYL;;]UWUFIC`$Q^7M4T<&PV'Q')<9+LG5X># -MP9)4=C5%#"L[QG]Q.=BD!Y2Y2*+L;K=;Q%)!4J)Q:6(CG.RD$BF5]_`#:G;@ -MM+URD,:/#Y=AJU`93B:58=ITMU`:@+VDR^XD:%&SE[W?\%C!I>`?ND@0_`0D -MAHTA+()@(L.V^=7?7%W2JT/#8=F.+7=0R6&0"^.9.VHEI([D2YKP"GB*Z3YO -M].,1-^5E&/0VQ8Y'*!S,@&U83;2)I$*U3^@3Y!YZ_O]HLW[6A&9]DGY(5A4U -M[C]VD@]'`:''X0/0+P4+Z%9T[=$2_.5Y!:4AH=E,/&1D-)MX#.=''_,^KMUH -M<39F"W]T`Y'](#$CM_I;+SF[2!7Z_$-B;X'LM0 -MKVSR&Q,^NQ+[.\'#36=\H=>_"QT?@.T69<9.JU-*/-4H()^H2HFG"VO;TB5^/]W, -MK0N[0)="XV)>^!G"2U.;HH*7%PF[W[; -MTK5HT)[]$<&`8:?PXAAE>VNTV-N6;G6SM.JT[)?D@8,AP7OXNKR*7OD#6I(A -MTLB9LH*[VTW4:5>P,?I?L1UNP8\&VS\VQA(D8$,SH4FU\;) -MB4YU*\H<]KZZQ,BDLBK/SB0;Q_(.O*HH/ZB?*ST]XV@C6JV^22K419N\$ -M6+&M1[M!:!.7Z#PJX90Z];R9R&"2O>>N9*ALY3';EN*N''=.[16KC#9I7*$M)43.-P?G3WMJ4DHY(K0H(IRO;.K5>+0154.2+4UY1M -MUOW/!H?`1M3=F[YZ<70*!1.8U#/TV\7DMQ.F)(5V)350Q>:@-R0'$6;XBS_2 -MO]!(;5FB0E@D[C@`ZHT2;8@=DN*CF@C46HZ"[/0_:$>!\_QK24=!4P:;F9TS -M.VN3_JM_!3/4J)0C+M,99=ZZU>7Z"NS/$@>#MN$ZM)V1QT0&[5%PG'^1:5XP -M:@N!`+,?9;R">!C2P2#\C.@!)/UHX1KS_@$*J4:.R%T -MLDO*XW`R8Q?8H0DO!P4N -M)ID6-GQI0[/%]\$N6AWKO;P?*;(_\`,&1F`9]7!"NB78KI.O?M1B^*1#PNS" -M0U+2.$?S@R;*W75EH/*,*#T,;^_1<(S-SU%EQNIG\%X"VR74CXSIS`F>1M50 -M-U[IQ#/?K"EZ#!6UP_<]V'IHK/$AOH+D)]5SY^M@Q+(2EHA^/:^MH`"N8O;Y -MI/*V54U9R\JEG8PE:3I,9H-?#,8S5]__OUM2O=(^Y4IYKF,];1&10(5C7)O[P]G<4*4MO,I!UEA+FC:*F$NPL6WRC7FL3A -M(IW!/UI[@O'LY'\G!D;8R@N^ZC)ULG0ZUCMOTAMU,,C,.104D2ZX1+V-LL>Y -M+IQ]^+M4]',J[1:+/OU!T^E)J"$04!MN^[ABZA"RE'!]4]D2=LT&=.!LK.UQ -M[IW;3E^_H9:I?6_;TK&-M;?]O6I1U?76V8.F6;F\R=0\2P1_)O]R&00(#YW -M-0RV-^0?I(F(Y9.&2)Q]W#=;QSV[]54&T2^X1*7/G39-@?UAK?I\F(JR`;:' -MQ.V!#]E5KQ#7MYFY.'%CV*<1MQ+%Q=BMPKX[(QB:;04"DC59ZUPBP)OY^0F4 -M44VH"6A,_`.5S$Z>3)=I#!0+Z'BKK03N#C._++0]9PV7"QN=3']!\7OC-7[?:$VHE!X)%L?%YB4Z'$IIVOGB& -MC6N%-]5[^'!]B.NRH@L5YBZ6E"*^(DPQ6A?92YYX9<@M$_`A'Z[9MC39M_IT -M$,:K>Y=I%9`=.#1[=MX:D_M'V>[K75;U7=3UXS'V5:.!N\.Y!D$\]B+%* -MI6=G;"[;;M6M8W]:BOH"E)1;952H32@I-2APSW-1\GL?A32("DC -MN)JM-J@&-VUE;-A;AB#3]7Q1K%\']\."KK#2Q?^N=`VI',R/H%X(G^E_D^,( -M1M7%ETNE.&2'//YP\._K7<=(S&//70IY[#YM?"O04?3,*#G)JA!45TU&0?7)%`E%C`>"WXH\P_WX`N=JDW8=:P_3>>UO$1RF!+DO)8 -M280=B>(16!:^YOQ]*M4.^N[!@R)S"V/FMC:U!=-FB`D(9/?HLNV18^%JGW0D -M<<9*X1`K\URE?AM54L_GS8V3V3[N^'O@;"KG$4YG7(*S?M825[*ZP@262'%W -MVBT;[II6M;C$W*WVK#9#B:M$%3V[>*I"7NK)N(Y9V3??Y[FDR5\\U5K1!".6 -MSX3E9D`%/Q]EWO>\P>H:1`H5$/"GPDS+Y`B1#X]JDQ[5MJ5G>#F-4\1)./MJ -M-TA,I=G.R6FL.>=]:MM2]#733:.S&8M"FE&,M>]?ES%A0JX$K-QNE,2'P3LQ -MS"F)1V8VV\[E7N6E?+X7&OBE3;\/^G/ -ME'L8YI1P\##[.A;5WE`5UPT2P0F[5ZTPD3-#W"3A>C5Y;;O0RU9TI'2UA1C$ -MH[^[V_B_,^DSU3\&/$1.VQY"J<]P.>'KKE`0U"Y>ZG2\LFTI;"OBS15;HCH, -MG?;T-L`LCI]LQ`T4Z+0#JY04C9VUR,[:V\X\;)G:8F7VZ5#FN&Z6C+=6^7#H>F/=2],FU!]O&36>?_?F,O+?> -MSQ&;]+_5%!DM_1[VNE"HXN`K*J]!;2?XW?'S+#<'D]R82B\.!2=<,Z -MC6XHF3^J1WJ&L!S=SY^W::03U"(HN^?4G#>^H=9-E?`V:0/VH;2$0^:-F6Y2 -M--K4*$H\;B;D8G8_+WV2:TYF6VN@4JEVFG[^>&=."P#?C2^JH`7^&!:_C" -ME7>Z&[_JDZ]F-GY5EN;X_/+1B[*GO*TNB3A<[D/OMQ3NFH!'OD*>6GQP;E&B -MWY^\PB+6FG+)I$65<"IYT*L5@V$J(-]53I/V58=C[$8B!8CH\:+LU!$]3^CZ -M7GRBAE:I"N;%@`,'AGN%C1"Y&ORVNJGK!E=$E1B?X8:??^6VI7ZHH8<"NBR4 -MXIR$@"??^C9F-B$GB[[SJ,.!\&I[>'TZ$I_$\`_U&1W[D4-\,GV]'P3#W">\RTZ8;3\Z6!Z01"WWFC -M\@"^,7&3?>%TN$IVW&3+JL>23#C>E?+?/'\BK) -MZG>N4+):?#NAHNN2Q1RGYNISS2=QF?])"YH.<)"#XHB'E;5(6U'UC!1B.9:A -M*K7+YY".'_FH2I05:$(T[H< -M[$,+<=QL5]"V:=/)$^1*2;T63K#CC3-$KIC(.7G"6G;DM$12:BI$$#F/=**BL#FI*"0N`3;@D.9_THEO -M\)BK0NB!98W'TF5FP"(=R:&[@:/T<%36D4("QEUI&/,ZK_[3MJ5]I0H%Z^&C -M_O7X@FB#(X/%?H2OS;_)BO\0B7#FDKL5!3%G[,6JF#'M-N7,(4@S17IC72@! -MH\BZW)(96929?;O*'W(>_ZUTIG5A6RTS>[AN:GG;OJ(=U;PB/5V'_Q=2KJ;L -M56B9]A@&6W!'I<(MR9VHW-OP$CS7QMX$_+O8UJO\G7:##=&;='/D^MZ5UA8& -MB.A;6$F=#"8/HY>"-N-8A#7QLFE7AOA_V$AY+]Y#VVR].O -MP8NR'<;]FP7-Q(<"X4GHF666:2_K3E,M+AKQZ-I7DP -MZ%+KK=R/^&R1GV7GXW!1/6MB6T+$]_OV+0"FTQ<2$T4395NLA610*B8L>06X'[F[S$@VZ@+;0\7.,#2'&8+@?F -MO'`8D5G;(2)UMP4A52?/*6(Y:$>5;YY0&`=1]IQ#R&5N%1I2E<8G4)_)QVZV -M-ZU/YM89UFHBL/;EKRXJ7:8NOW*N6*I#'9N;Q1GVSSR,$3-SGL&F<=V27.+*.LO!:4K>L -M6;(WR:=O`JW`+1;1!ZL4`M'IIDD51@,("I*-TVHE0][BXZ7-!ZN+/IB0<;J! -MVYERMW=UB;=]ZJYYV]]W]<3>=H6+GMW9146]C9ZX.1VIF5/+]@\FDY_#X5BR -MP=%*,\#I4P4R=5A7OM1T@FF?JVWKVAMW7FWRK$FH(IGJUMI)%CF?_0'7;U3A -M]9!K1>=-W(QC9ZUSVDQRBG*)7$>@A7$Q=CPL+QUZL>9`4M4F;]W/&U2$WG.$ -MXW(-6DPH>!A@OGHT:`\IN7;U:&^O`CN:K+$H<]56@_H?!LT,3SB2,3:S5C1Q -M0-[KM_(T?/;-1ID-M[..[>?%TU>`X_K7X^"X2BUA.*BW/2)^*_0=D(K>4;2G -MU>`):\YD0E9%SN17+4=X0"0TRGN/]8(GOZJ]SZW$>Z,3"]O".7/"BELUODV. -M^)J"S:',<,S\^3#`!2'G>^NY76/_FC6U'O^*5]3VLN?S(K@^_MR^5U[CTQVH -MW*VNKUQ)E@%.B],J!B<\`?]?-(=6Z+AP5%%3>/7:[B=HC;U,H_((S!7>W30% -MOL(!:8>=1T[HY&^+GO7_Y\_;6=C2!44.7BV`+!J+G,OZ$Q>?D)RX. -M"5FH2OU1YMXK=4U/DZVK+(%6X1-,T`G"5OSA`40-H!XKEJS%W!,V.#;8K1A%$'JWO#.DEN9H=?36F,[:%= -MM3;TK;R'U;V\O=0"4?YC;]C69CMT^,M0U"[\3]C:UA8FGF&!8%*$$ME!F?\S -M_C1/<]90EA.%%*T\(YG6_>VCXZ'MH -MY.4@1#&YV+4?O#V56Y3B\G$-&8[E<>\)HOW_8S7FI"O7]"$'_MP0(-N%\

-MRU[UIN5^1QZRL6GVQHP]?^F.^C$%2K`BH -M$M":(-AE)4%_UG])*Z2SXR-(\U6;]IYO2DQHT@'?T<[:B9:*'1,I]B=%?>"\ -M^8!DZ&"(RJ)GR(,.E#BRB!>*/=L#;*FW-]T%+=V&]^GHCYZ8?:9'M^V$B -MN2&P5M.NT?-"PM+_SXNH3#7'@DV=IP82==1TFH4U0G8^%RV(MPF31\Z*'AUR -M;!]WD"3!6FXCE+>9D,=A%GYBU5!#UHAE@[IP]T>-O];WUJTH.)[)?&P1ONLX;83 -MSR[=>?+W:B-#_/;:T?.>F>`'Z-+=ZT>O%]0?>B_8+[BI)GIW^+3]=U_MR"M. -MUH^7I7>]IOB$N7D023KNG'MA)13,#5D(R-9486\J^J>*,<&<"V.Q3C%4&AD! -M%4"9^?%BY7+,'/M;+3TRN7.5Y(>UVZ2*\6B*#[]L`\OM0!UJT94=4&<3+14R -M>9!HJ3%7@^W#%HKS=B%)I7_S(B+&F9;OFMVGF?6C?ZQ..%E&FRT`U1F7SQH6 -M88PF7K76"\K2H1\RW/69M;O-_)S/D717>@M]-28MK=F^[ -M>\5.SZ[=YI:#]YEG(?$ZNS=>L_N^.[?P)`^VB6EG84\/^4\L<*6.X@#^K9#% -M5,2;+A!%G@='YQ!#T1@?]/E^NP(0G)G$OS%$>)VJS];6FY4Z032=UV@B.),TD?L -M`&B)M_YLA=@.!OSM!B4R.C+'WPC*6P%S2"017N]QQH/0+ZSM)47L.I6PX?QD -MYC+HKE7Z`'D/SO7)X[MR;7U>S?GU='(7>PKJ3LYE,;D\0KISQ*44GGGJLI/; -M$]3K/OI],E=!?]I#C@B]\:1U!-K1?1DFM0?,&29S'_7JU)-, -MTL^R>^W!SL=$@^^9T=`%ZL&:;4O'ZM,5:(NV -MR)@8F6BTON]&0U&(`S2%>L#Z`G'UFX<9SOJ%,M/8AR7.8W:%FA;+[:">7_8& -MD*^20!MYF.GA%*8^6]XM7ZJ"EMU1`-N$4VM^<"3IT)2KHE`43**MBJ^A"!X: -MCDUXM*C#U-EKR::1O-?,C[Z5+HYG9M0E_U!A>-`EE.P[DD\9UAJYL'GQT&;8 -MG$B:LT9K0'[63;X0ALWH_*Z0?DW=C*O<85I&=)'0YQJX+Q`XG -M]X*(#7D]KNOZ`B+MAEPR<@Q]EY2$!P-SRUVJ5KQ7'NK0^<$A)P>#H/GZAI,C -MTEH58T/87FO)++820U3&%+&!61E&87T8B19E6@(+8EKE%"+X!9=S0W;[5V74 -MGIN( -M89-+DA82\%DP*%6I$G%&AN5JP=,<"9KV5OLPKNR>>.Z5.!M&K1`L\%RI9A"@T%#(3S7IS,A -MC-ZPA5,N^FYQT4_;-1?]W#=V6MG!IW7#T=K!^]J/R0\LLMNT,0/_7_U.TW\G5OVO6^&11M\@0_VNJ"#ZPIXA)R" -M"DPYL6]).?!%&Q2"WFC*D@^I)28R9J8\M5/!^/34#0?YSI!JM[\SZ)4%_:"X -M3##!EG5)<1;L3%W$9WQ4$)L)2_RR@%\J@0E3:7_G)E_L3KS8E_QR9N++C`/6"F&UZTP/CB%HJ<95]@-P%O5%T&]79@R/;II._@"#;F8;YF4 -M-XK\XY<$W$]ZG3=3>D'FY?>*I(XR?SF;ZAB-Q*C=[EUF[(!IC1[6B2LTQ5A; -MD*@W"]H7*T+5RQ.57[#Q5MKAK^F+T9+_EA#7,ERER&GQSU54E&?EK>/<9(V4 -MAMU+]WT[_LH8"5+C(L$4&P=Q%28\906@(^?'/TQJFI;&/L9\$-"T'H-LU[8: -MO)<@NS"/=.M'X.:TDS=-\KWE>5Y!:@Q7&*"0V,JPSEFN$=(.8LGHPZ[K?-9ZN*D/H#GHK8\5Q9W(<%X/\8-N# -MM8-FO@2P_R]"N"13__B?%62QLDS[J0,4L*Q*892FP7-0!BJFKCD7B@K/Y'WPO#/5+P=#LUK9TM8T_B33<6]%2L;2PPTR8A''W*93,)2H:IB)&5S -MZ-SRNIJD'$?.N;^W@ODIZS`!N2@UB:Z*YH)V(Z[\.3,I,_"T3],5$HX$L4NY -M@)ZB#`L&"4&-;&A>W!=ZH*BSRH^-4?4PWRU3<.L430R,5353\[3Q=B,G#/A& -MXD5[[-?/8!K\*ZDL"9#&>FJK9A>*,DON:\[8V23]8MM2^+DZG;C^8`0-A,J3 -M=F2D,L0J35',S+!^5CI^^QZK%5%^N.G)$G -M=U+&HLD>4Y3%7#U6RPZ<#3O]2@*4%%]D7D4&K`*F08$;P3D<';`G% -M*=Q%DW>[]G^/!M1X!S?/$TM-3Z16J;JA)#$MAM+DR+9R]\EM6GO_75.@><2H -MX\C45PVJ%':`-V_WQJUB//H3#$"^+NBOK0_=AG>Z[:_[&KZ>:7]=3C1Y\P20 -M.B[FISG#PUV>$7T5F]%VZ=&.[GBT8Q,,[-:#MM]D^X1GB4]XXMMBY^Y@=&T\ -M_K("Y7@!9J+YP2`6868@E.TK<)M@"971:7F7LNO>P1(V5;>)SEZ1\#"E9I1UFD^TZ^[KX;2F$968O*^6`]U)X+@[0A#4\NXK^/U)AU'-!+9G9%S2IQ`.\WN -M["9M@((^U:;32U$@3*!34VHRZ!;&JWF+6JL'2O'Z@E6"M]U8IXJQ,+!E* -MVQQY?\$Z0.\7O-.XYZ/L)'9U)T!8\"%ISXHU!2E7D53-+83)^=*.FQWJRB8W -MY^^?32)2,2EEB)2\TIZ@[>5AZ*_\@&NGXMV,"A^6P_.G2AJ9^KU%_2SC%I"C -M-.448`82G=O-EQ%+/%H)CG01Z5VX>N5P=WNX((T!Z]42ST*!;>5\F!UH`ENW -M6D#H-`Q+@;!VTHYR2N@(K+-IF/!SFTZO-W=,Z/&B=0M;]8YCL:HJMTN>2[\- -MO<9$N@PJO=GYE"Y./&`E*2%.N,:II$U;]X0]:PUHN?1$_;\:=IK@8:;XL_;: -M-7_6RD_OA."A&?"\>00P:!=F"XSSUA&>^?9U2C\TTY&S!RB6[TD2NYZ#&I@J -MK2'\^FX77:YN=X.A&U/F0#S`N(S7FD][B"1KJW-=[9CYL')U;]C;SII2[92/ -M9A60'SYOQRG.=QAWQO$VJ`$PX-.WKXW2M6"U.H&1V]C4WLEN\:7/,JPJJ$A -MURX$A5&0K_O"'4#ICI3^*FZ&(2E)/82I9WO=T1,+N,D*4#F__XM?F:&2-'4I -ML,CY\+T8$:<+1[NGK9*H5*J"Z@($'GY>`%%#&6VD5Q*=I4VDO:8 -M!N>$GQCV+!5PO;;77"PIYR7A(B:G?1WC? -M@QO9E>01$"Z`RQHI%,"6!+5E7>BANPP>*84ZI54EJ<+L/]A7YRB@6GEDFAO: -M2CPCP1BCOW-(TF;`>9VUEO?V]Z@J\C!U@4&P:"D?J\VJ1S73J# -M/[N5>;(KWK!RLXES.AV/A@$IG0]Z:HIF(E8KXA)_NLXI[#I3Q=;,%MLA.#.K -M<3YH&VN'+(A!F1EX5CTYU.1)U#;P&7HZ^7B1'B_2X\4=-5P<:O)D.I-<^Z\G -M+YSKL3-Q`N*0]MJ4TZ@41:GL#U#%;#@"M)\[K$1R2=*.LH^_)+L;SW=U@"*. -M.DVX"8)4.4WZ3:R8@O+'')S9M<_(FFX5HR?^J/7%^<$)=U> -M'^/5S6R[,068RWMEOEKS!N(\<19OY@^7[<"!!?K^7_?;`=TU>9:%\-HDMVT_ -MM8A;S=ZX2?^PM7]-C#MP^[V"QJI(^"%R1GZ(0E&6.#%;SJ;!=6A\6C01DE;% -M-IM?-FR_>7^]CXE@D=,YRTYO@9D<>`?5#4;[&J$1:JRQ8<[B>]QD>64O^(5T -MKWT\^_-_E3",*$#Z3>E>QH:[2WN)^^VR8,FS&[5\Z:`Z51A'>$:U@B;7I!6+ -MV4NGKDAC"N*_BJ9T&V^)[+\/I;8$M(59R]_\"^ -MS:1/?(^*8#ZXCR? -M&<$4U2;60L"+CP'\I'8@W@)C/AJI(.&M[*W3X=L1Y&WMK$UYZ!=GJE)C35W3 -M?L#0-HO+VD)O9Z]Z5J&WH7O/?9*2X&(-H<2/H)?H8,'+#"XU'10I#A`"S.8;7R(&'+K]^'Z.K?L\MH`5,=K/"2";GN-BY(P>/G%0IV7ASRG*6BW2 -M4@JFV$@9%(->WF9^_,UQ=#Y5:E!3JYUBTG@"D[0[HK#.M8`]:+FPE8&."Z2= -M1>_4WH'B]XN<::]IMF/4WX;\H@^J]%"ZDA>7=>"SA(O[E7JJ9CV=6!!45:E< -M*'D\EO"!7;#]YN6JW+/<353;&67FN%.ZWPV)H5U6!)ERZ[D"F,>XBJ!E,XM/ -M$*.I$"L(E&D*TP%/O,VO8`B-C3D0IY]:UU-S3KR)#A3!VNSX&HKR472D^0BV -M\A&`EJS!)LHGR/T_WH'%LYEKC\0!00J%HPI%UC@_PCJ4O7=2VT\A$)SGC]N! -MNWC2S0>SSLFWB9NP1ZR;'1T%5B?T_@1!SP6(XCP>C#Z85$&&)46GXF/7T7EQ -M'31*4D-*SM>%U<`NMR!AFL7?+[;N2&B;G\I[M-])J8DR"WY92A3YH(W)<#\0 -MGC_[%%ZP*55UU,&TI -M`=D+!(#,,@-C<24_GR2F(4WG2Z_@O6+RV7WQM?14Z9Y$0%Q3./'IJ03@] -MMT:L2(5O41W"*Y\T=:GB.H;'";1U)AI3`R`[=(&NUZTW1<$C'@F?_'5CX=QP -M+"3_"3GTE!WDJ2!2V]TK5O=B-26.J?EY]:G$"BFN)-_F?8$W-Q>&$,(%K`,@9. -MP,S6^SERQA:20]=`$&`F3IVW8K`ILT:3:394)SYZ$09KF7,6X(2TCV)JVI_:BSP[W,66-`>G>8.Y_E7YYW))?3P%1UW(FPRELI=+"I/TO@D9#%: -M57+3JD10*UZB$RC\_BASR`OJ:@?;8NE_PV(0P;K@;!I&3=HWVY;C>+XP'U5I+M6"H3#57K[4/N[\XG,P?N@X.V(@"5R'KE\1/B^B0J7*L`YCWRP;FHT,/`*ZZ]. -MFI]=7DH%155SI`^P*53X31,)U -M2TI]FTT)I2\]*[<*04/+WA"G$:&DB*7X)8@8]"U0U5_L)Q.[85UD390Q[CS6 -MJ?C>BJ5P)`9-;!-I8D$LX'0\1<9K:!_4V#=DF!Q&0;.='.P[E3;)3'WGN0*F -MDB)V-CROA-GJ8YJ010P?%$P(0)!*QF4Z[D.:$)8.$B@_Y;$H\X];V/-,$8!< -MH81>^MS3BW[L18DI+PT?!((E/C]5;R?BZQMWUKNY6PNXBC[R[\2A,D"6%C5,S0+B%Q%;#\'^F*P -M:DOJ<"''.O'7]GER&1%$P2R_N$295SYI8"0EFVV(?$"J@^0+8B:@.YX9 -MKE:")ED#*L%,\H*0#C"LMS*T'<7-=V9@1*HMM/AO1P.DD(Q_L4"Y^`&\^K:'MQ9[8@YQ8$%-B19RN=:E[85EF,B$!0JMO--"%1: -M5CW6X`JQK=3VD,;%`61%A&`#/OAK]:VJ%KO5K@+QSA4#/)=!_CC1((`BP1JDDO#Z&.BEQ0,)YM09C]%%-P/&??)E<#VTJ@*@ -M;:*#JH.(G*M#7$@5LUZS=[QU&N?C<\(#IAZ"(73HTP*6>O9]F!]J5]9F=E%\ -M&W4"SI'\T]]:R3E4;Z-W*QS$LACL,__*ZPS#A/\INV^56:7=$"3J)J'-"Y1# -M@6#L,RH$7=-,V)$S,D]S%&"SF)C:P:5HR*;FZE/97Y^BP!NA,BED,E3/,%0> -M.1?^TES7%`='9R`%@HN4A6N&K@+QB7%8!!*P$+L]W(>T/#-#&"QSKHADZ-VC^6JE(OQ.O.@`JLRP[O.JI8 -M#7]8,`/MW#AXL9*$"5Q`/A$MZ9A:3-1>1?T'3-C$?5DDG^&X<\D6#HDAN@Z] -M7;2+MRU=56]G[5&5YF:]F>_A6!D'+?G3H6FE0,)=2XG+XYG<8IC*L1@9)>-$ -MY.F*/[IVD)3]S.DG=$J&&V4^=@GG60N7?BUSZQ?Q:-A\P!-=-/B=+O?9J8_? -MJEKFE3NLOK[RM0GZ^N8P'F/YI>1D-&/0^OZ>)-`3V0B9LYAE0]0L19F&(^AS -M<_&ZD1C_B11Y@2%]DNQ+7N^GG\!@#QR7S5(%AO4A)%TIHCV1R*YX0XA"GB[ZW9UQLGW?FO7HI_4=5"/9'#IS"V0'"^>I+C4C8V3 -M<\OE,2N%%;I=!MV]\U=,QH5:+&7^JN+$VH-1]$:2B!KDW0@ZK3A$S3GT#$)U -M1,ZA*_!W?"]H<.6"FA$@D0:)1-VXSD.RJEKYE"IWY<6:;RT1)$,1['GH(*VU -ME+>S'YVEHZ`W<-7,(-7B19FO[<5W@^MC+MP/GC-YZE**0Y=%$N>3II=BJ=K8 -MIN;*Y$*2&$-@I@KC4S*&P<8M!W>\PP#?C^WL8N#[0F5AH-"EF5K54'QLSM<- -M'&#9@);78;'68IR)*=D-!T'7J& -MP_[0HX5(4FU3,>Q6ZGW8N@H>@B?:VO!/C_[4:[7$)0,!]0`0,Z^/L7-+5DQ! -M`G&Y8K58DQ[_GR4>62?*(LF%]6096I!%V/6$N)QH[[I#2(W:;!!,\\VEI\,< -M_!6.ZS&+[`?=M,/?@G%X&-)^HD -M!WV+JL`8Q7[=88W129<5B)P;/F>97C3QG#&R9K03)K!N@"7:Y-'7AKD(1CNC -MK']"?7Z:D9,;),?9@,<6.Q?P1%<-Q>&2$A;5C'''^P'\/DP8S3?L95_[E\1R2#NP$%]@X&K>'%_BH7]=06]S -M0@98L75EEH]G7OX+?8J;B3:\WD^@&U/BY%]7".C+LV+3FU1L>MKYHH1BUB?8 -M,6/T45+VP=6V]U1&J9+3%A^A'\U1[=F]IZK>F-7'@Y/J3AJME=F^6*Y)M8?3 -M6Y43A)I+,!(,/*M6H?@H<_\]$V=+\E*N$&8ZR[LOU<,8^91`P*TBAR:_2U$_ -MLV1#9-90^3WT%OLT$+5(?%PIR:*N@[^:$K:'T[K)'Z1#@M"?L3FBEC9*,'HC -M&`E7M^90Y>IJ#UOAT`7P7\1"MI%/GP3(6=N/X4>*E%%`3Q7IJ6);FRG%TB#+ -MV4NRBIIC9"4Z]NG?10+_]2;*_3JCDWC/TE'):VRC9DJ!5_RPE1!C_SXW]$/X -M/\4V?(TT_Y*YTAC7%&7??0:?'-B6GCH\--&<^0S-YY.P1\2?PN"(X#,=G9HM -MT:FW[UITZJ)_["0ZM=[W1J+L)Z^4DY':5JL$[@O=Q:/]Y^525NN3Q%>L,^A" -M3I^S.+55$3.!,VJ'N)V.4LL\<#HQB=YV->X<\@[PWNFL.:]T]A2$'5ZS^!-[ -M.IEO3+.GV([1,$#H5S2IO*=A^B=]H5E>-9/ZL[@CXT^[Z,@K'V4W/I)(BZEE -M7SB20.:O':TG>G(VW[KMF;QLMKW.4-$X>K4T\F7DO("[J$M-+:HPR -MBB:XSD:M/'DQM%64IUU6Z%S,\.58 -MW^TT"R^8^A0=?V/A_&'-Z?BS9N(@$ET$+@9L@:,497)Y`DK: -MGMOS;E%8U&H@AX.;.^^3=47;D(2RF2[DSI/ZHMH+0IEC1X7G81Y8,3PJ[,+K -MYNLGDV&]>?^@9!&#LD8I#'>L)UJ!5OO&._?09.R@D7W7QA"`,O7Z]\]D=CR* -M"XF/*WOZ!DZGE"KQ()P"UJUXKU->*P%IQ2G/#%.VKQ^O-S@U;_QSV])^C:SM -M1Y#UE"]W*%]:]L83^#R;,DEI-4G2'(9T7,>BLE_#M`IF.UB<"N.3COH6!4QT -M5##F*NJ3_KZF0L[DF"KH\9_*SIZV]MZ>@+QP)C+9\OQ#$IZ'(?:3\(-6;KF5 -M7,H%%)=H1WV -MQH-I';*FQU(Q5\D;66[DL5RO94WQMX?:W*@$U'\+\8 -M`+_7O>,!-&&*I;OWYE/>)Q]1WAF-;,M!S[]JW,!P>2!Y2Z-78H'E]3W=)*H3 -MX6D_>\.,"AUS%+9$Q%A8$_V.<3$T_H[?CUEZHRA\ULLZ8-PU06$%GWF%P,//H%L4 -M:&S6,PQP[_\D(0HPD`U2[(#C4\G==.$67&(LCO-,JJ),Y#Y$*YD2EGV;%%*R -MC2\XT_3 -M@(#NPR:$`'"\EIR?"=*G-6-@:'9:"'R8P*"*X:6HY<1?B1699G3"R(JNTI#8 -M`ZV6[5.P/!'$6^F5(^>QB[C"4D"1Q3;H_UN+4J:>F&[<-L%P5M&R"DF@$$4.7+KZ%K3S-.1DYZ]K%K=Q$?Q.`&4V/ -M'V@[VP#0R6%ILGY8V^[N9#23CE76FX+OV"W.\14NUJU0PHEM:#F.+/I,97*H -M/&+<^*^=*:)U_2C@U[FWI8Y'7>JC`$XX2R?ED_)Z368)PJ -M!]8"VX$EC1F#AP1]E/G:CY%+7G*R+/'B#3U<-B@DS^78)J,.NG?0B5C7A -M\*4`@U'EP1PK2E&PLJR,=4<[.C%`B+!OO6FG6P,":["GY9B#OTG#:P -MDD.GOST?1PO;134FN4M1=M(3-E5(7DA._UT-APD*^W( -MR2JVD8>6O:52N#);OSL!X)MO,UC(;_S6#702I'@&TVX<'8[A3:!<.+-L'R?H -M?)E[+R?QP#I?YH?OY-]N[AJ#A\4U)IE^_-/L#NLP&:4#D7/CW@G7V":V/R=T -MCH7HO0K3KBN3/,@<)`DG5DP'C_SI>MR(SI4!Q^*PDM6RXWY1=NH&NOH(J,)@ -M7==I%=E2F2/M7.[S_*=P97ST[=:GW'6+@TQKJ4J'60G*HRE*P% -M*W\T!$&L<66BP(J608L3_.9Q_G(NCL9&,`$T%][6Q4W46- -M^,O.V4+1%I"V#%U.YJC"O%_Z=Q3P?)U5W'42-E3<55K#*+&;`/3E9V?HL(U" -M=>*'''Q7J[29\_(F7?MON)H=AHBU_-K4E:9"GS#VF)"$,:HM -M7GZZ;%*CH&0/6-03&+9[A'G.KO&96U5S9G]$Q8!>(XX*`O'C/6JU)&R -MSUY@5Z7=::)]D[QL?6:2D[+P'DK>GS*EP<4[:?LG>Z1X!:^@U*A?1[2NL/6M -M>`4-.?/4_UC2,5'9,E'-"PL\8NQ#$`($$C1Q9E-<*W+FW47S-^\VF3^8Z/$- -MV"G>B:2.YDN:EI45X=A6@\T^+WJT,@[2O%+'2MS@';L6-]B\:6>E3&=MK+U^[4?),['D4?+; -MI9G[-V[9_XJ[^>E96/4T>\K7%A41-'=R/Y9+2-+@*O:)[)%[*VH"`B:9#+AL -M:>X.H>DJ6]4$(5RX%F\^26)6A9"2(3MKSDO?/,/.2!Z`+33,.C>Y6B5A-IPZ -MJFF"K)0*D%H=YYG4X]8;K-WF&FPZPLT(7:9*;V4_>,(*0I/ZF%ZIH@3#?")' -M?0&<9=>_Q=SG!IUA%X2O9=??*IHLT7"U@>)HD1[#4@P^!]W>K+$O5#^Y7(J9 -M6S]1AAZ>B^6ISEK+`4?K<(NOW;B2*1!EMO^8J,BS(Q+;M>1?9R!&" -MJF]^4$7.GJ(GIY9IN[?.F23*%0`+-2-0=9>Q$4HJZ?``VZ -MA;'`"Y14"2KQ&#M^5V]8[HT<#_O[H*/?T0O;-/LT]XS3;H<[-``P8,9B+S_N -M+)K3)SGB1'<0RVR%"/2DCPVM]0>1W#C6FS&T@DQCOE?(@^"^ZVA3?*X^ -MTO+R[HN4*'*)Q>FIK5P%5]?[-?A95O,CY\S;W)R;]X;\'#P_>(+K+59XLW#XJ9DI#,/E%LUQO$Y -MEJ*.>1!ELV?EV;=@21G*&9WTW`4B"AO8_%$Z67DR9>A:_46"2OQH,H.YL40V -MZ7LNKD8[ICVI/E69%4"/`N3@FZ5#-CB[)?.8-\'QXQ -MC02-##BALI'-8%$D1]G^CR%KA*25@90-`LKFRH-VY8KK(EM_@E9H(.$]!?64VF,R]+'G^G(@/3G*?/L"9*ND"B[X%@BEG^P5$+.; -MD)8.8;3`S]&\X&4C\HN(Q/`-4[9Q.,H>_SD@I)J&I5I*91@OB,W#:40JJAT:3)'?A1JP]8 -MZOV]KYP\SAMV$"X,;)/3@VF[UK)G+ZG:]"RQV<'8K=$I7%A%5"3@]'0+,1;QK"`>;0QU!'1\>JCG6SOK/<,07[J@3 -M^XA;!P26("83[UAL,XHFRE9ZEOY>T5SD04T1V))*F$N$6 -MU.BL*P!VP$^2?2!3RDH0%7VOU"'%1F1FU36*I9EJDU]\YB0IRY#M?0]^)K:H -M@K+'Z!).R@.X"+3U!9^J82;ZTEE[V]?OU7'TEPZ82>3'FY(9*:!#>B/J%&.> -MKTH2%-VUG;<23+HJ:!]RS2YHE`\^[R=-=ZB&2'6GJ,0\6"L2]548/8Q/N&"F -M('/^W+ES3R#B6T&;:.1^2<_`"%5%PAL_0QQ[F/+WMD -MU=80U6X.=(I[0A4)XLC?AV`>A)F]EH/7;COZW^543.=75 -MK'%^!\9`J;@G$9MMLJO:\*$Z\^.@[@MZK>"ZT]%AS$!Z^@[RH>L%$GJY=@09 -M%S@;>K#,+&L^G/N8X#0"A/O3<4$I-%-N!8A5N55EC`G\W9!!V;0\MI?V=`7? -MH5OCJ86DX.C#0`HSE0DL3JNR($*="GZ?4L=!S[)+7%(U]3E76E8:%N2I$-19 -MH_'3^@E25WURRFGB,U'-#8JSC5QKV?AOS$L'_T?<)\H4C"E!!7-U0(=X]><@ -M-T$%0,4%2P"9TK;:2Y<]:`9ELZ#GA1E;LJL.\54.3D&X6B2IAC#992%U1"X[ -MZ+;V$`TA#OBM/_&%,>F9MA5$2Y+SR5"BL@!*V9!+IL_%C*+A:ADGU,2X%8<, -M#77<^=2-02ZDHC1$;AIP-1I-XD>^1/A -MJ%G,ZP$3.FE@:#=V66X&1=.?@AO@?L.Z%E%F -M?@F-*38UM:N`$J3%@@_PF0!Y8@HW44H2BEP4YD%U`&R5BF8XU>1UW.2M>[YC[XI'W -M];BW[39IM]WH?[.YH?*Q/^W:N+$V>=YK=5P<,C[SI6&R2+855&$@V'G5,U7!MR##["G6+G!6.@N -MD'HC=5*XN:H\B088MOC3&X@,\82VUYR?_9#4KCL/:M0I.=B0"&1CLKS1:&UF -MQV^?8GY;]T^!N_@?\$RRO_*U_`N#""]<1C1]5L,M'SI$9[D)41;IJ4:(I%?- -MGDB=HD>")LHLV\JP"-"0JJ-4*3^PEH3ZYSQ]IM"'P\$" -M([^QDU0/H[P.A%EQ5/D6>,0YK>99P(VQR/G"X2XIX?P) -M76'NKD5L#96<@%C5!S_S2%WU!]" -M'F^SJ"X!&9R+VK1I#JO&/X.=@MW-:9HE]..;LL9#R-\#XCARGGL<8V2;=45# -MN&W>]3<$X-)+1"7IB^M$D?[$Z"![[G'XD>1=I)@6X=Z[N&>IYR+P2E4I&W>. -MW0Q2.Q29[8F2'V`Y:2'84SQ!">E:EG%%SG??8^\:S#H -M:9*Z`MKI-[Y,()3%#PYY=/#=HA_H5]BP"=)E9ZQXMS049?[V,QZ65U2X.?1] -MR>8B$X[H9+56R[F,]I+)9O("QAF-/L2NI8+0&G`&4+D4\T"O0U1DJ=!9FW+R -M(V`LPI:$-]3OZ**5-J,V+Z";0!Z2G-6"%,^/R,FE[EB?%]*!:J^QP5?VDMS# -M>;="27G\*!8\7E8B7T/XD7`Q6JN:J)G0GE.NLPCP<\B3@V2/Y8J*^#E[3K>B -M9S`YQ"AM+)A!]HL:#=>43LI^Z&8AT#4;C';SH(L.>$8-[$E4_%.Z/BB\CZ2> -M&]UM'<=8GS_6P\F,L8F8N>UB3P%+_-@;S!)T$I -M(L^`A"ZA672D@[0=\$P/(^>NLWFO4G#2HF2G2TW5WB3J!-AE:I?4_7XA#:/: -M#OIZ,KW*_FPCFP'8F>7G:)"6RNN$QFCS(5X'ER.LF]_&4V!7D'9)GA;&QC.W -MX6V(L@I$<@&SK2EF[L:G8B5-#XEDD0XYP2GQP'(N8:6OIRKH$YG[[+VI]QQ" -MEB0S8-+O/VW-:O:$?=P0?X2J/A7T_(E/![M'FV(\\\)&J3^I6"SL,#5&>LK> -M`$A`#W.,,B]=0HS0NIXWB-0!(0FY?JL>T^H-IR\^OGMC;;\E4WMA@>^=4R3S -M(E88B)C0;('0#\L26;2WC-6B8UU'^C`DD1=C?M!SA]N1.@`#.$QX0\$^WJXY -M"8_)K8`%'+/'E[8MK:CD9@/FYI,HW.PE2F+-6+,9G,E>8MP5$+S6T9?*) -MNWU\M]WZ^W=;^]:GMTSY^9X;-FRH[5&^8,OKKY5?;+G"&5^U6PMHSBVB/<^^ -M$[7GOT/NN7A3<<="JLX@H!!130F`A)N+=!.!\KNT!`S -ME0P-;7KH=U400U-`#($MO/FAW\$`5WVN/RKP"N\6I8\"HA>_TQ -MV0##[BD6W1D!1]&(2UA^X`QTVY^)BU`JPR3"V41_'(Q2S1'.5VVWJP\[?./- -M:73#<8)NV&?7T`U?>6@G69%*'7`>NY'5`>O^5CP$$VLL<"HZ2<.FG>\'=BUG -M!F;)#4X\>,02EG"GRJLJKP'%8I`#6P)ZTEI92RNV%I]IEM9@?X\?'?V;_0DA -M4N&(""G%MN8R(]`^.<7(97ZKS4ZMD#E9B^VT6F>[/:QH,J_$,U@4"G\Y,9!* -MTT>IO3G4:%OJ)?QI`C31,R$Z+OMEK"+>Y")O[%\[MP)/HL"C6:#D(C/`;I/R -MA`0:HL.,9X\]`M:PCEQ7K[O:94FQ1:D7EV^/=04)>\H5?H`IU;+37T2N9KRD -M:+9]H=(=\JA@)AHITA7,KNU?+:<*90227=MAMTN_42;"2]IKFUAI)+/&8Z>= -MBNXFU4P1M4VB$YBGUG::Z4#4\IU%=5;]0\M52.B)P,:;AQ7#!VI/.:*?;_B" -M;*#N.E@P9]RRC.UX_$`2+$9B+$$JZ<88H,&:D>BM;10\=GR'5^"KOX05 -MP+K7OE;F?*Q4*,F/2(Z'(`O4FF1'.*^_N+QDW(>&7HNT!NP5PT6O(VA16$4H -MRSM7()1%E$-8[!CTPW`=>ARMW6V7D(?=W/*NH2)W\FY14U_C$3>+;-O -MH6RGSMH>%ZRBO8#8*2JTBC%E+J(&UC]L0!*FM`M0Q0U,")D\8]OWM0ZKMO`F -MW?LEHP9OW]?D*F@&,#4+8=T".R6/690]=7G=Y[IK.N`A>>5$AE@D7OS)]PRE -M["/F?L73$V6.NEMT?%Y4-UD6CV%#SJ.;SM1.5_&/HO>*>:-TVK"@F9WWO\`5 -M.!@6(3T63PS^ANWKA=DLP.[&>D!5C'P6]"&R^ZG\<5'FN$?9SY')'V:39>L< -M.\+?"?2.L_Y-<`4&\N,;EBN154)G-;E1+[R)Y65'0*O(TZZP".02:?2N:HE, -M>=I(W@:K222(H$G36).Z,OMS&2W9.5.H!PG7BFY<\Q7Z5\^P\JD)ITZ=[RT5&M8H*A1%4;;&V:3(H%\B2C^Z`M=)$?=^KPOLM< -M.#L&XCQIPR7D\(A:GOXUAH?8\PNRVB#_$)D539K_G$*"]!6J:`_T5;&>A50J -MF%/;8^2&O+<>O8V)A$D9%TY\J]>^OMUMBYRS/E4G#QYQ!C.Y'L$M2JF:K+'O9@DY?(LX)78]'&B)&4--'O"29%A[[M'NH8-\Y,*7)Z -M+LI[_>2"8UR*&J -MNDX+57#/]ZFRZ!6W+BHJB:/H_"0DGV/?$\'>"B[SYG;66HZY"J^U<>=#O2H8 -MR?RN`7%3,W(RMD=(%[L2GCHC`K4!O*2P0AN';<=,BEYG.CC>`R+\C"^[!96) -M&1;]7&,5(V@,:;,T3ZUL^5#1;%L>0WWY?SW/0)M)>VU95`PJ8+-C9LNS[']$ -M]_:PWD-? -M*QDL!8SY_M-<1=!%`1#"8W/DVX+E#WD@F$Q3Z"&'G_[,L0AVCGOXHN?`ZCC\ -M>R1$#9'24N#BR8%<8N[8?X%3BP^KJ[)"#*/Y4#2H?CN= -M7X%`L^^^BPIQ6&QZ*"Y1SS]A`UWG[[ZKU!9Z;;EV/).P-5H6TBL,D(NHPA!E'PO/]YM-#XOU\]_5??&6N0P^#=T" -M.K]$>69#^;TLZYZSZXS#""\?09E$&34,UL@P31\/?)78<)V"W__-3\ -M,5;4:=.08],PSN)O19D7?D!7)>?MTJ2SC=>K=IOEN]:MK7+_"=%$2MR@PT=@ -M56[Q"NNPH:MIX?F"NA"*!09`8^A-XL:&=P5U8'X`Q-NF!:1P60"`LJ?DK8+C -M:O,B$?JU<\J1L_/Z#F-YZ$A'R"IQ/U[[H/50(5:\0!,9AFD.#X)G1MFY5X&\ -M`8T6OV+IK&V6,8H\9D4L3L"78YS![[-%<^$VC(D`47Y1IEFE+A/X7]G.V -MRQJX^PHE-S_=9@@0M2#->9VY\V1VLE9]JK1G\I9ULK3):(*%-FS06IAUUJ9< -M\(]D!N6S6S!R$F6O.E)[#,B$(G.HWJ%GVD;7N+B&KS]H%EJG+2%(3RYY:?_8 -M&U"JO/Z@NEHTM377SJG!5QYF6ILX/HV7$@Q`(I_Z0Y4S=,+%9);3$G.)]^M? -MU+0:XKK*>9;_0%5MV_2F,NTXN5K*_O0SX%59A&%=Y^8FF7%K+5<727O2>YA[ -M/IXM_X)ZKA:(TVT'L1<(F\>X'/Q&&1$9);@ED6T5!`4%@\U*Y^`C$J18PX9D -M;H5Q@X6$E:]06[,8M=6SOB3(RR6/^D5"6\(FN.^&,HAS"LG=BL8]OP4O*9KL -M'GR^Z/KKR4C"YTMN3D.;3!V"F=TSJ0K!IL8J!+J&WLPCE=5,U;/B>G*G&*7% -MQ=(V8^A#,?2H>5?L(MAHK#:BML@)^"KL&O?9*;HF-1=9#:N']L`9?5+\(U'V -M8^]7:&;Q<5L@`FT.6@"=@/QGQ2B[\CNNE._%@Q/8:8MD_[&N"Y^9VI7429ET -M+5%PX@EIE.:D*3[?+\&L?7+Y$ -MFM`\9Q=AE/GJ[4Q77Y'R;EQQDXQ-9(X<**J"X#8$2;CH37"+-+4]ORPL?EB> -MU/PNZ*)$;#QM2Y']Z_BD7'JL=15)@>E#QS?_<$DG>SK]/U4EQ)S^;S)G,REW -M;_^'R&\+.(=/4_^YKW[`2J*@G0(F7M%5J\JX8<#ZZ;\1PEMHB55M4T3-FY[E+WS@_"8!_MM/3+]TOFKP;M(TVC7ZV.6' -MVKL_\$BA25W#LA:7O960,(&N1`(C739=)C>T"FHD)M8OFZF%N_A[3YW)"6I% -M!=QEQQ>V'3G!I^O)2MNVY4;5(*Z:J9CWJ\,4LU)$#!:6Q'*G\72`*#CW,Z#< -M.>UOMVP<*6JGB0)"%BUEY:/J>I`V&/=-<:UH=R8)Z`?'AS;;E;LXI$>(`L-- -M)*(0(TUB="G]3]#0G[GWO5!R9+T86IBQ"G(]:3X%[!.JN*B -M=-&I]!S9)*RC\%8$$P89-\CTE$`"6&_Q$0HOJE(\:MEWS5+Y0BI3!G05[214 -MU@7/KQ&).Y"4VEF8\OJW_Y#.6VM">HVVX1=UE70OEI[\6MV8CKS*(-J.OI3M -M.BSNA"RKF=[S&RW(AA_"?M&[]@^E-D^4.7>)^D55R82JOS;2=0DC[,KA+B*D -MI!KFG37GUP>N,&RC6A:M/:+IB6$ZK2$*'5/JAJL=[:38,>6"2:Z[LI48Y<.1O+\ -M<,V`^:UA-ZA,[ZQ-G?>7GEK+#]\M6DG4\L.?H`,%%6PLQ$D\E`'#[M@.&"BA -MLTI'O<:SO_@1;AG23+5WI[W6LG@;F5-2S>DZ=L@T1F"QYM&ZT!L+X@:A%#D' -M'%\7;8K#LXW5<]"WC\)K^KO/@'N!W<<<%N.[8UT,3>L3C[;`)+?P#R(-FRQSBJA&72%BO27RO*RB`^Z0U.2]WU#?T9^7\,*WOA4(F0Z -M2VAZ3V%/MA]81=LP5#[D63'2GIISXSA#%B/GQ@>L.N'!(%?XJIJ8`URC#\2P -M^0I8&,DJIQ8BC.2F$RMT&_.ZN.M@*K?[$F.G17+95Z+<[MJI -MJZFT="ZWY`Q'SK;?K#&;T5K.Z:%+VA:<@,,O<^WT9]+'2#.WZ.&Q=CU,C;4H -MFK[.PVJ+5'V1+D"N`]G5VZONW$7,1Z/#;S]^)^:I?&%E@>RO==K\0>?-(-?W -M+3,%"!8'-GR[ON3WMX]GW2R;$:+)<,@N-.IHK#F_>)D4M1+< -M=:06%9/E0_7U2=4K#.\+>00I%SO>^:39< -MN41).8H$S@XL68/6"3=HX[UX"`8O4D%`ZN0F-L`CY_/?L80P@4=5#VWDEPW8 -M$0";%01DR-+DV=\6*S9[V'<]LND15(3!%#_(F?30P[ZK=C`"\Q.F75"18LO4 -M+F7B\%5QUCV*%`I&Y6_P=7%[F79$V/9T\X3^NX -M4?9C=ZIJINTAUQGE_U(2.IV?&)2D6`Y5J!32R=??M:AH4_AFOO$$A=4Y,8@< -MR"`/'[W2'%H5PR*'':,13+Z.GR($/F@*X1/'#3Z1XZ@P40>]U"?#9!-6*ZP' -M39',<%33X,#D8'9G;#B5-%\3:P*+:VRJA'U'APLEG^O=IK>64 -M&Q8@\]XP`^<367",YW`FOU?=OL@F[(:GGHN,XP:V1I)PXW.^X9)3474+\`8*-/%KH3H4J%MB55962UG,10^) -M;>1RU3%_DO^K$`E9,E+C* -M;!E8PS7+0<.#:2/*39%5][H5[4?+Z?N8I8AX^;GR-"B71JG.P"_6-LX -M(F54)'T-$^0CY]E[U*D:*;O#W#[3V\$,CCO/7LC-TB:()S1*)T5ACTF^H3YG -MKCF:$:TJW]-')!_5LNH?"W?E=!BO/_YZY,P_E>-H\IR-M^][__-VG+:F -M/2DJM-JZ:]YGXWY>-%`LE>G.O>2;-D+3PJZR(P#N#>=3AVQ;.DIWQ1@^KUP# -M>*GC5RJCUBTJEBH9G4]Y[.C*WH&7G&ZG1%_IS""(+.$PM\I?2MF--"8M:/(S -MU#J6M7##O@1C#)?058_IG[0?Z]._K1CU.,;.59/RPIS>?'#H4%=O*WGWOMW- -M168<9^>UBP*Q*:FJ*:01.Y!,Z=JT_*\E5%Z[-[NB[W=BBB7K"!-4E\( -M#ZA8@L(#ZA&TG$+E=`_RRYE'OI*,Q=+RDNG7"H:PQ6D]JZV=NI6C?#TJ?PCF -MY"9F17`K#2&VXR7$MM^NA=C^$NPTQ&;63&WQIHO%P;(]=K1K(F%$7U:"IJ<)9"Q(@F3Y0# -MY3"H9=[\G17FKF5>G=9IWP(JT$3\''.Z3 -MYIQLRA+YQ2C[Q"&6Q1K^/^2]>9P<9;D_FG3U)"P1Y;!#5`0A,V1FR,QDUXA# -M]I@)D0PB)!%JIJM[FO0R='4G,\2P*`('24A3I"PR8$!1A"/[/H(@*+)Z4)'% -M!450^1%%1607[K.]2_7TA'CNN??^<<_GJ)/NKJJWWN5YG_=YOL_W2YX#1@W7 -M\%%;SH4"[V551^&)WHB_VE3]X"[[;U^^=F.UX;0,O-2FZFX=_QINMLL)_MBH -M;B3[PYJ8O$V@D@NCNGS0ZDU_7D$R=BH1)SFHT#E\;T+*D);G^]X(+.`1/A^< -MHQY-8LPZ<,1'NNM=>28H(G94<`UAUA4+3(*"9H>"YL185#1.(:8`-#ND"6%P -MCE=E$>-ARVE4Z6$C0-`J#?1O7I!&!5@RF'1*]>,4V(H:*1PW]38^RZK"+_CO -M(M7M(B6L)NDJ(K;%M9`.]+X(=-C*C00+\-?S)2D<)C??G,652@ZH`F/D*J4U -M_NSJ^+U:V8+'XO'01IJ9ES1S7$7)UU*\,&">:HRAXB@.'](3"<"I#VS[&B$* -MP%"'*1ATP^2>AQ++0F^YALGT@[]9(2R]-&#XXED,V%)@W=3YQ:N_X*7NRV$= -M1*6@0D9Y6.&8R[22\TC'@.0U@T(DP#8B4\#L'[U/Z-R1L"+PL(Z2@]T6_UX> -M=J:TAW1&2DK#^=VUQ8)>$:ZX#85MS,R_ZGZ=C%IU8PT&A[H9IO0KW^^N@5.4 -M-/4@`Q7"Q#5WZ'Q./5T)93>%*T)A?K5AO.:R84N!4!8>:V-QY6J)B&W$&O"Q -MR,I7UH3X>4GSG[BB@]X@U01&/1UD5"P5=C3YTUSA!NJ:'OZQ3@28W_2.^DU* -M?6/KX#U^FB9&%/DI1$O'F9@5PS?\.%X^ASD?G=3`I!#T\]>GE8NBO3/RD&C5 -M%-)QV"XHQ%BX3H+#'C'^$0G@%3:\_'_LO&_)4SI!GM2UCOM65[GD$1I+0@LC]L.&!]Y#[C8^:+96 -M)[25%I=9;X'PXA1P@DXDY#&\-A%Z"[L[0\:IM)3E9/^`;XN^+DV<6"8=C[:" -M3;"&40W]<'/-'A(;_M!9\X:LECI3@+X5ZLAC>[:<>Y!'0;8J?NSKI9-C)N,P -MN>!)!8:)>=ZJ`,L>4K`^-[S6K10]Y4;DGI<&AQ*#)V:*+"`>":-)KQ?A1@1] -M`,Y(M-'D_[#X->M'1..1&V1F/ORE8#ODSA+,"1/O/.(5B`G/Q>[GM'D/'KS& -MWDPQ$>Z*%)T*O5R6;+XGP!F4Y(A8D*-VA:-UR3Z#J=$C#Q$H%:-DL5JA*-E4 -M/2LU)M3UU>.G;:''6[8CQ69#"\;`__=YN7ZDL^"&Q1\?9KYJ7RFJC2`+ZE6T -M934]4VWHV"SKK>%[/\F6PX:I$R7'2TVSUQB)&E`.NZ`0XK&J8_!=1I].XS:$ -MNAHIN=?'L:!'D9#%Z_`IQ'[1989@P`\T,1E\7DM,EOCN?3@$S":*R`1:I3ZO -M:;47P;AW?)+;M-5J4W+M)(HYPRR"-E/\6%>VEB1+X@_!I9@M&43*?#LE!"-- -M$P#Z@W[*G@W6?C,>`#V#`(GJ+OZ7O.C@_U;%J2]%K\_\'JA -M%>@@:5*X.XO]961<S:4LVP29KD)V]J/GN)_GR,,-=X#PXV7X3S`8ZK_[.9%^0 -M.+J21NX?8J8:`2XUDE@UV3@,.X1.TZ>AU2BM,0A`C4"BD/\D?=4FRDO;550E=U,A@JHOO"` -M$I7)W6U3DRTN\`3;--+RF0$%%NR?V(_,3O3??LYAN=)L891)[49H& -M[C"*J,ZXJ#:F[8ZH-G)/ZBT/G"37S@FL>X\L+V+YX@I,.;4 -MC?'W)ZW%`:W_.Z5VW"C*],07&?3PH0;!*3J0./+)Y!LOS:;+=(-Y;<$`H5L& -M@GFL86_>M4ZKY[4U!8W!_X<-F.>3>'?9/!.'>P'8 -M9B]V*0_$SG>;5OBV1A&;C3^W/RHTK=[1<]ZG;W`EX]3:F:=H!5WB^>G^&M5> -MPF$ZF%#PFL/DE1GP:YJ1X!>^HUK>9HRGX"_%>=9)?AVAT'G3Y3939O+P_<5" -MT?E#`87Q&$VQ=@1"HFUD]FDROO`:IO08HZY;WC#&'=.+UY\:JTG4=#IH!?LY -M&*).W/1K/C!:.(8UN]&^:=5<*`8,)&*C&HM=/ESMK"9/N='/XX8<\SC$@].U -M'A6!GN_3+7X0J6YHAI^\5+V!0['?F:;29@97VH##N17K9-9:X#`P9A'U85GC -M>WN99M:?74VFX;"%2:;!^=TV7[)2(',^4O:9L?VPX9U>Z.CBE1NFMR^MZ+TNKT2':3PK6&6P4THQQQYUF-M/LK6JO.; -M^^83GER`N")EE$^HIR2BXN$F@3R4>-&7WJ;H\PQVEAI:R*43U6:>IL1JV -M1;N)I1'D0??M9551QF@>%?5'@D0-EV&6)YT`J+LI1F_&=)&#N(XS8Z<,IT'5 -M>>6=%95^7G(QS=)$\(M8L$[*LJ^]J^[+X5O_XYAI;W[]D#&[CAE#_VGHS>>S -ML[8?DT<1!'F>SW>(ZQS38%&=X1?V95Y5\@:4,C5[+_'7H*/X,87A267K973K -MTZ'C/FUU`0FH(!T$.VJ6V*(HSR(Z=NR_.J-RH"3:8$C*;UEMS+!W`,8-'B]J.=UMXS^_?-I:)<6[ -MYI?GN5G^].-O?;])=BKXLU%4.]Q3^):D/I)G#<4FWMA-J19X:QNK3O#<]J[L -MIJ'=;VHOU(GS$V.DOM7A#'$ -M\DG7T;RC-NUQC&KT/NOJJ(G+E-@BI9S[G,E\I?AK.=A)\+4F?]8^1?)G^^Q4 -M_BRQZY,C\F>7OWO5&>]NO/R][)EC-_(A\?+WO'2&J$#'OO;HH]O&O??NQHV; -M'WWL\K%--T\]>^R4F]OQ*[CN!?@"SO(=V[L6^*?.RZ:%?Z&ZZY\?FF/T.Q06 -MN7'NDF,6+\,CU1?>/*Y1S/ZA4_"'"R8'^H.V8,$1(N6;>K/=:NB\9<\='_-.W80<-ZV_F^]:ZHWR2Z@MMR -MZF^OA;8H['6C=JA6RR^NH#Y5/7K%3G7G>EZZY.)-IJ?TWK1=K3?[$;SJ8I_( -MM<'Z(V1U+SBB*?:+(S:(<_:52T:]9:S3-\#_UVE8R_^P8=">]WU^[$KZ]1GM -M>S7:0D=J0FR@___W)L5Z8QE-+TVNVTMCOO7,1^NV[>LI;_6$$V4^',=MML/,]VCJK* -M)JAF6A%8.,D,0JR`C%X&59(&QI?<=`5XI*^ET]I8;=IT^=@C#MBJ;1H:T-VD4B+X%'8FK4-F%Y//1_>\K47"*); -MM,81G;$AY](7>1;LV"="3^_FR8O+D9Q!_,@M1XHA&A,M62':_]+IF.)`1">Z -M(X)Y(F*H>H<%:.`IT3!Q@[KY:)C%;DT$E8>PFIRS5;2:QX>3%H1T+%,BAT%S -M-7G>;H3W3,[Y(X8/540:P0"SJ^/R%U,!'MSDCZ(4H8K@DK/6XE$T=J!(0OO) -M>X?C$6;"I$RK5KN`@[76S:!I%[UNHOSGW,[ARN0GG]3\,+W@^2O:#>O=/GG^ -M,*MTP)WU.#.)9G+F8O:5?2]8A726F-$[Q#CNOD"N^?E?.88*IN/C&SHO':9) -MNB<46'K5*^-A*)=B$S#*G,-9#V_RT1,U=*+B>P*%Q.2-B)_0:4\41"B,B)Q0 -MBN]D5:J2S[.T'K3E$'MYJBDWOU0JELRLXW_:SKBI(7=.?T?+^*!BFM!)UO`< -M1];AAVWF"7V+"\+;6W4N2>/IQ$B"J]F"D959CE\F<*Q(YZ@N5SV^E?WBY%E_ -M11N01L(^`JL9Q5<>_R%GP<$5+D[[Y!>V=_$[<;)2=, -M4;;7^?HKIA*/HJHH@@:O=><2BE`HP"!VB0"7)!0J4A>AS6X+]\`X>79"8[+Z\;9K"'CXD(?8V/7/E4JF&1 -MV!PV#KO0*(E2'A5FU\$$,N4:7BS+IE1-7-Y'G1]%@1NUU#_U4*>A8B462T'9 -M!KR[!VVXGK?JXN@Z(1HM`+/-S%'>ZG&6#@2#P9R@<2"8'`PV!4?@7RWP%Z=1 -M:..6$R,!/A#@,ZI;,-P:'(/A)Q2/Q=*):]?)JH6S]@0[A\(I%.B3"Y_DK7IR -M$R90KEL+?X)OI5+C1S2Q6*+FT:/#.L^SHJ(U->A<++$(DY-.M$6$R\R",O[8 -MLY:Q)@,EA!OI1$ZPKK;`:V^JPE5Q^*4YI_(O0N>?16J+8K[")/+R]/8NCXH$ -MO/;MRS/2;OST"*\M\MJ/H`\M:;&=8=69R;&^9<4M=UZ"Y$*$ZM.[J<4*S/&V+J'L/N>]056[XE@XV*046O5>?8A57GK:I%=JT0* -MR<".OENMI!J1):;T-.3`K'Z._HRS;#_-,!X/TNYZC44)':-PIYH=;"OOFD'9 -M]5$>[,V2U+/VL9";192GP,S)H6]CQ(T\2]3!+06,E/"5"A$5%+K,)MQ:W>7Z -M=*=0=/5$7LW-P`+//V"=06>Z1%?!:QV6H2"S$-"#7,%Y'.J;]/Y[;W/><6N78:T3]A++N`=5$+ -MTD+X:H#I"AGHW'E[W>`NOHW@GI%\-F5BA5$*=#$C`;[B<(.TY.P1Z5*<0I"^DA("N&( -M5IUXPMES3*U&[-O&@=D#?A.&">>`4S\0--*WZ-\'\+GNH&5NEK"CN<&AY*K' -M]$L1M1-3,8CH)FRZR$D%?Q737,@3#&2-,K6>`6.NU:Z')%Y0F#DJYM;:20"4 -ME8&-/.]Q!6N:(#7BG.L,`"^0,+&DD976,'07,#V@#9\'`_'T[=TCA%88Y+>I -M-@#7)@&X?7"+;9>C\XFXVC*3:2!T4Z0ZB::9V$5B/#4^B4)Z9 -M0Y%%!H7HA99+A=IK*TDV*>=:22/":O06'<_<#E)9G2ER3+^&9%YR[1,&++2& -M.+,T'8937G_D81F-Q/0MEC#E],;.H(AM3QZB:\8]_Z7C>+=8,)3][(FHL+,MZ8$L+M..IOU=N7+8,]:#V^^BG -M5JLY[KMI+RYICA[[:YAO/= -M4INO)H_?E^1)]KU+,X.0P\;LW+0;Y+G.CAQ6O);1"C`35*D!.B&4-,BI"A.Z -M3H2`"?4J+-5B2(T5M37NG:Y90GZM"QPLTB\*)7!D8V2105H`#"W&:8;[;3VL -MUCJJ"=<<#*NF(D@>@>Q#SO=.R*IC1U1`"&4AHX%C*47[?\^`)'/9QK;$#3GT -M]H&_-OL33A38LV$J*F]7Z]XZW=\W?,'@!*0N810O%WL4>_Q>K>PE9U=5$*UG -MFW$@0R=S%.)IZE@UN12$HYCOCS',-98L(.F!R`L8#EF4I-93L?T&F -M1=`'9_V?5[$8$76(\A1R\,'+[O4BD?I2\VLY_S-T_KY6_]Q5C#4NEZSUHXH` -M^M0*C053N_%TU^*:-(,`[LT6RMH..5^[+>7YO:5L3^!%]HA&JB]18X7@=3SC -MHD:=U4TY_,^?T55O)O]E"4`+2:L&[YK"V`PP9N0`1-)*4 -M>B*T,0L]I&&/X,8N&1?]`%EHL%9#Y]Z)&$>I/UTLY@AY<]*R'3?QQ^+\5N%R -M/*X9>GI$6/US3^5G,*W07\98ZK6*)HV+(7I[*RCDZY;C.[&AT9*FA,Y!BYG$ -M%@&8:MP)2>E,?`!6!>KVE<-8CQ?KP+G3`;!UK:-,I=\5D\)"-GU+UY&W7NS/:8(3 -M=G(5RPM-335<$XALK_L_J3)DX1]J6#3TPP@^H=UXOVS-"^V@@G/HZM(:--QN -M"1HXYRJ[E!I!N#DLN+21@]-;I\*$WW+*XH*USR@+R0[IC2WH2@6J8N"A-0JP($0YYSR69 -M:1HX+H)!&&G]6^MHN@"Y#_CC&0+:G8;T2\F%MX\XTB"1[:"J;+9U:A2$)OEN -M+W5S40Z<8.X'K@+C/LDGV4'MMA%!0ZE2()(SN5\-R66!X012VR%7#C!>LA/5O1[O<.S1V\J?H\-%5T\_1D5>\KA:,JF.E_: -M9R.T(_5?O!.#%7L>H'@@$O,/P]^I4I$>KFT8Q)^8_J4F#0LE_3KEYK!QL#T1 -M6`W_K[V8NIM5"I3LFR:%F.3<]9+GH4A)J!`&>7K(P&OM:+3[QCSBG4-GZD3. -M/!%N&"S+P(.+"X9_R?G$3U2/D;^@"F9[,-#GD?[V)TC,J19D72B&R:DGI5&SI^EFZI-(AV&&S< -MF-V[Q:!3^PQ8"X][/UNN=R&]!A0+*JF2,Y!]V4+QO08DGH*N')TW57Q650(@*[T9=>V(=Z+"V'BK)LI]5=- -M;)O-PT>;Q;K(92YH*ZH;C.:1:YCH"BT&4>/6^`[W?;TJ=T0 -M258^$`\FIHD#N^#U'2U!.L9K>/_E>JOAKW1Y==V>M9&'B=_3 -M.Q'X<6IO61FA;N6JL_0^:AZ6.N_ZQTZJ9A_13!PQ.0>YF@]8]/_`M-"=Y"W- -M8UQX"!]MAD>4#!PS8*U&]`DUSZC<3>F1:Z$*8INH)C??KA9JO(&)LQX;9='6 -M=UK@PXB(9%+,K\P]B(FLRTZW?7IZ&23KO^6O-I\C^[8Q83;P[IF3R\0MS10( -MG?N/52^FC_>8HB(^'/G@M_Z7AF':^)W -MYL+SF`8^X]:;`W;AT(F$'`FD,2Q.J9"X, -M"XPTG=?Q_5LL!"65:Q^>M[.0:@/#`XVQ[>1ARKE(Q>74?72,`Z=<3*D+;`PQ -M4#(/?HVU8R&:@L%IZGS8:2H*.XC_@#6>@?\>4/8@PW:@!P]$1\UBAD]E]>]?Z=&L':1%G6MLV(!YBS["SZJ1?XPF!FVR? -MJSSZS.XCXN"(SI81 -ML;MX+K\B'OF'DOF_RGO"5@IM\K%J5;@3E!1U1/E*Z#0"+NCIHU*F8>*13XU$ -M1DG4`\^->)"38S),*.?[)!I:F_W2BC=$*G+P8G5B91*!V'J+V4`31^V/5#"D -MQR+50SN3^'M/?T@"P)@C"@RA-HC;GE:O5!-%?U>9/9C.XR=[IW51J&:.FR!_`[QLG!X4F -M>]]F*Y%+B5(&ERHHKY@DZ-$9XM50Y0-18--TC7R&=3A0+:X]&\1>I][9H'%@ -M,C1SMGT[6W6#BTI^=0YNI'@\IL`&;F86)&-[5X&\)-3CG"!A!NI9.K5I5XL` -MW3T@?C<)D2RZ;+A-7<$U"J5T2 -M2OOM7$)IYM?>CQ%IE"''?]*!AL]]UL@6XO-XQ+<[&GFZZ]5[_6$?/APND[T. -M>C:'C+:)Y4^3F\%<0*Z`9C@I@,8&%]F:`A[K(C$<+F;`LGY9*Y,7PF3JL!%& -MO-%-L31I;I!12"7UI\S/';;8]M,@']/J6?M/[`_OLDO7H42?Q+$.Q!OGK#"[WMB;8 -M7>1H/:\HRSS#^VV&+;-?\VPU,O)T=^33#WOT!GDZ#=+(Y],/1CR?!36'G/R/ -MXM!"E)[L<*EDRG7J: -MQ!'Q"*5O(LT%0=2B.#DVWBNDQQ^K[O*56X^!69Z'.2V\ER@,R10?.!_-G$MK -M[)@QHG]ZJZZ1&E)I-.2_T_7V;+M2HEH0P0#9A.H8+XEV(XQFZ&SX@PC'JSJ_ -M&A-7,RB:UPK#FV'BTG]:WY$9EP4^6G;->75Y-\4E2SI?@(&+GF[J53@4W78J -MIX/UFN,^\?7AD1`!9`:TF6>[:@G)H[T/DS\KQ37N)!AN'!GJ0:L4AS,5TG(E -MN8LOT%H==]"/P/6\9RN'R4/GG@>*J/7*9**66X+G/QE%.I[42:,G[MF/SIMJ -M?C&K?(54A#?S%%/H8G+.K'-?BVYMJDZRA1&A=+NU66*LL#+N&/J8]M=U[/+E -M."N-.*F>K\,2QZ]@%E3RDBDO8&DC!MO\R@C!0LUZ7V+4LZB4=L]!7/6DERU% -M\*K3?+$>J/A0H'TOU,[F$:8B\9/-:J-G'[3D0.*_'L^FK3>F3_!5^G]##C`%S&`N%4::QL268+42FD->KR>BEJM17%&;Q`V38QMQ^*TS -M#@(D!%O&19@%YE7B+RVS@LD>VIBW/%XI(%2$DF0(WY-:!:S2P'/J9<^SEK3< -MWNPDII[#)&8;_C(53,L-^^<)\G##IU/9/7JE')8XMJPZVJ+,;MXYE8`Z]V[R -M[<>X_00%V/HE:M*('#:CB\$Y$IP?7UP[4WA4= -M]'LS%I>)XTBKE5=@O`[^&\\\@??`OT6'4E$(]KD!$XY$!RAW9;Z/UX*0Z-C -MPWA[_KCV&5AV6Y/N&*8Z\3"Y]+I1K9LY6B$".*TW>'X&"OYL_0ISAIN4A^*P -M3)Y[&>L+8"F`DHS@ZUJKN_B?(0D-9G9D^)`.\+`YL&K`>W,5(D5+O#-?P\31 -M29>5PH\A9AD>UC*584@@,&^%GH0N*E3`"K4MU(RW'7J'_JY^;*\#[9$A+UB- -M#/U,#TV)F1R0Y'CT`W+\2WN2J+$+9M,/SYLZ07Y8I1$>\3AU.[XNIZ<"$M7& -M3^WVA3@7U+E[!?M+=5@&5YU2I(#W(2/-`F_RQ*Q'2\V*<;S?^E!OOQ,+9-2> -M-1/?ZI;.[J.I_)7"(7V>FVHU/VO%$J*F'?;#(@\Q88G3=R>?Z_,S6:V`&?(( -MW-_:-(P%8'AGE3K"NS*V'_YB=@^-'E=S[FB.6X3C/CI`_&=1@,OUA^Y_?/U37ZM.X#HC/D -MR)FE[FM:.!Q'V/_^,US64F#N.L8T\%MOK7F$=5K*>V!I4B8T0EK<6C4]MBYK -M9IGB@JDUA'5G/_QN]!49_S(6N!AE*LD*S1S\R@Y6:&RA\0%J_>TBEFPE6NR7 -M]"W];1[G/)SW,*]O-.6M_"HOQZ&&"X\6#V`P;I@SP2";YW;X$SX:].M=>A('3%8*JQ-_V\X`O'3MC3-TX[2Z<1ORAM;< -M6%]JW9A?(+X'PJ_=5"I?R>'O^X-38=7CKCV'[]LX.>AO"AJ/"$ZE36#;OK"] -MP_]=-';,?WYDN`T=(YB_LW^/#.)A\O!;7!4HT3E9=29)KIG`&4(,F613L95+ -M[8"[F"`,*OPHGXGU6\V]8`GM_>AC<,6!&;!GW?0-O2M^R09L/;:]F;J<"OGQ -MI[Q=U_Z07WU#A]?6A(R'VSLD9KS_SL6,CWUQ])@QU\;6P5[TS3]))HO.?#JQ(Y4(<"$6G"XA@FLV^[P:HT+U'PE9"Y -MVBOC%@=](/51U]STL;J?^#\H!PA12U+R(]= -M]GD!K>B -MNM_'9OO]IB$D5,NLJ="'9,::V8YMD%]C"_A7\B3V:];W-P>G;J!H-CSD6`Z$ -M[=P38`+(0_"O]WT._*B9?FJ/YS0UGL=Z5',>.M?>73L`2JX>5HL"-XYP1:7+ -M=-P:0Y`_*G!4@\KB;BR;H+5T](BL&UYBNE_I*)'W>^]DFEJ,VM%A*@E'X6T* -MC$AXZ3D$&WIJ/L@<39'<1D%L1T>3&5-^;5JQUBOS4E`K(>!MRNJUZ:K7CJ8^ -M2[2O'?U@KH)D)ST)JX(Z(]"\J/U*;A1N54R'R8]O)0XVF6?Q;:@Z?DFGAI0( -MU:H5922M<+X3B1&@CMIS-F0F]4.CV$7>/XTM)>3\;#Z+11I2`U/%*XMR,U6] -M%O/RZ5+*M9)ZADDV+'::EC[SC=,MP4; -MIEMI&M;V?@UK?_^&F>DW8X01#A,G9L"S%+7I'4Y%\6EE>"D*$SICOP>S"H\0 -M,%$:OLT+?@+KKV/A_6BWCBU]S442)H.T4=G&7;M`T-NTN,!U3L6M..(+C -MM^^UO]<2R*>^J<\VH5/:TSZH;1V!KLE'B(@A!6%?^!C9WU`D#>19A,ZBIVL3 -M:3)MS<(OVW']FW>?-9_,5.E?FZA8* -MQ!Y/R'"CQ*Z<=S"7CA](/M86SJ*K)OFCNR$,\\5[,,/L'E^D@A9/\=Z35=Q* -MY70M"I&&&3\>4YW6:U%WP?P>IY"I_PV/E";ZJ\5X&MJ95E[5]7H(RU6'$M_^ -MO;Q'4(YB@+,H'Z`N3UY209'T1`0]H1H6<\^O_+$1+M;[I]W1K=6&AQ]F>798 -M33G]>@S)@+DUZ9=256OC,6#4RGTJF<4ZMD:R2>P,CQ<:D'59GX`"6"C.Q%2: -M>D$TWE56KG73E7MO/9Z/T9UXB5D/(WQ#6@83)&D7G_=7U.U=`8?1Q32]#$ZX -M%N,;:(=YM!LECNYWC:ZB1L,)=E3ROS8L4A7,MMBK1B8/RE#;%`&-,6L+;E-3 -M'%4_2KM4M5##KV8H5Z'V1J8]S=5Q%UQ?L%80.FIZ]%WBTHV[S(=/C+O,",'A -MA8%BC,N*)9XAQ(L._[;`VGA+["9$LA$C#1Z>]#@K+H;DD0U9,#1**!U%+3#_ -M#OW,M1R54[.BA;%9JHFT2S%=)>@[.F(>!OR.^*8) -M^$WE@-]<.L@+C[,T'=J-T3]J.AM&.PC864W\\]L,7`T3_[S.XOG96H-8S?K" -MHY3<\_GY9:8ZT&[!;-+;H7TB':P\M+TYH/]TZ*@U?<NY>ZE9TA;(:!-/CR,8HC;!6I3`[8`FVWB`IP+J8*4!D\"(/*]NM/13Q -MVACA%]`VBTA90[J`&&GG!"N#]>G6-G`1X7_:^7\Z-@0:0+O0_"S#/\O`SRS= -MST["BR?^<"B=-B)^<_%&/>,C1!?A"O -M0"XJ&QK`>NN/I!]-+8[E'JSZ$$7OQ"'0,((X30ETZ]^^A:Q#,(+Y>_B'IFE^ -M66&8\2)HE+J,U*(I=Q10E+X(>X:;L_'6"]JX$Q=,"8[C#F^OW^%-MW0?QY*> -M=F\W\[\LQ5;Y31H#;G"7YB"CAQ#_5K?ESRTEVX72D(6Z(1W\4_I5;91VJD1I -M#]BY*&UVX@Z0O1^[I7M[5YUWBRF;ZM?JL-ZHC=^(WP)Q!`O:I3?;=&]:+SU* -M!Q!0827QSM:]_DP:I_LN.?4#?7OK][[@!/XS#>?XLB8(D4C$CJ93S(%EZ3%?,1$NCU9 -M/&%CYG;];9*6'Z'MC"O/2,;!"@R-K2*(DS%L!AH+K1N"S:P7?6AL?)^[%BP@ -M\;^.TMNJWK>U_7]Z86_W1@![JXHAKO,[XCQ_S-S$MCM -M5#:%!X912H[\V;J0/#[OXG,S3'[I6H$'U-8C[9):+X0#)0\92VRNI)//(.0V -MP\:HT$$E``EDJO39BH7:LY8!4'N<,<]C=KDPL?U,H0O<8:OA9\-\ -M9BD:S4U5E91XZ)+X(3'K1P+HA.WFZ7MZ*F7>\[`HHT0(+(2]9F-T!="(YJ'$ -MPW]'?LO$'9^WQ:@E9$B)?W-R)+K=5K:<7Q!\/LP15_,D$:LA@6>'K?KW'&F/4W3-T;U<'4+0R%KCC@Q,4%N^4$HZLFMG_# -M#1//33/'OAB"Y;C"FD)QG13H^%)SXQ4T9Z465E-3#+X*$]?NKZ(?R$P9YT7! -M^RJ6PC@A(CB';]Y84PQIS)SA!"42NL');4U8Y`R?#"A3H/K/KQ(4VEP[TFV6 -M]U)F7[O-RB%CQO)FX=,M?O\-/NUUA+/X!*71VW`7^.(Q,3FI,B/-X\\5::,VX-6 -MPGIU':R(<2]_W6IRR>O70D?$6VOF>E%)CL(D4F5XJQ[FE`,J[7X'Y:F9_@## -M0%C/PV\]>H$GP\:MRFL -M%,3,N'AK3=#&_!`MF3*YU3#0J6LZ:99S-4\.276A$SMRM`Q$1#*7I8PSYUFP -M_A"\8HQRZI'($]DIT\F$B05])KV%*A -MK29E!UVUE:12D'+3OGB$A)!.V=GTU]0.ND&8O`@ED>I`_WLBJNBGDWH*DWM$ -M!5_#KJ!YZI,?;,5*5MB&O%2@MZADUY7$K2Z2L6P!BX0:'[_KN\=ZO1+=-A1< -M5*A!"!L%`[3);.@<2,R/6_`-R!0&??"?-8%7HEE:0!B&Y74IALS9LX-&%XFD -M>NB_FO2?*]W5]+>R(PMYCRB$*YN6:J"^M`]#.L2\FPN3']MK.00'A-GJ\.L15)32TXAL:A\4\=O;W+E8?TR*LC\V45KG%K-8\:KIBOJP\,A0IS,*UW35.;977T -MKMZ`UPQK>00!PFGC'HY[Y>(:!J?6Z@=OF4*9!U4/:7]=I36B[F3U#_RI>DA4 -ME#5O14H*I)C,I2(!H@LF8R"8UOY@Q%G0"-J%P18O[\KFRMXI99%6>1>&[2'APFFQ9&U+ -M!YQ]-^QO10J+!E-:_[>.TYARX:LB< -M"M[7A`%\#V0UT&:!'&?%85?+XV/$5YF.NP0^ZN^V'3_$K+!APOT][CIYK=^, -MGWB4R.D=%&K+4E8Q_T5T<2U%I&0,B,P!4<"I(:=OK-L3R!WQ9.8*[ZUT2<`= -M@BA@%@M31S<]^Y`3"P=3.+6H;RPX.V4OL`A(6LJ9\JMC`.#IG`_HJD>;;8+_ -M1X,-WOP;7`VPO?LP2&1];")-K/%:54Q9!%%X7O!IY%F%R"T`*D!O0MZ1KV<\FC2WG]Y;X6 -M\L=\SRW1$1SFGUD;K*B:NAJ7&-(/RH"4\#-T+Y0)04^H3%H*K=5==BO0^#() -M+C9$U[SDB@7TBG[PE"1@FJL-S:\KZ!(N?^7,,48/\TPEW-JP&I04&PW2OPSC -M*;Z,587%F4#*].E!)%;SO=[ZR]QB+J=24JS/J1MM#^?BJO//GR--ZVL?0(^K -M1Q(N76YI3;`$VT]&RJ]DH,'E>B$LDWA1Z=GJ+@M/4'6*`Z\SD9DZW.@VL"8& -MLHHBM#HG25Y#WVWB:^#B?Y'W&;``=S4P=!?N0FD[N&6Y^#G8/LMXLI'^XUHB -MWU9Q1(,5)GZV%!Z*=;)X$!NW_WR=)Y3Z$*MU'/W1]R;1<@2-F\Q:F+SXM,;8 -M$$+[7IUK;?#FM-$D.SW30KJ!5,SJ\&URT:Z:9LS+]].0<47C -M^%LN)-M2B#VG=G*(,)@Q'&1.^AKU3RC$).U"_PT-,^ZCLRV/]GVN4GXWA:>9 -M\G:EFHX8!X!F#ZY6L'G%?VN6N'SAY5CY$O_&(K@]FN\KH!`KN=I4!B7W5#\" -M`PA/RJ8#];.3P<7.GQS$[[S@`T^O/-Z;M);0I$HO6+F0D?0Q6D."O*810=,S2.UCM$YK_B4&_=\9,B"-RI?48,'845!F -M1(9FFF1H#MRY#,WI]^T@0W-X_B5PUS1-)&&\%22U%=^G,Y7BTA/)V,`%NHD" -M.&N,=4B@U9_QM_)I9R5#74>UXBAHDRJNEE](%Z_';MF`OSG.]$%S8*YOVG3E -M7J?]($X<:TOYR,HK2)`>IGW*HAL9D.9C2H`_IMJ%;$K7MZ)9H=_2M$T%4]N# -MR;A-!8WI8%+O)/OQHB]@JNU+%2HU*S&E/Q7J^!B\X:C];GNGK458/>&!0]34 -MU?('I__;_R?'Y_4;JJ<]\\F5C7G&I=P9@E5B47/ZEC\/Y?,-U06_?7AE8S;5 -MC&\/GZ!SCE]0D&7MO;]K3#?CMI0C,@9?XG(H/B2 -M^S$KGG>%;`K/.?O]6FHWZRE2M9A8D927)&ZY``_.)J:%0&^?"`9DKU*>`77K -ML*H)8E^U"I>3U$10UI%[Z:G$MX@FP?EYJP93(9K%-#JKM!_D4(BJ6SINWP]' -M3M$%ABWJK8.1%^FD69HK-WGC34;D##R#7#$KA+`LM^AB]5E!4R%)P1EEA9Q/ -M'UL.Y%Q$Z`(DALD4D/Q'\;WR.R!HA'6M(CO()AS_6VZ$Q\(IBA,8E#5@H/`( -MZ8AJPV7GD-UQ2ZJ<0@3BN'X_\>(%PB&<10)S@9W3QUIY(6#NRG@XUCIQ40\%-BUV'Q."O;-=A\NE(#;X[N/9PL*!0.N*U -M4+C(L\+BO#R^\R+T41H<5N+5(>\-NOZIR?/=.!,KJ8]7!&:9"C#U*$)PEMJ> -MA*Y_?1L+K]WRI`6ZU@462-_WUC]C/+)"*[,HO^(U1XJ, -MQ.36P3'9DH;R46Q1T&A".DD*S,R_HN>+A*[JC;%8,J0=5#7+97&E8H0G98;5 -MU`#,:QE?T#O%GU'/E,W#S49<@7W?R7+*%!& -M^JKAU.56OCU>JF!@3#+/W -M=R68H8[\T)(6/:IH\I'ZD#EC*03'\%Q16+1#%%I`4K(B\SR_'U9[.&YF'[MX -M,86]YNKXLXMQG855P&("2`44.[R'6`A<`L;0% -MN)UA9`I752Z;SY9U80I!+6CRQY0O;8H5":M,9Y6Y>:Q(H77D5$D\&MQG?J*V -M@U3)%0W,8L:4QJ0\=.\QN((`X@)!XL'5A8.3;]&N",X5(1BIL.&`1UX9Z"1U53V1(ZXBC>LHCTAD6Q#38NG1VZF(Y03M5.\/$*R7=5",U -MJU5/1\IM6GD+6,V59O07B/4\D\TP"B;;RY=A4IG*8-**=?<3;Q[G,Y<9V,6- -MA_@5Z)DJW*.>"JK3`+J6H2NP9,N>\4F2WJ+%BKG8YEYA%1=*0YH><X3+]"43+<9E'PW'`(46+XK>-8++B:[`@]D_C$/9EX -MM(0,%"6.-2=+'Y60>E8F#*QO&6.+1S]<`^&!?9U_&?!/P,#21C!L@Q"JB=P? -M1=+`BBPZCYREGXBN(_<9&,H\:=Y\ZO61:@EO3B"W)9O)8#UZR6(VQR40)MHO -M-/"S6EV?=MUC*=$2YLF.E:DOK;,"7=C)E"YO`?<%)A:Z8(?NK>JR%0]N16OV -ML"HI+2AHXN%G]Y)1Q@!Z3FGY*4+I09[LC%/NG`K793Q?IYTZY3P4.C=]GV*C -MRN5120$O147#.C"-WNBKUY*&#CSYE_M;6YCNE3"Y=(LP"7.#L5Z8ST7@5<&Q -M"']@A2-&3KH6NV/P'1NFG"5=27;IA__E!D+I@F/,19.]$ICG%%T]0A=P]L1S -M3*[Z9R."SW!0FN#H]X]N)IG3OZ#I@61XE8Q'C#2IBDE(IW@IA2B;[Y.J2G;!9D6F)XJ\Y*XP?:1SFSX_079@G6#5UZ-B=5%MK0O -M]!P.?DY8FVTSESSI+:'-P0("]6IPOYN^21F"K9PAX(`RC%"T-ELJ%BS,$MUI -M%:QU2AND#AERHD?U?6`F?/NISJH378,_0`=/?86)-D3VM_06V:_S4K.K#8>> -ME-5Y)7$IPF3[*^A5V(P^P0[*7E0@G0./-24.K55G^Z,K6-,T3'PY,T(DR@PN -M)<)BR"#+2"0>7A6+M6<+P:B6T=4D6`Q0&RGD`6>EB3.H\.+`)Y6U)[WJ9/-K -MRMJ,HI(5"=&S -M1Y=88;='[\U'&9V/LB*P)^7XV9NV?>CE\F@UB$,-AWZ=0R.8:6YAGN8) -MO='VKLX>_W-N+AH6Y\*/M*AB"O/,L#V,*,N;VCH=G+8/'KV@?JEP-7G&]C4L -M>04>5086]IF+H=?71!Y*>)82];CA$PV>?HLL@_3 -M)QB\A-I%*3*LTW=ZRZ>14#>R=MHAYZ,#6:9)X:4'/3"WR_/*B`\Y9"S\8PG, -MJ^%FN/\*.""W11CGB_@?[<.Z+!C>\8EQJ*671I:B)P;1@E/3/%4+B;I>9/R? -M&)25BU$X/R`GB87DZ$[R>"H^:&UM#>A!`?RU&B'2]"\<9$)%DS1I"H5A-VV; -M<,6A?(.C/0X[>ABU..$E)!F##?N,#.W%X`#[9L:;[5W=#?TQJ[]1SR[YS)=Z -M*RJ+QS%52B_3??(NG*+*%F7"2J#IQ]9_Z.6* -M[.C51/X<859.Y&^L[W4'`@G7[G9@(\[C<`(CE==UDWYQ6N'Z7+P#QU%3?='^ -M&CISOLLWB.^9];;'0#AAV;+J^RR&D?WK+XD:E6@2-&-13^25A?AS]60B=<:&65":76\7!J`YE'6P?VL.&G9R(+]%5)%N&M.H_TJQ@M5]]E/9)P -M@E]P!%0BP\4\4WPJ?#K?U;;8H7/4\2+SH$Z`L!UM/4UM1S'"@6RAOX)/7_PT -M'O/TO&"G$3Q+C%'(O*19CC*8M#*+B+8-)I`RPQ%ST3X5<;MUW;T8Z_W_O"WVU[_(+'^/>/+;CJBHT;@VW.F,398W;#!Z;3 -MU;'IC/G'].A?^A^;-E8__^V%H_\8OC^MX^]V!M!H`6,>KOK1$]?MZ.J+QOSK -MTL7**\>M`>=N=>_HMR1S>#1-IQ.^P/RX;\\NY.3>;K_OEPU^\9066M+_? -M$RX:\V9UVVB/&#MY\HKZCQC1SRL7K!OU+NL/>\'5QRE9&;`J#GN?NVZZ0L_# -M;31O__>FXD5COO+=MT;TV?#*CX[X[(^/W[OC%]_K*7_$"R_Z2K3CBRH7?&;$ -M18_`:^YH)F+(;F?7Q>=8T_$57W5\\-/66J3-:Z19KWG\6OK[N$%B/,T=]X-A# -M;MQE2NNTF=/K/W!$#Y\P^:TIK;-&?X&Q-^WRL[99^/7[3\.=ZO;3LOT=U8-? -MW>W_;J=/>[].GS&K8X>=/FUZ:]N_U>DSWJ_39TS9^4YO:YTR9<>=/N-_L=/) -M6RMDJA.W_#S6[_.#`SM@;KY?AZ>^^U_M':W3=]#C%_ZQ.G-::\>LZ:-W^0\O -MOFW6E)FM,W>^SV>UMDT;O8\^LN=N;=-:9TYOV\E.[_[J.U/A)=IVV.OM;?\+ -MO3ZD>IU2Y.!C3:4\?6W/3X=UM1,]#XV>.OI4&?/5!4%;V_36]BDS1N_Z>UZ] -MHWWFK!FM,W:R[U]YZN/M;3L:;^Q\:%=[QZR=[/QCMK_;-FM6:_NL'<_YMO_% -M.>]FVOO\ZH%WS8[U^Z?_,;%MRM09[]OQ)T^XMAUFZZQI.^SY]AG36MNG3MMA -MS\^:/JUCIV?]RS,.;VN?OJ,=9>P!ITYHZX"UUC'MW^C[*5-:I^]@T[BV[PEX -M[$YW_O^?_8MMX.EJ?PM/)?,??10S9=ON.)(E%X0JH'TVUG*LJ).XFI"IE%3( -M9!F62,)-X/:;+AK[6CJMSQJ;-ET^YH)/C]%'$CP!73[VM1,N)7#CNX?!Z871 -M)]-%EKY34BJ8GJ/J3'@BU@K$DHNV.#WGP$/GO>/+".C123E.I#$[T+A?#BA$ -M/T<>FJO)64^I\C6"7!F0W_8NW-PQ2WWB^:3F<,`9%3Q1&Z0+Y2]5I".+PA,I -M+CLT50L*=X0TW7XY='[U9^DO3J12:(!R`BLWKO#6S>K85#W@R#U70TO[9VSO -M6@>;G,*!K7/7LN%5*EDD8WSN(M'[*G#D87F60GR+W%+9RTT2T!%6:N<19^]3 -M>F?EQD5+9T$G[_-Z;C62YNQGE'`HK>.7AYR;AA#%$CK/_&5[%UF>X68X:$?] -M6-2KJB.*I0@&/7*C%'0%',DQ/F"J#=6+:S)%/)J?]S>F'2U#!_8@J3,.$30- -MVK2DV#=SQJ;J?C^#0/&>93P;$5 -MOX\$;W<]C$I@=/Z50J:]=`Z4H(K<92[\/D_Z",^\;)K<>9[X#^":9\* -MP[[[/M3:#[@9+`9K2??W5!"*V'(,=`;5350*,>26\^*?,&T@*)8@[V5<./[# -M6_9YJ%,A>EO>0*_7CR4*TJ_5Y(=^!0V:I-VB;4C -MV!T*7$3+C[K>6`JFS>8H"F$+=#4S`;JP3(QB@T1*0JNU%,Q=?IQ4N]B(H15< -M?YZX_\-YN!L5T*MZIA+IQ=[_87P%NK$*YAO=,'B=/B_7WZ+1*EA#E_\/*V+E -MK#R',8Z2)##B[1Y2K>2R?E^`6KY"%>85F/K6(C]0TR],GO\-`C(8);9LVNI^ -M1DSA](N0<$WF*::[OGCB8EUNC^K>86+M3=`<,">N5(@3JV=*(!^K2)8.0ZB' -M4-3/1&O7WL1<>D6[@M]#"/O%8P3;;58+LT\%0E5A\1$$5%(00Z6I#J3`F]0R -MAXFG?\#$-)B/I](JJ1UOJ:F.+\,$:`X3+SQ+.H&PF,I5N)9FAP$X)4^]<6'. -M]3,4/=3=!,OEP0>9X9N[2S*S_$A6&T?H"J;%5",5I3"+R>U[YHKBD.-\&8G* -MV`C#6[%1IDI,XB9APZ9+,6%&P3P9OQ?8+#7(.;\8.KM?I?C.5:0CH#*RP"KJ -M2QXP'8U2C@ON$8V5*9:0R@`Z9ZUJ(MBBH<2/3XI5MX6))U\;`175<>5H1-I- -M3[]4F/C07748)>;]"NU/,6VKC>>\#!C:/($8U"OHF,E0@I'@"%:"K1'8DZ(%GMQAAP370GKE7T65AXH.?P.6:"GB\ -M(S/:`0;K9*@M@!AM['JFB`3,=4?,9;/,FR^&\0GZS)9`ER['!\HR0V'BN2\@ -M)``\&!BTW3_2;4^R8C\G-M5F#]O!,>VT&G?G -M>5\I(>)")0'(X,#T!>L521GF%1ISF;CL&]PO)4_0,`((K[/D:%C5V2\-QM&P44*W -M[+>=G"V>N83(9C84(BNOE/LK907"/('\UMY>,]G0&!/1`B,1Y\9F-7NX]]S; -M'MA\)922(*.`^IRWDJZH.Y#-1Q6$-Z'M1@26+86T+G^C,H1W,*L?W"4'L%!(?`GO_2WR@I?&J% -MV9:RB!Z!7R/LF*6*U4C%-J.LWT)E`Q%?/^!2^S]!]XB96'Q55E.;$&JH=$)@^O7QZ9[ -M\Y#S9`-/79B6S1$3#PX&!)Y1-(O46@`..$RL]``.T33,\E8YF"C.JDMRMU?$__S-G,)/';E`27CHW -M3OA&NCTTXHH?RTTM^"DRI(7)QM-L&(XV,;&=2Q*8112U@J<>AXGQQ@[!MIYJ -M&"QLT%F8G/7G&.YL:I#G30A]/^89J(X_?Y;*[Y7[I+4EJR:?$([-0XFO?8-- -M>6)@*HY!)=^ORAFHNY#`")$V+WZHJT)6C:#_N"5:4!'-2Y`EZ)JHSUS]:43@ -M??6_F-`>%Q(#VGP-CX4WQ^D9E5MP -M2H8!+R(E098,&CDA9SJ22\7.=/@AUT7#L<@5 -M#1-O[(.5+0KPY*.%XPX5)"4Y"X%RI,U!4BD*\5S"32]TQO\0'Z'$<&5WVZQV -MM]W6$_D_*\:3D2D$E0(]W4UQPKQ@$3=G8%"H/AVH;"--KZF+9V>$#)Y8O$))[C78)-6EEH:=8( -M4D8')X9M7$+BHLFQLF\]%V&F1&L'E1F#=L%9/-L;,&@3CYL",^,(B$6E`TO[ -M_%NMQ[%!]@W^"[Y.%8-UA8C>+QIV":*`8-VHCV+7\#\&^5P,$R^_;4"\,([H -MY^51TM(81X*`Z6TQR_SYL./T62.2HCQSHB>E&+"KSN\>T2=\<(E:&8M@-@(P -M$TB>X>,!&QQZ?&%$^^2$,5ZCX6&+_/6CR./%@ZA.NM))]&6!N*G&E9ZAV<@[ -M5,$5]!PRFP1Q6F7G\<]8/-_8^R)KX`?K20L2/8\U!?##E6QRI2SU\S!3W]O% -MQRV,`-`:FEPL#R6;7M4%5V"$"G!L#@8COX(<(C"7:82C8F`U'FSPB9]=7(CH -MY!H9_*?L>:'SP>_P^NJE@`F#1Q@OI,X`T)X//8+%`7U48$X]V8_N8.Q]JR]X -M`V4ZJ,?Y8[!BPRV3.R1^)=Z&^@*6*-?-,0^8AJ;R%DB[_=H!C`E@I4>!RM,0 -M/%IG'H/U/.HW#*9E%(BA3L#N&AQ*S+P=IJZ9H+C+]&/\!TO2,E0=A-T`Q]&2 -MAU$\,@8]<$;-%!D%%HD[P@CG,DN/#3GG'^KWP5)`!!J>9GDM*;296;#0A5<= -M[PKK/2X6\,K[W)*]2)S[7J1.R64]Z4&41M=L]2JPQ4ZDTAB,%2*TM1VF[M=H -M/[R)'<_O1,`-F_L!:SU6G\U*NO_$K -M&3I^&DYLYG40HRJUQ;#0O'.H^`M\Q*"/0(,M-[*@N=>'\N2DTQG(Z5=#?\%' -M?O9F.EIJ^'_B_US.VTIO#LL^M$6W/!P&7:5C3H=!`.,Y>\E?$<;+9P9F+HR! -M;4VE&/<#EY$AU+DGHL,M&WL8LV"P%O,,9[!;[]4:G&X)`P`:DJ>L0%37@S;+ -MLBQS"4')I]\+&YDS_0#VJ\`F5)@'7MZ<8/TJN"@M3653EF$,G4N?9W=>9.Z5 -MT)6E;8K7(O?_S$1()99SX+$=&DEZ4UZJ^:B#YV!;YJ]?'B2K^<>WAPK -M;!0$\)1B#[,RX?!.\BTU!.?4N>I8H.,KUH%BB^J'ABF?7(;P.G0`>8+A -MY%+_CA_0J9BGI>#7*;Y=8GI*XH\UFM\P#J9:R$V%B2M6":]>'NZ(>]00?(1F -MH!C1/A-Q<)DIL7S>'U'_@\O5.>31Y_;KK@2/I@23B[;D5U8;$7)IB8Z."=ED -M;9#,"(9D^I3P%`;,,%!FU>ECM'-$"6$<2CA#H(03=PY*>,LY.Q#ME'Q4N\\F&M'2=E?,'*C?#]S"F;J@?> -M\<75`8N)Y)BAJ)8H06??+*Z$MQ]3E1#J2&!)#*!HDTKU^=A?:$/!D=M=GX0Q -M3H*N^U!BY?^!R5-:$\&1"GIP'8Q(*I*>18;@9[_164VLO%-_A=Y$;QD)SR*% -M]<0[,J!MS1J$S2-SL91=3@!+CK^-06UF0++9T]V"=K!JU1.'I1Y\QIFZH? -M_F[/:N7Q8-R,U7Y4I(?$C)-[GVTZ&],4$YC]H`BC0B6E:5H^4AO1O1R-%N\P -M*3CM3-)\$M+A>,MX;^S.LLBFXT$ -MAQ+Y%XG>&E<%A?ULA24CE[%RXZ)%L]HV5??[Z*=6PYTO]/`MUP27!KZEM[=PV25>W\PVAI;\]6@72J'O25(.L>0#`A9R8`O^1 -M'1SH50ICU0`)T,YAM[08DEJS`FO"F6&B_P6VBYLU5[FT&OAJL/ -MRBF]1'98%9B+!QTZW_VG/;G9!^2(E/9\M>QHMLP1*ZRTYXU%1Q>)SM=0-J;L -MO*4(;X:)]7LA96`)BZ]-E`(](VCG)7]QN>@M\&EIT"K+"8\+.NAE.Z?E#R7> -M?3R%^W*NB,7Z48_;&ZPAX^4WAX[S6?#[H3'DFG$PK#DP]BZY]U_!WKW[<`_Y -MSFMTMHRVT11T\>W[:1M`*]3G]D3QID1HD<4D-[:AGD%5 -MY-]@Y`]>:$+WO6X_G9O#Y!,G*D$^G0HBW,90P[R#_(I4%OO$`-=B5C.6\KEV -MBCMTOCZ>CM.PI>$$(81G*67-UH;;SNNL.I<];];LU\>;\AB<4Q9SA,SVT'EV -M;Q/WQ*EP_"+YMMG-#25W/53)4`2#&,_`61?A;(MX`Y3@ -MC]X`851>?Y;C\MK?RJGZH=!YA([8.:03!)-(_D0)STGB6Y1<=&\.G#UW-1:J -MMXH!8/\*Z8&S`WI/,I4)KWY1^R$$6L'9%^&*T@F)V%[=DRW[5A*KQG"L.)^M -M&V4!95]"JD&>!S3WP`J![7WJ/^85M6B@T(>[A1&-*TW61:2\8"WG@37A"YR- -MS^9\+!<3TAC;D)S[@F6^-"\O]A^T/5I#[ZJG+^+!/G.LUXNF355;)ZYL5?7% -M:N?!U4*0A4<_*U$KXA?.5(B^BYC!2L2[%/$!$$:V+]L?]00F_Q9)19^UY83. -MSQ["#:).N]!YK930BN^_Z?G5#&&;PA`V^,>\Z'@R\)N7X;+N?KQ[1/HS3-S\ -M`RD[Q;!#C#8@8MX7F!\P/^TJ7IX_D[1CS*<:7&(TDTRGR4KJ\B@IBX.!&]ZX -M.60/B^"%#CF)`;NCX/5SQ8#X2R*W+!5U`E.A.CM,>%FYO-!9^YM84;20>-FU -MYYV[L_@=!H!5#-,E=F&8)#I=27&#)5^&X4AC$)_IT&CJ+ODRUP:61$K6/J:2 -MN_"]=VAA>K#/^F0)U!K@?@J3KQT*O@CYN[P3I()5>!+&NL<@Y9:13%?"4_XA -M0>/<>2O\)AB\[$SI=^4NMX6VN'(_,E+^,RIZ]KUGN+%CV` -M$\RAAYDS'>5CMVJM$;@&'E1U#OU8C&0E+G9K[\0XBZZ;8F2*JPU_:NB68D;! -MG='092HDD*'(Z>`:I(.C8GQ].Y;43)R;@/E03\G8YWI08IZ+!]I@L?_YO>,9 -MR*,G>>@<="&F+['GB$N*_':R9RA-2S1DM.]2O)+F*Q0"EUJ -M[G/.."7^7X=87GM>)(^\'5_0!-DH6\+Q`\JBV'-%LMNVX/A?F$/E!S^@""C, -MA+QK))81VMK?9^C8`V4_X,W%$M$:T<<'#)HEYU^US,OFA!![Y<8E73BA]SWM -M+;!KXZ\]I:ON,]A'Q=RQ`<\US/DA-FH%>MR4%XT_X`YW.0[M<0_M(AQGFRE><)0-?7BY&.AK6(' -MIMG6$U&!R4M_A(%5C(A>D96$B"Q59,3$H-]LI9'WF`99BW-;MTZ\%D_<2%,:HK. -MI!`X5^)0"J>[,`>YE7.0V.H6/;&4(8OIDI+[*PR)",-#2Q@+3%ACN7PN^F/[ -MSKIP-:I$&8&"Z4JP>,&6.R]AR`-%/0,3\Q1558JFA\EEWZ^)9&#&I-!;K/"+ -MP-)]\-IEO#.:^'GRLOU%8LA0@61SL"^\=(\;('&-L?HOW<-J489!M.;XK`E* -M:>*G;0(J*7`_^AG#V6A(&MQ*N8B_8#(S/L-%>/*CZ$8MAD%PVHC"(J%;]O\+ -M@5`#J#@$"_\AQRSZ@N3N1/WH+5:(F`%IR>N0>FQ?-K_0AYV'&\(M<\MAXA0/ -M`ZE\ZAO!U:KK$P<<1(L*[4BQ5!K4%!&T)5[G&AX^'!/&KO#- -MR)*,&I%3M['22I?]2GOB'/>1WF3(+H+IG5_A(%&,"'Z,UBIIDA;80$E$P!WJO@,@U6Z-RW -M#H\D3;ACY9D&G]%Q0O4KR!L2'*NX"D9";!P>G`X6PN$M%O.$]WCJ;XB+61>1 -MOY4.EF7A!,,.G_Y[Y<9ERU0L4-U/\22'B1D>YP0S<':U\`5X,RT]K&B(X7D_ -M6ZN06(H]F.['-&1A\J)).+5]L(-_7TGV")WL2IZ70PF_9Z])I6V9F(ODA/1T -M`)=A_(ELG.-`>L$Z]THR3SQ>&F;X=A!>5]^$#SX:2F7VSW*YFK:4/R9N/8EPY?"IIY-]Q*^"ZQ93'?FLFL0+3GN.[B,_QM[U0C@R;+"YS\OVV=_4HM$HJ&$87,$:C1H@3 -M]KJAN3KGS91-O:$SX0_#)<4666;3FE,U+`=<3BNXSR6T'_5BC9TU(\1T7F0' -MT`U^KYW[FW8O\1F5*\4EDKL?0X1#+%=;T3+NT$AU(T+B)1[(03L1@:>,V@,Y -M=?;2+@9XA4].90U!1L3;[#^,'>RI>76B*A\6C1?P;"@3J()R'!MJL47@4'9& -M6=]EQ3(LO(43##JC[)%O3EAAQE3PG%34B_)! -MA36Y;19G7B"1L3UV?.;6!YA/^X$L^!P!VA65ZN"H:C$SJ*M4U/4+73#H+4O` -M)\'TPMG?06Y30ABR6))X_7`R(&VCLEOPD+P7;89;JM.&Y&E_00JEJ3^GKF&1 -M7N>3-[MQPCV>'[UD4G*#!G["=@L+K6#P%X^7#,S(.C$/T6^#.C:ELA5T6W.? -M-)5?OG9I*HOR8KE!0<8C-'D];$E("\Q$3./N7=29+G-F#Z/CK2]/&&BQ#;*I -M<0J=@5U13+@@%->XR4//S]M\?+Q:B5Z_Y*'^M#;M;ICXZ#8&)<$[]B.Y=`2_ -MH/0W$VWG%-9?H"LZ%,/SL%G=J8<5HTCETA8K1%,0#YR,((*:*>B-#^\<>N/7 -M/]T!>F/CQNK;:DNM)G%'G8G[Z>[,W:_NPHW]X$\YO8:8 -M(*N,Q22(J55<^0:&84FQKR#7GT!R>Q6<.HT'XOF2@Y9*T:P.M^4AX.R<`-OL -MS%F;J@>T_`Q#!=WW=*B07?`G7'LMI=6+S,!TPWBZ#1,W`/K -MO`L80:(Z[Y4;.TUH3HG>V5U"H7]XD-P,_<8P^?`<^U2X54MJ[?J)YFYCD(BR -M57"IHN0A8$7]:C6"@`V3+Z4E:M5@UD@V^FK6^2RHD2U(!0#Z^JKY>DPQG((\ -MBK]:0Q=U,YK[XD.RC.X'CXK1CTKC$@[0B#SWB]BDL@AER"D<;]"?S\)ZE,/LK"+!\Z -M2B`C(U -M:LAA5SKGTTBWFI?EZRH_2->(J,4@][&7!%C\J[^SHB(QN4ON-]U_VP`1X!;8.V'BS?4F\2'H3J$_2&6) -M&QG/MU944D>@:)6)V.9EUZLNC'<:FOE;S\)UJZ`CJFB_I&<;=\6G#U8UQZ)! -MI$X>;-<4[ZFG?]S*=>&6\BEH7/>]>4^KZ9\\KSK:T8;WWNSI`DW2Z/U -MOL5M#YV.M[#YT@P>(#'#T)0]C-GCHW]!BO75O%?#1K(0B(#$(!P*I5YR*^,N -M.WO7%)#PA!ENH9^1[03%($1\QRVL@34S"Z&11R,7?5>68!G/+JFJ8.U>>!8[=2P=;ZI\6>H.*-\/$W_?*"V2:IXSH -M@J()PUEG%:?4FG*K$MXYYK2X9*SSA22Y&I5RCNIS;<'2%FOGQ\RB:A!E&,/$ -M;W&>K!`@!"F@PNK=;=-"K[A[";H*P9>T,.9Y!9C#BZ0HJ0K7P?]HT)E,CBTT -M.8:2,Y_L*7%FF#/G=(++=O2CK -M1V1[:O2,PL3-7U2U"1)WS$<$FMRX<=L[+7-^T0[.Y[AG#QTVHZ9(>@,^)F!) -M)K38$K;9IQNV(U/MKVAR!'.'=0=&Y.7.8Q4$"%;'/C]RA/UT>&4GHBU6P\,/ -MVCN]M+7J[/E%^`1,J>^3SNE>YV\_UB((77++TJWG'H3%`.`6+;G&9%&71N*Q -MPFTR%90*@!F4NV@Y^*15)WWFXL6H_=9WYO*^>57GR-LPC$N[U_3CE;6%C^]B -MBI4UT/MD5FJ.V -M63-G@('XX&U/RDNN).=)O:,'CD@)]N(K7[)?U.G9O-A*LW*9F:"!V&53;V>* -MLEK^MKA037[XL>W'+B]M.?>@8M`;P*$NP&_!U^Z<+SM/34\M+VV&W^J^PBO= -M/,RDS%!BR\E+85UP]Q$V%7L>)E@IZMQ\_R;P(ONHI@5;ZDDK!"]IFS>H@@6+N&S!?L]JD;Q:V -MALF;WX)/8%K!=O.72F?,FV&/(/([.8R]M007>%SY;`\FR$$N[;C@;CBG' -MMBYI[6H5S$BS7.JELN4B2E*\_I>ZO>F\^E/IS0EI+">%[IC;575>O:H7?XI= -M$%`'J);`1CK].[53%&>N]"Z9']6[=+M2!+VK1J7LP6VYGY%WZ.P%-9'TV<]/ -M:^_`\_I2CPX*`<93J#QJKKBA4A:VKN:HR_75Q3Y3-:.9*I=]&KWVZ>L[I@0\:7$4VUJ#%:CZD8&Y -M^3D&G.1<."H3JW'#_=\@"K$Q)[UW^;9=GMH=AWNWTH9M[[Q=N@%-S1XG7';C -M"LQKW$C,`R)"4-P\8V*QC`,>TUR2--Y*@L6OQL#SH3A9EK:&XPZ:@M:\>6C< -MKZ^:"Q\$C*FGG$*PHC50V'J.87.B&2^F4'3U=X0E)HC5B&0MGV=BR`**&\#% -MUI3:I>L"7(.G?[;^&KSDGS)KC@<_UN^#A<%R\G@7^7T&-FN4\WKP==4[S-./P^KIJ[%M"059VMOY_:OGYZ>W,P;_%GCFM6=X'%1N59O-S"<;]\ -M0U9<<]`V8WW;K'#<`4\?TULN]B!X"BS3M%9U99VQPU%>NFSNBJ"]C2S8+SZG -M^GXE]#*9:=WUU<2?W\&N!]/U].[;C\4IC.L3K4EO>X); -MY'+%ZP\W;G0>??/\]?J-"ET6NW:V6S6#ECR<9][""RYNHM8\S!Y -MQG\OSLN^C)C&&15 -M8&PYC'=OELJPH(.7EZ*BOH&U"U2=36O,+H`S,/<-FH%#SLKFMFEMZ]NF36\. -M5H`SPH46KFE&;];O+9*IH*D7+"&OL(*G#C`74V`U1G.[:CNV+3ZI!HLRJ0ZZ -M8?NQLM>'B>^_56>[YQ;.KCIO]*C9%T$?J];(_(.)HSLY^*0RN^+CPE1*_&2_ -M8SW22J;A3RQ^HJM8L'L&@3MA\J`#P;@N)[`S0KN947!>UA=^/&7,*5:H%GBV -M#'YQF/C-@QB^AFT>22&R%A-#U^+N:N(WP\M+E(Y*O/@',JI5YYZYS.*D5XE2 -M[[+[;NX\TW6L%YAM69;!Y]TQ?FY?EAU<#*"!42FA\U0F-^.L.X[U\L1HI?)* -M<+UMY,+$\G?M@E;.`REN!A-F,?.8!>EW^0@^%07K74+V]2"!;PZ6ZG'.;(!;:@0J9N7:N:IY_64*L:2E`9Y -MZ4(/VKV$,"#538)'"AO^\M\,CVFM3KCX.M:>A2VMWA:P-NNJ)_B#6M`CE^VM -M)I<<-V$`[#D>>4+XA\Z7@V-VTY7'%71K6P,%9U)WBALCQNZ.FS5Q'A["RARI -M:8A6PAK5#H+:P;7M]OKA:(8[-_5:W3='C*5Z\^6T_[6@?WUBQ%!-&+(79X)O -M[9*O@>#,7CA*59V-S\-3>[!4ODB1ALL>6T%'?LMPH9A.P]?>[-QZ_R:#ZNR, -M_J_*K@4XBOJ,A]V]``*B4ZF/6E^HD'HY)>0Q%2G:JVO<63=LETYRV"IBE9!JYT1!JT5.W1:6AW?]87MU.H4&;5I%2UJ -MO^_[/_:_>Q>U[3B.F[W_[O_[?\_?]U@XW@)7TS5QJ%MV2=E01,X.7+9;NB_= -M2G./NGOY\"1]VNZG^1SP2C('#$)"9L48M=%M7L%B>Q"HAY_R*7E0[#4JC9K@ -M^;VN:F]+IFSMP9XFUFC-?+38`$0>PTK+')`PO:VKD%7$,T`&M)^_487E$I?7 -MDLY>GLYK[\P=+G`/Q+PMU(T.PWG&G.B$=#.:8S9XT])S6'S>>678>$Q'7:%N -M@^KAQ"8H=]7ZIJ>$CD^06(:)'3CWG;T(XTPX^&<99&#%@MS$$*$NHR2,"[JQ -MG1B5@3,1"564,^L6#SK,$\37CZAO@WUQXF6ZDFM`LE*8$SON5RVC#)@F'3R0 -MQ'-TWM7^4%[!G,:[^K""\.ES74A\$S -M/7/2"DO7S8QB#8LS3D/]Q,ISQQ%1 -MV?RDI[DQE2[V=4BN;?2+KB4VH_UE,!DGUEHZ2AL$ZL#S\WIZ$KT"BWP"[*R- -M92UE\\!9ZV_MA"@FS:(BEV;D&V!PPX(X.F_3./[/Y"E6UWD/?X4K3BS0LO7J -M@[R_@RQ2R%H1AU.@X&+-:)9_0-*X:JK;R&1L@;)?VWM02XF.$B2)M5"R4MI8AH<&_!P7H@+87#[X@R6B/ -M(0+&_*4WG^3#K$@OX;P%1WX33IAY]#*OVCHH7"]P?Y<]QC`3GKMG/9E\4"%P -ME/6Q-&J.=,PP3&\><+6[@#2-.QYBMAC3@F(X17L>MYGO>D;Y;G_>+VK\KS -M,L"K)48B@D$VNF>VUK4!XU82O-P$]Y(83&A%P<`Y-.:!0"+MS?\0&B:2O"+( -MSP>NWD08`J(&"D;38,[:_)NH&;AZSLK1>'J$*BS7)QW4.R#Z\;X!,LBX3'LF -MB[ZC7EG3%A]%]2]-*N8;;+UA^_)T7XC\?A-N@E-)9@1VTAA5K-+]K$R,H!T0 -M>\]&*P>8(H"-W']+S!/JL&#;!]TPATP@$BSWM'*Q&Q09^X[C!M;6;Z@5\:RU -M"J63XED+592IWU!665(-49#<1@^!RO!2,W`3CQ[APK-!"(]M'//]3B$_5F-7 -MX]EUM6=W5H)L=!WJ24MX2&5QX_K+Y)PUU)]P[UMOJJXDNT&&)WP)(31(!1'[ -M6F[@*S;M957CK1/$IF=?\04?IEK.OA?DF_@@D2RF-DJ//\G=^+P%3R['L&2# -M9/)N-K0NC5],+7UM?C+A(F&(RFEMS0<4\LE>D$S=FW+61,S7["X*BQUQ)T.IV -M\+]]M*]4::_7[A&T-WZX#F)YEMSA7P'>H*2*W18I_M2^!,V!(1%5H5=L6N&/ -MP&866]LTHRG$LSPH&5'0]!8?&`)&-;:7X*EY;+:H+(2`7[/&O6=GNG7@H@!' -M%E:R^0QJ[XW*(;;V[XTLTFXPC;E'11D@J4YF@N?_?8BDO2>]+IT9PP1131G/ -M&\(J;!0!S?OJ6$+1+P=IK4+'6WC1(AA@Q,@,$+:(BW6'[)E&+9*=@?/SG^]9 -M$1>F(H&#^OI1E!K,.9_5=',4A*)BL2=*J^WMD+NGS&*Q#[J"("V:#]MJ#97' -MY.A?.G)0V.GX:")H!^H,CDY;Q4'&MT_C?@S#XL4[@'AO`HFQM8_W`4\4N"Q. -MQEF;=1C#*G"*Z!8D:)\96-.X[V`QZP)NCG'@=N;F&+?]*%Q?,1FIJ`Q:'>`L -MLJA6"`XG$5@ZAU#\(X?()[$+.?2401^_=]E2#'NL"*Z!U]U<)A -M5S"IURZ16CL$,O3:!\O)26J+#R`O]:]*)N3I,:5SZ/3BJ8#@KZ=+K'BU#E]- -MA?UMXX6[BB/_(TD'J>H4.45$L(!EM6>/)5K;VA,WA:NK)L.UE44!>&;TM">N -MC-16B1,HBA=X=#U5^W"J8[+7-BKN)DT`=JI_+@.^J)'3U]&"9MN=M2C>NA]; -M3XPYE_NF(&+3N*Y`(RR3&7)$L.H4MW'$2WE][1S5K.FK'BV&D(!SDTT)6^O3 -M=U3ZSO?8&;*U15M8>3R$?;UGM5@MENLP9&W>W87]8`\.`,HPKYW*8T%/J/4P(DX!A*O -MG.]JBB8*V_I'\OH;^RC2\R$/;KCHR+"'+\:#'ULONUW)6WPMN".8C7$IL%AE -M)#)9604:H6O=!*J]H(QK*,AQ@V@ZG?94FJ(;XEQ^^18X@8U7#W,@ULF-K"T?BM.XO"3]N3V.[CX;;?0=F1W(&V_42/YA'T&_ -M=DE1#IK&T<)/6F(\DF:C=_$9$-*UP>Y(N!Q/&.'N"N=I\5U%(1C>-4L:U%)C -M2S?+/S'HGVI+6%E?,7NB-QR![5_E5'!=3K5HK"B=774FRF7%-JBW&ZO(6%:- -M#)AZYA!AX=*1YI\@L;4/#OOS!%Z[@%IGSS*FX;7M>R(U]7R)R4A=&+3_X"A3 -M##A&GN3.-A:]!(JE8GK%Q!>H4^6R(SDH$L!`CK5)6S^KN3%DP>5X&@S`I57- -M*:4R)(19LJ0)]XRB)X#.2%JP'K8<:ZMO('=(5F/AB6!!<1Q3+B'K`NI+A+W2 -M^HMR%LLDN:P2PJ..9E-7`9&L+OP:AE6(V!;)3UZ*G58B/&^&5?8=5#NR6D(@ -MLOP"'/Z2@\WXV>(D"3=^.T64[LIH&V2H^7/4KW,5:(S0)`5K-A[:QX,(IR#^ -M=G.$0SP7?-_[G,LM*0I8W@+V;Y\9C6X#%3%YU>*1A$&2*>`]0XMBKJ# -MH5`=5[Q.06=\&)5O.!QT6&E"I*IF,E+CIJF7#H*O@"AT"QLVQ*<*B3*;>SWL -MEIQ0#@,3M5JVB5V79P$FXJ@9!SJI`.#QI*BY&2E(//N`K[R6V.9G#DE,'C1AL<&A2QU)?%S7!&E;SDO -M?Q%K68M[VLJL%2.)H,7S'58!;6@<@)B*#*;BUBI3VW$6 -M/C+HM.%,->`DE\N`S1-!TWCL$X+GXR^C:%NJ7,\\M`/E>JV8;"32#!**Y;6L -M#:;^VJ:XK9GWC:@8(JMXHKIL4V\\BX.Y?E?-E/[HJ(5 -M^W^:$2!`9!>KG#-\0.=RI7P4HFXLM!C(N,!L!I-A$\#0'4O:X$&#R5V^R)D3 -MM%4!_(F<-][H$WIX\\C]@K_8^`V:8NM!A#@8+,(#O6\K#=.C5#'VIE@XX1GQ -M[20$QCOGL2\0@*.#'8S@8*YU`66X`/1H75;>+B=%Y[.0V7-Q)2#Z_Q -MZ#*6T;8$0N8?V8G#$1S6/\`RTC)KU6`&\@MCHR.L;>C%AWC)#G-]A-.$PX1* -M%;]/+0O)ZPOO\,'"^BD[N2NW4;IRCA)B9!^\Z>Y//".\7%25U8X@K*K]("4!/(;4J+,88-%3;E'"-CF;85JC2#,L -M?:^IOSA'>!IS.!31566^/E7U4(RNLG!JS++0^FQ%:&\GGB@U^()Z$!I0U[R5XA!5-J4M%PO@^RKZ[R)@J3`59;K.>2- -M+P^&0361\^!$:L!YJ*T..>0U."T9UX>EZ2?,=S"-W`M@+D-P9'_,-5(?!0_G -M>ODW%O&.+FS1'P]:2]-K*36G%!'4%CDS)3-')0.VT:>I50,S#Y>C1:2N,A;E -M>0.O%&?RGQSD3!ZNYR6I(HAG9DD)[6S]Y2LINO-7 -M@/DP0!^Q@PBF=H$TQ)G9@`B^(SEFM2?'4XA*9:1M]`@_CF[T\F]>/ZV,+8>.F5Z[BKD"Z;LFH^+E(]N=#%8<'.W71'%FI%T/(>%^S@3/"TS1'"8Z[DI -M1^X':R[[L6+MRRPJ=8<7P+:"CB7A6IE+J)8C,@C3($@3FT]%#B?4`L1Y,,ZO -MTTRW]&X>AQS584(P*&4$OD9[HDMVXM,F^?."9.U5.9?@=-P+X!9$6 -M5LYW(8[QRCIJ0.,BXWG]C'E?'<_HSSV%W1+:>V.B6T+[:()W%A+*1\[2)AJ" -MWWUG,23-U!-7R#HD](D<\H@<3W*@G3B'$[&^@)/#P,F'2O3ZT(SK[WCJQ'.( -M7=]#9IWQSJZ_E*:\?JI]OV_Z"CQK#E2/U6[_Y]+QDN.F*JDCW*7 -MXL5PQ=3W=D;CVTI*\0K\8_0-96NF%K=]M'I"W@D_S\*-1S_]6DB/[^TOF -MLI^O&0]'IHZZZ)KPBU87N[XI5>!/TRY1JZE9UN&;!6ZH,60K?O=56)J;1@ -MAMLR":K)YTDE0*\.``1`$""QGH`*"(N^C.#]!@VC7I&-,2#+KPCP^J.FQY.Z -MF8"5*83K]+=A;.A$:#-(KY':7&T/24RT:&EIR)5"L%+S'``4$1985NZ$GE_% -*W)%.%"0NLTSR0``` -` -end diff --git a/contrib/bzip2/sample3.ref.gz.uu b/contrib/bzip2/sample3.ref.gz.uu deleted file mode 100644 index 8552ba60f267..000000000000 --- a/contrib/bzip2/sample3.ref.gz.uu +++ /dev/null @@ -1,11 +0,0 @@ -begin 644 sample3.ref.gz -M'XL("%<.FT4"`W-A;7!L93,N4$"`)T;M%]+Z!F -MZ-B(8P>2@S:W'R7HNB=XBP=1$#\E_9KF%N.\9/0U_YXSO^;ULCSC]U9[<8KX -M.<9S>_2>]>M5U);+.-0LK[Z8]V/V%G]>)_N44;/ML8WO^OV.5I[M&*7?]O%YB)9YC7O=QAZ:M[4L -MPY3+_30,]];?UD,UHW3K%N.COO9]0#V7ML_G/OM6ZK7%O/;.?__LT<=E`@`` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -C``````````````````````````````#@/[X!M4V7,;35`0`` -` -end diff --git a/contrib/bzip2/spewG.c b/contrib/bzip2/spewG.c deleted file mode 100644 index 5892b92c3643..000000000000 --- a/contrib/bzip2/spewG.c +++ /dev/null @@ -1,54 +0,0 @@ - -/* spew out a thoroughly gigantic file designed so that bzip2 - can compress it reasonably rapidly. This is to help test - support for large files (> 2GB) in a reasonable amount of time. - I suggest you use the undocumented --exponential option to - bzip2 when compressing the resulting file; this saves a bit of - time. Note: *don't* bother with --exponential when compressing - Real Files; it'll just waste a lot of CPU time :-) - (but is otherwise harmless). -*/ - -/* ------------------------------------------------------------------ - This file is part of bzip2/libbzip2, a program and library for - lossless, block-sorting data compression. - - bzip2/libbzip2 version 1.0.5 of 10 December 2007 - Copyright (C) 1996-2007 Julian Seward - - Please read the WARNING, DISCLAIMER and PATENTS sections in the - README file. - - This program is released under the terms of the license contained - in the file LICENSE. - ------------------------------------------------------------------ */ - - -#define _FILE_OFFSET_BITS 64 - -#include -#include - -/* The number of megabytes of junk to spew out (roughly) */ -#define MEGABYTES 5000 - -#define N_BUF 1000000 -char buf[N_BUF]; - -int main ( int argc, char** argv ) -{ - int ii, kk, p; - srandom(1); - setbuffer ( stdout, buf, N_BUF ); - for (kk = 0; kk < MEGABYTES * 515; kk+=3) { - p = 25+random()%50; - for (ii = 0; ii < p; ii++) - printf ( "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" ); - for (ii = 0; ii < p-1; ii++) - printf ( "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb" ); - for (ii = 0; ii < p+1; ii++) - printf ( "ccccccccccccccccccccccccccccccccccccc" ); - } - fflush(stdout); - return 0; -} diff --git a/contrib/bzip2/unzcrash.c b/contrib/bzip2/unzcrash.c deleted file mode 100644 index a1b75463adca..000000000000 --- a/contrib/bzip2/unzcrash.c +++ /dev/null @@ -1,141 +0,0 @@ - -/* A test program written to test robustness to decompression of - corrupted data. Usage is - unzcrash filename - and the program will read the specified file, compress it (in memory), - and then repeatedly decompress it, each time with a different bit of - the compressed data inverted, so as to test all possible one-bit errors. - This should not cause any invalid memory accesses. If it does, - I want to know about it! - - PS. As you can see from the above description, the process is - incredibly slow. A file of size eg 5KB will cause it to run for - many hours. -*/ - -/* ------------------------------------------------------------------ - This file is part of bzip2/libbzip2, a program and library for - lossless, block-sorting data compression. - - bzip2/libbzip2 version 1.0.5 of 10 December 2007 - Copyright (C) 1996-2007 Julian Seward - - Please read the WARNING, DISCLAIMER and PATENTS sections in the - README file. - - This program is released under the terms of the license contained - in the file LICENSE. - ------------------------------------------------------------------ */ - - -#include -#include -#include "bzlib.h" - -#define M_BLOCK 1000000 - -typedef unsigned char uchar; - -#define M_BLOCK_OUT (M_BLOCK + 1000000) -uchar inbuf[M_BLOCK]; -uchar outbuf[M_BLOCK_OUT]; -uchar zbuf[M_BLOCK + 600 + (M_BLOCK / 100)]; - -int nIn, nOut, nZ; - -static char *bzerrorstrings[] = { - "OK" - ,"SEQUENCE_ERROR" - ,"PARAM_ERROR" - ,"MEM_ERROR" - ,"DATA_ERROR" - ,"DATA_ERROR_MAGIC" - ,"IO_ERROR" - ,"UNEXPECTED_EOF" - ,"OUTBUFF_FULL" - ,"???" /* for future */ - ,"???" /* for future */ - ,"???" /* for future */ - ,"???" /* for future */ - ,"???" /* for future */ - ,"???" /* for future */ -}; - -void flip_bit ( int bit ) -{ - int byteno = bit / 8; - int bitno = bit % 8; - uchar mask = 1 << bitno; - //fprintf ( stderr, "(byte %d bit %d mask %d)", - // byteno, bitno, (int)mask ); - zbuf[byteno] ^= mask; -} - -int main ( int argc, char** argv ) -{ - FILE* f; - int r; - int bit; - int i; - - if (argc != 2) { - fprintf ( stderr, "usage: unzcrash filename\n" ); - return 1; - } - - f = fopen ( argv[1], "r" ); - if (!f) { - fprintf ( stderr, "unzcrash: can't open %s\n", argv[1] ); - return 1; - } - - nIn = fread ( inbuf, 1, M_BLOCK, f ); - fprintf ( stderr, "%d bytes read\n", nIn ); - - nZ = M_BLOCK; - r = BZ2_bzBuffToBuffCompress ( - zbuf, &nZ, inbuf, nIn, 9, 0, 30 ); - - assert (r == BZ_OK); - fprintf ( stderr, "%d after compression\n", nZ ); - - for (bit = 0; bit < nZ*8; bit++) { - fprintf ( stderr, "bit %d ", bit ); - flip_bit ( bit ); - nOut = M_BLOCK_OUT; - r = BZ2_bzBuffToBuffDecompress ( - outbuf, &nOut, zbuf, nZ, 0, 0 ); - fprintf ( stderr, " %d %s ", r, bzerrorstrings[-r] ); - - if (r != BZ_OK) { - fprintf ( stderr, "\n" ); - } else { - if (nOut != nIn) { - fprintf(stderr, "nIn/nOut mismatch %d %d\n", nIn, nOut ); - return 1; - } else { - for (i = 0; i < nOut; i++) - if (inbuf[i] != outbuf[i]) { - fprintf(stderr, "mismatch at %d\n", i ); - return 1; - } - if (i == nOut) fprintf(stderr, "really ok!\n" ); - } - } - - flip_bit ( bit ); - } - -#if 0 - assert (nOut == nIn); - for (i = 0; i < nOut; i++) { - if (inbuf[i] != outbuf[i]) { - fprintf ( stderr, "difference at %d !\n", i ); - return 1; - } - } -#endif - - fprintf ( stderr, "all ok\n" ); - return 0; -} diff --git a/contrib/bzip2/words0 b/contrib/bzip2/words0 deleted file mode 100644 index fbf442ad6bfa..000000000000 --- a/contrib/bzip2/words0 +++ /dev/null @@ -1,9 +0,0 @@ - -If compilation produces errors, or a large number of warnings, -please read README.COMPILATION.PROBLEMS -- you might be able to -adjust the flags in this Makefile to improve matters. - -Also in README.COMPILATION.PROBLEMS are some hints that may help -if your build produces an executable which is unable to correctly -handle so-called 'large files' -- files of size 2GB or more. - diff --git a/contrib/bzip2/words1 b/contrib/bzip2/words1 deleted file mode 100644 index 2e83de9f083f..000000000000 --- a/contrib/bzip2/words1 +++ /dev/null @@ -1,4 +0,0 @@ - -Doing 6 tests (3 compress, 3 uncompress) ... -If there's a problem, things might stop at this point. - diff --git a/contrib/bzip2/words2 b/contrib/bzip2/words2 deleted file mode 100644 index caddcf422662..000000000000 --- a/contrib/bzip2/words2 +++ /dev/null @@ -1,5 +0,0 @@ - -Checking test results. If any of the four "cmp"s which follow -report any differences, something is wrong. If you can't easily -figure out what, please let me know (jseward@bzip.org). - diff --git a/contrib/bzip2/words3 b/contrib/bzip2/words3 deleted file mode 100644 index 6972669906db..000000000000 --- a/contrib/bzip2/words3 +++ /dev/null @@ -1,30 +0,0 @@ - -If you got this far and the 'cmp's didn't complain, it looks -like you're in business. - -To install in /usr/local/bin, /usr/local/lib, /usr/local/man and -/usr/local/include, type - - make install - -To install somewhere else, eg, /xxx/yyy/{bin,lib,man,include}, type - - make install PREFIX=/xxx/yyy - -If you are (justifiably) paranoid and want to see what 'make install' -is going to do, you can first do - - make -n install or - make -n install PREFIX=/xxx/yyy respectively. - -The -n instructs make to show the commands it would execute, but -not actually execute them. - -Instructions for use are in the preformatted manual page, in the file -bzip2.txt. For more detailed documentation, read the full manual. -It is available in Postscript form (manual.ps), PDF form (manual.pdf), -and HTML form (manual.html). - -You can also do "bzip2 --help" to see some helpful information. -"bzip2 -L" displays the software license. - -- cgit v1.2.3