From a0bf91c714168da2e7c9f22dfdf7eea31ff9beab Mon Sep 17 00:00:00 2001 From: Yichao 'Peak' Ji Date: Fri, 7 Apr 2017 18:18:30 +0800 Subject: [PATCH] import snappy 1.1.4 and update bindings --- deps/snappy/freebsd/config.h | 6 +- deps/snappy/linux/config.h | 6 +- deps/snappy/mac/config.h | 6 +- deps/snappy/snappy-1.1.1/ChangeLog | 1886 ------------- deps/snappy/snappy-1.1.1/Makefile.in | 957 ------- deps/snappy/snappy-1.1.1/autogen.sh | 7 - deps/snappy/snappy-1.1.1/missing | 331 --- deps/snappy/snappy-1.1.1/snappy-internal.h | 150 - deps/snappy/snappy-1.1.1/testdata/cp.html | 645 ----- deps/snappy/snappy-1.1.1/testdata/fields.c | 431 --- deps/snappy/snappy-1.1.1/testdata/grammar.lsp | 94 - deps/snappy/snappy-1.1.1/testdata/house.jpg | Bin 126958 -> 0 bytes deps/snappy/snappy-1.1.1/testdata/kennedy.xls | Bin 1029744 -> 0 bytes .../testdata/mapreduce-osdi-1.pdf | Bin 94330 -> 0 bytes deps/snappy/snappy-1.1.1/testdata/ptt5 | Bin 513216 -> 0 bytes deps/snappy/snappy-1.1.1/testdata/sum | Bin 38240 -> 0 bytes deps/snappy/snappy-1.1.1/testdata/xargs.1 | 112 - .../{snappy-1.1.1 => snappy-1.1.4}/AUTHORS | 0 .../{snappy-1.1.1 => snappy-1.1.4}/COPYING | 26 + deps/snappy/snappy-1.1.4/ChangeLog | 2468 +++++++++++++++++ .../{snappy-1.1.1 => snappy-1.1.4}/INSTALL | 12 +- .../Makefile.am | 5 +- deps/snappy/snappy-1.1.4/Makefile.in | 1352 +++++++++ .../{snappy-1.1.1 => snappy-1.1.4}/NEWS | 31 + .../{snappy-1.1.1 => snappy-1.1.4}/README | 16 +- .../{snappy-1.1.1 => snappy-1.1.4}/aclocal.m4 | 738 +++-- deps/snappy/snappy-1.1.4/autogen.sh | 12 + deps/snappy/snappy-1.1.4/compile | 347 +++ .../config.guess | 184 +- .../config.h.in | 20 +- .../{snappy-1.1.1 => snappy-1.1.4}/config.sub | 106 +- .../{snappy-1.1.1 => snappy-1.1.4}/configure | 673 +++-- .../configure.ac | 7 +- .../{snappy-1.1.1 => snappy-1.1.4}/depcomp | 487 ++-- .../format_description.txt | 0 .../framing_format.txt | 19 +- .../{snappy-1.1.1 => snappy-1.1.4}/install-sh | 14 +- .../{snappy-1.1.1 => snappy-1.1.4}/ltmain.sh | 4 +- .../m4/gtest.m4 | 0 deps/snappy/snappy-1.1.4/missing | 215 ++ .../snappy-c.cc | 0 .../{snappy-1.1.1 => snappy-1.1.4}/snappy-c.h | 6 +- deps/snappy/snappy-1.1.4/snappy-internal.h | 227 ++ .../snappy-sinksource.cc | 33 + .../snappy-sinksource.h | 57 +- .../snappy-stubs-internal.cc | 0 .../snappy-stubs-internal.h | 51 +- .../snappy-stubs-public.h | 10 +- .../snappy-stubs-public.h.in | 8 +- .../snappy-test.cc | 7 +- .../snappy-test.h | 27 +- .../{snappy-1.1.1 => snappy-1.1.4}/snappy.cc | 826 +++--- .../{snappy-1.1.1 => snappy-1.1.4}/snappy.h | 27 +- deps/snappy/snappy-1.1.4/snappy.pc.in | 10 + .../snappy_unittest.cc | 290 +- deps/snappy/snappy-1.1.4/test-driver | 139 + .../testdata/alice29.txt | 0 .../testdata/asyoulik.txt | 0 .../testdata/baddata1.snappy | Bin .../testdata/baddata2.snappy | Bin .../testdata/baddata3.snappy | Bin .../snappy-1.1.4/testdata/fireworks.jpeg | Bin 0 -> 123093 bytes .../testdata/geo.protodata | Bin .../testdata/html | 0 .../testdata/html_x_4 | 0 .../testdata/kppkn.gtb | Bin .../testdata/lcet10.txt | 0 .../snappy-1.1.4/testdata/paper-100k.pdf | Bin 0 -> 102400 bytes .../testdata/plrabn12.txt | 0 .../testdata/urls.10K | 0 deps/snappy/snappy.gyp | 18 +- deps/snappy/solaris/config.h | 6 +- deps/snappy/win32/config.h | 6 +- 73 files changed, 7161 insertions(+), 5954 deletions(-) delete mode 100644 deps/snappy/snappy-1.1.1/ChangeLog delete mode 100644 deps/snappy/snappy-1.1.1/Makefile.in delete mode 100755 deps/snappy/snappy-1.1.1/autogen.sh delete mode 100755 deps/snappy/snappy-1.1.1/missing delete mode 100644 deps/snappy/snappy-1.1.1/snappy-internal.h delete mode 100644 deps/snappy/snappy-1.1.1/testdata/cp.html delete mode 100644 deps/snappy/snappy-1.1.1/testdata/fields.c delete mode 100644 deps/snappy/snappy-1.1.1/testdata/grammar.lsp delete mode 100644 deps/snappy/snappy-1.1.1/testdata/house.jpg delete mode 100644 deps/snappy/snappy-1.1.1/testdata/kennedy.xls delete mode 100644 deps/snappy/snappy-1.1.1/testdata/mapreduce-osdi-1.pdf delete mode 100644 deps/snappy/snappy-1.1.1/testdata/ptt5 delete mode 100644 deps/snappy/snappy-1.1.1/testdata/sum delete mode 100644 deps/snappy/snappy-1.1.1/testdata/xargs.1 rename deps/snappy/{snappy-1.1.1 => snappy-1.1.4}/AUTHORS (100%) mode change 100644 => 100755 rename deps/snappy/{snappy-1.1.1 => snappy-1.1.4}/COPYING (55%) mode change 100644 => 100755 create mode 100755 deps/snappy/snappy-1.1.4/ChangeLog rename deps/snappy/{snappy-1.1.1 => snappy-1.1.4}/INSTALL (97%) rename deps/snappy/{snappy-1.1.1 => snappy-1.1.4}/Makefile.am (75%) mode change 100644 => 100755 create mode 100644 deps/snappy/snappy-1.1.4/Makefile.in rename deps/snappy/{snappy-1.1.1 => snappy-1.1.4}/NEWS (81%) mode change 100644 => 100755 rename deps/snappy/{snappy-1.1.1 => snappy-1.1.4}/README (94%) mode change 100644 => 100755 rename deps/snappy/{snappy-1.1.1 => snappy-1.1.4}/aclocal.m4 (95%) create mode 100755 deps/snappy/snappy-1.1.4/autogen.sh create mode 100755 deps/snappy/snappy-1.1.4/compile rename deps/snappy/{snappy-1.1.1 => snappy-1.1.4}/config.guess (92%) rename deps/snappy/{snappy-1.1.1 => snappy-1.1.4}/config.h.in (90%) rename deps/snappy/{snappy-1.1.1 => snappy-1.1.4}/config.sub (94%) rename deps/snappy/{snappy-1.1.1 => snappy-1.1.4}/configure (97%) rename deps/snappy/{snappy-1.1.1 => snappy-1.1.4}/configure.ac (96%) mode change 100644 => 100755 rename deps/snappy/{snappy-1.1.1 => snappy-1.1.4}/depcomp (56%) rename deps/snappy/{snappy-1.1.1 => snappy-1.1.4}/format_description.txt (100%) mode change 100644 => 100755 rename deps/snappy/{snappy-1.1.1 => snappy-1.1.4}/framing_format.txt (88%) mode change 100644 => 100755 rename deps/snappy/{snappy-1.1.1 => snappy-1.1.4}/install-sh (97%) rename deps/snappy/{snappy-1.1.1 => snappy-1.1.4}/ltmain.sh (99%) rename deps/snappy/{snappy-1.1.1 => snappy-1.1.4}/m4/gtest.m4 (100%) mode change 100644 => 100755 create mode 100755 deps/snappy/snappy-1.1.4/missing rename deps/snappy/{snappy-1.1.1 => snappy-1.1.4}/snappy-c.cc (100%) mode change 100644 => 100755 rename deps/snappy/{snappy-1.1.1 => snappy-1.1.4}/snappy-c.h (97%) mode change 100644 => 100755 create mode 100755 deps/snappy/snappy-1.1.4/snappy-internal.h rename deps/snappy/{snappy-1.1.1 => snappy-1.1.4}/snappy-sinksource.cc (72%) mode change 100644 => 100755 rename deps/snappy/{snappy-1.1.1 => snappy-1.1.4}/snappy-sinksource.h (66%) mode change 100644 => 100755 rename deps/snappy/{snappy-1.1.1 => snappy-1.1.4}/snappy-stubs-internal.cc (100%) mode change 100644 => 100755 rename deps/snappy/{snappy-1.1.1 => snappy-1.1.4}/snappy-stubs-internal.h (89%) mode change 100644 => 100755 rename deps/snappy/{snappy-1.1.1 => snappy-1.1.4}/snappy-stubs-public.h (92%) rename deps/snappy/{snappy-1.1.1 => snappy-1.1.4}/snappy-stubs-public.h.in (93%) mode change 100644 => 100755 rename deps/snappy/{snappy-1.1.1 => snappy-1.1.4}/snappy-test.cc (99%) mode change 100644 => 100755 rename deps/snappy/{snappy-1.1.1 => snappy-1.1.4}/snappy-test.h (96%) mode change 100644 => 100755 rename deps/snappy/{snappy-1.1.1 => snappy-1.1.4}/snappy.cc (65%) mode change 100644 => 100755 rename deps/snappy/{snappy-1.1.1 => snappy-1.1.4}/snappy.h (88%) mode change 100644 => 100755 create mode 100755 deps/snappy/snappy-1.1.4/snappy.pc.in rename deps/snappy/{snappy-1.1.1 => snappy-1.1.4}/snappy_unittest.cc (83%) mode change 100644 => 100755 create mode 100755 deps/snappy/snappy-1.1.4/test-driver rename deps/snappy/{snappy-1.1.1 => snappy-1.1.4}/testdata/alice29.txt (100%) mode change 100644 => 100755 rename deps/snappy/{snappy-1.1.1 => snappy-1.1.4}/testdata/asyoulik.txt (100%) mode change 100644 => 100755 rename deps/snappy/{snappy-1.1.1 => snappy-1.1.4}/testdata/baddata1.snappy (100%) mode change 100644 => 100755 rename deps/snappy/{snappy-1.1.1 => snappy-1.1.4}/testdata/baddata2.snappy (100%) mode change 100644 => 100755 rename deps/snappy/{snappy-1.1.1 => snappy-1.1.4}/testdata/baddata3.snappy (100%) mode change 100644 => 100755 create mode 100755 deps/snappy/snappy-1.1.4/testdata/fireworks.jpeg rename deps/snappy/{snappy-1.1.1 => snappy-1.1.4}/testdata/geo.protodata (100%) mode change 100644 => 100755 rename deps/snappy/{snappy-1.1.1 => snappy-1.1.4}/testdata/html (100%) mode change 100644 => 100755 rename deps/snappy/{snappy-1.1.1 => snappy-1.1.4}/testdata/html_x_4 (100%) mode change 100644 => 100755 rename deps/snappy/{snappy-1.1.1 => snappy-1.1.4}/testdata/kppkn.gtb (100%) mode change 100644 => 100755 rename deps/snappy/{snappy-1.1.1 => snappy-1.1.4}/testdata/lcet10.txt (100%) mode change 100644 => 100755 create mode 100755 deps/snappy/snappy-1.1.4/testdata/paper-100k.pdf rename deps/snappy/{snappy-1.1.1 => snappy-1.1.4}/testdata/plrabn12.txt (100%) mode change 100644 => 100755 rename deps/snappy/{snappy-1.1.1 => snappy-1.1.4}/testdata/urls.10K (100%) mode change 100644 => 100755 diff --git a/deps/snappy/freebsd/config.h b/deps/snappy/freebsd/config.h index 45c2ccf8..b2aaec33 100644 --- a/deps/snappy/freebsd/config.h +++ b/deps/snappy/freebsd/config.h @@ -96,19 +96,19 @@ #define PACKAGE_NAME "snappy" /* Define to the full name and version of this package. */ -#define PACKAGE_STRING "snappy 1.1.1" +#define PACKAGE_STRING "snappy 1.1.4" /* Define to the one symbol short name of this package. */ #define PACKAGE_TARNAME "snappy" /* Define to the version of this package. */ -#define PACKAGE_VERSION "1.1.1" +#define PACKAGE_VERSION "1.1.4" /* Define to 1 if you have the ANSI C header files. */ #define STDC_HEADERS 1 /* Version number of package */ -#define VERSION "1.1.1" +#define VERSION "1.1.4" /* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most significant byte first (like Motorola and SPARC, unlike Intel and VAX). */ diff --git a/deps/snappy/linux/config.h b/deps/snappy/linux/config.h index ff7ab82e..6efd78c4 100644 --- a/deps/snappy/linux/config.h +++ b/deps/snappy/linux/config.h @@ -96,19 +96,19 @@ #define PACKAGE_NAME "snappy" /* Define to the full name and version of this package. */ -#define PACKAGE_STRING "snappy 1.1.1" +#define PACKAGE_STRING "snappy 1.1.4" /* Define to the one symbol short name of this package. */ #define PACKAGE_TARNAME "snappy" /* Define to the version of this package. */ -#define PACKAGE_VERSION "1.1.1" +#define PACKAGE_VERSION "1.1.4" /* Define to 1 if you have the ANSI C header files. */ #define STDC_HEADERS 1 /* Version number of package */ -#define VERSION "1.1.1" +#define VERSION "1.1.4" /* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most significant byte first (like Motorola and SPARC, unlike Intel and VAX). */ diff --git a/deps/snappy/mac/config.h b/deps/snappy/mac/config.h index 03f71814..cdf831a4 100644 --- a/deps/snappy/mac/config.h +++ b/deps/snappy/mac/config.h @@ -96,19 +96,19 @@ #define PACKAGE_NAME "snappy" /* Define to the full name and version of this package. */ -#define PACKAGE_STRING "snappy 1.1.1" +#define PACKAGE_STRING "snappy 1.1.4" /* Define to the one symbol short name of this package. */ #define PACKAGE_TARNAME "snappy" /* Define to the version of this package. */ -#define PACKAGE_VERSION "1.1.1" +#define PACKAGE_VERSION "1.1.4" /* Define to 1 if you have the ANSI C header files. */ #define STDC_HEADERS 1 /* Version number of package */ -#define VERSION "1.1.1" +#define VERSION "1.1.4" /* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most significant byte first (like Motorola and SPARC, unlike Intel and VAX). */ diff --git a/deps/snappy/snappy-1.1.1/ChangeLog b/deps/snappy/snappy-1.1.1/ChangeLog deleted file mode 100644 index b585fc06..00000000 --- a/deps/snappy/snappy-1.1.1/ChangeLog +++ /dev/null @@ -1,1886 +0,0 @@ ------------------------------------------------------------------------- -r80 | snappy.mirrorbot@gmail.com | 2013-08-13 14:55:00 +0200 (Tue, 13 Aug 2013) | 6 lines - -Add autoconf tests for size_t and ssize_t. Sort-of resolves public issue 79; -it would solve the problem if MSVC typically used autoconf. However, it gives -a natural place (config.h) to put the typedef even for MSVC. - -R=jsbell - ------------------------------------------------------------------------- -r79 | snappy.mirrorbot@gmail.com | 2013-07-29 13:06:44 +0200 (Mon, 29 Jul 2013) | 14 lines - -When we compare the number of bytes produced with the offset for a -backreference, make the signedness of the bytes produced clear, -by sticking it into a size_t. This avoids a signed/unsigned compare -warning from MSVC (public issue 71), and also is slightly clearer. - -Since the line is now so long the explanatory comment about the -1u -trick has to go somewhere else anyway, I used the opportunity to -explain it in slightly more detail. - -This is a purely stylistic change; the emitted assembler from GCC -is identical. - -R=jeff - ------------------------------------------------------------------------- -r78 | snappy.mirrorbot@gmail.com | 2013-06-30 21:24:03 +0200 (Sun, 30 Jun 2013) | 111 lines - -In the fast path for decompressing literals, instead of checking -whether there's 16 bytes free and then checking right afterwards -(when having subtracted the literal size) that there are now -5 bytes free, just check once for 21 bytes. This skips a compare -and a branch; although it is easily predictable, it is still -a few cycles on a fast path that we would like to get rid of. - -Benchmarking this yields very confusing results. On open-source -GCC 4.8.1 on Haswell, we get exactly the expected results; the -benchmarks where we hit the fast path for literals (in particular -the two HTML benchmarks and the protobuf benchmark) give very nice -speedups, and the others are not really affected. - -However, benchmarks with Google's GCC branch on other hardware -is much less clear. It seems that we have a weak loss in some cases -(and the win for the “typical” win cases are not nearly as clear), -but that it depends on microarchitecture and plain luck in how we run -the benchmark. Looking at the generated assembler, it seems that -the removal of the if causes other large-scale changes in how the -function is laid out, which makes it likely that this is just bad luck. - -Thus, we should keep this change, even though its exact current impact is -unclear; it's a sensible change per se, and dropping it on the basis of -microoptimization for a given compiler (or even branch of a compiler) -would seem like a bad strategy in the long run. - -Microbenchmark results (all in 64-bit, opt mode): - - Nehalem, Google GCC: - - Benchmark Base (ns) New (ns) Improvement - ------------------------------------------------------------------------------ - BM_UFlat/0 76747 75591 1.3GB/s html +1.5% - BM_UFlat/1 765756 757040 886.3MB/s urls +1.2% - BM_UFlat/2 10867 10893 10.9GB/s jpg -0.2% - BM_UFlat/3 124 131 1.4GB/s jpg_200 -5.3% - BM_UFlat/4 31663 31596 2.8GB/s pdf +0.2% - BM_UFlat/5 314162 308176 1.2GB/s html4 +1.9% - BM_UFlat/6 29668 29746 790.6MB/s cp -0.3% - BM_UFlat/7 12958 13386 796.4MB/s c -3.2% - BM_UFlat/8 3596 3682 966.0MB/s lsp -2.3% - BM_UFlat/9 1019193 1033493 953.3MB/s xls -1.4% - BM_UFlat/10 239 247 775.3MB/s xls_200 -3.2% - BM_UFlat/11 236411 240271 606.9MB/s txt1 -1.6% - BM_UFlat/12 206639 209768 571.2MB/s txt2 -1.5% - BM_UFlat/13 627803 635722 641.4MB/s txt3 -1.2% - BM_UFlat/14 845932 857816 538.2MB/s txt4 -1.4% - BM_UFlat/15 402107 391670 1.2GB/s bin +2.7% - BM_UFlat/16 283 279 683.6MB/s bin_200 +1.4% - BM_UFlat/17 46070 46815 781.5MB/s sum -1.6% - BM_UFlat/18 5053 5163 782.0MB/s man -2.1% - BM_UFlat/19 79721 76581 1.4GB/s pb +4.1% - BM_UFlat/20 251158 252330 697.5MB/s gaviota -0.5% - Sum of all benchmarks 4966150 4980396 -0.3% - - - Sandy Bridge, Google GCC: - - Benchmark Base (ns) New (ns) Improvement - ------------------------------------------------------------------------------ - BM_UFlat/0 42850 42182 2.3GB/s html +1.6% - BM_UFlat/1 525660 515816 1.3GB/s urls +1.9% - BM_UFlat/2 7173 7283 16.3GB/s jpg -1.5% - BM_UFlat/3 92 91 2.1GB/s jpg_200 +1.1% - BM_UFlat/4 15147 14872 5.9GB/s pdf +1.8% - BM_UFlat/5 199936 192116 2.0GB/s html4 +4.1% - BM_UFlat/6 12796 12443 1.8GB/s cp +2.8% - BM_UFlat/7 6588 6400 1.6GB/s c +2.9% - BM_UFlat/8 2010 1951 1.8GB/s lsp +3.0% - BM_UFlat/9 761124 763049 1.3GB/s xls -0.3% - BM_UFlat/10 186 189 1016.1MB/s xls_200 -1.6% - BM_UFlat/11 159354 158460 918.6MB/s txt1 +0.6% - BM_UFlat/12 139732 139950 856.1MB/s txt2 -0.2% - BM_UFlat/13 429917 425027 961.7MB/s txt3 +1.2% - BM_UFlat/14 585255 587324 785.8MB/s txt4 -0.4% - BM_UFlat/15 276186 266173 1.8GB/s bin +3.8% - BM_UFlat/16 205 207 925.5MB/s bin_200 -1.0% - BM_UFlat/17 24925 24935 1.4GB/s sum -0.0% - BM_UFlat/18 2632 2576 1.5GB/s man +2.2% - BM_UFlat/19 40546 39108 2.8GB/s pb +3.7% - BM_UFlat/20 175803 168209 1048.9MB/s gaviota +4.5% - Sum of all benchmarks 3408117 3368361 +1.2% - - - Haswell, upstream GCC 4.8.1: - - Benchmark Base (ns) New (ns) Improvement - ------------------------------------------------------------------------------ - BM_UFlat/0 46308 40641 2.3GB/s html +13.9% - BM_UFlat/1 513385 514706 1.3GB/s urls -0.3% - BM_UFlat/2 6197 6151 19.2GB/s jpg +0.7% - BM_UFlat/3 61 61 3.0GB/s jpg_200 +0.0% - BM_UFlat/4 13551 13429 6.5GB/s pdf +0.9% - BM_UFlat/5 198317 190243 2.0GB/s html4 +4.2% - BM_UFlat/6 14768 12560 1.8GB/s cp +17.6% - BM_UFlat/7 6453 6447 1.6GB/s c +0.1% - BM_UFlat/8 1991 1980 1.8GB/s lsp +0.6% - BM_UFlat/9 766947 770424 1.2GB/s xls -0.5% - BM_UFlat/10 170 169 1.1GB/s xls_200 +0.6% - BM_UFlat/11 164350 163554 888.7MB/s txt1 +0.5% - BM_UFlat/12 145444 143830 832.1MB/s txt2 +1.1% - BM_UFlat/13 437849 438413 929.2MB/s txt3 -0.1% - BM_UFlat/14 603587 605309 759.8MB/s txt4 -0.3% - BM_UFlat/15 249799 248067 1.9GB/s bin +0.7% - BM_UFlat/16 191 188 1011.4MB/s bin_200 +1.6% - BM_UFlat/17 26064 24778 1.4GB/s sum +5.2% - BM_UFlat/18 2620 2601 1.5GB/s man +0.7% - BM_UFlat/19 44551 37373 3.0GB/s pb +19.2% - BM_UFlat/20 165408 164584 1.0GB/s gaviota +0.5% - Sum of all benchmarks 3408011 3385508 +0.7% - ------------------------------------------------------------------------- -r77 | snappy.mirrorbot@gmail.com | 2013-06-14 23:42:26 +0200 (Fri, 14 Jun 2013) | 92 lines - -Make the two IncrementalCopy* functions take in an ssize_t instead of a len, -in order to avoid having to do 32-to-64-bit signed conversions on a hot path -during decompression. (Also fixes some MSVC warnings, mentioned in public -issue 75, but more of those remain.) They cannot be size_t because we expect -them to go negative and test for that. - -This saves a few movzwl instructions, yielding ~2% speedup in decompression. - - -Sandy Bridge: - -Benchmark Base (ns) New (ns) Improvement -------------------------------------------------------------------------------------------------- -BM_UFlat/0 48009 41283 2.3GB/s html +16.3% -BM_UFlat/1 531274 513419 1.3GB/s urls +3.5% -BM_UFlat/2 7378 7062 16.8GB/s jpg +4.5% -BM_UFlat/3 92 92 2.0GB/s jpg_200 +0.0% -BM_UFlat/4 15057 14974 5.9GB/s pdf +0.6% -BM_UFlat/5 204323 193140 2.0GB/s html4 +5.8% -BM_UFlat/6 13282 12611 1.8GB/s cp +5.3% -BM_UFlat/7 6511 6504 1.6GB/s c +0.1% -BM_UFlat/8 2014 2030 1.7GB/s lsp -0.8% -BM_UFlat/9 775909 768336 1.3GB/s xls +1.0% -BM_UFlat/10 182 184 1043.2MB/s xls_200 -1.1% -BM_UFlat/11 167352 161630 901.2MB/s txt1 +3.5% -BM_UFlat/12 147393 142246 842.8MB/s txt2 +3.6% -BM_UFlat/13 449960 432853 944.4MB/s txt3 +4.0% -BM_UFlat/14 620497 594845 775.9MB/s txt4 +4.3% -BM_UFlat/15 265610 267356 1.8GB/s bin -0.7% -BM_UFlat/16 206 205 932.7MB/s bin_200 +0.5% -BM_UFlat/17 25561 24730 1.4GB/s sum +3.4% -BM_UFlat/18 2620 2644 1.5GB/s man -0.9% -BM_UFlat/19 45766 38589 2.9GB/s pb +18.6% -BM_UFlat/20 171107 169832 1039.5MB/s gaviota +0.8% -Sum of all benchmarks 3500103 3394565 +3.1% - - -Westmere: - -Benchmark Base (ns) New (ns) Improvement -------------------------------------------------------------------------------------------------- -BM_UFlat/0 72624 71526 1.3GB/s html +1.5% -BM_UFlat/1 735821 722917 930.8MB/s urls +1.8% -BM_UFlat/2 10450 10172 11.7GB/s jpg +2.7% -BM_UFlat/3 117 117 1.6GB/s jpg_200 +0.0% -BM_UFlat/4 29817 29648 3.0GB/s pdf +0.6% -BM_UFlat/5 297126 293073 1.3GB/s html4 +1.4% -BM_UFlat/6 28252 27994 842.0MB/s cp +0.9% -BM_UFlat/7 12672 12391 862.1MB/s c +2.3% -BM_UFlat/8 3507 3425 1040.9MB/s lsp +2.4% -BM_UFlat/9 1004268 969395 1018.0MB/s xls +3.6% -BM_UFlat/10 233 227 844.8MB/s xls_200 +2.6% -BM_UFlat/11 230054 224981 647.8MB/s txt1 +2.3% -BM_UFlat/12 201229 196447 610.5MB/s txt2 +2.4% -BM_UFlat/13 609547 596761 685.3MB/s txt3 +2.1% -BM_UFlat/14 824362 804821 573.8MB/s txt4 +2.4% -BM_UFlat/15 371095 374899 1.3GB/s bin -1.0% -BM_UFlat/16 267 267 717.8MB/s bin_200 +0.0% -BM_UFlat/17 44623 43828 835.9MB/s sum +1.8% -BM_UFlat/18 5077 4815 841.0MB/s man +5.4% -BM_UFlat/19 74964 73210 1.5GB/s pb +2.4% -BM_UFlat/20 237987 236745 746.0MB/s gaviota +0.5% -Sum of all benchmarks 4794092 4697659 +2.1% - - -Istanbul: - -Benchmark Base (ns) New (ns) Improvement -------------------------------------------------------------------------------------------------- -BM_UFlat/0 98614 96376 1020.4MB/s html +2.3% -BM_UFlat/1 963740 953241 707.2MB/s urls +1.1% -BM_UFlat/2 25042 24769 4.8GB/s jpg +1.1% -BM_UFlat/3 180 180 1065.6MB/s jpg_200 +0.0% -BM_UFlat/4 45942 45403 1.9GB/s pdf +1.2% -BM_UFlat/5 400135 390226 1008.2MB/s html4 +2.5% -BM_UFlat/6 37768 37392 631.9MB/s cp +1.0% -BM_UFlat/7 18585 18200 588.2MB/s c +2.1% -BM_UFlat/8 5751 5690 627.7MB/s lsp +1.1% -BM_UFlat/9 1543154 1542209 641.4MB/s xls +0.1% -BM_UFlat/10 381 388 494.6MB/s xls_200 -1.8% -BM_UFlat/11 339715 331973 440.1MB/s txt1 +2.3% -BM_UFlat/12 294807 289418 415.4MB/s txt2 +1.9% -BM_UFlat/13 906160 884094 463.3MB/s txt3 +2.5% -BM_UFlat/14 1224221 1198435 386.1MB/s txt4 +2.2% -BM_UFlat/15 516277 502923 979.5MB/s bin +2.7% -BM_UFlat/16 405 402 477.2MB/s bin_200 +0.7% -BM_UFlat/17 61640 60621 605.6MB/s sum +1.7% -BM_UFlat/18 7326 7383 549.5MB/s man -0.8% -BM_UFlat/19 94720 92653 1.2GB/s pb +2.2% -BM_UFlat/20 360435 346687 510.6MB/s gaviota +4.0% -Sum of all benchmarks 6944998 6828663 +1.7% - ------------------------------------------------------------------------- -r76 | snappy.mirrorbot@gmail.com | 2013-06-13 18:19:52 +0200 (Thu, 13 Jun 2013) | 9 lines - -Add support for uncompressing to iovecs (scatter I/O). -Windows does not have struct iovec defined anywhere, -so we define our own version that's equal to what UNIX -typically has. - -The bulk of this patch was contributed by Mohit Aron. - -R=jeff - ------------------------------------------------------------------------- -r75 | snappy.mirrorbot@gmail.com | 2013-06-12 21:51:15 +0200 (Wed, 12 Jun 2013) | 4 lines - -Some code reorganization needed for an internal change. - -R=fikes - ------------------------------------------------------------------------- -r74 | snappy.mirrorbot@gmail.com | 2013-04-09 17:33:30 +0200 (Tue, 09 Apr 2013) | 4 lines - -Supports truncated test data in zippy benchmark. - -R=sesse - ------------------------------------------------------------------------- -r73 | snappy.mirrorbot@gmail.com | 2013-02-05 15:36:15 +0100 (Tue, 05 Feb 2013) | 4 lines - -Release Snappy 1.1.0. - -R=sanjay - ------------------------------------------------------------------------- -r72 | snappy.mirrorbot@gmail.com | 2013-02-05 15:30:05 +0100 (Tue, 05 Feb 2013) | 9 lines - -Make ./snappy_unittest pass without "srcdir" being defined. - -Previously, snappy_unittests would read from an absolute path /testdata/..; -convert it to use a relative path instead. - -Patch from Marc-Antonie Ruel. - -R=maruel - ------------------------------------------------------------------------- -r71 | snappy.mirrorbot@gmail.com | 2013-01-18 13:16:36 +0100 (Fri, 18 Jan 2013) | 287 lines - -Increase the Zippy block size from 32 kB to 64 kB, winning ~3% density -while being effectively performance neutral. - -The longer story about density is that we win 3-6% density on the benchmarks -where this has any effect at all; many of the benchmarks (cp, c, lsp, man) -are smaller than 32 kB and thus will have no effect. Binary data also seems -to win little or nothing; of course, the already-compressed data wins nothing. -The protobuf benchmark wins as much as ~18% depending on architecture, -but I wouldn't be too sure that this is representative of protobuf data in -general. - -As of performance, we lose a tiny amount since we get more tags (e.g., a long -literal might be broken up into literal-copy-literal), but we win it back with -less clearing of the hash table, and more opportunities to skip incompressible -data (e.g. in the jpg benchmark). Decompression seems to get ever so slightly -slower, again due to more tags. The total net change is about as close to zero -as we can get, so the end effect seems to be simply more density and no -real performance change. - -The comment about not changing kBlockSize, scary as it is, is not really -relevant, since we're never going to have a block-level decompressor without -explicitly marked blocks. Replace it with something more appropriate. - -This affects the framing format, but it's okay to change it since it basically -has no users yet. - - -Density (note that cp, c, lsp and man are all smaller than 32 kB): - - Benchmark Description Base (%) New (%) Improvement - -------------------------------------------------------------- - ZFlat/0 html 22.57 22.31 +5.6% - ZFlat/1 urls 50.89 47.77 +6.5% - ZFlat/2 jpg 99.88 99.87 +0.0% - ZFlat/3 pdf 82.13 82.07 +0.1% - ZFlat/4 html4 23.55 22.51 +4.6% - ZFlat/5 cp 48.12 48.12 +0.0% - ZFlat/6 c 42.40 42.40 +0.0% - ZFlat/7 lsp 48.37 48.37 +0.0% - ZFlat/8 xls 41.34 41.23 +0.3% - ZFlat/9 txt1 59.81 57.87 +3.4% - ZFlat/10 txt2 64.07 61.93 +3.5% - ZFlat/11 txt3 57.11 54.92 +4.0% - ZFlat/12 txt4 68.35 66.22 +3.2% - ZFlat/13 bin 18.21 18.11 +0.6% - ZFlat/14 sum 51.88 48.96 +6.0% - ZFlat/15 man 59.36 59.36 +0.0% - ZFlat/16 pb 23.15 19.64 +17.9% - ZFlat/17 gaviota 38.27 37.72 +1.5% - Geometric mean 45.51 44.15 +3.1% - - -Microbenchmarks (64-bit, opt): - -Westmere 2.8 GHz: - - Benchmark Base (ns) New (ns) Improvement - ------------------------------------------------------------------------------------------------- - BM_UFlat/0 75342 75027 1.3GB/s html +0.4% - BM_UFlat/1 723767 744269 899.6MB/s urls -2.8% - BM_UFlat/2 10072 10072 11.7GB/s jpg +0.0% - BM_UFlat/3 30747 30388 2.9GB/s pdf +1.2% - BM_UFlat/4 307353 306063 1.2GB/s html4 +0.4% - BM_UFlat/5 28593 28743 816.3MB/s cp -0.5% - BM_UFlat/6 12958 12998 818.1MB/s c -0.3% - BM_UFlat/7 3700 3792 935.8MB/s lsp -2.4% - BM_UFlat/8 999685 999905 982.1MB/s xls -0.0% - BM_UFlat/9 232954 230079 630.4MB/s txt1 +1.2% - BM_UFlat/10 200785 201468 592.6MB/s txt2 -0.3% - BM_UFlat/11 617267 610968 666.1MB/s txt3 +1.0% - BM_UFlat/12 821595 822475 558.7MB/s txt4 -0.1% - BM_UFlat/13 377097 377632 1.3GB/s bin -0.1% - BM_UFlat/14 45476 45260 805.8MB/s sum +0.5% - BM_UFlat/15 4985 5003 805.7MB/s man -0.4% - BM_UFlat/16 80813 77494 1.4GB/s pb +4.3% - BM_UFlat/17 251792 241553 727.7MB/s gaviota +4.2% - BM_UValidate/0 40343 40354 2.4GB/s html -0.0% - BM_UValidate/1 426890 451574 1.4GB/s urls -5.5% - BM_UValidate/2 187 179 661.9GB/s jpg +4.5% - BM_UValidate/3 13783 13827 6.4GB/s pdf -0.3% - BM_UValidate/4 162393 163335 2.3GB/s html4 -0.6% - BM_UDataBuffer/0 93756 93302 1046.7MB/s html +0.5% - BM_UDataBuffer/1 886714 916292 730.7MB/s urls -3.2% - BM_UDataBuffer/2 15861 16401 7.2GB/s jpg -3.3% - BM_UDataBuffer/3 38934 39224 2.2GB/s pdf -0.7% - BM_UDataBuffer/4 381008 379428 1029.5MB/s html4 +0.4% - BM_UCord/0 92528 91098 1072.0MB/s html +1.6% - BM_UCord/1 858421 885287 756.3MB/s urls -3.0% - BM_UCord/2 13140 13464 8.8GB/s jpg -2.4% - BM_UCord/3 39012 37773 2.3GB/s pdf +3.3% - BM_UCord/4 376869 371267 1052.1MB/s html4 +1.5% - BM_UCordString/0 75810 75303 1.3GB/s html +0.7% - BM_UCordString/1 735290 753841 888.2MB/s urls -2.5% - BM_UCordString/2 11945 13113 9.0GB/s jpg -8.9% - BM_UCordString/3 33901 32562 2.7GB/s pdf +4.1% - BM_UCordString/4 310985 309390 1.2GB/s html4 +0.5% - BM_UCordValidate/0 40952 40450 2.4GB/s html +1.2% - BM_UCordValidate/1 433842 456531 1.4GB/s urls -5.0% - BM_UCordValidate/2 1179 1173 100.8GB/s jpg +0.5% - BM_UCordValidate/3 14481 14392 6.1GB/s pdf +0.6% - BM_UCordValidate/4 164364 164151 2.3GB/s html4 +0.1% - BM_ZFlat/0 160610 156601 623.6MB/s html (22.31 %) +2.6% - BM_ZFlat/1 1995238 1993582 335.9MB/s urls (47.77 %) +0.1% - BM_ZFlat/2 30133 24983 4.7GB/s jpg (99.87 %) +20.6% - BM_ZFlat/3 74453 73128 1.2GB/s pdf (82.07 %) +1.8% - BM_ZFlat/4 647674 633729 616.4MB/s html4 (22.51 %) +2.2% - BM_ZFlat/5 76259 76090 308.4MB/s cp (48.12 %) +0.2% - BM_ZFlat/6 31106 31084 342.1MB/s c (42.40 %) +0.1% - BM_ZFlat/7 10507 10443 339.8MB/s lsp (48.37 %) +0.6% - BM_ZFlat/8 1811047 1793325 547.6MB/s xls (41.23 %) +1.0% - BM_ZFlat/9 597903 581793 249.3MB/s txt1 (57.87 %) +2.8% - BM_ZFlat/10 525320 514522 232.0MB/s txt2 (61.93 %) +2.1% - BM_ZFlat/11 1596591 1551636 262.3MB/s txt3 (54.92 %) +2.9% - BM_ZFlat/12 2134523 2094033 219.5MB/s txt4 (66.22 %) +1.9% - BM_ZFlat/13 593024 587869 832.6MB/s bin (18.11 %) +0.9% - BM_ZFlat/14 114746 110666 329.5MB/s sum (48.96 %) +3.7% - BM_ZFlat/15 14376 14485 278.3MB/s man (59.36 %) -0.8% - BM_ZFlat/16 167908 150070 753.6MB/s pb (19.64 %) +11.9% - BM_ZFlat/17 460228 442253 397.5MB/s gaviota (37.72 %) +4.1% - BM_ZCord/0 164896 160241 609.4MB/s html +2.9% - BM_ZCord/1 2070239 2043492 327.7MB/s urls +1.3% - BM_ZCord/2 54402 47002 2.5GB/s jpg +15.7% - BM_ZCord/3 85871 83832 1073.1MB/s pdf +2.4% - BM_ZCord/4 664078 648825 602.0MB/s html4 +2.4% - BM_ZDataBuffer/0 174874 172549 566.0MB/s html +1.3% - BM_ZDataBuffer/1 2134410 2139173 313.0MB/s urls -0.2% - BM_ZDataBuffer/2 71911 69551 1.7GB/s jpg +3.4% - BM_ZDataBuffer/3 98236 99727 902.1MB/s pdf -1.5% - BM_ZDataBuffer/4 710776 699104 558.8MB/s html4 +1.7% - Sum of all benchmarks 27358908 27200688 +0.6% - - -Sandy Bridge 2.6 GHz: - - Benchmark Base (ns) New (ns) Improvement - ------------------------------------------------------------------------------------------------- - BM_UFlat/0 49356 49018 1.9GB/s html +0.7% - BM_UFlat/1 516764 531955 1.2GB/s urls -2.9% - BM_UFlat/2 6982 7304 16.2GB/s jpg -4.4% - BM_UFlat/3 15285 15598 5.6GB/s pdf -2.0% - BM_UFlat/4 206557 206669 1.8GB/s html4 -0.1% - BM_UFlat/5 13681 13567 1.7GB/s cp +0.8% - BM_UFlat/6 6571 6592 1.6GB/s c -0.3% - BM_UFlat/7 2008 1994 1.7GB/s lsp +0.7% - BM_UFlat/8 775700 773286 1.2GB/s xls +0.3% - BM_UFlat/9 165578 164480 881.8MB/s txt1 +0.7% - BM_UFlat/10 143707 144139 828.2MB/s txt2 -0.3% - BM_UFlat/11 443026 436281 932.8MB/s txt3 +1.5% - BM_UFlat/12 603129 595856 771.2MB/s txt4 +1.2% - BM_UFlat/13 271682 270450 1.8GB/s bin +0.5% - BM_UFlat/14 26200 25666 1.4GB/s sum +2.1% - BM_UFlat/15 2620 2608 1.5GB/s man +0.5% - BM_UFlat/16 48908 47756 2.3GB/s pb +2.4% - BM_UFlat/17 174638 170346 1031.9MB/s gaviota +2.5% - BM_UValidate/0 31922 31898 3.0GB/s html +0.1% - BM_UValidate/1 341265 363554 1.8GB/s urls -6.1% - BM_UValidate/2 160 151 782.8GB/s jpg +6.0% - BM_UValidate/3 10402 10380 8.5GB/s pdf +0.2% - BM_UValidate/4 129490 130587 2.9GB/s html4 -0.8% - BM_UDataBuffer/0 59383 58736 1.6GB/s html +1.1% - BM_UDataBuffer/1 619222 637786 1049.8MB/s urls -2.9% - BM_UDataBuffer/2 10775 11941 9.9GB/s jpg -9.8% - BM_UDataBuffer/3 18002 17930 4.9GB/s pdf +0.4% - BM_UDataBuffer/4 259182 259306 1.5GB/s html4 -0.0% - BM_UCord/0 59379 57814 1.6GB/s html +2.7% - BM_UCord/1 598456 615162 1088.4MB/s urls -2.7% - BM_UCord/2 8519 8628 13.7GB/s jpg -1.3% - BM_UCord/3 18123 17537 5.0GB/s pdf +3.3% - BM_UCord/4 252375 252331 1.5GB/s html4 +0.0% - BM_UCordString/0 49494 49790 1.9GB/s html -0.6% - BM_UCordString/1 524659 541803 1.2GB/s urls -3.2% - BM_UCordString/2 8206 8354 14.2GB/s jpg -1.8% - BM_UCordString/3 17235 16537 5.3GB/s pdf +4.2% - BM_UCordString/4 210188 211072 1.8GB/s html4 -0.4% - BM_UCordValidate/0 31956 31587 3.0GB/s html +1.2% - BM_UCordValidate/1 340828 362141 1.8GB/s urls -5.9% - BM_UCordValidate/2 783 744 158.9GB/s jpg +5.2% - BM_UCordValidate/3 10543 10462 8.4GB/s pdf +0.8% - BM_UCordValidate/4 130150 129789 2.9GB/s html4 +0.3% - BM_ZFlat/0 113873 111200 878.2MB/s html (22.31 %) +2.4% - BM_ZFlat/1 1473023 1489858 449.4MB/s urls (47.77 %) -1.1% - BM_ZFlat/2 23569 19486 6.1GB/s jpg (99.87 %) +21.0% - BM_ZFlat/3 49178 48046 1.8GB/s pdf (82.07 %) +2.4% - BM_ZFlat/4 475063 469394 832.2MB/s html4 (22.51 %) +1.2% - BM_ZFlat/5 46910 46816 501.2MB/s cp (48.12 %) +0.2% - BM_ZFlat/6 16883 16916 628.6MB/s c (42.40 %) -0.2% - BM_ZFlat/7 5381 5447 651.5MB/s lsp (48.37 %) -1.2% - BM_ZFlat/8 1466870 1473861 666.3MB/s xls (41.23 %) -0.5% - BM_ZFlat/9 468006 464101 312.5MB/s txt1 (57.87 %) +0.8% - BM_ZFlat/10 408157 408957 291.9MB/s txt2 (61.93 %) -0.2% - BM_ZFlat/11 1253348 1232910 330.1MB/s txt3 (54.92 %) +1.7% - BM_ZFlat/12 1702373 1702977 269.8MB/s txt4 (66.22 %) -0.0% - BM_ZFlat/13 439792 438557 1116.0MB/s bin (18.11 %) +0.3% - BM_ZFlat/14 80766 78851 462.5MB/s sum (48.96 %) +2.4% - BM_ZFlat/15 7420 7542 534.5MB/s man (59.36 %) -1.6% - BM_ZFlat/16 112043 100126 1.1GB/s pb (19.64 %) +11.9% - BM_ZFlat/17 368877 357703 491.4MB/s gaviota (37.72 %) +3.1% - BM_ZCord/0 116402 113564 859.9MB/s html +2.5% - BM_ZCord/1 1507156 1519911 440.5MB/s urls -0.8% - BM_ZCord/2 39860 33686 3.5GB/s jpg +18.3% - BM_ZCord/3 56211 54694 1.6GB/s pdf +2.8% - BM_ZCord/4 485594 479212 815.1MB/s html4 +1.3% - BM_ZDataBuffer/0 123185 121572 803.3MB/s html +1.3% - BM_ZDataBuffer/1 1569111 1589380 421.3MB/s urls -1.3% - BM_ZDataBuffer/2 53143 49556 2.4GB/s jpg +7.2% - BM_ZDataBuffer/3 65725 66826 1.3GB/s pdf -1.6% - BM_ZDataBuffer/4 517871 514750 758.9MB/s html4 +0.6% - Sum of all benchmarks 20258879 20315484 -0.3% - - -AMD Instanbul 2.4 GHz: - - Benchmark Base (ns) New (ns) Improvement - ------------------------------------------------------------------------------------------------- - BM_UFlat/0 97120 96585 1011.1MB/s html +0.6% - BM_UFlat/1 917473 948016 706.3MB/s urls -3.2% - BM_UFlat/2 21496 23938 4.9GB/s jpg -10.2% - BM_UFlat/3 44751 45639 1.9GB/s pdf -1.9% - BM_UFlat/4 391950 391413 998.0MB/s html4 +0.1% - BM_UFlat/5 37366 37201 630.7MB/s cp +0.4% - BM_UFlat/6 18350 18318 580.5MB/s c +0.2% - BM_UFlat/7 5672 5661 626.9MB/s lsp +0.2% - BM_UFlat/8 1533390 1529441 642.1MB/s xls +0.3% - BM_UFlat/9 335477 336553 431.0MB/s txt1 -0.3% - BM_UFlat/10 285140 292080 408.7MB/s txt2 -2.4% - BM_UFlat/11 888507 894758 454.9MB/s txt3 -0.7% - BM_UFlat/12 1187643 1210928 379.5MB/s txt4 -1.9% - BM_UFlat/13 493717 507447 964.5MB/s bin -2.7% - BM_UFlat/14 61740 60870 599.1MB/s sum +1.4% - BM_UFlat/15 7211 7187 560.9MB/s man +0.3% - BM_UFlat/16 97435 93100 1.2GB/s pb +4.7% - BM_UFlat/17 362662 356395 493.2MB/s gaviota +1.8% - BM_UValidate/0 47475 47118 2.0GB/s html +0.8% - BM_UValidate/1 501304 529741 1.2GB/s urls -5.4% - BM_UValidate/2 276 243 486.2GB/s jpg +13.6% - BM_UValidate/3 16361 16261 5.4GB/s pdf +0.6% - BM_UValidate/4 190741 190353 2.0GB/s html4 +0.2% - BM_UDataBuffer/0 111080 109771 889.6MB/s html +1.2% - BM_UDataBuffer/1 1051035 1085999 616.5MB/s urls -3.2% - BM_UDataBuffer/2 25801 25463 4.6GB/s jpg +1.3% - BM_UDataBuffer/3 50493 49946 1.8GB/s pdf +1.1% - BM_UDataBuffer/4 447258 444138 879.5MB/s html4 +0.7% - BM_UCord/0 109350 107909 905.0MB/s html +1.3% - BM_UCord/1 1023396 1054964 634.7MB/s urls -3.0% - BM_UCord/2 25292 24371 4.9GB/s jpg +3.8% - BM_UCord/3 48955 49736 1.8GB/s pdf -1.6% - BM_UCord/4 440452 437331 893.2MB/s html4 +0.7% - BM_UCordString/0 98511 98031 996.2MB/s html +0.5% - BM_UCordString/1 933230 963495 694.9MB/s urls -3.1% - BM_UCordString/2 23311 24076 4.9GB/s jpg -3.2% - BM_UCordString/3 45568 46196 1.9GB/s pdf -1.4% - BM_UCordString/4 397791 396934 984.1MB/s html4 +0.2% - BM_UCordValidate/0 47537 46921 2.0GB/s html +1.3% - BM_UCordValidate/1 505071 532716 1.2GB/s urls -5.2% - BM_UCordValidate/2 1663 1621 72.9GB/s jpg +2.6% - BM_UCordValidate/3 16890 16926 5.2GB/s pdf -0.2% - BM_UCordValidate/4 192365 191984 2.0GB/s html4 +0.2% - BM_ZFlat/0 184708 179103 545.3MB/s html (22.31 %) +3.1% - BM_ZFlat/1 2293864 2302950 290.7MB/s urls (47.77 %) -0.4% - BM_ZFlat/2 52852 47618 2.5GB/s jpg (99.87 %) +11.0% - BM_ZFlat/3 100766 96179 935.3MB/s pdf (82.07 %) +4.8% - BM_ZFlat/4 741220 727977 536.6MB/s html4 (22.51 %) +1.8% - BM_ZFlat/5 85402 85418 274.7MB/s cp (48.12 %) -0.0% - BM_ZFlat/6 36558 36494 291.4MB/s c (42.40 %) +0.2% - BM_ZFlat/7 12706 12507 283.7MB/s lsp (48.37 %) +1.6% - BM_ZFlat/8 2336823 2335688 420.5MB/s xls (41.23 %) +0.0% - BM_ZFlat/9 701804 681153 212.9MB/s txt1 (57.87 %) +3.0% - BM_ZFlat/10 606700 597194 199.9MB/s txt2 (61.93 %) +1.6% - BM_ZFlat/11 1852283 1803238 225.7MB/s txt3 (54.92 %) +2.7% - BM_ZFlat/12 2475527 2443354 188.1MB/s txt4 (66.22 %) +1.3% - BM_ZFlat/13 694497 696654 702.6MB/s bin (18.11 %) -0.3% - BM_ZFlat/14 136929 129855 280.8MB/s sum (48.96 %) +5.4% - BM_ZFlat/15 17172 17124 235.4MB/s man (59.36 %) +0.3% - BM_ZFlat/16 190364 171763 658.4MB/s pb (19.64 %) +10.8% - BM_ZFlat/17 567285 555190 316.6MB/s gaviota (37.72 %) +2.2% - BM_ZCord/0 193490 187031 522.1MB/s html +3.5% - BM_ZCord/1 2427537 2415315 277.2MB/s urls +0.5% - BM_ZCord/2 85378 81412 1.5GB/s jpg +4.9% - BM_ZCord/3 121898 119419 753.3MB/s pdf +2.1% - BM_ZCord/4 779564 762961 512.0MB/s html4 +2.2% - BM_ZDataBuffer/0 213820 207272 471.1MB/s html +3.2% - BM_ZDataBuffer/1 2589010 2586495 258.9MB/s urls +0.1% - BM_ZDataBuffer/2 121871 118885 1018.4MB/s jpg +2.5% - BM_ZDataBuffer/3 145382 145986 616.2MB/s pdf -0.4% - BM_ZDataBuffer/4 868117 852754 458.1MB/s html4 +1.8% - Sum of all benchmarks 33771833 33744763 +0.1% - ------------------------------------------------------------------------- -r70 | snappy.mirrorbot@gmail.com | 2013-01-06 20:21:26 +0100 (Sun, 06 Jan 2013) | 6 lines - -Adjust the Snappy open-source distribution for the changes in Google's -internal file API. - -R=sanjay - - ------------------------------------------------------------------------- -r69 | snappy.mirrorbot@gmail.com | 2013-01-04 12:54:20 +0100 (Fri, 04 Jan 2013) | 15 lines - -Change a few ORs to additions where they don't matter. This helps the compiler -use the LEA instruction more efficiently, since e.g. a + (b << 2) can be encoded -as one instruction. Even more importantly, it can constant-fold the -COPY_* enums together with the shifted negative constants, which also saves -some instructions. (We don't need it for LITERAL, since it happens to be 0.) - -I am unsure why the compiler couldn't do this itself, but the theory is that -it cannot prove that len-1 and len-4 cannot underflow/wrap, and thus can't -do the optimization safely. - -The gains are small but measurable; 0.5-1.0% over the BM_Z* benchmarks -(measured on Westmere, Sandy Bridge and Istanbul). - -R=sanjay - ------------------------------------------------------------------------- -r68 | snappy.mirrorbot@gmail.com | 2012-10-08 13:37:16 +0200 (Mon, 08 Oct 2012) | 5 lines - -Stop giving -Werror to automake, due to an incompatibility between current -versions of libtool and automake on non-GNU platforms (e.g. Mac OS X). - -R=sanjay - ------------------------------------------------------------------------- -r67 | snappy.mirrorbot@gmail.com | 2012-08-17 15:54:47 +0200 (Fri, 17 Aug 2012) | 5 lines - -Fix public issue 66: Document GetUncompressedLength better, in particular that -it leaves the source in a state that's not appropriate for RawUncompress. - -R=sanjay - ------------------------------------------------------------------------- -r66 | snappy.mirrorbot@gmail.com | 2012-07-31 13:44:44 +0200 (Tue, 31 Jul 2012) | 5 lines - -Fix public issue 64: Check for at configure time, -since MSVC seemingly does not have it. - -R=sanjay - ------------------------------------------------------------------------- -r65 | snappy.mirrorbot@gmail.com | 2012-07-04 11:34:48 +0200 (Wed, 04 Jul 2012) | 10 lines - -Handle the case where gettimeofday() goes backwards or returns the same value -twice; it could cause division by zero in the unit test framework. -(We already had one fix for this in place, but it was incomplete.) - -This could in theory happen on any system, since there are few guarantees -about gettimeofday(), but seems to only happen in practice on GNU/Hurd, where -gettimeofday() is cached and only updated ever so often. - -R=sanjay - ------------------------------------------------------------------------- -r64 | snappy.mirrorbot@gmail.com | 2012-07-04 11:28:33 +0200 (Wed, 04 Jul 2012) | 6 lines - -Mark ARMv4 as not supporting unaligned accesses (not just ARMv5 and ARMv6); -apparently Debian still targets these by default, giving us segfaults on -armel. - -R=sanjay - ------------------------------------------------------------------------- -r63 | snappy.mirrorbot@gmail.com | 2012-05-22 11:46:05 +0200 (Tue, 22 May 2012) | 5 lines - -Fix public bug #62: Remove an extraneous comma at the end of an enum list, -causing compile errors when embedded in Mozilla on OpenBSD. - -R=sanjay - ------------------------------------------------------------------------- -r62 | snappy.mirrorbot@gmail.com | 2012-05-22 11:32:50 +0200 (Tue, 22 May 2012) | 8 lines - -Snappy library no longer depends on iostream. - -Achieved by moving logging macro definitions to a test-only -header file, and by changing non-test code to use assert, -fprintf, and abort instead of LOG/CHECK macros. - -R=sesse - ------------------------------------------------------------------------- -r61 | snappy.mirrorbot@gmail.com | 2012-02-24 16:46:37 +0100 (Fri, 24 Feb 2012) | 4 lines - -Release Snappy 1.0.5. - -R=sanjay - ------------------------------------------------------------------------- -r60 | snappy.mirrorbot@gmail.com | 2012-02-23 18:00:36 +0100 (Thu, 23 Feb 2012) | 57 lines - -For 32-bit platforms, do not try to accelerate multiple neighboring -32-bit loads with a 64-bit load during compression (it's not a win). - -The main target for this optimization is ARM, but 32-bit x86 gets -a small gain, too, although there is noise in the microbenchmarks. -It's a no-op for 64-bit x86. It does not affect decompression. - -Microbenchmark results on a Cortex-A9 1GHz, using g++ 4.6.2 (from -Ubuntu/Linaro), -O2 -DNDEBUG -Wa,-march=armv7a -mtune=cortex-a9 --mthumb-interwork, minimum 1000 iterations: - - Benchmark Time(ns) CPU(ns) Iterations - --------------------------------------------------- - BM_ZFlat/0 1158277 1160000 1000 84.2MB/s html (23.57 %) [ +4.3%] - BM_ZFlat/1 14861782 14860000 1000 45.1MB/s urls (50.89 %) [ +1.1%] - BM_ZFlat/2 393595 390000 1000 310.5MB/s jpg (99.88 %) [ +0.0%] - BM_ZFlat/3 650583 650000 1000 138.4MB/s pdf (82.13 %) [ +3.1%] - BM_ZFlat/4 4661480 4660000 1000 83.8MB/s html4 (23.55 %) [ +4.3%] - BM_ZFlat/5 491973 490000 1000 47.9MB/s cp (48.12 %) [ +2.0%] - BM_ZFlat/6 193575 192678 1038 55.2MB/s c (42.40 %) [ +9.0%] - BM_ZFlat/7 62343 62754 3187 56.5MB/s lsp (48.37 %) [ +2.6%] - BM_ZFlat/8 17708468 17710000 1000 55.5MB/s xls (41.34 %) [ -0.3%] - BM_ZFlat/9 3755345 3760000 1000 38.6MB/s txt1 (59.81 %) [ +8.2%] - BM_ZFlat/10 3324217 3320000 1000 36.0MB/s txt2 (64.07 %) [ +4.2%] - BM_ZFlat/11 10139932 10140000 1000 40.1MB/s txt3 (57.11 %) [ +6.4%] - BM_ZFlat/12 13532109 13530000 1000 34.0MB/s txt4 (68.35 %) [ +5.0%] - BM_ZFlat/13 4690847 4690000 1000 104.4MB/s bin (18.21 %) [ +4.1%] - BM_ZFlat/14 830682 830000 1000 43.9MB/s sum (51.88 %) [ +1.2%] - BM_ZFlat/15 84784 85011 2235 47.4MB/s man (59.36 %) [ +1.1%] - BM_ZFlat/16 1293254 1290000 1000 87.7MB/s pb (23.15 %) [ +2.3%] - BM_ZFlat/17 2775155 2780000 1000 63.2MB/s gaviota (38.27 %) [+12.2%] - -Core i7 in 32-bit mode (only one run and 100 iterations, though, so noisy): - - Benchmark Time(ns) CPU(ns) Iterations - --------------------------------------------------- - BM_ZFlat/0 227582 223464 3043 437.0MB/s html (23.57 %) [ +7.4%] - BM_ZFlat/1 2982430 2918455 233 229.4MB/s urls (50.89 %) [ +2.9%] - BM_ZFlat/2 46967 46658 15217 2.5GB/s jpg (99.88 %) [ +0.0%] - BM_ZFlat/3 115298 114864 5833 783.2MB/s pdf (82.13 %) [ +1.5%] - BM_ZFlat/4 913440 899743 778 434.2MB/s html4 (23.55 %) [ +0.3%] - BM_ZFlat/5 110302 108571 7000 216.1MB/s cp (48.12 %) [ +0.0%] - BM_ZFlat/6 44409 43372 15909 245.2MB/s c (42.40 %) [ +0.8%] - BM_ZFlat/7 15713 15643 46667 226.9MB/s lsp (48.37 %) [ +2.7%] - BM_ZFlat/8 2625539 2602230 269 377.4MB/s xls (41.34 %) [ +1.4%] - BM_ZFlat/9 808884 811429 875 178.8MB/s txt1 (59.81 %) [ -3.9%] - BM_ZFlat/10 709532 700000 1000 170.5MB/s txt2 (64.07 %) [ +0.0%] - BM_ZFlat/11 2177682 2162162 333 188.2MB/s txt3 (57.11 %) [ -1.4%] - BM_ZFlat/12 2849640 2840000 250 161.8MB/s txt4 (68.35 %) [ -1.4%] - BM_ZFlat/13 849760 835476 778 585.8MB/s bin (18.21 %) [ +1.2%] - BM_ZFlat/14 165940 164571 4375 221.6MB/s sum (51.88 %) [ +1.4%] - BM_ZFlat/15 20939 20571 35000 196.0MB/s man (59.36 %) [ +2.1%] - BM_ZFlat/16 239209 236544 2917 478.1MB/s pb (23.15 %) [ +4.2%] - BM_ZFlat/17 616206 610000 1000 288.2MB/s gaviota (38.27 %) [ -1.6%] - -R=sanjay - ------------------------------------------------------------------------- -r59 | snappy.mirrorbot@gmail.com | 2012-02-21 18:02:17 +0100 (Tue, 21 Feb 2012) | 107 lines - -Enable the use of unaligned loads and stores for ARM-based architectures -where they are available (ARMv7 and higher). This gives a significant -speed boost on ARM, both for compression and decompression. -It should not affect x86 at all. - -There are more changes possible to speed up ARM, but it might not be -that easy to do without hurting x86 or making the code uglier. -Also, we de not try to use NEON yet. - -Microbenchmark results on a Cortex-A9 1GHz, using g++ 4.6.2 (from Ubuntu/Linaro), --O2 -DNDEBUG -Wa,-march=armv7a -mtune=cortex-a9 -mthumb-interwork: - -Benchmark Time(ns) CPU(ns) Iterations ---------------------------------------------------- -BM_UFlat/0 524806 529100 378 184.6MB/s html [+33.6%] -BM_UFlat/1 5139790 5200000 100 128.8MB/s urls [+28.8%] -BM_UFlat/2 86540 84166 1901 1.4GB/s jpg [ +0.6%] -BM_UFlat/3 215351 210176 904 428.0MB/s pdf [+29.8%] -BM_UFlat/4 2144490 2100000 100 186.0MB/s html4 [+33.3%] -BM_UFlat/5 194482 190000 1000 123.5MB/s cp [+36.2%] -BM_UFlat/6 91843 90175 2107 117.9MB/s c [+38.6%] -BM_UFlat/7 28535 28426 6684 124.8MB/s lsp [+34.7%] -BM_UFlat/8 9206600 9200000 100 106.7MB/s xls [+42.4%] -BM_UFlat/9 1865273 1886792 106 76.9MB/s txt1 [+32.5%] -BM_UFlat/10 1576809 1587301 126 75.2MB/s txt2 [+32.3%] -BM_UFlat/11 4968450 4900000 100 83.1MB/s txt3 [+32.7%] -BM_UFlat/12 6673970 6700000 100 68.6MB/s txt4 [+32.8%] -BM_UFlat/13 2391470 2400000 100 203.9MB/s bin [+29.2%] -BM_UFlat/14 334601 344827 522 105.8MB/s sum [+30.6%] -BM_UFlat/15 37404 38080 5252 105.9MB/s man [+33.8%] -BM_UFlat/16 535470 540540 370 209.2MB/s pb [+31.2%] -BM_UFlat/17 1875245 1886792 106 93.2MB/s gaviota [+37.8%] -BM_UValidate/0 178425 179533 1114 543.9MB/s html [ +2.7%] -BM_UValidate/1 2100450 2000000 100 334.8MB/s urls [ +5.0%] -BM_UValidate/2 1039 1044 172413 113.3GB/s jpg [ +3.4%] -BM_UValidate/3 59423 59470 3363 1.5GB/s pdf [ +7.8%] -BM_UValidate/4 760716 766283 261 509.8MB/s html4 [ +6.5%] -BM_ZFlat/0 1204632 1204819 166 81.1MB/s html (23.57 %) [+32.8%] -BM_ZFlat/1 15656190 15600000 100 42.9MB/s urls (50.89 %) [+27.6%] -BM_ZFlat/2 403336 410677 487 294.8MB/s jpg (99.88 %) [+16.5%] -BM_ZFlat/3 664073 671140 298 134.0MB/s pdf (82.13 %) [+28.4%] -BM_ZFlat/4 4961940 4900000 100 79.7MB/s html4 (23.55 %) [+30.6%] -BM_ZFlat/5 500664 501253 399 46.8MB/s cp (48.12 %) [+33.4%] -BM_ZFlat/6 217276 215982 926 49.2MB/s c (42.40 %) [+25.0%] -BM_ZFlat/7 64122 65487 3054 54.2MB/s lsp (48.37 %) [+36.1%] -BM_ZFlat/8 18045730 18000000 100 54.6MB/s xls (41.34 %) [+34.4%] -BM_ZFlat/9 4051530 4000000 100 36.3MB/s txt1 (59.81 %) [+25.0%] -BM_ZFlat/10 3451800 3500000 100 34.1MB/s txt2 (64.07 %) [+25.7%] -BM_ZFlat/11 11052340 11100000 100 36.7MB/s txt3 (57.11 %) [+24.3%] -BM_ZFlat/12 14538690 14600000 100 31.5MB/s txt4 (68.35 %) [+24.7%] -BM_ZFlat/13 5041850 5000000 100 97.9MB/s bin (18.21 %) [+32.0%] -BM_ZFlat/14 908840 909090 220 40.1MB/s sum (51.88 %) [+22.2%] -BM_ZFlat/15 86921 86206 1972 46.8MB/s man (59.36 %) [+42.2%] -BM_ZFlat/16 1312315 1315789 152 86.0MB/s pb (23.15 %) [+34.5%] -BM_ZFlat/17 3173120 3200000 100 54.9MB/s gaviota (38.27%) [+28.1%] - - -The move from 64-bit to 32-bit operations for the copies also affected 32-bit x86; -positive on the decompression side, and slightly negative on the compression side -(unless that is noise; I only ran once): - -Benchmark Time(ns) CPU(ns) Iterations ------------------------------------------------------ -BM_UFlat/0 86279 86140 7778 1.1GB/s html [ +7.5%] -BM_UFlat/1 839265 822622 778 813.9MB/s urls [ +9.4%] -BM_UFlat/2 9180 9143 87500 12.9GB/s jpg [ +1.2%] -BM_UFlat/3 35080 35000 20000 2.5GB/s pdf [+10.1%] -BM_UFlat/4 350318 345000 2000 1.1GB/s html4 [ +7.0%] -BM_UFlat/5 33808 33472 21212 701.0MB/s cp [ +9.0%] -BM_UFlat/6 15201 15214 46667 698.9MB/s c [+14.9%] -BM_UFlat/7 4652 4651 159091 762.9MB/s lsp [ +7.5%] -BM_UFlat/8 1285551 1282528 538 765.7MB/s xls [+10.7%] -BM_UFlat/9 282510 281690 2414 514.9MB/s txt1 [+13.6%] -BM_UFlat/10 243494 239286 2800 498.9MB/s txt2 [+14.4%] -BM_UFlat/11 743625 740000 1000 550.0MB/s txt3 [+14.3%] -BM_UFlat/12 999441 989717 778 464.3MB/s txt4 [+16.1%] -BM_UFlat/13 412402 410076 1707 1.2GB/s bin [ +7.3%] -BM_UFlat/14 54876 54000 10000 675.3MB/s sum [+13.0%] -BM_UFlat/15 6146 6100 100000 660.8MB/s man [+14.8%] -BM_UFlat/16 90496 90286 8750 1.2GB/s pb [ +4.0%] -BM_UFlat/17 292650 292000 2500 602.0MB/s gaviota [+18.1%] -BM_UValidate/0 49620 49699 14286 1.9GB/s html [ +0.0%] -BM_UValidate/1 501371 500000 1000 1.3GB/s urls [ +0.0%] -BM_UValidate/2 232 227 3043478 521.5GB/s jpg [ +1.3%] -BM_UValidate/3 17250 17143 43750 5.1GB/s pdf [ -1.3%] -BM_UValidate/4 198643 200000 3500 1.9GB/s html4 [ -0.9%] -BM_ZFlat/0 227128 229415 3182 425.7MB/s html (23.57 %) [ -1.4%] -BM_ZFlat/1 2970089 2960000 250 226.2MB/s urls (50.89 %) [ -1.9%] -BM_ZFlat/2 45683 44999 15556 2.6GB/s jpg (99.88 %) [ +2.2%] -BM_ZFlat/3 114661 113136 6364 795.1MB/s pdf (82.13 %) [ -1.5%] -BM_ZFlat/4 919702 914286 875 427.2MB/s html4 (23.55%) [ -1.3%] -BM_ZFlat/5 108189 108422 6364 216.4MB/s cp (48.12 %) [ -1.2%] -BM_ZFlat/6 44525 44000 15909 241.7MB/s c (42.40 %) [ -2.9%] -BM_ZFlat/7 15973 15857 46667 223.8MB/s lsp (48.37 %) [ +0.0%] -BM_ZFlat/8 2677888 2639405 269 372.1MB/s xls (41.34 %) [ -1.4%] -BM_ZFlat/9 800715 780000 1000 186.0MB/s txt1 (59.81 %) [ -0.4%] -BM_ZFlat/10 700089 700000 1000 170.5MB/s txt2 (64.07 %) [ -2.9%] -BM_ZFlat/11 2159356 2138365 318 190.3MB/s txt3 (57.11 %) [ -0.3%] -BM_ZFlat/12 2796143 2779923 259 165.3MB/s txt4 (68.35 %) [ -1.4%] -BM_ZFlat/13 856458 835476 778 585.8MB/s bin (18.21 %) [ -0.1%] -BM_ZFlat/14 166908 166857 4375 218.6MB/s sum (51.88 %) [ -1.4%] -BM_ZFlat/15 21181 20857 35000 193.3MB/s man (59.36 %) [ -0.8%] -BM_ZFlat/16 244009 239973 2917 471.3MB/s pb (23.15 %) [ -1.4%] -BM_ZFlat/17 596362 590000 1000 297.9MB/s gaviota (38.27%) [ +0.0%] - -R=sanjay - ------------------------------------------------------------------------- -r58 | snappy.mirrorbot@gmail.com | 2012-02-11 23:11:22 +0100 (Sat, 11 Feb 2012) | 9 lines - -Lower the size allocated in the "corrupted input" unit test from 256 MB -to 2 MB. This fixes issues with running the unit test on platforms with -little RAM (e.g. some ARM boards). - -Also, reactivate the 2 MB test for 64-bit platforms; there's no good -reason why it shouldn't be. - -R=sanjay - ------------------------------------------------------------------------- -r57 | snappy.mirrorbot@gmail.com | 2012-01-08 18:55:48 +0100 (Sun, 08 Jan 2012) | 2 lines - -Minor refactoring to accomodate changes in Google's internal code tree. - ------------------------------------------------------------------------- -r56 | snappy.mirrorbot@gmail.com | 2012-01-04 14:10:46 +0100 (Wed, 04 Jan 2012) | 19 lines - -Fix public issue r57: Fix most warnings with -Wall, mostly signed/unsigned -warnings. There are still some in the unit test, but the main .cc file should -be clean. We haven't enabled -Wall for the default build, since the unit test -is still not clean. - -This also fixes a real bug in the open-source implementation of -ReadFileToStringOrDie(); it would not detect errors correctly. - -I had to go through some pains to avoid performance loss as the types -were changed; I think there might still be some with 32-bit if and only if LFS -is enabled (ie., size_t is 64-bit), but for regular 32-bit and 64-bit I can't -see any losses, and I've diffed the generated GCC assembler between the old and -new code without seeing any significant choices. If anything, it's ever so -slightly faster. - -This may or may not enable compression of very large blocks (>2^32 bytes) -when size_t is 64-bit, but I haven't checked, and it is still not a supported -case. - ------------------------------------------------------------------------- -r55 | snappy.mirrorbot@gmail.com | 2012-01-04 11:46:39 +0100 (Wed, 04 Jan 2012) | 6 lines - -Add a framing format description. We do not have any implementation of this at -the current point, but there seems to be enough of a general interest in the -topic (cf. public bug #34). - -R=csilvers,sanjay - ------------------------------------------------------------------------- -r54 | snappy.mirrorbot@gmail.com | 2011-12-05 22:27:26 +0100 (Mon, 05 Dec 2011) | 81 lines - -Speed up decompression by moving the refill check to the end of the loop. - -This seems to work because in most of the branches, the compiler can evaluate -“ip_limit_ - ip” in a more efficient way than reloading ip_limit_ from memory -(either by already having the entire expression in a register, or reconstructing -it from “avail”, or something else). Memory loads, even from L1, are seemingly -costly in the big picture at the current decompression speeds. - -Microbenchmarks (64-bit, opt mode): - -Westmere (Intel Core i7): - - Benchmark Time(ns) CPU(ns) Iterations - -------------------------------------------- - BM_UFlat/0 74492 74491 187894 1.3GB/s html [ +5.9%] - BM_UFlat/1 712268 712263 19644 940.0MB/s urls [ +3.8%] - BM_UFlat/2 10591 10590 1000000 11.2GB/s jpg [ -6.8%] - BM_UFlat/3 29643 29643 469915 3.0GB/s pdf [ +7.9%] - BM_UFlat/4 304669 304667 45930 1.3GB/s html4 [ +4.8%] - BM_UFlat/5 28508 28507 490077 823.1MB/s cp [ +4.0%] - BM_UFlat/6 12415 12415 1000000 856.5MB/s c [ +8.6%] - BM_UFlat/7 3415 3415 4084723 1039.0MB/s lsp [+18.0%] - BM_UFlat/8 979569 979563 14261 1002.5MB/s xls [ +5.8%] - BM_UFlat/9 230150 230148 60934 630.2MB/s txt1 [ +5.2%] - BM_UFlat/10 197167 197166 71135 605.5MB/s txt2 [ +4.7%] - BM_UFlat/11 607394 607390 23041 670.1MB/s txt3 [ +5.6%] - BM_UFlat/12 808502 808496 17316 568.4MB/s txt4 [ +5.0%] - BM_UFlat/13 372791 372788 37564 1.3GB/s bin [ +3.3%] - BM_UFlat/14 44541 44541 313969 818.8MB/s sum [ +5.7%] - BM_UFlat/15 4833 4833 2898697 834.1MB/s man [ +4.8%] - BM_UFlat/16 79855 79855 175356 1.4GB/s pb [ +4.8%] - BM_UFlat/17 245845 245843 56838 715.0MB/s gaviota [ +5.8%] - -Clovertown (Intel Core 2): - - Benchmark Time(ns) CPU(ns) Iterations - -------------------------------------------- - BM_UFlat/0 107911 107890 100000 905.1MB/s html [ +2.2%] - BM_UFlat/1 1011237 1011041 10000 662.3MB/s urls [ +2.5%] - BM_UFlat/2 26775 26770 523089 4.4GB/s jpg [ +0.0%] - BM_UFlat/3 48103 48095 290618 1.8GB/s pdf [ +3.4%] - BM_UFlat/4 437724 437644 31937 892.6MB/s html4 [ +2.1%] - BM_UFlat/5 39607 39600 358284 592.5MB/s cp [ +2.4%] - BM_UFlat/6 18227 18224 768191 583.5MB/s c [ +2.7%] - BM_UFlat/7 5171 5170 2709437 686.4MB/s lsp [ +3.9%] - BM_UFlat/8 1560291 1559989 8970 629.5MB/s xls [ +3.6%] - BM_UFlat/9 335401 335343 41731 432.5MB/s txt1 [ +3.0%] - BM_UFlat/10 287014 286963 48758 416.0MB/s txt2 [ +2.8%] - BM_UFlat/11 888522 888356 15752 458.1MB/s txt3 [ +2.9%] - BM_UFlat/12 1186600 1186378 10000 387.3MB/s txt4 [ +3.1%] - BM_UFlat/13 572295 572188 24468 855.4MB/s bin [ +2.1%] - BM_UFlat/14 64060 64049 218401 569.4MB/s sum [ +4.1%] - BM_UFlat/15 7264 7263 1916168 555.0MB/s man [ +1.4%] - BM_UFlat/16 108853 108836 100000 1039.1MB/s pb [ +1.7%] - BM_UFlat/17 364289 364223 38419 482.6MB/s gaviota [ +4.9%] - -Barcelona (AMD Opteron): - - Benchmark Time(ns) CPU(ns) Iterations - -------------------------------------------- - BM_UFlat/0 103900 103871 100000 940.2MB/s html [ +8.3%] - BM_UFlat/1 1000435 1000107 10000 669.5MB/s urls [ +6.6%] - BM_UFlat/2 24659 24652 567362 4.8GB/s jpg [ +0.1%] - BM_UFlat/3 48206 48193 291121 1.8GB/s pdf [ +5.0%] - BM_UFlat/4 421980 421850 33174 926.0MB/s html4 [ +7.3%] - BM_UFlat/5 40368 40357 346994 581.4MB/s cp [ +8.7%] - BM_UFlat/6 19836 19830 708695 536.2MB/s c [ +8.0%] - BM_UFlat/7 6100 6098 2292774 581.9MB/s lsp [ +9.0%] - BM_UFlat/8 1693093 1692514 8261 580.2MB/s xls [ +8.0%] - BM_UFlat/9 365991 365886 38225 396.4MB/s txt1 [ +7.1%] - BM_UFlat/10 311330 311238 44950 383.6MB/s txt2 [ +7.6%] - BM_UFlat/11 975037 974737 14376 417.5MB/s txt3 [ +6.9%] - BM_UFlat/12 1303558 1303175 10000 352.6MB/s txt4 [ +7.3%] - BM_UFlat/13 517448 517290 27144 946.2MB/s bin [ +5.5%] - BM_UFlat/14 66537 66518 210352 548.3MB/s sum [ +7.5%] - BM_UFlat/15 7976 7974 1760383 505.6MB/s man [ +5.6%] - BM_UFlat/16 103121 103092 100000 1097.0MB/s pb [ +8.7%] - BM_UFlat/17 391431 391314 35733 449.2MB/s gaviota [ +6.5%] - -R=sanjay - ------------------------------------------------------------------------- -r53 | snappy.mirrorbot@gmail.com | 2011-11-23 12:14:17 +0100 (Wed, 23 Nov 2011) | 88 lines - -Speed up decompression by making the fast path for literals faster. - -We do the fast-path step as soon as possible; in fact, as soon as we know the -literal length. Since we usually hit the fast path, we can then skip the checks -for long literals and available input space (beyond what the fast path check -already does). - -Note that this changes the decompression Writer API; however, it does not -change the ABI, since writers are always templatized and as such never -cross compilation units. The new API is slightly more general, in that it -doesn't hard-code the value 16. Note that we also take care to check -for len <= 16 first, since the other two checks almost always succeed -(so we don't want to waste time checking for them until we have to). - -The improvements are most marked on Nehalem, but are generally positive -on other platforms as well. All microbenchmarks are 64-bit, opt. - -Clovertown (Core 2): - - Benchmark Time(ns) CPU(ns) Iterations - -------------------------------------------- - BM_UFlat/0 110226 110224 100000 886.0MB/s html [ +1.5%] - BM_UFlat/1 1036523 1036508 10000 646.0MB/s urls [ -0.8%] - BM_UFlat/2 26775 26775 522570 4.4GB/s jpg [ +0.0%] - BM_UFlat/3 49738 49737 280974 1.8GB/s pdf [ +0.3%] - BM_UFlat/4 446790 446792 31334 874.3MB/s html4 [ +0.8%] - BM_UFlat/5 40561 40562 350424 578.5MB/s cp [ +1.3%] - BM_UFlat/6 18722 18722 746903 568.0MB/s c [ +1.4%] - BM_UFlat/7 5373 5373 2608632 660.5MB/s lsp [ +8.3%] - BM_UFlat/8 1615716 1615718 8670 607.8MB/s xls [ +2.0%] - BM_UFlat/9 345278 345281 40481 420.1MB/s txt1 [ +1.4%] - BM_UFlat/10 294855 294855 47452 404.9MB/s txt2 [ +1.6%] - BM_UFlat/11 914263 914263 15316 445.2MB/s txt3 [ +1.1%] - BM_UFlat/12 1222694 1222691 10000 375.8MB/s txt4 [ +1.4%] - BM_UFlat/13 584495 584489 23954 837.4MB/s bin [ -0.6%] - BM_UFlat/14 66662 66662 210123 547.1MB/s sum [ +1.2%] - BM_UFlat/15 7368 7368 1881856 547.1MB/s man [ +4.0%] - BM_UFlat/16 110727 110726 100000 1021.4MB/s pb [ +2.3%] - BM_UFlat/17 382138 382141 36616 460.0MB/s gaviota [ -0.7%] - -Westmere (Core i7): - - Benchmark Time(ns) CPU(ns) Iterations - -------------------------------------------- - BM_UFlat/0 78861 78853 177703 1.2GB/s html [ +2.1%] - BM_UFlat/1 739560 739491 18912 905.4MB/s urls [ +3.4%] - BM_UFlat/2 9867 9866 1419014 12.0GB/s jpg [ +3.4%] - BM_UFlat/3 31989 31986 438385 2.7GB/s pdf [ +0.2%] - BM_UFlat/4 319406 319380 43771 1.2GB/s html4 [ +1.9%] - BM_UFlat/5 29639 29636 472862 791.7MB/s cp [ +5.2%] - BM_UFlat/6 13478 13477 1000000 789.0MB/s c [ +2.3%] - BM_UFlat/7 4030 4029 3475364 880.7MB/s lsp [ +8.7%] - BM_UFlat/8 1036585 1036492 10000 947.5MB/s xls [ +6.9%] - BM_UFlat/9 242127 242105 57838 599.1MB/s txt1 [ +3.0%] - BM_UFlat/10 206499 206480 67595 578.2MB/s txt2 [ +3.4%] - BM_UFlat/11 641635 641570 21811 634.4MB/s txt3 [ +2.4%] - BM_UFlat/12 848847 848769 16443 541.4MB/s txt4 [ +3.1%] - BM_UFlat/13 384968 384938 36366 1.2GB/s bin [ +0.3%] - BM_UFlat/14 47106 47101 297770 774.3MB/s sum [ +4.4%] - BM_UFlat/15 5063 5063 2772202 796.2MB/s man [ +7.7%] - BM_UFlat/16 83663 83656 167697 1.3GB/s pb [ +1.8%] - BM_UFlat/17 260224 260198 53823 675.6MB/s gaviota [ -0.5%] - -Barcelona (Opteron): - - Benchmark Time(ns) CPU(ns) Iterations - -------------------------------------------- - BM_UFlat/0 112490 112457 100000 868.4MB/s html [ -0.4%] - BM_UFlat/1 1066719 1066339 10000 627.9MB/s urls [ +1.0%] - BM_UFlat/2 24679 24672 563802 4.8GB/s jpg [ +0.7%] - BM_UFlat/3 50603 50589 277285 1.7GB/s pdf [ +2.6%] - BM_UFlat/4 452982 452849 30900 862.6MB/s html4 [ -0.2%] - BM_UFlat/5 43860 43848 319554 535.1MB/s cp [ +1.2%] - BM_UFlat/6 21419 21413 653573 496.6MB/s c [ +1.0%] - BM_UFlat/7 6646 6645 2105405 534.1MB/s lsp [ +0.3%] - BM_UFlat/8 1828487 1827886 7658 537.3MB/s xls [ +2.6%] - BM_UFlat/9 391824 391714 35708 370.3MB/s txt1 [ +2.2%] - BM_UFlat/10 334913 334816 41885 356.6MB/s txt2 [ +1.7%] - BM_UFlat/11 1042062 1041674 10000 390.7MB/s txt3 [ +1.1%] - BM_UFlat/12 1398902 1398456 10000 328.6MB/s txt4 [ +1.7%] - BM_UFlat/13 545706 545530 25669 897.2MB/s bin [ -0.4%] - BM_UFlat/14 71512 71505 196035 510.0MB/s sum [ +1.4%] - BM_UFlat/15 8422 8421 1665036 478.7MB/s man [ +2.6%] - BM_UFlat/16 112053 112048 100000 1009.3MB/s pb [ -0.4%] - BM_UFlat/17 416723 416713 33612 421.8MB/s gaviota [ -2.0%] - -R=sanjay - ------------------------------------------------------------------------- -r52 | snappy.mirrorbot@gmail.com | 2011-11-08 15:46:39 +0100 (Tue, 08 Nov 2011) | 5 lines - -Fix public issue #53: Update the README to the API we actually open-sourced -with. - -R=sanjay - ------------------------------------------------------------------------- -r51 | snappy.mirrorbot@gmail.com | 2011-10-05 14:27:12 +0200 (Wed, 05 Oct 2011) | 5 lines - -In the format description, use a clearer example to emphasize that varints are -stored in little-endian. Patch from Christian von Roques. - -R=csilvers - ------------------------------------------------------------------------- -r50 | snappy.mirrorbot@gmail.com | 2011-09-15 21:34:06 +0200 (Thu, 15 Sep 2011) | 4 lines - -Release Snappy 1.0.4. - -R=sanjay - ------------------------------------------------------------------------- -r49 | snappy.mirrorbot@gmail.com | 2011-09-15 11:50:05 +0200 (Thu, 15 Sep 2011) | 5 lines - -Fix public issue #50: Include generic byteswap macros. -Also include Solaris 10 and FreeBSD versions. - -R=csilvers - ------------------------------------------------------------------------- -r48 | snappy.mirrorbot@gmail.com | 2011-08-10 20:57:27 +0200 (Wed, 10 Aug 2011) | 5 lines - -Partially fix public issue 50: Remove an extra comma from the end of some -enum declarations, as it seems the Sun compiler does not like it. - -Based on patch by Travis Vitek. - ------------------------------------------------------------------------- -r47 | snappy.mirrorbot@gmail.com | 2011-08-10 20:44:16 +0200 (Wed, 10 Aug 2011) | 4 lines - -Use the right #ifdef test for sys/mman.h. - -Based on patch by Travis Vitek. - ------------------------------------------------------------------------- -r46 | snappy.mirrorbot@gmail.com | 2011-08-10 03:22:09 +0200 (Wed, 10 Aug 2011) | 6 lines - -Fix public issue #47: Small comment cleanups in the unit test. - -Originally based on a patch by Patrick Pelletier. - -R=sanjay - ------------------------------------------------------------------------- -r45 | snappy.mirrorbot@gmail.com | 2011-08-10 03:14:43 +0200 (Wed, 10 Aug 2011) | 8 lines - -Fix public issue #46: Format description said "3-byte offset" -instead of "4-byte offset" for the longest copies. - -Also fix an inconsistency in the heading for section 2.2.3. -Both patches by Patrick Pelletier. - -R=csilvers - ------------------------------------------------------------------------- -r44 | snappy.mirrorbot@gmail.com | 2011-06-28 13:40:25 +0200 (Tue, 28 Jun 2011) | 8 lines - -Fix public issue #44: Make the definition and declaration of CompressFragment -identical, even regarding cv-qualifiers. - -This is required to work around a bug in the Solaris Studio C++ compiler -(it does not properly disregard cv-qualifiers when doing name mangling). - -R=sanjay - ------------------------------------------------------------------------- -r43 | snappy.mirrorbot@gmail.com | 2011-06-04 12:19:05 +0200 (Sat, 04 Jun 2011) | 7 lines - -Correct an inaccuracy in the Snappy format description. -(I stumbled into this when changing the way we decompress literals.) - -R=csilvers - -Revision created by MOE tool push_codebase. - ------------------------------------------------------------------------- -r42 | snappy.mirrorbot@gmail.com | 2011-06-03 22:53:06 +0200 (Fri, 03 Jun 2011) | 50 lines - -Speed up decompression by removing a fast-path attempt. - -Whenever we try to enter a copy fast-path, there is a certain cost in checking -that all the preconditions are in place, but it's normally offset by the fact -that we can usually take the cheaper path. However, in a certain path we've -already established that "avail < literal_length", which usually means that -either the available space is small, or the literal is big. Both will disqualify -us from taking the fast path, and thus we take the hit from the precondition -checking without gaining much from having a fast path. Thus, simply don't try -the fast path in this situation -- we're already on a slow path anyway -(one where we need to refill more data from the reader). - -I'm a bit surprised at how much this gained; it could be that this path is -more common than I thought, or that the simpler structure somehow makes the -compiler happier. I haven't looked at the assembler, but it's a win across -the board on both Core 2, Core i7 and Opteron, at least for the cases we -typically care about. The gains seem to be the largest on Core i7, though. -Results from my Core i7 workstation: - - - Benchmark Time(ns) CPU(ns) Iterations - --------------------------------------------------- - BM_UFlat/0 73337 73091 190996 1.3GB/s html [ +1.7%] - BM_UFlat/1 696379 693501 20173 965.5MB/s urls [ +2.7%] - BM_UFlat/2 9765 9734 1472135 12.1GB/s jpg [ +0.7%] - BM_UFlat/3 29720 29621 472973 3.0GB/s pdf [ +1.8%] - BM_UFlat/4 294636 293834 47782 1.3GB/s html4 [ +2.3%] - BM_UFlat/5 28399 28320 494700 828.5MB/s cp [ +3.5%] - BM_UFlat/6 12795 12760 1000000 833.3MB/s c [ +1.2%] - BM_UFlat/7 3984 3973 3526448 893.2MB/s lsp [ +5.7%] - BM_UFlat/8 991996 989322 14141 992.6MB/s xls [ +3.3%] - BM_UFlat/9 228620 227835 61404 636.6MB/s txt1 [ +4.0%] - BM_UFlat/10 197114 196494 72165 607.5MB/s txt2 [ +3.5%] - BM_UFlat/11 605240 603437 23217 674.4MB/s txt3 [ +3.7%] - BM_UFlat/12 804157 802016 17456 573.0MB/s txt4 [ +3.9%] - BM_UFlat/13 347860 346998 40346 1.4GB/s bin [ +1.2%] - BM_UFlat/14 44684 44559 315315 818.4MB/s sum [ +2.3%] - BM_UFlat/15 5120 5106 2739726 789.4MB/s man [ +3.3%] - BM_UFlat/16 76591 76355 183486 1.4GB/s pb [ +2.8%] - BM_UFlat/17 238564 237828 58824 739.1MB/s gaviota [ +1.6%] - BM_UValidate/0 42194 42060 333333 2.3GB/s html [ -0.1%] - BM_UValidate/1 433182 432005 32407 1.5GB/s urls [ -0.1%] - BM_UValidate/2 197 196 71428571 603.3GB/s jpg [ +0.5%] - BM_UValidate/3 14494 14462 972222 6.1GB/s pdf [ +0.5%] - BM_UValidate/4 168444 167836 83832 2.3GB/s html4 [ +0.1%] - -R=jeff - -Revision created by MOE tool push_codebase. - ------------------------------------------------------------------------- -r41 | snappy.mirrorbot@gmail.com | 2011-06-03 22:47:14 +0200 (Fri, 03 Jun 2011) | 43 lines - -Speed up decompression by not needing a lookup table for literal items. - -Looking up into and decoding the values from char_table has long shown up as a -hotspot in the decompressor. While it turns out that it's hard to make a more -efficient decoder for the copy ops, the literals are simple enough that we can -decode them without needing a table lookup. (This means that 1/4 of the table -is now unused, although that in itself doesn't buy us anything.) - -The gains are small, but definitely present; some tests win as much as 10%, -but 1-4% is more typical. These results are from Core i7, in 64-bit mode; -Core 2 and Opteron show similar results. (I've run with more iterations -than unusual to make sure the smaller gains don't drown entirely in noise.) - - Benchmark Time(ns) CPU(ns) Iterations - --------------------------------------------------- - BM_UFlat/0 74665 74428 182055 1.3GB/s html [ +3.1%] - BM_UFlat/1 714106 711997 19663 940.4MB/s urls [ +4.4%] - BM_UFlat/2 9820 9789 1427115 12.1GB/s jpg [ -1.2%] - BM_UFlat/3 30461 30380 465116 2.9GB/s pdf [ +0.8%] - BM_UFlat/4 301445 300568 46512 1.3GB/s html4 [ +2.2%] - BM_UFlat/5 29338 29263 479452 801.8MB/s cp [ +1.6%] - BM_UFlat/6 13004 12970 1000000 819.9MB/s c [ +2.1%] - BM_UFlat/7 4180 4168 3349282 851.4MB/s lsp [ +1.3%] - BM_UFlat/8 1026149 1024000 10000 959.0MB/s xls [+10.7%] - BM_UFlat/9 237441 236830 59072 612.4MB/s txt1 [ +0.3%] - BM_UFlat/10 203966 203298 69307 587.2MB/s txt2 [ +0.8%] - BM_UFlat/11 627230 625000 22400 651.2MB/s txt3 [ +0.7%] - BM_UFlat/12 836188 833979 16787 551.0MB/s txt4 [ +1.3%] - BM_UFlat/13 351904 350750 39886 1.4GB/s bin [ +3.8%] - BM_UFlat/14 45685 45562 308370 800.4MB/s sum [ +5.9%] - BM_UFlat/15 5286 5270 2656546 764.9MB/s man [ +1.5%] - BM_UFlat/16 78774 78544 178117 1.4GB/s pb [ +4.3%] - BM_UFlat/17 242270 241345 58091 728.3MB/s gaviota [ +1.2%] - BM_UValidate/0 42149 42000 333333 2.3GB/s html [ -3.0%] - BM_UValidate/1 432741 431303 32483 1.5GB/s urls [ +7.8%] - BM_UValidate/2 198 197 71428571 600.7GB/s jpg [+16.8%] - BM_UValidate/3 14560 14521 965517 6.1GB/s pdf [ -4.1%] - BM_UValidate/4 169065 168671 83832 2.3GB/s html4 [ -2.9%] - -R=jeff - -Revision created by MOE tool push_codebase. - ------------------------------------------------------------------------- -r40 | snappy.mirrorbot@gmail.com | 2011-06-03 00:57:41 +0200 (Fri, 03 Jun 2011) | 2 lines - -Release Snappy 1.0.3. - ------------------------------------------------------------------------- -r39 | snappy.mirrorbot@gmail.com | 2011-06-02 20:06:54 +0200 (Thu, 02 Jun 2011) | 11 lines - -Remove an unneeded goto in the decompressor; it turns out that the -state of ip_ after decompression (or attempted decompresion) is -completely irrelevant, so we don't need the trailer. - -Performance is, as expected, mostly flat -- there's a curious ~3-5% -loss in the "lsp" test, but that test case is so short it is hard to say -anything definitive about why (most likely, it's some sort of -unrelated effect). - -R=jeff - ------------------------------------------------------------------------- -r38 | snappy.mirrorbot@gmail.com | 2011-06-02 19:59:40 +0200 (Thu, 02 Jun 2011) | 52 lines - -Speed up decompression by caching ip_. - -It is seemingly hard for the compiler to understand that ip_, the current input -pointer into the compressed data stream, can not alias on anything else, and -thus using it directly will incur memory traffic as it cannot be kept in a -register. The code already knew about this and cached it into a local -variable, but since Step() only decoded one tag, it had to move ip_ back into -place between every tag. This seems to have cost us a significant amount of -performance, so changing Step() into a function that decodes as much as it can -before it saves ip_ back and returns. (Note that Step() was already inlined, -so it is not the manual inlining that buys the performance here.) - -The wins are about 3-6% for Core 2, 6-13% on Core i7 and 5-12% on Opteron -(for plain array-to-array decompression, in 64-bit opt mode). - -There is a tiny difference in the behavior here; if an invalid literal is -encountered (ie., the writer refuses the Append() operation), ip_ will now -point to the byte past the tag byte, instead of where the literal was -originally thought to end. However, we don't use ip_ for anything after -DecompressAllTags() has returned, so this should not change external behavior -in any way. - -Microbenchmark results for Core i7, 64-bit (Opteron results are similar): - -Benchmark Time(ns) CPU(ns) Iterations ---------------------------------------------------- -BM_UFlat/0 79134 79110 8835 1.2GB/s html [ +6.2%] -BM_UFlat/1 786126 786096 891 851.8MB/s urls [+10.0%] -BM_UFlat/2 9948 9948 69125 11.9GB/s jpg [ -1.3%] -BM_UFlat/3 31999 31998 21898 2.7GB/s pdf [ +6.5%] -BM_UFlat/4 318909 318829 2204 1.2GB/s html4 [ +6.5%] -BM_UFlat/5 31384 31390 22363 747.5MB/s cp [ +9.2%] -BM_UFlat/6 14037 14034 49858 757.7MB/s c [+10.6%] -BM_UFlat/7 4612 4612 151395 769.5MB/s lsp [ +9.5%] -BM_UFlat/8 1203174 1203007 582 816.3MB/s xls [+19.3%] -BM_UFlat/9 253869 253955 2757 571.1MB/s txt1 [+11.4%] -BM_UFlat/10 219292 219290 3194 544.4MB/s txt2 [+12.1%] -BM_UFlat/11 672135 672131 1000 605.5MB/s txt3 [+11.2%] -BM_UFlat/12 902512 902492 776 509.2MB/s txt4 [+12.5%] -BM_UFlat/13 372110 371998 1881 1.3GB/s bin [ +5.8%] -BM_UFlat/14 50407 50407 10000 723.5MB/s sum [+13.5%] -BM_UFlat/15 5699 5701 100000 707.2MB/s man [+12.4%] -BM_UFlat/16 83448 83424 8383 1.3GB/s pb [ +5.7%] -BM_UFlat/17 256958 256963 2723 684.1MB/s gaviota [ +7.9%] -BM_UValidate/0 42795 42796 16351 2.2GB/s html [+25.8%] -BM_UValidate/1 490672 490622 1427 1.3GB/s urls [+22.7%] -BM_UValidate/2 237 237 2950297 499.0GB/s jpg [+24.9%] -BM_UValidate/3 14610 14611 47901 6.0GB/s pdf [+26.8%] -BM_UValidate/4 171973 171990 4071 2.2GB/s html4 [+25.7%] - - - ------------------------------------------------------------------------- -r37 | snappy.mirrorbot@gmail.com | 2011-05-17 10:48:25 +0200 (Tue, 17 May 2011) | 10 lines - - -Fix the numbering of the headlines in the Snappy format description. - -R=csilvers -DELTA=4 (0 added, 0 deleted, 4 changed) - - -Revision created by MOE tool push_codebase. -MOE_MIGRATION=1906 - ------------------------------------------------------------------------- -r36 | snappy.mirrorbot@gmail.com | 2011-05-16 10:59:18 +0200 (Mon, 16 May 2011) | 12 lines - - -Fix public issue #32: Add compressed format documentation for Snappy. -This text is new, but an earlier version from Zeev Tarantov was used -as reference. - -R=csilvers -DELTA=112 (111 added, 0 deleted, 1 changed) - - -Revision created by MOE tool push_codebase. -MOE_MIGRATION=1867 - ------------------------------------------------------------------------- -r35 | snappy.mirrorbot@gmail.com | 2011-05-09 23:29:02 +0200 (Mon, 09 May 2011) | 12 lines - - -Fix public issue #39: Pick out the median runs based on CPU time, -not real time. Also, use nth_element instead of sort, since we -only need one element. - -R=csilvers -DELTA=5 (3 added, 0 deleted, 2 changed) - - -Revision created by MOE tool push_codebase. -MOE_MIGRATION=1799 - ------------------------------------------------------------------------- -r34 | snappy.mirrorbot@gmail.com | 2011-05-09 23:28:45 +0200 (Mon, 09 May 2011) | 19 lines - - -Fix public issue #38: Make the microbenchmark framework handle -properly cases where gettimeofday() can stand return the same -result twice (as sometimes on GNU/Hurd) or go backwards -(as when the user adjusts the clock). We avoid a division-by-zero, -and put a lower bound on the number of iterations -- the same -amount as we use to calibrate. - -We should probably use CLOCK_MONOTONIC for platforms that support -it, to be robust against clock adjustments; we already use Windows' -monotonic timers. However, that's for a later changelist. - -R=csilvers -DELTA=7 (5 added, 0 deleted, 2 changed) - - -Revision created by MOE tool push_codebase. -MOE_MIGRATION=1798 - ------------------------------------------------------------------------- -r33 | snappy.mirrorbot@gmail.com | 2011-05-04 01:22:52 +0200 (Wed, 04 May 2011) | 11 lines - - -Fix public issue #37: Only link snappy_unittest against -lz and other autodetected -libraries, not libsnappy.so (which doesn't need any such dependency). - -R=csilvers -DELTA=20 (14 added, 0 deleted, 6 changed) - - -Revision created by MOE tool push_codebase. -MOE_MIGRATION=1710 - ------------------------------------------------------------------------- -r32 | snappy.mirrorbot@gmail.com | 2011-05-04 01:22:33 +0200 (Wed, 04 May 2011) | 11 lines - - -Release Snappy 1.0.2, to get the license change and various other fixes into -a release. - -R=csilvers -DELTA=239 (236 added, 0 deleted, 3 changed) - - -Revision created by MOE tool push_codebase. -MOE_MIGRATION=1709 - ------------------------------------------------------------------------- -r31 | snappy.mirrorbot@gmail.com | 2011-04-26 14:34:55 +0200 (Tue, 26 Apr 2011) | 15 lines - - -Fix public issue #30: Stop using gettimeofday() altogether on Win32, -as MSVC doesn't include it. Replace with QueryPerformanceCounter(), -which is monotonic and probably reasonably high-resolution. -(Some machines have traditionally had bugs in QPC, but they should -be relatively rare these days, and there's really no much better -alternative that I know of.) - -R=csilvers -DELTA=74 (55 added, 19 deleted, 0 changed) - - -Revision created by MOE tool push_codebase. -MOE_MIGRATION=1556 - ------------------------------------------------------------------------- -r30 | snappy.mirrorbot@gmail.com | 2011-04-26 14:34:37 +0200 (Tue, 26 Apr 2011) | 11 lines - - -Fix public issue #31: Don't reset PATH in autogen.sh; instead, do the trickery -we need for our own build system internally. - -R=csilvers -DELTA=16 (13 added, 1 deleted, 2 changed) - - -Revision created by MOE tool push_codebase. -MOE_MIGRATION=1555 - ------------------------------------------------------------------------- -r29 | snappy.mirrorbot@gmail.com | 2011-04-16 00:55:56 +0200 (Sat, 16 Apr 2011) | 12 lines - - -When including , define WIN32_LEAN_AND_MEAN first, -so we won't pull in macro definitions of things like min() and max(), -which can conflict with . - -R=csilvers -DELTA=1 (1 added, 0 deleted, 0 changed) - - -Revision created by MOE tool push_codebase. -MOE_MIGRATION=1485 - ------------------------------------------------------------------------- -r28 | snappy.mirrorbot@gmail.com | 2011-04-11 11:07:01 +0200 (Mon, 11 Apr 2011) | 15 lines - - -Fix public issue #29: Write CPU timing code for Windows, based on GetProcessTimes() -instead of getursage(). - -I thought I'd already committed this patch, so that the 1.0.1 release already -would have a Windows-compatible snappy_unittest, but I'd seemingly deleted it -instead, so this is a reconstruction. - -R=csilvers -DELTA=43 (39 added, 3 deleted, 1 changed) - - -Revision created by MOE tool push_codebase. -MOE_MIGRATION=1295 - ------------------------------------------------------------------------- -r27 | snappy.mirrorbot@gmail.com | 2011-04-08 11:51:53 +0200 (Fri, 08 Apr 2011) | 22 lines - - -Include C bindings of Snappy, contributed by Martin Gieseking. - -I've made a few changes since Martin's version; mostly style nits, but also -a semantic change -- most functions that return bool in the C++ version now -return an enum, to better match typical C (and zlib) semantics. - -I've kept the copyright notice, since Martin is obviously the author here; -he has signed the contributor license agreement, though, so this should not -hinder Google's use in the future. - -We'll need to update the libtool version number to match the added interface, -but as of http://www.gnu.org/software/libtool/manual/html_node/Updating-version-info.html -I'm going to wait until public release. - -R=csilvers -DELTA=238 (233 added, 0 deleted, 5 changed) - - -Revision created by MOE tool push_codebase. -MOE_MIGRATION=1294 - ------------------------------------------------------------------------- -r26 | snappy.mirrorbot@gmail.com | 2011-04-07 18:36:43 +0200 (Thu, 07 Apr 2011) | 13 lines - - -Replace geo.protodata with a newer version. - -The data compresses/decompresses slightly faster than the old data, and has -similar density. - -R=lookingbill -DELTA=1 (0 added, 0 deleted, 1 changed) - - -Revision created by MOE tool push_codebase. -MOE_MIGRATION=1288 - ------------------------------------------------------------------------- -r25 | snappy.mirrorbot@gmail.com | 2011-03-30 22:27:53 +0200 (Wed, 30 Mar 2011) | 12 lines - - -Fix public issue #27: Add HAVE_CONFIG_H tests around the config.h -inclusion in snappy-stubs-internal.h, which eases compiling outside the -automake/autoconf framework. - -R=csilvers -DELTA=5 (4 added, 1 deleted, 0 changed) - - -Revision created by MOE tool push_codebase. -MOE_MIGRATION=1152 - ------------------------------------------------------------------------- -r24 | snappy.mirrorbot@gmail.com | 2011-03-30 22:27:39 +0200 (Wed, 30 Mar 2011) | 13 lines - - -Fix public issue #26: Take memory allocation and reallocation entirely out of the -Measure() loop. This gives all algorithms a small speed boost, except Snappy which -already didn't do reallocation (so the measurements were slightly biased in its -favor). - -R=csilvers -DELTA=92 (69 added, 9 deleted, 14 changed) - - -Revision created by MOE tool push_codebase. -MOE_MIGRATION=1151 - ------------------------------------------------------------------------- -r23 | snappy.mirrorbot@gmail.com | 2011-03-30 22:25:09 +0200 (Wed, 30 Mar 2011) | 18 lines - - -Renamed "namespace zippy" to "namespace snappy" to reduce -the differences from the opensource code. Will make it easier -in the future to mix-and-match third-party code that uses -snappy with google code. - -Currently, csearch shows that the only external user of -"namespace zippy" is some bigtable code that accesses -a TEST variable, which is temporarily kept in the zippy -namespace. - -R=sesse -DELTA=123 (18 added, 3 deleted, 102 changed) - - -Revision created by MOE tool push_codebase. -MOE_MIGRATION=1150 - ------------------------------------------------------------------------- -r22 | snappy.mirrorbot@gmail.com | 2011-03-29 00:17:04 +0200 (Tue, 29 Mar 2011) | 11 lines - - -Put back the final few lines of what was truncated during the -license header change. - -R=csilvers -DELTA=5 (4 added, 0 deleted, 1 changed) - - -Revision created by MOE tool push_codebase. -MOE_MIGRATION=1094 - ------------------------------------------------------------------------- -r21 | snappy.mirrorbot@gmail.com | 2011-03-26 03:34:34 +0100 (Sat, 26 Mar 2011) | 20 lines - - -Change on 2011-03-25 19:18:00-07:00 by sesse - - Replace the Apache 2.0 license header by the BSD-type license header; - somehow a lot of the files were missed in the last round. - - R=dannyb,csilvers - DELTA=147 (74 added, 2 deleted, 71 changed) - -Change on 2011-03-25 19:25:07-07:00 by sesse - - Unbreak the build; the relicensing removed a bit too much (only comments - were intended, but I also accidentially removed some of the top lines of - the actual source). - - - -Revision created by MOE tool push_codebase. -MOE_MIGRATION=1072 - ------------------------------------------------------------------------- -r20 | snappy.mirrorbot@gmail.com | 2011-03-25 17:14:41 +0100 (Fri, 25 Mar 2011) | 10 lines - - -Change Snappy from the Apache 2.0 to a BSD-type license. - -R=dannyb -DELTA=328 (80 added, 184 deleted, 64 changed) - - -Revision created by MOE tool push_codebase. -MOE_MIGRATION=1061 - ------------------------------------------------------------------------- -r19 | snappy.mirrorbot@gmail.com | 2011-03-25 01:39:01 +0100 (Fri, 25 Mar 2011) | 11 lines - - -Release Snappy 1.0.1, to soup up all the various small changes -that have been made since release. - -R=csilvers -DELTA=266 (260 added, 0 deleted, 6 changed) - - -Revision created by MOE tool push_codebase. -MOE_MIGRATION=1057 - ------------------------------------------------------------------------- -r18 | snappy.mirrorbot@gmail.com | 2011-03-24 20:15:54 +0100 (Thu, 24 Mar 2011) | 11 lines - - -Fix a microbenchmark crash on mingw32; seemingly %lld is not universally -supported on Windows, and %I64d is recommended instead. - -R=csilvers -DELTA=6 (5 added, 0 deleted, 1 changed) - - -Revision created by MOE tool push_codebase. -MOE_MIGRATION=1034 - ------------------------------------------------------------------------- -r17 | snappy.mirrorbot@gmail.com | 2011-03-24 20:15:27 +0100 (Thu, 24 Mar 2011) | 13 lines - - -Fix public issue #19: Fix unit test when Google Test is installed but the -gflags package isn't (Google Test is not properly initialized). - -Patch by Martin Gieseking. - -R=csilvers -DELTA=2 (1 added, 0 deleted, 1 changed) - - -Revision created by MOE tool push_codebase. -MOE_MIGRATION=1033 - ------------------------------------------------------------------------- -r16 | snappy.mirrorbot@gmail.com | 2011-03-24 20:13:57 +0100 (Thu, 24 Mar 2011) | 15 lines - - -Make the unit test work on systems without mmap(). This is required for, -among others, Windows support. For Windows in specific, we could have used -CreateFileMapping/MapViewOfFile, but this should at least get us a bit closer -to compiling, and is of course also relevant for embedded systems with no MMU. - -(Part 2/2) - -R=csilvers -DELTA=15 (12 added, 3 deleted, 0 changed) - - -Revision created by MOE tool push_codebase. -MOE_MIGRATION=1032 - ------------------------------------------------------------------------- -r15 | snappy.mirrorbot@gmail.com | 2011-03-24 20:12:27 +0100 (Thu, 24 Mar 2011) | 15 lines - - -Make the unit test work on systems without mmap(). This is required for, -among others, Windows support. For Windows in specific, we could have used -CreateFileMapping/MapViewOfFile, but this should at least get us a bit closer -to compiling, and is of course also relevant for embedded systems with no MMU. - -(Part 1/2) - -R=csilvers -DELTA=9 (8 added, 0 deleted, 1 changed) - - -Revision created by MOE tool push_codebase. -MOE_MIGRATION=1031 - ------------------------------------------------------------------------- -r14 | snappy.mirrorbot@gmail.com | 2011-03-24 00:17:36 +0100 (Thu, 24 Mar 2011) | 14 lines - - -Fix public issue #12: Don't keep autogenerated auto* files in Subversion; -it causes problems with others sending patches etc.. - -We can't get this 100% hermetic anyhow, due to files like lt~obsolete.m4, -so we can just as well go cleanly in the other direction. - -R=csilvers -DELTA=21038 (0 added, 21036 deleted, 2 changed) - - -Revision created by MOE tool push_codebase. -MOE_MIGRATION=1012 - ------------------------------------------------------------------------- -r13 | snappy.mirrorbot@gmail.com | 2011-03-23 18:50:49 +0100 (Wed, 23 Mar 2011) | 11 lines - - -Fix public issue tracker bug #3: Call AC_SUBST([LIBTOOL_DEPS]), or the rule -to rebuild libtool in Makefile.am won't work. - -R=csilvers -DELTA=1 (1 added, 0 deleted, 0 changed) - - -Revision created by MOE tool push_codebase. -MOE_MIGRATION=997 - ------------------------------------------------------------------------- -r12 | snappy.mirrorbot@gmail.com | 2011-03-23 12:16:39 +0100 (Wed, 23 Mar 2011) | 11 lines - - -Fix public issue #10: Don't add GTEST_CPPFLAGS to snappy_unittest_CXXFLAGS; -it's not needed (CPPFLAGS are always included when compiling). - -R=csilvers -DELTA=1 (0 added, 1 deleted, 0 changed) - - -Revision created by MOE tool push_codebase. -MOE_MIGRATION=994 - ------------------------------------------------------------------------- -r11 | snappy.mirrorbot@gmail.com | 2011-03-23 12:16:18 +0100 (Wed, 23 Mar 2011) | 11 lines - - -Fix public issue #9: Add -Wall -Werror to automake flags. -(This concerns automake itself, not the C++ compiler.) - -R=csilvers -DELTA=4 (3 added, 0 deleted, 1 changed) - - -Revision created by MOE tool push_codebase. -MOE_MIGRATION=993 - ------------------------------------------------------------------------- -r10 | snappy.mirrorbot@gmail.com | 2011-03-23 12:13:37 +0100 (Wed, 23 Mar 2011) | 10 lines - - -Fix a typo in the Snappy README file. - -R=csilvers -DELTA=1 (0 added, 0 deleted, 1 changed) - - -Revision created by MOE tool push_codebase. -MOE_MIGRATION=992 - ------------------------------------------------------------------------- -r9 | snappy.mirrorbot@gmail.com | 2011-03-23 12:13:13 +0100 (Wed, 23 Mar 2011) | 11 lines - - -Fix public issue #6: Add a --with-gflags for disabling gflags autodetection -and using a manually given setting (use/don't use) instead. - -R=csilvers -DELTA=16 (13 added, 0 deleted, 3 changed) - - -Revision created by MOE tool push_codebase. -MOE_MIGRATION=991 - ------------------------------------------------------------------------- -r8 | snappy.mirrorbot@gmail.com | 2011-03-23 12:12:44 +0100 (Wed, 23 Mar 2011) | 12 lines - - -Fix public issue #5: Replace the EXTRA_LIBSNAPPY_LDFLAGS setup with something -slightly more standard, that also doesn't leak libtool command-line into -configure.ac. - -R=csilvers -DELTA=7 (0 added, 4 deleted, 3 changed) - - -Revision created by MOE tool push_codebase. -MOE_MIGRATION=990 - ------------------------------------------------------------------------- -r7 | snappy.mirrorbot@gmail.com | 2011-03-23 12:12:22 +0100 (Wed, 23 Mar 2011) | 10 lines - - -Fix public issue #4: Properly quote all macro arguments in configure.ac. - -R=csilvers -DELTA=16 (0 added, 0 deleted, 16 changed) - - -Revision created by MOE tool push_codebase. -MOE_MIGRATION=989 - ------------------------------------------------------------------------- -r6 | snappy.mirrorbot@gmail.com | 2011-03-23 12:11:54 +0100 (Wed, 23 Mar 2011) | 11 lines - - -Fix public issue #7: Don't use internal variables named ac_*, as those belong -to autoconf's namespace. - -R=csilvers -DELTA=6 (0 added, 0 deleted, 6 changed) - - -Revision created by MOE tool push_codebase. -MOE_MIGRATION=988 - ------------------------------------------------------------------------- -r5 | snappy.mirrorbot@gmail.com | 2011-03-23 12:11:09 +0100 (Wed, 23 Mar 2011) | 10 lines - - -Add missing licensing headers to a few files. (Part 2/2.) - -R=csilvers -DELTA=12 (12 added, 0 deleted, 0 changed) - - -Revision created by MOE tool push_codebase. -MOE_MIGRATION=987 - ------------------------------------------------------------------------- -r4 | snappy.mirrorbot@gmail.com | 2011-03-23 12:10:39 +0100 (Wed, 23 Mar 2011) | 10 lines - - -Add mising licensing headers to a few files. (Part 1/2.) - -R=csilvers -DELTA=24 (24 added, 0 deleted, 0 changed) - - -Revision created by MOE tool push_codebase. -MOE_MIGRATION=986 - ------------------------------------------------------------------------- -r3 | snappy.mirrorbot@gmail.com | 2011-03-23 12:10:04 +0100 (Wed, 23 Mar 2011) | 11 lines - - -Use the correct license file for the Apache 2.0 license; -spotted by Florian Weimer. - -R=csilvers -DELTA=202 (174 added, 0 deleted, 28 changed) - - -Revision created by MOE tool push_codebase. -MOE_MIGRATION=985 - ------------------------------------------------------------------------- -r2 | snappy.mirrorbot@gmail.com | 2011-03-18 18:14:15 +0100 (Fri, 18 Mar 2011) | 6 lines - - - - -Revision created by MOE tool push_codebase. -MOE_MIGRATION= - ------------------------------------------------------------------------- -r1 | sesse@google.com | 2011-03-18 18:13:52 +0100 (Fri, 18 Mar 2011) | 2 lines - -Create trunk directory. - ------------------------------------------------------------------------- diff --git a/deps/snappy/snappy-1.1.1/Makefile.in b/deps/snappy/snappy-1.1.1/Makefile.in deleted file mode 100644 index 6351bd90..00000000 --- a/deps/snappy/snappy-1.1.1/Makefile.in +++ /dev/null @@ -1,957 +0,0 @@ -# Makefile.in generated by automake 1.11.3 from Makefile.am. -# @configure_input@ - -# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software -# Foundation, Inc. -# This Makefile.in is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY, to the extent permitted by law; without -# even the implied warranty of MERCHANTABILITY or FITNESS FOR A -# PARTICULAR PURPOSE. - -@SET_MAKE@ - - - - -VPATH = @srcdir@ -pkgdatadir = $(datadir)/@PACKAGE@ -pkgincludedir = $(includedir)/@PACKAGE@ -pkglibdir = $(libdir)/@PACKAGE@ -pkglibexecdir = $(libexecdir)/@PACKAGE@ -am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -install_sh_DATA = $(install_sh) -c -m 644 -install_sh_PROGRAM = $(install_sh) -c -install_sh_SCRIPT = $(install_sh) -c -INSTALL_HEADER = $(INSTALL_DATA) -transform = $(program_transform_name) -NORMAL_INSTALL = : -PRE_INSTALL = : -POST_INSTALL = : -NORMAL_UNINSTALL = : -PRE_UNINSTALL = : -POST_UNINSTALL = : -build_triplet = @build@ -host_triplet = @host@ -TESTS = snappy_unittest$(EXEEXT) -noinst_PROGRAMS = $(am__EXEEXT_1) -subdir = . -DIST_COMMON = README $(am__configure_deps) $(dist_doc_DATA) \ - $(include_HEADERS) $(noinst_HEADERS) $(srcdir)/Makefile.am \ - $(srcdir)/Makefile.in $(srcdir)/config.h.in \ - $(srcdir)/snappy-stubs-public.h.in $(top_srcdir)/configure \ - AUTHORS COPYING ChangeLog INSTALL NEWS config.guess config.sub \ - depcomp install-sh ltmain.sh missing -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/m4/gtest.m4 \ - $(top_srcdir)/configure.ac -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ - configure.lineno config.status.lineno -mkinstalldirs = $(install_sh) -d -CONFIG_HEADER = config.h -CONFIG_CLEAN_FILES = snappy-stubs-public.h -CONFIG_CLEAN_VPATH_FILES = -am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; -am__vpath_adj = case $$p in \ - $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ - *) f=$$p;; \ - esac; -am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; -am__install_max = 40 -am__nobase_strip_setup = \ - srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` -am__nobase_strip = \ - for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" -am__nobase_list = $(am__nobase_strip_setup); \ - for p in $$list; do echo "$$p $$p"; done | \ - sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ - $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ - if (++n[$$2] == $(am__install_max)) \ - { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ - END { for (dir in files) print dir, files[dir] }' -am__base_list = \ - sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ - sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' -am__uninstall_files_from_dir = { \ - test -z "$$files" \ - || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ - || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ - $(am__cd) "$$dir" && rm -f $$files; }; \ - } -am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(docdir)" \ - "$(DESTDIR)$(includedir)" -LTLIBRARIES = $(lib_LTLIBRARIES) -libsnappy_la_LIBADD = -am_libsnappy_la_OBJECTS = snappy.lo snappy-sinksource.lo \ - snappy-stubs-internal.lo snappy-c.lo -libsnappy_la_OBJECTS = $(am_libsnappy_la_OBJECTS) -libsnappy_la_LINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) \ - $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ - $(CXXFLAGS) $(libsnappy_la_LDFLAGS) $(LDFLAGS) -o $@ -am__EXEEXT_1 = snappy_unittest$(EXEEXT) -PROGRAMS = $(noinst_PROGRAMS) -am_snappy_unittest_OBJECTS = \ - snappy_unittest-snappy_unittest.$(OBJEXT) \ - snappy_unittest-snappy-test.$(OBJEXT) -snappy_unittest_OBJECTS = $(am_snappy_unittest_OBJECTS) -am__DEPENDENCIES_1 = -snappy_unittest_DEPENDENCIES = libsnappy.la $(am__DEPENDENCIES_1) \ - $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) -snappy_unittest_LINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) \ - $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ - $(CXXFLAGS) $(snappy_unittest_LDFLAGS) $(LDFLAGS) -o $@ -DEFAULT_INCLUDES = -I.@am__isrc@ -depcomp = $(SHELL) $(top_srcdir)/depcomp -am__depfiles_maybe = depfiles -am__mv = mv -f -CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ - $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ - --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ - $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -CXXLD = $(CXX) -CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ - --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \ - $(LDFLAGS) -o $@ -SOURCES = $(libsnappy_la_SOURCES) $(snappy_unittest_SOURCES) -DIST_SOURCES = $(libsnappy_la_SOURCES) $(snappy_unittest_SOURCES) -DATA = $(dist_doc_DATA) -HEADERS = $(include_HEADERS) $(noinst_HEADERS) -ETAGS = etags -CTAGS = ctags -am__tty_colors = \ -red=; grn=; lgn=; blu=; std= -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -distdir = $(PACKAGE)-$(VERSION) -top_distdir = $(distdir) -am__remove_distdir = \ - if test -d "$(distdir)"; then \ - find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ - && rm -rf "$(distdir)" \ - || { sleep 5 && rm -rf "$(distdir)"; }; \ - else :; fi -DIST_ARCHIVES = $(distdir).tar.gz -GZIP_ENV = --best -distuninstallcheck_listfiles = find . -type f -print -am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \ - | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$' -distcleancheck_listfiles = find . -type f -print -ACLOCAL = @ACLOCAL@ -AMTAR = @AMTAR@ -AR = @AR@ -AUTOCONF = @AUTOCONF@ -AUTOHEADER = @AUTOHEADER@ -AUTOMAKE = @AUTOMAKE@ -AWK = @AWK@ -CC = @CC@ -CCDEPMODE = @CCDEPMODE@ -CFLAGS = @CFLAGS@ -CPP = @CPP@ -CPPFLAGS = @CPPFLAGS@ -CXX = @CXX@ -CXXCPP = @CXXCPP@ -CXXDEPMODE = @CXXDEPMODE@ -CXXFLAGS = @CXXFLAGS@ -CYGPATH_W = @CYGPATH_W@ -DEFS = @DEFS@ -DEPDIR = @DEPDIR@ -DLLTOOL = @DLLTOOL@ -DSYMUTIL = @DSYMUTIL@ -DUMPBIN = @DUMPBIN@ -ECHO_C = @ECHO_C@ -ECHO_N = @ECHO_N@ -ECHO_T = @ECHO_T@ -EGREP = @EGREP@ -EXEEXT = @EXEEXT@ -FGREP = @FGREP@ -GREP = @GREP@ -GTEST_CONFIG = @GTEST_CONFIG@ -GTEST_CPPFLAGS = @GTEST_CPPFLAGS@ -GTEST_CXXFLAGS = @GTEST_CXXFLAGS@ -GTEST_LDFLAGS = @GTEST_LDFLAGS@ -GTEST_LIBS = @GTEST_LIBS@ -GTEST_VERSION = @GTEST_VERSION@ -HAVE_GTEST = @HAVE_GTEST@ -INSTALL = @INSTALL@ -INSTALL_DATA = @INSTALL_DATA@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_SCRIPT = @INSTALL_SCRIPT@ -INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ -LD = @LD@ -LDFLAGS = @LDFLAGS@ -LIBOBJS = @LIBOBJS@ -LIBS = @LIBS@ -LIBTOOL = @LIBTOOL@ -LIBTOOL_DEPS = @LIBTOOL_DEPS@ -LIPO = @LIPO@ -LN_S = @LN_S@ -LTLIBOBJS = @LTLIBOBJS@ -MAKEINFO = @MAKEINFO@ -MANIFEST_TOOL = @MANIFEST_TOOL@ -MKDIR_P = @MKDIR_P@ -NM = @NM@ -NMEDIT = @NMEDIT@ -OBJDUMP = @OBJDUMP@ -OBJEXT = @OBJEXT@ -OTOOL = @OTOOL@ -OTOOL64 = @OTOOL64@ -PACKAGE = @PACKAGE@ -PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ -PACKAGE_NAME = @PACKAGE_NAME@ -PACKAGE_STRING = @PACKAGE_STRING@ -PACKAGE_TARNAME = @PACKAGE_TARNAME@ -PACKAGE_URL = @PACKAGE_URL@ -PACKAGE_VERSION = @PACKAGE_VERSION@ -PATH_SEPARATOR = @PATH_SEPARATOR@ -PKG_CONFIG = @PKG_CONFIG@ -PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ -PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ -RANLIB = @RANLIB@ -SED = @SED@ -SET_MAKE = @SET_MAKE@ -SHELL = @SHELL@ -SNAPPY_LTVERSION = @SNAPPY_LTVERSION@ -SNAPPY_MAJOR = @SNAPPY_MAJOR@ -SNAPPY_MINOR = @SNAPPY_MINOR@ -SNAPPY_PATCHLEVEL = @SNAPPY_PATCHLEVEL@ -STRIP = @STRIP@ -UNITTEST_LIBS = @UNITTEST_LIBS@ -VERSION = @VERSION@ -abs_builddir = @abs_builddir@ -abs_srcdir = @abs_srcdir@ -abs_top_builddir = @abs_top_builddir@ -abs_top_srcdir = @abs_top_srcdir@ -ac_ct_AR = @ac_ct_AR@ -ac_ct_CC = @ac_ct_CC@ -ac_ct_CXX = @ac_ct_CXX@ -ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ -ac_cv_have_stddef_h = @ac_cv_have_stddef_h@ -ac_cv_have_stdint_h = @ac_cv_have_stdint_h@ -ac_cv_have_sys_uio_h = @ac_cv_have_sys_uio_h@ -am__include = @am__include@ -am__leading_dot = @am__leading_dot@ -am__quote = @am__quote@ -am__tar = @am__tar@ -am__untar = @am__untar@ -bindir = @bindir@ -build = @build@ -build_alias = @build_alias@ -build_cpu = @build_cpu@ -build_os = @build_os@ -build_vendor = @build_vendor@ -builddir = @builddir@ -datadir = @datadir@ -datarootdir = @datarootdir@ -docdir = @docdir@ -dvidir = @dvidir@ -exec_prefix = @exec_prefix@ -gflags_CFLAGS = @gflags_CFLAGS@ -gflags_LIBS = @gflags_LIBS@ -host = @host@ -host_alias = @host_alias@ -host_cpu = @host_cpu@ -host_os = @host_os@ -host_vendor = @host_vendor@ -htmldir = @htmldir@ -includedir = @includedir@ -infodir = @infodir@ -install_sh = @install_sh@ -libdir = @libdir@ -libexecdir = @libexecdir@ -localedir = @localedir@ -localstatedir = @localstatedir@ -mandir = @mandir@ -mkdir_p = @mkdir_p@ -oldincludedir = @oldincludedir@ -pdfdir = @pdfdir@ -prefix = @prefix@ -program_transform_name = @program_transform_name@ -psdir = @psdir@ -sbindir = @sbindir@ -sharedstatedir = @sharedstatedir@ -srcdir = @srcdir@ -sysconfdir = @sysconfdir@ -target_alias = @target_alias@ -top_build_prefix = @top_build_prefix@ -top_builddir = @top_builddir@ -top_srcdir = @top_srcdir@ -ACLOCAL_AMFLAGS = -I m4 - -# Library. -lib_LTLIBRARIES = libsnappy.la -libsnappy_la_SOURCES = snappy.cc snappy-sinksource.cc snappy-stubs-internal.cc snappy-c.cc -libsnappy_la_LDFLAGS = -version-info $(SNAPPY_LTVERSION) -include_HEADERS = snappy.h snappy-sinksource.h snappy-stubs-public.h snappy-c.h -noinst_HEADERS = snappy-internal.h snappy-stubs-internal.h snappy-test.h - -# Unit tests and benchmarks. -snappy_unittest_CPPFLAGS = $(gflags_CFLAGS) $(GTEST_CPPFLAGS) -snappy_unittest_SOURCES = snappy_unittest.cc snappy-test.cc -snappy_unittest_LDFLAGS = $(GTEST_LDFLAGS) -snappy_unittest_LDADD = libsnappy.la $(UNITTEST_LIBS) $(gflags_LIBS) $(GTEST_LIBS) -EXTRA_DIST = autogen.sh testdata/alice29.txt testdata/asyoulik.txt testdata/baddata1.snappy testdata/baddata2.snappy testdata/baddata3.snappy testdata/cp.html testdata/fields.c testdata/geo.protodata testdata/grammar.lsp testdata/house.jpg testdata/html testdata/html_x_4 testdata/kennedy.xls testdata/kppkn.gtb testdata/lcet10.txt testdata/mapreduce-osdi-1.pdf testdata/plrabn12.txt testdata/ptt5 testdata/sum testdata/urls.10K testdata/xargs.1 -dist_doc_DATA = ChangeLog COPYING INSTALL NEWS README format_description.txt framing_format.txt -all: config.h - $(MAKE) $(AM_MAKEFLAGS) all-am - -.SUFFIXES: -.SUFFIXES: .cc .lo .o .obj -am--refresh: Makefile - @: -$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) - @for dep in $?; do \ - case '$(am__configure_deps)' in \ - *$$dep*) \ - echo ' cd $(srcdir) && $(AUTOMAKE) --gnu'; \ - $(am__cd) $(srcdir) && $(AUTOMAKE) --gnu \ - && exit 0; \ - exit 1;; \ - esac; \ - done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile'; \ - $(am__cd) $(top_srcdir) && \ - $(AUTOMAKE) --gnu Makefile -.PRECIOUS: Makefile -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status - @case '$?' in \ - *config.status*) \ - echo ' $(SHELL) ./config.status'; \ - $(SHELL) ./config.status;; \ - *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ - esac; - -$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) - $(SHELL) ./config.status --recheck - -$(top_srcdir)/configure: $(am__configure_deps) - $(am__cd) $(srcdir) && $(AUTOCONF) -$(ACLOCAL_M4): $(am__aclocal_m4_deps) - $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) -$(am__aclocal_m4_deps): - -config.h: stamp-h1 - @if test ! -f $@; then rm -f stamp-h1; else :; fi - @if test ! -f $@; then $(MAKE) $(AM_MAKEFLAGS) stamp-h1; else :; fi - -stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status - @rm -f stamp-h1 - cd $(top_builddir) && $(SHELL) ./config.status config.h -$(srcdir)/config.h.in: $(am__configure_deps) - ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) - rm -f stamp-h1 - touch $@ - -distclean-hdr: - -rm -f config.h stamp-h1 -snappy-stubs-public.h: $(top_builddir)/config.status $(srcdir)/snappy-stubs-public.h.in - cd $(top_builddir) && $(SHELL) ./config.status $@ -install-libLTLIBRARIES: $(lib_LTLIBRARIES) - @$(NORMAL_INSTALL) - test -z "$(libdir)" || $(MKDIR_P) "$(DESTDIR)$(libdir)" - @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ - list2=; for p in $$list; do \ - if test -f $$p; then \ - list2="$$list2 $$p"; \ - else :; fi; \ - done; \ - test -z "$$list2" || { \ - echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \ - $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \ - } - -uninstall-libLTLIBRARIES: - @$(NORMAL_UNINSTALL) - @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ - for p in $$list; do \ - $(am__strip_dir) \ - echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \ - $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \ - done - -clean-libLTLIBRARIES: - -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) - @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ - dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ - test "$$dir" != "$$p" || dir=.; \ - echo "rm -f \"$${dir}/so_locations\""; \ - rm -f "$${dir}/so_locations"; \ - done -libsnappy.la: $(libsnappy_la_OBJECTS) $(libsnappy_la_DEPENDENCIES) $(EXTRA_libsnappy_la_DEPENDENCIES) - $(libsnappy_la_LINK) -rpath $(libdir) $(libsnappy_la_OBJECTS) $(libsnappy_la_LIBADD) $(LIBS) - -clean-noinstPROGRAMS: - @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \ - echo " rm -f" $$list; \ - rm -f $$list || exit $$?; \ - test -n "$(EXEEXT)" || exit 0; \ - list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ - echo " rm -f" $$list; \ - rm -f $$list -snappy_unittest$(EXEEXT): $(snappy_unittest_OBJECTS) $(snappy_unittest_DEPENDENCIES) $(EXTRA_snappy_unittest_DEPENDENCIES) - @rm -f snappy_unittest$(EXEEXT) - $(snappy_unittest_LINK) $(snappy_unittest_OBJECTS) $(snappy_unittest_LDADD) $(LIBS) - -mostlyclean-compile: - -rm -f *.$(OBJEXT) - -distclean-compile: - -rm -f *.tab.c - -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/snappy-c.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/snappy-sinksource.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/snappy-stubs-internal.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/snappy.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/snappy_unittest-snappy-test.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/snappy_unittest-snappy_unittest.Po@am__quote@ - -.cc.o: -@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< -@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< - -.cc.obj: -@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` -@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` - -.cc.lo: -@am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< -@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< - -snappy_unittest-snappy_unittest.o: snappy_unittest.cc -@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(snappy_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT snappy_unittest-snappy_unittest.o -MD -MP -MF $(DEPDIR)/snappy_unittest-snappy_unittest.Tpo -c -o snappy_unittest-snappy_unittest.o `test -f 'snappy_unittest.cc' || echo '$(srcdir)/'`snappy_unittest.cc -@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/snappy_unittest-snappy_unittest.Tpo $(DEPDIR)/snappy_unittest-snappy_unittest.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='snappy_unittest.cc' object='snappy_unittest-snappy_unittest.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(snappy_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o snappy_unittest-snappy_unittest.o `test -f 'snappy_unittest.cc' || echo '$(srcdir)/'`snappy_unittest.cc - -snappy_unittest-snappy_unittest.obj: snappy_unittest.cc -@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(snappy_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT snappy_unittest-snappy_unittest.obj -MD -MP -MF $(DEPDIR)/snappy_unittest-snappy_unittest.Tpo -c -o snappy_unittest-snappy_unittest.obj `if test -f 'snappy_unittest.cc'; then $(CYGPATH_W) 'snappy_unittest.cc'; else $(CYGPATH_W) '$(srcdir)/snappy_unittest.cc'; fi` -@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/snappy_unittest-snappy_unittest.Tpo $(DEPDIR)/snappy_unittest-snappy_unittest.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='snappy_unittest.cc' object='snappy_unittest-snappy_unittest.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(snappy_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o snappy_unittest-snappy_unittest.obj `if test -f 'snappy_unittest.cc'; then $(CYGPATH_W) 'snappy_unittest.cc'; else $(CYGPATH_W) '$(srcdir)/snappy_unittest.cc'; fi` - -snappy_unittest-snappy-test.o: snappy-test.cc -@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(snappy_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT snappy_unittest-snappy-test.o -MD -MP -MF $(DEPDIR)/snappy_unittest-snappy-test.Tpo -c -o snappy_unittest-snappy-test.o `test -f 'snappy-test.cc' || echo '$(srcdir)/'`snappy-test.cc -@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/snappy_unittest-snappy-test.Tpo $(DEPDIR)/snappy_unittest-snappy-test.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='snappy-test.cc' object='snappy_unittest-snappy-test.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(snappy_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o snappy_unittest-snappy-test.o `test -f 'snappy-test.cc' || echo '$(srcdir)/'`snappy-test.cc - -snappy_unittest-snappy-test.obj: snappy-test.cc -@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(snappy_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT snappy_unittest-snappy-test.obj -MD -MP -MF $(DEPDIR)/snappy_unittest-snappy-test.Tpo -c -o snappy_unittest-snappy-test.obj `if test -f 'snappy-test.cc'; then $(CYGPATH_W) 'snappy-test.cc'; else $(CYGPATH_W) '$(srcdir)/snappy-test.cc'; fi` -@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/snappy_unittest-snappy-test.Tpo $(DEPDIR)/snappy_unittest-snappy-test.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='snappy-test.cc' object='snappy_unittest-snappy-test.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(snappy_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o snappy_unittest-snappy-test.obj `if test -f 'snappy-test.cc'; then $(CYGPATH_W) 'snappy-test.cc'; else $(CYGPATH_W) '$(srcdir)/snappy-test.cc'; fi` - -mostlyclean-libtool: - -rm -f *.lo - -clean-libtool: - -rm -rf .libs _libs - -distclean-libtool: - -rm -f libtool config.lt -install-dist_docDATA: $(dist_doc_DATA) - @$(NORMAL_INSTALL) - test -z "$(docdir)" || $(MKDIR_P) "$(DESTDIR)$(docdir)" - @list='$(dist_doc_DATA)'; test -n "$(docdir)" || list=; \ - for p in $$list; do \ - if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ - echo "$$d$$p"; \ - done | $(am__base_list) | \ - while read files; do \ - echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(docdir)'"; \ - $(INSTALL_DATA) $$files "$(DESTDIR)$(docdir)" || exit $$?; \ - done - -uninstall-dist_docDATA: - @$(NORMAL_UNINSTALL) - @list='$(dist_doc_DATA)'; test -n "$(docdir)" || list=; \ - files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ - dir='$(DESTDIR)$(docdir)'; $(am__uninstall_files_from_dir) -install-includeHEADERS: $(include_HEADERS) - @$(NORMAL_INSTALL) - test -z "$(includedir)" || $(MKDIR_P) "$(DESTDIR)$(includedir)" - @list='$(include_HEADERS)'; test -n "$(includedir)" || list=; \ - for p in $$list; do \ - if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ - echo "$$d$$p"; \ - done | $(am__base_list) | \ - while read files; do \ - echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(includedir)'"; \ - $(INSTALL_HEADER) $$files "$(DESTDIR)$(includedir)" || exit $$?; \ - done - -uninstall-includeHEADERS: - @$(NORMAL_UNINSTALL) - @list='$(include_HEADERS)'; test -n "$(includedir)" || list=; \ - files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ - dir='$(DESTDIR)$(includedir)'; $(am__uninstall_files_from_dir) - -ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in files) print i; }; }'`; \ - mkid -fID $$unique -tags: TAGS - -TAGS: $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - set x; \ - here=`pwd`; \ - list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in files) print i; }; }'`; \ - shift; \ - if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ - test -n "$$unique" || unique=$$empty_fix; \ - if test $$# -gt 0; then \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - "$$@" $$unique; \ - else \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - $$unique; \ - fi; \ - fi -ctags: CTAGS -CTAGS: $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in files) print i; }; }'`; \ - test -z "$(CTAGS_ARGS)$$unique" \ - || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ - $$unique - -GTAGS: - here=`$(am__cd) $(top_builddir) && pwd` \ - && $(am__cd) $(top_srcdir) \ - && gtags -i $(GTAGS_ARGS) "$$here" - -distclean-tags: - -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags - -check-TESTS: $(TESTS) - @failed=0; all=0; xfail=0; xpass=0; skip=0; \ - srcdir=$(srcdir); export srcdir; \ - list=' $(TESTS) '; \ - $(am__tty_colors); \ - if test -n "$$list"; then \ - for tst in $$list; do \ - if test -f ./$$tst; then dir=./; \ - elif test -f $$tst; then dir=; \ - else dir="$(srcdir)/"; fi; \ - if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \ - all=`expr $$all + 1`; \ - case " $(XFAIL_TESTS) " in \ - *[\ \ ]$$tst[\ \ ]*) \ - xpass=`expr $$xpass + 1`; \ - failed=`expr $$failed + 1`; \ - col=$$red; res=XPASS; \ - ;; \ - *) \ - col=$$grn; res=PASS; \ - ;; \ - esac; \ - elif test $$? -ne 77; then \ - all=`expr $$all + 1`; \ - case " $(XFAIL_TESTS) " in \ - *[\ \ ]$$tst[\ \ ]*) \ - xfail=`expr $$xfail + 1`; \ - col=$$lgn; res=XFAIL; \ - ;; \ - *) \ - failed=`expr $$failed + 1`; \ - col=$$red; res=FAIL; \ - ;; \ - esac; \ - else \ - skip=`expr $$skip + 1`; \ - col=$$blu; res=SKIP; \ - fi; \ - echo "$${col}$$res$${std}: $$tst"; \ - done; \ - if test "$$all" -eq 1; then \ - tests="test"; \ - All=""; \ - else \ - tests="tests"; \ - All="All "; \ - fi; \ - if test "$$failed" -eq 0; then \ - if test "$$xfail" -eq 0; then \ - banner="$$All$$all $$tests passed"; \ - else \ - if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \ - banner="$$All$$all $$tests behaved as expected ($$xfail expected $$failures)"; \ - fi; \ - else \ - if test "$$xpass" -eq 0; then \ - banner="$$failed of $$all $$tests failed"; \ - else \ - if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \ - banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \ - fi; \ - fi; \ - dashes="$$banner"; \ - skipped=""; \ - if test "$$skip" -ne 0; then \ - if test "$$skip" -eq 1; then \ - skipped="($$skip test was not run)"; \ - else \ - skipped="($$skip tests were not run)"; \ - fi; \ - test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \ - dashes="$$skipped"; \ - fi; \ - report=""; \ - if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \ - report="Please report to $(PACKAGE_BUGREPORT)"; \ - test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \ - dashes="$$report"; \ - fi; \ - dashes=`echo "$$dashes" | sed s/./=/g`; \ - if test "$$failed" -eq 0; then \ - col="$$grn"; \ - else \ - col="$$red"; \ - fi; \ - echo "$${col}$$dashes$${std}"; \ - echo "$${col}$$banner$${std}"; \ - test -z "$$skipped" || echo "$${col}$$skipped$${std}"; \ - test -z "$$report" || echo "$${col}$$report$${std}"; \ - echo "$${col}$$dashes$${std}"; \ - test "$$failed" -eq 0; \ - else :; fi - -distdir: $(DISTFILES) - $(am__remove_distdir) - test -d "$(distdir)" || mkdir "$(distdir)" - @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - list='$(DISTFILES)'; \ - dist_files=`for file in $$list; do echo $$file; done | \ - sed -e "s|^$$srcdirstrip/||;t" \ - -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ - case $$dist_files in \ - */*) $(MKDIR_P) `echo "$$dist_files" | \ - sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ - sort -u` ;; \ - esac; \ - for file in $$dist_files; do \ - if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - if test -d $$d/$$file; then \ - dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test -d "$(distdir)/$$file"; then \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ - else \ - test -f "$(distdir)/$$file" \ - || cp -p $$d/$$file "$(distdir)/$$file" \ - || exit 1; \ - fi; \ - done - -test -n "$(am__skip_mode_fix)" \ - || find "$(distdir)" -type d ! -perm -755 \ - -exec chmod u+rwx,go+rx {} \; -o \ - ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ - ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ - ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ - || chmod -R a+r "$(distdir)" -dist-gzip: distdir - tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz - $(am__remove_distdir) - -dist-bzip2: distdir - tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2 - $(am__remove_distdir) - -dist-lzip: distdir - tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz - $(am__remove_distdir) - -dist-lzma: distdir - tardir=$(distdir) && $(am__tar) | lzma -9 -c >$(distdir).tar.lzma - $(am__remove_distdir) - -dist-xz: distdir - tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz - $(am__remove_distdir) - -dist-tarZ: distdir - tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z - $(am__remove_distdir) - -dist-shar: distdir - shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz - $(am__remove_distdir) - -dist-zip: distdir - -rm -f $(distdir).zip - zip -rq $(distdir).zip $(distdir) - $(am__remove_distdir) - -dist dist-all: distdir - tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz - $(am__remove_distdir) - -# This target untars the dist file and tries a VPATH configuration. Then -# it guarantees that the distribution is self-contained by making another -# tarfile. -distcheck: dist - case '$(DIST_ARCHIVES)' in \ - *.tar.gz*) \ - GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\ - *.tar.bz2*) \ - bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ - *.tar.lzma*) \ - lzma -dc $(distdir).tar.lzma | $(am__untar) ;;\ - *.tar.lz*) \ - lzip -dc $(distdir).tar.lz | $(am__untar) ;;\ - *.tar.xz*) \ - xz -dc $(distdir).tar.xz | $(am__untar) ;;\ - *.tar.Z*) \ - uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ - *.shar.gz*) \ - GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\ - *.zip*) \ - unzip $(distdir).zip ;;\ - esac - chmod -R a-w $(distdir); chmod a+w $(distdir) - mkdir $(distdir)/_build - mkdir $(distdir)/_inst - chmod a-w $(distdir) - test -d $(distdir)/_build || exit 0; \ - dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ - && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ - && am__cwd=`pwd` \ - && $(am__cd) $(distdir)/_build \ - && ../configure --srcdir=.. --prefix="$$dc_install_base" \ - $(AM_DISTCHECK_CONFIGURE_FLAGS) \ - $(DISTCHECK_CONFIGURE_FLAGS) \ - && $(MAKE) $(AM_MAKEFLAGS) \ - && $(MAKE) $(AM_MAKEFLAGS) dvi \ - && $(MAKE) $(AM_MAKEFLAGS) check \ - && $(MAKE) $(AM_MAKEFLAGS) install \ - && $(MAKE) $(AM_MAKEFLAGS) installcheck \ - && $(MAKE) $(AM_MAKEFLAGS) uninstall \ - && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ - distuninstallcheck \ - && chmod -R a-w "$$dc_install_base" \ - && ({ \ - (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ - && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ - && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ - && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ - distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ - } || { rm -rf "$$dc_destdir"; exit 1; }) \ - && rm -rf "$$dc_destdir" \ - && $(MAKE) $(AM_MAKEFLAGS) dist \ - && rm -rf $(DIST_ARCHIVES) \ - && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ - && cd "$$am__cwd" \ - || exit 1 - $(am__remove_distdir) - @(echo "$(distdir) archives ready for distribution: "; \ - list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ - sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' -distuninstallcheck: - @test -n '$(distuninstallcheck_dir)' || { \ - echo 'ERROR: trying to run $@ with an empty' \ - '$$(distuninstallcheck_dir)' >&2; \ - exit 1; \ - }; \ - $(am__cd) '$(distuninstallcheck_dir)' || { \ - echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \ - exit 1; \ - }; \ - test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \ - || { echo "ERROR: files left after uninstall:" ; \ - if test -n "$(DESTDIR)"; then \ - echo " (check DESTDIR support)"; \ - fi ; \ - $(distuninstallcheck_listfiles) ; \ - exit 1; } >&2 -distcleancheck: distclean - @if test '$(srcdir)' = . ; then \ - echo "ERROR: distcleancheck can only run from a VPATH build" ; \ - exit 1 ; \ - fi - @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ - || { echo "ERROR: files left in build directory after distclean:" ; \ - $(distcleancheck_listfiles) ; \ - exit 1; } >&2 -check-am: all-am - $(MAKE) $(AM_MAKEFLAGS) check-TESTS -check: check-am -all-am: Makefile $(LTLIBRARIES) $(PROGRAMS) $(DATA) $(HEADERS) \ - config.h -installdirs: - for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(docdir)" "$(DESTDIR)$(includedir)"; do \ - test -z "$$dir" || $(MKDIR_P) "$$dir"; \ - done -install: install-am -install-exec: install-exec-am -install-data: install-data-am -uninstall: uninstall-am - -install-am: all-am - @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am - -installcheck: installcheck-am -install-strip: - if test -z '$(STRIP)'; then \ - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - install; \ - else \ - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ - fi -mostlyclean-generic: - -clean-generic: - -distclean-generic: - -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) - -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) - -maintainer-clean-generic: - @echo "This command is intended for maintainers to use" - @echo "it deletes files that may require special tools to rebuild." -clean: clean-am - -clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \ - clean-noinstPROGRAMS mostlyclean-am - -distclean: distclean-am - -rm -f $(am__CONFIG_DISTCLEAN_FILES) - -rm -rf ./$(DEPDIR) - -rm -f Makefile -distclean-am: clean-am distclean-compile distclean-generic \ - distclean-hdr distclean-libtool distclean-tags - -dvi: dvi-am - -dvi-am: - -html: html-am - -html-am: - -info: info-am - -info-am: - -install-data-am: install-dist_docDATA install-includeHEADERS - -install-dvi: install-dvi-am - -install-dvi-am: - -install-exec-am: install-libLTLIBRARIES - -install-html: install-html-am - -install-html-am: - -install-info: install-info-am - -install-info-am: - -install-man: - -install-pdf: install-pdf-am - -install-pdf-am: - -install-ps: install-ps-am - -install-ps-am: - -installcheck-am: - -maintainer-clean: maintainer-clean-am - -rm -f $(am__CONFIG_DISTCLEAN_FILES) - -rm -rf $(top_srcdir)/autom4te.cache - -rm -rf ./$(DEPDIR) - -rm -f Makefile -maintainer-clean-am: distclean-am maintainer-clean-generic - -mostlyclean: mostlyclean-am - -mostlyclean-am: mostlyclean-compile mostlyclean-generic \ - mostlyclean-libtool - -pdf: pdf-am - -pdf-am: - -ps: ps-am - -ps-am: - -uninstall-am: uninstall-dist_docDATA uninstall-includeHEADERS \ - uninstall-libLTLIBRARIES - -.MAKE: all check-am install-am install-strip - -.PHONY: CTAGS GTAGS all all-am am--refresh check check-TESTS check-am \ - clean clean-generic clean-libLTLIBRARIES clean-libtool \ - clean-noinstPROGRAMS ctags dist dist-all dist-bzip2 dist-gzip \ - dist-lzip dist-lzma dist-shar dist-tarZ dist-xz dist-zip \ - distcheck distclean distclean-compile distclean-generic \ - distclean-hdr distclean-libtool distclean-tags distcleancheck \ - distdir distuninstallcheck dvi dvi-am html html-am info \ - info-am install install-am install-data install-data-am \ - install-dist_docDATA install-dvi install-dvi-am install-exec \ - install-exec-am install-html install-html-am \ - install-includeHEADERS install-info install-info-am \ - install-libLTLIBRARIES install-man install-pdf install-pdf-am \ - install-ps install-ps-am install-strip installcheck \ - installcheck-am installdirs maintainer-clean \ - maintainer-clean-generic mostlyclean mostlyclean-compile \ - mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ - tags uninstall uninstall-am uninstall-dist_docDATA \ - uninstall-includeHEADERS uninstall-libLTLIBRARIES - - -libtool: $(LIBTOOL_DEPS) - $(SHELL) ./config.status --recheck - -# Tell versions [3.59,3.63) of GNU make to not export all variables. -# Otherwise a system limit (for SysV at least) may be exceeded. -.NOEXPORT: diff --git a/deps/snappy/snappy-1.1.1/autogen.sh b/deps/snappy/snappy-1.1.1/autogen.sh deleted file mode 100755 index 9d0ebe93..00000000 --- a/deps/snappy/snappy-1.1.1/autogen.sh +++ /dev/null @@ -1,7 +0,0 @@ -#! /bin/sh -e -rm -rf autom4te.cache -aclocal -I m4 -autoheader -libtoolize --copy -automake --add-missing --copy -autoconf diff --git a/deps/snappy/snappy-1.1.1/missing b/deps/snappy/snappy-1.1.1/missing deleted file mode 100755 index 86a8fc31..00000000 --- a/deps/snappy/snappy-1.1.1/missing +++ /dev/null @@ -1,331 +0,0 @@ -#! /bin/sh -# Common stub for a few missing GNU programs while installing. - -scriptversion=2012-01-06.13; # UTC - -# Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005, 2006, -# 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc. -# Originally by Fran,cois Pinard , 1996. - -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2, or (at your option) -# any later version. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. - -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . - -# As a special exception to the GNU General Public License, if you -# distribute this file as part of a program that contains a -# configuration script generated by Autoconf, you may include it under -# the same distribution terms that you use for the rest of that program. - -if test $# -eq 0; then - echo 1>&2 "Try \`$0 --help' for more information" - exit 1 -fi - -run=: -sed_output='s/.* --output[ =]\([^ ]*\).*/\1/p' -sed_minuso='s/.* -o \([^ ]*\).*/\1/p' - -# In the cases where this matters, `missing' is being run in the -# srcdir already. -if test -f configure.ac; then - configure_ac=configure.ac -else - configure_ac=configure.in -fi - -msg="missing on your system" - -case $1 in ---run) - # Try to run requested program, and just exit if it succeeds. - run= - shift - "$@" && exit 0 - # Exit code 63 means version mismatch. This often happens - # when the user try to use an ancient version of a tool on - # a file that requires a minimum version. In this case we - # we should proceed has if the program had been absent, or - # if --run hadn't been passed. - if test $? = 63; then - run=: - msg="probably too old" - fi - ;; - - -h|--h|--he|--hel|--help) - echo "\ -$0 [OPTION]... PROGRAM [ARGUMENT]... - -Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an -error status if there is no known handling for PROGRAM. - -Options: - -h, --help display this help and exit - -v, --version output version information and exit - --run try to run the given command, and emulate it if it fails - -Supported PROGRAM values: - aclocal touch file \`aclocal.m4' - autoconf touch file \`configure' - autoheader touch file \`config.h.in' - autom4te touch the output file, or create a stub one - automake touch all \`Makefile.in' files - bison create \`y.tab.[ch]', if possible, from existing .[ch] - flex create \`lex.yy.c', if possible, from existing .c - help2man touch the output file - lex create \`lex.yy.c', if possible, from existing .c - makeinfo touch the output file - yacc create \`y.tab.[ch]', if possible, from existing .[ch] - -Version suffixes to PROGRAM as well as the prefixes \`gnu-', \`gnu', and -\`g' are ignored when checking the name. - -Send bug reports to ." - exit $? - ;; - - -v|--v|--ve|--ver|--vers|--versi|--versio|--version) - echo "missing $scriptversion (GNU Automake)" - exit $? - ;; - - -*) - echo 1>&2 "$0: Unknown \`$1' option" - echo 1>&2 "Try \`$0 --help' for more information" - exit 1 - ;; - -esac - -# normalize program name to check for. -program=`echo "$1" | sed ' - s/^gnu-//; t - s/^gnu//; t - s/^g//; t'` - -# Now exit if we have it, but it failed. Also exit now if we -# don't have it and --version was passed (most likely to detect -# the program). This is about non-GNU programs, so use $1 not -# $program. -case $1 in - lex*|yacc*) - # Not GNU programs, they don't have --version. - ;; - - *) - if test -z "$run" && ($1 --version) > /dev/null 2>&1; then - # We have it, but it failed. - exit 1 - elif test "x$2" = "x--version" || test "x$2" = "x--help"; then - # Could not run --version or --help. This is probably someone - # running `$TOOL --version' or `$TOOL --help' to check whether - # $TOOL exists and not knowing $TOOL uses missing. - exit 1 - fi - ;; -esac - -# If it does not exist, or fails to run (possibly an outdated version), -# try to emulate it. -case $program in - aclocal*) - echo 1>&2 "\ -WARNING: \`$1' is $msg. You should only need it if - you modified \`acinclude.m4' or \`${configure_ac}'. You might want - to install the \`Automake' and \`Perl' packages. Grab them from - any GNU archive site." - touch aclocal.m4 - ;; - - autoconf*) - echo 1>&2 "\ -WARNING: \`$1' is $msg. You should only need it if - you modified \`${configure_ac}'. You might want to install the - \`Autoconf' and \`GNU m4' packages. Grab them from any GNU - archive site." - touch configure - ;; - - autoheader*) - echo 1>&2 "\ -WARNING: \`$1' is $msg. You should only need it if - you modified \`acconfig.h' or \`${configure_ac}'. You might want - to install the \`Autoconf' and \`GNU m4' packages. Grab them - from any GNU archive site." - files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}` - test -z "$files" && files="config.h" - touch_files= - for f in $files; do - case $f in - *:*) touch_files="$touch_files "`echo "$f" | - sed -e 's/^[^:]*://' -e 's/:.*//'`;; - *) touch_files="$touch_files $f.in";; - esac - done - touch $touch_files - ;; - - automake*) - echo 1>&2 "\ -WARNING: \`$1' is $msg. You should only need it if - you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'. - You might want to install the \`Automake' and \`Perl' packages. - Grab them from any GNU archive site." - find . -type f -name Makefile.am -print | - sed 's/\.am$/.in/' | - while read f; do touch "$f"; done - ;; - - autom4te*) - echo 1>&2 "\ -WARNING: \`$1' is needed, but is $msg. - You might have modified some files without having the - proper tools for further handling them. - You can get \`$1' as part of \`Autoconf' from any GNU - archive site." - - file=`echo "$*" | sed -n "$sed_output"` - test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` - if test -f "$file"; then - touch $file - else - test -z "$file" || exec >$file - echo "#! /bin/sh" - echo "# Created by GNU Automake missing as a replacement of" - echo "# $ $@" - echo "exit 0" - chmod +x $file - exit 1 - fi - ;; - - bison*|yacc*) - echo 1>&2 "\ -WARNING: \`$1' $msg. You should only need it if - you modified a \`.y' file. You may need the \`Bison' package - in order for those modifications to take effect. You can get - \`Bison' from any GNU archive site." - rm -f y.tab.c y.tab.h - if test $# -ne 1; then - eval LASTARG=\${$#} - case $LASTARG in - *.y) - SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'` - if test -f "$SRCFILE"; then - cp "$SRCFILE" y.tab.c - fi - SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'` - if test -f "$SRCFILE"; then - cp "$SRCFILE" y.tab.h - fi - ;; - esac - fi - if test ! -f y.tab.h; then - echo >y.tab.h - fi - if test ! -f y.tab.c; then - echo 'main() { return 0; }' >y.tab.c - fi - ;; - - lex*|flex*) - echo 1>&2 "\ -WARNING: \`$1' is $msg. You should only need it if - you modified a \`.l' file. You may need the \`Flex' package - in order for those modifications to take effect. You can get - \`Flex' from any GNU archive site." - rm -f lex.yy.c - if test $# -ne 1; then - eval LASTARG=\${$#} - case $LASTARG in - *.l) - SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'` - if test -f "$SRCFILE"; then - cp "$SRCFILE" lex.yy.c - fi - ;; - esac - fi - if test ! -f lex.yy.c; then - echo 'main() { return 0; }' >lex.yy.c - fi - ;; - - help2man*) - echo 1>&2 "\ -WARNING: \`$1' is $msg. You should only need it if - you modified a dependency of a manual page. You may need the - \`Help2man' package in order for those modifications to take - effect. You can get \`Help2man' from any GNU archive site." - - file=`echo "$*" | sed -n "$sed_output"` - test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` - if test -f "$file"; then - touch $file - else - test -z "$file" || exec >$file - echo ".ab help2man is required to generate this page" - exit $? - fi - ;; - - makeinfo*) - echo 1>&2 "\ -WARNING: \`$1' is $msg. You should only need it if - you modified a \`.texi' or \`.texinfo' file, or any other file - indirectly affecting the aspect of the manual. The spurious - call might also be the consequence of using a buggy \`make' (AIX, - DU, IRIX). You might want to install the \`Texinfo' package or - the \`GNU make' package. Grab either from any GNU archive site." - # The file to touch is that specified with -o ... - file=`echo "$*" | sed -n "$sed_output"` - test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` - if test -z "$file"; then - # ... or it is the one specified with @setfilename ... - infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'` - file=`sed -n ' - /^@setfilename/{ - s/.* \([^ ]*\) *$/\1/ - p - q - }' $infile` - # ... or it is derived from the source name (dir/f.texi becomes f.info) - test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info - fi - # If the file does not exist, the user really needs makeinfo; - # let's fail without touching anything. - test -f $file || exit 1 - touch $file - ;; - - *) - echo 1>&2 "\ -WARNING: \`$1' is needed, and is $msg. - You might have modified some files without having the - proper tools for further handling them. Check the \`README' file, - it often tells you about the needed prerequisites for installing - this package. You may also peek at any GNU archive site, in case - some other package would contain this missing \`$1' program." - exit 1 - ;; -esac - -exit 0 - -# Local variables: -# eval: (add-hook 'write-file-hooks 'time-stamp) -# time-stamp-start: "scriptversion=" -# time-stamp-format: "%:y-%02m-%02d.%02H" -# time-stamp-time-zone: "UTC" -# time-stamp-end: "; # UTC" -# End: diff --git a/deps/snappy/snappy-1.1.1/snappy-internal.h b/deps/snappy/snappy-1.1.1/snappy-internal.h deleted file mode 100644 index c99d3313..00000000 --- a/deps/snappy/snappy-1.1.1/snappy-internal.h +++ /dev/null @@ -1,150 +0,0 @@ -// Copyright 2008 Google Inc. All Rights Reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "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 COPYRIGHT -// OWNER OR CONTRIBUTORS 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. -// -// Internals shared between the Snappy implementation and its unittest. - -#ifndef UTIL_SNAPPY_SNAPPY_INTERNAL_H_ -#define UTIL_SNAPPY_SNAPPY_INTERNAL_H_ - -#include "snappy-stubs-internal.h" - -namespace snappy { -namespace internal { - -class WorkingMemory { - public: - WorkingMemory() : large_table_(NULL) { } - ~WorkingMemory() { delete[] large_table_; } - - // Allocates and clears a hash table using memory in "*this", - // stores the number of buckets in "*table_size" and returns a pointer to - // the base of the hash table. - uint16* GetHashTable(size_t input_size, int* table_size); - - private: - uint16 small_table_[1<<10]; // 2KB - uint16* large_table_; // Allocated only when needed - - DISALLOW_COPY_AND_ASSIGN(WorkingMemory); -}; - -// Flat array compression that does not emit the "uncompressed length" -// prefix. Compresses "input" string to the "*op" buffer. -// -// REQUIRES: "input_length <= kBlockSize" -// REQUIRES: "op" points to an array of memory that is at least -// "MaxCompressedLength(input_length)" in size. -// REQUIRES: All elements in "table[0..table_size-1]" are initialized to zero. -// REQUIRES: "table_size" is a power of two -// -// Returns an "end" pointer into "op" buffer. -// "end - op" is the compressed size of "input". -char* CompressFragment(const char* input, - size_t input_length, - char* op, - uint16* table, - const int table_size); - -// Return the largest n such that -// -// s1[0,n-1] == s2[0,n-1] -// and n <= (s2_limit - s2). -// -// Does not read *s2_limit or beyond. -// Does not read *(s1 + (s2_limit - s2)) or beyond. -// Requires that s2_limit >= s2. -// -// Separate implementation for x86_64, for speed. Uses the fact that -// x86_64 is little endian. -#if defined(ARCH_K8) -static inline int FindMatchLength(const char* s1, - const char* s2, - const char* s2_limit) { - assert(s2_limit >= s2); - int matched = 0; - - // Find out how long the match is. We loop over the data 64 bits at a - // time until we find a 64-bit block that doesn't match; then we find - // the first non-matching bit and use that to calculate the total - // length of the match. - while (PREDICT_TRUE(s2 <= s2_limit - 8)) { - if (PREDICT_FALSE(UNALIGNED_LOAD64(s2) == UNALIGNED_LOAD64(s1 + matched))) { - s2 += 8; - matched += 8; - } else { - // On current (mid-2008) Opteron models there is a 3% more - // efficient code sequence to find the first non-matching byte. - // However, what follows is ~10% better on Intel Core 2 and newer, - // and we expect AMD's bsf instruction to improve. - uint64 x = UNALIGNED_LOAD64(s2) ^ UNALIGNED_LOAD64(s1 + matched); - int matching_bits = Bits::FindLSBSetNonZero64(x); - matched += matching_bits >> 3; - return matched; - } - } - while (PREDICT_TRUE(s2 < s2_limit)) { - if (PREDICT_TRUE(s1[matched] == *s2)) { - ++s2; - ++matched; - } else { - return matched; - } - } - return matched; -} -#else -static inline int FindMatchLength(const char* s1, - const char* s2, - const char* s2_limit) { - // Implementation based on the x86-64 version, above. - assert(s2_limit >= s2); - int matched = 0; - - while (s2 <= s2_limit - 4 && - UNALIGNED_LOAD32(s2) == UNALIGNED_LOAD32(s1 + matched)) { - s2 += 4; - matched += 4; - } - if (LittleEndian::IsLittleEndian() && s2 <= s2_limit - 4) { - uint32 x = UNALIGNED_LOAD32(s2) ^ UNALIGNED_LOAD32(s1 + matched); - int matching_bits = Bits::FindLSBSetNonZero(x); - matched += matching_bits >> 3; - } else { - while ((s2 < s2_limit) && (s1[matched] == *s2)) { - ++s2; - ++matched; - } - } - return matched; -} -#endif - -} // end namespace internal -} // end namespace snappy - -#endif // UTIL_SNAPPY_SNAPPY_INTERNAL_H_ diff --git a/deps/snappy/snappy-1.1.1/testdata/cp.html b/deps/snappy/snappy-1.1.1/testdata/cp.html deleted file mode 100644 index 1d0ca37e..00000000 --- a/deps/snappy/snappy-1.1.1/testdata/cp.html +++ /dev/null @@ -1,645 +0,0 @@ - -Compression Pointers - - - - - -
-

Compression Pointers

- - - -
- -

-Compression resources, conferences, and some research -groups and companies, are listed towards the end of this page.

- -Use this handy form to add something to this page, or to simply say you liked this page -

- - - - - -

- -

What's New?

- - -Jean-loup Gailly -- Mr. gzip, -PNG, CCR (1996-06-10) - -
- -MPEG Pointers and Resources - -
- -Robert M. Gray -- Signal -compression, VQ, image quality evaluation (1996-04-22) -
- -Compression and -Classification Group -- ISL,EE,Stanford (1996-04-22) -
- -Signal Processing -and the International Information Infrastructure -- Web sites (1996-04-22) -
- -Valenta, Vladimir -- (1996-04-22) -
- - -Jordan, Frederic -- Parallel Image Compression (1996-04-12) -
-Electro-Optical Technologies, Inc. -- Consultant (1996-04-12) -
-quicktime.apple.com -- Quicktime site (1996-03-11) -
-IBM Hardware -- Compression chips (1996-03-11) -
- - - - - - - - - - - - - - - - - - - - - - - - -

- - -

- - -

People

-

A

- -Adler, Mark -- Info-ZIP; Zip, UnZip, gzip and zlib co-author; PNG group -

- -

B

- -Baker, Matthew -- Region based video compression -

-Bamberger, Roberto H. -

-Bell, Daniel -- Region based image compression -

-Bell, Tim -- compression, computer science for children, and computers and music. -

-Bellard, Fabrice -- Author of LZEXE -

-Berghorn, Willy -

-Bhaskaran, Vasudev -- Image and Video compression -

-Bloom, Charles -- text compression, LZ methods, PPM methods... -

-Brito, Roger -- Arithmetic Coding, LZW, Text Compression -

-Budge, Scott E. -- medical/lossy image compression -

-Burnett, Ian -- Speech coding, prototype waveform techniques -

- - -

C

- -Chan, Christopher -- universal lossy source coding, adaptive VQ -

-Chao, Hong-yang -- Lightning strike image compressor -

-Chao, Stewart -

-Cherriman, Peter -

-Cheung, S.C. -- Scalable video compression algorithms (18th Feb 1996) -

- -Christopoulos, Charilaos -- Image and Video compression -

-Chrysafis, Christos -

-Chung, Wilson C. -- R-D image and video coding, subband/wavelet, filter banks -

-Clark, Alan -- primary contact for V.42bis. Developed BTLZ variant of LZW -

-Cleary, John -- PPM, PPM*, K* -

-Cohn, Martin -

- -Cormack, Gordon V. -- DMC -

-Cramer, Chris -- neural network image compression -

- -

D

-Danskin, John -- Protocol compression, document compression (9th Feb 1996) -

-Davis, Geoff -- wavelets, image compression, medical -

-Dilger, Andreas -- fractal block coding of video sequences -

- - -

E

-Estes, Robert -

- - - -

F

-Fisher, Yuval -- Fractal Image Compression -

-Ford, Adrian -- Subjective and Objective Compression quality (5th Mar 1996) -

- -

G

-Jean-loup Gailly -- -Mr. gzip, PNG, CCR (1996-06-10) -

- -Gersho, Allen -- Vector Quantisation, Image Compression -

-Goertzel, Ben -

-Gooch, Mark -- High Performance Hardware Compression (7th Feb 1996) -

-Goyal, Vivek -- overcomplete representations, adaptive transform coding, VQ -

-Robert M. Gray -- Signal -compression, VQ, image quality evaluation -

- -

H

-Hafner, Ullrich -- WFA image compression -

-Hirschberg, Dan -- algorithm theory, compression -

-Holland, Scott -

-Horspool, R. Nigel -- text compression, ECG compression - -

I

-Inglis, Stuart -- image compression, OCR, lossy/lossless document compression -

- -

J

-Jones, Douglas -- splay-tree based compression and encryption -

-Jones, Simon -- Lossless compression, High Performance Hardware (7th Feb 1996) -

-Jordan, Frederic -- Parallel Image Compression (12th April 1996) -

-Jung, Robert K. -- ARJ -

-jutta -

- - - -

K

-Kominek, John -- Fractal and spline based compression -

-Kjelso, Morten -- Main memory compression, High performance hardware -

-Kuhn, Markus -- JBIG implementation -

-Kuo, C.-C. Jay -

-Kuru, Esa -

-Kyfonidis, Theodoros -

- -

L

-Lamparter, Bernd -

-Langdon, Glen -

-Larsson, Jesper -- algorithms and data structures, text compression -

- - -

M

-Manber, Udi -

-Mangen, Jean-Michel -- image compression, wavelets, satellite -

-Moffat, Alistair -- text and index compression, coding methods, information retrieval, document databases -

-Montgomery, Christopher -- OggSquish, audio compression -

-Mueller, Urban Dominik -- XPK system -

-

N

-Neal, Radford -

-Nevill-Manning, Craig -

-Nicholls, Jeremy -

-Noah, Matt -- speech, ATC, ACELP and IMBE -

-Nuri, Veyis -- wavelets, data compression, DSP (speech & image) - -

O

-Oleg -- Lots of code -

-Ortega, Antonio -- Video compression, Packet video, Adaptive quantization -

-Owen, Charles -

- -

P

-Provine, -Joseph -- Model based coding -

- -

R

-Robinson, John -- Binary Tree Predictive Coding -

-Roelofs, Greg -- Info-ZIP; primary UnZip author; PNG group -

-Rose, Kenneth -

-Russo, Roberto Maria -- Multiplatform Data Compression -

- -

S

-Schmidt, Bill -

-Shaw, Sandy C. -

-Sharifi, Kamran -- Video over ATM networks -

-Shende, Sunil M. -

-Silverstein, D. Amnon -

-Smoot, Steve -- MPEG -

-Storer, James A. -

-Streit, Jurgen -- Low bitrate coding -

-Strutz, Tilo -- Wavelet image compressor, demonstration execs -

- - -

T

-Tate, Steve -

-Teahan, Bill -- PPM, PPM*, master of the Calgary Corpus -

-Thomson, Duncan -- ECG compression with ANNs -

-Tilton, James C. -

-Tomczyk, Marek -

-Turpin, Andrew -- Prefix Codes -

- -

V

-Vetterli, Martin -- wavelets, subband coding, video compression, computational complexity -

-Vitter, Jeff -

-Voukelatos, Stathis -

-de Vries, Nico -- AIP-NL, UltraCompressor II development -

- -

W

- -Wareham, Paul -- Region-oriented video coding -

-Wegener, Al -- DSP, lossless audio compression and AC-2 -

-Wei, Dong -- Wavelet compression -

-Williams, Ross -

-Witten, Ian -- PPM, mg, arithmetic coding -

-Wolff, Gerry -

-Woo, Woon-Tack -- stereo image and video compression (12th Feb 1996) -

-Wu, Xiaolin -- CALIC -

- - -

Z

-Zobel, Justin -- index compression, database compression -

- -
-
- - - - -

Conferences

-Data Compression Conference (DCC), Snowbird, Utah, USA.
-

- - - -

Resources

-
-Where to get answers... -
-
International Telecommunication Union (ITU) -- standards documents (CCITT) -
-
comp.compression -- Frequently Asked Questions -- Come here 1st! -
-JPEG - Frequently Asked Questions -
-MPEG - Frequently Asked Questions -
-Standards - Frequenty Asked Questions -
-usenet newsgroup: comp.compression.research -
-
-Archive Compression Test -- Summary of all archivers -
-
-Fractal compression bibliography -- bibtex file -
-
-LZ/Complexity Seminars -- (in German) -
-
-Comparitive Compression Ratios -- Sofar...B&W, Gray Scale, Text Compression -
-
-VCN (Video, Compression, Networking) -Glossary -
-
-Digital Library -- search for compression -
- - -
-
-Reports/Ph.D. Theses -
-Paul Howards Ph.D. thesis
-
The Design and Analysis of Efficient Lossless Data Compression Systems -
- - - - -
-
-Source code -
-Arithmetic coding routines -
        (from Moffat, Neal and Witten, Proc. DCC, April 1995) -
-
-CACM Arithmetic coding package -
        (Witten, Neal and Cleary, CACM 30:520-541, June 1987) -
-
-JBIG Source code Includes a Q-coder -
-
Markus Kuhn's JBIG implementation -
-
-k-arithmetic coder -
-
-Lossless Data Compression toolkit 1.1 -
-
-Splay Trees Code -- by Douglas W. Jones -
-
Block compression code -- Excellent text compressor -
- - - -
-
-Test Files -
-Test Images -- CCITT images (pbm), Lena etc. (Sun raster) -
-
-Stockholm test images -- You have to buy a CDROM, thats all I know! :-( -
         mail me at singlis@cs.waikato.ac.nz if you know anything about them. -
-
-Calgary Text Compression Corpus (Text Compression, Bell, Cleary and Witten, 1990) -
- - -
- - - - -

Research Projects, Standards & Companies

- -

-

-Research/Free software Groups -
Compression and -Classification Group -- ISL,EE,Stanford (22th April 1996) - -
Voice email -- Lossless audio compression (18th Feb 1996) - - -
Electro-Optical Technologies, Inc. -- Consultant (12th April 1996) - -
quicktime.apple.com -- Quicktime site (11th Mar 1996) - -
IMAGE etc. -- Commercial image compression software (Fractals/Wavelets) (29th Feb 1996) - -
NCAR CCM Compression and Visualisation -- (18th Feb 1996) -
-
SPIHT -- Wavelet Natural Image Compressor (12th Feb 1996) -
-
Real-Time Lossless Compression Systems -- Loughborough University -
-
Web site for Multirate Signal Processing -- University of Wisconsin, Madison -
-
Info-ZIP -- free, -portable Zip and UnZip utilities -
-
CEDIS -- NASA, Maryland, Image/data compression -
-
CIC-3 Image Compression -- FBI Fingerprints -
-
Signal Compression Lab at UCSB -
-
University of -Washington compression lab -- VQ, Wavelets, Shlomo -
- - - -

-

-Snippets -
Signal Processing -and the International Information Infrastructure -- Web sites (22th April 1996) -
Increasing Web bandwith -- comparing GIF, JPEG, Fractal compression -
-
Fractal Links on Yahoo -
-
Digital Speech Compression GSM 06.10 RPE-LTP -- DDJ -
-
CREW -- Continuous tone loss(y/less) wavelet compression -
-
CALIC -- Context-based adaptive lossless image compressor -
-
Berkeley MPEG -- MPEG tools -
-
MPEG Pointers and Resources -
- - - - - - -

-

-Wavelets -
- - EPIC (Efficient Pyramid Image Coder) -- by Eero Simoncelli -
-
-Tucker, Michael -- FASTWAVE, audio/image compression -
-
-HARC -- Lossy Wavelet Compression technology -
-
-UC Berkeley Wavelet Group -
-
-Khoros Wavetlet and Compression Toolbox -
-
-The Wavelet Digest -
-
-Rice DSP Publications Archive -- Wavelets, Time Frequency/Scale -
- - -

-

-Fractals -
-Fractal Image Compression -- Software, Pointers, Conferences -
-
-Fractal Design Corporation -
-
-New Fractal Image Compression program -
- - -

-

-Companies -
IBM Hardware -- Compression chips (11th Mar 1996) - -
Summus Wavelet Technology -- Wavelet image and video compressors (11th Mar 1996) -
Fractal Image Compression -- Mitsubishi (18th Feb 1996) - -
Terran Interactive -- Video compression for the Mac (1st Feb 1996) -
- -
DV Mpeg -- Windows drivers (18th Feb 1996) -
- -
Crawford Compression Services -- MPEG post-production (18th Feb 1996) -
- -
Intelligent Compression Technologies (18th Feb 1996) -
- -
Pegasus Imaging -- Compression software/dev. kits (12th Feb 1996) -
-
Aladdin Systems -- StuffIt compression products -
-
Stac Electronics -
-
DCP Research -- Hardware solutions -
-
Aware Inc. -- Specialised compression company -
-
IVS - INRIA Videoconferencing System -
-
Telvox Teleinformatica -- Multiplatform Data Compressor -
-
Compression Technologies, -Inc -- Canada -
-
Optivision -- MPEG -
-
PKWARE -- Makers of PKZIP -
-
Multimedia Imaging Services -
- - -

-

-Audio compression -
Fraunhofer Institut fr Integrierte Schaltungen -
-
Shorten -
-
digital speech compression -
-
Audio compression references -
-
SpeakFreely - compression -
-
SpeakFreely - Contents -
diff --git a/deps/snappy/snappy-1.1.1/testdata/fields.c b/deps/snappy/snappy-1.1.1/testdata/fields.c deleted file mode 100644 index 63cdc030..00000000 --- a/deps/snappy/snappy-1.1.1/testdata/fields.c +++ /dev/null @@ -1,431 +0,0 @@ -#ifndef lint -static char Rcs_Id[] = - "$Id: fields.c,v 1.7 1994/01/06 05:26:37 geoff Exp $"; -#endif - -/* - * $Log: fields.c,v $ - * Revision 1.7 1994/01/06 05:26:37 geoff - * Get rid of all references to System V string routines, for portability - * (sigh). - * - * Revision 1.6 1994/01/05 20:13:43 geoff - * Add the maxf parameter - * - * Revision 1.5 1994/01/04 02:40:21 geoff - * Make the increments settable (field_line_inc and field_field_inc). - * Add support for the FLD_NOSHRINK flag. - * - * Revision 1.4 1993/09/27 17:48:02 geoff - * Fix some lint complaints and some parenthesization errors. - * - * Revision 1.3 1993/09/09 01:11:11 geoff - * Add a return value to fieldwrite. Add support for backquotes and for - * unstripped backslashes. - * - * Revision 1.2 1993/08/26 00:02:50 geoff - * Fix a stupid null-pointer bug - * - * Revision 1.1 1993/08/25 21:32:05 geoff - * Initial revision - * - */ - -#include -#include "config.h" -#include "fields.h" - -field_t * fieldread P ((FILE * file, char * delims, - int flags, int maxf)); - /* Read a line with fields from a file */ -field_t * fieldmake P ((char * line, int allocated, char * delims, - int flags, int maxf)); - /* Make a field structure from a line */ -static field_t * fieldparse P ((field_t * fieldp, char * line, char * delims, - int flags, int maxf)); - /* Parse the fields in a line */ -static int fieldbackch P ((char * str, char ** out, int strip)); - /* Process backslash sequences */ -int fieldwrite P ((FILE * file, field_t * fieldp, int delim)); - /* Write a line with fields to a file */ -void fieldfree P ((field_t * fieldp)); - /* Free a field returned by fieldread */ - -unsigned int field_field_inc = 20; /* Increment to increase # fields by */ -unsigned int field_line_inc = 512; /* Incr to increase line length by */ - -#ifndef USG -#define strchr index -#endif /* USG */ - -extern void free (); -extern char * malloc (); -extern char * realloc (); -extern char * strchr (); -extern int strlen (); - -/* - * Read one line of the given file into a buffer, break it up into - * fields, and return them to the caller. The field_t structure - * returned must eventually be freed with fieldfree. - */ -field_t * fieldread (file, delims, flags, maxf) - FILE * file; /* File to read lines from */ - char * delims; /* Characters to use for field delimiters */ - int flags; /* Option flags; see fields.h */ - int maxf; /* Maximum number of fields to parse */ - { - register char * linebuf; /* Buffer to hold the line read in */ - int linemax; /* Maximum line buffer size */ - int linesize; /* Current line buffer size */ - - linebuf = (char *) malloc (field_line_inc); - if (linebuf == NULL) - return NULL; - linemax = field_line_inc; - linesize = 0; - /* - * Read in the line. - */ - while (fgets (&linebuf[linesize], linemax - linesize, file) - != NULL) - { - linesize += strlen (&linebuf[linesize]); - if (linebuf[linesize - 1] == '\n') - break; - else - { - linemax += field_line_inc; - linebuf = (char *) realloc (linebuf, linemax); - if (linebuf == NULL) - return NULL; - } - } - if (linesize == 0) - { - free (linebuf); - return NULL; - } - return fieldmake (linebuf, 1, delims, flags, maxf); - } - -field_t * fieldmake (line, allocated, delims, flags, maxf) - char * line; /* Line to make into a field structure */ - int allocated; /* NZ if line allocated with malloc */ - char * delims; /* Characters to use for field delimiters */ - int flags; /* Option flags; see fields.h */ - int maxf; /* Maximum number of fields to parse */ - { - register field_t * fieldp; /* Structure describing the fields */ - int linesize; /* Current line buffer size */ - - fieldp = (field_t *) malloc (sizeof (field_t)); - if (fieldp == NULL) - return NULL; - fieldp->nfields = 0; - fieldp->linebuf = allocated ? line : NULL; - fieldp->fields = NULL; - fieldp->hadnl = 0; - linesize = strlen (line); - if (line[linesize - 1] == '\n') - { - line[--linesize] = '\0'; - fieldp->hadnl = 1; - } - /* - * Shrink the line buffer if necessary. - */ - if (allocated && (flags & FLD_NOSHRINK) == 0) - { - line = fieldp->linebuf = - (char *) realloc (fieldp->linebuf, linesize + 1); - if (fieldp->linebuf == NULL) - { - fieldfree (fieldp); - return NULL; - } - } - return fieldparse (fieldp, line, delims, flags, maxf); - } - -static field_t * fieldparse (fieldp, line, delims, flags, maxf) - register field_t * fieldp; /* Field structure to parse into */ - register char * line; /* Line to be parsed */ - char * delims; /* Characters to use for field delimiters */ - int flags; /* Option flags; see fields.h */ - int maxf; /* Maximum number of fields to parse */ - { - int fieldmax; /* Max size of fields array */ - char * lineout; /* Where to store xlated char in line */ - char quote; /* Quote character in use */ - - fieldp->nfields = 0; - fieldmax = - (maxf != 0 && maxf < field_field_inc) ? maxf + 2 : field_field_inc; - fieldp->fields = (char **) malloc (fieldmax * sizeof (char *)); - if (fieldp->fields == NULL) - { - fieldfree (fieldp); - return NULL; - } - if ((flags - & (FLD_SHQUOTES | FLD_SNGLQUOTES | FLD_BACKQUOTES | FLD_DBLQUOTES)) - == FLD_SHQUOTES) - flags |= FLD_SNGLQUOTES | FLD_BACKQUOTES | FLD_DBLQUOTES; - while (1) - { - if (flags & FLD_RUNS) - { - while (*line != '\0' && strchr (delims, *line) != NULL) - line++; /* Skip runs of delimiters */ - if (*line == '\0') - break; - } - fieldp->fields[fieldp->nfields] = lineout = line; - /* - * Skip to the next delimiter. At the end of skipping, "line" will - * point to either a delimiter or a null byte. - */ - if (flags - & (FLD_SHQUOTES | FLD_SNGLQUOTES | FLD_BACKQUOTES - | FLD_DBLQUOTES | FLD_BACKSLASH)) - { - while (*line != '\0') - { - if (strchr (delims, *line) != NULL) - break; - else if (((flags & FLD_SNGLQUOTES) && *line == '\'') - || ((flags & FLD_BACKQUOTES) && *line == '`') - || ((flags & FLD_DBLQUOTES) && *line == '"')) - { - if ((flags & FLD_SHQUOTES) == 0 - && line != fieldp->fields[fieldp->nfields]) - quote = '\0'; - else - quote = *line; - } - else - quote = '\0'; - if (quote == '\0') - { - if (*line == '\\' && (flags & FLD_BACKSLASH)) - { - line++; - if (*line == '\0') - break; - line += fieldbackch (line, &lineout, - flags & FLD_STRIPQUOTES); - } - else - *lineout++ = *line++; - } - else - { - /* Process quoted string */ - if ((flags & FLD_STRIPQUOTES) == 0) - *lineout++ = quote; - ++line; - while (*line != '\0') - { - if (*line == quote) - { - if ((flags & FLD_STRIPQUOTES) == 0) - *lineout++ = quote; - line++; /* Go on past quote */ - if ((flags & FLD_SHQUOTES) == 0) - { - while (*line != '\0' - && strchr (delims, *line) == NULL) - line++; /* Skip to delimiter */ - } - break; - } - else if (*line == '\\') - { - if (flags & FLD_BACKSLASH) - { - line++; - if (*line == '\0') - break; - else - line += fieldbackch (line, &lineout, - flags & FLD_STRIPQUOTES); - } - else - { - *lineout++ = '\\'; - if (*++line == '\0') - break; - *lineout++ = *line; - } - } - else - *lineout++ = *line++; - } - } - } - } - else - { - while (*line != '\0' && strchr (delims, *line) == NULL) - line++; /* Skip to delimiter */ - lineout = line; - } - fieldp->nfields++; - if (*line++ == '\0') - break; - if (maxf != 0 && fieldp->nfields > maxf) - break; - *lineout = '\0'; - if (fieldp->nfields >= fieldmax) - { - fieldmax += field_field_inc; - fieldp->fields = - (char **) realloc (fieldp->fields, fieldmax * sizeof (char *)); - if (fieldp->fields == NULL) - { - fieldfree (fieldp); - return NULL; - } - } - } - /* - * Shrink the field pointers and return the field structure. - */ - if ((flags & FLD_NOSHRINK) == 0 && fieldp->nfields >= fieldmax) - { - fieldp->fields = (char **) realloc (fieldp->fields, - (fieldp->nfields + 1) * sizeof (char *)); - if (fieldp->fields == NULL) - { - fieldfree (fieldp); - return NULL; - } - } - fieldp->fields[fieldp->nfields] = NULL; - return fieldp; - } - -static int fieldbackch (str, out, strip) - register char * str; /* First char of backslash sequence */ - register char ** out; /* Where to store result */ - int strip; /* NZ to convert the sequence */ - { - register int ch; /* Character being developed */ - char * origstr; /* Original value of str */ - - if (!strip) - { - *(*out)++ = '\\'; - if (*str != 'x' && *str != 'X' && (*str < '0' || *str > '7')) - { - *(*out)++ = *str; - return *str != '\0'; - } - } - switch (*str) - { - case '\0': - *(*out)++ = '\0'; - return 0; - case 'a': - *(*out)++ = '\007'; - return 1; - case 'b': - *(*out)++ = '\b'; - return 1; - case 'f': - *(*out)++ = '\f'; - return 1; - case 'n': - *(*out)++ = '\n'; - return 1; - case 'r': - *(*out)++ = '\r'; - return 1; - case 'v': - *(*out)++ = '\v'; - return 1; - case 'X': - case 'x': - /* Hexadecimal sequence */ - origstr = str++; - ch = 0; - if (*str >= '0' && *str <= '9') - ch = *str++ - '0'; - else if (*str >= 'a' && *str <= 'f') - ch = *str++ - 'a' + 0xa; - else if (*str >= 'A' && *str <= 'F') - ch = *str++ - 'A' + 0xa; - if (*str >= '0' && *str <= '9') - ch = (ch << 4) | (*str++ - '0'); - else if (*str >= 'a' && *str <= 'f') - ch = (ch << 4) | (*str++ - 'a' + 0xa); - else if (*str >= 'A' && *str <= 'F') - ch = (ch << 4) | (*str++ - 'A' + 0xa); - break; - case '0': - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - /* Octal sequence */ - origstr = str; - ch = *str++ - '0'; - if (*str >= '0' && *str <= '7') - ch = (ch << 3) | (*str++ - '0'); - if (*str >= '0' && *str <= '7') - ch = (ch << 3) | (*str++ - '0'); - break; - default: - *(*out)++ = *str; - return 1; - } - if (strip) - { - *(*out)++ = ch; - return str - origstr; - } - else - { - for (ch = 0; origstr < str; ch++) - *(*out)++ = *origstr++; - return ch; - } - } - -int fieldwrite (file, fieldp, delim) - FILE * file; /* File to write to */ - register field_t * fieldp; /* Field structure to write */ - int delim; /* Delimiter to place between fields */ - { - int error; /* NZ if an error occurs */ - register int fieldno; /* Number of field being written */ - - error = 0; - for (fieldno = 0; fieldno < fieldp->nfields; fieldno++) - { - if (fieldno != 0) - error |= putc (delim, file) == EOF; - error |= fputs (fieldp->fields[fieldno], file) == EOF; - } - if (fieldp->hadnl) - error |= putc ('\n', file) == EOF; - return error; - } - -void fieldfree (fieldp) - register field_t * fieldp; /* Field structure to free */ - { - - if (fieldp == NULL) - return; - if (fieldp->linebuf != NULL) - free ((char *) fieldp->linebuf); - if (fieldp->fields != NULL) - free ((char *) fieldp->fields); - free ((char *) fieldp); - } diff --git a/deps/snappy/snappy-1.1.1/testdata/grammar.lsp b/deps/snappy/snappy-1.1.1/testdata/grammar.lsp deleted file mode 100644 index c60a9938..00000000 --- a/deps/snappy/snappy-1.1.1/testdata/grammar.lsp +++ /dev/null @@ -1,94 +0,0 @@ -;;; -*- Mode: Lisp; Syntax: Common-Lisp; -*- - -(define-language - :grammar - '(((S $any) -> (S1 $any)) - ((S (Compound $s1 $s2)) -> (S1 $s1) (Conjunction) (S1 $s2)) - - ((S1 (Statement $v)) -> (NP $subj) (VP $subj $tense $v)) - ((S1 (Acknowledge $a)) -> (Acknowledge $a)) - ((S1 (Command $v)) -> (VP Self present $v)) - ((S1 (Question $v)) -> (Aux $tense) (NP $subj) (VP $subj $tense $v)) - ((S1 (Question $v)) -> (Be $tense) (NP $subj) (Be-Arg $subj $tense $v)) - - ((Be-Arg $subj $tense (Occur $tense (loc $subj $loc))) -> - (Loc-Adjunct $tense (loc $subj $loc))) - - ((VP $subj $tense (Occur $tense $v)) -> (VP1 $subj $tense $v)) - ((VP $subj $tense (Occur $tense $v)) -> (Aux $tense)(VP1 $subj present $v)) - - ((VP1 $subj $tense $v) -> (VP2 $subj $tense $v) (Adjunct? $v)) - - ((VP2 $subj $tense ($rel $subj $loc)) -> - (Verb/in $rel $tense)) - ((VP2 $subj $tense ($rel $subj $loc $obj)) -> - (Verb/tr $rel $tense) (NP $obj)) - ((VP2 $subj $tense ($rel $subj $loc $obj $obj2)) -> - (Verb/di $rel $tense) (NP $obj) (NP $obj2)) - ((VP2 $subj $tense (loc $subj $loc)) -> - (Be $tense) (Loc-Adjunct $tense (loc $subj $loc))) - - ((NP $n) -> (Pronoun $n)) - ((NP $n) -> (Article) (Noun $n)) - ((NP $n) -> (Noun $n)) - ((NP ($x $y)) -> (Number $x) (Number $y)) - - ((PP ($prep $n)) -> (Prep $prep) (NP $n)) - ((Adjunct? $v) ->) - ((Adjunct? $v) -> (Loc-Adjunct $tense $v)) - #+Allegro ((Loc-Adjunct $tense ($rel $subj $loc @rest)) -> (PP $loc)) - #+Allegro ((Loc-Adjunct $tense ($rel $subj $loc @rest)) -> (Adjunct $loc)) - #+Lucid ((Loc-Adjunct $tense ($rel $subj $loc . $rest)) -> (PP $loc)) - #+Lucid ((Loc-Adjunct $tense ($rel $subj $loc . $rest)) -> (Adjunct $loc)) - - ) - :lexicon - '( - ((Acknowledge $a) -> (yes true) (no false) (maybe unknown) (huh unparsed)) - ((Adjunct $loc) -> here there (nearby near) near left right up down) - ((Article) -> a an the) - ((Aux $tense) -> (will future) (did past) (do $finite)) - ((Be $tense) -> (am present) (are present) (is present) (be $finite) - (was past) (were past)) - ((Conjunction) -> and --) - ((Noun $n) -> gold Wumpus pit breeze stench glitter nothing) - ((Number $n) -> 0 1 2 3 4 5 6 7 8 9) - ((Prep $prep) -> in at to near) - ((Pronoun $n) -> (you self) (me master) (I master)) - - ((Verb/in $rel $tense) -> (go move $finite) (went move past) - (move move $finite) (move move past) (shoot shoot $finite)) - ((Verb/tr $rel $tense) -> (move carry $finite) (moved carry past) - (carry carry $finite) (carry carried past) - (grab grab $finite) (grab grabbed past) (get grab $finite) - (got grab past) (release release $finite) (release release past) - (drop release $finite) (dropped release past) (shoot shoot-at $finite) - (shot shoot-at past) (kill shoot-at $finite) (killed shoot-at past) - (smell perceive $finite) (feel perceive $finite) (felt perceive past)) - ((Verb/di $rel $tense) -> (bring bring $finite) (brought bring past) - (get bring $finite) (got bring past)) - )) - -(defparameter *sentences* - '((I will shoot the wumpus at 4 4) - (yes) - (You went right -- I will go left) - (carry the gold) - (yes and no) - (did you bring me the gold) - (a breeze is here -- I am near 5 3) - (a stench is in 3 5) - (a pit is nearby) - (is the wumpus near) - (Did you go to 3 8) - (Yes -- Nothing is there) - (Shoot -- Shoot left) - (Kill the wumpus -- shoot up))) - -(defun ss (&optional (sentences *sentences*)) - "Run some test sentences, and count how many were not parsed." - (count-if-not - #'(lambda (s) - (format t "~2&>>> ~(~{~a ~}~)~%" s) - (write (second (parse s)) :pretty t)) - *sentences*)) diff --git a/deps/snappy/snappy-1.1.1/testdata/house.jpg b/deps/snappy/snappy-1.1.1/testdata/house.jpg deleted file mode 100644 index 6b3aae8cdea2e7b272eab42135089e408e051f9c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 126958 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

0saig`jYPblUI#XO;yClvF9VxBlL z*TiPaSIoRNZTtT_nb^*7h-V4s1bR%KHy}MvybEl(Xuv)8FKIEYWA)s*lhtzvR?i(+ zJ$G=O8@Rzu-!#y(o|;I{^`20|>hgqoo-i>_n3yLjVsS3`Q?qIJ#6n`8P|p+Uc|tu; zsOJgwJYiy?$NoJ}<>CqTJn?RszUALK^ya3%Z96(y=Z*pQ(7bz3&zs&` zC-`k|3#^_urRQ3#Nj+~eF>gxG^*nA$&(*i4^jznsDLr>v`(v{oS$tD^zGBMEK27R* zlX~8ip1ZBR(`-Ozp~)haCKK}}^}NZ%yvZV#CiT3j#9VsNWMbZA5lfSL-lU#4spn1V zd6RnHbb4;iPg8oXyQE1yZ&J^jUfv8_*ISc%-t>xW@d+h?_ER?C_ETX?z?Q07bV{tA zyPaA+cTneI5urht=(&23m=@QACKqcF+5)Z9;W}L|)+6)@R?l5Wq32B|=1nH%O(y0| zCgx2h=1uB(lX~9trl|+&^>hPnq%+tulP$B)7gYcW2t_ zayQfbt=XEJ4*rf~QxS{(Kc=R)j4jIvD+rGe9wn?KtRk!?tRbu=JVtn&@C4yW!c&B& z3C|FoB|JyK3!hDjd6Qz^q?k7;=1q!ulVaYam^UfrO^SJwV&0^fH!0>#ZykHRp0I(i zk+6xdnXrYhm9UMlov?$jldy}ho3MufF>f+4Z&J*g6!WGNbIkxYF?aLUm$_+(d6Qz^ zq?k7;=1q!ulVaYam^UfrO^SJwV&3%jvOD_-`w0gK2MLD=hY3drM+wIW#|bA0Ckdwr zrwI`ACKK}}#k@%|Z&J*g6!RvEBJ@tO57?wiTlN@ChJBlG$ABC5-Fr&j@}^A7XMfL(rzIsrVu=n3%Vin75di zx1{7MGH)?4Zz(a?1Gz;dZ&ArxRPvTf%+A$M9M)Cm!xL5K+n0ZQItV%}n6-eO|j zVq)H6V%~Czxq1yHZ?TA_MI~=h$y-$N7L~k3C2vv5TU7FvH;sdvPMATMNth+jbv@gF z=Ft|5SX$m(w#?%?^VzaMEjk7Z35&SSVy?4}3!N{fkkONqIgx2%%8d25;JwElQdi&=S# zS$T_Dd5c+ji&=S#S$T_Dc}rQj>*!juQ@tkMVpiT_R^DP(-eOkXVpiT_R^DP(-eOkX zVpiT_R^FnLx2WVTDtU`a-lCGXsN^jwd5cQkqLR0$47O5UQ9x2WVT zDtU`a-lCGXsN^lD4Z=K+`y={%HE^kZB^@oDm5_28iHnZ}!#N4&~f!TmU@HR_X+7$D)#M~|RcC*e3 zo0YdI=5303n_}KpDT}^k?+l#nZgAfxS=53a;v?=Coig}x2-lmwhDdug8d7IVcZHjrDV&0~h zw<+drig}x2-lmwhDduf&8b>;v05NZSGubi`b7LcIZ#G-z2y|V~HK5t0?M=j7>&)jm z5c4*(^0v2#i!CNB5okYF%rz^wm6f}D8)DvOR^En~w<+drig}x2-c~7#yZ<2OZC01J zSzX>{DNCEBENzLoDqh+Wb9a*I7m1|I7~P~I7&E1I8Hc0I7v7~ zI8At&@CxBo!fS-r3Ew1qi|}p2cL;9~zDxKX;roPtBm6tzKM0eoTu*{CY&lCfM>tQo zAkgH0(SV!$FBx!?|7EsZVarvvTw}|1!VSVr15)y~vhqK+e%_{%x2fc9R+qO~zS3s- zO4}*94v5Xl-J<|X-lmebspM@cd7Db!rjoa*(PjPgl%< zEG8@=EG0Zhc!=<@z+~keD0xRp?xuqenWgm0xg#ZaEy&6{eBrZ0CGSYd|8O!L*zy%k zupKIShf3a|l6NN6<+gmK<1OO|mJ?PG9w9tRSV>q#SWQ?%SW9?}@HpWK!jpuj2u~B9 zAv{ZXj_@(U#|fVxe3I}f!lwzJA$*qbIl|`&e^2-a!WRhZ25I6*i`I7K*3c$x4D;Z?$Ggx3jB@(#1| z4zuzOv+@qJ@(#1|4zuzOv+@qJ@(#1|j?2pRpoNlmyff_RS;9HOdBO#O9!wVvxChfE zE_Ru4g>aQ{jc}cCL!kZKG%$A}kZ&4z#{_<0z$wxX4LC{rkpU-ZKURy5!A}gh=fY0~ z+K*LoHy$W?hf3a|l6R=&9V&T;^fD)<>mAvas znU=X$`MOf_2kZvARPrv%SGp`;=~BtNQgXR=mrCBHl6P6Y(q&5CrIL54Za|m+@^8{wz z>3Z`GxT|-80Zl?(rsQ3w*%w-U6!wOS-#R``AV1N zD_xeabXmUAW%){%uX=X*s%MwwD_xeabXmUAW%){%C5LBb)zVZsr@QNl68aRQXQ%kq`3cZ!Rh zCcI2|h43ojH3F2p%kq^jmAp$O?^4OTRPrvByh|nTQpvki@-CIU>y%uVi&b(rrJZ4~ z&l1iFw9a`0?h?DemWyn;q!y{mWx^H0Rl+p_l)URf$-CZ7vsiaBE5B(#RnA?e;58gN_todNgA zK}z1Gl6SpZc59Pi-zMBK;GTeY?-j1}yeZRCwCnVw56zI?o=J zyhkPPNy%5(@T(^!*BsKLlJ}_OJ*VX63hD71EIp^>YPrvj)c&gIDJ54**OQX#mq<@a z?pp3Q>o|Ci0k@b{a@S&&T&J-|CGSzmdsOlsmApqK?@`HnRPr8`yhkPPd3g;^BP|e$ z1fNhMlnE6=K&TQzLX7|=@3C;Dr#~U&&S}hb5(1RG$HJAKD_k*`e@}%gy8L@8TybZi z$E{72Ti(72S#YTiN;RA#Z68?q#SS`>MxW<4R z{8|I<5`N6Uw)@qC$F+{&3Br?vrwC6Io*_I-c#iNf!p8}pAbgVWDFU+c9>u&zG4D~# zdld5?#k@x`?@`Qq-a77dJz)c3BViL^Ghqv1D`6X9J7EW5Ct(+1H(?LqdBO_>hu&zG4D~#dld7Yx0gHJN7zp| zKsZP^L^w=1LO4n|MmSD5K{!b`ML11(neYk$V%}q2d5?AFJ&JjcV&0>e_bBE)ig}M> z-lLfJDCRwid5>b=b7HQE&5HS3^V-zZ`~UaJ#CC?GI!ibw&?I%^t{K!yvM}6$HctH#Js1(TtReCiTSqsHPZhw`%$Gy&%0&dxAuD~Jr=R_RKy}Z z?=dm&dvBfJx4rH2_Jz;B^xU_{tuH;-v$an>?@P~Ruze=xed+nzCmZ-9vuX9Z&&0gX zB9^}N+%5JFuJb1bbVU2oa|iEY%YB4*8;}I_rRQ#)KV^&6b3I7=O3dA2R?l6_`^-9e zb*oQ3?^DnF)bl>|yiYyvQ_uU<^FH;wPd)E@dD8<~Z=Z>I-z&1kCzJ?fLWK|zsseLW z^}W!5uHL>rk?49*=QYK$}M+aO7dfsPZ-gk+) zwr2I*Z2)@SXJX!GV%}$B-uI?)r_%{D2r~(@2(t-u2y+SZ2=fUG2nz{|2#X0z2uleM z5*{KvEHH_AA9~)Gp1U*hA+wZ&4--COz};9MWy@a@keK(GnD?dUZbJH7vySS@`z&JV zvxuedEi;R`i+4F;1>q6GqlA@&RfN@qHH5W<#|V!To*+C)c#7~e;TgiS1c-T`iFu!i zd7p`SpNV;&iFu!id7on5reQzCyu%57iu#vEdu$i!hu$8cl zu${1ju#>Qhu$!=l@I2uK!i$8L2wx=F#N1t@UuMf!2oUo=i&**;^FGDAPciRP%=;Ac zKE=FGG4FeO*@JzA{e%OAgM>qb!-OM*ql9CG6-?M6El3%fd22ZFC~|o_NnB3DtVtu-lvlHspNesd0(GJbUpZm z`euG_^jXBxr;_)nK#93)xz7&U zCguayl@Fxk`t2}aVm?q2i)(q0*?@!h65eM(Uo9U{$p=*O0hN3}B_B}92UPL_m3%-Y zA5h5$US5MU7t(-AKA@5hSXVw^UHQN(a|0DZK&TQzLXA)-M1%$*CM1L=p+#sDpyUI- z>N()6o&&z>IbadXfJH0=D*3=ExsE6j^8t%k22}C^m3%-YA9&N)>*<6U0yFasyqN~v zEi=o2eg_P^*<5E1VJ=}FVLo92VIg4=VKHF|VJYE3!b60I1xCpSQ1StbSO!YW<;?>o z<^vV6=*RMaMJxj*<^v|?119DJCguYs<^w6Yo41gd54>fz(^GFH=4bvd8!Qc2$}(Un z%YdaU1D3K3SjsYBDa(MRECZFYxU;<0?ApO&>W40d$Jz1(;YkDT%6Q7IW1qbPma+_3 z$}(Un%YdaU1B&^8Vm_dl4=CmXiur(IKA@NnDCPr-`G8_RpqLLR<^ziPz+1>?G_W>?Z6XJWqg_5BMdP0Tc596Y~KR^TDLL+zQNqUt$@k zy4+n=Uo$&(@O1<3+WALz=bs4QApA4oUkLw7*h|<)*iSe>fS3>XC6nh z94DM0oFtqgoF=?XfS3>XC6)mb^8pj{0Tc596Y~KR^8pj{0Tc596Y~KR^8pj{0Tc59 z6Y~KR^TE9@vF!cd!s&XJo#7DA63z)U`x3Hu z_28y~+T`kf(}3J|z{Gq&Js(id2hwxpF$3!P!0EXT$j{h=pR)(h^8xjIKs_H&&j-}= z0rh+!J%9gXJXX)$V-AV=z`JF7;2w>)ZFeT?+#%e(SI{!_rcBE`>$XGbdBLtTq@E9@ z=jlny@0)ehgQ4{Ny;J6Z45jD#8qJV;K4fA(WR3ZddOoC{4_!fvIj2L`m=C4rt_SzA zJMT82V=!cm`A~Z9*14aHSv_~_SUq=O^;|z8hthLhy+i8xka|9(o)4+#L+bgEdOoC{ z52@!vFK;^Pj%dMv>p@X1I`BTBM1Y(GE}sc~y{Ld10%TqkBr z!j`65)NAPZ&=s_(1$sWDo)4+#L+bgEdOmb|uJPD{7B?OgvA4<>N9rGbGHg}hOnD7w;`Vl;op1XByV(!*KVm@SIK9rtoA|F!E zhthL5Z%y=EXMUMI)RTE@xdFW~GNhOfDds~b=GwqYvyPhqR&fKX?WQL)=Nh$WowZs= zXYnyDCU~6i1mQ`-Q-r4p&k&v^JV*E#;p2o)5I#xx6yei^&k#OK_#EN$guf^J1K|sV zb%gbV4TOz^O$3Pf(A&b6t%Pla?SvhKorGP4-Gn`a=Ls(mUL?Fk_@Y3U%a;te+3Cw% z>??$?60DfJ+tiA=1Bm&MiTRL;`H+eEkcs(_iTTjm%bo5c>?a%`93&hf93~tg93>nh z94DM0oFtqgoF=?Xc!lsP;WfhRgl`hQMff)1JA^j~-z9vHfW&-AF&|RQhfd6Ox%{Wu zz>0}*o#EEb63z*<&Upjw61%{bi)^{17R^AHs%0Nh$wyLheHVDd8uJko z^AQvC5tV$z#C*iWd_*N5QOQSAay>#vOw314$<4Jh;vW(kF)<%e$wz$cbEL#v7BJ#h z%SZfb`G|k#bHv1aL?s_l$wyT35tV#IB_C1AM^y3=m3-vo?P;{J*@%hx$SbnNCzJ?f zLWK|zs)UeGBh(2Ip+SfV2?0tzVvYHTN2@aKfTAWS1nC(IzsB+MerCd?tsCCnqtCoCW=BrFn`xoRXO*X%Nql52VzQOQSC z@)2vyM^y3=lzhY*^ATVB9Pzc!5fk$fYs^PX%tuVjM@-B|Ow31A@{yF>&0A3Nk+;ko zf@i*@%V0SV&I-aKghvT039AUJ1v0@*FHzg z%16w~N6gAc%*sd1%16w~N6gAc%*sd1%16w~N6gAc%*sd1%16w~N6gAc%*sd1%17Qh z9?|uL4TOz^O@z&aErhLvZG`QF9fX~PT?8ok$b*uP_|@_ezgj+GRz6}@K4MlrQdaJ6 zMkx7+Ut$^YODrQ6v5Z*6GGYn5BP#ibN?a%`93&hf93~tg z93>nh94DM0oFqWWM;?@X#IKf*_|@_ev+@zM@)5K05wr3Uv+@zM@)5K05wr3Uv+@zM z@)5K05tV#IB_C1AM=mSZly-*4;4I;sK-1HC1MU*Lz?O>!+{ATBi)o$9ge!!rT<02F zt`lx>F{|YLiDz0R*WYCxDJ6F*_Cs#qM+RiABPqG-=uf!VPX#(4R>}4Abi}{yIpUXC zMoh^^Ovy(~$wx}b<@6(_%fnxl>7O%#?i0lzhyTe9V-5%#?iW zP2&NXPME=?Gt+?U!7MH|n=pqkmoSeopRjq6 zV=DQWN>%tU>>}(Y>>)f)c!BUD z0V(;|DY+hIHYIltGbs6(N3z!ePP@!coF8!g0b0!b!p@!fC?GgjWc!5|EPr|4qGjx8&A&r+eVJYhBa25;CD zUtrdJfZ^W1+N+;GpY;MLY!tBZ)bG5&nMWm`MeRf)m29+i9^ zm3$tRd>)m29vfHYQOV~?$>rMfsO0mgt;C&IcES$APQot2Zo>0~7YHvBUJ~fsu}bbvmzTNN*9c!He1q^!!nX+DCVYqRUBdSW z-zV%L>?Q0Y>?a%`93&hf93~tg93>nh94DM0oFtqgoF=?Nc$M%P;dR0rgf|I4ApDT< z7U4&P9}|8;_$lFMgr5s^x>zOu!|ybuo#A3<3Fo-Zc?0egyTHmt18(BFq{Z|(mkC!0 zR|(e$*9kWaxJ}Ep zDtU@Zo?=R#VoIK(lBcNTDW>EprsOG?lAEtFMI}#B$x~GF6qP(hB~MYwQ&jR4l{`fy zPk9sU*JyuUh))s$y4klPqCLg#m1GCYh2MD#AXjP38mDy@>e59$x~4B6dPAkY+OmP zaV5p~m8X=FyDbmQ$Ecey#m1Esl{`fyPf^KJQgSzMp>ZYU%{QCY{VT-6jSmPQ}Ps3@)T3@6jSmPQ}Ps3@)T3@6jSmPQ}Ps*JVhl>QOQ%@8jf@= zVI5&TVFO_!VH0690ZN|opyVlU8yAC;r})0|6yH~#V&h7RjVmcOuB6zwl49dZ%BAGG z%B+&R^FT^IJYB4kyNXqEcZNX8Q%uQIOvzJB$x}?pQ%uQIOvzJB$y44Q9-X~}eT4ml z1B8QwLxjTwD0#|*lBc|5TntK{;`_=|d|!ErjVmcOuB6zwl49dZij6BNrsOH6EprsOH6EprsOH6M;m~Wr#!3VZk=mf3`(BT`^w#7R>_r;r<9UAP5cEn@Jqt447d$gCD&h1 zQ|u*Axn6S3*HH2lQ}Ps3@)T3@6jSmPQ}PrWS5i#LQ%cFzHj8U|NK46G+C21;ono6GbCYZ&f1ZgUHno6GL+gH-AaYe^%3O6v7 zFpU5uPkT`EG+&6A_MqfxzOOvZ_m!vFxRPe$N}7!;X*RB;*|?Hs<4W2!uIRW~C3nXS zN}gupN}7!;X}x{Ltus_|ZOtmVs|=M~6|3Z~0wqsV$H zRPr>HJS`>H->=eaTuHNWCGE{OpW{ZbfUuD81mQ`-BEn+A62el#GQx7g3W8N~w{KR- z9YD#`>?KcA$_l{`%)PgBX$RPr>HJWVA}Q_0g*@-&q^O(joz zYj{A`64nvc6E+Yw5;hSw6Sfex61EYx6Lt`G5_S=G6P_o$KzNbx62U6D`|4k2#VWb0 zSS5D=B~Mey(^T>_l{`%)PgBX$RPr>HJnik_?(8M(BkU&}ARHtdA{-_hAsi(fBOE83 zAe&@D|}m1f=9?DtVepo~Dwgos#Q@E+x0UDrxVG z+4Os-=_Yg5fd0Uk_RjG`&l4^Pw9Z8X?#6V9i(MvMAzUR~BU~rk5a@Gm8dzw5YNn;+ zO3Bko$(?;c$X)1Y|N}kpW5#3etJMO{n4Y-m1ft5e9f|NYX#+5XcJk7?H zG*j|4l|1d;vY#^?_HDu)!rgmHp7BOZ<%3qqGg5LT-We)+hDx4cN}i#TXQ<>ErsNr> zEDtX4+!(s0w>?78NP8PLnY5RCD-S?!>w5*SHzrAO0Jka!<0P3 zlsvSNtuKF=4xjS95 zX4snS#yp?LAV`du8LK1SAmj`LCMFY zH$JDsu7PCt3HZX41(LG{}N;+C9ET?Cu|^WBy1vVCTt;WC2S*X zC+r~XBXC4uIXuNrWt%gbEsYlN>8zCrjV;ah}n6TUzrn1~V-kFt> zYY(zi@~o6x-I`e`xdcDUlsro%&$4kPD=RPrp9JWD0dQpvMa@+_4+ zOC`@z$+O-B`!!l~$WqC(-b7X=5hfF+5T+8Q5vCJn5M~l)5oQzS5atpdB0NlZgzzZg zBZQ9<9wR(X_!!~igijFW5k?6qLYj~vj1jT~pO7Qu2?c>p@}dFF6j`R^Sv}tADkZKH zah)i&<%@Vj5SnQ1UEO@+?#GEFbU8s+ZhdSbeiG z2Ll5#>a0?78Ff}l?q-^QHH+zOwpl5;GLI}9SF&te$$Im((>eqT2nz{M5S}C~A}l5> zAuJ^>%tU>>}(YJWqIm@FHQT z_lFK5p!+#hwobRFJS*GM!rsP?szN5r^^}c^;yC>!g<04fhPZp2HZ{N5*NEnxI(x}xJI~6 zxFOKz+%)hBYpq$OA8xO-2@eQ(56X4=O)eJQzeZJ&)RzLZ?u z>^^(ReJZ(6CHJZ1K6}Z1Hm>+oa-T}>OUZS*_%0sO3DXGE2{Q;Y39|^Z33CWga-S)=&y?I}O71fy_nDIWOv!zwjVnHt+^3TJRC1q6?o-KqD!ET3_o?JQ zmE5P2`&4qDO744WIJmWhb%gbV4TOz^O@z&aErhLvZG`QF9fX~PU4-2PD7nwZ6`zeO zJ{wnjzL(smlKX62@u}oKmE5P2`&4qDO72t1eJZ(6CHJZ1zPE>i+e_F-*iSe>I7m1| zI7~P~I7&E1I8Hc0I7v7~I8A_(`)pkC*|_4famA;S`&4qDO72t1eJZ(6CHJZ1K9$_3 zlKWJ0-zm9fBq_PgGkxz22X~fmPM~$p8*uae1y(K^aJPj^gv(k-8@NKaO1MV2ZoqBr z1}irWj14E^w+-keh`v&CXKcUZI=?cY+{TxZ>#wIimE5P2`&4qDO72t1eJZ(6CHJZ1 zK9$_3lKWC}Wz;^E+^3TJ-Yqi(J;dqrz2rV0@ASR9_mn*6jhJ=r*v6Hdlw3zAMSNSLHwJINC z<)2m2;66;4z;zzvIup6rB*J8_GllC+u@*I^s=agJ~ZBuf$*GS28RPvmcC=5E4p+h)^a}2vtIjP$x79O#+lWMu@|?GZLs&~#M_5nTK-fsw zMA%H&LfA^!M%Yf+LD)&yMc7Svp6~(zDS6H*x#oMMC5LBb)zVZsr@QNl68al#40Nx~_@X~HXnR|!bT zb5!yil{`l!&r!*9RPr2^JVzzZQOR>u@*I^sM&r!*9RPvm6%N~Q_ zNN*GF5boYn^1L@f_36ltu2~!AD3DXGE2{Q;Y39|^Z z33CW@2@eq-COkrblINL{=c(j*DtVqto~M%MspNSod7et1r;_KLlIxp8<4T?>d7et1 z_p%&LiO64nvc6E+Yw z5;hSw6Sfex61EYx6Lt`G5}@RHKHiz<D$3Hu292?q!V35N)W2}cM=3C9S>2`30A2~hGp zAMecb@ycfPA< z#yrlLVP77?Sp(`F$WzJlRPwxcL5E5kxM;xLelDq^$^SCp3gIf@8sR$OhCrWl)4(L_ zrgg-yg(%{P{|8U$;}ZhNXd1pE=b88+;4{9;BO7+D=Dy-ydWia z6|3ZK->j0m4Ok_2V3l0wL4itMppqA;jE2B z3f@FkCJ`nRrVyqQrV*wSW)Nl)W)Wr+<`AId1vah}*tk+)<4S>zD+MZffl6MWk{77t z1uA)gN?xFn7pUX~DtUoQUSQ)&fl6MWk{7%zhwT$`ggl`j(0N@n;7+lCm5`MZD-kPY zRm?nE;Csmn?!DytoEq1ub88J&nygqQcl!nf$&Abmk3`be1))vu$Hinu%57iu#vEdu$i!hu$8clu${1ju#>Qhu$%Ba;RV8r zgqH+5cfM-Coi0%F0#ot=mApVDFHp$~RPq9qyg(%{P{|8a@&c8-;O*gF??a%` z93&hf93~tg93>nh94DM0oFtqgoF=?Nc$M%P;dR0rgf|I4ApDT<7U4&P9}|8;_$lFM zgr5s^y4aNb;pa5ppW$L>3Fo-Zc?0egyTHmt1L_AUc$ZYsrY{q&5Uvug5v~(%2(;HX z4Wxz>@!JOU62yX(Ty9#BlDpaeS7tFcss7r48^Ui4I4k>k@1HB`_&@5lUW^l56HHQpt-{@*?JSqC5T0*^pb6P_YGO?ZazEa8)cPZ6FYK*@_t$%{LIw2EsRAfqCWJ+G-8&`^a<4Tc@D@8W06xp~^q>>k@r4X`CnS@z{*@QWSxrB!Z4-+0CJW7C)2TaKWrsM%r@_;FMz?3{-N**vJ52)k;l{}!5 z2UPNaN*;Jw?zK1x#9RqWKrs&}<^f-Y81Pky0kiUeS$V+!;TiB%hymYD9`Nnt0pCs@ z@a^OQ-%cK|eI;P~O2GD&fbA;*+gAd%uLNvg3D~|8P|O30c|b7_DCPmhJfN5d6!U;$ z9#G5!Zw=40wS;wq^@I(Cjf72v&4ew4t%Pla?F5K|qx%-vlKVjeIn515q)%*q3A4-d#* z!al-&!U4iT!Xd(8!V$tz!ZE^e0>nJv|L_d>KRg4ruLNvg3D~|8uze+9`%1v}m4NLl z0ozvswyy*f^MGO=P|O30c|b7_DCPmhJW%_J#60lM@PM2poD=92J8!_92NzhmXuzE= zm$aDHxy;HHR<07R5v~)gm^(YOVy=$zK6g^z=u2oKI9pCBW9h|R?I_* z`E)xUgcS3TVji-6C8U^#%*sQGdC06hWL6$h%tMNKC^6Sxm_ugep%Zg+rwy5vhwLa1 zCFZ(ehZ1w0AtA*)q?m`y%0s>iF{GG>6!VZ`9#YIhig`#e4=Ls$#XO{#hu#G9{YWE1 zih1b7++07Q-n*h}F64VxLT?H;FqJTkFr6@iFq1Hg05K2wKRiSJ56_V8DK=OY4d`#ZA(cF&l803CkV+m>$wMl6NF@)c z_hJ@{md%QprOqc}OJ>spKJ*JfxC`RPvBY9#Y9eDtSmH52@rKl{}=9hg9;A zN*+?lLn?VlB@ewd_RF%lL+Gs~tRt)^Y#?kTY$9wXY$0qVY$I$Z>>%tU>>?m552@rK zl{}=9hg9-V9p!FDvr7Kfdvs?*Rvxl_C1m?b$o7?x?JFVMS3%aFB3_aF}p}aFlS2aGY?0aFTF}fUG>El803CkV+m>$wMl6NF@)c_hJ@{md%QprOqc}OJ>spO%Q{Kx{GA!j(!vxIX3-89b|aJR+_tXwqUPQFW8OzT`G zTp?WLI@egaPPjp^O0M>mP)hzc!}&aYVcHQ_g0?6<1ufV^YC`O@zM8qe>w zju!g^D}Q9=PptgefIB*WA^e8{J>C>j$wMl6=-o1lz4adL!EFQX&UD9sQF73SlZ?8euwN24N;)7GXAF4gpzt ziAr9gl9#CDB`SG|N?vkGu8~?L*ELsSR$gLOUSd{WqLP=Wa#gI7yM04e zUV@UBn3b29m6w>6mzb58n3b29m6!P5l@gV_L?tgt$rY)Wq~z|Lkdj-=D|z#E2z2T! zAS@(2L3om|h_INjgs_ybjIf-rg0PaXim;mS6ya&YGlXXepCo*W@EqaOgwGH@OZXh& z^Mo%DzDPhvd5KD1qLP=qHC$&cVI5&TVFO_!VH069VGCg^VH;sPVFzI+VHaUH;d#Of zgck`f5o}8C&R(nJ4xr>EDtU=YUZRqhsN^Lod5KD1qLP=W zI7m1|I7~P~I7&E1I8Hc0I7v7~I8Atk@G9Xo!s~=L2yYU8K=>iyEy9loKPLQy@KXXh z%1chkHH+Ey6?cZ5;W}pt=LqKs7X+H(FB))D{3R}SnQ(=0m2i!4op3{-&$($J8mi^n z2GqV%QcA9dh7wcq5>xUL-@8&`N?u}0USdjKVoF|ON?u}0USdjKVoF|ON?u}0USdai ziAr9gl9#+&_81I@eVcHHaQB{)N8X63e84JsBqi6cmxxLpQOP4Jc_by*Gqe%gS0X9- zLhG}Ulw2oLL?w@?82E+y9n7MTs`FLjYi$yHfmDvCKGrQ~i1%S=UqLBy0i zVoDw{C6AbrM@-2hrsNS*@`x#U#FRW@N**yKkC>82OvxjrCkQ7ArwFGBQ1XZ=dBl`FVoDw{C6AbrM@-2hrsNS*@`x#U#FRW@ zN**yKkC>82PRTXzSS5Fp-5Czzp^>ZY393xyZ^TRdn~bOt?b0O1MV2PPie^ z9^5oAc{mZjZ9t7H5gS(`DtRO&cXz{In{|}IL{##KN*+4UE5R>I$sN4k z4BHLi0|s2>0m26j=u|FK$;(voGL^hcB`;IS%T)3*mAp(PFH_0O-UPD;`tea_N?!IR zvNDM``ny1>dsRxYWc+43^s3gIf@8sR$OhCq98(?DgYmTwzy^Yt$bxSQrL z3BNMnCRHeTnMz)!l9#FEWh!}DN-n1_Q_0Ixa#um)N?A(o_6?0IWhwawhvR{gmzk26 zy<27o>QyPTm%Pkg@-lnLE8d7%XR6(FMM^$v2!C~NYZWQE_MpO)yh0_fu$R2T#+3>i zS1MHU3YEO#l-zuc6*jI^oRX{ZKC^Gip(<4Jij-VmV}(jyp^{gWlFPy?>?N--C9klT zyh0_fP{}J)@`_V(?dU(69o4l^aZ0YrhgkV%d#r6(RH2erya}v4NSH{NM3_vNLYPXJ zMwm{RL6}LHMVL*PLzqi=i10As5yGPcq~sMUd4)<|p^{gqE$t&z7uRzHw zRPqXyyh0_fP{}J)@(Pu_LM5+I$tzUy3YEOVl)U2JPOfi$z8%hRMq6M&iFbu5d4(x? zg(-POz2t74#X30J^b&1Nu+)H?c9t1%C)IMTV{UU5rsNf-Qhu$%Ba;RV8rgqH+5cfM-Coh~nPF*L4JsN@wYd4)<| zp^{gqkrBXD?wNVL#yj;UM7<;V|I{;V9u4;W*(0;UwV{;WXhD z!mEVW2(J^~AiPOH<4T1}UZIj#sN@wYd4)<|p^{gqG7IeV*8a<|R|t)t3=23%z#w>F6|nJ|Sgl`xGkoiKwiQ=mPVWx(yh zY*yy5GM5#rmyTAY?~OI z=G%b|VSxeZb(Kn9rIJ^v$QY+ zg!P0CgpGtvgw2F4gsp^agzbbKgq?(4gxv%vd6g-7l_`0ZDS4GCd6g-7l_`0ZN?xUs zSE=MxDtVPkUZs*(spM5Ed6i0D_4aUZdkOmp`w0gK2MLD=hY3drM+wIW#|bA0Ckdwr zrwLH#lJ|LYu%D}1g#CmAgoA`bgu{d*grkIG zgyV!0gp-6*gwupq2(J=eBOoQOQORpm@*0)AMkTLN$!k>d8kM|8C9hG*YgFrws%YlBOt?b0O1MV2PPie^9^5pb)TG9jAl9Vh z3Q=oR@)~=|Yf^GI!~Vu>&D|G%%MX2r@H>I_;P(dHG57;3e`E!XD>W*4jY?jVlIx8t zH7a?HN?!AB+0Pl8?rp*y1I{z=-c$0rH)1N&|H|xjT}nRDZlF#jud|oD&Xl~)l)TQA zyv~%o&Xl~)l)TQAyiO&rvvH-)l)Nq_SK~^ZDS4fbch;rky4TmGU_Mj z&Xl~)l)TQymAX@MbN1GmlGmx^b@r0ispNI`lGmx^bvCZly$SYfeD}*RpYxyromF*j zA}fP$Sd{4MLL;6QJaED0!VqUZ;}RspNI0rBb(RPs8Nye=iz<3e@zlGnZYW(03-(VC5LBb)zVZsr@QNl68al#40Nx~_@X~HXn zR|&5XUMIXkc$4r0!Vd{=5q?DYG2thKpAvpX__;u*%fB0tlGnX6Ti`B~>(AUM5^2TqRs1TqoQRXs>S?C=S)~Z3FKa!Y>Rs75k+D1u}J}&DWMlIyrNq~ss62eCmVZ&1k_QgXe1r9mZcNXcF0KJ%dq zZ7|-Tk~gU24X5PhJ8ekGbyhX_cxQu3-eBWOgDH7~DS3l$Txl>RZ&1k_RPqLuyg?;z zP{|uq@&=W>K_zcc$s1Ji29>~68r|0yg?;zP{|u? zTxob&?zKl<(ttKJUMP8kDS3k_d4nl=gDH7~DS3k_d4nl= zgDH7~DS3k_dBfYoz1~aMN7zp|KsZP^L^w=1LO4n|MmSD5K{!b`ML11(h43ojH3F2p z!IZqgl)S-|yup;b!IZqgl)S-|yup;b!IZqgl)T|ma-A+#$wzER*YM7mz5enL&KhvH zl5-r-dBO#OZa){f&Lu8(nQ(=0m2i!4op3{-&$($JGZe_T4d~5&4W{G`rsNGNxtsle zZPsx&iQgD-HwmlcZrJabio2MQk~gU24JvtqO5UK7H>Bk5bN<3T_z(Lz!}0tl;lBvC z2)7A$47l;!y{F_&Z^Tsor%lP5QgZ#vji!`byVGP!-jtH-cTJN@-jtH7i={~=Z!#rs zG9_C=5E4p+h)@=onXln^JOjVRg+??(#_txQbPBSFuX&z$&?eacw}C_P^*e1y;#*FKRL+Z%WDCyd@>K zlV#JJZ#FP}k2bJ?TU$tYg773^5n(Z5i9kncsR4J~ml2lR#fH1Hf|ZqoRR-L5wc4&@ ze}^~ucxRK3cQ*NWXOoR9O*XDHspL&6d6P=sq>?wOpX~=lE+HPr4g}|T+f=tOvz&^ zc}yjbspK)0Jf@PzRPvZg9#hFh zpyaU!C67I;IF2S|xXjStWNjKqz_4 zlsr~S?mpBixzj`_dCbO@n2jqj8&_f~dFdntL#8!?p`HYIOS z$y-$N7L~lk#+86}2t`6b2ni)ZL?{y~gesv%7%I8WM62Y|_?An_Rk2F$DoDv&Q1X_PT$5N! zO70GURdP)`Eh)KM%%47O5UQ9x2WVTDtU`a-lCGXsN^jwd5cQkqLR0$>iU1{VQOR3W@)ni6MI~=h$y-$N7L~k3C2vv5 zTU7EEmApkIZ&ArxRPq*;yd@<+^Z#i|JHwHlC7cszdOB~w%}5tmxoE&mT$c!!30Dlb zDf%km8sR$Oh5@(fn+8U$o3^CnYC&xAjVmoSuC&-o-lCGX_{NnMmAs{1a`&ND$=zN< z$y-$N78_SuY+Pxvm%K$KZ%N7ZR`3>;yhSB%dAH24m20=yOWsm1xuV||Q}VVqV%B-u z_L8@yxn&6K?DP2dI|BupesB1|SsAxtGqBTOgEAj~ApBFrYtA1DY?61 zx@OA`tdcwEnToqIq2z6);a!+C3g0j1<^ zrsQp=&l)TN9yv>xn&6K>&l)TN9 zyv>xn&6K>&l)TN9yv>xn&6K>&l)TN9yv>xn&6K>&l)TN9yv>xn&6K>&l)UY&(LvOu zy_T?!u%57iu#vEdu$i!hu$8clu${1ju#*5KZ!;xtQ_0&@@-~&cO(kzj$@Q*+HkG_h zC2v#7+f?#4mAp+QZ&S(JRPr{JyiFxn@ZlMlDDbkZ7O-2 zDS6vF!(pE#oD=94eBOYYxGu1Ak(EoT=xV%7xI(x}xJI~6xFOIU+%%w+yv>xnEhTre zKN?rsRPr_-?`-q&&bE}?4elN8fmL#)!esN@|su5?^VZqD8g8&^7PTqY+UJ3$vaf?4wbw^CGSwlJ5=%xmApeG?@-A*UY7gj6LJELCvU)AOa%k( zAQrh!KnMvXLPRJNDg-EbhrQ$-_L6tlOWvW9cc|nYDtQM=-l39rl#;s(%PP48tK<%# zC5LBb)zVZsr@QNl68al#40NdlC-LnZG}$vaf?4wbw^CGSwlJ5=%xmApeG z?@-A*RPqj$yhA1LP{}(~@(z`}LnZHcXE^M$gmVJTNaqc>dFKKv7g@QaicY@Ege!!r zglmNBgc}0w!A%377*2z48&EHKhm9*8rsN$dxtm9SZPsx^_>DHL9sR99pJSEWtz(tk z-Ew}<4g7)Y{E?MEv0@un+}8eLDh}-9oqDNbM@sH0|7ABY9O*3sZ@owRcAJ$u29%O_ zn38wB5mR}_DtT8*t~9>Ol)THvl`d2AE|t8?l)OtN@3L{F%apuJCGS$nyH3f?f$y?$ zrORIOE>rR@AMfn4aiz<~m9A299gr?l@-BPHyHxTnmAp$O?^4OTRPrvByh|nTQpvki z@-CIU>rJp;GzE0MvH{IiUG|c9T`#$=pBlGTCm<#7Qpvki@-CIU3nlML$@MF^%U<#> zUxL`>OAxz!31U}D?lypwyh|nTQpvki@~)KJ&0E8i{J)Ld|L&2RZwERuGP0)ezp^?I z3pn#QKGB&;H=CP2))%*wkI^Df1_OEK?K z%)1oxF2%e{G4E2$yA<;-#k@-~?^4XW6!R{{yh}0fdTTh+wS;wq^@I(Cjf72v&4ew4 zt%Pla?SvhKorGP4-Gt`}FA!cNyd==M^Hl@x+CkQ7ArwFGBuMl1( zyheDP@CM;c!Vd^PB)moV5#h&#pAddZ_!;5n0-Y}ZZeXEJHM`y!E_Rl1j_aH^;AW%? ztXwqUPQFW8OrLX^aD{M{>s({yI^hQ4rU7N;U1sH7ig}k}-sO8&y3ESE%F6Xu&#r4< z(IsQWTv=b2uR`oHEAKKZ?=mazGAr-$y(?X2pGQ7PQFB9u3u3JAM#9?l_wH&rE3YrJfWB; z6!U~)o>0saig`jYPblUI#XRvQ*ssxwc|tKyDCUVbiHl7pOd(7qOe0Ju%plAp%p%Mt z%puGrJVbz)Cv0CyDCP;pJfWB;6!U~)o>0saig`jYPblUI#XO;yClvF9VxCaU6EDlb z`Gg!HPbd(Ign$qdN`#0|CR7Mjfte2yW##VlubYad=!98$LNQM$<_X0-ftV)}b3NCY zFe^_a=I%3*l_z}2GvPy?3A6HqVxCaU6N-5vF?aLUP|P*z`SuXlnKNNlo-ivSYGhkC3o^C1LwY!uFMf?JEh}R}!|bBvkT*N}f>36DoN^ zB~Pg236(sdk|$L1gi4-J$rCDhLM2bA36DoN^ zB~Pg236(sdk|*9C9)rCED0$-TXXOClAmI?o-ivdBTqJ#3{Kx z$11tI0jXDY^Q&6DoN^B~QFt_81KBKeq{Y3@92-sN_9w z#8lGneqHyC^rYl^2YHW5-eXqYlakAHdsOlsmAoeyaSDvL*c$11s6?Rrvjw+Bsr zPRw;$s+d*W-t*?$ogPj*3p5-ZkA()@rTv6m?A%aFB3_aF}p}a8#hv<(Ppz_v-?LlK1%Dl^)-_(xa01sN_8=d5=oo zqmuWi$#)?&PXJ1yy9atsTL!Lb^yzh;eO6J|K>%Nh`lw4VOpGw}BlIur7pDB4?O0E}@_od`I27M{{Li-n% zzLZ>Q*=I`Lr;_)blAGh!my)}6-fIVEXXQR0^6WDu@ADzgK0C_$Y+vc~A8+l)Mim?^DV9RPsKRyiXj7?_KFTCD*JjB_B@YYq-u@!aBlw!Un=d!Y0CI!WP0- z!ZyNo!Vbbt!Y;yY!t(?)uJozoeJXjM9p!zc)s?MoeXh&L0UK8aY+M;o$p=*Ofm3ob zgn>)R&9NS^ab>`c@&T26z>e~Plw7|=22yedHYL|BbRZ>n6`PXlN6vs9hV81zg0~;_UA9xd4nM9aOm_nFJm`0dRm_e9Hm_?XP zm_wLLc!=;Y;Ss{4gpUwDN_dR$IN@W2j}tyYm`4~TqzGw3hA>9R5`03AkS7!bI?0O$ zG+Pdsk`KI)l@iy9SShnoVWrASjg>kp4OW`0#H=7CA3(_mRPq6pd_W~1P{{{W@&T26 zASKtY`hk?(U5x)~_C_iBfJ#1)lDl~eN5y zZwZgoQUh*2S!Td}rOUOLCb1QSm4sD<)r6-APZORYK*&@D>5R z=*&Ixpioj2f4u?wtRWaW}7nyW4ot`M#gt`V*i zZV0poHw}bCfqdJ5URpAsk`Jil11kA|Nis ziF^HL1MX(@7XxmNw-0$L{vJ@t2UPNbcgt>VIPBYmJA}LUlziM9F_l?X$;YMSx&w|= z$;X+Jk5kFVspR8Qa{2iyNl$XP9-0glI!Q~xRl&M&wPx! zSjMH~Zl)QSin|!c4QPHGXG%WKlzd!DuD@T6OUX44j}PBYKD=V)o2|LZ0>VPV6ND!T eiwKJeO9)E|%LvN}D+ntIs|c$JPZ91Z`Tqg@Rm>>> diff --git a/deps/snappy/snappy-1.1.1/testdata/mapreduce-osdi-1.pdf b/deps/snappy/snappy-1.1.1/testdata/mapreduce-osdi-1.pdf deleted file mode 100644 index b98308ae4eba069d6402f781612de85325bf50e8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 94330 zcma&tLzpgHtSIQRZQC}#vTfV8cVU-p+qP}nw(Z(w^?$l=kIv+dvYt%VFnQi2 zGk$&;7guL9BRd$+>>6FIq%HBp-TU6>y7Tn31X5Y3kj@^)D;x7>qq-hvhv_K&dE0Va z45@h{E3Hr7Q%Hx^gp3f8=3_;w!9*dX^2wtq#<;_}HaBwnt9#1do}Im~KTlsJoxXsb zuRpYh5^rnne?On`ea;<1DvMcWZg#G+{;@mJW_Gf)jdG?iwRwDISqL+=}iuzb^o-TP^~_h<19^4z54<&rG8Z%W6e7S&V*r zqfvtz;$0L5KGz%q4qJMd{0nj?J!$Vrd80;KIr85J%s%F>B{iJyO$Tm1%H0%?Ee=~Q zxV8L$p+7MTAGOEu9dO8L>9=o6ol+bQdwy3+Ajc=MBD#F|+~1Au;Ce6g+K*{0x=S(L z>=MI3H>|oF_yF^%;I{{7FZVLIgv4$oxeEp-c^ouH?2Tp6g$o7gtob3E(BSt!AO5-{@UOKSIDR-5l-fpmrc9%R6hkF`k z=EpbU{_y3VbBI=mF_qc%<+I`=oI`rMnqin%+9!~gi`RuHs-U>>t;*KMLhpVqR|isZ zo+npX;^JLjKc^czXMcMZ3^7~9k3Jr@2sI1>JnT$W*cohnvnHAOXCP5QiqIN+jAOj1?U(d>}Mchaqt`K*^ z=>N1uhuaJ4!{d0cXNN+qPY8j>%xA!Tf089{dC&57EGq-o9FrINI#QN8owv z^zvpWNrA{~kvkD9qzw(N^9`FxLV*VFd(pa;pxd3eUbp&oZQ(H7QzoKNg{>GXVL z>*^mo&WR)zf%dba=7^igpytoZ+BJ#}x?hJ)QQx5-#u?-HT_8%O?+5I1vF^zss}giJ z%>9#~F{*9vhZ#*g41i6EysI3eaaiYg^QQ$8@S02ag{&@JjT{;h5v(RN2+vN%a8hHF zGvtv^OpP^ZBTjf9O+Ix3Su*rcmeZ`rj+*UE@r08WyZ6M~I#P*6iZL1Hi|dDGfbJOJ zFZOtuEW(}%AW3L0JH>?}g?@Au;;O_4gwq)z7LLn9sVc6*4ktWM`T-R<34~4k@DmGg zm74mRDicW6jYf^VF!#Y3?joc1T$T%h6gPW5rx(e_Q-{2k9k~7kLIt5lJ;S8_R`8NV&VV;x)X*<4tzNBT_16!pY zcW<=!mp>0%e6ZF|4T+pWIZ!gn2+;{9ro45EAvFm`*636#@@f;uf5~)3#erm_4ebKvgVa<`HN3%1c8^qg;AuA_bxOzp4xnYm#qGks zrWP?YIaaHDXSiEv#1Lj!65!7<+Hq)V(vh$-<>go1z;7l;|1}v`eud-Ba0QPQEw({- zNt^!?GtLD81F&Mnr&Tmt2t;0{BDF?bpNP_RQuJU^OOZu6*B%MNS^ZXn+?xo|P=$*J zL`eZVLQB#`o;!o!N+p78*x_|t){5c4W{srq6{ZVHYBIF3nYsr(R@x zY$QgHqj$wpgJPcMh$cIVZw8Yrgh$V&0PH~O6=;u=#LAYRyhB4tWNBe4LWW29)lOw{ z9~0!42^#ii&mV>gO&0@|+aITV_8t z4cCPh2ZDVBn|4}R0&^=g2(PYHU$4gkq3_iG_O*kJGp9?+BP%4@!Yq^!*%GZX=(0Te zmO9+Enft)mF5xClz*OtIpUrr!yP0^em*Q;!by9~I3Dxl`i0}xZ*A!8G(&*S;n zrSf`!cI$F--wy#p07o@acamx_O!d-xg`^mf3)o-1Qf_vrz-cHC^cF2%aRYNr_;^un zw?f^E07J5aB=~ff9Ju`|)Dh^yDFQ^JG=$;^mMA0en51n7+B zxlJQ=tHKO;-agh1wMCC$2O2+=mX0P=1IPG5Cx-HHuq^I@zeyGeM9epL7HhCRY4AG} zJg@|+3^;a+Vthh0-VT(^_LxV={mq+R{pV2zRXBtutG)c~d?ql|6|}G5Dy9q^S?4ex zX)vt8AF)y@=x{uumLwIiN}&G8-CgBS__^0(qvMr9m9!EnqRse)i460>Bq>%q<7j#3 zQP8U`6W0g9FKnSLt1-y)PFC;*+lKNTrUm^1lp(XQ7!-+P++u!3rVKycKYY7sG++r# zxZX3_W78*s`k@V}NvI<}CLjjxAO_ial$fTinu)UexT73Vg%xHv->tX{0CvjRvj=>P zRJrSg>6XipZTklGljyOs?XsJ+mgHe>5wF0R!%hl7N=x1cB%K;(0d_NrDn91gE77UP z#;T7=yRe)6=S~D%t5$IaxYViP?7#+F0hjp2H>B7~CtX_I8YggTJqVs9Qx=E#yC!ad z?u)Px%prbL@d^r;_;vV~>DrT~9kxaUJBIWmIFwrZQEeaL)`MOv$^ufP#)O-%(1qXh zi6IagDHkMka(;d^0znbQYPKXHla!=|;$YpFQ66an>Ztt9{=3YUyDQBd#MyI zeWmc6<=mkZgfhvdB8@RHz`8MHy-?rVr`(0D`Ri!??lXH9@~l(4ci0*zZ4$)KkWWf= zkZwwx9rF9`a|v0k?zmbBB@12}gW+jcKcdPy))F*46BVklXDv+xY+sZWE!{>WgC>3R zh&=hJ(5ifXpsf2o?*d$#3M6)$h*@2^%>?WNB>RIn%*_Uj^bDulgq=bCwghwARYc&` zCWb(R;}6CN*#Lfm!n`4v@d$axi|01+>Eu2+n)?>JiEGNd^5&H}KFn$LIIw@`Jv(8H zMWP!?JLUw5dQ1PBwL-BAC*Wmkx@}+=Pio(wqWZZG4;HNLL7i0zrEC8^qLB$0_(EH$ zdD@g%lAdMbaJ3K}g*SQsR+eCX5PP%!7I!h)Ysh49nfUj5)c1A1?cx9jqozFk#eAeF zEqQ;(r5RZdsd=YlN@>su@?!mETZvP5({%e4PHDe1?D{JNJ2^DfYPlGq%i6wRa{BZ| zY25;(K;4F;{8DkTXONEQ<#b$Q%RKa{VW`+VWnOB{JZ!@+Jl{zhUPE;`CPQR-QNi*s5-~b^ z$`}jH5^?bmxA&eGHzb%UA^ER;N`xCpctWDmt}xmKK1@1<$T}p*O2yt%Pz`8`CmB04 z0v&8n=ytHCcAmCy(;JJspGWV!K{>nwsUh5rr;Tb=;g5~#7ur%pcQOZZ9QGa^C=JFP z<;te)8Srm}QHiOGOB|exio(0|=rS1`H_c2?KSst|1{X8#D6xGbz2M=f<@v^@8N-Ob%sa_1obslMy(?e(>WvY z(!wS&7K!)LEA9yTf!*JAyQ(m<-BAXX&EMw~GzEvwzCsmM+7s=tO@WW%S$>T$5oTpn z5C6?G&5qp_mzzuAIZoE};Z(QN(!~vVJd49G6+Ein*uu`!p!uM!YwBXV;7mq_J$lC1 zn?!!#ySDg9${<5>nfN`a9NlQq;hPK3b6j-fLW5=7cNWaVJEwPu5y2!43`=UQztnUG zt!e`ivE#0GP!ZDWTVb!*mOkD_0_Clvh(-r1+i5#mmX2q+)C=&~432m>isq7GMH{>V zCZpg7FtcL=CRhQZS&n@=IB>Fk{iIVGU&N8HQ(M;woAFg}pR(0z==yuk1)loOWn0YC z0gKQ5HwF+xZ6b|Mu=}W;P!G?LnRLRl%rZk5VNl8rHB%GN@rGL(K#ve|UR9qjlH#sJ z#5&`1PKvolk`}>#5Q+Bvc)eNd9hy-_KgPq~ zpELj&Fcuh~pyP2q!?TR2-kmXM`0teHsCW~Jc#WO5!@V%kyyVPi1$~SK)}$LIaRRLj zI5l)*(6uLbf7&9<5_>%^Rha%f(jc}mL>`tI;pLhM@=1TLRn|H!*KTI9Nr)VUUs3EV zay^K4@*D8^RAxR4+Q_W&hfnu01I8bh;aXQ7KR%Bp%Ua00Y|;%-Sh3XPTd-Z0+Ckto zK&L!%+qrDk(#5AIu8x8PIaMySELtfxLyPt~4qmzmbjh%8m3D6^td&*SxU9cqzd5|& z?=!TnY^8W*lByRe5@An2$v{qQui)V93iAx!Lt!DAxgH@q2(BVt_S4)G%tp0)QzZ=U zjTe~~FsPjCAuvyt<}h7dl}91=c8vsaqqsP)J4?BiHJ?9KAt!g_7+aF-;LD=Ht%jV> zQ$?lNKdjwPmr^=X`~>8bMUoABaDn9C4N1rI!8Fdxil8UO5!)gdlH_9)9P$*n-O$4k zuPmFP>p00Ui>1tVJ_qF^_SXd4S0hXbWPQKBec_LNQ6-l_eIj(sjAz(_b(15sZmC>Wvzcy2 zhv-|hX`{`Ys6|d=6NQg0MSVtJ@4lyVb|Dd-&ed~_1Jgq;L1v^86B{S!Uw2uSvanJ= z;S?TzY|aQ=3{6(tEkrC%42cR+yv*3M^~0R(lc+z7uX*zR)O$>7UP(@^fOBUO*awv) zP-4l`crHu02Zzg_DE{T)^>W=_ciEUM*1S>_y=WC&+sEaKabYVJ+ zw7q>42&*(H+t9BhPLdBU(1-8g{lUHer|V(3+H(b0;%f*B(EtP{9DUwj&`f^|#h#oT z1S!o;Sqd(73*QkW-dJak^E2_ z%486l+OOoEHseYnERWE^LhrszF@+)BgpSpNA+2DA3QXSV#nR6ELtIvWBW@5 zC}7%f%@cYaiSTi!V#`|5yOD$%CjK+ZMB&RqbzL41xQ>5ET)MIA-uFJi*8qU~dKu){ zY9pkF#c>~PSfMB}C?I$C0l!JRF%%O{r8K`&)51sr+e(JZsN5Ce~xVv1I_MK-j~fRDG2H?$#o*%5xn z?Kbk;nft&BTL~?gxvPBRBg$jUPwoAdoN#oBMcHQ24P!#2Rc?GXN@+lCD_Z-7&?@V@ zfJ)=RYNdrZ+s>5koowqVZQt$$QF?#o0Fq7_4N@l(go$`zVB~LFWn)zb=q|QjI>|T8 z5T~Ho$9A1YK~&KxC|oN53!0^CkK8k1zrtA`B)-JUc8H3*>?Sv^xR$?*%e7)?el&#= zQ775zZ3KoOa!-FWf%OlRY^Xwmq1}WFS!qRqpd6H~hKs;4k~}7=;CqC!!WiOE0bS^m zP0{N?8F^&UO&31pfV6rnZm>-iBBe>gk+E=<(XP{k62EMuBA}aeLMQf7@?Y6lf8BJ~ zs1+ehl&Uin2qOabB388pkH_V!Z>r?@9Qy^N(3A~BWL@se33gz;b}jXZQi1>c!8`=H zYuW81lkK22iy7p<5FJ_n=>6sR#P+u?vI*jsn}?OAyg5>J7hf;9gZWcJFQ~I;Y}|Ku zY@h9V@qk)?0)5{fvqD9ZR0|_J_Md2kpXoR#sO{++l3;lX&9&(O%j7vSP{}8Hul4`ys+9;1x%XK!H?HwqS*l{kW53>>Q-ENn(7hDMyM= zbx492Clwx;JW^9VeyL%nBn75B6UqYe9gsTahcQr~uE6hGhg{#!$Ev;^v8BY6Ry5i| zvVcAvnU;)yS^P$&o5*ipuW?%Dp;0g%5eBJ6lY6~y@3$vWbuLIuk=Iv$?|Ny6d6Oa* zjR+3sCXV?c6KDTsI#q5s%3{wozDf6)DZ zB0D!bE6o4Nu`>TJn`dSDzrpz#U9Grn@kIS;lix_c%mhR95kQ93&GlfbX&12f^+Ll_ zeb2g?hSE;+CCbF&gT(2p{V{SvhFW!M^ARw{XtckzItyzoV=q_ZuKp@|SM|={hrN^2 z!<&&UnNxwGzo}VM4hH%FzuD)Kit5!t-CiGG=lSyzm87Ndq2)k-lD= zwJ`f`zqgjpr9dk^c41wH{hHKI$d8-jpJA<%>iq{D5l({DAD0DHX=`+W-=zUD7rDb+`?3+PgVi zU|%d_pC6Wn_gD6X3{u3YHct*Covqa1D@J#PZ2a6*7XttWW`e-1R5|oOob$%do)3w} z1ds5K?>a-7-Nh?8<>5l!3W_B-~}!bi0IJ(ERq_kKO?EcgV8=Wli`xM3J~k+r$h z%8?PPxR$l}kHC$6*G279E)^P{_EGNEGY?FeJr~TN4H=!uz`U2axKacVzdGmJ;`x!R zdJGwKoBjr#tUSvR@<6&F*A3J2)KKTMLE`?saFcgT9Sq39BZ@jO*}lGeV?`!Twkxnj zj0`9lN%c5H+?%zngN0aU{~3lMlQg7Q2PCj#Rw+f%6M?}>-~j`oN!U-nO`?+`a}c9T z1YzxGRslZ$s2sDslSJ{pCPPc;0vtW>X?X7q)XPZE|RSqFSEm5R6YZ}j%?z5de z-{+O*p>VX8a&SJLo5Km93{_!@bsIu3xB!8TaliE)gc}I(wdLY%OTK+FxyICb)Vg>G zLLbcd=7wmFZf{f$TXHIFHvq|h4Qjj}%#@b-MF&QnjI(!-PTh9}QKj&gNHsJW2$R;y zu-DAI{Co=b*~Uz~lWair>-@#^q>zo;EH#DXAbLAljLlqeCYV-3xcW zBtszG~XYXs)BUh(9@+mzg=(jtLOFV-#h#%uU`p>oR#u3F)-DQ$E z?1Q<0HgiF*+951N>sn44qrkupb zwQn9xyLYGi`ozf2q0lC2a4tz66U~@BK9%QLlX0RC`10yc-q|- zm1yODL&pL$*$Nz}F*H_(zC<`jb#FR!C_|6R z(I2;bHevP%TRCP4kV#r@Ep0gV__g(qqatAeQaKyXyjw>Q7=I1t1!R#yka9rt&q)f}S0)zCpaoVcXl2HpTLvMdkE zahoLTp#+m_AfaOka|{gTNZB(6esWm2is=02L;6yr30OpC2X$_3Po?(j+yxDj>g14R z;L{ND$^KLK3LhbVfS0`W2!;v8WMi{DgRH~=E(xcK# z@i8bsI^lPk%&2!ZbH0b6aa;A#sN$H_X4|A|px%K_t#~)lC@`=YK*J3r$D*DiT<4#z zFMQXa&4wop^{@4B?@4kh%T1}foDw*=6!`4X%pV@3+ZJMYt=z)Rk=`4n>(%^;gweQ~v^*$lF||efaQiizNTO&n+>uzt1Ke;wtc?uUw-s%Ma7`j~zq&Dc+W;As zSg-vb^q4g40NlR>Uj&O9F;(CH$SMO=QmnS|>!&T~#4gOjU^g>i7F}Rxy#s+i3T{~$ z^1-ANUU`m$Iaw7`lJnb%At01ZCwiEWK>CD?Qc z8`Mk$7gdFH?&=N=n1x*HwoioLJGbe9KyMEI3TM&^#hf;W=RD9?7cnUSm)FKdq*kgB zr*0xoEAtLUM7@kdCmQhmLJy(tr!lZpH=dA@BmGT$`t%!Y#S~1XQ=@AXblieGIHNwp z)3tY+3Y`rd)n%&QLMSm*2_TdY;4g!|VS)p>Gh;PE8uXeJR6N{NbHmcI5b)uXsck0> zZ+QoCepY}KsB^YR2^FNonPz4Tsx!kcy@Jf!{=5sSn(Bf+8YRui`T!o02KO&9Am(cR&gc4AOiRNQNkr)lCyn zUyFzD@ymeI>gGF4I*{WCaqAenSEed)m!up~jcyhunmw?mFi0(^3{$46_5z%-@7SV4 zpj$SE3twDrIMTX*N-fZ2&QX^>H;dz*ytWnDkW757Q;qdr>Ug=V#6zqC>7{U}PTk1h zc!r!*LsZdK&5L8cs+$SAMV`n9UnmVusfhD(iz`wBg4P;T+sIs_=bIAvo<_`PsDWee z$e|&&qh+u7u2Db^EM+Y6)>kkL^2i6n(olEO7}K35iqy~gM!Yc31dCg=hWLgY_1C#4FDu`iBKNZco^Yvn)8ZH?!<@fpLeg%>( zx>P-5&tANb8^PX`%Dfngx>3>%lMU<<*j-^TJuZuR|4AGP@@9P>v-!EZI zb_A`oTpyX6slA&8M4-{b4>)!qa?g`~E%>UPNIIzTcz zpN#~k{=8Zl#U!q3cWx{fJm0CrCZ}@Ieiv5ehvV6<(TPn`{sAjo-AENQd-svl@3g%y z^T49NIPQ8HxPY7&SEQzf)a8tvG8a0;(fK{(1+xbck45R0c)t^@GJ;2w4?2%p2X%gb zq3#PIhV-cYwaf+A72L|?u0=dgkvd1qbmo7@ zd0)2M@Tm6ntuLNDCFSk(9z*jnpF8g80e^rgD{*q<&W;1H>em%tuP!gJ40e%NG;il1dM5Gk_or<|zChtmL`TjRi7`Zl1~ z;oH$fTDv4l-*1h-1M{nCY-So86WwO7G(V*;I;LTfwLaoB&?W4WZ#w0i$~*ZNR{u9h zYUtDQARY!;I$QpfsWHe1S^s&lCpjy5`Pr#08_X&g-1_7{40HoUv;w&7**S4(mf-v% zOql>JbtmhLAKE5~=wMo)V;@6`Qhge=l_YC)cHnHkz3Pvn2YX1{m`pRoUtc%7W9fno zEWM3km~ESqXQR@tOnPY)76Ky*Zd8~#1z9v3woS!fB_Yaz1+ZCRq0zt>@wqwJ?O!?=0Yx$5Gr}M zbhsoiZ~ijDxLNd9au*#ZT%Sg^%W-8I+A0)lsMhysHQu)qtWy88_TD!1pUxAw#zJEbpjJO_U&K9edB7gukDXkP+-2?8iG_IBf(xvY#CZ!66D| zMr=EaV2xHVTp(z(ys@66HLR9if+Of>MR#`JX=qBOL{J>0fJjK7G%Flj#g{9ZoQCb( zy6?PaV>c3K**|UHIgmV4q+Sh$tLUtL6FUWSb)17n^S82OZL$#+%-Exsd2Ks}7apt{ z^c8`Tm@!W6xWlUBburgAY?1AtxxnZuI{AOFvD>o9@eYhl@pem_h7>ut0`)C&Z~^Gd zQMi6A@-ZY_EbVb%#h&k6j*I@C{#K65J0&qXvdpI-94Aa~7jMd1&|UpR-*if_80#gZ znL_|g>%^}EUC8vonSzx|xcuUNB(&$n=i#drDYsK}g$SZBtW)RfZfc}K1J@GP$4@bF z8ssk~8w$oksWcYw)1shhJd_405Waq+3~EBj#zR3h=C2fp{V`fJ)klUlg||_%x(ZrA zYorcecoHJ3mE8>|iNHb7!8twgJwaL!l#x#f4RaZAnTZiBx&3N49sTO-vCuHyH^ zQeRtu5hYcg$k`5tTCnq8QaCzl09A!aGZU19zC{vi%D;r{7d8*r>b?19*`V3a_1_+w zud$UbRBp{*oPQ}D2@Sn!MHk7}-+IUoRAGZ%UO?noAiKbO))a`efV2+V>w%s-G0}&d z_DZ2S!w2c;sKaMzZaWu@edNU6jzcJgI3)V7p5kuT7qvqTN5q5J zo#c;|s-C2Iw3(FV@cg)oC}f5Oy+_y$4Ar;fFo{y%!M}?Odk?GwxC5t~+maM5KPpm8 zGW>Uaq9wshmf0vV0Ub8YPy{MxOd-vN>kr6`sybIiDSL{To3*flp+(yqy^kVQ^{eVk z=(iB|T~ewy0PBu?!kqCJttw5CbX4`#NHgxCKO&XlTJZ*u?dVS4p;kG!+1gz{u=;|R zjR@Y`sfnxftQU>rO#U+DcvLE3jmM~;fjATe65)P5> zV#$uy*Y1tUTs0QKRU7Qt`MDLqOhC0#6*_|IyiqTY<#h*GLg! z%-#ZRW)Q=C5PV%hk;_eB&v9TLef3%@1KW3FKZFhGCyF>XvI{u&x)9y1`#~QN`sI)Mt_~;;z`nAA3_jR^1lZAAiHFUa3pQ zb2DYSm!o|jCxHx;!5^^^lXUt(7pEBcWxsTbtmDI(M};I_c3P~iQ|h3U{eS^zYO#UO z{g82gAYWyU8E0Tv@Ja#jJ0y_%27oGoR>-e}$>nBtE|`kA(Tu-5B%IT=JZ@r=!<6u3~-72^IqLQ=LEvKsIga7+4|(MdgM;Kz6PXQWQg zhi81v3${)Vp$qv88rX%Z%Dv@iUBS+tW6<9ndxcY<(psClcu zfJ#Jd^oCk)0Ws+=QmkCb-kiK^A#@;zG*)09NI~6xcUtc( zrXYsNxCW_Knb<`N1k(W} z#rs2MSSP_8;rCG{IYVCc(M%GjT25+csS1-Z&%hU#SxP38+w1vJi(;2F1IT3gS0f`^ zDVb^4@5kwZVCGZw0VFukQ;kAje$3_fn=vTI+WdbJ{{L(9|DWM=GyngF&(8F}44?gf zSpWZG!G0=HXDlIS|N0(%T^0_#pttf>gx7{Fu48{Z_56M?8yu=|0}CVu!yjYjJ^p={ zTPv=*v;W4N(~`FMg?_n4f?qy&nr6SP1M66KUf|@;nfKG~1@jBHCIc7!JO6YmBV~4_ zOwR9-Wt4b7g6DB)=Gx(DD+4zgU3yMn=J<>KNAGCwH`@yx!fbgPiV-qsA!jK_&84OW zyEyYsqsd_5VMz85IVA4ss7&PiQPX?>7%B zQswF*9RD<*+zq|!2t5itMBO-1Sh{O5q}`deB;DxKlXEEuT7J7w0^q-)#aoAL0H$clHXnV_akZzn6=TG%Eu_^S&7~mZ=Ymj-20n^OqgQ`ZO*m`sU2O zfPR;>j=@Q_c`We1Ctow}FOPL$D?eGBzpP!4L5i!L?VwmJ-FZDtt+!TKE^rSFLl8vc__A!5(SN7+KUsB*qbk|&_DE+Qj-m3YknXJpV(V(~n(_diZt=2{d=-@f`g zxIe%x8Sj6OR$iM_MjUja!UR=qKb>~t#3TtY7o8i3n1@$aW0Z$Gg`(<%Y<)Q#)BB!i z7`%Q@orDI03qvqt!OS2LKiv?NRVkn^Z)DzIvfiKVe-lDV(3oa{l=B&}PFvZ*5^P1a z`GDl`|1nv@$wY;eUp_fgh$xDvZjVIf=BZ|{pg5p}-+9Emg3(ji zm*=KnrnV?~J$t33(vz9k_=XAf5|=5*&!H(w0vD|A2C%zj4xi-VKpr1~-@;e8uM!~# zE}_JepA!lLhRmsW3_Zj%2DCKU3~8wT0qp~6$8;~XGn*D$;9qc zchbO9ifThhfy&)$%fLK<_UF3Fs*F~XFd7+1Z-AY-rSBRudjEn%g}h6M>_VLjQhD_o z$2dpgjq^wnDGOTBE5(yyH)5Vo{z)pziO)4v%L7(1bqdF85%bO~)|9ZE^FruW(xC&v zYaS-m1U^XTknqx<^+a!x&@;n6a3!4M)U5`l5Vr{rdYNm`5d~zC;BD1}9-y@O?+h|f zLk!AK%+aFZP^CMj-C$G?BQlw;U+w?*FG`KmBI)KKw=s~EFrw(>{NHWI$2VRfo9M{s zRyMl|U^t1!O#kSGfvE~u^92*bp8cCM+zN<4CLRcI3lWe?&qm$hsaPdTk%}E-uwp;5 zyNIX8<9+lX6ao1E3O8Q&e~&_w#`co>(kPTg-8JZ`_g7NkyIeye8oCVbKfrep)S%J~ z5!_27$yT-;P$)r8Ks3?~fD=UiASYWoaa9X!FOJ=d%GOMc@%-)9+vXd%H95qWS1Esv zh#r*015(LAa~`lU+FQpaK$de2M!hmsEo|&F7qhioNzN)TLOc8-&=pumZBsvyMQU{{ZO{d%l{7guKj_*nI z@@ZHi@6KcalBht=pfHu_0&Lr@j&q?|Qr zCs|5!+F89vdJXU-Gw*a?`smA@vS+q6`;2r8`rNs4*74_Q1XPgePd%lk)}>?qrS`Ud z%4DTgJ!Y+c5=J3UpvD55sS#x!WPI(QYXcoBYVJOYdrECbcQ-h_KKCndox_a6fFS1K zXCej*Z2rt%!|mrGzbp~+B3WtVOPgPQvc$O@s`d@cCtuQ3i!He;y$S;3w7dKme6@e< zmMVjomoqI=reZM!aRKi`z0WUJrC|XS9Fb?T_g6yIH!_TvCqCW&czXPu7Lv4%8fTW? zs$0uagXD`jN`OUD1J5k|K7|k=Fk=%SK_w)afxJiH-fZT$uT~XcMqo+G^tS8d&yY_1 z$LM_r>trr14wWoit}pKL6({P5lUciM2u`sol5Z`Ivc8puaD1`k=c}8e$utC6a>^tfR$xj)vsP(=l&0NI7BG&Q^G*W zA28?j;OBH^n0ZR=3^IQD3c=#R@K@dYMY#%mbtG1>oCaEXENLAwOv-93hpJ|Ne8XMGJ#ownSYX;uDZZ64*2N51=*87l=?-6 zXo;7>w#UPc1&Zm-`N1^|8h`GU5bZ3n^5aO8YV+d7$Y}nnI#An<7sF!XxKUCDkNRpn zcm9z}{5|l?Ky$*dH$bVErp9;qLIJyGuS}+Aa>F%zuUEQL@j>akEpXgQcwNU$yWad_ zkO27HW7Bj0d<+2Fyku9845`8nkLtjz*()|+ZOSjZg z-!Kp*nBEO6K3r7)67RXg3;4CXY8Eux_VAG=M+hi|+`wlWG?LGwUQ*1eF)uPIJ!sYo z3p1styBsp$P%PR=nL=?G#0MsO_@MgMHZm^3K+oW9mz-T?pIWJqfz;=7QC6ukAwiYVmrd?Z@zNTW^K}TCWMCr(l)Oic_ll|isF@+E7B>OR^Y0q&QZ|H zf7R*Ozs^4DoJz;Tu#I%isPB?2tYkw}TAD#RjB7GEHMzz*kVQzML};lZo1)N!o?Jg+ z*7^;p46SS*VSM=VAv_cmv4EGo%6QfF5<14q<`EcAmWDiiHR-F|U(cXqQb8V+(er`= zzb#EJ6)lHD3f*p!AmV1Or4$rw=S35t(z-K(kB28C^4$@!Yt9y4q*_G>A2p1FnWwJ3_Rw()ReCg9SflP|qPHj)KI|;p1 zT&{Q_M1s9$3jxD~)zS{epIIGDJTE~!{bIg=vSpvi+*1|G-J%H?SqII`RWM@Z%?gwr z*%y@=;Vfr|@b3aY!L_DENjyvEHMy(8#0#?wz;DeiX?!;|Ph@e(RCW|h!lQk=D33`6 z-#U4)oEBF{u)K~a8mcMhW~S?<4(8H(Fr7znB&wz`#yE)ocm=7w&Ci0>{G0sU{ez6inpb}&(-46nF?)tLc7AKD!nd5Mx9;9<~i}IxISv~n< z(b7VjG*>)#ti{uO1VlpWyIqG^kF09rM%UfBP89fH1xRal9IBS32R07_hQwokCggNI zoISIE^nlnInXMf^kCYJMGPg)NngTf-Q#Y<^6cE&kk}FF$da;n%CYU>n&k^&c&Egc= z{ir$;?^o_;2tBq+n%D1-PVE507=yZ(sx6a^D6rbJmm6cRrd~ZWC!yMcw5kGHIk%u0 z0r`7X*$CW3l-j8MBFGKy4 zr8v}|#H{A!&dPr-yImkcBAU0?hmLLI$`n~eC{%MDS^p3Uc^fl_7?XB|{$+G+*Jw<^ ziBH_>>b-myK>7Rh*DFx$mGFvWeqX5?rxrrVTz~wyPpk*t1EHw!dwn{y`(X9vY>uRW z)YXU2tv~^_a+Va`@h-{{;nK%(v12{jl4K(w1yO13z$;m zZ0Z{N0*4D93}?ndt5%D&OJ`oR939{J?iEEdBK6n?xoZRJ1&2>oJpe&d#e8ndTCsaz zF9v^+jUQ+rx|`Z@mGS`c4ZDAq=Mj#yYVQmdLqTD?wZ-ZQZeTrxDh*W0(0L4FQ_}B$u$lYl>F(5U4DZ>Z$))@QA=Td#%aY zxhf8nP)=%#bY@*;{wIL%j9l?K^7~i116jA*g6RhMh7UMhSo3XOe9~` zwa#)FMp=UatHhLk#JXrlgAog~-oZ3uLzYCqM+sg|L-|ELaUW?D>}?%=l6TiJqLT!N3_g zSpsE(p<{c8;I%(?q)WDdeuoZPtyfmGM=@@2jxF}5S3en_2d5w`R=8D4-S)kU7bJP4 z)bUGFZB0C-jrP6?#Y^sd=(NhDgq01t?y;3_oQ;tOZ@?Kr41uTKX=g9R_fovQ%`769 zrn}|nESl0em=fu>z)%V&g?&P3In0qDl!pup5)XSr&i&diW-FB`dRtOMMce-NiZdwu zR|;cj8Ag0!06maf6`~OaZmvol)${Smj-72wS%g4W-cEs|+?E8y+RAKJy=-I{$XJ{I z-~YqdIW=bj^lv)0ZDV5FPM+AdZQHhOXJXr!IGNbC?f<-6wYvxJ!R|?afv)cA>g#u3 zw{3o!I)3B%fSt-Dn);+`D+$yPG=ktyIyfflg`HE&#z-NjS-{<^xPEj>rT*&BZuNUZfF8&?J=s72fHJjo}_GyA?6)Tn~>Ta)@bih-x zZO-0{MOOH&w!{|RZteKLKkX`v@OX6W?pD>jXc^R*V>p%6FQp)eOfNNm_-;m;T{sJp zY*h{x67$>+BxGuN=3VpLBNC{_ka2En3QU})b27OVevSPINkZ$8B|5B{9s6^lbqBzQ zk9EvIt|TIR(ro!f+5KC$K&HC8SueGzkYN!y1CB<=Oa_TA6Sd`buZUvT60W0nyGNnZ|ikdv$t?I;txhek~OkTO%FhK&RK)C+3Nv+lN^K5lQ{jE*b`PnGQo+e7)m z`f*pzrHj<7Tgz4|oNC~ZV^6I?L;ZMoqEY{vEq?(cs=?>Ul3$Pa4m0yXVul08r!4{y zA9`j9v;Jxh&j#KW*x@wW)ZqFf9=Hu|y_&EHJ3F2AL0gCUyXbBe-+|5d2p7I&zpSdG2 zO7IJsvvGB;RL8>)h-dT}AAyD0=yo|Dop}(o*Kr~Zhm1IHFT5Fv@VVL~uR-?BWVrlo zHM>D}6?Mg~tBO{BI_^09tltK3_$5D$<|Q-FQ>Q8nYu8AV&~ZsO7?bgA4wa}PV2M%Y z4gxr?!#}AEGRbdieXWG4XV&g@F>#hJt1dU|p=5!dALIn@jTQz`b=QTbE` z4zg`^zr;V>+&NTPuN`U0$0$%qpOrG3p7S;-=U3Jxk$G{fnhi4Crky)?HWYeslyDuD z7fkbV1|;c|kra`r%y5jm2U~G)$_?cF0%8?Y(yt9_L%X&#J6qRr7nq?P3z*bvmN4v+ z+!;I!5)%_T$<$)qH6vZZO#ulmuh(*o%ObH?L}TV&->ss$tH_{-4f|TbFCW6iC?}2Z zz-?WFcqG25X~6@2;U0Q`l`t&g^uD)xVs*!{Q858|QlG`CA_^@@kQ!bQDDK2QUiKmP zPwevHDj!nXm5;5~S16flR3s#avz!FVEIDW=>E}OO`DH^@ z;zd!2Ku6pFo%lm2RPpDXT;E0bXf-d&SbuGN5hhm+!s-ig{w%IbE8kS72{&(pA{t09 zUp;NVPXmHxDc%=@UbAtgdPf4c5xvud_UijBTC2jDHfG6GMn(C!<+B27c?nBP4`~5V zGC9s*8Gcs?HC+N14I66@MKuAI((&b`e0w(T?ddzizOFu+1OOzckD24)kx*0H#D4Um-qY?u+*?>xqF7C}A3l zCDO#*S4k7$qn`kkb7E+v{xrLU8}y;2*dCKe1>Y9capa=y^yWxT5N!WqsO!B0(M&&M zlOP155?uf!v$M(6;BmpV2r`z!MTa^8fpIZ@MM6Em<-tWlEIziD1}LXY@i)+1(}kMF z-AO1$Jm*TIFh$8WBk@ruWo{m`%Fa%$|Kt*|toV_97220-=`MXom1vtKIi*weMilrX ztQ6g}M$#+__PBVq-C`^@QYtELqkAct0}-3!Rn??Jev8(|Q`I28>ON&TXEovAWud|b z0PAU=#59)@6LV~&4SM1tOlm8X6QXYdmg&H)ck(C&f+gd;u)JSbAUs^dbM#{T+9z)h1Y4*r{{3goEQ z^|RMq2g;Nhkjn7}fSUKC1EuJTciR4u&VJldEU`U0E-GygIDUx*VX6^gd>Upbr z<>BDlkL}~y-kIy;TK+Mg@cWbS_2GQ%t#8WDD>aPS6)%%M;X(2cY!=t@UAXmL8MBei zw;G7L$e#T0M&bK)lJNVLA`?b8de`RcV=ACuf7Q$H^NsiMdu3M4OwMs58_tBOwVF|& z_x)*_p>81+@twJ3ui$=#L%?;PFEO(4hDhgEG9;Rq8`?Maes1rL9aVL~O?IQlMm+Vr zzz<>;SqAQZai9OibN<79*xA_F{tx$I`)}^^AJx+Tll!#jYX8e_xFN9HzoS23V9zVi zF2`;XL8;ww(-7%VHe&ci-1nayPcfcnuWc>Qe8+;l^>BsPILo1HZY^kNV$}m@>DF+s z+-zF;^-{sQD(?&I^;KU*=j(s^6pxxe<}W=TPk&(6?NGTdqQzF{ba?vz7`+E}-pLwH z#j2Ys4nAB(r}w@dfBE+)s2b+n-~Rb{icS~cbK~*RS}U>x;O4bv%X+jdr2bPaT^ahU zqNy6YdU#mH6UHBas48k%TLf--`K+L;X=@prE}y7!^y*-4vp+qt5or5B=vT+6?yWJr zj-$mYMY%E3pTZoplp$`p?kSKfltLq_e_YY=cdNSUp000hR#|-#hReF2FV_wBW|fuc z=Mapwq*A3YMO8ZRx{7$Ltu?~T3ha^Ur|3NtKOeXN*&YIIc_{2g(x0)MMAlSUoCEYf z9^W{9H3q_Q<-57zKEeyP;<}e)6+5FazPG3t6{*bj&l&{eR4il+RY6r0#B}9pu0FOb zi~hw;mDJD71ZU1gXJ{M4*k63TJvi=Ph9(hrLRL^4nh7$cyYvzxJa@ruYj?o+U&|g@ z0IR~O(g0Q>eP=*Sh(qW@s^I`^j=j%bkHfbMfg72JICjy7ZWj)hdS#IjeeUxxr|L2+ zeFt@0+rs^}+J~#Uj7gv^antYL3AAlhj}B1o&aewnDM9J3is1BrM^|JFP99FM6lU6wu$d8ZR zU&k>zEj5^)Mdmowmzu>_Y6*tSbc?C^uPSod(0g^%Nw^Fe^}r_-drM?r%Fk?C?5St7 zHxN;$1M}rno%b3-e`|Wgl|TOtwS7&B{N6K_19mO^O^JQ8l1)FRfizQQ_TKa7xADMf zYE9;!gQNcbH13}cu1JprmS>?$`1G_RFJsrIPs^AmJFTAT{swAsY=;|v`)X6{$uqUb{qXaTYcnt#{ z^T;toSq?-LyWbR0Sw&t9vAZHH8-o1RKDOR@sp7;vPQa_+KOTmR>$L#gbLC_F6;zys zje7esbaEC=`Yq*teWY=3;^cUsAn6v#Mof^0tMD6k|134l=$CCIwclnUy)z!8?IIiv zOK(Yrlb}A&ST-HvFGGHl+iRW_Jm8G3`~i+AJ~9sW zXr)SIXI5Y=Q9#3rWzA%G{a=Nk*camP%mK%fQ5vp<*vj9)xXMKJ1qq^>@LF6waDQR| zGmq4?${S9jHuXwKX`27`oxdcqhB3z~Qb&+=Q`lnk#T8!IGU9s8;CA(=l+?w7cB9(> zb@vrE`}Q5bfAKFsLimH;d>ltX?+9$IgxRawC)SQ3%{WP=WDXNhCFXJ^O06hLAtyvs ztSNq-m$4Pih{)@PXGj2YLo^<(2>>x;YkHK26dXpyA858bawX|IeQ-sq4Oy)NS-}3S z0fZ7N5j+ON5CHv*(nJr1FPbf*gLF#AV7zxpj@#f?;Oxa@B+_>NULSXFGw9UN&&>%_ zfKvV|ZZDwaAVBxm$&=CmaX-i+4vTgxdZK_TJFJ9>DQdYoRaqFV5-bH*PJH|#3{LNH zOT@0#Y3nW$@hAS#z;eOq`fP_8IE-J%1L?7shmLf`{c7Iu*nHKjRP9tESV*bXMW0nS zqgU6g=N9Z8Ymq~WZNg0CbiiBCN%Y{^O+<|xr{{J~5M{tzNb8p$h(-%L9MUsxgq(Xd zty{Nir-NNo@z(2eysrnkN?Ws?rC7FCrWiE$Uki+DS$~e^p+!-M0L&>5r#K2>_>1dR zfy*E;5DF$6Fs^t*y6Dw^POTBeB2I%pYJmcRGW96|`cf5*z#phI$@{WxXq#BN3&#YV z1v3V48o6yB57(^N%)3!wym)qE4cw-{;_@?^0S^s3d|;PzP;MT)H_Jpqiwp2tJFFQ} zYW#fHvl0pq4(B*<5VUCj%w_Vj69O==_ncgwoN4-INIh5?DT!4^;&!tVNdi!G)N0vo zOI!KDJ&eDyYxv6*QRIndKnic^x0DSCpz=`s1qgs`!jAT+NXr`5RbUd^nEXabb7+Jk zN-&!AJPq^fyH>aHL;tKYIe`ZeN)WCj|z&9G-ni*kkRKIP(~@N%6wEB5$J;G>AO0o`GH0@>8CB*LoYcR zdFH$Mi6o9=46$|$P;R~{f5Um0GEYx*x!Dl2X3kwh82l~r0aiJney?)JEv0|Xi=bed zQHRW5oam_)pI=F@m^GU5lBP&+wJfd1Q&1vageBk^AMK)~4BuDc~1&F~` z5eSl}+^VU3YjtI6z+N6JQmPopxUzt03rh=H9VcyjM*4k&C;o$8GOrcXLxxk(T1&h# zi!vDwl8|v`i#vXO8Eh0#cInAhng8hx`=JgH&%6;@CkfzS?x`JQ*n3-{6kG=ZE168> zwx2We>Hv)v=z%D~AZ}l8s39i_ZZ!R1cfw_mn2qIT%x?n}E3<|_1hAamSuYweya z7DMAM1Pb__7N`}vtDHc!A&c;hWo;pq15*<^UP4{9KuL`@Q_up$M;)J<2kubg37!Hm zMokXcNJ&>qjT{R-=|z6~6{HEZaD(%6;eyx`xr+v{VT%>~>*l=4FpEWFvc_u3ZC1zz zO;u|lORk05Y#bFBYn&vnB?#2))G}Kg=!VUv5Viz_z(@r${*i+ASdeRQIa*VY$0!Z+ z5IB`)=;v=jp?!BU=C|lRpdDC|HVroeI*KB!1GLp95x|EJ3sVl0cV(Wk+IOLVG6h8B zLVA3oMTa0cLmmokYC#@wF-zwauc*paU>OHC0~+WD^-^Ncx}&&`u98eJQ>h2D^a43N z|K-PF=mGDDbYr%X%MTt4QNvG)JdV69?P_z@N@tekhDNLv3l(52(dYqK5Cm?~sOCat z%yI8>VCJlAw1H61c2)_9^+>Z8EWnF2MXR^sk^!-{AK?>#`*={P1s^UVtBTrFppxsQ z4|c5_=~TdDO+sq$nHF|5D$L8(lqiF`Q)R3WtW$Z~Ym+16b=2%NOn2Re&k(W=?lc0@ zy`#9-yYO7HFyMHV+>*R*-pQ30+8p?eQ&+TU&uBmDsN*CCmOR*LNd~(Sd?)}un$m(P z;yfwkIu`VEGPSLK641%mV{Hax{Rd(tvbxs@nRbxueU-Zcn>#AYkiVGAmf3>7%80h3 zG*nyv!0s5hV@Z@%N{pugwwf>fhA|_e>a$;`EQcx=AjZtpxly@cPEAL7#uATGMOuDG zH69ugc_p|J6h9~8bd@|Gj2b29V<_6mlS?(Xq~T?0#x-LAWv2=+d_|g)bzz-ZURI;8 zHR}U1pb5mm4ImQzO&dXDo0R+!br=9XrP}$6DccNb4Y>h`lb-WYf3^#|`yP-hv4)LAJ;=?NTW&}#E6d4v^oBXjG8q=#3Tm27BS z6n_JRAoHU;@%7*z`jg8I9sq%8;$SIlJ>kgov?Z#hX~A?u_(RCzP-`ec|eW^lCgkJ22_m4+9W!B5l1p-ehd)roDU&dg~Se+KDGo z>RL{E4cR?Vvmi2b4+$xGIySh7T?pps$m#fdO4Xq-HtAGZ9&-4xZd6J%aiQ*5ix!(l z*oi%|7pAZjWpSWk>4vv&P;B0a5o~*xz05F=_pFl~C@_T-%f!fb0zHrR4s6@$rNb%Dg2uq5(P@NTU{pP2&6!bcN0xv0$q$yCRS8EycAS9O;Iz%j?p_K1 zJ$WQ}O)`=$xpWlMB= zt6X8RKb?i|?`#N4&=x0B_IPZrdT)-oe)(-BlYr-FMT3b| zhM!&HrxUV{5GNC3E?7_OQc*tolW92CI5@a@4h$*#*9d;XqjDdAY!9LFw5DUcmiUe~ zbERVUs%?OcP#aBo-I7aiCuQc+K^4Am>VnAJA(@mb7@MBrdcTw(mEH1j&LY>Vd8knD zVH1TejKd;U3^CS3s0wa<`~!a9Hv5GPkB-uJJ2*g>)r( zIag10(bVA5ErF}p(Hd9~BBFf0y+y4?oLul*){L@)tFPwfGKfv`M#=1sgeS?$H^T z*hLk2EvmiJ76<$)#H{0KTryduY(emIP$IU+=%`aMlqYlQbi*DZ!y}y-V0frmrdk(% z9JzEx&^X+=L)Or2EGyFNdeRtq<)n#SOfc1Dtc{x7`3{(}436)(A%Q+zC0u|bekUK} z+ocW>2-J2<{-h<#i3oOm5d9Vp2w~Z?iB-w%^+(-K4*AAsyfTIwq^Vh;?FuZySgkOh z2|lYRY3<{B3QzC@FOqy)Lg zk@7OzlCXt`lj8<4Q2xlDiCE7_Gf@1vy?=CxFfzWqj7p}^%4zI%cxDz-clexB=ZQOU z_@szrqoZqamQ<|vF_M*#r2A(l#pecOrY)fivSNChSUXx2BFCK@WYEXJ@a$0@s6?Ao z_qmi1wT`A9h6tU;3)vO_iZ11UQ|r}?f!j$y{LC@ z!L9?X7A!jx>|;t8HP$>n8PD0g zxpj&Aodb>#TYp|zwbo~`pE@19_6 zj}!fo7Wyoa$zO;M@sFLF^@QP2^40Y%M4(u5Dxe739h|dtMZf~k+f>{!lc2%tprJV{ z9cJ9T=+h!vJUxq(X^Qveb^Ko^pnvjEYw6TzpOlmF@S;b+7@f-%clQ~XTpV$KNPNFk z)u1UV&Gy(*<$>qqIKeF}%>uu}U&)85lOj#Z!y}951)WCtIqqY?XM#==+bQo-|a@62VxHbhpx!G1?(#picOtp)iKudg4>4p-PnCF zKS4`fV$tFTk{6#aO~J~Y45zNUdtf6i;W3s&JvwWQD&vR3~3o$q$ls*n7+oU^fWxkl%i$?Y|HFa zoe>~lqvKb|gWB%3u{5gD?Hd^f;fv{q(!%NdXjnj70? z{9n*Il0HoO5Fs8FI_YiXo_&bD^<$h6+qlxo<#4LIVN)fuXgg5{Q!bq9LHQD|SvJ#d zI;r&+r`)4(WZG~S1}mbU{H`x9I4sM{HT5Q1ry|mLA~7Sf$liWX2*WI`eVVf^1JA}rI*7OV_VAM2SQV26qgxkD5FqTcPOke~ z{4zOCh-ov!BvC^XtfCIuYHVeF>sOHbOtMiBOOeyG=E%I~a)%LkFeo_+%A2M`If^2G zs5&z6#0KaQDLRU_n9)(lbY=lvQ#}5o=}%ufWYI%%`RMM+8}I}Yjvt+NB$$}w+;~Ju z+FCMJJ@@MG@unl$&3JN)wFp+dj%W)Zb-0at}E3uB%OYIISN(!%>u@!?=tesAN@sUbzn-VsTvrAhw|OmI!3w{ zOmHmHrCrdJ%`W$&sz}xu4Di8_uy+s|7V>ATH9VlPpN^eDYQyv9fyrSLh$sMQB6OEG zx1u*Y7Q(>^`d-O5=21xz%?Uzo^T#i$FvY5&QWoht@@xa%Rtg4)EGrx1z0)7FE-DXuB;7domM!5Q?KI8N}s2-Uo@>p8^=ofy^mX%=f z0Kin*bGgzqJpfaLPY~otCu!8e<}@UIfj=wVRuy4IT$ZO{2P_@<`A=!}z<9@I{-iUz z>g7Bo0&-=spY~hPHdq&gQ61|W=UGov^6};=CT|$Nw4y+_B|p6pDj1SdOi2kxFW=w$xIXIIoGFl(UhkU4cYZ~M|eRKm#_rU6$igBo4#Yh@zH4#9lz22$o! zS#<_dlve8PDmM^9yY1DM)%9_Bw}7C2vFtriDAd&0cFaIS=1;VYqNYj*&FB~{!R*zE zdIC(qo5L`J_&O|y6v{7P22ZP5V!2dip|K^4Q%%8CW2*c8STlnq8tGj(yp!cR%WQ8V z9TaLSq9}05$=`7*vi2kTg=y(idwNxVAWzwdTHOU{xSNv4uw--E&7>wZ6i9wi8w4$K zgLo6--Tz^gh(D}f#T_KxEBCWX)X~^RflU%E@OgzsvtGUbK1gCz)jUpvSWky%_(JR` zy_=yibCjB-H480%j+?BEuP|qURT^7kOyz=z44N+9vFQB#gMDd^kT@4)CoJYcMXKkd ziNH=&|4XfIFiXQ*;rR_+d(`A1EEu+p?F|CH6;K^hT>NjbUtb!79?5`_Z)@lA@l=+H z#YBE<&wCw;qYirV>38*mN1}3Z;b0j5WM}muu1VCy1q)4iSguVHYcCX*R-P!^;OoEV zX(So#@U&%qqc)Em#ihV#YBc!X>yTw--&qx38~HU&f!YwOBa|VPHd{^>vu{Rl&50Es ztUa|wJ><97ha4`zYty;s@5e)L23wwSnJG_MN~&C1T1-@-SSC>9>0l516Z@h)i^bAl%|4tHa+cyjNDc!sN`WIuvR(AUm`M>03qQcm zf*H2b+fcLZ9Hhhu3E#;z(`I@ze<1XAIyq0*SMiXE`_*8*Ipf8F;+<#1-+Rm4p6-ws z0Qq1#g8n0EBpOSPPAE}!BRFB&-zt!V8NBMog>qfh0W!RZo=@C~|O1dScF?+`0x!AfM;` z033chLK-)RKj0wKC5A25yMpc`>n97FwL@fom1Khe??60ZK%rbpYCC?1zIGhx#5)9L?T#e?qVUOsCJikefJFB z_DcJ$P1jr=YW;bbaQ2Y-7F;=X{t`aVI*(maEzg9BuxaJ8V72jSkJl`Qe|;Ze!5v`}#g+&FR9d^Y2t-(E9=Yc{<+t#{PbI z-pKCry!&W7PzqaC^x(>^38DKvt4;NDVz9u4{qD@z84`g6;-x@^mhunz?euwfENHD=<1AkZ17SqT35Buq7{hxl)5`oD{3I9NFUFE!=* zFKWvEp8(ze2Q{_*M@^j&J{9|n`tS}xn_0WEzXnAT1o=OlK%DNxk{rYP2?ulcu9>rP zv6J!YT>VLf{Oqg7Ypbq_%}ZMt7!7dI%GY#t8RYp?x8ConX#c84{tW-v5$Jus?vK&1 z@fH8r5Y+bi{p?q_{n1?#yK1hk-QMZV@Gq$C?!B*~1$eyP?oaL=Ft#H0`TpoL!~~fm z?0EJ0-W`cNAQPT9R#;i@4}C!7FNH3rmSXx3N~kK*l%BR=5WWq18teG5+FWm3S+3ZX zx5*aD=#B|+$Gq4I_)ek?SP>G&Pv06w#K*Rw_wbn^!eFUnrNZfhmqDT=COG z9zJH3vp=t@u+d~V#$}y-k)OV!i?Cq%N>mMf3EbYnYkl}t4@GdeH@7%vI<183#=Ev_ zp%~v~$xz1@L5Bseq#y>hNN6knpu%g{G>NG*sP(7c*@Lsyn8WP>Vzsfpu!L}vpbTC` zb&p0G_46ygFF&NtR&ia>`)O`)xcm$YKDp8&;!HJ~q?Mh29iM%gzIFpgp46smZ>aiJ zBV6!4TDd!QE7VF2AaU1?kw59#UAgL~_WD)tR`Z9HKWju2%;V=Op`F|OC|(6z-CIMf5^UUym25+t?M};wEGq$Ilfi|y zrWDJRwD@A^RWX}<*@fWYXo82`vAw5)=KH5*BQ$u@l8xRLKfP+?x5P!1H8mfubQ>hT zrQ6mHjvBfy=a7JjE`&YmFi{p$RUve@9qWSUbSHfbJjskK58Q)auxT*GyG%I;W1Cw< zUo{A9*wVVE+C_HSingX=Jp{YWN0+7Ru8``8TqK=(Dkd#v%_v#ghXZeH<*)Af$1cKN zu&1bV=mm%UysWLbGE-K|=vOJM5$nFsVZ^>%eh{@ojnLx0DfZ@$+?LVxg=8YTjcKgV zD;V|0`_WheNeojWRZVxc2P|qdAy14`L$@m6GQmZ^&9T&>6{}Rco#`>ogFkmMh|)Wq z81C=w1En^%QS0*668^iE%hP7O2^KV}jwYS42cC{p#$EY211(LV&aU7rbr#3|0|HQ? zp~x2dOlVbF!g~)v7MWo4W^bppTWw#L(jnXH(?W3Dg-HwdaJ;f0@0Rj zq~>JbXXUlnRJSS1`Qh4++BRU3$)MR_YyEP`+!9>EGSwP!L#rI_?p>{fQJf;m4ZA;1 zJJ-d8OI6Kp_txavo&>D9ri(lQD<(tLD#V2~xEivwzb%`1;A};4**xB4RCc8Y_+y6= zn>%!)gZuU^es5-a=oAVEi36F*Qk%``H^`Idu*z0~3?ZOj?aDU2IdD6bsAK|sF&+cn zrrj=(_bX(ojeW*x?a|X8uS7uQd?BO*s6?WuXcW>H7XNg8Jvp)u;DE4S%|~5rKg}xv z#snbJ3HlO>)wExe*qlH@|6#@`-GdKKM-Pk?+3i^Qo;u8I`xJCS4#*$q%f|4iJQ+;a zkwW6w-<|v`;aCNV6gCC%1%GTqgaQ@k%(?4Yjq~kcb=6O(!#rpj`VlbhnT)iKu&4+u zOdPhKE0IxRMe09FMs=HrYHBr*6fgFXX6kuJpv9~qHU9>J`A*m#>wR$9p%N+WlZ`I& zi?a*vp@&!9@t=cq<4ZQ4*e!bHEeh_*@lbjgK+v-^tEpPaI#UOJSDA_73lQ)CwXpm< z4}bGY=dL(>H{h5S!irkodG#y$tMARo9sQqwFa(oYjarBH{@NEA1OHyYYsXdvMp5dX z;7B0_Q-I!{Q%!fc)?zE}!|IYXq>0=57`k8cx(8X<9E$`VF2%PsdjfK1d)&9}0%MGa zyT)>F;{&-Tfk}DVOX@w^@rdgU#1F6nJ_fY@JUgtT=21(xfVldO91nM%Dt1Zkb$0o_ zjFhd#H}wK}(Ym601T$SvuY`0YgnpEm)46p^9k$z8!lyr(J$i}<7)k>Bi2feI89kWp z-LgSE=q9Sq{nNq15v`FJ_FB1Nv@gNG#mtzw1ioL=vYuCs0TUmdv4ynj$Pl*7r=S&6 zG|33G+ip?YS^I_RCGYrG&9#>65R=z#PwA@}m1w3}s4|nCs4{RYQ54S%e0^9%JE5Z5 z)4pxk@YfxVfW$C}KCS1%6qW7;%4SY_j5XcaDPnoo$7vP31#k3Co&Oh&$cR=Wm+tp* z{s|gf^9X00?<4m+x8K)vR|R7M&i;=YiPFy2Ry?B}@_b?sh$nUiMNzS}X*CGjE{*|t z2J&}77JpdQ$lLVBbF}XVP_F~Jk?!K;tAJnH*u|Dd{A9iwOQ|pHjgc@2UYH$o0Tr7m zc@N(ehqKT5=vr`~T4h2B98DDjj{JaDy3JCzfD{goOMyKhDHiKYvM}#6{yabVr_gxN zJ$GELFwKX>t)8`0R!aJT>C_e`DVGL3i{(DpEF`E$312mo6d*{z9I6Qb2Bd6sHWbNB z?Qr+FkC`2JN?8)I*^z1p)H+CjVEh-A^zVAFZCg_x=zJhU&G3@|3POF-r2wU9kUU^P z4LU9%3k<^t?ulX|jUn7i6)H$yq#~gb5zkCvNEyh*dmVkg+KO07O(`r{p6Ej=yR69k&0Q-m7YNyKiw*Cmm7HT(eDi9o)!(8`G(-rfDRApH9JZI0hPX{Jxw`~$+EM~w9!e#E2~K3E{5yKEu#nME#0BDC*d7>^i(NYcUW#NoY*#vO z(bAx}vM061sy%%$n|Fx0sI*M%xQp_Q62?8?0{_T?P)}pmFpRve5V|Vd5&|aDR zpzir#eVmON%$!Hy^O?h1q_`(qC*QCD=Q&aI`8$u@qzaOAe%h_CRLes0JR+r6HOWPA zn@|;Ok>sF+Uc^IJsRx~;`@&u2#B!=m{&QyrUvBesX3CmaVDH zL?e`0_sIi>i2j)0->z}CqnvQ`W;`rJt1QCI*<(0C){OZ+=%r%>yDOygX!=DyOgy>p z^56*~sdt@}MXu=YhW@>QY--{b$nh_bqwy`rw?CQtctygLpZmre$}P%DQz=bm!L_N+yOiLjBK;8N8sr@DK~e5MMn0u8RkM|qQ%BYr z4XOMA#*0mP4yQ%jk>DOlrg&6(pd45Dkl`$lwP2n6z)6B^--Ln-gywBkDh5?}GM0o- zZ$2J6VMnwdEMWrBxiuC~JRsx)=HCzLf-TYp(`8_j)Ee1vxY86Q)B8a=4yiO$P^X|T zMv4Q!Xko>74Xl{nh6}yVZac3Km9ed?0FvTFh{aD?;gwd3ppM>Z3SsS>9%)_eTvSej zW;MweG^HYW0rbK>$NP*#W%O~-(=0(l+H=GTVKKXNik#2`ce;JH-cs&Cd-30sm1j)n z%@-!+V~5Q(%EAXuLKQMF3GS@d&5Hpq!J362)MM2?m;J`q6Vg;+pftX4?pvRwgBEI1=aPWdu9hv||HB~K-HTFdktIOX2(P>pHV-y%h80p7pK2sf8qkeoUBPGB%vt)A$lPgw0SXc~;DLK=BU7nn_Hiy~HV%_7NY5Me=}- zM}_tTmT5@PTFnQ-o381v`{G%tGlEL!38G6~5uV$gzYdM)s!K*<TD- z2F!}L$PC()`2Wg)o~s`5^ik>|H>fE7);_+NE(IE7=7NT<&lrvxv=KX3Oq-$dIF%^{ zASf|z;Uf^rjb)aM99tr2SifD=Nt4eG1>c`aEunL+RR;P-A(&y~`}upcpFKA%XdK3S z@XI@G0bA;8PzDU1nNlz$cvvDC64!Xwn>9bm|sFxbSmtz&i{hAHWo-0J2eJHF9@BA)n)iT2lm^`2yl)H9By-HyWC~C?`OTi*$FM}3X_ciPgLs&qj zisUF2Nt1^RX+Z+HEi2yRuO-oy*<522mVJ<$+~R*lU@zEVeb|vy9&byus>Ho2qYu({ zgD>OG^nlmU{>^Ml5Mx|vUFJmNQ)7jh1Ex30dEVd;vkLYt=aR|M7M<<1Ml3Ik6!kMD zid%{fDy2&fI)ZR>ig-7?C>2{Z4t3ybAnUdW>!(d8eNWz=+mPO#lh!4_cy$my<=CJDwq%H1kl7&T z{5D*dwq2?=BxB0g7puGuOx_Un~;hcZ}<1< zF%j-Q?WMV)E8UhH&xRg^aDXR=ti|XKYoptQn9YPogI2l3fGj%~pKjIYnoUBx|Eumz zIgjDai|Jlwmw;$<>7178D9~(*>n5iNtvPvCEJR_d;yQqo7J`io2$u7RI9;^@TWv0N zzrs?_Ug|Or9kR;Q&H~0v;-4ZQ>}I}Evq|SzB^`Q7uv_MHcq6A!T%e?%n<0bfy79}& z1PR6pD($Hl1kG^hD}lLbY6HWkFeg-Zhf$_t`a^Y-gUg8-S2IikN#&Nps78lXR{tWW z6b0*$TSUH^Gud$*CnQZnK2^|!ZUknF>a>wAiCKu<}Bxj}t?)W`JcDDGTzul zrBI0^4)*n;LH zZ*d4-<5l`YWSw9Sd?^1tXG=yTt;A-uuFR%1H6`|xs{CS-6y~zjJ;LjDA!MfPxa5gw z-R|<-H5Bg(TMiLXcIS(ZQJZ%UuA zybCtyQvY0(s3u9$u4)3;EtrHNaoaa$%`jWggl{eMvzlk?6pYt^b=Y?eYn~B@ygf>@ zo)Wd39zzN7QJX`QQB_uV-@2X^f|m^@^~3gyb)GSI&Y1JME3wSG%{SqRX#!qCR03=) zFUpraDVQiTlS1%p)w4o?Sv^KR^Kw!mMv|=2RoqZHkz_mWtd6Awuv!^TS}Uo8CJ&MRi&y4F4+@HSjk7OOn6&I)Vwxqtkj4E@nu9Of^ zN-kR*%R%paRF26Rzb>hX!Z{mtD)~HMz)T=ID%fo$=3eg{p?XzV=C+XEr%C?w{QG z4~swqo+7#^f*vX*p}Ln;D}yB^d)Et)+BTvp%Q^I>0oLgUV>_T`xKPCWq8Y%J@Jq=d}Y7GRsBCld78~hMASao6V+R653M@NaE9{ zi{xtNtWAiQRG}5%)y*mw1;F1=f?iF`sy7b0P7O*oPs;G%IywU}qR0Qz%d3R?t_%1;6CSH9z+NfNT&Xo zwh2jqoUpICAB@5T+DTRuj--&llN7di#=+loDR>9==D&){hek_T(%=$z#UB&D$bMLJ zgp4fWJDM%OBId}+b$#58cmYIz#!axkWvc^I0Jv*(Ot=&d4sR9e7mdaB2#k|uUe<-{ zk(xTo{?h#`d3m8Jz6v%miUBKZ!rlWJsmpRokiTRJydmXVf1eXA)u~=ZyCogxJ!gDo zF@&N1EMhDj5jN}WWKYfhY3d4qQeiMIp+?nmjLRF)21foBhgFi)6uNjE<3vpi_HETg zC^ugQoC92@IdPTh!}1j{{|5QXeo?r9fIVBeFK55>qX36$ogRp;sRRR{GXZ}Iy?4;1Z%~Maug1Y zshp~Ay=%Nj;cY)bC5pP!`C`5C~_ zm1K!TEpD4il0<#3bAYpFJ|p7t;nyId2~g$>8JE+G=9%C2i^NK6O42kmTgB8`11s6l zObs@EgP?w^naQebYMpmyRUlo$c_tBjz$>(2lFn2`Iwc$`ddcoheW?-Mt2J+R_i)w( zJ|X51FMA?cE-mKzSh;VnV8`BsTP~BG8xE22=CF#b)*?{|5Br}`_HJ6ac*1vuLsX9}6GAE}jlP4!R`f1O;Ta<|jk!!QbI849u zb6L7HR^1+KWHr?e77|17G7ZbpE(h;XFmLL7-9*<@_3+88p1e~WAu;VfVbC?juI|^x zXbgMpnoXAvJFFvddPJp^OSi=_W7b762B+VMTY@^=t>+d?w$AGV-oal2;Z34@t%SF+aZAPK=JNw(q|Ft;Ju z)!#9~{E@YhVa1|Jmzbb%Phef&;gEol55UZ~$pK)Djlo`PFu3ZCWY=N`xY&BO|6=;r zQyY_V+v(^1Ka8DIaHdhSwqx72ZQD*JwryJz+jcUsIpIWaY}>ZYKl`iN|H*fst8p;E$oc`qk8@<-C!bYUSaG(Rb^fHlrr zowd8&xR$F1drFU?w(7h%OavA74K>{rt6_O$m6wX$n9qUpO-E1k*bh87Y)i}@y~0yEpx_i zC3ow7_thpXGWUsm<*rA9Zt3_WN~4dcfBQzr4d*sd4_u{;)zm~R$kkpdO)We5mFk4S zix?W7g3NBUh*M&#+(dLf?De(HtV{3YB977?xV|Fmt~|1uZ1ny`&DR_@+QZ|7D)#sV zJYK)FLa729&Y^#?125NC)2bLhQt4`Kj06TO_bxl=`#v5iY9vfIGj_j?r+VKm65bjZ ze7`>5{OjX% zF!3wVzUrWEv1EG5H--tO{x{<_SrGx2prXEoUF z`Q|{r&Xfas>oA~6hQ&4OFBa_4?>Y}~0oy@Cs*@kE@$!0^{sv|=Ev))4rSm@u=6@Jp ztW4bh>ks8%{coj{?f;~7>e|I03^^fOIK0zheC?^!%QhIS$gfEOCMNnKV?5r;;6)~G90@i{9~>9O+2 z-~7Ck0rZw8-t27x7OS3SuJX$K`+KPLREsM54Z=VLP#b3?=GK24pYkOs@bT`KCtI|z zHHISJj_d6fMfKXlw*+g+@9maRjg7ab3%Of<>N_sbuoy!j#{qqk?A4O<%AJP?!%mK( zl_DJSzAq}@Gog_*YSe3%n#y*T(tukG!Y!F!=&5MSts))AW&T{AM$#%&Rr^Ix!Gv1s z;_!fhUj%>=c|DC&ZMVV@WjD`3VerK4RTjVO4coXhQ)9L4`9M$Zyd zdd;b5^j=zgI&9AxgQ%|tRw<)392C91lM`%M0hj7#G5maTub>20G4gNz-9?Xz;sHef(yd;h42 zpT=KBb6nJcV4uFwa<zVJ^oA&Ks1??*li>m-Y)*ZPqsPvf zDhs198Kg`tIQ%(e3$-6>yQk!u&&|h>sKcR^E?HOM(okDaFMeycQp8n9T1*J?G^>Iw zv{{>X-^NEe>EgCR;;Xn<{H%8ga1yn`f{FF3wb4$f-SkmuF|2YjIi|M#OAR0GgeMUo zW>_XM-qyX0pW}*IOk^sb6ys>JYbQ$cG4I^5>ld&x1iHinFo2aB=K)VU9)RgCnDPZK zB3uOx6!WBZ!9p=D1V0};6Dmpw3ydu^7r-FOP&NGpXu!>#aM(B!`lP`LHj+y@XL6@K zYhP(~^R}6d7N19qp;C|(uQhhHRwP%nyt;d9?I}@*%4!4Kqc66oU@m}8A)*touGM+Oo~kITIa5eJ6x!e zmrlDB8Bx`to>tg5?#*aGp-GEGhS2~SZ{9%+ElpwPypCWECpx$|?9YB8$vje4)U_0eB8j zLyha(Qw%CBOXp;ozRG>Y7Hp|pHk-9-;ZdpV;A;^J9R~Q4G)!*sO{B7w;NlQRZvAOFh6EZ*T1Oz1B+LD|?)}-#JW@E4`7X&iwxW9BX z>j^}B#7^dgGw~>#XNt%QIBSvtoP416Z~01j)85&Z9Ew&d?_m)4+njwq5Xcbi0~39K&RWQ^E3K zi6CUGUuMFwm{z?9Yx=cS#ShLG6s}>f?Mk|bu>Mq%d9Uj@RushcrWYeV?3n3g5RGdm zqrTlE?Fk&LgdiDwIjAwC#eu#Qexe0d zm~yNQzdDB{;_sMMk{o`+s(JAda!epJJ%$y4{G5m=3&q$DMN}nFs7s z3-Pq6K{)hljdJ0h22k4sRphI~`NG)(`~Fi9a^h0_{aA&AZRs0;$gCD{LNTo=OoSHe zccQ3hbPp0EKbP5qraS zv(LoQMP9HE#s$|^esEVW>v$#xFy>4}Cp@G!N5=jL!os`J0X<$VCU8q-Wejb*%RT0t zwsL>pw-Sx9r{d-nR(Yx^zvgXow*PYQn>SiDlYJ{$(fi5BiiXcaJ2V}nr6daPw>9SX zK@mT5{8J!|4vytoFx4MAp>`XAZRp|+@DjSJC}*He*P?bK9d@m$a0aZP!;cviCQ72` zgZ8Bbx6v%Zj`;UOd#EiimPN`*J4bgAw#qKDvIt&@K3kUJc>$q z;qBc4!ROZx`P!WyvjU z6#)!9sY%2sdpLt^d#DIpdX5#~b-;sv6!cX` zeHe?Gpint~;&43g?beDDXwsCmH`Pv4TCr!Jy4_y$uB#8>FJQnPU%V{CU!QOwBsKP= zxv9SCzVjVsi(TI=kNmiuW{?`Nrajg5x^=q*oxwCLrR5U)78b84#>!yiv_IG|SJuUy zMgf-#KC)rGB?m+##d&%sDl9WTz$LT&O&0KBdh@XUJ-BX-gtq*FHDE$C`?jxIy_2q%qhiZk>81$E~Fh zlNc(Ka#JJMJdP&Sc^NnO5w-=*mfg!eO;00s}mxxoiS3#_7}7y!~) zW1+HM#IdNzWfi)M%rWyrcucx(O{C}+RFCpDj-V)_vW<}CJA->Ancpr2N@tt2+IWU( z|JvI4jdYaJVTiy|Qd9~~NQ2OX;&Ds!^ZW6Hx1fc#J<#N^WxjW7-SI=r^01e&IF-`q zkv!xqCR-OG;#ZSG`F|!^bh$BQd~j3Mb2qd$!TuIm4<^E?Fe<%B)LM4+q9Eb2=B&yq zvD`FU3m}ouy}vvX*Bh_$KM=!JkQIOvld9J{kTA}*XkrsWZOQH<9;@j75m77LfjK}L zMYk;5Q>9)yC<^cM%(ONnH3xA3aVz8#@mNDkvik1bloYPf~JNpvoc7!as~m_7A#1J*a@}`kmZw!L_-QSanoL`Vs}L@(ny1 z0!H|u3sJ5c0*=xEKdK|M?#g}-Cjt0a$zk^a`b?0|tv*ikCd4J$1-xLAMkbt?#3xi9 ztfGjL`ZBDE#E=Exwc*Na1};c~Dek44{wwd;iCmiuJQxvCPY!%MDV}}K%1UDl>|EqA zuYe(?P`n$y!f;|XUC!2UE)OO+aJr?zYpFBLi~D?X4T_*O(?O!1QLznKsV^&=0zw&g zZL;of&O#mTo}^)(QSzGO9cAM$!^oVF%rJgD$9g&VfTV-6_dx9k6nXt|+_p+uIO;_K z4%$Fs+#?*`C~L0t8)B?#@#2FfXcm!ZlkP4Fjt=)5Qnr`X(JEZEOq({EQ#vJsb;IPwqa3hT0ZPpk^ zdX5^(Xn)D_W(fm7u2xwiiVkF~jmJfpn8)|(i$$Z{i&s#zf`N@02V$T)t@ES$D z(KS{H35qNf_qtjhDxS46IFt@RnIUf1n}mv0hnN`DViNA1US8sVta}DG#gTeJ`ZSH> zxPoqW?ZV`d0o8hcd5uye8}3(ror_0qifI)=;Igm$E2Bzc_lJKDIH%eYrbrrWzNkDe zmFe1nX+1}*ClKHZJ`5`9UujnRoqm7=H}V5BNg755-BO|e_N2i@h)6d_qtHa#W`+N! zG>ABfbRlgtpI?W04?K=@W#(0wk?(dlWZZonRMj_|Ji|b$ZSIJPeCg3gnstuD>UN{C z!EOl(#PHE`f*5@MZow&c$${H^>3K0E&+FFXfrIqr9xX+3kGUbjoGCPMVX()8Ys_lk zUdFW8sqr&M_4(A=vKj7%teS%lttKhrd4_VMPh8GA*$rPwPT|+J?}+a!u&jI)`C!4x zsIKz=YI+Ry51Dsuu1`}&HeyY*DbTJ^#_xMglgxP zdsd#yTBU2D)lpGk|L$N+Zbxi~AY+)5F_A~RQS@>pmW|*-`3>-(VTTp5<1|E1YDQ!) z1mAHXy!Tp>x7rx8W@RJr7FqHbYHws2Q*};U-5wIr&O{eSVfwIiVeQ(=j^lGOk4NPG z&iT9ygy%QCL{2R|Knv3Av=g;~$tXCuU@GCKV`Z}M{e>6exC#88*LHPtwb-z2pMNb% zN%gXjG;gd|{Tn!eQwuxutWk~rn7bNoAfDf>b4BAFp}7K9OE7{#rnbGBV!ug3Hu0wX z(mf_l(J`Yl)*q2zIaXUeZg~?fCvCd)-^}3@PIyPl0#|Qg7@IwhLjq4|n=B}wH7l%N zgM9@?p~KQ{W=MDMzYFV=?3)%?lbor2;-gaL_n|>Yr188Ec89LX#{8UL$+Yk*UJ_}i z%+DBn_OALldM{+&F=|f}De;eX<*r$Tv6YQ$3a}b>r#PZbl z>1|Q#oA_X8qP2cu+)Umpiw=EN6ap!gTXEIq#dSV$CplaUvf~wiv${6h)*e7W^~?Ne zbe_d&DRH_Q!?1$ANxLInaN`_gQj=}6G_e9|X!E=}bxKA9sbDCpPiq`m@7(%4OfBHr zqCVv-vizBdZd>E`zEwrvX7DQR z^a0U<$J`tzU&bVu8rBPt{Q*PNY=_8TQso-5eH5QZ>vQ8-y{T?y1Uf^kGl?_=#9AVZ z<$8P^nV1{egL8%eXE1V#fBjSSDyy3Eu1XRu%aSL|u<8|Uz=h7voskI0t{OrN7yT`Vmq2-w~(QTuAsmu z66Y}vvRTxm{Cnm=)PV;U?xYigmV$*l>xs_p4ugf2d_5Jt@eN(gWk6WEu~$07mGNWX zJGAjDdHZ;?y06TgafVmU@!-tn(Ip5lDlr0*mdM>FIAUt{@%?c(E>s2Y_VH%!DClbO zVo901;OfLUiSP?L7|VTjMS(5!BOm#LwcRo;RrNeCayKyX1&-_Aqp0`qzO>DMN2&CG z@XK^0*rC-%V0041%?Ye5$jVv-O4ic06a2scQKR6a@}Jn-g|LL!=;e!&7(lkOjz!G0 zVm5m7NDC%r?ZejAh(<`)S$2C_`5p3I5YvWcW_@C!}ci1s0rq+ z>wTbvQez(fP7Q3iG!!?9yZiZ;laF=2L!t5Cxc5@tEJH!X{jnxnmI_Z?Ku6VIz1(Pd zhpbx0B^Y*3_P+y^gJ+^VdY_hd>2?4MHfb9=U*a4n`3l8@2XsS5;BWhNHCBjxsUL-< zx((%r;b$ls{tJ|;EE2or|MBVj%}0}%E3=!@x0n^ZHz0(M>(>F;jlI|fu{lv=I&+jy zt3ksDP{-DbI);L{DE1l-fS$~1ufKdBE8i|!8SEziNpE}a8YPp8o9&x02>~IIWO|yO zr$*@rDSWVFOxGxm^c>RiL^`U&=&7_yOVfMg`|ZHuZSXuOKht?k*Myk{#>I~k1djgZ z^g4Bcq9wFf@--3MkOY*1W}aAT>gyNBpH4#PES;{?=tbX1mRSSUwgufY~Fp+PYNk|MHFaY$T9R32<9P%pHw0nr$1vR%W~3lgTn9_d_^fI z)0ulHIKw10DcT6|n@|5+cLy)INq0bCK7(ZGNOFXJAE-qV7_YFAd?Whl)kU*e;Z3cV z)qfWIOs8T7Ts^Dmvk6()RQ8Z_9#NZp@|=-v>uB1P$gjyI(~frj?#=;$MaBc>lXw~O zAwf^Bp0UXHFR^f+hJ4Jd{3m&Fh%M@dOj&@&wyh*}<&Mw*xzK=mWtGGJ$5;@oa7+vn zq%nbCibc26h6aly>>`Qeg z$Rt!CXTr%4yBYfM71VE+3G_~o{tFysZ)L*I%Z5{5LVHC+>$LZZr8jbQT!x{kPKtm} z?sj0lb?BEOs8*8z7|tx<`WB*j*a)awdeZ((5rT9mRF{7}V6Et$GUk83FZEKSaBg2| zF~bBMnpay?4xGb!*mo@M!6Z4VcvUm9ju<6!{(Q@JSKZpgBTluT{v$P+#BxnK1}1B6 zBDXLwCHZIgr%&I+UOe`4ZxtPnqle;?VM2bT4A>#Bg~7R{>?na3n__yr*ti;7d|C4v z+RDI|fckZv0{9!JPwC8_wDVVkuatUM{6E=xh)JVU9BAistQTXPHd9cfA)3xF;_k=d zbxK^lJGXz)gdd%bJ#Yp9E+nsXK}5$UV57Muk*7dQ$1tRqcmVKw$9i;r3zH@IlzYv- z*G;xy$j~=T-3`M=tZtDAM$KeQk4)`v6?BoNe&7Dog^@osMzRQEAlJS}XP|Kz-4*Gx zpn&{i>7v24;%)q>Wd)fFD__hFT8q&f zw(G4YUKnXNo4RMExGrRL|j1Ru}_*LI8KC`A}QV zdMD+LTB3|eZ{Ji4Zvh*jt|YWS*ub2@Lwa5CB`0G5q{a4S`0eYna7b1(CT2D@@-3bE0O#@NJR%Rk_GbA36H*k%ms)A3oH zWGhq7HI(r2!;GcfQK{1X?Y;-|`mM~B_5w6rjYMB`9q|1H3F09@`QJL#|L9Nu*<;Gd z`v3WL9Gw5HQ*r&@bSkYMohng(#Nm_n&8z{1X>v4Mj{c*d!PE-_Yn;~_pl_(ZqISXH zeWr|05F79*!Nf|+BCSr?qz(HQjw5;^=02K{bV6O)=yUL(e_mKVL_-#J5 z>x=Q_T5zZ5Gj(A~RY9LurE~1;d@{B2UpbDV#*&7hfwYO6+WQ4Vx3QjDm1BCS0Z;C> zxQ418H1<{H?sqmtPjs#6w6&q0_Myitx_=sqh}^sWnF5bHB$6oU~OmV8}_%*VJKR*08nMEomq|a1V^ugV!>M*(enWYs<_+y#|i=udu{sqva|04XR&96#D%5YnQj(ygLTXL7Zy`;^9whd|1`OoE?!G9-h!}5;B?gAIA^M zo&;S6fo`RokJ)hxKhH~F??UccBlqnr{SR1U|b{8F(LrTz1c73gYEp_}80x1ck7~G4A=D3O<$%(lB87wwLw)zeVh3DbDTrGnB)By`D{#Si0<$VWe z(^ZGvNH;+eu_mb%%Uc=8Q0aTPnusn0rfm9?T|h)%Kj&Q9*l)4kG3o~(V(kWkeiQK; zacxH*ISf(to~t-X8Mv@ZDmpYcyt($Vnib)h9ihh4Q{r{bEbOMeu-f--aoDFu#XM!-$I*)_GSkc%_ zBOG9q#Ma*AS9plP)lZeKx0+S5sFnOw=zO;$zCfm zb6_LmxA%wvujjXFA>NIpm++2w38xG7_R<96~;+V(%5;(a}^nsyd1e2&$Jd|zfZ3EjHDQM~A!_DUmb-|G*(g*|G zKh7LtkNk(;$BN6uMQyX4H{%3RD4N;p^aA<{VVQKlG5GEgJ^1QaoUuMa@!SN(9K|zQ zrBUDcLPjq|^ecg|yMpAd7PlXv)y3wl;m44%=&9@z0Qb7_Hj(mluE_+|o7DW`@3SVK z&nqn+99NKW=gg#_pGt^wO803N z3n?%7gL<-hU3>xxULBMi0$g-wplQ9-%=GsoZDmLbh2;m_Xm@@pU4%$7WRvM} zG0bATxka?QH>ld*1T0!CJ+orqMl3O$kQXQhxnA#R=HTC0Ru6Winxd_MkE$FDNWc;F681_&p&}Kz_2#>T{eRx2n4fto}KJMc>du2n5t~ zew>$eeQ~`}LTqPRcgpq>`q=TAiTVL!%$8GYtLU0ubv~JhVAU4RV8|IWSyemCrRnb> z*0az;L0BOl+TxAA4s+Hehx+u*a2l&02(RRrUCMPWGdX5eSfR{-MO=>tbtL5P7GVyg zSFhE}m9(AZuFKy{YP0b4M2E87<(NuKH|2DW{_BZ`2G-*EWP{mmeupY(Vo9f^3Oz7f z8_-z)YV$_tS7XxMfm}8}`wE@LQ@q?w(FMS)z1-EWU#qx5V2__t%dggx*Sx8)s4EV= z)m_y``#@SEgiRjIGC;s*yJ!|JgLtFZQb^k83nfB&tUkq*5rXZu_fs^Ea&^7V7$$RVHE*RD`YIXz zuF7(nfGuz<1?v&lb(bh9K;)(8t{12=QGuRnOv^D{M|3wIgs*6Q7 z2E=#Kqa+3s&}P;+p!tg4jv@GR6%nQM=hu zoZ@jwcl=v3C^G&1-aRo?2C#5~*W=F99IZk_hf51{2G?jk`HvZUf*A)R{%o3}mWR6xE`%hOUnI05IT9SQh zq?U$}4=-ti@+Z_6U5{z-7VEX(`w?nlg%U0775N3ir)ZDeGP7P)*h!XTE2BkgJ|=Z! zRc$QcrL$^mP6wb==Lz{duvND3V%+rREuWb=xKG(!KVK!G{5(smP#{q=4|p5y^`q4k zaj5EJa;JR6a-lsosE*-}$+&jqIEEYMQeNx%)aM%-RcJ#pjqO)r$~FV?PKf!!ii)s< zM8Y{{UQ`I&&$Q@=b4S7+jO@Xi*_}DnRHM@0YoNxfxdWjkfr_FNAQNl`MSJXIP2roL zpVXEneop8opfwXXa64|+E8rq!MjZ^aqchIGblfId;Df$f&a52KSJCLLTl7zs5;Xm$ zT<+OLY$I)SR88RYFRd#WL5s&+6R~2x+Y4Ui2qmcYe+#v5>`$V)jjOOQ`4h&ou)RUH zxJrJITh0O(Dk+J&Ud%30(6;?KG^W^=q>8siO6)?&m8<4G893mNu@$o<(R|rBHASIZ zBG2i@YMGYLf&bp=LVd(d$8F)mGC7CXdmY21N+uq%#?08xY`rY@YQyfT62)I17dv?8 z7@>Zwja16?lxP)Z(Alye7$fg%%Dp>-^~KE;rOmcmi4h?3nDV;Kba)Kz&t>5X`?{fJb5|m0-B|Wp%oM4A8Iytg%Ce@RLk1S<9^= z1|mfnkxZ?Hg^zw?Pf9f6=J!v72i`|=r_RF;G+U@jtlX^_%OH2<&wnt*{Qy^P-h|($ zOopMN=<(X&2Y2#4%C6R-Hmz%`J&r|n6Y9T;%sf@kz{hWL3fch>=mf*x0`MC3@SASy zgVys9cN2#4Qb9T`k=-B#gG(%k{PrMELWr#gyM(QsZ81a2+F#9AX^8l{j@*^^`FVYs zA{A~Y*F{jNWtKh){XnAb%I%T_A9C67G6RKV^802Et@FcXljF@9;c+Z~%V!1}J;6`R za}(H`Y!nxB3#a3?!j+aO&)}#zbDN3BwHZxt=EWXb$Jvx;98X3dP)-&%;e$%B&TJf- zjIaID$2^(V!eoDg-PH#R7w{W)loOTX!mF58al{_5#k?O=>2F1pY|^`*yR||E$7{Yu zA=?gVX^}{;O$xBhv;94Jpjsf#%grFLolFenU$!mUON5y|IB56|lW`-{fel%x%elU3gevPCLq!&M9M2*? z4-)G|$Jn;fLs>Jena()7z0heQg-hlDl*DcwlfZ`(^>DEHWxlxy$+*1YTe!O{+KI@= zp1~0OJ$$%j*ucDhwC_L4#2n`0aL^y`A;;?IQ^=h~!IofK8fU&7c7%*UGZqK_i!BDR zDOT71NXxP87i*oS-IhP_KB=~*q}6EH$-+VjE>J5$v%r&bFLvGj zQTIH99PF%1#6;L3Q(@Z?#$*3m<_};x;k)A1hHZwqatD)0KkI!%W)wIuXyY>Y3gv0l zzojogN#;6O9{#CZ0AdtUm4no zBZNvsA`93q&U(u^mQ;`CLLr|kQ>pV@WeN~_9Z?VS_JUK7O$`jsqm@S{AhTD_O2RmL_{knsMXI$iI#>;sP_L8==j4 zDNtk7YWJNw{O~};`yatsdW4C+(bx&6}- za}5ODK;sGHUS2@BRZx5f$Vl7g;t^3^_qpv)g<-cRjpP=>l@JqBadA#lFvB_n0g;I& zq77+W#yE?J^UB@hW<_f~BYxr=ZD}V~;J*jBA-`}Ph=JTxM0aaSJK4P*I&c0W;D8S! zpz)wW1hwC1Uj$&m4p13i*Y0s;r z?Y`d}Ufj60>nN9)wa)mf5kMAA?-SK_SUxuN-Zi7;Q8ogkMJJQ(Bqkh8F^taoK4!FciEIn$cMuy5}cQ=S2kU{p$wzv;`x6F*%msy-4Er z#E|(;1F_{0EyRLVso5ix$lte^re3gP4}{p>&W50I@m!8fY)*WeJb@e9Fao<#R5%2znQZ7BruI#~D z1H=Q^PinQxc`k7=R$anxC7nNd*77ZOjJ1jcc2CAHPW zqGiI(Mpt3>ek9~XJme}2tevzhK2a7gQ`ogqW^VqiRz7=6=wQ*_OR6<=q6%489BkJa zadpP*O!!iBDsjb{!?Nyq66H4Kl2SOc>tXY&aHWhBTkV!7hIEhMqL{3Jw0&g~d%$Ge z!Z0WZ{88M@vfCil2GgEM;;X#}&m{+Uqp2~yqUjhPtR@Z^n2K=?hKiw9Tq{L)@srDi z0x6WHvn;BZJwzF)EgF5(g?|~1vWzSl7=~mS13q2jMCb(jkbbY5zV)d}`htcMZCUyt zAZL*1<6;~p-tvq^YM>qNcZTZmlxOEzqmj0AEE!_%ts#Ah+8%4#X2&NUy=IjyQs5Mu z4W0O91{b3Q-pfPrf;$StXO07h+^ab>-qao{jR`H-;4~5(Ge*~&2qD`!8 zGU4=6B_{5>5{4H%_5WgV=Y0C<=j;#AJ~MVUv;BBFAynrG{I3cEIA+?c=KlgWXY64? z5#~Ydb2dK%;GhMT9r^s@GAUfXlJ+>wONp!b;%LF=+rS8h?S~!zPfF-f3$#Jh(X82FKWFH?{n5fvh z+=psqqIt7nh&0&fn+N=Qou#CWl5gBxkLi^? zcyx5NG)M7&DVH+GJzeJ_r)VeDv-&uJart50W~Y53_ppe@!Z{2Px=`(&q)YudGJ)=q z4V0DT3CDg^vXEqTL6Q{3{VX+Ty(KEAn)WOy^Uic)UvNy!(L9DX!sXXFHqo6$Y3%lP zI#56B=NO+3gX2Fl&5m`*k}PgLdD_qz>2>9uALFWdA>~z`9~jnsr_5egY@H12oDRt# zLuEhLgQ@|Lak%98(fq@i;>)*`Mi4w5?s_%Cu0W6)e(n1UB{@vk-$yD#*GnuZZsYdB zALNeQt;~e<{7_NJWuh1N7U}?@dXS(B=j#zrbX^7|KK7`96j4b|_$RvWNlgqx!EC;j z^>d1n?E+hS-H?Na7edJM4+m@D982jK4cJBcIB_YAm?Fn@w z3|~21=vx38SSE5?-&{dQ0b<*M{Bc&#FZZws0vZ9N2$IePk|q>Zj-(8E`u#jN+*ms- z@C9*2G{OGNXEBv#H||847m%Xho(M)Vg$X6ArxD?i-^9c)n(RFGv-fOv_BVhRB`&3( z#g5igUMG;B?oKCb)!G%5&2k)zRuetL#i{HP$K5kXycZz@5llrY-zpcug!kCOguI~w z*BQC&FZjx1o&j*`l-Au~%#1P7KQlL@vmLNRk~@%P`XNr5P{{ikz6(}~a}hN_?&L~0 z$`L02?k4cRIFN>|c)Z@Y21X-dQTAdeQdlBXm@Y6;;AV5#!%67aTib>n{6K)V)R98I zSL*g3HkEc0IH`+H$)-()iY&_IiwUn69EGWD_KizX%#SvF-%dX&UQ^m$@dP7CQ}0*C zrxXfYT~i>kSNDbO3vpPcS2OS^jc#!f`EZ%>z)O?2k5(yr7R^}huqk_{*UcvSxY}fd zX|8a6bmDN0&Zi?UsJr131JdDkvDBC(Kh6%k@V`u%re=-<-sH(hM)*?3O95ePiASus z!ty~2H`B)<=7#68DFg!M#xO95s?#zAn$9Fpdm59D6S`*P)FrBQ)Fp8OvnQ{pv4oAY z^dBEsiDV0DFznhD7rS7Z98{ySU>@Q;sjp!dE+*P4!~8FLZy_QOALi6=WrDF$Cf2LZ z+C;x7$1$>OsbeoFlYn%?Y{XUuyLqbx%Rt8=27wC?C0>hRtxR%UKd{>!f_1PjM~hrh zUF@C~V?FH7Zn-58#=4?>CLz9w@8C+jK5}Z=V#fu`ssVhtmBNmWz+2K2k6Q zrN1NykJJu@^BiHjAbd{V)^=u|Z=ANSw*#Js*F&N`Z?4vX0<$hUqqe`<zU%2R}<6=6Tm=_#>ztcCUU+`Un`Js#Ywx|VzbA0f!3T=Od z?eq0$@wv_z#wvNuG&7{p*4eZ)XN|&Q*fd0yQ`Wdt8Boea@VOeRlHN!iz0VwkTNc}0 z@nt6ANcxz<;lK3Oglm!V*Xk#cv0q#tGP!5Y5A9N%&p=|=_H};twAWf^;CG*%#eg%> zJ?M1%c1fEi(G_8}N(Vbp@>gE|bMNu8%Af?v|MRV`PI>hqgSY-)xBp|6bKJ@lGB0Yt z_uF0oPv+iBGeaRAGDlOSX1V2Yz?OS_!)Qrjx4p8qWv5ju!?1ZII2(7VyyA`e#wd;_E#p1KA;D5ljIclM z(t&qcPRe_BPcty;Z|=}&GgL{vv}oDSc*og&3b&kh6r-m^ikHnz!2ao8xWVUb>o#7% z%Omz`)`CPRCrIJ4yx4ECo!@T#mWIEHQOHB(X}SD27KBrBI1BZgw`gz>lwm%XK~%N| zBvRIdgNSgy_$~R@c1P+5#ZIhPX;2KyJe4wJq~(N#`)tzXCDV9rw2FJ>P~t!w{#YnO zR9$eb)>oub-Bd9d3d@Q>2BpB@1g4}p`WCaz2vE#`s3>+px6yvUO^|b&#bF=KMN#(R zf+Dk=Q(ZvE7-W{PB2JXNThQ3rJ%FvGQZQbzeZqmjTn$>_RgTm@>2tKmmsNpXyHU;; z_ww#HI(Np6Q-SLmKl?8;Q}@M^`7beJ55|(kEjj&!!P=$&B!2?7SzK}Vl3nVrBTa)N zzw^1-;II68-lCdqR$ReQJd*)FR<=<`4s3faHoElM<20zT*FaN;@qF- zKH%mKPfR=z?%C6zbD-3-c~C$e{oe5E&&l0CoX5Xy2xHkL^_VV1Br&=Dn6C9)1v1=e z9!`TZcXFA2c{}N6ctzd!^D*_{l_qvT#g*y`$;necR3?$s`eYf>5tVk3DD9Al6mp_x z$j5b25n$k}4%CchPoQN?2+4qK?*1}l!Se6(9)nH^ z+R1Kh4v9@W1wkzf*d_um3-$)zigl~o^9@n9il?1`6yYn!K!i;$JXOo$QqsoaiGLX5o=S;Qqj=}Z4mtAB8()$2r>*n6T_mTB0vj?N;=MG?{8uWFIdsXKVJyD3ji3x)EYXZqd>}J4$IE*f(NI~HmAvO61d6wrd?9CWaHto$ z&dXInhPEfXKUUNb^9bSDWfpNXKQ3vUN(4_XVje35GK#`k5e3*YLkJWS#TZPmp?kCU zgSzSF52>dB!kJ}9FAWrx79k#l?47e?D3+v7u}nsmS#-mM2&8U)wP)!-^UhFYo|d8# zlZ-5k#Co8cj z!AO03Iy-tg1q2YUkq>$CJgevvFLO0;KppgLQfPnkTGB>Prl4y`;6BL7Y2KpEyqyr| zDXZ(Us0<$-eTDA8|4AM>ZtBzFLEM^SgxTs17qu*f{(8NAFuuBgR}BpQfe?cJ%7R1) z>;coIat!QcSS3iVn1C@i|AdNLyn3Tmw^~bTv+ZNKjKMXMSTS z@w-QetI8IF(tv|fgd!AFf|#Q70IgsWgd#B06#txy3>W%=6(Pr3d0qs*!qOH5K^~ma z-UO0r#N#LQiYVP6nH>Cv=NGCSu!<}UkC>++;5XzUhZ3Cu#W`;Dd=N@O_ZE_oCEzCt zMIjJHOey!e38Y&zfg}+N$0yoce@NG()`aTS8>t$nS=bH6wA|07?H2s79-pEvauT^3 zxII^V4qv~7p99v6hv=Moz)u3w6b>scymFAksjnGwd-Pn}-p-tsJ$b`btL{DOJv5_( z@%YT#djsifO&?`}jz~#`20ALwlZK9irseEo#qMKAnx)~oZwJjq1E2XY?PWn#f|k6GO*vZV_=zLVe^YBV{q{S%L5a$! zPhiUhadK|^p~uyEI4!QI{6-Q6L$ThQQc!9#F&cMI-L{*|09Irr}S z?*HBx?=TpnyQ;fuepU6&S+i?(&C(*uH4@tl>GiN(AgT>NN2Kasse*c!$}9_=ILDYT z8!2(8T(*cp8;q(~#bKbEM~kzp@-9G~Umc@v(!VSGs(QmF79xu{Y;4Q4cH0*LV~CB4ZOQ+(v_ha}+1oU?D<%WHI{- zAV+7!JL20{zC}RP$>T^_rq3?J!UKvAX=50jrUphuGGZoML8hh@NL3J+gm-d6wo8RKZejb`BlU&K)u@fSb zM~lKmi~5Hd0K?Oph0*(rFxZj;(E)-5k`-tE5pInAidE`h#@RTApm2A~%?}xfNx(_b zI_Z^riQ_AA!FXP82EATLaokObK9IkH&5j~m9sS|2A+Uxh014ez?}rWy&QVF{Y{#;~ zx!$)hl}*WBP4YYTp67u5O-X_-N_>;=U{Qy>qx^-qU!y)`l%yotUgX-5gNY@plG>5; ztLAW4LZ#`FSmeO5+n@W9>uL?b;JT_L3JXFYUAygb2SDS}3!`A0`a(2oJNX4a&?II< z#7Mr^5MxGw`9ww%m-j5*^PXgN=A;|-*gTpZA2kTbi6r`EY^9fElZuxJ6%;_`esJ== z_7g_Fg-GtRfDGo00lnmb_KBETM8DRB=h=;D?pFHctA`CeQ@N3T7p$-kuu|-7M9}|k-o$$9{AWwf!|&&C&0rxO-$Grw*?WN zFoymeSDe5xCLEFffcCl&C?Y8&513SwDkdRyT8A5E0v1M0!*3K5HZh1xVa1su#|lmX zAxUtE5HnPJ4c@#O2Yx1@lBv*i^UYBacdNqb4wM&j5kakr7s6~67};WDsm7ZxACzH{ zG&jQlcHm>3jQG9PwcGVAfHk*3t}r#UOp(uqC71ReU>yG-kl0%XR0eOMB%5g_0uw#I zN$h%O*uBVYS@w$KqVP2t6BLTQxDV+CdsPPcd5VMs2kUoQG?~qNU!s7>9jY9! zG~QRlyWm}l3wW#Lb^8NR-|FKt&I-DFTBGTfHsErwCYLQWlZUGM@_m>McDo+3UZ;@3 z9PCRD#zsfW5y@%P<|LI7tMsJdh z>v5JGa8h_4f}-{Sh4c(QqnREt$7I0*j&ayaxyh%%G?>(37TkpS-Is{KAGvkHAj_D( zOS?+|7QZ>9{D_e6u%0A_!-L`;!2-4N^?RP^JU`sDa?gieqfci|wUf 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

TSdgy1v~h*#$RHJ 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 z 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

eSEHahMMknTU&RaEa)kD>3$1=BGff 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 diff --git a/deps/snappy/snappy-1.1.1/testdata/sum b/deps/snappy/snappy-1.1.1/testdata/sum deleted file mode 100644 index 758fd815aa4b2269804ca8a218397cc46e0aed01..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 38240 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 Z?0tX3N_ui%8ZY;D`b&fF^?SEW{}(2xSpfh5 diff --git a/deps/snappy/snappy-1.1.1/testdata/xargs.1 b/deps/snappy/snappy-1.1.1/testdata/xargs.1 deleted file mode 100644 index a9f39a73..00000000 --- a/deps/snappy/snappy-1.1.1/testdata/xargs.1 +++ /dev/null @@ -1,112 +0,0 @@ -.TH XARGS 1L \" -*- nroff -*- -.SH NAME -xargs \- build and execute command lines from standard input -.SH SYNOPSIS -.B xargs -[\-0prtx] [\-e[eof-str]] [\-i[replace-str]] [\-l[max-lines]] -[\-n max-args] [\-s max-chars] [\-P max-procs] [\-\-null] [\-\-eof[=eof-str]] -[\-\-replace[=replace-str]] [\-\-max-lines[=max-lines]] [\-\-interactive] -[\-\-max-chars=max-chars] [\-\-verbose] [\-\-exit] [\-\-max-procs=max-procs] -[\-\-max-args=max-args] [\-\-no-run-if-empty] [\-\-version] [\-\-help] -[command [initial-arguments]] -.SH DESCRIPTION -This manual page -documents the GNU version of -.BR xargs . -.B xargs -reads arguments from the standard input, delimited by blanks (which can be -protected with double or single quotes or a backslash) or newlines, -and executes the -.I command -(default is /bin/echo) one or more times with any -.I initial-arguments -followed by arguments read from standard input. Blank lines on the -standard input are ignored. -.P -.B xargs -exits with the following status: -.nf -0 if it succeeds -123 if any invocation of the command exited with status 1-125 -124 if the command exited with status 255 -125 if the command is killed by a signal -126 if the command cannot be run -127 if the command is not found -1 if some other error occurred. -.fi -.SS OPTIONS -.TP -.I "\-\-null, \-0" -Input filenames are terminated by a null character instead of by -whitespace, and the quotes and backslash are not special (every -character is taken literally). Disables the end of file string, which -is treated like any other argument. Useful when arguments might -contain white space, quote marks, or backslashes. The GNU find -\-print0 option produces input suitable for this mode. -.TP -.I "\-\-eof[=eof-str], \-e[eof-str]" -Set the end of file string to \fIeof-str\fR. If the end of file -string occurs as a line of input, the rest of the input is ignored. -If \fIeof-str\fR is omitted, there is no end of file string. If this -option is not given, the end of file string defaults to "_". -.TP -.I "\-\-help" -Print a summary of the options to -.B xargs -and exit. -.TP -.I "\-\-replace[=replace-str], \-i[replace-str]" -Replace occurences of \fIreplace-str\fR in the initial arguments with -names read from standard input. -Also, unquoted blanks do not terminate arguments. -If \fIreplace-str\fR is omitted, it -defaults to "{}" (like for `find \-exec'). Implies \fI\-x\fP and -\fI\-l 1\fP. -.TP -.I "\-\-max-lines[=max-lines], -l[max-lines]" -Use at most \fImax-lines\fR nonblank input lines per command line; -\fImax-lines\fR defaults to 1 if omitted. Trailing blanks cause an -input line to be logically continued on the next input line. Implies -\fI\-x\fR. -.TP -.I "\-\-max-args=max-args, \-n max-args" -Use at most \fImax-args\fR arguments per command line. Fewer than -\fImax-args\fR arguments will be used if the size (see the \-s option) -is exceeded, unless the \-x option is given, in which case \fBxargs\fR -will exit. -.TP -.I "\-\-interactive, \-p" -Prompt the user about whether to run each command line and read a line -from the terminal. Only run the command line if the response starts -with `y' or `Y'. Implies \fI\-t\fR. -.TP -.I "\-\-no-run-if-empty, \-r" -If the standard input does not contain any nonblanks, do not run the -command. Normally, the command is run once even if there is no input. -.TP -.I "\-\-max-chars=max-chars, \-s max-chars" -Use at most \fImax-chars\fR characters per command line, including the -command and initial arguments and the terminating nulls at the ends of -the argument strings. The default is as large as possible, up to 20k -characters. -.TP -.I "\-\-verbose, \-t" -Print the command line on the standard error output before executing -it. -.TP -.I "\-\-version" -Print the version number of -.B xargs -and exit. -.TP -.I "\-\-exit, \-x" -Exit if the size (see the \fI\-s\fR option) is exceeded. -.TP -.I "\-\-max-procs=max-procs, \-P max-procs" -Run up to \fImax-procs\fR processes at a time; the default is 1. If -\fImax-procs\fR is 0, \fBxargs\fR will run as many processes as -possible at a time. Use the \fI\-n\fR option with \fI\-P\fR; -otherwise chances are that only one exec will be done. -.SH "SEE ALSO" -\fBfind\fP(1L), \fBlocate\fP(1L), \fBlocatedb\fP(5L), \fBupdatedb\fP(1) -\fBFinding Files\fP (on-line in Info, or printed) diff --git a/deps/snappy/snappy-1.1.1/AUTHORS b/deps/snappy/snappy-1.1.4/AUTHORS old mode 100644 new mode 100755 similarity index 100% rename from deps/snappy/snappy-1.1.1/AUTHORS rename to deps/snappy/snappy-1.1.4/AUTHORS diff --git a/deps/snappy/snappy-1.1.1/COPYING b/deps/snappy/snappy-1.1.4/COPYING old mode 100644 new mode 100755 similarity index 55% rename from deps/snappy/snappy-1.1.1/COPYING rename to deps/snappy/snappy-1.1.4/COPYING index 8d6bd9fe..bd0e5971 --- a/deps/snappy/snappy-1.1.1/COPYING +++ b/deps/snappy/snappy-1.1.4/COPYING @@ -26,3 +26,29 @@ 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. + +=== + +Some of the benchmark data in testdata/ is licensed differently: + + - fireworks.jpeg is Copyright 2013 Steinar H. Gunderson, and + is licensed under the Creative Commons Attribution 3.0 license + (CC-BY-3.0). See https://creativecommons.org/licenses/by/3.0/ + for more information. + + - kppkn.gtb is taken from the Gaviota chess tablebase set, and + is licensed under the MIT License. See + https://sites.google.com/site/gaviotachessengine/Home/endgame-tablebases-1 + for more information. + + - paper-100k.pdf is an excerpt (bytes 92160 to 194560) from the paper + “Combinatorial Modeling of Chromatin Features Quantitatively Predicts DNA + Replication Timing in _Drosophila_” by Federico Comoglio and Renato Paro, + which is licensed under the CC-BY license. See + http://www.ploscompbiol.org/static/license for more ifnormation. + + - alice29.txt, asyoulik.txt, plrabn12.txt and lcet10.txt are from Project + Gutenberg. The first three have expired copyrights and are in the public + domain; the latter does not have expired copyright, but is still in the + public domain according to the license information + (http://www.gutenberg.org/ebooks/53). diff --git a/deps/snappy/snappy-1.1.4/ChangeLog b/deps/snappy/snappy-1.1.4/ChangeLog new file mode 100755 index 00000000..1478db55 --- /dev/null +++ b/deps/snappy/snappy-1.1.4/ChangeLog @@ -0,0 +1,2468 @@ +commit eb66d8176b3d1f560ee012e1b488cb1540c45f88 +Author: Steinar H. Gunderson +Date: Mon Jun 22 16:10:47 2015 +0200 + + Initialized members of SnappyArrayWriter and SnappyDecompressionValidator. + These members were almost surely initialized before use by other member + functions, but Coverity was warning about this. Eliminating these warnings + minimizes clutter in that report and the likelihood of overlooking a real bug. + + A=cmumford + R=jeff + +commit b2312c4c25883ab03b5110f1b006dce95f419a4f +Author: Steinar H. Gunderson +Date: Mon Jun 22 16:03:28 2015 +0200 + + Add support for Uncompress(source, sink). Various changes to allow + Uncompress(source, sink) to get the same performance as the different + variants of Uncompress to Cord/DataBuffer/String/FlatBuffer. + + Changes to efficiently support Uncompress(source, sink) + -------- + + a) For strings - we add support to StringByteSink to do GetAppendBuffer so we + can write to it without copying. + b) For flat array buffers, we do GetAppendBuffer and see if we can get a full buffer. + + With the above changes we get performance with ByteSource/ByteSink + that is very close to directly using flat arrays and strings. + + We add various benchmark cases to demonstrate that. + + Orthogonal change + ------------------ + + Add support for TryFastAppend() for SnappyScatteredWriter. + + Benchmark results are below + + CPU: Intel Core2 dL1:32KB dL2:4096KB + Benchmark Time(ns) CPU(ns) Iterations + ----------------------------------------------------- + BM_UFlat/0 109065 108996 6410 896.0MB/s html + BM_UFlat/1 1012175 1012343 691 661.4MB/s urls + BM_UFlat/2 26775 26771 26149 4.4GB/s jpg + BM_UFlat/3 48947 48940 14363 1.8GB/s pdf + BM_UFlat/4 441029 440835 1589 886.1MB/s html4 + BM_UFlat/5 39861 39880 17823 588.3MB/s cp + BM_UFlat/6 18315 18300 38126 581.1MB/s c + BM_UFlat/7 5254 5254 100000 675.4MB/s lsp + BM_UFlat/8 1568060 1567376 447 626.6MB/s xls + BM_UFlat/9 337512 337734 2073 429.5MB/s txt1 + BM_UFlat/10 287269 287054 2434 415.9MB/s txt2 + BM_UFlat/11 890098 890219 787 457.2MB/s txt3 + BM_UFlat/12 1186593 1186863 590 387.2MB/s txt4 + BM_UFlat/13 573927 573318 1000 853.7MB/s bin + BM_UFlat/14 64250 64294 10000 567.2MB/s sum + BM_UFlat/15 7301 7300 96153 552.2MB/s man + BM_UFlat/16 109617 109636 6375 1031.5MB/s pb + BM_UFlat/17 364438 364497 1921 482.3MB/s gaviota + BM_UFlatSink/0 108518 108465 6450 900.4MB/s html + BM_UFlatSink/1 991952 991997 705 675.0MB/s urls + BM_UFlatSink/2 26815 26798 26065 4.4GB/s jpg + BM_UFlatSink/3 49127 49122 14255 1.8GB/s pdf + BM_UFlatSink/4 436674 436731 1604 894.4MB/s html4 + BM_UFlatSink/5 39738 39733 17345 590.5MB/s cp + BM_UFlatSink/6 18413 18416 37962 577.4MB/s c + BM_UFlatSink/7 5677 5676 100000 625.2MB/s lsp + BM_UFlatSink/8 1552175 1551026 451 633.2MB/s xls + BM_UFlatSink/9 338526 338489 2065 428.5MB/s txt1 + BM_UFlatSink/10 289387 289307 2420 412.6MB/s txt2 + BM_UFlatSink/11 893803 893706 783 455.4MB/s txt3 + BM_UFlatSink/12 1195919 1195459 586 384.4MB/s txt4 + BM_UFlatSink/13 559637 559779 1000 874.3MB/s bin + BM_UFlatSink/14 65073 65094 10000 560.2MB/s sum + BM_UFlatSink/15 7618 7614 92823 529.5MB/s man + BM_UFlatSink/16 110085 110121 6352 1027.0MB/s pb + BM_UFlatSink/17 369196 368915 1896 476.5MB/s gaviota + BM_UValidate/0 46954 46957 14899 2.0GB/s html + BM_UValidate/1 500621 500868 1000 1.3GB/s urls + BM_UValidate/2 283 283 2481447 417.2GB/s jpg + BM_UValidate/3 16230 16228 43137 5.4GB/s pdf + BM_UValidate/4 189129 189193 3701 2.0GB/s html4 + + A=uday + R=sanjay + +commit b2ad96006741d40935db2f73194a3e489b467338 +Author: Steinar H. Gunderson +Date: Mon Jun 22 15:48:29 2015 +0200 + + Changes to eliminate compiler warnings on MSVC + + This code was not compiling under Visual Studio 2013 with warnings being treated + as errors. Specifically: + + 1. Changed int -> size_t to eliminate signed/unsigned mismatch warning. + 2. Added some missing return values to functions. + 3. Inserting character instead of integer literals into strings to avoid type + conversions. + + A=cmumford + R=jeff + +commit e7a897e187e90b33f87bd9e64872cf561de9ebca +Author: Steinar H. Gunderson +Date: Mon Jun 22 15:45:11 2015 +0200 + + Fixed unit tests to compile under MSVC. + + 1. Including config.h in test. + 2. Including windows.h before zippy-test.h. + 3. Removed definition of WIN32_LEAN_AND_MEAN. This caused problems in + build environments that define WIN32_LEAN_AND_MEAN as our + definition didn't check for prior existence. This constant is old + and no longer needed anyhow. + 4. Disable MSVC warning 4722 since ~LogMessageCrash() never returns. + + A=cmumford + R=jeff + +commit 86eb8b152bdb065ad11bf331a9f7d65b72616acf +Author: Steinar H. Gunderson +Date: Mon Jun 22 15:41:30 2015 +0200 + + Change a few branch annotations that profiling found to be wrong. + Overall performance is neutral or slightly positive. + + Westmere (64-bit, opt): + + Benchmark Base (ns) New (ns) Improvement + -------------------------------------------------------------------------------------- + BM_UFlat/0 73798 71464 1.3GB/s html +3.3% + BM_UFlat/1 715223 704318 953.5MB/s urls +1.5% + BM_UFlat/2 8137 8871 13.0GB/s jpg -8.3% + BM_UFlat/3 200 204 935.5MB/s jpg_200 -2.0% + BM_UFlat/4 21627 21281 4.5GB/s pdf +1.6% + BM_UFlat/5 302806 290350 1.3GB/s html4 +4.3% + BM_UFlat/6 218920 219017 664.1MB/s txt1 -0.0% + BM_UFlat/7 190437 191212 626.1MB/s txt2 -0.4% + BM_UFlat/8 584192 580484 703.4MB/s txt3 +0.6% + BM_UFlat/9 776537 779055 591.6MB/s txt4 -0.3% + BM_UFlat/10 76056 72606 1.5GB/s pb +4.8% + BM_UFlat/11 235962 239043 737.4MB/s gaviota -1.3% + BM_UFlat/12 28049 28000 840.1MB/s cp +0.2% + BM_UFlat/13 12225 12021 886.9MB/s c +1.7% + BM_UFlat/14 3362 3544 1004.0MB/s lsp -5.1% + BM_UFlat/15 937015 939206 1048.9MB/s xls -0.2% + BM_UFlat/16 236 233 823.1MB/s xls_200 +1.3% + BM_UFlat/17 373170 361947 1.3GB/s bin +3.1% + BM_UFlat/18 264 264 725.5MB/s bin_200 +0.0% + BM_UFlat/19 42834 43577 839.2MB/s sum -1.7% + BM_UFlat/20 4770 4736 853.6MB/s man +0.7% + BM_UValidate/0 39671 39944 2.4GB/s html -0.7% + BM_UValidate/1 443391 443391 1.5GB/s urls +0.0% + BM_UValidate/2 163 163 703.3GB/s jpg +0.0% + BM_UValidate/3 113 112 1.7GB/s jpg_200 +0.9% + BM_UValidate/4 7555 7608 12.6GB/s pdf -0.7% + BM_ZFlat/0 157616 157568 621.5MB/s html (22.31 %) +0.0% + BM_ZFlat/1 1997290 2014486 333.4MB/s urls (47.77 %) -0.9% + BM_ZFlat/2 23035 22237 5.2GB/s jpg (99.95 %) +3.6% + BM_ZFlat/3 539 540 354.5MB/s jpg_200 (73.00 %) -0.2% + BM_ZFlat/4 80709 81369 1.2GB/s pdf (81.85 %) -0.8% + BM_ZFlat/5 639059 639220 613.0MB/s html4 (22.51 %) -0.0% + BM_ZFlat/6 577203 583370 249.3MB/s txt1 (57.87 %) -1.1% + BM_ZFlat/7 510887 516094 232.0MB/s txt2 (61.93 %) -1.0% + BM_ZFlat/8 1535843 1556973 262.2MB/s txt3 (54.92 %) -1.4% + BM_ZFlat/9 2070068 2102380 219.3MB/s txt4 (66.22 %) -1.5% + BM_ZFlat/10 152396 152148 745.5MB/s pb (19.64 %) +0.2% + BM_ZFlat/11 447367 445859 395.4MB/s gaviota (37.72 %) +0.3% + BM_ZFlat/12 76375 76797 306.3MB/s cp (48.12 %) -0.5% + BM_ZFlat/13 31518 31987 333.3MB/s c (42.40 %) -1.5% + BM_ZFlat/14 10598 10827 328.6MB/s lsp (48.37 %) -2.1% + BM_ZFlat/15 1782243 1802728 546.5MB/s xls (41.23 %) -1.1% + BM_ZFlat/16 526 539 355.0MB/s xls_200 (78.00 %) -2.4% + BM_ZFlat/17 598141 597311 822.1MB/s bin (18.11 %) +0.1% + BM_ZFlat/18 121 120 1.6GB/s bin_200 (7.50 %) +0.8% + BM_ZFlat/19 109981 112173 326.0MB/s sum (48.96 %) -2.0% + BM_ZFlat/20 14355 14575 277.4MB/s man (59.36 %) -1.5% + Sum of all benchmarks 33882722 33879325 +0.0% + + Sandy Bridge (64-bit, opt): + + Benchmark Base (ns) New (ns) Improvement + -------------------------------------------------------------------------------------- + BM_UFlat/0 43764 41600 2.3GB/s html +5.2% + BM_UFlat/1 517990 507058 1.3GB/s urls +2.2% + BM_UFlat/2 6625 5529 20.8GB/s jpg +19.8% + BM_UFlat/3 154 155 1.2GB/s jpg_200 -0.6% + BM_UFlat/4 12795 11747 8.1GB/s pdf +8.9% + BM_UFlat/5 200335 193413 2.0GB/s html4 +3.6% + BM_UFlat/6 156574 156426 929.2MB/s txt1 +0.1% + BM_UFlat/7 137574 137464 870.4MB/s txt2 +0.1% + BM_UFlat/8 422551 421603 967.4MB/s txt3 +0.2% + BM_UFlat/9 577749 578985 795.6MB/s txt4 -0.2% + BM_UFlat/10 42329 39362 2.8GB/s pb +7.5% + BM_UFlat/11 170615 169751 1037.9MB/s gaviota +0.5% + BM_UFlat/12 12800 12719 1.8GB/s cp +0.6% + BM_UFlat/13 6585 6579 1.6GB/s c +0.1% + BM_UFlat/14 2066 2044 1.7GB/s lsp +1.1% + BM_UFlat/15 750861 746911 1.3GB/s xls +0.5% + BM_UFlat/16 188 192 996.0MB/s xls_200 -2.1% + BM_UFlat/17 271622 264333 1.8GB/s bin +2.8% + BM_UFlat/18 208 207 923.6MB/s bin_200 +0.5% + BM_UFlat/19 24667 24845 1.4GB/s sum -0.7% + BM_UFlat/20 2663 2662 1.5GB/s man +0.0% + BM_ZFlat/0 115173 115624 846.5MB/s html (22.31 %) -0.4% + BM_ZFlat/1 1530331 1537769 436.5MB/s urls (47.77 %) -0.5% + BM_ZFlat/2 17503 17013 6.8GB/s jpg (99.95 %) +2.9% + BM_ZFlat/3 385 385 496.3MB/s jpg_200 (73.00 %) +0.0% + BM_ZFlat/4 61753 61540 1.6GB/s pdf (81.85 %) +0.3% + BM_ZFlat/5 484806 483356 810.1MB/s html4 (22.51 %) +0.3% + BM_ZFlat/6 464143 467609 310.9MB/s txt1 (57.87 %) -0.7% + BM_ZFlat/7 410315 413319 289.5MB/s txt2 (61.93 %) -0.7% + BM_ZFlat/8 1244082 1249381 326.5MB/s txt3 (54.92 %) -0.4% + BM_ZFlat/9 1696914 1709685 269.4MB/s txt4 (66.22 %) -0.7% + BM_ZFlat/10 104148 103372 1096.7MB/s pb (19.64 %) +0.8% + BM_ZFlat/11 363522 359722 489.8MB/s gaviota (37.72 %) +1.1% + BM_ZFlat/12 47021 50095 469.3MB/s cp (48.12 %) -6.1% + BM_ZFlat/13 16888 16985 627.4MB/s c (42.40 %) -0.6% + BM_ZFlat/14 5496 5469 650.3MB/s lsp (48.37 %) +0.5% + BM_ZFlat/15 1460713 1448760 679.5MB/s xls (41.23 %) +0.8% + BM_ZFlat/16 387 393 486.8MB/s xls_200 (78.00 %) -1.5% + BM_ZFlat/17 457654 451462 1086.6MB/s bin (18.11 %) +1.4% + BM_ZFlat/18 97 87 2.1GB/s bin_200 (7.50 %) +11.5% + BM_ZFlat/19 77904 80924 451.7MB/s sum (48.96 %) -3.7% + BM_ZFlat/20 7648 7663 527.1MB/s man (59.36 %) -0.2% + Sum of all benchmarks 25493635 25482069 +0.0% + + A=dehao + R=sesse + +commit 11ccdfb868387e56d845766d89ddab9d489c4128 +Author: Steinar H. Gunderson +Date: Mon Jun 22 16:07:58 2015 +0200 + + Sync with various Google-internal changes. + + Should not mean much for the open-source version. + +commit 22acaf438ed93ab21a2ff1919d173206798b996e +Author: Steinar H. Gunderson +Date: Mon Jun 22 15:39:08 2015 +0200 + + Change some internal path names. + + This is mostly to sync up with some changes from Google's internal + repositories; it does not affect the open-source distribution in itself. + +commit 1ff9be9b8fafc8528ca9e055646f5932aa5db9c4 +Author: snappy.mirrorbot@gmail.com +Date: Fri Feb 28 11:18:07 2014 +0000 + + Release Snappy 1.1.2. + + R=jeff + + + git-svn-id: https://snappy.googlecode.com/svn/trunk@84 03e5f5b5-db94-4691-08a0-1a8bf15f6143 + +commit 19690d78e83f8963f497585031efa3d9ca66b807 +Author: snappy.mirrorbot@gmail.com +Date: Wed Feb 19 10:31:49 2014 +0000 + + Fix public issue 82: Stop distributing benchmark data files that have + unclear or unsuitable licensing. + + In general, we replace the files we can with liberally licensed data, + and remove all the others (in particular all the parts of the Canterbury + corpus that are not clearly in the public domain). The replacements + do not always have the exact same characteristics as the original ones, + but they are more than good enough to be useful for benchmarking. + + + git-svn-id: https://snappy.googlecode.com/svn/trunk@83 03e5f5b5-db94-4691-08a0-1a8bf15f6143 + +commit f82bff66afe0de4c9ae22f8c4ef84e3c2233e799 +Author: snappy.mirrorbot@gmail.com +Date: Fri Oct 25 13:31:27 2013 +0000 + + Add support for padding in the Snappy framed format. + + This is specifically motivated by DICOM's demands that embedded data + must be of an even number of bytes, but could in principle be used for + any sort of padding/alignment needed. + + R=sanjay + + + git-svn-id: https://snappy.googlecode.com/svn/trunk@82 03e5f5b5-db94-4691-08a0-1a8bf15f6143 + +commit eeead8dc38ea359f027fb6e89f345448e8e9d723 +Author: snappy.mirrorbot@gmail.com +Date: Tue Oct 15 15:21:31 2013 +0000 + + Release Snappy 1.1.1. + + R=jeff + + + git-svn-id: https://snappy.googlecode.com/svn/trunk@81 03e5f5b5-db94-4691-08a0-1a8bf15f6143 + +commit 6bc39e24c76adbbff26ae629fafbf7dfc795f554 +Author: snappy.mirrorbot@gmail.com +Date: Tue Aug 13 12:55:00 2013 +0000 + + Add autoconf tests for size_t and ssize_t. Sort-of resolves public issue 79; + it would solve the problem if MSVC typically used autoconf. However, it gives + a natural place (config.h) to put the typedef even for MSVC. + + R=jsbell + + + git-svn-id: https://snappy.googlecode.com/svn/trunk@80 03e5f5b5-db94-4691-08a0-1a8bf15f6143 + +commit 7c3c01df77e191ad1f8377448961fe88db2802e9 +Author: snappy.mirrorbot@gmail.com +Date: Mon Jul 29 11:06:44 2013 +0000 + + When we compare the number of bytes produced with the offset for a + backreference, make the signedness of the bytes produced clear, + by sticking it into a size_t. This avoids a signed/unsigned compare + warning from MSVC (public issue 71), and also is slightly clearer. + + Since the line is now so long the explanatory comment about the -1u + trick has to go somewhere else anyway, I used the opportunity to + explain it in slightly more detail. + + This is a purely stylistic change; the emitted assembler from GCC + is identical. + + R=jeff + + + git-svn-id: https://snappy.googlecode.com/svn/trunk@79 03e5f5b5-db94-4691-08a0-1a8bf15f6143 + +commit 2f0aaf8631d8fb2475ca1a6687c181efb14ed286 +Author: snappy.mirrorbot@gmail.com +Date: Sun Jun 30 19:24:03 2013 +0000 + + In the fast path for decompressing literals, instead of checking + whether there's 16 bytes free and then checking right afterwards + (when having subtracted the literal size) that there are now + 5 bytes free, just check once for 21 bytes. This skips a compare + and a branch; although it is easily predictable, it is still + a few cycles on a fast path that we would like to get rid of. + + Benchmarking this yields very confusing results. On open-source + GCC 4.8.1 on Haswell, we get exactly the expected results; the + benchmarks where we hit the fast path for literals (in particular + the two HTML benchmarks and the protobuf benchmark) give very nice + speedups, and the others are not really affected. + + However, benchmarks with Google's GCC branch on other hardware + is much less clear. It seems that we have a weak loss in some cases + (and the win for the “typical” win cases are not nearly as clear), + but that it depends on microarchitecture and plain luck in how we run + the benchmark. Looking at the generated assembler, it seems that + the removal of the if causes other large-scale changes in how the + function is laid out, which makes it likely that this is just bad luck. + + Thus, we should keep this change, even though its exact current impact is + unclear; it's a sensible change per se, and dropping it on the basis of + microoptimization for a given compiler (or even branch of a compiler) + would seem like a bad strategy in the long run. + + Microbenchmark results (all in 64-bit, opt mode): + + Nehalem, Google GCC: + + Benchmark Base (ns) New (ns) Improvement + ------------------------------------------------------------------------------ + BM_UFlat/0 76747 75591 1.3GB/s html +1.5% + BM_UFlat/1 765756 757040 886.3MB/s urls +1.2% + BM_UFlat/2 10867 10893 10.9GB/s jpg -0.2% + BM_UFlat/3 124 131 1.4GB/s jpg_200 -5.3% + BM_UFlat/4 31663 31596 2.8GB/s pdf +0.2% + BM_UFlat/5 314162 308176 1.2GB/s html4 +1.9% + BM_UFlat/6 29668 29746 790.6MB/s cp -0.3% + BM_UFlat/7 12958 13386 796.4MB/s c -3.2% + BM_UFlat/8 3596 3682 966.0MB/s lsp -2.3% + BM_UFlat/9 1019193 1033493 953.3MB/s xls -1.4% + BM_UFlat/10 239 247 775.3MB/s xls_200 -3.2% + BM_UFlat/11 236411 240271 606.9MB/s txt1 -1.6% + BM_UFlat/12 206639 209768 571.2MB/s txt2 -1.5% + BM_UFlat/13 627803 635722 641.4MB/s txt3 -1.2% + BM_UFlat/14 845932 857816 538.2MB/s txt4 -1.4% + BM_UFlat/15 402107 391670 1.2GB/s bin +2.7% + BM_UFlat/16 283 279 683.6MB/s bin_200 +1.4% + BM_UFlat/17 46070 46815 781.5MB/s sum -1.6% + BM_UFlat/18 5053 5163 782.0MB/s man -2.1% + BM_UFlat/19 79721 76581 1.4GB/s pb +4.1% + BM_UFlat/20 251158 252330 697.5MB/s gaviota -0.5% + Sum of all benchmarks 4966150 4980396 -0.3% + + + Sandy Bridge, Google GCC: + + Benchmark Base (ns) New (ns) Improvement + ------------------------------------------------------------------------------ + BM_UFlat/0 42850 42182 2.3GB/s html +1.6% + BM_UFlat/1 525660 515816 1.3GB/s urls +1.9% + BM_UFlat/2 7173 7283 16.3GB/s jpg -1.5% + BM_UFlat/3 92 91 2.1GB/s jpg_200 +1.1% + BM_UFlat/4 15147 14872 5.9GB/s pdf +1.8% + BM_UFlat/5 199936 192116 2.0GB/s html4 +4.1% + BM_UFlat/6 12796 12443 1.8GB/s cp +2.8% + BM_UFlat/7 6588 6400 1.6GB/s c +2.9% + BM_UFlat/8 2010 1951 1.8GB/s lsp +3.0% + BM_UFlat/9 761124 763049 1.3GB/s xls -0.3% + BM_UFlat/10 186 189 1016.1MB/s xls_200 -1.6% + BM_UFlat/11 159354 158460 918.6MB/s txt1 +0.6% + BM_UFlat/12 139732 139950 856.1MB/s txt2 -0.2% + BM_UFlat/13 429917 425027 961.7MB/s txt3 +1.2% + BM_UFlat/14 585255 587324 785.8MB/s txt4 -0.4% + BM_UFlat/15 276186 266173 1.8GB/s bin +3.8% + BM_UFlat/16 205 207 925.5MB/s bin_200 -1.0% + BM_UFlat/17 24925 24935 1.4GB/s sum -0.0% + BM_UFlat/18 2632 2576 1.5GB/s man +2.2% + BM_UFlat/19 40546 39108 2.8GB/s pb +3.7% + BM_UFlat/20 175803 168209 1048.9MB/s gaviota +4.5% + Sum of all benchmarks 3408117 3368361 +1.2% + + + Haswell, upstream GCC 4.8.1: + + Benchmark Base (ns) New (ns) Improvement + ------------------------------------------------------------------------------ + BM_UFlat/0 46308 40641 2.3GB/s html +13.9% + BM_UFlat/1 513385 514706 1.3GB/s urls -0.3% + BM_UFlat/2 6197 6151 19.2GB/s jpg +0.7% + BM_UFlat/3 61 61 3.0GB/s jpg_200 +0.0% + BM_UFlat/4 13551 13429 6.5GB/s pdf +0.9% + BM_UFlat/5 198317 190243 2.0GB/s html4 +4.2% + BM_UFlat/6 14768 12560 1.8GB/s cp +17.6% + BM_UFlat/7 6453 6447 1.6GB/s c +0.1% + BM_UFlat/8 1991 1980 1.8GB/s lsp +0.6% + BM_UFlat/9 766947 770424 1.2GB/s xls -0.5% + BM_UFlat/10 170 169 1.1GB/s xls_200 +0.6% + BM_UFlat/11 164350 163554 888.7MB/s txt1 +0.5% + BM_UFlat/12 145444 143830 832.1MB/s txt2 +1.1% + BM_UFlat/13 437849 438413 929.2MB/s txt3 -0.1% + BM_UFlat/14 603587 605309 759.8MB/s txt4 -0.3% + BM_UFlat/15 249799 248067 1.9GB/s bin +0.7% + BM_UFlat/16 191 188 1011.4MB/s bin_200 +1.6% + BM_UFlat/17 26064 24778 1.4GB/s sum +5.2% + BM_UFlat/18 2620 2601 1.5GB/s man +0.7% + BM_UFlat/19 44551 37373 3.0GB/s pb +19.2% + BM_UFlat/20 165408 164584 1.0GB/s gaviota +0.5% + Sum of all benchmarks 3408011 3385508 +0.7% + + + git-svn-id: https://snappy.googlecode.com/svn/trunk@78 03e5f5b5-db94-4691-08a0-1a8bf15f6143 + +commit 062bf544a61107db730b6d08cb0b159c4dd9b24c +Author: snappy.mirrorbot@gmail.com +Date: Fri Jun 14 21:42:26 2013 +0000 + + Make the two IncrementalCopy* functions take in an ssize_t instead of a len, + in order to avoid having to do 32-to-64-bit signed conversions on a hot path + during decompression. (Also fixes some MSVC warnings, mentioned in public + issue 75, but more of those remain.) They cannot be size_t because we expect + them to go negative and test for that. + + This saves a few movzwl instructions, yielding ~2% speedup in decompression. + + + Sandy Bridge: + + Benchmark Base (ns) New (ns) Improvement + ------------------------------------------------------------------------------------------------- + BM_UFlat/0 48009 41283 2.3GB/s html +16.3% + BM_UFlat/1 531274 513419 1.3GB/s urls +3.5% + BM_UFlat/2 7378 7062 16.8GB/s jpg +4.5% + BM_UFlat/3 92 92 2.0GB/s jpg_200 +0.0% + BM_UFlat/4 15057 14974 5.9GB/s pdf +0.6% + BM_UFlat/5 204323 193140 2.0GB/s html4 +5.8% + BM_UFlat/6 13282 12611 1.8GB/s cp +5.3% + BM_UFlat/7 6511 6504 1.6GB/s c +0.1% + BM_UFlat/8 2014 2030 1.7GB/s lsp -0.8% + BM_UFlat/9 775909 768336 1.3GB/s xls +1.0% + BM_UFlat/10 182 184 1043.2MB/s xls_200 -1.1% + BM_UFlat/11 167352 161630 901.2MB/s txt1 +3.5% + BM_UFlat/12 147393 142246 842.8MB/s txt2 +3.6% + BM_UFlat/13 449960 432853 944.4MB/s txt3 +4.0% + BM_UFlat/14 620497 594845 775.9MB/s txt4 +4.3% + BM_UFlat/15 265610 267356 1.8GB/s bin -0.7% + BM_UFlat/16 206 205 932.7MB/s bin_200 +0.5% + BM_UFlat/17 25561 24730 1.4GB/s sum +3.4% + BM_UFlat/18 2620 2644 1.5GB/s man -0.9% + BM_UFlat/19 45766 38589 2.9GB/s pb +18.6% + BM_UFlat/20 171107 169832 1039.5MB/s gaviota +0.8% + Sum of all benchmarks 3500103 3394565 +3.1% + + + Westmere: + + Benchmark Base (ns) New (ns) Improvement + ------------------------------------------------------------------------------------------------- + BM_UFlat/0 72624 71526 1.3GB/s html +1.5% + BM_UFlat/1 735821 722917 930.8MB/s urls +1.8% + BM_UFlat/2 10450 10172 11.7GB/s jpg +2.7% + BM_UFlat/3 117 117 1.6GB/s jpg_200 +0.0% + BM_UFlat/4 29817 29648 3.0GB/s pdf +0.6% + BM_UFlat/5 297126 293073 1.3GB/s html4 +1.4% + BM_UFlat/6 28252 27994 842.0MB/s cp +0.9% + BM_UFlat/7 12672 12391 862.1MB/s c +2.3% + BM_UFlat/8 3507 3425 1040.9MB/s lsp +2.4% + BM_UFlat/9 1004268 969395 1018.0MB/s xls +3.6% + BM_UFlat/10 233 227 844.8MB/s xls_200 +2.6% + BM_UFlat/11 230054 224981 647.8MB/s txt1 +2.3% + BM_UFlat/12 201229 196447 610.5MB/s txt2 +2.4% + BM_UFlat/13 609547 596761 685.3MB/s txt3 +2.1% + BM_UFlat/14 824362 804821 573.8MB/s txt4 +2.4% + BM_UFlat/15 371095 374899 1.3GB/s bin -1.0% + BM_UFlat/16 267 267 717.8MB/s bin_200 +0.0% + BM_UFlat/17 44623 43828 835.9MB/s sum +1.8% + BM_UFlat/18 5077 4815 841.0MB/s man +5.4% + BM_UFlat/19 74964 73210 1.5GB/s pb +2.4% + BM_UFlat/20 237987 236745 746.0MB/s gaviota +0.5% + Sum of all benchmarks 4794092 4697659 +2.1% + + + Istanbul: + + Benchmark Base (ns) New (ns) Improvement + ------------------------------------------------------------------------------------------------- + BM_UFlat/0 98614 96376 1020.4MB/s html +2.3% + BM_UFlat/1 963740 953241 707.2MB/s urls +1.1% + BM_UFlat/2 25042 24769 4.8GB/s jpg +1.1% + BM_UFlat/3 180 180 1065.6MB/s jpg_200 +0.0% + BM_UFlat/4 45942 45403 1.9GB/s pdf +1.2% + BM_UFlat/5 400135 390226 1008.2MB/s html4 +2.5% + BM_UFlat/6 37768 37392 631.9MB/s cp +1.0% + BM_UFlat/7 18585 18200 588.2MB/s c +2.1% + BM_UFlat/8 5751 5690 627.7MB/s lsp +1.1% + BM_UFlat/9 1543154 1542209 641.4MB/s xls +0.1% + BM_UFlat/10 381 388 494.6MB/s xls_200 -1.8% + BM_UFlat/11 339715 331973 440.1MB/s txt1 +2.3% + BM_UFlat/12 294807 289418 415.4MB/s txt2 +1.9% + BM_UFlat/13 906160 884094 463.3MB/s txt3 +2.5% + BM_UFlat/14 1224221 1198435 386.1MB/s txt4 +2.2% + BM_UFlat/15 516277 502923 979.5MB/s bin +2.7% + BM_UFlat/16 405 402 477.2MB/s bin_200 +0.7% + BM_UFlat/17 61640 60621 605.6MB/s sum +1.7% + BM_UFlat/18 7326 7383 549.5MB/s man -0.8% + BM_UFlat/19 94720 92653 1.2GB/s pb +2.2% + BM_UFlat/20 360435 346687 510.6MB/s gaviota +4.0% + Sum of all benchmarks 6944998 6828663 +1.7% + + + git-svn-id: https://snappy.googlecode.com/svn/trunk@77 03e5f5b5-db94-4691-08a0-1a8bf15f6143 + +commit 328aafa1980824a9afdcd50edc30d9d5157e417f +Author: snappy.mirrorbot@gmail.com +Date: Thu Jun 13 16:19:52 2013 +0000 + + Add support for uncompressing to iovecs (scatter I/O). + Windows does not have struct iovec defined anywhere, + so we define our own version that's equal to what UNIX + typically has. + + The bulk of this patch was contributed by Mohit Aron. + + R=jeff + + + git-svn-id: https://snappy.googlecode.com/svn/trunk@76 03e5f5b5-db94-4691-08a0-1a8bf15f6143 + +commit cd92eb0852e2339187b693eef3595a07d2276c1d +Author: snappy.mirrorbot@gmail.com +Date: Wed Jun 12 19:51:15 2013 +0000 + + Some code reorganization needed for an internal change. + + R=fikes + + + git-svn-id: https://snappy.googlecode.com/svn/trunk@75 03e5f5b5-db94-4691-08a0-1a8bf15f6143 + +commit a3e928d62bbd61b523b988c07b560253950cf73b +Author: snappy.mirrorbot@gmail.com +Date: Tue Apr 9 15:33:30 2013 +0000 + + Supports truncated test data in zippy benchmark. + + R=sesse + + + git-svn-id: https://snappy.googlecode.com/svn/trunk@74 03e5f5b5-db94-4691-08a0-1a8bf15f6143 + +commit bde324c0169763688f35ee44630a26ad1f49eec3 +Author: snappy.mirrorbot@gmail.com +Date: Tue Feb 5 14:36:15 2013 +0000 + + Release Snappy 1.1.0. + + R=sanjay + + + git-svn-id: https://snappy.googlecode.com/svn/trunk@73 03e5f5b5-db94-4691-08a0-1a8bf15f6143 + +commit 8168446c7eaaa0594e1f4ca923376dcf3a2846fa +Author: snappy.mirrorbot@gmail.com +Date: Tue Feb 5 14:30:05 2013 +0000 + + Make ./snappy_unittest pass without "srcdir" being defined. + + Previously, snappy_unittests would read from an absolute path /testdata/..; + convert it to use a relative path instead. + + Patch from Marc-Antonie Ruel. + + R=maruel + + + git-svn-id: https://snappy.googlecode.com/svn/trunk@72 03e5f5b5-db94-4691-08a0-1a8bf15f6143 + +commit 27a0cc394950ebdad2e8d67322f0862835b10bd9 +Author: snappy.mirrorbot@gmail.com +Date: Fri Jan 18 12:16:36 2013 +0000 + + Increase the Zippy block size from 32 kB to 64 kB, winning ~3% density + while being effectively performance neutral. + + The longer story about density is that we win 3-6% density on the benchmarks + where this has any effect at all; many of the benchmarks (cp, c, lsp, man) + are smaller than 32 kB and thus will have no effect. Binary data also seems + to win little or nothing; of course, the already-compressed data wins nothing. + The protobuf benchmark wins as much as ~18% depending on architecture, + but I wouldn't be too sure that this is representative of protobuf data in + general. + + As of performance, we lose a tiny amount since we get more tags (e.g., a long + literal might be broken up into literal-copy-literal), but we win it back with + less clearing of the hash table, and more opportunities to skip incompressible + data (e.g. in the jpg benchmark). Decompression seems to get ever so slightly + slower, again due to more tags. The total net change is about as close to zero + as we can get, so the end effect seems to be simply more density and no + real performance change. + + The comment about not changing kBlockSize, scary as it is, is not really + relevant, since we're never going to have a block-level decompressor without + explicitly marked blocks. Replace it with something more appropriate. + + This affects the framing format, but it's okay to change it since it basically + has no users yet. + + + Density (note that cp, c, lsp and man are all smaller than 32 kB): + + Benchmark Description Base (%) New (%) Improvement + -------------------------------------------------------------- + ZFlat/0 html 22.57 22.31 +5.6% + ZFlat/1 urls 50.89 47.77 +6.5% + ZFlat/2 jpg 99.88 99.87 +0.0% + ZFlat/3 pdf 82.13 82.07 +0.1% + ZFlat/4 html4 23.55 22.51 +4.6% + ZFlat/5 cp 48.12 48.12 +0.0% + ZFlat/6 c 42.40 42.40 +0.0% + ZFlat/7 lsp 48.37 48.37 +0.0% + ZFlat/8 xls 41.34 41.23 +0.3% + ZFlat/9 txt1 59.81 57.87 +3.4% + ZFlat/10 txt2 64.07 61.93 +3.5% + ZFlat/11 txt3 57.11 54.92 +4.0% + ZFlat/12 txt4 68.35 66.22 +3.2% + ZFlat/13 bin 18.21 18.11 +0.6% + ZFlat/14 sum 51.88 48.96 +6.0% + ZFlat/15 man 59.36 59.36 +0.0% + ZFlat/16 pb 23.15 19.64 +17.9% + ZFlat/17 gaviota 38.27 37.72 +1.5% + Geometric mean 45.51 44.15 +3.1% + + + Microbenchmarks (64-bit, opt): + + Westmere 2.8 GHz: + + Benchmark Base (ns) New (ns) Improvement + ------------------------------------------------------------------------------------------------- + BM_UFlat/0 75342 75027 1.3GB/s html +0.4% + BM_UFlat/1 723767 744269 899.6MB/s urls -2.8% + BM_UFlat/2 10072 10072 11.7GB/s jpg +0.0% + BM_UFlat/3 30747 30388 2.9GB/s pdf +1.2% + BM_UFlat/4 307353 306063 1.2GB/s html4 +0.4% + BM_UFlat/5 28593 28743 816.3MB/s cp -0.5% + BM_UFlat/6 12958 12998 818.1MB/s c -0.3% + BM_UFlat/7 3700 3792 935.8MB/s lsp -2.4% + BM_UFlat/8 999685 999905 982.1MB/s xls -0.0% + BM_UFlat/9 232954 230079 630.4MB/s txt1 +1.2% + BM_UFlat/10 200785 201468 592.6MB/s txt2 -0.3% + BM_UFlat/11 617267 610968 666.1MB/s txt3 +1.0% + BM_UFlat/12 821595 822475 558.7MB/s txt4 -0.1% + BM_UFlat/13 377097 377632 1.3GB/s bin -0.1% + BM_UFlat/14 45476 45260 805.8MB/s sum +0.5% + BM_UFlat/15 4985 5003 805.7MB/s man -0.4% + BM_UFlat/16 80813 77494 1.4GB/s pb +4.3% + BM_UFlat/17 251792 241553 727.7MB/s gaviota +4.2% + BM_UValidate/0 40343 40354 2.4GB/s html -0.0% + BM_UValidate/1 426890 451574 1.4GB/s urls -5.5% + BM_UValidate/2 187 179 661.9GB/s jpg +4.5% + BM_UValidate/3 13783 13827 6.4GB/s pdf -0.3% + BM_UValidate/4 162393 163335 2.3GB/s html4 -0.6% + BM_UDataBuffer/0 93756 93302 1046.7MB/s html +0.5% + BM_UDataBuffer/1 886714 916292 730.7MB/s urls -3.2% + BM_UDataBuffer/2 15861 16401 7.2GB/s jpg -3.3% + BM_UDataBuffer/3 38934 39224 2.2GB/s pdf -0.7% + BM_UDataBuffer/4 381008 379428 1029.5MB/s html4 +0.4% + BM_UCord/0 92528 91098 1072.0MB/s html +1.6% + BM_UCord/1 858421 885287 756.3MB/s urls -3.0% + BM_UCord/2 13140 13464 8.8GB/s jpg -2.4% + BM_UCord/3 39012 37773 2.3GB/s pdf +3.3% + BM_UCord/4 376869 371267 1052.1MB/s html4 +1.5% + BM_UCordString/0 75810 75303 1.3GB/s html +0.7% + BM_UCordString/1 735290 753841 888.2MB/s urls -2.5% + BM_UCordString/2 11945 13113 9.0GB/s jpg -8.9% + BM_UCordString/3 33901 32562 2.7GB/s pdf +4.1% + BM_UCordString/4 310985 309390 1.2GB/s html4 +0.5% + BM_UCordValidate/0 40952 40450 2.4GB/s html +1.2% + BM_UCordValidate/1 433842 456531 1.4GB/s urls -5.0% + BM_UCordValidate/2 1179 1173 100.8GB/s jpg +0.5% + BM_UCordValidate/3 14481 14392 6.1GB/s pdf +0.6% + BM_UCordValidate/4 164364 164151 2.3GB/s html4 +0.1% + BM_ZFlat/0 160610 156601 623.6MB/s html (22.31 %) +2.6% + BM_ZFlat/1 1995238 1993582 335.9MB/s urls (47.77 %) +0.1% + BM_ZFlat/2 30133 24983 4.7GB/s jpg (99.87 %) +20.6% + BM_ZFlat/3 74453 73128 1.2GB/s pdf (82.07 %) +1.8% + BM_ZFlat/4 647674 633729 616.4MB/s html4 (22.51 %) +2.2% + BM_ZFlat/5 76259 76090 308.4MB/s cp (48.12 %) +0.2% + BM_ZFlat/6 31106 31084 342.1MB/s c (42.40 %) +0.1% + BM_ZFlat/7 10507 10443 339.8MB/s lsp (48.37 %) +0.6% + BM_ZFlat/8 1811047 1793325 547.6MB/s xls (41.23 %) +1.0% + BM_ZFlat/9 597903 581793 249.3MB/s txt1 (57.87 %) +2.8% + BM_ZFlat/10 525320 514522 232.0MB/s txt2 (61.93 %) +2.1% + BM_ZFlat/11 1596591 1551636 262.3MB/s txt3 (54.92 %) +2.9% + BM_ZFlat/12 2134523 2094033 219.5MB/s txt4 (66.22 %) +1.9% + BM_ZFlat/13 593024 587869 832.6MB/s bin (18.11 %) +0.9% + BM_ZFlat/14 114746 110666 329.5MB/s sum (48.96 %) +3.7% + BM_ZFlat/15 14376 14485 278.3MB/s man (59.36 %) -0.8% + BM_ZFlat/16 167908 150070 753.6MB/s pb (19.64 %) +11.9% + BM_ZFlat/17 460228 442253 397.5MB/s gaviota (37.72 %) +4.1% + BM_ZCord/0 164896 160241 609.4MB/s html +2.9% + BM_ZCord/1 2070239 2043492 327.7MB/s urls +1.3% + BM_ZCord/2 54402 47002 2.5GB/s jpg +15.7% + BM_ZCord/3 85871 83832 1073.1MB/s pdf +2.4% + BM_ZCord/4 664078 648825 602.0MB/s html4 +2.4% + BM_ZDataBuffer/0 174874 172549 566.0MB/s html +1.3% + BM_ZDataBuffer/1 2134410 2139173 313.0MB/s urls -0.2% + BM_ZDataBuffer/2 71911 69551 1.7GB/s jpg +3.4% + BM_ZDataBuffer/3 98236 99727 902.1MB/s pdf -1.5% + BM_ZDataBuffer/4 710776 699104 558.8MB/s html4 +1.7% + Sum of all benchmarks 27358908 27200688 +0.6% + + + Sandy Bridge 2.6 GHz: + + Benchmark Base (ns) New (ns) Improvement + ------------------------------------------------------------------------------------------------- + BM_UFlat/0 49356 49018 1.9GB/s html +0.7% + BM_UFlat/1 516764 531955 1.2GB/s urls -2.9% + BM_UFlat/2 6982 7304 16.2GB/s jpg -4.4% + BM_UFlat/3 15285 15598 5.6GB/s pdf -2.0% + BM_UFlat/4 206557 206669 1.8GB/s html4 -0.1% + BM_UFlat/5 13681 13567 1.7GB/s cp +0.8% + BM_UFlat/6 6571 6592 1.6GB/s c -0.3% + BM_UFlat/7 2008 1994 1.7GB/s lsp +0.7% + BM_UFlat/8 775700 773286 1.2GB/s xls +0.3% + BM_UFlat/9 165578 164480 881.8MB/s txt1 +0.7% + BM_UFlat/10 143707 144139 828.2MB/s txt2 -0.3% + BM_UFlat/11 443026 436281 932.8MB/s txt3 +1.5% + BM_UFlat/12 603129 595856 771.2MB/s txt4 +1.2% + BM_UFlat/13 271682 270450 1.8GB/s bin +0.5% + BM_UFlat/14 26200 25666 1.4GB/s sum +2.1% + BM_UFlat/15 2620 2608 1.5GB/s man +0.5% + BM_UFlat/16 48908 47756 2.3GB/s pb +2.4% + BM_UFlat/17 174638 170346 1031.9MB/s gaviota +2.5% + BM_UValidate/0 31922 31898 3.0GB/s html +0.1% + BM_UValidate/1 341265 363554 1.8GB/s urls -6.1% + BM_UValidate/2 160 151 782.8GB/s jpg +6.0% + BM_UValidate/3 10402 10380 8.5GB/s pdf +0.2% + BM_UValidate/4 129490 130587 2.9GB/s html4 -0.8% + BM_UDataBuffer/0 59383 58736 1.6GB/s html +1.1% + BM_UDataBuffer/1 619222 637786 1049.8MB/s urls -2.9% + BM_UDataBuffer/2 10775 11941 9.9GB/s jpg -9.8% + BM_UDataBuffer/3 18002 17930 4.9GB/s pdf +0.4% + BM_UDataBuffer/4 259182 259306 1.5GB/s html4 -0.0% + BM_UCord/0 59379 57814 1.6GB/s html +2.7% + BM_UCord/1 598456 615162 1088.4MB/s urls -2.7% + BM_UCord/2 8519 8628 13.7GB/s jpg -1.3% + BM_UCord/3 18123 17537 5.0GB/s pdf +3.3% + BM_UCord/4 252375 252331 1.5GB/s html4 +0.0% + BM_UCordString/0 49494 49790 1.9GB/s html -0.6% + BM_UCordString/1 524659 541803 1.2GB/s urls -3.2% + BM_UCordString/2 8206 8354 14.2GB/s jpg -1.8% + BM_UCordString/3 17235 16537 5.3GB/s pdf +4.2% + BM_UCordString/4 210188 211072 1.8GB/s html4 -0.4% + BM_UCordValidate/0 31956 31587 3.0GB/s html +1.2% + BM_UCordValidate/1 340828 362141 1.8GB/s urls -5.9% + BM_UCordValidate/2 783 744 158.9GB/s jpg +5.2% + BM_UCordValidate/3 10543 10462 8.4GB/s pdf +0.8% + BM_UCordValidate/4 130150 129789 2.9GB/s html4 +0.3% + BM_ZFlat/0 113873 111200 878.2MB/s html (22.31 %) +2.4% + BM_ZFlat/1 1473023 1489858 449.4MB/s urls (47.77 %) -1.1% + BM_ZFlat/2 23569 19486 6.1GB/s jpg (99.87 %) +21.0% + BM_ZFlat/3 49178 48046 1.8GB/s pdf (82.07 %) +2.4% + BM_ZFlat/4 475063 469394 832.2MB/s html4 (22.51 %) +1.2% + BM_ZFlat/5 46910 46816 501.2MB/s cp (48.12 %) +0.2% + BM_ZFlat/6 16883 16916 628.6MB/s c (42.40 %) -0.2% + BM_ZFlat/7 5381 5447 651.5MB/s lsp (48.37 %) -1.2% + BM_ZFlat/8 1466870 1473861 666.3MB/s xls (41.23 %) -0.5% + BM_ZFlat/9 468006 464101 312.5MB/s txt1 (57.87 %) +0.8% + BM_ZFlat/10 408157 408957 291.9MB/s txt2 (61.93 %) -0.2% + BM_ZFlat/11 1253348 1232910 330.1MB/s txt3 (54.92 %) +1.7% + BM_ZFlat/12 1702373 1702977 269.8MB/s txt4 (66.22 %) -0.0% + BM_ZFlat/13 439792 438557 1116.0MB/s bin (18.11 %) +0.3% + BM_ZFlat/14 80766 78851 462.5MB/s sum (48.96 %) +2.4% + BM_ZFlat/15 7420 7542 534.5MB/s man (59.36 %) -1.6% + BM_ZFlat/16 112043 100126 1.1GB/s pb (19.64 %) +11.9% + BM_ZFlat/17 368877 357703 491.4MB/s gaviota (37.72 %) +3.1% + BM_ZCord/0 116402 113564 859.9MB/s html +2.5% + BM_ZCord/1 1507156 1519911 440.5MB/s urls -0.8% + BM_ZCord/2 39860 33686 3.5GB/s jpg +18.3% + BM_ZCord/3 56211 54694 1.6GB/s pdf +2.8% + BM_ZCord/4 485594 479212 815.1MB/s html4 +1.3% + BM_ZDataBuffer/0 123185 121572 803.3MB/s html +1.3% + BM_ZDataBuffer/1 1569111 1589380 421.3MB/s urls -1.3% + BM_ZDataBuffer/2 53143 49556 2.4GB/s jpg +7.2% + BM_ZDataBuffer/3 65725 66826 1.3GB/s pdf -1.6% + BM_ZDataBuffer/4 517871 514750 758.9MB/s html4 +0.6% + Sum of all benchmarks 20258879 20315484 -0.3% + + + AMD Instanbul 2.4 GHz: + + Benchmark Base (ns) New (ns) Improvement + ------------------------------------------------------------------------------------------------- + BM_UFlat/0 97120 96585 1011.1MB/s html +0.6% + BM_UFlat/1 917473 948016 706.3MB/s urls -3.2% + BM_UFlat/2 21496 23938 4.9GB/s jpg -10.2% + BM_UFlat/3 44751 45639 1.9GB/s pdf -1.9% + BM_UFlat/4 391950 391413 998.0MB/s html4 +0.1% + BM_UFlat/5 37366 37201 630.7MB/s cp +0.4% + BM_UFlat/6 18350 18318 580.5MB/s c +0.2% + BM_UFlat/7 5672 5661 626.9MB/s lsp +0.2% + BM_UFlat/8 1533390 1529441 642.1MB/s xls +0.3% + BM_UFlat/9 335477 336553 431.0MB/s txt1 -0.3% + BM_UFlat/10 285140 292080 408.7MB/s txt2 -2.4% + BM_UFlat/11 888507 894758 454.9MB/s txt3 -0.7% + BM_UFlat/12 1187643 1210928 379.5MB/s txt4 -1.9% + BM_UFlat/13 493717 507447 964.5MB/s bin -2.7% + BM_UFlat/14 61740 60870 599.1MB/s sum +1.4% + BM_UFlat/15 7211 7187 560.9MB/s man +0.3% + BM_UFlat/16 97435 93100 1.2GB/s pb +4.7% + BM_UFlat/17 362662 356395 493.2MB/s gaviota +1.8% + BM_UValidate/0 47475 47118 2.0GB/s html +0.8% + BM_UValidate/1 501304 529741 1.2GB/s urls -5.4% + BM_UValidate/2 276 243 486.2GB/s jpg +13.6% + BM_UValidate/3 16361 16261 5.4GB/s pdf +0.6% + BM_UValidate/4 190741 190353 2.0GB/s html4 +0.2% + BM_UDataBuffer/0 111080 109771 889.6MB/s html +1.2% + BM_UDataBuffer/1 1051035 1085999 616.5MB/s urls -3.2% + BM_UDataBuffer/2 25801 25463 4.6GB/s jpg +1.3% + BM_UDataBuffer/3 50493 49946 1.8GB/s pdf +1.1% + BM_UDataBuffer/4 447258 444138 879.5MB/s html4 +0.7% + BM_UCord/0 109350 107909 905.0MB/s html +1.3% + BM_UCord/1 1023396 1054964 634.7MB/s urls -3.0% + BM_UCord/2 25292 24371 4.9GB/s jpg +3.8% + BM_UCord/3 48955 49736 1.8GB/s pdf -1.6% + BM_UCord/4 440452 437331 893.2MB/s html4 +0.7% + BM_UCordString/0 98511 98031 996.2MB/s html +0.5% + BM_UCordString/1 933230 963495 694.9MB/s urls -3.1% + BM_UCordString/2 23311 24076 4.9GB/s jpg -3.2% + BM_UCordString/3 45568 46196 1.9GB/s pdf -1.4% + BM_UCordString/4 397791 396934 984.1MB/s html4 +0.2% + BM_UCordValidate/0 47537 46921 2.0GB/s html +1.3% + BM_UCordValidate/1 505071 532716 1.2GB/s urls -5.2% + BM_UCordValidate/2 1663 1621 72.9GB/s jpg +2.6% + BM_UCordValidate/3 16890 16926 5.2GB/s pdf -0.2% + BM_UCordValidate/4 192365 191984 2.0GB/s html4 +0.2% + BM_ZFlat/0 184708 179103 545.3MB/s html (22.31 %) +3.1% + BM_ZFlat/1 2293864 2302950 290.7MB/s urls (47.77 %) -0.4% + BM_ZFlat/2 52852 47618 2.5GB/s jpg (99.87 %) +11.0% + BM_ZFlat/3 100766 96179 935.3MB/s pdf (82.07 %) +4.8% + BM_ZFlat/4 741220 727977 536.6MB/s html4 (22.51 %) +1.8% + BM_ZFlat/5 85402 85418 274.7MB/s cp (48.12 %) -0.0% + BM_ZFlat/6 36558 36494 291.4MB/s c (42.40 %) +0.2% + BM_ZFlat/7 12706 12507 283.7MB/s lsp (48.37 %) +1.6% + BM_ZFlat/8 2336823 2335688 420.5MB/s xls (41.23 %) +0.0% + BM_ZFlat/9 701804 681153 212.9MB/s txt1 (57.87 %) +3.0% + BM_ZFlat/10 606700 597194 199.9MB/s txt2 (61.93 %) +1.6% + BM_ZFlat/11 1852283 1803238 225.7MB/s txt3 (54.92 %) +2.7% + BM_ZFlat/12 2475527 2443354 188.1MB/s txt4 (66.22 %) +1.3% + BM_ZFlat/13 694497 696654 702.6MB/s bin (18.11 %) -0.3% + BM_ZFlat/14 136929 129855 280.8MB/s sum (48.96 %) +5.4% + BM_ZFlat/15 17172 17124 235.4MB/s man (59.36 %) +0.3% + BM_ZFlat/16 190364 171763 658.4MB/s pb (19.64 %) +10.8% + BM_ZFlat/17 567285 555190 316.6MB/s gaviota (37.72 %) +2.2% + BM_ZCord/0 193490 187031 522.1MB/s html +3.5% + BM_ZCord/1 2427537 2415315 277.2MB/s urls +0.5% + BM_ZCord/2 85378 81412 1.5GB/s jpg +4.9% + BM_ZCord/3 121898 119419 753.3MB/s pdf +2.1% + BM_ZCord/4 779564 762961 512.0MB/s html4 +2.2% + BM_ZDataBuffer/0 213820 207272 471.1MB/s html +3.2% + BM_ZDataBuffer/1 2589010 2586495 258.9MB/s urls +0.1% + BM_ZDataBuffer/2 121871 118885 1018.4MB/s jpg +2.5% + BM_ZDataBuffer/3 145382 145986 616.2MB/s pdf -0.4% + BM_ZDataBuffer/4 868117 852754 458.1MB/s html4 +1.8% + Sum of all benchmarks 33771833 33744763 +0.1% + + + git-svn-id: https://snappy.googlecode.com/svn/trunk@71 03e5f5b5-db94-4691-08a0-1a8bf15f6143 + +commit 81f34784b7b812dcda956ee489dfdc74ec2da990 +Author: snappy.mirrorbot@gmail.com +Date: Sun Jan 6 19:21:26 2013 +0000 + + Adjust the Snappy open-source distribution for the changes in Google's + internal file API. + + R=sanjay + + + + git-svn-id: https://snappy.googlecode.com/svn/trunk@70 03e5f5b5-db94-4691-08a0-1a8bf15f6143 + +commit 698af469b47fe809905e2ed173ad84241de5800f +Author: snappy.mirrorbot@gmail.com +Date: Fri Jan 4 11:54:20 2013 +0000 + + Change a few ORs to additions where they don't matter. This helps the compiler + use the LEA instruction more efficiently, since e.g. a + (b << 2) can be encoded + as one instruction. Even more importantly, it can constant-fold the + COPY_* enums together with the shifted negative constants, which also saves + some instructions. (We don't need it for LITERAL, since it happens to be 0.) + + I am unsure why the compiler couldn't do this itself, but the theory is that + it cannot prove that len-1 and len-4 cannot underflow/wrap, and thus can't + do the optimization safely. + + The gains are small but measurable; 0.5-1.0% over the BM_Z* benchmarks + (measured on Westmere, Sandy Bridge and Istanbul). + + R=sanjay + + + git-svn-id: https://snappy.googlecode.com/svn/trunk@69 03e5f5b5-db94-4691-08a0-1a8bf15f6143 + +commit 55209f9b92efd97e0a61be28ed94210de04c3bfc +Author: snappy.mirrorbot@gmail.com +Date: Mon Oct 8 11:37:16 2012 +0000 + + Stop giving -Werror to automake, due to an incompatibility between current + versions of libtool and automake on non-GNU platforms (e.g. Mac OS X). + + R=sanjay + + + git-svn-id: https://snappy.googlecode.com/svn/trunk@68 03e5f5b5-db94-4691-08a0-1a8bf15f6143 + +commit b86e81c8b3426a62d8ab3a7674c2506e9e678740 +Author: snappy.mirrorbot@gmail.com +Date: Fri Aug 17 13:54:47 2012 +0000 + + Fix public issue 66: Document GetUncompressedLength better, in particular that + it leaves the source in a state that's not appropriate for RawUncompress. + + R=sanjay + + + git-svn-id: https://snappy.googlecode.com/svn/trunk@67 03e5f5b5-db94-4691-08a0-1a8bf15f6143 + +commit 2e225ba821b420ae28e1d427075d5589c1e892d9 +Author: snappy.mirrorbot@gmail.com +Date: Tue Jul 31 11:44:44 2012 +0000 + + Fix public issue 64: Check for at configure time, + since MSVC seemingly does not have it. + + R=sanjay + + + git-svn-id: https://snappy.googlecode.com/svn/trunk@66 03e5f5b5-db94-4691-08a0-1a8bf15f6143 + +commit e89f20ab46ee11050760c6d57f05c2a3825a911c +Author: snappy.mirrorbot@gmail.com +Date: Wed Jul 4 09:34:48 2012 +0000 + + Handle the case where gettimeofday() goes backwards or returns the same value + twice; it could cause division by zero in the unit test framework. + (We already had one fix for this in place, but it was incomplete.) + + This could in theory happen on any system, since there are few guarantees + about gettimeofday(), but seems to only happen in practice on GNU/Hurd, where + gettimeofday() is cached and only updated ever so often. + + R=sanjay + + + git-svn-id: https://snappy.googlecode.com/svn/trunk@65 03e5f5b5-db94-4691-08a0-1a8bf15f6143 + +commit 3ec60ac9878de5d0317ad38fc545080a4bfaa74f +Author: snappy.mirrorbot@gmail.com +Date: Wed Jul 4 09:28:33 2012 +0000 + + Mark ARMv4 as not supporting unaligned accesses (not just ARMv5 and ARMv6); + apparently Debian still targets these by default, giving us segfaults on + armel. + + R=sanjay + + + git-svn-id: https://snappy.googlecode.com/svn/trunk@64 03e5f5b5-db94-4691-08a0-1a8bf15f6143 + +commit be80d6f74f9d82220e952a54f3f129aae1f13f95 +Author: snappy.mirrorbot@gmail.com +Date: Tue May 22 09:46:05 2012 +0000 + + Fix public bug #62: Remove an extraneous comma at the end of an enum list, + causing compile errors when embedded in Mozilla on OpenBSD. + + R=sanjay + + + git-svn-id: https://snappy.googlecode.com/svn/trunk@63 03e5f5b5-db94-4691-08a0-1a8bf15f6143 + +commit 8b95464146dddab1c7068f879162db9a885cdafe +Author: snappy.mirrorbot@gmail.com +Date: Tue May 22 09:32:50 2012 +0000 + + Snappy library no longer depends on iostream. + + Achieved by moving logging macro definitions to a test-only + header file, and by changing non-test code to use assert, + fprintf, and abort instead of LOG/CHECK macros. + + R=sesse + + + git-svn-id: https://snappy.googlecode.com/svn/trunk@62 03e5f5b5-db94-4691-08a0-1a8bf15f6143 + +commit fc723b212d6972af7051261754770b3f70a7dc03 +Author: snappy.mirrorbot@gmail.com +Date: Fri Feb 24 15:46:37 2012 +0000 + + Release Snappy 1.0.5. + + R=sanjay + + + git-svn-id: https://snappy.googlecode.com/svn/trunk@61 03e5f5b5-db94-4691-08a0-1a8bf15f6143 + +commit dc63e0ad9693e13390ba31b00d92ecccaf7605c3 +Author: snappy.mirrorbot@gmail.com +Date: Thu Feb 23 17:00:36 2012 +0000 + + For 32-bit platforms, do not try to accelerate multiple neighboring + 32-bit loads with a 64-bit load during compression (it's not a win). + + The main target for this optimization is ARM, but 32-bit x86 gets + a small gain, too, although there is noise in the microbenchmarks. + It's a no-op for 64-bit x86. It does not affect decompression. + + Microbenchmark results on a Cortex-A9 1GHz, using g++ 4.6.2 (from + Ubuntu/Linaro), -O2 -DNDEBUG -Wa,-march=armv7a -mtune=cortex-a9 + -mthumb-interwork, minimum 1000 iterations: + + Benchmark Time(ns) CPU(ns) Iterations + --------------------------------------------------- + BM_ZFlat/0 1158277 1160000 1000 84.2MB/s html (23.57 %) [ +4.3%] + BM_ZFlat/1 14861782 14860000 1000 45.1MB/s urls (50.89 %) [ +1.1%] + BM_ZFlat/2 393595 390000 1000 310.5MB/s jpg (99.88 %) [ +0.0%] + BM_ZFlat/3 650583 650000 1000 138.4MB/s pdf (82.13 %) [ +3.1%] + BM_ZFlat/4 4661480 4660000 1000 83.8MB/s html4 (23.55 %) [ +4.3%] + BM_ZFlat/5 491973 490000 1000 47.9MB/s cp (48.12 %) [ +2.0%] + BM_ZFlat/6 193575 192678 1038 55.2MB/s c (42.40 %) [ +9.0%] + BM_ZFlat/7 62343 62754 3187 56.5MB/s lsp (48.37 %) [ +2.6%] + BM_ZFlat/8 17708468 17710000 1000 55.5MB/s xls (41.34 %) [ -0.3%] + BM_ZFlat/9 3755345 3760000 1000 38.6MB/s txt1 (59.81 %) [ +8.2%] + BM_ZFlat/10 3324217 3320000 1000 36.0MB/s txt2 (64.07 %) [ +4.2%] + BM_ZFlat/11 10139932 10140000 1000 40.1MB/s txt3 (57.11 %) [ +6.4%] + BM_ZFlat/12 13532109 13530000 1000 34.0MB/s txt4 (68.35 %) [ +5.0%] + BM_ZFlat/13 4690847 4690000 1000 104.4MB/s bin (18.21 %) [ +4.1%] + BM_ZFlat/14 830682 830000 1000 43.9MB/s sum (51.88 %) [ +1.2%] + BM_ZFlat/15 84784 85011 2235 47.4MB/s man (59.36 %) [ +1.1%] + BM_ZFlat/16 1293254 1290000 1000 87.7MB/s pb (23.15 %) [ +2.3%] + BM_ZFlat/17 2775155 2780000 1000 63.2MB/s gaviota (38.27 %) [+12.2%] + + Core i7 in 32-bit mode (only one run and 100 iterations, though, so noisy): + + Benchmark Time(ns) CPU(ns) Iterations + --------------------------------------------------- + BM_ZFlat/0 227582 223464 3043 437.0MB/s html (23.57 %) [ +7.4%] + BM_ZFlat/1 2982430 2918455 233 229.4MB/s urls (50.89 %) [ +2.9%] + BM_ZFlat/2 46967 46658 15217 2.5GB/s jpg (99.88 %) [ +0.0%] + BM_ZFlat/3 115298 114864 5833 783.2MB/s pdf (82.13 %) [ +1.5%] + BM_ZFlat/4 913440 899743 778 434.2MB/s html4 (23.55 %) [ +0.3%] + BM_ZFlat/5 110302 108571 7000 216.1MB/s cp (48.12 %) [ +0.0%] + BM_ZFlat/6 44409 43372 15909 245.2MB/s c (42.40 %) [ +0.8%] + BM_ZFlat/7 15713 15643 46667 226.9MB/s lsp (48.37 %) [ +2.7%] + BM_ZFlat/8 2625539 2602230 269 377.4MB/s xls (41.34 %) [ +1.4%] + BM_ZFlat/9 808884 811429 875 178.8MB/s txt1 (59.81 %) [ -3.9%] + BM_ZFlat/10 709532 700000 1000 170.5MB/s txt2 (64.07 %) [ +0.0%] + BM_ZFlat/11 2177682 2162162 333 188.2MB/s txt3 (57.11 %) [ -1.4%] + BM_ZFlat/12 2849640 2840000 250 161.8MB/s txt4 (68.35 %) [ -1.4%] + BM_ZFlat/13 849760 835476 778 585.8MB/s bin (18.21 %) [ +1.2%] + BM_ZFlat/14 165940 164571 4375 221.6MB/s sum (51.88 %) [ +1.4%] + BM_ZFlat/15 20939 20571 35000 196.0MB/s man (59.36 %) [ +2.1%] + BM_ZFlat/16 239209 236544 2917 478.1MB/s pb (23.15 %) [ +4.2%] + BM_ZFlat/17 616206 610000 1000 288.2MB/s gaviota (38.27 %) [ -1.6%] + + R=sanjay + + + git-svn-id: https://snappy.googlecode.com/svn/trunk@60 03e5f5b5-db94-4691-08a0-1a8bf15f6143 + +commit f8829ea39d51432ba4e6a26ddaec57acea779f4c +Author: snappy.mirrorbot@gmail.com +Date: Tue Feb 21 17:02:17 2012 +0000 + + Enable the use of unaligned loads and stores for ARM-based architectures + where they are available (ARMv7 and higher). This gives a significant + speed boost on ARM, both for compression and decompression. + It should not affect x86 at all. + + There are more changes possible to speed up ARM, but it might not be + that easy to do without hurting x86 or making the code uglier. + Also, we de not try to use NEON yet. + + Microbenchmark results on a Cortex-A9 1GHz, using g++ 4.6.2 (from Ubuntu/Linaro), + -O2 -DNDEBUG -Wa,-march=armv7a -mtune=cortex-a9 -mthumb-interwork: + + Benchmark Time(ns) CPU(ns) Iterations + --------------------------------------------------- + BM_UFlat/0 524806 529100 378 184.6MB/s html [+33.6%] + BM_UFlat/1 5139790 5200000 100 128.8MB/s urls [+28.8%] + BM_UFlat/2 86540 84166 1901 1.4GB/s jpg [ +0.6%] + BM_UFlat/3 215351 210176 904 428.0MB/s pdf [+29.8%] + BM_UFlat/4 2144490 2100000 100 186.0MB/s html4 [+33.3%] + BM_UFlat/5 194482 190000 1000 123.5MB/s cp [+36.2%] + BM_UFlat/6 91843 90175 2107 117.9MB/s c [+38.6%] + BM_UFlat/7 28535 28426 6684 124.8MB/s lsp [+34.7%] + BM_UFlat/8 9206600 9200000 100 106.7MB/s xls [+42.4%] + BM_UFlat/9 1865273 1886792 106 76.9MB/s txt1 [+32.5%] + BM_UFlat/10 1576809 1587301 126 75.2MB/s txt2 [+32.3%] + BM_UFlat/11 4968450 4900000 100 83.1MB/s txt3 [+32.7%] + BM_UFlat/12 6673970 6700000 100 68.6MB/s txt4 [+32.8%] + BM_UFlat/13 2391470 2400000 100 203.9MB/s bin [+29.2%] + BM_UFlat/14 334601 344827 522 105.8MB/s sum [+30.6%] + BM_UFlat/15 37404 38080 5252 105.9MB/s man [+33.8%] + BM_UFlat/16 535470 540540 370 209.2MB/s pb [+31.2%] + BM_UFlat/17 1875245 1886792 106 93.2MB/s gaviota [+37.8%] + BM_UValidate/0 178425 179533 1114 543.9MB/s html [ +2.7%] + BM_UValidate/1 2100450 2000000 100 334.8MB/s urls [ +5.0%] + BM_UValidate/2 1039 1044 172413 113.3GB/s jpg [ +3.4%] + BM_UValidate/3 59423 59470 3363 1.5GB/s pdf [ +7.8%] + BM_UValidate/4 760716 766283 261 509.8MB/s html4 [ +6.5%] + BM_ZFlat/0 1204632 1204819 166 81.1MB/s html (23.57 %) [+32.8%] + BM_ZFlat/1 15656190 15600000 100 42.9MB/s urls (50.89 %) [+27.6%] + BM_ZFlat/2 403336 410677 487 294.8MB/s jpg (99.88 %) [+16.5%] + BM_ZFlat/3 664073 671140 298 134.0MB/s pdf (82.13 %) [+28.4%] + BM_ZFlat/4 4961940 4900000 100 79.7MB/s html4 (23.55 %) [+30.6%] + BM_ZFlat/5 500664 501253 399 46.8MB/s cp (48.12 %) [+33.4%] + BM_ZFlat/6 217276 215982 926 49.2MB/s c (42.40 %) [+25.0%] + BM_ZFlat/7 64122 65487 3054 54.2MB/s lsp (48.37 %) [+36.1%] + BM_ZFlat/8 18045730 18000000 100 54.6MB/s xls (41.34 %) [+34.4%] + BM_ZFlat/9 4051530 4000000 100 36.3MB/s txt1 (59.81 %) [+25.0%] + BM_ZFlat/10 3451800 3500000 100 34.1MB/s txt2 (64.07 %) [+25.7%] + BM_ZFlat/11 11052340 11100000 100 36.7MB/s txt3 (57.11 %) [+24.3%] + BM_ZFlat/12 14538690 14600000 100 31.5MB/s txt4 (68.35 %) [+24.7%] + BM_ZFlat/13 5041850 5000000 100 97.9MB/s bin (18.21 %) [+32.0%] + BM_ZFlat/14 908840 909090 220 40.1MB/s sum (51.88 %) [+22.2%] + BM_ZFlat/15 86921 86206 1972 46.8MB/s man (59.36 %) [+42.2%] + BM_ZFlat/16 1312315 1315789 152 86.0MB/s pb (23.15 %) [+34.5%] + BM_ZFlat/17 3173120 3200000 100 54.9MB/s gaviota (38.27%) [+28.1%] + + + The move from 64-bit to 32-bit operations for the copies also affected 32-bit x86; + positive on the decompression side, and slightly negative on the compression side + (unless that is noise; I only ran once): + + Benchmark Time(ns) CPU(ns) Iterations + ----------------------------------------------------- + BM_UFlat/0 86279 86140 7778 1.1GB/s html [ +7.5%] + BM_UFlat/1 839265 822622 778 813.9MB/s urls [ +9.4%] + BM_UFlat/2 9180 9143 87500 12.9GB/s jpg [ +1.2%] + BM_UFlat/3 35080 35000 20000 2.5GB/s pdf [+10.1%] + BM_UFlat/4 350318 345000 2000 1.1GB/s html4 [ +7.0%] + BM_UFlat/5 33808 33472 21212 701.0MB/s cp [ +9.0%] + BM_UFlat/6 15201 15214 46667 698.9MB/s c [+14.9%] + BM_UFlat/7 4652 4651 159091 762.9MB/s lsp [ +7.5%] + BM_UFlat/8 1285551 1282528 538 765.7MB/s xls [+10.7%] + BM_UFlat/9 282510 281690 2414 514.9MB/s txt1 [+13.6%] + BM_UFlat/10 243494 239286 2800 498.9MB/s txt2 [+14.4%] + BM_UFlat/11 743625 740000 1000 550.0MB/s txt3 [+14.3%] + BM_UFlat/12 999441 989717 778 464.3MB/s txt4 [+16.1%] + BM_UFlat/13 412402 410076 1707 1.2GB/s bin [ +7.3%] + BM_UFlat/14 54876 54000 10000 675.3MB/s sum [+13.0%] + BM_UFlat/15 6146 6100 100000 660.8MB/s man [+14.8%] + BM_UFlat/16 90496 90286 8750 1.2GB/s pb [ +4.0%] + BM_UFlat/17 292650 292000 2500 602.0MB/s gaviota [+18.1%] + BM_UValidate/0 49620 49699 14286 1.9GB/s html [ +0.0%] + BM_UValidate/1 501371 500000 1000 1.3GB/s urls [ +0.0%] + BM_UValidate/2 232 227 3043478 521.5GB/s jpg [ +1.3%] + BM_UValidate/3 17250 17143 43750 5.1GB/s pdf [ -1.3%] + BM_UValidate/4 198643 200000 3500 1.9GB/s html4 [ -0.9%] + BM_ZFlat/0 227128 229415 3182 425.7MB/s html (23.57 %) [ -1.4%] + BM_ZFlat/1 2970089 2960000 250 226.2MB/s urls (50.89 %) [ -1.9%] + BM_ZFlat/2 45683 44999 15556 2.6GB/s jpg (99.88 %) [ +2.2%] + BM_ZFlat/3 114661 113136 6364 795.1MB/s pdf (82.13 %) [ -1.5%] + BM_ZFlat/4 919702 914286 875 427.2MB/s html4 (23.55%) [ -1.3%] + BM_ZFlat/5 108189 108422 6364 216.4MB/s cp (48.12 %) [ -1.2%] + BM_ZFlat/6 44525 44000 15909 241.7MB/s c (42.40 %) [ -2.9%] + BM_ZFlat/7 15973 15857 46667 223.8MB/s lsp (48.37 %) [ +0.0%] + BM_ZFlat/8 2677888 2639405 269 372.1MB/s xls (41.34 %) [ -1.4%] + BM_ZFlat/9 800715 780000 1000 186.0MB/s txt1 (59.81 %) [ -0.4%] + BM_ZFlat/10 700089 700000 1000 170.5MB/s txt2 (64.07 %) [ -2.9%] + BM_ZFlat/11 2159356 2138365 318 190.3MB/s txt3 (57.11 %) [ -0.3%] + BM_ZFlat/12 2796143 2779923 259 165.3MB/s txt4 (68.35 %) [ -1.4%] + BM_ZFlat/13 856458 835476 778 585.8MB/s bin (18.21 %) [ -0.1%] + BM_ZFlat/14 166908 166857 4375 218.6MB/s sum (51.88 %) [ -1.4%] + BM_ZFlat/15 21181 20857 35000 193.3MB/s man (59.36 %) [ -0.8%] + BM_ZFlat/16 244009 239973 2917 471.3MB/s pb (23.15 %) [ -1.4%] + BM_ZFlat/17 596362 590000 1000 297.9MB/s gaviota (38.27%) [ +0.0%] + + R=sanjay + + + git-svn-id: https://snappy.googlecode.com/svn/trunk@59 03e5f5b5-db94-4691-08a0-1a8bf15f6143 + +commit f2e184f638bdc7905f26c24faaf10fc0f5d33403 +Author: snappy.mirrorbot@gmail.com +Date: Sat Feb 11 22:11:22 2012 +0000 + + Lower the size allocated in the "corrupted input" unit test from 256 MB + to 2 MB. This fixes issues with running the unit test on platforms with + little RAM (e.g. some ARM boards). + + Also, reactivate the 2 MB test for 64-bit platforms; there's no good + reason why it shouldn't be. + + R=sanjay + + + git-svn-id: https://snappy.googlecode.com/svn/trunk@58 03e5f5b5-db94-4691-08a0-1a8bf15f6143 + +commit e750dc0f054ba74b0ce76dd2013e6728cc7a41c5 +Author: snappy.mirrorbot@gmail.com +Date: Sun Jan 8 17:55:48 2012 +0000 + + Minor refactoring to accomodate changes in Google's internal code tree. + + + git-svn-id: https://snappy.googlecode.com/svn/trunk@57 03e5f5b5-db94-4691-08a0-1a8bf15f6143 + +commit d9068ee301bdf893a4d8cb7c6518eacc44c4c1f2 +Author: snappy.mirrorbot@gmail.com +Date: Wed Jan 4 13:10:46 2012 +0000 + + Fix public issue r57: Fix most warnings with -Wall, mostly signed/unsigned + warnings. There are still some in the unit test, but the main .cc file should + be clean. We haven't enabled -Wall for the default build, since the unit test + is still not clean. + + This also fixes a real bug in the open-source implementation of + ReadFileToStringOrDie(); it would not detect errors correctly. + + I had to go through some pains to avoid performance loss as the types + were changed; I think there might still be some with 32-bit if and only if LFS + is enabled (ie., size_t is 64-bit), but for regular 32-bit and 64-bit I can't + see any losses, and I've diffed the generated GCC assembler between the old and + new code without seeing any significant choices. If anything, it's ever so + slightly faster. + + This may or may not enable compression of very large blocks (>2^32 bytes) + when size_t is 64-bit, but I haven't checked, and it is still not a supported + case. + + + git-svn-id: https://snappy.googlecode.com/svn/trunk@56 03e5f5b5-db94-4691-08a0-1a8bf15f6143 + +commit 0755c815197dacc77d8971ae917c86d7aa96bf8e +Author: snappy.mirrorbot@gmail.com +Date: Wed Jan 4 10:46:39 2012 +0000 + + Add a framing format description. We do not have any implementation of this at + the current point, but there seems to be enough of a general interest in the + topic (cf. public bug #34). + + R=csilvers,sanjay + + + git-svn-id: https://snappy.googlecode.com/svn/trunk@55 03e5f5b5-db94-4691-08a0-1a8bf15f6143 + +commit d7eb2dc4133794b62cba691f9be40d1549bc32e2 +Author: snappy.mirrorbot@gmail.com +Date: Mon Dec 5 21:27:26 2011 +0000 + + Speed up decompression by moving the refill check to the end of the loop. + + This seems to work because in most of the branches, the compiler can evaluate + “ip_limit_ - ip” in a more efficient way than reloading ip_limit_ from memory + (either by already having the entire expression in a register, or reconstructing + it from “avail”, or something else). Memory loads, even from L1, are seemingly + costly in the big picture at the current decompression speeds. + + Microbenchmarks (64-bit, opt mode): + + Westmere (Intel Core i7): + + Benchmark Time(ns) CPU(ns) Iterations + -------------------------------------------- + BM_UFlat/0 74492 74491 187894 1.3GB/s html [ +5.9%] + BM_UFlat/1 712268 712263 19644 940.0MB/s urls [ +3.8%] + BM_UFlat/2 10591 10590 1000000 11.2GB/s jpg [ -6.8%] + BM_UFlat/3 29643 29643 469915 3.0GB/s pdf [ +7.9%] + BM_UFlat/4 304669 304667 45930 1.3GB/s html4 [ +4.8%] + BM_UFlat/5 28508 28507 490077 823.1MB/s cp [ +4.0%] + BM_UFlat/6 12415 12415 1000000 856.5MB/s c [ +8.6%] + BM_UFlat/7 3415 3415 4084723 1039.0MB/s lsp [+18.0%] + BM_UFlat/8 979569 979563 14261 1002.5MB/s xls [ +5.8%] + BM_UFlat/9 230150 230148 60934 630.2MB/s txt1 [ +5.2%] + BM_UFlat/10 197167 197166 71135 605.5MB/s txt2 [ +4.7%] + BM_UFlat/11 607394 607390 23041 670.1MB/s txt3 [ +5.6%] + BM_UFlat/12 808502 808496 17316 568.4MB/s txt4 [ +5.0%] + BM_UFlat/13 372791 372788 37564 1.3GB/s bin [ +3.3%] + BM_UFlat/14 44541 44541 313969 818.8MB/s sum [ +5.7%] + BM_UFlat/15 4833 4833 2898697 834.1MB/s man [ +4.8%] + BM_UFlat/16 79855 79855 175356 1.4GB/s pb [ +4.8%] + BM_UFlat/17 245845 245843 56838 715.0MB/s gaviota [ +5.8%] + + Clovertown (Intel Core 2): + + Benchmark Time(ns) CPU(ns) Iterations + -------------------------------------------- + BM_UFlat/0 107911 107890 100000 905.1MB/s html [ +2.2%] + BM_UFlat/1 1011237 1011041 10000 662.3MB/s urls [ +2.5%] + BM_UFlat/2 26775 26770 523089 4.4GB/s jpg [ +0.0%] + BM_UFlat/3 48103 48095 290618 1.8GB/s pdf [ +3.4%] + BM_UFlat/4 437724 437644 31937 892.6MB/s html4 [ +2.1%] + BM_UFlat/5 39607 39600 358284 592.5MB/s cp [ +2.4%] + BM_UFlat/6 18227 18224 768191 583.5MB/s c [ +2.7%] + BM_UFlat/7 5171 5170 2709437 686.4MB/s lsp [ +3.9%] + BM_UFlat/8 1560291 1559989 8970 629.5MB/s xls [ +3.6%] + BM_UFlat/9 335401 335343 41731 432.5MB/s txt1 [ +3.0%] + BM_UFlat/10 287014 286963 48758 416.0MB/s txt2 [ +2.8%] + BM_UFlat/11 888522 888356 15752 458.1MB/s txt3 [ +2.9%] + BM_UFlat/12 1186600 1186378 10000 387.3MB/s txt4 [ +3.1%] + BM_UFlat/13 572295 572188 24468 855.4MB/s bin [ +2.1%] + BM_UFlat/14 64060 64049 218401 569.4MB/s sum [ +4.1%] + BM_UFlat/15 7264 7263 1916168 555.0MB/s man [ +1.4%] + BM_UFlat/16 108853 108836 100000 1039.1MB/s pb [ +1.7%] + BM_UFlat/17 364289 364223 38419 482.6MB/s gaviota [ +4.9%] + + Barcelona (AMD Opteron): + + Benchmark Time(ns) CPU(ns) Iterations + -------------------------------------------- + BM_UFlat/0 103900 103871 100000 940.2MB/s html [ +8.3%] + BM_UFlat/1 1000435 1000107 10000 669.5MB/s urls [ +6.6%] + BM_UFlat/2 24659 24652 567362 4.8GB/s jpg [ +0.1%] + BM_UFlat/3 48206 48193 291121 1.8GB/s pdf [ +5.0%] + BM_UFlat/4 421980 421850 33174 926.0MB/s html4 [ +7.3%] + BM_UFlat/5 40368 40357 346994 581.4MB/s cp [ +8.7%] + BM_UFlat/6 19836 19830 708695 536.2MB/s c [ +8.0%] + BM_UFlat/7 6100 6098 2292774 581.9MB/s lsp [ +9.0%] + BM_UFlat/8 1693093 1692514 8261 580.2MB/s xls [ +8.0%] + BM_UFlat/9 365991 365886 38225 396.4MB/s txt1 [ +7.1%] + BM_UFlat/10 311330 311238 44950 383.6MB/s txt2 [ +7.6%] + BM_UFlat/11 975037 974737 14376 417.5MB/s txt3 [ +6.9%] + BM_UFlat/12 1303558 1303175 10000 352.6MB/s txt4 [ +7.3%] + BM_UFlat/13 517448 517290 27144 946.2MB/s bin [ +5.5%] + BM_UFlat/14 66537 66518 210352 548.3MB/s sum [ +7.5%] + BM_UFlat/15 7976 7974 1760383 505.6MB/s man [ +5.6%] + BM_UFlat/16 103121 103092 100000 1097.0MB/s pb [ +8.7%] + BM_UFlat/17 391431 391314 35733 449.2MB/s gaviota [ +6.5%] + + R=sanjay + + + git-svn-id: https://snappy.googlecode.com/svn/trunk@54 03e5f5b5-db94-4691-08a0-1a8bf15f6143 + +commit 5ed51ce15fc4ff8d2f7235704eb6b0c3f762fb88 +Author: snappy.mirrorbot@gmail.com +Date: Wed Nov 23 11:14:17 2011 +0000 + + Speed up decompression by making the fast path for literals faster. + + We do the fast-path step as soon as possible; in fact, as soon as we know the + literal length. Since we usually hit the fast path, we can then skip the checks + for long literals and available input space (beyond what the fast path check + already does). + + Note that this changes the decompression Writer API; however, it does not + change the ABI, since writers are always templatized and as such never + cross compilation units. The new API is slightly more general, in that it + doesn't hard-code the value 16. Note that we also take care to check + for len <= 16 first, since the other two checks almost always succeed + (so we don't want to waste time checking for them until we have to). + + The improvements are most marked on Nehalem, but are generally positive + on other platforms as well. All microbenchmarks are 64-bit, opt. + + Clovertown (Core 2): + + Benchmark Time(ns) CPU(ns) Iterations + -------------------------------------------- + BM_UFlat/0 110226 110224 100000 886.0MB/s html [ +1.5%] + BM_UFlat/1 1036523 1036508 10000 646.0MB/s urls [ -0.8%] + BM_UFlat/2 26775 26775 522570 4.4GB/s jpg [ +0.0%] + BM_UFlat/3 49738 49737 280974 1.8GB/s pdf [ +0.3%] + BM_UFlat/4 446790 446792 31334 874.3MB/s html4 [ +0.8%] + BM_UFlat/5 40561 40562 350424 578.5MB/s cp [ +1.3%] + BM_UFlat/6 18722 18722 746903 568.0MB/s c [ +1.4%] + BM_UFlat/7 5373 5373 2608632 660.5MB/s lsp [ +8.3%] + BM_UFlat/8 1615716 1615718 8670 607.8MB/s xls [ +2.0%] + BM_UFlat/9 345278 345281 40481 420.1MB/s txt1 [ +1.4%] + BM_UFlat/10 294855 294855 47452 404.9MB/s txt2 [ +1.6%] + BM_UFlat/11 914263 914263 15316 445.2MB/s txt3 [ +1.1%] + BM_UFlat/12 1222694 1222691 10000 375.8MB/s txt4 [ +1.4%] + BM_UFlat/13 584495 584489 23954 837.4MB/s bin [ -0.6%] + BM_UFlat/14 66662 66662 210123 547.1MB/s sum [ +1.2%] + BM_UFlat/15 7368 7368 1881856 547.1MB/s man [ +4.0%] + BM_UFlat/16 110727 110726 100000 1021.4MB/s pb [ +2.3%] + BM_UFlat/17 382138 382141 36616 460.0MB/s gaviota [ -0.7%] + + Westmere (Core i7): + + Benchmark Time(ns) CPU(ns) Iterations + -------------------------------------------- + BM_UFlat/0 78861 78853 177703 1.2GB/s html [ +2.1%] + BM_UFlat/1 739560 739491 18912 905.4MB/s urls [ +3.4%] + BM_UFlat/2 9867 9866 1419014 12.0GB/s jpg [ +3.4%] + BM_UFlat/3 31989 31986 438385 2.7GB/s pdf [ +0.2%] + BM_UFlat/4 319406 319380 43771 1.2GB/s html4 [ +1.9%] + BM_UFlat/5 29639 29636 472862 791.7MB/s cp [ +5.2%] + BM_UFlat/6 13478 13477 1000000 789.0MB/s c [ +2.3%] + BM_UFlat/7 4030 4029 3475364 880.7MB/s lsp [ +8.7%] + BM_UFlat/8 1036585 1036492 10000 947.5MB/s xls [ +6.9%] + BM_UFlat/9 242127 242105 57838 599.1MB/s txt1 [ +3.0%] + BM_UFlat/10 206499 206480 67595 578.2MB/s txt2 [ +3.4%] + BM_UFlat/11 641635 641570 21811 634.4MB/s txt3 [ +2.4%] + BM_UFlat/12 848847 848769 16443 541.4MB/s txt4 [ +3.1%] + BM_UFlat/13 384968 384938 36366 1.2GB/s bin [ +0.3%] + BM_UFlat/14 47106 47101 297770 774.3MB/s sum [ +4.4%] + BM_UFlat/15 5063 5063 2772202 796.2MB/s man [ +7.7%] + BM_UFlat/16 83663 83656 167697 1.3GB/s pb [ +1.8%] + BM_UFlat/17 260224 260198 53823 675.6MB/s gaviota [ -0.5%] + + Barcelona (Opteron): + + Benchmark Time(ns) CPU(ns) Iterations + -------------------------------------------- + BM_UFlat/0 112490 112457 100000 868.4MB/s html [ -0.4%] + BM_UFlat/1 1066719 1066339 10000 627.9MB/s urls [ +1.0%] + BM_UFlat/2 24679 24672 563802 4.8GB/s jpg [ +0.7%] + BM_UFlat/3 50603 50589 277285 1.7GB/s pdf [ +2.6%] + BM_UFlat/4 452982 452849 30900 862.6MB/s html4 [ -0.2%] + BM_UFlat/5 43860 43848 319554 535.1MB/s cp [ +1.2%] + BM_UFlat/6 21419 21413 653573 496.6MB/s c [ +1.0%] + BM_UFlat/7 6646 6645 2105405 534.1MB/s lsp [ +0.3%] + BM_UFlat/8 1828487 1827886 7658 537.3MB/s xls [ +2.6%] + BM_UFlat/9 391824 391714 35708 370.3MB/s txt1 [ +2.2%] + BM_UFlat/10 334913 334816 41885 356.6MB/s txt2 [ +1.7%] + BM_UFlat/11 1042062 1041674 10000 390.7MB/s txt3 [ +1.1%] + BM_UFlat/12 1398902 1398456 10000 328.6MB/s txt4 [ +1.7%] + BM_UFlat/13 545706 545530 25669 897.2MB/s bin [ -0.4%] + BM_UFlat/14 71512 71505 196035 510.0MB/s sum [ +1.4%] + BM_UFlat/15 8422 8421 1665036 478.7MB/s man [ +2.6%] + BM_UFlat/16 112053 112048 100000 1009.3MB/s pb [ -0.4%] + BM_UFlat/17 416723 416713 33612 421.8MB/s gaviota [ -2.0%] + + R=sanjay + + + git-svn-id: https://snappy.googlecode.com/svn/trunk@53 03e5f5b5-db94-4691-08a0-1a8bf15f6143 + +commit 0c1b9c3904430f5b399bd057d76de4bc36b7a123 +Author: snappy.mirrorbot@gmail.com +Date: Tue Nov 8 14:46:39 2011 +0000 + + Fix public issue #53: Update the README to the API we actually open-sourced + with. + + R=sanjay + + + git-svn-id: https://snappy.googlecode.com/svn/trunk@52 03e5f5b5-db94-4691-08a0-1a8bf15f6143 + +commit b61134bc0a6a904b41522b4e5c9e80874c730cef +Author: snappy.mirrorbot@gmail.com +Date: Wed Oct 5 12:27:12 2011 +0000 + + In the format description, use a clearer example to emphasize that varints are + stored in little-endian. Patch from Christian von Roques. + + R=csilvers + + + git-svn-id: https://snappy.googlecode.com/svn/trunk@51 03e5f5b5-db94-4691-08a0-1a8bf15f6143 + +commit 21a2e4f55758e759302cd84ad0f3580affcba7d9 +Author: snappy.mirrorbot@gmail.com +Date: Thu Sep 15 19:34:06 2011 +0000 + + Release Snappy 1.0.4. + + R=sanjay + + + git-svn-id: https://snappy.googlecode.com/svn/trunk@50 03e5f5b5-db94-4691-08a0-1a8bf15f6143 + +commit e2e303286813c759c5b1cdb46dad63c494f0a061 +Author: snappy.mirrorbot@gmail.com +Date: Thu Sep 15 09:50:05 2011 +0000 + + Fix public issue #50: Include generic byteswap macros. + Also include Solaris 10 and FreeBSD versions. + + R=csilvers + + + git-svn-id: https://snappy.googlecode.com/svn/trunk@49 03e5f5b5-db94-4691-08a0-1a8bf15f6143 + +commit 593002da3c051f4721312869f816b41485bad3b7 +Author: snappy.mirrorbot@gmail.com +Date: Wed Aug 10 18:57:27 2011 +0000 + + Partially fix public issue 50: Remove an extra comma from the end of some + enum declarations, as it seems the Sun compiler does not like it. + + Based on patch by Travis Vitek. + + + git-svn-id: https://snappy.googlecode.com/svn/trunk@48 03e5f5b5-db94-4691-08a0-1a8bf15f6143 + +commit f1063a5dc43891eed37f0586bfea57b84dddd756 +Author: snappy.mirrorbot@gmail.com +Date: Wed Aug 10 18:44:16 2011 +0000 + + Use the right #ifdef test for sys/mman.h. + + Based on patch by Travis Vitek. + + + git-svn-id: https://snappy.googlecode.com/svn/trunk@47 03e5f5b5-db94-4691-08a0-1a8bf15f6143 + +commit 41c827a2fa9ce048202d941187f211180feadde4 +Author: snappy.mirrorbot@gmail.com +Date: Wed Aug 10 01:22:09 2011 +0000 + + Fix public issue #47: Small comment cleanups in the unit test. + + Originally based on a patch by Patrick Pelletier. + + R=sanjay + + + git-svn-id: https://snappy.googlecode.com/svn/trunk@46 03e5f5b5-db94-4691-08a0-1a8bf15f6143 + +commit 59aeffa6049b5c2a3a467e7602c1f93630b870e7 +Author: snappy.mirrorbot@gmail.com +Date: Wed Aug 10 01:14:43 2011 +0000 + + Fix public issue #46: Format description said "3-byte offset" + instead of "4-byte offset" for the longest copies. + + Also fix an inconsistency in the heading for section 2.2.3. + Both patches by Patrick Pelletier. + + R=csilvers + + + git-svn-id: https://snappy.googlecode.com/svn/trunk@45 03e5f5b5-db94-4691-08a0-1a8bf15f6143 + +commit 57e7cd72559cb022ef32856f2252a4c4585e562e +Author: snappy.mirrorbot@gmail.com +Date: Tue Jun 28 11:40:25 2011 +0000 + + Fix public issue #44: Make the definition and declaration of CompressFragment + identical, even regarding cv-qualifiers. + + This is required to work around a bug in the Solaris Studio C++ compiler + (it does not properly disregard cv-qualifiers when doing name mangling). + + R=sanjay + + + git-svn-id: https://snappy.googlecode.com/svn/trunk@44 03e5f5b5-db94-4691-08a0-1a8bf15f6143 + +commit 13c4a449a8ea22139c9aa441e8024eebc9dbdf6e +Author: snappy.mirrorbot@gmail.com +Date: Sat Jun 4 10:19:05 2011 +0000 + + Correct an inaccuracy in the Snappy format description. + (I stumbled into this when changing the way we decompress literals.) + + R=csilvers + + Revision created by MOE tool push_codebase. + + + git-svn-id: https://snappy.googlecode.com/svn/trunk@43 03e5f5b5-db94-4691-08a0-1a8bf15f6143 + +commit f5406737403119e1483a71d2084d17728663a114 +Author: snappy.mirrorbot@gmail.com +Date: Fri Jun 3 20:53:06 2011 +0000 + + Speed up decompression by removing a fast-path attempt. + + Whenever we try to enter a copy fast-path, there is a certain cost in checking + that all the preconditions are in place, but it's normally offset by the fact + that we can usually take the cheaper path. However, in a certain path we've + already established that "avail < literal_length", which usually means that + either the available space is small, or the literal is big. Both will disqualify + us from taking the fast path, and thus we take the hit from the precondition + checking without gaining much from having a fast path. Thus, simply don't try + the fast path in this situation -- we're already on a slow path anyway + (one where we need to refill more data from the reader). + + I'm a bit surprised at how much this gained; it could be that this path is + more common than I thought, or that the simpler structure somehow makes the + compiler happier. I haven't looked at the assembler, but it's a win across + the board on both Core 2, Core i7 and Opteron, at least for the cases we + typically care about. The gains seem to be the largest on Core i7, though. + Results from my Core i7 workstation: + + + Benchmark Time(ns) CPU(ns) Iterations + --------------------------------------------------- + BM_UFlat/0 73337 73091 190996 1.3GB/s html [ +1.7%] + BM_UFlat/1 696379 693501 20173 965.5MB/s urls [ +2.7%] + BM_UFlat/2 9765 9734 1472135 12.1GB/s jpg [ +0.7%] + BM_UFlat/3 29720 29621 472973 3.0GB/s pdf [ +1.8%] + BM_UFlat/4 294636 293834 47782 1.3GB/s html4 [ +2.3%] + BM_UFlat/5 28399 28320 494700 828.5MB/s cp [ +3.5%] + BM_UFlat/6 12795 12760 1000000 833.3MB/s c [ +1.2%] + BM_UFlat/7 3984 3973 3526448 893.2MB/s lsp [ +5.7%] + BM_UFlat/8 991996 989322 14141 992.6MB/s xls [ +3.3%] + BM_UFlat/9 228620 227835 61404 636.6MB/s txt1 [ +4.0%] + BM_UFlat/10 197114 196494 72165 607.5MB/s txt2 [ +3.5%] + BM_UFlat/11 605240 603437 23217 674.4MB/s txt3 [ +3.7%] + BM_UFlat/12 804157 802016 17456 573.0MB/s txt4 [ +3.9%] + BM_UFlat/13 347860 346998 40346 1.4GB/s bin [ +1.2%] + BM_UFlat/14 44684 44559 315315 818.4MB/s sum [ +2.3%] + BM_UFlat/15 5120 5106 2739726 789.4MB/s man [ +3.3%] + BM_UFlat/16 76591 76355 183486 1.4GB/s pb [ +2.8%] + BM_UFlat/17 238564 237828 58824 739.1MB/s gaviota [ +1.6%] + BM_UValidate/0 42194 42060 333333 2.3GB/s html [ -0.1%] + BM_UValidate/1 433182 432005 32407 1.5GB/s urls [ -0.1%] + BM_UValidate/2 197 196 71428571 603.3GB/s jpg [ +0.5%] + BM_UValidate/3 14494 14462 972222 6.1GB/s pdf [ +0.5%] + BM_UValidate/4 168444 167836 83832 2.3GB/s html4 [ +0.1%] + + R=jeff + + Revision created by MOE tool push_codebase. + + + git-svn-id: https://snappy.googlecode.com/svn/trunk@42 03e5f5b5-db94-4691-08a0-1a8bf15f6143 + +commit 197f3ee9f9397e98c9abf07f9da875fbcb725dba +Author: snappy.mirrorbot@gmail.com +Date: Fri Jun 3 20:47:14 2011 +0000 + + Speed up decompression by not needing a lookup table for literal items. + + Looking up into and decoding the values from char_table has long shown up as a + hotspot in the decompressor. While it turns out that it's hard to make a more + efficient decoder for the copy ops, the literals are simple enough that we can + decode them without needing a table lookup. (This means that 1/4 of the table + is now unused, although that in itself doesn't buy us anything.) + + The gains are small, but definitely present; some tests win as much as 10%, + but 1-4% is more typical. These results are from Core i7, in 64-bit mode; + Core 2 and Opteron show similar results. (I've run with more iterations + than unusual to make sure the smaller gains don't drown entirely in noise.) + + Benchmark Time(ns) CPU(ns) Iterations + --------------------------------------------------- + BM_UFlat/0 74665 74428 182055 1.3GB/s html [ +3.1%] + BM_UFlat/1 714106 711997 19663 940.4MB/s urls [ +4.4%] + BM_UFlat/2 9820 9789 1427115 12.1GB/s jpg [ -1.2%] + BM_UFlat/3 30461 30380 465116 2.9GB/s pdf [ +0.8%] + BM_UFlat/4 301445 300568 46512 1.3GB/s html4 [ +2.2%] + BM_UFlat/5 29338 29263 479452 801.8MB/s cp [ +1.6%] + BM_UFlat/6 13004 12970 1000000 819.9MB/s c [ +2.1%] + BM_UFlat/7 4180 4168 3349282 851.4MB/s lsp [ +1.3%] + BM_UFlat/8 1026149 1024000 10000 959.0MB/s xls [+10.7%] + BM_UFlat/9 237441 236830 59072 612.4MB/s txt1 [ +0.3%] + BM_UFlat/10 203966 203298 69307 587.2MB/s txt2 [ +0.8%] + BM_UFlat/11 627230 625000 22400 651.2MB/s txt3 [ +0.7%] + BM_UFlat/12 836188 833979 16787 551.0MB/s txt4 [ +1.3%] + BM_UFlat/13 351904 350750 39886 1.4GB/s bin [ +3.8%] + BM_UFlat/14 45685 45562 308370 800.4MB/s sum [ +5.9%] + BM_UFlat/15 5286 5270 2656546 764.9MB/s man [ +1.5%] + BM_UFlat/16 78774 78544 178117 1.4GB/s pb [ +4.3%] + BM_UFlat/17 242270 241345 58091 728.3MB/s gaviota [ +1.2%] + BM_UValidate/0 42149 42000 333333 2.3GB/s html [ -3.0%] + BM_UValidate/1 432741 431303 32483 1.5GB/s urls [ +7.8%] + BM_UValidate/2 198 197 71428571 600.7GB/s jpg [+16.8%] + BM_UValidate/3 14560 14521 965517 6.1GB/s pdf [ -4.1%] + BM_UValidate/4 169065 168671 83832 2.3GB/s html4 [ -2.9%] + + R=jeff + + Revision created by MOE tool push_codebase. + + + git-svn-id: https://snappy.googlecode.com/svn/trunk@41 03e5f5b5-db94-4691-08a0-1a8bf15f6143 + +commit 8efa2639e885ac467e7b11c662975c5844019fb9 +Author: snappy.mirrorbot@gmail.com +Date: Thu Jun 2 22:57:41 2011 +0000 + + Release Snappy 1.0.3. + + + git-svn-id: https://snappy.googlecode.com/svn/trunk@40 03e5f5b5-db94-4691-08a0-1a8bf15f6143 + +commit 2e12124bd87f39296709decc65195fa5bfced538 +Author: snappy.mirrorbot@gmail.com +Date: Thu Jun 2 18:06:54 2011 +0000 + + Remove an unneeded goto in the decompressor; it turns out that the + state of ip_ after decompression (or attempted decompresion) is + completely irrelevant, so we don't need the trailer. + + Performance is, as expected, mostly flat -- there's a curious ~3-5% + loss in the "lsp" test, but that test case is so short it is hard to say + anything definitive about why (most likely, it's some sort of + unrelated effect). + + R=jeff + + + git-svn-id: https://snappy.googlecode.com/svn/trunk@39 03e5f5b5-db94-4691-08a0-1a8bf15f6143 + +commit c266bbf32103f8ed4a83e2272ed3d8828d5b8b34 +Author: snappy.mirrorbot@gmail.com +Date: Thu Jun 2 17:59:40 2011 +0000 + + Speed up decompression by caching ip_. + + It is seemingly hard for the compiler to understand that ip_, the current input + pointer into the compressed data stream, can not alias on anything else, and + thus using it directly will incur memory traffic as it cannot be kept in a + register. The code already knew about this and cached it into a local + variable, but since Step() only decoded one tag, it had to move ip_ back into + place between every tag. This seems to have cost us a significant amount of + performance, so changing Step() into a function that decodes as much as it can + before it saves ip_ back and returns. (Note that Step() was already inlined, + so it is not the manual inlining that buys the performance here.) + + The wins are about 3-6% for Core 2, 6-13% on Core i7 and 5-12% on Opteron + (for plain array-to-array decompression, in 64-bit opt mode). + + There is a tiny difference in the behavior here; if an invalid literal is + encountered (ie., the writer refuses the Append() operation), ip_ will now + point to the byte past the tag byte, instead of where the literal was + originally thought to end. However, we don't use ip_ for anything after + DecompressAllTags() has returned, so this should not change external behavior + in any way. + + Microbenchmark results for Core i7, 64-bit (Opteron results are similar): + + Benchmark Time(ns) CPU(ns) Iterations + --------------------------------------------------- + BM_UFlat/0 79134 79110 8835 1.2GB/s html [ +6.2%] + BM_UFlat/1 786126 786096 891 851.8MB/s urls [+10.0%] + BM_UFlat/2 9948 9948 69125 11.9GB/s jpg [ -1.3%] + BM_UFlat/3 31999 31998 21898 2.7GB/s pdf [ +6.5%] + BM_UFlat/4 318909 318829 2204 1.2GB/s html4 [ +6.5%] + BM_UFlat/5 31384 31390 22363 747.5MB/s cp [ +9.2%] + BM_UFlat/6 14037 14034 49858 757.7MB/s c [+10.6%] + BM_UFlat/7 4612 4612 151395 769.5MB/s lsp [ +9.5%] + BM_UFlat/8 1203174 1203007 582 816.3MB/s xls [+19.3%] + BM_UFlat/9 253869 253955 2757 571.1MB/s txt1 [+11.4%] + BM_UFlat/10 219292 219290 3194 544.4MB/s txt2 [+12.1%] + BM_UFlat/11 672135 672131 1000 605.5MB/s txt3 [+11.2%] + BM_UFlat/12 902512 902492 776 509.2MB/s txt4 [+12.5%] + BM_UFlat/13 372110 371998 1881 1.3GB/s bin [ +5.8%] + BM_UFlat/14 50407 50407 10000 723.5MB/s sum [+13.5%] + BM_UFlat/15 5699 5701 100000 707.2MB/s man [+12.4%] + BM_UFlat/16 83448 83424 8383 1.3GB/s pb [ +5.7%] + BM_UFlat/17 256958 256963 2723 684.1MB/s gaviota [ +7.9%] + BM_UValidate/0 42795 42796 16351 2.2GB/s html [+25.8%] + BM_UValidate/1 490672 490622 1427 1.3GB/s urls [+22.7%] + BM_UValidate/2 237 237 2950297 499.0GB/s jpg [+24.9%] + BM_UValidate/3 14610 14611 47901 6.0GB/s pdf [+26.8%] + BM_UValidate/4 171973 171990 4071 2.2GB/s html4 [+25.7%] + + + + + git-svn-id: https://snappy.googlecode.com/svn/trunk@38 03e5f5b5-db94-4691-08a0-1a8bf15f6143 + +commit d0ee043bc50c62c5b5ff3da044f0b5567257407d +Author: snappy.mirrorbot@gmail.com +Date: Tue May 17 08:48:25 2011 +0000 + + Fix the numbering of the headlines in the Snappy format description. + + R=csilvers + DELTA=4 (0 added, 0 deleted, 4 changed) + + + Revision created by MOE tool push_codebase. + MOE_MIGRATION=1906 + + + git-svn-id: https://snappy.googlecode.com/svn/trunk@37 03e5f5b5-db94-4691-08a0-1a8bf15f6143 + +commit 6c7053871fbdb459c9c14287a138d7f82d6d84a1 +Author: snappy.mirrorbot@gmail.com +Date: Mon May 16 08:59:18 2011 +0000 + + Fix public issue #32: Add compressed format documentation for Snappy. + This text is new, but an earlier version from Zeev Tarantov was used + as reference. + + R=csilvers + DELTA=112 (111 added, 0 deleted, 1 changed) + + + Revision created by MOE tool push_codebase. + MOE_MIGRATION=1867 + + + git-svn-id: https://snappy.googlecode.com/svn/trunk@36 03e5f5b5-db94-4691-08a0-1a8bf15f6143 + +commit a1f9f9973d127992f341d442969c86fd9a0847c9 +Author: snappy.mirrorbot@gmail.com +Date: Mon May 9 21:29:02 2011 +0000 + + Fix public issue #39: Pick out the median runs based on CPU time, + not real time. Also, use nth_element instead of sort, since we + only need one element. + + R=csilvers + DELTA=5 (3 added, 0 deleted, 2 changed) + + + Revision created by MOE tool push_codebase. + MOE_MIGRATION=1799 + + + git-svn-id: https://snappy.googlecode.com/svn/trunk@35 03e5f5b5-db94-4691-08a0-1a8bf15f6143 + +commit f7b105683c074cdf233740089e245e43f63e7e55 +Author: snappy.mirrorbot@gmail.com +Date: Mon May 9 21:28:45 2011 +0000 + + Fix public issue #38: Make the microbenchmark framework handle + properly cases where gettimeofday() can stand return the same + result twice (as sometimes on GNU/Hurd) or go backwards + (as when the user adjusts the clock). We avoid a division-by-zero, + and put a lower bound on the number of iterations -- the same + amount as we use to calibrate. + + We should probably use CLOCK_MONOTONIC for platforms that support + it, to be robust against clock adjustments; we already use Windows' + monotonic timers. However, that's for a later changelist. + + R=csilvers + DELTA=7 (5 added, 0 deleted, 2 changed) + + + Revision created by MOE tool push_codebase. + MOE_MIGRATION=1798 + + + git-svn-id: https://snappy.googlecode.com/svn/trunk@34 03e5f5b5-db94-4691-08a0-1a8bf15f6143 + +commit d8d481427a05b88cdb0810c29bf400153595c423 +Author: snappy.mirrorbot@gmail.com +Date: Tue May 3 23:22:52 2011 +0000 + + Fix public issue #37: Only link snappy_unittest against -lz and other autodetected + libraries, not libsnappy.so (which doesn't need any such dependency). + + R=csilvers + DELTA=20 (14 added, 0 deleted, 6 changed) + + + Revision created by MOE tool push_codebase. + MOE_MIGRATION=1710 + + + git-svn-id: https://snappy.googlecode.com/svn/trunk@33 03e5f5b5-db94-4691-08a0-1a8bf15f6143 + +commit bcecf195c0aeb2c98144d3d54b4d8d228774f50d +Author: snappy.mirrorbot@gmail.com +Date: Tue May 3 23:22:33 2011 +0000 + + Release Snappy 1.0.2, to get the license change and various other fixes into + a release. + + R=csilvers + DELTA=239 (236 added, 0 deleted, 3 changed) + + + Revision created by MOE tool push_codebase. + MOE_MIGRATION=1709 + + + git-svn-id: https://snappy.googlecode.com/svn/trunk@32 03e5f5b5-db94-4691-08a0-1a8bf15f6143 + +commit 84d9f642025cda672dda0d94a8008f094500aaa6 +Author: snappy.mirrorbot@gmail.com +Date: Tue Apr 26 12:34:55 2011 +0000 + + Fix public issue #30: Stop using gettimeofday() altogether on Win32, + as MSVC doesn't include it. Replace with QueryPerformanceCounter(), + which is monotonic and probably reasonably high-resolution. + (Some machines have traditionally had bugs in QPC, but they should + be relatively rare these days, and there's really no much better + alternative that I know of.) + + R=csilvers + DELTA=74 (55 added, 19 deleted, 0 changed) + + + Revision created by MOE tool push_codebase. + MOE_MIGRATION=1556 + + + git-svn-id: https://snappy.googlecode.com/svn/trunk@31 03e5f5b5-db94-4691-08a0-1a8bf15f6143 + +commit 3d8e71df8d30f980d71d4c784ebfc5ff62d5b0cb +Author: snappy.mirrorbot@gmail.com +Date: Tue Apr 26 12:34:37 2011 +0000 + + Fix public issue #31: Don't reset PATH in autogen.sh; instead, do the trickery + we need for our own build system internally. + + R=csilvers + DELTA=16 (13 added, 1 deleted, 2 changed) + + + Revision created by MOE tool push_codebase. + MOE_MIGRATION=1555 + + + git-svn-id: https://snappy.googlecode.com/svn/trunk@30 03e5f5b5-db94-4691-08a0-1a8bf15f6143 + +commit 73987351de54c88e2fc3f5dcdeceb47708df3585 +Author: snappy.mirrorbot@gmail.com +Date: Fri Apr 15 22:55:56 2011 +0000 + + When including , define WIN32_LEAN_AND_MEAN first, + so we won't pull in macro definitions of things like min() and max(), + which can conflict with . + + R=csilvers + DELTA=1 (1 added, 0 deleted, 0 changed) + + + Revision created by MOE tool push_codebase. + MOE_MIGRATION=1485 + + + git-svn-id: https://snappy.googlecode.com/svn/trunk@29 03e5f5b5-db94-4691-08a0-1a8bf15f6143 + +commit fb7e0eade471a20b009720a84fea0af1552791d5 +Author: snappy.mirrorbot@gmail.com +Date: Mon Apr 11 09:07:01 2011 +0000 + + Fix public issue #29: Write CPU timing code for Windows, based on GetProcessTimes() + instead of getursage(). + + I thought I'd already committed this patch, so that the 1.0.1 release already + would have a Windows-compatible snappy_unittest, but I'd seemingly deleted it + instead, so this is a reconstruction. + + R=csilvers + DELTA=43 (39 added, 3 deleted, 1 changed) + + + Revision created by MOE tool push_codebase. + MOE_MIGRATION=1295 + + + git-svn-id: https://snappy.googlecode.com/svn/trunk@28 03e5f5b5-db94-4691-08a0-1a8bf15f6143 + +commit c67fa0c755a329000da5546fff79089d62ac2f82 +Author: snappy.mirrorbot@gmail.com +Date: Fri Apr 8 09:51:53 2011 +0000 + + Include C bindings of Snappy, contributed by Martin Gieseking. + + I've made a few changes since Martin's version; mostly style nits, but also + a semantic change -- most functions that return bool in the C++ version now + return an enum, to better match typical C (and zlib) semantics. + + I've kept the copyright notice, since Martin is obviously the author here; + he has signed the contributor license agreement, though, so this should not + hinder Google's use in the future. + + We'll need to update the libtool version number to match the added interface, + but as of http://www.gnu.org/software/libtool/manual/html_node/Updating-version-info.html + I'm going to wait until public release. + + R=csilvers + DELTA=238 (233 added, 0 deleted, 5 changed) + + + Revision created by MOE tool push_codebase. + MOE_MIGRATION=1294 + + + git-svn-id: https://snappy.googlecode.com/svn/trunk@27 03e5f5b5-db94-4691-08a0-1a8bf15f6143 + +commit 56be85cb9ae06f2e92180ae2575bdd10c012ab73 +Author: snappy.mirrorbot@gmail.com +Date: Thu Apr 7 16:36:43 2011 +0000 + + Replace geo.protodata with a newer version. + + The data compresses/decompresses slightly faster than the old data, and has + similar density. + + R=lookingbill + DELTA=1 (0 added, 0 deleted, 1 changed) + + + Revision created by MOE tool push_codebase. + MOE_MIGRATION=1288 + + + git-svn-id: https://snappy.googlecode.com/svn/trunk@26 03e5f5b5-db94-4691-08a0-1a8bf15f6143 + +commit 3dd93f3ec74df54a37f68bffabb058ac757bbe72 +Author: snappy.mirrorbot@gmail.com +Date: Wed Mar 30 20:27:53 2011 +0000 + + Fix public issue #27: Add HAVE_CONFIG_H tests around the config.h + inclusion in snappy-stubs-internal.h, which eases compiling outside the + automake/autoconf framework. + + R=csilvers + DELTA=5 (4 added, 1 deleted, 0 changed) + + + Revision created by MOE tool push_codebase. + MOE_MIGRATION=1152 + + + git-svn-id: https://snappy.googlecode.com/svn/trunk@25 03e5f5b5-db94-4691-08a0-1a8bf15f6143 + +commit f67bcaa61006da8b325a7ed9909a782590971815 +Author: snappy.mirrorbot@gmail.com +Date: Wed Mar 30 20:27:39 2011 +0000 + + Fix public issue #26: Take memory allocation and reallocation entirely out of the + Measure() loop. This gives all algorithms a small speed boost, except Snappy which + already didn't do reallocation (so the measurements were slightly biased in its + favor). + + R=csilvers + DELTA=92 (69 added, 9 deleted, 14 changed) + + + Revision created by MOE tool push_codebase. + MOE_MIGRATION=1151 + + + git-svn-id: https://snappy.googlecode.com/svn/trunk@24 03e5f5b5-db94-4691-08a0-1a8bf15f6143 + +commit cc333c1c5cc4eabceceb9848ff3cac6c604ecbc6 +Author: snappy.mirrorbot@gmail.com +Date: Wed Mar 30 20:25:09 2011 +0000 + + Renamed "namespace zippy" to "namespace snappy" to reduce + the differences from the opensource code. Will make it easier + in the future to mix-and-match third-party code that uses + snappy with google code. + + Currently, csearch shows that the only external user of + "namespace zippy" is some bigtable code that accesses + a TEST variable, which is temporarily kept in the zippy + namespace. + + R=sesse + DELTA=123 (18 added, 3 deleted, 102 changed) + + + Revision created by MOE tool push_codebase. + MOE_MIGRATION=1150 + + + git-svn-id: https://snappy.googlecode.com/svn/trunk@23 03e5f5b5-db94-4691-08a0-1a8bf15f6143 + +commit f19fb07e6dc79d6857e37df572dba25ff30fc8f3 +Author: snappy.mirrorbot@gmail.com +Date: Mon Mar 28 22:17:04 2011 +0000 + + Put back the final few lines of what was truncated during the + license header change. + + R=csilvers + DELTA=5 (4 added, 0 deleted, 1 changed) + + + Revision created by MOE tool push_codebase. + MOE_MIGRATION=1094 + + + git-svn-id: https://snappy.googlecode.com/svn/trunk@22 03e5f5b5-db94-4691-08a0-1a8bf15f6143 + +commit 7e8ca8f8315fc2ecb4eea19db695039ab2ca43a0 +Author: snappy.mirrorbot@gmail.com +Date: Sat Mar 26 02:34:34 2011 +0000 + + Change on 2011-03-25 19:18:00-07:00 by sesse + + Replace the Apache 2.0 license header by the BSD-type license header; + somehow a lot of the files were missed in the last round. + + R=dannyb,csilvers + DELTA=147 (74 added, 2 deleted, 71 changed) + + Change on 2011-03-25 19:25:07-07:00 by sesse + + Unbreak the build; the relicensing removed a bit too much (only comments + were intended, but I also accidentially removed some of the top lines of + the actual source). + + + + Revision created by MOE tool push_codebase. + MOE_MIGRATION=1072 + + + git-svn-id: https://snappy.googlecode.com/svn/trunk@21 03e5f5b5-db94-4691-08a0-1a8bf15f6143 + +commit b4bbc1041b35d844ec26fbae25f2864995361fd8 +Author: snappy.mirrorbot@gmail.com +Date: Fri Mar 25 16:14:41 2011 +0000 + + Change Snappy from the Apache 2.0 to a BSD-type license. + + R=dannyb + DELTA=328 (80 added, 184 deleted, 64 changed) + + + Revision created by MOE tool push_codebase. + MOE_MIGRATION=1061 + + + git-svn-id: https://snappy.googlecode.com/svn/trunk@20 03e5f5b5-db94-4691-08a0-1a8bf15f6143 + +commit c47640c510eb11cf8913edfa34f667bceb3a4401 +Author: snappy.mirrorbot@gmail.com +Date: Fri Mar 25 00:39:01 2011 +0000 + + Release Snappy 1.0.1, to soup up all the various small changes + that have been made since release. + + R=csilvers + DELTA=266 (260 added, 0 deleted, 6 changed) + + + Revision created by MOE tool push_codebase. + MOE_MIGRATION=1057 + + + git-svn-id: https://snappy.googlecode.com/svn/trunk@19 03e5f5b5-db94-4691-08a0-1a8bf15f6143 + +commit b1dc1f643eaff897a5ce135f525799b99687b118 +Author: snappy.mirrorbot@gmail.com +Date: Thu Mar 24 19:15:54 2011 +0000 + + Fix a microbenchmark crash on mingw32; seemingly %lld is not universally + supported on Windows, and %I64d is recommended instead. + + R=csilvers + DELTA=6 (5 added, 0 deleted, 1 changed) + + + Revision created by MOE tool push_codebase. + MOE_MIGRATION=1034 + + + git-svn-id: https://snappy.googlecode.com/svn/trunk@18 03e5f5b5-db94-4691-08a0-1a8bf15f6143 + +commit 98004ca9afc62a3279dfe9d9a359083f61db437f +Author: snappy.mirrorbot@gmail.com +Date: Thu Mar 24 19:15:27 2011 +0000 + + Fix public issue #19: Fix unit test when Google Test is installed but the + gflags package isn't (Google Test is not properly initialized). + + Patch by Martin Gieseking. + + R=csilvers + DELTA=2 (1 added, 0 deleted, 1 changed) + + + Revision created by MOE tool push_codebase. + MOE_MIGRATION=1033 + + + git-svn-id: https://snappy.googlecode.com/svn/trunk@17 03e5f5b5-db94-4691-08a0-1a8bf15f6143 + +commit 444a6c5f72d6f8d8f7213a5bcc08b26606eb9934 +Author: snappy.mirrorbot@gmail.com +Date: Thu Mar 24 19:13:57 2011 +0000 + + Make the unit test work on systems without mmap(). This is required for, + among others, Windows support. For Windows in specific, we could have used + CreateFileMapping/MapViewOfFile, but this should at least get us a bit closer + to compiling, and is of course also relevant for embedded systems with no MMU. + + (Part 2/2) + + R=csilvers + DELTA=15 (12 added, 3 deleted, 0 changed) + + + Revision created by MOE tool push_codebase. + MOE_MIGRATION=1032 + + + git-svn-id: https://snappy.googlecode.com/svn/trunk@16 03e5f5b5-db94-4691-08a0-1a8bf15f6143 + +commit 2e182e9bb840737f9cd8817e859dc17a82f2c16b +Author: snappy.mirrorbot@gmail.com +Date: Thu Mar 24 19:12:27 2011 +0000 + + Make the unit test work on systems without mmap(). This is required for, + among others, Windows support. For Windows in specific, we could have used + CreateFileMapping/MapViewOfFile, but this should at least get us a bit closer + to compiling, and is of course also relevant for embedded systems with no MMU. + + (Part 1/2) + + R=csilvers + DELTA=9 (8 added, 0 deleted, 1 changed) + + + Revision created by MOE tool push_codebase. + MOE_MIGRATION=1031 + + + git-svn-id: https://snappy.googlecode.com/svn/trunk@15 03e5f5b5-db94-4691-08a0-1a8bf15f6143 + +commit 48662cbb7f81533977334629790d346220084527 +Author: snappy.mirrorbot@gmail.com +Date: Wed Mar 23 23:17:36 2011 +0000 + + Fix public issue #12: Don't keep autogenerated auto* files in Subversion; + it causes problems with others sending patches etc.. + + We can't get this 100% hermetic anyhow, due to files like lt~obsolete.m4, + so we can just as well go cleanly in the other direction. + + R=csilvers + DELTA=21038 (0 added, 21036 deleted, 2 changed) + + + Revision created by MOE tool push_codebase. + MOE_MIGRATION=1012 + + + git-svn-id: https://snappy.googlecode.com/svn/trunk@14 03e5f5b5-db94-4691-08a0-1a8bf15f6143 + +commit 9e4717a586149c9538b353400312bab5ab5458c4 +Author: snappy.mirrorbot@gmail.com +Date: Wed Mar 23 17:50:49 2011 +0000 + + Fix public issue tracker bug #3: Call AC_SUBST([LIBTOOL_DEPS]), or the rule + to rebuild libtool in Makefile.am won't work. + + R=csilvers + DELTA=1 (1 added, 0 deleted, 0 changed) + + + Revision created by MOE tool push_codebase. + MOE_MIGRATION=997 + + + git-svn-id: https://snappy.googlecode.com/svn/trunk@13 03e5f5b5-db94-4691-08a0-1a8bf15f6143 + +commit 519c822a34a91a0c0eb32d98e9686ee7d9cd6651 +Author: snappy.mirrorbot@gmail.com +Date: Wed Mar 23 11:16:39 2011 +0000 + + Fix public issue #10: Don't add GTEST_CPPFLAGS to snappy_unittest_CXXFLAGS; + it's not needed (CPPFLAGS are always included when compiling). + + R=csilvers + DELTA=1 (0 added, 1 deleted, 0 changed) + + + Revision created by MOE tool push_codebase. + MOE_MIGRATION=994 + + + git-svn-id: https://snappy.googlecode.com/svn/trunk@12 03e5f5b5-db94-4691-08a0-1a8bf15f6143 + +commit ea6b936378583cba730c33c8a53776edc1782208 +Author: snappy.mirrorbot@gmail.com +Date: Wed Mar 23 11:16:18 2011 +0000 + + Fix public issue #9: Add -Wall -Werror to automake flags. + (This concerns automake itself, not the C++ compiler.) + + R=csilvers + DELTA=4 (3 added, 0 deleted, 1 changed) + + + Revision created by MOE tool push_codebase. + MOE_MIGRATION=993 + + + git-svn-id: https://snappy.googlecode.com/svn/trunk@11 03e5f5b5-db94-4691-08a0-1a8bf15f6143 + +commit e3ca06af253094b1c3a8eae508cd97accf077535 +Author: snappy.mirrorbot@gmail.com +Date: Wed Mar 23 11:13:37 2011 +0000 + + Fix a typo in the Snappy README file. + + R=csilvers + DELTA=1 (0 added, 0 deleted, 1 changed) + + + Revision created by MOE tool push_codebase. + MOE_MIGRATION=992 + + + git-svn-id: https://snappy.googlecode.com/svn/trunk@10 03e5f5b5-db94-4691-08a0-1a8bf15f6143 + +commit 39d27bea23873abaa663e884261386b17b058f20 +Author: snappy.mirrorbot@gmail.com +Date: Wed Mar 23 11:13:13 2011 +0000 + + Fix public issue #6: Add a --with-gflags for disabling gflags autodetection + and using a manually given setting (use/don't use) instead. + + R=csilvers + DELTA=16 (13 added, 0 deleted, 3 changed) + + + Revision created by MOE tool push_codebase. + MOE_MIGRATION=991 + + + git-svn-id: https://snappy.googlecode.com/svn/trunk@9 03e5f5b5-db94-4691-08a0-1a8bf15f6143 + +commit 60add43d99c1c31aeecd895cb555ad6f6520608e +Author: snappy.mirrorbot@gmail.com +Date: Wed Mar 23 11:12:44 2011 +0000 + + Fix public issue #5: Replace the EXTRA_LIBSNAPPY_LDFLAGS setup with something + slightly more standard, that also doesn't leak libtool command-line into + configure.ac. + + R=csilvers + DELTA=7 (0 added, 4 deleted, 3 changed) + + + Revision created by MOE tool push_codebase. + MOE_MIGRATION=990 + + + git-svn-id: https://snappy.googlecode.com/svn/trunk@8 03e5f5b5-db94-4691-08a0-1a8bf15f6143 + +commit a8dd1700879ad646106742aa0e9c3a48dc07b01d +Author: snappy.mirrorbot@gmail.com +Date: Wed Mar 23 11:12:22 2011 +0000 + + Fix public issue #4: Properly quote all macro arguments in configure.ac. + + R=csilvers + DELTA=16 (0 added, 0 deleted, 16 changed) + + + Revision created by MOE tool push_codebase. + MOE_MIGRATION=989 + + + git-svn-id: https://snappy.googlecode.com/svn/trunk@7 03e5f5b5-db94-4691-08a0-1a8bf15f6143 + +commit 79752dd7033658e28dc894de55012bdf2c9afca3 +Author: snappy.mirrorbot@gmail.com +Date: Wed Mar 23 11:11:54 2011 +0000 + + Fix public issue #7: Don't use internal variables named ac_*, as those belong + to autoconf's namespace. + + R=csilvers + DELTA=6 (0 added, 0 deleted, 6 changed) + + + Revision created by MOE tool push_codebase. + MOE_MIGRATION=988 + + + git-svn-id: https://snappy.googlecode.com/svn/trunk@6 03e5f5b5-db94-4691-08a0-1a8bf15f6143 + +commit 46e39fb20c297129494b969ac4ea64fcd04b4fa0 +Author: snappy.mirrorbot@gmail.com +Date: Wed Mar 23 11:11:09 2011 +0000 + + Add missing licensing headers to a few files. (Part 2/2.) + + R=csilvers + DELTA=12 (12 added, 0 deleted, 0 changed) + + + Revision created by MOE tool push_codebase. + MOE_MIGRATION=987 + + + git-svn-id: https://snappy.googlecode.com/svn/trunk@5 03e5f5b5-db94-4691-08a0-1a8bf15f6143 + +commit 3e764216fc8edaafca480443b90e55c14eaae2c2 +Author: snappy.mirrorbot@gmail.com +Date: Wed Mar 23 11:10:39 2011 +0000 + + Add mising licensing headers to a few files. (Part 1/2.) + + R=csilvers + DELTA=24 (24 added, 0 deleted, 0 changed) + + + Revision created by MOE tool push_codebase. + MOE_MIGRATION=986 + + + git-svn-id: https://snappy.googlecode.com/svn/trunk@4 03e5f5b5-db94-4691-08a0-1a8bf15f6143 + +commit 9a59f183c8ffec62dcdabd3499d0d515e44e4ef0 +Author: snappy.mirrorbot@gmail.com +Date: Wed Mar 23 11:10:04 2011 +0000 + + Use the correct license file for the Apache 2.0 license; + spotted by Florian Weimer. + + R=csilvers + DELTA=202 (174 added, 0 deleted, 28 changed) + + + Revision created by MOE tool push_codebase. + MOE_MIGRATION=985 + + + git-svn-id: https://snappy.googlecode.com/svn/trunk@3 03e5f5b5-db94-4691-08a0-1a8bf15f6143 + +commit 28a64402392c791905d6e1384ea1b48a5cb0b281 +Author: snappy.mirrorbot@gmail.com +Date: Fri Mar 18 17:14:15 2011 +0000 + + Revision created by MOE tool push_codebase. + MOE_MIGRATION= + + + git-svn-id: https://snappy.googlecode.com/svn/trunk@2 03e5f5b5-db94-4691-08a0-1a8bf15f6143 + +commit 7c3c6077b72b4ae2237267a20f640b55e9a90569 +Author: sesse@google.com +Date: Fri Mar 18 17:13:52 2011 +0000 + + Create trunk directory. + + + git-svn-id: https://snappy.googlecode.com/svn/trunk@1 03e5f5b5-db94-4691-08a0-1a8bf15f6143 diff --git a/deps/snappy/snappy-1.1.1/INSTALL b/deps/snappy/snappy-1.1.4/INSTALL similarity index 97% rename from deps/snappy/snappy-1.1.1/INSTALL rename to deps/snappy/snappy-1.1.4/INSTALL index a1e89e18..20998407 100644 --- a/deps/snappy/snappy-1.1.1/INSTALL +++ b/deps/snappy/snappy-1.1.4/INSTALL @@ -1,7 +1,7 @@ Installation Instructions ************************* -Copyright (C) 1994-1996, 1999-2002, 2004-2011 Free Software Foundation, +Copyright (C) 1994-1996, 1999-2002, 2004-2013 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, @@ -12,8 +12,8 @@ without warranty of any kind. Basic Installation ================== - Briefly, the shell commands `./configure; make; make install' should -configure, build, and install this package. The following + Briefly, the shell command `./configure && make && make install' +should configure, build, and install this package. The following more-detailed instructions are generic; see the `README' file for instructions specific to this package. Some packages provide this `INSTALL' file but do not implement all of the features documented @@ -309,9 +309,10 @@ causes the specified `gcc' to be used as the C compiler (unless it is overridden in the site shell script). Unfortunately, this technique does not work for `CONFIG_SHELL' due to -an Autoconf bug. Until the bug is fixed you can use this workaround: +an Autoconf limitation. Until the limitation is lifted, you can use +this workaround: - CONFIG_SHELL=/bin/bash /bin/bash ./configure CONFIG_SHELL=/bin/bash + CONFIG_SHELL=/bin/bash ./configure CONFIG_SHELL=/bin/bash `configure' Invocation ====================== @@ -367,4 +368,3 @@ operates. `configure' also accepts some other, not widely useful, options. Run `configure --help' for more details. - diff --git a/deps/snappy/snappy-1.1.1/Makefile.am b/deps/snappy/snappy-1.1.4/Makefile.am old mode 100644 new mode 100755 similarity index 75% rename from deps/snappy/snappy-1.1.1/Makefile.am rename to deps/snappy/snappy-1.1.4/Makefile.am index f17b2e35..c00e1368 --- a/deps/snappy/snappy-1.1.1/Makefile.am +++ b/deps/snappy/snappy-1.1.4/Makefile.am @@ -16,8 +16,11 @@ snappy_unittest_LDADD = libsnappy.la $(UNITTEST_LIBS) $(gflags_LIBS) $(GTEST_LIB TESTS = snappy_unittest noinst_PROGRAMS = $(TESTS) -EXTRA_DIST = autogen.sh testdata/alice29.txt testdata/asyoulik.txt testdata/baddata1.snappy testdata/baddata2.snappy testdata/baddata3.snappy testdata/cp.html testdata/fields.c testdata/geo.protodata testdata/grammar.lsp testdata/house.jpg testdata/html testdata/html_x_4 testdata/kennedy.xls testdata/kppkn.gtb testdata/lcet10.txt testdata/mapreduce-osdi-1.pdf testdata/plrabn12.txt testdata/ptt5 testdata/sum testdata/urls.10K testdata/xargs.1 +EXTRA_DIST = autogen.sh testdata/alice29.txt testdata/asyoulik.txt testdata/baddata1.snappy testdata/baddata2.snappy testdata/baddata3.snappy testdata/geo.protodata testdata/fireworks.jpeg testdata/html testdata/html_x_4 testdata/kppkn.gtb testdata/lcet10.txt testdata/paper-100k.pdf testdata/plrabn12.txt testdata/urls.10K dist_doc_DATA = ChangeLog COPYING INSTALL NEWS README format_description.txt framing_format.txt +pkgconfigdir = $(libdir)/pkgconfig +nodist_pkgconfig_DATA = snappy.pc + libtool: $(LIBTOOL_DEPS) $(SHELL) ./config.status --recheck diff --git a/deps/snappy/snappy-1.1.4/Makefile.in b/deps/snappy/snappy-1.1.4/Makefile.in new file mode 100644 index 00000000..7851f7f8 --- /dev/null +++ b/deps/snappy/snappy-1.1.4/Makefile.in @@ -0,0 +1,1352 @@ +# Makefile.in generated by automake 1.14.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2013 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + + + + +VPATH = @srcdir@ +am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +TESTS = snappy_unittest$(EXEEXT) +noinst_PROGRAMS = $(am__EXEEXT_1) +subdir = . +DIST_COMMON = INSTALL NEWS README AUTHORS ChangeLog \ + $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ + $(top_srcdir)/configure $(am__configure_deps) \ + $(srcdir)/config.h.in $(srcdir)/snappy-stubs-public.h.in \ + $(srcdir)/snappy.pc.in depcomp $(dist_doc_DATA) \ + $(include_HEADERS) $(noinst_HEADERS) test-driver COPYING \ + compile config.guess config.sub install-sh missing ltmain.sh +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/gtest.m4 \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ + configure.lineno config.status.lineno +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = config.h +CONFIG_CLEAN_FILES = snappy-stubs-public.h snappy.pc +CONFIG_CLEAN_VPATH_FILES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__uninstall_files_from_dir = { \ + test -z "$$files" \ + || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ + || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ + $(am__cd) "$$dir" && rm -f $$files; }; \ + } +am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(docdir)" \ + "$(DESTDIR)$(pkgconfigdir)" "$(DESTDIR)$(includedir)" +LTLIBRARIES = $(lib_LTLIBRARIES) +libsnappy_la_LIBADD = +am_libsnappy_la_OBJECTS = snappy.lo snappy-sinksource.lo \ + snappy-stubs-internal.lo snappy-c.lo +libsnappy_la_OBJECTS = $(am_libsnappy_la_OBJECTS) +AM_V_lt = $(am__v_lt_@AM_V@) +am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) +am__v_lt_0 = --silent +am__v_lt_1 = +libsnappy_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ + $(CXXFLAGS) $(libsnappy_la_LDFLAGS) $(LDFLAGS) -o $@ +am__EXEEXT_1 = snappy_unittest$(EXEEXT) +PROGRAMS = $(noinst_PROGRAMS) +am_snappy_unittest_OBJECTS = \ + snappy_unittest-snappy_unittest.$(OBJEXT) \ + snappy_unittest-snappy-test.$(OBJEXT) +snappy_unittest_OBJECTS = $(am_snappy_unittest_OBJECTS) +am__DEPENDENCIES_1 = +snappy_unittest_DEPENDENCIES = libsnappy.la $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) +snappy_unittest_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \ + $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \ + $(AM_CXXFLAGS) $(CXXFLAGS) $(snappy_unittest_LDFLAGS) \ + $(LDFLAGS) -o $@ +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +DEFAULT_INCLUDES = -I.@am__isrc@ +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) +LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \ + $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ + $(AM_CXXFLAGS) $(CXXFLAGS) +AM_V_CXX = $(am__v_CXX_@AM_V@) +am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@) +am__v_CXX_0 = @echo " CXX " $@; +am__v_CXX_1 = +CXXLD = $(CXX) +CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ + $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_CXXLD = $(am__v_CXXLD_@AM_V@) +am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@) +am__v_CXXLD_0 = @echo " CXXLD " $@; +am__v_CXXLD_1 = +SOURCES = $(libsnappy_la_SOURCES) $(snappy_unittest_SOURCES) +DIST_SOURCES = $(libsnappy_la_SOURCES) $(snappy_unittest_SOURCES) +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +DATA = $(dist_doc_DATA) $(nodist_pkgconfig_DATA) +HEADERS = $(include_HEADERS) $(noinst_HEADERS) +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) \ + $(LISP)config.h.in +# Read a list of newline-separated strings from the standard input, +# and print each of them once, without duplicates. Input order is +# *not* preserved. +am__uniquify_input = $(AWK) '\ + BEGIN { nonempty = 0; } \ + { items[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in items) print i; }; } \ +' +# Make sure the list of sources is unique. This is necessary because, +# e.g., the same source file might be shared among _SOURCES variables +# for different programs/libraries. +am__define_uniq_tagged_files = \ + list='$(am__tagged_files)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | $(am__uniquify_input)` +ETAGS = etags +CTAGS = ctags +CSCOPE = cscope +AM_RECURSIVE_TARGETS = cscope check recheck +am__tty_colors_dummy = \ + mgn= red= grn= lgn= blu= brg= std=; \ + am__color_tests=no +am__tty_colors = { \ + $(am__tty_colors_dummy); \ + if test "X$(AM_COLOR_TESTS)" = Xno; then \ + am__color_tests=no; \ + elif test "X$(AM_COLOR_TESTS)" = Xalways; then \ + am__color_tests=yes; \ + elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \ + am__color_tests=yes; \ + fi; \ + if test $$am__color_tests = yes; then \ + red=''; \ + grn=''; \ + lgn=''; \ + blu=''; \ + mgn=''; \ + brg=''; \ + std=''; \ + fi; \ +} +am__recheck_rx = ^[ ]*:recheck:[ ]* +am__global_test_result_rx = ^[ ]*:global-test-result:[ ]* +am__copy_in_global_log_rx = ^[ ]*:copy-in-global-log:[ ]* +# A command that, given a newline-separated list of test names on the +# standard input, print the name of the tests that are to be re-run +# upon "make recheck". +am__list_recheck_tests = $(AWK) '{ \ + recheck = 1; \ + while ((rc = (getline line < ($$0 ".trs"))) != 0) \ + { \ + if (rc < 0) \ + { \ + if ((getline line2 < ($$0 ".log")) < 0) \ + recheck = 0; \ + break; \ + } \ + else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \ + { \ + recheck = 0; \ + break; \ + } \ + else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \ + { \ + break; \ + } \ + }; \ + if (recheck) \ + print $$0; \ + close ($$0 ".trs"); \ + close ($$0 ".log"); \ +}' +# A command that, given a newline-separated list of test names on the +# standard input, create the global log from their .trs and .log files. +am__create_global_log = $(AWK) ' \ +function fatal(msg) \ +{ \ + print "fatal: making $@: " msg | "cat >&2"; \ + exit 1; \ +} \ +function rst_section(header) \ +{ \ + print header; \ + len = length(header); \ + for (i = 1; i <= len; i = i + 1) \ + printf "="; \ + printf "\n\n"; \ +} \ +{ \ + copy_in_global_log = 1; \ + global_test_result = "RUN"; \ + while ((rc = (getline line < ($$0 ".trs"))) != 0) \ + { \ + if (rc < 0) \ + fatal("failed to read from " $$0 ".trs"); \ + if (line ~ /$(am__global_test_result_rx)/) \ + { \ + sub("$(am__global_test_result_rx)", "", line); \ + sub("[ ]*$$", "", line); \ + global_test_result = line; \ + } \ + else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \ + copy_in_global_log = 0; \ + }; \ + if (copy_in_global_log) \ + { \ + rst_section(global_test_result ": " $$0); \ + while ((rc = (getline line < ($$0 ".log"))) != 0) \ + { \ + if (rc < 0) \ + fatal("failed to read from " $$0 ".log"); \ + print line; \ + }; \ + printf "\n"; \ + }; \ + close ($$0 ".trs"); \ + close ($$0 ".log"); \ +}' +# Restructured Text title. +am__rst_title = { sed 's/.*/ & /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; } +# Solaris 10 'make', and several other traditional 'make' implementations, +# pass "-e" to $(SHELL), and POSIX 2008 even requires this. Work around it +# by disabling -e (using the XSI extension "set +e") if it's set. +am__sh_e_setup = case $$- in *e*) set +e;; esac +# Default flags passed to test drivers. +am__common_driver_flags = \ + --color-tests "$$am__color_tests" \ + --enable-hard-errors "$$am__enable_hard_errors" \ + --expect-failure "$$am__expect_failure" +# To be inserted before the command running the test. Creates the +# directory for the log if needed. Stores in $dir the directory +# containing $f, in $tst the test, in $log the log. Executes the +# developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and +# passes TESTS_ENVIRONMENT. Set up options for the wrapper that +# will run the test scripts (or their associated LOG_COMPILER, if +# thy have one). +am__check_pre = \ +$(am__sh_e_setup); \ +$(am__vpath_adj_setup) $(am__vpath_adj) \ +$(am__tty_colors); \ +srcdir=$(srcdir); export srcdir; \ +case "$@" in \ + */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;; \ + *) am__odir=.;; \ +esac; \ +test "x$$am__odir" = x"." || test -d "$$am__odir" \ + || $(MKDIR_P) "$$am__odir" || exit $$?; \ +if test -f "./$$f"; then dir=./; \ +elif test -f "$$f"; then dir=; \ +else dir="$(srcdir)/"; fi; \ +tst=$$dir$$f; log='$@'; \ +if test -n '$(DISABLE_HARD_ERRORS)'; then \ + am__enable_hard_errors=no; \ +else \ + am__enable_hard_errors=yes; \ +fi; \ +case " $(XFAIL_TESTS) " in \ + *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \ + am__expect_failure=yes;; \ + *) \ + am__expect_failure=no;; \ +esac; \ +$(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT) +# A shell command to get the names of the tests scripts with any registered +# extension removed (i.e., equivalently, the names of the test logs, with +# the '.log' extension removed). The result is saved in the shell variable +# '$bases'. This honors runtime overriding of TESTS and TEST_LOGS. Sadly, +# we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)", +# since that might cause problem with VPATH rewrites for suffix-less tests. +# See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'. +am__set_TESTS_bases = \ + bases='$(TEST_LOGS)'; \ + bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \ + bases=`echo $$bases` +RECHECK_LOGS = $(TEST_LOGS) +TEST_SUITE_LOG = test-suite.log +TEST_EXTENSIONS = @EXEEXT@ .test +LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver +LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS) +am__set_b = \ + case '$@' in \ + */*) \ + case '$*' in \ + */*) b='$*';; \ + *) b=`echo '$@' | sed 's/\.log$$//'`; \ + esac;; \ + *) \ + b='$*';; \ + esac +am__test_logs1 = $(TESTS:=.log) +am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log) +TEST_LOGS = $(am__test_logs2:.test.log=.log) +TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver +TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \ + $(TEST_LOG_FLAGS) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +distdir = $(PACKAGE)-$(VERSION) +top_distdir = $(distdir) +am__remove_distdir = \ + if test -d "$(distdir)"; then \ + find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ + && rm -rf "$(distdir)" \ + || { sleep 5 && rm -rf "$(distdir)"; }; \ + else :; fi +am__post_remove_distdir = $(am__remove_distdir) +DIST_ARCHIVES = $(distdir).tar.gz +GZIP_ENV = --best +DIST_TARGETS = dist-gzip +distuninstallcheck_listfiles = find . -type f -print +am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \ + | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$' +distcleancheck_listfiles = find . -type f -print +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GREP = @GREP@ +GTEST_CONFIG = @GTEST_CONFIG@ +GTEST_CPPFLAGS = @GTEST_CPPFLAGS@ +GTEST_CXXFLAGS = @GTEST_CXXFLAGS@ +GTEST_LDFLAGS = @GTEST_LDFLAGS@ +GTEST_LIBS = @GTEST_LIBS@ +GTEST_VERSION = @GTEST_VERSION@ +HAVE_GTEST = @HAVE_GTEST@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIBTOOL_DEPS = @LIBTOOL_DEPS@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ +PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SNAPPY_LTVERSION = @SNAPPY_LTVERSION@ +SNAPPY_MAJOR = @SNAPPY_MAJOR@ +SNAPPY_MINOR = @SNAPPY_MINOR@ +SNAPPY_PATCHLEVEL = @SNAPPY_PATCHLEVEL@ +STRIP = @STRIP@ +UNITTEST_LIBS = @UNITTEST_LIBS@ +VERSION = @VERSION@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +ac_cv_have_stddef_h = @ac_cv_have_stddef_h@ +ac_cv_have_stdint_h = @ac_cv_have_stdint_h@ +ac_cv_have_sys_uio_h = @ac_cv_have_sys_uio_h@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +gflags_CFLAGS = @gflags_CFLAGS@ +gflags_LIBS = @gflags_LIBS@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +ACLOCAL_AMFLAGS = -I m4 + +# Library. +lib_LTLIBRARIES = libsnappy.la +libsnappy_la_SOURCES = snappy.cc snappy-sinksource.cc snappy-stubs-internal.cc snappy-c.cc +libsnappy_la_LDFLAGS = -version-info $(SNAPPY_LTVERSION) +include_HEADERS = snappy.h snappy-sinksource.h snappy-stubs-public.h snappy-c.h +noinst_HEADERS = snappy-internal.h snappy-stubs-internal.h snappy-test.h + +# Unit tests and benchmarks. +snappy_unittest_CPPFLAGS = $(gflags_CFLAGS) $(GTEST_CPPFLAGS) +snappy_unittest_SOURCES = snappy_unittest.cc snappy-test.cc +snappy_unittest_LDFLAGS = $(GTEST_LDFLAGS) +snappy_unittest_LDADD = libsnappy.la $(UNITTEST_LIBS) $(gflags_LIBS) $(GTEST_LIBS) +EXTRA_DIST = autogen.sh testdata/alice29.txt testdata/asyoulik.txt testdata/baddata1.snappy testdata/baddata2.snappy testdata/baddata3.snappy testdata/geo.protodata testdata/fireworks.jpeg testdata/html testdata/html_x_4 testdata/kppkn.gtb testdata/lcet10.txt testdata/paper-100k.pdf testdata/plrabn12.txt testdata/urls.10K +dist_doc_DATA = ChangeLog COPYING INSTALL NEWS README format_description.txt framing_format.txt +pkgconfigdir = $(libdir)/pkgconfig +nodist_pkgconfig_DATA = snappy.pc +all: config.h + $(MAKE) $(AM_MAKEFLAGS) all-am + +.SUFFIXES: +.SUFFIXES: .cc .lo .log .o .obj .test .test$(EXEEXT) .trs +am--refresh: Makefile + @: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + echo ' cd $(srcdir) && $(AUTOMAKE) --gnu'; \ + $(am__cd) $(srcdir) && $(AUTOMAKE) --gnu \ + && exit 0; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + echo ' $(SHELL) ./config.status'; \ + $(SHELL) ./config.status;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + $(SHELL) ./config.status --recheck + +$(top_srcdir)/configure: $(am__configure_deps) + $(am__cd) $(srcdir) && $(AUTOCONF) +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) +$(am__aclocal_m4_deps): + +config.h: stamp-h1 + @test -f $@ || rm -f stamp-h1 + @test -f $@ || $(MAKE) $(AM_MAKEFLAGS) stamp-h1 + +stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status + @rm -f stamp-h1 + cd $(top_builddir) && $(SHELL) ./config.status config.h +$(srcdir)/config.h.in: $(am__configure_deps) + ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) + rm -f stamp-h1 + touch $@ + +distclean-hdr: + -rm -f config.h stamp-h1 +snappy-stubs-public.h: $(top_builddir)/config.status $(srcdir)/snappy-stubs-public.h.in + cd $(top_builddir) && $(SHELL) ./config.status $@ +snappy.pc: $(top_builddir)/config.status $(srcdir)/snappy.pc.in + cd $(top_builddir) && $(SHELL) ./config.status $@ + +install-libLTLIBRARIES: $(lib_LTLIBRARIES) + @$(NORMAL_INSTALL) + @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ + list2=; for p in $$list; do \ + if test -f $$p; then \ + list2="$$list2 $$p"; \ + else :; fi; \ + done; \ + test -z "$$list2" || { \ + echo " $(MKDIR_P) '$(DESTDIR)$(libdir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(libdir)" || exit 1; \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \ + } + +uninstall-libLTLIBRARIES: + @$(NORMAL_UNINSTALL) + @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ + for p in $$list; do \ + $(am__strip_dir) \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \ + done + +clean-libLTLIBRARIES: + -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) + @list='$(lib_LTLIBRARIES)'; \ + locs=`for p in $$list; do echo $$p; done | \ + sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ + sort -u`; \ + test -z "$$locs" || { \ + echo rm -f $${locs}; \ + rm -f $${locs}; \ + } + +libsnappy.la: $(libsnappy_la_OBJECTS) $(libsnappy_la_DEPENDENCIES) $(EXTRA_libsnappy_la_DEPENDENCIES) + $(AM_V_CXXLD)$(libsnappy_la_LINK) -rpath $(libdir) $(libsnappy_la_OBJECTS) $(libsnappy_la_LIBADD) $(LIBS) + +clean-noinstPROGRAMS: + @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \ + echo " rm -f" $$list; \ + rm -f $$list || exit $$?; \ + test -n "$(EXEEXT)" || exit 0; \ + list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ + echo " rm -f" $$list; \ + rm -f $$list + +snappy_unittest$(EXEEXT): $(snappy_unittest_OBJECTS) $(snappy_unittest_DEPENDENCIES) $(EXTRA_snappy_unittest_DEPENDENCIES) + @rm -f snappy_unittest$(EXEEXT) + $(AM_V_CXXLD)$(snappy_unittest_LINK) $(snappy_unittest_OBJECTS) $(snappy_unittest_LDADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/snappy-c.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/snappy-sinksource.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/snappy-stubs-internal.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/snappy.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/snappy_unittest-snappy-test.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/snappy_unittest-snappy_unittest.Po@am__quote@ + +.cc.o: +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $< + +.cc.obj: +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` + +.cc.lo: +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LTCXXCOMPILE) -c -o $@ $< + +snappy_unittest-snappy_unittest.o: snappy_unittest.cc +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(snappy_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT snappy_unittest-snappy_unittest.o -MD -MP -MF $(DEPDIR)/snappy_unittest-snappy_unittest.Tpo -c -o snappy_unittest-snappy_unittest.o `test -f 'snappy_unittest.cc' || echo '$(srcdir)/'`snappy_unittest.cc +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/snappy_unittest-snappy_unittest.Tpo $(DEPDIR)/snappy_unittest-snappy_unittest.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='snappy_unittest.cc' object='snappy_unittest-snappy_unittest.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(snappy_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o snappy_unittest-snappy_unittest.o `test -f 'snappy_unittest.cc' || echo '$(srcdir)/'`snappy_unittest.cc + +snappy_unittest-snappy_unittest.obj: snappy_unittest.cc +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(snappy_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT snappy_unittest-snappy_unittest.obj -MD -MP -MF $(DEPDIR)/snappy_unittest-snappy_unittest.Tpo -c -o snappy_unittest-snappy_unittest.obj `if test -f 'snappy_unittest.cc'; then $(CYGPATH_W) 'snappy_unittest.cc'; else $(CYGPATH_W) '$(srcdir)/snappy_unittest.cc'; fi` +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/snappy_unittest-snappy_unittest.Tpo $(DEPDIR)/snappy_unittest-snappy_unittest.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='snappy_unittest.cc' object='snappy_unittest-snappy_unittest.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(snappy_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o snappy_unittest-snappy_unittest.obj `if test -f 'snappy_unittest.cc'; then $(CYGPATH_W) 'snappy_unittest.cc'; else $(CYGPATH_W) '$(srcdir)/snappy_unittest.cc'; fi` + +snappy_unittest-snappy-test.o: snappy-test.cc +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(snappy_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT snappy_unittest-snappy-test.o -MD -MP -MF $(DEPDIR)/snappy_unittest-snappy-test.Tpo -c -o snappy_unittest-snappy-test.o `test -f 'snappy-test.cc' || echo '$(srcdir)/'`snappy-test.cc +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/snappy_unittest-snappy-test.Tpo $(DEPDIR)/snappy_unittest-snappy-test.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='snappy-test.cc' object='snappy_unittest-snappy-test.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(snappy_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o snappy_unittest-snappy-test.o `test -f 'snappy-test.cc' || echo '$(srcdir)/'`snappy-test.cc + +snappy_unittest-snappy-test.obj: snappy-test.cc +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(snappy_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT snappy_unittest-snappy-test.obj -MD -MP -MF $(DEPDIR)/snappy_unittest-snappy-test.Tpo -c -o snappy_unittest-snappy-test.obj `if test -f 'snappy-test.cc'; then $(CYGPATH_W) 'snappy-test.cc'; else $(CYGPATH_W) '$(srcdir)/snappy-test.cc'; fi` +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/snappy_unittest-snappy-test.Tpo $(DEPDIR)/snappy_unittest-snappy-test.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='snappy-test.cc' object='snappy_unittest-snappy-test.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(snappy_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o snappy_unittest-snappy-test.obj `if test -f 'snappy-test.cc'; then $(CYGPATH_W) 'snappy-test.cc'; else $(CYGPATH_W) '$(srcdir)/snappy-test.cc'; fi` + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +distclean-libtool: + -rm -f libtool config.lt +install-dist_docDATA: $(dist_doc_DATA) + @$(NORMAL_INSTALL) + @list='$(dist_doc_DATA)'; test -n "$(docdir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(docdir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(docdir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(docdir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(docdir)" || exit $$?; \ + done + +uninstall-dist_docDATA: + @$(NORMAL_UNINSTALL) + @list='$(dist_doc_DATA)'; test -n "$(docdir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(docdir)'; $(am__uninstall_files_from_dir) +install-nodist_pkgconfigDATA: $(nodist_pkgconfig_DATA) + @$(NORMAL_INSTALL) + @list='$(nodist_pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(pkgconfigdir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(pkgconfigdir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pkgconfigdir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(pkgconfigdir)" || exit $$?; \ + done + +uninstall-nodist_pkgconfigDATA: + @$(NORMAL_UNINSTALL) + @list='$(nodist_pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(pkgconfigdir)'; $(am__uninstall_files_from_dir) +install-includeHEADERS: $(include_HEADERS) + @$(NORMAL_INSTALL) + @list='$(include_HEADERS)'; test -n "$(includedir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(includedir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(includedir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(includedir)'"; \ + $(INSTALL_HEADER) $$files "$(DESTDIR)$(includedir)" || exit $$?; \ + done + +uninstall-includeHEADERS: + @$(NORMAL_UNINSTALL) + @list='$(include_HEADERS)'; test -n "$(includedir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(includedir)'; $(am__uninstall_files_from_dir) + +ID: $(am__tagged_files) + $(am__define_uniq_tagged_files); mkid -fID $$unique +tags: tags-am +TAGS: tags + +tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + set x; \ + here=`pwd`; \ + $(am__define_uniq_tagged_files); \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: ctags-am + +CTAGS: ctags +ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + $(am__define_uniq_tagged_files); \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" +cscope: cscope.files + test ! -s cscope.files \ + || $(CSCOPE) -b -q $(AM_CSCOPEFLAGS) $(CSCOPEFLAGS) -i cscope.files $(CSCOPE_ARGS) +clean-cscope: + -rm -f cscope.files +cscope.files: clean-cscope cscopelist +cscopelist: cscopelist-am + +cscopelist-am: $(am__tagged_files) + list='$(am__tagged_files)'; \ + case "$(srcdir)" in \ + [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ + *) sdir=$(subdir)/$(srcdir) ;; \ + esac; \ + for i in $$list; do \ + if test -f "$$i"; then \ + echo "$(subdir)/$$i"; \ + else \ + echo "$$sdir/$$i"; \ + fi; \ + done >> $(top_builddir)/cscope.files + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + -rm -f cscope.out cscope.in.out cscope.po.out cscope.files + +# Recover from deleted '.trs' file; this should ensure that +# "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create +# both 'foo.log' and 'foo.trs'. Break the recipe in two subshells +# to avoid problems with "make -n". +.log.trs: + rm -f $< $@ + $(MAKE) $(AM_MAKEFLAGS) $< + +# Leading 'am--fnord' is there to ensure the list of targets does not +# expand to empty, as could happen e.g. with make check TESTS=''. +am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck) +am--force-recheck: + @: + +$(TEST_SUITE_LOG): $(TEST_LOGS) + @$(am__set_TESTS_bases); \ + am__f_ok () { test -f "$$1" && test -r "$$1"; }; \ + redo_bases=`for i in $$bases; do \ + am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \ + done`; \ + if test -n "$$redo_bases"; then \ + redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \ + redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \ + if $(am__make_dryrun); then :; else \ + rm -f $$redo_logs && rm -f $$redo_results || exit 1; \ + fi; \ + fi; \ + if test -n "$$am__remaking_logs"; then \ + echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \ + "recursion detected" >&2; \ + else \ + am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \ + fi; \ + if $(am__make_dryrun); then :; else \ + st=0; \ + errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \ + for i in $$redo_bases; do \ + test -f $$i.trs && test -r $$i.trs \ + || { echo "$$errmsg $$i.trs" >&2; st=1; }; \ + test -f $$i.log && test -r $$i.log \ + || { echo "$$errmsg $$i.log" >&2; st=1; }; \ + done; \ + test $$st -eq 0 || exit 1; \ + fi + @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \ + ws='[ ]'; \ + results=`for b in $$bases; do echo $$b.trs; done`; \ + test -n "$$results" || results=/dev/null; \ + all=` grep "^$$ws*:test-result:" $$results | wc -l`; \ + pass=` grep "^$$ws*:test-result:$$ws*PASS" $$results | wc -l`; \ + fail=` grep "^$$ws*:test-result:$$ws*FAIL" $$results | wc -l`; \ + skip=` grep "^$$ws*:test-result:$$ws*SKIP" $$results | wc -l`; \ + xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \ + xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \ + error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \ + if test `expr $$fail + $$xpass + $$error` -eq 0; then \ + success=true; \ + else \ + success=false; \ + fi; \ + br='==================='; br=$$br$$br$$br$$br; \ + result_count () \ + { \ + if test x"$$1" = x"--maybe-color"; then \ + maybe_colorize=yes; \ + elif test x"$$1" = x"--no-color"; then \ + maybe_colorize=no; \ + else \ + echo "$@: invalid 'result_count' usage" >&2; exit 4; \ + fi; \ + shift; \ + desc=$$1 count=$$2; \ + if test $$maybe_colorize = yes && test $$count -gt 0; then \ + color_start=$$3 color_end=$$std; \ + else \ + color_start= color_end=; \ + fi; \ + echo "$${color_start}# $$desc $$count$${color_end}"; \ + }; \ + create_testsuite_report () \ + { \ + result_count $$1 "TOTAL:" $$all "$$brg"; \ + result_count $$1 "PASS: " $$pass "$$grn"; \ + result_count $$1 "SKIP: " $$skip "$$blu"; \ + result_count $$1 "XFAIL:" $$xfail "$$lgn"; \ + result_count $$1 "FAIL: " $$fail "$$red"; \ + result_count $$1 "XPASS:" $$xpass "$$red"; \ + result_count $$1 "ERROR:" $$error "$$mgn"; \ + }; \ + { \ + echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \ + $(am__rst_title); \ + create_testsuite_report --no-color; \ + echo; \ + echo ".. contents:: :depth: 2"; \ + echo; \ + for b in $$bases; do echo $$b; done \ + | $(am__create_global_log); \ + } >$(TEST_SUITE_LOG).tmp || exit 1; \ + mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \ + if $$success; then \ + col="$$grn"; \ + else \ + col="$$red"; \ + test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \ + fi; \ + echo "$${col}$$br$${std}"; \ + echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}"; \ + echo "$${col}$$br$${std}"; \ + create_testsuite_report --maybe-color; \ + echo "$$col$$br$$std"; \ + if $$success; then :; else \ + echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}"; \ + if test -n "$(PACKAGE_BUGREPORT)"; then \ + echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \ + fi; \ + echo "$$col$$br$$std"; \ + fi; \ + $$success || exit 1 + +check-TESTS: + @list='$(RECHECK_LOGS)'; test -z "$$list" || rm -f $$list + @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list + @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) + @set +e; $(am__set_TESTS_bases); \ + log_list=`for i in $$bases; do echo $$i.log; done`; \ + trs_list=`for i in $$bases; do echo $$i.trs; done`; \ + log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \ + $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \ + exit $$?; +recheck: all + @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) + @set +e; $(am__set_TESTS_bases); \ + bases=`for i in $$bases; do echo $$i; done \ + | $(am__list_recheck_tests)` || exit 1; \ + log_list=`for i in $$bases; do echo $$i.log; done`; \ + log_list=`echo $$log_list`; \ + $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \ + am__force_recheck=am--force-recheck \ + TEST_LOGS="$$log_list"; \ + exit $$? +snappy_unittest.log: snappy_unittest$(EXEEXT) + @p='snappy_unittest$(EXEEXT)'; \ + b='snappy_unittest'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +.test.log: + @p='$<'; \ + $(am__set_b); \ + $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +@am__EXEEXT_TRUE@.test$(EXEEXT).log: +@am__EXEEXT_TRUE@ @p='$<'; \ +@am__EXEEXT_TRUE@ $(am__set_b); \ +@am__EXEEXT_TRUE@ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ +@am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \ +@am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ +@am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT) + +distdir: $(DISTFILES) + $(am__remove_distdir) + test -d "$(distdir)" || mkdir "$(distdir)" + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done + -test -n "$(am__skip_mode_fix)" \ + || find "$(distdir)" -type d ! -perm -755 \ + -exec chmod u+rwx,go+rx {} \; -o \ + ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ + ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ + ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ + || chmod -R a+r "$(distdir)" +dist-gzip: distdir + tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz + $(am__post_remove_distdir) + +dist-bzip2: distdir + tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2 + $(am__post_remove_distdir) + +dist-lzip: distdir + tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz + $(am__post_remove_distdir) + +dist-xz: distdir + tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz + $(am__post_remove_distdir) + +dist-tarZ: distdir + @echo WARNING: "Support for shar distribution archives is" \ + "deprecated." >&2 + @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 + tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z + $(am__post_remove_distdir) + +dist-shar: distdir + @echo WARNING: "Support for distribution archives compressed with" \ + "legacy program 'compress' is deprecated." >&2 + @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 + shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz + $(am__post_remove_distdir) + +dist-zip: distdir + -rm -f $(distdir).zip + zip -rq $(distdir).zip $(distdir) + $(am__post_remove_distdir) + +dist dist-all: + $(MAKE) $(AM_MAKEFLAGS) $(DIST_TARGETS) am__post_remove_distdir='@:' + $(am__post_remove_distdir) + +# This target untars the dist file and tries a VPATH configuration. Then +# it guarantees that the distribution is self-contained by making another +# tarfile. +distcheck: dist + case '$(DIST_ARCHIVES)' in \ + *.tar.gz*) \ + GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\ + *.tar.bz2*) \ + bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ + *.tar.lz*) \ + lzip -dc $(distdir).tar.lz | $(am__untar) ;;\ + *.tar.xz*) \ + xz -dc $(distdir).tar.xz | $(am__untar) ;;\ + *.tar.Z*) \ + uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ + *.shar.gz*) \ + GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\ + *.zip*) \ + unzip $(distdir).zip ;;\ + esac + chmod -R a-w $(distdir) + chmod u+w $(distdir) + mkdir $(distdir)/_build $(distdir)/_inst + chmod a-w $(distdir) + test -d $(distdir)/_build || exit 0; \ + dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ + && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ + && am__cwd=`pwd` \ + && $(am__cd) $(distdir)/_build \ + && ../configure \ + $(AM_DISTCHECK_CONFIGURE_FLAGS) \ + $(DISTCHECK_CONFIGURE_FLAGS) \ + --srcdir=.. --prefix="$$dc_install_base" \ + && $(MAKE) $(AM_MAKEFLAGS) \ + && $(MAKE) $(AM_MAKEFLAGS) dvi \ + && $(MAKE) $(AM_MAKEFLAGS) check \ + && $(MAKE) $(AM_MAKEFLAGS) install \ + && $(MAKE) $(AM_MAKEFLAGS) installcheck \ + && $(MAKE) $(AM_MAKEFLAGS) uninstall \ + && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ + distuninstallcheck \ + && chmod -R a-w "$$dc_install_base" \ + && ({ \ + (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ + distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ + } || { rm -rf "$$dc_destdir"; exit 1; }) \ + && rm -rf "$$dc_destdir" \ + && $(MAKE) $(AM_MAKEFLAGS) dist \ + && rm -rf $(DIST_ARCHIVES) \ + && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ + && cd "$$am__cwd" \ + || exit 1 + $(am__post_remove_distdir) + @(echo "$(distdir) archives ready for distribution: "; \ + list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ + sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' +distuninstallcheck: + @test -n '$(distuninstallcheck_dir)' || { \ + echo 'ERROR: trying to run $@ with an empty' \ + '$$(distuninstallcheck_dir)' >&2; \ + exit 1; \ + }; \ + $(am__cd) '$(distuninstallcheck_dir)' || { \ + echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \ + exit 1; \ + }; \ + test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \ + || { echo "ERROR: files left after uninstall:" ; \ + if test -n "$(DESTDIR)"; then \ + echo " (check DESTDIR support)"; \ + fi ; \ + $(distuninstallcheck_listfiles) ; \ + exit 1; } >&2 +distcleancheck: distclean + @if test '$(srcdir)' = . ; then \ + echo "ERROR: distcleancheck can only run from a VPATH build" ; \ + exit 1 ; \ + fi + @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ + || { echo "ERROR: files left in build directory after distclean:" ; \ + $(distcleancheck_listfiles) ; \ + exit 1; } >&2 +check-am: all-am + $(MAKE) $(AM_MAKEFLAGS) check-TESTS +check: check-am +all-am: Makefile $(LTLIBRARIES) $(PROGRAMS) $(DATA) $(HEADERS) \ + config.h +installdirs: + for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(docdir)" "$(DESTDIR)$(pkgconfigdir)" "$(DESTDIR)$(includedir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS) + -test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs) + -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \ + clean-noinstPROGRAMS mostlyclean-am + +distclean: distclean-am + -rm -f $(am__CONFIG_DISTCLEAN_FILES) + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-hdr distclean-libtool distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-dist_docDATA install-includeHEADERS \ + install-nodist_pkgconfigDATA + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: install-libLTLIBRARIES + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f $(am__CONFIG_DISTCLEAN_FILES) + -rm -rf $(top_srcdir)/autom4te.cache + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-dist_docDATA uninstall-includeHEADERS \ + uninstall-libLTLIBRARIES uninstall-nodist_pkgconfigDATA + +.MAKE: all check-am install-am install-strip + +.PHONY: CTAGS GTAGS TAGS all all-am am--refresh check check-TESTS \ + check-am clean clean-cscope clean-generic clean-libLTLIBRARIES \ + clean-libtool clean-noinstPROGRAMS cscope cscopelist-am ctags \ + ctags-am dist dist-all dist-bzip2 dist-gzip dist-lzip \ + dist-shar dist-tarZ dist-xz dist-zip distcheck distclean \ + distclean-compile distclean-generic distclean-hdr \ + distclean-libtool distclean-tags distcleancheck distdir \ + distuninstallcheck dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am \ + install-dist_docDATA install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am \ + install-includeHEADERS install-info install-info-am \ + install-libLTLIBRARIES install-man \ + install-nodist_pkgconfigDATA install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + recheck tags tags-am uninstall uninstall-am \ + uninstall-dist_docDATA uninstall-includeHEADERS \ + uninstall-libLTLIBRARIES uninstall-nodist_pkgconfigDATA + + +libtool: $(LIBTOOL_DEPS) + $(SHELL) ./config.status --recheck + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/deps/snappy/snappy-1.1.1/NEWS b/deps/snappy/snappy-1.1.4/NEWS old mode 100644 new mode 100755 similarity index 81% rename from deps/snappy/snappy-1.1.1/NEWS rename to deps/snappy/snappy-1.1.4/NEWS index f21e9d0f..3bc0f4b0 --- a/deps/snappy/snappy-1.1.1/NEWS +++ b/deps/snappy/snappy-1.1.4/NEWS @@ -1,3 +1,34 @@ +Snappy v1.1.4, January 25th 2017: + + * Fix a 1% performance regression when snappy is used in PIE executables. + + * Improve compression performance by 5%. + + * Improve decompression performance by 20%. + +Snappy v1.1.3, July 6th 2015: + +This is the first release to be done from GitHub, which means that +some minor things like the ChangeLog format has changed (git log +format instead of svn log). + + * Add support for Uncompress() from a Source to a Sink. + + * Various minor changes to improve MSVC support; in particular, + the unit tests now compile and run under MSVC. + + +Snappy v1.1.2, February 28th 2014: + +This is a maintenance release with no changes to the actual library +source code. + + * Stop distributing benchmark data files that have unclear + or unsuitable licensing. + + * Add support for padding chunks in the framing format. + + Snappy v1.1.1, October 15th 2013: * Add support for uncompressing to iovecs (scatter I/O). diff --git a/deps/snappy/snappy-1.1.1/README b/deps/snappy/snappy-1.1.4/README old mode 100644 new mode 100755 similarity index 94% rename from deps/snappy/snappy-1.1.1/README rename to deps/snappy/snappy-1.1.4/README index 3bc8888f..c60dab9a --- a/deps/snappy/snappy-1.1.1/README +++ b/deps/snappy/snappy-1.1.4/README @@ -29,7 +29,7 @@ and the like. Performance =========== - + Snappy is intended to be fast. On a single core of a Core i7 processor in 64-bit mode, it compresses at about 250 MB/sec or more and decompresses at about 500 MB/sec or more. (These numbers are for the slowest inputs in our @@ -67,7 +67,7 @@ Usage Note that Snappy, both the implementation and the main interface, is written in C++. However, several third-party bindings to other languages -are available; see the Google Code page at http://code.google.com/p/snappy/ +are available; see the home page at http://google.github.io/snappy/ for more information. Also, if you want to use Snappy from C code, you can use the included C bindings in snappy-c.h. @@ -102,12 +102,12 @@ tests to verify you have not broken anything. Note that if you have the Google Test library installed, unit test behavior (especially failures) will be significantly more user-friendly. You can find Google Test at - http://code.google.com/p/googletest/ + http://github.com/google/googletest You probably also want the gflags library for handling of command-line flags; you can find it at - http://code.google.com/p/google-gflags/ + http://gflags.github.io/gflags/ In addition to the unit tests, snappy contains microbenchmarks used to tune compression and decompression performance. These are automatically run @@ -129,7 +129,11 @@ test.) Contact ======= -Snappy is distributed through Google Code. For the latest version, a bug tracker, +Snappy is distributed through GitHub. For the latest version, a bug tracker, and other information, see - http://code.google.com/p/snappy/ + http://google.github.io/snappy/ + +or the repository at + + https://github.com/google/snappy diff --git a/deps/snappy/snappy-1.1.1/aclocal.m4 b/deps/snappy/snappy-1.1.4/aclocal.m4 similarity index 95% rename from deps/snappy/snappy-1.1.1/aclocal.m4 rename to deps/snappy/snappy-1.1.4/aclocal.m4 index b4c1d52e..86d6433a 100644 --- a/deps/snappy/snappy-1.1.1/aclocal.m4 +++ b/deps/snappy/snappy-1.1.4/aclocal.m4 @@ -1,8 +1,7 @@ -# generated automatically by aclocal 1.11.3 -*- Autoconf -*- +# generated automatically by aclocal 1.14.1 -*- Autoconf -*- + +# Copyright (C) 1996-2013 Free Software Foundation, Inc. -# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, -# 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software Foundation, -# Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -12,13 +11,14 @@ # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. +m4_ifndef([AC_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])]) m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl -m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.68],, -[m4_warning([this file was generated for autoconf 2.68. +m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.69],, +[m4_warning([this file was generated for autoconf 2.69. You have another version of autoconf. It may work, but is not guaranteed to. If you have problems, you may need to regenerate the build system entirely. -To do so, use the procedure documented by the package, typically `autoreconf'.])]) +To do so, use the procedure documented by the package, typically 'autoreconf'.])]) # libtool.m4 - Configure libtool for the host system. -*-Autoconf-*- # @@ -1326,7 +1326,7 @@ ia64-*-hpux*) rm -rf conftest* ;; -x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \ +x86_64-*kfreebsd*-gnu|x86_64-*linux*|powerpc*-*linux*| \ s390*-*linux*|s390*-*tpf*|sparc*-*linux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext @@ -1338,9 +1338,19 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*) LD="${LD-ld} -m elf_i386_fbsd" ;; x86_64-*linux*) - LD="${LD-ld} -m elf_i386" + case `/usr/bin/file conftest.o` in + *x86-64*) + LD="${LD-ld} -m elf32_x86_64" + ;; + *) + LD="${LD-ld} -m elf_i386" + ;; + esac ;; - ppc64-*linux*|powerpc64-*linux*) + powerpc64le-*) + LD="${LD-ld} -m elf32lppclinux" + ;; + powerpc64-*) LD="${LD-ld} -m elf32ppclinux" ;; s390x-*linux*) @@ -1359,7 +1369,10 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*) x86_64-*linux*) LD="${LD-ld} -m elf_x86_64" ;; - ppc*-*linux*|powerpc*-*linux*) + powerpcle-*) + LD="${LD-ld} -m elf64lppc" + ;; + powerpc-*) LD="${LD-ld} -m elf64ppc" ;; s390*-*linux*|s390*-*tpf*) @@ -1702,7 +1715,8 @@ AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl ;; *) lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` - if test -n "$lt_cv_sys_max_cmd_len"; then + if test -n "$lt_cv_sys_max_cmd_len" && \ + test undefined != "$lt_cv_sys_max_cmd_len"; then lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` else @@ -2526,17 +2540,6 @@ freebsd* | dragonfly*) esac ;; -gnu*) - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - haiku*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no @@ -2653,7 +2656,7 @@ linux*oldld* | linux*aout* | linux*coff*) ;; # This must be glibc/ELF. -linux* | k*bsd*-gnu | kopensolaris*-gnu) +linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no @@ -3269,10 +3272,6 @@ freebsd* | dragonfly*) fi ;; -gnu*) - lt_cv_deplibs_check_method=pass_all - ;; - haiku*) lt_cv_deplibs_check_method=pass_all ;; @@ -3311,7 +3310,7 @@ irix5* | irix6* | nonstopux*) ;; # This must be glibc/ELF. -linux* | k*bsd*-gnu | kopensolaris*-gnu) +linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) lt_cv_deplibs_check_method=pass_all ;; @@ -4063,7 +4062,7 @@ m4_if([$1], [CXX], [ ;; esac ;; - linux* | k*bsd*-gnu | kopensolaris*-gnu) + linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) case $cc_basename in KCC*) # KAI C++ Compiler @@ -4362,7 +4361,7 @@ m4_if([$1], [CXX], [ _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; - linux* | k*bsd*-gnu | kopensolaris*-gnu) + linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) case $cc_basename in # old Intel for x86_64 which still supported -KPIC. ecc*) @@ -6251,9 +6250,6 @@ if test "$_lt_caught_CXX_error" != yes; then _LT_TAGVAR(ld_shlibs, $1)=yes ;; - gnu*) - ;; - haiku*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(link_all_deplibs, $1)=yes @@ -6415,7 +6411,7 @@ if test "$_lt_caught_CXX_error" != yes; then _LT_TAGVAR(inherit_rpath, $1)=yes ;; - linux* | k*bsd*-gnu | kopensolaris*-gnu) + linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler @@ -8786,25 +8782,22 @@ else fi[]dnl ])# PKG_CHECK_MODULES -# Copyright (C) 2002, 2003, 2005, 2006, 2007, 2008, 2011 Free Software -# Foundation, Inc. +# Copyright (C) 2002-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 1 - # AM_AUTOMAKE_VERSION(VERSION) # ---------------------------- # Automake X.Y traces this macro to ensure aclocal.m4 has been # generated from the m4 files accompanying Automake X.Y. # (This private macro should not be called outside this file.) AC_DEFUN([AM_AUTOMAKE_VERSION], -[am__api_version='1.11' +[am__api_version='1.14' dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to dnl require some minimum version. Point them to the right macro. -m4_if([$1], [1.11.3], [], +m4_if([$1], [1.14.1], [], [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl ]) @@ -8820,24 +8813,22 @@ m4_define([_AM_AUTOCONF_VERSION], []) # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. # This function is AC_REQUIREd by AM_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], -[AM_AUTOMAKE_VERSION([1.11.3])dnl +[AM_AUTOMAKE_VERSION([1.14.1])dnl m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) # AM_AUX_DIR_EXPAND -*- Autoconf -*- -# Copyright (C) 2001, 2003, 2005, 2011 Free Software Foundation, Inc. +# Copyright (C) 2001-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 1 - # For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets -# $ac_aux_dir to `$srcdir/foo'. In other projects, it is set to -# `$srcdir', `$srcdir/..', or `$srcdir/../..'. +# $ac_aux_dir to '$srcdir/foo'. In other projects, it is set to +# '$srcdir', '$srcdir/..', or '$srcdir/../..'. # # Of course, Automake must honor this variable whenever it calls a # tool from the auxiliary directory. The problem is that $srcdir (and @@ -8856,7 +8847,7 @@ _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) # # The reason of the latter failure is that $top_srcdir and $ac_aux_dir # are both prefixed by $srcdir. In an in-source build this is usually -# harmless because $srcdir is `.', but things will broke when you +# harmless because $srcdir is '.', but things will broke when you # start a VPATH build or use an absolute $srcdir. # # So we could use something similar to $top_srcdir/$ac_aux_dir/missing, @@ -8882,22 +8873,19 @@ am_aux_dir=`cd $ac_aux_dir && pwd` # AM_CONDITIONAL -*- Autoconf -*- -# Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006, 2008 -# Free Software Foundation, Inc. +# Copyright (C) 1997-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 9 - # AM_CONDITIONAL(NAME, SHELL-CONDITION) # ------------------------------------- # Define a conditional. AC_DEFUN([AM_CONDITIONAL], -[AC_PREREQ(2.52)dnl - ifelse([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], - [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl +[AC_PREREQ([2.52])dnl + m4_if([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], + [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl AC_SUBST([$1_TRUE])dnl AC_SUBST([$1_FALSE])dnl _AM_SUBST_NOTMAKE([$1_TRUE])dnl @@ -8916,16 +8904,14 @@ AC_CONFIG_COMMANDS_PRE( Usually this means the macro was only invoked conditionally.]]) fi])]) -# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009, -# 2010, 2011 Free Software Foundation, Inc. +# Copyright (C) 1999-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 12 -# There are a few dirty hacks below to avoid letting `AC_PROG_CC' be +# There are a few dirty hacks below to avoid letting 'AC_PROG_CC' be # written in clear, in which case automake, when reading aclocal.m4, # will think it sees a *use*, and therefore will trigger all it's # C support machinery. Also note that it means that autoscan, seeing @@ -8935,7 +8921,7 @@ fi])]) # _AM_DEPENDENCIES(NAME) # ---------------------- # See how the compiler implements dependency checking. -# NAME is "CC", "CXX", "GCJ", or "OBJC". +# NAME is "CC", "CXX", "OBJC", "OBJCXX", "UPC", or "GJC". # We try a few techniques and use that to set a single cache variable. # # We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was @@ -8948,12 +8934,13 @@ AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl AC_REQUIRE([AM_MAKE_INCLUDE])dnl AC_REQUIRE([AM_DEP_TRACK])dnl -ifelse([$1], CC, [depcc="$CC" am_compiler_list=], - [$1], CXX, [depcc="$CXX" am_compiler_list=], - [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'], - [$1], UPC, [depcc="$UPC" am_compiler_list=], - [$1], GCJ, [depcc="$GCJ" am_compiler_list='gcc3 gcc'], - [depcc="$$1" am_compiler_list=]) +m4_if([$1], [CC], [depcc="$CC" am_compiler_list=], + [$1], [CXX], [depcc="$CXX" am_compiler_list=], + [$1], [OBJC], [depcc="$OBJC" am_compiler_list='gcc3 gcc'], + [$1], [OBJCXX], [depcc="$OBJCXX" am_compiler_list='gcc3 gcc'], + [$1], [UPC], [depcc="$UPC" am_compiler_list=], + [$1], [GCJ], [depcc="$GCJ" am_compiler_list='gcc3 gcc'], + [depcc="$$1" am_compiler_list=]) AC_CACHE_CHECK([dependency style of $depcc], [am_cv_$1_dependencies_compiler_type], @@ -8961,8 +8948,8 @@ AC_CACHE_CHECK([dependency style of $depcc], # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up - # making a dummy file named `D' -- because `-MD' means `put the output - # in D'. + # making a dummy file named 'D' -- because '-MD' means "put the output + # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're @@ -9002,16 +8989,16 @@ AC_CACHE_CHECK([dependency style of $depcc], : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c - # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with - # Solaris 8's {/usr,}/bin/sh. - touch sub/conftst$i.h + # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with + # Solaris 10 /bin/sh. + echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf - # We check with `-c' and `-o' for the sake of the "dashmstdout" + # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly - # handle `-M -o', and we need to detect this. Also, some Intel - # versions had trouble with output in subdirs + # handle '-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in @@ -9020,8 +9007,8 @@ AC_CACHE_CHECK([dependency style of $depcc], test "$am__universal" = false || continue ;; nosideeffect) - # after this tag, mechanisms are not by side-effect, so they'll - # only be used when explicitly requested + # After this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else @@ -9029,7 +9016,7 @@ AC_CACHE_CHECK([dependency style of $depcc], fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) - # This compiler won't grok `-c -o', but also, the minuso test has + # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} @@ -9077,7 +9064,7 @@ AM_CONDITIONAL([am__fastdep$1], [ # AM_SET_DEPDIR # ------------- # Choose a directory name for dependency files. -# This macro is AC_REQUIREd in _AM_DEPENDENCIES +# This macro is AC_REQUIREd in _AM_DEPENDENCIES. AC_DEFUN([AM_SET_DEPDIR], [AC_REQUIRE([AM_SET_LEADING_DOT])dnl AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl @@ -9087,9 +9074,13 @@ AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl # AM_DEP_TRACK # ------------ AC_DEFUN([AM_DEP_TRACK], -[AC_ARG_ENABLE(dependency-tracking, -[ --disable-dependency-tracking speeds up one-time build - --enable-dependency-tracking do not reject slow dependency extractors]) +[AC_ARG_ENABLE([dependency-tracking], [dnl +AS_HELP_STRING( + [--enable-dependency-tracking], + [do not reject slow dependency extractors]) +AS_HELP_STRING( + [--disable-dependency-tracking], + [speeds up one-time build])]) if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' @@ -9104,20 +9095,18 @@ _AM_SUBST_NOTMAKE([am__nodep])dnl # Generate code to set up dependency tracking. -*- Autoconf -*- -# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2008 -# Free Software Foundation, Inc. +# Copyright (C) 1999-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -#serial 5 # _AM_OUTPUT_DEPENDENCY_COMMANDS # ------------------------------ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], [{ - # Autoconf 2.62 quotes --file arguments for eval, but not when files + # Older Autoconf quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. case $CONFIG_FILES in @@ -9130,7 +9119,7 @@ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. - # We used to match only the files named `Makefile.in', but + # We used to match only the files named 'Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. @@ -9142,21 +9131,19 @@ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], continue fi # Extract the definition of DEPDIR, am__include, and am__quote - # from the Makefile without running `make'. + # from the Makefile without running 'make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` - test -z "am__include" && continue + test -z "$am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` - # When using ansi2knr, U may be empty or an underscore; expand it - U=`sed -n 's/^U = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ - sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`AS_DIRNAME(["$file"])` @@ -9174,7 +9161,7 @@ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], # This macro should only be invoked once -- use via AC_REQUIRE. # # This code is only required when automatic dependency tracking -# is enabled. FIXME. This creates each `.P' file that we will +# is enabled. FIXME. This creates each '.P' file that we will # need in order to bootstrap the dependency handling code. AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], [AC_CONFIG_COMMANDS([depfiles], @@ -9184,18 +9171,21 @@ AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], # Do all the work for Automake. -*- Autoconf -*- -# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, -# 2005, 2006, 2008, 2009 Free Software Foundation, Inc. +# Copyright (C) 1996-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 16 - # This macro actually does too much. Some checks are only needed if # your package does certain things. But this isn't really a big deal. +dnl Redefine AC_PROG_CC to automatically invoke _AM_PROG_CC_C_O. +m4_define([AC_PROG_CC], +m4_defn([AC_PROG_CC]) +[_AM_PROG_CC_C_O +]) + # AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) # AM_INIT_AUTOMAKE([OPTIONS]) # ----------------------------------------------- @@ -9208,7 +9198,7 @@ AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], # arguments mandatory, and then we can depend on a new Autoconf # release and drop the old call support. AC_DEFUN([AM_INIT_AUTOMAKE], -[AC_PREREQ([2.62])dnl +[AC_PREREQ([2.65])dnl dnl Autoconf wants to disallow AM_ names. We explicitly allow dnl the ones we care about. m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl @@ -9237,31 +9227,40 @@ AC_SUBST([CYGPATH_W]) # Define the identity of the package. dnl Distinguish between old-style and new-style calls. m4_ifval([$2], -[m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl +[AC_DIAGNOSE([obsolete], + [$0: two- and three-arguments forms are deprecated.]) +m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl AC_SUBST([PACKAGE], [$1])dnl AC_SUBST([VERSION], [$2])], [_AM_SET_OPTIONS([$1])dnl dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. -m4_if(m4_ifdef([AC_PACKAGE_NAME], 1)m4_ifdef([AC_PACKAGE_VERSION], 1), 11,, +m4_if( + m4_ifdef([AC_PACKAGE_NAME], [ok]):m4_ifdef([AC_PACKAGE_VERSION], [ok]), + [ok:ok],, [m4_fatal([AC_INIT should be called with package and version arguments])])dnl AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl _AM_IF_OPTION([no-define],, -[AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package]) - AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl +[AC_DEFINE_UNQUOTED([PACKAGE], ["$PACKAGE"], [Name of package]) + AC_DEFINE_UNQUOTED([VERSION], ["$VERSION"], [Version number of package])])dnl # Some tools Automake needs. AC_REQUIRE([AM_SANITY_CHECK])dnl AC_REQUIRE([AC_ARG_PROGRAM])dnl -AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version}) -AM_MISSING_PROG(AUTOCONF, autoconf) -AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version}) -AM_MISSING_PROG(AUTOHEADER, autoheader) -AM_MISSING_PROG(MAKEINFO, makeinfo) +AM_MISSING_PROG([ACLOCAL], [aclocal-${am__api_version}]) +AM_MISSING_PROG([AUTOCONF], [autoconf]) +AM_MISSING_PROG([AUTOMAKE], [automake-${am__api_version}]) +AM_MISSING_PROG([AUTOHEADER], [autoheader]) +AM_MISSING_PROG([MAKEINFO], [makeinfo]) AC_REQUIRE([AM_PROG_INSTALL_SH])dnl AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl -AC_REQUIRE([AM_PROG_MKDIR_P])dnl +AC_REQUIRE([AC_PROG_MKDIR_P])dnl +# For better backward compatibility. To be removed once Automake 1.9.x +# dies out for good. For more background, see: +# +# +AC_SUBST([mkdir_p], ['$(MKDIR_P)']) # We need awk for the "check" target. The system "awk" is bad on # some platforms. AC_REQUIRE([AC_PROG_AWK])dnl @@ -9272,34 +9271,78 @@ _AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], [_AM_PROG_TAR([v7])])]) _AM_IF_OPTION([no-dependencies],, [AC_PROVIDE_IFELSE([AC_PROG_CC], - [_AM_DEPENDENCIES(CC)], - [define([AC_PROG_CC], - defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl + [_AM_DEPENDENCIES([CC])], + [m4_define([AC_PROG_CC], + m4_defn([AC_PROG_CC])[_AM_DEPENDENCIES([CC])])])dnl AC_PROVIDE_IFELSE([AC_PROG_CXX], - [_AM_DEPENDENCIES(CXX)], - [define([AC_PROG_CXX], - defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl + [_AM_DEPENDENCIES([CXX])], + [m4_define([AC_PROG_CXX], + m4_defn([AC_PROG_CXX])[_AM_DEPENDENCIES([CXX])])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJC], - [_AM_DEPENDENCIES(OBJC)], - [define([AC_PROG_OBJC], - defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl + [_AM_DEPENDENCIES([OBJC])], + [m4_define([AC_PROG_OBJC], + m4_defn([AC_PROG_OBJC])[_AM_DEPENDENCIES([OBJC])])])dnl +AC_PROVIDE_IFELSE([AC_PROG_OBJCXX], + [_AM_DEPENDENCIES([OBJCXX])], + [m4_define([AC_PROG_OBJCXX], + m4_defn([AC_PROG_OBJCXX])[_AM_DEPENDENCIES([OBJCXX])])])dnl ]) -_AM_IF_OPTION([silent-rules], [AC_REQUIRE([AM_SILENT_RULES])])dnl -dnl The `parallel-tests' driver may need to know about EXEEXT, so add the -dnl `am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This macro -dnl is hooked onto _AC_COMPILER_EXEEXT early, see below. +AC_REQUIRE([AM_SILENT_RULES])dnl +dnl The testsuite driver may need to know about EXEEXT, so add the +dnl 'am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This +dnl macro is hooked onto _AC_COMPILER_EXEEXT early, see below. AC_CONFIG_COMMANDS_PRE(dnl [m4_provide_if([_AM_COMPILER_EXEEXT], [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl -]) -dnl Hook into `_AC_COMPILER_EXEEXT' early to learn its expansion. Do not +# POSIX will say in a future version that running "rm -f" with no argument +# is OK; and we want to be able to make that assumption in our Makefile +# recipes. So use an aggressive probe to check that the usage we want is +# actually supported "in the wild" to an acceptable degree. +# See automake bug#10828. +# To make any issue more visible, cause the running configure to be aborted +# by default if the 'rm' program in use doesn't match our expectations; the +# user can still override this though. +if rm -f && rm -fr && rm -rf; then : OK; else + cat >&2 <<'END' +Oops! + +Your 'rm' program seems unable to run without file operands specified +on the command line, even when the '-f' option is present. This is contrary +to the behaviour of most rm programs out there, and not conforming with +the upcoming POSIX standard: + +Please tell bug-automake@gnu.org about your system, including the value +of your $PATH and any error possibly output before this message. This +can help us improve future automake versions. + +END + if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then + echo 'Configuration will proceed anyway, since you have set the' >&2 + echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2 + echo >&2 + else + cat >&2 <<'END' +Aborting the configuration process, to ensure you take notice of the issue. + +You can download and install GNU coreutils to get an 'rm' implementation +that behaves properly: . + +If you want to complete the configuration process using your problematic +'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM +to "yes", and re-run configure. + +END + AC_MSG_ERROR([Your 'rm' program is bad, sorry.]) + fi +fi]) + +dnl Hook into '_AC_COMPILER_EXEEXT' early to learn its expansion. Do not dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further dnl mangled by Autoconf and run in a shell conditional statement. m4_define([_AC_COMPILER_EXEEXT], m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])]) - # When config.status generates a header, we must update the stamp-h file. # This file resides in the same directory as the config header # that is generated. The stamp files are numbered to have different names. @@ -9321,15 +9364,12 @@ for _am_header in $config_headers :; do done echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) -# Copyright (C) 2001, 2003, 2005, 2008, 2011 Free Software Foundation, -# Inc. +# Copyright (C) 2001-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 1 - # AM_PROG_INSTALL_SH # ------------------ # Define $install_sh. @@ -9343,16 +9383,14 @@ if test x"${install_sh}" != xset; then install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi -AC_SUBST(install_sh)]) +AC_SUBST([install_sh])]) -# Copyright (C) 2003, 2005 Free Software Foundation, Inc. +# Copyright (C) 2003-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 2 - # Check whether the underlying file-system supports filenames # with a leading dot. For instance MS-DOS doesn't. AC_DEFUN([AM_SET_LEADING_DOT], @@ -9368,14 +9406,12 @@ AC_SUBST([am__leading_dot])]) # Check to see how 'make' treats includes. -*- Autoconf -*- -# Copyright (C) 2001, 2002, 2003, 2005, 2009 Free Software Foundation, Inc. +# Copyright (C) 2001-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 4 - # AM_MAKE_INCLUDE() # ----------------- # Check to see how make treats includes. @@ -9393,7 +9429,7 @@ am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf -# Ignore all kinds of additional output from `make'. +# Ignore all kinds of additional output from 'make'. case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=include @@ -9420,15 +9456,12 @@ rm -f confinc confmf # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- -# Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005, 2008 -# Free Software Foundation, Inc. +# Copyright (C) 1997-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 6 - # AM_MISSING_PROG(NAME, PROGRAM) # ------------------------------ AC_DEFUN([AM_MISSING_PROG], @@ -9436,11 +9469,10 @@ AC_DEFUN([AM_MISSING_PROG], $1=${$1-"${am_missing_run}$2"} AC_SUBST($1)]) - # AM_MISSING_HAS_RUN # ------------------ -# Define MISSING if not defined so far and test if it supports --run. -# If it does, set am_missing_run to use it, otherwise, to nothing. +# Define MISSING if not defined so far and test if it is modern enough. +# If it is, set am_missing_run to use it, otherwise, to nothing. AC_DEFUN([AM_MISSING_HAS_RUN], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([missing])dnl @@ -9453,54 +9485,22 @@ if test x"${MISSING+set}" != xset; then esac fi # Use eval to expand $SHELL -if eval "$MISSING --run true"; then - am_missing_run="$MISSING --run " +if eval "$MISSING --is-lightweight"; then + am_missing_run="$MISSING " else am_missing_run= - AC_MSG_WARN([`missing' script is too old or missing]) + AC_MSG_WARN(['missing' script is too old or missing]) fi ]) -# Copyright (C) 2003, 2004, 2005, 2006, 2011 Free Software Foundation, -# Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# serial 1 - -# AM_PROG_MKDIR_P -# --------------- -# Check for `mkdir -p'. -AC_DEFUN([AM_PROG_MKDIR_P], -[AC_PREREQ([2.60])dnl -AC_REQUIRE([AC_PROG_MKDIR_P])dnl -dnl Automake 1.8 to 1.9.6 used to define mkdir_p. We now use MKDIR_P, -dnl while keeping a definition of mkdir_p for backward compatibility. -dnl @MKDIR_P@ is magic: AC_OUTPUT adjusts its value for each Makefile. -dnl However we cannot define mkdir_p as $(MKDIR_P) for the sake of -dnl Makefile.ins that do not define MKDIR_P, so we do our own -dnl adjustment using top_builddir (which is defined more often than -dnl MKDIR_P). -AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl -case $mkdir_p in - [[\\/$]]* | ?:[[\\/]]*) ;; - */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; -esac -]) - # Helper functions for option handling. -*- Autoconf -*- -# Copyright (C) 2001, 2002, 2003, 2005, 2008, 2010 Free Software -# Foundation, Inc. +# Copyright (C) 2001-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 5 - # _AM_MANGLE_OPTION(NAME) # ----------------------- AC_DEFUN([_AM_MANGLE_OPTION], @@ -9510,7 +9510,7 @@ AC_DEFUN([_AM_MANGLE_OPTION], # -------------------- # Set option NAME. Presently that only means defining a flag for this option. AC_DEFUN([_AM_SET_OPTION], -[m4_define(_AM_MANGLE_OPTION([$1]), 1)]) +[m4_define(_AM_MANGLE_OPTION([$1]), [1])]) # _AM_SET_OPTIONS(OPTIONS) # ------------------------ @@ -9524,24 +9524,82 @@ AC_DEFUN([_AM_SET_OPTIONS], AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) -# Check to make sure that the build environment is sane. -*- Autoconf -*- +# Copyright (C) 1999-2013 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# _AM_PROG_CC_C_O +# --------------- +# Like AC_PROG_CC_C_O, but changed for automake. We rewrite AC_PROG_CC +# to automatically call this. +AC_DEFUN([_AM_PROG_CC_C_O], +[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +AC_REQUIRE_AUX_FILE([compile])dnl +AC_LANG_PUSH([C])dnl +AC_CACHE_CHECK( + [whether $CC understands -c and -o together], + [am_cv_prog_cc_c_o], + [AC_LANG_CONFTEST([AC_LANG_PROGRAM([])]) + # Make sure it works both with $CC and with simple cc. + # Following AC_PROG_CC_C_O, we do the test twice because some + # compilers refuse to overwrite an existing .o file with -o, + # though they will create one. + am_cv_prog_cc_c_o=yes + for am_i in 1 2; do + if AM_RUN_LOG([$CC -c conftest.$ac_ext -o conftest2.$ac_objext]) \ + && test -f conftest2.$ac_objext; then + : OK + else + am_cv_prog_cc_c_o=no + break + fi + done + rm -f core conftest* + unset am_i]) +if test "$am_cv_prog_cc_c_o" != yes; then + # Losing compiler, so override with the script. + # FIXME: It is wrong to rewrite CC. + # But if we don't then we get into trouble of one sort or another. + # A longer-term fix would be to have automake use am__CC in this case, + # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" + CC="$am_aux_dir/compile $CC" +fi +AC_LANG_POP([C])]) + +# For backward compatibility. +AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])]) -# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005, 2008 -# Free Software Foundation, Inc. +# Copyright (C) 2001-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 5 +# AM_RUN_LOG(COMMAND) +# ------------------- +# Run COMMAND, save the exit status in ac_status, and log it. +# (This has been adapted from Autoconf's _AC_RUN_LOG macro.) +AC_DEFUN([AM_RUN_LOG], +[{ echo "$as_me:$LINENO: $1" >&AS_MESSAGE_LOG_FD + ($1) >&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD + (exit $ac_status); }]) + +# Check to make sure that the build environment is sane. -*- Autoconf -*- + +# Copyright (C) 1996-2013 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. # AM_SANITY_CHECK # --------------- AC_DEFUN([AM_SANITY_CHECK], [AC_MSG_CHECKING([whether build environment is sane]) -# Just in case -sleep 1 -echo timestamp > conftest.file # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' @@ -9552,32 +9610,40 @@ case `pwd` in esac case $srcdir in *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) - AC_MSG_ERROR([unsafe srcdir value: `$srcdir']);; + AC_MSG_ERROR([unsafe srcdir value: '$srcdir']);; esac -# Do `set' in a subshell so we don't clobber the current shell's +# Do 'set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( - set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` - if test "$[*]" = "X"; then - # -L didn't work. - set X `ls -t "$srcdir/configure" conftest.file` - fi - rm -f conftest.file - if test "$[*]" != "X $srcdir/configure conftest.file" \ - && test "$[*]" != "X conftest.file $srcdir/configure"; then - - # If neither matched, then we have a broken ls. This can happen - # if, for instance, CONFIG_SHELL is bash and it inherits a - # broken ls alias from the environment. This has actually - # happened. Such a system could not be considered "sane". - AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken -alias in your environment]) - fi - + am_has_slept=no + for am_try in 1 2; do + echo "timestamp, slept: $am_has_slept" > conftest.file + set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` + if test "$[*]" = "X"; then + # -L didn't work. + set X `ls -t "$srcdir/configure" conftest.file` + fi + if test "$[*]" != "X $srcdir/configure conftest.file" \ + && test "$[*]" != "X conftest.file $srcdir/configure"; then + + # If neither matched, then we have a broken ls. This can happen + # if, for instance, CONFIG_SHELL is bash and it inherits a + # broken ls alias from the environment. This has actually + # happened. Such a system could not be considered "sane". + AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken + alias in your environment]) + fi + if test "$[2]" = conftest.file || test $am_try -eq 2; then + break + fi + # Just in case. + sleep 1 + am_has_slept=yes + done test "$[2]" = conftest.file ) then @@ -9587,46 +9653,118 @@ else AC_MSG_ERROR([newly created file is older than distributed files! Check your system clock]) fi -AC_MSG_RESULT(yes)]) +AC_MSG_RESULT([yes]) +# If we didn't sleep, we still need to ensure time stamps of config.status and +# generated files are strictly newer. +am_sleep_pid= +if grep 'slept: no' conftest.file >/dev/null 2>&1; then + ( sleep 1 ) & + am_sleep_pid=$! +fi +AC_CONFIG_COMMANDS_PRE( + [AC_MSG_CHECKING([that generated files are newer than configure]) + if test -n "$am_sleep_pid"; then + # Hide warnings about reused PIDs. + wait $am_sleep_pid 2>/dev/null + fi + AC_MSG_RESULT([done])]) +rm -f conftest.file +]) -# Copyright (C) 2001, 2003, 2005, 2011 Free Software Foundation, Inc. +# Copyright (C) 2009-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 1 +# AM_SILENT_RULES([DEFAULT]) +# -------------------------- +# Enable less verbose build rules; with the default set to DEFAULT +# ("yes" being less verbose, "no" or empty being verbose). +AC_DEFUN([AM_SILENT_RULES], +[AC_ARG_ENABLE([silent-rules], [dnl +AS_HELP_STRING( + [--enable-silent-rules], + [less verbose build output (undo: "make V=1")]) +AS_HELP_STRING( + [--disable-silent-rules], + [verbose build output (undo: "make V=0")])dnl +]) +case $enable_silent_rules in @%:@ ((( + yes) AM_DEFAULT_VERBOSITY=0;; + no) AM_DEFAULT_VERBOSITY=1;; + *) AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1]);; +esac +dnl +dnl A few 'make' implementations (e.g., NonStop OS and NextStep) +dnl do not support nested variable expansions. +dnl See automake bug#9928 and bug#10237. +am_make=${MAKE-make} +AC_CACHE_CHECK([whether $am_make supports nested variables], + [am_cv_make_support_nested_variables], + [if AS_ECHO([['TRUE=$(BAR$(V)) +BAR0=false +BAR1=true +V=1 +am__doit: + @$(TRUE) +.PHONY: am__doit']]) | $am_make -f - >/dev/null 2>&1; then + am_cv_make_support_nested_variables=yes +else + am_cv_make_support_nested_variables=no +fi]) +if test $am_cv_make_support_nested_variables = yes; then + dnl Using '$V' instead of '$(V)' breaks IRIX make. + AM_V='$(V)' + AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' +else + AM_V=$AM_DEFAULT_VERBOSITY + AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY +fi +AC_SUBST([AM_V])dnl +AM_SUBST_NOTMAKE([AM_V])dnl +AC_SUBST([AM_DEFAULT_V])dnl +AM_SUBST_NOTMAKE([AM_DEFAULT_V])dnl +AC_SUBST([AM_DEFAULT_VERBOSITY])dnl +AM_BACKSLASH='\' +AC_SUBST([AM_BACKSLASH])dnl +_AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl +]) + +# Copyright (C) 2001-2013 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. # AM_PROG_INSTALL_STRIP # --------------------- -# One issue with vendor `install' (even GNU) is that you can't +# One issue with vendor 'install' (even GNU) is that you can't # specify the program used to strip binaries. This is especially # annoying in cross-compiling environments, where the build's strip # is unlikely to handle the host's binaries. # Fortunately install-sh will honor a STRIPPROG variable, so we -# always use install-sh in `make install-strip', and initialize +# always use install-sh in "make install-strip", and initialize # STRIPPROG with the value of the STRIP variable (set by the user). AC_DEFUN([AM_PROG_INSTALL_STRIP], [AC_REQUIRE([AM_PROG_INSTALL_SH])dnl -# Installed binaries are usually stripped using `strip' when the user -# run `make install-strip'. However `strip' might not be the right +# Installed binaries are usually stripped using 'strip' when the user +# run "make install-strip". However 'strip' might not be the right # tool to use in cross-compilation environments, therefore Automake -# will honor the `STRIP' environment variable to overrule this program. -dnl Don't test for $cross_compiling = yes, because it might be `maybe'. +# will honor the 'STRIP' environment variable to overrule this program. +dnl Don't test for $cross_compiling = yes, because it might be 'maybe'. if test "$cross_compiling" != no; then AC_CHECK_TOOL([STRIP], [strip], :) fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) -# Copyright (C) 2006, 2008, 2010 Free Software Foundation, Inc. +# Copyright (C) 2006-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 3 - # _AM_SUBST_NOTMAKE(VARIABLE) # --------------------------- # Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. @@ -9640,18 +9778,16 @@ AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) # Check how to create a tarball. -*- Autoconf -*- -# Copyright (C) 2004, 2005, 2012 Free Software Foundation, Inc. +# Copyright (C) 2004-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 2 - # _AM_PROG_TAR(FORMAT) # -------------------- # Check how to create a tarball in format FORMAT. -# FORMAT should be one of `v7', `ustar', or `pax'. +# FORMAT should be one of 'v7', 'ustar', or 'pax'. # # Substitute a variable $(am__tar) that is a command # writing to stdout a FORMAT-tarball containing the directory @@ -9661,76 +9797,114 @@ AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) # Substitute a variable $(am__untar) that extract such # a tarball read from stdin. # $(am__untar) < result.tar +# AC_DEFUN([_AM_PROG_TAR], [# Always define AMTAR for backward compatibility. Yes, it's still used # in the wild :-( We should find a proper way to deprecate it ... AC_SUBST([AMTAR], ['$${TAR-tar}']) -m4_if([$1], [v7], - [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'], - [m4_case([$1], [ustar],, [pax],, - [m4_fatal([Unknown tar format])]) -AC_MSG_CHECKING([how to create a $1 tar archive]) -# Loop over all known methods to create a tar archive until one works. + +# We'll loop over all known methods to create a tar archive until one works. _am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' -_am_tools=${am_cv_prog_tar_$1-$_am_tools} -# Do not fold the above two line into one, because Tru64 sh and -# Solaris sh will not grok spaces in the rhs of `-'. -for _am_tool in $_am_tools -do - case $_am_tool in - gnutar) - for _am_tar in tar gnutar gtar; - do - AM_RUN_LOG([$_am_tar --version]) && break - done - am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' - am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' - am__untar="$_am_tar -xf -" - ;; - plaintar) - # Must skip GNU tar: if it does not support --format= it doesn't create - # ustar tarball either. - (tar --version) >/dev/null 2>&1 && continue - am__tar='tar chf - "$$tardir"' - am__tar_='tar chf - "$tardir"' - am__untar='tar xf -' - ;; - pax) - am__tar='pax -L -x $1 -w "$$tardir"' - am__tar_='pax -L -x $1 -w "$tardir"' - am__untar='pax -r' - ;; - cpio) - am__tar='find "$$tardir" -print | cpio -o -H $1 -L' - am__tar_='find "$tardir" -print | cpio -o -H $1 -L' - am__untar='cpio -i -H $1 -d' - ;; - none) - am__tar=false - am__tar_=false - am__untar=false - ;; - esac - # If the value was cached, stop now. We just wanted to have am__tar - # and am__untar set. - test -n "${am_cv_prog_tar_$1}" && break +m4_if([$1], [v7], + [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'], + + [m4_case([$1], + [ustar], + [# The POSIX 1988 'ustar' format is defined with fixed-size fields. + # There is notably a 21 bits limit for the UID and the GID. In fact, + # the 'pax' utility can hang on bigger UID/GID (see automake bug#8343 + # and bug#13588). + am_max_uid=2097151 # 2^21 - 1 + am_max_gid=$am_max_uid + # The $UID and $GID variables are not portable, so we need to resort + # to the POSIX-mandated id(1) utility. Errors in the 'id' calls + # below are definitely unexpected, so allow the users to see them + # (that is, avoid stderr redirection). + am_uid=`id -u || echo unknown` + am_gid=`id -g || echo unknown` + AC_MSG_CHECKING([whether UID '$am_uid' is supported by ustar format]) + if test $am_uid -le $am_max_uid; then + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + _am_tools=none + fi + AC_MSG_CHECKING([whether GID '$am_gid' is supported by ustar format]) + if test $am_gid -le $am_max_gid; then + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + _am_tools=none + fi], - # tar/untar a dummy directory, and stop if the command works - rm -rf conftest.dir - mkdir conftest.dir - echo GrepMe > conftest.dir/file - AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) + [pax], + [], + + [m4_fatal([Unknown tar format])]) + + AC_MSG_CHECKING([how to create a $1 tar archive]) + + # Go ahead even if we have the value already cached. We do so because we + # need to set the values for the 'am__tar' and 'am__untar' variables. + _am_tools=${am_cv_prog_tar_$1-$_am_tools} + + for _am_tool in $_am_tools; do + case $_am_tool in + gnutar) + for _am_tar in tar gnutar gtar; do + AM_RUN_LOG([$_am_tar --version]) && break + done + am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' + am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' + am__untar="$_am_tar -xf -" + ;; + plaintar) + # Must skip GNU tar: if it does not support --format= it doesn't create + # ustar tarball either. + (tar --version) >/dev/null 2>&1 && continue + am__tar='tar chf - "$$tardir"' + am__tar_='tar chf - "$tardir"' + am__untar='tar xf -' + ;; + pax) + am__tar='pax -L -x $1 -w "$$tardir"' + am__tar_='pax -L -x $1 -w "$tardir"' + am__untar='pax -r' + ;; + cpio) + am__tar='find "$$tardir" -print | cpio -o -H $1 -L' + am__tar_='find "$tardir" -print | cpio -o -H $1 -L' + am__untar='cpio -i -H $1 -d' + ;; + none) + am__tar=false + am__tar_=false + am__untar=false + ;; + esac + + # If the value was cached, stop now. We just wanted to have am__tar + # and am__untar set. + test -n "${am_cv_prog_tar_$1}" && break + + # tar/untar a dummy directory, and stop if the command works. + rm -rf conftest.dir + mkdir conftest.dir + echo GrepMe > conftest.dir/file + AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) + rm -rf conftest.dir + if test -s conftest.tar; then + AM_RUN_LOG([$am__untar /dev/null 2>&1 && break + fi + done rm -rf conftest.dir - if test -s conftest.tar; then - AM_RUN_LOG([$am__untar /dev/null 2>&1 && break - fi -done -rm -rf conftest.dir -AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) -AC_MSG_RESULT([$am_cv_prog_tar_$1])]) + AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) + AC_MSG_RESULT([$am_cv_prog_tar_$1])]) + AC_SUBST([am__tar]) AC_SUBST([am__untar]) ]) # _AM_PROG_TAR diff --git a/deps/snappy/snappy-1.1.4/autogen.sh b/deps/snappy/snappy-1.1.4/autogen.sh new file mode 100755 index 00000000..9cb502ef --- /dev/null +++ b/deps/snappy/snappy-1.1.4/autogen.sh @@ -0,0 +1,12 @@ +#! /bin/sh -e +rm -rf autom4te.cache +aclocal -I m4 +autoheader +if glibtoolize --version >/dev/null 2>/dev/null; then + LIBTOOLIZE=${LIBTOOLIZE:-glibtoolize} +else + LIBTOOLIZE=${LIBTOOLIZE:-libtoolize} +fi +$LIBTOOLIZE --copy +automake --add-missing --copy +autoconf diff --git a/deps/snappy/snappy-1.1.4/compile b/deps/snappy/snappy-1.1.4/compile new file mode 100755 index 00000000..531136b0 --- /dev/null +++ b/deps/snappy/snappy-1.1.4/compile @@ -0,0 +1,347 @@ +#! /bin/sh +# Wrapper for compilers which do not understand '-c -o'. + +scriptversion=2012-10-14.11; # UTC + +# Copyright (C) 1999-2013 Free Software Foundation, Inc. +# Written by Tom Tromey . +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# This file is maintained in Automake, please report +# bugs to or send patches to +# . + +nl=' +' + +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent tools from complaining about whitespace usage. +IFS=" "" $nl" + +file_conv= + +# func_file_conv build_file lazy +# Convert a $build file to $host form and store it in $file +# Currently only supports Windows hosts. If the determined conversion +# type is listed in (the comma separated) LAZY, no conversion will +# take place. +func_file_conv () +{ + file=$1 + case $file in + / | /[!/]*) # absolute file, and not a UNC file + if test -z "$file_conv"; then + # lazily determine how to convert abs files + case `uname -s` in + MINGW*) + file_conv=mingw + ;; + CYGWIN*) + file_conv=cygwin + ;; + *) + file_conv=wine + ;; + esac + fi + case $file_conv/,$2, in + *,$file_conv,*) + ;; + mingw/*) + file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'` + ;; + cygwin/*) + file=`cygpath -m "$file" || echo "$file"` + ;; + wine/*) + file=`winepath -w "$file" || echo "$file"` + ;; + esac + ;; + esac +} + +# func_cl_dashL linkdir +# Make cl look for libraries in LINKDIR +func_cl_dashL () +{ + func_file_conv "$1" + if test -z "$lib_path"; then + lib_path=$file + else + lib_path="$lib_path;$file" + fi + linker_opts="$linker_opts -LIBPATH:$file" +} + +# func_cl_dashl library +# Do a library search-path lookup for cl +func_cl_dashl () +{ + lib=$1 + found=no + save_IFS=$IFS + IFS=';' + for dir in $lib_path $LIB + do + IFS=$save_IFS + if $shared && test -f "$dir/$lib.dll.lib"; then + found=yes + lib=$dir/$lib.dll.lib + break + fi + if test -f "$dir/$lib.lib"; then + found=yes + lib=$dir/$lib.lib + break + fi + if test -f "$dir/lib$lib.a"; then + found=yes + lib=$dir/lib$lib.a + break + fi + done + IFS=$save_IFS + + if test "$found" != yes; then + lib=$lib.lib + fi +} + +# func_cl_wrapper cl arg... +# Adjust compile command to suit cl +func_cl_wrapper () +{ + # Assume a capable shell + lib_path= + shared=: + linker_opts= + for arg + do + if test -n "$eat"; then + eat= + else + case $1 in + -o) + # configure might choose to run compile as 'compile cc -o foo foo.c'. + eat=1 + case $2 in + *.o | *.[oO][bB][jJ]) + func_file_conv "$2" + set x "$@" -Fo"$file" + shift + ;; + *) + func_file_conv "$2" + set x "$@" -Fe"$file" + shift + ;; + esac + ;; + -I) + eat=1 + func_file_conv "$2" mingw + set x "$@" -I"$file" + shift + ;; + -I*) + func_file_conv "${1#-I}" mingw + set x "$@" -I"$file" + shift + ;; + -l) + eat=1 + func_cl_dashl "$2" + set x "$@" "$lib" + shift + ;; + -l*) + func_cl_dashl "${1#-l}" + set x "$@" "$lib" + shift + ;; + -L) + eat=1 + func_cl_dashL "$2" + ;; + -L*) + func_cl_dashL "${1#-L}" + ;; + -static) + shared=false + ;; + -Wl,*) + arg=${1#-Wl,} + save_ifs="$IFS"; IFS=',' + for flag in $arg; do + IFS="$save_ifs" + linker_opts="$linker_opts $flag" + done + IFS="$save_ifs" + ;; + -Xlinker) + eat=1 + linker_opts="$linker_opts $2" + ;; + -*) + set x "$@" "$1" + shift + ;; + *.cc | *.CC | *.cxx | *.CXX | *.[cC]++) + func_file_conv "$1" + set x "$@" -Tp"$file" + shift + ;; + *.c | *.cpp | *.CPP | *.lib | *.LIB | *.Lib | *.OBJ | *.obj | *.[oO]) + func_file_conv "$1" mingw + set x "$@" "$file" + shift + ;; + *) + set x "$@" "$1" + shift + ;; + esac + fi + shift + done + if test -n "$linker_opts"; then + linker_opts="-link$linker_opts" + fi + exec "$@" $linker_opts + exit 1 +} + +eat= + +case $1 in + '') + echo "$0: No command. Try '$0 --help' for more information." 1>&2 + exit 1; + ;; + -h | --h*) + cat <<\EOF +Usage: compile [--help] [--version] PROGRAM [ARGS] + +Wrapper for compilers which do not understand '-c -o'. +Remove '-o dest.o' from ARGS, run PROGRAM with the remaining +arguments, and rename the output as expected. + +If you are trying to build a whole package this is not the +right script to run: please start by reading the file 'INSTALL'. + +Report bugs to . +EOF + exit $? + ;; + -v | --v*) + echo "compile $scriptversion" + exit $? + ;; + cl | *[/\\]cl | cl.exe | *[/\\]cl.exe ) + func_cl_wrapper "$@" # Doesn't return... + ;; +esac + +ofile= +cfile= + +for arg +do + if test -n "$eat"; then + eat= + else + case $1 in + -o) + # configure might choose to run compile as 'compile cc -o foo foo.c'. + # So we strip '-o arg' only if arg is an object. + eat=1 + case $2 in + *.o | *.obj) + ofile=$2 + ;; + *) + set x "$@" -o "$2" + shift + ;; + esac + ;; + *.c) + cfile=$1 + set x "$@" "$1" + shift + ;; + *) + set x "$@" "$1" + shift + ;; + esac + fi + shift +done + +if test -z "$ofile" || test -z "$cfile"; then + # If no '-o' option was seen then we might have been invoked from a + # pattern rule where we don't need one. That is ok -- this is a + # normal compilation that the losing compiler can handle. If no + # '.c' file was seen then we are probably linking. That is also + # ok. + exec "$@" +fi + +# Name of file we expect compiler to create. +cofile=`echo "$cfile" | sed 's|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/'` + +# Create the lock directory. +# Note: use '[/\\:.-]' here to ensure that we don't use the same name +# that we are using for the .o file. Also, base the name on the expected +# object file name, since that is what matters with a parallel build. +lockdir=`echo "$cofile" | sed -e 's|[/\\:.-]|_|g'`.d +while true; do + if mkdir "$lockdir" >/dev/null 2>&1; then + break + fi + sleep 1 +done +# FIXME: race condition here if user kills between mkdir and trap. +trap "rmdir '$lockdir'; exit 1" 1 2 15 + +# Run the compile. +"$@" +ret=$? + +if test -f "$cofile"; then + test "$cofile" = "$ofile" || mv "$cofile" "$ofile" +elif test -f "${cofile}bj"; then + test "${cofile}bj" = "$ofile" || mv "${cofile}bj" "$ofile" +fi + +rmdir "$lockdir" +exit $ret + +# Local Variables: +# mode: shell-script +# sh-indentation: 2 +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-time-zone: "UTC" +# time-stamp-end: "; # UTC" +# End: diff --git a/deps/snappy/snappy-1.1.1/config.guess b/deps/snappy/snappy-1.1.4/config.guess similarity index 92% rename from deps/snappy/snappy-1.1.1/config.guess rename to deps/snappy/snappy-1.1.4/config.guess index d622a44e..b79252d6 100755 --- a/deps/snappy/snappy-1.1.1/config.guess +++ b/deps/snappy/snappy-1.1.4/config.guess @@ -1,14 +1,12 @@ #! /bin/sh # Attempt to guess a canonical system name. -# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, -# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, -# 2011, 2012 Free Software Foundation, Inc. +# Copyright 1992-2013 Free Software Foundation, Inc. -timestamp='2012-02-10' +timestamp='2013-06-10' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or +# the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but @@ -22,19 +20,17 @@ timestamp='2012-02-10' # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under -# the same distribution terms that you use for the rest of that program. - - -# Originally written by Per Bothner. Please send patches (context -# diff format) to and include a ChangeLog -# entry. +# the same distribution terms that you use for the rest of that +# program. This Exception is an additional permission under section 7 +# of the GNU General Public License, version 3 ("GPLv3"). # -# This script attempts to guess a canonical system name similar to -# config.sub. If it succeeds, it prints the system name on stdout, and -# exits with 0. Otherwise, it exits with 1. +# Originally written by Per Bothner. # # You can get the latest version of this script from: # http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD +# +# Please send patches with a ChangeLog entry to config-patches@gnu.org. + me=`echo "$0" | sed -e 's,.*/,,'` @@ -54,9 +50,7 @@ version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. -Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, -2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 -Free Software Foundation, Inc. +Copyright 1992-2013 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." @@ -138,6 +132,27 @@ UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown +case "${UNAME_SYSTEM}" in +Linux|GNU|GNU/*) + # If the system lacks a compiler, then just pick glibc. + # We could probably try harder. + LIBC=gnu + + eval $set_cc_for_build + cat <<-EOF > $dummy.c + #include + #if defined(__UCLIBC__) + LIBC=uclibc + #elif defined(__dietlibc__) + LIBC=dietlibc + #else + LIBC=gnu + #endif + EOF + eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'` + ;; +esac + # Note: order is significant - the case branches are not exclusive. case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in @@ -200,6 +215,10 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. echo "${machine}-${os}${release}" exit ;; + *:Bitrig:*:*) + UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'` + echo ${UNAME_MACHINE_ARCH}-unknown-bitrig${UNAME_RELEASE} + exit ;; *:OpenBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} @@ -302,7 +321,7 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) echo arm-acorn-riscix${UNAME_RELEASE} exit ;; - arm:riscos:*:*|arm:RISCOS:*:*) + arm*:riscos:*:*|arm*:RISCOS:*:*) echo arm-unknown-riscos exit ;; SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) @@ -801,6 +820,9 @@ EOF i*:CYGWIN*:*) echo ${UNAME_MACHINE}-pc-cygwin exit ;; + *:MINGW64*:*) + echo ${UNAME_MACHINE}-pc-mingw64 + exit ;; *:MINGW*:*) echo ${UNAME_MACHINE}-pc-mingw32 exit ;; @@ -852,21 +874,21 @@ EOF exit ;; *:GNU:*:*) # the GNU system - echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` + echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-${LIBC}`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` exit ;; *:GNU/*:*:*) # other systems with GNU libc and userland - echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu + echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-${LIBC} exit ;; i*86:Minix:*:*) echo ${UNAME_MACHINE}-pc-minix exit ;; aarch64:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; aarch64_be:Linux:*:*) UNAME_MACHINE=aarch64_be - echo ${UNAME_MACHINE}-unknown-linux-gnu + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; alpha:Linux:*:*) case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in @@ -879,59 +901,54 @@ EOF EV68*) UNAME_MACHINE=alphaev68 ;; esac objdump --private-headers /bin/sh | grep -q ld.so.1 - if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi - echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} + if test "$?" = 0 ; then LIBC="gnulibc1" ; fi + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + arc:Linux:*:* | arceb:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; arm*:Linux:*:*) eval $set_cc_for_build if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_EABI__ then - echo ${UNAME_MACHINE}-unknown-linux-gnu + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} else if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_PCS_VFP then - echo ${UNAME_MACHINE}-unknown-linux-gnueabi + echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabi else - echo ${UNAME_MACHINE}-unknown-linux-gnueabihf + echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabihf fi fi exit ;; avr32*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; cris:Linux:*:*) - echo ${UNAME_MACHINE}-axis-linux-gnu + echo ${UNAME_MACHINE}-axis-linux-${LIBC} exit ;; crisv32:Linux:*:*) - echo ${UNAME_MACHINE}-axis-linux-gnu + echo ${UNAME_MACHINE}-axis-linux-${LIBC} exit ;; frv:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; hexagon:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; i*86:Linux:*:*) - LIBC=gnu - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - #ifdef __dietlibc__ - LIBC=dietlibc - #endif -EOF - eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'` - echo "${UNAME_MACHINE}-pc-linux-${LIBC}" + echo ${UNAME_MACHINE}-pc-linux-${LIBC} exit ;; ia64:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; m32r*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; m68*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; mips:Linux:*:* | mips64:Linux:*:*) eval $set_cc_for_build @@ -950,54 +967,63 @@ EOF #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'` - test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } + test x"${CPU}" != x && { echo "${CPU}-unknown-linux-${LIBC}"; exit; } ;; + or1k:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; or32:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; padre:Linux:*:*) - echo sparc-unknown-linux-gnu + echo sparc-unknown-linux-${LIBC} exit ;; parisc64:Linux:*:* | hppa64:Linux:*:*) - echo hppa64-unknown-linux-gnu + echo hppa64-unknown-linux-${LIBC} exit ;; parisc:Linux:*:* | hppa:Linux:*:*) # Look for CPU level case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in - PA7*) echo hppa1.1-unknown-linux-gnu ;; - PA8*) echo hppa2.0-unknown-linux-gnu ;; - *) echo hppa-unknown-linux-gnu ;; + PA7*) echo hppa1.1-unknown-linux-${LIBC} ;; + PA8*) echo hppa2.0-unknown-linux-${LIBC} ;; + *) echo hppa-unknown-linux-${LIBC} ;; esac exit ;; ppc64:Linux:*:*) - echo powerpc64-unknown-linux-gnu + echo powerpc64-unknown-linux-${LIBC} exit ;; ppc:Linux:*:*) - echo powerpc-unknown-linux-gnu + echo powerpc-unknown-linux-${LIBC} + exit ;; + ppc64le:Linux:*:*) + echo powerpc64le-unknown-linux-${LIBC} + exit ;; + ppcle:Linux:*:*) + echo powerpcle-unknown-linux-${LIBC} exit ;; s390:Linux:*:* | s390x:Linux:*:*) - echo ${UNAME_MACHINE}-ibm-linux + echo ${UNAME_MACHINE}-ibm-linux-${LIBC} exit ;; sh64*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; sh*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; sparc:Linux:*:* | sparc64:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; tile*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; vax:Linux:*:*) - echo ${UNAME_MACHINE}-dec-linux-gnu + echo ${UNAME_MACHINE}-dec-linux-${LIBC} exit ;; x86_64:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; xtensa*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; i*86:DYNIX/ptx:4*:*) # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. @@ -1201,6 +1227,9 @@ EOF BePC:Haiku:*:*) # Haiku running on Intel PC compatible. echo i586-pc-haiku exit ;; + x86_64:Haiku:*:*) + echo x86_64-unknown-haiku + exit ;; SX-4:SUPER-UX:*:*) echo sx4-nec-superux${UNAME_RELEASE} exit ;; @@ -1227,19 +1256,21 @@ EOF exit ;; *:Darwin:*:*) UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown - case $UNAME_PROCESSOR in - i386) - eval $set_cc_for_build - if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then - if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ - (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ - grep IS_64BIT_ARCH >/dev/null - then - UNAME_PROCESSOR="x86_64" - fi - fi ;; - unknown) UNAME_PROCESSOR=powerpc ;; - esac + eval $set_cc_for_build + if test "$UNAME_PROCESSOR" = unknown ; then + UNAME_PROCESSOR=powerpc + fi + if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then + if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ + (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ + grep IS_64BIT_ARCH >/dev/null + then + case $UNAME_PROCESSOR in + i386) UNAME_PROCESSOR=x86_64 ;; + powerpc) UNAME_PROCESSOR=powerpc64 ;; + esac + fi + fi echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} exit ;; *:procnto*:*:* | *:QNX:[0123456789]*:*) @@ -1256,7 +1287,7 @@ EOF NEO-?:NONSTOP_KERNEL:*:*) echo neo-tandem-nsk${UNAME_RELEASE} exit ;; - NSE-?:NONSTOP_KERNEL:*:*) + NSE-*:NONSTOP_KERNEL:*:*) echo nse-tandem-nsk${UNAME_RELEASE} exit ;; NSR-?:NONSTOP_KERNEL:*:*) @@ -1330,9 +1361,6 @@ EOF exit ;; esac -#echo '(No uname command or uname output not recognized.)' 1>&2 -#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 - eval $set_cc_for_build cat >$dummy.c < does not define. */ diff --git a/deps/snappy/snappy-1.1.1/config.sub b/deps/snappy/snappy-1.1.4/config.sub similarity index 94% rename from deps/snappy/snappy-1.1.1/config.sub rename to deps/snappy/snappy-1.1.4/config.sub index c894da45..9633db70 100755 --- a/deps/snappy/snappy-1.1.1/config.sub +++ b/deps/snappy/snappy-1.1.4/config.sub @@ -1,24 +1,18 @@ #! /bin/sh # Configuration validation subroutine script. -# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, -# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, -# 2011, 2012 Free Software Foundation, Inc. +# Copyright 1992-2013 Free Software Foundation, Inc. -timestamp='2012-02-10' +timestamp='2013-08-10' -# This file is (in principle) common to ALL GNU software. -# The presence of a machine in this file suggests that SOME GNU software -# can handle that machine. It does not imply ALL GNU software can. -# -# This file is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or +# This file is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, see . @@ -26,11 +20,12 @@ timestamp='2012-02-10' # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under -# the same distribution terms that you use for the rest of that program. +# the same distribution terms that you use for the rest of that +# program. This Exception is an additional permission under section 7 +# of the GNU General Public License, version 3 ("GPLv3"). -# Please send patches to . Submit a context -# diff and a properly formatted GNU ChangeLog entry. +# Please send patches with a ChangeLog entry to config-patches@gnu.org. # # Configuration subroutine to validate and canonicalize a configuration type. # Supply the specified configuration type as an argument. @@ -73,9 +68,7 @@ Report bugs and patches to ." version="\ GNU config.sub ($timestamp) -Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, -2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 -Free Software Foundation, Inc. +Copyright 1992-2013 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." @@ -123,7 +116,7 @@ esac maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` case $maybe_os in nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \ - linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \ + linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \ knetbsd*-gnu* | netbsd*-gnu* | \ kopensolaris*-gnu* | \ storm-chaos* | os2-emx* | rtmk-nova*) @@ -156,7 +149,7 @@ case $os in -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ - -apple | -axis | -knuth | -cray | -microblaze) + -apple | -axis | -knuth | -cray | -microblaze*) os= basic_machine=$1 ;; @@ -225,6 +218,12 @@ case $os in -isc*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; + -lynx*178) + os=-lynxos178 + ;; + -lynx*5) + os=-lynxos5 + ;; -lynx*) os=-lynxos ;; @@ -253,10 +252,12 @@ case $basic_machine in | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ | am33_2.0 \ - | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \ - | be32 | be64 \ + | arc | arceb \ + | arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \ + | avr | avr32 \ + | be32 | be64 \ | bfin \ - | c4x | clipper \ + | c4x | c8051 | clipper \ | d10v | d30v | dlx | dsp16xx \ | epiphany \ | fido | fr30 | frv \ @@ -267,7 +268,7 @@ case $basic_machine in | le32 | le64 \ | lm32 \ | m32c | m32r | m32rle | m68000 | m68k | m88k \ - | maxq | mb | microblaze | mcore | mep | metag \ + | maxq | mb | microblaze | microblazeel | mcore | mep | metag \ | mips | mipsbe | mipseb | mipsel | mipsle \ | mips16 \ | mips64 | mips64el \ @@ -285,16 +286,17 @@ case $basic_machine in | mipsisa64r2 | mipsisa64r2el \ | mipsisa64sb1 | mipsisa64sb1el \ | mipsisa64sr71k | mipsisa64sr71kel \ + | mipsr5900 | mipsr5900el \ | mipstx39 | mipstx39el \ | mn10200 | mn10300 \ | moxie \ | mt \ | msp430 \ | nds32 | nds32le | nds32be \ - | nios | nios2 \ + | nios | nios2 | nios2eb | nios2el \ | ns16k | ns32k \ | open8 \ - | or32 \ + | or1k | or32 \ | pdp10 | pdp11 | pj | pjl \ | powerpc | powerpc64 | powerpc64le | powerpcle \ | pyramid \ @@ -364,13 +366,13 @@ case $basic_machine in | aarch64-* | aarch64_be-* \ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ - | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ + | alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ | avr-* | avr32-* \ | be32-* | be64-* \ | bfin-* | bs2000-* \ | c[123]* | c30-* | [cjt]90-* | c4x-* \ - | clipper-* | craynv-* | cydra-* \ + | c8051-* | clipper-* | craynv-* | cydra-* \ | d10v-* | d30v-* | dlx-* \ | elxsi-* \ | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ @@ -383,7 +385,8 @@ case $basic_machine in | lm32-* \ | m32c-* | m32r-* | m32rle-* \ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ - | m88110-* | m88k-* | maxq-* | mcore-* | metag-* | microblaze-* \ + | m88110-* | m88k-* | maxq-* | mcore-* | metag-* \ + | microblaze-* | microblazeel-* \ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ | mips16-* \ | mips64-* | mips64el-* \ @@ -401,12 +404,13 @@ case $basic_machine in | mipsisa64r2-* | mipsisa64r2el-* \ | mipsisa64sb1-* | mipsisa64sb1el-* \ | mipsisa64sr71k-* | mipsisa64sr71kel-* \ + | mipsr5900-* | mipsr5900el-* \ | mipstx39-* | mipstx39el-* \ | mmix-* \ | mt-* \ | msp430-* \ | nds32-* | nds32le-* | nds32be-* \ - | nios-* | nios2-* \ + | nios-* | nios2-* | nios2eb-* | nios2el-* \ | none-* | np1-* | ns16k-* | ns32k-* \ | open8-* \ | orion-* \ @@ -782,11 +786,15 @@ case $basic_machine in basic_machine=ns32k-utek os=-sysv ;; - microblaze) + microblaze*) basic_machine=microblaze-xilinx ;; + mingw64) + basic_machine=x86_64-pc + os=-mingw64 + ;; mingw32) - basic_machine=i386-pc + basic_machine=i686-pc os=-mingw32 ;; mingw32ce) @@ -822,7 +830,7 @@ case $basic_machine in basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` ;; msys) - basic_machine=i386-pc + basic_machine=i686-pc os=-msys ;; mvs) @@ -1013,7 +1021,11 @@ case $basic_machine in basic_machine=i586-unknown os=-pw32 ;; - rdos) + rdos | rdos64) + basic_machine=x86_64-pc + os=-rdos + ;; + rdos32) basic_machine=i386-pc os=-rdos ;; @@ -1340,21 +1352,21 @@ case $os in -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \ - | -sym* | -kopensolaris* \ + | -sym* | -kopensolaris* | -plan9* \ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ | -aos* | -aros* \ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ - | -openbsd* | -solidbsd* \ + | -bitrig* | -openbsd* | -solidbsd* \ | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ | -chorusos* | -chorusrdb* | -cegcc* \ | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ - | -mingw32* | -linux-gnu* | -linux-android* \ - | -linux-newlib* | -linux-uclibc* \ + | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \ + | -linux-newlib* | -linux-musl* | -linux-uclibc* \ | -uxpv* | -beos* | -mpeix* | -udk* \ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ @@ -1486,9 +1498,6 @@ case $os in -aros*) os=-aros ;; - -kaos*) - os=-kaos - ;; -zvmoe) os=-zvmoe ;; @@ -1537,6 +1546,12 @@ case $basic_machine in c4x-* | tic4x-*) os=-coff ;; + c8051-*) + os=-elf + ;; + hexagon-*) + os=-elf + ;; tic54x-*) os=-coff ;; @@ -1577,6 +1592,9 @@ case $basic_machine in mips*-*) os=-elf ;; + or1k-*) + os=-elf + ;; or32-*) os=-coff ;; diff --git a/deps/snappy/snappy-1.1.1/configure b/deps/snappy/snappy-1.1.4/configure similarity index 97% rename from deps/snappy/snappy-1.1.1/configure rename to deps/snappy/snappy-1.1.4/configure index a8fb56b2..9f862d31 100755 --- a/deps/snappy/snappy-1.1.1/configure +++ b/deps/snappy/snappy-1.1.4/configure @@ -1,11 +1,9 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.68 for snappy 1.1.1. +# Generated by GNU Autoconf 2.69 for snappy 1.1.4. # # -# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, -# 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software -# Foundation, Inc. +# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. # # # This configure script is free software; the Free Software Foundation @@ -134,6 +132,31 @@ export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH +# Use a proper internal environment variable to ensure we don't fall + # into an infinite loop, continuously re-executing ourselves. + if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then + _as_can_reexec=no; export _as_can_reexec; + # We cannot yet assume a decent shell, so we have to provide a +# neutralization value for shells without unset; and this also +# works around shells that cannot unset nonexistent variables. +# Preserve -v and -x to the replacement shell. +BASH_ENV=/dev/null +ENV=/dev/null +(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV +case $- in # (((( + *v*x* | *x*v* ) as_opts=-vx ;; + *v* ) as_opts=-v ;; + *x* ) as_opts=-x ;; + * ) as_opts= ;; +esac +exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} +# Admittedly, this is quite paranoid, since all the known shells bail +# out after a failed `exec'. +$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 +as_fn_exit 255 + fi + # We don't want this to propagate to other subprocesses. + { _as_can_reexec=; unset _as_can_reexec;} if test "x$CONFIG_SHELL" = x; then as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : emulate sh @@ -167,7 +190,8 @@ if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : else exitcode=1; echo positional parameters were not saved. fi -test x\$exitcode = x0 || exit 1" +test x\$exitcode = x0 || exit 1 +test -x / || exit 1" as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && @@ -220,21 +244,25 @@ IFS=$as_save_IFS if test "x$CONFIG_SHELL" != x; then : - # We cannot yet assume a decent shell, so we have to provide a - # neutralization value for shells without unset; and this also - # works around shells that cannot unset nonexistent variables. - # Preserve -v and -x to the replacement shell. - BASH_ENV=/dev/null - ENV=/dev/null - (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV - export CONFIG_SHELL - case $- in # (((( - *v*x* | *x*v* ) as_opts=-vx ;; - *v* ) as_opts=-v ;; - *x* ) as_opts=-x ;; - * ) as_opts= ;; - esac - exec "$CONFIG_SHELL" $as_opts "$as_myself" ${1+"$@"} + export CONFIG_SHELL + # We cannot yet assume a decent shell, so we have to provide a +# neutralization value for shells without unset; and this also +# works around shells that cannot unset nonexistent variables. +# Preserve -v and -x to the replacement shell. +BASH_ENV=/dev/null +ENV=/dev/null +(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV +case $- in # (((( + *v*x* | *x*v* ) as_opts=-vx ;; + *v* ) as_opts=-v ;; + *x* ) as_opts=-x ;; + * ) as_opts= ;; +esac +exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} +# Admittedly, this is quite paranoid, since all the known shells bail +# out after a failed `exec'. +$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 +exit 255 fi if test x$as_have_required = xno; then : @@ -336,6 +364,14 @@ $as_echo X"$as_dir" | } # as_fn_mkdir_p + +# as_fn_executable_p FILE +# ----------------------- +# Test if FILE is an executable regular file. +as_fn_executable_p () +{ + test -f "$1" && test -x "$1" +} # as_fn_executable_p # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take @@ -457,6 +493,10 @@ as_cr_alnum=$as_cr_Letters$as_cr_digits chmod +x "$as_me.lineno" || { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } + # If we had to re-execute with $CONFIG_SHELL, we're ensured to have + # already done that, so ensure we don't try to do so again and fall + # in an infinite loop. This has already happened in practice. + _as_can_reexec=no; export _as_can_reexec # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). @@ -491,16 +531,16 @@ if (echo >conf$$.file) 2>/dev/null; then # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. - # In both cases, we have to default to `cp -p'. + # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || - as_ln_s='cp -p' + as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else - as_ln_s='cp -p' + as_ln_s='cp -pR' fi else - as_ln_s='cp -p' + as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null @@ -512,28 +552,8 @@ else as_mkdir_p=false fi -if test -x / >/dev/null 2>&1; then - as_test_x='test -x' -else - if ls -dL / >/dev/null 2>&1; then - as_ls_L_option=L - else - as_ls_L_option= - fi - as_test_x=' - eval sh -c '\'' - if test -d "$1"; then - test -d "$1/."; - else - case $1 in #( - -*)set "./$1";; - esac; - case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( - ???[sx]*):;;*)false;;esac;fi - '\'' sh - ' -fi -as_executable_p=$as_test_x +as_test_x='test -x' +as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" @@ -567,8 +587,8 @@ MAKEFLAGS= # Identity of this package. PACKAGE_NAME='snappy' PACKAGE_TARNAME='snappy' -PACKAGE_VERSION='1.1.1' -PACKAGE_STRING='snappy 1.1.1' +PACKAGE_VERSION='1.1.4' +PACKAGE_STRING='snappy 1.1.4' PACKAGE_BUGREPORT='' PACKAGE_URL='' @@ -689,6 +709,10 @@ build_vendor build_cpu build LIBTOOL +AM_BACKSLASH +AM_DEFAULT_VERBOSITY +AM_DEFAULT_V +AM_V am__untar am__tar AMTAR @@ -753,6 +777,7 @@ SHELL' ac_subst_files='' ac_user_opts=' enable_option_checking +enable_silent_rules enable_shared enable_static with_pic @@ -1243,8 +1268,6 @@ target=$target_alias if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe - $as_echo "$as_me: WARNING: if you wanted to set the --build type, don't use --host. - If a cross compiler is detected then cross compile mode will be used" >&2 elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi @@ -1330,7 +1353,7 @@ if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures snappy 1.1.1 to adapt to many kinds of systems. +\`configure' configures snappy 1.1.4 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1400,7 +1423,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of snappy 1.1.1:";; + short | recursive ) echo "Configuration of snappy 1.1.4:";; esac cat <<\_ACEOF @@ -1408,12 +1431,16 @@ Optional Features: --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] + --enable-silent-rules less verbose build output (undo: "make V=1") + --disable-silent-rules verbose build output (undo: "make V=0") --enable-shared[=PKGS] build shared libraries [default=yes] --enable-static[=PKGS] build static libraries [default=yes] --enable-fast-install[=PKGS] optimize for fast installation [default=yes] - --disable-dependency-tracking speeds up one-time build - --enable-dependency-tracking do not reject slow dependency extractors + --enable-dependency-tracking + do not reject slow dependency extractors + --disable-dependency-tracking + speeds up one-time build --disable-libtool-lock avoid locking (might break parallel builds) --enable-gtest Enable tests using the Google C++ Testing Framework. (Default is enabled.) @@ -1527,10 +1554,10 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -snappy configure 1.1.1 -generated by GNU Autoconf 2.68 +snappy configure 1.1.4 +generated by GNU Autoconf 2.69 -Copyright (C) 2010 Free Software Foundation, Inc. +Copyright (C) 2012 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF @@ -1606,7 +1633,7 @@ $as_echo "$ac_try_echo"; } >&5 test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || - $as_test_x conftest$ac_exeext + test -x conftest$ac_exeext }; then : ac_retval=0 else @@ -1904,7 +1931,7 @@ $as_echo "$ac_try_echo"; } >&5 test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || - $as_test_x conftest$ac_exeext + test -x conftest$ac_exeext }; then : ac_retval=0 else @@ -2176,8 +2203,8 @@ cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by snappy $as_me 1.1.1, which was -generated by GNU Autoconf 2.68. Invocation command line was +It was created by snappy $as_me 1.1.4, which was +generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -2525,12 +2552,8 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu - -# These are flags passed to automake (though they look like gcc flags!) -am__api_version='1.11' - ac_aux_dir= -for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do +for ac_dir in . "$srcdir"/.; do if test -f "$ac_dir/install-sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install-sh -c" @@ -2546,7 +2569,7 @@ for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do fi done if test -z "$ac_aux_dir"; then - as_fn_error $? "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5 + as_fn_error $? "cannot find install-sh, install.sh, or shtool in . \"$srcdir\"/." "$LINENO" 5 fi # These three variables are undocumented and unsupported, @@ -2558,6 +2581,10 @@ ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. + +# These are flags passed to automake (though they look like gcc flags!) +am__api_version='1.14' + # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: @@ -2595,7 +2622,7 @@ case $as_dir/ in #(( # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then if test $ac_prog = install && grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. @@ -2653,9 +2680,6 @@ test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 $as_echo_n "checking whether build environment is sane... " >&6; } -# Just in case -sleep 1 -echo timestamp > conftest.file # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' @@ -2666,32 +2690,40 @@ case `pwd` in esac case $srcdir in *[\\\"\#\$\&\'\`$am_lf\ \ ]*) - as_fn_error $? "unsafe srcdir value: \`$srcdir'" "$LINENO" 5;; + as_fn_error $? "unsafe srcdir value: '$srcdir'" "$LINENO" 5;; esac -# Do `set' in a subshell so we don't clobber the current shell's +# Do 'set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( - set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` - if test "$*" = "X"; then - # -L didn't work. - set X `ls -t "$srcdir/configure" conftest.file` - fi - rm -f conftest.file - if test "$*" != "X $srcdir/configure conftest.file" \ - && test "$*" != "X conftest.file $srcdir/configure"; then - - # If neither matched, then we have a broken ls. This can happen - # if, for instance, CONFIG_SHELL is bash and it inherits a - # broken ls alias from the environment. This has actually - # happened. Such a system could not be considered "sane". - as_fn_error $? "ls -t appears to fail. Make sure there is not a broken -alias in your environment" "$LINENO" 5 - fi - + am_has_slept=no + for am_try in 1 2; do + echo "timestamp, slept: $am_has_slept" > conftest.file + set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` + if test "$*" = "X"; then + # -L didn't work. + set X `ls -t "$srcdir/configure" conftest.file` + fi + if test "$*" != "X $srcdir/configure conftest.file" \ + && test "$*" != "X conftest.file $srcdir/configure"; then + + # If neither matched, then we have a broken ls. This can happen + # if, for instance, CONFIG_SHELL is bash and it inherits a + # broken ls alias from the environment. This has actually + # happened. Such a system could not be considered "sane". + as_fn_error $? "ls -t appears to fail. Make sure there is not a broken + alias in your environment" "$LINENO" 5 + fi + if test "$2" = conftest.file || test $am_try -eq 2; then + break + fi + # Just in case. + sleep 1 + am_has_slept=yes + done test "$2" = conftest.file ) then @@ -2703,6 +2735,16 @@ Check your system clock" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } +# If we didn't sleep, we still need to ensure time stamps of config.status and +# generated files are strictly newer. +am_sleep_pid= +if grep 'slept: no' conftest.file >/dev/null 2>&1; then + ( sleep 1 ) & + am_sleep_pid=$! +fi + +rm -f conftest.file + test "$program_prefix" != NONE && program_transform_name="s&^&$program_prefix&;$program_transform_name" # Use a double $ so make ignores it. @@ -2725,12 +2767,12 @@ if test x"${MISSING+set}" != xset; then esac fi # Use eval to expand $SHELL -if eval "$MISSING --run true"; then - am_missing_run="$MISSING --run " +if eval "$MISSING --is-lightweight"; then + am_missing_run="$MISSING " else am_missing_run= - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`missing' script is too old or missing" >&5 -$as_echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: 'missing' script is too old or missing" >&5 +$as_echo "$as_me: WARNING: 'missing' script is too old or missing" >&2;} fi if test x"${install_sh}" != xset; then @@ -2742,10 +2784,10 @@ if test x"${install_sh}" != xset; then esac fi -# Installed binaries are usually stripped using `strip' when the user -# run `make install-strip'. However `strip' might not be the right +# Installed binaries are usually stripped using 'strip' when the user +# run "make install-strip". However 'strip' might not be the right # tool to use in cross-compilation environments, therefore Automake -# will honor the `STRIP' environment variable to overrule this program. +# will honor the 'STRIP' environment variable to overrule this program. if test "$cross_compiling" != no; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. @@ -2764,7 +2806,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -2804,7 +2846,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -2855,7 +2897,7 @@ do test -z "$as_dir" && as_dir=. for ac_prog in mkdir gmkdir; do for ac_exec_ext in '' $ac_executable_extensions; do - { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; } || continue + as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext" || continue case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( 'mkdir (GNU coreutils) '* | \ 'mkdir (coreutils) '* | \ @@ -2884,12 +2926,6 @@ fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 $as_echo "$MKDIR_P" >&6; } -mkdir_p="$MKDIR_P" -case $mkdir_p in - [\\/$]* | ?:[\\/]*) ;; - */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; -esac - for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. @@ -2908,7 +2944,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AWK="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -2972,6 +3008,45 @@ else fi rmdir .tst 2>/dev/null +# Check whether --enable-silent-rules was given. +if test "${enable_silent_rules+set}" = set; then : + enableval=$enable_silent_rules; +fi + +case $enable_silent_rules in # ((( + yes) AM_DEFAULT_VERBOSITY=0;; + no) AM_DEFAULT_VERBOSITY=1;; + *) AM_DEFAULT_VERBOSITY=1;; +esac +am_make=${MAKE-make} +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5 +$as_echo_n "checking whether $am_make supports nested variables... " >&6; } +if ${am_cv_make_support_nested_variables+:} false; then : + $as_echo_n "(cached) " >&6 +else + if $as_echo 'TRUE=$(BAR$(V)) +BAR0=false +BAR1=true +V=1 +am__doit: + @$(TRUE) +.PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then + am_cv_make_support_nested_variables=yes +else + am_cv_make_support_nested_variables=no +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5 +$as_echo "$am_cv_make_support_nested_variables" >&6; } +if test $am_cv_make_support_nested_variables = yes; then + AM_V='$(V)' + AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' +else + AM_V=$AM_DEFAULT_VERBOSITY + AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY +fi +AM_BACKSLASH='\' + if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." @@ -2994,7 +3069,7 @@ fi # Define the identity of the package. PACKAGE='snappy' - VERSION='1.1.1' + VERSION='1.1.4' cat >>confdefs.h <<_ACEOF @@ -3022,12 +3097,22 @@ AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} +# For better backward compatibility. To be removed once Automake 1.9.x +# dies out for good. For more background, see: +# +# +mkdir_p='$(MKDIR_P)' + # We need awk for the "check" target. The system "awk" is bad on # some platforms. # Always define AMTAR for backward compatibility. Yes, it's still used # in the wild :-( We should find a proper way to deprecate it ... AMTAR='$${TAR-tar}' + +# We'll loop over all known methods to create a tar archive until one works. +_am_tools='gnutar pax cpio none' + am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -' @@ -3035,6 +3120,48 @@ am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -' +# POSIX will say in a future version that running "rm -f" with no argument +# is OK; and we want to be able to make that assumption in our Makefile +# recipes. So use an aggressive probe to check that the usage we want is +# actually supported "in the wild" to an acceptable degree. +# See automake bug#10828. +# To make any issue more visible, cause the running configure to be aborted +# by default if the 'rm' program in use doesn't match our expectations; the +# user can still override this though. +if rm -f && rm -fr && rm -rf; then : OK; else + cat >&2 <<'END' +Oops! + +Your 'rm' program seems unable to run without file operands specified +on the command line, even when the '-f' option is present. This is contrary +to the behaviour of most rm programs out there, and not conforming with +the upcoming POSIX standard: + +Please tell bug-automake@gnu.org about your system, including the value +of your $PATH and any error possibly output before this message. This +can help us improve future automake versions. + +END + if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then + echo 'Configuration will proceed anyway, since you have set the' >&2 + echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2 + echo >&2 + else + cat >&2 <<'END' +Aborting the configuration process, to ensure you take notice of the issue. + +You can download and install GNU coreutils to get an 'rm' implementation +that behaves properly: . + +If you want to complete the configuration process using your problematic +'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM +to "yes", and re-run configure. + +END + as_fn_error $? "Your 'rm' program is bad, sorry." "$LINENO" 5 + fi +fi + case `pwd` in *\ * | *\ *) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5 @@ -3219,7 +3346,7 @@ am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf -# Ignore all kinds of additional output from `make'. +# Ignore all kinds of additional output from 'make'. case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=include @@ -3285,7 +3412,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -3325,7 +3452,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -3378,7 +3505,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -3419,7 +3546,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue @@ -3477,7 +3604,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -3521,7 +3648,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -3967,8 +4094,7 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include -#include -#include +struct stat; /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); @@ -4053,6 +4179,65 @@ ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC understands -c and -o together" >&5 +$as_echo_n "checking whether $CC understands -c and -o together... " >&6; } +if ${am_cv_prog_cc_c_o+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF + # Make sure it works both with $CC and with simple cc. + # Following AC_PROG_CC_C_O, we do the test twice because some + # compilers refuse to overwrite an existing .o file with -o, + # though they will create one. + am_cv_prog_cc_c_o=yes + for am_i in 1 2; do + if { echo "$as_me:$LINENO: $CC -c conftest.$ac_ext -o conftest2.$ac_objext" >&5 + ($CC -c conftest.$ac_ext -o conftest2.$ac_objext) >&5 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } \ + && test -f conftest2.$ac_objext; then + : OK + else + am_cv_prog_cc_c_o=no + break + fi + done + rm -f core conftest* + unset am_i +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5 +$as_echo "$am_cv_prog_cc_c_o" >&6; } +if test "$am_cv_prog_cc_c_o" != yes; then + # Losing compiler, so override with the script. + # FIXME: It is wrong to rewrite CC. + # But if we don't then we get into trouble of one sort or another. + # A longer-term fix would be to have automake use am__CC in this case, + # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" + CC="$am_aux_dir/compile $CC" +fi +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + depcc="$CC" am_compiler_list= { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 @@ -4064,8 +4249,8 @@ else # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up - # making a dummy file named `D' -- because `-MD' means `put the output - # in D'. + # making a dummy file named 'D' -- because '-MD' means "put the output + # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're @@ -4100,16 +4285,16 @@ else : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c - # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with - # Solaris 8's {/usr,}/bin/sh. - touch sub/conftst$i.h + # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with + # Solaris 10 /bin/sh. + echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf - # We check with `-c' and `-o' for the sake of the "dashmstdout" + # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly - # handle `-M -o', and we need to detect this. Also, some Intel - # versions had trouble with output in subdirs + # handle '-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in @@ -4118,8 +4303,8 @@ else test "$am__universal" = false || continue ;; nosideeffect) - # after this tag, mechanisms are not by side-effect, so they'll - # only be used when explicitly requested + # After this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else @@ -4127,7 +4312,7 @@ else fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) - # This compiler won't grok `-c -o', but also, the minuso test has + # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} @@ -4203,7 +4388,7 @@ do for ac_prog in sed gsed; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" - { test -f "$ac_path_SED" && $as_test_x "$ac_path_SED"; } || continue + as_fn_executable_p "$ac_path_SED" || continue # Check for GNU ac_path_SED and select it if it is found. # Check for GNU $ac_path_SED case `"$ac_path_SED" --version 2>&1` in @@ -4279,7 +4464,7 @@ do for ac_prog in grep ggrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" - { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue + as_fn_executable_p "$ac_path_GREP" || continue # Check for GNU ac_path_GREP and select it if it is found. # Check for GNU $ac_path_GREP case `"$ac_path_GREP" --version 2>&1` in @@ -4345,7 +4530,7 @@ do for ac_prog in egrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" - { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue + as_fn_executable_p "$ac_path_EGREP" || continue # Check for GNU ac_path_EGREP and select it if it is found. # Check for GNU $ac_path_EGREP case `"$ac_path_EGREP" --version 2>&1` in @@ -4412,7 +4597,7 @@ do for ac_prog in fgrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext" - { test -f "$ac_path_FGREP" && $as_test_x "$ac_path_FGREP"; } || continue + as_fn_executable_p "$ac_path_FGREP" || continue # Check for GNU ac_path_FGREP and select it if it is found. # Check for GNU $ac_path_FGREP case `"$ac_path_FGREP" --version 2>&1` in @@ -4668,7 +4853,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -4712,7 +4897,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_DUMPBIN="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -4901,7 +5086,8 @@ else ;; *) lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` - if test -n "$lt_cv_sys_max_cmd_len"; then + if test -n "$lt_cv_sys_max_cmd_len" && \ + test undefined != "$lt_cv_sys_max_cmd_len"; then lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` else @@ -5136,7 +5322,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -5176,7 +5362,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OBJDUMP="objdump" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -5302,10 +5488,6 @@ freebsd* | dragonfly*) fi ;; -gnu*) - lt_cv_deplibs_check_method=pass_all - ;; - haiku*) lt_cv_deplibs_check_method=pass_all ;; @@ -5344,7 +5526,7 @@ irix5* | irix6* | nonstopux*) ;; # This must be glibc/ELF. -linux* | k*bsd*-gnu | kopensolaris*-gnu) +linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) lt_cv_deplibs_check_method=pass_all ;; @@ -5482,7 +5664,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -5522,7 +5704,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_DLLTOOL="dlltool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -5626,7 +5808,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AR="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -5670,7 +5852,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_AR="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -5795,7 +5977,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -5835,7 +6017,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -5894,7 +6076,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -5934,7 +6116,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_RANLIB="ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -6426,7 +6608,7 @@ ia64-*-hpux*) rm -rf conftest* ;; -x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \ +x86_64-*kfreebsd*-gnu|x86_64-*linux*|powerpc*-*linux*| \ s390*-*linux*|s390*-*tpf*|sparc*-*linux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext @@ -6442,9 +6624,19 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*) LD="${LD-ld} -m elf_i386_fbsd" ;; x86_64-*linux*) - LD="${LD-ld} -m elf_i386" + case `/usr/bin/file conftest.o` in + *x86-64*) + LD="${LD-ld} -m elf32_x86_64" + ;; + *) + LD="${LD-ld} -m elf_i386" + ;; + esac + ;; + powerpc64le-*) + LD="${LD-ld} -m elf32lppclinux" ;; - ppc64-*linux*|powerpc64-*linux*) + powerpc64-*) LD="${LD-ld} -m elf32ppclinux" ;; s390x-*linux*) @@ -6463,7 +6655,10 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*) x86_64-*linux*) LD="${LD-ld} -m elf_x86_64" ;; - ppc*-*linux*|powerpc*-*linux*) + powerpcle-*) + LD="${LD-ld} -m elf64lppc" + ;; + powerpc-*) LD="${LD-ld} -m elf64ppc" ;; s390*-*linux*|s390*-*tpf*) @@ -6583,7 +6778,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_MANIFEST_TOOL="${ac_tool_prefix}mt" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -6623,7 +6818,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_MANIFEST_TOOL="mt" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -6703,7 +6898,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -6743,7 +6938,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_DSYMUTIL="dsymutil" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -6795,7 +6990,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -6835,7 +7030,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_NMEDIT="nmedit" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -6887,7 +7082,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_LIPO="${ac_tool_prefix}lipo" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -6927,7 +7122,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_LIPO="lipo" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -6979,7 +7174,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_OTOOL="${ac_tool_prefix}otool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -7019,7 +7214,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OTOOL="otool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -7071,7 +7266,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_OTOOL64="${ac_tool_prefix}otool64" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -7111,7 +7306,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OTOOL64="otool64" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -8267,7 +8462,7 @@ lt_prog_compiler_static= lt_prog_compiler_static='-non_shared' ;; - linux* | k*bsd*-gnu | kopensolaris*-gnu) + linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) case $cc_basename in # old Intel for x86_64 which still supported -KPIC. ecc*) @@ -10437,17 +10632,6 @@ freebsd* | dragonfly*) esac ;; -gnu*) - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - haiku*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no @@ -10564,7 +10748,7 @@ linux*oldld* | linux*aout* | linux*coff*) ;; # This must be glibc/ELF. -linux* | k*bsd*-gnu | kopensolaris*-gnu) +linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no @@ -11639,7 +11823,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -11683,7 +11867,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CXX="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -11879,8 +12063,8 @@ else # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up - # making a dummy file named `D' -- because `-MD' means `put the output - # in D'. + # making a dummy file named 'D' -- because '-MD' means "put the output + # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're @@ -11915,16 +12099,16 @@ else : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c - # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with - # Solaris 8's {/usr,}/bin/sh. - touch sub/conftst$i.h + # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with + # Solaris 10 /bin/sh. + echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf - # We check with `-c' and `-o' for the sake of the "dashmstdout" + # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly - # handle `-M -o', and we need to detect this. Also, some Intel - # versions had trouble with output in subdirs + # handle '-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in @@ -11933,8 +12117,8 @@ else test "$am__universal" = false || continue ;; nosideeffect) - # after this tag, mechanisms are not by side-effect, so they'll - # only be used when explicitly requested + # After this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else @@ -11942,7 +12126,7 @@ else fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) - # This compiler won't grok `-c -o', but also, the minuso test has + # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} @@ -12805,9 +12989,6 @@ fi ld_shlibs_CXX=yes ;; - gnu*) - ;; - haiku*) archive_cmds_CXX='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' link_all_deplibs_CXX=yes @@ -12969,7 +13150,7 @@ fi inherit_rpath_CXX=yes ;; - linux* | k*bsd*-gnu | kopensolaris*-gnu) + linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler @@ -13829,7 +14010,7 @@ lt_prog_compiler_static_CXX= ;; esac ;; - linux* | k*bsd*-gnu | kopensolaris*-gnu) + linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) case $cc_basename in KCC*) # KAI C++ Compiler @@ -14701,17 +14882,6 @@ freebsd* | dragonfly*) esac ;; -gnu*) - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - haiku*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no @@ -14828,7 +14998,7 @@ linux*oldld* | linux*aout* | linux*coff*) ;; # This must be glibc/ELF. -linux* | k*bsd*-gnu | kopensolaris*-gnu) +linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no @@ -15538,7 +15708,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_GTEST_CONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -15648,7 +15818,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -15691,7 +15861,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -16194,17 +16364,17 @@ fi # Export the version to snappy-stubs-public.h. SNAPPY_MAJOR="1" SNAPPY_MINOR="1" -SNAPPY_PATCHLEVEL="1" +SNAPPY_PATCHLEVEL="4" -SNAPPY_LTVERSION=3:0:2 +SNAPPY_LTVERSION=4:1:3 ac_config_headers="$ac_config_headers config.h" -ac_config_files="$ac_config_files Makefile snappy-stubs-public.h" +ac_config_files="$ac_config_files Makefile snappy-stubs-public.h snappy.pc" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure @@ -16315,6 +16485,14 @@ LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking that generated files are newer than configure" >&5 +$as_echo_n "checking that generated files are newer than configure... " >&6; } + if test -n "$am_sleep_pid"; then + # Hide warnings about reused PIDs. + wait $am_sleep_pid 2>/dev/null + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: done" >&5 +$as_echo "done" >&6; } if test -n "$EXEEXT"; then am__EXEEXT_TRUE= am__EXEEXT_FALSE='#' @@ -16638,16 +16816,16 @@ if (echo >conf$$.file) 2>/dev/null; then # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. - # In both cases, we have to default to `cp -p'. + # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || - as_ln_s='cp -p' + as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else - as_ln_s='cp -p' + as_ln_s='cp -pR' fi else - as_ln_s='cp -p' + as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null @@ -16707,28 +16885,16 @@ else as_mkdir_p=false fi -if test -x / >/dev/null 2>&1; then - as_test_x='test -x' -else - if ls -dL / >/dev/null 2>&1; then - as_ls_L_option=L - else - as_ls_L_option= - fi - as_test_x=' - eval sh -c '\'' - if test -d "$1"; then - test -d "$1/."; - else - case $1 in #( - -*)set "./$1";; - esac; - case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( - ???[sx]*):;;*)false;;esac;fi - '\'' sh - ' -fi -as_executable_p=$as_test_x + +# as_fn_executable_p FILE +# ----------------------- +# Test if FILE is an executable regular file. +as_fn_executable_p () +{ + test -f "$1" && test -x "$1" +} # as_fn_executable_p +as_test_x='test -x' +as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" @@ -16749,8 +16915,8 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by snappy $as_me 1.1.1, which was -generated by GNU Autoconf 2.68. Invocation command line was +This file was extended by snappy $as_me 1.1.4, which was +generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS @@ -16815,11 +16981,11 @@ _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -snappy config.status 1.1.1 -configured by $0, generated by GNU Autoconf 2.68, +snappy config.status 1.1.4 +configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" -Copyright (C) 2010 Free Software Foundation, Inc. +Copyright (C) 2012 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." @@ -16910,7 +17076,7 @@ fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then - set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion + set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' @@ -17324,6 +17490,7 @@ do "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; "snappy-stubs-public.h") CONFIG_FILES="$CONFIG_FILES snappy-stubs-public.h" ;; + "snappy.pc") CONFIG_FILES="$CONFIG_FILES snappy.pc" ;; *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; esac @@ -17920,7 +18087,7 @@ $as_echo "$as_me: executing $ac_file commands" >&6;} case $ac_file$ac_mode in "depfiles":C) test x"$AMDEP_TRUE" != x"" || { - # Autoconf 2.62 quotes --file arguments for eval, but not when files + # Older Autoconf quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. case $CONFIG_FILES in @@ -17933,7 +18100,7 @@ $as_echo "$as_me: executing $ac_file commands" >&6;} # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. - # We used to match only the files named `Makefile.in', but + # We used to match only the files named 'Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. @@ -17967,21 +18134,19 @@ $as_echo X"$mf" | continue fi # Extract the definition of DEPDIR, am__include, and am__quote - # from the Makefile without running `make'. + # from the Makefile without running 'make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` - test -z "am__include" && continue + test -z "$am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` - # When using ansi2knr, U may be empty or an underscore; expand it - U=`sed -n 's/^U = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ - sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`$as_dirname -- "$file" || diff --git a/deps/snappy/snappy-1.1.1/configure.ac b/deps/snappy/snappy-1.1.4/configure.ac old mode 100644 new mode 100755 similarity index 96% rename from deps/snappy/snappy-1.1.1/configure.ac rename to deps/snappy/snappy-1.1.4/configure.ac index bfd15b0f..cffda8b6 --- a/deps/snappy/snappy-1.1.1/configure.ac +++ b/deps/snappy/snappy-1.1.4/configure.ac @@ -1,14 +1,15 @@ m4_define([snappy_major], [1]) m4_define([snappy_minor], [1]) -m4_define([snappy_patchlevel], [1]) +m4_define([snappy_patchlevel], [4]) # Libtool shared library interface versions (current:revision:age) # Update this value for every release! (A:B:C will map to foo.so.(A-C).C.B) # http://www.gnu.org/software/libtool/manual/html_node/Updating-version-info.html -m4_define([snappy_ltversion], [3:0:2]) +m4_define([snappy_ltversion], [4:1:3]) AC_INIT([snappy], [snappy_major.snappy_minor.snappy_patchlevel]) AC_CONFIG_MACRO_DIR([m4]) +AC_CONFIG_AUX_DIR([.]) # These are flags passed to automake (though they look like gcc flags!) AM_INIT_AUTOMAKE([-Wall]) @@ -129,5 +130,5 @@ AC_SUBST([SNAPPY_PATCHLEVEL]) AC_SUBST([SNAPPY_LTVERSION], snappy_ltversion) AC_CONFIG_HEADERS([config.h]) -AC_CONFIG_FILES([Makefile snappy-stubs-public.h]) +AC_CONFIG_FILES([Makefile snappy-stubs-public.h snappy.pc]) AC_OUTPUT diff --git a/deps/snappy/snappy-1.1.1/depcomp b/deps/snappy/snappy-1.1.4/depcomp similarity index 56% rename from deps/snappy/snappy-1.1.1/depcomp rename to deps/snappy/snappy-1.1.4/depcomp index bd0ac089..4ebd5b3a 100755 --- a/deps/snappy/snappy-1.1.1/depcomp +++ b/deps/snappy/snappy-1.1.4/depcomp @@ -1,10 +1,9 @@ #! /bin/sh # depcomp - compile a program generating dependencies as side-effects -scriptversion=2011-12-04.11; # UTC +scriptversion=2013-05-30.07; # UTC -# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009, 2010, -# 2011 Free Software Foundation, Inc. +# Copyright (C) 1999-2013 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -28,9 +27,9 @@ scriptversion=2011-12-04.11; # UTC case $1 in '') - echo "$0: No command. Try \`$0 --help' for more information." 1>&2 - exit 1; - ;; + echo "$0: No command. Try '$0 --help' for more information." 1>&2 + exit 1; + ;; -h | --h*) cat <<\EOF Usage: depcomp [--help] [--version] PROGRAM [ARGS] @@ -40,8 +39,8 @@ as side-effects. Environment variables: depmode Dependency tracking mode. - source Source file read by `PROGRAMS ARGS'. - object Object file output by `PROGRAMS ARGS'. + source Source file read by 'PROGRAMS ARGS'. + object Object file output by 'PROGRAMS ARGS'. DEPDIR directory where to store dependencies. depfile Dependency file to output. tmpdepfile Temporary file to use when outputting dependencies. @@ -57,6 +56,66 @@ EOF ;; esac +# Get the directory component of the given path, and save it in the +# global variables '$dir'. Note that this directory component will +# be either empty or ending with a '/' character. This is deliberate. +set_dir_from () +{ + case $1 in + */*) dir=`echo "$1" | sed -e 's|/[^/]*$|/|'`;; + *) dir=;; + esac +} + +# Get the suffix-stripped basename of the given path, and save it the +# global variable '$base'. +set_base_from () +{ + base=`echo "$1" | sed -e 's|^.*/||' -e 's/\.[^.]*$//'` +} + +# If no dependency file was actually created by the compiler invocation, +# we still have to create a dummy depfile, to avoid errors with the +# Makefile "include basename.Plo" scheme. +make_dummy_depfile () +{ + echo "#dummy" > "$depfile" +} + +# Factor out some common post-processing of the generated depfile. +# Requires the auxiliary global variable '$tmpdepfile' to be set. +aix_post_process_depfile () +{ + # If the compiler actually managed to produce a dependency file, + # post-process it. + if test -f "$tmpdepfile"; then + # Each line is of the form 'foo.o: dependency.h'. + # Do two passes, one to just change these to + # $object: dependency.h + # and one to simply output + # dependency.h: + # which is needed to avoid the deleted-header problem. + { sed -e "s,^.*\.[$lower]*:,$object:," < "$tmpdepfile" + sed -e "s,^.*\.[$lower]*:[$tab ]*,," -e 's,$,:,' < "$tmpdepfile" + } > "$depfile" + rm -f "$tmpdepfile" + else + make_dummy_depfile + fi +} + +# A tabulation character. +tab=' ' +# A newline character. +nl=' +' +# Character ranges might be problematic outside the C locale. +# These definitions help. +upper=ABCDEFGHIJKLMNOPQRSTUVWXYZ +lower=abcdefghijklmnopqrstuvwxyz +digits=0123456789 +alpha=${upper}${lower} + if test -z "$depmode" || test -z "$source" || test -z "$object"; then echo "depcomp: Variables source, object and depmode must be set" 1>&2 exit 1 @@ -69,6 +128,9 @@ tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} rm -f "$tmpdepfile" +# Avoid interferences from the environment. +gccflag= dashmflag= + # Some modes work just like other modes, but use different flags. We # parameterize here, but still list the modes in the big case below, # to make depend.m4 easier to write. Note that we *cannot* use a case @@ -80,26 +142,32 @@ if test "$depmode" = hp; then fi if test "$depmode" = dashXmstdout; then - # This is just like dashmstdout with a different argument. - dashmflag=-xM - depmode=dashmstdout + # This is just like dashmstdout with a different argument. + dashmflag=-xM + depmode=dashmstdout fi cygpath_u="cygpath -u -f -" if test "$depmode" = msvcmsys; then - # This is just like msvisualcpp but w/o cygpath translation. - # Just convert the backslash-escaped backslashes to single forward - # slashes to satisfy depend.m4 - cygpath_u='sed s,\\\\,/,g' - depmode=msvisualcpp + # This is just like msvisualcpp but w/o cygpath translation. + # Just convert the backslash-escaped backslashes to single forward + # slashes to satisfy depend.m4 + cygpath_u='sed s,\\\\,/,g' + depmode=msvisualcpp fi if test "$depmode" = msvc7msys; then - # This is just like msvc7 but w/o cygpath translation. - # Just convert the backslash-escaped backslashes to single forward - # slashes to satisfy depend.m4 - cygpath_u='sed s,\\\\,/,g' - depmode=msvc7 + # This is just like msvc7 but w/o cygpath translation. + # Just convert the backslash-escaped backslashes to single forward + # slashes to satisfy depend.m4 + cygpath_u='sed s,\\\\,/,g' + depmode=msvc7 +fi + +if test "$depmode" = xlc; then + # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency information. + gccflag=-qmakedep=gcc,-MF + depmode=gcc fi case "$depmode" in @@ -122,8 +190,7 @@ gcc3) done "$@" stat=$? - if test $stat -eq 0; then : - else + if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi @@ -131,13 +198,17 @@ gcc3) ;; gcc) +## Note that this doesn't just cater to obsosete pre-3.x GCC compilers. +## but also to in-use compilers like IMB xlc/xlC and the HP C compiler. +## (see the conditional assignment to $gccflag above). ## There are various ways to get dependency output from gcc. Here's ## why we pick this rather obscure method: ## - Don't want to use -MD because we'd like the dependencies to end ## up in a subdir. Having to rename by hand is ugly. ## (We might end up doing this anyway to support other compilers.) ## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like -## -MM, not -M (despite what the docs say). +## -MM, not -M (despite what the docs say). Also, it might not be +## supported by the other compilers which use the 'gcc' depmode. ## - Using -M directly means running the compiler twice (even worse ## than renaming). if test -z "$gccflag"; then @@ -145,33 +216,31 @@ gcc) fi "$@" -Wp,"$gccflag$tmpdepfile" stat=$? - if test $stat -eq 0; then : - else + if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" - alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz -## The second -e expression handles DOS-style file names with drive letters. + # The second -e expression handles DOS-style file names with drive + # letters. sed -e 's/^[^:]*: / /' \ -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" -## This next piece of magic avoids the `deleted header file' problem. +## This next piece of magic avoids the "deleted header file" problem. ## The problem is that when a header file which appears in a .P file ## is deleted, the dependency causes make to die (because there is ## typically no way to rebuild the header). We avoid this by adding ## dummy dependencies for each header file. Too bad gcc doesn't do ## this for us directly. - tr ' ' ' -' < "$tmpdepfile" | -## Some versions of gcc put a space before the `:'. On the theory +## Some versions of gcc put a space before the ':'. On the theory ## that the space means something, we add a space to the output as ## well. hp depmode also adds that space, but also prefixes the VPATH ## to the object. Take care to not repeat it in the output. ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. - sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \ - | sed -e 's/$/ :/' >> "$depfile" + tr ' ' "$nl" < "$tmpdepfile" \ + | sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \ + | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; @@ -189,8 +258,7 @@ sgi) "$@" -MDupdate "$tmpdepfile" fi stat=$? - if test $stat -eq 0; then : - else + if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi @@ -198,43 +266,41 @@ sgi) if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files echo "$object : \\" > "$depfile" - # Clip off the initial element (the dependent). Don't try to be # clever and replace this with sed code, as IRIX sed won't handle # lines with more than a fixed number of characters (4096 in # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; - # the IRIX cc adds comments like `#:fec' to the end of the + # the IRIX cc adds comments like '#:fec' to the end of the # dependency line. - tr ' ' ' -' < "$tmpdepfile" \ - | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ - tr ' -' ' ' >> "$depfile" + tr ' ' "$nl" < "$tmpdepfile" \ + | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' \ + | tr "$nl" ' ' >> "$depfile" echo >> "$depfile" - # The second pass generates a dummy entry for each header file. - tr ' ' ' -' < "$tmpdepfile" \ - | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ - >> "$depfile" + tr ' ' "$nl" < "$tmpdepfile" \ + | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ + >> "$depfile" else - # The sourcefile does not contain any dependencies, so just - # store a dummy comment line, to avoid errors with the Makefile - # "include basename.Plo" scheme. - echo "#dummy" > "$depfile" + make_dummy_depfile fi rm -f "$tmpdepfile" ;; +xlc) + # This case exists only to let depend.m4 do its work. It works by + # looking at the text of this script. This case will never be run, + # since it is checked for above. + exit 1 + ;; + aix) # The C for AIX Compiler uses -M and outputs the dependencies # in a .u file. In older versions, this file always lives in the - # current directory. Also, the AIX compiler puts `$object:' at the + # current directory. Also, the AIX compiler puts '$object:' at the # start of each line; $object doesn't have directory information. # Version 6 uses the directory in both cases. - dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` - test "x$dir" = "x$object" && dir= - base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` + set_dir_from "$object" + set_base_from "$object" if test "$libtool" = yes; then tmpdepfile1=$dir$base.u tmpdepfile2=$base.u @@ -247,9 +313,7 @@ aix) "$@" -M fi stat=$? - - if test $stat -eq 0; then : - else + if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" exit $stat fi @@ -258,44 +322,100 @@ aix) do test -f "$tmpdepfile" && break done - if test -f "$tmpdepfile"; then - # Each line is of the form `foo.o: dependent.h'. - # Do two passes, one to just change these to - # `$object: dependent.h' and one to simply `dependent.h:'. - sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" - # That's a tab and a space in the []. - sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" - else - # The sourcefile does not contain any dependencies, so just - # store a dummy comment line, to avoid errors with the Makefile - # "include basename.Plo" scheme. - echo "#dummy" > "$depfile" + aix_post_process_depfile + ;; + +tcc) + # tcc (Tiny C Compiler) understand '-MD -MF file' since version 0.9.26 + # FIXME: That version still under development at the moment of writing. + # Make that this statement remains true also for stable, released + # versions. + # It will wrap lines (doesn't matter whether long or short) with a + # trailing '\', as in: + # + # foo.o : \ + # foo.c \ + # foo.h \ + # + # It will put a trailing '\' even on the last line, and will use leading + # spaces rather than leading tabs (at least since its commit 0394caf7 + # "Emit spaces for -MD"). + "$@" -MD -MF "$tmpdepfile" + stat=$? + if test $stat -ne 0; then + rm -f "$tmpdepfile" + exit $stat fi + rm -f "$depfile" + # Each non-empty line is of the form 'foo.o : \' or ' dep.h \'. + # We have to change lines of the first kind to '$object: \'. + sed -e "s|.*:|$object :|" < "$tmpdepfile" > "$depfile" + # And for each line of the second kind, we have to emit a 'dep.h:' + # dummy dependency, to avoid the deleted-header problem. + sed -n -e 's|^ *\(.*\) *\\$|\1:|p' < "$tmpdepfile" >> "$depfile" rm -f "$tmpdepfile" ;; -icc) - # Intel's C compiler understands `-MD -MF file'. However on - # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c - # ICC 7.0 will fill foo.d with something like - # foo.o: sub/foo.c - # foo.o: sub/foo.h - # which is wrong. We want: - # sub/foo.o: sub/foo.c - # sub/foo.o: sub/foo.h - # sub/foo.c: - # sub/foo.h: - # ICC 7.1 will output +## The order of this option in the case statement is important, since the +## shell code in configure will try each of these formats in the order +## listed in this file. A plain '-MD' option would be understood by many +## compilers, so we must ensure this comes after the gcc and icc options. +pgcc) + # Portland's C compiler understands '-MD'. + # Will always output deps to 'file.d' where file is the root name of the + # source file under compilation, even if file resides in a subdirectory. + # The object file name does not affect the name of the '.d' file. + # pgcc 10.2 will output # foo.o: sub/foo.c sub/foo.h - # and will wrap long lines using \ : + # and will wrap long lines using '\' : # foo.o: sub/foo.c ... \ # sub/foo.h ... \ # ... + set_dir_from "$object" + # Use the source, not the object, to determine the base name, since + # that's sadly what pgcc will do too. + set_base_from "$source" + tmpdepfile=$base.d + + # For projects that build the same source file twice into different object + # files, the pgcc approach of using the *source* file root name can cause + # problems in parallel builds. Use a locking strategy to avoid stomping on + # the same $tmpdepfile. + lockdir=$base.d-lock + trap " + echo '$0: caught signal, cleaning up...' >&2 + rmdir '$lockdir' + exit 1 + " 1 2 13 15 + numtries=100 + i=$numtries + while test $i -gt 0; do + # mkdir is a portable test-and-set. + if mkdir "$lockdir" 2>/dev/null; then + # This process acquired the lock. + "$@" -MD + stat=$? + # Release the lock. + rmdir "$lockdir" + break + else + # If the lock is being held by a different process, wait + # until the winning process is done or we timeout. + while test -d "$lockdir" && test $i -gt 0; do + sleep 1 + i=`expr $i - 1` + done + fi + i=`expr $i - 1` + done + trap - 1 2 13 15 + if test $i -le 0; then + echo "$0: failed to acquire lock after $numtries attempts" >&2 + echo "$0: check lockdir '$lockdir'" >&2 + exit 1 + fi - "$@" -MD -MF "$tmpdepfile" - stat=$? - if test $stat -eq 0; then : - else + if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi @@ -307,8 +427,8 @@ icc) sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process this invocation # correctly. Breaking it into two sed invocations is a workaround. - sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" | - sed -e 's/$/ :/' >> "$depfile" + sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" \ + | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; @@ -319,9 +439,8 @@ hp2) # 'foo.d', which lands next to the object file, wherever that # happens to be. # Much of this is similar to the tru64 case; see comments there. - dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` - test "x$dir" = "x$object" && dir= - base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` + set_dir_from "$object" + set_base_from "$object" if test "$libtool" = yes; then tmpdepfile1=$dir$base.d tmpdepfile2=$dir.libs/$base.d @@ -332,8 +451,7 @@ hp2) "$@" +Maked fi stat=$? - if test $stat -eq 0; then : - else + if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" exit $stat fi @@ -343,77 +461,61 @@ hp2) test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then - sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile" - # Add `dependent.h:' lines. + sed -e "s,^.*\.[$lower]*:,$object:," "$tmpdepfile" > "$depfile" + # Add 'dependent.h:' lines. sed -ne '2,${ - s/^ *// - s/ \\*$// - s/$/:/ - p - }' "$tmpdepfile" >> "$depfile" + s/^ *// + s/ \\*$// + s/$/:/ + p + }' "$tmpdepfile" >> "$depfile" else - echo "#dummy" > "$depfile" + make_dummy_depfile fi rm -f "$tmpdepfile" "$tmpdepfile2" ;; tru64) - # The Tru64 compiler uses -MD to generate dependencies as a side - # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'. - # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put - # dependencies in `foo.d' instead, so we check for that too. - # Subdirectories are respected. - dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` - test "x$dir" = "x$object" && dir= - base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` - - if test "$libtool" = yes; then - # With Tru64 cc, shared objects can also be used to make a - # static library. This mechanism is used in libtool 1.4 series to - # handle both shared and static libraries in a single compilation. - # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d. - # - # With libtool 1.5 this exception was removed, and libtool now - # generates 2 separate objects for the 2 libraries. These two - # compilations output dependencies in $dir.libs/$base.o.d and - # in $dir$base.o.d. We have to check for both files, because - # one of the two compilations can be disabled. We should prefer - # $dir$base.o.d over $dir.libs/$base.o.d because the latter is - # automatically cleaned when .libs/ is deleted, while ignoring - # the former would cause a distcleancheck panic. - tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4 - tmpdepfile2=$dir$base.o.d # libtool 1.5 - tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5 - tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504 - "$@" -Wc,-MD - else - tmpdepfile1=$dir$base.o.d - tmpdepfile2=$dir$base.d - tmpdepfile3=$dir$base.d - tmpdepfile4=$dir$base.d - "$@" -MD - fi - - stat=$? - if test $stat -eq 0; then : - else - rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" - exit $stat - fi - - for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" - do - test -f "$tmpdepfile" && break - done - if test -f "$tmpdepfile"; then - sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" - # That's a tab and a space in the []. - sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" - else - echo "#dummy" > "$depfile" - fi - rm -f "$tmpdepfile" - ;; + # The Tru64 compiler uses -MD to generate dependencies as a side + # effect. 'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'. + # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put + # dependencies in 'foo.d' instead, so we check for that too. + # Subdirectories are respected. + set_dir_from "$object" + set_base_from "$object" + + if test "$libtool" = yes; then + # Libtool generates 2 separate objects for the 2 libraries. These + # two compilations output dependencies in $dir.libs/$base.o.d and + # in $dir$base.o.d. We have to check for both files, because + # one of the two compilations can be disabled. We should prefer + # $dir$base.o.d over $dir.libs/$base.o.d because the latter is + # automatically cleaned when .libs/ is deleted, while ignoring + # the former would cause a distcleancheck panic. + tmpdepfile1=$dir$base.o.d # libtool 1.5 + tmpdepfile2=$dir.libs/$base.o.d # Likewise. + tmpdepfile3=$dir.libs/$base.d # Compaq CCC V6.2-504 + "$@" -Wc,-MD + else + tmpdepfile1=$dir$base.d + tmpdepfile2=$dir$base.d + tmpdepfile3=$dir$base.d + "$@" -MD + fi + + stat=$? + if test $stat -ne 0; then + rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" + exit $stat + fi + + for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" + do + test -f "$tmpdepfile" && break + done + # Same post-processing that is required for AIX mode. + aix_post_process_depfile + ;; msvc7) if test "$libtool" = yes; then @@ -424,8 +526,7 @@ msvc7) "$@" $showIncludes > "$tmpdepfile" stat=$? grep -v '^Note: including file: ' "$tmpdepfile" - if test "$stat" = 0; then : - else + if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi @@ -443,14 +544,15 @@ msvc7) p }' | $cygpath_u | sort -u | sed -n ' s/ /\\ /g -s/\(.*\)/ \1 \\/p +s/\(.*\)/'"$tab"'\1 \\/p s/.\(.*\) \\/\1:/ H $ { - s/.*/ / + s/.*/'"$tab"'/ G p }' >> "$depfile" + echo >> "$depfile" # make sure the fragment doesn't end with a backslash rm -f "$tmpdepfile" ;; @@ -478,7 +580,7 @@ dashmstdout) shift fi - # Remove `-o $object'. + # Remove '-o $object'. IFS=" " for arg do @@ -498,18 +600,18 @@ dashmstdout) done test -z "$dashmflag" && dashmflag=-M - # Require at least two characters before searching for `:' + # Require at least two characters before searching for ':' # in the target name. This is to cope with DOS-style filenames: - # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise. + # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise. "$@" $dashmflag | - sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" + sed "s|^[$tab ]*[^:$tab ][^:][^:]*:[$tab ]*|$object: |" > "$tmpdepfile" rm -f "$depfile" cat < "$tmpdepfile" > "$depfile" - tr ' ' ' -' < "$tmpdepfile" | \ -## Some versions of the HPUX 10.20 sed can't process this invocation -## correctly. Breaking it into two sed invocations is a workaround. - sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" + # Some versions of the HPUX 10.20 sed can't process this sed invocation + # correctly. Breaking it into two sed invocations is a workaround. + tr ' ' "$nl" < "$tmpdepfile" \ + | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ + | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; @@ -562,11 +664,12 @@ makedepend) # makedepend may prepend the VPATH from the source file name to the object. # No need to regex-escape $object, excess matching of '.' is harmless. sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile" - sed '1,2d' "$tmpdepfile" | tr ' ' ' -' | \ -## Some versions of the HPUX 10.20 sed can't process this invocation -## correctly. Breaking it into two sed invocations is a workaround. - sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" + # Some versions of the HPUX 10.20 sed can't process the last invocation + # correctly. Breaking it into two sed invocations is a workaround. + sed '1,2d' "$tmpdepfile" \ + | tr ' ' "$nl" \ + | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ + | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" "$tmpdepfile".bak ;; @@ -583,7 +686,7 @@ cpp) shift fi - # Remove `-o $object'. + # Remove '-o $object'. IFS=" " for arg do @@ -602,10 +705,10 @@ cpp) esac done - "$@" -E | - sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ - -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | - sed '$ s: \\$::' > "$tmpdepfile" + "$@" -E \ + | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ + -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ + | sed '$ s: \\$::' > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" cat < "$tmpdepfile" >> "$depfile" @@ -637,23 +740,23 @@ msvisualcpp) shift ;; "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") - set fnord "$@" - shift - shift - ;; + set fnord "$@" + shift + shift + ;; *) - set fnord "$@" "$arg" - shift - shift - ;; + set fnord "$@" "$arg" + shift + shift + ;; esac done "$@" -E 2>/dev/null | sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" - sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" - echo " " >> "$depfile" + sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile" + echo "$tab" >> "$depfile" sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" rm -f "$tmpdepfile" ;; diff --git a/deps/snappy/snappy-1.1.1/format_description.txt b/deps/snappy/snappy-1.1.4/format_description.txt old mode 100644 new mode 100755 similarity index 100% rename from deps/snappy/snappy-1.1.1/format_description.txt rename to deps/snappy/snappy-1.1.4/format_description.txt diff --git a/deps/snappy/snappy-1.1.1/framing_format.txt b/deps/snappy/snappy-1.1.4/framing_format.txt old mode 100644 new mode 100755 similarity index 88% rename from deps/snappy/snappy-1.1.1/framing_format.txt rename to deps/snappy/snappy-1.1.4/framing_format.txt index 32b1e597..9764e83d --- a/deps/snappy/snappy-1.1.1/framing_format.txt +++ b/deps/snappy/snappy-1.1.4/framing_format.txt @@ -1,5 +1,5 @@ Snappy framing format description -Last revised: 2013-01-05 +Last revised: 2013-10-25 This format decribes a framing format for Snappy, allowing compressing to files or streams that can then more easily be decompressed without having @@ -106,7 +106,18 @@ no more than 65536 data bytes, so the maximum legal chunk length with the checksum is 65540. -4.4. Reserved unskippable chunks (chunk types 0x02-0x7f) +4.4. Padding (chunk type 0xfe) + +Padding chunks allow a compressor to increase the size of the data stream +so that it complies with external demands, e.g. that the total number of +bytes is a multiple of some value. + +All bytes of the padding chunk, except the chunk byte itself and the length, +should be zero, but decompressors must not try to interpret or verify the +padding data in any way. + + +4.5. Reserved unskippable chunks (chunk types 0x02-0x7f) These are reserved for future expansion. A decoder that sees such a chunk should immediately return an error, as it must assume it cannot decode the @@ -115,10 +126,10 @@ stream correctly. Future versions of this specification may define meanings for these chunks. -4.5. Reserved skippable chunks (chunk types 0x80-0xfe) +4.6. Reserved skippable chunks (chunk types 0x80-0xfd) These are also reserved for future expansion, but unlike the chunks -described in 4.4, a decoder seeing these must skip them and continue +described in 4.5, a decoder seeing these must skip them and continue decoding. Future versions of this specification may define meanings for these chunks. diff --git a/deps/snappy/snappy-1.1.1/install-sh b/deps/snappy/snappy-1.1.4/install-sh similarity index 97% rename from deps/snappy/snappy-1.1.1/install-sh rename to deps/snappy/snappy-1.1.4/install-sh index a9244eb0..377bb868 100755 --- a/deps/snappy/snappy-1.1.1/install-sh +++ b/deps/snappy/snappy-1.1.4/install-sh @@ -1,7 +1,7 @@ #!/bin/sh # install - install a program, script, or datafile -scriptversion=2011-01-19.21; # UTC +scriptversion=2011-11-20.07; # UTC # This originates from X11R5 (mit/util/scripts/install.sh), which was # later released in X11R6 (xc/config/util/install.sh) with the @@ -35,7 +35,7 @@ scriptversion=2011-01-19.21; # UTC # FSF changes to this file are in the public domain. # # Calling this script install-sh is preferred over install.sh, to prevent -# `make' implicit rules from creating a file called install from it +# 'make' implicit rules from creating a file called install from it # when there is no Makefile. # # This script is compatible with the BSD install script, but was written @@ -156,7 +156,7 @@ while test $# -ne 0; do -s) stripcmd=$stripprog;; -t) dst_arg=$2 - # Protect names problematic for `test' and other utilities. + # Protect names problematic for 'test' and other utilities. case $dst_arg in -* | [=\(\)!]) dst_arg=./$dst_arg;; esac @@ -190,7 +190,7 @@ if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then fi shift # arg dst_arg=$arg - # Protect names problematic for `test' and other utilities. + # Protect names problematic for 'test' and other utilities. case $dst_arg in -* | [=\(\)!]) dst_arg=./$dst_arg;; esac @@ -202,7 +202,7 @@ if test $# -eq 0; then echo "$0: no input file specified." >&2 exit 1 fi - # It's OK to call `install-sh -d' without argument. + # It's OK to call 'install-sh -d' without argument. # This can happen when creating conditional directories. exit 0 fi @@ -240,7 +240,7 @@ fi for src do - # Protect names problematic for `test' and other utilities. + # Protect names problematic for 'test' and other utilities. case $src in -* | [=\(\)!]) src=./$src;; esac @@ -354,7 +354,7 @@ do if test -z "$dir_arg" || { # Check for POSIX incompatibilities with -m. # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or - # other-writeable bit of parent directory when it shouldn't. + # other-writable bit of parent directory when it shouldn't. # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. ls_ld_tmpdir=`ls -ld "$tmpdir"` case $ls_ld_tmpdir in diff --git a/deps/snappy/snappy-1.1.1/ltmain.sh b/deps/snappy/snappy-1.1.4/ltmain.sh similarity index 99% rename from deps/snappy/snappy-1.1.1/ltmain.sh rename to deps/snappy/snappy-1.1.4/ltmain.sh index c2852d85..a356acaf 100644 --- a/deps/snappy/snappy-1.1.1/ltmain.sh +++ b/deps/snappy/snappy-1.1.4/ltmain.sh @@ -70,7 +70,7 @@ # compiler: $LTCC # compiler flags: $LTCFLAGS # linker: $LD (gnu? $with_gnu_ld) -# $progname: (GNU libtool) 2.4.2 Debian-2.4.2-1ubuntu1 +# $progname: (GNU libtool) 2.4.2 Debian-2.4.2-1.7ubuntu1 # automake: $automake_version # autoconf: $autoconf_version # @@ -80,7 +80,7 @@ PROGRAM=libtool PACKAGE=libtool -VERSION="2.4.2 Debian-2.4.2-1ubuntu1" +VERSION="2.4.2 Debian-2.4.2-1.7ubuntu1" TIMESTAMP="" package_revision=1.3337 diff --git a/deps/snappy/snappy-1.1.1/m4/gtest.m4 b/deps/snappy/snappy-1.1.4/m4/gtest.m4 old mode 100644 new mode 100755 similarity index 100% rename from deps/snappy/snappy-1.1.1/m4/gtest.m4 rename to deps/snappy/snappy-1.1.4/m4/gtest.m4 diff --git a/deps/snappy/snappy-1.1.4/missing b/deps/snappy/snappy-1.1.4/missing new file mode 100755 index 00000000..db98974f --- /dev/null +++ b/deps/snappy/snappy-1.1.4/missing @@ -0,0 +1,215 @@ +#! /bin/sh +# Common wrapper for a few potentially missing GNU programs. + +scriptversion=2013-10-28.13; # UTC + +# Copyright (C) 1996-2013 Free Software Foundation, Inc. +# Originally written by Fran,cois Pinard , 1996. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +if test $# -eq 0; then + echo 1>&2 "Try '$0 --help' for more information" + exit 1 +fi + +case $1 in + + --is-lightweight) + # Used by our autoconf macros to check whether the available missing + # script is modern enough. + exit 0 + ;; + + --run) + # Back-compat with the calling convention used by older automake. + shift + ;; + + -h|--h|--he|--hel|--help) + echo "\ +$0 [OPTION]... PROGRAM [ARGUMENT]... + +Run 'PROGRAM [ARGUMENT]...', returning a proper advice when this fails due +to PROGRAM being missing or too old. + +Options: + -h, --help display this help and exit + -v, --version output version information and exit + +Supported PROGRAM values: + aclocal autoconf autoheader autom4te automake makeinfo + bison yacc flex lex help2man + +Version suffixes to PROGRAM as well as the prefixes 'gnu-', 'gnu', and +'g' are ignored when checking the name. + +Send bug reports to ." + exit $? + ;; + + -v|--v|--ve|--ver|--vers|--versi|--versio|--version) + echo "missing $scriptversion (GNU Automake)" + exit $? + ;; + + -*) + echo 1>&2 "$0: unknown '$1' option" + echo 1>&2 "Try '$0 --help' for more information" + exit 1 + ;; + +esac + +# Run the given program, remember its exit status. +"$@"; st=$? + +# If it succeeded, we are done. +test $st -eq 0 && exit 0 + +# Also exit now if we it failed (or wasn't found), and '--version' was +# passed; such an option is passed most likely to detect whether the +# program is present and works. +case $2 in --version|--help) exit $st;; esac + +# Exit code 63 means version mismatch. This often happens when the user +# tries to use an ancient version of a tool on a file that requires a +# minimum version. +if test $st -eq 63; then + msg="probably too old" +elif test $st -eq 127; then + # Program was missing. + msg="missing on your system" +else + # Program was found and executed, but failed. Give up. + exit $st +fi + +perl_URL=http://www.perl.org/ +flex_URL=http://flex.sourceforge.net/ +gnu_software_URL=http://www.gnu.org/software + +program_details () +{ + case $1 in + aclocal|automake) + echo "The '$1' program is part of the GNU Automake package:" + echo "<$gnu_software_URL/automake>" + echo "It also requires GNU Autoconf, GNU m4 and Perl in order to run:" + echo "<$gnu_software_URL/autoconf>" + echo "<$gnu_software_URL/m4/>" + echo "<$perl_URL>" + ;; + autoconf|autom4te|autoheader) + echo "The '$1' program is part of the GNU Autoconf package:" + echo "<$gnu_software_URL/autoconf/>" + echo "It also requires GNU m4 and Perl in order to run:" + echo "<$gnu_software_URL/m4/>" + echo "<$perl_URL>" + ;; + esac +} + +give_advice () +{ + # Normalize program name to check for. + normalized_program=`echo "$1" | sed ' + s/^gnu-//; t + s/^gnu//; t + s/^g//; t'` + + printf '%s\n' "'$1' is $msg." + + configure_deps="'configure.ac' or m4 files included by 'configure.ac'" + case $normalized_program in + autoconf*) + echo "You should only need it if you modified 'configure.ac'," + echo "or m4 files included by it." + program_details 'autoconf' + ;; + autoheader*) + echo "You should only need it if you modified 'acconfig.h' or" + echo "$configure_deps." + program_details 'autoheader' + ;; + automake*) + echo "You should only need it if you modified 'Makefile.am' or" + echo "$configure_deps." + program_details 'automake' + ;; + aclocal*) + echo "You should only need it if you modified 'acinclude.m4' or" + echo "$configure_deps." + program_details 'aclocal' + ;; + autom4te*) + echo "You might have modified some maintainer files that require" + echo "the 'autom4te' program to be rebuilt." + program_details 'autom4te' + ;; + bison*|yacc*) + echo "You should only need it if you modified a '.y' file." + echo "You may want to install the GNU Bison package:" + echo "<$gnu_software_URL/bison/>" + ;; + lex*|flex*) + echo "You should only need it if you modified a '.l' file." + echo "You may want to install the Fast Lexical Analyzer package:" + echo "<$flex_URL>" + ;; + help2man*) + echo "You should only need it if you modified a dependency" \ + "of a man page." + echo "You may want to install the GNU Help2man package:" + echo "<$gnu_software_URL/help2man/>" + ;; + makeinfo*) + echo "You should only need it if you modified a '.texi' file, or" + echo "any other file indirectly affecting the aspect of the manual." + echo "You might want to install the Texinfo package:" + echo "<$gnu_software_URL/texinfo/>" + echo "The spurious makeinfo call might also be the consequence of" + echo "using a buggy 'make' (AIX, DU, IRIX), in which case you might" + echo "want to install GNU make:" + echo "<$gnu_software_URL/make/>" + ;; + *) + echo "You might have modified some files without having the proper" + echo "tools for further handling them. Check the 'README' file, it" + echo "often tells you about the needed prerequisites for installing" + echo "this package. You may also peek at any GNU archive site, in" + echo "case some other package contains this missing '$1' program." + ;; + esac +} + +give_advice "$1" | sed -e '1s/^/WARNING: /' \ + -e '2,$s/^/ /' >&2 + +# Propagate the correct exit status (expected to be 127 for a program +# not found, 63 for a program that failed due to version mismatch). +exit $st + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-time-zone: "UTC" +# time-stamp-end: "; # UTC" +# End: diff --git a/deps/snappy/snappy-1.1.1/snappy-c.cc b/deps/snappy/snappy-1.1.4/snappy-c.cc old mode 100644 new mode 100755 similarity index 100% rename from deps/snappy/snappy-1.1.1/snappy-c.cc rename to deps/snappy/snappy-1.1.4/snappy-c.cc diff --git a/deps/snappy/snappy-1.1.1/snappy-c.h b/deps/snappy/snappy-1.1.4/snappy-c.h old mode 100644 new mode 100755 similarity index 97% rename from deps/snappy/snappy-1.1.1/snappy-c.h rename to deps/snappy/snappy-1.1.4/snappy-c.h index c6c2a860..32aa0c6b --- a/deps/snappy/snappy-1.1.1/snappy-c.h +++ b/deps/snappy/snappy-1.1.4/snappy-c.h @@ -30,8 +30,8 @@ * Plain C interface (a wrapper around the C++ implementation). */ -#ifndef UTIL_SNAPPY_OPENSOURCE_SNAPPY_C_H_ -#define UTIL_SNAPPY_OPENSOURCE_SNAPPY_C_H_ +#ifndef THIRD_PARTY_SNAPPY_OPENSOURCE_SNAPPY_C_H_ +#define THIRD_PARTY_SNAPPY_OPENSOURCE_SNAPPY_C_H_ #ifdef __cplusplus extern "C" { @@ -135,4 +135,4 @@ snappy_status snappy_validate_compressed_buffer(const char* compressed, } // extern "C" #endif -#endif /* UTIL_SNAPPY_OPENSOURCE_SNAPPY_C_H_ */ +#endif /* THIRD_PARTY_SNAPPY_OPENSOURCE_SNAPPY_C_H_ */ diff --git a/deps/snappy/snappy-1.1.4/snappy-internal.h b/deps/snappy/snappy-1.1.4/snappy-internal.h new file mode 100755 index 00000000..b8355c08 --- /dev/null +++ b/deps/snappy/snappy-1.1.4/snappy-internal.h @@ -0,0 +1,227 @@ +// Copyright 2008 Google Inc. All Rights Reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "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 COPYRIGHT +// OWNER OR CONTRIBUTORS 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. +// +// Internals shared between the Snappy implementation and its unittest. + +#ifndef THIRD_PARTY_SNAPPY_SNAPPY_INTERNAL_H_ +#define THIRD_PARTY_SNAPPY_SNAPPY_INTERNAL_H_ + +#include "snappy-stubs-internal.h" + +namespace snappy { +namespace internal { + +class WorkingMemory { + public: + WorkingMemory() : large_table_(NULL) { } + ~WorkingMemory() { delete[] large_table_; } + + // Allocates and clears a hash table using memory in "*this", + // stores the number of buckets in "*table_size" and returns a pointer to + // the base of the hash table. + uint16* GetHashTable(size_t input_size, int* table_size); + + private: + uint16 small_table_[1<<10]; // 2KB + uint16* large_table_; // Allocated only when needed + + DISALLOW_COPY_AND_ASSIGN(WorkingMemory); +}; + +// Flat array compression that does not emit the "uncompressed length" +// prefix. Compresses "input" string to the "*op" buffer. +// +// REQUIRES: "input_length <= kBlockSize" +// REQUIRES: "op" points to an array of memory that is at least +// "MaxCompressedLength(input_length)" in size. +// REQUIRES: All elements in "table[0..table_size-1]" are initialized to zero. +// REQUIRES: "table_size" is a power of two +// +// Returns an "end" pointer into "op" buffer. +// "end - op" is the compressed size of "input". +char* CompressFragment(const char* input, + size_t input_length, + char* op, + uint16* table, + const int table_size); + +// Find the largest n such that +// +// s1[0,n-1] == s2[0,n-1] +// and n <= (s2_limit - s2). +// +// Return make_pair(n, n < 8). +// Does not read *s2_limit or beyond. +// Does not read *(s1 + (s2_limit - s2)) or beyond. +// Requires that s2_limit >= s2. +// +// Separate implementation for x86_64, for speed. Uses the fact that +// x86_64 is little endian. +#if defined(ARCH_K8) +static inline std::pair FindMatchLength(const char* s1, + const char* s2, + const char* s2_limit) { + assert(s2_limit >= s2); + size_t matched = 0; + + // This block isn't necessary for correctness; we could just start looping + // immediately. As an optimization though, it is useful. It creates some not + // uncommon code paths that determine, without extra effort, whether the match + // length is less than 8. In short, we are hoping to avoid a conditional + // branch, and perhaps get better code layout from the C++ compiler. + if (PREDICT_TRUE(s2 <= s2_limit - 8)) { + uint64 a1 = UNALIGNED_LOAD64(s1); + uint64 a2 = UNALIGNED_LOAD64(s2); + if (a1 != a2) { + return std::pair(Bits::FindLSBSetNonZero64(a1 ^ a2) >> 3, + true); + } else { + matched = 8; + s2 += 8; + } + } + + // Find out how long the match is. We loop over the data 64 bits at a + // time until we find a 64-bit block that doesn't match; then we find + // the first non-matching bit and use that to calculate the total + // length of the match. + while (PREDICT_TRUE(s2 <= s2_limit - 8)) { + if (UNALIGNED_LOAD64(s2) == UNALIGNED_LOAD64(s1 + matched)) { + s2 += 8; + matched += 8; + } else { + uint64 x = UNALIGNED_LOAD64(s2) ^ UNALIGNED_LOAD64(s1 + matched); + int matching_bits = Bits::FindLSBSetNonZero64(x); + matched += matching_bits >> 3; + assert(matched >= 8); + return std::pair(matched, false); + } + } + while (PREDICT_TRUE(s2 < s2_limit)) { + if (s1[matched] == *s2) { + ++s2; + ++matched; + } else { + return std::pair(matched, matched < 8); + } + } + return std::pair(matched, matched < 8); +} +#else +static inline std::pair FindMatchLength(const char* s1, + const char* s2, + const char* s2_limit) { + // Implementation based on the x86-64 version, above. + assert(s2_limit >= s2); + int matched = 0; + + while (s2 <= s2_limit - 4 && + UNALIGNED_LOAD32(s2) == UNALIGNED_LOAD32(s1 + matched)) { + s2 += 4; + matched += 4; + } + if (LittleEndian::IsLittleEndian() && s2 <= s2_limit - 4) { + uint32 x = UNALIGNED_LOAD32(s2) ^ UNALIGNED_LOAD32(s1 + matched); + int matching_bits = Bits::FindLSBSetNonZero(x); + matched += matching_bits >> 3; + } else { + while ((s2 < s2_limit) && (s1[matched] == *s2)) { + ++s2; + ++matched; + } + } + return std::pair(matched, matched < 8); +} +#endif + +// Lookup tables for decompression code. Give --snappy_dump_decompression_table +// to the unit test to recompute char_table. + +enum { + LITERAL = 0, + COPY_1_BYTE_OFFSET = 1, // 3 bit length + 3 bits of offset in opcode + COPY_2_BYTE_OFFSET = 2, + COPY_4_BYTE_OFFSET = 3 +}; +static const int kMaximumTagLength = 5; // COPY_4_BYTE_OFFSET plus the actual offset. + +// Mapping from i in range [0,4] to a mask to extract the bottom 8*i bits +static const uint32 wordmask[] = { + 0u, 0xffu, 0xffffu, 0xffffffu, 0xffffffffu +}; + +// Data stored per entry in lookup table: +// Range Bits-used Description +// ------------------------------------ +// 1..64 0..7 Literal/copy length encoded in opcode byte +// 0..7 8..10 Copy offset encoded in opcode byte / 256 +// 0..4 11..13 Extra bytes after opcode +// +// We use eight bits for the length even though 7 would have sufficed +// because of efficiency reasons: +// (1) Extracting a byte is faster than a bit-field +// (2) It properly aligns copy offset so we do not need a <<8 +static const uint16 char_table[256] = { + 0x0001, 0x0804, 0x1001, 0x2001, 0x0002, 0x0805, 0x1002, 0x2002, + 0x0003, 0x0806, 0x1003, 0x2003, 0x0004, 0x0807, 0x1004, 0x2004, + 0x0005, 0x0808, 0x1005, 0x2005, 0x0006, 0x0809, 0x1006, 0x2006, + 0x0007, 0x080a, 0x1007, 0x2007, 0x0008, 0x080b, 0x1008, 0x2008, + 0x0009, 0x0904, 0x1009, 0x2009, 0x000a, 0x0905, 0x100a, 0x200a, + 0x000b, 0x0906, 0x100b, 0x200b, 0x000c, 0x0907, 0x100c, 0x200c, + 0x000d, 0x0908, 0x100d, 0x200d, 0x000e, 0x0909, 0x100e, 0x200e, + 0x000f, 0x090a, 0x100f, 0x200f, 0x0010, 0x090b, 0x1010, 0x2010, + 0x0011, 0x0a04, 0x1011, 0x2011, 0x0012, 0x0a05, 0x1012, 0x2012, + 0x0013, 0x0a06, 0x1013, 0x2013, 0x0014, 0x0a07, 0x1014, 0x2014, + 0x0015, 0x0a08, 0x1015, 0x2015, 0x0016, 0x0a09, 0x1016, 0x2016, + 0x0017, 0x0a0a, 0x1017, 0x2017, 0x0018, 0x0a0b, 0x1018, 0x2018, + 0x0019, 0x0b04, 0x1019, 0x2019, 0x001a, 0x0b05, 0x101a, 0x201a, + 0x001b, 0x0b06, 0x101b, 0x201b, 0x001c, 0x0b07, 0x101c, 0x201c, + 0x001d, 0x0b08, 0x101d, 0x201d, 0x001e, 0x0b09, 0x101e, 0x201e, + 0x001f, 0x0b0a, 0x101f, 0x201f, 0x0020, 0x0b0b, 0x1020, 0x2020, + 0x0021, 0x0c04, 0x1021, 0x2021, 0x0022, 0x0c05, 0x1022, 0x2022, + 0x0023, 0x0c06, 0x1023, 0x2023, 0x0024, 0x0c07, 0x1024, 0x2024, + 0x0025, 0x0c08, 0x1025, 0x2025, 0x0026, 0x0c09, 0x1026, 0x2026, + 0x0027, 0x0c0a, 0x1027, 0x2027, 0x0028, 0x0c0b, 0x1028, 0x2028, + 0x0029, 0x0d04, 0x1029, 0x2029, 0x002a, 0x0d05, 0x102a, 0x202a, + 0x002b, 0x0d06, 0x102b, 0x202b, 0x002c, 0x0d07, 0x102c, 0x202c, + 0x002d, 0x0d08, 0x102d, 0x202d, 0x002e, 0x0d09, 0x102e, 0x202e, + 0x002f, 0x0d0a, 0x102f, 0x202f, 0x0030, 0x0d0b, 0x1030, 0x2030, + 0x0031, 0x0e04, 0x1031, 0x2031, 0x0032, 0x0e05, 0x1032, 0x2032, + 0x0033, 0x0e06, 0x1033, 0x2033, 0x0034, 0x0e07, 0x1034, 0x2034, + 0x0035, 0x0e08, 0x1035, 0x2035, 0x0036, 0x0e09, 0x1036, 0x2036, + 0x0037, 0x0e0a, 0x1037, 0x2037, 0x0038, 0x0e0b, 0x1038, 0x2038, + 0x0039, 0x0f04, 0x1039, 0x2039, 0x003a, 0x0f05, 0x103a, 0x203a, + 0x003b, 0x0f06, 0x103b, 0x203b, 0x003c, 0x0f07, 0x103c, 0x203c, + 0x0801, 0x0f08, 0x103d, 0x203d, 0x1001, 0x0f09, 0x103e, 0x203e, + 0x1801, 0x0f0a, 0x103f, 0x203f, 0x2001, 0x0f0b, 0x1040, 0x2040 +}; + +} // end namespace internal +} // end namespace snappy + +#endif // THIRD_PARTY_SNAPPY_SNAPPY_INTERNAL_H_ diff --git a/deps/snappy/snappy-1.1.1/snappy-sinksource.cc b/deps/snappy/snappy-1.1.4/snappy-sinksource.cc old mode 100644 new mode 100755 similarity index 72% rename from deps/snappy/snappy-1.1.1/snappy-sinksource.cc rename to deps/snappy/snappy-1.1.4/snappy-sinksource.cc index 5844552c..369a1321 --- a/deps/snappy/snappy-1.1.1/snappy-sinksource.cc +++ b/deps/snappy/snappy-1.1.4/snappy-sinksource.cc @@ -40,6 +40,21 @@ char* Sink::GetAppendBuffer(size_t length, char* scratch) { return scratch; } +char* Sink::GetAppendBufferVariable( + size_t min_size, size_t desired_size_hint, char* scratch, + size_t scratch_size, size_t* allocated_size) { + *allocated_size = scratch_size; + return scratch; +} + +void Sink::AppendAndTakeOwnership( + char* bytes, size_t n, + void (*deleter)(void*, const char*, size_t), + void *deleter_arg) { + Append(bytes, n); + (*deleter)(deleter_arg, bytes, n); +} + ByteArraySource::~ByteArraySource() { } size_t ByteArraySource::Available() const { return left_; } @@ -68,4 +83,22 @@ char* UncheckedByteArraySink::GetAppendBuffer(size_t len, char* scratch) { return dest_; } +void UncheckedByteArraySink::AppendAndTakeOwnership( + char* data, size_t n, + void (*deleter)(void*, const char*, size_t), + void *deleter_arg) { + if (data != dest_) { + memcpy(dest_, data, n); + (*deleter)(deleter_arg, data, n); + } + dest_ += n; +} + +char* UncheckedByteArraySink::GetAppendBufferVariable( + size_t min_size, size_t desired_size_hint, char* scratch, + size_t scratch_size, size_t* allocated_size) { + *allocated_size = desired_size_hint; + return dest_; } + +} // namespace snappy diff --git a/deps/snappy/snappy-1.1.1/snappy-sinksource.h b/deps/snappy/snappy-1.1.4/snappy-sinksource.h old mode 100644 new mode 100755 similarity index 66% rename from deps/snappy/snappy-1.1.1/snappy-sinksource.h rename to deps/snappy/snappy-1.1.4/snappy-sinksource.h index faabfa1e..8afcdaaa --- a/deps/snappy/snappy-1.1.1/snappy-sinksource.h +++ b/deps/snappy/snappy-1.1.4/snappy-sinksource.h @@ -26,12 +26,11 @@ // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -#ifndef UTIL_SNAPPY_SNAPPY_SINKSOURCE_H_ -#define UTIL_SNAPPY_SNAPPY_SINKSOURCE_H_ +#ifndef THIRD_PARTY_SNAPPY_SNAPPY_SINKSOURCE_H_ +#define THIRD_PARTY_SNAPPY_SNAPPY_SINKSOURCE_H_ #include - namespace snappy { // A Sink is an interface that consumes a sequence of bytes. @@ -60,6 +59,47 @@ class Sink { // The default implementation always returns the scratch buffer. virtual char* GetAppendBuffer(size_t length, char* scratch); + // For higher performance, Sink implementations can provide custom + // AppendAndTakeOwnership() and GetAppendBufferVariable() methods. + // These methods can reduce the number of copies done during + // compression/decompression. + + // Append "bytes[0,n-1] to the sink. Takes ownership of "bytes" + // and calls the deleter function as (*deleter)(deleter_arg, bytes, n) + // to free the buffer. deleter function must be non NULL. + // + // The default implementation just calls Append and frees "bytes". + // Other implementations may avoid a copy while appending the buffer. + virtual void AppendAndTakeOwnership( + char* bytes, size_t n, void (*deleter)(void*, const char*, size_t), + void *deleter_arg); + + // Returns a writable buffer for appending and writes the buffer's capacity to + // *allocated_size. Guarantees *allocated_size >= min_size. + // May return a pointer to the caller-owned scratch buffer which must have + // scratch_size >= min_size. + // + // The returned buffer is only valid until the next operation + // on this ByteSink. + // + // After writing at most *allocated_size bytes, call Append() with the + // pointer returned from this function and the number of bytes written. + // Many Append() implementations will avoid copying bytes if this function + // returned an internal buffer. + // + // If the sink implementation allocates or reallocates an internal buffer, + // it should use the desired_size_hint if appropriate. If a caller cannot + // provide a reasonable guess at the desired capacity, it should set + // desired_size_hint = 0. + // + // If a non-scratch buffer is returned, the caller may only pass + // a prefix to it to Append(). That is, it is not correct to pass an + // interior pointer to Append(). + // + // The default implementation always returns the scratch buffer. + virtual char* GetAppendBufferVariable( + size_t min_size, size_t desired_size_hint, char* scratch, + size_t scratch_size, size_t* allocated_size); private: // No copying @@ -122,6 +162,12 @@ class UncheckedByteArraySink : public Sink { virtual ~UncheckedByteArraySink(); virtual void Append(const char* data, size_t n); virtual char* GetAppendBuffer(size_t len, char* scratch); + virtual char* GetAppendBufferVariable( + size_t min_size, size_t desired_size_hint, char* scratch, + size_t scratch_size, size_t* allocated_size); + virtual void AppendAndTakeOwnership( + char* bytes, size_t n, void (*deleter)(void*, const char*, size_t), + void *deleter_arg); // Return the current output pointer so that a caller can see how // many bytes were produced. @@ -131,7 +177,6 @@ class UncheckedByteArraySink : public Sink { char* dest_; }; +} // namespace snappy -} - -#endif // UTIL_SNAPPY_SNAPPY_SINKSOURCE_H_ +#endif // THIRD_PARTY_SNAPPY_SNAPPY_SINKSOURCE_H_ diff --git a/deps/snappy/snappy-1.1.1/snappy-stubs-internal.cc b/deps/snappy/snappy-1.1.4/snappy-stubs-internal.cc old mode 100644 new mode 100755 similarity index 100% rename from deps/snappy/snappy-1.1.1/snappy-stubs-internal.cc rename to deps/snappy/snappy-1.1.4/snappy-stubs-internal.cc diff --git a/deps/snappy/snappy-1.1.1/snappy-stubs-internal.h b/deps/snappy/snappy-1.1.4/snappy-stubs-internal.h old mode 100644 new mode 100755 similarity index 89% rename from deps/snappy/snappy-1.1.1/snappy-stubs-internal.h rename to deps/snappy/snappy-1.1.4/snappy-stubs-internal.h index 12393b62..1954c63d --- a/deps/snappy/snappy-1.1.1/snappy-stubs-internal.h +++ b/deps/snappy/snappy-1.1.4/snappy-stubs-internal.h @@ -28,8 +28,8 @@ // // Various stubs for the open-source version of Snappy. -#ifndef UTIL_SNAPPY_OPENSOURCE_SNAPPY_STUBS_INTERNAL_H_ -#define UTIL_SNAPPY_OPENSOURCE_SNAPPY_STUBS_INTERNAL_H_ +#ifndef THIRD_PARTY_SNAPPY_OPENSOURCE_SNAPPY_STUBS_INTERNAL_H_ +#define THIRD_PARTY_SNAPPY_OPENSOURCE_SNAPPY_STUBS_INTERNAL_H_ #ifdef HAVE_CONFIG_H #include "config.h" @@ -116,6 +116,15 @@ static const int64 kint64max = static_cast(0x7FFFFFFFFFFFFFFFLL); // sub-architectures. // // This is a mess, but there's not much we can do about it. +// +// To further complicate matters, only LDR instructions (single reads) are +// allowed to be unaligned, not LDRD (two reads) or LDM (many reads). Unless we +// explicitly tell the compiler that these accesses can be unaligned, it can and +// will combine accesses. On armcc, the way to signal this is done by accessing +// through the type (uint32 __packed *), but GCC has no such attribute +// (it ignores __attribute__((packed)) on individual variables). However, +// we can tell it that a _struct_ is unaligned, which has the same effect, +// so we do that. #elif defined(__arm__) && \ !defined(__ARM_ARCH_4__) && \ @@ -131,11 +140,39 @@ static const int64 kint64max = static_cast(0x7FFFFFFFFFFFFFFFLL); !defined(__ARM_ARCH_6ZK__) && \ !defined(__ARM_ARCH_6T2__) -#define UNALIGNED_LOAD16(_p) (*reinterpret_cast(_p)) -#define UNALIGNED_LOAD32(_p) (*reinterpret_cast(_p)) +#if __GNUC__ +#define ATTRIBUTE_PACKED __attribute__((__packed__)) +#else +#define ATTRIBUTE_PACKED +#endif -#define UNALIGNED_STORE16(_p, _val) (*reinterpret_cast(_p) = (_val)) -#define UNALIGNED_STORE32(_p, _val) (*reinterpret_cast(_p) = (_val)) +namespace base { +namespace internal { + +struct Unaligned16Struct { + uint16 value; + uint8 dummy; // To make the size non-power-of-two. +} ATTRIBUTE_PACKED; + +struct Unaligned32Struct { + uint32 value; + uint8 dummy; // To make the size non-power-of-two. +} ATTRIBUTE_PACKED; + +} // namespace internal +} // namespace base + +#define UNALIGNED_LOAD16(_p) \ + ((reinterpret_cast(_p))->value) +#define UNALIGNED_LOAD32(_p) \ + ((reinterpret_cast(_p))->value) + +#define UNALIGNED_STORE16(_p, _val) \ + ((reinterpret_cast< ::snappy::base::internal::Unaligned16Struct *>(_p))->value = \ + (_val)) +#define UNALIGNED_STORE32(_p, _val) \ + ((reinterpret_cast< ::snappy::base::internal::Unaligned32Struct *>(_p))->value = \ + (_val)) // TODO(user): NEON supports unaligned 64-bit loads and stores. // See if that would be more efficient on platforms supporting it, @@ -488,4 +525,4 @@ inline char* string_as_array(string* str) { } // namespace snappy -#endif // UTIL_SNAPPY_OPENSOURCE_SNAPPY_STUBS_INTERNAL_H_ +#endif // THIRD_PARTY_SNAPPY_OPENSOURCE_SNAPPY_STUBS_INTERNAL_H_ diff --git a/deps/snappy/snappy-1.1.1/snappy-stubs-public.h b/deps/snappy/snappy-1.1.4/snappy-stubs-public.h similarity index 92% rename from deps/snappy/snappy-1.1.1/snappy-stubs-public.h rename to deps/snappy/snappy-1.1.4/snappy-stubs-public.h index ecda4398..564e4224 100644 --- a/deps/snappy/snappy-1.1.1/snappy-stubs-public.h +++ b/deps/snappy/snappy-1.1.4/snappy-stubs-public.h @@ -33,8 +33,8 @@ // which is a public header. Instead, snappy-stubs-public.h is generated by // from snappy-stubs-public.h.in at configure time. -#ifndef UTIL_SNAPPY_OPENSOURCE_SNAPPY_STUBS_PUBLIC_H_ -#define UTIL_SNAPPY_OPENSOURCE_SNAPPY_STUBS_PUBLIC_H_ +#ifndef THIRD_PARTY_SNAPPY_OPENSOURCE_SNAPPY_STUBS_PUBLIC_H_ +#define THIRD_PARTY_SNAPPY_OPENSOURCE_SNAPPY_STUBS_PUBLIC_H_ #if 1 #include @@ -50,7 +50,7 @@ #define SNAPPY_MAJOR 1 #define SNAPPY_MINOR 1 -#define SNAPPY_PATCHLEVEL 1 +#define SNAPPY_PATCHLEVEL 4 #define SNAPPY_VERSION \ ((SNAPPY_MAJOR << 16) | (SNAPPY_MINOR << 8) | SNAPPY_PATCHLEVEL) @@ -80,9 +80,11 @@ typedef unsigned long long uint64; typedef std::string string; +#ifndef DISALLOW_COPY_AND_ASSIGN #define DISALLOW_COPY_AND_ASSIGN(TypeName) \ TypeName(const TypeName&); \ void operator=(const TypeName&) +#endif #if !0 // Windows does not have an iovec type, yet the concept is universally useful. @@ -95,4 +97,4 @@ struct iovec { } // namespace snappy -#endif // UTIL_SNAPPY_OPENSOURCE_SNAPPY_STUBS_PUBLIC_H_ +#endif // THIRD_PARTY_SNAPPY_OPENSOURCE_SNAPPY_STUBS_PUBLIC_H_ diff --git a/deps/snappy/snappy-1.1.1/snappy-stubs-public.h.in b/deps/snappy/snappy-1.1.4/snappy-stubs-public.h.in old mode 100644 new mode 100755 similarity index 93% rename from deps/snappy/snappy-1.1.1/snappy-stubs-public.h.in rename to deps/snappy/snappy-1.1.4/snappy-stubs-public.h.in index 6c181a1c..96989ac3 --- a/deps/snappy/snappy-1.1.1/snappy-stubs-public.h.in +++ b/deps/snappy/snappy-1.1.4/snappy-stubs-public.h.in @@ -33,8 +33,8 @@ // which is a public header. Instead, snappy-stubs-public.h is generated by // from snappy-stubs-public.h.in at configure time. -#ifndef UTIL_SNAPPY_OPENSOURCE_SNAPPY_STUBS_PUBLIC_H_ -#define UTIL_SNAPPY_OPENSOURCE_SNAPPY_STUBS_PUBLIC_H_ +#ifndef THIRD_PARTY_SNAPPY_OPENSOURCE_SNAPPY_STUBS_PUBLIC_H_ +#define THIRD_PARTY_SNAPPY_OPENSOURCE_SNAPPY_STUBS_PUBLIC_H_ #if @ac_cv_have_stdint_h@ #include @@ -80,9 +80,11 @@ typedef unsigned long long uint64; typedef std::string string; +#ifndef DISALLOW_COPY_AND_ASSIGN #define DISALLOW_COPY_AND_ASSIGN(TypeName) \ TypeName(const TypeName&); \ void operator=(const TypeName&) +#endif #if !@ac_cv_have_sys_uio_h@ // Windows does not have an iovec type, yet the concept is universally useful. @@ -95,4 +97,4 @@ struct iovec { } // namespace snappy -#endif // UTIL_SNAPPY_OPENSOURCE_SNAPPY_STUBS_PUBLIC_H_ +#endif // THIRD_PARTY_SNAPPY_OPENSOURCE_SNAPPY_STUBS_PUBLIC_H_ diff --git a/deps/snappy/snappy-1.1.1/snappy-test.cc b/deps/snappy/snappy-1.1.4/snappy-test.cc old mode 100644 new mode 100755 similarity index 99% rename from deps/snappy/snappy-1.1.1/snappy-test.cc rename to deps/snappy/snappy-1.1.4/snappy-test.cc index 46194109..7f1d0a8d --- a/deps/snappy/snappy-1.1.1/snappy-test.cc +++ b/deps/snappy/snappy-1.1.4/snappy-test.cc @@ -28,13 +28,16 @@ // // Various stubs for the unit tests for the open-source version of Snappy. -#include "snappy-test.h" +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif #ifdef HAVE_WINDOWS_H -#define WIN32_LEAN_AND_MEAN #include #endif +#include "snappy-test.h" + #include DEFINE_bool(run_microbenchmarks, true, diff --git a/deps/snappy/snappy-1.1.1/snappy-test.h b/deps/snappy/snappy-1.1.4/snappy-test.h old mode 100644 new mode 100755 similarity index 96% rename from deps/snappy/snappy-1.1.1/snappy-test.h rename to deps/snappy/snappy-1.1.4/snappy-test.h index 0f18bf14..5fb09c78 --- a/deps/snappy/snappy-1.1.1/snappy-test.h +++ b/deps/snappy/snappy-1.1.4/snappy-test.h @@ -28,8 +28,8 @@ // // Various stubs for the unit tests for the open-source version of Snappy. -#ifndef UTIL_SNAPPY_OPENSOURCE_SNAPPY_TEST_H_ -#define UTIL_SNAPPY_OPENSOURCE_SNAPPY_TEST_H_ +#ifndef THIRD_PARTY_SNAPPY_OPENSOURCE_SNAPPY_TEST_H_ +#define THIRD_PARTY_SNAPPY_OPENSOURCE_SNAPPY_TEST_H_ #include #include @@ -52,7 +52,6 @@ #endif #ifdef HAVE_WINDOWS_H -#define WIN32_LEAN_AND_MEAN #include #endif @@ -132,7 +131,7 @@ namespace File { } // namespace File namespace file { - int Defaults() { } + int Defaults() { return 0; } class DummyStatus { public: @@ -158,6 +157,8 @@ namespace file { } fclose(fp); + + return DummyStatus(); } DummyStatus SetContents(const string& filename, @@ -176,6 +177,8 @@ namespace file { } fclose(fp); + + return DummyStatus(); } } // namespace file @@ -193,6 +196,7 @@ void Test_Snappy_RandomData(); void Test_Snappy_FourByteOffset(); void Test_SnappyCorruption_TruncatedVarint(); void Test_SnappyCorruption_UnterminatedVarint(); +void Test_SnappyCorruption_OverflowingVarint(); void Test_Snappy_ReadPastEndOfBuffer(); void Test_Snappy_FindMatchLength(); void Test_Snappy_FindMatchLengthRandom(); @@ -497,6 +501,7 @@ static inline int RUN_ALL_TESTS() { snappy::Test_Snappy_FourByteOffset(); snappy::Test_SnappyCorruption_TruncatedVarint(); snappy::Test_SnappyCorruption_UnterminatedVarint(); + snappy::Test_SnappyCorruption_OverflowingVarint(); snappy::Test_Snappy_ReadPastEndOfBuffer(); snappy::Test_Snappy_FindMatchLength(); snappy::Test_Snappy_FindMatchLengthRandom(); @@ -544,6 +549,13 @@ class LogMessage { PREDICT_TRUE(condition) ? (void)0 : \ snappy::LogMessageVoidify() & snappy::LogMessageCrash() +#ifdef _MSC_VER +// ~LogMessageCrash calls abort() and therefore never exits. This is by design +// so temporarily disable warning C4722. +#pragma warning(push) +#pragma warning(disable:4722) +#endif + class LogMessageCrash : public LogMessage { public: LogMessageCrash() { } @@ -553,6 +565,10 @@ class LogMessageCrash : public LogMessage { } }; +#ifdef _MSC_VER +#pragma warning(pop) +#endif + // This class is used to explicitly ignore values in the conditional // logging macros. This avoids compiler warnings like "value computed // is not used" and "statement has no effect". @@ -572,6 +588,7 @@ class LogMessageVoidify { #define CHECK_NE(a, b) CRASH_UNLESS((a) != (b)) #define CHECK_LT(a, b) CRASH_UNLESS((a) < (b)) #define CHECK_GT(a, b) CRASH_UNLESS((a) > (b)) +#define CHECK_OK(cond) (cond).CheckSuccess() } // namespace @@ -579,4 +596,4 @@ using snappy::CompressFile; using snappy::UncompressFile; using snappy::MeasureFile; -#endif // UTIL_SNAPPY_OPENSOURCE_SNAPPY_TEST_H_ +#endif // THIRD_PARTY_SNAPPY_OPENSOURCE_SNAPPY_TEST_H_ diff --git a/deps/snappy/snappy-1.1.1/snappy.cc b/deps/snappy/snappy-1.1.4/snappy.cc old mode 100644 new mode 100755 similarity index 65% rename from deps/snappy/snappy-1.1.1/snappy.cc rename to deps/snappy/snappy-1.1.4/snappy.cc index f8d0d23d..0414c56a --- a/deps/snappy/snappy-1.1.1/snappy.cc +++ b/deps/snappy/snappy-1.1.4/snappy.cc @@ -30,15 +30,26 @@ #include "snappy-internal.h" #include "snappy-sinksource.h" +#if defined(__x86_64__) || defined(_M_X64) +#include +#endif #include #include +#include #include #include namespace snappy { +using internal::COPY_1_BYTE_OFFSET; +using internal::COPY_2_BYTE_OFFSET; +using internal::LITERAL; +using internal::char_table; +using internal::kMaximumTagLength; +using internal::wordmask; + // Any hash function will produce a valid compressed bitstream, but a good // hash function reduces the number of collisions and thus yields better // compression for compressible input, and more speed for incompressible @@ -76,79 +87,125 @@ size_t MaxCompressedLength(size_t source_len) { return 32 + source_len + source_len/6; } -enum { - LITERAL = 0, - COPY_1_BYTE_OFFSET = 1, // 3 bit length + 3 bits of offset in opcode - COPY_2_BYTE_OFFSET = 2, - COPY_4_BYTE_OFFSET = 3 -}; -static const int kMaximumTagLength = 5; // COPY_4_BYTE_OFFSET plus the actual offset. - -// Copy "len" bytes from "src" to "op", one byte at a time. Used for -// handling COPY operations where the input and output regions may -// overlap. For example, suppose: -// src == "ab" -// op == src + 2 -// len == 20 -// After IncrementalCopy(src, op, len), the result will have -// eleven copies of "ab" -// ababababababababababab -// Note that this does not match the semantics of either memcpy() -// or memmove(). -static inline void IncrementalCopy(const char* src, char* op, ssize_t len) { - assert(len > 0); - do { - *op++ = *src++; - } while (--len > 0); +namespace { + +void UnalignedCopy64(const void* src, void* dst) { + memcpy(dst, src, 8); } -// Equivalent to IncrementalCopy except that it can write up to ten extra -// bytes after the end of the copy, and that it is faster. -// -// The main part of this loop is a simple copy of eight bytes at a time until -// we've copied (at least) the requested amount of bytes. However, if op and -// src are less than eight bytes apart (indicating a repeating pattern of -// length < 8), we first need to expand the pattern in order to get the correct -// results. For instance, if the buffer looks like this, with the eight-byte -// and patterns marked as intervals: -// -// abxxxxxxxxxxxx -// [------] src -// [------] op -// -// a single eight-byte copy from to will repeat the pattern once, -// after which we can move two bytes without moving : -// -// ababxxxxxxxxxx -// [------] src -// [------] op -// -// and repeat the exercise until the two no longer overlap. -// -// This allows us to do very well in the special case of one single byte -// repeated many times, without taking a big hit for more general cases. -// -// The worst case of extra writing past the end of the match occurs when -// op - src == 1 and len == 1; the last copy will read from byte positions -// [0..7] and write to [4..11], whereas it was only supposed to write to -// position 1. Thus, ten excess bytes. +void UnalignedCopy128(const void* src, void* dst) { + // TODO(alkis): Remove this when we upgrade to a recent compiler that emits + // SSE2 moves for memcpy(dst, src, 16). +#ifdef __SSE2__ + __m128i x = _mm_loadu_si128(static_cast(src)); + _mm_storeu_si128(static_cast<__m128i*>(dst), x); +#else + memcpy(dst, src, 16); +#endif +} -namespace { +// Copy [src, src+(op_limit-op)) to [op, (op_limit-op)) a byte at a time. Used +// for handling COPY operations where the input and output regions may overlap. +// For example, suppose: +// src == "ab" +// op == src + 2 +// op_limit == op + 20 +// After IncrementalCopySlow(src, op, op_limit), the result will have eleven +// copies of "ab" +// ababababababababababab +// Note that this does not match the semantics of either memcpy() or memmove(). +inline char* IncrementalCopySlow(const char* src, char* op, + char* const op_limit) { + while (op < op_limit) { + *op++ = *src++; + } + return op_limit; +} -const int kMaxIncrementCopyOverflow = 10; +// Copy [src, src+(op_limit-op)) to [op, (op_limit-op)) but faster than +// IncrementalCopySlow. buf_limit is the address past the end of the writable +// region of the buffer. +inline char* IncrementalCopy(const char* src, char* op, char* const op_limit, + char* const buf_limit) { + // Terminology: + // + // slop = buf_limit - op + // pat = op - src + // len = limit - op + assert(src < op); + assert(op_limit <= buf_limit); + // NOTE: The compressor always emits 4 <= len <= 64. It is ok to assume that + // to optimize this function but we have to also handle these cases in case + // the input does not satisfy these conditions. + + size_t pattern_size = op - src; + // The cases are split into different branches to allow the branch predictor, + // FDO, and static prediction hints to work better. For each input we list the + // ratio of invocations that match each condition. + // + // input slop < 16 pat < 8 len > 16 + // ------------------------------------------ + // html|html4|cp 0% 1.01% 27.73% + // urls 0% 0.88% 14.79% + // jpg 0% 64.29% 7.14% + // pdf 0% 2.56% 58.06% + // txt[1-4] 0% 0.23% 0.97% + // pb 0% 0.96% 13.88% + // bin 0.01% 22.27% 41.17% + // + // It is very rare that we don't have enough slop for doing block copies. It + // is also rare that we need to expand a pattern. Small patterns are common + // for incompressible formats and for those we are plenty fast already. + // Lengths are normally not greater than 16 but they vary depending on the + // input. In general if we always predict len <= 16 it would be an ok + // prediction. + // + // In order to be fast we want a pattern >= 8 bytes and an unrolled loop + // copying 2x 8 bytes at a time. + + // Handle the uncommon case where pattern is less than 8 bytes. + if (PREDICT_FALSE(pattern_size < 8)) { + // Expand pattern to at least 8 bytes. The worse case scenario in terms of + // buffer usage is when the pattern is size 3. ^ is the original position + // of op. x are irrelevant bytes copied by the last UnalignedCopy64. + // + // abc + // abcabcxxxxx + // abcabcabcabcxxxxx + // ^ + // The last x is 14 bytes after ^. + if (PREDICT_TRUE(op <= buf_limit - 14)) { + while (pattern_size < 8) { + UnalignedCopy64(src, op); + op += pattern_size; + pattern_size *= 2; + } + if (PREDICT_TRUE(op >= op_limit)) return op_limit; + } else { + return IncrementalCopySlow(src, op, op_limit); + } + } + assert(pattern_size >= 8); -inline void IncrementalCopyFastPath(const char* src, char* op, ssize_t len) { - while (op - src < 8) { + // Copy 2x 8 bytes at a time. Because op - src can be < 16, a single + // UnalignedCopy128 might overwrite data in op. UnalignedCopy64 is safe + // because expanding the pattern to at least 8 bytes guarantees that + // op - src >= 8. + while (op <= buf_limit - 16) { UnalignedCopy64(src, op); - len -= op - src; - op += op - src; + UnalignedCopy64(src + 8, op + 8); + src += 16; + op += 16; + if (PREDICT_TRUE(op >= op_limit)) return op_limit; } - while (len > 0) { + // We only take this branch if we didn't have enough slop and we can do a + // single 8 byte copy. + if (PREDICT_FALSE(op <= buf_limit - 8)) { UnalignedCopy64(src, op); src += 8; op += 8; - len -= 8; } + return IncrementalCopySlow(src, op, op_limit); } } // namespace @@ -157,26 +214,29 @@ static inline char* EmitLiteral(char* op, const char* literal, int len, bool allow_fast_path) { - int n = len - 1; // Zero-length literals are disallowed - if (n < 60) { + // The vast majority of copies are below 16 bytes, for which a + // call to memcpy is overkill. This fast path can sometimes + // copy up to 15 bytes too much, but that is okay in the + // main loop, since we have a bit to go on for both sides: + // + // - The input will always have kInputMarginBytes = 15 extra + // available bytes, as long as we're in the main loop, and + // if not, allow_fast_path = false. + // - The output will always have 32 spare bytes (see + // MaxCompressedLength). + assert(len > 0); // Zero-length literals are disallowed + int n = len - 1; + if (allow_fast_path && len <= 16) { // Fits in tag byte *op++ = LITERAL | (n << 2); - // The vast majority of copies are below 16 bytes, for which a - // call to memcpy is overkill. This fast path can sometimes - // copy up to 15 bytes too much, but that is okay in the - // main loop, since we have a bit to go on for both sides: - // - // - The input will always have kInputMarginBytes = 15 extra - // available bytes, as long as we're in the main loop, and - // if not, allow_fast_path = false. - // - The output will always have 32 spare bytes (see - // MaxCompressedLength). - if (allow_fast_path && len <= 16) { - UnalignedCopy64(literal, op); - UnalignedCopy64(literal + 8, op + 8); - return op + len; - } + UnalignedCopy128(literal, op); + return op + len; + } + + if (n < 60) { + // Fits in tag byte + *op++ = LITERAL | (n << 2); } else { // Encode in upcoming bytes char* base = op; @@ -195,42 +255,54 @@ static inline char* EmitLiteral(char* op, return op + len; } -static inline char* EmitCopyLessThan64(char* op, size_t offset, int len) { +static inline char* EmitCopyAtMost64(char* op, size_t offset, size_t len, + bool len_less_than_12) { assert(len <= 64); assert(len >= 4); assert(offset < 65536); + assert(len_less_than_12 == (len < 12)); - if ((len < 12) && (offset < 2048)) { - size_t len_minus_4 = len - 4; - assert(len_minus_4 < 8); // Must fit in 3 bits - *op++ = COPY_1_BYTE_OFFSET + ((len_minus_4) << 2) + ((offset >> 8) << 5); + if (len_less_than_12 && PREDICT_TRUE(offset < 2048)) { + // offset fits in 11 bits. The 3 highest go in the top of the first byte, + // and the rest go in the second byte. + *op++ = COPY_1_BYTE_OFFSET + ((len - 4) << 2) + ((offset >> 3) & 0xe0); *op++ = offset & 0xff; } else { - *op++ = COPY_2_BYTE_OFFSET + ((len-1) << 2); - LittleEndian::Store16(op, offset); - op += 2; + // Write 4 bytes, though we only care about 3 of them. The output buffer + // is required to have some slack, so the extra byte won't overrun it. + uint32 u = COPY_2_BYTE_OFFSET + ((len - 1) << 2) + (offset << 8); + LittleEndian::Store32(op, u); + op += 3; } return op; } -static inline char* EmitCopy(char* op, size_t offset, int len) { - // Emit 64 byte copies but make sure to keep at least four bytes reserved - while (len >= 68) { - op = EmitCopyLessThan64(op, offset, 64); - len -= 64; - } +static inline char* EmitCopy(char* op, size_t offset, size_t len, + bool len_less_than_12) { + assert(len_less_than_12 == (len < 12)); + if (len_less_than_12) { + return EmitCopyAtMost64(op, offset, len, true); + } else { + // A special case for len <= 64 might help, but so far measurements suggest + // it's in the noise. - // Emit an extra 60 byte copy if have too much data to fit in one copy - if (len > 64) { - op = EmitCopyLessThan64(op, offset, 60); - len -= 60; - } + // Emit 64 byte copies but make sure to keep at least four bytes reserved. + while (PREDICT_FALSE(len >= 68)) { + op = EmitCopyAtMost64(op, offset, 64, false); + len -= 64; + } - // Emit remainder - op = EmitCopyLessThan64(op, offset, len); - return op; -} + // One or two copies will now finish the job. + if (len > 64) { + op = EmitCopyAtMost64(op, offset, 60, false); + len -= 60; + } + // Emit remainder. + op = EmitCopyAtMost64(op, offset, len, len < 12); + return op; + } +} bool GetUncompressedLength(const char* start, size_t n, size_t* result) { uint32 v = 0; @@ -245,29 +317,22 @@ bool GetUncompressedLength(const char* start, size_t n, size_t* result) { namespace internal { uint16* WorkingMemory::GetHashTable(size_t input_size, int* table_size) { - // Use smaller hash table when input.size() is smaller, since we - // fill the table, incurring O(hash table size) overhead for - // compression, and if the input is short, we won't need that - // many hash table entries anyway. - assert(kMaxHashTableSize >= 256); - size_t htsize = 256; - while (htsize < kMaxHashTableSize && htsize < input_size) { - htsize <<= 1; - } - - uint16* table; - if (htsize <= ARRAYSIZE(small_table_)) { - table = small_table_; + if (input_size > kMaxHashTableSize) { + *table_size = kMaxHashTableSize; + } else if (input_size < 256) { + *table_size = 256; } else { - if (large_table_ == NULL) { - large_table_ = new uint16[kMaxHashTableSize]; - } - table = large_table_; + // Since table size must be a power of 2, round up to the next power of 2. + *table_size = 1 << (std::numeric_limits::digits - + __builtin_clzll(input_size - 1)); } - - *table_size = htsize; - memset(table, 0, htsize * sizeof(*table)); - return table; + if (*table_size <= ARRAYSIZE(small_table_)) { + memset(small_table_, 0, 2 * *table_size); + return small_table_; + } + if (!large_table_) large_table_ = new uint16[kMaxHashTableSize]; + memset(large_table_, 0, 2 * *table_size); + return large_table_; } } // end namespace internal @@ -364,9 +429,9 @@ char* CompressFragment(const char* input, // // Heuristic match skipping: If 32 bytes are scanned with no matches // found, start looking only at every other byte. If 32 more bytes are - // scanned, look at every third byte, etc.. When a match is found, - // immediately go back to looking at every byte. This is a small loss - // (~5% performance, ~0.1% density) for compressible data due to more + // scanned (or skipped), look at every third byte, etc.. When a match is + // found, immediately go back to looking at every byte. This is a small + // loss (~5% performance, ~0.1% density) for compressible data due to more // bookkeeping, but for non-compressible data (such as JPEG) it's a huge // win since the compressor quickly "realizes" the data is incompressible // and doesn't bother looking for matches everywhere. @@ -382,7 +447,8 @@ char* CompressFragment(const char* input, ip = next_ip; uint32 hash = next_hash; assert(hash == Hash(ip, shift)); - uint32 bytes_between_hash_lookups = skip++ >> 5; + uint32 bytes_between_hash_lookups = skip >> 5; + skip += bytes_between_hash_lookups; next_ip = ip + bytes_between_hash_lookups; if (PREDICT_FALSE(next_ip > ip_limit)) { goto emit_remainder; @@ -417,19 +483,21 @@ char* CompressFragment(const char* input, // We have a 4-byte match at ip, and no need to emit any // "literal bytes" prior to ip. const char* base = ip; - int matched = 4 + FindMatchLength(candidate + 4, ip + 4, ip_end); + std::pair p = + FindMatchLength(candidate + 4, ip + 4, ip_end); + size_t matched = 4 + p.first; ip += matched; size_t offset = base - candidate; assert(0 == memcmp(base, candidate, matched)); - op = EmitCopy(op, offset, matched); - // We could immediately start working at ip now, but to improve - // compression we first update table[Hash(ip - 1, ...)]. - const char* insert_tail = ip - 1; + op = EmitCopy(op, offset, matched, p.second); next_emit = ip; if (PREDICT_FALSE(ip >= ip_limit)) { goto emit_remainder; } - input_bytes = GetEightBytesAt(insert_tail); + // We are now looking for a 4-byte match again. We read + // table[Hash(ip, shift)] for that. To improve compression, + // we also update table[Hash(ip - 1, shift)] and table[Hash(ip, shift)]. + input_bytes = GetEightBytesAt(ip - 1); uint32 prev_hash = HashBytes(GetUint32AtOffset(input_bytes, 0), shift); table[prev_hash] = ip - base_ip - 1; uint32 cur_hash = HashBytes(GetUint32AtOffset(input_bytes, 1), shift); @@ -493,162 +561,6 @@ char* CompressFragment(const char* input, // bool TryFastAppend(const char* ip, size_t available, size_t length); // }; -// ----------------------------------------------------------------------- -// Lookup table for decompression code. Generated by ComputeTable() below. -// ----------------------------------------------------------------------- - -// Mapping from i in range [0,4] to a mask to extract the bottom 8*i bits -static const uint32 wordmask[] = { - 0u, 0xffu, 0xffffu, 0xffffffu, 0xffffffffu -}; - -// Data stored per entry in lookup table: -// Range Bits-used Description -// ------------------------------------ -// 1..64 0..7 Literal/copy length encoded in opcode byte -// 0..7 8..10 Copy offset encoded in opcode byte / 256 -// 0..4 11..13 Extra bytes after opcode -// -// We use eight bits for the length even though 7 would have sufficed -// because of efficiency reasons: -// (1) Extracting a byte is faster than a bit-field -// (2) It properly aligns copy offset so we do not need a <<8 -static const uint16 char_table[256] = { - 0x0001, 0x0804, 0x1001, 0x2001, 0x0002, 0x0805, 0x1002, 0x2002, - 0x0003, 0x0806, 0x1003, 0x2003, 0x0004, 0x0807, 0x1004, 0x2004, - 0x0005, 0x0808, 0x1005, 0x2005, 0x0006, 0x0809, 0x1006, 0x2006, - 0x0007, 0x080a, 0x1007, 0x2007, 0x0008, 0x080b, 0x1008, 0x2008, - 0x0009, 0x0904, 0x1009, 0x2009, 0x000a, 0x0905, 0x100a, 0x200a, - 0x000b, 0x0906, 0x100b, 0x200b, 0x000c, 0x0907, 0x100c, 0x200c, - 0x000d, 0x0908, 0x100d, 0x200d, 0x000e, 0x0909, 0x100e, 0x200e, - 0x000f, 0x090a, 0x100f, 0x200f, 0x0010, 0x090b, 0x1010, 0x2010, - 0x0011, 0x0a04, 0x1011, 0x2011, 0x0012, 0x0a05, 0x1012, 0x2012, - 0x0013, 0x0a06, 0x1013, 0x2013, 0x0014, 0x0a07, 0x1014, 0x2014, - 0x0015, 0x0a08, 0x1015, 0x2015, 0x0016, 0x0a09, 0x1016, 0x2016, - 0x0017, 0x0a0a, 0x1017, 0x2017, 0x0018, 0x0a0b, 0x1018, 0x2018, - 0x0019, 0x0b04, 0x1019, 0x2019, 0x001a, 0x0b05, 0x101a, 0x201a, - 0x001b, 0x0b06, 0x101b, 0x201b, 0x001c, 0x0b07, 0x101c, 0x201c, - 0x001d, 0x0b08, 0x101d, 0x201d, 0x001e, 0x0b09, 0x101e, 0x201e, - 0x001f, 0x0b0a, 0x101f, 0x201f, 0x0020, 0x0b0b, 0x1020, 0x2020, - 0x0021, 0x0c04, 0x1021, 0x2021, 0x0022, 0x0c05, 0x1022, 0x2022, - 0x0023, 0x0c06, 0x1023, 0x2023, 0x0024, 0x0c07, 0x1024, 0x2024, - 0x0025, 0x0c08, 0x1025, 0x2025, 0x0026, 0x0c09, 0x1026, 0x2026, - 0x0027, 0x0c0a, 0x1027, 0x2027, 0x0028, 0x0c0b, 0x1028, 0x2028, - 0x0029, 0x0d04, 0x1029, 0x2029, 0x002a, 0x0d05, 0x102a, 0x202a, - 0x002b, 0x0d06, 0x102b, 0x202b, 0x002c, 0x0d07, 0x102c, 0x202c, - 0x002d, 0x0d08, 0x102d, 0x202d, 0x002e, 0x0d09, 0x102e, 0x202e, - 0x002f, 0x0d0a, 0x102f, 0x202f, 0x0030, 0x0d0b, 0x1030, 0x2030, - 0x0031, 0x0e04, 0x1031, 0x2031, 0x0032, 0x0e05, 0x1032, 0x2032, - 0x0033, 0x0e06, 0x1033, 0x2033, 0x0034, 0x0e07, 0x1034, 0x2034, - 0x0035, 0x0e08, 0x1035, 0x2035, 0x0036, 0x0e09, 0x1036, 0x2036, - 0x0037, 0x0e0a, 0x1037, 0x2037, 0x0038, 0x0e0b, 0x1038, 0x2038, - 0x0039, 0x0f04, 0x1039, 0x2039, 0x003a, 0x0f05, 0x103a, 0x203a, - 0x003b, 0x0f06, 0x103b, 0x203b, 0x003c, 0x0f07, 0x103c, 0x203c, - 0x0801, 0x0f08, 0x103d, 0x203d, 0x1001, 0x0f09, 0x103e, 0x203e, - 0x1801, 0x0f0a, 0x103f, 0x203f, 0x2001, 0x0f0b, 0x1040, 0x2040 -}; - -// In debug mode, allow optional computation of the table at startup. -// Also, check that the decompression table is correct. -#ifndef NDEBUG -DEFINE_bool(snappy_dump_decompression_table, false, - "If true, we print the decompression table at startup."); - -static uint16 MakeEntry(unsigned int extra, - unsigned int len, - unsigned int copy_offset) { - // Check that all of the fields fit within the allocated space - assert(extra == (extra & 0x7)); // At most 3 bits - assert(copy_offset == (copy_offset & 0x7)); // At most 3 bits - assert(len == (len & 0x7f)); // At most 7 bits - return len | (copy_offset << 8) | (extra << 11); -} - -static void ComputeTable() { - uint16 dst[256]; - - // Place invalid entries in all places to detect missing initialization - int assigned = 0; - for (int i = 0; i < 256; i++) { - dst[i] = 0xffff; - } - - // Small LITERAL entries. We store (len-1) in the top 6 bits. - for (unsigned int len = 1; len <= 60; len++) { - dst[LITERAL | ((len-1) << 2)] = MakeEntry(0, len, 0); - assigned++; - } - - // Large LITERAL entries. We use 60..63 in the high 6 bits to - // encode the number of bytes of length info that follow the opcode. - for (unsigned int extra_bytes = 1; extra_bytes <= 4; extra_bytes++) { - // We set the length field in the lookup table to 1 because extra - // bytes encode len-1. - dst[LITERAL | ((extra_bytes+59) << 2)] = MakeEntry(extra_bytes, 1, 0); - assigned++; - } - - // COPY_1_BYTE_OFFSET. - // - // The tag byte in the compressed data stores len-4 in 3 bits, and - // offset/256 in 5 bits. offset%256 is stored in the next byte. - // - // This format is used for length in range [4..11] and offset in - // range [0..2047] - for (unsigned int len = 4; len < 12; len++) { - for (unsigned int offset = 0; offset < 2048; offset += 256) { - dst[COPY_1_BYTE_OFFSET | ((len-4)<<2) | ((offset>>8)<<5)] = - MakeEntry(1, len, offset>>8); - assigned++; - } - } - - // COPY_2_BYTE_OFFSET. - // Tag contains len-1 in top 6 bits, and offset in next two bytes. - for (unsigned int len = 1; len <= 64; len++) { - dst[COPY_2_BYTE_OFFSET | ((len-1)<<2)] = MakeEntry(2, len, 0); - assigned++; - } - - // COPY_4_BYTE_OFFSET. - // Tag contents len-1 in top 6 bits, and offset in next four bytes. - for (unsigned int len = 1; len <= 64; len++) { - dst[COPY_4_BYTE_OFFSET | ((len-1)<<2)] = MakeEntry(4, len, 0); - assigned++; - } - - // Check that each entry was initialized exactly once. - if (assigned != 256) { - fprintf(stderr, "ComputeTable: assigned only %d of 256\n", assigned); - abort(); - } - for (int i = 0; i < 256; i++) { - if (dst[i] == 0xffff) { - fprintf(stderr, "ComputeTable: did not assign byte %d\n", i); - abort(); - } - } - - if (FLAGS_snappy_dump_decompression_table) { - printf("static const uint16 char_table[256] = {\n "); - for (int i = 0; i < 256; i++) { - printf("0x%04x%s", - dst[i], - ((i == 255) ? "\n" : (((i%8) == 7) ? ",\n " : ", "))); - } - printf("};\n"); - } - - // Check that computed table matched recorded table - for (int i = 0; i < 256; i++) { - if (dst[i] != char_table[i]) { - fprintf(stderr, "ComputeTable: byte %d: computed (%x), expect (%x)\n", - i, static_cast(dst[i]), static_cast(char_table[i])); - abort(); - } - } -} -#endif /* !NDEBUG */ // Helper class for decompression class SnappyDecompressor { @@ -701,7 +613,9 @@ class SnappyDecompressor { if (n == 0) return false; const unsigned char c = *(reinterpret_cast(ip)); reader_->Skip(1); - *result |= static_cast(c & 0x7f) << shift; + uint32 val = c & 0x7f; + if (((val << shift) >> shift) != val) return false; + *result |= val << shift; if (c < 128) { break; } @@ -715,6 +629,10 @@ class SnappyDecompressor { template void DecompressAllTags(Writer* writer) { const char* ip = ip_; + // For position-independent executables, accessing global arrays can be + // slow. Move wordmask array onto the stack to mitigate this. + uint32 wordmask[sizeof(internal::wordmask)/sizeof(uint32)]; + memcpy(wordmask, internal::wordmask, sizeof(wordmask)); // We could have put this refill fragment only at the beginning of the loop. // However, duplicating it at the end of each branch gives the compiler more @@ -731,7 +649,19 @@ class SnappyDecompressor { for ( ;; ) { const unsigned char c = *(reinterpret_cast(ip++)); - if ((c & 0x3) == LITERAL) { + // Ratio of iterations that have LITERAL vs non-LITERAL for different + // inputs. + // + // input LITERAL NON_LITERAL + // ----------------------------------- + // html|html4|cp 23% 77% + // urls 36% 64% + // jpg 47% 53% + // pdf 19% 81% + // txt[1-4] 25% 75% + // pb 24% 76% + // bin 24% 76% + if (PREDICT_FALSE((c & 0x3) == LITERAL)) { size_t literal_length = (c >> 2) + 1u; if (writer->TryFastAppend(ip, ip_limit_ - ip, literal_length)) { assert(literal_length < 61); @@ -767,15 +697,15 @@ class SnappyDecompressor { ip += literal_length; MAYBE_REFILL(); } else { - const uint32 entry = char_table[c]; - const uint32 trailer = LittleEndian::Load32(ip) & wordmask[entry >> 11]; - const uint32 length = entry & 0xff; + const size_t entry = char_table[c]; + const size_t trailer = LittleEndian::Load32(ip) & wordmask[entry >> 11]; + const size_t length = entry & 0xff; ip += entry >> 11; // copy_offset/256 is encoded in bits 8..10. By just fetching // those bits, we get copy_offset (since the bit-field starts at // bit 8). - const uint32 copy_offset = entry & 0x700; + const size_t copy_offset = entry & 0x700; if (!writer->AppendFromSelf(copy_offset + trailer, length)) { return; } @@ -795,10 +725,8 @@ bool SnappyDecompressor::RefillTag() { size_t n; ip = reader_->Peek(&n); peeked_ = n; - if (n == 0) { - eof_ = true; - return false; - } + eof_ = (n == 0); + if (eof_) return false; ip_limit_ = ip + n; } @@ -863,6 +791,7 @@ static bool InternalUncompressAllTags(SnappyDecompressor* decompressor, // Process the entire input decompressor->DecompressAllTags(writer); + writer->Flush(); return (decompressor->eof() && writer->CheckLength()); } @@ -965,7 +894,7 @@ class SnappyIOVecWriter { const size_t output_iov_count_; // We are currently writing into output_iov_[curr_iov_index_]. - int curr_iov_index_; + size_t curr_iov_index_; // Bytes written to output_iov_[curr_iov_index_] so far. size_t curr_iov_written_; @@ -976,7 +905,7 @@ class SnappyIOVecWriter { // Maximum number of bytes that will be decompressed into output_iov_. size_t output_limit_; - inline char* GetIOVecPointer(int index, size_t offset) { + inline char* GetIOVecPointer(size_t index, size_t offset) { return reinterpret_cast(output_iov_[index].iov_base) + offset; } @@ -1037,8 +966,7 @@ class SnappyIOVecWriter { output_iov_[curr_iov_index_].iov_len - curr_iov_written_ >= 16) { // Fast path, used for the majority (about 95%) of invocations. char* ptr = GetIOVecPointer(curr_iov_index_, curr_iov_written_); - UnalignedCopy64(ip, ptr); - UnalignedCopy64(ip + 8, ptr + 8); + UnalignedCopy128(ip, ptr); curr_iov_written_ += len; total_written_ += len; return true; @@ -1057,7 +985,7 @@ class SnappyIOVecWriter { } // Locate the iovec from which we need to start the copy. - int from_iov_index = curr_iov_index_; + size_t from_iov_index = curr_iov_index_; size_t from_iov_offset = curr_iov_written_; while (offset > 0) { if (from_iov_offset >= offset) { @@ -1066,8 +994,8 @@ class SnappyIOVecWriter { } offset -= from_iov_offset; + assert(from_iov_index > 0); --from_iov_index; - assert(from_iov_index >= 0); from_iov_offset = output_iov_[from_iov_index].iov_len; } @@ -1102,9 +1030,10 @@ class SnappyIOVecWriter { if (to_copy > len) { to_copy = len; } - IncrementalCopy(GetIOVecPointer(from_iov_index, from_iov_offset), - GetIOVecPointer(curr_iov_index_, curr_iov_written_), - to_copy); + IncrementalCopySlow( + GetIOVecPointer(from_iov_index, from_iov_offset), + GetIOVecPointer(curr_iov_index_, curr_iov_written_), + GetIOVecPointer(curr_iov_index_, curr_iov_written_) + to_copy); curr_iov_written_ += to_copy; from_iov_offset += to_copy; total_written_ += to_copy; @@ -1115,6 +1044,7 @@ class SnappyIOVecWriter { return true; } + inline void Flush() {} }; bool RawUncompressToIOVec(const char* compressed, size_t compressed_length, @@ -1145,7 +1075,8 @@ class SnappyArrayWriter { public: inline explicit SnappyArrayWriter(char* dst) : base_(dst), - op_(dst) { + op_(dst), + op_limit_(dst) { } inline void SetExpectedLength(size_t len) { @@ -1172,8 +1103,7 @@ class SnappyArrayWriter { const size_t space_left = op_limit_ - op; if (len <= 16 && available >= 16 + kMaximumTagLength && space_left >= 16) { // Fast path, used for the majority (about 95%) of invocations. - UnalignedCopy64(ip, op); - UnalignedCopy64(ip + 8, op + 8); + UnalignedCopy128(ip, op); op_ = op + len; return true; } else { @@ -1182,8 +1112,7 @@ class SnappyArrayWriter { } inline bool AppendFromSelf(size_t offset, size_t len) { - char* op = op_; - const size_t space_left = op_limit_ - op; + char* const op_end = op_ + len; // Check if we try to append from before the start of the buffer. // Normally this would just be a check for "produced < offset", @@ -1192,29 +1121,16 @@ class SnappyArrayWriter { // to a very big number. This is convenient, as offset==0 is another // invalid case that we also want to catch, so that we do not go // into an infinite loop. - assert(op >= base_); - size_t produced = op - base_; - if (produced <= offset - 1u) { - return false; - } - if (len <= 16 && offset >= 8 && space_left >= 16) { - // Fast path, used for the majority (70-80%) of dynamic invocations. - UnalignedCopy64(op - offset, op); - UnalignedCopy64(op - offset + 8, op + 8); - } else { - if (space_left >= len + kMaxIncrementCopyOverflow) { - IncrementalCopyFastPath(op - offset, op, len); - } else { - if (space_left < len) { - return false; - } - IncrementalCopy(op - offset, op, len); - } - } + if (Produced() <= offset - 1u || op_end > op_limit_) return false; + op_ = IncrementalCopy(op_ - offset, op_, op_end, op_limit_); - op_ = op + len; return true; } + inline size_t Produced() const { + assert(op_ >= base_); + return op_ - base_; + } + inline void Flush() {} }; bool RawUncompress(const char* compressed, size_t n, char* uncompressed) { @@ -1241,7 +1157,6 @@ bool Uncompress(const char* compressed, size_t n, string* uncompressed) { return RawUncompress(compressed, n, string_as_array(uncompressed)); } - // A Writer that drops everything on the floor and just does validation class SnappyDecompressionValidator { private: @@ -1249,7 +1164,7 @@ class SnappyDecompressionValidator { size_t produced_; public: - inline SnappyDecompressionValidator() : produced_(0) { } + inline SnappyDecompressionValidator() : expected_(0), produced_(0) { } inline void SetExpectedLength(size_t len) { expected_ = len; } @@ -1270,6 +1185,7 @@ class SnappyDecompressionValidator { produced_ += len; return produced_ <= expected_; } + inline void Flush() {} }; bool IsValidCompressedBuffer(const char* compressed, size_t n) { @@ -1278,6 +1194,11 @@ bool IsValidCompressedBuffer(const char* compressed, size_t n) { return InternalUncompress(&reader, &writer); } +bool IsValidCompressed(Source* compressed) { + SnappyDecompressionValidator writer; + return InternalUncompress(compressed, &writer); +} + void RawCompress(const char* input, size_t input_length, char* compressed, @@ -1292,7 +1213,7 @@ void RawCompress(const char* input, size_t Compress(const char* input, size_t input_length, string* compressed) { // Pre-grow the buffer to the max length of the compressed output - compressed->resize(MaxCompressedLength(input_length)); + STLStringResizeUninitialized(compressed, MaxCompressedLength(input_length)); size_t compressed_length; RawCompress(input, input_length, string_as_array(compressed), @@ -1301,6 +1222,237 @@ size_t Compress(const char* input, size_t input_length, string* compressed) { return compressed_length; } +// ----------------------------------------------------------------------- +// Sink interface +// ----------------------------------------------------------------------- -} // end namespace snappy +// A type that decompresses into a Sink. The template parameter +// Allocator must export one method "char* Allocate(int size);", which +// allocates a buffer of "size" and appends that to the destination. +template +class SnappyScatteredWriter { + Allocator allocator_; + + // We need random access into the data generated so far. Therefore + // we keep track of all of the generated data as an array of blocks. + // All of the blocks except the last have length kBlockSize. + std::vector blocks_; + size_t expected_; + + // Total size of all fully generated blocks so far + size_t full_size_; + + // Pointer into current output block + char* op_base_; // Base of output block + char* op_ptr_; // Pointer to next unfilled byte in block + char* op_limit_; // Pointer just past block + + inline size_t Size() const { + return full_size_ + (op_ptr_ - op_base_); + } + + bool SlowAppend(const char* ip, size_t len); + bool SlowAppendFromSelf(size_t offset, size_t len); + + public: + inline explicit SnappyScatteredWriter(const Allocator& allocator) + : allocator_(allocator), + full_size_(0), + op_base_(NULL), + op_ptr_(NULL), + op_limit_(NULL) { + } + + inline void SetExpectedLength(size_t len) { + assert(blocks_.empty()); + expected_ = len; + } + + inline bool CheckLength() const { + return Size() == expected_; + } + + // Return the number of bytes actually uncompressed so far + inline size_t Produced() const { + return Size(); + } + + inline bool Append(const char* ip, size_t len) { + size_t avail = op_limit_ - op_ptr_; + if (len <= avail) { + // Fast path + memcpy(op_ptr_, ip, len); + op_ptr_ += len; + return true; + } else { + return SlowAppend(ip, len); + } + } + inline bool TryFastAppend(const char* ip, size_t available, size_t length) { + char* op = op_ptr_; + const int space_left = op_limit_ - op; + if (length <= 16 && available >= 16 + kMaximumTagLength && + space_left >= 16) { + // Fast path, used for the majority (about 95%) of invocations. + UnalignedCopy128(ip, op); + op_ptr_ = op + length; + return true; + } else { + return false; + } + } + + inline bool AppendFromSelf(size_t offset, size_t len) { + char* const op_end = op_ptr_ + len; + // See SnappyArrayWriter::AppendFromSelf for an explanation of + // the "offset - 1u" trick. + if (PREDICT_TRUE(offset - 1u < op_ptr_ - op_base_ && op_end <= op_limit_)) { + // Fast path: src and dst in current block. + op_ptr_ = IncrementalCopy(op_ptr_ - offset, op_ptr_, op_end, op_limit_); + return true; + } + return SlowAppendFromSelf(offset, len); + } + + // Called at the end of the decompress. We ask the allocator + // write all blocks to the sink. + inline void Flush() { allocator_.Flush(Produced()); } +}; + +template +bool SnappyScatteredWriter::SlowAppend(const char* ip, size_t len) { + size_t avail = op_limit_ - op_ptr_; + while (len > avail) { + // Completely fill this block + memcpy(op_ptr_, ip, avail); + op_ptr_ += avail; + assert(op_limit_ - op_ptr_ == 0); + full_size_ += (op_ptr_ - op_base_); + len -= avail; + ip += avail; + + // Bounds check + if (full_size_ + len > expected_) { + return false; + } + + // Make new block + size_t bsize = min(kBlockSize, expected_ - full_size_); + op_base_ = allocator_.Allocate(bsize); + op_ptr_ = op_base_; + op_limit_ = op_base_ + bsize; + blocks_.push_back(op_base_); + avail = bsize; + } + + memcpy(op_ptr_, ip, len); + op_ptr_ += len; + return true; +} + +template +bool SnappyScatteredWriter::SlowAppendFromSelf(size_t offset, + size_t len) { + // Overflow check + // See SnappyArrayWriter::AppendFromSelf for an explanation of + // the "offset - 1u" trick. + const size_t cur = Size(); + if (offset - 1u >= cur) return false; + if (expected_ - cur < len) return false; + + // Currently we shouldn't ever hit this path because Compress() chops the + // input into blocks and does not create cross-block copies. However, it is + // nice if we do not rely on that, since we can get better compression if we + // allow cross-block copies and thus might want to change the compressor in + // the future. + size_t src = cur - offset; + while (len-- > 0) { + char c = blocks_[src >> kBlockLog][src & (kBlockSize-1)]; + Append(&c, 1); + src++; + } + return true; +} + +class SnappySinkAllocator { + public: + explicit SnappySinkAllocator(Sink* dest): dest_(dest) {} + ~SnappySinkAllocator() {} + + char* Allocate(int size) { + Datablock block(new char[size], size); + blocks_.push_back(block); + return block.data; + } + + // We flush only at the end, because the writer wants + // random access to the blocks and once we hand the + // block over to the sink, we can't access it anymore. + // Also we don't write more than has been actually written + // to the blocks. + void Flush(size_t size) { + size_t size_written = 0; + size_t block_size; + for (int i = 0; i < blocks_.size(); ++i) { + block_size = min(blocks_[i].size, size - size_written); + dest_->AppendAndTakeOwnership(blocks_[i].data, block_size, + &SnappySinkAllocator::Deleter, NULL); + size_written += block_size; + } + blocks_.clear(); + } + + private: + struct Datablock { + char* data; + size_t size; + Datablock(char* p, size_t s) : data(p), size(s) {} + }; + + static void Deleter(void* arg, const char* bytes, size_t size) { + delete[] bytes; + } + + Sink* dest_; + std::vector blocks_; + + // Note: copying this object is allowed +}; + +size_t UncompressAsMuchAsPossible(Source* compressed, Sink* uncompressed) { + SnappySinkAllocator allocator(uncompressed); + SnappyScatteredWriter writer(allocator); + InternalUncompress(compressed, &writer); + return writer.Produced(); +} + +bool Uncompress(Source* compressed, Sink* uncompressed) { + // Read the uncompressed length from the front of the compressed input + SnappyDecompressor decompressor(compressed); + uint32 uncompressed_len = 0; + if (!decompressor.ReadUncompressedLength(&uncompressed_len)) { + return false; + } + + char c; + size_t allocated_size; + char* buf = uncompressed->GetAppendBufferVariable( + 1, uncompressed_len, &c, 1, &allocated_size); + + // If we can get a flat buffer, then use it, otherwise do block by block + // uncompression + if (allocated_size >= uncompressed_len) { + SnappyArrayWriter writer(buf); + bool result = InternalUncompressAllTags( + &decompressor, &writer, uncompressed_len); + uncompressed->Append(buf, writer.Produced()); + return result; + } else { + SnappySinkAllocator allocator(uncompressed); + SnappyScatteredWriter writer(allocator); + return InternalUncompressAllTags(&decompressor, &writer, uncompressed_len); + } +} + +} // end namespace snappy diff --git a/deps/snappy/snappy-1.1.1/snappy.h b/deps/snappy/snappy-1.1.4/snappy.h old mode 100644 new mode 100755 similarity index 88% rename from deps/snappy/snappy-1.1.1/snappy.h rename to deps/snappy/snappy-1.1.4/snappy.h index e879e794..4568db89 --- a/deps/snappy/snappy-1.1.1/snappy.h +++ b/deps/snappy/snappy-1.1.4/snappy.h @@ -36,8 +36,8 @@ // using BMDiff and then compressing the output of BMDiff with // Snappy. -#ifndef UTIL_SNAPPY_SNAPPY_H__ -#define UTIL_SNAPPY_SNAPPY_H__ +#ifndef THIRD_PARTY_SNAPPY_SNAPPY_H__ +#define THIRD_PARTY_SNAPPY_SNAPPY_H__ #include #include @@ -84,6 +84,18 @@ namespace snappy { bool Uncompress(const char* compressed, size_t compressed_length, string* uncompressed); + // Decompresses "compressed" to "*uncompressed". + // + // returns false if the message is corrupted and could not be decompressed + bool Uncompress(Source* compressed, Sink* uncompressed); + + // This routine uncompresses as much of the "compressed" as possible + // into sink. It returns the number of valid bytes added to sink + // (extra invalid bytes may have been added due to errors; the caller + // should ignore those). The emitted data typically has length + // GetUncompressedLength(), but may be shorter if an error is + // encountered. + size_t UncompressAsMuchAsPossible(Source* compressed, Sink* uncompressed); // ------------------------------------------------------------------------ // Lower-level character array based routines. May be useful for @@ -164,6 +176,14 @@ namespace snappy { bool IsValidCompressedBuffer(const char* compressed, size_t compressed_length); + // Returns true iff the contents of "compressed" can be uncompressed + // successfully. Does not return the uncompressed data. Takes + // time proportional to *compressed length, but is usually at least + // a factor of four faster than actual decompression. + // On success, consumes all of *compressed. On failure, consumes an + // unspecified prefix of *compressed. + bool IsValidCompressed(Source* compressed); + // The size of a compression block. Note that many parts of the compression // code assumes that kBlockSize <= 65536; in particular, the hash table // can only store 16-bit offsets, and EmitCopy() also assumes the offset @@ -180,5 +200,4 @@ namespace snappy { static const size_t kMaxHashTableSize = 1 << kMaxHashTableBits; } // end namespace snappy - -#endif // UTIL_SNAPPY_SNAPPY_H__ +#endif // THIRD_PARTY_SNAPPY_SNAPPY_H__ diff --git a/deps/snappy/snappy-1.1.4/snappy.pc.in b/deps/snappy/snappy-1.1.4/snappy.pc.in new file mode 100755 index 00000000..982d240a --- /dev/null +++ b/deps/snappy/snappy-1.1.4/snappy.pc.in @@ -0,0 +1,10 @@ +prefix=@prefix@ +exec_prefix=@exec_prefix@ +libdir=@libdir@ +includedir=@includedir@ + +Name: @PACKAGE@ +Description: A fast compression/decompression library +Version: @PACKAGE_VERSION@ +Libs: -L${libdir} -l@PACKAGE@ +Cflags: -I${includedir} diff --git a/deps/snappy/snappy-1.1.1/snappy_unittest.cc b/deps/snappy/snappy-1.1.4/snappy_unittest.cc old mode 100644 new mode 100755 similarity index 83% rename from deps/snappy/snappy-1.1.1/snappy_unittest.cc rename to deps/snappy/snappy-1.1.4/snappy_unittest.cc index 560d558c..ca95e0d8 --- a/deps/snappy/snappy-1.1.1/snappy_unittest.cc +++ b/deps/snappy/snappy-1.1.4/snappy_unittest.cc @@ -59,12 +59,14 @@ DEFINE_bool(fastlz, false, "Run FastLZ compression (http://www.fastlz.org/"); DEFINE_bool(snappy, true, "Run snappy compression"); - DEFINE_bool(write_compressed, false, "Write compressed versions of each file to .comp"); DEFINE_bool(write_uncompressed, false, "Write uncompressed versions of each file to .uncomp"); +DEFINE_bool(snappy_dump_decompression_table, false, + "If true, we print the decompression table during tests."); + namespace snappy { @@ -161,6 +163,7 @@ static size_t MinimumRequiredOutputSpace(size_t input_size, default: LOG(FATAL) << "Unknown compression type number " << comp; + return 0; } } @@ -278,7 +281,6 @@ static bool Compress(const char* input, size_t input_size, CompressorType comp, break; } - default: { return false; // the asked-for library wasn't compiled in } @@ -370,7 +372,6 @@ static bool Uncompress(const string& compressed, CompressorType comp, break; } - default: { return false; // the asked-for library wasn't compiled in } @@ -392,10 +393,10 @@ static void Measure(const char* data, { // Chop the input into blocks int num_blocks = (length + block_size - 1) / block_size; - vector input(num_blocks); - vector input_length(num_blocks); - vector compressed(num_blocks); - vector output(num_blocks); + std::vector input(num_blocks); + std::vector input_length(num_blocks); + std::vector compressed(num_blocks); + std::vector output(num_blocks); for (int b = 0; b < num_blocks; b++) { int input_start = b * block_size; int input_limit = min((b+1)*block_size, length); @@ -448,7 +449,7 @@ static void Measure(const char* data, } compressed_size = 0; - for (int i = 0; i < compressed.size(); i++) { + for (size_t i = 0; i < compressed.size(); i++) { compressed_size += compressed[i].size(); } } @@ -474,7 +475,6 @@ static void Measure(const char* data, urate.c_str()); } - static int VerifyString(const string& input) { string compressed; DataEndingAtUnreadablePage i(input); @@ -491,6 +491,23 @@ static int VerifyString(const string& input) { return uncompressed.size(); } +static void VerifyStringSink(const string& input) { + string compressed; + DataEndingAtUnreadablePage i(input); + const size_t written = snappy::Compress(i.data(), i.size(), &compressed); + CHECK_EQ(written, compressed.size()); + CHECK_LE(compressed.size(), + snappy::MaxCompressedLength(input.size())); + CHECK(snappy::IsValidCompressedBuffer(compressed.data(), compressed.size())); + + string uncompressed; + uncompressed.resize(input.size()); + snappy::UncheckedByteArraySink sink(string_as_array(&uncompressed)); + DataEndingAtUnreadablePage c(compressed); + snappy::ByteArraySource source(c.data(), c.size()); + CHECK(snappy::Uncompress(&source, &sink)); + CHECK_EQ(uncompressed, input); +} static void VerifyIOVec(const string& input) { string compressed; @@ -505,13 +522,13 @@ static void VerifyIOVec(const string& input) { // ranging from 1 to 10. char* buf = new char[input.size()]; ACMRandom rnd(input.size()); - int num = rnd.Next() % 10 + 1; + size_t num = rnd.Next() % 10 + 1; if (input.size() < num) { num = input.size(); } struct iovec* iov = new iovec[num]; int used_so_far = 0; - for (int i = 0; i < num; ++i) { + for (size_t i = 0; i < num; ++i) { iov[i].iov_base = buf + used_so_far; if (i == num - 1) { iov[i].iov_len = input.size() - used_so_far; @@ -562,6 +579,28 @@ static void VerifyNonBlockedCompression(const string& input) { CHECK(snappy::Uncompress(compressed.data(), compressed.size(), &uncomp_str)); CHECK_EQ(uncomp_str, input); + // Uncompress using source/sink + string uncomp_str2; + uncomp_str2.resize(input.size()); + snappy::UncheckedByteArraySink sink(string_as_array(&uncomp_str2)); + snappy::ByteArraySource source(compressed.data(), compressed.size()); + CHECK(snappy::Uncompress(&source, &sink)); + CHECK_EQ(uncomp_str2, input); + + // Uncompress into iovec + { + static const int kNumBlocks = 10; + struct iovec vec[kNumBlocks]; + const int block_size = 1 + input.size() / kNumBlocks; + string iovec_data(block_size * kNumBlocks, 'x'); + for (int i = 0; i < kNumBlocks; i++) { + vec[i].iov_base = string_as_array(&iovec_data) + i * block_size; + vec[i].iov_len = block_size; + } + CHECK(snappy::RawUncompressToIOVec(compressed.data(), compressed.size(), + vec, kNumBlocks)); + CHECK_EQ(string(iovec_data.data(), input.size()), input); + } } // Expand the input so that it is at least K times as big as block size @@ -580,6 +619,8 @@ static int Verify(const string& input) { // Compress using string based routines const int result = VerifyString(input); + // Verify using sink based routines + VerifyStringSink(input); VerifyNonBlockedCompression(input); VerifyIOVec(input); @@ -589,12 +630,9 @@ static int Verify(const string& input) { VerifyIOVec(input); } - return result; } -// This test checks to ensure that snappy doesn't coredump if it gets -// corrupted data. static bool IsValidCompressedBuffer(const string& c) { return snappy::IsValidCompressedBuffer(c.data(), c.size()); @@ -603,11 +641,13 @@ static bool Uncompress(const string& c, string* u) { return snappy::Uncompress(c.data(), c.size(), u); } -TYPED_TEST(CorruptedTest, VerifyCorrupted) { +// This test checks to ensure that snappy doesn't coredump if it gets +// corrupted data. +TEST(CorruptedTest, VerifyCorrupted) { string source = "making sure we don't crash with corrupted input"; VLOG(1) << source; string dest; - TypeParam uncmp; + string uncmp; snappy::Compress(source.data(), source.size(), &dest); // Mess around with the data. It's hard to simulate all possible @@ -616,19 +656,19 @@ TYPED_TEST(CorruptedTest, VerifyCorrupted) { dest[1]--; dest[3]++; // this really ought to fail. - CHECK(!IsValidCompressedBuffer(TypeParam(dest))); - CHECK(!Uncompress(TypeParam(dest), &uncmp)); + CHECK(!IsValidCompressedBuffer(dest)); + CHECK(!Uncompress(dest, &uncmp)); // This is testing for a security bug - a buffer that decompresses to 100k // but we lie in the snappy header and only reserve 0 bytes of memory :) source.resize(100000); - for (int i = 0; i < source.length(); ++i) { + for (size_t i = 0; i < source.length(); ++i) { source[i] = 'A'; } snappy::Compress(source.data(), source.size(), &dest); dest[0] = dest[1] = dest[2] = dest[3] = 0; - CHECK(!IsValidCompressedBuffer(TypeParam(dest))); - CHECK(!Uncompress(TypeParam(dest), &uncmp)); + CHECK(!IsValidCompressedBuffer(dest)); + CHECK(!Uncompress(dest, &uncmp)); if (sizeof(void *) == 4) { // Another security check; check a crazy big length can't DoS us with an @@ -637,20 +677,20 @@ TYPED_TEST(CorruptedTest, VerifyCorrupted) { // where 3 GB might be an acceptable allocation size, Uncompress() // attempts to decompress, and sometimes causes the test to run out of // memory. - dest[0] = dest[1] = dest[2] = dest[3] = 0xff; + dest[0] = dest[1] = dest[2] = dest[3] = '\xff'; // This decodes to a really large size, i.e., about 3 GB. dest[4] = 'k'; - CHECK(!IsValidCompressedBuffer(TypeParam(dest))); - CHECK(!Uncompress(TypeParam(dest), &uncmp)); + CHECK(!IsValidCompressedBuffer(dest)); + CHECK(!Uncompress(dest, &uncmp)); } else { LOG(WARNING) << "Crazy decompression lengths not checked on 64-bit build"; } // This decodes to about 2 MB; much smaller, but should still fail. - dest[0] = dest[1] = dest[2] = 0xff; + dest[0] = dest[1] = dest[2] = '\xff'; dest[3] = 0x00; - CHECK(!IsValidCompressedBuffer(TypeParam(dest))); - CHECK(!Uncompress(TypeParam(dest), &uncmp)); + CHECK(!IsValidCompressedBuffer(dest)); + CHECK(!Uncompress(dest, &uncmp)); // try reading stuff in from a bad file. for (int i = 1; i <= 3; ++i) { @@ -665,8 +705,8 @@ TYPED_TEST(CorruptedTest, VerifyCorrupted) { snappy::ByteArraySource source(data.data(), data.size()); CHECK(!snappy::GetUncompressedLength(&source, &ulen2) || (ulen2 < (1<<20))); - CHECK(!IsValidCompressedBuffer(TypeParam(data))); - CHECK(!Uncompress(TypeParam(data), &uncmp)); + CHECK(!IsValidCompressedBuffer(data)); + CHECK(!Uncompress(data, &uncmp)); } } @@ -764,7 +804,7 @@ TEST(Snappy, RandomData) { } string x; - int len = rnd.Uniform(4096); + size_t len = rnd.Uniform(4096); if (i < 100) { len = 65536 + rnd.Uniform(65536); } @@ -929,7 +969,6 @@ TEST(Snappy, IOVecCopyOverflow) { } } - static bool CheckUncompressedLength(const string& compressed, size_t* ulength) { const bool result1 = snappy::GetUncompressedLength(compressed.data(), @@ -956,11 +995,11 @@ TEST(SnappyCorruption, TruncatedVarint) { TEST(SnappyCorruption, UnterminatedVarint) { string compressed, uncompressed; size_t ulength; - compressed.push_back(128); - compressed.push_back(128); - compressed.push_back(128); - compressed.push_back(128); - compressed.push_back(128); + compressed.push_back('\x80'); + compressed.push_back('\x80'); + compressed.push_back('\x80'); + compressed.push_back('\x80'); + compressed.push_back('\x80'); compressed.push_back(10); CHECK(!CheckUncompressedLength(compressed, &ulength)); CHECK(!snappy::IsValidCompressedBuffer(compressed.data(), compressed.size())); @@ -968,6 +1007,20 @@ TEST(SnappyCorruption, UnterminatedVarint) { &uncompressed)); } +TEST(SnappyCorruption, OverflowingVarint) { + string compressed, uncompressed; + size_t ulength; + compressed.push_back('\xfb'); + compressed.push_back('\xff'); + compressed.push_back('\xff'); + compressed.push_back('\xff'); + compressed.push_back('\x7f'); + CHECK(!CheckUncompressedLength(compressed, &ulength)); + CHECK(!snappy::IsValidCompressedBuffer(compressed.data(), compressed.size())); + CHECK(!snappy::Uncompress(compressed.data(), compressed.size(), + &uncompressed)); +} + TEST(Snappy, ReadPastEndOfBuffer) { // Check that we do not read past end of input @@ -998,11 +1051,13 @@ TEST(Snappy, ZeroOffsetCopyValidation) { EXPECT_FALSE(snappy::IsValidCompressedBuffer(compressed, 4)); } - namespace { int TestFindMatchLength(const char* s1, const char *s2, unsigned length) { - return snappy::internal::FindMatchLength(s1, s2, s2 + length); + std::pair p = + snappy::internal::FindMatchLength(s1, s2, s2 + length); + CHECK_EQ(p.first < 8, p.second); + return p.first; } } // namespace @@ -1112,8 +1167,7 @@ TEST(Snappy, FindMatchLengthRandom) { } DataEndingAtUnreadablePage u(s); DataEndingAtUnreadablePage v(t); - int matched = snappy::internal::FindMatchLength( - u.data(), v.data(), v.data() + t.size()); + int matched = TestFindMatchLength(u.data(), v.data(), t.size()); if (matched == t.size()) { EXPECT_EQ(s, t); } else { @@ -1125,21 +1179,114 @@ TEST(Snappy, FindMatchLengthRandom) { } } +static uint16 MakeEntry(unsigned int extra, + unsigned int len, + unsigned int copy_offset) { + // Check that all of the fields fit within the allocated space + assert(extra == (extra & 0x7)); // At most 3 bits + assert(copy_offset == (copy_offset & 0x7)); // At most 3 bits + assert(len == (len & 0x7f)); // At most 7 bits + return len | (copy_offset << 8) | (extra << 11); +} + +// Check that the decompression table is correct, and optionally print out +// the computed one. +TEST(Snappy, VerifyCharTable) { + using snappy::internal::LITERAL; + using snappy::internal::COPY_1_BYTE_OFFSET; + using snappy::internal::COPY_2_BYTE_OFFSET; + using snappy::internal::COPY_4_BYTE_OFFSET; + using snappy::internal::char_table; + using snappy::internal::wordmask; + + uint16 dst[256]; + + // Place invalid entries in all places to detect missing initialization + int assigned = 0; + for (int i = 0; i < 256; i++) { + dst[i] = 0xffff; + } + + // Small LITERAL entries. We store (len-1) in the top 6 bits. + for (unsigned int len = 1; len <= 60; len++) { + dst[LITERAL | ((len-1) << 2)] = MakeEntry(0, len, 0); + assigned++; + } + + // Large LITERAL entries. We use 60..63 in the high 6 bits to + // encode the number of bytes of length info that follow the opcode. + for (unsigned int extra_bytes = 1; extra_bytes <= 4; extra_bytes++) { + // We set the length field in the lookup table to 1 because extra + // bytes encode len-1. + dst[LITERAL | ((extra_bytes+59) << 2)] = MakeEntry(extra_bytes, 1, 0); + assigned++; + } + + // COPY_1_BYTE_OFFSET. + // + // The tag byte in the compressed data stores len-4 in 3 bits, and + // offset/256 in 5 bits. offset%256 is stored in the next byte. + // + // This format is used for length in range [4..11] and offset in + // range [0..2047] + for (unsigned int len = 4; len < 12; len++) { + for (unsigned int offset = 0; offset < 2048; offset += 256) { + dst[COPY_1_BYTE_OFFSET | ((len-4)<<2) | ((offset>>8)<<5)] = + MakeEntry(1, len, offset>>8); + assigned++; + } + } + + // COPY_2_BYTE_OFFSET. + // Tag contains len-1 in top 6 bits, and offset in next two bytes. + for (unsigned int len = 1; len <= 64; len++) { + dst[COPY_2_BYTE_OFFSET | ((len-1)<<2)] = MakeEntry(2, len, 0); + assigned++; + } + + // COPY_4_BYTE_OFFSET. + // Tag contents len-1 in top 6 bits, and offset in next four bytes. + for (unsigned int len = 1; len <= 64; len++) { + dst[COPY_4_BYTE_OFFSET | ((len-1)<<2)] = MakeEntry(4, len, 0); + assigned++; + } + + // Check that each entry was initialized exactly once. + EXPECT_EQ(256, assigned) << "Assigned only " << assigned << " of 256"; + for (int i = 0; i < 256; i++) { + EXPECT_NE(0xffff, dst[i]) << "Did not assign byte " << i; + } + + if (FLAGS_snappy_dump_decompression_table) { + printf("static const uint16 char_table[256] = {\n "); + for (int i = 0; i < 256; i++) { + printf("0x%04x%s", + dst[i], + ((i == 255) ? "\n" : (((i%8) == 7) ? ",\n " : ", "))); + } + printf("};\n"); + } + + // Check that computed table matched recorded table. + for (int i = 0; i < 256; i++) { + EXPECT_EQ(dst[i], char_table[i]) << "Mismatch in byte " << i; + } +} static void CompressFile(const char* fname) { string fullinput; - file::GetContents(fname, &fullinput, file::Defaults()).CheckSuccess(); + CHECK_OK(file::GetContents(fname, &fullinput, file::Defaults())); string compressed; Compress(fullinput.data(), fullinput.size(), SNAPPY, &compressed, false); - file::SetContents(string(fname).append(".comp"), compressed, file::Defaults()) - .CheckSuccess(); + CHECK_OK(file::SetContents(string(fname).append(".comp"), compressed, + file::Defaults())); } static void UncompressFile(const char* fname) { string fullinput; - file::GetContents(fname, &fullinput, file::Defaults()).CheckSuccess(); + CHECK_OK(file::GetContents(fname, &fullinput, file::Defaults())); size_t uncompLength; CHECK(CheckUncompressedLength(fullinput, &uncompLength)); @@ -1148,13 +1295,13 @@ static void UncompressFile(const char* fname) { uncompressed.resize(uncompLength); CHECK(snappy::Uncompress(fullinput.data(), fullinput.size(), &uncompressed)); - file::SetContents(string(fname).append(".uncomp"), uncompressed, - file::Defaults()).CheckSuccess(); + CHECK_OK(file::SetContents(string(fname).append(".uncomp"), uncompressed, + file::Defaults())); } static void MeasureFile(const char* fname) { string fullinput; - file::GetContents(fname, &fullinput, file::Defaults()).CheckSuccess(); + CHECK_OK(file::GetContents(fname, &fullinput, file::Defaults())); printf("%-40s :\n", fname); int start_len = (FLAGS_start_len < 0) ? fullinput.size() : FLAGS_start_len; @@ -1191,23 +1338,14 @@ static struct { } files[] = { { "html", "html", 0 }, { "urls", "urls.10K", 0 }, - { "jpg", "house.jpg", 0 }, - { "jpg_200", "house.jpg", 200 }, - { "pdf", "mapreduce-osdi-1.pdf", 0 }, + { "jpg", "fireworks.jpeg", 0 }, + { "jpg_200", "fireworks.jpeg", 200 }, + { "pdf", "paper-100k.pdf", 0 }, { "html4", "html_x_4", 0 }, - { "cp", "cp.html", 0 }, - { "c", "fields.c", 0 }, - { "lsp", "grammar.lsp", 0 }, - { "xls", "kennedy.xls", 0 }, - { "xls_200", "kennedy.xls", 200 }, { "txt1", "alice29.txt", 0 }, { "txt2", "asyoulik.txt", 0 }, { "txt3", "lcet10.txt", 0 }, { "txt4", "plrabn12.txt", 0 }, - { "bin", "ptt5", 0 }, - { "bin_200", "ptt5", 200 }, - { "sum", "sum", 0 }, - { "man", "xargs.1", 0 }, { "pb", "geo.protodata", 0 }, { "gaviota", "kppkn.gtb", 0 }, }; @@ -1307,6 +1445,37 @@ static void BM_UIOVec(int iters, int arg) { } BENCHMARK(BM_UIOVec)->DenseRange(0, 4); +static void BM_UFlatSink(int iters, int arg) { + StopBenchmarkTiming(); + + // Pick file to process based on "arg" + CHECK_GE(arg, 0); + CHECK_LT(arg, ARRAYSIZE(files)); + string contents = ReadTestDataFile(files[arg].filename, + files[arg].size_limit); + + string zcontents; + snappy::Compress(contents.data(), contents.size(), &zcontents); + char* dst = new char[contents.size()]; + + SetBenchmarkBytesProcessed(static_cast(iters) * + static_cast(contents.size())); + SetBenchmarkLabel(files[arg].label); + StartBenchmarkTiming(); + while (iters-- > 0) { + snappy::ByteArraySource source(zcontents.data(), zcontents.size()); + snappy::UncheckedByteArraySink sink(dst); + CHECK(snappy::Uncompress(&source, &sink)); + } + StopBenchmarkTiming(); + + string s(dst, contents.size()); + CHECK_EQ(contents, s); + + delete[] dst; +} + +BENCHMARK(BM_UFlatSink)->DenseRange(0, ARRAYSIZE(files) - 1); static void BM_ZFlat(int iters, int arg) { StopBenchmarkTiming(); @@ -1338,16 +1507,13 @@ static void BM_ZFlat(int iters, int arg) { } BENCHMARK(BM_ZFlat)->DenseRange(0, ARRAYSIZE(files) - 1); - } // namespace snappy int main(int argc, char** argv) { InitGoogle(argv[0], &argc, &argv, true); - File::Init(); RunSpecifiedBenchmarks(); - if (argc >= 2) { for (int arg = 1; arg < argc; arg++) { if (FLAGS_write_compressed) { diff --git a/deps/snappy/snappy-1.1.4/test-driver b/deps/snappy/snappy-1.1.4/test-driver new file mode 100755 index 00000000..d3060566 --- /dev/null +++ b/deps/snappy/snappy-1.1.4/test-driver @@ -0,0 +1,139 @@ +#! /bin/sh +# test-driver - basic testsuite driver script. + +scriptversion=2013-07-13.22; # UTC + +# Copyright (C) 2011-2013 Free Software Foundation, Inc. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# This file is maintained in Automake, please report +# bugs to or send patches to +# . + +# Make unconditional expansion of undefined variables an error. This +# helps a lot in preventing typo-related bugs. +set -u + +usage_error () +{ + echo "$0: $*" >&2 + print_usage >&2 + exit 2 +} + +print_usage () +{ + cat <$log_file 2>&1 +estatus=$? +if test $enable_hard_errors = no && test $estatus -eq 99; then + estatus=1 +fi + +case $estatus:$expect_failure in + 0:yes) col=$red res=XPASS recheck=yes gcopy=yes;; + 0:*) col=$grn res=PASS recheck=no gcopy=no;; + 77:*) col=$blu res=SKIP recheck=no gcopy=yes;; + 99:*) col=$mgn res=ERROR recheck=yes gcopy=yes;; + *:yes) col=$lgn res=XFAIL recheck=no gcopy=yes;; + *:*) col=$red res=FAIL recheck=yes gcopy=yes;; +esac + +# Report outcome to console. +echo "${col}${res}${std}: $test_name" + +# Register the test result, and other relevant metadata. +echo ":test-result: $res" > $trs_file +echo ":global-test-result: $res" >> $trs_file +echo ":recheck: $recheck" >> $trs_file +echo ":copy-in-global-log: $gcopy" >> $trs_file + +# Local Variables: +# mode: shell-script +# sh-indentation: 2 +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-time-zone: "UTC" +# time-stamp-end: "; # UTC" +# End: diff --git a/deps/snappy/snappy-1.1.1/testdata/alice29.txt b/deps/snappy/snappy-1.1.4/testdata/alice29.txt old mode 100644 new mode 100755 similarity index 100% rename from deps/snappy/snappy-1.1.1/testdata/alice29.txt rename to deps/snappy/snappy-1.1.4/testdata/alice29.txt diff --git a/deps/snappy/snappy-1.1.1/testdata/asyoulik.txt b/deps/snappy/snappy-1.1.4/testdata/asyoulik.txt old mode 100644 new mode 100755 similarity index 100% rename from deps/snappy/snappy-1.1.1/testdata/asyoulik.txt rename to deps/snappy/snappy-1.1.4/testdata/asyoulik.txt diff --git a/deps/snappy/snappy-1.1.1/testdata/baddata1.snappy b/deps/snappy/snappy-1.1.4/testdata/baddata1.snappy old mode 100644 new mode 100755 similarity index 100% rename from deps/snappy/snappy-1.1.1/testdata/baddata1.snappy rename to deps/snappy/snappy-1.1.4/testdata/baddata1.snappy diff --git a/deps/snappy/snappy-1.1.1/testdata/baddata2.snappy b/deps/snappy/snappy-1.1.4/testdata/baddata2.snappy old mode 100644 new mode 100755 similarity index 100% rename from deps/snappy/snappy-1.1.1/testdata/baddata2.snappy rename to deps/snappy/snappy-1.1.4/testdata/baddata2.snappy diff --git a/deps/snappy/snappy-1.1.1/testdata/baddata3.snappy b/deps/snappy/snappy-1.1.4/testdata/baddata3.snappy old mode 100644 new mode 100755 similarity index 100% rename from deps/snappy/snappy-1.1.1/testdata/baddata3.snappy rename to deps/snappy/snappy-1.1.4/testdata/baddata3.snappy diff --git a/deps/snappy/snappy-1.1.4/testdata/fireworks.jpeg b/deps/snappy/snappy-1.1.4/testdata/fireworks.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..078cf1755dc0853e97ad30fc7af4d6af0b67047e GIT binary patch literal 123093 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
ma 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

3ZRBxkF?%H#_f~x|{{V*%h1A?S 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 AYXATM literal 0 HcmV?d00001 diff --git a/deps/snappy/snappy-1.1.1/testdata/geo.protodata b/deps/snappy/snappy-1.1.4/testdata/geo.protodata old mode 100644 new mode 100755 similarity index 100% rename from deps/snappy/snappy-1.1.1/testdata/geo.protodata rename to deps/snappy/snappy-1.1.4/testdata/geo.protodata diff --git a/deps/snappy/snappy-1.1.1/testdata/html b/deps/snappy/snappy-1.1.4/testdata/html old mode 100644 new mode 100755 similarity index 100% rename from deps/snappy/snappy-1.1.1/testdata/html rename to deps/snappy/snappy-1.1.4/testdata/html diff --git a/deps/snappy/snappy-1.1.1/testdata/html_x_4 b/deps/snappy/snappy-1.1.4/testdata/html_x_4 old mode 100644 new mode 100755 similarity index 100% rename from deps/snappy/snappy-1.1.1/testdata/html_x_4 rename to deps/snappy/snappy-1.1.4/testdata/html_x_4 diff --git a/deps/snappy/snappy-1.1.1/testdata/kppkn.gtb b/deps/snappy/snappy-1.1.4/testdata/kppkn.gtb old mode 100644 new mode 100755 similarity index 100% rename from deps/snappy/snappy-1.1.1/testdata/kppkn.gtb rename to deps/snappy/snappy-1.1.4/testdata/kppkn.gtb diff --git a/deps/snappy/snappy-1.1.1/testdata/lcet10.txt b/deps/snappy/snappy-1.1.4/testdata/lcet10.txt old mode 100644 new mode 100755 similarity index 100% rename from deps/snappy/snappy-1.1.1/testdata/lcet10.txt rename to deps/snappy/snappy-1.1.4/testdata/lcet10.txt diff --git a/deps/snappy/snappy-1.1.4/testdata/paper-100k.pdf b/deps/snappy/snappy-1.1.4/testdata/paper-100k.pdf new file mode 100755 index 0000000000000000000000000000000000000000..b3325e4a2bb578419d6c7fa412aaa78d493ff274 GIT binary patch literal 102400 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 f+ zlX9^PieC<^!9>kFuodT&$L|2zspjR&C5}S9EIn8;vn^B~dE2tc_DTD3K_r8o(TX>8 z%1sA$cf`xvj0Y8>_e|J1*=yuzT1@FR1;z%c+wt%M?yUv7Fz)WFcHB|9{DwY`sb{eZ z*ZYknw@&XdiAM6p}+Iy(mmp5AGz%GcAH@;-urTwVTVFlsM0R$ zY@BbvKM0_{RcixwUGn4S$mtQX6}8|v@3HdHY%hN>2JayG48iIOyuYy^Z`L@QMmW^I z$XCg?<98wkqt_7QVK53;AlVhBcKDJ+s;q_#WP!kVF=uI+Wsl7zbboqDEXh z*BK1OYHbUwkimABe1JkUJD`0j=Mm9@@$q;nnNc1!J*L&7F0W;=g&d)rk_twEsw17f z@SO|>J8YA8;%gEpdF1lJecLh`b!Z#?*^+GK3f+{(tT?UAbR5w*@=MmHEv z>qePj*STLauy4FGVBoBs>Qt9X0%qt)oy{XPstR9Vas`Q5*B8NiZRvtPLzX}ke9N@_ zX|%Zy?haOcFPV%og2+{I-IgP(snr1l4hUX!lN{O2ey_XB+@*V@?L>ld9^wpyBGQ)uM9${r&6$jpet>5TiZ*R=i5)tWiSs6 zm%|Gvv8?U~W+dxBt!T1pcQGJ}iF@Qw0<-{SWo`pFrxJ`J@ zkDOBI&@~&o`MRxd5yiSJ&NXRG(b06W3Y1Xhpc812QNbDyz62Df<{+r$ZkmTn;l)*; zP*A^Yf=anuI!rD$GR5X*P!D*@xo<}7&U}sRKF$j~7XZuXEXcOKAhtpe;I%ouHBd@H z^mUJ(h5S$-oC+8V#?~V&>E%OI5IhEk>n;b5olA7yYyc3-pb;-`@KleMWl*T!iocIm z+-GNJOP>r%xOI5R$r=bl@KaAShxdr^vU0YKZ@sTgBMQ(vupy&!Mj69^V`2l%%BCpE zJ3voI0@ddi9PV*)je>*eWLJA$fT=W&hcocDGuy5_gP;Xb{-BkU9QrC3#AK{l;G76X zk*^#t6g$Z;^ow8Y>zM1Y@#H4rhDieZFT}cwj-UEl?T)bC1UH?v!_7WmC^o*M7*Gxx zO{gbLLQzTk)FEYKsZ&%m&gV!sE2w1S1!B&n)6yLgh)7vs9nBQ`9GNQh`Vj)E4m`-U z2>}X;5C3wsEt8P8k7s;|Xq@Kxr{W4<-t<fYmhZY~es#^;Bcx1rGUSk^0NnIwQs?Pm<*G3iBlZUTsTOX+8hOAM*%&J-6fEUnJy z$K@_jA6HrZEUbukPKA+XF50QL z&e0_TivbDVCZZM$RaL~4aY?DBv8dM32CCEx+_m>_D1~!Uo%Foz1yb=0ctq7bx`5ai zEBT+LLIQzh7dKwWWSmigz-88IFR>BUiNrL;xdH24m)k*C>4p|$M!$tYiqJ6W5rELz zCdFyf;cHZVOMSFfRD&ZrcjBrcvU)RBlrs3b9l92Pk53Z#ISHd4@fLHaH}2ib9Ua>q z(u|L-WA8xoiVC%gCT?#U-=5)=g)Kb0hii^eOvDwNtpSH%<;h>A-Xf_()|OFtH#V$} z0;3KjsXsW~W7O}g`SR7^Rl;hic;>d|&2_Mprmoj}5Q<1ab;b>Ds%c`S*3H4AT*+6M zJgE$O=wPXFMk-%SE|;06V9bst9#0HD#~?PUJMlBQct)D-`=&`^5$HT^`<9{(LC5ThDG#N&!aCASA&S{mb{ zOW}O#j@CI4+bmYlFE0^}LF>nwus#S~W$AKrWwBZ$sin@>(mXe~zo623!750t3sb_n z;7MIRqCh9ubDkc*migj51QGR!^-Zqu$Os}TXw`>wL6tBb%Oe>ET^d6xL0Bo-j>0qE zIhq(=EN#KzD|Om^LMuWR>Mu~JQ562{0Tl57956ObWMmi;V73eB>T;4Kdv6vC`P36T zb(gC6El>^Wc)}K&dZ-k9-rO>dXI`lsegg!$J`0=q3LJKPS1)_^?vlf$FL0VmH`18B z_&_9eUl9!QpIA^-ob}6EI%5KXeL$*$lxku}sxm1}<)bTnVQt>s8Iy96d`USuFR;M+ zW%foDHoAVBUC)@Z8#l4MN`3GH$L{1FKQ6WLPN<&VrOfGQK!W5>HLNSN!N@a);J}#_ zaM5el_bvB`XGX9T5|#IjK4i16o^6iG9O5+Ufd-6y<|{borb&U;bS@oSgbWdf(}ics zA|;#^P+Z8bP&`iVH5KccPk3!Yq-e0%mpdEZRh#U`1DiWynWAU%_W3Z1Edq&e5n8*g zvY1sbrgithTS*p@pvEi6Fw!l3G7E-kPu&oTA?BGcUHyq8%lL?5)eEKWkUOk7~H-zp)Iwjm$zp@Z50}sFxMrj-@jzJq|UdJ0b2=zbRr&`#hYmqi7O! zBgX*P2u55y2Bc)tRxLgP79ms;JfVG>HyTt4)RwC# zKm~^-=ZsRv>2>2i6Xh!eg*Rem9g{LE2n5ht09|G7Rj@H29m3&9m~Dhmg1aofsjZAT zak<-{P<3ZrDD|iz(-I0_3Cne#RDOtKAkMg47{S4t({4sA@_26((=%t%So%U#s*@>- z#(dlg)j!u!Zf*bAx?nF@iDL5gkvRtzLvZeh&4E8fU?pss!)ZIUik&7U>kHa8gBRwM zYrM%b@>k=?=(@LD&aqf5qr$rJSb}cusEKI=y{W`{+QO{+8gt50pb!qZ^Og4ZBl{HY5i5hljq_v_26epcW14h~;t})EBT+9HAOv#+MjbDjj3f7|a-` zp2k`%xa5zm@2%xHeLBHzSjDeHQ&1?H+=SrI#MJGobo`#qptm{0^3gxZ=c0`FX|OWw zo;^F55r!(Ad|OUoZpUBw!e7t=@ANs={T*R_YP=#AA+-05MG5s$&56<68^$khtW8;L z&mqmxlo1@lmlaVfv1Z%Ietp^=tX5}naqHOBT{55F!(s@Ehbv7 z`K}Qs`N4F#hjw)uLi&*L`ua1E<1V|DLsPG(l8?c7gkt?m2y<5x_{QIVn?-3>5I>(3y6hUH|O@qoarL)g$LQXP9g$4>#?Y= zam(^;Ut|^zVh{A%%O<1Se9|oR3v@S%CLvnfO1urX@U=}AHavPPy{{t z?RzXnSEvfe2v8mz31_I$!w+{8)Bt!gmyEjXm2x!E>XFWPV+uRUbSAUQ)vXi0iD8>K z=#T@{hbb+i8%p!Dwf7gF!!!AtAlG1?Qze-8 z$N?9gIs|8!GPliqA6XtmR-f~YCQRt(ojEU1xRSZpJFUfFta_oI3bh!bR}CT!>0Jwy zsn!#AsL&Y2ia$=Ipt~(AyMFxeG!q-k0NANx1#^8&Gz&%!>l3V8ZjYzWV8`a%pB9Z* zH>YNxSinthSWx@`5eDxFE9tLvqMN2zLx6Ak;Kq+vJfKREr2d?MAZvXo(inV3S3HKa zinegp!YR)`EI<%iQ98*1dCP+ud6R+L=OD-In(BNKl>oV(IH5dq7MaHWIi5P6SY(J? z2n95^&qbbuA}w;0GoAs?HI1wc z7N@!EuN+W3&C2tx6vq+4!ScXfbFkw1pnED+J$I(X7~WlmXLg;&dZ3V zGuCmlA`reW#nT8xKiHdgIWtnp7^?(7TTQ)oajRIOO$m0ZahrbBc5}$qr+OGG%_xm7 z@#xCYwc?6#>q~ol@ZmnafcUK+7nL%;pyhxrdox?#* zXa%f23N8^dMNokOB*$V8CnNWmm_&_o@=rkv#MHv-`V-Nqf^G~Eye`r+@qjfG?QyzIOiW3^QteiUDT*x zT+~XfyOWYFqGVL1h$6+bqKtbBm~krMd79n3lFz@5b!A~lPbC8~aAW{o8eUl z)U@XsFlS2P(@Lj1jh@+yKs9yUHIP{Gb>-o$ofB1h{snfrb8~u#GlxN56KH}Pm($Y0 zo&!X%A((62rN>-+9l-z;9ao%He|N)Q$8Di$q!!lACHFzS zerRUQZU9s%sC&Z?KG!qURj+>A{FAqgjdkOA{#|#PqVQE7i!$s(^k!JK)8HzQ#{DLx zRZ1@>N$x_|;#Rw~We88aTJ_=!#33|86pesfJf**nuFC^D~P zIn7SCsV%G$K7ktfIuGp)Ivfpv81xXu%llJqilA{_(x73!N7<_h_6NN;ALh5Sj)hoT z_XVSOFT_EzIIo{>V0je*bt&;E*KUoPhqZlv3)0sp|bJ zv$I(}hukH3c8#6EAt6y3P7ySR&l?(7iE+`qaUt-Fai|*m2w`vWKdpdH^|W^`DDlvu z2HB`E4950RCg>H7)iOS1>o@-&;@$!%j;?DLorDNZ2*KUm9R>()L4rHM-7N%7uml2x z;5JB*;2vCp1|8hp2A3IJPxHR-|NY;8?pJlrt-4ir3aVzhckjLST5HRCR`=77mve-E z+FMs)G0_r^H;C&WZf3i_o4Fk>=au&1}1(JY`oLN$WB-Ix~q0bIUmv1;@o<5ye!?W1CIQnfZ z$^F^$f(2zrXo7uFhtwRKG)MkEkF}n!W~0ZqqKcE(ZeG@pGrh=6^tgl!CpXc?D@FEP zoerVrlj`6)h2G<7f8v5?Stt*v{;f|f_bgg&WNgxVn%o)o@E-`Pnm`sar= zvFKbAtf6@Wd)DeKbhkcxSTLyocdPeD+AaR^rJ4_t_h;M5BbJ0tW0c)^e5+n+o~A5% z{$KZ1gfyPJ6=`6T#uAQNx#G8+lml@eTkTB|hdv>y`d5r@?)7&t_z^a_`|wf76d25GIK!dS9^h z?2)YKR0&DSGp;;BR|UHn${bymeiH7n$3!=jBT0$(pNBd%#p>O)-cHdrer?w9-Z0(a zw;H-D-uems#NvQLKQT@mhx45+{b$4S8&QfM9WUuSKxvd zcitWGjmel$De3+=*l`Wps$=(k9LB*`(RQY5Opm18(?1a&Cx!o%c?Yr5@-xKl~ndFVV$sZ1VrMz)@>FqY}(Qy{e zqiZA`Fq^kKLcjL@bA4Syfk8-BPHPbsy;9IySp*NaKv!T%#@vN8+AwNgS}NN=^$_SB)+CHbRgAZ^Bl#{ZD=ejv2?-%{R!z@h&i zXgK~N%=qt=_ruTsnezV6TpK(9!Nxyi8vjPS@!wn<|Mz)tb{S3{3gGpxfAeneQV9G* zrNOSFVrpw)_Q3Zc?*LG2{6l2&|D@vpP6MyyGWa}tr z`_W-QW`wJ?xRG&qL0SK?Q;7BZ+^yr( zAg*B@&*q0xwGBVYRMu<91@yVRxq;1DCN=pbR-1ahs08iQ!tEn!6@>YRpLAg24+$ew z+viAREEpwWw)*5(D>$uL9~V^1h$cmy(lz=wAOj=g)ctPfUP3J|-?DDE?$UEgLo^7+ z+>?*9N}qpC;8DnqI(52E+2HPzoaBX|en=s+<#dU0zuy0(eTdAdh-6j2oy(fnCaLl;&&3*@LJ^O|R& zav?0Y9<9A^G$Y_WZ)-_FDtlptQTov0I4PTWEHCMs9b$|6UXRhqXb&{w!3d3*(rZ?c zSSg{)<;rMq7~etIMfF0hIzk6Si8n+9vA%0rV>(5jg;>9~y%-mRDBqJMB2x{r3Pva= zV7V*v{+{ORNbmmgi+Dp@oW6)SUu-o$KZ7c6P~ihzWD`Kt6796q8<N(@_rX2^q59Ein4!2$(?PJ(4fsCpo4=j zVy%;q^wSkXgn-*?oM5@m%v!Ogc2${4@*Ts7q7dCs^RyIXN9PYM-}s!TTv}(w*J#RN z(OX)heB$1fF!wEsG=pl$P#lsV;te$kQsr`O?ozNu>{e#*j^_jiuO=F8=lPu5@({Om z-uC2eIYy-!gyMjZkCbeB`I-LBEdNXTP&ReCe%t3LTKwQ|S6RZ5 z(P;G~%7-`H(%slFqL0FhSs0C6GxW>^=ltak$mAFWFK31i`LU)6l<}R1r@y{3tWhyT z%BTuwMd)awzmqBVZA=;z*>2u0Ov=RQV1Cl~0$b097W;VkD^7JbR|5w68aBvXk2|%4 zZTFqqtW+Y$vLr9dRaOkG^kYOK>d)z_--^~RHpfIeQJ<}_nm*Z6ur*Up>+D5l(n+%w zPn0cPptk>`-h4r^kU9_F3UU`1#ikaJ2!4i4u<|tz0KGuowe z&Xd55L4m1nl^d?**{q}vPfGdJ<^O@+O4lJFfv>NOGV6D^v)N<3Zb57Q?shR<2onBJKU5{+0> z&Q8DXd9@}G{(ZWkz$Gqgf`__wTqq2gYDs?5Kd`s+oCdy~$x8syIl$8Sf^>O0SS zwZEDa{xUF?qaUW*_2|`jm02A|mI+>F&qHFwdLNPcqW)XF6ek7KMo_4?plRw0+_{+D zz7})I6^Em5+N=i&FP_9SJiZ~wi|k>xw_A*TgZ-)l%>Dd;n{r@9VHalb`_+pLZ*2}t zy?3hpq;B|f9KG4!bp}DV3G&V6=WIC7tT){z%)0Ps9JJ7iP2Ug2JewMrC8^xt6mlA> zA0^VG@$Wj0rdfE@nRKJsxIhs#5*xj&>WVEzr`|*hFS0bM20a$2oX5M$w058r76H3_ z6UGz|eB3Ku>t8%0KpQ9&oY^F)7W%k4Xfp-->gh_6I!R$2h|uzlYByq@R#fvHLTSP6 z{Ww)G56{bC#gt_e%Ew&uz|HLy5{!kZ%158%zlM$Rvm`2b-ZI2|@gaz2ULg}G1n!<# zV+=UoH+u0gD;Ti^Vt ztIuf{zrM%quhuL1@bk7Zn=-1{+!ao|Lu5AvCnGg|7ClyN52h|0NB2hGpWr8o% zq;uOO;8qmt8z-2Ur?w~Vd9IAShk`)8=N4g3rW%h^(7yr*y%R3!D%gr064C6pT)YXmE$LaQF zMql|jRO1a7*E=de=CKrPcq;AV46X5nJc*E6!a~iC<#(tZ_KgmN_Gn-JY-o6-{vtE6 zR|j!movO+r-#MsgJV8fhcKzno>qWMgB{ORJF88aH(TK`?9iu(N;ri$Bk<>G_c2aw| z%|}Xs+m8pMl4(`d&+NiU}N;~rA>sLiR{Wd30*j?@?v#{D80qtC@kBB=eywS&B1l`}{$}kE5$gYywL@=hr zBPbP#gU~jP^U}6`7md=Vre(NTd_(W&+O0Iov+BA(9BAx;?rBA6!^gJ_H5$L0i3<9Q zS>g;)-wQ4#Qm`68aMdbGb2vJ%sK!@bU1e2XHaKZlSnFeo!0sO>_!rMw(k4G5Y*pL{ zQ8E(e!{kR1VI6FLk6e4KBPQLwe7A|u_ngx2ce?X(%-e>#yh0w$dj6>tgCEs0_w27D z<&CNDe07mgD+b+Y!thlX<&2-C5m9cC#)b&4_;))i61~3@fLoQMw+OJ|1SY&Qi`8y# zHEat?BZg?wM@xkhZ6gsMAhFvL=BwFDS(?gvZp@GdFT>+v#WL~jx~Ns3EmL=7mn3B5 zfvTy7+Ug;}CbNcqpdI+ph}e$9H$d8@epBUX~PuZ8cK zEv5jDSQjBof@eWbBSzjpu`<(Oxv6CUHxWaCUPG8~xoz&AC!9zB-gnfYe;MF8@;5UBT}Ho$^LCKWW9!I zo~H6@Tv9OCMS=SdYP6`82+!7v{71%H5f*V9^~h^+&qR0lcdbmh27#FEi*0&bRDy2c zA?1uFORL`3iHj7AFp@3qrw6oCoP^Ka2jh)<{fIn2$5*!vyAV!8xu#z}61~4WOSg~s zRwjX^B-(DykUx3N=HJB_aUo4Rmi=v7fOu!Hr6hDS`hEXP4HNB;rmku|vuT+2*Mn%k zqpIWZlUtunTl5vS5*+;Tl(vD})xB_e9`MzxT!zwNQ?5FS{A9M@*Q7uD>*cCH-sv8a zey=JhjaK95q;wA7K>EzF%;m-tB&l77_0HB$leU!4+zKH)0y7~oPsfx{CM&=*7dnSI z-y{3ww3oAS<98=Q1KN4J^3rrh`UuuM*F$e9j8;E-qCcWdOGI4@RgoSJtXq_Qy2{zI8q^5TIlJG9LR3ghEG&{@&b|<10tIpX?VYzbMkzAwn|NKR-fS zp5xq^3k59tg&P!XiLR(W&V4SUYp*T!Y`Lz=IrxPxTP%VLOYcR`wPcW)*RO8s_wQ^} zSGR|4Z8P%i%DmJMoRDZToKq=iQin5YFUCRZ2^Xb6Eu(f3#m>_^s{w85{1`r-!J%rwUdh09qr&rosM8Choa5(Mbg^{5#n@u{ zV&GJ2Pj}ZL^=-nIk(qZrFVH@|Rp`RI_YE?e4NhXyfVY%}##n7C1QtYc#@n%hcTXF1 zU2()IS9?^y#q~xrNZKV^)1q~e6zSLQNi98YOs@0dH3Sfpmco3?;hz6W~Qvi+I0Gq7+62 zxwva2ciP~78`HF1+o-zWmOb@)a|**`=~=+!Z=QAI3z@KM63no;az}%3>XFf>gKw@s z2Ir7`HGgM?;9`$4Y%OW|6O0CMwR7|CDHUr0LwG^I9jgz_Ie?vzAlj?t6_z&eN7w7+p@l->#(XoRAef|`eMBV+HgF8>t z`lI(-NHwX3G1l6zl~Ag|7l+J@%Ae4|fwE)=a`jGFtTP~ZMEU_o+q+(lAxD!)=iehQ z<8TRzIwmc~W8oA(>hxiO>WV=@4R~;2OjsN9p7O?=-SK01EJkH6wx{2vTa;Ao`};5) zwZO+I&(JX?4wmBYRdGHIG(4XvBg^XZtJf6{s?sLX9r>)PJq-}dfT51z{h0x{5xbUe zHF{(^7b2Ak-3LTI8YP+4`MN}X8(>|zWduUxc!e7@4v?j}&Ab1k(+4iu|A9LJoVNb~ zc4AleFm-<*;(gFOr{uqL!ZvG06aRmI0c)npo<8a|~;jMY{CH(H&CU*bj z!g~ytdWByF; z`r2Lkc(ti%75MM!V%B0YYLbY;qG$sZcF~*tr;hwLt?ggV@$g*Cf4yJ93E;H_egYJ? z77vff06hlScYy;E4~)R9+?*7wT)Z3rtuXL97=B(3!@tfcn>bjoE2%0dslH(rH}_QK zk>ru)6@1{wwQ{52V^?>#aL@v%hb2v%oWeE>;Cs6NdLGl4~HN? zZ2X^0q-|pku=#RvaC5Q$BL^oyhRiNu@}Sl|yVXAC`Kr)qb;AoP{R5XwK!6z`CE=+T0HJLlC!MtEx9kF~mum%y^> z=BYgr^)wes4vaO$L?46xUwxeU8W#?vgSOoZ{ebJbcMc8?x==QqSQGnCKQu2L*3g66 zazhl$68fw5J&V2oMP#-+!L3yDh6<;TKy36-M6da%zeryEUuT-U{a-k8OzqZ$J_XeU zJ7-OJizLA6LjjQpGOA#gPh&(uZL|Y0#1L}@OFz#m5UB0KfB}m2Yp!JTDM;YQt^X2? z%U&qmmKg*JJgzr@9Ll@|EjMWu#RE*4AP|2MBQ!%fAHkN+|9$sV4-E;FrdTJjn+#)5 zR2+N?0&#FDdHcU_hVIPmd-A37F37Rrp|PTaobgfzH#5U%5#T9npcXS%QwVvmepjAc z0ML>ND6mS01+PZiKuOzFH^GJnXqi(`1R7wU&YBnU2&9|{^WLwSH0PQ*Jh#*WE}#EY zwSM^#Ob%Lhtz;=`p42PRT3N_ryqeqB8hZo+eeIS;-1M4fKU_K$H+|^Ycy#cgxzx|A z-oRD}sCz^}5kl@rW5=w^f~Q9ST9#6p(i_{Z)}eqR^1^64^od@8K<`L~z5{*gpH-OL zt-*T+5_mgSqm^LsoD~UBSY|o|#y|0b{_7)*gxsH7WxcEjCWEfC`un#X~u^d3IAkTWR7;?NFV4pP>KoyF`6Sf|mdMh4E zs6gY^O5S(AqOEqgjx-%yRWrpRqfQ?PNI-#j-VlC6<9*M@1l&~1)8~H)4&pEX+~U6A zbfuevW&Xtc++Aqm4+s>dS2kr8;K?;!U;>yeboT_@T0XZwFZdX6Dwz5=S!54e9l%~I zLfViewF%RT;UN&{wq_ts;O$Rc1mMu<4$z^$*|{$tHnb-na=j*>+dpf8bZ$W&{4m2Z_(s8L;gyD?FSlxjuV9S|CfSJs*TE0 z*^17tZy9;{F>vbi0GA?20DNr)!r9LSxXtjAJzr6CC2CoQ4#Kv^w!yL=VbBj0LhtfM z+&F6!I1;F&Njw8N+rhyZ{L}V)^ja-*`zcIIjy- zzWjgj$;=N6dmj0BLG1$s%QbvMasTh1Q+tEEQ>|Cg+g2IAg^Yh4TTW>{A8LF!7IqkL zw0UY*@<@9KiPy{{AmDzYNP8AA8{m=wx2qAxw>{Mi8CEkL9YK5_i%wUr$=_#M7BBk1 z7Mx#BVm?&HQ{UPe?d{KS*o-I@%yzD6@x82kpGikjuV-d13auQjZ@u0!TPysl=;eYe zc_Q^KmFm^pl(8LQ9Um4JR+sqIobml;nXzw{csET{Y3R@`AUg)&sG!${Nyn*p1)>I7 zVt02~#}v0mw^)l!{v}E>)b7@o=zEOlK%u~x%bkg$CBG9F7C_FdjVcwnK+$_r8V)1|vB{&?V)ftNejH=>QLezzX=#+Zg8C+|L7P1Ha1>&G#V zxBu7pH+Ugq=}EBr4V3^#A&IB0(A`e3*u~o6eWu%AZR{{2ZU8webg!Hna1b{N)@jdL z11`rh4i67&5M#n3(0iaGL*kn0Xh5ADst@W{SofFOPD@}X3+84bcVD@G=wU7lG_PG| zWV4@tveBQo!6uMx<>Prk9&rEs?+XR;Rh~DuwmQkf#h{gdSL~x(jSGJE?1sT?RXB{n(qCd<@89XS~p4;?sC9ex8y%0dobd4XAG zJ<9B|iXym&9zVo808F|d4!ZnKS>xspr+}l$5Fo4U#ewfT&cztY>}U=O(<}l{>qs9o z5xDE6;Cteo(CmGyN8FAhECg+BZDpUl0=$l-NqZ{}$8~Giw4~f8IBGHpC=Ob4TXk1m z-X=|lg@tr5W%$7h_?ndS)4n~pT51B;L&J`6UxKtBh#Rb>`{g3-GM?oLp^e}hK#idj zHIzVsw$Hr?6X&QQ#1i1vr=>F^^y}BPJQNRS>i#)X@2U(;`XEsC3-aH~e-J%=D8On7 zjLubR0ut{#9YM+m(T62`p9E1u$(iZRAIj=|j(+F7erdK5{4hdZqa9;Gv3{Q*s+#50b0p&)9Oj+ zeK#VZQgdRa`22J`u@4g`fkn$^ht69RstgDWEI}a9azYn!vzEiVMqu$7v$5!%u$?%; zZd`B_&CpK3D$5Ca3cvaBSBcWaR%6ta(+yW$UC}+1ZH7Q_h7~=aKW|Z>7U%v^sag>z zu;_2>@h82Z>&ocg;3^5Io$GpPS*5EZ8uc_-jCrI2d~dzK#${9Lui6T3!9aBEa&}<# z_lQY~#LF2&pjEMeihr44>QpWT5r8#rYJOU9|C9hRH$0M{>yBmWsTlx!P&6?m&+T|3hTl`a2z!hHq(pf zQGh(S=zK94dJThJ-?rGmJ22cesB(iUIs>{Ss)PZ7{sv zE+eFh#V&auL#D2Aq4a&O&FK5%17FeTvN*&I7}^ouRedjU5uih%6tpIb?-XLuXNQaQ zB0uLU=nvvLx}Ri(UD{{JvMM2xDSdyefYUR?CR9n!VG}G-XTB@d@35jf-v0p8|RwySKTcaAlTB7QnUHM@qw7}Ec zG~wFEmTUNtK+0(sAm?}X;V_!e}hP&3FJ(>hq4 zy$emS>#KuV_m%Lq(2IJ&G+G3|29fq~k8Tn9=`^KX4~Mo zU)Wfu2$SY7CyD2`_km6C^elC&E?o9@#+ zr0YILdKI(Ub|mPn{AvI*3|BfplUR*Y71q)!EczIG2+vo7<`))nuWfIl;(xGga<^T? zJwFZST!IHWZD?--OKP6Vm){=V;r`&VP=``de_({=zZq!-5h<`0PB%Alo%hvV7TQ0*?lQ&h@$PpLv4AYOo1(OS-?r>T*!Dy1ZX86il}g2+ zWez{#9he(Egb*&MShcLJS5xJCO|xf@_ko$27T8G>qygJTU_3C+9{{f|5nvc_s_zit z894lU5Y&K6O1!&dH6Q`S$5YO9p<8@!ip37N5 zmhvs%$HAf#fr0wYnJos!ucXbEJw(8DvXs+h`nFznao=;>G+vIzS2g7(Y;L0OS#aux zd(fCm*lZZ4#I0^ZJTv+|R_#g+H74gmvy#~$VoXIvSZMF17wxuJBCLZ|E_Pzbdm&y^ zi29_uU4ICn-?GQpDlW_8Y7sxQsl*%yL+t%aB|uznb6|*4n`-$(+9qi!V6FeHEm5^4 zh8MXFocwO@rnvl#x>W1Z;TY$qgvM=sXJPNV?XWD>r!tJUZzCSr@0ZEnh(yAI-?!Ub z2{QZl_lfcQshyjaT)b*CYyHaa8}mcu1N9$7{}hVsiQ+Y`^6anYr*hsY;xJsf>CLKp zHf{xA>H7{t0-+Dh0Qyq(MsHrju(T4r*GY`}HUBQp?D@v;PXwkXm$t|Ld`x24FYW@i ze6MFOZ{qXOXG5-!9prE7ROK&h5g8%(+J&qTY-G~6EWixTm#UPZf_@r|+X1hDtIAs^ z->KkL+s}zF5NV-b%fFSsP`RkGAikpCk?xOceP^|?e{K8iK(M0UH2dWayO)K1>`}&Q z{EWSpH#lc>yKOjk#rLwy*+@aVAaZqVPoyx?*Nj%_t=m3dXQ7^drT(v+u}s7bPnuY^ zv2E44M4FlE-RB=ZIW`Fr8LS_<{+T(S!S;YXX7;sfy+PSje6)4F)tjoBGnNl`iu>OF z{jdYiMg`3c2Hp}T-?E{+pXd%GLWd2bue$thZEHTfrT0HR%22@XoX~H%^KVtD{Z;wF z=L(z2sW9u$=d1NgX?7lm4j|+*EK-4x^OY5BqXMV|?5FHWw&MJ3-uC&n|3)$s!TiP?``I{PkA91MPF zv{_yJag5|Otr1Z!27y?%ue|y}%xwK5mlB1L{b+`6+uQkJ`M)F&Q)YYYCx`i~)#87s6$G_c$Uyh&t@7-^_*~-&Yzt zAcmQIWRd!Kp;~rTZ>6L!k?H;_1K#$SU*g|7V*JHn4YA#Tq0Z-QTV^b*c3?KxqAH<#tsOE3zr{)xGCvr5$xj)>umR!2b|>Su;1B z3?r}hW(`tG7cK;oI~p8Q3#1OV_nsY;9A&(Zav;)(%>V36#6B5bHV%2RT0lK+;H!Fb zth6?7x^gtqh2?Vbxz52Qle>5#4y(taT~_1QzVsB5J8LNz%I^PNLchz2w3B>B;c>3@PSWCEp>_F*wV5w4?w_qmkXtucY`#eA z`-%WDtCF35`=!E#ak2^7fl!3ty&qozZ2_C3&Gj2O#SHeXjLN*hxd4VNPcW4XCu@m@ zZ%w&Q%25w?0z-Nonfj+Zq7*vYyg60O*Lv_9cPQgCKc+A0-o$-_(-2tx;bgb2Ec#?l zj2yZ?YDHEG{HENYrsS1=+5Pfk04N5gA7-t3Po4C-)|d$2*RBoGlm+#oI>tTd|O!3-n3s9>M*CR z3I(u8q?=TjUY47V9T{^v5-ec^Buv>}VX(q3zMp+c5UT4F5|*&`hFEEre9c? zjxi0aD0M{+4Y4H{v8iwJ$4(}%KfrHz{2r2zW9kuSpNO}=)p@*C3BTq`{>*zxoGg=6 z%jNU5c?cUG{|_~93jzj(T0Z|_ac}>hV(C2ug|i7HJjQP!SZQ5LEq7N47Un)6^cFqr z{)6yA6~Xmk^(|nYm+%&aQT@x@%up5BM<>2i_~YBLwMqb2G+^_2b{*RbOw9fjArW2K zR^`Sm2vSu@hNBLE>k9o;d1d^wTAxG!`F^|VK8O0TQY!Y;aHAD=U5go(+W$Og6m{OA+&=&mW3}uBC4rZsD zn^GPTbMLQWQRFXvIh(KE=rfryIUg{$ereTL`VwP zBJT4zUa?^ExeZcq;>9)4F7_>kyxHcsDDeeB5{eQ zYNo|>Ze>Wih`*|2h|%<&TElthq1tvq&@XYo9YeqYpJ~$OF@3K83Xq<`PQYU6jsD;I z47Pa4hxD8XM^&OZeXb^E*G~G>pRGU>yds|JQQe-5G2?nRxI^xf1{$1Fh?ic@0-h?W z!j@Bl%}-rzvQeUHr6+mO*@uMhLaax`HT(S)T?VNWSD#`3 z*i)c0P#(9dfrcoLjg-Gu&mlK*>Kzz+C1h_aBnj-4a+(a-n9+c=!Wjm$C>tsD^x?V9 zg)z$L_4`j?F^BBF+R~CNlI#3vN+7Ox_^v!uW-oK4DnsjmmGPa=W`1xM2CI!GpKx5M zfe1$M5nUIA?7;a5P6ec#C=2*l;37#;azHaeU`gP0j= zUt-XJhCi3_Ad#8SDn9pxjla19_m}dQ;(sknE>Ro zZfjXFH#2*7#I{?~nIcZqMjYS;y`S0biq{Jgg_&Uwdrw zT=BW=6_1A1V3*gPZ^OF8!Z?pI4K!?y5=u^mLSNglDEa^)1^(78oAQzc+DIMDgPS_Y zrJ_b?YS}A{cr`8nXnx8|aw8y7!KL3QfAM+4btX=a9WP?|)h+!fkOGtCj}#!OHc@Kd ziPzfMYpK2+Q_%axG>$i$H9wnG-|mIJl&jJoY$0*$a@uSD(l#R1eakY=hsj=Y8l!#4 z*{nHDJ)Xh|n@YcEJ;qNAK$Xr&iiF_Bl zeUZQd*5X@gvT=QVou`>%Y4A!+sAdC5R45e%*QQL`>g85ClpZ|-1p*_CIUH;ZDPsuF zb~kcNKW`}AcwBkY_BQvVY12IffUv$!0AMs!^il&T1NW7F`$`(Z4n)@=fd$}r!W^e} zOZFcGE^yrYP8|Q6Qqdm($_XUqEC%1NtgH+Vs=oqqY-`egHSll>R61D>zoF(+dAojj z8;uWK%@9uYP+y%MPh1O?vNNLrGg@O~ ziT6kP!;$dSjPc~@f67OL}WPd5o5Ho0@a*8EbJ#QcM3`Xsj_V1 z0kzC(w(nZa(BuX@#E zm+Le^cea5$Hf#hep0gt+{%?QH1=vY$Iknz%lJI8jd5T#_D)bj?odZ=%qujSPURx>l zRvtzqxZ?qGE?Y~VwJbP})!O1*pLuOuwn^`MioMAX5EB}}qAiBN#BAiPE0*r-jPC6K zv0dv1VM_|9Xu4;&U+A+3>82hM*(3lEi{9mU-eC?OWF*vkix&}K{YEajjOALCgmhn4 z_x;r8Y0KCQe=2z0gJER9!H|N=7w)cE08uOVe3Vc{xNj76*;*TqJ%x`Mv*0X#!jwR{ z=P@v`vOzjymOIXj0OCHtLjLzZ_&$z*xGjTRPTQYZ)?QPRsHQ81cJZ+AGu#Z%FWe%A z(U(@-I=6qSp!k_&0Ex#;G4DHWJ+{`O`6(5;rMjB1@Sye^@I7Pk%e(ynrnPowVXdO; zs+?g!HT-j-u#`0Nfb;avz|9r&Fh{`ujZxVTJcT0xgab&p)SJ(oD|wxdZ7W0MGlbY6}NBnAq3ttj^`O<7W1CvC0QROqu-w*6G6luoJ3C`rYlb)Z?aDgxSo# ze|f~?v@Xl4q0t$Xis)+&9gD*klY z89-N)mM5DCCn!W>Y2kKEew&5%B+BsBvOBPo^(4EyNd)o>4M|_FKy9i`0+HZ*Rqs1> zC`YSrD!bGAv(vQabE2ELQRzd}j)0ff5Z3OWEhWljb^P{FhsGFMyZXQ7OP!BGbq?S6 z)Q7lcSm^HO)L7Tfg;)Uj1%rMTKhV1u>z68w(14vZR(m2E@L3f3HMp&EW_&qZ3vl;=Kkmvyha~#;#v&&%q`1qkfNfnJ)?npcCIJ4pyn4<37&PVNpVDXc1%Bfh z(Iuw*MX7!8&hy%7@N-aZ62W|c(5~yHA?$c#*|ZoKYLZq9VMrXsHFLK|(`GEoGEwPg zo?EfqWm@OY4j!@P*P$4);K>#@>Xn2~%;ldTfxbqATctCkDpYh??f`GIQIRQjquK?= zWem^RIBX`-7{$k9y7u}jei(T{(n_L-C<}K+fbf-N6EKc^s80xu_V&=MCurb$?IwzW6R(fUGb8(ir~nXo?T zK7@jWws$V}OZz2echs6BcaAB4!0QBJ?U zH}$qcCimaCo|^RcN9$r2Zo@W(v>KH~>nz;(f|f0N5$Y@5O@2nkX_Pa95pV;Xc<=6X z6FwjH?argV&u-<^z_fSm7@*+Big&*SE+$d`Dg$e}a;`fqE=1tl7Mqz^rKK5ffxEm_ zk(UL!l(y{ogiRNmcR#G2_ycLx?=Wq^BhtB#C4iyMoKQCCV+_Z;KkTirHqS zz3y+Se=11R@oej<%yLt`i&Zh{;=*A7i7_|C%hf;2Ep6ko&?DfEp)Nn`3l#|LR(qhb zSjUAc*;)p)JPF{G@SA+m6T zNRL5@Zo`Nm6?q7`M<^)k4c$^T>?l=fQSf)A&3Cb>ca67RP+8Wme_qXcT>vfy6V~;c z^S57|jY_dtx(_%TWbcgH10Q`jk(6S>G6|zZ>7v8xX31$2ezBL>t$TFva!t?YU9;|_ zI(v8KlSZ;nJ?Kf6e^@LX!afn0gU#H@Us^Qb#1Tnwn>6VyO~Z!-QcmM?@L0Xp<|ZnI zNDWnrc7HW^_>{V9dx>qokAjY89H!|9sA&3$h3DOmi+JqZ6qPQWlg^Q?>@UGMWE;O( z#&;O2OZGBJJ~i%xZxq#56GqJ2d-zGccrxPliK3ikcbtnLR6P0eiTH~r;y-ahSKe{x z7#fC@9f|mJ&Aqgq`))Q)Zgb!j0}F9K)Un!B_UOF~-%x)NNr6no z-?1|6LejzE9P6Zu*JNy$$|4KM@FLjpi8#fqQ|N9(MF4#}hdHL$+0thSzqIJR3shON zdRna;sjqYF%M5lXcZ#mi3u(6kc(%@)mrWxiR{8V&D??R^Hr>8D9~KD?6kVWllO`#< z)#*}JIZ%qN-&7kNK{7;{d#{J{N7sF$+|kHHCQ&|7pgwjQ>sWbV^i%ukv!F*em7}}u zinre=kUvp;Ug1Fg#CB^O6VLii7f=1_Xu>6}nDyg_Mf}SfiloB2N?&;|HR*W~q#2oP z>lTe6x9yaMTsc~kZA{%lkw){;SBZ3|KjyCS^&)vLcCX+5R+Pi(7k=@hSV%DAqmx2* zkC6BaDMfLkGe8LB?6A7hxky>?`QlNg7m1aJ2d?8FkCK1t+gG&r&&yfR?$)pU2Wv=~ ztk_THfo<*l{GC<`8*&&da@%;z@@?Yfa4LqqloY{LIjDyww#0L@5=tZH6TdYOb<~aK=B!Sx z2ndI>jq^+?st7po4pW?31xZ$1*zZ6`;|>|>GO>A~KVI?*i+U}W@4xj)t$?iih61k{ zJz>PK2XyUv>=$s#8T1>pIH<@@etbzTaJ#D_cCRF`oGM#3Aa*gMz2r}S8Youtb}CKO z?`j~KTSesbRdUfUNke%<`K|6)715cU(!I8OEC{T^NB$NjuCW@m))^ddTmB-*^mP_g z)Yx`5nT+M2CC9e3vq{{PG3S#akDciScA?NEnbbH?Vf^_q(>Qe)dknH`W9)0~~F__Aj2$Y6V{VG603n)>tMU|o$^p8 zKR~}Ar{3K*7V~BPxF)~^JD-6m@-~_nFw&9>qg&P426mkPFyd{&lyhUbtY~PE9mMVU zB`X&p2t3@C=((Uz8WmN*f}cyWPE0Ioo23{Xff44FJI6me{oR8OxO37A7+8k1;Z$d( ztfnb+W2ZOL!e2}XI1$EAI$_51B9^6hH@jXpxq_9B_ zWqG)%FYjRqF!r{XR_CnWOm*o0vPrq&Pq6sid!z}L-3ZZs3P{}O*6ty4^WNtQbbM(i zEbAQQ<?j5rAxcJd5r@oP8Ra95XLo(U0TzO(+w7|uNkuic3Oo9B^ii6;@tN#XPb{lNz z^CDRbEI@5OmhI{BWp-QGA^xXQ6*8+b@-~zTcRyg*f3ikfM-YqOM1Qv8{W-6<-x zFxRFi*I2{$ZQla+YYMqrtPpMIBl~G0xX;SVg}HqyCGJhH+RDnBhKA?;(vuGD85-fM zPe=RI#YT~xJcNUCzHB&4L|7`_s<^piuV|N9+kt>-#_B~4IKU~yX<7CrUhB<5V$1)c z>aF6Ue4}<@6h#`OB?Y9Bl2jZ7DGBM8lPD&?3Rz8i$%cxbzgdcuRhVUYhxxe8Q?i+UeyAcX|yxM|d{kpY1?(?5_tYnPzy87(d zJOt_2u7Hpm_U$=)IsJ{;R|@Gpx6^w^?;UtPZLVr;&PF`jugYpGzJZS-2f&q>iRzRM zXt&q$kbkOcmrdwntvcK$D`S2noGX|20oQz5@a|iLYp&*dE*gRnjRvK1NlK+Ltukq< z2At0U(TzlfB)BdwGAa z2hoKIQv^Q`HlBI*Z3ljei=>=D=J5^i&$7wa-&Ir^dtf|6X{mnz&N6eKOs2HVQ_&q; z-G{M{%3Zj%lxT>^hwrsGDShN}r{TU8n1Zyt{_opYus3P=aFv1#`Lnp*i#Y8}y1o=&2 z9mruiG@0@zrL*_?GTq9N+aUCSv@z5?#4g&p2n+Z7)Sv{%&6|pHYqIa{bh~R(I5}}* zhG2c{o>Vze`JXRqEdxGAe3!y-@S-57)4)*TG}M`&XkyBj_x|rrOUYC{2ky|g&Uc(= z6~l&|HGGqejuf~UeH@GkBoKo~9<01GI{D&=9^~i3*V6cHq+RUW?RQk#e-20kN2YyU ztatVJplR}P72M8@lAzQqVyXU1hY{dI`a>uBPHKbz_veM+SH?SPg2>(Dzj^ZuOh+%m z4zX24tX=;6#dk~>-9TIIv_5EVSW9lF>uN2U9MueQ{Z}axtCzM>;Zn0nTzGfF+DXmXNwbZUhCXpXKdDd$^+e>c@E#)1dY?*c*1u;8*soi7Bfb!qT^q@fBfK+ z?to9m7D)f*9v8(UA~-4FV5 zRh=Iqz<69;uivgU+iPOz{$vfO9x#URDb_5dnIdocHZyMOe&sGsK0CP`x}o2ILmd=* zi7S>xvfG(~iRwN=-gtlaGxyXCNKn^b<$y$UoTm{p=2~*Oy*o!4D!uDjzgDr+m{8nd z%dudutkrz$;C0gK#AwW%h^bXZnXg2+Bdi^hT!P^|cOiR^r|5YQwk&m97iZr*Uc-CJ zBY6v8m>ZqRL40Pw9dD~R<^Scoo$f$F{<`U(9+IB;bR<|8UENT?>?K1d$dwvJXHXpp z0RaIB1mf`U5Sfvwb{O0o*BtjZ^7i(2#?1_fw}ekJVIomAXB1a{Mm!XfD(VO~FLMcY zFfjv56IGQMh;Aj<$wR$E^zv4AulPJ!J&keHucBlBl-(*lCpx5uvP>{@c{yP|o+$WD z@#saXlay8nLfOo^SGT$`GLQ(cpg#+&Qkz;du0>5P=?gaBwaUiqZ1y6HE#y_hK|pB4 zUrQ9Zm`Fo>PFqUCcUUshU<`qFG=BSeb(1c0>7YcHv6@zPNd0SsZg1%+6%`eLAwZyl zNAv#|L!1x5o{1C66RlAMs}$3R_!(W*Q4gH@h+Qa+Z8%W|z`R5cyMSf|3E3nNIw=<@ z)#3#v{*^Qom*0xagmJoGBX7)INSb0SD~QG-B=v1kJwD?jt-p%@dgUfv5ejUxny62k zCf*gYs=o|+mXh)NwwMc+o=a0q{{|%_#;h_RM`E}TcxeW9AKmQActDkGQV;;!<9J2} zUFuv+lx)D)X#`V?Gy|z091jTg`EB3qtZveU9Qc;`(?=InEu?Z-DRD7u^`4;zr^399 zDHtIB*#eSX1GFTd1QnHSi;xyRH*q5p5fPa}pv!9K#f9McW`BRMoL2YuK+=(VJJ8s= z4EQ*1m{r3egnBYhjB`2>rBDI70;ezr8)r!T@RKh|+2(n-Ho>FO7m4->!ktM#z&FWn zoEFi+eFP6MqEzEQ$qm-|SI|^pOjPMQ`+Xa$e`KA}&So*UAkI9$IL=XfM*7xWYGIcW zo8L-U0XDC%pY+W>OK!pz?(O{3xV&GlGRrHt<$JpR1(6i~Y+Jsb2LS-Se#Bu2RMzhv z>Fl&-e^{8Mj8X!;s-7^IK3=`?=co)m#E;J}^y&t#7f)7qczWtIfa^#i6}9;?2?Gnu zEZ?SIRVe#rDtmB%2>*-JxYT7UM~(Kdkohmpi%^)?gtO5|C|z;Rv*bNFZ34wfNolL3 z4K?cgdOM5d+~EP8rzH{IwLvqZ!@xFZw>6D~IDDBkdvVrj#6w6&#~WmTU3@?E5+t@C z@YKgQDYZ;dnvGzvWdVh4KV5!wNLiE zC;l^)kh3KV*r$Ed-I*i{#SoX_3R&=C0UkKday1F;VY?X@5i z6`f8jM@rH^JLx zI_~Pb88v}gm(`TZ&k5~vpncJZW5IZZmx|8`68tOV(=SSA?4Fpz7bN6+aw?}t9gkQj zj8UgR_XXO`ZS$$C2RA@suT&mpTS-0Y-R#2ILXT|?>#CMuO3cg?JDnt|u}95;x03&?vP z6n~t_DBjSdl2}_B8U|6asKV~?amR7K>eBw{k_+^g*9dvXm6U(Uztu+P_fbA zS0a)>wAJ?$wG6_hwI)#k%~xm)$@3gb0oy4 zzv=4M&vZa(Wen^GgLR%>&zSY1@%-Xj!0(F=9T4xIp=$KrLx$H85i~YWA>QA^#7a6e zH>}u^%{pu?)6?N*hnm?}SqiKoN&Xeu9G~|Z{VTv5VGZhgC&fw~IwpGSb#gRXs(&sQ zY_#?(HGqHDt5(Gd%(4qEoZ`Zx{cZ*#r`Wyth|r}3g{Eu5Gw;*s805Y8qgHR*8rp9+ z2&fDf^AW91o4>bp^P@@)uj}qhiEhi9G^;ibKk)e&;m#VCZZ*dB@AP@sAKn{2cxO)B z@3!{#_O`Z2lIlC!fq{XO&AN9iq0swPF{)DX#9>cSa~P*aDTo}=Pvszr+=>_F5Ka|^ z4*!@0oo5p`kyFZ#Z3S-udpOj*16?0OJCxZuVf~qj#mpqW zE)r~yMtO;B-1!D;CRp&sB_RoYz2G=d%JsE_8I}{d@Rl zBa$&bYN?|Tm4_2;6n_^YMV;a{<#=sp%b zfbpEDSp>v7GVA?+jG|+&UiAx|=+Fkp(&R(mUs9`bsPOb#C)!R-QEl1v5ocSq zl@t}7dX}js$obxJRJKmoL7@G9&Z~0lI`5j~3Vk8bRA`f54EYb?tN6abIJMmGul-z4 zkT_4_@g?W-l^PUdBsQuW03!muM@F0UYm8TP7J}|h=}Hav!&p|r^^4eGjEdt*+g7v6 zrE`t`SpJK%($BaJQv%=XK05Xz7dD~hXAx8pM@~lA zH$fg)80!`gFJfAu4hQ|a<<)OCI{8p?WZJAd0P}2A0+cf58sFXviK**E0Y~U*%Zuc9 zu(mT4_4bU~#x z*%OJYmy%$R!K2KZ3~&0Ye3%!fsCBY_%^-23!)tKdKm$b_4@i_ia*C&D6aWd95hb3$*1sCX*W53tXdA670T>e+5z zGbWRkb1eK00R)B$N1wgs2P?NG*hv3k^3G}R5;<{#hdU;;(yHT9Ufn-kZCuU3b`C+E zr&qSQyA_LIPG8S7_?EP5^G@o)7VvBIn)|-L&{qVvyY|qeAK; z$qBRZ-Y)D1O$mifnSF*iOweop4{f@L(2%<1kZ0d{N%NY+78cdk%%}dcz_)wAJ&|o%Sk8#ZFk%_aU^?e zatH_-(dW}?fFw5-yVayHZEk7n0+~FZ_8$Qx@k@g$YI99a^SKlRASmA{PUS_IfkEUo zIUWDPHguHn-{gLQbP!G)tH~1*U)6wpOR}~pf`4%Mh#o>7X+en&keZ_4gl_eX(@^js zG}qQ-E@Gg&I%bR}NA>M7+$&2C_1kD)loMY-=o>x+;xKdNoA6O~CSc6%4+F4<$BH8p z+@b341w2340IAfHEy?IA70lz5HBOGNNs!~y7|E@7rw_@wzx`pD)?B@eq6RKkB*AAq zs(6BN@Z{@#o>4a_RdU@$iGz(vO&B+0BE#rtuukRrJv zhEKlHf?}-KGnJcx{avC-4nQM@vxz|r|c3T0!6pz=pLS2saJf09C-e>|0;H zpcydERJ6zn*0BzPs4086d^FLSk$cShjH+G9K)x>l9|L`5%4GY^tW2?-h>gsLGLGoz z=$eZC=2fAe9inb~`)}!#KMo*6SiQ-QnOAT)uz}R_C1$m%`&U0X(qo0I!tK-Um+Rkn zRlf-eI%mz5RcygXNPf0b7g4O3@F@4)G7eopo1ZMP(N%3k!hhaQ8UH-Mv}Bvm(P0pZ zKB|#{_AN^!?*~9(@o9Z);8j?J$WIN54Di?tnS|XiY_nv5r-FYHFK!)ffSwEzspVQK2Rrztb<-Y3iMAy>;clz`OD_2wl)AG-A$<}S=paSshXMVJeK2sCCp<>2;mmU z|D@J?pH>p>|I&yF2yiorokK&P&MGUeeMS}AJmn@gePYt>6N zAKw{YJPg+t`z`81v{WL>wwhY(M|aAGr+IVrzbFGbH`$hgm~H-Wzdrg9ruZQ%^XJY2 z*<6{94i~vc^t=n~W+qQo1c3KA^tFL9F|i_gT#88WE|m@A@j~MY!0V36BX>!|Ub*bG>- zk!G~{egLSr6)Vn*K<;A=t%B!}j=xHo@^+>iD_Nz=DCERh_OponN}i1Jilcv_j9ZJK zzu_4cD|}anQ;?iW<4|#*z|ETeOGY2|To?KJ=h}1ALQgbKNn$E0>fcXv;JL-aD1#}I zbf26Q(&p~~+@2$NHH2K%Q>>1Y<3bm&qt9vmp}j?M*@rF&J&*A4{)(xjtj&XF46*E#D9!uqN!mKGQPye;H} zKr}v61S|VFu|@R>tLLEce2@Qh#dCmMGIn{iht`n6_tux11R3&#m7JjJdc~t%=WPe3hXI?c~zt!~0 zwn^yUb*x=q1h!*YTN=qUE$v^mB&wH-{i>qjT_9s0OFL_&iP2XmeAGb%!mbG ze16k$|HMZeJbopk@=>)VtYyGooURyZA*s?!rAQs~G?IfP@hy4EBKL-<7SIELA=M#` zd!s=u2x|CB^_1M|({(Y(Q1nefUA#RH^U)N#cKb2>RCzd@g(e>imE|054?PZgk=DG% z(?EwqO*k|oe|!7yG(pS*+aSjQWJpYTj>OTy&>wwFs1#z8{4xG5gMD}w&f4#?$m(9< z1kGRUVL45($W!B7jUW!GQW8Kh3FG*j>b=KZj=`x`jw4!UHmYuju|87mE#90~C$+fY z#M(HzqRA|Db^po^>l_F&>f$6)L$+YjH8rMf7p{G{5X&3;&&)L`heEF3{>67pjp8`@R$n6aCUN+y2@Tsq;E%* z#~_1GlRcg9a`+&S+RINpkbiLU=*flbKy{thQHx6;hyxknegHZ;^NYvIbon>oRX(hJ zKHTa*q4N}fgU=lmg33St#(zcU2XMv*Z0OKje=T~*D&{B(yc*5#^nKz>;|!bOE={5@ zMStSLlp4wCItGn}#e5q&uYfL`HfCb{l~l(eKu~^x&BW($*R=@1L@t3Ad3$nVZhn*1 zvRYO}N_x6Vr3s$pf;j3zqL!uj;)J)anBjOm-;>omSrDQQSH2G==#_fAagpSr^JD}P zxbVNs0tGMU{{qZYQa7q-!hr3jFiP> zP26%g6d{(gqrV%ez6Eb;4_;5W;hpJ|mFe6$^AX#=XbKK8(IPr|lid>U_m2rKpv)Uh zQ}EIG1DAlDnqH;kD$Xe8D3!}~U!l?^VRG5l9J~U!u}1XL9mtNKpCJ*GWl%%Qc+zN_ z49&U0S8nV+i?jlyX8?w8K6(v)$)x{9sI_P+dpbUB;bIHihupYU$tR8J7g~(dS~AG7 zS0FJEg;~QQBslgZrl%x^&JIb0zBR!0_8#jm1?GU{`iPtxIv8v%Ohs9C&TvJt5K_i zIP}=P0ZM7^3a0%bTkfc-%Cv27H^ygjN&R`@EP=%NBgLxxb?5Bm5sWqr69QNq3I690 z;)jbQCxpi#Nu5}A4P0?f8n5o;e03AiGN6zN#C9|>1`y=e?|PSBU(pVM?21ZEE+La} z5Ed>~CX9Nra1R7Y*O+yS|H>AkZ=5=3VpV0_alm@WGmQj~uSeL6&G&%=Pr%ol`p}PJ zgGI{c$eeRxQXlpk1Cz@lklcFIRmG2`L%LE`+W~Q0+UqQFT68Sa`#rC7B?s;?i0&88 zTFDrwLtwuTP?J2Jou)i1a;luT$e5E$Y`2T%cimKGT8+-q`|4farTAo;UU6J#6k+~M zJEGfIwNLjKZo-k1S$x;vXHtQ|=JP7b%R ztdF4u7oyw)15I>lN(VB7>;DCW1C|;jvK%Ytd_B;{+vPe0-4=9vjfPYaMdqTTaMML)_M%NU)|LqjjP+yW}v;)ZVjw@(=-*pg{SrvDSm&6ghj8pKwEsjyrJIZdK096bDn940Vh z)kku*n4jcAk-I(e7Q5p^xW)S>=H`P z^)JchrF_1(TMlD*u!$I&i5IbUTQ25)URbV2hcfTj_h~#g*U>x?!nODtz)sn5nBGmP z6zu>G_&}=sP#t+vcnG3vbcb!-%xrBO@q+#SD~`>&N3CT5NPjN+fKgH^ls3+TucHBP?!uP(q3IR(ATvk zGuamHV5QosGLkHzFdTN2_%W2K+UpXohPx0VK*En->1CZ&4h`k_xW{Vp=pT10wa?ml z&j9FtnIV}GvZ@E^h-s_PO!j3a%}!(%oCPsoqT-WQh4OysjlbGcbq4Ozyp_5yEnK4= zhYIRdk)56~(t6djFBCRQWuCAvqpMO~O)j}PXn0tOwqin2NrJ`vu>KhGCS9epT& zwfU~;FRx};)>7@Str_|F_fDn*v&N0I`OLC5BObZ zf$pg;iYK&KNqr1_sD%C(XM zX;444%+Rs*((%6SG7~BW{&NkH+EV~^yaq7A=@Z$WMpabgnqc)|<-H_9Y{8RjU-g-~ zy!GFj$J?PfP3kLT4ho5-f7$a0#Ca0!3s^l}zY>tNpWC+_yjM~RSi}k2 zBos`|hC(X#tEZHoC-K<<=Q4t|njDwW!8!y3Vi#b&3uCdF`i}5z#e#J6Hz=jLWo0e* z;KM_^oq@pSy7@ZE6+$`H=f&`Pg$@PRxAYM8{DHp}+*vKCmVR%)<#cM$uO;Za<=^o)k)$-yLsLFdhQm^6;V|{$y$Zwr=y)*JrCXL;&@2*l> z@afc2N%7@eGOxm^8pYnw3&b$kqo#Uzxt;gb?^m)RRX=M}MMnM}L@5 z&Nuzt<_a^N)FEU<-`JnAZ@}Ms>vr|u-COWQ2`P{teT^OyGs3KmJYvAnGdbybj@#O& z5;L|9dlr~W9#ETq=dsS-MLyyB`j?pq{vxegam#5FIuzy19U`+@GPgR5`P;Jh&g}u(vunzmWReq}>J7P;U70$fn>4Og5Mr+yGvEa$ZBbwF1;KWmwDr|FLY#Z$Io zGM$l9G=CcTGCWrq@stxM=ELA&|a-IAjZL zpKB?hRGW;gYodFfoIzjR+z2}6!Pmi#i&)Rf0{P`D3nJS1T8uc!_ znScQT@e}^RffxYjUb=T;(jL?rtmHjcX3h`xv3_~Wiiw>#!wVs3s6nM@u0B<}tZFHm z0(5g)UF0rS7kv4BL^PfJv!#oBCX0-s)H4kaY*ck=Oznt$`pOuZzLgHu9wnW5$mT&p z-ME6wmrKpvAHS)|bN*61=p&z-A;Fz3%|HsVt~50T%tjJFht=fMLMAN8nDuUVsu%)! zTX%KBvU2MI>9{6h@Y`* zXxdB;Y8@0Hls8_?uc&3ue`W}(FGRbJmY>KL}%_3u8PF`G1sok7iwR=)m=T41M zQiVj{SL&@^n?&7o-~f~dE^pPWc=G9mkAvi1NUIU3AK^b8!SA_MaEWYDAnYS9iupp zTLw*vCXaebe_IW6n` z+q?8-1_Vv!L}AgL$LpIDU(9raLXYV20=rV6ZT7N4V}FAIZ4PG6TWl1->Ky4W-|sCR ze_47TOb0a(8?5GVq^uJJ>>^v1@JTV>Jq|a)dMc2zpLdta=qP1O(`|We#6V|b3IIWg z!fEok*&EbazJWDqa8JwBreyMeLhNZDEr)oxh$=lq0psFUwuIV>l;Q19{y2O<1?8N; z8L8DBn1Au0z$?kkf_8{zhBy1#!7x9Kcf9xM1PP>$A}{fP9)$y&rw?MxfcnYBik~@_ z!qgbze^cLK_c+?w+1cP+KcldpcUw*z=oC7M4QEHk16W+m)t<}Sy$Y!sJ}g&z)onk^ ze_|&V!^t!FF)W{>IO6`B^_@h)7`25(@r3QSz>X_!y_Y~dveIlq4JLc<;jqWbG84+Yl;;Kw$o~o2DhKv z>Fd*?d;`hND74;IGK8&|=uq{!bmte}y$=fo__Fm#tF(Pb&iqrCgT$AiWRFTihV#C& z)S3KX=c8jLsS|yO5^PU>K%HBn)X4*rK+zI239d&hd_S@Bo;SZk9BA;HYQOivz+)G* z%7beqB2E~ZSuPG)&96`goG8zMdl`n#j=azDe!T$~5)=d>hm<7fEB2Z1DW#r&8LZ~K z3ch8={dlFqyOZ^J$u?<-yvi1tV zkH^Z9deWud*V$t=k)v)3Qe=H_1dQnd;GU+KmH ziqbjHC0wZ%Y5!qb1+Ci(x9(p*AK{Z5gUN0(ir`OvDSRy<*`RWIl2rFY>4{V-_v;YA zf?tNKEx`uP4uJ%NaKIV9bGLEJc02VnUpWY>G)hMnHZ+9c?TTq3K$*FdIBI0}$OD-yE1VgO~p z#Tw-71A<2e8@~(!KCH+Du-|9ks|vd#FM|W6e<<)uljp^|$+erU4G<)ni_~zmf=WuI zE8?su&`ihE%2wt>NsLx)mna$8zIb2Q7x3~7;mU3qj%xl9%)nct4|b18^f;Ra7!tQK zGW0Nz*6ohUrMZG^KgeE(>Z(vv>+*b$-M`5C`5edl($}*e~D=qMpW!^;g&4V30HY>ZR25 z(Dx**`Q5(u2eEhj0Qw}D(vG@2$j}SXOTHM1|M3SQk|A|+>lKneC z$i&`0D4l9~en5YT;XERI3e>-QE;$e9d45h2`M+En8qxuT;7~vgoA>1wd=jiEP@8`Z zKANtno=FWh(|uQ0%Nkyd`#NXS6Wd$$H=t|b!uE@cVtBRks@o>?;FF5@I0pPrpRR@z z1N`r&1Bsy%9Zv6@`yz9MLizn9)Gz+MfTrK?Xi<~9jZwcLeY`WIUA8&IkcU8UAAni_ zz;^(!N)x;YDqh8tQS9LLJ?XO5iKOmb(=RYc1)IG}Dus{7P3DYXevLXa&rXNT?F+tk zQILS|S>=C=Q=42f_6+R`nwq$>{IS|&W&5gAC zI&`@B+B{x`jL$(u|c8n`CFAUfG%4&2L$;w~E6rnOH8wqIrUQbvxvo1o-W;8cM!3bmAYmF)WEe&%S_7(vhA2o z|IY%M;>K(8!N?^yTrB!mui~$N;Wl}PnM|!H_RB}sYxc`eXp^$ATiX>=*Y+mHq0dXYlN{$^iP9-nd*aBO-pQ;!{KC?|9_FuB`ZH$t z|1I~q)Ag1n8Ty+>y#9BhPrpZYT8#I8C5Q`Z+Of5*>U{90{fQvw8hkP+;p%4YRaMts zZV|;#bBSzP4yMXElA6z-J`ul(pQ^I=uzQ)6rGyq5krPM^mD08cJ}*}diUb*Mc}_Bg zIg89wFZWeg9+>_^Ew8sH==(*-eddE~6gl1gCI&%fKiib-G*RFNNyK`B#D)s`Vt)Q~ zJwrN24}MGMaIHbNJxB8Yy%n6^Cneat=Hu6x;~;_@J2%Y*R^hM8tkuZ!K}Y!!C+A3W z#p?DL#Jk5%Ehe7bkTs(ginCIDP?Cs+O61n|*-llUwZJ;C5)#zSocgE1y%34_6p}n? zY;0DPx-^{S?;2W??x-U$(PD(VjL6+dfsO`wZ1~8V2>mvqf2x{`AnJ;?y1Kgc+``Eb z7@c6f!Wa81aQm?536WtF6qY%l9Ii> zz3%njcgyE-ND?BNKjdYp-5WjP%d{TMj>cS<$XIRC_jqld6b+TFa!V(+w%sRt`yXCr zrD!Qfd@P|(;9rT&Sv5QI@~{{&zf0~;R_B~}bN}T%H^k7j z{Cx>DjX$~8d->4aB99Rt3GVi2?o(*`tJkx>P#UJRN@t8fYRb8c;?G=xyAR#p;QcYg z!UzCwes43`mdBH~+hxpfyylMsUJv^93*|9c3NqZWo%fI2hnJUG)&wAc0*0T{fu)IM zCJB!y)h*UL)!u*3FPeRvSVOYrYup^YK0}K9lJ)WZ(8Ozud7p4D7_C62-k1<*&!@b3 z$MQ>NiERz0l(?8&DOWXb>-`t}x503$izvGCZ%a$727s#VHHfUR^;6* zP*GBrl$4}#22;P z(l5S#Z;@c@^2Dd{Jx*UTzZ1zfAt7Nt zeMB)*Hv^88+!c}9Flg@aNrAerXFxBnZ@-{BU$f6lQ=wGrWp^F$s6O}|EtOHtpRCM; zy52sjzXpS>`SCp6n$1HI7Mm{?4|H%1V3m+&@DbC-J|KVfb<-q!zB)Hi7BpxC2CYsL zT{{kfAZhd+Zx$v}$GR*M=wGl;X~a><4ONjHm-)o%cD&xl0r{n<{T9BzzZ($Px?1ZE zd&M8uj%Zn~o1cg68d3m@Kr>4DC}a~ha_PA@E(I75X0SjcCHq&|u}#Srrn;Af#O8H5 zRcbkgW8mdTq%HXv66m5c7eN~xLi*R-+}t`T-S<;9qmD)g{R#3TGBL4k?(pq$Q%EvbYN;oRxF?Ke76Wdd4JEqfc@A-K z%C+!Bfvc8u3I4F$zdQQ96|Cx+)#iLG5Id&KF!~*cW)s~&Q&gbYOWTR(9z77VI_b-< zz#OXs>u`bF-9VjktNqxWwAyAw5jyW0Um`RuiQFf7Q9kMyC5zH%7N@ zWv>bZ`YftWyfO-yWaj)oXR9qgNw>|oayr4&P|3`k>Z2;JuiD>mAzaxtVFNprtVhcs z6+xBwKBYuWyr;o0+>>Ab+9llRc}@fobFe7h3g&b7b=g9UJkfg$fpB&HH_J|}bGg<1 zw(s^pQ=#4;P>&)pnv#U19r9HxQD1wiC=}R0egrc}VxuLvU7f_$Rrf9WH`8F>HHb;k zNAWL>Dbu)t=E4~#NXp|9p_O3ZwWO6c18zUxaNq58$zY`Dks7Tgg}S~s55<KQm+;1`VX{y3xHPAxIY0iNH4AN#3LogW95eM%>La> z46>~JKQpFh=eXBbo#40lgGMN##qZRkB7 z^tKtZ_StoG2h zcuhM(o6D2&`R4T-8oMj9x>VIjgGIpDDUakN1MMO{yo{0c__SU41f_gO9f;Y+DyHNv zYI!#KVx$$7MOLlTaq910)%y$O=Ly1RoWHtWA-HSVnj?2D)V}T=uYvzu))6|F+p3c@rGP@umE4C3%bYFBk5Y`b9r~q=EI;%;tI~|H=WT0_Gc}g36)v zxwNdQ6y6BZ6mlV6AH$5>JqlKR))ZK^p$=q0&oX0|r*Vr%yqLk}MYGuo=#p-SnFojPo7mmV96B85j^I>L* zM}L(8rYkx#8^CF{^C)opbCHDO_G_+|PI1!dfLgu89I@FRn!5#-DBV~j39#)CSMo!z z{QrJN?@o~Th(djk7z5@_cz@9lTjg;~5ykcm0mR{J$3zz}R&#SRdm=zJm6g?+li=si z?$hA^+sDWI_qt)p#6k6OkEsUg);Fz|zxrSo_bx9i^B8<7hP0D7g7;bOW3fz_U){K_ z-}zjUagNbBtNUHNK>bgXDm1h>3~>9$TdUl+n~yurGbB1@Y7w&MIK)@Ly?8JiV4)Z9 zekdRypdgejDYpC~=wmUfoV0ZRV5w1MMTIYXR46t>reE1wlL=CLFiv!r5=Q?O2Gcu7 zwt~b?7iEThKyJ?wxXV#qGO6@P?!T5bP%s@MyHIIDli0cL8K^hi-0ek&%(wn!95=)WaWM@|?+?Td|UJYJZsh zhw$dDnoOIS(bP>;R8+hn^=+Z|@5;I=%?!GxHTDS1VN7iKqol(&W}y_wBw_6XLSVgy z@y>jQhWt+-F2ILfAAwf0?`p?k5sy0_&YbOiq3kOKJ*AYW^^Q#2qi)e>o!Fewk$FTu znl-;-W3ySY`#oOKlfh~hBU_)e0j7HppObt@!n-2d;|vd zVv@!70bMJ1tcqb5%CM50d5Wf{rcR;1c=6)ABepS`<$rDoU?m?YA3=_l{TBA&Ej>P8 zYWQ8hWNQuYzk8(%>>*&L^OdeV1;9I7KhY$zV+w>ebldZ)iz7nu|e?zK(P{DjHUBA42c}*%M z9`e06J52orqy6~tAR`4XfHrm2&K=~qAe1k$7iC-1J*B0k?+r6g8V8=f@`#N4`nt=g z<&ce40|bf7Bo^8*#`jb03GX5Q^cNQ47xm#K?b-XCzmzho41}1ygAwBwKG$Cb)O=^hE6R`u3xJM-D4+l9c5_ z!?OjXkAHkOKb=UaUjMx@FoIu@z11^JZTrQt`$X(TS(=N#GOOh18q_!p9-jDUK%d6E zaoIkMio9hE7lo;}?YNEGt7sF zHD$g=7&3|vOrJ~Z=A9cW2_K2m$M0b>02(O67vOyJCLZepZpDi!krAzk&B36&L{dBV z-^`=B#rtHVUc)v&%a@ofhhL0wIgt+Xo>$BqE1!#FeRdE8Pr-v>#)uWyRNJc^!-mCQ zae4+X3D@)}&I4NYP%Mi<-~HMw*4y!iUVlBf`IDHKd}wD4M5fgl)5Y9GRq4(i<{Nwo zEui`1|GNyd+$2-fe_6MP%N1BJuJR%42JVK63NC8=!fWA$BY0S2{v8Mc<$^$abFZ*D z_Up9aVsXI}Zxte~H7kfgV)iORm0h1jQ~xS!YG^R=C8XuJS}T0QZCHFw7Ghy;zNgse z2C0P9#)=;aQwbVj;;cIEj_aZHMJ_xgCWy++Sq0vGuf7vqcZ$Y2;BrV@;%kTN@3qEm z!si3%&qBx#h8ubU#hEzpfKW#lbvqty{SpCH5#NK6 z)6E=S`;Z%dIi11ov`f%9KkR7YOCvl^Qla;eB4Omnfj$gn9KiR_p4K?I@aXD#fPgi zD=TY^;j3!DuZ&L+sTZ{^3frEWpMbTQkSM{rxr@G-SI^K3D8nWPIOoc$1}xIXbl>8Q zCaI@Xr38;laZekVK?Fz5avS7(yIRb?rPCJ4!_o)v;z6<``9NI228z%A)67F>|VHINREzo`EZL6%w0i4 ziEX$wy|r@e%<_7D3BARgQ}e@-CK&`fNOy=iPX>-f&WcuG=_}+_S92|Nk6^+ex_->R z6y)*F6bH6|T|c-z2^RoXKD9xl%_HEysp`G8HC@x?IOQD~Iun62ri0YtaO*hEpe-I> zIxFmLIsV{>t5pk4K4PqJY`NjSqnG30qL~T0-A&AEHJds;r3h3Q5og=23L0Y%RstqJGua`$Q2` z2xzz5Q0#YkwCE!i)_v=(E`6k%5p&*im-_p{m1}!Aya?3K^-IwF6$*#%dTX@{0j)Xw zAxlPi;n_h0v*SPSz35gg^I0CBeG_C0yKvp*f|ZN7dJo2omB55rFM_#B`iiwFM4Gn} zs+qtd%||EI8KVB{XvLH8a2KXU!TRi@`6G`Z7SWrtUuQN?RmYhx53Z`BhuAL9uc|bW zNq#`K#2AdN>>~Tm4$;GjTE(FW)}kUq=Qj6VA~!{w?W1i8^hwrL2vFvBi->QM?WPJ; zQ3TqDop=pmkDTjB8ug13sza}%rTZR+2ip@7-sne0J!?!Sa%SU^$tmHe*N^N6%j6*Y z=b1)yhv&wrKJc`u=dh91+fbVjf)`1xTX>w8CPCr;%p114!#Wi*R^s4=z&1UeHr?Sf zbYL3_ztNYc(bpfoD^wukw#Nrs^K;RTES`s`bT5z1LjoHSX?@uKv1B*=d{^qsDy&%k znO$MQt@~^{zN(QPM5mPC>B}h6Zo-qc*1~#?$a=z)8+&y~FsZ-c_+^rGD}=S_$YL=; z6lv&1v){LE(~{_sC%oTRGP2<%P=T~!zUL*vwssP~cGB`~3MH|)hBQ5#U+$M3KVMny z4`gMH+JZ>sN6j?klp23{z3y;9p$^1fE_$?7In^ysxPLocTHlvZ>Q% zKGmu~2Bo5Ie$l$!QqhHkD6O9f{s)rIgS|wBYI`1mx z+4d_;wW&4jp-0{Pk1B+g!MC!v7m})F{-;IQaN*Xa%>ur2*rM9Safm4JuP{sAtDEG= zXwl}wN=rUU;hN3*P+k#dtFewyUQtia>ivWD`=NZI2i=41=#_Oa#mrSdjlQ3gSwB45 zu5rJy4F57?&KnL3SGalSI)#$R!) zTc$-l?G|+2vN9V11X|=Nnd!MOvRo@$Ujb_Jofz3=ir&*bJc?Rl+h>59BS&@I30taM zdP{_e+MBrcC(t7kiBr`^l(_jQ79~bXP_i->K3q zD#O};k!x*mPFKw&`DQ&MtzBxYzqDP3YoI0EDz>rFB&peiC@xY1O8 zEh;ZTC{fD+d~Br@CePjIkS|b3f&!$2NLGMHY3y zE`KO$nOr6Yn*r%?>3=q_d(m%)$giznC@T^uJE4kTNUbfI`I1+~$`ho%XTn&b8XHV% z^1erpdTS-DhndKFbfkCwAas4RP?V-<)9O3PX6?-vd}W1-CthK1=y=!+*S$7X>Ag0; zeoe|4icU&7dT(>VD|GE{?2e0vZ(eZSg{d&per%gVPM2F`eqxhf9AQzs1}?M?U*3-{ zW+fCwKF{JCVZl0R~EW;T64PQ z+V!>2&03Ia2e;1soWrCy+U@AyDWam4>ux+ommRY@6Q1ba+W3Zhsxo*w?>C!n=Cw!% z4M&bo#y=jP#HX}nlk6lzxOBP0C}xifzy78a9Ebfry{#0DzP@;p2Oyo(Y8w4L9nG26 zk#}_o8Z!%(cJ2i!!wx=epQ~mZ3?=3);>RXs$7bC*%DjyB;CB6=1`;bQc*BD$SKYU5 zN3Psawj-;&Y>5bq5_F`=sAS0>fRZzAh%tkKjS#QZxdA-i+j1Hb@+d#m+dKB6QN_3d zZkcTao@e^y%UORRd8!zmt)|Ew+^2M+TMDO=mlP;`IhE?};|roPkmMN3Dx#)LljAHZ zDammvEib41r54Vq4RYBq1qF%D#m29&`YG#2OO3=&dC;Qoh;-SIzv`xtE;B&!sX>)r(MzJ!x@-#A{c0m}HzVxvgqPg| zdUM;TPIX=(Ol91`pP2MHFO8BXg2f2Dq~YY=IYGC?YA;KBVTcyMYjrJk4fK z@>!0k{IE-uaUsroqRlfQ;166eDq8veZhQ^Ll@+Nn>3gFN`12f`sw#8MB5D{8RR8BP z?+Z~Q6nS`O9)A7y@&&XShjgbnYXzH+{`dVtjvc$Aw_9}@Y4Ccv&->SZYw!-S57?cBt2;%Al6FsnLJxwo)J}DP{@)MANABPW4)0c@3r;It_nrvF6CBr$Ew0#o zlq#=>ywu=fz9Mn_YvX1(vT5|Yo(6Pk7&$h(s>sI0RZSa`x%0?Vr<~)%(aJB8RCtfc z%pS^%qIs#?dXYz%48{VG3)~xa^usvNkl((99eo6cMG2YCHC6E&r#~Z*JoUH{K$2YF zXI#JUB{GPPW#6wuT{pwK?ggiQmU;YO;jR@%R^fxNRbD48ch$`Ed^y|U)BGq27@R)L z!YGU@EuR_|KuG0BVh8C!{_p2Lh74xQ&ahGjv363JbQU4iHsuU00$G3Zi7q?;I4$-{ zWkWN5v9E85%6FYQ_>xeMDB;k!_RJZ^ru}DIRHby0?-*^szD37gCe-GPCe6hYY@!7i z5r8WT@mCXCF?z<<#fv`#d3onA?)~|!R%d@+`d7C? z)TnB4)@!grfY?XYWdB4zs+nv!l8E(m%UCDUZ&;eCKcvgCK&V%jafm27%Zs{EHlEzJ z_dGhJM_sl}fp!o%_G&bZsGiL_SK(1mLYY1j@m}EJ(jU#3{rMUGoIj|g|MmQZk@K{b zYPbilvPmiXSRFGB3R5K)o_jk2oPkSbr(*oX?>IU2y1$Uzi0@*hHYijEP6^(%pJA6L zLh;>o2ng)*78_a-d5y^>?Y_w<0#Jj#1^Tp_4(AVQCOP9^wWsmv#EK8RgMp>I_i*s1KE*V{Ut zoZaIkzhDtQy=CoqBZa$Te-8cM4{%j&C=o}vg;9>S)RHPfzLD#Lv{RiwjS4t+1qCp2 zlput*_S}$xue51_)KnU}Nhn$5D=R0gvt2o)7ZV02O3A0xMK#SM$@ILX)xXV|`RTT2 z?-~NP8OPUrMKc4$UII93o=EJ=e9C&tqvvI*32af~RL&(JA?(5QR|1VBS+$K3$o0^Pqv zgWhY}GtR04zbm2PIUrIt6S&qPejgtY228y@L%%en07-)DD@0SjRc^ws{cc}qI4D5d zW;C3e7nVijss&3gp{>yr;{Zj#d&xxlvRa%ETKc0)Kg`oG*8ZWBERCQ}wC_(q*OISz zRA5~PRHk`yfaZS69bqMXP%BvxkM*dT(#nM3`8aMJyLHd>alSuxC^3lY?*}3H-w!R| zHjB*tmaFZ$47Rs&%?qRvmmJdf2@s;;w48FPTU1#kbZMaNO#qsl0n5U>q%0*u--ETMJojDgA z-RI*#Rd^NtPK*xuzvtZU_p*GoX@hqkdkpLo92w!0F(T#+ZPWbORG1 ziNy=A^D*oY)%*>&LV}PM8;uQAkv!DjU;yjFm%L*cT0dv#`G>^FnGIZaCUT*3;{q_N za~0-*U2>w25OTOsw-_7k!hQ0;w=cjH|6us}omS&Mn-l)Chdi`L($2Io%@5o!R1kO zJ`I5T^32t5Z8G9gxUENrp&&>!ylQ^s%}Zp~N#1X&2Y3~H;xN%wtvCr78<2)LVQ||A z@TEOhzt)x~%b@9d&?apZaZ)S5=L0H*3)fzMJMv({SN*#db24^yW6ivK9l!o>t98GH z`kjU+)l23`gPkwGIE6)e5795v(;(ZJin)V7tIJ#mfVFfJj;CB)RP+HCCDYsm zee@LCx)`l{fTj)*`>}H9ID#Z=2_-p{WPB400@EDuc*8zi=OoV|eJX_W+K)#S^WH*Q z4rR=-%Bz^%9B+Gfn;K?l19YNoqw3q@v3vkpQ*>G@?kx=7Y&eDktpm7Vn)_$&oo^bC z)m?M_Zo~YmU_f|<+z{M*8~qoVIMY~287bMDZ_@bEl^*Ut|Nrz%yX`s*(H-f1`?6H~ zZ-bJVdo|aa-(tAqonrKDk%0U_CC~cRO(`VRvrdiSH+|6i_kdqem1SpR6APPs;n3n$ z+n%76d6+$!gbRMY9Aq4JekG-ijUcJ4gbK29H?+VvAGg(0F9u`3>~BFwW*)B?OAo&9 zRsL{`V71CXRi)P)pm%y+9$3BpzX2h)@!A~K6r)pnbO%y4b^~?d+;*o@a8Tj(7~uc{ z8CBqDKEq#ENq^GdM7BqrdcN1i_{#Xz&{&1d)q$p$n0$pH`+`Umjf8SrzBZV%)WADc zz`Yty`pa&qAe%K7vVNo;X5yu$7x(A*v92Y8qB zgd3~e?&DbKs4TozmgIWBcG%(s+zTKDwYbX3n#~u_%TVPA!LyJu7s%Tbu1c$+Tzi+Q zy1}8-p^W8pkp&^!5D)DrkIB;IU|B0nvwh#iT)tg{Z(rA3fnAe`4~k+& zf3IiJTXvE+T&TLm!-4>jTzfrKO5s!OzBf2q%V&GGSSsS7oZqlp-dm60K}R*yFL<5h zwtA>GZSTo@$eL11_b%Y=tDAy*fBPuXFY0g}-o#?!i<&yYKfy{4BYYe#@<`ifi6X%z zhpATc=NO%>h^`x5^3TC+ggDPXlTo&?k>Yel`j}R#M*28>kqIO9@F&C3n9u7n;@SJs zNntZz-eqsILqgmY= zN~1_Oo6^WGzi=L#()@44ky;X^?>g`z2yB>ja?~QtD|Kh7aMbV%D`^SQHq06LkuAE+ z;a!mNbGOA@@S5_4`J!1kcvblZz1%Ar(Rm$Fz1I(K;uE!nk)EwuCNTFl=||QZ9ShYA z@Ug;VDnFoWPMESQ9Xe}jner>%bNJT2AqB>}D8zE@n1IQW87y%3&Jqje-RQJHEdfRC zwbhEg_oXt6#c9$d&V=QA(eo1m&lo0w*`)7orAH?6a6$5Qgo>lZ->I|0)uhpv zGoO+6Fe50!9Q3jD|12=bUKW~wNGXYe7+bw%p$_!CTQm&RFa>{!#9!c5Tb5*sdDrkpdHu||pd zjVWITRnpekiQ%UHjQs|RX3?`x>+|GoHs7tEQHmS(R7oxBw-zo_j>zNjwMZrJw-auZ zM$OT$T*<^Fi#`MdCSPA2`)b}8>I;kAwDP}rva#@sfi@WgW<%cjF!u_C<~`Q89SWXt z%02?LLy?(d??3I$aO8&?hH1w$_?n`VbYe`_E`jcg0+@pEI#4XhVHj@ z$$sk)FJVe~p)&Bx+OKfd#Kld$x2D5zsD9s$q*vSqq&o5iJaa!=3VQQZ2fIBTdr2}h zgdeXk=iCVE`qgRsYm<9fK7T3h>r+9#HRsDa3!M*U*$j^9t9&(sQF-i32F~1PlXM94 z`}6z0)#QlS7{}=lbzMFdpL?ev*Y#}u2$JT-=TIn)VEo!}Jph0?j!e$|!H+PoR2vjI zjuVfurc?V#g0G6JXCsyK#*9t1Wp z={;1>d0ehBNc#;q;;GGyB`fVbc_U5vn5Pr*0aO9R8@rvb8Gi1}yl8v6Y;yiYj2h(M zQxYP|mo;PS@_cW16YR9JTn8T8y~-*psqzU2Xrj5F{oS_!RkYdmXV{Hy25HONQ)&vK zxCawu?nqsDGCj*TFXMXe^gBlLKSg|A*j4EqFOtlc$xLFI=d1Ng}{>a1^s+jv>2FzhVnLJNtgGpDWu?&#;{lB zBlN@g_fd@(TmwHWs0N=pVGq*gxi$_&V~rvKJrFGaYsQLuGhIJzIlO=oDB4CA`k@-{ z7%i#KW9LOW^cV@qo5mwe-hAfMt}Y*Qodt9T9Y0lJB3Bz{eg~1OMrwd0U9B+kIcU+f zC~GC$g(v}-J(31-3-f1T>jjX5i&+!gKij{)Ken2EgCcnW(z=U}pF@FOirwifMky-a zeVcGNtpD97CO^@t%WSjXv9c-0=?fZ}!~@ODca|^#eZ~!SIk01*&>WfW^%H@%VWUKM z)$sGGs;X#1;7CP1%)=)kO&q-^({*BHCzsbyPT<=c=n;#mdoM3+6SEPw=4|{d$je#m@xm_ zHlIzbCl3OpXP&X~*Z7V6d#NSg!@$!2ZP_t%rgl+Yz-Tp|1b!Qi`{aQXGJ5$+Zq&Dp z(#Q`&3;;PY!SYOCFTU)vU|x~uW&OzzurPj{x6f!D@?b?@$&$g@^UHR-MDXKTI=(;w zCZAXrf}CMwb*K<`v>%XdaCBSp=hHu$AwVlV?Sin_pdhNBJnE2n&3J|eG}GBGmKs0;Iw0Ut8Unm(Vj2uAr$z%t z#*K#^j}w1b)8~H2&Qg;@LDMM5-g}R)CGSuP-Bzu#es=_i_D`gx*~(|ZRqaVDmr?I2 z9$u%e68=jm3J73+$Wh}z1u6z!xF?qZ`jkPNIVl({Il0KI2Fe}h3{$-m^q8r5G{Cdq zK#FZyd3kwB$+OUoZl(M>EAZ&9jEduR40#7HuqlhNyjl{P}Xx5|%1{ zjYH23l?72#{h&TP5|Z02d`hdN`FmYM?K_5-A2_GR3y;tPqnFoyhtj?{2fc|`*i!$I z=A;iNxnAHZAanr+*jv(!|NIKju7(X1S#LXSxRd~&cY;Df9C)KC>O%39(UzYQHcYkj zLe2NbLAIy2GklkSc#D1Zw^jSFxR!BltSt84jUl6lj*}a6kO9c(Uo1SnOFUVMavwi^ zdg8!1uTgmK^>Kd9dLHC!>_Y`|xgXSj#fd#p2z>TXNtzvk&Gw6Jdin)K=}UzqMcEgE z{_x(NJi2>jyb4CVWYywVwZ zS}RoB7E#S5b!qseGlHl(AD?L5(yrtEg$EgD?2Z3g2*+)&Z{tEhpFfSxO*)z;`n}Tu zBOp{UR)DDNSq64)gBSF%wtzMjtkqr|?iJ=ZhzfKB`HN!?O=WN7$l>kg_@Ir`!Ri z3lILYIbJP4gsF0$ZQuUCic%B-}_5>ENwxsHvY=`p8dE}GMtM1 zvo11qpdNm^+P`!jbDt*-M^RzfQ_wDVEKQZs5Ug5Hd_5NZ>G;W}NQNo{m1Zp0Cf6to z{ze9*eCjXA8+Tvk(HASz>&KB;8f`n513g)6mmy!EphZ668;&*qE>TL7+jB=7dT=i2 zMyJ?=d&1|Fa}A$UjgIJSs_-lq?+9v53Vtr7YLkt$y2uGTmfbv-joXZl%4;s5Z?2A8 z04uwzS~j^Pm!~M49zfmfdE7I%XyZCZMdE5&mE>Gp>vEe4EC(C7!9$50Wbz6*@WfBt zvUXdpHl*Kf^ zfF7JC;|E!q_)kG`lO-3PP1`70`g~gLf;`bME3CSU|mC^sGZXH=?| zQ*{B$!-@K!0`Y+#PLc2|E~%p*R@#6)d;p>Xl2ikLQ~uq{12oE2c;N*7X_n*dOQFpj zZWTWajBldUF+HW62->S>fQ31KEG?;$qXgz08->}CDO9%iHD5#gEVt_CPDSTt1UNag zl4o+hbk*pok_m7q;&Zn7QXEANx=^xKxGM7-~jmD#cy|^L9I`{NWS<; zH%bp*N_gMpRZLjXx>5Qs1Lf_XPGQrViWZJXfDlIbCGcGjPhH~B^o$fw9!#emiz|;c z{GcKiojmLOAP@5&JBD1H(LFVO#^#=u>H2j5=x)LumH3$oKUr3}$nhs_mzg99@CCW$Gx zt=rCkgs$Mg2qytH@vG9};^oVrm2S@@5GP0N_KLVXtlh7pL;3dV3*Q5&c!>CR4Urup_Q+8ph48VJ8VV;Vv)22G8N4b`kya0&Fw+(`DEMI&wc zX3$q3kA}mzS6!Z)uS|$?ALT^8PNX73_jV08lIf@q%{6R66Z5r*xXYTpTTe(U>#)po z$4RG_H+haJgdZI!v3hx~Ez4>fUG((j$*|6~EFTRrB@V9kt)*5NRHFM5^vhdp`j3Wl z`YZfg(LB+tmoujQemB!q+bKzgh?X6qL7n+wXlLZ0&edCIFMekNKW=XW$JD%^MuXNlPN+KRob17|zvP)?T%*GO8=9*)UoG@g%G zvPSI~)Yv0`C0Y_WAZi_vE<_?kt&Xb4fs-2#{ShvHbBicbAGj?<{1qFvL*!Pr^}2c9aK9u_Vy<$*yNZ6uzILjO7eHef?O9%apm zxnEk}Gx2w5*g(yNXbemgQsf+Srl%)1r04HF(9h2kmGAeUl+W1(ZqbEGC9BdD^-^-V z8nW>prLafR%p)bTeY<6$Lj?w{SKh-j-uqHe}k-QAd&k9*X9*Xx-`?HY#|d z%n+XQ4O6$vPo{dq^FF=A2nKswqPj9e?l^r$qWXo4u{wPMnxvYt_g7mfijmA-ZiA!# zrHwmOwyd|^DNH7|iJcDbDVx{&rdgOw_$t0EKqqYZD!g~sOThZRgKZPHjgXVt3ixW% zRL4|1Wm{JIQ3)C1e4=8p!TN-ZZ{ccP*>!5wZ_QUIK%9}sPRMCdh%JbT2f6rY!s+*mn zs9R_gD#fz7d}hIS5VfGwexSaQm!Va0T0T4FGeJgG0WI+F^tomNU9I-*sV4bDjb{P^ z%!6jvU{ozT5kLEJLldK@^f=MzJTNxf5H?stlLWy5zD50QZ(w93oX%GCW6Us?jNZ(c zAc-32qc7wyj*4PbzZ_Q^2*!bEsK_=6M&sbJNq*9sgrnxUV{)NiaUy?5LfPY(`!8h{ z`;msPFC(v9dX*LhVv6b`Tg+FLUqgtk`Hq^t`YKu;rNm56p>Sv_NUedg1u;pHE!=UY zY=*pX?POjfJ-op3pRIJnI&gT&Fa4v#vs4!;2xF6q;n7!%Ka`y~T^idkzKPm)@fh2Of`)MmU<;oFPlpFCjJKkv<(NaS@n7av+tM;VJgmaYRr8`a#*4 z&QsUHKYyGuP{EJ?p~&z3M-+llNVj~*|GUk1{scYgeVM=aN$M!KdTg+@NmDu%D6t2m zybw3cifc|{iHL|;DeM~;aJFX-)bp;D-#0DYcJO1nahQsT^}At%pVVXLP4C-uThX;w z@cG`f{O2YA)p?pb+`Rwl<)xiW;|kYg$x9D_AfOn!>A(}nGHExyh)q6S$}y4m7x)6y zfy2VW!p2_WE_5G`=aHn2$;>CGr0mLaq)6q25mt}I+jKK*H_d^K=8oYwwAWXm`)7jZ z^L4aa!$?``m@bV>$<;qj|3vHl$HK^b)83t`=EFx?Y>j#LbU17l{R>7oBAP%16{it#RXL79}Up|_}(A%4?EjvIxQw5 zw(p#il#*04`qUv6#dkO*y?hD4HP;x9PYtK+`>u@Htz6QfMp`RvBf+*Bu_}J>J@>6? zv?A%tx9A0tWt26a1xsqhmLkzV;Wq$^{qta8?BGSpDCge;Aq-(`Pp^I+njWht`fHf@ z$k69|%8QO&0#0nH+L;Q44?lU`?MuTcAey6`tom%uV7K{xYw4JgGt%?U1Hh?pJ3*P; z0R1KanUr5bZ8+Nz5ajt-?1T>>G5(ia1DLLV9w2F$Noj?sML7iSF@;1v2!IWkZRY8w zSz}*oF>g{OfBUtGje$YUy&A?fV)xwT)EtDJpOT;OT~g?}z47vAbs|nio0Z0BtLXT} z&zi$8#*SCSZYKn+L-593l)XyCM>zbSnACrN>Bm{=?8Ey3V*KP$-79W>pId+$12daI zpOx0}Xz(;~mjJMtYd#*eLXffBA?uU@j4=(cdo3ME_jejRNU=L*F`SdZv%_AmVr>r} zs^}w86hQwQa(%$Jt6!UC;nFZw>^DZR;XK70`~roS8xn9=H3GA50L z-~;^<-!>vuFgN4o^qn69JvO8_6pjUay*hQlZv>0wzA#lw{H^~IrzqZcApfTccS(TZ z7?I%Ti^u46*-_lxG2VEIj=wO(_O_quaig^l9i+#&jR-+}$*L=CU@`UhdvntTza4JD zAcQxp;&PTnUcTFJ@(2?a?cU4uxcXPB1z9au@~`(B_ZaD=wY1!Q*W}FGHu?XN1pSW* zZwhpf=vew*%kYx4owj8Ym~QK^Q|m32%q1X)>&)#T1=ge8B-OFU&p?ms*-+MB*K9Mv zPoovqdE@6D716TwnSsh zw+Pu$V9iD9x<&;(&SYY8*X4d=p*DSpu6fF_9M9qclZ5kNQ}1R(UPq+Sv|bt_(RmbRd1BwlX; z8tOvHbyWD31#MTi8Uv-|t&*3Ei-`h&Y`GPqENchv<(=im58YLcu` zr$N-@Lm3`HZEPd(RuVjShQXMma{uDD>1}ZEw?!XQsn8$_0&k9r$?c8NY5e+aVf&`Y&HtMhz=&uh2gB1qHssDLjK~wg;F- zyn3SH^Ya=X!`R{5U5$sxwI#XA_t@mB73e#of{U)+{_*X8Dlxg)I(uC2AJLNHI|Ok5 z{{8W&I~dTX%WN_6ZB5J;AV1qQGS{A!%f_QSyPi+RKO+=gMU{!Vi8tqpLgx9lP-_yF zvd)lD1JQNh>=FF#%I=jAcm>=LzDXSQ<8&}a@nO@R3F4PvS70hyi9CcU{l(E9kkePWOOr(mdR-WCHo2H z9V@c*7bxo+G6lIuvk_uFir9T^+eZe0b|UrtFS3bfLH@nzD^$RygXyFs&87N%a@NyWG();&*(f7=bun0(O+ffZjN!(dpl(@xyW6_+Rb! zF*3bJ+(gKqEB3A1KXvK7Ck-_{AG6Gv*i)eaXU!?iTSPp#$fAI@@YxjXp(^(i!J*+Io6m;Ofboo!ix zFvLzYzQ2NP&vU|f;6GRKim`bV`ln}F0Zzv7aTld`-eog(Go1*!58L!jI_GuhM(DB6 z<$=0~{%>g*9MD+xW{(sSsr)jrv{)kxjtX-FxR!t3v_%LkI5YaW@pLsInafxb?-}6e zl~NNFiX?o1@s5!mQO*!vT%0esD)1sqik9cLGc(<(Zq;Whpc48J(A7FzZP}hKLg&V= z@|sze0eXil?`7k!x!QeHe;NxX-!xtL2?+pt|LbiZn>uYl?Y`%Qx_$`W_}I^x0Go63 z(~MqGJm?-qaj+b%1OEAv8k}Lo9$#ghOf$u9?G$7?Is+JXP0ggHq)LDG-7e=Pv zuv@zKQDZU`$n&Ktb~iKWiyA;w@g+jn5$FBap>O6z?hN$$gyG2gA}wX~Snqo~4UB&` z9|H$BqVw01V^9FFUn3(^@&(!mfYEbxpMB@Y<|Gav;>&l6{;{pV)+HVy2QY$IkOYuQ ze0kj_ATIf3#T@+wc*V~7RZ@ok(ZZ?dVbb_*vyZUhF&aQGLia1Td(8cw18YESOpQuz zWkeWz`0xH04{?(YU;F%QA3Y&sny8l87qUHRT}QbP3aE3j7Ph zCe@0&m?0ce4g|Y&nb)rzC_b-xPZ-D~oy`gB>G*4U{1Q?%1zsoxq;>CVR8KZ`Bx|iB z@8~|Br`UVTcFky?o#%hQb^W7M)|h!}%XI9G0+El(ZrEerHU^|i^@P_b*acj%Ww}57 zI(0BADk@)tG41Qb^OUN@l%s>C4y!(s-z!c{%`g}7o2!d}p)P|62t6cpJZj{F z0qc&cnGF*B5h%$Ug>~1wkFsAGTq`+6UpyJsB5(ErmO}QZN3jAT=x^VbTlj9)FXDDI z^Nan206)f+BzMd@ElvwN1y}j~oLXo_aj|YSA0NK7lY7V%P&nJ60EWJbX=kg^OuIdH zsrWB9s*otEIs()_o!eqE&2eyAZ)<69CodRmAn-h2acZ)i= z5aAp z>Op}s7Y*HJjJyQFwAL#Sl>V(}E{Ba}M1a~)2Un1Z^yr`@DrEUHGGq(e>p5^>6pC0e z*BRaC=b<6{d)(qxIf924aY8#{;ag3hq>El^&oN{{^_an>E2Vq{TiFt8p*_PIkI(~* zLMng;@O-0^zExUXxUp`irKL@?`>IAFm0r|Rn1;|J)vx|`hD1ZJypssRLG*ZS&F((oIuEuX|AHH)i?R+e(aDw@=;#KPIbGf%>tEl6O`9ibO$9;BA?9~sDkp`m$M{y?-&!)Rj z>cyb~5TPj~Zh4ljwXRt))Z`(X8SpVAS|Ivfb^~yIvJ2Y}hr{5Zwt0=TcE6<*INid@ zW(55Lv8SRCa{@vza^HREs~W@VADJ1cj{=}UC!BxBUJI#}j&h+U4)K@@_<(+TsV1_fgfk8tUK&%cOBW zt6rJ&`;dSJA=Xptwqy4$(w?;+S=a&*txlJ)S!rmGgb@AEPNCrS9{<0gf|~Sr2)qCy zeztzK-ujAu&_vI3Z!KOrs^IKy)6%?@QeMEk^1#4&tHe!uLWaK`M?q43F8~9ZWHPj+ zd~Eo8#}-P}aQN+J3E&MUond{T1h5bggR3(H&M9TGT$e8*hXpXV8~?|DufoE558I~# zcccG9Se*<6{!~6`MYUm+(MGz^;{pMY_4CPftr++lU^|7;lLGvQ=o5?|G~Y?jokI$M ztK*-Crh9vD^H)w=28W}jU~L;B^0KXt%6+@)I!BQPD0Jx+=*5$shtClmXwL>oCP=)5 zWsYqAqyO55bJnl^(7Zfp`hIcOfI_cxJJ)uE>XfLfWwABsEz`Bil-x0h34%KR;@0Ge z=K)GOLm!XLJbp2;b{9jyRhIH+v9|wjj_Wd_0D$k=jIA=llz^>r89N^*D=D@iy(j!R zpYGYkRRY;_dBH6R%xRz+(E~uX2T|$$xTjw~vs#eP3mRe`DAEW-E`Bq(s~=G)veEZ* zc3W_6?q6mHyJ>cbUdpIf%ztei(XW7bV7M|U8!Y1n*t0OkFnXIUmH3*vjEoG{pm%TA zuJ@l0$6NK;ye5sDt;r$R%Xmb8VeF>0+-U;i;cX+)bp$R;B|9TXmy`C_z-RNPn1Z%l zV+PrcyF2!*>qxna`2s+00I$>A^j}6VQ+tFv((vFxka+5p@KtQ@CC^usf*Tr|4G=Wy z7XVRms>8$2-!t%mKJKTeI^ax|l016!sF1?P+q<})(W}4)u`0ACXML`zl^}>xNJMq& zfr-p-_}Wq5awCiyKMeFA)jszHrTf^80jWWgNdZ|T!0l*+24mfP^&>se7Wr$n| z$K)HtV=D%G&H<>Qfqd=L?RxWFF<1fgCiec{b8~Lyg6C%B^XRTIq#;c40?=>=Q^R?e zCiCaP5;Zsm#c;jCUhEbcAvL$ZkqUK0N)z5WuxZ{=8cro!)nd9eI=vZp=O$%2fAQMr zCB)(FP(kVZL0fJF2o>84_=OqvQUK#k7IE#@K0kNh?0q@$%z2vYm6qCaDJkMY__JZ* z@76=%M|UXFN9~pklw_#}`$BWKR6gqEk;A~~Id_#x&M(I742|aHE`VUc?G0^PAzK)= zJ%*Tc7G^IBje9?;1VAPxw%DT2Y6% zPdv^Vza22TUu%bgM3Z}Y-R`#W`qtgv(H!@7B)@$LgyxnKjmi<$9Jb(HqN4w3D$8Cr9FEz+!PN6kizhJ@SO}B_;V742 zC@A%waVxEHGZJuh@0JX<DBYzl`oaPVC5%o%z-&!>6>h~rNtvdE$1grsz>0~%BW zW1bSqeW$w{v44H|?=83`x|T4J5^v`oJ$-TKI@>c7u3Y95HYt`#!Vq4xgVHZhC?G%} zMOew{cfr{900SfSTa8WS2WnvTC!wF)=++r(f894Oa#w#Y<;>ESOfFbiCgfnh#CbdZ zFme+31Zck#c|6TC*TBjqU&ASM-aVH6;Kaax+d$Hf z3w}qWa>`>*S-Tt*8w0Yy2FU{qIvcJXtTU~G$7n#7KqLoi`yM6tThmu)t9*)VX0=8%b&@QK^2~!7waHNmK z8>2ff>sUy0JF27a^#(pcMau6LFKdWm2&zH>2aB%%mOGZvZ=^^y~%7HHbMB z!Km2B^S(E&)`nFl2|(bRs+>eMfKS${WKmUpL2augih&{bxqD@qed+8nB0+L42|Zpr z>t$1FonrH+k7hmF?0Ej!&lOG>C$1@kFYV;}21>`l6VV2@gzLA4c|iT>vih+E50$dp z{*dhbA&=wyPm5-O7D=nOfZ2N^16Hl?`4WM`e$>EDHc?*Upo(3)y$QO$Lbl{e?UVZ$ zVjP8%>#eLnhC+Dc%PX(#QeCQ^luYH}Su6chQ4RIQJ3MB$%~9dFst(>qZ<~ z1SiY{yzbM&2MCp_HK2kd!fxCfDdE?e!))c_qWJg!O(ED|Hm&8Rnl$zTK!|lxZ1xZ> zkR>=|HoFa|&XknG%0X|4{p2wjJZ?&h5mNs|;?66IfM}0ZA7_|MPX4B0XV()_5P1wh zViAxR<4YeZn38{9)q?^M>Vb-WcS~z=Tfuf*z{9g}&f8{e)uh!swiuq_$9i#9O#Hd^ zZ-$LN%l3Ygr!kJkrbg~Gt@zyn|EL$t8cH1_$4~C?!phDrcbl3>8HC_-M}lnWC=Gim z={oxxF8~)+(<5**vo4EdDrvxsu1{{4SlO~b8VNC6`td_7Nn9{;>w4>va#%hyo_ZM( z>VVt5hl((wu#xn#h04AEr>(D!Yl2GC=jwcNdK_};3^XVLbntB-9xq;41!Y3uTYvoi?aIgg z*E5v%zjEQ+YNyGG!@Fu?!*G>^s+}`e^71{f*sBbt-mv@Nt|#Lyb&v0YB3=9K9cF1Ea zpm5uqmq33@$+WYzw2<7DaVNnxT20O^6mm=|bkn^u?f;TI(c65Y1-BK>JPe3;9NcKg zE-vjF6tQAUW|XmZf2B`p8iHTb+=vbGewZrY z!o#_Z4Tm`qRfgPj>!uS6UR11KJNwg>B*qEZo9M6}=j!udiASNNN9>bLskM`*iRo;S zq%8MPKFhwUpuPkL;K~1OVd8_2@r*8dG!nE6SA;EpxH!dJ|0JI>!Ab4^SCZT`4{5bO zYt#%tx{IzeN+KD7$wD_A>K|h_9=o~iY1BA^fH+Ab^SM}D7Kf091{#X~qh)nEb>$6b z)TB|0>*x8iuRsNXC^ul*Gn%Xx!wP~60;`Pq$>fO_b)9*kUTq@hGV*37pf`_M2M?-B zMNda9AH7hRu^-!G+o|inmL}$U4r31}l%3Sa&Ld_P7(d8-5?m z{tEmky@MVDUTyA@UP&qjHKM|+wtu64appiri#QAmnBspy#WhKJIoSP z{!B@gr}zPIb`*M68w_~zI%*EjspDitzl>mr_}=Nvk!??q2gRVu63UOKNq@Z;LoXgho-b~`aKubACL0>D*m#y5QaX}R z1z{X4&K9RJs+i583Po4a4F!{U9x$<PPinq}wn2g6c$fv0rQsbwsIyy8oR`#oXH^ zSrYZ8Wt2=!*ej5_dre$(^E~*R`5^xB9|$kmMv6WO|LpC_sO?5Kdr2K$SPg|2COiAJ z|MoZ`mN*oY{?bL3GUyCR&O(Z>8&DLmR~m6=P}|!P`5}a+TOTek+2K|r4yo!bU-J%e zZG^naJ9cL`4r9(rl~hpIy2J3>1FiZ!vS#SGgweE&}bs|VR38HNG zm<#c%1lfUf)Ab4sI(Y7oldmo>T&`jPoogPl4)@-VI=q)NcgElYh;A-TT#WgzPUpTk zg?g5{{Oh-|I*I&hbi%KD1HEjC&t9=^rl+Nwe~%T7!e1fsLrS_Gvnffe2pvv$N!9KI z)HCCm%3tjPgLs5_{%3;-!gejR+1jd*6Q8w^%Z5V7($h>>L`~p)H2T5~ClgO+t5cyq z_)??ra5eXxs)FplRx<8uLV;)22%-ED0e zgnqsuJOh2$24cJT_u-@%dWw$>+XR>2KTmrW=?rb}-zdRu33{CrOStuBT)ptZV`0s0 zKI>!scR4UcskXmGP7snPn3-+ZJxYfsh{=u=N^u5ijb3UtJbjr4=*=l9vPIzlDdO{U z5jS~_(&1`~qQ8ARcQ)H}Y5$4Y*My_RLT*ogU9j>=)B*MD#R5goU-VaY@cM-kA;P;zV`F) zZsNjL`(s=Y2tZ&^)a&i*YjpXT+Un@y62YrY&^?~><7a)`l2_Z1UC5Q&+N4{%GiYR) z;E_JuqokL%B2M?&^(wn78`TvF&w-&Kkrle_{%kXTL?;(sHi?eEb}cjYuy*@ri6u4> zq1(~Xu``bcf)r@q`xlbuj$XBfaRzVWesbg2B#_tsMy4E~;Fl4p<=-PTLFeGpo9?oV zu}n$TxDV4nc`JSn{34sd+^}5MFhu}X0@j66RLjd^KR>^cZ%<;|`?6gbZhXC*=2d&i zC&;U;Q9iCSEfR_=vt@q1tW zhtAS{LS>J23#Zdrr0Ez>(O$)r;mI|7$0zi8%Hy3(<;y>_wNc_3Y6i`5R@~p{V9(uY zX-iY~e+HE>pGzM8WHucTa@CwFrOfF9?EYxJRqetoi1H_+Sp{*m;`T+0}t=6?F^rekc`*I3B;$i zdb_0IXNnjk6sSc&V?`o}cZMVAik_m(AY4i|8nbul0^-+6*9YVGTBB3%YJhs(4A6{# zq?s?_(*8MPWn*Rb>}>H4OAeaWH;A??Zjq)}UOrVP0ErxQ+ z<|f@w?Ys7+ly4cx7)C|bW@=hOZms#Dy%6(H7G3g7yMj9H=2KOcgfc>Zlx)CV*0mc@ z^50&U{~XZ1r%`My25+F%exUkfb0>>Bs}dt_d$;sf(~qTS^}^WiR>sR>PwX87$}5JA zkWEHME8A@%H3Y-R-k8&79X(^y;C+35fpK1p)*Ithv6}6cWUuPQ8;d7HGRRBt9+9=qfxf;3@hbAnXf@dI2K^Kbc z0d<;JUhzw%WfNqe1)c@rDg2;!ziPi#R``fu1p^XPDf5Lr1&4=Ixq*lDqljfM#5h>k_}HfurPG(kY&k4 zOZ+9xfzMj$xEvgl?frB!lzP&&rPg_n0=Xd*9V!ne2Q7(taVFo3pi*xAv;Kow{p-uE z3$Qn*s~eXlN#xsyHy1^G2)}$`xu)p_hQ}dW`=i|G2_$x;YC00lGh`TbtYcJ_N0``y z!M5ttJ)ua%=DPm%`M1RH3hcf574NG*4{s@5I=n{ zj@6Gp)km04;_*;V?}VM(O=J7c&WGsO!*a`y=FHS?_f|y>Dib?;F;-X?h>!P+lQ23u zmjalyf?~6hLbbi$(P8iw&J=TaT2r(*RKOF6sj^zI3GyjjN`PT7vkOwDTXy*H@>tw> zF0a>0FxQxWm}@smZPOQ*%kDBD(d z#0e+uXIOkt*6&S@P-|kdD$mtlKR)*eIJ+2YbCgMm|8)hckd9vWhUKJ&E)`W@S`l{L z2ocKm`yL|Fd&RzUISwZ!`0*ewg;GL7cx5dYFY&Q)3})dQd~-q6a05R;D*qwY8PbZ& z!;FT=?G9Uf->?0+{@uJqaV)1G`B`>>p)i$DTr{?N84!j)|2Q7ilPt6yXbp3BhM!qpwHUPZ_*2cY**_0d`-GE>wf&R%L(Xf*-65931@7}1+}_)Lv|S^c#w&pfM*5kq zHQiOyP33yIT|c}|PX@jCYY~$dC4@1E$u=p2lR$<7OyyCjNVNSMXZofU-nN*v#5nce z1x+C$Mp4JJ;9zTII32BX%3O*Wj7rj^Y%qJa5@o`Z)x6ZG*{oCd7Eh^8)?Qc*X4Xq$ z#1vNKMcpJRAv`W?9rg0d>2S%u6wK(U!5-Gs=xOm4_@C3`5pB7u*4V3zgzn12O zZz2}r-s%3a-Efq`Z;^gJCU$>&dvX~WbC1Jpmn;&Muo{q6gx6FGbNEr`U~#V%E9Og4 zG@0;}Gk5A&T!ZCqrN+??!Q<2x{k*^{eKq3rbvdL|Hgx=6zi9sx^hk%C>d=dF)`v?> zB0Q<`=@&DiCe2}&p(?$lDJzOY5qz5x9eZ{y?cpj}=$eyx!DU7M-`cD@vdifHcUk({ z~`xVw+$zAqKBu;^I$)o&1Yp| zt5ZJs*kVED_iN~n*2NE?^?FqZaA>kCb)hX083De^Ism^IymxH}@B}j%{vSgso5G32Ut5Cc;jA z#6K5sQ14zj?zJ_B_QSja&6nu zw=l>3r}Nsc>74ZiKAXxs!|~y*iQB{@4Gy1_?1lrmDtAtYa6wD1We)xD7Svh(Oy?MW7+f}!;eey|VaL0T-FR80wm*tMGuJvI*zBo#I zFTI$te2B>ETX!h=$z90tHO8dWX_9}jO8@g;i1dAjK`*87)R7HO3sc0r(0#VrNd`sa z8or!i`SgV8WaQ2LPN?0ZtIj>jvRTDIZ+YQXDaSD&UO=85QeRPbMNfildAsk`TD{LjO^ViI*l?eJbTdTNd3_1y_2w%vL{tFcy$- z?2tX-Z9?&q=g|Kj+F@LRTsYrWROC|YIRIz4c|+WP(JH%E0S3my1yxNe9Spm=*EMmj zoxc9$Wy66ev;5=o2-Wa~DA6%-HJd~EtEGhjA1j``aU-~0-Ee8`ZZx4a_f{o}@?*KE ze#F8_NoG4;Q`Gh^Kb_Eb2guMu82^B0n_r~JEavOwf3u|j^Cw8ASWNn+ekG}lNa2SU z{Vha&VTB^yCXAAWL*&MRYHdGN`h~J~>^S0hQ6w;>8W6H;1J^~*z*r|`)3L8uogk2rHCC{Jtw56}QYtn;f zD#cq1?3$}8)|5n2?&jguKa|;VZU4St|M?RU1mT;%;?ftx=CFv-)r>e0Af#JYSsguQ zONlH!!0ZwvLfO6vYVGZ$tu=Vk<^32`lE^;rXo5nR>#SnHVBtNXl{A271Z!>O{(LZ~ zT%=+qIO%@i+kJ{`x1L8FYbzX<&_xnxR=L+hRh|86AI;Id0!;he6U8X|0_LN=i{zI^ zRDOIIkm~l4tI-U*1iIe*?_a>ORv>HSP!bSp+u`0lkGCN|u*RxPqw`^}_OE^MvBPO?xiV`xfa^b950xW93pUl2`)*B;?%SvXvI znCZAdh=R+JHbzu)1jeMxnQ+b+X#K{D$LXYo|9=|w-)sp4d1*XA!aj#h$qa5^$rUh| zI+vZ@D?ac=4Q$kppXUWK;wDEW7R{nu8CAN)t3%Q4*~8#QQnnQ-zadhlX_9V1#$Li9 z8?xrul*)6pk9>kDr5v(P9^Yw`*w^Qya?*xW{9oatt8150%NJZ=BGA7}pq zc^hMXLw;DkPbd_Y^zgU-tGf>S&YL` z3A2{v>h~9o@4X>UYGh!yJz4%OPxu!x_YC!cU}bi_?L~J-TfWx?;^j1XW~ytZOYW-Q zJzB@dJ7KsJQrWEFGeE*{Glo)R?1nxCVwks?cw!w3zB`Z9#PUgce9O z9cmC64{p)84grji*PeRz-Be+O(xtdHIi=MubyB#s<1^vD${kbv) z{7P$uChv*iQ3=Hr2kz4PeHBm7!|v{@7sCpcfIBO%Pa|7S>qo?MzBw53B7KzMafgOv zV3sy-^N#jA{#?4I>y3*YhU;?keQv1s=sAW}79Xl*fs^i&0Id8RP+`B3)r=s4GHm<@ zSNva`@iUGm(Nsa;gNnGl{Z7&GI=$Jnog&JFwW`& zW<^f$Yninh_7TfmH6{t?2loXGLI+(KD8^#SZpuaROn=Hq{`sp z$^I``d~`2e-9jkkKfMCT+l#4MQ0zUbSW*wA@Ya36v7tp$U4x+2UrY3N+28`ef$~*Z z+vAw?`p&#kubV(3BvY27>5A_kxrS&~ytQiMeUh~Z>>BN(l*3u`QOQ=Ms*NS=TGMrm zL!0?fsn;8q#)51*H3J zcf9>Dk%*Yf*IT)5h2DTl1?9W<%83Z9VawgVc)gaq z(fsyY;)DiGQ_6dOrFrdSP?s$(lSP%~-{P=Nb5lYoev=z2&D9Q1jpo9`JubmA+p7e| zM{ zv~2~H{8+pBUV|Zi6x;X%=gw)A8(&Q2pLKe-wmzJJsO@i)K0TgqRZjIf@RNuEeEK6n z{-ed3jq(Mxlk&>1OjzeFYBx3St&kQQ+_#$bkQViED8aK_J=y(WS7{QRp-M9;mR}R{6aDP&;WKXE*4FCFS4w zsdMFoSQ}Suv%FQE&TArS+tRQUG`AEqyRo;OA&&+#xBRnFI0(%!Mx zo_ep!vE`u%Pv!gp+mNv*F4tx~{-N_y>4PX!3B>PG?c3L0evfNHe64LtjjIr6&u^t3 zf}yDOMQ1Q8*f4&~`W;MEz;A=ify0;f2XLFni=Oe6s5U2a|DkUh%1?RN`1omdn_6$d zxNo3>P7wBCGtVvApDwq*o@7J^ zpB6sL7bR9JoLT2b1o){RxN8W<`s{rsb{&H^H%$FXl`u%~E@ue3{e3vZQ;=HbUX+E| zNUf_zneiL_m#&G=y!iwxw=u-p`ol6=J46zCBb&_r@dytMDsL;(dwQdrg$$v?25*8T zdo~jLk8M3CJlZK*7bd^^%`*#=fB!U$zZM%loV#rzv0Aw_w*BK}CKFkgMq{7$!}Qc5 z_M#dY>cs~v3WtqTH=sdGW5SOXii!^tSQf_&SaOR;-P)R8)}N#-}q4MpraWPcw33t3!1dP;w+%{m-Q*zd5)ZU_e}p$z_km~$6rFzBj0mYdP?@jp-xx}GkDB0nc|oEn;qJxZ`)}gmyNqye)~#zW4sYwo z(xn;@S?wNTPo{EJUIni%=XCe$+yZaNKx9|zWu5nx{kb7EQviB^mOXR>blF0~J!OCn zcCBV()7}dreLN+BMl)8jb#Y0Pe{2lv>3&u6WoQ=vkXtJbO_ASaFY)Nl-T2*I3bTHQ z26`j)M@?1GlnbU{R!wQt(St6L?-MSiFDI}x@qFZ(~7aGZ_4`5V;u(e4WBc-M*F zSSmAnSyNstj5SM3P>R7AJxS~KRjngl?~B^?x6CpDJwf`w)KtG#=qmw9MEwOLk0Of` zSAlpQ_ma+=o_kl{@ANE&g?(5tP-R{fp z{`L2{D^^d1R8tPk^3r$TNd|x}JdCQ|O-#=&3@lJDW1w_68uj%1fSV}G)23x>TvG)C z-Sq{|Qwja3m70pNJNVKxYLq>2`}oo+PNm-3He}=C+$8zO^0=H~n7BZ3_1@#vtar?* zLnTedTgwYjpRzIEm8wLrFUMpXTYm3r$LMs>Ol3WY_*1@QDW|-X8(t^cHbXtvvu}Pa zs0n16N`qBaj8x0&ur4ZZ=E&<8I;tT@2i>xTl6&Z{4p3y6$9b(GY&)QLL-Kyi3u4pBFNFF z{1rwxrW&1*yJBph8BqmYLkgnrQV}?8S+`xk(xc8fqu7b57!zNBe^rH9405c3+P{%jnZX0n)rX?Kl= z3XKVdMhhvW!oBb@=|aw@?Cg1AQY19hQmV>sw53r^*N$l!uzU%t|n;HSI*BjA;>4h@DqnX4PB-1xUE7) zrEmVAb5Cg~G(J=^21%m%`g^Xn2k1?4Qvc^wo;?SLYeiSDZp*LFnG(SfUy2sO#B?e+wSnZaU2>Lw1>nbbcql4 zDfW-#A=+FJkP$EB0kMLM%CG2drYRuc_>L{Y)7(wXnTA6zVjy)1N(33N=iQo%md>Qu5NC9h}FeK z2UBI7pj0N#$lB2J4$z|4`W8;4v}8QAKHdtcKSpE(HMHcGb$N2G#KjyUUCCB6RQQrK zIO-w^Wcx@B*+d5-aX;MKF8d4j)6PMp-%e?XuY`cn@;q&oWA{JT={ZG>y2xx1HZ8I( z{|Ft9j?1h;sr-m2E(Sa~7hRMO3i%$AHJ;f@X=zKLL6O@rpmIIPbta0mrfm_@{71L+OI^ZDqr^sgDbuqK(a7Y2ps zTvzSeQg%0d7VeaROwb*kd<)+GCQ4ze^(Z&lYwyb(L)yCA-sV>xbvucEAG3|mDtG64 z-rQfur{~k5Cky}a$b7^kZN#u5U3rZns$Y+zM~0<(eHZYRejru<&bAIu%iVVQ3*itt zyamw^_ORKqez7jA>n5a%x7s3>;Xuq_Sb#0MJ(0YE79YvDfGWslivF&hAZ8GWp+jRq zW?e8!55>-N1cvX}{J2kM7`{{2nKjaSnZMKWvov)78i(=Q&OZ`=@VAJbWK4G@uE9V@;2sbuzcl5ev&!Ywjw8y21bsJ0Sf~P zE$Xc0X5d74aKEzaME(LDjgz`fIoQM}pF8<9ajyK%ob+TyV!$U}8d%rYs8}RhB*Q?U z*lTqWBoGME&-#YwiA#hq*oOPpA2n-SVme z%JU=;_6QwaUEYF;36_X2v~t#4pM%=n^6#}dO$;oDyhlN=@m59g;6TQvyE79PMXx)+ ze}eyNP&Ro*{aXYjr+<|c<=pqfeI=|LVjqd^-fUsVju&UFF5++nyVoB7@0EEC=KEpE zfrP;STeK;Jr>!1848N*~Ru?t#dQ&ph6+Gy-N$qF3uV6@jo$akb&}1nZ zxd0$p;MjVYW9VXd3W67VkXV{Xg5xt2j}Wg0sKK%7WYgPo!57n%l|Mw>;iRRZT8iM~ z!f2n6L@JOl$VRpAshWk-FXc59c1;@GzY@)h=Us{5C==Cp--<%5S38p&f$!(ehoEdl z6Wsva!VYOsm?4!mZcEU0W4z?=C89FAvb;Ms+@l!u)J*Y3Xl)S#6?Mq&l3DiXYv}y8nMLb|M zo{|<#Q)L`1jg#(lg< z;!TyD&l&tTgb5{+-!vC1+;7G?G;)$emk^}!mAzidg+wy=b4FAI73jC85}KWTJ$%9Z z{gy)y9nlu%<{zi)YL`}Sq0lA0qjE2Yf;0H9cEX1Gw^KA0OLI$q-o;;0>itd9`{ehC z%S2&&#__%JstYQ9+#*J*s!MFK(|p#&@X;$}g2%Dd@gNYG3|0o_jx!F*G}Zi8@RdW+ z6M+Ug%@1I3qu3dR2+9V6Q0@esy&c;}SA*EKU$>OW9`o4+4gy&6m(-U1yMqiY7F%6? zIQ-q*DiA2}va^A~3$pY?FhD;?he|u0(E^uIAP_Y^dy~`YBNUXPHv8&i2{L<-olxr- zp}_caQgoqg2fDtyY6={eA7|YIiXA{Qf|wRxL#f|Uji^NFM^F;D%%chPy9%8sB+0=d zxvGlD!?c1piN)~ybdM%seRjG)aVC=nx^M`d!vL;1lfOMUku0TD?U|?kPR!!0bt;|u)4vQcf$hLEPyk6@J>|ZK5BL`Ldz_CG|Iw0+ zg$0jwsGl^^f?Mb_Ka()nvQ&E_-yQXdr^E;v|^xz}M8;+gRE*FV% zrAglUv4C4+a0$}^sQ>*R(zXI*vbwseeUI|_m9#)yyQyLhLc=~G8_%Qm+35H$OFX^? zQC(u$8RaBD`{*tMtlcRgmZ02vkKX&@oJazPyec#9eryA>d3VQ`}F zdvFSgcJI0hv^<4Bbx8@h|CG}@iG!xNTaNA~32vdC0 zCv<|%Jr@-v(FU`wgc}5pC6F)T-56CWGP7%I{cgY$M-;s9%oY0PL8 zQduTA>V0J#s5)6d*?9@+xad3hhk5ZsyZR(Cmttaii)fnj zeiDaywn!fH7ax?QzqkSN3h=p}7uBjWvj_bgKi|`^b$Teu#wMr95jxrb6x##T_yD%~u6tG$)UK20vC6 zHid-oS?hhnhDleYP@54mRaI+EvejoG+e*|)425hkY!GCK&#w1dtcGsn_*!N}ucf;iEs(x-0KsaFhegN>V?x!Eg@myb7TwGjVS4-2<9lth5p1uw@NWb%yyWCpo z%gw0H=%O4}B~@DAn;pjlf4tVs4}inJ@3wUR+@SsB{*(&*7gBGc>+#h=iJ;x)PL!1k z9&cZj+Wec69UPab-Ep(6j^3F_zZG(D83IBLCY>)|0L^%xG(T3EtIQIPHq#&_ukHDE zX1iUk>5WqCm_H>10m-s!?325iwY8!qXi{(cr>)7kG?Poc%@nrXDymRy1n4W<*~}J^ zd488Ka&!HGc?4lPT8~~G_GMkC+35xd2vR@0nQf3A-cV0Bc4BD)$bzibSfh=@j1X6j z$j@6ssB;?Pe|wR2u=kBqf_8OnhkA8Zx6x7{!~wYUz(n69UxV`a&_{te{x@&ld=q|7j#+*swe3y z`~BMLaNV6tPv?!+jNapif;H#Q0p6(>_s>d=_jSPd{e#!fS>9fMM8j~IRr zDEPQFeKqBS14h$?rUCk&uA0LG-1yCFH3ubOvH6Zj@6jou^whI-quKW3fk}z3rY>=I zFx;T$cHH9xsQ8dND-{42ircHN8W^>a+6J{!3jtN46R~@T-?MyI$3v^ z2PnSVq&pxI2yv}=Xq>H=>%TUcBe21)jwS3+lr+q^zFy z(l*fTtISOBad;JToxWoRcM@Zrxv=|fdlOKmrjzr4uPj`PyYUDVHPo0``~}DwXEb|a zH1%uR)J>hCyQ*TLT(~Q59LE_85}P~!Xf}9Sdt@X!3v@vdTWm55nJePA3RMT*m#LpG z{LGR{8nfg3c6r6Kotkh_t^Eu8xTydNn{o7!p+*$#TU#+}9DXaz#H)uAI>Y3~Bt>5% z0D5)(mwko!B&~?=IhoR+;Ra(ji3|6OX)3z-3(S58@#L+h*BHYL+4q8|?JE3YGeL|% zNy9e}E>pAc0I11Cbq|?<7@oY-Q)ey!&R;b;lU{Q>vYGn!Y3Cofc4s}%WbJ(#r( z590>sMlK^N`6~909Lwq%MRZ-2b{C+hQWXI)7#DJ0k7@l6K{et6?)TO<2&4%<#oo6O zUUu2O@%2TyH7CCb*8}$UKuLVlWuL4yvqYilmH8tlrSScWwb)&)(ADq{k)AoSr0h>; zeg_4%B4wTdoFqj-&%Ox`z=NgSY2*S}=X#FMG@-DvZ)*n5$;ov0E9B3$|5_?pqk|sL z$H#Z%G<9@?LlUiT@;b&KAKUIT-5*=f4wAd=9&HUo=*FALzVt4^VtFXRn|IVUko4e*bz-EoEnB7D zb|OCJwO*mE`Xtnv>9M4B-ODkh=q6grikK;&H+_)@iH-_gUa-KVKqryTfet5C$xzsk zRL6Mg=G3Jg+>v&gh4;v2YB=2jpgK6Te5AA&M^^0N3_>BkXDv725U&ew0q{e~rT7cP zKu4cm++Z6>c|4!N0G&)Z*?9